in packages/metro/src/ModuleGraph/output/indexed-ram-bundle.js [27:103]
function asIndexedRamBundle({
dependencyMapReservedName,
filename,
globalPrefix,
idsForPath,
modules,
preloadedModules,
ramGroupHeads,
requireCalls,
}: $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,
}>): {|
code: string | Buffer,
extraFiles?: Iterable<[string, string | Buffer]>,
map: 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}),
);
for (const m of deferredModules) {
invariant(
m.id >= 0,
'A script (non-module) cannot be part of the deferred modules of a RAM bundle ' +
`(\`${m.sourcePath}\`, id=${m.id})`,
);
}
const ramGroups = createRamBundleGroups(
ramGroupHeads || [],
deferredModules,
subtree,
);
const moduleGroups = createModuleGroups(ramGroups, deferredModules);
const tableAndContents = buildTableAndContents(
startupModules
.map(
(m: Module) =>
getModuleCodeAndMap(m, idForPath, {
dependencyMapReservedName,
enableIDInlining: true,
globalPrefix,
}).moduleCode,
)
.join('\n'),
deferredModules,
moduleGroups,
'utf8',
);
return {
code: Buffer.concat(tableAndContents),
map: buildSourcemapWithMetadata({
fixWrapperOffset: false,
lazyModules: deferredModules,
moduleGroups,
startupModules: startupModules.map((m: Module) =>
toModuleTransport(m, idsForPath, {
dependencyMapReservedName,
globalPrefix,
}),
),
}),
};
}