Skip to content

Commit de18693

Browse files
authored
fix: template src sourcemap source (#267)
1 parent 07e9f36 commit de18693

File tree

8 files changed

+48
-4
lines changed

8 files changed

+48
-4
lines changed

packages/plugin-vue/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -490,6 +490,7 @@ export default function vuePlugin(rawOptions: Options = {}): Plugin<Api> {
490490
if (query.type === 'template') {
491491
return transformTemplateAsModule(
492492
code,
493+
filename,
493494
descriptor,
494495
options.value,
495496
this,

packages/plugin-vue/src/script.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,12 @@ export function resolveScript(
7474
id: descriptor.id,
7575
isProd: options.isProduction,
7676
inlineTemplate: isUseInlineTemplate(descriptor, options),
77-
templateOptions: resolveTemplateCompilerOptions(descriptor, options, ssr),
77+
templateOptions: resolveTemplateCompilerOptions(
78+
descriptor,
79+
options,
80+
descriptor.filename,
81+
ssr,
82+
),
7883
sourceMap: options.sourceMap,
7984
genDefaultAs: canInlineMain(descriptor, options)
8085
? scriptIdentifier

packages/plugin-vue/src/template.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import type { ResolvedOptions } from './index'
1313

1414
export async function transformTemplateAsModule(
1515
code: string,
16+
filename: string,
1617
descriptor: SFCDescriptor,
1718
options: ResolvedOptions,
1819
pluginContext: Rollup.TransformPluginContext,
@@ -24,6 +25,7 @@ export async function transformTemplateAsModule(
2425
}> {
2526
const result = compile(
2627
code,
28+
filename,
2729
descriptor,
2830
options,
2931
pluginContext,
@@ -62,6 +64,7 @@ export function transformTemplateInMain(
6264
): SFCTemplateCompileResults {
6365
const result = compile(
6466
code,
67+
descriptor.filename,
6568
descriptor,
6669
options,
6770
pluginContext,
@@ -80,16 +83,16 @@ export function transformTemplateInMain(
8083
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
8184
export function compile(
8285
code: string,
86+
filename: string,
8387
descriptor: SFCDescriptor,
8488
options: ResolvedOptions,
8589
pluginContext: Rollup.PluginContext,
8690
ssr: boolean,
8791
customElement: boolean,
8892
) {
89-
const filename = descriptor.filename
9093
resolveScript(descriptor, options, ssr, customElement)
9194
const result = options.compiler.compileTemplate({
92-
...resolveTemplateCompilerOptions(descriptor, options, ssr)!,
95+
...resolveTemplateCompilerOptions(descriptor, options, filename, ssr)!,
9396
source: code,
9497
})
9598

@@ -118,6 +121,7 @@ export function compile(
118121
export function resolveTemplateCompilerOptions(
119122
descriptor: SFCDescriptor,
120123
options: ResolvedOptions,
124+
filename: string,
121125
ssr: boolean,
122126
): Omit<SFCTemplateCompileOptions, 'source'> | undefined {
123127
const block = descriptor.template
@@ -126,7 +130,7 @@ export function resolveTemplateCompilerOptions(
126130
}
127131
const resolvedScript = getResolvedScript(descriptor, ssr)
128132
const hasScoped = descriptor.styles.some((s) => s.scoped)
129-
const { id, filename, cssVars } = descriptor
133+
const { id, cssVars } = descriptor
130134

131135
let transformAssetUrls = options.template?.transformAssetUrls
132136
// compiler-sfc should export `AssetURLOptions`

playground/vue-sourcemap/Main.vue

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
<SassWithImport />
88
<Less />
99
<SrcImport />
10+
<SrcImportHtml />
1011
<NoScript />
1112
<NoTemplate />
1213
</template>
@@ -19,6 +20,7 @@ import Sass from './Sass.vue'
1920
import SassWithImport from './SassWithImport.vue'
2021
import Less from './Less.vue'
2122
import SrcImport from './src-import/SrcImport.vue'
23+
import SrcImportHtml from './src-import-html/SrcImportHtml.vue'
2224
import NoScript from './NoScript.vue'
2325
import NoTemplate from './NoTemplate.vue'
2426
</script>

playground/vue-sourcemap/__tests__/__snapshots__/vue-sourcemap.spec.ts.snap

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,20 @@ exports[`serve:vue-sourcemap > src imported > serve-src-imported 1`] = `
315315
}
316316
`;
317317

318+
exports[`serve:vue-sourcemap > src imported html > serve-html 1`] = `
319+
{
320+
"mappings": ";;;wBAAA,oBAA8B,WAA3B,mBAAuB",
321+
"sources": [
322+
"src-import.html",
323+
],
324+
"sourcesContent": [
325+
"<p>&lt;src-import-html&gt;</p>
326+
",
327+
],
328+
"version": 3,
329+
}
330+
`;
331+
318332
exports[`serve:vue-sourcemap > src imported sass > serve-src-imported-sass 1`] = `
319333
{
320334
"ignoreList": [],

playground/vue-sourcemap/__tests__/vue-sourcemap.spec.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,18 @@ describe.runIf(isServe)('serve:vue-sourcemap', () => {
9191
)
9292
})
9393

94+
test('src imported html', async () => {
95+
const res = await page.request.get(
96+
new URL(
97+
'./src-import-html/src-import.html?import&vue&type=template&src=true&lang.js',
98+
page.url(),
99+
).href,
100+
)
101+
const js = await res.text()
102+
const map = extractSourcemap(js)
103+
expect(formatSourcemapForSnapshot(map)).toMatchSnapshot('serve-html')
104+
})
105+
94106
test('no script', async () => {
95107
const res = await page.request.get(
96108
new URL('./NoScript.vue', page.url()).href,
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<template src="./src-import.html" />
2+
3+
<script setup lang="ts">
4+
console.log('src-import-html')
5+
</script>
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<p>&lt;src-import-html&gt;</p>

0 commit comments

Comments
 (0)