"use strict";Object.defineProperty(exports, "__esModule", {value: true});var _genmapping = require('@jridgewell/gen-mapping'); var _charcodes = require('./parser/util/charcodes'); /** * Generate a source map indicating that each line maps directly to the original line, * with the tokens in their new positions. */ function computeSourceMap( {code: generatedCode, mappings: rawMappings}, filePath, options, source, tokens, ) { const sourceColumns = computeSourceColumns(source, tokens); const map = new (0, _genmapping.GenMapping)({file: options.compiledFilename}); let tokenIndex = 0; // currentMapping is the output source index for the current input token being // considered. let currentMapping = rawMappings[0]; while (currentMapping === undefined && tokenIndex < rawMappings.length - 1) { tokenIndex++; currentMapping = rawMappings[tokenIndex]; } let line = 0; let lineStart = 0; if (currentMapping !== lineStart) { _genmapping.maybeAddSegment.call(void 0, map, line, 0, filePath, line, 0); } for (let i = 0; i < generatedCode.length; i++) { if (i === currentMapping) { const genColumn = currentMapping - lineStart; const sourceColumn = sourceColumns[tokenIndex]; _genmapping.maybeAddSegment.call(void 0, map, line, genColumn, filePath, line, sourceColumn); while ( (currentMapping === i || currentMapping === undefined) && tokenIndex < rawMappings.length - 1 ) { tokenIndex++; currentMapping = rawMappings[tokenIndex]; } } if (generatedCode.charCodeAt(i) === _charcodes.charCodes.lineFeed) { line++; lineStart = i + 1; if (currentMapping !== lineStart) { _genmapping.maybeAddSegment.call(void 0, map, line, 0, filePath, line, 0); } } } const {sourceRoot, sourcesContent, ...sourceMap} = _genmapping.toEncodedMap.call(void 0, map); return sourceMap ; } exports.default = computeSourceMap; /** * Create an array mapping each token index to the 0-based column of the start * position of the token. */ function computeSourceColumns(code, tokens) { const sourceColumns = new Array(tokens.length); let tokenIndex = 0; let currentMapping = tokens[tokenIndex].start; let lineStart = 0; for (let i = 0; i < code.length; i++) { if (i === currentMapping) { sourceColumns[tokenIndex] = currentMapping - lineStart; tokenIndex++; currentMapping = tokens[tokenIndex].start; } if (code.charCodeAt(i) === _charcodes.charCodes.lineFeed) { lineStart = i + 1; } } return sourceColumns; }