mirror of
https://github.com/zebrajr/react.git
synced 2025-12-07 12:20:38 +01:00
* ReactFiberReconciler -> ReactFiberReconciler.old * Set up infra for react-reconciler fork We're planning to land some significant refactors of the reconciler. We want to be able to gradually roll out the new implementation side-by- side with the existing one. So we'll create a short lived fork of the react-reconciler package. Once the new implementation has stabilized, we'll delete the old implementation and promote the new one. This means, for as long as the fork exists, we'll need to maintain two separate implementations. This sounds painful, but since the forks will still be largely the same, most changes will not require two separate implementations. In practice, you'll implement the change in the old fork and then copy paste it to the new one. This commit only sets up the build and testing infrastructure. It does not actually fork any modules. I'll do that in subsequent PRs. The forked version of the reconciler will be used to build a special version of React DOM. I've called this build ReactDOMForked. It's only built for www; there's no open source version. The new reconciler is disabled by default. It's enabled in the `yarn test-www-variant` command. The reconciler fork isn't really related to the "variant" feature of the www builds, but I'm piggy backing on that concept to avoid having to add yet another testing dimension.
99 lines
3.5 KiB
JavaScript
99 lines
3.5 KiB
JavaScript
'use strict';
|
|
|
|
const inlinedHostConfigs = require('../shared/inlinedHostConfigs');
|
|
|
|
jest.mock('react-reconciler/src/ReactFiberReconciler', () => {
|
|
return require.requireActual(
|
|
__VARIANT__
|
|
? // TODO: Update this to point to the new module, once it exists
|
|
'react-reconciler/src/ReactFiberReconciler.old'
|
|
: 'react-reconciler/src/ReactFiberReconciler.old'
|
|
);
|
|
});
|
|
|
|
// When testing the custom renderer code path through `react-reconciler`,
|
|
// turn the export into a function, and use the argument as host config.
|
|
const shimHostConfigPath = 'react-reconciler/src/ReactFiberHostConfig';
|
|
jest.mock('react-reconciler', () => {
|
|
return config => {
|
|
jest.mock(shimHostConfigPath, () => config);
|
|
return require.requireActual('react-reconciler');
|
|
};
|
|
});
|
|
const shimServerStreamConfigPath = 'react-server/src/ReactServerStreamConfig';
|
|
const shimServerFormatConfigPath = 'react-server/src/ReactServerFormatConfig';
|
|
const shimFlightServerConfigPath = 'react-server/src/ReactFlightServerConfig';
|
|
jest.mock('react-server', () => {
|
|
return config => {
|
|
jest.mock(shimServerStreamConfigPath, () => config);
|
|
jest.mock(shimServerFormatConfigPath, () => config);
|
|
return require.requireActual('react-server');
|
|
};
|
|
});
|
|
jest.mock('react-server/flight', () => {
|
|
return config => {
|
|
jest.mock(shimServerStreamConfigPath, () => config);
|
|
jest.mock(shimServerFormatConfigPath, () => config);
|
|
jest.mock(shimFlightServerConfigPath, () =>
|
|
require.requireActual(
|
|
'react-server/src/forks/ReactFlightServerConfig.custom'
|
|
)
|
|
);
|
|
return require.requireActual('react-server/flight');
|
|
};
|
|
});
|
|
const shimFlightClientHostConfigPath =
|
|
'react-client/src/ReactFlightClientHostConfig';
|
|
jest.mock('react-client/flight', () => {
|
|
return config => {
|
|
jest.mock(shimFlightClientHostConfigPath, () => config);
|
|
return require.requireActual('react-client/flight');
|
|
};
|
|
});
|
|
|
|
const configPaths = [
|
|
'react-reconciler/src/ReactFiberHostConfig',
|
|
'react-client/src/ReactFlightClientHostConfig',
|
|
'react-server/src/ReactServerStreamConfig',
|
|
'react-server/src/ReactServerFormatConfig',
|
|
'react-server/src/ReactFlightServerConfig',
|
|
];
|
|
|
|
function mockAllConfigs(rendererInfo) {
|
|
configPaths.forEach(path => {
|
|
// We want the reconciler to pick up the host config for this renderer.
|
|
jest.mock(path, () => {
|
|
let idx = path.lastIndexOf('/');
|
|
let forkPath = path.substr(0, idx) + '/forks' + path.substr(idx);
|
|
return require.requireActual(`${forkPath}.${rendererInfo.shortName}.js`);
|
|
});
|
|
});
|
|
}
|
|
|
|
// But for inlined host configs (such as React DOM, Native, etc), we
|
|
// mock their named entry points to establish a host config mapping.
|
|
inlinedHostConfigs.forEach(rendererInfo => {
|
|
if (rendererInfo.shortName === 'custom') {
|
|
// There is no inline entry point for the custom renderers.
|
|
// Instead, it's handled by the generic `react-reconciler` entry point above.
|
|
return;
|
|
}
|
|
rendererInfo.entryPoints.forEach(entryPoint => {
|
|
jest.mock(entryPoint, () => {
|
|
mockAllConfigs(rendererInfo);
|
|
return require.requireActual(entryPoint);
|
|
});
|
|
});
|
|
});
|
|
|
|
// Make it possible to import this module inside
|
|
// the React package itself.
|
|
jest.mock('shared/ReactSharedInternals', () =>
|
|
require.requireActual('react/src/ReactSharedInternals')
|
|
);
|
|
|
|
jest.mock('scheduler', () => require.requireActual('scheduler/unstable_mock'));
|
|
jest.mock('scheduler/src/SchedulerHostConfig', () =>
|
|
require.requireActual('scheduler/src/forks/SchedulerHostConfig.mock.js')
|
|
);
|