From b476b8da7769c95d2709b67652a1efe4d396a734 Mon Sep 17 00:00:00 2001 From: Niklas Molnes Hole Date: Wed, 27 Jan 2021 09:09:02 +0100 Subject: [PATCH 1/2] Change class name regex to include all valid characters in CSS selectors --- src/utils.js | 2 +- test/utils.test.js | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/utils.js b/src/utils.js index 3454110..acd7228 100644 --- a/src/utils.js +++ b/src/utils.js @@ -7,7 +7,7 @@ const camelCase = require("camelcase"); * @returns {string[]} */ const getCssModuleKeys = (content) => { - const keyRegex = /"([\w-]+)":/g; + const keyRegex = /"([^:")][^")]*)":/g; let match; const cssModuleKeys = []; diff --git a/test/utils.test.js b/test/utils.test.js index 8170bdd..ba40c8c 100644 --- a/test/utils.test.js +++ b/test/utils.test.js @@ -60,4 +60,14 @@ describe("getCssModuleKeys", () => { const actual = getCssModuleKeys(content); expect(actual).toEqual([]); }); + + it("CSS module with special class names", () => { + const content = `.locals = { + "øæå": "nordic", + "+~@": "special", + "f\\'o\\'o": "escaped", + };`; + const actual = getCssModuleKeys(content); + expect(actual).toEqual(["øæå", "+~@", "f\\'o\\'o"]); + }); }); From d93ac479001c2b3a47ba44a6ffcc4e9e3c4b0cae Mon Sep 17 00:00:00 2001 From: Niklas Molnes Hole Date: Wed, 27 Jan 2021 10:48:20 +0100 Subject: [PATCH 2/2] Ignore keys with newlines (this will solve all previous errors) --- src/utils.js | 2 +- test/utils.test.js | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/utils.js b/src/utils.js index acd7228..8cc032c 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 = /"([^"\n]+)":/g; let match; const cssModuleKeys = []; diff --git a/test/utils.test.js b/test/utils.test.js index ba40c8c..2daa072 100644 --- a/test/utils.test.js +++ b/test/utils.test.js @@ -70,4 +70,13 @@ describe("getCssModuleKeys", () => { const actual = getCssModuleKeys(content); expect(actual).toEqual(["øæå", "+~@", "f\\'o\\'o"]); }); + + it("CSS module with newline in class names should be ignored", () => { + const content = `.locals = { + "line1 +line2": "twolinesdoesnotmakesense" + };`; + const actual = getCssModuleKeys(content); + expect(actual).toEqual([]); + }); });