Skip to content

Commit 5004b11

Browse files
committed
feat: support generated JS imports for external scoped style
ref: vitejs/vite-plugin-vue@bd5055d
1 parent 0eeb721 commit 5004b11

File tree

3 files changed

+29
-3
lines changed

3 files changed

+29
-3
lines changed

src/core/index.ts

+8-3
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,11 @@ import { transformTemplateAsModule } from '../core/template'
1919
import { transformStyle } from '../core/style'
2020
import { EXPORT_HELPER_ID, helperCode } from '../core/helper'
2121
import { version } from '../../package.json'
22-
import { getDescriptor, getSrcDescriptor } from './utils/descriptorCache'
22+
import {
23+
getDescriptor,
24+
getSrcDescriptor,
25+
getTempSrcDescriptor,
26+
} from './utils/descriptorCache'
2327
import { parseVueRequest } from './utils/query'
2428
import { handleHotUpdate, handleTypeDepChange } from './handleHotUpdate'
2529
// eslint-disable-next-line import/no-duplicates
@@ -323,7 +327,8 @@ export default createUnplugin<Options | undefined, false>(
323327
} else {
324328
// sub block request
325329
const descriptor = query.src
326-
? getSrcDescriptor(filename, query)!
330+
? getSrcDescriptor(filename, query) ||
331+
getTempSrcDescriptor(filename, query)
327332
: getDescriptor(filename, options)!
328333

329334
if (query.type === 'template') {
@@ -338,7 +343,7 @@ export default createUnplugin<Options | undefined, false>(
338343
return transformStyle(
339344
code,
340345
descriptor,
341-
Number(query.index),
346+
Number(query.index || 0),
342347
options,
343348
this,
344349
filename

src/core/utils/descriptorCache.ts

+20
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,26 @@ export function getSrcDescriptor(
8181
return cache.get(filename)!
8282
}
8383

84+
export function getTempSrcDescriptor(
85+
filename: string,
86+
query: VueQuery
87+
): SFCDescriptor {
88+
// this is only used for pre-compiled <style src> with scoped flag
89+
return {
90+
filename,
91+
id: query.id || '',
92+
styles: [
93+
{
94+
scoped: query.scoped,
95+
loc: {
96+
// @ts-expect-error
97+
start: { line: 0, column: 0 },
98+
},
99+
},
100+
],
101+
}
102+
}
103+
84104
export function setSrcDescriptor(
85105
filename: string,
86106
entry: SFCDescriptor,

src/core/utils/query.ts

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ export interface VueQuery {
77
raw?: boolean
88
url?: boolean
99
scoped?: boolean
10+
id?: string
1011
}
1112

1213
export function parseVueRequest(id: string): {

0 commit comments

Comments
 (0)