From f26bca5cf6c13fa516efcca798606e4d5a1587ec Mon Sep 17 00:00:00 2001 From: Acemir Sousa Mendes Date: Fri, 23 Jan 2026 01:48:21 +0000 Subject: [PATCH 1/3] Test selectors starting with hyphen --- spec/parse.spec.js | 48 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/spec/parse.spec.js b/spec/parse.spec.js index 50e66a4..d2c3246 100644 --- a/spec/parse.spec.js +++ b/spec/parse.spec.js @@ -4333,6 +4333,54 @@ var VALIDATION_TESTS = [ return result; })() }, + { + input: "-test {} \\-test {} --test {} \\--test {}", + result: (function() { + var result = { + cssRules: [ + { + cssRules: [], + selectorText: "-test", + style: { + length: 0 + }, + parentRule: null, + }, + { + cssRules: [], + selectorText: "-test", + style: { + length: 0 + }, + parentRule: null, + }, + { + cssRules: [], + selectorText: "--test", + style: { + length: 0 + }, + parentRule: null, + }, + { + cssRules: [], + selectorText: "--test", + style: { + length: 0 + }, + parentRule: null, + } + ], + parentStyleSheet: null + }; + result.cssRules[0].parentStyleSheet = result.cssRules[1].parentStyleSheet = result.cssRules[2].parentStyleSheet = result.cssRules[3].parentStyleSheet = result; + result.cssRules[0].style.parentRule = result.cssRules[0]; + result.cssRules[1].style.parentRule = result.cssRules[1]; + result.cssRules[2].style.parentRule = result.cssRules[2]; + result.cssRules[3].style.parentRule = result.cssRules[3]; + return result; + })() + } ]; function itParse(input, result) { From e13e6a41c2b738ecd3e14d28f7fb6f9748783c95 Mon Sep 17 00:00:00 2001 From: Acemir Sousa Mendes Date: Fri, 23 Jan 2026 01:48:35 +0000 Subject: [PATCH 2/3] Fix selectors starting with hyphen --- lib/parse.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/parse.js b/lib/parse.js index 09d4ade..d11ecb9 100644 --- a/lib/parse.js +++ b/lib/parse.js @@ -925,14 +925,14 @@ CSSOM.parse = function parse(token, opts, errorHandler) { } } // Match type selector with optional namespace: [namespace|]identifier - else if (i < len && (isIdentStart(selector[i]) || selector[i] === '\\' || selector[i] === '*' || selector[i] === '|')) { + else if (i < len && (isIdentStart(selector[i]) || selector[i] === '\\' || selector[i] === '*' || selector[i] === '|' || selector[i] === '-')) { parseNamespace(); // Optional namespace prefix if (i < len && selector[i] === '*') { i++; // Universal selector hasMatchedComponent = true; matched = true; - } else if (i < len && (isIdentStart(selector[i]) || selector[i] === '\\')) { + } else if (i < len && (isIdentStart(selector[i]) || selector[i] === '\\' || selector[i] === '-')) { if (parseIdentifier()) { hasMatchedComponent = true; matched = true; @@ -2054,7 +2054,7 @@ CSSOM.parse = function parse(token, opts, errorHandler) { // Helper functions to check character types function isSelectorStartChar(char) { - return '.:#&*['.indexOf(char) !== -1; + return '.:#&*[\\'.indexOf(char) !== -1; } function isWhitespaceChar(char) { From 6225fa05bbe6b57acec24d3e0841873fd0e936bb Mon Sep 17 00:00:00 2001 From: Acemir Sousa Mendes Date: Mon, 26 Jan 2026 09:55:21 +0000 Subject: [PATCH 3/3] Add changeset --- .changeset/fair-dolphins-type.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/fair-dolphins-type.md diff --git a/.changeset/fair-dolphins-type.md b/.changeset/fair-dolphins-type.md new file mode 100644 index 0000000..076be14 --- /dev/null +++ b/.changeset/fair-dolphins-type.md @@ -0,0 +1,5 @@ +--- +"@acemir/cssom": patch +--- + +fix: selectors starting with hyphen