diff --git a/src/compiler/preprocess/decode_sourcemap.js b/src/compiler/preprocess/decode_sourcemap.js index 13517be098..cb0987f013 100644 --- a/src/compiler/preprocess/decode_sourcemap.js +++ b/src/compiler/preprocess/decode_sourcemap.js @@ -7,82 +7,76 @@ import { decode as decode_mappings } from '@jridgewell/sourcemap-codec'; * @param {any} generator */ function decoded_sourcemap_from_generator(generator) { - let previous_generated_line = 1; - const converted_mappings = [[]]; - let result_line; - let result_segment; - let mapping; - const source_idx = generator._sources - .toArray() - .reduce((acc, val, idx) => ((acc[val] = idx), acc), {}); - const name_idx = generator._names - .toArray() - .reduce((acc, val, idx) => ((acc[val] = idx), acc), {}); - const mappings = generator._mappings.toArray(); - result_line = converted_mappings[0]; - for (let i = 0, len = mappings.length; i < len; i++) { - mapping = mappings[i]; - if (mapping.generatedLine > previous_generated_line) { - while (mapping.generatedLine > previous_generated_line) { - converted_mappings.push([]); - previous_generated_line++; - } - result_line = converted_mappings[mapping.generatedLine - 1]; // line is one-based - } - else if (i > 0) { - const previous_mapping = mappings[i - 1]; - if ( - // sorted by selectivity - mapping.generatedColumn === previous_mapping.generatedColumn && - mapping.originalColumn === previous_mapping.originalColumn && - mapping.name === previous_mapping.name && - mapping.generatedLine === previous_mapping.generatedLine && - mapping.originalLine === previous_mapping.originalLine && - mapping.source === previous_mapping.source) { - continue; - } - } - result_line.push([mapping.generatedColumn]); - result_segment = result_line[result_line.length - 1]; - if (mapping.source != null) { - result_segment.push(...[ - source_idx[mapping.source], - mapping.originalLine - 1, - mapping.originalColumn - ]); - if (mapping.name != null) { - result_segment.push(name_idx[mapping.name]); - } - } - } - const map = { - version: generator._version, - sources: generator._sources.toArray(), - names: generator._names.toArray(), - mappings: converted_mappings - }; - if (generator._file != null) { - map.file = generator._file; - } - // not needed: map.sourcesContent and map.sourceRoot - return map; + let previous_generated_line = 1; + const converted_mappings = [[]]; + let result_line; + let result_segment; + let mapping; + const source_idx = generator._sources + .toArray() + .reduce((acc, val, idx) => ((acc[val] = idx), acc), {}); + const name_idx = generator._names + .toArray() + .reduce((acc, val, idx) => ((acc[val] = idx), acc), {}); + const mappings = generator._mappings.toArray(); + result_line = converted_mappings[0]; + for (let i = 0, len = mappings.length; i < len; i++) { + mapping = mappings[i]; + if (mapping.generatedLine > previous_generated_line) { + while (mapping.generatedLine > previous_generated_line) { + converted_mappings.push([]); + previous_generated_line++; + } + result_line = converted_mappings[mapping.generatedLine - 1]; // line is one-based + } else if (i > 0) { + const previous_mapping = mappings[i - 1]; + if ( + // sorted by selectivity + mapping.generatedColumn === previous_mapping.generatedColumn && + mapping.originalColumn === previous_mapping.originalColumn && + mapping.name === previous_mapping.name && + mapping.generatedLine === previous_mapping.generatedLine && + mapping.originalLine === previous_mapping.originalLine && + mapping.source === previous_mapping.source + ) { + continue; + } + } + result_line.push([mapping.generatedColumn]); + result_segment = result_line[result_line.length - 1]; + if (mapping.source != null) { + result_segment.push( + ...[source_idx[mapping.source], mapping.originalLine - 1, mapping.originalColumn] + ); + if (mapping.name != null) { + result_segment.push(name_idx[mapping.name]); + } + } + } + const map = { + version: generator._version, + sources: generator._sources.toArray(), + names: generator._names.toArray(), + mappings: converted_mappings + }; + if (generator._file != null) { + map.file = generator._file; + } + // not needed: map.sourcesContent and map.sourceRoot + return map; } /** * @param {Processed} processed */ export function decode_map(processed) { - let decoded_map = typeof processed.map === 'string' ? JSON.parse(processed.map) : processed.map; - if (typeof decoded_map.mappings === 'string') { - decoded_map.mappings = decode_mappings(decoded_map.mappings); - } - if (decoded_map._mappings && decoded_map.constructor.name === 'SourceMapGenerator') { - // import decoded sourcemap from mozilla/source-map/SourceMapGenerator - decoded_map = decoded_sourcemap_from_generator(decoded_map); - } - return decoded_map; + let decoded_map = typeof processed.map === 'string' ? JSON.parse(processed.map) : processed.map; + if (typeof decoded_map.mappings === 'string') { + decoded_map.mappings = decode_mappings(decoded_map.mappings); + } + if (decoded_map._mappings && decoded_map.constructor.name === 'SourceMapGenerator') { + // import decoded sourcemap from mozilla/source-map/SourceMapGenerator + decoded_map = decoded_sourcemap_from_generator(decoded_map); + } + return decoded_map; } - - - -