Lint and format src/compiler/preprocess/decode_sourcemap.js

pull/8569/head
Simon Holthausen 3 years ago
parent aaa4bf6dde
commit 7cb3c1b641

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

Loading…
Cancel
Save