Skip to content

Commit 86f295e

Browse files
committed
Implementation
1 parent cb8a663 commit 86f295e

File tree

3 files changed

+16
-7
lines changed

3 files changed

+16
-7
lines changed

src/plugin/generate-esm.ts

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { makeLegalIdentifier } from '@rollup/pluginutils';
2-
import type { ExportMode } from './types.js';
2+
import type { ComposedClassesMode, ExportMode } from './types.js';
33

44
type ImportSpecifiers = Record<string /* exportName */, string /* importAs */>;
55
export type Imports = Map<string /* filePath */, ImportSpecifiers>;
@@ -44,6 +44,7 @@ const importsToCode = (
4444
const exportsToCode = (
4545
exports: Exports,
4646
exportMode: ExportMode,
47+
composedClassesMode: ComposedClassesMode,
4748
allowArbitraryNamedExports = false,
4849
) => {
4950
let code = '';
@@ -52,7 +53,12 @@ const exportsToCode = (
5253
const exportedVariables = Object.entries(exports).flatMap(
5354
([exportName, { exportAs, code: value }]) => {
5455
const jsVariable = makeLegalIdentifier(exportName);
55-
variables.add(`const ${jsVariable} = \`${value}\`;`);
56+
57+
if (composedClassesMode === 'string' || (composedClassesMode === 'array' && !value.includes(' '))) {
58+
variables.add(`const ${jsVariable} = \`${value}\`;`);
59+
} else {
60+
variables.add(`const ${jsVariable} = [${value.split(' ').map(v => `\`${v}\``).join(', ')}];`);
61+
}
5662

5763
return Array.from(exportAs).map((exportAsName) => {
5864
const exportNameSafe = makeLegalIdentifier(exportAsName);
@@ -116,10 +122,11 @@ export const generateEsm = (
116122
imports: Imports,
117123
exports: Exports,
118124
exportMode: ExportMode,
125+
composedClassesMode: ComposedClassesMode,
119126
allowArbitraryNamedExports = false,
120127
) => (
121128
importsToCode(imports, exportMode, allowArbitraryNamedExports)
122-
+ exportsToCode(exports, exportMode, allowArbitraryNamedExports)
129+
+ exportsToCode(exports, exportMode, composedClassesMode, allowArbitraryNamedExports)
123130
);
124131

125132
const dtsComment = `

src/plugin/index.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ export type PatchConfig = {
6868
* - 'array': composed classes as arrays of strings
6969
* - 'all-array': all classes as arrays of strings
7070
*/
71-
composedClasses?: ComposedClassesMode;
71+
composedClassesMode?: ComposedClassesMode;
7272
};
7373

7474
// This plugin is designed to be used by Vite internally
@@ -97,6 +97,7 @@ export const cssModules = (
9797
);
9898

9999
const exportMode = patchConfig?.exportMode ?? 'both';
100+
const composedClassesMode = patchConfig?.composedClassesMode ?? 'string';
100101

101102
return {
102103
name: pluginName,
@@ -283,6 +284,7 @@ export const cssModules = (
283284
imports,
284285
exports,
285286
exportMode,
287+
composedClassesMode,
286288
allowArbitraryNamedExports,
287289
);
288290

tests/specs/patched/postcss.spec.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -551,7 +551,7 @@ export default testSuite(({ describe }) => {
551551
await using fixture = await createFixture(fixtures.composedAndFlat);
552552

553553
const { js } = await viteBuild(fixture.path, {
554-
plugins: [patchCssModules({ composedClasses: 'string' })],
554+
plugins: [patchCssModules({ composedClassesMode: 'string' })],
555555
build: {
556556
target: 'es2022',
557557
},
@@ -569,7 +569,7 @@ export default testSuite(({ describe }) => {
569569
await using fixture = await createFixture(fixtures.composedAndFlat);
570570

571571
const { js } = await viteBuild(fixture.path, {
572-
plugins: [patchCssModules({ composedClasses: 'array' })],
572+
plugins: [patchCssModules({ composedClassesMode: 'array' })],
573573
build: {
574574
target: 'es2022',
575575
},
@@ -587,7 +587,7 @@ export default testSuite(({ describe }) => {
587587
await using fixture = await createFixture(fixtures.composedAndFlat);
588588

589589
const { js } = await viteBuild(fixture.path, {
590-
plugins: [patchCssModules({ composedClasses: 'all-array' })],
590+
plugins: [patchCssModules({ composedClassesMode: 'all-array' })],
591591
build: {
592592
target: 'es2022',
593593
},

0 commit comments

Comments
 (0)