diff --git a/src/utils.js b/src/utils.js index c593fb1..17a0c6b 100644 --- a/src/utils.js +++ b/src/utils.js @@ -7,7 +7,7 @@ const camelCase = require("camelcase"); * @returns {string[]} */ const getCssModuleKeys = content => { - const keyRegex = /"([^\\"]+)":/g; + const keyRegex = /"([\w-]+)":/g; let match; const cssModuleKeys = []; diff --git a/test/utils.test.js b/test/utils.test.js index 90c729e..4ad272c 100644 --- a/test/utils.test.js +++ b/test/utils.test.js @@ -1,5 +1,5 @@ // @ts-check -const { filenameToPascalCase } = require("../src/utils"); +const { filenameToPascalCase, getCssModuleKeys } = require("../src/utils"); describe("filenameToPascalCase", () => { it("camelCase", () => { @@ -22,3 +22,42 @@ describe("filenameToPascalCase", () => { expect(actual).toBe("ReactDatePicker"); }); }); + +describe("getCssModuleKeys", () => { + it("empty CSS module", () => { + const content = ` + exports = module.exports = require("../node_modules/css-loader/dist/runtime/api.js")(false); + // Module + exports.push([module.id, "", ""]); + `; + const actual = getCssModuleKeys(content); + expect(actual).toEqual([]); + }); + + it("CSS module with one class", () => { + const content = `exports.locals = { + "test": "test" + };` + const actual = getCssModuleKeys(content); + expect(actual).toEqual(['test']); + }); + + it("CSS module with multiple classes", () => { + const content = `exports.locals = { + "test1": "test1", + "test2": "test2" + };` + const actual = getCssModuleKeys(content); + expect(actual).toEqual(['test1', 'test2']); + }); + + it("CSS module with :root pseudo-class only", () => { + const content = ` + exports = module.exports = require("../node_modules/css-loader/dist/runtime/api.js")(false); + // Module + exports.push([module.id, ":root {\n --background: green; }\n", ""]); + `; + const actual = getCssModuleKeys(content); + expect(actual).toEqual([]); + }); +});