From a51c06c523c55be4aeb147ad60c1532403dc611d Mon Sep 17 00:00:00 2001 From: Barak Igal Date: Thu, 28 May 2020 02:10:17 +0300 Subject: [PATCH 1/9] Add build to avoid using regexpu-core in runtime --- lib/parse.js | 6 +++--- lib/stringify.js | 7 ++----- lib/uni-regexp.js | 6 ++++++ package.json | 9 +++++---- scripts/build-regexpu.js | 26 ++++++++++++++++++++++++++ 5 files changed, 42 insertions(+), 12 deletions(-) create mode 100644 lib/uni-regexp.js create mode 100644 scripts/build-regexpu.js diff --git a/lib/parse.js b/lib/parse.js index 692373b..632bdfd 100644 --- a/lib/parse.js +++ b/lib/parse.js @@ -1,7 +1,7 @@ "use strict"; var Parser = require("fastparse"); -var regexpu = require("regexpu-core"); +var uniRegexp = require("./uni-regexp"); function unescape(str) { return str.replace(/\\(.)/g, "$1"); @@ -175,8 +175,8 @@ function getSelectors() { // ISO 10646 characters U+00A0 and higher, plus the hyphen (-) and the underscore (_) // // 10ffff is the maximum allowed in current Unicode - selectors[regexpu("\\.((?:\\\\.|[A-Za-z_\\-\\u{00a0}-\\u{10ffff}])(?:\\\\.|[A-Za-z_\\-0-9\\u{00a0}-\\u{10ffff}])*)", "u")] = typeMatch("class"); - selectors[regexpu("#((?:\\\\.|[A-Za-z_\\-\\u{00a0}-\\u{10ffff}])(?:\\\\.|[A-Za-z_\\-0-9\\u{00a0}-\\u{10ffff}])*)", "u")] = typeMatch("id"); + selectors[uniRegexp.typeMatchClass] = typeMatch("class"); + selectors[uniRegexp.typeMatchId] = typeMatch("id"); var selectorsSecondHalf = { ":(not|matches|has|local|global)\\((\\s*)": nestedPseudoClassStartMatch, ":((?:\\\\.|[A-Za-z_\\-0-9])+)\\(": pseudoClassStartMatch, diff --git a/lib/stringify.js b/lib/stringify.js index 4673a8b..bb63ee8 100644 --- a/lib/stringify.js +++ b/lib/stringify.js @@ -1,10 +1,7 @@ "use strict"; -var regexpu = require("regexpu-core"); -var identifierEscapeRegexp = new RegExp( - regexpu("(^[^A-Za-z_\\-\\u{00a0}-\\u{10ffff}]|^--|[^A-Za-z_0-9\\-\\u{00a0}-\\u{10ffff}])", "ug"), - "g" -); +var uniRegexp = require("./uni-regexp"); +var identifierEscapeRegexp = new RegExp(uniRegexp.identifierEscapeRegexp, "g"); function escape(str, identifier) { if(str === "*") { diff --git a/lib/uni-regexp.js b/lib/uni-regexp.js new file mode 100644 index 0000000..8133b6f --- /dev/null +++ b/lib/uni-regexp.js @@ -0,0 +1,6 @@ +/* AUTO GENERATED */ +module.exports = { + "typeMatchClass": "\\.((?:\\\\(?:[\\0-\\t\\x0B\\f\\x0E-\\u2027\\u202A-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])|(?:[\\x2DA-Z_a-z\\xA0-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]))(?:\\\\(?:[\\0-\\t\\x0B\\f\\x0E-\\u2027\\u202A-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])|(?:[\\x2D0-9A-Z_a-z\\xA0-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]))*)", + "typeMatchId": "#((?:\\\\(?:[\\0-\\t\\x0B\\f\\x0E-\\u2027\\u202A-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])|(?:[\\x2DA-Z_a-z\\xA0-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]))(?:\\\\(?:[\\0-\\t\\x0B\\f\\x0E-\\u2027\\u202A-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])|(?:[\\x2D0-9A-Z_a-z\\xA0-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]))*)", + "identifierEscapeRegexp": "(^[\\0-,\\.-@\\[-\\^`\\{-\\x9F]|^\\x2D\\x2D|[\\0-,\\.\\/:-@\\[-\\^`\\{-\\x9F])" +} \ No newline at end of file diff --git a/package.json b/package.json index 7554b83..f740571 100644 --- a/package.json +++ b/package.json @@ -5,9 +5,10 @@ "main": "lib/index.js", "scripts": { "lint": "eslint .", - "pretest": "npm run lint", + "pretest": "npm run build && npm run lint", "test": "mocha", "cover": "nyc npm test", + "build": "node scripts/build-regexpu.js", "report:coveralls": "nyc report --reporter=text-lcov | coveralls", "report:codecov": "nyc report --reporter=text-lcov | codecov --pipe", "publish-patch": "npm test && npm version patch && git push && git push --tags && npm publish" @@ -31,15 +32,15 @@ "homepage": "https://github.com/css-modules/css-selector-tokenizer", "dependencies": { "cssesc": "^3.0.0", - "fastparse": "^1.1.2", - "regexpu-core": "^4.6.0" + "fastparse": "^1.1.2" }, "devDependencies": { "codecov": "^3.6.5", "coveralls": "^3.0.9", "eslint": "^6.8.0", "mocha": "^7.1.0", - "nyc": "^15.0.0" + "nyc": "^15.0.0", + "regexpu-core": "^4.6.0" }, "directories": { "test": "test" diff --git a/scripts/build-regexpu.js b/scripts/build-regexpu.js new file mode 100644 index 0000000..be784f4 --- /dev/null +++ b/scripts/build-regexpu.js @@ -0,0 +1,26 @@ +var fs = require("fs"); +var path = require("path"); +var regexpu = require("regexpu-core"); + +var uniReg = { + typeMatchClass: regexpu( + "\\.((?:\\\\.|[A-Za-z_\\-\\u{00a0}-\\u{10ffff}])(?:\\\\.|[A-Za-z_\\-0-9\\u{00a0}-\\u{10ffff}])*)", + "u" + ), + typeMatchId: regexpu( + "#((?:\\\\.|[A-Za-z_\\-\\u{00a0}-\\u{10ffff}])(?:\\\\.|[A-Za-z_\\-0-9\\u{00a0}-\\u{10ffff}])*)", + "u" + ), + identifierEscapeRegexp: regexpu( + "(^[^A-Za-z_\\-\\u{00a0}-\\u{10ffff}]|^--|[^A-Za-z_0-9\\-\\u{00a0}-\\u{10ffff}])", + "ug" + ), +}; + +var targetFile = path.join(__dirname, "../lib/uni-regexp.js"); + +fs.writeFileSync( + targetFile, + "/* AUTO GENERATED */\nmodule.exports = " + JSON.stringify(uniReg, null, 4) +); +console.log('Done building ' + targetFile) \ No newline at end of file From 5f438f930959daa5b68d41c4e948fda9640ca5fe Mon Sep 17 00:00:00 2001 From: Barak Igal Date: Thu, 28 May 2020 02:12:08 +0300 Subject: [PATCH 2/9] add newline in generated file --- lib/uni-regexp.js | 2 +- scripts/build-regexpu.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/uni-regexp.js b/lib/uni-regexp.js index 8133b6f..a60623d 100644 --- a/lib/uni-regexp.js +++ b/lib/uni-regexp.js @@ -3,4 +3,4 @@ module.exports = { "typeMatchClass": "\\.((?:\\\\(?:[\\0-\\t\\x0B\\f\\x0E-\\u2027\\u202A-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])|(?:[\\x2DA-Z_a-z\\xA0-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]))(?:\\\\(?:[\\0-\\t\\x0B\\f\\x0E-\\u2027\\u202A-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])|(?:[\\x2D0-9A-Z_a-z\\xA0-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]))*)", "typeMatchId": "#((?:\\\\(?:[\\0-\\t\\x0B\\f\\x0E-\\u2027\\u202A-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])|(?:[\\x2DA-Z_a-z\\xA0-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]))(?:\\\\(?:[\\0-\\t\\x0B\\f\\x0E-\\u2027\\u202A-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])|(?:[\\x2D0-9A-Z_a-z\\xA0-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]))*)", "identifierEscapeRegexp": "(^[\\0-,\\.-@\\[-\\^`\\{-\\x9F]|^\\x2D\\x2D|[\\0-,\\.\\/:-@\\[-\\^`\\{-\\x9F])" -} \ No newline at end of file +} diff --git a/scripts/build-regexpu.js b/scripts/build-regexpu.js index be784f4..32fc29e 100644 --- a/scripts/build-regexpu.js +++ b/scripts/build-regexpu.js @@ -21,6 +21,6 @@ var targetFile = path.join(__dirname, "../lib/uni-regexp.js"); fs.writeFileSync( targetFile, - "/* AUTO GENERATED */\nmodule.exports = " + JSON.stringify(uniReg, null, 4) + "/* AUTO GENERATED */\nmodule.exports = " + JSON.stringify(uniReg, null, 4) + '\n' ); console.log('Done building ' + targetFile) \ No newline at end of file From 3f803f11d45f8c89c1da1e3438831f24ef3d8f80 Mon Sep 17 00:00:00 2001 From: Barak Igal Date: Mon, 1 Jun 2020 02:17:09 +0300 Subject: [PATCH 3/9] rename build and remove from test flow --- package.json | 4 ++-- scripts/build-regexpu.js | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index f740571..df38891 100644 --- a/package.json +++ b/package.json @@ -5,10 +5,10 @@ "main": "lib/index.js", "scripts": { "lint": "eslint .", - "pretest": "npm run build && npm run lint", + "pretest": "npm run lint", "test": "mocha", "cover": "nyc npm test", - "build": "node scripts/build-regexpu.js", + "build-regexpu": "node scripts/build-regexpu.js", "report:coveralls": "nyc report --reporter=text-lcov | coveralls", "report:codecov": "nyc report --reporter=text-lcov | codecov --pipe", "publish-patch": "npm test && npm version patch && git push && git push --tags && npm publish" diff --git a/scripts/build-regexpu.js b/scripts/build-regexpu.js index 32fc29e..0db18c8 100644 --- a/scripts/build-regexpu.js +++ b/scripts/build-regexpu.js @@ -23,4 +23,5 @@ fs.writeFileSync( targetFile, "/* AUTO GENERATED */\nmodule.exports = " + JSON.stringify(uniReg, null, 4) + '\n' ); + console.log('Done building ' + targetFile) \ No newline at end of file From c9b823712671c75130069253aaeee0d6b589b72c Mon Sep 17 00:00:00 2001 From: Barak Igal Date: Mon, 1 Jun 2020 02:18:57 +0300 Subject: [PATCH 4/9] format --- scripts/build-regexpu.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/scripts/build-regexpu.js b/scripts/build-regexpu.js index 0db18c8..2838f50 100644 --- a/scripts/build-regexpu.js +++ b/scripts/build-regexpu.js @@ -21,7 +21,9 @@ var targetFile = path.join(__dirname, "../lib/uni-regexp.js"); fs.writeFileSync( targetFile, - "/* AUTO GENERATED */\nmodule.exports = " + JSON.stringify(uniReg, null, 4) + '\n' + "/* AUTO GENERATED */\nmodule.exports = " + + JSON.stringify(uniReg, null, 4) + + "\n" ); -console.log('Done building ' + targetFile) \ No newline at end of file +console.log("Done building " + targetFile); From b903b126bf6ed18db35bd03f941e46335b075ddc Mon Sep 17 00:00:00 2001 From: evilebottnawi Date: Tue, 21 Jul 2020 15:35:14 +0300 Subject: [PATCH 5/9] chore(release): 0.7.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index df38891..3e61900 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "css-selector-tokenizer", - "version": "0.7.2", + "version": "0.7.3", "description": "Parses and stringifies CSS selectors", "main": "lib/index.js", "scripts": { From 113b7dee5878644e79ec9fc656827698a17f064f Mon Sep 17 00:00:00 2001 From: Barak Igal Date: Wed, 26 May 2021 15:42:24 +0300 Subject: [PATCH 6/9] feat: parse :is and :where as nested-pseudo-classes --- lib/parse.js | 2 +- test/test-cases.js | 45 ++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/lib/parse.js b/lib/parse.js index 632bdfd..2d058e9 100644 --- a/lib/parse.js +++ b/lib/parse.js @@ -178,7 +178,7 @@ function getSelectors() { selectors[uniRegexp.typeMatchClass] = typeMatch("class"); selectors[uniRegexp.typeMatchId] = typeMatch("id"); var selectorsSecondHalf = { - ":(not|matches|has|local|global)\\((\\s*)": nestedPseudoClassStartMatch, + ":(not|matches|is|where|has|local|global)\\((\\s*)": nestedPseudoClassStartMatch, ":((?:\\\\.|[A-Za-z_\\-0-9])+)\\(": pseudoClassStartMatch, ":((?:\\\\.|[A-Za-z_\\-0-9])+)": typeMatch("pseudo-class"), "::((?:\\\\.|[A-Za-z_\\-0-9])+)": typeMatch("pseudo-element"), diff --git a/test/test-cases.js b/test/test-cases.js index 86d48a5..c4160c9 100644 --- a/test/test-cases.js +++ b/test/test-cases.js @@ -361,7 +361,50 @@ module.exports = { ] } ]) ], - + "nested pseudo class with multiple selectors (:is)": [ + ":is( h1, h2 )", + singleSelector([ + { + type: "nested-pseudo-class", + name: "is", + nodes: [ + { + type: "selector", + nodes: [{ type: "element", name: "h1" }], + before: " ", + }, + { + type: "selector", + nodes: [{ type: "element", name: "h2" }], + before: " ", + after: " ", + }, + ], + }, + ]), + ], + "nested pseudo class with multiple selectors (:where)": [ + ":where( h1, h2 )", + singleSelector([ + { + type: "nested-pseudo-class", + name: "where", + nodes: [ + { + type: "selector", + nodes: [{ type: "element", name: "h1" }], + before: " ", + }, + { + type: "selector", + nodes: [{ type: "element", name: "h2" }], + before: " ", + after: " ", + }, + ], + }, + ]), + ], "available nested pseudo classes": [ ":not(:active):matches(:focus)", singleSelector([ From 36cee5dc8ddb93aa4c6d46363afafbc310cbaf72 Mon Sep 17 00:00:00 2001 From: Barak Igal Date: Wed, 26 May 2021 15:49:21 +0300 Subject: [PATCH 7/9] use tabs --- test/test-cases.js | 94 ++++++++++++++++++++++++---------------------- 1 file changed, 50 insertions(+), 44 deletions(-) diff --git a/test/test-cases.js b/test/test-cases.js index c4160c9..efc3242 100644 --- a/test/test-cases.js +++ b/test/test-cases.js @@ -361,50 +361,56 @@ module.exports = { ] } ]) ], - "nested pseudo class with multiple selectors (:is)": [ - ":is( h1, h2 )", - singleSelector([ - { - type: "nested-pseudo-class", - name: "is", - nodes: [ - { - type: "selector", - nodes: [{ type: "element", name: "h1" }], - before: " ", - }, - { - type: "selector", - nodes: [{ type: "element", name: "h2" }], - before: " ", - after: " ", - }, - ], - }, - ]), - ], - "nested pseudo class with multiple selectors (:where)": [ - ":where( h1, h2 )", - singleSelector([ - { - type: "nested-pseudo-class", - name: "where", - nodes: [ - { - type: "selector", - nodes: [{ type: "element", name: "h1" }], - before: " ", - }, - { - type: "selector", - nodes: [{ type: "element", name: "h2" }], - before: " ", - after: " ", - }, - ], - }, - ]), - ], + "nested pseudo class with multiple selectors (:is)": [ + ":is( h1, h2 )", + singleSelector([{ + type: "nested-pseudo-class", + name: "is", + nodes: [{ + type: "selector", + nodes: [{ + type: "element", + name: "h1" + }], + before: " ", + }, + { + type: "selector", + nodes: [{ + type: "element", + name: "h2" + }], + before: " ", + after: " ", + }, + ], + }, ]), + ], + "nested pseudo class with multiple selectors (:where)": [ + ":where( h1, h2 )", + singleSelector([{ + type: "nested-pseudo-class", + name: "where", + nodes: [{ + type: "selector", + nodes: [{ + type: "element", + name: "h1" + }], + before: " ", + }, + { + type: "selector", + nodes: [{ + type: "element", + name: "h2" + }], + before: " ", + after: " ", + }, + ], + }, ]), + ], "available nested pseudo classes": [ ":not(:active):matches(:focus)", singleSelector([ From cac8248477695021afe15e5e2c8c20f5dcbd42e4 Mon Sep 17 00:00:00 2001 From: Barak Igal Date: Tue, 1 Jun 2021 17:17:26 +0300 Subject: [PATCH 8/9] added support for :any and :-vendor-any --- lib/parse.js | 2 +- test/test-cases.js | 50 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/lib/parse.js b/lib/parse.js index 2d058e9..2c3a855 100644 --- a/lib/parse.js +++ b/lib/parse.js @@ -178,7 +178,7 @@ function getSelectors() { selectors[uniRegexp.typeMatchClass] = typeMatch("class"); selectors[uniRegexp.typeMatchId] = typeMatch("id"); var selectorsSecondHalf = { - ":(not|matches|is|where|has|local|global)\\((\\s*)": nestedPseudoClassStartMatch, + ":(not|any|-\\w+?-any|matches|is|where|has|local|global)\\((\\s*)": nestedPseudoClassStartMatch, ":((?:\\\\.|[A-Za-z_\\-0-9])+)\\(": pseudoClassStartMatch, ":((?:\\\\.|[A-Za-z_\\-0-9])+)": typeMatch("pseudo-class"), "::((?:\\\\.|[A-Za-z_\\-0-9])+)": typeMatch("pseudo-element"), diff --git a/test/test-cases.js b/test/test-cases.js index efc3242..f74a557 100644 --- a/test/test-cases.js +++ b/test/test-cases.js @@ -411,6 +411,56 @@ module.exports = { ], }, ]), ], + "nested pseudo class with multiple selectors (:any)": [ + ":any( h1, h2 )", + singleSelector([{ + type: "nested-pseudo-class", + name: "any", + nodes: [{ + type: "selector", + nodes: [{ + type: "element", + name: "h1" + }], + before: " ", + }, + { + type: "selector", + nodes: [{ + type: "element", + name: "h2" + }], + before: " ", + after: " ", + }, + ], + }, ]), + ], + "nested pseudo class with multiple selectors (:-vendor-any)": [ + ":-vendor-any( h1, h2 )", + singleSelector([{ + type: "nested-pseudo-class", + name: "-vendor-any", + nodes: [{ + type: "selector", + nodes: [{ + type: "element", + name: "h1" + }], + before: " ", + }, + { + type: "selector", + nodes: [{ + type: "element", + name: "h2" + }], + before: " ", + after: " ", + }, + ], + }, ]), + ], "available nested pseudo classes": [ ":not(:active):matches(:focus)", singleSelector([ From 7af8f43a93e1949046510da3c0e47e42ed6cf122 Mon Sep 17 00:00:00 2001 From: evilebottnawi Date: Tue, 1 Jun 2021 18:24:22 +0300 Subject: [PATCH 9/9] chore(release): 0.8.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3e61900..0634278 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "css-selector-tokenizer", - "version": "0.7.3", + "version": "0.8.0", "description": "Parses and stringifies CSS selectors", "main": "lib/index.js", "scripts": {