function asIndexedRamBundle()

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,
        }),
      ),
    }),
  };
}