@@ -299,7 +299,7 @@ async function genStyleCode(
299
299
attachedProps : [ string , string ] [ ]
300
300
) {
301
301
let stylesCode = ``
302
- let hasCSSModules = false
302
+ let cssModulesMap : Record < string , string > | undefined
303
303
if ( descriptor . styles . length ) {
304
304
for ( let i = 0 ; i < descriptor . styles . length ; i ++ ) {
305
305
const style = descriptor . styles [ i ]
@@ -320,12 +320,13 @@ async function genStyleCode(
320
320
`<style module> is not supported in custom elements mode.`
321
321
)
322
322
}
323
- if ( ! hasCSSModules ) {
324
- stylesCode += `\nconst cssModules = {}`
325
- attachedProps . push ( [ `__cssModules` , `cssModules` ] )
326
- hasCSSModules = true
327
- }
328
- stylesCode += genCSSModulesCode ( i , styleRequest , style . module )
323
+ const [ importCode , nameMap ] = genCSSModulesCode (
324
+ i ,
325
+ styleRequest ,
326
+ style . module
327
+ )
328
+ stylesCode += importCode
329
+ Object . assign ( ( cssModulesMap ||= { } ) , nameMap )
329
330
} else {
330
331
if ( asCustomElement ) {
331
332
stylesCode += `\nimport _style_${ i } from ${ JSON . stringify (
@@ -344,22 +345,31 @@ async function genStyleCode(
344
345
] )
345
346
}
346
347
}
348
+ if ( cssModulesMap ) {
349
+ const mappingCode =
350
+ Object . entries ( cssModulesMap ) . reduce (
351
+ ( code , [ key , value ] ) => code + `"${ key } ":${ value } ,\n` ,
352
+ '{\n'
353
+ ) + '}'
354
+ stylesCode += `\nconst cssModules = ${ mappingCode } `
355
+ attachedProps . push ( [ `__cssModules` , `cssModules` ] )
356
+ }
347
357
return stylesCode
348
358
}
349
359
350
360
function genCSSModulesCode (
351
361
index : number ,
352
362
request : string ,
353
363
moduleName : string | boolean
354
- ) : string {
364
+ ) : [ importCode : string , nameMap : Record < string , string > ] {
355
365
const styleVar = `style${ index } `
356
366
const exposedName = typeof moduleName === 'string' ? moduleName : '$style'
357
367
// inject `.module` before extension so vite handles it as css module
358
368
const moduleRequest = request . replace ( / \. ( \w + ) $ / , '.module.$1' )
359
- return (
360
- `\nimport ${ styleVar } from ${ JSON . stringify ( moduleRequest ) } ` +
361
- `\ncssModules[" ${ exposedName } "] = ${ styleVar } `
362
- )
369
+ return [
370
+ `\nimport ${ styleVar } from ${ JSON . stringify ( moduleRequest ) } ` ,
371
+ { [ exposedName ] : styleVar }
372
+ ]
363
373
}
364
374
365
375
async function genCustomBlockCode (
0 commit comments