You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
2.1 KiB
62 lines
2.1 KiB
"use strict"; |
|
Object.defineProperty(exports, "__esModule", { value: true }); |
|
exports.parse = void 0; |
|
const source_map_1 = require("source-map"); |
|
const hash = require('hash-sum'); |
|
const cache = new (require('lru-cache'))(100); |
|
const splitRE = /\r?\n/g; |
|
const emptyRE = /^(?:\/\/)?\s*$/; |
|
function parse(options) { |
|
const { source, filename = '', compiler, compilerParseOptions = { pad: 'line' }, sourceRoot = '', needMap = true } = options; |
|
const cacheKey = hash(filename + source + JSON.stringify(compilerParseOptions)); |
|
let output = cache.get(cacheKey); |
|
if (output) |
|
return output; |
|
output = compiler.parseComponent(source, compilerParseOptions); |
|
if (needMap) { |
|
if (output.script && !output.script.src) { |
|
output.script.map = generateSourceMap(filename, source, output.script.content, sourceRoot, compilerParseOptions.pad); |
|
} |
|
if (output.styles) { |
|
output.styles.forEach(style => { |
|
if (!style.src) { |
|
style.map = generateSourceMap(filename, source, style.content, sourceRoot, compilerParseOptions.pad); |
|
} |
|
}); |
|
} |
|
} |
|
cache.set(cacheKey, output); |
|
return output; |
|
} |
|
exports.parse = parse; |
|
function generateSourceMap(filename, source, generated, sourceRoot, pad) { |
|
const map = new source_map_1.SourceMapGenerator({ |
|
file: filename.replace(/\\/g, '/'), |
|
sourceRoot: sourceRoot.replace(/\\/g, '/') |
|
}); |
|
let offset = 0; |
|
if (!pad) { |
|
offset = |
|
source |
|
.split(generated) |
|
.shift() |
|
.split(splitRE).length - 1; |
|
} |
|
map.setSourceContent(filename, source); |
|
generated.split(splitRE).forEach((line, index) => { |
|
if (!emptyRE.test(line)) { |
|
map.addMapping({ |
|
source: filename, |
|
original: { |
|
line: index + 1 + offset, |
|
column: 0 |
|
}, |
|
generated: { |
|
line: index + 1, |
|
column: 0 |
|
} |
|
}); |
|
} |
|
}); |
|
return JSON.parse(map.toString()); |
|
}
|
|
|