25
let clientModuleError;
26
let webpackMap;
27
let Stream;
28
+let FlightReact;
29
let React;
29
-let ReactDOM;
30
+let FlightReactDOM;
31
let ReactDOMClient;
32
let ReactServerDOMServer;
33
let ReactServerDOMClient;
38
39
describe('ReactFlightDOM', () => {
40
beforeEach(() => {
41
+ // For this first reset we are going to load the dom-node version of react-server-dom-webpack/server
42
+ // This can be thought of as essentially being the React Server Components scope with react-server
43
+ // condition
44
jest.resetModules();
45
46
JSDOM = require('jsdom').JSDOM;
49
jest.mock('react-server-dom-webpack/server', () =>
50
require('react-server-dom-webpack/server.node.unbundled'),
51
);
52
+ jest.mock('react', () => require('react/react.shared-subset'));
53
49
- ReactServerDOMClient = require('react-server-dom-webpack/client');
50
-
51
- act = require('internal-test-utils').act;
54
const WebpackMock = require('./utils/WebpackMock');
55
clientExports = WebpackMock.clientExports;
56
clientModuleError = WebpackMock.clientModuleError;
57
webpackMap = WebpackMock.webpackMap;
58
59
+ ReactServerDOMServer = require('react-server-dom-webpack/server');
60
+ FlightReact = require('react');
61
+ FlightReactDOM = require('react-dom');
62
+
63
+ // This reset is to load modules for the SSR/Browser scope.
64
+ jest.unmock('react-server-dom-webpack/server');
65
+ jest.unmock('react');
66
+ jest.resetModules();
67
+ act = require('internal-test-utils').act;
68
Stream = require('stream');
69
React = require('react');
59
- ReactDOM = require('react-dom');
60
- ReactDOMFizzServer = require('react-dom/server.node');
70
use = React.use;
71
Suspense = React.Suspense;
72
ReactDOMClient = require('react-dom/client');
64
- ReactServerDOMServer = require('react-server-dom-webpack/server.node.unbundled');
73
+ ReactDOMFizzServer = require('react-dom/server.node');
74
+ ReactServerDOMClient = require('react-server-dom-webpack/client');
75
76
ErrorBoundary = class extends React.Component {
77
state = {hasError: false, error: null};
495
const AsyncModuleRef = clientExports(AsyncModule);
496
497
function ServerComponent() {
488
- const text = use(AsyncModuleRef);
498
+ const text = FlightReact.use(AsyncModuleRef);
499
return <p>{text}</p>;
500
}
501
1215
const ClientComponent = clientExports(Component);
1216
1217
async function ServerComponent() {
1208
- ReactDOM.prefetchDNS('d before');
1209
- ReactDOM.preconnect('c before');
1210
- ReactDOM.preconnect('c2 before', {crossOrigin: 'anonymous'});
1211
- ReactDOM.preload('l before', {as: 'style'});
1212
- ReactDOM.preloadModule('lm before');
1213
- ReactDOM.preloadModule('lm2 before', {crossOrigin: 'anonymous'});
1214
- ReactDOM.preinit('i before', {as: 'script'});
1215
- ReactDOM.preinitModule('m before');
1216
- ReactDOM.preinitModule('m2 before', {crossOrigin: 'anonymous'});
1218
+ FlightReactDOM.prefetchDNS('d before');
1219
+ FlightReactDOM.preconnect('c before');
1220
+ FlightReactDOM.preconnect('c2 before', {crossOrigin: 'anonymous'});
1221
+ FlightReactDOM.preload('l before', {as: 'style'});
1222
+ FlightReactDOM.preloadModule('lm before');
1223
+ FlightReactDOM.preloadModule('lm2 before', {crossOrigin: 'anonymous'});
1224
+ FlightReactDOM.preinit('i before', {as: 'script'});
1225
+ FlightReactDOM.preinitModule('m before');
1226
+ FlightReactDOM.preinitModule('m2 before', {crossOrigin: 'anonymous'});
1227
await 1;
1218
- ReactDOM.prefetchDNS('d after');
1219
- ReactDOM.preconnect('c after');
1220
- ReactDOM.preconnect('c2 after', {crossOrigin: 'anonymous'});
1221
- ReactDOM.preload('l after', {as: 'style'});
1222
- ReactDOM.preloadModule('lm after');
1223
- ReactDOM.preloadModule('lm2 after', {crossOrigin: 'anonymous'});
1224
- ReactDOM.preinit('i after', {as: 'script'});
1225
- ReactDOM.preinitModule('m after');
1226
- ReactDOM.preinitModule('m2 after', {crossOrigin: 'anonymous'});
1228
+ FlightReactDOM.prefetchDNS('d after');
1229
+ FlightReactDOM.preconnect('c after');
1230
+ FlightReactDOM.preconnect('c2 after', {crossOrigin: 'anonymous'});
1231
+ FlightReactDOM.preload('l after', {as: 'style'});
1232
+ FlightReactDOM.preloadModule('lm after');
1233
+ FlightReactDOM.preloadModule('lm2 after', {crossOrigin: 'anonymous'});
1234
+ FlightReactDOM.preinit('i after', {as: 'script'});
1235
+ FlightReactDOM.preinitModule('m after');
1236
+ FlightReactDOM.preinitModule('m2 after', {crossOrigin: 'anonymous'});
1237
return <ClientComponent />;
1238
}
1239
1308
const ClientComponent = clientExports(Component);
1309
1310
async function ServerComponent() {
1301
- ReactDOM.prefetchDNS('d before');
1302
- ReactDOM.preconnect('c before');
1303
- ReactDOM.preconnect('c2 before', {crossOrigin: 'anonymous'});
1304
- ReactDOM.preload('l before', {as: 'style'});
1305
- ReactDOM.preloadModule('lm before');
1306
- ReactDOM.preloadModule('lm2 before', {crossOrigin: 'anonymous'});
1307
- ReactDOM.preinit('i before', {as: 'script'});
1308
- ReactDOM.preinitModule('m before');
1309
- ReactDOM.preinitModule('m2 before', {crossOrigin: 'anonymous'});
1311
+ FlightReactDOM.prefetchDNS('d before');
1312
+ FlightReactDOM.preconnect('c before');
1313
+ FlightReactDOM.preconnect('c2 before', {crossOrigin: 'anonymous'});
1314
+ FlightReactDOM.preload('l before', {as: 'style'});
1315
+ FlightReactDOM.preloadModule('lm before');
1316
+ FlightReactDOM.preloadModule('lm2 before', {crossOrigin: 'anonymous'});
1317
+ FlightReactDOM.preinit('i before', {as: 'script'});
1318
+ FlightReactDOM.preinitModule('m before');
1319
+ FlightReactDOM.preinitModule('m2 before', {crossOrigin: 'anonymous'});
1320
await 1;
1311
- ReactDOM.prefetchDNS('d after');
1312
- ReactDOM.preconnect('c after');
1313
- ReactDOM.preconnect('c2 after', {crossOrigin: 'anonymous'});
1314
- ReactDOM.preload('l after', {as: 'style'});
1315
- ReactDOM.preloadModule('lm after');
1316
- ReactDOM.preloadModule('lm2 after', {crossOrigin: 'anonymous'});
1317
- ReactDOM.preinit('i after', {as: 'script'});
1318
- ReactDOM.preinitModule('m after');
1319
- ReactDOM.preinitModule('m2 after', {crossOrigin: 'anonymous'});
1321
+ FlightReactDOM.prefetchDNS('d after');
1322
+ FlightReactDOM.preconnect('c after');
1323
+ FlightReactDOM.preconnect('c2 after', {crossOrigin: 'anonymous'});
1324
+ FlightReactDOM.preload('l after', {as: 'style'});
1325
+ FlightReactDOM.preloadModule('lm after');
1326
+ FlightReactDOM.preloadModule('lm2 after', {crossOrigin: 'anonymous'});
1327
+ FlightReactDOM.preinit('i after', {as: 'script'});
1328
+ FlightReactDOM.preinitModule('m after');
1329
+ FlightReactDOM.preinitModule('m2 after', {crossOrigin: 'anonymous'});
1330
return <ClientComponent />;
1331
}
1332
1416
const ClientComponent = clientExports(Component);
1417
1418
async function ServerComponent1() {
1409
- ReactDOM.preload('before1', {as: 'style'});
1419
+ FlightReactDOM.preload('before1', {as: 'style'});
1420
await 1;
1411
- ReactDOM.preload('after1', {as: 'style'});
1421
+ FlightReactDOM.preload('after1', {as: 'style'});
1422
return <ClientComponent />;
1423
}
1424
1425
async function ServerComponent2() {
1416
- ReactDOM.preload('before2', {as: 'style'});
1426
+ FlightReactDOM.preload('before2', {as: 'style'});
1427
await 1;
1418
- ReactDOM.preload('after2', {as: 'style'});
1428
+ FlightReactDOM.preload('after2', {as: 'style'});
1429
return <ClientComponent />;
1430
}
1431
1516
const ClientComponent = clientExports(Component);
1517
1518
async function ServerComponent() {
1509
- ReactDOM.prefetchDNS('dns');
1510
- ReactDOM.preconnect('preconnect');
1511
- ReactDOM.preload('load', {as: 'style'});
1512
- ReactDOM.preinit('init', {as: 'script'});
1519
+ FlightReactDOM.prefetchDNS('dns');
1520
+ FlightReactDOM.preconnect('preconnect');
1521
+ FlightReactDOM.preload('load', {as: 'style'});
1522
+ FlightReactDOM.preinit('init', {as: 'script'});
1523
// again but vary preconnect to demonstrate crossOrigin participates in the key
1514
- ReactDOM.prefetchDNS('dns');
1515
- ReactDOM.preconnect('preconnect', {crossOrigin: 'anonymous'});
1516
- ReactDOM.preload('load', {as: 'style'});
1517
- ReactDOM.preinit('init', {as: 'script'});
1524
+ FlightReactDOM.prefetchDNS('dns');
1525
+ FlightReactDOM.preconnect('preconnect', {crossOrigin: 'anonymous'});
1526
+ FlightReactDOM.preload('load', {as: 'style'});
1527
+ FlightReactDOM.preinit('init', {as: 'script'});
1528
await 1;
1529
// after an async point
1520
- ReactDOM.prefetchDNS('dns');
1521
- ReactDOM.preconnect('preconnect', {crossOrigin: 'use-credentials'});
1522
- ReactDOM.preload('load', {as: 'style'});
1523
- ReactDOM.preinit('init', {as: 'script'});
1530
+ FlightReactDOM.prefetchDNS('dns');
1531
+ FlightReactDOM.preconnect('preconnect', {crossOrigin: 'use-credentials'});
1532
+ FlightReactDOM.preload('load', {as: 'style'});
1533
+ FlightReactDOM.preinit('init', {as: 'script'});
1534
return <ClientComponent />;
1535
}
1536