Skip to content

Commit

Permalink
[Flight] Move Flight DOM to a Webpack Specific Package (#17372)
Browse files Browse the repository at this point in the history
* Move Flight DOM to Webpack Specific Packagee

We'll have Webpack specific coupling so we need to ensure that it can be
versioned separately from various Webpack versions. We'll also have builds
for other bundlers in the future.

* Move to peerDep

* Move DOM Flight Tests

* Merge ReactFlightIntegration into ReactFlightDOM

This was an integration test. We can add to it.

* Fix fixture paths
  • Loading branch information
sebmarkbage committed Nov 15, 2019
1 parent 532810a commit 39dbb14
Show file tree
Hide file tree
Showing 33 changed files with 177 additions and 148 deletions.
4 changes: 2 additions & 2 deletions fixtures/flight-browser/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ <h1>Flight Example</h1>
<script src="../../build/dist/react.development.js"></script>
<script src="../../build/dist/react-dom.development.js"></script>
<script src="../../build/dist/react-dom-server.browser.development.js"></script>
<script src="../../build/dist/react-dom-unstable-flight-server.browser.development.js"></script>
<script src="../../build/dist/react-dom-unstable-flight-client.development.js"></script>
<script src="../../build/dist/react-flight-dom-webpack-server.browser.development.js"></script>
<script src="../../build/dist/react-flight-dom-webpack.development.js"></script>
<script src="https://unpkg.com/babel-standalone@6/babel.js"></script>
<script type="text/babel">
let Suspense = React.Suspense;
Expand Down
2 changes: 1 addition & 1 deletion fixtures/flight/server/handler.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
'use strict';

const ReactFlightDOMServer = require('react-dom/unstable-flight-server');
const ReactFlightDOMServer = require('react-flight-dom-webpack/server');
const React = require('react');
const Stream = require('stream');

Expand Down
2 changes: 1 addition & 1 deletion fixtures/flight/src/index.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import React from 'react';
import ReactDOM from 'react-dom';
import ReactFlightDOMClient from 'react-dom/unstable-flight-client';
import ReactFlightDOMClient from 'react-flight-dom-webpack';
import App from './App';

let data = ReactFlightDOMClient.readFromFetch(fetch('http://localhost:3001'));
Expand Down
7 changes: 0 additions & 7 deletions packages/react-dom/npm/unstable-flight-client.js

This file was deleted.

7 changes: 0 additions & 7 deletions packages/react-dom/npm/unstable-flight-server.browser.js

This file was deleted.

3 changes: 0 additions & 3 deletions packages/react-dom/npm/unstable-flight-server.js

This file was deleted.

7 changes: 0 additions & 7 deletions packages/react-dom/npm/unstable-flight-server.node.js

This file was deleted.

7 changes: 1 addition & 6 deletions packages/react-dom/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -39,18 +39,13 @@
"unstable-fizz.js",
"unstable-fizz.browser.js",
"unstable-fizz.node.js",
"unstable-flight-client.js",
"unstable-flight-server.js",
"unstable-flight-server.browser.js",
"unstable-flight-server.node.js",
"unstable-native-dependencies.js",
"cjs/",
"umd/"
],
"browser": {
"./server.js": "./server.browser.js",
"./unstable-fizz.js": "./unstable-fizz.browser.js",
"./unstable-flight-server.js": "./unstable-flight-server.browser.js"
"./unstable-fizz.js": "./unstable-fizz.browser.js"
},
"browserify": {
"transform": [
Expand Down
92 changes: 0 additions & 92 deletions packages/react-dom/src/__tests__/ReactFlightDOM-test.js

This file was deleted.

5 changes: 5 additions & 0 deletions packages/react-flight-dom-webpack/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# react-flight-dom-webpack

Experimental React Flight bindings for DOM using Webpack.

**Use it at your own risk.**
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

'use strict';

const ReactFlightDOMClient = require('./src/client/flight/ReactFlightDOMClient');
const ReactFlightDOMClient = require('./src/ReactFlightDOMClient');

// TODO: decide on the top-level export form.
// This is hacky but makes it work with both Rollup and Jest
Expand Down
7 changes: 7 additions & 0 deletions packages/react-flight-dom-webpack/npm/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
'use strict';

if (process.env.NODE_ENV === 'production') {
module.exports = require('./cjs/react-flight-dom-webpack.production.min.js');
} else {
module.exports = require('./cjs/react-flight-dom-webpack.development.js');
}
7 changes: 7 additions & 0 deletions packages/react-flight-dom-webpack/npm/server.browser.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
'use strict';

if (process.env.NODE_ENV === 'production') {
module.exports = require('./cjs/react-flight-dom-webpack-server.browser.production.min.js');
} else {
module.exports = require('./cjs/react-flight-dom-webpack-server.browser.development.js');
}
3 changes: 3 additions & 0 deletions packages/react-flight-dom-webpack/npm/server.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
'use strict';

module.exports = require('./server.node');
7 changes: 7 additions & 0 deletions packages/react-flight-dom-webpack/npm/server.node.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
'use strict';

if (process.env.NODE_ENV === 'production') {
module.exports = require('./cjs/react-flight-dom-webpack-server.node.production.min.js');
} else {
module.exports = require('./cjs/react-flight-dom-webpack-server.node.development.js');
}
48 changes: 48 additions & 0 deletions packages/react-flight-dom-webpack/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
{
"name": "react-flight-dom-webpack",
"description": "React Flight bindings for DOM using Webpack.",
"version": "0.1.0",
"private": true,
"keywords": [
"react"
],
"homepage": "https://reactjs.org/",
"bugs": "https://github.com/facebook/react/issues",
"license": "MIT",
"files": [
"LICENSE",
"README.md",
"index.js",
"server.js",
"server.browser.js",
"server.node.js",
"cjs/",
"umd/"
],
"browser": {
"./server.js": "./server.browser.js"
},
"main": "index.js",
"repository": {
"type" : "git",
"url" : "https://github.com/facebook/react.git",
"directory": "packages/react-flight-dom-webpack"
},
"engines": {
"node": ">=0.10.0"
},
"peerDependencies": {
"react": "^16.0.0",
"react-dom": "^16.0.0",
"webpack": "^4.41.2"
},
"dependencies": {
"loose-envify": "^1.1.0",
"object-assign": "^4.1.1"
},
"browserify": {
"transform": [
"loose-envify"
]
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

'use strict';

const ReactFlightDOMServerBrowser = require('./src/server/flight/ReactFlightDOMServerBrowser');
const ReactFlightDOMServerBrowser = require('./src/ReactFlightDOMServerBrowser');

// TODO: decide on the top-level export form.
// This is hacky but makes it work with both Rollup and Jest
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,4 @@

'use strict';

module.exports = require('./unstable-flight-server.node');
module.exports = require('./server.node');
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

'use strict';

const ReactFlightDOMServerNode = require('./src/server/flight/ReactFlightDOMServerNode');
const ReactFlightDOMServerNode = require('./src/ReactFlightDOMServerNode');

// TODO: decide on the top-level export form.
// This is hacky but makes it work with both Rollup and Jest
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,15 @@ let ReactDOM;
let ReactFlightDOMServer;
let ReactFlightDOMClient;

describe('ReactFlightIntegration', () => {
describe('ReactFlightDOM', () => {
beforeEach(() => {
jest.resetModules();
act = require('react-dom/test-utils').act;
Stream = require('stream');
React = require('react');
ReactDOM = require('react-dom');
ReactFlightDOMServer = require('react-dom/unstable-flight-server');
ReactFlightDOMClient = require('react-dom/unstable-flight-client');
ReactFlightDOMServer = require('react-flight-dom-webpack/server');
ReactFlightDOMClient = require('react-flight-dom-webpack');
});

function getTestStream() {
Expand All @@ -53,6 +53,50 @@ describe('ReactFlightIntegration', () => {
};
}

async function waitForSuspense(fn) {
while (true) {
try {
return fn();
} catch (promise) {
if (typeof promise.then === 'function') {
await promise;
} else {
throw promise;
}
}
}
}

it('should resolve HTML using Node streams', async () => {
function Text({children}) {
return <span>{children}</span>;
}
function HTML() {
return (
<div>
<Text>hello</Text>
<Text>world</Text>
</div>
);
}

function App() {
let model = {
html: <HTML />,
};
return model;
}

let {writable, readable} = getTestStream();
ReactFlightDOMServer.pipeToNodeWritable(<App />, writable);
let result = ReactFlightDOMClient.readFromReadableStream(readable);
await waitForSuspense(() => {
expect(result.model).toEqual({
html: '<div><span>hello</span><span>world</span></div>',
});
});
});

it.experimental('should resolve the root', async () => {
let {Suspense} = React;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ describe('ReactFlightDOMBrowser', () => {
beforeEach(() => {
jest.resetModules();
React = require('react');
ReactFlightDOMServer = require('react-dom/unstable-flight-server.browser');
ReactFlightDOMClient = require('react-dom/unstable-flight-client');
ReactFlightDOMServer = require('react-flight-dom-webpack/server.browser');
ReactFlightDOMClient = require('react-flight-dom-webpack');
});

async function waitForSuspense(fn) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,4 @@
* @flow
*/

export * from 'react-dom/src/client/flight/ReactFlightDOMHostConfig';
export * from 'react-flight/src/ReactFlightHostConfigBrowser';
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,4 @@
* @flow
*/

export * from 'react-dom/src/client/flight/ReactFlightDOMHostConfig';
export * from 'react-flight/src/ReactFlightHostConfigBrowser';
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,4 @@
* @flow
*/

export * from 'react-dom/src/server/ReactDOMServerFormatConfig';
export * from '../ReactDOMServerFormatConfig';
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,4 @@
* @flow
*/

export * from 'react-dom/src/server/ReactDOMServerFormatConfig';
export * from '../ReactDOMServerFormatConfig';

0 comments on commit 39dbb14

Please sign in to comment.