esquery.lite.min.js.map
123 KB
{"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} key\n * @returns {undefined|boolean|string|number|external:AST}\n */\nfunction getPath(obj, key) {\n const keys = key.split('.');\n for (const key of keys) {\n if (obj == null) { return obj; }\n obj = obj[key];\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 * @returns {boolean}\n */\nfunction inPath(node, ancestor, path) {\n if (path.length === 0) { return node === ancestor; }\n if (ancestor == null) { return false; }\n const field = ancestor[path[0]];\n const remainingPath = path.slice(1);\n if (Array.isArray(field)) {\n for (const component of field) {\n if (inPath(node, component, remainingPath)) { return true; }\n }\n return false;\n } else {\n return inPath(node, field, remainingPath);\n }\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 switch(selector.type) {\n case 'wildcard':\n return true;\n\n case 'identifier':\n return selector.value.toLowerCase() === node.type.toLowerCase();\n\n case 'field': {\n const path = selector.name.split('.');\n const ancestor = ancestry[path.length - 1];\n return inPath(node, ancestor, path);\n\n }\n case 'matches':\n for (const sel of selector.selectors) {\n if (matches(node, sel, ancestry, options)) { return true; }\n }\n return false;\n\n case 'compound':\n for (const sel of selector.selectors) {\n if (!matches(node, sel, ancestry, options)) { return false; }\n }\n return true;\n\n case 'not':\n for (const sel of selector.selectors) {\n if (matches(node, sel, ancestry, options)) { return false; }\n }\n return true;\n\n case 'has': {\n const collector = [];\n for (const sel of selector.selectors) {\n const a = [];\n estraverse.traverse(node, {\n enter (node, parent) {\n if (parent != null) { a.unshift(parent); }\n if (matches(node, sel, a, options)) {\n collector.push(node);\n }\n },\n leave () { a.shift(); },\n keys: options && options.visitorKeys,\n fallback: options && options.fallback || 'iteration'\n });\n }\n return collector.length !== 0;\n\n }\n case 'child':\n if (matches(node, selector.right, ancestry, options)) {\n return matches(ancestry[0], selector.left, ancestry.slice(1), options);\n }\n return false;\n\n case 'descendant':\n if (matches(node, selector.right, ancestry, options)) {\n for (let i = 0, l = ancestry.length; i < l; ++i) {\n if (matches(ancestry[i], selector.left, ancestry.slice(i + 1), options)) {\n return true;\n }\n }\n }\n return false;\n\n case 'attribute': {\n const p = getPath(node, selector.name);\n switch (selector.operator) {\n case void 0:\n return p != null;\n case '=':\n switch (selector.value.type) {\n case 'regexp': return typeof p === 'string' && selector.value.value.test(p);\n case 'literal': return `${selector.value.value}` === `${p}`;\n case 'type': return selector.value.value === typeof p;\n }\n throw new Error(`Unknown selector value type: ${selector.value.type}`);\n case '!=':\n switch (selector.value.type) {\n case 'regexp': return !selector.value.value.test(p);\n case 'literal': return `${selector.value.value}` !== `${p}`;\n case 'type': return selector.value.value !== typeof p;\n }\n throw new Error(`Unknown selector value type: ${selector.value.type}`);\n case '<=': return p <= selector.value.value;\n case '<': return p < selector.value.value;\n case '>': return p > selector.value.value;\n case '>=': return p >= selector.value.value;\n }\n throw new Error(`Unknown operator: ${selector.operator}`);\n }\n case 'sibling':\n return matches(node, selector.right, ancestry, options) &&\n sibling(node, selector.left, ancestry, LEFT_SIDE, options) ||\n selector.left.subject &&\n matches(node, selector.left, ancestry, options) &&\n sibling(node, selector.right, ancestry, RIGHT_SIDE, options);\n case 'adjacent':\n return matches(node, selector.right, ancestry, options) &&\n adjacent(node, selector.left, ancestry, LEFT_SIDE, options) ||\n selector.right.subject &&\n matches(node, selector.left, ancestry, options) &&\n adjacent(node, selector.right, ancestry, RIGHT_SIDE, options);\n\n case 'nth-child':\n return matches(node, selector.right, ancestry, options) &&\n nthChild(node, ancestry, function () {\n return selector.index.value - 1;\n }, options);\n\n case 'nth-last-child':\n return matches(node, selector.right, ancestry, options) &&\n nthChild(node, ancestry, function (length) {\n return length - selector.index.value;\n }, options);\n\n case 'class':\n switch(selector.name.toLowerCase()){\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 throw new Error(`Unknown selector type: ${selector.type}`);\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.\n * @param {external:AST} node\n * @param {SelectorSequenceAST} selector\n * @param {external:AST[]} ancestry\n * @param {Side} side\n * @param {ESQueryOptions|undefined} options\n * @returns {boolean}\n */\nfunction sibling(node, selector, ancestry, side, options) {\n const [parent] = ancestry;\n if (!parent) { return false; }\n const keys = getVisitorKeys(parent, options);\n for (const key of keys) {\n const listProp = parent[key];\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]) && matches(listProp[k], selector, 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.\n * @param {external:AST} node\n * @param {SelectorSequenceAST} selector\n * @param {external:AST[]} ancestry\n * @param {Side} side\n * @param {ESQueryOptions|undefined} options\n * @returns {boolean}\n */\nfunction adjacent(node, selector, ancestry, side, options) {\n const [parent] = ancestry;\n if (!parent) { return false; }\n const keys = getVisitorKeys(parent, options);\n for (const key of keys) {\n const listProp = parent[key];\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]) && matches(listProp[idx - 1], selector, ancestry, options)) {\n return true;\n }\n if (side === RIGHT_SIDE && idx < listProp.length - 1 && isNode(listProp[idx + 1]) && matches(listProp[idx + 1], selector, ancestry, options)) {\n return true;\n }\n }\n }\n return false;\n}\n\n/**\n* @callback IndexFunction\n* @param {Integer} len Containing list's length\n* @returns {Integer}\n*/\n\n/**\n * Determines if the given node is the nth child, determined by\n * `idxFn`, which is given the containing list's length.\n * @param {external:AST} node\n * @param {external:AST[]} ancestry\n * @param {IndexFunction} idxFn\n * @param {ESQueryOptions|undefined} options\n * @returns {boolean}\n */\nfunction nthChild(node, ancestry, idxFn, options) {\n const [parent] = ancestry;\n if (!parent) { return false; }\n const keys = getVisitorKeys(parent, options);\n for (const key of keys) {\n const listProp = parent[key];\n if (Array.isArray(listProp)) {\n const idx = listProp.indexOf(node);\n if (idx >= 0 && idx === idxFn(listProp.length)) { return true; }\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 for (const [p, sel] of Object.entries(selector)) {\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 altSubjects = subjects(selector);\n estraverse.traverse(ast, {\n enter (node, parent) {\n if (parent != null) { ancestry.unshift(parent); }\n if (matches(node, selector, ancestry, options)) {\n if (altSubjects.length) {\n for (let i = 0, l = altSubjects.length; i < l; ++i) {\n if (matches(node, altSubjects[i], 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 (matches(ancestry[k], altSubjects[i], 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","name","Error","captureStackTrace","this","child","parent","ctor","constructor","prototype","peg$subclass","buildMessage","DESCRIBE_EXPECTATION_FNS","literal","expectation","literalEscape","text","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","matches","node","selector","ancestry","path","split","ancestor","inPath","field","remainingPath","isArray","sel","collector","estraverse","traverse","enter","unshift","leave","shift","keys","visitorKeys","fallback","l","obj","getPath","sibling","adjacent","nthChild","getVisitorKeys","nodeType","VisitorKeys","Object","filter","isNode","_typeof","side","listProp","startIndex","indexOf","lowerBound","upperBound","k","idx","idxFn","subjects","results","_objectEntries","ast","visitor","altSubjects","m","succeedingAncestry","parser","query"],"mappings":"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"}