css-selector-parser
Advanced tools
Comparing version 2.3.1 to 2.3.2
@@ -1,4 +0,4 @@ | ||
export { createParser, Parser, ParserError } from './parser'; | ||
export { render } from './render'; | ||
export { ast, AstAttribute, AstEntity, AstFactory, AstFormula, AstFormulaOfSelector, AstNamespaceName, AstNoNamespace, AstPseudoClass, AstRule, AstSelector, AstString, AstSubstitution, AstTagName, AstWildcardNamespace, AstWildcardTag } from './ast'; | ||
export { CssLevel, SyntaxDefinition } from './syntax-definitions'; | ||
export { createParser, Parser, ParserError } from './parser.js'; | ||
export { render } from './render.js'; | ||
export { ast, AstAttribute, AstEntity, AstFactory, AstFormula, AstFormulaOfSelector, AstNamespaceName, AstNoNamespace, AstPseudoClass, AstRule, AstSelector, AstString, AstSubstitution, AstTagName, AstWildcardNamespace, AstWildcardTag } from './ast.js'; | ||
export { CssLevel, SyntaxDefinition } from './syntax-definitions.js'; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.ast = exports.render = exports.createParser = void 0; | ||
var parser_1 = require("./parser"); | ||
Object.defineProperty(exports, "createParser", { enumerable: true, get: function () { return parser_1.createParser; } }); | ||
var render_1 = require("./render"); | ||
Object.defineProperty(exports, "render", { enumerable: true, get: function () { return render_1.render; } }); | ||
var ast_1 = require("./ast"); | ||
Object.defineProperty(exports, "ast", { enumerable: true, get: function () { return ast_1.ast; } }); | ||
var parser_js_1 = require("./parser.js"); | ||
Object.defineProperty(exports, "createParser", { enumerable: true, get: function () { return parser_js_1.createParser; } }); | ||
var render_js_1 = require("./render.js"); | ||
Object.defineProperty(exports, "render", { enumerable: true, get: function () { return render_js_1.render; } }); | ||
var ast_js_1 = require("./ast.js"); | ||
Object.defineProperty(exports, "ast", { enumerable: true, get: function () { return ast_js_1.ast; } }); |
@@ -1,3 +0,3 @@ | ||
import { AstSelector } from './ast'; | ||
import { CssLevel, SyntaxDefinition } from './syntax-definitions'; | ||
import { AstSelector } from './ast.js'; | ||
import { CssLevel, SyntaxDefinition } from './syntax-definitions.js'; | ||
/** | ||
@@ -4,0 +4,0 @@ * This error is thrown when parser encounters problems in CSS string. |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.createParser = void 0; | ||
var indexes_1 = require("./indexes"); | ||
var pseudo_class_signatures_1 = require("./pseudo-class-signatures"); | ||
var syntax_definitions_1 = require("./syntax-definitions"); | ||
var utils_1 = require("./utils"); | ||
var indexes_js_1 = require("./indexes.js"); | ||
var pseudo_class_signatures_js_1 = require("./pseudo-class-signatures.js"); | ||
var syntax_definitions_js_1 = require("./syntax-definitions.js"); | ||
var utils_js_1 = require("./utils.js"); | ||
var errorPrefix = "css-selector-parser parse error: "; | ||
@@ -16,8 +16,8 @@ /** | ||
// noinspection SuspiciousTypeOfGuard | ||
var syntaxDefinition = typeof syntax === 'string' ? syntax_definitions_1.cssSyntaxDefinitions[syntax] : syntax; | ||
var syntaxDefinition = typeof syntax === 'string' ? syntax_definitions_js_1.cssSyntaxDefinitions[syntax] : syntax; | ||
if (syntaxDefinition.baseSyntax) { | ||
syntaxDefinition = (0, syntax_definitions_1.extendSyntaxDefinition)(syntax_definitions_1.cssSyntaxDefinitions[syntaxDefinition.baseSyntax], syntaxDefinition); | ||
syntaxDefinition = (0, syntax_definitions_js_1.extendSyntaxDefinition)(syntax_definitions_js_1.cssSyntaxDefinitions[syntaxDefinition.baseSyntax], syntaxDefinition); | ||
} | ||
var _c = syntaxDefinition.tag | ||
? [true, Boolean((0, syntax_definitions_1.getXmlOptions)(syntaxDefinition.tag).wildcard)] | ||
? [true, Boolean((0, syntax_definitions_js_1.getXmlOptions)(syntaxDefinition.tag).wildcard)] | ||
: [false, false], tagNameEnabled = _c[0], tagNameWildcardEnabled = _c[1]; | ||
@@ -34,4 +34,4 @@ var idEnabled = Boolean(syntaxDefinition.ids); | ||
var combinatorsIndex = syntaxDefinition.combinators | ||
? (0, indexes_1.createMulticharIndex)(syntaxDefinition.combinators) | ||
: indexes_1.emptyMulticharIndex; | ||
? (0, indexes_js_1.createMulticharIndex)(syntaxDefinition.combinators) | ||
: indexes_js_1.emptyMulticharIndex; | ||
var _d = syntaxDefinition.attributes | ||
@@ -41,10 +41,10 @@ ? [ | ||
syntaxDefinition.attributes.operators | ||
? (0, indexes_1.createMulticharIndex)(syntaxDefinition.attributes.operators) | ||
: indexes_1.emptyMulticharIndex, | ||
? (0, indexes_js_1.createMulticharIndex)(syntaxDefinition.attributes.operators) | ||
: indexes_js_1.emptyMulticharIndex, | ||
syntaxDefinition.attributes.caseSensitivityModifiers | ||
? (0, indexes_1.createRegularIndex)(syntaxDefinition.attributes.caseSensitivityModifiers) | ||
: indexes_1.emptyRegularIndex, | ||
? (0, indexes_js_1.createRegularIndex)(syntaxDefinition.attributes.caseSensitivityModifiers) | ||
: indexes_js_1.emptyRegularIndex, | ||
syntaxDefinition.attributes.unknownCaseSensitivityModifiers === 'accept' | ||
] | ||
: [false, indexes_1.emptyMulticharIndex, indexes_1.emptyRegularIndex, false], attributesEnabled = _d[0], attributesOperatorsIndex = _d[1], attributesCaseSensitivityModifiers = _d[2], attributesAcceptUnknownCaseSensitivityModifiers = _d[3]; | ||
: [false, indexes_js_1.emptyMulticharIndex, indexes_js_1.emptyRegularIndex, false], attributesEnabled = _d[0], attributesOperatorsIndex = _d[1], attributesCaseSensitivityModifiers = _d[2], attributesAcceptUnknownCaseSensitivityModifiers = _d[3]; | ||
var attributesCaseSensitivityModifiersEnabled = attributesAcceptUnknownCaseSensitivityModifiers || Object.keys(attributesCaseSensitivityModifiers).length > 0; | ||
@@ -55,7 +55,7 @@ var _e = syntaxDefinition.pseudoClasses | ||
syntaxDefinition.pseudoClasses.definitions | ||
? (0, pseudo_class_signatures_1.calculatePseudoClassSignatures)(syntaxDefinition.pseudoClasses.definitions) | ||
: pseudo_class_signatures_1.emptyPseudoClassSignatures, | ||
? (0, pseudo_class_signatures_js_1.calculatePseudoClassSignatures)(syntaxDefinition.pseudoClasses.definitions) | ||
: pseudo_class_signatures_js_1.emptyPseudoClassSignatures, | ||
syntaxDefinition.pseudoClasses.unknown === 'accept' | ||
] | ||
: [false, pseudo_class_signatures_1.emptyPseudoClassSignatures, false], pseudoClassesEnabled = _e[0], paeudoClassesDefinitions = _e[1], pseudoClassesAcceptUnknown = _e[2]; | ||
: [false, pseudo_class_signatures_js_1.emptyPseudoClassSignatures, false], pseudoClassesEnabled = _e[0], paeudoClassesDefinitions = _e[1], pseudoClassesAcceptUnknown = _e[2]; | ||
var _f = syntaxDefinition.pseudoElements | ||
@@ -70,7 +70,7 @@ ? [ | ||
syntaxDefinition.pseudoElements.definitions | ||
? (0, indexes_1.createRegularIndex)(syntaxDefinition.pseudoElements.definitions) | ||
: indexes_1.emptyRegularIndex, | ||
? (0, indexes_js_1.createRegularIndex)(syntaxDefinition.pseudoElements.definitions) | ||
: indexes_js_1.emptyRegularIndex, | ||
syntaxDefinition.pseudoElements.unknown === 'accept' | ||
] | ||
: [false, false, false, indexes_1.emptyRegularIndex, false], pseudoElementsEnabled = _f[0], pseudoElementsSingleColonNotationEnabled = _f[1], pseudoElementsDoubleColonNotationEnabled = _f[2], pseudoElementsIndex = _f[3], pseudoElementsAcceptUnknown = _f[4]; | ||
: [false, false, false, indexes_js_1.emptyRegularIndex, false], pseudoElementsEnabled = _f[0], pseudoElementsSingleColonNotationEnabled = _f[1], pseudoElementsDoubleColonNotationEnabled = _f[2], pseudoElementsIndex = _f[3], pseudoElementsAcceptUnknown = _f[4]; | ||
var str = ''; | ||
@@ -81,3 +81,3 @@ var l = str.length; | ||
var is = function (comparison) { return chr === comparison; }; | ||
var isTagStart = function () { return is('*') || (0, utils_1.isIdentStart)(chr) || is('\\'); }; | ||
var isTagStart = function () { return is('*') || (0, utils_js_1.isIdentStart)(chr) || is('\\'); }; | ||
var rewind = function (newPos) { | ||
@@ -143,3 +143,3 @@ pos = newPos; | ||
var hex = readAndNext(); | ||
while ((0, utils_1.isHex)(chr)) { | ||
while ((0, utils_js_1.isHex)(chr)) { | ||
hex += readAndNext(); | ||
@@ -166,6 +166,6 @@ } | ||
} | ||
else if ((esc = utils_1.stringEscapeChars[chr]) !== undefined) { | ||
else if ((esc = utils_js_1.stringEscapeChars[chr]) !== undefined) { | ||
result += esc; | ||
} | ||
else if ((0, utils_1.isHex)(chr)) { | ||
else if ((0, utils_js_1.isHex)(chr)) { | ||
result += parseHex(); | ||
@@ -188,3 +188,3 @@ continue; | ||
while (pos < l) { | ||
if ((0, utils_1.isIdent)(chr)) { | ||
if ((0, utils_js_1.isIdent)(chr)) { | ||
result += readAndNext(); | ||
@@ -195,3 +195,3 @@ } | ||
assertNonEof(); | ||
if ((0, utils_1.isHex)(chr)) { | ||
if ((0, utils_js_1.isHex)(chr)) { | ||
result += parseHex(); | ||
@@ -221,3 +221,3 @@ } | ||
assertNonEof(); | ||
if ((0, utils_1.isHex)(chr)) { | ||
if ((0, utils_js_1.isHex)(chr)) { | ||
result += parseHex(); | ||
@@ -236,3 +236,3 @@ } | ||
function skipWhitespace() { | ||
while (utils_1.whitespaceChars[chr]) { | ||
while (utils_js_1.whitespaceChars[chr]) { | ||
next(); | ||
@@ -288,3 +288,3 @@ } | ||
next(); | ||
if ((0, utils_1.isIdentStart)(chr) || is('\\')) { | ||
if ((0, utils_js_1.isIdentStart)(chr) || is('\\')) { | ||
assert(namespaceEnabled, 'Namespaces are not enabled.'); | ||
@@ -315,3 +315,3 @@ attr = { | ||
assertNonEof(); | ||
if (utils_1.quoteChars[chr]) { | ||
if (utils_js_1.quoteChars[chr]) { | ||
attr.value = { | ||
@@ -356,24 +356,36 @@ type: 'String', | ||
} | ||
function parseNumber(signed) { | ||
function parseNumber() { | ||
var result = ''; | ||
if (signed && is('-')) { | ||
result = readAndNext(); | ||
} | ||
while (utils_1.digitsChars[chr]) { | ||
while (utils_js_1.digitsChars[chr]) { | ||
result += readAndNext(); | ||
} | ||
assert(result !== '' && result !== '-', 'Formula parse error.'); | ||
assert(result !== '', 'Formula parse error.'); | ||
return parseInt(result); | ||
} | ||
var isNumberStart = function () { return is('-') || is('+') || utils_1.digitsChars[chr]; }; | ||
var isNumberStart = function () { return is('-') || is('+') || utils_js_1.digitsChars[chr]; }; | ||
function parseFormula() { | ||
if (is('e') || is('o')) { | ||
var ident = parseIdentifier(); | ||
if (ident === 'even') { | ||
skipWhitespace(); | ||
return [2, 0]; | ||
} | ||
if (ident === 'odd') { | ||
skipWhitespace(); | ||
return [2, 1]; | ||
} | ||
} | ||
var firstNumber = null; | ||
var firstNumberMultiplier = 1; | ||
if (is('-')) { | ||
next(); | ||
firstNumberMultiplier = -1; | ||
} | ||
if (isNumberStart()) { | ||
if (is('+')) { | ||
next(); | ||
assert(!is('-'), 'Formula parse error.'); | ||
} | ||
firstNumber = parseNumber(true); | ||
firstNumber = parseNumber(); | ||
if (!is('\\') && !is('n')) { | ||
return [0, firstNumber]; | ||
return [0, firstNumber * firstNumberMultiplier]; | ||
} | ||
@@ -384,12 +396,17 @@ } | ||
} | ||
var ident = parseIdentifier(); | ||
if (ident === 'even') { | ||
skipWhitespace(); | ||
return [2, 0]; | ||
firstNumber *= firstNumberMultiplier; | ||
var identifier; | ||
if (is('\\')) { | ||
next(); | ||
if ((0, utils_js_1.isHex)(chr)) { | ||
identifier = parseHex(); | ||
} | ||
else { | ||
identifier = readAndNext(); | ||
} | ||
} | ||
if (ident === 'odd') { | ||
skipWhitespace(); | ||
return [2, 1]; | ||
else { | ||
identifier = readAndNext(); | ||
} | ||
assert(ident === 'n', 'Formula parse error'); | ||
assert(identifier === 'n', 'Formula parse error: expected "n".'); | ||
skipWhitespace(); | ||
@@ -400,3 +417,3 @@ if (is('+') || is('-')) { | ||
skipWhitespace(); | ||
return [firstNumber, sign * parseNumber(false)]; | ||
return [firstNumber, sign * parseNumber()]; | ||
} | ||
@@ -414,3 +431,3 @@ else { | ||
if (!pseudoDefinition && pseudoClassesAcceptUnknown) { | ||
pseudoDefinition = pseudo_class_signatures_1.defaultPseudoClassSignature; | ||
pseudoDefinition = pseudo_class_signatures_js_1.defaultPseudoClassSignature; | ||
} | ||
@@ -482,3 +499,3 @@ assert(pseudoDefinition, "Unknown pseudo-class: \"".concat(pseudoName, "\".")); | ||
} | ||
else if ((0, utils_1.isIdentStart)(chr) || is('\\')) { | ||
else if ((0, utils_js_1.isIdentStart)(chr) || is('\\')) { | ||
assert(tagNameEnabled, 'Tag names are not enabled.'); | ||
@@ -520,3 +537,3 @@ return { | ||
} | ||
else if ((0, utils_1.isIdentStart)(chr) || is('\\')) { | ||
else if ((0, utils_js_1.isIdentStart)(chr) || is('\\')) { | ||
var identifier = parseIdentifier(); | ||
@@ -617,3 +634,3 @@ if (!is('|')) { | ||
rule.pseudoElement = pseudoName; | ||
if (!utils_1.whitespaceChars[chr] && !is(',') && !is(')') && !isEof()) { | ||
if (!utils_js_1.whitespaceChars[chr] && !is(',') && !is(')') && !isEof()) { | ||
return fail('Pseudo-element should be the last component of a CSS selector rule.'); | ||
@@ -620,0 +637,0 @@ } |
@@ -1,2 +0,2 @@ | ||
import { PseudoClassType } from './syntax-definitions'; | ||
import { PseudoClassType } from './syntax-definitions.js'; | ||
export type PseudoClassSignature = { | ||
@@ -3,0 +3,0 @@ optional: boolean; |
@@ -1,2 +0,2 @@ | ||
import { AstRule, AstSelector } from './ast'; | ||
import { AstRule, AstSelector } from './ast.js'; | ||
/** | ||
@@ -3,0 +3,0 @@ * Renders CSS Selector AST back to a string. |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.render = void 0; | ||
var utils_1 = require("./utils"); | ||
var utils_js_1 = require("./utils.js"); | ||
function renderNamespace(namespace) { | ||
@@ -10,3 +10,3 @@ if (namespace.type === 'WildcardNamespace') { | ||
else if (namespace.type === 'NamespaceName') { | ||
return "".concat((0, utils_1.escapeIdentifier)(namespace.name), "|"); | ||
return "".concat((0, utils_js_1.escapeIdentifier)(namespace.name), "|"); | ||
} | ||
@@ -19,7 +19,7 @@ else if (namespace.type === 'NoNamespace') { | ||
function renderSubstitution(sub) { | ||
return "$".concat((0, utils_1.escapeIdentifier)(sub.name)); | ||
return "$".concat((0, utils_js_1.escapeIdentifier)(sub.name)); | ||
} | ||
function renderFormula(a, b) { | ||
if (a) { | ||
var result = "".concat(a === 1 ? '' : a, "n"); | ||
var result = "".concat(a === 1 ? '' : a === -1 ? '-' : a, "n"); | ||
if (b) { | ||
@@ -60,3 +60,6 @@ result += "".concat(b > 0 ? '+' : '').concat(b); | ||
var result = ''; | ||
var tag = entity.tag, ids = entity.ids, classNames = entity.classNames, attributes = entity.attributes, pseudoClasses = entity.pseudoClasses, pseudoElement = entity.pseudoElement, nestedRule = entity.nestedRule; | ||
var tag = entity.tag, ids = entity.ids, classNames = entity.classNames, attributes = entity.attributes, pseudoClasses = entity.pseudoClasses, pseudoElement = entity.pseudoElement, combinator = entity.combinator, nestedRule = entity.nestedRule; | ||
if (combinator) { | ||
result += "".concat(combinator, " "); | ||
} | ||
if (tag) { | ||
@@ -68,3 +71,3 @@ var namespace = tag.namespace; | ||
if (tag.type === 'TagName') { | ||
result += (0, utils_1.escapeIdentifier)(tag.name); | ||
result += (0, utils_js_1.escapeIdentifier)(tag.name); | ||
} | ||
@@ -81,3 +84,3 @@ else if (tag.type === 'WildcardTag') { | ||
var id = ids_1[_i]; | ||
result += "#".concat((0, utils_1.escapeIdentifier)(id)); | ||
result += "#".concat((0, utils_js_1.escapeIdentifier)(id)); | ||
} | ||
@@ -88,3 +91,3 @@ } | ||
var className = classNames_1[_a]; | ||
result += ".".concat((0, utils_1.escapeIdentifier)(className)); | ||
result += ".".concat((0, utils_js_1.escapeIdentifier)(className)); | ||
} | ||
@@ -99,7 +102,7 @@ } | ||
} | ||
result += (0, utils_1.escapeIdentifier)(name_1); | ||
result += (0, utils_js_1.escapeIdentifier)(name_1); | ||
if (operator && value) { | ||
result += operator; | ||
if (value.type === 'String') { | ||
result += (0, utils_1.escapeStr)(value.value); | ||
result += (0, utils_js_1.escapeStr)(value.value); | ||
} | ||
@@ -113,3 +116,3 @@ else if (value.type === 'Substitution') { | ||
if (caseSensitivityModifier) { | ||
result += " ".concat((0, utils_1.escapeIdentifier)(caseSensitivityModifier)); | ||
result += " ".concat((0, utils_js_1.escapeIdentifier)(caseSensitivityModifier)); | ||
} | ||
@@ -123,3 +126,3 @@ } | ||
var _e = pseudoClasses_1[_d], name_2 = _e.name, argument = _e.argument; | ||
result += ":".concat((0, utils_1.escapeIdentifier)(name_2)); | ||
result += ":".concat((0, utils_js_1.escapeIdentifier)(name_2)); | ||
if (argument) { | ||
@@ -131,3 +134,3 @@ result += '('; | ||
else if (argument.type === 'String') { | ||
result += (0, utils_1.escapePseudoClassString)(argument.value); | ||
result += (0, utils_js_1.escapePseudoClassString)(argument.value); | ||
} | ||
@@ -153,8 +156,5 @@ else if (argument.type === 'Formula') { | ||
if (pseudoElement) { | ||
result += "::".concat((0, utils_1.escapeIdentifier)(pseudoElement)); | ||
result += "::".concat((0, utils_js_1.escapeIdentifier)(pseudoElement)); | ||
} | ||
if (nestedRule) { | ||
if (nestedRule.combinator) { | ||
result += " ".concat(nestedRule.combinator); | ||
} | ||
result += " ".concat(render(nestedRule)); | ||
@@ -161,0 +161,0 @@ } |
@@ -1,2 +0,2 @@ | ||
import { AstPseudoClassArgument } from './ast'; | ||
import { AstPseudoClassArgument } from './ast.js'; | ||
export type PseudoClassType = 'NoArgument' | AstPseudoClassArgument['type']; | ||
@@ -3,0 +3,0 @@ export type CssLevel = 'css1' | 'css2' | 'css3' | 'selectors-3' | 'selectors-4' | 'latest' | 'progressive'; |
@@ -1,4 +0,4 @@ | ||
export { createParser, Parser, ParserError } from './parser'; | ||
export { render } from './render'; | ||
export { ast, AstAttribute, AstEntity, AstFactory, AstFormula, AstFormulaOfSelector, AstNamespaceName, AstNoNamespace, AstPseudoClass, AstRule, AstSelector, AstString, AstSubstitution, AstTagName, AstWildcardNamespace, AstWildcardTag } from './ast'; | ||
export { CssLevel, SyntaxDefinition } from './syntax-definitions'; | ||
export { createParser, Parser, ParserError } from './parser.js'; | ||
export { render } from './render.js'; | ||
export { ast, AstAttribute, AstEntity, AstFactory, AstFormula, AstFormulaOfSelector, AstNamespaceName, AstNoNamespace, AstPseudoClass, AstRule, AstSelector, AstString, AstSubstitution, AstTagName, AstWildcardNamespace, AstWildcardTag } from './ast.js'; | ||
export { CssLevel, SyntaxDefinition } from './syntax-definitions.js'; |
@@ -1,3 +0,3 @@ | ||
export { createParser } from './parser'; | ||
export { render } from './render'; | ||
export { ast } from './ast'; | ||
export { createParser } from './parser.js'; | ||
export { render } from './render.js'; | ||
export { ast } from './ast.js'; |
@@ -1,3 +0,3 @@ | ||
import { AstSelector } from './ast'; | ||
import { CssLevel, SyntaxDefinition } from './syntax-definitions'; | ||
import { AstSelector } from './ast.js'; | ||
import { CssLevel, SyntaxDefinition } from './syntax-definitions.js'; | ||
/** | ||
@@ -4,0 +4,0 @@ * This error is thrown when parser encounters problems in CSS string. |
@@ -1,5 +0,5 @@ | ||
import { createMulticharIndex, createRegularIndex, emptyMulticharIndex, emptyRegularIndex } from './indexes'; | ||
import { calculatePseudoClassSignatures, defaultPseudoClassSignature, emptyPseudoClassSignatures } from './pseudo-class-signatures'; | ||
import { cssSyntaxDefinitions, extendSyntaxDefinition, getXmlOptions } from './syntax-definitions'; | ||
import { digitsChars, isHex, isIdent, isIdentStart, quoteChars, stringEscapeChars, whitespaceChars } from './utils'; | ||
import { createMulticharIndex, createRegularIndex, emptyMulticharIndex, emptyRegularIndex } from './indexes.js'; | ||
import { calculatePseudoClassSignatures, defaultPseudoClassSignature, emptyPseudoClassSignatures } from './pseudo-class-signatures.js'; | ||
import { cssSyntaxDefinitions, extendSyntaxDefinition, getXmlOptions } from './syntax-definitions.js'; | ||
import { digitsChars, isHex, isIdent, isIdentStart, quoteChars, stringEscapeChars, whitespaceChars } from './utils.js'; | ||
const errorPrefix = `css-selector-parser parse error: `; | ||
@@ -337,11 +337,8 @@ /** | ||
} | ||
function parseNumber(signed) { | ||
function parseNumber() { | ||
let result = ''; | ||
if (signed && is('-')) { | ||
result = readAndNext(); | ||
} | ||
while (digitsChars[chr]) { | ||
result += readAndNext(); | ||
} | ||
assert(result !== '' && result !== '-', 'Formula parse error.'); | ||
assert(result !== '', 'Formula parse error.'); | ||
return parseInt(result); | ||
@@ -351,11 +348,26 @@ } | ||
function parseFormula() { | ||
if (is('e') || is('o')) { | ||
const ident = parseIdentifier(); | ||
if (ident === 'even') { | ||
skipWhitespace(); | ||
return [2, 0]; | ||
} | ||
if (ident === 'odd') { | ||
skipWhitespace(); | ||
return [2, 1]; | ||
} | ||
} | ||
let firstNumber = null; | ||
let firstNumberMultiplier = 1; | ||
if (is('-')) { | ||
next(); | ||
firstNumberMultiplier = -1; | ||
} | ||
if (isNumberStart()) { | ||
if (is('+')) { | ||
next(); | ||
assert(!is('-'), 'Formula parse error.'); | ||
} | ||
firstNumber = parseNumber(true); | ||
firstNumber = parseNumber(); | ||
if (!is('\\') && !is('n')) { | ||
return [0, firstNumber]; | ||
return [0, firstNumber * firstNumberMultiplier]; | ||
} | ||
@@ -366,12 +378,17 @@ } | ||
} | ||
const ident = parseIdentifier(); | ||
if (ident === 'even') { | ||
skipWhitespace(); | ||
return [2, 0]; | ||
firstNumber *= firstNumberMultiplier; | ||
let identifier; | ||
if (is('\\')) { | ||
next(); | ||
if (isHex(chr)) { | ||
identifier = parseHex(); | ||
} | ||
else { | ||
identifier = readAndNext(); | ||
} | ||
} | ||
if (ident === 'odd') { | ||
skipWhitespace(); | ||
return [2, 1]; | ||
else { | ||
identifier = readAndNext(); | ||
} | ||
assert(ident === 'n', 'Formula parse error'); | ||
assert(identifier === 'n', 'Formula parse error: expected "n".'); | ||
skipWhitespace(); | ||
@@ -382,3 +399,3 @@ if (is('+') || is('-')) { | ||
skipWhitespace(); | ||
return [firstNumber, sign * parseNumber(false)]; | ||
return [firstNumber, sign * parseNumber()]; | ||
} | ||
@@ -385,0 +402,0 @@ else { |
@@ -1,2 +0,2 @@ | ||
import { PseudoClassType } from './syntax-definitions'; | ||
import { PseudoClassType } from './syntax-definitions.js'; | ||
export type PseudoClassSignature = { | ||
@@ -3,0 +3,0 @@ optional: boolean; |
@@ -1,2 +0,2 @@ | ||
import { AstRule, AstSelector } from './ast'; | ||
import { AstRule, AstSelector } from './ast.js'; | ||
/** | ||
@@ -3,0 +3,0 @@ * Renders CSS Selector AST back to a string. |
@@ -1,2 +0,2 @@ | ||
import { escapeIdentifier, escapePseudoClassString, escapeStr } from './utils'; | ||
import { escapeIdentifier, escapePseudoClassString, escapeStr } from './utils.js'; | ||
function renderNamespace(namespace) { | ||
@@ -19,3 +19,3 @@ if (namespace.type === 'WildcardNamespace') { | ||
if (a) { | ||
let result = `${a === 1 ? '' : a}n`; | ||
let result = `${a === 1 ? '' : a === -1 ? '-' : a}n`; | ||
if (b) { | ||
@@ -56,3 +56,6 @@ result += `${b > 0 ? '+' : ''}${b}`; | ||
let result = ''; | ||
const { tag, ids, classNames, attributes, pseudoClasses, pseudoElement, nestedRule } = entity; | ||
const { tag, ids, classNames, attributes, pseudoClasses, pseudoElement, combinator, nestedRule } = entity; | ||
if (combinator) { | ||
result += `${combinator} `; | ||
} | ||
if (tag) { | ||
@@ -141,5 +144,2 @@ const namespace = tag.namespace; | ||
if (nestedRule) { | ||
if (nestedRule.combinator) { | ||
result += ` ${nestedRule.combinator}`; | ||
} | ||
result += ` ${render(nestedRule)}`; | ||
@@ -146,0 +146,0 @@ } |
@@ -1,2 +0,2 @@ | ||
import { AstPseudoClassArgument } from './ast'; | ||
import { AstPseudoClassArgument } from './ast.js'; | ||
export type PseudoClassType = 'NoArgument' | AstPseudoClassArgument['type']; | ||
@@ -3,0 +3,0 @@ export type CssLevel = 'css1' | 'css2' | 'css3' | 'selectors-3' | 'selectors-4' | 'latest' | 'progressive'; |
{ | ||
"name": "css-selector-parser", | ||
"version": "2.3.1", | ||
"version": "2.3.2", | ||
"description": "Powerful and compliant CSS selector parser.", | ||
@@ -41,2 +41,3 @@ "keywords": [ | ||
"jest": "^29.5.0", | ||
"jest-ts-webcompat-resolver": "^1.0.0", | ||
"prettier": "^2.2.1", | ||
@@ -69,5 +70,6 @@ "standard-version": "^9.5.0", | ||
"test": "jest test", | ||
"test:watch": "jest --watch test", | ||
"test:dist": "TEST_DIST=cjs npm run test", | ||
"lint": "eslint src/**.ts", | ||
"lint:fix": "eslint --fix src/**.ts", | ||
"lint": "eslint {src,test,benchmark}/**.ts", | ||
"lint:fix": "eslint --fix {src,test,benchmark}/**.ts", | ||
"benchmark": "ts-node benchmark/benchmark.ts", | ||
@@ -74,0 +76,0 @@ "release": "standard-version", |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
144335
3769
0
19