1 |
- {"version":3,"file":"esquery.lite.min.js","sources":["../parser.js","../esquery.js"],"sourcesContent":["/*\n * Generated by PEG.js 0.10.0.\n *\n * http://pegjs.org/\n */\n(function(root, factory) {\n if (typeof define === \"function\" && define.amd) {\n define([], factory);\n } else if (typeof module === \"object\" && module.exports) {\n module.exports = factory();\n }\n})(this, function() {\n \"use strict\";\n\n function peg$subclass(child, parent) {\n function ctor() { this.constructor = child; }\n ctor.prototype = parent.prototype;\n child.prototype = new ctor();\n }\n\n function peg$SyntaxError(message, expected, found, location) {\n this.message = message;\n this.expected = expected;\n this.found = found;\n this.location = location;\n this.name = \"SyntaxError\";\n\n if (typeof Error.captureStackTrace === \"function\") {\n Error.captureStackTrace(this, peg$SyntaxError);\n }\n }\n\n peg$subclass(peg$SyntaxError, Error);\n\n peg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return \"\\\"\" + literalEscape(expectation.text) + \"\\\"\";\n },\n\n \"class\": function(expectation) {\n var escapedParts = \"\",\n i;\n\n for (i = 0; i < expectation.parts.length; i++) {\n escapedParts += expectation.parts[i] instanceof Array\n ? classEscape(expectation.parts[i][0]) + \"-\" + classEscape(expectation.parts[i][1])\n : classEscape(expectation.parts[i]);\n }\n\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts + \"]\";\n },\n\n any: function(expectation) {\n return \"any character\";\n },\n\n end: function(expectation) {\n return \"end of input\";\n },\n\n other: function(expectation) {\n return expectation.description;\n }\n };\n\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n\n function literalEscape(s) {\n return s\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\"/g, '\\\\\"')\n .replace(/\\0/g, '\\\\0')\n .replace(/\\t/g, '\\\\t')\n .replace(/\\n/g, '\\\\n')\n .replace(/\\r/g, '\\\\r')\n .replace(/[\\x00-\\x0F]/g, function(ch) { return '\\\\x0' + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return '\\\\x' + hex(ch); });\n }\n\n function classEscape(s) {\n return s\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\\]/g, '\\\\]')\n .replace(/\\^/g, '\\\\^')\n .replace(/-/g, '\\\\-')\n .replace(/\\0/g, '\\\\0')\n .replace(/\\t/g, '\\\\t')\n .replace(/\\n/g, '\\\\n')\n .replace(/\\r/g, '\\\\r')\n .replace(/[\\x00-\\x0F]/g, function(ch) { return '\\\\x0' + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return '\\\\x' + hex(ch); });\n }\n\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n\n function describeExpected(expected) {\n var descriptions = new Array(expected.length),\n i, j;\n\n for (i = 0; i < expected.length; i++) {\n descriptions[i] = describeExpectation(expected[i]);\n }\n\n descriptions.sort();\n\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n\n default:\n return descriptions.slice(0, -1).join(\", \")\n + \", or \"\n + descriptions[descriptions.length - 1];\n }\n }\n\n function describeFound(found) {\n return found ? \"\\\"\" + literalEscape(found) + \"\\\"\" : \"end of input\";\n }\n\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n };\n\n function peg$parse(input, options) {\n options = options !== void 0 ? options : {};\n\n var peg$FAILED = {},\n\n peg$startRuleFunctions = { start: peg$parsestart },\n peg$startRuleFunction = peg$parsestart,\n\n peg$c0 = function(ss) {\n return ss.length === 1 ? ss[0] : { type: 'matches', selectors: ss };\n },\n peg$c1 = function() { return void 0; },\n peg$c2 = \" \",\n peg$c3 = peg$literalExpectation(\" \", false),\n peg$c4 = /^[^ [\\],():#!=><~+.]/,\n peg$c5 = peg$classExpectation([\" \", \"[\", \"]\", \",\", \"(\", \")\", \":\", \"#\", \"!\", \"=\", \">\", \"<\", \"~\", \"+\", \".\"], true, false),\n peg$c6 = function(i) { return i.join(''); },\n peg$c7 = \">\",\n peg$c8 = peg$literalExpectation(\">\", false),\n peg$c9 = function() { return 'child'; },\n peg$c10 = \"~\",\n peg$c11 = peg$literalExpectation(\"~\", false),\n peg$c12 = function() { return 'sibling'; },\n peg$c13 = \"+\",\n peg$c14 = peg$literalExpectation(\"+\", false),\n peg$c15 = function() { return 'adjacent'; },\n peg$c16 = function() { return 'descendant'; },\n peg$c17 = \",\",\n peg$c18 = peg$literalExpectation(\",\", false),\n peg$c19 = function(s, ss) {\n return [s].concat(ss.map(function (s) { return s[3]; }));\n },\n peg$c20 = function(a, ops) {\n return ops.reduce(function (memo, rhs) {\n return { type: rhs[0], left: memo, right: rhs[1] };\n }, a);\n },\n peg$c21 = \"!\",\n peg$c22 = peg$literalExpectation(\"!\", false),\n peg$c23 = function(subject, as) {\n const b = as.length === 1 ? as[0] : { type: 'compound', selectors: as };\n if(subject) b.subject = true;\n return b;\n },\n peg$c24 = \"*\",\n peg$c25 = peg$literalExpectation(\"*\", false),\n peg$c26 = function(a) { return { type: 'wildcard', value: a }; },\n peg$c27 = \"#\",\n peg$c28 = peg$literalExpectation(\"#\", false),\n peg$c29 = function(i) { return { type: 'identifier', value: i }; },\n peg$c30 = \"[\",\n peg$c31 = peg$literalExpectation(\"[\", false),\n peg$c32 = \"]\",\n peg$c33 = peg$literalExpectation(\"]\", false),\n peg$c34 = function(v) { return v; },\n peg$c35 = /^[><!]/,\n peg$c36 = peg$classExpectation([\">\", \"<\", \"!\"], false, false),\n peg$c37 = \"=\",\n peg$c38 = peg$literalExpectation(\"=\", false),\n peg$c39 = function(a) { return (a || '') + '='; },\n peg$c40 = /^[><]/,\n peg$c41 = peg$classExpectation([\">\", \"<\"], false, false),\n peg$c42 = \".\",\n peg$c43 = peg$literalExpectation(\".\", false),\n peg$c44 = function(a, as) {\n return [].concat.apply([a], as).join('');\n },\n peg$c45 = function(name, op, value) {\n return { type: 'attribute', name: name, operator: op, value: value };\n },\n peg$c46 = function(name) { return { type: 'attribute', name: name }; },\n peg$c47 = \"\\\"\",\n peg$c48 = peg$literalExpectation(\"\\\"\", false),\n peg$c49 = /^[^\\\\\"]/,\n peg$c50 = peg$classExpectation([\"\\\\\", \"\\\"\"], true, false),\n peg$c51 = \"\\\\\",\n peg$c52 = peg$literalExpectation(\"\\\\\", false),\n peg$c53 = peg$anyExpectation(),\n peg$c54 = function(a, b) { return a + b; },\n peg$c55 = function(d) {\n return { type: 'literal', value: strUnescape(d.join('')) };\n },\n peg$c56 = \"'\",\n peg$c57 = peg$literalExpectation(\"'\", false),\n peg$c58 = /^[^\\\\']/,\n peg$c59 = peg$classExpectation([\"\\\\\", \"'\"], true, false),\n peg$c60 = /^[0-9]/,\n peg$c61 = peg$classExpectation([[\"0\", \"9\"]], false, false),\n peg$c62 = function(a, b) {\n // Can use `a.flat().join('')` once supported\n const leadingDecimals = a ? [].concat.apply([], a).join('') : '';\n return { type: 'literal', value: parseFloat(leadingDecimals + b.join('')) };\n },\n peg$c63 = function(i) { return { type: 'literal', value: i }; },\n peg$c64 = \"type(\",\n peg$c65 = peg$literalExpectation(\"type(\", false),\n peg$c66 = /^[^ )]/,\n peg$c67 = peg$classExpectation([\" \", \")\"], true, false),\n peg$c68 = \")\",\n peg$c69 = peg$literalExpectation(\")\", false),\n peg$c70 = function(t) { return { type: 'type', value: t.join('') }; },\n peg$c71 = /^[imsu]/,\n peg$c72 = peg$classExpectation([\"i\", \"m\", \"s\", \"u\"], false, false),\n peg$c73 = \"/\",\n peg$c74 = peg$literalExpectation(\"/\", false),\n peg$c75 = /^[^\\/]/,\n peg$c76 = peg$classExpectation([\"/\"], true, false),\n peg$c77 = function(d, flgs) { return {\n type: 'regexp', value: new RegExp(d.join(''), flgs ? flgs.join('') : '') };\n },\n peg$c78 = function(i, is) {\n return { type: 'field', name: is.reduce(function(memo, p){ return memo + p[0] + p[1]; }, i)};\n },\n peg$c79 = \":not(\",\n peg$c80 = peg$literalExpectation(\":not(\", false),\n peg$c81 = function(ss) { return { type: 'not', selectors: ss }; },\n peg$c82 = \":matches(\",\n peg$c83 = peg$literalExpectation(\":matches(\", false),\n peg$c84 = function(ss) { return { type: 'matches', selectors: ss }; },\n peg$c85 = \":has(\",\n peg$c86 = peg$literalExpectation(\":has(\", false),\n peg$c87 = function(ss) { return { type: 'has', selectors: ss }; },\n peg$c88 = \":first-child\",\n peg$c89 = peg$literalExpectation(\":first-child\", false),\n peg$c90 = function() { return nth(1); },\n peg$c91 = \":last-child\",\n peg$c92 = peg$literalExpectation(\":last-child\", false),\n peg$c93 = function() { return nthLast(1); },\n peg$c94 = \":nth-child(\",\n peg$c95 = peg$literalExpectation(\":nth-child(\", false),\n peg$c96 = function(n) { return nth(parseInt(n.join(''), 10)); },\n peg$c97 = \":nth-last-child(\",\n peg$c98 = peg$literalExpectation(\":nth-last-child(\", false),\n peg$c99 = function(n) { return nthLast(parseInt(n.join(''), 10)); },\n peg$c100 = \":\",\n peg$c101 = peg$literalExpectation(\":\", false),\n peg$c102 = \"statement\",\n peg$c103 = peg$literalExpectation(\"statement\", true),\n peg$c104 = \"expression\",\n peg$c105 = peg$literalExpectation(\"expression\", true),\n peg$c106 = \"declaration\",\n peg$c107 = peg$literalExpectation(\"declaration\", true),\n peg$c108 = \"function\",\n peg$c109 = peg$literalExpectation(\"function\", true),\n peg$c110 = \"pattern\",\n peg$c111 = peg$literalExpectation(\"pattern\", true),\n peg$c112 = function(c) {\n return { type: 'class', name: c };\n },\n\n peg$currPos = 0,\n peg$savedPos = 0,\n peg$posDetailsCache = [{ line: 1, column: 1 }],\n peg$maxFailPos = 0,\n peg$maxFailExpected = [],\n peg$silentFails = 0,\n\n peg$resultsCache = {},\n\n peg$result;\n\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n }\n\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n\n function expected(description, location) {\n location = location !== void 0 ? location : peg$computeLocation(peg$savedPos, peg$currPos)\n\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location\n );\n }\n\n function error(message, location) {\n location = location !== void 0 ? location : peg$computeLocation(peg$savedPos, peg$currPos)\n\n throw peg$buildSimpleError(message, location);\n }\n\n function peg$literalExpectation(text, ignoreCase) {\n return { type: \"literal\", text: text, ignoreCase: ignoreCase };\n }\n\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts: parts, inverted: inverted, ignoreCase: ignoreCase };\n }\n\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n\n function peg$otherExpectation(description) {\n return { type: \"other\", description: description };\n }\n\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos], p;\n\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n\n p++;\n }\n\n peg$posDetailsCache[pos] = details;\n return details;\n }\n }\n\n function peg$computeLocation(startPos, endPos) {\n var startPosDetails = peg$computePosDetails(startPos),\n endPosDetails = peg$computePosDetails(endPos);\n\n return {\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n }\n\n function peg$fail(expected) {\n if (peg$currPos < peg$maxFailPos) { return; }\n\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n\n peg$maxFailExpected.push(expected);\n }\n\n function peg$buildSimpleError(message, location) {\n return new peg$SyntaxError(message, null, null, location);\n }\n\n function peg$buildStructuredError(expected, found, location) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected, found),\n expected,\n found,\n location\n );\n }\n\n function peg$parsestart() {\n var s0, s1, s2, s3;\n\n var key = peg$currPos * 30 + 0,\n cached = peg$resultsCache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n\n return cached.result;\n }\n\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseselectors();\n if (s2 !== peg$FAILED) {\n s3 = peg$parse_();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c0(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c1();\n }\n s0 = s1;\n }\n\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parse_() {\n var s0, s1;\n\n var key = peg$currPos * 30 + 1,\n cached = peg$resultsCache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n\n return cached.result;\n }\n\n s0 = [];\n if (input.charCodeAt(peg$currPos) === 32) {\n s1 = peg$c2;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c3); }\n }\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n if (input.charCodeAt(peg$currPos) === 32) {\n s1 = peg$c2;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c3); }\n }\n }\n\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parseidentifierName() {\n var s0, s1, s2;\n\n var key = peg$currPos * 30 + 2,\n cached = peg$resultsCache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n\n return cached.result;\n }\n\n s0 = peg$currPos;\n s1 = [];\n if (peg$c4.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c5); }\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n if (peg$c4.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c5); }\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c6(s1);\n }\n s0 = s1;\n\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parsebinaryOp() {\n var s0, s1, s2, s3;\n\n var key = peg$currPos * 30 + 3,\n cached = peg$resultsCache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n\n return cached.result;\n }\n\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 62) {\n s2 = peg$c7;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c8); }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parse_();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c9();\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 126) {\n s2 = peg$c10;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c11); }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parse_();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c12();\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 43) {\n s2 = peg$c13;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c14); }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parse_();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c15();\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 32) {\n s1 = peg$c2;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c3); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c16();\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n }\n }\n\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parseselectors() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n var key = peg$currPos * 30 + 4,\n cached = peg$resultsCache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n\n return cached.result;\n }\n\n s0 = peg$currPos;\n s1 = peg$parseselector();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c17;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c18); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseselector();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c17;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c18); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseselector();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c19(s1, s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parseselector() {\n var s0, s1, s2, s3, s4, s5;\n\n var key = peg$currPos * 30 + 5,\n cached = peg$resultsCache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n\n return cached.result;\n }\n\n s0 = peg$currPos;\n s1 = peg$parsesequence();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parsebinaryOp();\n if (s4 !== peg$FAILED) {\n s5 = peg$parsesequence();\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parsebinaryOp();\n if (s4 !== peg$FAILED) {\n s5 = peg$parsesequence();\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c20(s1, s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parsesequence() {\n var s0, s1, s2, s3;\n\n var key = peg$currPos * 30 + 6,\n cached = peg$resultsCache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n\n return cached.result;\n }\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 33) {\n s1 = peg$c21;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c22); }\n }\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parseatom();\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parseatom();\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c23(s1, s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parseatom() {\n var s0;\n\n var key = peg$currPos * 30 + 7,\n cached = peg$resultsCache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n\n return cached.result;\n }\n\n s0 = peg$parsewildcard();\n if (s0 === peg$FAILED) {\n s0 = peg$parseidentifier();\n if (s0 === peg$FAILED) {\n s0 = peg$parseattr();\n if (s0 === peg$FAILED) {\n s0 = peg$parsefield();\n if (s0 === peg$FAILED) {\n s0 = peg$parsenegation();\n if (s0 === peg$FAILED) {\n s0 = peg$parsematches();\n if (s0 === peg$FAILED) {\n s0 = peg$parsehas();\n if (s0 === peg$FAILED) {\n s0 = peg$parsefirstChild();\n if (s0 === peg$FAILED) {\n s0 = peg$parselastChild();\n if (s0 === peg$FAILED) {\n s0 = peg$parsenthChild();\n if (s0 === peg$FAILED) {\n s0 = peg$parsenthLastChild();\n if (s0 === peg$FAILED) {\n s0 = peg$parseclass();\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parsewildcard() {\n var s0, s1;\n\n var key = peg$currPos * 30 + 8,\n cached = peg$resultsCache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n\n return cached.result;\n }\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 42) {\n s1 = peg$c24;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c25); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c26(s1);\n }\n s0 = s1;\n\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parseidentifier() {\n var s0, s1, s2;\n\n var key = peg$currPos * 30 + 9,\n cached = peg$resultsCache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n\n return cached.result;\n }\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 35) {\n s1 = peg$c27;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c28); }\n }\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseidentifierName();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c29(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parseattr() {\n var s0, s1, s2, s3, s4, s5;\n\n var key = peg$currPos * 30 + 10,\n cached = peg$resultsCache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n\n return cached.result;\n }\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 91) {\n s1 = peg$c30;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c31); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseattrValue();\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 93) {\n s5 = peg$c32;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c33); }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c34(s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parseattrOps() {\n var s0, s1, s2;\n\n var key = peg$currPos * 30 + 11,\n cached = peg$resultsCache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n\n return cached.result;\n }\n\n s0 = peg$currPos;\n if (peg$c35.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c36); }\n }\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 61) {\n s2 = peg$c37;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c38); }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c39(s1);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n if (peg$c40.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c41); }\n }\n }\n\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parseattrEqOps() {\n var s0, s1, s2;\n\n var key = peg$currPos * 30 + 12,\n cached = peg$resultsCache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n\n return cached.result;\n }\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 33) {\n s1 = peg$c21;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c22); }\n }\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 61) {\n s2 = peg$c37;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c38); }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c39(s1);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parseattrName() {\n var s0, s1, s2, s3, s4, s5;\n\n var key = peg$currPos * 30 + 13,\n cached = peg$resultsCache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n\n return cached.result;\n }\n\n s0 = peg$currPos;\n s1 = peg$parseidentifierName();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 46) {\n s4 = peg$c42;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c43); }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parseidentifierName();\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 46) {\n s4 = peg$c42;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c43); }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parseidentifierName();\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c44(s1, s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parseattrValue() {\n var s0, s1, s2, s3, s4, s5;\n\n var key = peg$currPos * 30 + 14,\n cached = peg$resultsCache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n\n return cached.result;\n }\n\n s0 = peg$currPos;\n s1 = peg$parseattrName();\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseattrEqOps();\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$parsetype();\n if (s5 === peg$FAILED) {\n s5 = peg$parseregex();\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c45(s1, s3, s5);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseattrName();\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseattrOps();\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$parsestring();\n if (s5 === peg$FAILED) {\n s5 = peg$parsenumber();\n if (s5 === peg$FAILED) {\n s5 = peg$parsepath();\n }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c45(s1, s3, s5);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseattrName();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c46(s1);\n }\n s0 = s1;\n }\n }\n\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parsestring() {\n var s0, s1, s2, s3, s4, s5;\n\n var key = peg$currPos * 30 + 15,\n cached = peg$resultsCache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n\n return cached.result;\n }\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 34) {\n s1 = peg$c47;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c48); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n if (peg$c49.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c50); }\n }\n if (s3 === peg$FAILED) {\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s4 = peg$c51;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c52); }\n }\n if (s4 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c53); }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s4 = peg$c54(s4, s5);\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (peg$c49.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c50); }\n }\n if (s3 === peg$FAILED) {\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s4 = peg$c51;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c52); }\n }\n if (s4 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c53); }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s4 = peg$c54(s4, s5);\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 34) {\n s3 = peg$c47;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c48); }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c55(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 39) {\n s1 = peg$c56;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c57); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n if (peg$c58.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c59); }\n }\n if (s3 === peg$FAILED) {\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s4 = peg$c51;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c52); }\n }\n if (s4 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c53); }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s4 = peg$c54(s4, s5);\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (peg$c58.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c59); }\n }\n if (s3 === peg$FAILED) {\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s4 = peg$c51;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c52); }\n }\n if (s4 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c53); }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s4 = peg$c54(s4, s5);\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 39) {\n s3 = peg$c56;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c57); }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c55(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parsenumber() {\n var s0, s1, s2, s3;\n\n var key = peg$currPos * 30 + 16,\n cached = peg$resultsCache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n\n return cached.result;\n }\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = [];\n if (peg$c60.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c61); }\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (peg$c60.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c61); }\n }\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 46) {\n s3 = peg$c42;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c43); }\n }\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n if (peg$c60.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c61); }\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (peg$c60.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c61); }\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c62(s1, s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parsepath() {\n var s0, s1;\n\n var key = peg$currPos * 30 + 17,\n cached = peg$resultsCache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n\n return cached.result;\n }\n\n s0 = peg$currPos;\n s1 = peg$parseidentifierName();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c63(s1);\n }\n s0 = s1;\n\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parsetype() {\n var s0, s1, s2, s3, s4, s5;\n\n var key = peg$currPos * 30 + 18,\n cached = peg$resultsCache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n\n return cached.result;\n }\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 5) === peg$c64) {\n s1 = peg$c64;\n peg$currPos += 5;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c65); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n s3 = [];\n if (peg$c66.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c67); }\n }\n if (s4 !== peg$FAILED) {\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n if (peg$c66.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c67); }\n }\n }\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 41) {\n s5 = peg$c68;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c69); }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c70(s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parseflags() {\n var s0, s1;\n\n var key = peg$currPos * 30 + 19,\n cached = peg$resultsCache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n\n return cached.result;\n }\n\n s0 = [];\n if (peg$c71.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c72); }\n }\n if (s1 !== peg$FAILED) {\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n if (peg$c71.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c72); }\n }\n }\n } else {\n s0 = peg$FAILED;\n }\n\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parseregex() {\n var s0, s1, s2, s3, s4;\n\n var key = peg$currPos * 30 + 20,\n cached = peg$resultsCache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n\n return cached.result;\n }\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 47) {\n s1 = peg$c73;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c74); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n if (peg$c75.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c76); }\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (peg$c75.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c76); }\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 47) {\n s3 = peg$c73;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c74); }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parseflags();\n if (s4 === peg$FAILED) {\n s4 = null;\n }\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c77(s2, s4);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parsefield() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n var key = peg$currPos * 30 + 21,\n cached = peg$resultsCache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n\n return cached.result;\n }\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 46) {\n s1 = peg$c42;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c43); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseidentifierName();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 46) {\n s5 = peg$c42;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c43); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parseidentifierName();\n if (s6 !== peg$FAILED) {\n s5 = [s5, s6];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 46) {\n s5 = peg$c42;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c43); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parseidentifierName();\n if (s6 !== peg$FAILED) {\n s5 = [s5, s6];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c78(s2, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parsenegation() {\n var s0, s1, s2, s3, s4, s5;\n\n var key = peg$currPos * 30 + 22,\n cached = peg$resultsCache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n\n return cached.result;\n }\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 5) === peg$c79) {\n s1 = peg$c79;\n peg$currPos += 5;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c80); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseselectors();\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 41) {\n s5 = peg$c68;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c69); }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c81(s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parsematches() {\n var s0, s1, s2, s3, s4, s5;\n\n var key = peg$currPos * 30 + 23,\n cached = peg$resultsCache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n\n return cached.result;\n }\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 9) === peg$c82) {\n s1 = peg$c82;\n peg$currPos += 9;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c83); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseselectors();\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 41) {\n s5 = peg$c68;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c69); }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c84(s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parsehas() {\n var s0, s1, s2, s3, s4, s5;\n\n var key = peg$currPos * 30 + 24,\n cached = peg$resultsCache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n\n return cached.result;\n }\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 5) === peg$c85) {\n s1 = peg$c85;\n peg$currPos += 5;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c86); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseselectors();\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 41) {\n s5 = peg$c68;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c69); }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c87(s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parsefirstChild() {\n var s0, s1;\n\n var key = peg$currPos * 30 + 25,\n cached = peg$resultsCache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n\n return cached.result;\n }\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 12) === peg$c88) {\n s1 = peg$c88;\n peg$currPos += 12;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c89); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c90();\n }\n s0 = s1;\n\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parselastChild() {\n var s0, s1;\n\n var key = peg$currPos * 30 + 26,\n cached = peg$resultsCache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n\n return cached.result;\n }\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 11) === peg$c91) {\n s1 = peg$c91;\n peg$currPos += 11;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c92); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c93();\n }\n s0 = s1;\n\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parsenthChild() {\n var s0, s1, s2, s3, s4, s5;\n\n var key = peg$currPos * 30 + 27,\n cached = peg$resultsCache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n\n return cached.result;\n }\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 11) === peg$c94) {\n s1 = peg$c94;\n peg$currPos += 11;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c95); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n s3 = [];\n if (peg$c60.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c61); }\n }\n if (s4 !== peg$FAILED) {\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n if (peg$c60.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c61); }\n }\n }\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 41) {\n s5 = peg$c68;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c69); }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c96(s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parsenthLastChild() {\n var s0, s1, s2, s3, s4, s5;\n\n var key = peg$currPos * 30 + 28,\n cached = peg$resultsCache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n\n return cached.result;\n }\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 16) === peg$c97) {\n s1 = peg$c97;\n peg$currPos += 16;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c98); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n s3 = [];\n if (peg$c60.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c61); }\n }\n if (s4 !== peg$FAILED) {\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n if (peg$c60.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c61); }\n }\n }\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 41) {\n s5 = peg$c68;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c69); }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c99(s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parseclass() {\n var s0, s1, s2;\n\n var key = peg$currPos * 30 + 29,\n cached = peg$resultsCache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n\n return cached.result;\n }\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 58) {\n s1 = peg$c100;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c101); }\n }\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 9).toLowerCase() === peg$c102) {\n s2 = input.substr(peg$currPos, 9);\n peg$currPos += 9;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c103); }\n }\n if (s2 === peg$FAILED) {\n if (input.substr(peg$currPos, 10).toLowerCase() === peg$c104) {\n s2 = input.substr(peg$currPos, 10);\n peg$currPos += 10;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c105); }\n }\n if (s2 === peg$FAILED) {\n if (input.substr(peg$currPos, 11).toLowerCase() === peg$c106) {\n s2 = input.substr(peg$currPos, 11);\n peg$currPos += 11;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c107); }\n }\n if (s2 === peg$FAILED) {\n if (input.substr(peg$currPos, 8).toLowerCase() === peg$c108) {\n s2 = input.substr(peg$currPos, 8);\n peg$currPos += 8;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c109); }\n }\n if (s2 === peg$FAILED) {\n if (input.substr(peg$currPos, 7).toLowerCase() === peg$c110) {\n s2 = input.substr(peg$currPos, 7);\n peg$currPos += 7;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c111); }\n }\n }\n }\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c112(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n\n function nth(n) { return { type: 'nth-child', index: { type: 'literal', value: n } }; }\n function nthLast(n) { return { type: 'nth-last-child', index: { type: 'literal', value: n } }; }\n function strUnescape(s) {\n return s.replace(/\\\\(.)/g, function(match, ch) {\n switch(ch) {\n case 'b': return '\\b';\n case 'f': return '\\f';\n case 'n': return '\\n';\n case 'r': return '\\r';\n case 't': return '\\t';\n case 'v': return '\\v';\n default: return ch;\n }\n });\n }\n\n\n peg$result = peg$startRuleFunction();\n\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length\n ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1)\n : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n }\n\n return {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse\n };\n});\n","/* vim: set sw=4 sts=4 : */\nimport estraverse from 'estraverse';\nimport parser from './parser.js';\n\n/**\n* @typedef {\"LEFT_SIDE\"|\"RIGHT_SIDE\"} Side\n*/\n\nconst LEFT_SIDE = 'LEFT_SIDE';\nconst RIGHT_SIDE = 'RIGHT_SIDE';\n\n/**\n * @external AST\n * @see https://esprima.readthedocs.io/en/latest/syntax-tree-format.html\n */\n\n/**\n * One of the rules of `grammar.pegjs`\n * @typedef {PlainObject} SelectorAST\n * @see grammar.pegjs\n*/\n\n/**\n * The `sequence` production of `grammar.pegjs`\n * @typedef {PlainObject} SelectorSequenceAST\n*/\n\n/**\n * Get the value of a property which may be multiple levels down\n * in the object.\n * @param {?PlainObject} obj\n * @param {string[]} keys\n * @returns {undefined|boolean|string|number|external:AST}\n */\nfunction getPath(obj, keys) {\n for (let i = 0; i < keys.length; ++i) {\n if (obj == null) { return obj; }\n obj = obj[keys[i]];\n }\n return obj;\n}\n\n/**\n * Determine whether `node` can be reached by following `path`,\n * starting at `ancestor`.\n * @param {?external:AST} node\n * @param {?external:AST} ancestor\n * @param {string[]} path\n * @param {Integer} fromPathIndex\n * @returns {boolean}\n */\nfunction inPath(node, ancestor, path, fromPathIndex) {\n let current = ancestor;\n for (let i = fromPathIndex; i < path.length; ++i) {\n if (current == null) {\n return false;\n }\n const field = current[path[i]];\n if (Array.isArray(field)) {\n for (let k = 0; k < field.length; ++k) {\n if (inPath(node, field[k], path, i + 1)) {\n return true;\n }\n }\n return false;\n }\n current = field;\n }\n return node === current;\n}\n\n/**\n * A generated matcher function for a selector.\n * @typedef {function} SelectorMatcher\n*/\n\n/**\n * A WeakMap for holding cached matcher functions for selectors.\n * @type {WeakMap<SelectorAST, SelectorMatcher>}\n*/\nconst MATCHER_CACHE = typeof WeakMap === 'function' ? new WeakMap : null;\n\n/**\n * Look up a matcher function for `selector` in the cache.\n * If it does not exist, generate it with `generateMatcher` and add it to the cache.\n * In engines without WeakMap, the caching is skipped and matchers are generated with every call.\n * @param {?SelectorAST} selector\n * @returns {SelectorMatcher}\n */\nfunction getMatcher(selector) {\n if (selector == null) {\n return () => true;\n }\n\n if (MATCHER_CACHE != null) {\n let matcher = MATCHER_CACHE.get(selector);\n if (matcher != null) {\n return matcher;\n }\n matcher = generateMatcher(selector);\n MATCHER_CACHE.set(selector, matcher);\n return matcher;\n }\n\n return generateMatcher(selector);\n}\n\n/**\n * Create a matcher function for `selector`,\n * @param {?SelectorAST} selector\n * @returns {SelectorMatcher}\n */\nfunction generateMatcher(selector) {\n switch(selector.type) {\n case 'wildcard':\n return () => true;\n\n case 'identifier': {\n const value = selector.value.toLowerCase();\n return (node) => value === node.type.toLowerCase();\n }\n\n case 'field': {\n const path = selector.name.split('.');\n return (node, ancestry) => {\n const ancestor = ancestry[path.length - 1];\n return inPath(node, ancestor, path, 0);\n };\n }\n\n case 'matches': {\n const matchers = selector.selectors.map(getMatcher);\n return (node, ancestry, options) => {\n for (let i = 0; i < matchers.length; ++i) {\n if (matchers[i](node, ancestry, options)) { return true; }\n }\n return false;\n };\n }\n\n case 'compound': {\n const matchers = selector.selectors.map(getMatcher);\n return (node, ancestry, options) => {\n for (let i = 0; i < matchers.length; ++i) {\n if (!matchers[i](node, ancestry, options)) { return false; }\n }\n return true;\n };\n }\n\n case 'not': {\n const matchers = selector.selectors.map(getMatcher);\n return (node, ancestry, options) => {\n for (let i = 0; i < matchers.length; ++i) {\n if (matchers[i](node, ancestry, options)) { return false; }\n }\n return true;\n };\n }\n\n case 'has': {\n const matchers = selector.selectors.map(getMatcher);\n return (node, ancestry, options) => {\n let result = false;\n\n const a = [];\n estraverse.traverse(node, {\n enter (node, parent) {\n if (parent != null) { a.unshift(parent); }\n\n for (let i = 0; i < matchers.length; ++i) {\n if (matchers[i](node, a, options)) {\n result = true;\n this.break();\n return;\n }\n }\n },\n leave () { a.shift(); },\n keys: options && options.visitorKeys,\n fallback: options && options.fallback || 'iteration'\n });\n\n return result;\n };\n }\n\n case 'child': {\n const left = getMatcher(selector.left);\n const right = getMatcher(selector.right);\n return (node, ancestry, options) => {\n if (ancestry.length > 0 && right(node, ancestry, options)) {\n return left(ancestry[0], ancestry.slice(1), options);\n }\n return false;\n };\n }\n\n case 'descendant': {\n const left = getMatcher(selector.left);\n const right = getMatcher(selector.right);\n return (node, ancestry, options) => {\n if (right(node, ancestry, options)) {\n for (let i = 0, l = ancestry.length; i < l; ++i) {\n if (left(ancestry[i], ancestry.slice(i + 1), options)) {\n return true;\n }\n }\n }\n return false;\n };\n }\n\n case 'attribute': {\n const path = selector.name.split('.');\n switch (selector.operator) {\n case void 0:\n return (node) => getPath(node, path) != null;\n case '=':\n switch (selector.value.type) {\n case 'regexp':\n return (node) => {\n const p = getPath(node, path);\n return typeof p === 'string' && selector.value.value.test(p);\n };\n case 'literal': {\n const literal = `${selector.value.value}`;\n return (node) => literal === `${getPath(node, path)}`;\n }\n case 'type':\n return (node) => selector.value.value === typeof getPath(node, path);\n }\n throw new Error(`Unknown selector value type: ${selector.value.type}`);\n case '!=':\n switch (selector.value.type) {\n case 'regexp':\n return (node) => !selector.value.value.test(getPath(node, path));\n case 'literal': {\n const literal = `${selector.value.value}`;\n return (node) => literal !== `${getPath(node, path)}`;\n }\n case 'type':\n return (node) => selector.value.value !== typeof getPath(node, path);\n }\n throw new Error(`Unknown selector value type: ${selector.value.type}`);\n case '<=':\n return (node) => getPath(node, path) <= selector.value.value;\n case '<':\n return (node) => getPath(node, path) < selector.value.value;\n case '>':\n return (node) => getPath(node, path) > selector.value.value;\n case '>=':\n return (node) => getPath(node, path) >= selector.value.value;\n }\n throw new Error(`Unknown operator: ${selector.operator}`);\n }\n\n case 'sibling': {\n const left = getMatcher(selector.left);\n const right = getMatcher(selector.right);\n return (node, ancestry, options) =>\n right(node, ancestry, options) &&\n sibling(node, left, ancestry, LEFT_SIDE, options) ||\n selector.left.subject &&\n left(node, ancestry, options) &&\n sibling(node, right, ancestry, RIGHT_SIDE, options);\n }\n\n case 'adjacent': {\n const left = getMatcher(selector.left);\n const right = getMatcher(selector.right);\n return (node, ancestry, options) =>\n right(node, ancestry, options) &&\n adjacent(node, left, ancestry, LEFT_SIDE, options) ||\n selector.right.subject &&\n left(node, ancestry, options) &&\n adjacent(node, right, ancestry, RIGHT_SIDE, options);\n }\n\n case 'nth-child': {\n const nth = selector.index.value;\n const right = getMatcher(selector.right);\n return (node, ancestry, options) =>\n right(node, ancestry, options) &&\n nthChild(node, ancestry, nth, options);\n }\n\n case 'nth-last-child': {\n const nth = -selector.index.value;\n const right = getMatcher(selector.right);\n return (node, ancestry, options) =>\n right(node, ancestry, options) &&\n nthChild(node, ancestry, nth, options);\n }\n\n case 'class': {\n const name = selector.name.toLowerCase();\n return (node, ancestry) => {\n switch(name){\n case 'statement':\n if(node.type.slice(-9) === 'Statement') return true;\n // fallthrough: interface Declaration <: Statement { }\n case 'declaration':\n return node.type.slice(-11) === 'Declaration';\n case 'pattern':\n if(node.type.slice(-7) === 'Pattern') return true;\n // fallthrough: interface Expression <: Node, Pattern { }\n case 'expression':\n return node.type.slice(-10) === 'Expression' ||\n node.type.slice(-7) === 'Literal' ||\n (\n node.type === 'Identifier' &&\n (ancestry.length === 0 || ancestry[0].type !== 'MetaProperty')\n ) ||\n node.type === 'MetaProperty';\n case 'function':\n return node.type === 'FunctionDeclaration' ||\n node.type === 'FunctionExpression' ||\n node.type === 'ArrowFunctionExpression';\n }\n throw new Error(`Unknown class name: ${selector.name}`);\n };\n }\n }\n\n throw new Error(`Unknown selector type: ${selector.type}`);\n}\n\n/**\n * @callback TraverseOptionFallback\n * @param {external:AST} node The given node.\n * @returns {string[]} An array of visitor keys for the given node.\n */\n/**\n * @typedef {object} ESQueryOptions\n * @property { { [nodeType: string]: string[] } } [visitorKeys] By passing `visitorKeys` mapping, we can extend the properties of the nodes that traverse the node.\n * @property {TraverseOptionFallback} [fallback] By passing `fallback` option, we can control the properties of traversing nodes when encountering unknown nodes.\n */\n\n/**\n * Given a `node` and its ancestors, determine if `node` is matched\n * by `selector`.\n * @param {?external:AST} node\n * @param {?SelectorAST} selector\n * @param {external:AST[]} [ancestry=[]]\n * @param {ESQueryOptions} [options]\n * @throws {Error} Unknowns (operator, class name, selector type, or\n * selector value type)\n * @returns {boolean}\n */\nfunction matches(node, selector, ancestry, options) {\n if (!selector) { return true; }\n if (!node) { return false; }\n if (!ancestry) { ancestry = []; }\n\n return getMatcher(selector)(node, ancestry, options);\n}\n\n/**\n * Get visitor keys of a given node.\n * @param {external:AST} node The AST node to get keys.\n * @param {ESQueryOptions|undefined} options\n * @returns {string[]} Visitor keys of the node.\n */\nfunction getVisitorKeys(node, options) {\n const nodeType = node.type;\n if (options && options.visitorKeys && options.visitorKeys[nodeType]) {\n return options.visitorKeys[nodeType];\n }\n if (estraverse.VisitorKeys[nodeType]) {\n return estraverse.VisitorKeys[nodeType];\n }\n if (options && typeof options.fallback === 'function') {\n return options.fallback(node);\n }\n // 'iteration' fallback\n return Object.keys(node).filter(function (key) {\n return key !== 'type';\n });\n}\n\n\n/**\n * Check whether the given value is an ASTNode or not.\n * @param {any} node The value to check.\n * @returns {boolean} `true` if the value is an ASTNode.\n */\nfunction isNode(node) {\n return node !== null && typeof node === 'object' && typeof node.type === 'string';\n}\n\n/**\n * Determines if the given node has a sibling that matches the\n * given selector matcher.\n * @param {external:AST} node\n * @param {SelectorMatcher} matcher\n * @param {external:AST[]} ancestry\n * @param {Side} side\n * @param {ESQueryOptions|undefined} options\n * @returns {boolean}\n */\nfunction sibling(node, matcher, ancestry, side, options) {\n const [parent] = ancestry;\n if (!parent) { return false; }\n const keys = getVisitorKeys(parent, options);\n for (let i = 0; i < keys.length; ++i) {\n const listProp = parent[keys[i]];\n if (Array.isArray(listProp)) {\n const startIndex = listProp.indexOf(node);\n if (startIndex < 0) { continue; }\n let lowerBound, upperBound;\n if (side === LEFT_SIDE) {\n lowerBound = 0;\n upperBound = startIndex;\n } else {\n lowerBound = startIndex + 1;\n upperBound = listProp.length;\n }\n for (let k = lowerBound; k < upperBound; ++k) {\n if (isNode(listProp[k]) && matcher(listProp[k], ancestry, options)) {\n return true;\n }\n }\n }\n }\n return false;\n}\n\n/**\n * Determines if the given node has an adjacent sibling that matches\n * the given selector matcher.\n * @param {external:AST} node\n * @param {SelectorMatcher} matcher\n * @param {external:AST[]} ancestry\n * @param {Side} side\n * @param {ESQueryOptions|undefined} options\n * @returns {boolean}\n */\nfunction adjacent(node, matcher, ancestry, side, options) {\n const [parent] = ancestry;\n if (!parent) { return false; }\n const keys = getVisitorKeys(parent, options);\n for (let i = 0; i < keys.length; ++i) {\n const listProp = parent[keys[i]];\n if (Array.isArray(listProp)) {\n const idx = listProp.indexOf(node);\n if (idx < 0) { continue; }\n if (side === LEFT_SIDE && idx > 0 && isNode(listProp[idx - 1]) && matcher(listProp[idx - 1], ancestry, options)) {\n return true;\n }\n if (side === RIGHT_SIDE && idx < listProp.length - 1 && isNode(listProp[idx + 1]) && matcher(listProp[idx + 1], ancestry, options)) {\n return true;\n }\n }\n }\n return false;\n}\n\n/**\n * Determines if the given node is the `nth` child.\n * If `nth` is negative then the position is counted\n * from the end of the list of children.\n * @param {external:AST} node\n * @param {external:AST[]} ancestry\n * @param {Integer} nth\n * @param {ESQueryOptions|undefined} options\n * @returns {boolean}\n */\nfunction nthChild(node, ancestry, nth, options) {\n if (nth === 0) { return false; }\n const [parent] = ancestry;\n if (!parent) { return false; }\n const keys = getVisitorKeys(parent, options);\n for (let i = 0; i < keys.length; ++i) {\n const listProp = parent[keys[i]];\n if (Array.isArray(listProp)){\n const idx = nth < 0 ? listProp.length + nth : nth - 1;\n if (idx >= 0 && idx < listProp.length && listProp[idx] === node) {\n return true;\n }\n }\n }\n return false;\n}\n\n/**\n * For each selector node marked as a subject, find the portion of the\n * selector that the subject must match.\n * @param {SelectorAST} selector\n * @param {SelectorAST} [ancestor] Defaults to `selector`\n * @returns {SelectorAST[]}\n */\nfunction subjects(selector, ancestor) {\n if (selector == null || typeof selector != 'object') { return []; }\n if (ancestor == null) { ancestor = selector; }\n const results = selector.subject ? [ancestor] : [];\n const keys = Object.keys(selector);\n for (let i = 0; i < keys.length; ++i) {\n const p = keys[i];\n const sel = selector[p];\n results.push(...subjects(sel, p === 'left' ? sel : ancestor));\n }\n return results;\n}\n\n/**\n* @callback TraverseVisitor\n* @param {?external:AST} node\n* @param {?external:AST} parent\n* @param {external:AST[]} ancestry\n*/\n\n/**\n * From a JS AST and a selector AST, collect all JS AST nodes that\n * match the selector.\n * @param {external:AST} ast\n * @param {?SelectorAST} selector\n * @param {TraverseVisitor} visitor\n * @param {ESQueryOptions} [options]\n * @returns {external:AST[]}\n */\nfunction traverse(ast, selector, visitor, options) {\n if (!selector) { return; }\n const ancestry = [];\n const matcher = getMatcher(selector);\n const altSubjects = subjects(selector).map(getMatcher);\n estraverse.traverse(ast, {\n enter (node, parent) {\n if (parent != null) { ancestry.unshift(parent); }\n if (matcher(node, ancestry, options)) {\n if (altSubjects.length) {\n for (let i = 0, l = altSubjects.length; i < l; ++i) {\n if (altSubjects[i](node, ancestry, options)) {\n visitor(node, parent, ancestry);\n }\n for (let k = 0, m = ancestry.length; k < m; ++k) {\n const succeedingAncestry = ancestry.slice(k + 1);\n if (altSubjects[i](ancestry[k], succeedingAncestry, options)) {\n visitor(ancestry[k], parent, succeedingAncestry);\n }\n }\n }\n } else {\n visitor(node, parent, ancestry);\n }\n }\n },\n leave () { ancestry.shift(); },\n keys: options && options.visitorKeys,\n fallback: options && options.fallback || 'iteration'\n });\n}\n\n\n/**\n * From a JS AST and a selector AST, collect all JS AST nodes that\n * match the selector.\n * @param {external:AST} ast\n * @param {?SelectorAST} selector\n * @param {ESQueryOptions} [options]\n * @returns {external:AST[]}\n */\nfunction match(ast, selector, options) {\n const results = [];\n traverse(ast, selector, function (node) {\n results.push(node);\n }, options);\n return results;\n}\n\n/**\n * Parse a selector string and return its AST.\n * @param {string} selector\n * @returns {SelectorAST}\n */\nfunction parse(selector) {\n return parser.parse(selector);\n}\n\n/**\n * Query the code AST using the selector string.\n * @param {external:AST} ast\n * @param {string} selector\n * @param {ESQueryOptions} [options]\n * @returns {external:AST[]}\n */\nfunction query(ast, selector, options) {\n return match(ast, parse(selector), options);\n}\n\nquery.parse = parse;\nquery.match = match;\nquery.traverse = traverse;\nquery.matches = matches;\nquery.query = query;\n\nexport default query;\n"],"names":["module","exports","peg$SyntaxError","message","expected","found","location","this","name","Error","captureStackTrace","child","parent","ctor","constructor","prototype","peg$subclass","buildMessage","DESCRIBE_EXPECTATION_FNS","literal","expectation","literalEscape","text","class","i","escapedParts","parts","length","Array","classEscape","inverted","any","end","other","description","hex","ch","charCodeAt","toString","toUpperCase","s","replace","j","descriptions","type","sort","slice","join","describeExpected","describeFound","SyntaxError","parse","input","options","peg$result","peg$FAILED","peg$startRuleFunctions","start","peg$parsestart","peg$startRuleFunction","peg$c3","peg$literalExpectation","peg$c4","peg$c5","peg$classExpectation","peg$c8","peg$c11","peg$c14","peg$c18","peg$c22","peg$c25","peg$c28","peg$c31","peg$c33","peg$c35","peg$c36","peg$c38","peg$c39","a","peg$c40","peg$c41","peg$c43","peg$c45","op","value","operator","peg$c48","peg$c49","peg$c50","peg$c52","peg$c53","peg$c54","b","peg$c55","d","match","peg$c57","peg$c58","peg$c59","peg$c60","peg$c61","peg$c65","peg$c66","peg$c67","peg$c69","peg$c71","peg$c72","peg$c74","peg$c75","peg$c76","peg$c80","peg$c83","peg$c86","peg$c89","peg$c92","peg$c95","peg$c98","peg$c101","peg$c103","peg$c105","peg$c107","peg$c109","peg$c111","peg$currPos","peg$posDetailsCache","line","column","peg$maxFailPos","peg$maxFailExpected","peg$resultsCache","startRule","ignoreCase","peg$computePosDetails","pos","p","details","peg$computeLocation","startPos","endPos","startPosDetails","endPosDetails","offset","peg$fail","push","s0","s1","s2","ss","key","cached","nextPos","result","peg$parse_","peg$parseselectors","selectors","peg$c1","peg$parseidentifierName","test","charAt","peg$parsebinaryOp","s3","s4","s5","s6","s7","peg$parseselector","concat","map","peg$parsesequence","reduce","memo","rhs","left","right","subject","as","peg$parseatom","peg$parsewildcard","peg$parseidentifier","peg$parseattrName","peg$parseattrEqOps","substr","peg$parsetype","flgs","peg$parseflags","RegExp","peg$parseregex","peg$parseattrOps","peg$parsestring","leadingDecimals","apply","parseFloat","peg$parsenumber","peg$parsepath","peg$parseattrValue","peg$parseattr","peg$parsefield","peg$parsenegation","peg$parsematches","peg$parsehas","nth","peg$parsefirstChild","nthLast","peg$parselastChild","parseInt","peg$parsenthChild","peg$parsenthLastChild","toLowerCase","peg$parseclass","n","index","factory","getPath","obj","keys","MATCHER_CACHE","WeakMap","getMatcher","selector","matcher","get","generateMatcher","set","node","path","split","ancestry","inPath","ancestor","fromPathIndex","current","field","isArray","k","matchers","estraverse","traverse","enter","unshift","leave","shift","visitorKeys","fallback","l","sibling","adjacent","nthChild","getVisitorKeys","nodeType","VisitorKeys","Object","filter","isNode","_typeof","side","listProp","startIndex","indexOf","lowerBound","upperBound","idx","ast","visitor","altSubjects","subjects","results","sel","m","succeedingAncestry","parser","query","matches"],"mappings":"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"}
|