|
import { decode as decode_mappings } from '@jridgewell/sourcemap-codec'; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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]; |
|
} else if (i > 0) { |
|
const previous_mapping = mappings[i - 1]; |
|
if ( |
|
|
|
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; |
|
} |
|
|
|
return map; |
|
} |
|
|
|
|
|
|
|
|
|
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') { |
|
|
|
decoded_map = decoded_sourcemap_from_generator(decoded_map); |
|
} |
|
return decoded_map; |
|
} |
|
|