feat(compiler-sfc): generate source map for template block

This commit is contained in:
Evan You 2019-12-13 13:22:30 -05:00
parent 9e757b5cc5
commit 865c1ce9ee

View File

@ -112,28 +112,20 @@ export function parse(
}) })
if (sourceMap) { if (sourceMap) {
if (sfc.script && !sfc.script.src) { const genMap = (block: SFCBlock | null) => {
sfc.script.map = generateSourceMap( if (block && !block.src) {
filename, block.map = generateSourceMap(
source, filename,
sfc.script.content, source,
sourceRoot, block.content,
pad sourceRoot,
) pad ? 0 : block.loc.start.line - 1
} )
if (sfc.styles) { }
sfc.styles.forEach(style => {
if (!style.src) {
style.map = generateSourceMap(
filename,
source,
style.content,
sourceRoot,
pad
)
}
})
} }
genMap(sfc.template)
genMap(sfc.script)
sfc.styles.forEach(genMap)
} }
sourceToSFC.set(sourceKey, sfc) sourceToSFC.set(sourceKey, sfc)
@ -205,27 +197,19 @@ function generateSourceMap(
source: string, source: string,
generated: string, generated: string,
sourceRoot: string, sourceRoot: string,
pad?: SFCParseOptions['pad'] lineOffset: number
): RawSourceMap { ): RawSourceMap {
const map = new SourceMapGenerator({ const map = new SourceMapGenerator({
file: filename.replace(/\\/g, '/'), file: filename.replace(/\\/g, '/'),
sourceRoot: sourceRoot.replace(/\\/g, '/') sourceRoot: sourceRoot.replace(/\\/g, '/')
}) })
let offset = 0
if (!pad) {
offset =
source
.split(generated)
.shift()!
.split(splitRE).length - 1
}
map.setSourceContent(filename, source) map.setSourceContent(filename, source)
generated.split(splitRE).forEach((line, index) => { generated.split(splitRE).forEach((line, index) => {
if (!emptyRE.test(line)) { if (!emptyRE.test(line)) {
map.addMapping({ map.addMapping({
source: filename, source: filename,
original: { original: {
line: index + 1 + offset, line: index + 1 + lineOffset,
column: 0 column: 0
}, },
generated: { generated: {