Skip to content

Commit 2f855ee

Browse files
authored
fix: sanitize class names of css modules (#32)
1 parent e3572b0 commit 2f855ee

File tree

1 file changed

+14
-8
lines changed

1 file changed

+14
-8
lines changed

src/core/transform.ts

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -42,17 +42,23 @@ export async function transformCssModule(
4242
const compiledId = actualId
4343
.replaceAll('\\', '/')
4444
.replace(/\.module\.css$/, '.module_built.css')
45+
46+
const classes = Object.fromEntries(
47+
Object.entries(res.exports ?? {}).map(([key, value]) => [key, value.name]),
48+
)
49+
let exports = `const classes = ${JSON.stringify(classes)}\nexport default classes\n`
50+
const i = 0
51+
for (const key of Object.keys(classes)) {
52+
const sanitizedKey = `_${key.replaceAll(/\W/g, '_')}${i}`
53+
exports +=
54+
`\nconst ${sanitizedKey} = classes[${JSON.stringify(key)}]\n` +
55+
`export { ${sanitizedKey} as ${JSON.stringify(key)} }\n`
56+
}
57+
4558
return {
4659
code: res.code.toString(),
4760
map: 'map' in res ? res.map?.toString() : undefined,
4861
id: compiledId,
49-
exports: res.exports
50-
? Object.entries(res.exports)
51-
.map(
52-
([name, { name: className }]) =>
53-
`export const ${name} = "${className}";`,
54-
)
55-
.join('\n')
56-
: '',
62+
exports,
5763
}
5864
}

0 commit comments

Comments
 (0)