Skip to content

Commit

Permalink
Wire up DOM legacy build
Browse files Browse the repository at this point in the history
  • Loading branch information
sebmarkbage committed Apr 15, 2021
1 parent 91e6bad commit 917563e
Show file tree
Hide file tree
Showing 17 changed files with 388 additions and 5 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow
*/

export * from 'react-client/src/ReactFlightClientHostConfigBrowser';
export * from 'react-client/src/ReactFlightClientHostConfigStream';
export * from 'react-server-dom-webpack/src/ReactFlightClientWebpackBundlerConfig';
16 changes: 16 additions & 0 deletions packages/react-dom/server.browser.classic.fb.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow
*/

export {
renderToString,
renderToStaticMarkup,
renderToNodeStream,
renderToStaticNodeStream,
version,
} from './src/server/ReactDOMServerBrowser';
2 changes: 1 addition & 1 deletion packages/react-dom/server.browser.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,4 @@ export {
renderToNodeStream,
renderToStaticNodeStream,
version,
} from './src/server/ReactDOMServerBrowser';
} from './src/server/ReactDOMLegacyServerBrowser';
16 changes: 16 additions & 0 deletions packages/react-dom/server.browser.stable.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow
*/

export {
renderToString,
renderToStaticMarkup,
renderToNodeStream,
renderToStaticNodeStream,
version,
} from './src/server/ReactDOMServerBrowser';
17 changes: 17 additions & 0 deletions packages/react-dom/server.node.classic.fb.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow
*/

// For some reason Flow doesn't like export * in this file. I don't know why.
export {
renderToString,
renderToStaticMarkup,
renderToNodeStream,
renderToStaticNodeStream,
version,
} from './src/server/ReactDOMServerNode';
2 changes: 1 addition & 1 deletion packages/react-dom/server.node.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,4 @@ export {
renderToNodeStream,
renderToStaticNodeStream,
version,
} from './src/server/ReactDOMServerNode';
} from './src/server/ReactDOMLegacyServerNode';
17 changes: 17 additions & 0 deletions packages/react-dom/server.node.stable.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow
*/

// For some reason Flow doesn't like export * in this file. I don't know why.
export {
renderToString,
renderToStaticMarkup,
renderToNodeStream,
renderToStaticNodeStream,
version,
} from './src/server/ReactDOMServerNode';
97 changes: 97 additions & 0 deletions packages/react-dom/src/server/ReactDOMLegacyServerBrowser.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow
*/

import ReactVersion from 'shared/ReactVersion';
import invariant from 'shared/invariant';

import type {ReactNodeList} from 'shared/ReactTypes';

import {
createRequest,
startWork,
startFlowing,
abort,
} from 'react-server/src/ReactFizzServer';

import {
createResponseState,
createRootFormatContext,
} from './ReactDOMServerFormatConfig';

type ServerOptions = {
identifierPrefix?: string,
};

function onError() {
// Non-fatal errors are ignored.
}

function renderToString(
children: ReactNodeList,
options?: ServerOptions,
): string {
let didFatal = false;
let fatalError = null;
const result = [];
const destination = {
push(chunk) {
if (chunk) {
result.push(chunk);
}
return true;
},
destroy(error) {
didFatal = true;
fatalError = error;
},
};
const request = createRequest(
children,
destination,
createResponseState(options ? options.identifierPrefix : undefined),
createRootFormatContext(undefined),
Infinity,
onError,
undefined,
undefined,
);
startWork(request);
// If anything suspended and is still pending, we'll abort it before writing.
// That way we write only client-rendered boundaries from the start.
abort(request);
startFlowing(request);
if (didFatal) {
throw fatalError;
}
return result.join('');
}

function renderToNodeStream() {
invariant(
false,
'ReactDOMServer.renderToNodeStream(): The streaming API is not available ' +
'in the browser. Use ReactDOMServer.renderToString() instead.',
);
}

function renderToStaticNodeStream() {
invariant(
false,
'ReactDOMServer.renderToStaticNodeStream(): The streaming API is not available ' +
'in the browser. Use ReactDOMServer.renderToStaticMarkup() instead.',
);
}

export {
renderToString,
renderToString as renderToStaticMarkup,
renderToNodeStream,
renderToStaticNodeStream,
ReactVersion as version,
};
98 changes: 98 additions & 0 deletions packages/react-dom/src/server/ReactDOMLegacyServerNode.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow
*/

import type {ReactNodeList} from 'shared/ReactTypes';

import type {Request} from 'react-server/src/ReactFizzServer';

import {
createRequest,
startWork,
startFlowing,
abort,
} from 'react-server/src/ReactFizzServer';

import {
createResponseState,
createRootFormatContext,
} from './ReactDOMServerFormatConfig';

import {
version,
renderToString,
renderToStaticMarkup,
} from './ReactDOMLegacyServerBrowser';

import {Readable} from 'stream';

type ServerOptions = {
identifierPrefix?: string,
};

class ReactMarkupReadableStream extends Readable {
request: Request;
startedFlowing: boolean;
constructor() {
// Calls the stream.Readable(options) constructor. Consider exposing built-in
// features like highWaterMark in the future.
super({});
this.request = (null: any);
this.startedFlowing = false;
}

_destroy(err, callback) {
abort(this.request);
// $FlowFixMe: The type definition for the callback should allow undefined and null.
callback(err);
}

_read(size) {
if (this.startedFlowing) {
startFlowing(this.request);
}
}
}

function onError() {
// Non-fatal errors are ignored.
}

function renderToNodeStream(
children: ReactNodeList,
options?: ServerOptions,
): Readable {
function onCompleteAll() {
// We wait until everything has loaded before starting to write.
// That way we only end up with fully resolved HTML even if we suspend.
destination.startedFlowing = true;
startFlowing(request);
}
const destination = new ReactMarkupReadableStream();
const request = createRequest(
children,
destination,
createResponseState(options ? options.identifierPrefix : undefined),
createRootFormatContext(undefined),
Infinity,
onError,
onCompleteAll,
undefined,
);
destination.request = request;
startWork(request);
return destination;
}

export {
renderToString,
renderToStaticMarkup,
renderToNodeStream,
renderToNodeStream as renderToStaticNodeStream,
version,
};
51 changes: 51 additions & 0 deletions packages/react-dom/src/server/ReactDOMLegacyServerStreamConfig.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow
*/

export type Destination = {
push(chunk: string | null): boolean,
destroy(error: Error): mixed,
...
};

export type PrecomputedChunk = string;
export type Chunk = string;

export function scheduleWork(callback: () => void) {
callback();
}

export function flushBuffered(destination: Destination) {}

export function beginWriting(destination: Destination) {}

export function writeChunk(
destination: Destination,
chunk: Chunk | PrecomputedChunk,
): boolean {
return destination.push(chunk);
}

export function completeWriting(destination: Destination) {}

export function close(destination: Destination) {
destination.push(null);
}

export function stringToChunk(content: string): Chunk {
return content;
}

export function stringToPrecomputedChunk(content: string): PrecomputedChunk {
return content;
}

export function closeWithError(destination: Destination, error: mixed): void {
// $FlowFixMe: This is an Error object or the destination accepts other types.
destination.destroy(error);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow
*/

export * from 'react-dom/src/client/ReactDOMHostConfig';
2 changes: 1 addition & 1 deletion packages/react-server/src/ReactFizzServer.js
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ const BUFFERING = 0;
const FLOWING = 1;
const CLOSED = 2;

type Request = {
export opaque type Request = {
+destination: Destination,
+responseState: ResponseState,
+progressiveChunkSize: number,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow
*/

export * from '../ReactFlightServerConfigStream';
export * from 'react-server-dom-webpack/src/ReactFlightServerWebpackBundlerConfig';
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow
*/

export * from 'react-dom/src/server/ReactDOMServerFormatConfig';
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow
*/

export * from 'react-dom/src/server/ReactDOMLegacyServerStreamConfig';
Loading

0 comments on commit 917563e

Please sign in to comment.