Skip to content

Commit

Permalink
fix: make cssm code tree shakeable
Browse files Browse the repository at this point in the history
  • Loading branch information
sxzz committed Jan 21, 2022
1 parent 066e0f3 commit b2a273b
Showing 1 changed file with 21 additions and 12 deletions.
33 changes: 21 additions & 12 deletions src/core/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -297,7 +297,7 @@ async function genStyleCode(
attachedProps: [string, string][]
) {
let stylesCode = ``
let hasCSSModules = false
let cssModulesMap: Record<string, string> | undefined
if (descriptor.styles.length > 0) {
for (let i = 0; i < descriptor.styles.length; i++) {
const style = descriptor.styles[i]
Expand All @@ -318,12 +318,13 @@ async function genStyleCode(
`<style module> is not supported in custom elements mode.`
)
}
if (!hasCSSModules) {
stylesCode += `\nconst cssModules = {}`
attachedProps.push([`__cssModules`, `cssModules`])
hasCSSModules = true
}
stylesCode += genCSSModulesCode(i, styleRequest, style.module)
const [importCode, nameMap] = genCSSModulesCode(
i,
styleRequest,
style.module
)
stylesCode += importCode
Object.assign((cssModulesMap ||= {}), nameMap)
} else if (asCustomElement) {
stylesCode += `\nimport _style_${i} from ${JSON.stringify(
styleRequest
Expand All @@ -340,22 +341,30 @@ async function genStyleCode(
])
}
}
if (cssModulesMap) {
const mappingCode = `${Object.entries(cssModulesMap).reduce(
(code, [key, value]) => `${code}"${key}":${value},\n`,
'{\n'
)}}`
stylesCode += `\nconst cssModules = ${mappingCode}`
attachedProps.push([`__cssModules`, `cssModules`])
}
return stylesCode
}

function genCSSModulesCode(
index: number,
request: string,
moduleName: string | boolean
): string {
): [importCode: string, nameMap: Record<string, string>] {
const styleVar = `style${index}`
const exposedName = typeof moduleName === 'string' ? moduleName : '$style'
// inject `.module` before extension so vite handles it as css module
const moduleRequest = request.replace(/\.(\w+)$/, '.module.$1')
return (
`\nimport ${styleVar} from ${JSON.stringify(moduleRequest)}` +
`\ncssModules["${exposedName}"] = ${styleVar}`
)
return [
`\nimport ${styleVar} from ${JSON.stringify(moduleRequest)}`,
{ [exposedName]: styleVar },
]
}

async function genCustomBlockCode(
Expand Down

0 comments on commit b2a273b

Please sign in to comment.