in packages/metro/src/shared/output/RamBundle/util.js [79:135]
function combineMaps(
modules: $ReadOnlyArray<ModuleTransportLike>,
offsets: ?Array<number>,
moduleGroups: ?ModuleGroups,
options: ?CombineOptions,
): Array<IndexMapSection> {
const sections = [];
let line = 0;
modules.forEach((moduleTransport: ModuleTransportLike) => {
const {code, id, name} = moduleTransport;
let column = 0;
let group;
let groupLines = 0;
let {map} = moduleTransport;
if (moduleGroups && moduleGroups.modulesInGroups.has(id)) {
// this is a module appended to another module
return;
}
if (offsets != null) {
group = moduleGroups && moduleGroups.groups.get(id);
if (group && moduleGroups) {
const {modulesById} = moduleGroups;
const otherModules: $ReadOnlyArray<ModuleTransportLike> = Array.from(
group || [],
)
.map((moduleId: number) => modulesById.get(moduleId))
.filter(Boolean); // needed to appease flow
otherModules.forEach((m: ModuleTransportLike) => {
groupLines += countLines(m.code);
});
map = combineSourceMaps([moduleTransport].concat(otherModules));
}
column = options && options.fixWrapperOffset ? wrapperEnd(code) : 0;
}
invariant(
!Array.isArray(map),
'Random Access Bundle source maps cannot be built from raw mappings',
);
sections.push(
Section(line, column, map || lineToLineSourceMap(code, name)),
);
if (offsets != null && id != null) {
offsets[id] = line;
for (const moduleId of group || []) {
offsets[moduleId] = line;
}
}
line += countLines(code) + groupLines;
});
return sections;
}