From 6630a86a8bf400c1eae3a8dffd205329bac6c63e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arnaud=20Barr=C3=A9?= Date: Sat, 10 Dec 2022 19:54:44 +0100 Subject: [PATCH] Fix cssModuleToJS with kebab case classes --- CHANGELOG.md | 4 ++++ src/index.ts | 2 +- src/utils/cssModuleToJS.ts | 16 ++++++++++++++++ src/utils/modules.ts | 7 ------- tests/cssModuleToJS.test.ts | 27 +++++++++++++++++++++++++++ tests/run-tests.ts | 1 + 6 files changed, 49 insertions(+), 8 deletions(-) create mode 100644 src/utils/cssModuleToJS.ts delete mode 100644 src/utils/modules.ts create mode 100644 tests/cssModuleToJS.test.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index c5ee46e..65ca533 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## Unreleased + +- Fix cssModuleToJS with kebab case classes + ## 0.4.2 - Fix crash when using arbitrary values for `animate` rule diff --git a/src/index.ts b/src/index.ts index bde37ce..39fd3d0 100644 --- a/src/index.ts +++ b/src/index.ts @@ -37,7 +37,7 @@ import { themeGet } from "./utils/themeGet"; import { getVariants, Variant } from "./variants"; export const VERSION = __VERSION__; -export { cssModuleToJS } from "./utils/modules"; +export { cssModuleToJS } from "./utils/cssModuleToJS"; export { convertTargets } from "./utils/convertTargets"; const arbitraryValueRE = /-\[.+]$/; diff --git a/src/utils/cssModuleToJS.ts b/src/utils/cssModuleToJS.ts new file mode 100644 index 0000000..69c7001 --- /dev/null +++ b/src/utils/cssModuleToJS.ts @@ -0,0 +1,16 @@ +import type { cssModuleToJS as cssModuleToJSDeclaration } from "../types"; + +export const cssModuleToJS: typeof cssModuleToJSDeclaration = (cssModule) => { + let namedExport = ""; + let defaultExport = "export default {\n"; + for (const key in cssModule) { + if (!key.includes("-")) { + namedExport += `export const ${key} = "${cssModule[key].name}";\n`; + defaultExport += ` ${key},\n`; + } else { + defaultExport += ` "${key}": "${cssModule[key].name}",\n`; + } + } + defaultExport += "};"; + return namedExport + defaultExport; +}; diff --git a/src/utils/modules.ts b/src/utils/modules.ts deleted file mode 100644 index 4ac5fd8..0000000 --- a/src/utils/modules.ts +++ /dev/null @@ -1,7 +0,0 @@ -import type { cssModuleToJS as cssModuleToJSDeclaration } from "../types"; - -export const cssModuleToJS: typeof cssModuleToJSDeclaration = (cssModule) => - Object.entries(cssModule) - .map(([key, value]) => `export const ${key} = "${value.name}";\n`) - .concat(`export default { ${Object.keys(cssModule).join(", ")} };\n`) - .join(""); diff --git a/tests/cssModuleToJS.test.ts b/tests/cssModuleToJS.test.ts new file mode 100644 index 0000000..99db647 --- /dev/null +++ b/tests/cssModuleToJS.test.ts @@ -0,0 +1,27 @@ +import * as assert from "node:assert"; +import test from "node:test"; + +import { cssModuleToJS } from "../src/utils/cssModuleToJS"; + +test("convertTargets", () => { + assert.equal( + cssModuleToJS({ + "container": { + name: "_container_11zaj_1", + composes: [], + isReferenced: false, + }, + "kebab-case": { + name: "_kebab-case_11zaj_6", + composes: [], + isReferenced: false, + }, + }), + ` +export const container = "_container_11zaj_1"; +export default { + container, + "kebab-case": "_kebab-case_11zaj_6", +};`.trim(), + ); +}); diff --git a/tests/run-tests.ts b/tests/run-tests.ts index d1aec5c..9d8cd59 100755 --- a/tests/run-tests.ts +++ b/tests/run-tests.ts @@ -12,6 +12,7 @@ declare global { require("./generate.test"); require("./preTransform.test"); require("./convertTargets.test"); +require("./cssModuleToJS.test"); require("./codegen.test"); require("./esbuildPlugin.test"); require("./vitePlugin.test");