From 0d821ee69fe3b1a9fa062a2e3c8c921c94e7d263 Mon Sep 17 00:00:00 2001 From: Jakub Romanczyk Date: Mon, 2 Feb 2026 22:15:38 +0100 Subject: [PATCH] fix(NativeEntryPlugin): add polyfills as runtime modules for correct execution order Polyfills are now added as runtime modules instead of entry modules. This ensures they execute before the webpack startup function, which means they run before Module Federation v2 embed_federation_runtime wrapper. Runtime modules execute during webpack runtime initialization, before __webpack_require__.x() (the startup function) is called. This guarantees polyfills run before any MF v2 federation runtime code. Changes: - Move NativeEntryPlugin to its own folder - Add PolyfillsRuntimeModule that inlines polyfill code - Use additionalTreeRuntimeRequirements hook to add polyfills - Add comprehensive tests with MF v2 integration Co-Authored-By: Claude Opus 4.5 --- .../NativeEntryPlugin.ts | 32 ++- .../PolyfillsRuntimeModule.ts | 45 +++++ .../src/plugins/NativeEntryPlugin/index.ts | 2 + packages/repack/src/plugins/RepackPlugin.ts | 2 +- .../__tests__/NativeEntryPlugin.test.ts | 139 +++++++++++++ .../Libraries/Core/InitializeCore.js | 1 + .../__fixtures__/react-native/polyfill1.js | 1 + .../__fixtures__/react-native/polyfill2.js | 1 + .../react-native/rn-get-polyfills.js | 8 + .../NativeEntryPlugin.test.ts.snap | 191 ++++++++++++++++++ 10 files changed, 413 insertions(+), 9 deletions(-) rename packages/repack/src/plugins/{ => NativeEntryPlugin}/NativeEntryPlugin.ts (77%) create mode 100644 packages/repack/src/plugins/NativeEntryPlugin/PolyfillsRuntimeModule.ts create mode 100644 packages/repack/src/plugins/NativeEntryPlugin/index.ts create mode 100644 packages/repack/src/plugins/__tests__/NativeEntryPlugin.test.ts create mode 100644 packages/repack/src/plugins/__tests__/__fixtures__/react-native/Libraries/Core/InitializeCore.js create mode 100644 packages/repack/src/plugins/__tests__/__fixtures__/react-native/polyfill1.js create mode 100644 packages/repack/src/plugins/__tests__/__fixtures__/react-native/polyfill2.js create mode 100644 packages/repack/src/plugins/__tests__/__fixtures__/react-native/rn-get-polyfills.js create mode 100644 packages/repack/src/plugins/__tests__/__snapshots__/NativeEntryPlugin.test.ts.snap diff --git a/packages/repack/src/plugins/NativeEntryPlugin.ts b/packages/repack/src/plugins/NativeEntryPlugin/NativeEntryPlugin.ts similarity index 77% rename from packages/repack/src/plugins/NativeEntryPlugin.ts rename to packages/repack/src/plugins/NativeEntryPlugin/NativeEntryPlugin.ts index f215fba4f..e8244d00c 100644 --- a/packages/repack/src/plugins/NativeEntryPlugin.ts +++ b/packages/repack/src/plugins/NativeEntryPlugin/NativeEntryPlugin.ts @@ -1,7 +1,8 @@ import path from 'node:path'; import type { ResolveAlias, Compiler as RspackCompiler } from '@rspack/core'; import type { Compiler as WebpackCompiler } from 'webpack'; -import { isRspackCompiler, moveElementBefore } from '../helpers/index.js'; +import { isRspackCompiler, moveElementBefore } from '../../helpers/index.js'; +import { makePolyfillsRuntimeModule } from './PolyfillsRuntimeModule.js'; export interface NativeEntryPluginConfig { /** @@ -55,18 +56,35 @@ export class NativeEntryPlugin { path.join(reactNativePath, 'Libraries/Core/InitializeCore.js'); const initializeScriptManagerPath = require.resolve( - '../modules/InitializeScriptManager.js' + '../../modules/InitializeScriptManager.js' ); - const includeModulesPath = require.resolve('../modules/IncludeModules.js'); + const includeModulesPath = require.resolve( + '../../modules/IncludeModules.js' + ); + + const polyfillPaths = getReactNativePolyfills(); const nativeEntries = [ - ...getReactNativePolyfills(), initializeCorePath, initializeScriptManagerPath, includeModulesPath, ]; + // Add polyfills as runtime modules so they execute before the startup function. + // This ensures polyfills run before Module Federation's embed_federation_runtime wrapper. + compiler.hooks.compilation.tap('RepackNativeEntryPlugin', (compilation) => { + compilation.hooks.additionalTreeRuntimeRequirements.tap( + 'RepackNativeEntryPlugin', + (chunk) => { + compilation.addRuntimeModule( + chunk, + makePolyfillsRuntimeModule(compiler, { polyfillPaths }) + ); + } + ); + }); + compiler.hooks.entryOption.tap( { name: 'RepackNativeEntryPlugin', before: 'RepackDevelopmentPlugin' }, (_, entry) => { @@ -76,14 +94,12 @@ export class NativeEntryPlugin { ); } + // add native entries to each declared entry point Object.keys(entry).forEach((entryName) => { - // runtime property defines the chunk name, otherwise it defaults to the entry key const entryChunkName = entry[entryName].runtime || entryName; - - // add native entries to all declared entry points for (const nativeEntry of nativeEntries) { new compiler.webpack.EntryPlugin(compiler.context, nativeEntry, { - name: entryChunkName, // prepends the entry to the chunk of specified name + name: entryChunkName, }).apply(compiler); } }); diff --git a/packages/repack/src/plugins/NativeEntryPlugin/PolyfillsRuntimeModule.ts b/packages/repack/src/plugins/NativeEntryPlugin/PolyfillsRuntimeModule.ts new file mode 100644 index 000000000..429360648 --- /dev/null +++ b/packages/repack/src/plugins/NativeEntryPlugin/PolyfillsRuntimeModule.ts @@ -0,0 +1,45 @@ +import fs from 'node:fs'; +import type { + Compiler, + RuntimeModule as RuntimeModuleType, +} from '@rspack/core'; + +interface PolyfillsRuntimeModuleConfig { + polyfillPaths: string[]; +} + +/** + * Creates a runtime module that inlines React Native polyfills. + * Runtime modules are executed before the startup function (__webpack_require__.x), + * which means they run before Module Federation's embed_federation_runtime wrapper. + */ +export const makePolyfillsRuntimeModule = ( + compiler: Compiler, + moduleConfig: PolyfillsRuntimeModuleConfig +): RuntimeModuleType => { + const Template = compiler.webpack.Template; + const RuntimeModule = compiler.webpack.RuntimeModule; + + const PolyfillsRuntimeModule = class extends RuntimeModule { + constructor(private config: PolyfillsRuntimeModuleConfig) { + // Use STAGE_BASIC to ensure polyfills run early among runtime modules + super('repack/polyfills', RuntimeModule.STAGE_BASIC); + } + + generate() { + const polyfillCode = this.config.polyfillPaths.map((polyfillPath) => { + const content = fs.readFileSync(polyfillPath, 'utf-8'); + return Template.asString([ + `// Polyfill: ${polyfillPath.split('/').pop()}`, + '(function() {', + Template.indent(content), + '})();', + ]); + }); + + return Template.asString(polyfillCode); + } + }; + + return new PolyfillsRuntimeModule(moduleConfig); +}; diff --git a/packages/repack/src/plugins/NativeEntryPlugin/index.ts b/packages/repack/src/plugins/NativeEntryPlugin/index.ts new file mode 100644 index 000000000..52b9bf882 --- /dev/null +++ b/packages/repack/src/plugins/NativeEntryPlugin/index.ts @@ -0,0 +1,2 @@ +export { NativeEntryPlugin } from './NativeEntryPlugin.js'; +export type { NativeEntryPluginConfig } from './NativeEntryPlugin.js'; diff --git a/packages/repack/src/plugins/RepackPlugin.ts b/packages/repack/src/plugins/RepackPlugin.ts index bcd6b6ea9..9d6c7db00 100644 --- a/packages/repack/src/plugins/RepackPlugin.ts +++ b/packages/repack/src/plugins/RepackPlugin.ts @@ -3,7 +3,7 @@ import type { Compiler as WebpackCompiler } from 'webpack'; import { BabelPlugin } from './BabelPlugin.js'; import { DevelopmentPlugin } from './DevelopmentPlugin.js'; import { LoggerPlugin, type LoggerPluginConfig } from './LoggerPlugin.js'; -import { NativeEntryPlugin } from './NativeEntryPlugin.js'; +import { NativeEntryPlugin } from './NativeEntryPlugin/index.js'; import { OutputPlugin, type OutputPluginConfig } from './OutputPlugin/index.js'; import { RepackTargetPlugin } from './RepackTargetPlugin/index.js'; import { SourceMapPlugin } from './SourceMapPlugin.js'; diff --git a/packages/repack/src/plugins/__tests__/NativeEntryPlugin.test.ts b/packages/repack/src/plugins/__tests__/NativeEntryPlugin.test.ts new file mode 100644 index 000000000..662bfe4b4 --- /dev/null +++ b/packages/repack/src/plugins/__tests__/NativeEntryPlugin.test.ts @@ -0,0 +1,139 @@ +import path from 'node:path'; +import { + type RspackPluginInstance, + type StatsModule, + rspack, +} from '@rspack/core'; +import memfs from 'memfs'; +import { RspackVirtualModulePlugin } from 'rspack-plugin-virtual-module'; +import { ModuleFederationPluginV2 } from '../ModuleFederationPluginV2.js'; +import { NativeEntryPlugin } from '../NativeEntryPlugin/index.js'; + +const FIXTURES_PATH = path.join(__dirname, '__fixtures__'); +const REACT_NATIVE_PATH = path.join(FIXTURES_PATH, 'react-native'); + +interface CompileBundleOptions { + extraAliases?: Record; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + externals?: any; +} + +async function compileBundle( + entry: Record, + virtualModules: Record, + extraPlugins: RspackPluginInstance[] = [], + options: CompileBundleOptions = {} +) { + const compiler = rspack({ + context: __dirname, + mode: 'development', + devtool: false, + entry, + output: { + path: '/out', + filename: '[name].js', + }, + resolve: { + alias: { + 'react-native': REACT_NATIVE_PATH, + ...options.extraAliases, + }, + }, + externals: options.externals, + plugins: [ + new NativeEntryPlugin({}), + ...extraPlugins, + new RspackVirtualModulePlugin({ + ...virtualModules, + }), + ], + }); + + const volume = new memfs.Volume(); + const fileSystem = memfs.createFsFromVolume(volume); + // @ts-expect-error memfs is compatible enough + compiler.outputFileSystem = fileSystem; + + return new Promise<{ + code: string; + fileSystem: typeof memfs.fs; + volume: typeof memfs.vol; + modules: StatsModule[]; + }>((resolve, reject) => + compiler.run((error, stats) => { + if (error) { + reject(error); + } else { + const statsJson = stats?.toJson({ modules: true }); + resolve({ + code: fileSystem.readFileSync('/out/main.js', 'utf-8') as string, + fileSystem, + volume, + modules: statsJson?.modules ?? [], + }); + } + }) + ); +} + +describe('NativeEntryPlugin', () => { + it('should add polyfills as runtime modules that execute before MF v2 federation runtime', async () => { + const { code } = await compileBundle( + { main: { import: ['./index.js'] } }, + { + './index.js': 'globalThis.__APP_ENTRY__ = true;', + './App.js': 'export default globalThis.__FEDERATED_EXPORT__ = true;', + }, + [ + new ModuleFederationPluginV2({ + name: 'testContainer', + exposes: { + './App': './App.js', + }, + shared: { + react: { singleton: true, eager: true }, + 'react-native': { singleton: true, eager: true }, + }, + // Disable default runtime plugins to simplify test + defaultRuntimePlugins: [], + }), + ], + { + externals: ( + { request, context }: { request?: string; context?: string }, + callback: (err: Error | null, result?: string) => void + ) => { + // Externalize all @module-federation packages and their internal paths + if ( + request?.includes('@module-federation') || + context?.includes('@module-federation') || + request?.includes('isomorphic-rslog') + ) { + return callback(null, 'globalThis.__MF_EXTERNAL__'); + } + callback(null); + }, + } + ); + + expect(code).toMatchSnapshot('mf-v2'); + + // MF v2 uses embed_federation_runtime which wraps the startup function + expect(code).toContain('embed_federation_runtime'); + + // Polyfills are now runtime modules (webpack/runtime/repack/polyfills) + // Runtime modules execute BEFORE __webpack_require__.x() (the startup function) + // This means polyfills run before MF v2's embed_federation_runtime wrapper + expect(code).toContain('webpack/runtime/repack/polyfills'); + + // Verify polyfills are in the runtime section (before startup execution) + const polyfillsRuntimePos = code.indexOf( + 'webpack/runtime/repack/polyfills' + ); + const startupExecutionPos = code.indexOf('__webpack_require__.x()'); + + expect(polyfillsRuntimePos).toBeGreaterThan(-1); + expect(startupExecutionPos).toBeGreaterThan(-1); + expect(polyfillsRuntimePos).toBeLessThan(startupExecutionPos); + }); +}); diff --git a/packages/repack/src/plugins/__tests__/__fixtures__/react-native/Libraries/Core/InitializeCore.js b/packages/repack/src/plugins/__tests__/__fixtures__/react-native/Libraries/Core/InitializeCore.js new file mode 100644 index 000000000..bef2b86e8 --- /dev/null +++ b/packages/repack/src/plugins/__tests__/__fixtures__/react-native/Libraries/Core/InitializeCore.js @@ -0,0 +1 @@ +globalThis.__INITIALIZE_CORE__ = true; diff --git a/packages/repack/src/plugins/__tests__/__fixtures__/react-native/polyfill1.js b/packages/repack/src/plugins/__tests__/__fixtures__/react-native/polyfill1.js new file mode 100644 index 000000000..d7bc5c956 --- /dev/null +++ b/packages/repack/src/plugins/__tests__/__fixtures__/react-native/polyfill1.js @@ -0,0 +1 @@ +globalThis.__POLYFILL_1__ = true; diff --git a/packages/repack/src/plugins/__tests__/__fixtures__/react-native/polyfill2.js b/packages/repack/src/plugins/__tests__/__fixtures__/react-native/polyfill2.js new file mode 100644 index 000000000..6da8082bc --- /dev/null +++ b/packages/repack/src/plugins/__tests__/__fixtures__/react-native/polyfill2.js @@ -0,0 +1 @@ +globalThis.__POLYFILL_2__ = true; diff --git a/packages/repack/src/plugins/__tests__/__fixtures__/react-native/rn-get-polyfills.js b/packages/repack/src/plugins/__tests__/__fixtures__/react-native/rn-get-polyfills.js new file mode 100644 index 000000000..62c3a6a78 --- /dev/null +++ b/packages/repack/src/plugins/__tests__/__fixtures__/react-native/rn-get-polyfills.js @@ -0,0 +1,8 @@ +const path = require('node:path'); + +module.exports = function getPolyfills() { + return [ + path.join(__dirname, 'polyfill1.js'), + path.join(__dirname, 'polyfill2.js'), + ]; +}; diff --git a/packages/repack/src/plugins/__tests__/__snapshots__/NativeEntryPlugin.test.ts.snap b/packages/repack/src/plugins/__tests__/__snapshots__/NativeEntryPlugin.test.ts.snap new file mode 100644 index 000000000..08265547b --- /dev/null +++ b/packages/repack/src/plugins/__tests__/__snapshots__/NativeEntryPlugin.test.ts.snap @@ -0,0 +1,191 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`NativeEntryPlugin should add polyfills as runtime modules that execute before MF v2 federation runtime: mf-v2 1`] = ` +"(() => { // webpackBootstrap +var __webpack_modules__ = ({ +"../../modules/IncludeModules.ts": +/*!***************************************!*\\ + !*** ../../modules/IncludeModules.ts ***! + \\***************************************/ +(function () { +/* + * This module is added as an entry module to prevent stripping of these React Native deep imports from the bundle. + * We use require.resolve from Rspack/Webpack to ensure these modules are included even if not directly used. + * This allows us to include the modules into the bundle without evaluating them. + * These modules are required by assetsLoader and should be shared as deep imports when using ModuleFederation. + */ + +/*require.resolve*/(/*! react-native/Libraries/Image/AssetRegistry */ "webpack/sharing/consume/default/react-native/Libraries/Image/AssetRegistry"); +/*require.resolve*/(/*! react-native/Libraries/Image/AssetSourceResolver */ "webpack/sharing/consume/default/react-native/Libraries/Image/AssetSourceResolver"); + + +}), +"../../modules/InitializeScriptManager.ts": +/*!************************************************!*\\ + !*** ../../modules/InitializeScriptManager.ts ***! + \\************************************************/ +(function (__unused_webpack_module, __webpack_exports__, __webpack_require__) { +"use strict"; +__webpack_require__.r(__webpack_exports__); +Object(function webpackMissingModule() { var e = new Error("Cannot find module './ScriptManager/ScriptManager.js'"); e.code = 'MODULE_NOT_FOUND'; throw e; }()); + + +Object(function webpackMissingModule() { var e = new Error("Cannot find module './ScriptManager/ScriptManager.js'"); e.code = 'MODULE_NOT_FOUND'; throw e; }())(); + + +}), +"@module-federation/runtime/rspack.js!=!data:text/javascript,import __module_federation_bundler_runtime__ from \\"/Users/jbroma/Developer/repack/node_modules/.pnpm/@module-federation+webpack-bundler-runtime@0.8.9/node_modules/@module-federation/webpack-bundler-runtime/dist/index.cjs.js\\";const __module_federation_runtime_plugins__ = [];const __module_federation_remote_infos__ = {};const __module_federation_container_name__ = \\"testContainer\\";const __module_federation_share_strategy__ = \\"loaded-first\\";if((__webpack_require__.initializeSharingData||__webpack_require__.initializeExposesData)&&__webpack_require__.federation){var __webpack_require___remotesLoadingData,__webpack_require___remotesLoadingData1,__webpack_require___initializeSharingData,__webpack_require___consumesLoadingData,__webpack_require___consumesLoadingData1,__webpack_require___initializeExposesData,__webpack_require___consumesLoadingData2;const override=(obj,key,value)=>{if(!obj)return;if(obj[key])obj[key]=value};const merge=(obj,key,fn)=>{const value=fn();if(Array.isArray(value)){var _obj,_key;var _;(_=(_obj=obj)[_key=key])!==null&&_!==void 0?_:_obj[_key]=[];obj[key].push(...value)}else if(typeof value===\\"object\\"&&value!==null){var _obj1,_key1;var _1;(_1=(_obj1=obj)[_key1=key])!==null&&_1!==void 0?_1:_obj1[_key1]={};Object.assign(obj[key],value)}};const early=(obj,key,initial)=>{var _obj,_key;var _;(_=(_obj=obj)[_key=key])!==null&&_!==void 0?_:_obj[_key]=initial()};var __webpack_require___remotesLoadingData_chunkMapping;const remotesLoadingChunkMapping=(__webpack_require___remotesLoadingData_chunkMapping=(__webpack_require___remotesLoadingData=__webpack_require__.remotesLoadingData)===null||__webpack_require___remotesLoadingData===void 0?void 0:__webpack_require___remotesLoadingData.chunkMapping)!==null&&__webpack_require___remotesLoadingData_chunkMapping!==void 0?__webpack_require___remotesLoadingData_chunkMapping:{};var __webpack_require___remotesLoadingData_moduleIdToRemoteDataMapping;const remotesLoadingModuleIdToRemoteDataMapping=(__webpack_require___remotesLoadingData_moduleIdToRemoteDataMapping=(__webpack_require___remotesLoadingData1=__webpack_require__.remotesLoadingData)===null||__webpack_require___remotesLoadingData1===void 0?void 0:__webpack_require___remotesLoadingData1.moduleIdToRemoteDataMapping)!==null&&__webpack_require___remotesLoadingData_moduleIdToRemoteDataMapping!==void 0?__webpack_require___remotesLoadingData_moduleIdToRemoteDataMapping:{};var __webpack_require___initializeSharingData_scopeToSharingDataMapping;const initializeSharingScopeToInitDataMapping=(__webpack_require___initializeSharingData_scopeToSharingDataMapping=(__webpack_require___initializeSharingData=__webpack_require__.initializeSharingData)===null||__webpack_require___initializeSharingData===void 0?void 0:__webpack_require___initializeSharingData.scopeToSharingDataMapping)!==null&&__webpack_require___initializeSharingData_scopeToSharingDataMapping!==void 0?__webpack_require___initializeSharingData_scopeToSharingDataMapping:{};var __webpack_require___consumesLoadingData_chunkMapping;const consumesLoadingChunkMapping=(__webpack_require___consumesLoadingData_chunkMapping=(__webpack_require___consumesLoadingData=__webpack_require__.consumesLoadingData)===null||__webpack_require___consumesLoadingData===void 0?void 0:__webpack_require___consumesLoadingData.chunkMapping)!==null&&__webpack_require___consumesLoadingData_chunkMapping!==void 0?__webpack_require___consumesLoadingData_chunkMapping:{};var __webpack_require___consumesLoadingData_moduleIdToConsumeDataMapping;const consumesLoadingModuleToConsumeDataMapping=(__webpack_require___consumesLoadingData_moduleIdToConsumeDataMapping=(__webpack_require___consumesLoadingData1=__webpack_require__.consumesLoadingData)===null||__webpack_require___consumesLoadingData1===void 0?void 0:__webpack_require___consumesLoadingData1.moduleIdToConsumeDataMapping)!==null&&__webpack_require___consumesLoadingData_moduleIdToConsumeDataMapping!==void 0?__webpack_require___consumesLoadingData_moduleIdToConsumeDataMapping:{};const consumesLoadinginstalledModules={};const initializeSharingInitPromises=[];const initializeSharingInitTokens={};const containerShareScope=(__webpack_require___initializeExposesData=__webpack_require__.initializeExposesData)===null||__webpack_require___initializeExposesData===void 0?void 0:__webpack_require___initializeExposesData.shareScope;for(const key in __module_federation_bundler_runtime__){__webpack_require__.federation[key]=__module_federation_bundler_runtime__[key]}early(__webpack_require__.federation,\\"consumesLoadingModuleToHandlerMapping\\",()=>{const consumesLoadingModuleToHandlerMapping={};for(let[moduleId,data]of Object.entries(consumesLoadingModuleToConsumeDataMapping)){consumesLoadingModuleToHandlerMapping[moduleId]={getter:data.fallback,shareInfo:{shareConfig:{fixedDependencies:false,requiredVersion:data.requiredVersion,strictVersion:data.strictVersion,singleton:data.singleton,eager:data.eager},scope:[data.shareScope]},shareKey:data.shareKey}}return consumesLoadingModuleToHandlerMapping});early(__webpack_require__.federation,\\"initOptions\\",()=>({}));early(__webpack_require__.federation.initOptions,\\"name\\",()=>__module_federation_container_name__);early(__webpack_require__.federation.initOptions,\\"shareStrategy\\",()=>__module_federation_share_strategy__);early(__webpack_require__.federation.initOptions,\\"shared\\",()=>{const shared={};for(let[scope,stages]of Object.entries(initializeSharingScopeToInitDataMapping)){for(let stage of stages){if(typeof stage===\\"object\\"&&stage!==null){const{name,version,factory,eager,singleton,requiredVersion,strictVersion}=stage;const shareConfig={};const isValidValue=function(val){return typeof val!==\\"undefined\\"};if(isValidValue(singleton)){shareConfig.singleton=singleton}if(isValidValue(requiredVersion)){shareConfig.requiredVersion=requiredVersion}if(isValidValue(eager)){shareConfig.eager=eager}if(isValidValue(strictVersion)){shareConfig.strictVersion=strictVersion}const options={version,scope:[scope],shareConfig,get:factory};if(shared[name]){shared[name].push(options)}else{shared[name]=[options]}}}}return shared});merge(__webpack_require__.federation.initOptions,\\"remotes\\",()=>Object.values(__module_federation_remote_infos__).flat().filter(remote=>remote.externalType===\\"script\\"));merge(__webpack_require__.federation.initOptions,\\"plugins\\",()=>__module_federation_runtime_plugins__);early(__webpack_require__.federation,\\"bundlerRuntimeOptions\\",()=>({}));early(__webpack_require__.federation.bundlerRuntimeOptions,\\"remotes\\",()=>({}));early(__webpack_require__.federation.bundlerRuntimeOptions.remotes,\\"chunkMapping\\",()=>remotesLoadingChunkMapping);early(__webpack_require__.federation.bundlerRuntimeOptions.remotes,\\"remoteInfos\\",()=>__module_federation_remote_infos__);early(__webpack_require__.federation.bundlerRuntimeOptions.remotes,\\"idToExternalAndNameMapping\\",()=>{const remotesLoadingIdToExternalAndNameMappingMapping={};for(let[moduleId,data]of Object.entries(remotesLoadingModuleIdToRemoteDataMapping)){remotesLoadingIdToExternalAndNameMappingMapping[moduleId]=[data.shareScope,data.name,data.externalModuleId,data.remoteName]}return remotesLoadingIdToExternalAndNameMappingMapping});early(__webpack_require__.federation.bundlerRuntimeOptions.remotes,\\"webpackRequire\\",()=>__webpack_require__);merge(__webpack_require__.federation.bundlerRuntimeOptions.remotes,\\"idToRemoteMap\\",()=>{const idToRemoteMap={};for(let[id,remoteData]of Object.entries(remotesLoadingModuleIdToRemoteDataMapping)){const info=__module_federation_remote_infos__[remoteData.remoteName];if(info)idToRemoteMap[id]=info}return idToRemoteMap});override(__webpack_require__,\\"S\\",__webpack_require__.federation.bundlerRuntime.S);if(__webpack_require__.federation.attachShareScopeMap){__webpack_require__.federation.attachShareScopeMap(__webpack_require__)}override(__webpack_require__.f,\\"remotes\\",(chunkId,promises)=>__webpack_require__.federation.bundlerRuntime.remotes({chunkId,promises,chunkMapping:remotesLoadingChunkMapping,idToExternalAndNameMapping:__webpack_require__.federation.bundlerRuntimeOptions.remotes.idToExternalAndNameMapping,idToRemoteMap:__webpack_require__.federation.bundlerRuntimeOptions.remotes.idToRemoteMap,webpackRequire:__webpack_require__}));override(__webpack_require__.f,\\"consumes\\",(chunkId,promises)=>__webpack_require__.federation.bundlerRuntime.consumes({chunkId,promises,chunkMapping:consumesLoadingChunkMapping,moduleToHandlerMapping:__webpack_require__.federation.consumesLoadingModuleToHandlerMapping,installedModules:consumesLoadinginstalledModules,webpackRequire:__webpack_require__}));override(__webpack_require__,\\"I\\",(name,initScope)=>__webpack_require__.federation.bundlerRuntime.I({shareScopeName:name,initScope,initPromises:initializeSharingInitPromises,initTokens:initializeSharingInitTokens,webpackRequire:__webpack_require__}));override(__webpack_require__,\\"initContainer\\",(shareScope,initScope,remoteEntryInitOptions)=>__webpack_require__.federation.bundlerRuntime.initContainerEntry({shareScope,initScope,remoteEntryInitOptions,shareScopeKey:containerShareScope,webpackRequire:__webpack_require__}));override(__webpack_require__,\\"getContainer\\",(module1,getScope)=>{var moduleMap=__webpack_require__.initializeExposesData.moduleMap;__webpack_require__.R=getScope;getScope=Object.prototype.hasOwnProperty.call(moduleMap,module1)?moduleMap[module1]():Promise.resolve().then(()=>{throw new Error('Module \\"'+module1+'\\" does not exist in container.')});__webpack_require__.R=undefined;return getScope});__webpack_require__.federation.instance=__webpack_require__.federation.runtime.init(__webpack_require__.federation.initOptions);if((__webpack_require___consumesLoadingData2=__webpack_require__.consumesLoadingData)===null||__webpack_require___consumesLoadingData2===void 0?void 0:__webpack_require___consumesLoadingData2.initialConsumes){__webpack_require__.federation.bundlerRuntime.installInitialConsumes({webpackRequire:__webpack_require__,installedModules:consumesLoadinginstalledModules,initialConsumes:__webpack_require__.consumesLoadingData.initialConsumes,moduleToHandlerMapping:__webpack_require__.federation.consumesLoadingModuleToHandlerMapping})}}": +/*!*********************************************!*\\ + !*** external "globalThis.__MF_EXTERNAL__" ***! + \\*********************************************/ +(function (module) { +"use strict"; +module.exports = globalThis.__MF_EXTERNAL__; + +}), +"../../../node_modules/rspack-virtual-module-d092e06c/index.js": +/*!*********************************************************************!*\\ + !*** ../../../node_modules/rspack-virtual-module-d092e06c/index.js ***! + \\*********************************************************************/ +(function () { +globalThis.__APP_ENTRY__ = true; + +}), +"./__fixtures__/react-native/Libraries/Core/InitializeCore.js": +/*!********************************************************************!*\\ + !*** ./__fixtures__/react-native/Libraries/Core/InitializeCore.js ***! + \\********************************************************************/ +(function () { +globalThis.__INITIALIZE_CORE__ = true; + + +}), + +}); +/************************************************************************/ +// The module cache +var __webpack_module_cache__ = {}; + +// The require function +function __webpack_require__(moduleId) { + +// Check if module is in cache +var cachedModule = __webpack_module_cache__[moduleId]; +if (cachedModule !== undefined) { +return cachedModule.exports; +} +// Create a new module (and put it into the cache) +var module = (__webpack_module_cache__[moduleId] = { +exports: {} +}); +// Execute the module function +__webpack_modules__[moduleId](module, module.exports, __webpack_require__); + +// Return the exports of the module +return module.exports; + +} + +// expose the modules object (__webpack_modules__) +__webpack_require__.m = __webpack_modules__; + +// expose the module cache +__webpack_require__.c = __webpack_module_cache__; + +// the startup function +__webpack_require__.x = () => { +// Load entry module and return exports +__webpack_require__("./__fixtures__/react-native/Libraries/Core/InitializeCore.js"); +__webpack_require__("../../modules/InitializeScriptManager.ts"); +__webpack_require__("../../modules/IncludeModules.ts"); +var __webpack_exports__ = __webpack_require__("../../../node_modules/rspack-virtual-module-d092e06c/index.js"); +return __webpack_exports__ +}; + +/************************************************************************/ +// module_federation/runtime +(() => { + +if(!__webpack_require__.federation){ + __webpack_require__.federation = { + +chunkMatcher: function(chunkId) { + return true; +}, +rootOutputDir: "", + + }; +} + +})(); +// webpack/runtime/embed_federation_runtime +(() => { +var prevStartup = __webpack_require__.x; +var hasRun = false; +__webpack_require__.x = function() { + if (!hasRun) { + hasRun = true; + __webpack_require__("@module-federation/runtime/rspack.js!=!data:text/javascript,import __module_federation_bundler_runtime__ from \\"/Users/jbroma/Developer/repack/node_modules/.pnpm/@module-federation+webpack-bundler-runtime@0.8.9/node_modules/@module-federation/webpack-bundler-runtime/dist/index.cjs.js\\";const __module_federation_runtime_plugins__ = [];const __module_federation_remote_infos__ = {};const __module_federation_container_name__ = \\"testContainer\\";const __module_federation_share_strategy__ = \\"loaded-first\\";if((__webpack_require__.initializeSharingData||__webpack_require__.initializeExposesData)&&__webpack_require__.federation){var __webpack_require___remotesLoadingData,__webpack_require___remotesLoadingData1,__webpack_require___initializeSharingData,__webpack_require___consumesLoadingData,__webpack_require___consumesLoadingData1,__webpack_require___initializeExposesData,__webpack_require___consumesLoadingData2;const override=(obj,key,value)=>{if(!obj)return;if(obj[key])obj[key]=value};const merge=(obj,key,fn)=>{const value=fn();if(Array.isArray(value)){var _obj,_key;var _;(_=(_obj=obj)[_key=key])!==null&&_!==void 0?_:_obj[_key]=[];obj[key].push(...value)}else if(typeof value===\\"object\\"&&value!==null){var _obj1,_key1;var _1;(_1=(_obj1=obj)[_key1=key])!==null&&_1!==void 0?_1:_obj1[_key1]={};Object.assign(obj[key],value)}};const early=(obj,key,initial)=>{var _obj,_key;var _;(_=(_obj=obj)[_key=key])!==null&&_!==void 0?_:_obj[_key]=initial()};var __webpack_require___remotesLoadingData_chunkMapping;const remotesLoadingChunkMapping=(__webpack_require___remotesLoadingData_chunkMapping=(__webpack_require___remotesLoadingData=__webpack_require__.remotesLoadingData)===null||__webpack_require___remotesLoadingData===void 0?void 0:__webpack_require___remotesLoadingData.chunkMapping)!==null&&__webpack_require___remotesLoadingData_chunkMapping!==void 0?__webpack_require___remotesLoadingData_chunkMapping:{};var __webpack_require___remotesLoadingData_moduleIdToRemoteDataMapping;const remotesLoadingModuleIdToRemoteDataMapping=(__webpack_require___remotesLoadingData_moduleIdToRemoteDataMapping=(__webpack_require___remotesLoadingData1=__webpack_require__.remotesLoadingData)===null||__webpack_require___remotesLoadingData1===void 0?void 0:__webpack_require___remotesLoadingData1.moduleIdToRemoteDataMapping)!==null&&__webpack_require___remotesLoadingData_moduleIdToRemoteDataMapping!==void 0?__webpack_require___remotesLoadingData_moduleIdToRemoteDataMapping:{};var __webpack_require___initializeSharingData_scopeToSharingDataMapping;const initializeSharingScopeToInitDataMapping=(__webpack_require___initializeSharingData_scopeToSharingDataMapping=(__webpack_require___initializeSharingData=__webpack_require__.initializeSharingData)===null||__webpack_require___initializeSharingData===void 0?void 0:__webpack_require___initializeSharingData.scopeToSharingDataMapping)!==null&&__webpack_require___initializeSharingData_scopeToSharingDataMapping!==void 0?__webpack_require___initializeSharingData_scopeToSharingDataMapping:{};var __webpack_require___consumesLoadingData_chunkMapping;const consumesLoadingChunkMapping=(__webpack_require___consumesLoadingData_chunkMapping=(__webpack_require___consumesLoadingData=__webpack_require__.consumesLoadingData)===null||__webpack_require___consumesLoadingData===void 0?void 0:__webpack_require___consumesLoadingData.chunkMapping)!==null&&__webpack_require___consumesLoadingData_chunkMapping!==void 0?__webpack_require___consumesLoadingData_chunkMapping:{};var __webpack_require___consumesLoadingData_moduleIdToConsumeDataMapping;const consumesLoadingModuleToConsumeDataMapping=(__webpack_require___consumesLoadingData_moduleIdToConsumeDataMapping=(__webpack_require___consumesLoadingData1=__webpack_require__.consumesLoadingData)===null||__webpack_require___consumesLoadingData1===void 0?void 0:__webpack_require___consumesLoadingData1.moduleIdToConsumeDataMapping)!==null&&__webpack_require___consumesLoadingData_moduleIdToConsumeDataMapping!==void 0?__webpack_require___consumesLoadingData_moduleIdToConsumeDataMapping:{};const consumesLoadinginstalledModules={};const initializeSharingInitPromises=[];const initializeSharingInitTokens={};const containerShareScope=(__webpack_require___initializeExposesData=__webpack_require__.initializeExposesData)===null||__webpack_require___initializeExposesData===void 0?void 0:__webpack_require___initializeExposesData.shareScope;for(const key in __module_federation_bundler_runtime__){__webpack_require__.federation[key]=__module_federation_bundler_runtime__[key]}early(__webpack_require__.federation,\\"consumesLoadingModuleToHandlerMapping\\",()=>{const consumesLoadingModuleToHandlerMapping={};for(let[moduleId,data]of Object.entries(consumesLoadingModuleToConsumeDataMapping)){consumesLoadingModuleToHandlerMapping[moduleId]={getter:data.fallback,shareInfo:{shareConfig:{fixedDependencies:false,requiredVersion:data.requiredVersion,strictVersion:data.strictVersion,singleton:data.singleton,eager:data.eager},scope:[data.shareScope]},shareKey:data.shareKey}}return consumesLoadingModuleToHandlerMapping});early(__webpack_require__.federation,\\"initOptions\\",()=>({}));early(__webpack_require__.federation.initOptions,\\"name\\",()=>__module_federation_container_name__);early(__webpack_require__.federation.initOptions,\\"shareStrategy\\",()=>__module_federation_share_strategy__);early(__webpack_require__.federation.initOptions,\\"shared\\",()=>{const shared={};for(let[scope,stages]of Object.entries(initializeSharingScopeToInitDataMapping)){for(let stage of stages){if(typeof stage===\\"object\\"&&stage!==null){const{name,version,factory,eager,singleton,requiredVersion,strictVersion}=stage;const shareConfig={};const isValidValue=function(val){return typeof val!==\\"undefined\\"};if(isValidValue(singleton)){shareConfig.singleton=singleton}if(isValidValue(requiredVersion)){shareConfig.requiredVersion=requiredVersion}if(isValidValue(eager)){shareConfig.eager=eager}if(isValidValue(strictVersion)){shareConfig.strictVersion=strictVersion}const options={version,scope:[scope],shareConfig,get:factory};if(shared[name]){shared[name].push(options)}else{shared[name]=[options]}}}}return shared});merge(__webpack_require__.federation.initOptions,\\"remotes\\",()=>Object.values(__module_federation_remote_infos__).flat().filter(remote=>remote.externalType===\\"script\\"));merge(__webpack_require__.federation.initOptions,\\"plugins\\",()=>__module_federation_runtime_plugins__);early(__webpack_require__.federation,\\"bundlerRuntimeOptions\\",()=>({}));early(__webpack_require__.federation.bundlerRuntimeOptions,\\"remotes\\",()=>({}));early(__webpack_require__.federation.bundlerRuntimeOptions.remotes,\\"chunkMapping\\",()=>remotesLoadingChunkMapping);early(__webpack_require__.federation.bundlerRuntimeOptions.remotes,\\"remoteInfos\\",()=>__module_federation_remote_infos__);early(__webpack_require__.federation.bundlerRuntimeOptions.remotes,\\"idToExternalAndNameMapping\\",()=>{const remotesLoadingIdToExternalAndNameMappingMapping={};for(let[moduleId,data]of Object.entries(remotesLoadingModuleIdToRemoteDataMapping)){remotesLoadingIdToExternalAndNameMappingMapping[moduleId]=[data.shareScope,data.name,data.externalModuleId,data.remoteName]}return remotesLoadingIdToExternalAndNameMappingMapping});early(__webpack_require__.federation.bundlerRuntimeOptions.remotes,\\"webpackRequire\\",()=>__webpack_require__);merge(__webpack_require__.federation.bundlerRuntimeOptions.remotes,\\"idToRemoteMap\\",()=>{const idToRemoteMap={};for(let[id,remoteData]of Object.entries(remotesLoadingModuleIdToRemoteDataMapping)){const info=__module_federation_remote_infos__[remoteData.remoteName];if(info)idToRemoteMap[id]=info}return idToRemoteMap});override(__webpack_require__,\\"S\\",__webpack_require__.federation.bundlerRuntime.S);if(__webpack_require__.federation.attachShareScopeMap){__webpack_require__.federation.attachShareScopeMap(__webpack_require__)}override(__webpack_require__.f,\\"remotes\\",(chunkId,promises)=>__webpack_require__.federation.bundlerRuntime.remotes({chunkId,promises,chunkMapping:remotesLoadingChunkMapping,idToExternalAndNameMapping:__webpack_require__.federation.bundlerRuntimeOptions.remotes.idToExternalAndNameMapping,idToRemoteMap:__webpack_require__.federation.bundlerRuntimeOptions.remotes.idToRemoteMap,webpackRequire:__webpack_require__}));override(__webpack_require__.f,\\"consumes\\",(chunkId,promises)=>__webpack_require__.federation.bundlerRuntime.consumes({chunkId,promises,chunkMapping:consumesLoadingChunkMapping,moduleToHandlerMapping:__webpack_require__.federation.consumesLoadingModuleToHandlerMapping,installedModules:consumesLoadinginstalledModules,webpackRequire:__webpack_require__}));override(__webpack_require__,\\"I\\",(name,initScope)=>__webpack_require__.federation.bundlerRuntime.I({shareScopeName:name,initScope,initPromises:initializeSharingInitPromises,initTokens:initializeSharingInitTokens,webpackRequire:__webpack_require__}));override(__webpack_require__,\\"initContainer\\",(shareScope,initScope,remoteEntryInitOptions)=>__webpack_require__.federation.bundlerRuntime.initContainerEntry({shareScope,initScope,remoteEntryInitOptions,shareScopeKey:containerShareScope,webpackRequire:__webpack_require__}));override(__webpack_require__,\\"getContainer\\",(module1,getScope)=>{var moduleMap=__webpack_require__.initializeExposesData.moduleMap;__webpack_require__.R=getScope;getScope=Object.prototype.hasOwnProperty.call(moduleMap,module1)?moduleMap[module1]():Promise.resolve().then(()=>{throw new Error('Module \\"'+module1+'\\" does not exist in container.')});__webpack_require__.R=undefined;return getScope});__webpack_require__.federation.instance=__webpack_require__.federation.runtime.init(__webpack_require__.federation.initOptions);if((__webpack_require___consumesLoadingData2=__webpack_require__.consumesLoadingData)===null||__webpack_require___consumesLoadingData2===void 0?void 0:__webpack_require___consumesLoadingData2.initialConsumes){__webpack_require__.federation.bundlerRuntime.installInitialConsumes({webpackRequire:__webpack_require__,installedModules:consumesLoadinginstalledModules,initialConsumes:__webpack_require__.consumesLoadingData.initialConsumes,moduleToHandlerMapping:__webpack_require__.federation.consumesLoadingModuleToHandlerMapping})}}") + } + if (typeof prevStartup === 'function') { + return prevStartup(); + } else { + console.warn('[MF] Invalid prevStartup'); + } +}; +})(); +// webpack/runtime/has_own_property +(() => { +__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +})(); +// webpack/runtime/make_namespace_object +(() => { +// define __esModule on exports +__webpack_require__.r = (exports) => { + if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { + Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); + } + Object.defineProperty(exports, '__esModule', { value: true }); +}; +})(); +// webpack/runtime/rspack_version +(() => { +__webpack_require__.rv = () => ("1.6.0") +})(); +// webpack/runtime/sharing +(() => { + +__webpack_require__.S = {}; +__webpack_require__.initializeSharingData = { scopeToSharingDataMapping: { }, uniqueName: "" }; +__webpack_require__.I = __webpack_require__.I || function() { throw new Error("should have __webpack_require__.I") } + +})(); +// webpack/runtime/repack/polyfills +(() => { +// Polyfill: polyfill1.js +(function() { + globalThis.__POLYFILL_1__ = true; +})(); +// Polyfill: polyfill2.js +(function() { + globalThis.__POLYFILL_2__ = true; +})(); +})(); +// webpack/runtime/consumes_loading +(() => { + +__webpack_require__.consumesLoadingData = { chunkMapping: {"main":["webpack/sharing/consume/default/react-native/Libraries/Image/AssetRegistry","webpack/sharing/consume/default/react-native/Libraries/Image/AssetSourceResolver"]}, moduleIdToConsumeDataMapping: {"webpack/sharing/consume/default/react-native/Libraries/Image/AssetRegistry": { shareScope: "default", shareKey: "react-native/Libraries/Image/AssetRegistry", import: null, requiredVersion: "*", strictVersion: false, singleton: true, eager: true, fallback: undefined }, "webpack/sharing/consume/default/react-native/Libraries/Image/AssetSourceResolver": { shareScope: "default", shareKey: "react-native/Libraries/Image/AssetSourceResolver", import: null, requiredVersion: "*", strictVersion: false, singleton: true, eager: true, fallback: undefined }}, initialConsumes: ["webpack/sharing/consume/default/react-native/Libraries/Image/AssetRegistry","webpack/sharing/consume/default/react-native/Libraries/Image/AssetSourceResolver"] }; + +})(); +// webpack/runtime/rspack_unique_id +(() => { +__webpack_require__.ruid = "bundler=rspack@1.6.0"; + +})(); +/************************************************************************/ +// module cache are used so entry inlining is disabled +// run startup +var __webpack_exports__ = __webpack_require__.x(); +})() +;" +`;