UNPKG

metro-source-map

Version:

🚇 Source map generator for Metro.

211 lines (209 loc) • 6.08 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true, }); Object.defineProperty(exports, "BundleBuilder", { enumerable: true, get: function () { return _BundleBuilder.BundleBuilder; }, }); Object.defineProperty(exports, "Consumer", { enumerable: true, get: function () { return _Consumer.default; }, }); Object.defineProperty(exports, "composeSourceMaps", { enumerable: true, get: function () { return _composeSourceMaps.default; }, }); Object.defineProperty(exports, "createIndexMap", { enumerable: true, get: function () { return _BundleBuilder.createIndexMap; }, }); exports.default = void 0; exports.fromRawMappings = fromRawMappings; exports.fromRawMappingsNonBlocking = fromRawMappingsNonBlocking; Object.defineProperty(exports, "functionMapBabelPlugin", { enumerable: true, get: function () { return _generateFunctionMap.functionMapBabelPlugin; }, }); Object.defineProperty(exports, "generateFunctionMap", { enumerable: true, get: function () { return _generateFunctionMap.generateFunctionMap; }, }); Object.defineProperty(exports, "normalizeSourcePath", { enumerable: true, get: function () { return _normalizeSourcePath.default; }, }); exports.toBabelSegments = toBabelSegments; exports.toSegmentTuple = toSegmentTuple; var _BundleBuilder = require("./BundleBuilder"); var _composeSourceMaps = _interopRequireDefault(require("./composeSourceMaps")); var _Consumer = _interopRequireDefault(require("./Consumer")); var _normalizeSourcePath = _interopRequireDefault( require("./Consumer/normalizeSourcePath"), ); var _generateFunctionMap = require("./generateFunctionMap"); var _Generator = _interopRequireDefault(require("./Generator")); var _sourceMap = _interopRequireDefault(require("source-map")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } function fromRawMappingsImpl(isBlocking, onDone, modules, offsetLines) { const modulesToProcess = modules.slice(); const generator = new _Generator.default(); let carryOver = offsetLines; function processNextModule() { if (modulesToProcess.length === 0) { return true; } const mod = modulesToProcess.shift(); const { code, map } = mod; if (Array.isArray(map)) { addMappingsForFile(generator, map, mod, carryOver); } else if (map != null) { throw new Error( `Unexpected module with full source map found: ${mod.path}`, ); } carryOver = carryOver + countLines(code); return false; } function workLoop() { const time = process.hrtime(); while (true) { const isDone = processNextModule(); if (isDone) { onDone(generator); break; } if (!isBlocking) { const diff = process.hrtime(time); const NS_IN_MS = 1000000; if (diff[1] > 50 * NS_IN_MS) { setImmediate(workLoop); break; } } } } workLoop(); } function fromRawMappings(modules, offsetLines = 0) { let generator; fromRawMappingsImpl( true, (g) => { generator = g; }, modules, offsetLines, ); if (generator == null) { throw new Error("Expected fromRawMappingsImpl() to finish synchronously."); } return generator; } async function fromRawMappingsNonBlocking(modules, offsetLines = 0) { return new Promise((resolve) => { fromRawMappingsImpl(false, resolve, modules, offsetLines); }); } function toBabelSegments(sourceMap) { const rawMappings = []; new _sourceMap.default.SourceMapConsumer(sourceMap).eachMapping((map) => { rawMappings.push( map.originalLine == null || map.originalColumn == null ? { generated: { line: map.generatedLine, column: map.generatedColumn, }, source: map.source, name: map.name, } : { generated: { line: map.generatedLine, column: map.generatedColumn, }, original: { line: map.originalLine, column: map.originalColumn, }, source: map.source, name: map.name, }, ); }); return rawMappings; } function toSegmentTuple(mapping) { const { column, line } = mapping.generated; const { name, original } = mapping; if (original == null) { return [line, column]; } if (typeof name !== "string") { return [line, column, original.line, original.column]; } return [line, column, original.line, original.column, name]; } function addMappingsForFile(generator, mappings, module, carryOver) { generator.startFile(module.path, module.source, module.functionMap, { addToIgnoreList: module.isIgnored, }); for (let i = 0, n = mappings.length; i < n; ++i) { addMapping(generator, mappings[i], carryOver); } generator.endFile(); } function addMapping(generator, mapping, carryOver) { const line = mapping[0] + carryOver; const column = mapping[1]; switch (mapping.length) { case 2: generator.addSimpleMapping(line, column); return; case 4: generator.addSourceMapping(line, column, mapping[2], mapping[3]); return; case 5: generator.addNamedSourceMapping( line, column, mapping[2], mapping[3], mapping[4], ); return; } throw new Error(`Invalid mapping: [${mapping.join(", ")}]`); } const newline = /\r\n?|\n|\u2028|\u2029/g; const countLines = (string) => (string.match(newline) || []).length + 1; var _default = (exports.default = { BundleBuilder: _BundleBuilder.BundleBuilder, composeSourceMaps: _composeSourceMaps.default, Consumer: _Consumer.default, createIndexMap: _BundleBuilder.createIndexMap, generateFunctionMap: _generateFunctionMap.generateFunctionMap, fromRawMappings, fromRawMappingsNonBlocking, functionMapBabelPlugin: _generateFunctionMap.functionMapBabelPlugin, normalizeSourcePath: _normalizeSourcePath.default, toBabelSegments, toSegmentTuple, });