'use strict'; const RELEASE_CHANNEL = process.env.RELEASE_CHANNEL; const __EXPERIMENTAL__ = typeof RELEASE_CHANNEL === 'string' ? RELEASE_CHANNEL === 'experimental' : true; const bundleTypes = { NODE_ES2015: 'NODE_ES2015', ESM_DEV: 'ESM_DEV', ESM_PROD: 'ESM_PROD', NODE_DEV: 'NODE_DEV', NODE_PROD: 'NODE_PROD', NODE_PROFILING: 'NODE_PROFILING', BUN_DEV: 'BUN_DEV', BUN_PROD: 'BUN_PROD', FB_WWW_DEV: 'FB_WWW_DEV', FB_WWW_PROD: 'FB_WWW_PROD', FB_WWW_PROFILING: 'FB_WWW_PROFILING', RN_OSS_DEV: 'RN_OSS_DEV', RN_OSS_PROD: 'RN_OSS_PROD', RN_OSS_PROFILING: 'RN_OSS_PROFILING', RN_FB_DEV: 'RN_FB_DEV', RN_FB_PROD: 'RN_FB_PROD', RN_FB_PROFILING: 'RN_FB_PROFILING', BROWSER_SCRIPT: 'BROWSER_SCRIPT' }; const { NODE_ES2015, ESM_DEV, ESM_PROD, NODE_DEV, NODE_PROD, NODE_PROFILING, BUN_DEV, BUN_PROD, FB_WWW_DEV, FB_WWW_PROD, FB_WWW_PROFILING, RN_OSS_DEV, RN_OSS_PROD, RN_OSS_PROFILING, RN_FB_DEV, RN_FB_PROD, RN_FB_PROFILING, BROWSER_SCRIPT } = bundleTypes; const moduleTypes = { // React ISOMORPHIC: 'ISOMORPHIC', // Individual renderers. They bundle the reconciler. (e.g. ReactDOM) RENDERER: 'RENDERER', // Helper packages that access specific renderer's internals. (e.g. TestUtils) RENDERER_UTILS: 'RENDERER_UTILS', // Standalone reconciler for third-party renderers. RECONCILER: 'RECONCILER' }; const { ISOMORPHIC, RENDERER, RENDERER_UTILS, RECONCILER } = moduleTypes; const bundles = [/******* Isomorphic *******/ { bundleTypes: [NODE_DEV, NODE_PROD, FB_WWW_DEV, FB_WWW_PROD, FB_WWW_PROFILING, RN_FB_DEV, RN_FB_PROD, RN_FB_PROFILING], moduleType: ISOMORPHIC, entry: 'react', global: 'React', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: true, externals: ['ReactNativeInternalFeatureFlags'] }, /******* Isomorphic Shared Subset *******/ { bundleTypes: [NODE_DEV, NODE_PROD], moduleType: ISOMORPHIC, entry: 'react/src/ReactServer.js', name: 'react.react-server', condition: 'react-server', global: 'React', minifyWithProdErrorCodes: true, wrapWithModuleBoundaries: false, externals: [] }, /******* React JSX Runtime *******/ { bundleTypes: [NODE_DEV, NODE_PROD, NODE_PROFILING, // TODO: use on WWW. RN_FB_DEV, RN_FB_PROD, RN_FB_PROFILING], moduleType: ISOMORPHIC, entry: 'react/jsx-runtime', global: 'JSXRuntime', minifyWithProdErrorCodes: true, wrapWithModuleBoundaries: false, externals: ['react', 'ReactNativeInternalFeatureFlags'] }, /******* Compiler Runtime *******/ { bundleTypes: [NODE_DEV, NODE_PROD, NODE_PROFILING], moduleType: ISOMORPHIC, entry: 'react/compiler-runtime', global: 'CompilerRuntime', minifyWithProdErrorCodes: true, wrapWithModuleBoundaries: false, externals: ['react'] }, /******* React JSX Runtime React Server *******/ { bundleTypes: [NODE_DEV, NODE_PROD], moduleType: ISOMORPHIC, entry: 'react/src/jsx/ReactJSXServer.js', name: 'react-jsx-runtime.react-server', condition: 'react-server', global: 'JSXRuntime', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: false, externals: ['react', 'ReactNativeInternalFeatureFlags'] }, /******* React JSX DEV Runtime *******/ { bundleTypes: [NODE_DEV, NODE_PROD, NODE_PROFILING, FB_WWW_DEV, FB_WWW_PROD, FB_WWW_PROFILING, RN_FB_DEV, RN_FB_PROD, RN_FB_PROFILING], moduleType: ISOMORPHIC, entry: 'react/jsx-dev-runtime', global: 'JSXDEVRuntime', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: false, externals: ['react', 'ReactNativeInternalFeatureFlags'] }, /******* React JSX DEV Runtime React Server *******/ { bundleTypes: [NODE_DEV, NODE_PROD], moduleType: ISOMORPHIC, entry: 'react/src/jsx/ReactJSXServer.js', name: 'react-jsx-dev-runtime.react-server', condition: 'react-server', global: 'JSXDEVRuntime', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: false, externals: ['react', 'ReactNativeInternalFeatureFlags'] }, /******* React DOM *******/ { bundleTypes: [NODE_DEV, NODE_PROD], moduleType: RENDERER, entry: 'react-dom', global: 'ReactDOM', minifyWithProdErrorCodes: true, wrapWithModuleBoundaries: true, externals: ['react'] }, /******* React DOM Client *******/ { bundleTypes: [NODE_DEV, NODE_PROD], moduleType: RENDERER, entry: 'react-dom/client', global: 'ReactDOM', minifyWithProdErrorCodes: true, wrapWithModuleBoundaries: true, externals: ['react', 'react-dom'] }, /******* React DOM Profiling (Client) *******/ { bundleTypes: [NODE_DEV, NODE_PROFILING], moduleType: RENDERER, entry: 'react-dom/profiling', global: 'ReactDOM', minifyWithProdErrorCodes: true, wrapWithModuleBoundaries: true, externals: ['react', 'react-dom'] }, /******* React DOM FB *******/ { bundleTypes: [FB_WWW_DEV, FB_WWW_PROD, FB_WWW_PROFILING], moduleType: RENDERER, entry: 'react-dom/src/ReactDOMFB.js', global: 'ReactDOM', minifyWithProdErrorCodes: true, wrapWithModuleBoundaries: true, externals: ['react'] }, /******* React DOM React Server *******/ { bundleTypes: [NODE_DEV, NODE_PROD], moduleType: RENDERER, entry: 'react-dom/src/ReactDOMReactServer.js', name: 'react-dom.react-server', condition: 'react-server', global: 'ReactDOM', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: false, externals: ['react'] }, /******* Test Utils *******/ { moduleType: RENDERER_UTILS, bundleTypes: [FB_WWW_DEV, NODE_DEV, NODE_PROD], entry: 'react-dom/test-utils', global: 'ReactTestUtils', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: false, externals: ['react', 'react-dom'] }, /******* React DOM - Testing *******/ { moduleType: RENDERER, bundleTypes: __EXPERIMENTAL__ ? [NODE_DEV, NODE_PROD] : [], entry: 'react-dom/unstable_testing', global: 'ReactDOMTesting', minifyWithProdErrorCodes: true, wrapWithModuleBoundaries: false, externals: ['react', 'react-dom'] }, /******* React DOM - www - Testing *******/ { moduleType: RENDERER, bundleTypes: [FB_WWW_DEV, FB_WWW_PROD], entry: 'react-dom/src/ReactDOMTestingFB.js', global: 'ReactDOMTesting', minifyWithProdErrorCodes: true, wrapWithModuleBoundaries: false, externals: ['react'] }, /******* React DOM Server *******/ { bundleTypes: [NODE_DEV, NODE_PROD, FB_WWW_DEV, FB_WWW_PROD], moduleType: RENDERER, entry: 'react-dom/src/server/ReactDOMLegacyServerBrowser.js', name: 'react-dom-server-legacy.browser', global: 'ReactDOMServer', minifyWithProdErrorCodes: true, wrapWithModuleBoundaries: false, externals: ['react', 'react-dom'], babel: opts => Object.assign({}, opts, { plugins: [['@babel/plugin-transform-classes' |> require.resolve(%), { loose: true }]] |> opts.plugins.concat(%) }) }, { bundleTypes: [NODE_DEV, NODE_PROD], moduleType: RENDERER, entry: 'react-dom/src/server/ReactDOMLegacyServerNode.js', name: 'react-dom-server-legacy.node', externals: ['react', 'stream', 'react-dom'], minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: false, babel: opts => Object.assign({}, opts, { plugins: [['@babel/plugin-transform-classes' |> require.resolve(%), { loose: true }]] |> opts.plugins.concat(%) }) }, /******* React DOM Fizz Server *******/ { bundleTypes: [NODE_DEV, NODE_PROD], moduleType: RENDERER, entry: 'react-dom/src/server/react-dom-server.browser.js', name: 'react-dom-server.browser', global: 'ReactDOMServer', minifyWithProdErrorCodes: true, wrapWithModuleBoundaries: false, externals: ['react', 'react-dom'] }, { bundleTypes: [NODE_DEV, NODE_PROD], moduleType: RENDERER, entry: 'react-dom/src/server/react-dom-server.node.js', name: 'react-dom-server.node', global: 'ReactDOMServer', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: false, externals: ['react', 'util', 'crypto', 'async_hooks', 'react-dom'] }, { bundleTypes: __EXPERIMENTAL__ ? [FB_WWW_DEV, FB_WWW_PROD] : [], moduleType: RENDERER, entry: 'react-server-dom-fb/src/ReactDOMServerFB.js', global: 'ReactDOMServerStreaming', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: false, externals: ['react', 'react-dom'] }, /******* React DOM Fizz Server Edge *******/ { bundleTypes: [NODE_DEV, NODE_PROD], moduleType: RENDERER, entry: 'react-dom/src/server/react-dom-server.edge.js', name: 'react-dom-server.edge', // 'node_modules/react/*.js', global: 'ReactDOMServer', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: false, externals: ['react', 'react-dom'] }, /******* React DOM Fizz Server Bun *******/ { bundleTypes: [BUN_DEV, BUN_PROD], moduleType: RENDERER, entry: 'react-dom/src/server/react-dom-server.bun.js', name: 'react-dom-server.bun', // 'node_modules/react/*.js', global: 'ReactDOMServer', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: false, externals: ['react', 'react-dom'] }, /******* React DOM Fizz Server External Runtime *******/ { bundleTypes: __EXPERIMENTAL__ ? [BROWSER_SCRIPT] : [], moduleType: RENDERER, entry: 'react-dom/unstable_server-external-runtime', outputPath: 'unstable_server-external-runtime.js', global: 'ReactDOMServerExternalRuntime', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: false, externals: [] }, /******* React Server DOM Webpack Server *******/ { bundleTypes: [NODE_DEV, NODE_PROD], moduleType: RENDERER, entry: 'react-server-dom-webpack/server.browser', condition: 'react-server', global: 'ReactServerDOMServer', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: false, externals: ['react', 'react-dom'] }, { bundleTypes: [NODE_DEV, NODE_PROD], moduleType: RENDERER, entry: 'react-server-dom-webpack/server.node', condition: 'react-server', global: 'ReactServerDOMServer', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: false, externals: ['react', 'util', 'crypto', 'async_hooks', 'react-dom'] }, { bundleTypes: [NODE_DEV, NODE_PROD], moduleType: RENDERER, entry: 'react-server-dom-webpack/server.node.unbundled', condition: 'react-server', global: 'ReactServerDOMServer', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: false, externals: ['react', 'util', 'crypto', 'async_hooks', 'react-dom'] }, { bundleTypes: [NODE_DEV, NODE_PROD], moduleType: RENDERER, entry: 'react-server-dom-webpack/server.edge', condition: 'react-server', global: 'ReactServerDOMServer', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: false, externals: ['react', 'util', 'crypto', 'async_hooks', 'react-dom'] }, /******* React Server DOM Webpack Client *******/ { bundleTypes: [NODE_DEV, NODE_PROD], moduleType: RENDERER, entry: 'react-server-dom-webpack/client.browser', global: 'ReactServerDOMClient', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: false, externals: ['react', 'react-dom'] }, { bundleTypes: [NODE_DEV, NODE_PROD], moduleType: RENDERER, entry: 'react-server-dom-webpack/client.node', global: 'ReactServerDOMClient', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: false, externals: ['react', 'react-dom', 'util', 'crypto'] }, { bundleTypes: [NODE_DEV, NODE_PROD], moduleType: RENDERER, entry: 'react-server-dom-webpack/client.node.unbundled', global: 'ReactServerDOMClient', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: false, externals: ['react', 'react-dom', 'util', 'crypto'] }, { bundleTypes: [NODE_DEV, NODE_PROD], moduleType: RENDERER, entry: 'react-server-dom-webpack/client.edge', global: 'ReactServerDOMClient', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: false, externals: ['react', 'react-dom'] }, /******* React Server DOM Webpack Plugin *******/ { bundleTypes: [NODE_ES2015], moduleType: RENDERER_UTILS, entry: 'react-server-dom-webpack/plugin', global: 'ReactServerWebpackPlugin', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: false, externals: ['fs', 'path', 'url', 'neo-async'] }, /******* React Server DOM Webpack Node.js Loader *******/ { bundleTypes: [ESM_PROD], moduleType: RENDERER_UTILS, entry: 'react-server-dom-webpack/node-loader', condition: 'react-server', global: 'ReactServerWebpackNodeLoader', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: false, externals: ['acorn'] }, /******* React Server DOM Webpack Node.js CommonJS Loader *******/ { bundleTypes: [NODE_ES2015], moduleType: RENDERER_UTILS, entry: 'react-server-dom-webpack/src/ReactFlightWebpackNodeRegister', name: 'react-server-dom-webpack-node-register', condition: 'react-server', global: 'ReactFlightWebpackNodeRegister', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: false, externals: ['url', 'module', 'react-server-dom-webpack/server'] }, /******* React Server DOM Turbopack Server *******/ { bundleTypes: [NODE_DEV, NODE_PROD], moduleType: RENDERER, entry: 'react-server-dom-turbopack/server.browser', condition: 'react-server', global: 'ReactServerDOMServer', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: false, externals: ['react', 'react-dom'] }, { bundleTypes: [NODE_DEV, NODE_PROD], moduleType: RENDERER, entry: 'react-server-dom-turbopack/server.node', condition: 'react-server', global: 'ReactServerDOMServer', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: false, externals: ['react', 'util', 'async_hooks', 'react-dom'] }, { bundleTypes: [NODE_DEV, NODE_PROD], moduleType: RENDERER, entry: 'react-server-dom-turbopack/server.node.unbundled', condition: 'react-server', global: 'ReactServerDOMServer', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: false, externals: ['react', 'util', 'async_hooks', 'react-dom'] }, { bundleTypes: [NODE_DEV, NODE_PROD], moduleType: RENDERER, entry: 'react-server-dom-turbopack/server.edge', condition: 'react-server', global: 'ReactServerDOMServer', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: false, externals: ['react', 'util', 'async_hooks', 'react-dom'] }, /******* React Server DOM Turbopack Client *******/ { bundleTypes: [NODE_DEV, NODE_PROD], moduleType: RENDERER, entry: 'react-server-dom-turbopack/client.browser', global: 'ReactServerDOMClient', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: false, externals: ['react', 'react-dom'] }, { bundleTypes: [NODE_DEV, NODE_PROD], moduleType: RENDERER, entry: 'react-server-dom-turbopack/client.node', global: 'ReactServerDOMClient', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: false, externals: ['react', 'react-dom', 'util'] }, { bundleTypes: [NODE_DEV, NODE_PROD], moduleType: RENDERER, entry: 'react-server-dom-turbopack/client.node.unbundled', global: 'ReactServerDOMClient', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: false, externals: ['react', 'react-dom', 'util'] }, { bundleTypes: [NODE_DEV, NODE_PROD], moduleType: RENDERER, entry: 'react-server-dom-turbopack/client.edge', global: 'ReactServerDOMClient', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: false, externals: ['react', 'react-dom'] }, /******* React Server DOM Turbopack Plugin *******/ // There is no plugin the moment because Turbopack // does not expose a plugin interface yet. /******* React Server DOM Turbopack Node.js Loader *******/ { bundleTypes: [ESM_PROD], moduleType: RENDERER_UTILS, entry: 'react-server-dom-turbopack/node-loader', condition: 'react-server', global: 'ReactServerTurbopackNodeLoader', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: false, externals: ['acorn'] }, /******* React Server DOM Turbopack Node.js CommonJS Loader *******/ { bundleTypes: [NODE_ES2015], moduleType: RENDERER_UTILS, entry: 'react-server-dom-turbopack/src/ReactFlightTurbopackNodeRegister', name: 'react-server-dom-turbopack-node-register', condition: 'react-server', global: 'ReactFlightWebpackNodeRegister', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: false, externals: ['url', 'module', 'react-server-dom-turbopack/server'] }, /******* React Server DOM ESM Server *******/ { bundleTypes: [NODE_DEV, NODE_PROD], moduleType: RENDERER, entry: 'react-server-dom-esm/server.node', condition: 'react-server', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: false, externals: ['react', 'util', 'crypto', 'async_hooks', 'react-dom'] }, /******* React Server DOM ESM Client *******/ { bundleTypes: [NODE_DEV, NODE_PROD, ESM_DEV, ESM_PROD], moduleType: RENDERER, entry: 'react-server-dom-esm/client.browser', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: false, externals: ['react', 'react-dom'] }, { bundleTypes: [NODE_DEV, NODE_PROD], moduleType: RENDERER, entry: 'react-server-dom-esm/client.node', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: false, externals: ['react', 'react-dom', 'util', 'crypto'] }, /******* React Server DOM ESM Node.js Loader *******/ { bundleTypes: [ESM_PROD], moduleType: RENDERER_UTILS, entry: 'react-server-dom-esm/node-loader', condition: 'react-server', global: 'ReactServerESMNodeLoader', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: false, externals: ['acorn'] }, /******* React Suspense Test Utils *******/ { bundleTypes: [NODE_ES2015], moduleType: RENDERER_UTILS, entry: 'react-suspense-test-utils', global: 'ReactSuspenseTestUtils', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: false, externals: ['react'] }, /******* React ART *******/ { bundleTypes: [NODE_DEV, NODE_PROD, FB_WWW_DEV, FB_WWW_PROD], moduleType: RENDERER, entry: 'react-art', global: 'ReactART', externals: ['react'], minifyWithProdErrorCodes: true, wrapWithModuleBoundaries: true, babel: opts => Object.assign({}, opts, { // Include JSX presets: ['@babel/preset-react' |> require.resolve(%), '@babel/preset-flow' |> require.resolve(%)] |> opts.presets.concat(%), plugins: [['@babel/plugin-transform-classes' |> require.resolve(%), { loose: true }]] |> opts.plugins.concat(%) }) }, /******* React Native *******/ { bundleTypes: __EXPERIMENTAL__ ? [] : [RN_FB_DEV, RN_FB_PROD, RN_FB_PROFILING], moduleType: RENDERER, entry: 'react-native-renderer', global: 'ReactNativeRenderer', externals: ['react-native', 'ReactNativeInternalFeatureFlags'], minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: true, babel: opts => Object.assign({}, opts, { plugins: [['@babel/plugin-transform-classes' |> require.resolve(%), { loose: true }]] |> opts.plugins.concat(%) }) }, { bundleTypes: [RN_OSS_DEV, RN_OSS_PROD, RN_OSS_PROFILING], moduleType: RENDERER, entry: 'react-native-renderer', global: 'ReactNativeRenderer', externals: ['react-native'], minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: true, babel: opts => Object.assign({}, opts, { plugins: [['@babel/plugin-transform-classes' |> require.resolve(%), { loose: true }]] |> opts.plugins.concat(%) }) }, /******* React Native Fabric *******/ { bundleTypes: __EXPERIMENTAL__ ? [] : [RN_FB_DEV, RN_FB_PROD, RN_FB_PROFILING], moduleType: RENDERER, entry: 'react-native-renderer/fabric', global: 'ReactFabric', externals: ['react-native', 'ReactNativeInternalFeatureFlags'], minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: true, babel: opts => Object.assign({}, opts, { plugins: [['@babel/plugin-transform-classes' |> require.resolve(%), { loose: true }]] |> opts.plugins.concat(%) }) }, { bundleTypes: [RN_OSS_DEV, RN_OSS_PROD, RN_OSS_PROFILING], moduleType: RENDERER, entry: 'react-native-renderer/fabric', global: 'ReactFabric', externals: ['react-native'], minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: true, babel: opts => Object.assign({}, opts, { plugins: [['@babel/plugin-transform-classes' |> require.resolve(%), { loose: true }]] |> opts.plugins.concat(%) }) }, /******* React Test Renderer *******/ { bundleTypes: [FB_WWW_DEV, NODE_DEV, NODE_PROD, RN_FB_DEV, RN_FB_PROD, RN_FB_PROFILING], moduleType: RENDERER, entry: 'react-test-renderer', global: 'ReactTestRenderer', externals: ['react', 'scheduler', 'scheduler/unstable_mock', 'ReactNativeInternalFeatureFlags'], minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: false, babel: opts => Object.assign({}, opts, { plugins: [['@babel/plugin-transform-classes' |> require.resolve(%), { loose: true }]] |> opts.plugins.concat(%) }) }, /******* React Noop Renderer (used for tests) *******/ { bundleTypes: [NODE_DEV, NODE_PROD], moduleType: RENDERER, entry: 'react-noop-renderer', global: 'ReactNoopRenderer', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: false, externals: ['react', 'scheduler', 'scheduler/unstable_mock', 'expect'] }, /******* React Noop Persistent Renderer (used for tests) *******/ { bundleTypes: [NODE_DEV, NODE_PROD], moduleType: RENDERER, entry: 'react-noop-renderer/persistent', global: 'ReactNoopRendererPersistent', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: false, externals: ['react', 'scheduler', 'expect'] }, /******* React Noop Server Renderer (used for tests) *******/ { bundleTypes: [NODE_DEV, NODE_PROD], moduleType: RENDERER, entry: 'react-noop-renderer/server', global: 'ReactNoopRendererServer', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: false, externals: ['react', 'scheduler', 'expect'] }, /******* React Noop Flight Server (used for tests) *******/ { bundleTypes: [NODE_DEV, NODE_PROD], moduleType: RENDERER, entry: 'react-noop-renderer/flight-server', condition: 'react-server', global: 'ReactNoopFlightServer', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: false, externals: ['react', 'scheduler', 'expect', 'react-noop-renderer/flight-modules'] }, /******* React Noop Flight Client (used for tests) *******/ { bundleTypes: [NODE_DEV, NODE_PROD], moduleType: RENDERER, entry: 'react-noop-renderer/flight-client', global: 'ReactNoopFlightClient', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: false, externals: ['react', 'scheduler', 'expect', 'react-noop-renderer/flight-modules'] }, /******* React Reconciler *******/ { bundleTypes: [NODE_DEV, NODE_PROD, NODE_PROFILING, FB_WWW_DEV, FB_WWW_PROD], moduleType: RECONCILER, entry: 'react-reconciler', global: 'ReactReconciler', minifyWithProdErrorCodes: true, wrapWithModuleBoundaries: false, externals: ['react'] }, /******* React Server *******/ { bundleTypes: [NODE_DEV, NODE_PROD], moduleType: RECONCILER, entry: 'react-server', global: 'ReactServer', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: false, externals: ['react'] }, /******* React Flight Server *******/ { bundleTypes: [NODE_DEV, NODE_PROD], moduleType: RECONCILER, entry: 'react-server/flight', condition: 'react-server', global: 'ReactFlightServer', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: false, externals: ['react'] }, /******* React Flight Client *******/ { bundleTypes: [NODE_DEV, NODE_PROD], moduleType: RECONCILER, entry: 'react-client/flight', global: 'ReactFlightClient', minifyWithProdErrorCodes: true, wrapWithModuleBoundaries: false, externals: ['react'] }, /******* Reconciler Reflection *******/ { moduleType: RENDERER_UTILS, bundleTypes: [NODE_DEV, NODE_PROD], entry: 'react-reconciler/reflection', global: 'ReactFiberTreeReflection', minifyWithProdErrorCodes: true, wrapWithModuleBoundaries: false, externals: [] }, /******* Reconciler Constants *******/ { moduleType: RENDERER_UTILS, bundleTypes: [NODE_DEV, NODE_PROD, FB_WWW_DEV, FB_WWW_PROD], entry: 'react-reconciler/constants', global: 'ReactReconcilerConstants', minifyWithProdErrorCodes: true, wrapWithModuleBoundaries: false, externals: [] }, /******* React Is *******/ { bundleTypes: [NODE_DEV, NODE_PROD, FB_WWW_DEV, FB_WWW_PROD, RN_FB_DEV, RN_FB_PROD, RN_FB_PROFILING], moduleType: ISOMORPHIC, entry: 'react-is', global: 'ReactIs', minifyWithProdErrorCodes: true, wrapWithModuleBoundaries: false, externals: ['ReactNativeInternalFeatureFlags'] }, /******* React Debug Tools *******/ { bundleTypes: [NODE_DEV, NODE_PROD], moduleType: ISOMORPHIC, entry: 'react-debug-tools', global: 'ReactDebugTools', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: false, externals: [] }, /******* React Cache (experimental, old) *******/ { bundleTypes: [NODE_DEV, NODE_PROD, FB_WWW_DEV, FB_WWW_PROD], moduleType: ISOMORPHIC, entry: 'react-cache', global: 'ReactCacheOld', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: false, externals: ['react', 'scheduler'] }, /******* Hook for managing subscriptions safely *******/ { bundleTypes: [NODE_DEV, NODE_PROD], moduleType: ISOMORPHIC, entry: 'use-subscription', global: 'useSubscription', minifyWithProdErrorCodes: true, wrapWithModuleBoundaries: true, externals: ['react'] }, /******* useSyncExternalStore *******/ { bundleTypes: [NODE_DEV, NODE_PROD], moduleType: ISOMORPHIC, entry: 'use-sync-external-store', global: 'useSyncExternalStore', minifyWithProdErrorCodes: true, wrapWithModuleBoundaries: true, externals: ['react'] }, /******* useSyncExternalStore (shim) *******/ { bundleTypes: [NODE_DEV, NODE_PROD], moduleType: ISOMORPHIC, entry: 'use-sync-external-store/shim', global: 'useSyncExternalStore', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: true, externals: ['react'] }, /******* useSyncExternalStore (shim, native) *******/ { bundleTypes: [NODE_DEV, NODE_PROD], moduleType: ISOMORPHIC, entry: 'use-sync-external-store/shim/index.native', global: 'useSyncExternalStore', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: true, externals: ['react'] }, /******* useSyncExternalStoreWithSelector *******/ { bundleTypes: [NODE_DEV, NODE_PROD], moduleType: ISOMORPHIC, entry: 'use-sync-external-store/with-selector', global: 'useSyncExternalStoreWithSelector', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: true, externals: ['react'] }, /******* useSyncExternalStoreWithSelector (shim) *******/ { bundleTypes: [NODE_DEV, NODE_PROD], moduleType: ISOMORPHIC, entry: 'use-sync-external-store/shim/with-selector', global: 'useSyncExternalStoreWithSelector', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: true, externals: ['react', 'use-sync-external-store/shim'] }, /******* React Scheduler (experimental) *******/ { bundleTypes: [NODE_DEV, NODE_PROD, FB_WWW_DEV, FB_WWW_PROD, FB_WWW_PROFILING, RN_FB_DEV, RN_FB_PROD, RN_FB_PROFILING], moduleType: ISOMORPHIC, entry: 'scheduler', global: 'Scheduler', minifyWithProdErrorCodes: true, wrapWithModuleBoundaries: true, externals: ['ReactNativeInternalFeatureFlags'] }, /******* React Scheduler Mock (experimental) *******/ { bundleTypes: [NODE_DEV, NODE_PROD, FB_WWW_DEV, FB_WWW_PROD, RN_FB_DEV, RN_FB_PROD], moduleType: ISOMORPHIC, entry: 'scheduler/unstable_mock', global: 'SchedulerMock', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: false, externals: ['ReactNativeInternalFeatureFlags'] }, /******* React Scheduler Native *******/ { bundleTypes: [NODE_DEV, NODE_PROD], moduleType: ISOMORPHIC, entry: 'scheduler/index.native', global: 'SchedulerNative', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: false, externals: ['ReactNativeInternalFeatureFlags'] }, /******* React Scheduler Post Task (experimental) *******/ { bundleTypes: [NODE_DEV, NODE_PROD, FB_WWW_DEV, FB_WWW_PROD, FB_WWW_PROFILING], moduleType: ISOMORPHIC, entry: 'scheduler/unstable_post_task', global: 'SchedulerPostTask', minifyWithProdErrorCodes: true, wrapWithModuleBoundaries: false, externals: [] }, /******* Jest React (experimental) *******/ { bundleTypes: [NODE_DEV, NODE_PROD], moduleType: ISOMORPHIC, entry: 'jest-react', global: 'JestReact', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: false, externals: ['react', 'scheduler', 'scheduler/unstable_mock'] }, /******* ESLint Plugin for Hooks *******/ { // TODO: it's awkward to create a bundle for this but if we don't, the package // won't get copied. We also can't create just DEV bundle because it contains a // NODE_ENV check inside. We should probably tweak our build process to allow // "raw" packages that don't get bundled. bundleTypes: [NODE_DEV, NODE_PROD], moduleType: ISOMORPHIC, entry: 'eslint-plugin-react-hooks', global: 'ESLintPluginReactHooks', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: false, externals: [] }, /******* React Fresh *******/ { bundleTypes: [NODE_DEV, NODE_PROD], moduleType: ISOMORPHIC, entry: 'react-refresh/babel', global: 'ReactFreshBabelPlugin', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: false, externals: [] }, { bundleTypes: [NODE_DEV, NODE_PROD, FB_WWW_DEV], moduleType: ISOMORPHIC, entry: 'react-refresh/runtime', global: 'ReactFreshRuntime', minifyWithProdErrorCodes: false, wrapWithModuleBoundaries: false, externals: [] }]; // Based on deep-freeze by substack (public domain) function deepFreeze(o) { o |> Object.freeze(%); (function (prop) { if (o[prop] !== null && (typeof o[prop] === 'object' || typeof o[prop] === 'function') && !(o[prop] |> Object.isFrozen(%))) { o[prop] |> deepFreeze(%); } }) |> (o |> Object.getOwnPropertyNames(%)).forEach(%); return o; } // Don't accidentally mutate config as part of the build bundles |> deepFreeze(%); bundleTypes |> deepFreeze(%); moduleTypes |> deepFreeze(%); function getFilename(bundle, bundleType) { let name = bundle.name || bundle.entry; const globalName = bundle.global; // we do this to replace / to -, for react-dom/server name = '/' |> ('/index.' |> name.replace(%, '.')).replace(%, '-'); switch (bundleType) { case NODE_ES2015: return `${name}.js`; case BUN_DEV: return `${name}.development.js`; case BUN_PROD: return `${name}.production.js`; case ESM_DEV: return `${name}.development.js`; case ESM_PROD: return `${name}.production.js`; case NODE_DEV: return `${name}.development.js`; case NODE_PROD: return `${name}.production.js`; case NODE_PROFILING: return `${name}.profiling.js`; case FB_WWW_DEV: case RN_OSS_DEV: case RN_FB_DEV: return `${globalName}-dev.js`; case FB_WWW_PROD: case RN_OSS_PROD: case RN_FB_PROD: return `${globalName}-prod.js`; case FB_WWW_PROFILING: case RN_FB_PROFILING: case RN_OSS_PROFILING: return `${globalName}-profiling.js`; case BROWSER_SCRIPT: return `${name}.js`; } } module.exports = { bundleTypes, moduleTypes, bundles, getFilename };