feat(compiler-sfc): generate source map for template block
This commit is contained in:
parent
9e757b5cc5
commit
865c1ce9ee
@ -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) {
|
||||||
|
block.map = generateSourceMap(
|
||||||
filename,
|
filename,
|
||||||
source,
|
source,
|
||||||
sfc.script.content,
|
block.content,
|
||||||
sourceRoot,
|
sourceRoot,
|
||||||
pad
|
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: {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user