@@ -3,9 +3,7 @@ import qs from 'querystring'
3
3
import chalk from 'chalk'
4
4
import loaderUtils from 'loader-utils'
5
5
import { VueLoaderOptions } from './'
6
- import { SourceMapConsumer , RawSourceMap } from 'source-map'
7
6
import { compileTemplate , generateCodeFrame } from '@vue/compiler-sfc'
8
- import mergeSourceMap from 'merge-source-map'
9
7
10
8
// Loader that compiles raw template into JavaScript functions.
11
9
// This is injected by the global pitcher (../pitch) for template
@@ -27,7 +25,7 @@ const TemplateLoader: webpack.loader.Loader = function(source, inMap) {
27
25
28
26
const compiled = compileTemplate ( {
29
27
source,
30
- // avoid source content overwriting the original
28
+ inMap ,
31
29
filename : loaderContext . resourcePath ,
32
30
compiler : options . compiler ,
33
31
compilerOptions : {
@@ -46,49 +44,32 @@ const TemplateLoader: webpack.loader.Loader = function(source, inMap) {
46
44
47
45
// errors
48
46
if ( compiled . errors && compiled . errors . length ) {
49
- const lineOffset = inMap ? getLineOffset ( inMap ) : 0
50
47
compiled . errors . forEach ( err => {
51
48
if ( typeof err === 'string' ) {
52
49
loaderContext . emitError ( err )
53
50
} else {
54
51
if ( err . loc ) {
55
- const filePath = chalk . gray (
56
- `at ${ loaderContext . resourcePath } :${ err . loc . start . line +
57
- lineOffset } :${ err . loc . start . column } `
52
+ const loc = `:${ err . loc . start . line } :${ err . loc . start . column } `
53
+ const filePath = chalk . gray ( `at ${ loaderContext . resourcePath } ${ loc } ` )
54
+ const originalSource = inMap
55
+ ? inMap . sourcesContent ! [ 0 ]
56
+ : ( source as string )
57
+ const codeframe = generateCodeFrame (
58
+ originalSource ,
59
+ err . loc . start . offset ,
60
+ err . loc . end . offset
58
61
)
59
-
60
62
err . message = `\n${ chalk . red (
61
63
`Syntax Error: ${ err . message } `
62
- ) } \n${ filePath } \n${ chalk . yellow (
63
- generateCodeFrame (
64
- source as string ,
65
- err . loc . start . offset ,
66
- err . loc . end . offset ,
67
- lineOffset
68
- )
69
- ) } \n`
64
+ ) } \n${ filePath } \n${ chalk . yellow ( codeframe ) } \n`
70
65
}
71
66
loaderContext . emitError ( err )
72
67
}
73
68
} )
74
69
}
75
70
76
- let { code, map } = compiled
77
- if ( map && inMap ) {
78
- // avoid overwritting original *.vue source during merge
79
- map . sourcesContent = [ ]
80
- map = mergeSourceMap ( inMap , map )
81
- }
71
+ const { code, map } = compiled
82
72
loaderContext . callback ( null , code , map )
83
73
}
84
74
85
- function getLineOffset ( map : RawSourceMap ) : number {
86
- const consumer = new SourceMapConsumer ( map )
87
- let offset = 0
88
- consumer . eachMapping ( map => {
89
- offset = map . originalLine - map . generatedLine
90
- } )
91
- return offset
92
- }
93
-
94
75
module . exports = TemplateLoader
0 commit comments