in packages/metro/src/ModuleGraph/output/multiple-files-ram-bundle.js [25:96]
function asMultipleFilesRamBundle({
dependencyMapReservedName,
filename,
globalPrefix,
idsForPath,
modules,
requireCalls,
preloadedModules,
}: $TEMPORARY$object<{
dependencyMapReservedName?: ?string,
enableIDInlining: boolean,
filename: string,
globalPrefix: string,
idsForPath: IdsForPathFn,
modules: Iterable<Module>,
preloadedModules: Set<string>,
ramGroupHeads: ?$ReadOnlyArray<string>,
requireCalls: Iterable<Module>,
segmentID: number,
sourceMapPath?: ?string,
}>): OutputResult<IndexMap> {
const idForPath = (x: {path: string, ...}) => idsForPath(x).moduleId;
const [startup, deferred] = partition(modules, preloadedModules);
const startupModules = [...startup, ...requireCalls];
const deferredModules = deferred.map((m: Module) =>
toModuleTransport(m, idsForPath, {dependencyMapReservedName, globalPrefix}),
);
const magicFileContents = Buffer.alloc(4);
// Just concatenate all startup modules, one after the other.
const code = startupModules
.map(
(m: Module) =>
getModuleCodeAndMap(m, idForPath, {
dependencyMapReservedName,
enableIDInlining: true,
globalPrefix,
}).moduleCode,
)
.join('\n');
// Write one file per module, wrapped with __d() call if it proceeds.
const extraFiles = new Map();
deferredModules.forEach(deferredModule => {
extraFiles.set(
path.join(JS_MODULES, deferredModule.id + '.js'),
deferredModule.code,
);
});
// Prepare and write magic number file.
magicFileContents.writeUInt32LE(MAGIC_UNBUNDLE_NUMBER, 0);
extraFiles.set(
path.join(JS_MODULES, MAGIC_UNBUNDLE_FILENAME),
magicFileContents,
);
// Create the source map (with no module groups, as they are ignored).
const map = buildSourcemapWithMetadata({
fixWrapperOffset: false,
lazyModules: deferredModules,
moduleGroups: null,
startupModules: startupModules.map((m: Module) =>
toModuleTransport(m, idsForPath, {
dependencyMapReservedName,
globalPrefix,
}),
),
});
return {code, extraFiles, map};
}