blob: 61caabaf2b8da86d8bb4d9d69a00b8af93bcdf31 [file] [log] [blame]
Simon Zündaebbf4f2024-06-27 08:42:161function _iterableToArrayLimit(arr, i) {
2 var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"];
3 if (null != _i) {
4 var _s,
5 _e,
6 _x,
7 _r,
8 _arr = [],
9 _n = !0,
10 _d = !1;
11 try {
12 if (_x = (_i = _i.call(arr)).next, 0 === i) {
13 if (Object(_i) !== _i) return;
14 _n = !1;
15 } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0);
16 } catch (err) {
17 _d = !0, _e = err;
18 } finally {
19 try {
20 if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return;
21 } finally {
22 if (_d) throw _e;
23 }
24 }
25 return _arr;
26 }
27}
Tim van der Lippe16aca392020-11-13 11:37:1328function _typeof(obj) {
29 "@babel/helpers - typeof";
30
Simon Zündaebbf4f2024-06-27 08:42:1631 return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {
32 return typeof obj;
33 } : function (obj) {
34 return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
35 }, _typeof(obj);
Tim van der Lippe16aca392020-11-13 11:37:1336}
Tim van der Lippe16aca392020-11-13 11:37:1337function _slicedToArray(arr, i) {
38 return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
39}
Tim van der Lippe16aca392020-11-13 11:37:1340function _toConsumableArray(arr) {
41 return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
42}
Tim van der Lippe16aca392020-11-13 11:37:1343function _arrayWithoutHoles(arr) {
44 if (Array.isArray(arr)) return _arrayLikeToArray(arr);
45}
Tim van der Lippe16aca392020-11-13 11:37:1346function _arrayWithHoles(arr) {
47 if (Array.isArray(arr)) return arr;
48}
Tim van der Lippe16aca392020-11-13 11:37:1349function _iterableToArray(iter) {
Simon Zündaebbf4f2024-06-27 08:42:1650 if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
Tim van der Lippe16aca392020-11-13 11:37:1351}
Tim van der Lippe16aca392020-11-13 11:37:1352function _unsupportedIterableToArray(o, minLen) {
53 if (!o) return;
54 if (typeof o === "string") return _arrayLikeToArray(o, minLen);
55 var n = Object.prototype.toString.call(o).slice(8, -1);
56 if (n === "Object" && o.constructor) n = o.constructor.name;
Tim van der Lippeb97da6b2021-02-12 14:32:5357 if (n === "Map" || n === "Set") return Array.from(o);
Tim van der Lippe16aca392020-11-13 11:37:1358 if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
59}
Tim van der Lippe16aca392020-11-13 11:37:1360function _arrayLikeToArray(arr, len) {
61 if (len == null || len > arr.length) len = arr.length;
Tim van der Lippe16aca392020-11-13 11:37:1362 for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
Tim van der Lippe16aca392020-11-13 11:37:1363 return arr2;
64}
Tim van der Lippe16aca392020-11-13 11:37:1365function _nonIterableSpread() {
66 throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
67}
Tim van der Lippe16aca392020-11-13 11:37:1368function _nonIterableRest() {
69 throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
70}
71
Tim van der Lippec8f6ffd2020-04-06 12:42:0072var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
73
74function createCommonjsModule(fn, module) {
75 return module = { exports: {} }, fn(module, module.exports), module.exports;
76}
77
78var estraverse = createCommonjsModule(function (module, exports) {
Tim van der Lippe16aca392020-11-13 11:37:1379 /*
80 Copyright (C) 2012-2013 Yusuke Suzuki <[email protected]>
81 Copyright (C) 2012 Ariya Hidayat <[email protected]>
82
83 Redistribution and use in source and binary forms, with or without
84 modification, are permitted provided that the following conditions are met:
85
86 * Redistributions of source code must retain the above copyright
87 notice, this list of conditions and the following disclaimer.
88 * Redistributions in binary form must reproduce the above copyright
89 notice, this list of conditions and the following disclaimer in the
90 documentation and/or other materials provided with the distribution.
91
92 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
93 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
94 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
95 ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
96 DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
97 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
98 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
99 ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
100 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
101 THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
102 */
Tim van der Lippe16aca392020-11-13 11:37:13103 /*jslint vars:false, bitwise:true*/
Tim van der Lippe16aca392020-11-13 11:37:13104 /*jshint indent:4*/
Tim van der Lippe16aca392020-11-13 11:37:13105 /*global exports:true*/
106 (function clone(exports) {
Tim van der Lippec8f6ffd2020-04-06 12:42:00107
Tim van der Lippe16aca392020-11-13 11:37:13108 var Syntax, VisitorOption, VisitorKeys, BREAK, SKIP, REMOVE;
Tim van der Lippec8f6ffd2020-04-06 12:42:00109 function deepCopy(obj) {
Tim van der Lippe16aca392020-11-13 11:37:13110 var ret = {},
Simon Zündaebbf4f2024-06-27 08:42:16111 key,
112 val;
Tim van der Lippe16aca392020-11-13 11:37:13113 for (key in obj) {
114 if (obj.hasOwnProperty(key)) {
115 val = obj[key];
Tim van der Lippe16aca392020-11-13 11:37:13116 if (typeof val === 'object' && val !== null) {
117 ret[key] = deepCopy(val);
118 } else {
119 ret[key] = val;
120 }
121 }
122 }
Tim van der Lippe16aca392020-11-13 11:37:13123 return ret;
Simon Zündaebbf4f2024-06-27 08:42:16124 }
Tim van der Lippec8f6ffd2020-04-06 12:42:00125
Simon Zündaebbf4f2024-06-27 08:42:16126 // based on LLVM libc++ upper_bound / lower_bound
127 // MIT License
Tim van der Lippe16aca392020-11-13 11:37:13128
Tim van der Lippec8f6ffd2020-04-06 12:42:00129 function upperBound(array, func) {
Tim van der Lippe16aca392020-11-13 11:37:13130 var diff, len, i, current;
131 len = array.length;
132 i = 0;
Tim van der Lippe16aca392020-11-13 11:37:13133 while (len) {
134 diff = len >>> 1;
135 current = i + diff;
Tim van der Lippe16aca392020-11-13 11:37:13136 if (func(array[current])) {
137 len = diff;
138 } else {
139 i = current + 1;
140 len -= diff + 1;
Tim van der Lippec8f6ffd2020-04-06 12:42:00141 }
Tim van der Lippe16aca392020-11-13 11:37:13142 }
Tim van der Lippe16aca392020-11-13 11:37:13143 return i;
Tim van der Lippec8f6ffd2020-04-06 12:42:00144 }
Tim van der Lippec8f6ffd2020-04-06 12:42:00145 Syntax = {
Tim van der Lippe16aca392020-11-13 11:37:13146 AssignmentExpression: 'AssignmentExpression',
147 AssignmentPattern: 'AssignmentPattern',
148 ArrayExpression: 'ArrayExpression',
149 ArrayPattern: 'ArrayPattern',
150 ArrowFunctionExpression: 'ArrowFunctionExpression',
151 AwaitExpression: 'AwaitExpression',
152 // CAUTION: It's deferred to ES7.
153 BlockStatement: 'BlockStatement',
154 BinaryExpression: 'BinaryExpression',
155 BreakStatement: 'BreakStatement',
156 CallExpression: 'CallExpression',
157 CatchClause: 'CatchClause',
Tim van der Lippeb97da6b2021-02-12 14:32:53158 ChainExpression: 'ChainExpression',
Tim van der Lippe16aca392020-11-13 11:37:13159 ClassBody: 'ClassBody',
160 ClassDeclaration: 'ClassDeclaration',
161 ClassExpression: 'ClassExpression',
162 ComprehensionBlock: 'ComprehensionBlock',
163 // CAUTION: It's deferred to ES7.
164 ComprehensionExpression: 'ComprehensionExpression',
165 // CAUTION: It's deferred to ES7.
166 ConditionalExpression: 'ConditionalExpression',
167 ContinueStatement: 'ContinueStatement',
168 DebuggerStatement: 'DebuggerStatement',
169 DirectiveStatement: 'DirectiveStatement',
170 DoWhileStatement: 'DoWhileStatement',
171 EmptyStatement: 'EmptyStatement',
172 ExportAllDeclaration: 'ExportAllDeclaration',
173 ExportDefaultDeclaration: 'ExportDefaultDeclaration',
174 ExportNamedDeclaration: 'ExportNamedDeclaration',
175 ExportSpecifier: 'ExportSpecifier',
176 ExpressionStatement: 'ExpressionStatement',
177 ForStatement: 'ForStatement',
178 ForInStatement: 'ForInStatement',
179 ForOfStatement: 'ForOfStatement',
180 FunctionDeclaration: 'FunctionDeclaration',
181 FunctionExpression: 'FunctionExpression',
182 GeneratorExpression: 'GeneratorExpression',
183 // CAUTION: It's deferred to ES7.
184 Identifier: 'Identifier',
185 IfStatement: 'IfStatement',
186 ImportExpression: 'ImportExpression',
187 ImportDeclaration: 'ImportDeclaration',
188 ImportDefaultSpecifier: 'ImportDefaultSpecifier',
189 ImportNamespaceSpecifier: 'ImportNamespaceSpecifier',
190 ImportSpecifier: 'ImportSpecifier',
191 Literal: 'Literal',
192 LabeledStatement: 'LabeledStatement',
193 LogicalExpression: 'LogicalExpression',
194 MemberExpression: 'MemberExpression',
195 MetaProperty: 'MetaProperty',
196 MethodDefinition: 'MethodDefinition',
197 ModuleSpecifier: 'ModuleSpecifier',
198 NewExpression: 'NewExpression',
199 ObjectExpression: 'ObjectExpression',
200 ObjectPattern: 'ObjectPattern',
Simon Zündaebbf4f2024-06-27 08:42:16201 PrivateIdentifier: 'PrivateIdentifier',
Tim van der Lippe16aca392020-11-13 11:37:13202 Program: 'Program',
203 Property: 'Property',
Simon Zündaebbf4f2024-06-27 08:42:16204 PropertyDefinition: 'PropertyDefinition',
Tim van der Lippe16aca392020-11-13 11:37:13205 RestElement: 'RestElement',
206 ReturnStatement: 'ReturnStatement',
207 SequenceExpression: 'SequenceExpression',
208 SpreadElement: 'SpreadElement',
209 Super: 'Super',
210 SwitchStatement: 'SwitchStatement',
211 SwitchCase: 'SwitchCase',
212 TaggedTemplateExpression: 'TaggedTemplateExpression',
213 TemplateElement: 'TemplateElement',
214 TemplateLiteral: 'TemplateLiteral',
215 ThisExpression: 'ThisExpression',
216 ThrowStatement: 'ThrowStatement',
217 TryStatement: 'TryStatement',
218 UnaryExpression: 'UnaryExpression',
219 UpdateExpression: 'UpdateExpression',
220 VariableDeclaration: 'VariableDeclaration',
221 VariableDeclarator: 'VariableDeclarator',
222 WhileStatement: 'WhileStatement',
223 WithStatement: 'WithStatement',
224 YieldExpression: 'YieldExpression'
Tim van der Lippec8f6ffd2020-04-06 12:42:00225 };
Tim van der Lippec8f6ffd2020-04-06 12:42:00226 VisitorKeys = {
Tim van der Lippe16aca392020-11-13 11:37:13227 AssignmentExpression: ['left', 'right'],
228 AssignmentPattern: ['left', 'right'],
229 ArrayExpression: ['elements'],
230 ArrayPattern: ['elements'],
231 ArrowFunctionExpression: ['params', 'body'],
232 AwaitExpression: ['argument'],
233 // CAUTION: It's deferred to ES7.
234 BlockStatement: ['body'],
235 BinaryExpression: ['left', 'right'],
236 BreakStatement: ['label'],
237 CallExpression: ['callee', 'arguments'],
238 CatchClause: ['param', 'body'],
Tim van der Lippeb97da6b2021-02-12 14:32:53239 ChainExpression: ['expression'],
Tim van der Lippe16aca392020-11-13 11:37:13240 ClassBody: ['body'],
241 ClassDeclaration: ['id', 'superClass', 'body'],
242 ClassExpression: ['id', 'superClass', 'body'],
243 ComprehensionBlock: ['left', 'right'],
244 // CAUTION: It's deferred to ES7.
245 ComprehensionExpression: ['blocks', 'filter', 'body'],
246 // CAUTION: It's deferred to ES7.
247 ConditionalExpression: ['test', 'consequent', 'alternate'],
248 ContinueStatement: ['label'],
249 DebuggerStatement: [],
250 DirectiveStatement: [],
251 DoWhileStatement: ['body', 'test'],
252 EmptyStatement: [],
253 ExportAllDeclaration: ['source'],
254 ExportDefaultDeclaration: ['declaration'],
255 ExportNamedDeclaration: ['declaration', 'specifiers', 'source'],
256 ExportSpecifier: ['exported', 'local'],
257 ExpressionStatement: ['expression'],
258 ForStatement: ['init', 'test', 'update', 'body'],
259 ForInStatement: ['left', 'right', 'body'],
260 ForOfStatement: ['left', 'right', 'body'],
261 FunctionDeclaration: ['id', 'params', 'body'],
262 FunctionExpression: ['id', 'params', 'body'],
263 GeneratorExpression: ['blocks', 'filter', 'body'],
264 // CAUTION: It's deferred to ES7.
265 Identifier: [],
266 IfStatement: ['test', 'consequent', 'alternate'],
267 ImportExpression: ['source'],
268 ImportDeclaration: ['specifiers', 'source'],
269 ImportDefaultSpecifier: ['local'],
270 ImportNamespaceSpecifier: ['local'],
271 ImportSpecifier: ['imported', 'local'],
272 Literal: [],
273 LabeledStatement: ['label', 'body'],
274 LogicalExpression: ['left', 'right'],
275 MemberExpression: ['object', 'property'],
276 MetaProperty: ['meta', 'property'],
277 MethodDefinition: ['key', 'value'],
278 ModuleSpecifier: [],
279 NewExpression: ['callee', 'arguments'],
280 ObjectExpression: ['properties'],
281 ObjectPattern: ['properties'],
Simon Zündaebbf4f2024-06-27 08:42:16282 PrivateIdentifier: [],
Tim van der Lippe16aca392020-11-13 11:37:13283 Program: ['body'],
284 Property: ['key', 'value'],
Simon Zündaebbf4f2024-06-27 08:42:16285 PropertyDefinition: ['key', 'value'],
Tim van der Lippe16aca392020-11-13 11:37:13286 RestElement: ['argument'],
287 ReturnStatement: ['argument'],
288 SequenceExpression: ['expressions'],
289 SpreadElement: ['argument'],
290 Super: [],
291 SwitchStatement: ['discriminant', 'cases'],
292 SwitchCase: ['test', 'consequent'],
293 TaggedTemplateExpression: ['tag', 'quasi'],
294 TemplateElement: [],
295 TemplateLiteral: ['quasis', 'expressions'],
296 ThisExpression: [],
297 ThrowStatement: ['argument'],
298 TryStatement: ['block', 'handler', 'finalizer'],
299 UnaryExpression: ['argument'],
300 UpdateExpression: ['argument'],
301 VariableDeclaration: ['declarations'],
302 VariableDeclarator: ['id', 'init'],
303 WhileStatement: ['test', 'body'],
304 WithStatement: ['object', 'body'],
305 YieldExpression: ['argument']
Simon Zündaebbf4f2024-06-27 08:42:16306 };
Tim van der Lippec8f6ffd2020-04-06 12:42:00307
Simon Zündaebbf4f2024-06-27 08:42:16308 // unique id
Tim van der Lippec8f6ffd2020-04-06 12:42:00309 BREAK = {};
310 SKIP = {};
311 REMOVE = {};
Tim van der Lippec8f6ffd2020-04-06 12:42:00312 VisitorOption = {
Tim van der Lippe16aca392020-11-13 11:37:13313 Break: BREAK,
314 Skip: SKIP,
315 Remove: REMOVE
Tim van der Lippec8f6ffd2020-04-06 12:42:00316 };
Tim van der Lippec8f6ffd2020-04-06 12:42:00317 function Reference(parent, key) {
Tim van der Lippe16aca392020-11-13 11:37:13318 this.parent = parent;
319 this.key = key;
Tim van der Lippec8f6ffd2020-04-06 12:42:00320 }
Tim van der Lippec8f6ffd2020-04-06 12:42:00321 Reference.prototype.replace = function replace(node) {
Tim van der Lippe16aca392020-11-13 11:37:13322 this.parent[this.key] = node;
Tim van der Lippec8f6ffd2020-04-06 12:42:00323 };
Tim van der Lippec8f6ffd2020-04-06 12:42:00324 Reference.prototype.remove = function remove() {
Tim van der Lippe16aca392020-11-13 11:37:13325 if (Array.isArray(this.parent)) {
326 this.parent.splice(this.key, 1);
327 return true;
328 } else {
329 this.replace(null);
330 return false;
331 }
Tim van der Lippec8f6ffd2020-04-06 12:42:00332 };
Tim van der Lippec8f6ffd2020-04-06 12:42:00333 function Element(node, path, wrap, ref) {
Tim van der Lippe16aca392020-11-13 11:37:13334 this.node = node;
335 this.path = path;
336 this.wrap = wrap;
337 this.ref = ref;
Tim van der Lippec8f6ffd2020-04-06 12:42:00338 }
Simon Zündaebbf4f2024-06-27 08:42:16339 function Controller() {}
Tim van der Lippec8f6ffd2020-04-06 12:42:00340
Simon Zündaebbf4f2024-06-27 08:42:16341 // API:
Tim van der Lippec8f6ffd2020-04-06 12:42:00342 // return property path array from root to current node
343 Controller.prototype.path = function path() {
Tim van der Lippe16aca392020-11-13 11:37:13344 var i, iz, j, jz, result, element;
Tim van der Lippe16aca392020-11-13 11:37:13345 function addToPath(result, path) {
346 if (Array.isArray(path)) {
347 for (j = 0, jz = path.length; j < jz; ++j) {
348 result.push(path[j]);
349 }
350 } else {
351 result.push(path);
Tim van der Lippec8f6ffd2020-04-06 12:42:00352 }
Simon Zündaebbf4f2024-06-27 08:42:16353 }
Tim van der Lippec8f6ffd2020-04-06 12:42:00354
Simon Zündaebbf4f2024-06-27 08:42:16355 // root node
Tim van der Lippe16aca392020-11-13 11:37:13356 if (!this.__current.path) {
357 return null;
Simon Zündaebbf4f2024-06-27 08:42:16358 }
Tim van der Lippec8f6ffd2020-04-06 12:42:00359
Simon Zündaebbf4f2024-06-27 08:42:16360 // first node is sentinel, second node is root element
Tim van der Lippe16aca392020-11-13 11:37:13361 result = [];
Tim van der Lippe16aca392020-11-13 11:37:13362 for (i = 2, iz = this.__leavelist.length; i < iz; ++i) {
363 element = this.__leavelist[i];
364 addToPath(result, element.path);
365 }
Tim van der Lippe16aca392020-11-13 11:37:13366 addToPath(result, this.__current.path);
367 return result;
Simon Zündaebbf4f2024-06-27 08:42:16368 };
369
370 // API:
Tim van der Lippec8f6ffd2020-04-06 12:42:00371 // return type of current node
372 Controller.prototype.type = function () {
Tim van der Lippe16aca392020-11-13 11:37:13373 var node = this.current();
374 return node.type || this.__current.wrap;
Simon Zündaebbf4f2024-06-27 08:42:16375 };
376
377 // API:
Tim van der Lippec8f6ffd2020-04-06 12:42:00378 // return array of parent elements
379 Controller.prototype.parents = function parents() {
Simon Zündaebbf4f2024-06-27 08:42:16380 var i, iz, result;
Tim van der Lippec8f6ffd2020-04-06 12:42:00381
Simon Zündaebbf4f2024-06-27 08:42:16382 // first node is sentinel
Tim van der Lippe16aca392020-11-13 11:37:13383 result = [];
Tim van der Lippe16aca392020-11-13 11:37:13384 for (i = 1, iz = this.__leavelist.length; i < iz; ++i) {
385 result.push(this.__leavelist[i].node);
386 }
Tim van der Lippe16aca392020-11-13 11:37:13387 return result;
Simon Zündaebbf4f2024-06-27 08:42:16388 };
389
390 // API:
Tim van der Lippec8f6ffd2020-04-06 12:42:00391 // return current node
392 Controller.prototype.current = function current() {
Tim van der Lippe16aca392020-11-13 11:37:13393 return this.__current.node;
Tim van der Lippec8f6ffd2020-04-06 12:42:00394 };
Tim van der Lippec8f6ffd2020-04-06 12:42:00395 Controller.prototype.__execute = function __execute(callback, element) {
Tim van der Lippe16aca392020-11-13 11:37:13396 var previous, result;
397 result = undefined;
398 previous = this.__current;
399 this.__current = element;
400 this.__state = null;
Tim van der Lippe16aca392020-11-13 11:37:13401 if (callback) {
402 result = callback.call(this, element.node, this.__leavelist[this.__leavelist.length - 1].node);
403 }
Tim van der Lippe16aca392020-11-13 11:37:13404 this.__current = previous;
405 return result;
Simon Zündaebbf4f2024-06-27 08:42:16406 };
407
408 // API:
Tim van der Lippec8f6ffd2020-04-06 12:42:00409 // notify control skip / break
410 Controller.prototype.notify = function notify(flag) {
Tim van der Lippe16aca392020-11-13 11:37:13411 this.__state = flag;
Simon Zündaebbf4f2024-06-27 08:42:16412 };
413
414 // API:
Tim van der Lippec8f6ffd2020-04-06 12:42:00415 // skip child nodes of current node
416 Controller.prototype.skip = function () {
Tim van der Lippe16aca392020-11-13 11:37:13417 this.notify(SKIP);
Simon Zündaebbf4f2024-06-27 08:42:16418 };
419
420 // API:
Tim van der Lippec8f6ffd2020-04-06 12:42:00421 // break traversals
422 Controller.prototype['break'] = function () {
Tim van der Lippe16aca392020-11-13 11:37:13423 this.notify(BREAK);
Simon Zündaebbf4f2024-06-27 08:42:16424 };
425
426 // API:
Tim van der Lippec8f6ffd2020-04-06 12:42:00427 // remove node
428 Controller.prototype.remove = function () {
Tim van der Lippe16aca392020-11-13 11:37:13429 this.notify(REMOVE);
Tim van der Lippec8f6ffd2020-04-06 12:42:00430 };
Tim van der Lippe16aca392020-11-13 11:37:13431 Controller.prototype.__initialize = function (root, visitor) {
432 this.visitor = visitor;
433 this.root = root;
434 this.__worklist = [];
435 this.__leavelist = [];
436 this.__current = null;
437 this.__state = null;
438 this.__fallback = null;
Tim van der Lippe16aca392020-11-13 11:37:13439 if (visitor.fallback === 'iteration') {
440 this.__fallback = Object.keys;
441 } else if (typeof visitor.fallback === 'function') {
442 this.__fallback = visitor.fallback;
443 }
Tim van der Lippe16aca392020-11-13 11:37:13444 this.__keys = VisitorKeys;
Tim van der Lippe16aca392020-11-13 11:37:13445 if (visitor.keys) {
446 this.__keys = Object.assign(Object.create(this.__keys), visitor.keys);
447 }
Tim van der Lippec8f6ffd2020-04-06 12:42:00448 };
Tim van der Lippec8f6ffd2020-04-06 12:42:00449 function isNode(node) {
Tim van der Lippe16aca392020-11-13 11:37:13450 if (node == null) {
451 return false;
452 }
Tim van der Lippe16aca392020-11-13 11:37:13453 return typeof node === 'object' && typeof node.type === 'string';
Tim van der Lippec8f6ffd2020-04-06 12:42:00454 }
Tim van der Lippec8f6ffd2020-04-06 12:42:00455 function isProperty(nodeType, key) {
Tim van der Lippe16aca392020-11-13 11:37:13456 return (nodeType === Syntax.ObjectExpression || nodeType === Syntax.ObjectPattern) && 'properties' === key;
457 }
Tim van der Lippe16aca392020-11-13 11:37:13458 function candidateExistsInLeaveList(leavelist, candidate) {
459 for (var i = leavelist.length - 1; i >= 0; --i) {
460 if (leavelist[i].node === candidate) {
461 return true;
462 }
463 }
Tim van der Lippe16aca392020-11-13 11:37:13464 return false;
Tim van der Lippec8f6ffd2020-04-06 12:42:00465 }
Tim van der Lippec8f6ffd2020-04-06 12:42:00466 Controller.prototype.traverse = function traverse(root, visitor) {
Tim van der Lippe16aca392020-11-13 11:37:13467 var worklist, leavelist, element, node, nodeType, ret, key, current, current2, candidates, candidate, sentinel;
Tim van der Lippe16aca392020-11-13 11:37:13468 this.__initialize(root, visitor);
Simon Zündaebbf4f2024-06-27 08:42:16469 sentinel = {};
Tim van der Lippec8f6ffd2020-04-06 12:42:00470
Simon Zündaebbf4f2024-06-27 08:42:16471 // reference
Tim van der Lippe16aca392020-11-13 11:37:13472 worklist = this.__worklist;
Simon Zündaebbf4f2024-06-27 08:42:16473 leavelist = this.__leavelist;
Tim van der Lippec8f6ffd2020-04-06 12:42:00474
Simon Zündaebbf4f2024-06-27 08:42:16475 // initialize
Tim van der Lippe16aca392020-11-13 11:37:13476 worklist.push(new Element(root, null, null, null));
477 leavelist.push(new Element(null, null, null, null));
Tim van der Lippe16aca392020-11-13 11:37:13478 while (worklist.length) {
479 element = worklist.pop();
Tim van der Lippe16aca392020-11-13 11:37:13480 if (element === sentinel) {
481 element = leavelist.pop();
482 ret = this.__execute(visitor.leave, element);
Tim van der Lippe16aca392020-11-13 11:37:13483 if (this.__state === BREAK || ret === BREAK) {
484 return;
485 }
Tim van der Lippe16aca392020-11-13 11:37:13486 continue;
Tim van der Lippec8f6ffd2020-04-06 12:42:00487 }
Tim van der Lippe16aca392020-11-13 11:37:13488 if (element.node) {
489 ret = this.__execute(visitor.enter, element);
Tim van der Lippe16aca392020-11-13 11:37:13490 if (this.__state === BREAK || ret === BREAK) {
491 return;
492 }
Tim van der Lippe16aca392020-11-13 11:37:13493 worklist.push(sentinel);
494 leavelist.push(element);
Tim van der Lippe16aca392020-11-13 11:37:13495 if (this.__state === SKIP || ret === SKIP) {
496 continue;
497 }
Tim van der Lippe16aca392020-11-13 11:37:13498 node = element.node;
499 nodeType = node.type || element.wrap;
500 candidates = this.__keys[nodeType];
Tim van der Lippe16aca392020-11-13 11:37:13501 if (!candidates) {
502 if (this.__fallback) {
503 candidates = this.__fallback(node);
504 } else {
505 throw new Error('Unknown node type ' + nodeType + '.');
506 }
507 }
Tim van der Lippe16aca392020-11-13 11:37:13508 current = candidates.length;
Tim van der Lippe16aca392020-11-13 11:37:13509 while ((current -= 1) >= 0) {
510 key = candidates[current];
511 candidate = node[key];
Tim van der Lippe16aca392020-11-13 11:37:13512 if (!candidate) {
513 continue;
514 }
Tim van der Lippe16aca392020-11-13 11:37:13515 if (Array.isArray(candidate)) {
516 current2 = candidate.length;
Tim van der Lippe16aca392020-11-13 11:37:13517 while ((current2 -= 1) >= 0) {
518 if (!candidate[current2]) {
519 continue;
520 }
Tim van der Lippe16aca392020-11-13 11:37:13521 if (candidateExistsInLeaveList(leavelist, candidate[current2])) {
522 continue;
523 }
Tim van der Lippe16aca392020-11-13 11:37:13524 if (isProperty(nodeType, candidates[current])) {
525 element = new Element(candidate[current2], [key, current2], 'Property', null);
526 } else if (isNode(candidate[current2])) {
527 element = new Element(candidate[current2], [key, current2], null, null);
528 } else {
529 continue;
530 }
Tim van der Lippe16aca392020-11-13 11:37:13531 worklist.push(element);
532 }
533 } else if (isNode(candidate)) {
534 if (candidateExistsInLeaveList(leavelist, candidate)) {
535 continue;
536 }
Tim van der Lippe16aca392020-11-13 11:37:13537 worklist.push(new Element(candidate, key, null, null));
538 }
539 }
540 }
541 }
Tim van der Lippec8f6ffd2020-04-06 12:42:00542 };
Tim van der Lippec8f6ffd2020-04-06 12:42:00543 Controller.prototype.replace = function replace(root, visitor) {
Tim van der Lippe16aca392020-11-13 11:37:13544 var worklist, leavelist, node, nodeType, target, element, current, current2, candidates, candidate, sentinel, outer, key;
Tim van der Lippe16aca392020-11-13 11:37:13545 function removeElem(element) {
546 var i, key, nextElem, parent;
Tim van der Lippe16aca392020-11-13 11:37:13547 if (element.ref.remove()) {
548 // When the reference is an element of an array.
549 key = element.ref.key;
Simon Zündaebbf4f2024-06-27 08:42:16550 parent = element.ref.parent;
Tim van der Lippec8f6ffd2020-04-06 12:42:00551
Simon Zündaebbf4f2024-06-27 08:42:16552 // If removed from array, then decrease following items' keys.
Tim van der Lippe16aca392020-11-13 11:37:13553 i = worklist.length;
Tim van der Lippe16aca392020-11-13 11:37:13554 while (i--) {
555 nextElem = worklist[i];
Tim van der Lippe16aca392020-11-13 11:37:13556 if (nextElem.ref && nextElem.ref.parent === parent) {
557 if (nextElem.ref.key < key) {
558 break;
559 }
Tim van der Lippe16aca392020-11-13 11:37:13560 --nextElem.ref.key;
Tim van der Lippec8f6ffd2020-04-06 12:42:00561 }
Tim van der Lippe16aca392020-11-13 11:37:13562 }
563 }
564 }
Tim van der Lippe16aca392020-11-13 11:37:13565 this.__initialize(root, visitor);
Simon Zündaebbf4f2024-06-27 08:42:16566 sentinel = {};
Tim van der Lippe16aca392020-11-13 11:37:13567
Simon Zündaebbf4f2024-06-27 08:42:16568 // reference
Tim van der Lippe16aca392020-11-13 11:37:13569 worklist = this.__worklist;
Simon Zündaebbf4f2024-06-27 08:42:16570 leavelist = this.__leavelist;
Tim van der Lippe16aca392020-11-13 11:37:13571
Simon Zündaebbf4f2024-06-27 08:42:16572 // initialize
Tim van der Lippe16aca392020-11-13 11:37:13573 outer = {
574 root: root
575 };
576 element = new Element(root, null, null, new Reference(outer, 'root'));
577 worklist.push(element);
578 leavelist.push(element);
Tim van der Lippe16aca392020-11-13 11:37:13579 while (worklist.length) {
580 element = worklist.pop();
Tim van der Lippe16aca392020-11-13 11:37:13581 if (element === sentinel) {
582 element = leavelist.pop();
Simon Zündaebbf4f2024-06-27 08:42:16583 target = this.__execute(visitor.leave, element);
Tim van der Lippe16aca392020-11-13 11:37:13584
Simon Zündaebbf4f2024-06-27 08:42:16585 // node may be replaced with null,
586 // so distinguish between undefined and null in this place
Tim van der Lippe16aca392020-11-13 11:37:13587 if (target !== undefined && target !== BREAK && target !== SKIP && target !== REMOVE) {
588 // replace
589 element.ref.replace(target);
590 }
Tim van der Lippe16aca392020-11-13 11:37:13591 if (this.__state === REMOVE || target === REMOVE) {
592 removeElem(element);
593 }
Tim van der Lippe16aca392020-11-13 11:37:13594 if (this.__state === BREAK || target === BREAK) {
595 return outer.root;
596 }
Tim van der Lippe16aca392020-11-13 11:37:13597 continue;
Tim van der Lippec8f6ffd2020-04-06 12:42:00598 }
Simon Zündaebbf4f2024-06-27 08:42:16599 target = this.__execute(visitor.enter, element);
Tim van der Lippec8f6ffd2020-04-06 12:42:00600
Simon Zündaebbf4f2024-06-27 08:42:16601 // node may be replaced with null,
Tim van der Lippe16aca392020-11-13 11:37:13602 // so distinguish between undefined and null in this place
Tim van der Lippe16aca392020-11-13 11:37:13603 if (target !== undefined && target !== BREAK && target !== SKIP && target !== REMOVE) {
604 // replace
605 element.ref.replace(target);
606 element.node = target;
607 }
Tim van der Lippe16aca392020-11-13 11:37:13608 if (this.__state === REMOVE || target === REMOVE) {
609 removeElem(element);
610 element.node = null;
611 }
Tim van der Lippe16aca392020-11-13 11:37:13612 if (this.__state === BREAK || target === BREAK) {
613 return outer.root;
Simon Zündaebbf4f2024-06-27 08:42:16614 }
Tim van der Lippe16aca392020-11-13 11:37:13615
Simon Zündaebbf4f2024-06-27 08:42:16616 // node may be null
Tim van der Lippe16aca392020-11-13 11:37:13617 node = element.node;
Tim van der Lippe16aca392020-11-13 11:37:13618 if (!node) {
619 continue;
620 }
Tim van der Lippe16aca392020-11-13 11:37:13621 worklist.push(sentinel);
Tim van der Lippec8f6ffd2020-04-06 12:42:00622 leavelist.push(element);
Tim van der Lippe16aca392020-11-13 11:37:13623 if (this.__state === SKIP || target === SKIP) {
624 continue;
Tim van der Lippec8f6ffd2020-04-06 12:42:00625 }
Tim van der Lippe16aca392020-11-13 11:37:13626 nodeType = node.type || element.wrap;
627 candidates = this.__keys[nodeType];
Tim van der Lippe16aca392020-11-13 11:37:13628 if (!candidates) {
629 if (this.__fallback) {
630 candidates = this.__fallback(node);
631 } else {
632 throw new Error('Unknown node type ' + nodeType + '.');
633 }
634 }
Tim van der Lippe16aca392020-11-13 11:37:13635 current = candidates.length;
Tim van der Lippe16aca392020-11-13 11:37:13636 while ((current -= 1) >= 0) {
637 key = candidates[current];
638 candidate = node[key];
Tim van der Lippe16aca392020-11-13 11:37:13639 if (!candidate) {
640 continue;
641 }
Tim van der Lippe16aca392020-11-13 11:37:13642 if (Array.isArray(candidate)) {
643 current2 = candidate.length;
Tim van der Lippe16aca392020-11-13 11:37:13644 while ((current2 -= 1) >= 0) {
645 if (!candidate[current2]) {
646 continue;
647 }
Tim van der Lippe16aca392020-11-13 11:37:13648 if (isProperty(nodeType, candidates[current])) {
649 element = new Element(candidate[current2], [key, current2], 'Property', new Reference(candidate, current2));
650 } else if (isNode(candidate[current2])) {
651 element = new Element(candidate[current2], [key, current2], null, new Reference(candidate, current2));
652 } else {
653 continue;
654 }
Tim van der Lippe16aca392020-11-13 11:37:13655 worklist.push(element);
656 }
657 } else if (isNode(candidate)) {
658 worklist.push(new Element(candidate, key, null, new Reference(node, key)));
659 }
660 }
661 }
Tim van der Lippe16aca392020-11-13 11:37:13662 return outer.root;
Tim van der Lippec8f6ffd2020-04-06 12:42:00663 };
Tim van der Lippec8f6ffd2020-04-06 12:42:00664 function traverse(root, visitor) {
Tim van der Lippe16aca392020-11-13 11:37:13665 var controller = new Controller();
666 return controller.traverse(root, visitor);
Tim van der Lippec8f6ffd2020-04-06 12:42:00667 }
Tim van der Lippec8f6ffd2020-04-06 12:42:00668 function replace(root, visitor) {
Tim van der Lippe16aca392020-11-13 11:37:13669 var controller = new Controller();
670 return controller.replace(root, visitor);
Tim van der Lippec8f6ffd2020-04-06 12:42:00671 }
Tim van der Lippec8f6ffd2020-04-06 12:42:00672 function extendCommentRange(comment, tokens) {
Tim van der Lippe16aca392020-11-13 11:37:13673 var target;
674 target = upperBound(tokens, function search(token) {
675 return token.range[0] > comment.range[0];
676 });
677 comment.extendedRange = [comment.range[0], comment.range[1]];
Tim van der Lippe16aca392020-11-13 11:37:13678 if (target !== tokens.length) {
679 comment.extendedRange[1] = tokens[target].range[0];
680 }
Tim van der Lippe16aca392020-11-13 11:37:13681 target -= 1;
Tim van der Lippe16aca392020-11-13 11:37:13682 if (target >= 0) {
683 comment.extendedRange[0] = tokens[target].range[1];
684 }
Tim van der Lippe16aca392020-11-13 11:37:13685 return comment;
Tim van der Lippec8f6ffd2020-04-06 12:42:00686 }
Tim van der Lippec8f6ffd2020-04-06 12:42:00687 function attachComments(tree, providedComments, tokens) {
Tim van der Lippe16aca392020-11-13 11:37:13688 // At first, we should calculate extended comment ranges.
689 var comments = [],
Simon Zündaebbf4f2024-06-27 08:42:16690 comment,
691 len,
692 i,
693 cursor;
Tim van der Lippe16aca392020-11-13 11:37:13694 if (!tree.range) {
695 throw new Error('attachComments needs range information');
Simon Zündaebbf4f2024-06-27 08:42:16696 }
Tim van der Lippe16aca392020-11-13 11:37:13697
Simon Zündaebbf4f2024-06-27 08:42:16698 // tokens array is empty, we attach comments to tree as 'leadingComments'
Tim van der Lippe16aca392020-11-13 11:37:13699 if (!tokens.length) {
700 if (providedComments.length) {
701 for (i = 0, len = providedComments.length; i < len; i += 1) {
702 comment = deepCopy(providedComments[i]);
703 comment.extendedRange = [0, tree.range[0]];
704 comments.push(comment);
705 }
Tim van der Lippe16aca392020-11-13 11:37:13706 tree.leadingComments = comments;
Tim van der Lippec8f6ffd2020-04-06 12:42:00707 }
Tim van der Lippec8f6ffd2020-04-06 12:42:00708 return tree;
Tim van der Lippe16aca392020-11-13 11:37:13709 }
Tim van der Lippe16aca392020-11-13 11:37:13710 for (i = 0, len = providedComments.length; i < len; i += 1) {
711 comments.push(extendCommentRange(deepCopy(providedComments[i]), tokens));
Simon Zündaebbf4f2024-06-27 08:42:16712 }
Tim van der Lippe16aca392020-11-13 11:37:13713
Simon Zündaebbf4f2024-06-27 08:42:16714 // This is based on John Freeman's implementation.
Tim van der Lippe16aca392020-11-13 11:37:13715 cursor = 0;
716 traverse(tree, {
717 enter: function (node) {
718 var comment;
Tim van der Lippe16aca392020-11-13 11:37:13719 while (cursor < comments.length) {
720 comment = comments[cursor];
Tim van der Lippe16aca392020-11-13 11:37:13721 if (comment.extendedRange[1] > node.range[0]) {
722 break;
723 }
Tim van der Lippe16aca392020-11-13 11:37:13724 if (comment.extendedRange[1] === node.range[0]) {
725 if (!node.leadingComments) {
726 node.leadingComments = [];
727 }
Tim van der Lippe16aca392020-11-13 11:37:13728 node.leadingComments.push(comment);
729 comments.splice(cursor, 1);
730 } else {
731 cursor += 1;
732 }
Simon Zündaebbf4f2024-06-27 08:42:16733 }
Tim van der Lippe16aca392020-11-13 11:37:13734
Simon Zündaebbf4f2024-06-27 08:42:16735 // already out of owned node
Tim van der Lippe16aca392020-11-13 11:37:13736 if (cursor === comments.length) {
737 return VisitorOption.Break;
738 }
Tim van der Lippe16aca392020-11-13 11:37:13739 if (comments[cursor].extendedRange[0] > node.range[1]) {
740 return VisitorOption.Skip;
741 }
742 }
743 });
744 cursor = 0;
745 traverse(tree, {
746 leave: function (node) {
747 var comment;
Tim van der Lippe16aca392020-11-13 11:37:13748 while (cursor < comments.length) {
749 comment = comments[cursor];
Tim van der Lippe16aca392020-11-13 11:37:13750 if (node.range[1] < comment.extendedRange[0]) {
751 break;
752 }
Tim van der Lippe16aca392020-11-13 11:37:13753 if (node.range[1] === comment.extendedRange[0]) {
754 if (!node.trailingComments) {
755 node.trailingComments = [];
756 }
Tim van der Lippe16aca392020-11-13 11:37:13757 node.trailingComments.push(comment);
758 comments.splice(cursor, 1);
759 } else {
760 cursor += 1;
761 }
Simon Zündaebbf4f2024-06-27 08:42:16762 }
Tim van der Lippe16aca392020-11-13 11:37:13763
Simon Zündaebbf4f2024-06-27 08:42:16764 // already out of owned node
Tim van der Lippe16aca392020-11-13 11:37:13765 if (cursor === comments.length) {
766 return VisitorOption.Break;
767 }
Tim van der Lippe16aca392020-11-13 11:37:13768 if (comments[cursor].extendedRange[0] > node.range[1]) {
769 return VisitorOption.Skip;
770 }
771 }
772 });
773 return tree;
Tim van der Lippec8f6ffd2020-04-06 12:42:00774 }
Tim van der Lippec8f6ffd2020-04-06 12:42:00775 exports.Syntax = Syntax;
776 exports.traverse = traverse;
777 exports.replace = replace;
778 exports.attachComments = attachComments;
779 exports.VisitorKeys = VisitorKeys;
780 exports.VisitorOption = VisitorOption;
781 exports.Controller = Controller;
Tim van der Lippe16aca392020-11-13 11:37:13782 exports.cloneEnvironment = function () {
783 return clone({});
784 };
Tim van der Lippec8f6ffd2020-04-06 12:42:00785 return exports;
Tim van der Lippe16aca392020-11-13 11:37:13786 })(exports);
787 /* vim: set sw=4 ts=4 et tw=80 : */
Tim van der Lippec8f6ffd2020-04-06 12:42:00788});
789
790var parser = createCommonjsModule(function (module) {
Tim van der Lippe16aca392020-11-13 11:37:13791 /*
792 * Generated by PEG.js 0.10.0.
793 *
794 * http://pegjs.org/
795 */
796 (function (root, factory) {
797 if ( module.exports) {
798 module.exports = factory();
Tim van der Lippec8f6ffd2020-04-06 12:42:00799 }
Tim van der Lippe16aca392020-11-13 11:37:13800 })(commonjsGlobal, function () {
Tim van der Lippec8f6ffd2020-04-06 12:42:00801
Tim van der Lippe16aca392020-11-13 11:37:13802 function peg$subclass(child, parent) {
803 function ctor() {
804 this.constructor = child;
Tim van der Lippec8f6ffd2020-04-06 12:42:00805 }
Tim van der Lippe16aca392020-11-13 11:37:13806 ctor.prototype = parent.prototype;
807 child.prototype = new ctor();
808 }
Tim van der Lippe16aca392020-11-13 11:37:13809 function peg$SyntaxError(message, expected, found, location) {
810 this.message = message;
811 this.expected = expected;
812 this.found = found;
813 this.location = location;
814 this.name = "SyntaxError";
Tim van der Lippe16aca392020-11-13 11:37:13815 if (typeof Error.captureStackTrace === "function") {
816 Error.captureStackTrace(this, peg$SyntaxError);
Tim van der Lippec8f6ffd2020-04-06 12:42:00817 }
818 }
Tim van der Lippe16aca392020-11-13 11:37:13819 peg$subclass(peg$SyntaxError, Error);
Tim van der Lippe16aca392020-11-13 11:37:13820 peg$SyntaxError.buildMessage = function (expected, found) {
821 var DESCRIBE_EXPECTATION_FNS = {
822 literal: function literal(expectation) {
823 return "\"" + literalEscape(expectation.text) + "\"";
Tim van der Lippec8f6ffd2020-04-06 12:42:00824 },
Tim van der Lippe16aca392020-11-13 11:37:13825 "class": function _class(expectation) {
826 var escapedParts = "",
Simon Zündaebbf4f2024-06-27 08:42:16827 i;
Tim van der Lippe16aca392020-11-13 11:37:13828 for (i = 0; i < expectation.parts.length; i++) {
829 escapedParts += expectation.parts[i] instanceof Array ? classEscape(expectation.parts[i][0]) + "-" + classEscape(expectation.parts[i][1]) : classEscape(expectation.parts[i]);
Tim van der Lippec8f6ffd2020-04-06 12:42:00830 }
Tim van der Lippe16aca392020-11-13 11:37:13831 return "[" + (expectation.inverted ? "^" : "") + escapedParts + "]";
Tim van der Lippec8f6ffd2020-04-06 12:42:00832 },
Tim van der Lippe16aca392020-11-13 11:37:13833 any: function any(expectation) {
834 return "any character";
835 },
836 end: function end(expectation) {
837 return "end of input";
838 },
839 other: function other(expectation) {
840 return expectation.description;
Tim van der Lippec8f6ffd2020-04-06 12:42:00841 }
842 };
Tim van der Lippe16aca392020-11-13 11:37:13843 function hex(ch) {
844 return ch.charCodeAt(0).toString(16).toUpperCase();
Tim van der Lippec8f6ffd2020-04-06 12:42:00845 }
Tim van der Lippe16aca392020-11-13 11:37:13846 function literalEscape(s) {
847 return s.replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/\0/g, '\\0').replace(/\t/g, '\\t').replace(/\n/g, '\\n').replace(/\r/g, '\\r').replace(/[\x00-\x0F]/g, function (ch) {
848 return '\\x0' + hex(ch);
849 }).replace(/[\x10-\x1F\x7F-\x9F]/g, function (ch) {
850 return '\\x' + hex(ch);
851 });
Tim van der Lippec8f6ffd2020-04-06 12:42:00852 }
Tim van der Lippe16aca392020-11-13 11:37:13853 function classEscape(s) {
854 return s.replace(/\\/g, '\\\\').replace(/\]/g, '\\]').replace(/\^/g, '\\^').replace(/-/g, '\\-').replace(/\0/g, '\\0').replace(/\t/g, '\\t').replace(/\n/g, '\\n').replace(/\r/g, '\\r').replace(/[\x00-\x0F]/g, function (ch) {
855 return '\\x0' + hex(ch);
856 }).replace(/[\x10-\x1F\x7F-\x9F]/g, function (ch) {
857 return '\\x' + hex(ch);
858 });
859 }
Tim van der Lippe16aca392020-11-13 11:37:13860 function describeExpectation(expectation) {
861 return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);
862 }
Tim van der Lippe16aca392020-11-13 11:37:13863 function describeExpected(expected) {
864 var descriptions = new Array(expected.length),
Simon Zündaebbf4f2024-06-27 08:42:16865 i,
866 j;
Tim van der Lippe16aca392020-11-13 11:37:13867 for (i = 0; i < expected.length; i++) {
868 descriptions[i] = describeExpectation(expected[i]);
Tim van der Lippec8f6ffd2020-04-06 12:42:00869 }
Tim van der Lippe16aca392020-11-13 11:37:13870 descriptions.sort();
Tim van der Lippe16aca392020-11-13 11:37:13871 if (descriptions.length > 0) {
872 for (i = 1, j = 1; i < descriptions.length; i++) {
873 if (descriptions[i - 1] !== descriptions[i]) {
874 descriptions[j] = descriptions[i];
875 j++;
876 }
877 }
Tim van der Lippe16aca392020-11-13 11:37:13878 descriptions.length = j;
879 }
Tim van der Lippe16aca392020-11-13 11:37:13880 switch (descriptions.length) {
881 case 1:
882 return descriptions[0];
Tim van der Lippe16aca392020-11-13 11:37:13883 case 2:
884 return descriptions[0] + " or " + descriptions[1];
Tim van der Lippe16aca392020-11-13 11:37:13885 default:
886 return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1];
887 }
Tim van der Lippec8f6ffd2020-04-06 12:42:00888 }
Tim van der Lippe16aca392020-11-13 11:37:13889 function describeFound(found) {
890 return found ? "\"" + literalEscape(found) + "\"" : "end of input";
891 }
Tim van der Lippe16aca392020-11-13 11:37:13892 return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found.";
893 };
Tim van der Lippe16aca392020-11-13 11:37:13894 function peg$parse(input, options) {
895 options = options !== void 0 ? options : {};
Tim van der Lippe16aca392020-11-13 11:37:13896 var peg$FAILED = {},
Simon Zündaebbf4f2024-06-27 08:42:16897 peg$startRuleFunctions = {
898 start: peg$parsestart
899 },
900 peg$startRuleFunction = peg$parsestart,
901 peg$c0 = function peg$c0(ss) {
902 return ss.length === 1 ? ss[0] : {
903 type: 'matches',
904 selectors: ss
Tim van der Lippe16aca392020-11-13 11:37:13905 };
Simon Zündaebbf4f2024-06-27 08:42:16906 },
907 peg$c1 = function peg$c1() {
908 return void 0;
909 },
910 peg$c2 = " ",
911 peg$c3 = peg$literalExpectation(" ", false),
912 peg$c4 = /^[^ [\],():#!=><~+.]/,
913 peg$c5 = peg$classExpectation([" ", "[", "]", ",", "(", ")", ":", "#", "!", "=", ">", "<", "~", "+", "."], true, false),
914 peg$c6 = function peg$c6(i) {
915 return i.join('');
916 },
917 peg$c7 = ">",
918 peg$c8 = peg$literalExpectation(">", false),
919 peg$c9 = function peg$c9() {
920 return 'child';
921 },
922 peg$c10 = "~",
923 peg$c11 = peg$literalExpectation("~", false),
924 peg$c12 = function peg$c12() {
925 return 'sibling';
926 },
927 peg$c13 = "+",
928 peg$c14 = peg$literalExpectation("+", false),
929 peg$c15 = function peg$c15() {
930 return 'adjacent';
931 },
932 peg$c16 = function peg$c16() {
933 return 'descendant';
934 },
935 peg$c17 = ",",
936 peg$c18 = peg$literalExpectation(",", false),
937 peg$c19 = function peg$c19(s, ss) {
938 return [s].concat(ss.map(function (s) {
939 return s[3];
940 }));
941 },
Nikolay Vitkovb4e8dc72025-01-07 13:03:02942 peg$c20 = function peg$c20(op, s) {
943 if (!op) return s;
944 return {
945 type: op,
946 left: {
947 type: 'exactNode'
948 },
949 right: s
950 };
951 },
952 peg$c21 = function peg$c21(a, ops) {
Simon Zündaebbf4f2024-06-27 08:42:16953 return ops.reduce(function (memo, rhs) {
954 return {
955 type: rhs[0],
956 left: memo,
957 right: rhs[1]
958 };
959 }, a);
960 },
Nikolay Vitkovb4e8dc72025-01-07 13:03:02961 peg$c22 = "!",
962 peg$c23 = peg$literalExpectation("!", false),
963 peg$c24 = function peg$c24(subject, as) {
Simon Zündaebbf4f2024-06-27 08:42:16964 var b = as.length === 1 ? as[0] : {
965 type: 'compound',
966 selectors: as
967 };
968 if (subject) b.subject = true;
969 return b;
970 },
Nikolay Vitkovb4e8dc72025-01-07 13:03:02971 peg$c25 = "*",
972 peg$c26 = peg$literalExpectation("*", false),
973 peg$c27 = function peg$c27(a) {
Simon Zündaebbf4f2024-06-27 08:42:16974 return {
975 type: 'wildcard',
976 value: a
977 };
978 },
Nikolay Vitkovb4e8dc72025-01-07 13:03:02979 peg$c28 = "#",
980 peg$c29 = peg$literalExpectation("#", false),
981 peg$c30 = function peg$c30(i) {
Simon Zündaebbf4f2024-06-27 08:42:16982 return {
983 type: 'identifier',
984 value: i
985 };
986 },
Nikolay Vitkovb4e8dc72025-01-07 13:03:02987 peg$c31 = "[",
988 peg$c32 = peg$literalExpectation("[", false),
989 peg$c33 = "]",
990 peg$c34 = peg$literalExpectation("]", false),
991 peg$c35 = function peg$c35(v) {
Simon Zündaebbf4f2024-06-27 08:42:16992 return v;
993 },
Nikolay Vitkovb4e8dc72025-01-07 13:03:02994 peg$c36 = /^[><!]/,
995 peg$c37 = peg$classExpectation([">", "<", "!"], false, false),
996 peg$c38 = "=",
997 peg$c39 = peg$literalExpectation("=", false),
998 peg$c40 = function peg$c40(a) {
Simon Zündaebbf4f2024-06-27 08:42:16999 return (a || '') + '=';
1000 },
Nikolay Vitkovb4e8dc72025-01-07 13:03:021001 peg$c41 = /^[><]/,
1002 peg$c42 = peg$classExpectation([">", "<"], false, false),
1003 peg$c43 = ".",
1004 peg$c44 = peg$literalExpectation(".", false),
1005 peg$c45 = function peg$c45(a, as) {
Simon Zündaebbf4f2024-06-27 08:42:161006 return [].concat.apply([a], as).join('');
1007 },
Nikolay Vitkovb4e8dc72025-01-07 13:03:021008 peg$c46 = function peg$c46(name, op, value) {
Simon Zündaebbf4f2024-06-27 08:42:161009 return {
1010 type: 'attribute',
1011 name: name,
1012 operator: op,
1013 value: value
1014 };
1015 },
Nikolay Vitkovb4e8dc72025-01-07 13:03:021016 peg$c47 = function peg$c47(name) {
Simon Zündaebbf4f2024-06-27 08:42:161017 return {
1018 type: 'attribute',
1019 name: name
1020 };
1021 },
Nikolay Vitkovb4e8dc72025-01-07 13:03:021022 peg$c48 = "\"",
1023 peg$c49 = peg$literalExpectation("\"", false),
1024 peg$c50 = /^[^\\"]/,
1025 peg$c51 = peg$classExpectation(["\\", "\""], true, false),
1026 peg$c52 = "\\",
1027 peg$c53 = peg$literalExpectation("\\", false),
1028 peg$c54 = peg$anyExpectation(),
1029 peg$c55 = function peg$c55(a, b) {
Simon Zündaebbf4f2024-06-27 08:42:161030 return a + b;
1031 },
Nikolay Vitkovb4e8dc72025-01-07 13:03:021032 peg$c56 = function peg$c56(d) {
Simon Zündaebbf4f2024-06-27 08:42:161033 return {
1034 type: 'literal',
1035 value: strUnescape(d.join(''))
1036 };
1037 },
Nikolay Vitkovb4e8dc72025-01-07 13:03:021038 peg$c57 = "'",
1039 peg$c58 = peg$literalExpectation("'", false),
1040 peg$c59 = /^[^\\']/,
1041 peg$c60 = peg$classExpectation(["\\", "'"], true, false),
1042 peg$c61 = /^[0-9]/,
1043 peg$c62 = peg$classExpectation([["0", "9"]], false, false),
1044 peg$c63 = function peg$c63(a, b) {
Simon Zündaebbf4f2024-06-27 08:42:161045 // Can use `a.flat().join('')` once supported
1046 var leadingDecimals = a ? [].concat.apply([], a).join('') : '';
1047 return {
1048 type: 'literal',
1049 value: parseFloat(leadingDecimals + b.join(''))
1050 };
1051 },
Nikolay Vitkovb4e8dc72025-01-07 13:03:021052 peg$c64 = function peg$c64(i) {
Simon Zündaebbf4f2024-06-27 08:42:161053 return {
1054 type: 'literal',
1055 value: i
1056 };
1057 },
Nikolay Vitkovb4e8dc72025-01-07 13:03:021058 peg$c65 = "type(",
1059 peg$c66 = peg$literalExpectation("type(", false),
1060 peg$c67 = /^[^ )]/,
1061 peg$c68 = peg$classExpectation([" ", ")"], true, false),
1062 peg$c69 = ")",
1063 peg$c70 = peg$literalExpectation(")", false),
1064 peg$c71 = function peg$c71(t) {
Simon Zündaebbf4f2024-06-27 08:42:161065 return {
1066 type: 'type',
1067 value: t.join('')
1068 };
1069 },
Nikolay Vitkovb4e8dc72025-01-07 13:03:021070 peg$c72 = /^[imsu]/,
1071 peg$c73 = peg$classExpectation(["i", "m", "s", "u"], false, false),
1072 peg$c74 = "/",
1073 peg$c75 = peg$literalExpectation("/", false),
1074 peg$c76 = /^[^\/]/,
1075 peg$c77 = peg$classExpectation(["/"], true, false),
1076 peg$c78 = function peg$c78(d, flgs) {
Simon Zündaebbf4f2024-06-27 08:42:161077 return {
1078 type: 'regexp',
1079 value: new RegExp(d.join(''), flgs ? flgs.join('') : '')
1080 };
1081 },
Nikolay Vitkovb4e8dc72025-01-07 13:03:021082 peg$c79 = function peg$c79(i, is) {
Simon Zündaebbf4f2024-06-27 08:42:161083 return {
1084 type: 'field',
1085 name: is.reduce(function (memo, p) {
1086 return memo + p[0] + p[1];
1087 }, i)
1088 };
1089 },
Nikolay Vitkovb4e8dc72025-01-07 13:03:021090 peg$c80 = ":not(",
1091 peg$c81 = peg$literalExpectation(":not(", false),
1092 peg$c82 = function peg$c82(ss) {
Simon Zündaebbf4f2024-06-27 08:42:161093 return {
1094 type: 'not',
1095 selectors: ss
1096 };
1097 },
Nikolay Vitkovb4e8dc72025-01-07 13:03:021098 peg$c83 = ":matches(",
1099 peg$c84 = peg$literalExpectation(":matches(", false),
1100 peg$c85 = function peg$c85(ss) {
Simon Zündaebbf4f2024-06-27 08:42:161101 return {
1102 type: 'matches',
1103 selectors: ss
1104 };
1105 },
Nikolay Vitkovb4e8dc72025-01-07 13:03:021106 peg$c86 = ":has(",
1107 peg$c87 = peg$literalExpectation(":has(", false),
1108 peg$c88 = function peg$c88(ss) {
Simon Zündaebbf4f2024-06-27 08:42:161109 return {
1110 type: 'has',
1111 selectors: ss
1112 };
1113 },
Nikolay Vitkovb4e8dc72025-01-07 13:03:021114 peg$c89 = ":first-child",
1115 peg$c90 = peg$literalExpectation(":first-child", false),
1116 peg$c91 = function peg$c91() {
Simon Zündaebbf4f2024-06-27 08:42:161117 return nth(1);
1118 },
Nikolay Vitkovb4e8dc72025-01-07 13:03:021119 peg$c92 = ":last-child",
1120 peg$c93 = peg$literalExpectation(":last-child", false),
1121 peg$c94 = function peg$c94() {
Simon Zündaebbf4f2024-06-27 08:42:161122 return nthLast(1);
1123 },
Nikolay Vitkovb4e8dc72025-01-07 13:03:021124 peg$c95 = ":nth-child(",
1125 peg$c96 = peg$literalExpectation(":nth-child(", false),
1126 peg$c97 = function peg$c97(n) {
Simon Zündaebbf4f2024-06-27 08:42:161127 return nth(parseInt(n.join(''), 10));
1128 },
Nikolay Vitkovb4e8dc72025-01-07 13:03:021129 peg$c98 = ":nth-last-child(",
1130 peg$c99 = peg$literalExpectation(":nth-last-child(", false),
1131 peg$c100 = function peg$c100(n) {
Simon Zündaebbf4f2024-06-27 08:42:161132 return nthLast(parseInt(n.join(''), 10));
1133 },
Nikolay Vitkovb4e8dc72025-01-07 13:03:021134 peg$c101 = ":",
1135 peg$c102 = peg$literalExpectation(":", false),
1136 peg$c103 = function peg$c103(c) {
Simon Zündaebbf4f2024-06-27 08:42:161137 return {
1138 type: 'class',
1139 name: c
1140 };
1141 },
1142 peg$currPos = 0,
1143 peg$posDetailsCache = [{
1144 line: 1,
1145 column: 1
1146 }],
1147 peg$maxFailPos = 0,
1148 peg$maxFailExpected = [],
1149 peg$resultsCache = {},
1150 peg$result;
Tim van der Lippe16aca392020-11-13 11:37:131151 if ("startRule" in options) {
1152 if (!(options.startRule in peg$startRuleFunctions)) {
1153 throw new Error("Can't start parsing from rule \"" + options.startRule + "\".");
1154 }
Tim van der Lippe16aca392020-11-13 11:37:131155 peg$startRuleFunction = peg$startRuleFunctions[options.startRule];
1156 }
Tim van der Lippe16aca392020-11-13 11:37:131157 function peg$literalExpectation(text, ignoreCase) {
1158 return {
1159 type: "literal",
1160 text: text,
1161 ignoreCase: ignoreCase
1162 };
1163 }
Tim van der Lippe16aca392020-11-13 11:37:131164 function peg$classExpectation(parts, inverted, ignoreCase) {
1165 return {
1166 type: "class",
1167 parts: parts,
1168 inverted: inverted,
1169 ignoreCase: ignoreCase
1170 };
1171 }
Tim van der Lippe16aca392020-11-13 11:37:131172 function peg$anyExpectation() {
1173 return {
1174 type: "any"
1175 };
1176 }
Tim van der Lippe16aca392020-11-13 11:37:131177 function peg$endExpectation() {
1178 return {
1179 type: "end"
1180 };
1181 }
Tim van der Lippe16aca392020-11-13 11:37:131182 function peg$computePosDetails(pos) {
1183 var details = peg$posDetailsCache[pos],
Simon Zündaebbf4f2024-06-27 08:42:161184 p;
Tim van der Lippe16aca392020-11-13 11:37:131185 if (details) {
1186 return details;
1187 } else {
1188 p = pos - 1;
Tim van der Lippe16aca392020-11-13 11:37:131189 while (!peg$posDetailsCache[p]) {
1190 p--;
1191 }
Tim van der Lippe16aca392020-11-13 11:37:131192 details = peg$posDetailsCache[p];
1193 details = {
1194 line: details.line,
1195 column: details.column
1196 };
Tim van der Lippe16aca392020-11-13 11:37:131197 while (p < pos) {
1198 if (input.charCodeAt(p) === 10) {
1199 details.line++;
1200 details.column = 1;
1201 } else {
1202 details.column++;
1203 }
Tim van der Lippe16aca392020-11-13 11:37:131204 p++;
1205 }
Tim van der Lippe16aca392020-11-13 11:37:131206 peg$posDetailsCache[pos] = details;
1207 return details;
1208 }
1209 }
Tim van der Lippe16aca392020-11-13 11:37:131210 function peg$computeLocation(startPos, endPos) {
1211 var startPosDetails = peg$computePosDetails(startPos),
Simon Zündaebbf4f2024-06-27 08:42:161212 endPosDetails = peg$computePosDetails(endPos);
Tim van der Lippe16aca392020-11-13 11:37:131213 return {
1214 start: {
1215 offset: startPos,
1216 line: startPosDetails.line,
1217 column: startPosDetails.column
1218 },
1219 end: {
1220 offset: endPos,
1221 line: endPosDetails.line,
1222 column: endPosDetails.column
1223 }
1224 };
1225 }
Tim van der Lippe16aca392020-11-13 11:37:131226 function peg$fail(expected) {
1227 if (peg$currPos < peg$maxFailPos) {
1228 return;
1229 }
Tim van der Lippe16aca392020-11-13 11:37:131230 if (peg$currPos > peg$maxFailPos) {
1231 peg$maxFailPos = peg$currPos;
1232 peg$maxFailExpected = [];
1233 }
Tim van der Lippe16aca392020-11-13 11:37:131234 peg$maxFailExpected.push(expected);
1235 }
Tim van der Lippe16aca392020-11-13 11:37:131236 function peg$buildStructuredError(expected, found, location) {
1237 return new peg$SyntaxError(peg$SyntaxError.buildMessage(expected, found), expected, found, location);
1238 }
Tim van der Lippe16aca392020-11-13 11:37:131239 function peg$parsestart() {
1240 var s0, s1, s2, s3;
Nikolay Vitkovb4e8dc72025-01-07 13:03:021241 var key = peg$currPos * 32 + 0,
Simon Zündaebbf4f2024-06-27 08:42:161242 cached = peg$resultsCache[key];
Tim van der Lippe16aca392020-11-13 11:37:131243 if (cached) {
1244 peg$currPos = cached.nextPos;
1245 return cached.result;
1246 }
Tim van der Lippec8f6ffd2020-04-06 12:42:001247 s0 = peg$currPos;
1248 s1 = peg$parse_();
1249 if (s1 !== peg$FAILED) {
Tim van der Lippe16aca392020-11-13 11:37:131250 s2 = peg$parseselectors();
Tim van der Lippec8f6ffd2020-04-06 12:42:001251 if (s2 !== peg$FAILED) {
1252 s3 = peg$parse_();
1253 if (s3 !== peg$FAILED) {
Tim van der Lippe16aca392020-11-13 11:37:131254 s1 = peg$c0(s2);
Tim van der Lippec8f6ffd2020-04-06 12:42:001255 s0 = s1;
1256 } else {
1257 peg$currPos = s0;
1258 s0 = peg$FAILED;
1259 }
1260 } else {
1261 peg$currPos = s0;
1262 s0 = peg$FAILED;
1263 }
1264 } else {
1265 peg$currPos = s0;
1266 s0 = peg$FAILED;
1267 }
1268 if (s0 === peg$FAILED) {
1269 s0 = peg$currPos;
1270 s1 = peg$parse_();
1271 if (s1 !== peg$FAILED) {
Tim van der Lippe16aca392020-11-13 11:37:131272 s1 = peg$c1();
1273 }
Tim van der Lippe16aca392020-11-13 11:37:131274 s0 = s1;
1275 }
Tim van der Lippe16aca392020-11-13 11:37:131276 peg$resultsCache[key] = {
1277 nextPos: peg$currPos,
1278 result: s0
1279 };
1280 return s0;
1281 }
Tim van der Lippe16aca392020-11-13 11:37:131282 function peg$parse_() {
1283 var s0, s1;
Nikolay Vitkovb4e8dc72025-01-07 13:03:021284 var key = peg$currPos * 32 + 1,
Simon Zündaebbf4f2024-06-27 08:42:161285 cached = peg$resultsCache[key];
Tim van der Lippe16aca392020-11-13 11:37:131286 if (cached) {
1287 peg$currPos = cached.nextPos;
1288 return cached.result;
1289 }
Tim van der Lippe16aca392020-11-13 11:37:131290 s0 = [];
Tim van der Lippe16aca392020-11-13 11:37:131291 if (input.charCodeAt(peg$currPos) === 32) {
1292 s1 = peg$c2;
1293 peg$currPos++;
1294 } else {
1295 s1 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:131296 {
1297 peg$fail(peg$c3);
1298 }
1299 }
Tim van der Lippe16aca392020-11-13 11:37:131300 while (s1 !== peg$FAILED) {
1301 s0.push(s1);
Tim van der Lippe16aca392020-11-13 11:37:131302 if (input.charCodeAt(peg$currPos) === 32) {
1303 s1 = peg$c2;
1304 peg$currPos++;
1305 } else {
1306 s1 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:131307 {
1308 peg$fail(peg$c3);
1309 }
1310 }
1311 }
Tim van der Lippe16aca392020-11-13 11:37:131312 peg$resultsCache[key] = {
1313 nextPos: peg$currPos,
1314 result: s0
1315 };
1316 return s0;
1317 }
Tim van der Lippe16aca392020-11-13 11:37:131318 function peg$parseidentifierName() {
1319 var s0, s1, s2;
Nikolay Vitkovb4e8dc72025-01-07 13:03:021320 var key = peg$currPos * 32 + 2,
Simon Zündaebbf4f2024-06-27 08:42:161321 cached = peg$resultsCache[key];
Tim van der Lippe16aca392020-11-13 11:37:131322 if (cached) {
1323 peg$currPos = cached.nextPos;
1324 return cached.result;
1325 }
Tim van der Lippe16aca392020-11-13 11:37:131326 s0 = peg$currPos;
1327 s1 = [];
Tim van der Lippe16aca392020-11-13 11:37:131328 if (peg$c4.test(input.charAt(peg$currPos))) {
1329 s2 = input.charAt(peg$currPos);
1330 peg$currPos++;
1331 } else {
1332 s2 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:131333 {
1334 peg$fail(peg$c5);
1335 }
1336 }
Tim van der Lippe16aca392020-11-13 11:37:131337 if (s2 !== peg$FAILED) {
1338 while (s2 !== peg$FAILED) {
1339 s1.push(s2);
Tim van der Lippe16aca392020-11-13 11:37:131340 if (peg$c4.test(input.charAt(peg$currPos))) {
1341 s2 = input.charAt(peg$currPos);
Tim van der Lippec8f6ffd2020-04-06 12:42:001342 peg$currPos++;
1343 } else {
1344 s2 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:131345 {
1346 peg$fail(peg$c5);
1347 }
Tim van der Lippec8f6ffd2020-04-06 12:42:001348 }
Tim van der Lippe16aca392020-11-13 11:37:131349 }
1350 } else {
1351 s1 = peg$FAILED;
1352 }
Tim van der Lippe16aca392020-11-13 11:37:131353 if (s1 !== peg$FAILED) {
1354 s1 = peg$c6(s1);
1355 }
Tim van der Lippe16aca392020-11-13 11:37:131356 s0 = s1;
1357 peg$resultsCache[key] = {
1358 nextPos: peg$currPos,
1359 result: s0
1360 };
1361 return s0;
1362 }
Tim van der Lippe16aca392020-11-13 11:37:131363 function peg$parsebinaryOp() {
1364 var s0, s1, s2, s3;
Nikolay Vitkovb4e8dc72025-01-07 13:03:021365 var key = peg$currPos * 32 + 3,
Simon Zündaebbf4f2024-06-27 08:42:161366 cached = peg$resultsCache[key];
Tim van der Lippe16aca392020-11-13 11:37:131367 if (cached) {
1368 peg$currPos = cached.nextPos;
1369 return cached.result;
1370 }
Tim van der Lippe16aca392020-11-13 11:37:131371 s0 = peg$currPos;
1372 s1 = peg$parse_();
Tim van der Lippe16aca392020-11-13 11:37:131373 if (s1 !== peg$FAILED) {
1374 if (input.charCodeAt(peg$currPos) === 62) {
1375 s2 = peg$c7;
1376 peg$currPos++;
1377 } else {
1378 s2 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:131379 {
1380 peg$fail(peg$c8);
1381 }
1382 }
Tim van der Lippe16aca392020-11-13 11:37:131383 if (s2 !== peg$FAILED) {
1384 s3 = peg$parse_();
Tim van der Lippe16aca392020-11-13 11:37:131385 if (s3 !== peg$FAILED) {
1386 s1 = peg$c9();
1387 s0 = s1;
1388 } else {
1389 peg$currPos = s0;
1390 s0 = peg$FAILED;
1391 }
1392 } else {
1393 peg$currPos = s0;
1394 s0 = peg$FAILED;
1395 }
1396 } else {
1397 peg$currPos = s0;
1398 s0 = peg$FAILED;
1399 }
Tim van der Lippe16aca392020-11-13 11:37:131400 if (s0 === peg$FAILED) {
1401 s0 = peg$currPos;
1402 s1 = peg$parse_();
Tim van der Lippe16aca392020-11-13 11:37:131403 if (s1 !== peg$FAILED) {
1404 if (input.charCodeAt(peg$currPos) === 126) {
1405 s2 = peg$c10;
1406 peg$currPos++;
1407 } else {
1408 s2 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:131409 {
1410 peg$fail(peg$c11);
1411 }
1412 }
Tim van der Lippec8f6ffd2020-04-06 12:42:001413 if (s2 !== peg$FAILED) {
1414 s3 = peg$parse_();
1415 if (s3 !== peg$FAILED) {
Tim van der Lippe16aca392020-11-13 11:37:131416 s1 = peg$c12();
Tim van der Lippec8f6ffd2020-04-06 12:42:001417 s0 = s1;
1418 } else {
1419 peg$currPos = s0;
1420 s0 = peg$FAILED;
1421 }
1422 } else {
1423 peg$currPos = s0;
1424 s0 = peg$FAILED;
1425 }
1426 } else {
1427 peg$currPos = s0;
1428 s0 = peg$FAILED;
1429 }
1430 if (s0 === peg$FAILED) {
1431 s0 = peg$currPos;
Tim van der Lippe16aca392020-11-13 11:37:131432 s1 = peg$parse_();
Tim van der Lippec8f6ffd2020-04-06 12:42:001433 if (s1 !== peg$FAILED) {
Tim van der Lippe16aca392020-11-13 11:37:131434 if (input.charCodeAt(peg$currPos) === 43) {
1435 s2 = peg$c13;
1436 peg$currPos++;
1437 } else {
1438 s2 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:131439 {
1440 peg$fail(peg$c14);
1441 }
1442 }
Tim van der Lippec8f6ffd2020-04-06 12:42:001443 if (s2 !== peg$FAILED) {
Tim van der Lippe16aca392020-11-13 11:37:131444 s3 = peg$parse_();
Tim van der Lippe16aca392020-11-13 11:37:131445 if (s3 !== peg$FAILED) {
1446 s1 = peg$c15();
1447 s0 = s1;
1448 } else {
1449 peg$currPos = s0;
1450 s0 = peg$FAILED;
1451 }
Tim van der Lippec8f6ffd2020-04-06 12:42:001452 } else {
1453 peg$currPos = s0;
1454 s0 = peg$FAILED;
1455 }
1456 } else {
1457 peg$currPos = s0;
1458 s0 = peg$FAILED;
1459 }
Tim van der Lippe16aca392020-11-13 11:37:131460 if (s0 === peg$FAILED) {
1461 s0 = peg$currPos;
Tim van der Lippe16aca392020-11-13 11:37:131462 if (input.charCodeAt(peg$currPos) === 32) {
1463 s1 = peg$c2;
1464 peg$currPos++;
Tim van der Lippec8f6ffd2020-04-06 12:42:001465 } else {
Tim van der Lippe16aca392020-11-13 11:37:131466 s1 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:131467 {
1468 peg$fail(peg$c3);
1469 }
Tim van der Lippec8f6ffd2020-04-06 12:42:001470 }
Tim van der Lippe16aca392020-11-13 11:37:131471 if (s1 !== peg$FAILED) {
1472 s2 = peg$parse_();
Tim van der Lippe16aca392020-11-13 11:37:131473 if (s2 !== peg$FAILED) {
1474 s1 = peg$c16();
1475 s0 = s1;
1476 } else {
1477 peg$currPos = s0;
1478 s0 = peg$FAILED;
1479 }
1480 } else {
1481 peg$currPos = s0;
1482 s0 = peg$FAILED;
1483 }
Tim van der Lippec8f6ffd2020-04-06 12:42:001484 }
Tim van der Lippec8f6ffd2020-04-06 12:42:001485 }
Tim van der Lippec8f6ffd2020-04-06 12:42:001486 }
Tim van der Lippe16aca392020-11-13 11:37:131487 peg$resultsCache[key] = {
1488 nextPos: peg$currPos,
1489 result: s0
1490 };
1491 return s0;
1492 }
Nikolay Vitkovb4e8dc72025-01-07 13:03:021493 function peg$parsehasSelectors() {
1494 var s0, s1, s2, s3, s4, s5, s6, s7;
1495 var key = peg$currPos * 32 + 4,
1496 cached = peg$resultsCache[key];
1497 if (cached) {
1498 peg$currPos = cached.nextPos;
1499 return cached.result;
1500 }
1501 s0 = peg$currPos;
1502 s1 = peg$parsehasSelector();
1503 if (s1 !== peg$FAILED) {
1504 s2 = [];
1505 s3 = peg$currPos;
1506 s4 = peg$parse_();
1507 if (s4 !== peg$FAILED) {
1508 if (input.charCodeAt(peg$currPos) === 44) {
1509 s5 = peg$c17;
1510 peg$currPos++;
1511 } else {
1512 s5 = peg$FAILED;
1513 {
1514 peg$fail(peg$c18);
1515 }
1516 }
1517 if (s5 !== peg$FAILED) {
1518 s6 = peg$parse_();
1519 if (s6 !== peg$FAILED) {
1520 s7 = peg$parsehasSelector();
1521 if (s7 !== peg$FAILED) {
1522 s4 = [s4, s5, s6, s7];
1523 s3 = s4;
1524 } else {
1525 peg$currPos = s3;
1526 s3 = peg$FAILED;
1527 }
1528 } else {
1529 peg$currPos = s3;
1530 s3 = peg$FAILED;
1531 }
1532 } else {
1533 peg$currPos = s3;
1534 s3 = peg$FAILED;
1535 }
1536 } else {
1537 peg$currPos = s3;
1538 s3 = peg$FAILED;
1539 }
1540 while (s3 !== peg$FAILED) {
1541 s2.push(s3);
1542 s3 = peg$currPos;
1543 s4 = peg$parse_();
1544 if (s4 !== peg$FAILED) {
1545 if (input.charCodeAt(peg$currPos) === 44) {
1546 s5 = peg$c17;
1547 peg$currPos++;
1548 } else {
1549 s5 = peg$FAILED;
1550 {
1551 peg$fail(peg$c18);
1552 }
1553 }
1554 if (s5 !== peg$FAILED) {
1555 s6 = peg$parse_();
1556 if (s6 !== peg$FAILED) {
1557 s7 = peg$parsehasSelector();
1558 if (s7 !== peg$FAILED) {
1559 s4 = [s4, s5, s6, s7];
1560 s3 = s4;
1561 } else {
1562 peg$currPos = s3;
1563 s3 = peg$FAILED;
1564 }
1565 } else {
1566 peg$currPos = s3;
1567 s3 = peg$FAILED;
1568 }
1569 } else {
1570 peg$currPos = s3;
1571 s3 = peg$FAILED;
1572 }
1573 } else {
1574 peg$currPos = s3;
1575 s3 = peg$FAILED;
1576 }
1577 }
1578 if (s2 !== peg$FAILED) {
1579 s1 = peg$c19(s1, s2);
1580 s0 = s1;
1581 } else {
1582 peg$currPos = s0;
1583 s0 = peg$FAILED;
1584 }
1585 } else {
1586 peg$currPos = s0;
1587 s0 = peg$FAILED;
1588 }
1589 peg$resultsCache[key] = {
1590 nextPos: peg$currPos,
1591 result: s0
1592 };
1593 return s0;
1594 }
Tim van der Lippe16aca392020-11-13 11:37:131595 function peg$parseselectors() {
1596 var s0, s1, s2, s3, s4, s5, s6, s7;
Nikolay Vitkovb4e8dc72025-01-07 13:03:021597 var key = peg$currPos * 32 + 5,
Simon Zündaebbf4f2024-06-27 08:42:161598 cached = peg$resultsCache[key];
Tim van der Lippe16aca392020-11-13 11:37:131599 if (cached) {
1600 peg$currPos = cached.nextPos;
1601 return cached.result;
1602 }
Tim van der Lippe16aca392020-11-13 11:37:131603 s0 = peg$currPos;
1604 s1 = peg$parseselector();
Tim van der Lippe16aca392020-11-13 11:37:131605 if (s1 !== peg$FAILED) {
1606 s2 = [];
Tim van der Lippec8f6ffd2020-04-06 12:42:001607 s3 = peg$currPos;
1608 s4 = peg$parse_();
1609 if (s4 !== peg$FAILED) {
1610 if (input.charCodeAt(peg$currPos) === 44) {
1611 s5 = peg$c17;
1612 peg$currPos++;
1613 } else {
1614 s5 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:131615 {
1616 peg$fail(peg$c18);
1617 }
Tim van der Lippec8f6ffd2020-04-06 12:42:001618 }
1619 if (s5 !== peg$FAILED) {
1620 s6 = peg$parse_();
1621 if (s6 !== peg$FAILED) {
1622 s7 = peg$parseselector();
1623 if (s7 !== peg$FAILED) {
1624 s4 = [s4, s5, s6, s7];
1625 s3 = s4;
1626 } else {
1627 peg$currPos = s3;
1628 s3 = peg$FAILED;
1629 }
1630 } else {
1631 peg$currPos = s3;
1632 s3 = peg$FAILED;
1633 }
1634 } else {
1635 peg$currPos = s3;
1636 s3 = peg$FAILED;
1637 }
1638 } else {
1639 peg$currPos = s3;
1640 s3 = peg$FAILED;
1641 }
Tim van der Lippe16aca392020-11-13 11:37:131642 while (s3 !== peg$FAILED) {
1643 s2.push(s3);
1644 s3 = peg$currPos;
1645 s4 = peg$parse_();
Tim van der Lippe16aca392020-11-13 11:37:131646 if (s4 !== peg$FAILED) {
1647 if (input.charCodeAt(peg$currPos) === 44) {
1648 s5 = peg$c17;
1649 peg$currPos++;
1650 } else {
1651 s5 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:131652 {
1653 peg$fail(peg$c18);
1654 }
1655 }
Tim van der Lippe16aca392020-11-13 11:37:131656 if (s5 !== peg$FAILED) {
1657 s6 = peg$parse_();
Tim van der Lippe16aca392020-11-13 11:37:131658 if (s6 !== peg$FAILED) {
1659 s7 = peg$parseselector();
Tim van der Lippe16aca392020-11-13 11:37:131660 if (s7 !== peg$FAILED) {
1661 s4 = [s4, s5, s6, s7];
1662 s3 = s4;
1663 } else {
1664 peg$currPos = s3;
1665 s3 = peg$FAILED;
1666 }
1667 } else {
1668 peg$currPos = s3;
1669 s3 = peg$FAILED;
1670 }
1671 } else {
1672 peg$currPos = s3;
1673 s3 = peg$FAILED;
1674 }
1675 } else {
1676 peg$currPos = s3;
1677 s3 = peg$FAILED;
1678 }
1679 }
Tim van der Lippe16aca392020-11-13 11:37:131680 if (s2 !== peg$FAILED) {
1681 s1 = peg$c19(s1, s2);
1682 s0 = s1;
1683 } else {
1684 peg$currPos = s0;
1685 s0 = peg$FAILED;
1686 }
Tim van der Lippec8f6ffd2020-04-06 12:42:001687 } else {
1688 peg$currPos = s0;
1689 s0 = peg$FAILED;
1690 }
Tim van der Lippe16aca392020-11-13 11:37:131691 peg$resultsCache[key] = {
1692 nextPos: peg$currPos,
1693 result: s0
1694 };
1695 return s0;
Tim van der Lippec8f6ffd2020-04-06 12:42:001696 }
Nikolay Vitkovb4e8dc72025-01-07 13:03:021697 function peg$parsehasSelector() {
1698 var s0, s1, s2;
1699 var key = peg$currPos * 32 + 6,
1700 cached = peg$resultsCache[key];
1701 if (cached) {
1702 peg$currPos = cached.nextPos;
1703 return cached.result;
1704 }
1705 s0 = peg$currPos;
1706 s1 = peg$parsebinaryOp();
1707 if (s1 === peg$FAILED) {
1708 s1 = null;
1709 }
1710 if (s1 !== peg$FAILED) {
1711 s2 = peg$parseselector();
1712 if (s2 !== peg$FAILED) {
1713 s1 = peg$c20(s1, s2);
1714 s0 = s1;
1715 } else {
1716 peg$currPos = s0;
1717 s0 = peg$FAILED;
1718 }
1719 } else {
1720 peg$currPos = s0;
1721 s0 = peg$FAILED;
1722 }
1723 peg$resultsCache[key] = {
1724 nextPos: peg$currPos,
1725 result: s0
1726 };
1727 return s0;
1728 }
Tim van der Lippe16aca392020-11-13 11:37:131729 function peg$parseselector() {
1730 var s0, s1, s2, s3, s4, s5;
Nikolay Vitkovb4e8dc72025-01-07 13:03:021731 var key = peg$currPos * 32 + 7,
Simon Zündaebbf4f2024-06-27 08:42:161732 cached = peg$resultsCache[key];
Tim van der Lippe16aca392020-11-13 11:37:131733 if (cached) {
1734 peg$currPos = cached.nextPos;
1735 return cached.result;
Tim van der Lippec8f6ffd2020-04-06 12:42:001736 }
Tim van der Lippe16aca392020-11-13 11:37:131737 s0 = peg$currPos;
1738 s1 = peg$parsesequence();
Tim van der Lippe16aca392020-11-13 11:37:131739 if (s1 !== peg$FAILED) {
1740 s2 = [];
Tim van der Lippec8f6ffd2020-04-06 12:42:001741 s3 = peg$currPos;
1742 s4 = peg$parsebinaryOp();
1743 if (s4 !== peg$FAILED) {
1744 s5 = peg$parsesequence();
1745 if (s5 !== peg$FAILED) {
1746 s4 = [s4, s5];
1747 s3 = s4;
1748 } else {
1749 peg$currPos = s3;
1750 s3 = peg$FAILED;
1751 }
1752 } else {
1753 peg$currPos = s3;
1754 s3 = peg$FAILED;
1755 }
Tim van der Lippec8f6ffd2020-04-06 12:42:001756 while (s3 !== peg$FAILED) {
1757 s2.push(s3);
Tim van der Lippe16aca392020-11-13 11:37:131758 s3 = peg$currPos;
1759 s4 = peg$parsebinaryOp();
Tim van der Lippe16aca392020-11-13 11:37:131760 if (s4 !== peg$FAILED) {
1761 s5 = peg$parsesequence();
Tim van der Lippe16aca392020-11-13 11:37:131762 if (s5 !== peg$FAILED) {
1763 s4 = [s4, s5];
1764 s3 = s4;
1765 } else {
1766 peg$currPos = s3;
1767 s3 = peg$FAILED;
1768 }
1769 } else {
1770 peg$currPos = s3;
1771 s3 = peg$FAILED;
1772 }
Tim van der Lippec8f6ffd2020-04-06 12:42:001773 }
Tim van der Lippe16aca392020-11-13 11:37:131774 if (s2 !== peg$FAILED) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:021775 s1 = peg$c21(s1, s2);
Tim van der Lippe16aca392020-11-13 11:37:131776 s0 = s1;
1777 } else {
1778 peg$currPos = s0;
1779 s0 = peg$FAILED;
1780 }
Tim van der Lippec8f6ffd2020-04-06 12:42:001781 } else {
1782 peg$currPos = s0;
1783 s0 = peg$FAILED;
1784 }
Tim van der Lippe16aca392020-11-13 11:37:131785 peg$resultsCache[key] = {
1786 nextPos: peg$currPos,
1787 result: s0
1788 };
1789 return s0;
Tim van der Lippec8f6ffd2020-04-06 12:42:001790 }
Tim van der Lippe16aca392020-11-13 11:37:131791 function peg$parsesequence() {
1792 var s0, s1, s2, s3;
Nikolay Vitkovb4e8dc72025-01-07 13:03:021793 var key = peg$currPos * 32 + 8,
Simon Zündaebbf4f2024-06-27 08:42:161794 cached = peg$resultsCache[key];
Tim van der Lippe16aca392020-11-13 11:37:131795 if (cached) {
1796 peg$currPos = cached.nextPos;
1797 return cached.result;
1798 }
Tim van der Lippe16aca392020-11-13 11:37:131799 s0 = peg$currPos;
Tim van der Lippe16aca392020-11-13 11:37:131800 if (input.charCodeAt(peg$currPos) === 33) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:021801 s1 = peg$c22;
Tim van der Lippe16aca392020-11-13 11:37:131802 peg$currPos++;
1803 } else {
1804 s1 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:131805 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:021806 peg$fail(peg$c23);
Tim van der Lippe16aca392020-11-13 11:37:131807 }
1808 }
Tim van der Lippe16aca392020-11-13 11:37:131809 if (s1 === peg$FAILED) {
1810 s1 = null;
1811 }
Tim van der Lippe16aca392020-11-13 11:37:131812 if (s1 !== peg$FAILED) {
1813 s2 = [];
1814 s3 = peg$parseatom();
Tim van der Lippe16aca392020-11-13 11:37:131815 if (s3 !== peg$FAILED) {
1816 while (s3 !== peg$FAILED) {
1817 s2.push(s3);
1818 s3 = peg$parseatom();
1819 }
1820 } else {
1821 s2 = peg$FAILED;
1822 }
Tim van der Lippe16aca392020-11-13 11:37:131823 if (s2 !== peg$FAILED) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:021824 s1 = peg$c24(s1, s2);
Tim van der Lippe16aca392020-11-13 11:37:131825 s0 = s1;
1826 } else {
1827 peg$currPos = s0;
1828 s0 = peg$FAILED;
1829 }
1830 } else {
1831 peg$currPos = s0;
1832 s0 = peg$FAILED;
1833 }
Tim van der Lippe16aca392020-11-13 11:37:131834 peg$resultsCache[key] = {
1835 nextPos: peg$currPos,
1836 result: s0
1837 };
1838 return s0;
Tim van der Lippec8f6ffd2020-04-06 12:42:001839 }
Tim van der Lippe16aca392020-11-13 11:37:131840 function peg$parseatom() {
1841 var s0;
Nikolay Vitkovb4e8dc72025-01-07 13:03:021842 var key = peg$currPos * 32 + 9,
Simon Zündaebbf4f2024-06-27 08:42:161843 cached = peg$resultsCache[key];
Tim van der Lippe16aca392020-11-13 11:37:131844 if (cached) {
1845 peg$currPos = cached.nextPos;
1846 return cached.result;
1847 }
Tim van der Lippe16aca392020-11-13 11:37:131848 s0 = peg$parsewildcard();
Tim van der Lippec8f6ffd2020-04-06 12:42:001849 if (s0 === peg$FAILED) {
Tim van der Lippe16aca392020-11-13 11:37:131850 s0 = peg$parseidentifier();
Tim van der Lippec8f6ffd2020-04-06 12:42:001851 if (s0 === peg$FAILED) {
Tim van der Lippe16aca392020-11-13 11:37:131852 s0 = peg$parseattr();
Tim van der Lippec8f6ffd2020-04-06 12:42:001853 if (s0 === peg$FAILED) {
Tim van der Lippe16aca392020-11-13 11:37:131854 s0 = peg$parsefield();
Tim van der Lippec8f6ffd2020-04-06 12:42:001855 if (s0 === peg$FAILED) {
Tim van der Lippe16aca392020-11-13 11:37:131856 s0 = peg$parsenegation();
Tim van der Lippec8f6ffd2020-04-06 12:42:001857 if (s0 === peg$FAILED) {
Tim van der Lippe16aca392020-11-13 11:37:131858 s0 = peg$parsematches();
Tim van der Lippec8f6ffd2020-04-06 12:42:001859 if (s0 === peg$FAILED) {
Tim van der Lippe16aca392020-11-13 11:37:131860 s0 = peg$parsehas();
Tim van der Lippec8f6ffd2020-04-06 12:42:001861 if (s0 === peg$FAILED) {
Tim van der Lippe16aca392020-11-13 11:37:131862 s0 = peg$parsefirstChild();
Tim van der Lippec8f6ffd2020-04-06 12:42:001863 if (s0 === peg$FAILED) {
Tim van der Lippe16aca392020-11-13 11:37:131864 s0 = peg$parselastChild();
Tim van der Lippec8f6ffd2020-04-06 12:42:001865 if (s0 === peg$FAILED) {
Tim van der Lippe16aca392020-11-13 11:37:131866 s0 = peg$parsenthChild();
Tim van der Lippec8f6ffd2020-04-06 12:42:001867 if (s0 === peg$FAILED) {
Tim van der Lippe16aca392020-11-13 11:37:131868 s0 = peg$parsenthLastChild();
Tim van der Lippe16aca392020-11-13 11:37:131869 if (s0 === peg$FAILED) {
1870 s0 = peg$parseclass();
1871 }
Tim van der Lippec8f6ffd2020-04-06 12:42:001872 }
1873 }
1874 }
1875 }
1876 }
1877 }
1878 }
1879 }
1880 }
1881 }
Tim van der Lippe16aca392020-11-13 11:37:131882 peg$resultsCache[key] = {
1883 nextPos: peg$currPos,
1884 result: s0
1885 };
1886 return s0;
Tim van der Lippec8f6ffd2020-04-06 12:42:001887 }
Tim van der Lippe16aca392020-11-13 11:37:131888 function peg$parsewildcard() {
1889 var s0, s1;
Nikolay Vitkovb4e8dc72025-01-07 13:03:021890 var key = peg$currPos * 32 + 10,
Simon Zündaebbf4f2024-06-27 08:42:161891 cached = peg$resultsCache[key];
Tim van der Lippe16aca392020-11-13 11:37:131892 if (cached) {
1893 peg$currPos = cached.nextPos;
1894 return cached.result;
Tim van der Lippec8f6ffd2020-04-06 12:42:001895 }
Tim van der Lippec8f6ffd2020-04-06 12:42:001896 s0 = peg$currPos;
Tim van der Lippe16aca392020-11-13 11:37:131897 if (input.charCodeAt(peg$currPos) === 42) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:021898 s1 = peg$c25;
Tim van der Lippe16aca392020-11-13 11:37:131899 peg$currPos++;
1900 } else {
1901 s1 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:131902 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:021903 peg$fail(peg$c26);
Tim van der Lippe16aca392020-11-13 11:37:131904 }
1905 }
Tim van der Lippe16aca392020-11-13 11:37:131906 if (s1 !== peg$FAILED) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:021907 s1 = peg$c27(s1);
Tim van der Lippe16aca392020-11-13 11:37:131908 }
Tim van der Lippe16aca392020-11-13 11:37:131909 s0 = s1;
1910 peg$resultsCache[key] = {
1911 nextPos: peg$currPos,
1912 result: s0
1913 };
1914 return s0;
1915 }
Tim van der Lippe16aca392020-11-13 11:37:131916 function peg$parseidentifier() {
1917 var s0, s1, s2;
Nikolay Vitkovb4e8dc72025-01-07 13:03:021918 var key = peg$currPos * 32 + 11,
Simon Zündaebbf4f2024-06-27 08:42:161919 cached = peg$resultsCache[key];
Tim van der Lippe16aca392020-11-13 11:37:131920 if (cached) {
1921 peg$currPos = cached.nextPos;
1922 return cached.result;
1923 }
Tim van der Lippe16aca392020-11-13 11:37:131924 s0 = peg$currPos;
Tim van der Lippe16aca392020-11-13 11:37:131925 if (input.charCodeAt(peg$currPos) === 35) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:021926 s1 = peg$c28;
Tim van der Lippe16aca392020-11-13 11:37:131927 peg$currPos++;
1928 } else {
1929 s1 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:131930 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:021931 peg$fail(peg$c29);
Tim van der Lippe16aca392020-11-13 11:37:131932 }
1933 }
Tim van der Lippe16aca392020-11-13 11:37:131934 if (s1 === peg$FAILED) {
1935 s1 = null;
1936 }
Tim van der Lippe16aca392020-11-13 11:37:131937 if (s1 !== peg$FAILED) {
1938 s2 = peg$parseidentifierName();
Tim van der Lippe16aca392020-11-13 11:37:131939 if (s2 !== peg$FAILED) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:021940 s1 = peg$c30(s2);
Tim van der Lippe16aca392020-11-13 11:37:131941 s0 = s1;
1942 } else {
1943 peg$currPos = s0;
1944 s0 = peg$FAILED;
1945 }
1946 } else {
1947 peg$currPos = s0;
1948 s0 = peg$FAILED;
1949 }
Tim van der Lippe16aca392020-11-13 11:37:131950 peg$resultsCache[key] = {
1951 nextPos: peg$currPos,
1952 result: s0
1953 };
1954 return s0;
1955 }
Tim van der Lippe16aca392020-11-13 11:37:131956 function peg$parseattr() {
1957 var s0, s1, s2, s3, s4, s5;
Nikolay Vitkovb4e8dc72025-01-07 13:03:021958 var key = peg$currPos * 32 + 12,
Simon Zündaebbf4f2024-06-27 08:42:161959 cached = peg$resultsCache[key];
Tim van der Lippe16aca392020-11-13 11:37:131960 if (cached) {
1961 peg$currPos = cached.nextPos;
1962 return cached.result;
1963 }
Tim van der Lippe16aca392020-11-13 11:37:131964 s0 = peg$currPos;
Tim van der Lippe16aca392020-11-13 11:37:131965 if (input.charCodeAt(peg$currPos) === 91) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:021966 s1 = peg$c31;
Tim van der Lippe16aca392020-11-13 11:37:131967 peg$currPos++;
1968 } else {
1969 s1 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:131970 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:021971 peg$fail(peg$c32);
Tim van der Lippe16aca392020-11-13 11:37:131972 }
1973 }
Tim van der Lippec8f6ffd2020-04-06 12:42:001974 if (s1 !== peg$FAILED) {
1975 s2 = peg$parse_();
1976 if (s2 !== peg$FAILED) {
Tim van der Lippe16aca392020-11-13 11:37:131977 s3 = peg$parseattrValue();
Tim van der Lippec8f6ffd2020-04-06 12:42:001978 if (s3 !== peg$FAILED) {
1979 s4 = peg$parse_();
1980 if (s4 !== peg$FAILED) {
Tim van der Lippe16aca392020-11-13 11:37:131981 if (input.charCodeAt(peg$currPos) === 93) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:021982 s5 = peg$c33;
Tim van der Lippe16aca392020-11-13 11:37:131983 peg$currPos++;
1984 } else {
1985 s5 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:131986 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:021987 peg$fail(peg$c34);
Tim van der Lippec8f6ffd2020-04-06 12:42:001988 }
1989 }
Tim van der Lippe16aca392020-11-13 11:37:131990 if (s5 !== peg$FAILED) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:021991 s1 = peg$c35(s3);
Tim van der Lippe16aca392020-11-13 11:37:131992 s0 = s1;
1993 } else {
1994 peg$currPos = s0;
1995 s0 = peg$FAILED;
1996 }
1997 } else {
1998 peg$currPos = s0;
1999 s0 = peg$FAILED;
2000 }
2001 } else {
2002 peg$currPos = s0;
2003 s0 = peg$FAILED;
2004 }
2005 } else {
2006 peg$currPos = s0;
2007 s0 = peg$FAILED;
2008 }
2009 } else {
2010 peg$currPos = s0;
2011 s0 = peg$FAILED;
2012 }
Tim van der Lippe16aca392020-11-13 11:37:132013 peg$resultsCache[key] = {
2014 nextPos: peg$currPos,
2015 result: s0
2016 };
2017 return s0;
2018 }
Tim van der Lippe16aca392020-11-13 11:37:132019 function peg$parseattrOps() {
2020 var s0, s1, s2;
Nikolay Vitkovb4e8dc72025-01-07 13:03:022021 var key = peg$currPos * 32 + 13,
Simon Zündaebbf4f2024-06-27 08:42:162022 cached = peg$resultsCache[key];
Tim van der Lippe16aca392020-11-13 11:37:132023 if (cached) {
2024 peg$currPos = cached.nextPos;
2025 return cached.result;
2026 }
Tim van der Lippe16aca392020-11-13 11:37:132027 s0 = peg$currPos;
Nikolay Vitkovb4e8dc72025-01-07 13:03:022028 if (peg$c36.test(input.charAt(peg$currPos))) {
Tim van der Lippe16aca392020-11-13 11:37:132029 s1 = input.charAt(peg$currPos);
2030 peg$currPos++;
2031 } else {
2032 s1 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:132033 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022034 peg$fail(peg$c37);
Tim van der Lippe16aca392020-11-13 11:37:132035 }
2036 }
Tim van der Lippe16aca392020-11-13 11:37:132037 if (s1 === peg$FAILED) {
2038 s1 = null;
2039 }
Tim van der Lippe16aca392020-11-13 11:37:132040 if (s1 !== peg$FAILED) {
2041 if (input.charCodeAt(peg$currPos) === 61) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022042 s2 = peg$c38;
Tim van der Lippe16aca392020-11-13 11:37:132043 peg$currPos++;
2044 } else {
2045 s2 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:132046 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022047 peg$fail(peg$c39);
Tim van der Lippe16aca392020-11-13 11:37:132048 }
2049 }
Tim van der Lippe16aca392020-11-13 11:37:132050 if (s2 !== peg$FAILED) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022051 s1 = peg$c40(s1);
Tim van der Lippe16aca392020-11-13 11:37:132052 s0 = s1;
2053 } else {
2054 peg$currPos = s0;
2055 s0 = peg$FAILED;
2056 }
2057 } else {
2058 peg$currPos = s0;
2059 s0 = peg$FAILED;
2060 }
Tim van der Lippe16aca392020-11-13 11:37:132061 if (s0 === peg$FAILED) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022062 if (peg$c41.test(input.charAt(peg$currPos))) {
Tim van der Lippe16aca392020-11-13 11:37:132063 s0 = input.charAt(peg$currPos);
2064 peg$currPos++;
2065 } else {
2066 s0 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:132067 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022068 peg$fail(peg$c42);
Tim van der Lippe16aca392020-11-13 11:37:132069 }
2070 }
2071 }
Tim van der Lippe16aca392020-11-13 11:37:132072 peg$resultsCache[key] = {
2073 nextPos: peg$currPos,
2074 result: s0
2075 };
2076 return s0;
2077 }
Tim van der Lippe16aca392020-11-13 11:37:132078 function peg$parseattrEqOps() {
2079 var s0, s1, s2;
Nikolay Vitkovb4e8dc72025-01-07 13:03:022080 var key = peg$currPos * 32 + 14,
Simon Zündaebbf4f2024-06-27 08:42:162081 cached = peg$resultsCache[key];
Tim van der Lippe16aca392020-11-13 11:37:132082 if (cached) {
2083 peg$currPos = cached.nextPos;
2084 return cached.result;
2085 }
Tim van der Lippe16aca392020-11-13 11:37:132086 s0 = peg$currPos;
Tim van der Lippe16aca392020-11-13 11:37:132087 if (input.charCodeAt(peg$currPos) === 33) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022088 s1 = peg$c22;
Tim van der Lippe16aca392020-11-13 11:37:132089 peg$currPos++;
2090 } else {
2091 s1 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:132092 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022093 peg$fail(peg$c23);
Tim van der Lippe16aca392020-11-13 11:37:132094 }
2095 }
Tim van der Lippe16aca392020-11-13 11:37:132096 if (s1 === peg$FAILED) {
2097 s1 = null;
2098 }
Tim van der Lippe16aca392020-11-13 11:37:132099 if (s1 !== peg$FAILED) {
2100 if (input.charCodeAt(peg$currPos) === 61) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022101 s2 = peg$c38;
Tim van der Lippe16aca392020-11-13 11:37:132102 peg$currPos++;
2103 } else {
2104 s2 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:132105 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022106 peg$fail(peg$c39);
Tim van der Lippe16aca392020-11-13 11:37:132107 }
2108 }
Tim van der Lippe16aca392020-11-13 11:37:132109 if (s2 !== peg$FAILED) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022110 s1 = peg$c40(s1);
Tim van der Lippe16aca392020-11-13 11:37:132111 s0 = s1;
2112 } else {
2113 peg$currPos = s0;
2114 s0 = peg$FAILED;
2115 }
2116 } else {
2117 peg$currPos = s0;
2118 s0 = peg$FAILED;
2119 }
Tim van der Lippe16aca392020-11-13 11:37:132120 peg$resultsCache[key] = {
2121 nextPos: peg$currPos,
2122 result: s0
2123 };
2124 return s0;
2125 }
Tim van der Lippe16aca392020-11-13 11:37:132126 function peg$parseattrName() {
Tim van der Lippeb97da6b2021-02-12 14:32:532127 var s0, s1, s2, s3, s4, s5;
Nikolay Vitkovb4e8dc72025-01-07 13:03:022128 var key = peg$currPos * 32 + 15,
Simon Zündaebbf4f2024-06-27 08:42:162129 cached = peg$resultsCache[key];
Tim van der Lippe16aca392020-11-13 11:37:132130 if (cached) {
2131 peg$currPos = cached.nextPos;
2132 return cached.result;
2133 }
Tim van der Lippe16aca392020-11-13 11:37:132134 s0 = peg$currPos;
Tim van der Lippeb97da6b2021-02-12 14:32:532135 s1 = peg$parseidentifierName();
Tim van der Lippeb97da6b2021-02-12 14:32:532136 if (s1 !== peg$FAILED) {
2137 s2 = [];
2138 s3 = peg$currPos;
Tim van der Lippe16aca392020-11-13 11:37:132139 if (input.charCodeAt(peg$currPos) === 46) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022140 s4 = peg$c43;
Tim van der Lippe16aca392020-11-13 11:37:132141 peg$currPos++;
2142 } else {
Tim van der Lippeb97da6b2021-02-12 14:32:532143 s4 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:132144 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022145 peg$fail(peg$c44);
Tim van der Lippe16aca392020-11-13 11:37:132146 }
2147 }
Tim van der Lippeb97da6b2021-02-12 14:32:532148 if (s4 !== peg$FAILED) {
2149 s5 = peg$parseidentifierName();
Tim van der Lippeb97da6b2021-02-12 14:32:532150 if (s5 !== peg$FAILED) {
2151 s4 = [s4, s5];
2152 s3 = s4;
2153 } else {
2154 peg$currPos = s3;
2155 s3 = peg$FAILED;
2156 }
2157 } else {
2158 peg$currPos = s3;
2159 s3 = peg$FAILED;
2160 }
Tim van der Lippeb97da6b2021-02-12 14:32:532161 while (s3 !== peg$FAILED) {
2162 s2.push(s3);
2163 s3 = peg$currPos;
Tim van der Lippeb97da6b2021-02-12 14:32:532164 if (input.charCodeAt(peg$currPos) === 46) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022165 s4 = peg$c43;
Tim van der Lippeb97da6b2021-02-12 14:32:532166 peg$currPos++;
2167 } else {
2168 s4 = peg$FAILED;
Tim van der Lippeb97da6b2021-02-12 14:32:532169 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022170 peg$fail(peg$c44);
Tim van der Lippe16aca392020-11-13 11:37:132171 }
2172 }
Tim van der Lippeb97da6b2021-02-12 14:32:532173 if (s4 !== peg$FAILED) {
2174 s5 = peg$parseidentifierName();
Tim van der Lippeb97da6b2021-02-12 14:32:532175 if (s5 !== peg$FAILED) {
2176 s4 = [s4, s5];
2177 s3 = s4;
2178 } else {
2179 peg$currPos = s3;
2180 s3 = peg$FAILED;
2181 }
2182 } else {
2183 peg$currPos = s3;
2184 s3 = peg$FAILED;
2185 }
2186 }
Tim van der Lippeb97da6b2021-02-12 14:32:532187 if (s2 !== peg$FAILED) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022188 s1 = peg$c45(s1, s2);
Tim van der Lippeb97da6b2021-02-12 14:32:532189 s0 = s1;
2190 } else {
2191 peg$currPos = s0;
2192 s0 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:132193 }
2194 } else {
Tim van der Lippeb97da6b2021-02-12 14:32:532195 peg$currPos = s0;
2196 s0 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:132197 }
Tim van der Lippe16aca392020-11-13 11:37:132198 peg$resultsCache[key] = {
2199 nextPos: peg$currPos,
2200 result: s0
2201 };
2202 return s0;
2203 }
Tim van der Lippe16aca392020-11-13 11:37:132204 function peg$parseattrValue() {
2205 var s0, s1, s2, s3, s4, s5;
Nikolay Vitkovb4e8dc72025-01-07 13:03:022206 var key = peg$currPos * 32 + 16,
Simon Zündaebbf4f2024-06-27 08:42:162207 cached = peg$resultsCache[key];
Tim van der Lippe16aca392020-11-13 11:37:132208 if (cached) {
2209 peg$currPos = cached.nextPos;
2210 return cached.result;
2211 }
Tim van der Lippe16aca392020-11-13 11:37:132212 s0 = peg$currPos;
2213 s1 = peg$parseattrName();
Tim van der Lippe16aca392020-11-13 11:37:132214 if (s1 !== peg$FAILED) {
2215 s2 = peg$parse_();
Tim van der Lippe16aca392020-11-13 11:37:132216 if (s2 !== peg$FAILED) {
2217 s3 = peg$parseattrEqOps();
Tim van der Lippe16aca392020-11-13 11:37:132218 if (s3 !== peg$FAILED) {
2219 s4 = peg$parse_();
Tim van der Lippe16aca392020-11-13 11:37:132220 if (s4 !== peg$FAILED) {
2221 s5 = peg$parsetype();
Tim van der Lippe16aca392020-11-13 11:37:132222 if (s5 === peg$FAILED) {
2223 s5 = peg$parseregex();
2224 }
Tim van der Lippec8f6ffd2020-04-06 12:42:002225 if (s5 !== peg$FAILED) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022226 s1 = peg$c46(s1, s3, s5);
Tim van der Lippec8f6ffd2020-04-06 12:42:002227 s0 = s1;
2228 } else {
2229 peg$currPos = s0;
2230 s0 = peg$FAILED;
2231 }
2232 } else {
2233 peg$currPos = s0;
2234 s0 = peg$FAILED;
2235 }
2236 } else {
2237 peg$currPos = s0;
2238 s0 = peg$FAILED;
2239 }
2240 } else {
2241 peg$currPos = s0;
2242 s0 = peg$FAILED;
2243 }
2244 } else {
2245 peg$currPos = s0;
2246 s0 = peg$FAILED;
2247 }
2248 if (s0 === peg$FAILED) {
2249 s0 = peg$currPos;
2250 s1 = peg$parseattrName();
2251 if (s1 !== peg$FAILED) {
Tim van der Lippe16aca392020-11-13 11:37:132252 s2 = peg$parse_();
Tim van der Lippe16aca392020-11-13 11:37:132253 if (s2 !== peg$FAILED) {
2254 s3 = peg$parseattrOps();
Tim van der Lippe16aca392020-11-13 11:37:132255 if (s3 !== peg$FAILED) {
2256 s4 = peg$parse_();
Tim van der Lippe16aca392020-11-13 11:37:132257 if (s4 !== peg$FAILED) {
2258 s5 = peg$parsestring();
Tim van der Lippe16aca392020-11-13 11:37:132259 if (s5 === peg$FAILED) {
2260 s5 = peg$parsenumber();
Tim van der Lippe16aca392020-11-13 11:37:132261 if (s5 === peg$FAILED) {
2262 s5 = peg$parsepath();
2263 }
2264 }
Tim van der Lippe16aca392020-11-13 11:37:132265 if (s5 !== peg$FAILED) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022266 s1 = peg$c46(s1, s3, s5);
Tim van der Lippe16aca392020-11-13 11:37:132267 s0 = s1;
2268 } else {
2269 peg$currPos = s0;
2270 s0 = peg$FAILED;
2271 }
2272 } else {
2273 peg$currPos = s0;
2274 s0 = peg$FAILED;
2275 }
2276 } else {
2277 peg$currPos = s0;
2278 s0 = peg$FAILED;
2279 }
2280 } else {
2281 peg$currPos = s0;
2282 s0 = peg$FAILED;
2283 }
2284 } else {
2285 peg$currPos = s0;
2286 s0 = peg$FAILED;
Tim van der Lippec8f6ffd2020-04-06 12:42:002287 }
Tim van der Lippe16aca392020-11-13 11:37:132288 if (s0 === peg$FAILED) {
2289 s0 = peg$currPos;
2290 s1 = peg$parseattrName();
Tim van der Lippe16aca392020-11-13 11:37:132291 if (s1 !== peg$FAILED) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022292 s1 = peg$c47(s1);
Tim van der Lippe16aca392020-11-13 11:37:132293 }
Tim van der Lippe16aca392020-11-13 11:37:132294 s0 = s1;
2295 }
Tim van der Lippec8f6ffd2020-04-06 12:42:002296 }
Tim van der Lippe16aca392020-11-13 11:37:132297 peg$resultsCache[key] = {
2298 nextPos: peg$currPos,
2299 result: s0
2300 };
2301 return s0;
Tim van der Lippec8f6ffd2020-04-06 12:42:002302 }
Tim van der Lippe16aca392020-11-13 11:37:132303 function peg$parsestring() {
2304 var s0, s1, s2, s3, s4, s5;
Nikolay Vitkovb4e8dc72025-01-07 13:03:022305 var key = peg$currPos * 32 + 17,
Simon Zündaebbf4f2024-06-27 08:42:162306 cached = peg$resultsCache[key];
Tim van der Lippe16aca392020-11-13 11:37:132307 if (cached) {
2308 peg$currPos = cached.nextPos;
2309 return cached.result;
2310 }
Tim van der Lippe16aca392020-11-13 11:37:132311 s0 = peg$currPos;
Tim van der Lippe16aca392020-11-13 11:37:132312 if (input.charCodeAt(peg$currPos) === 34) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022313 s1 = peg$c48;
Tim van der Lippec8f6ffd2020-04-06 12:42:002314 peg$currPos++;
2315 } else {
Tim van der Lippe16aca392020-11-13 11:37:132316 s1 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:132317 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022318 peg$fail(peg$c49);
Tim van der Lippec8f6ffd2020-04-06 12:42:002319 }
2320 }
Tim van der Lippe16aca392020-11-13 11:37:132321 if (s1 !== peg$FAILED) {
2322 s2 = [];
Nikolay Vitkovb4e8dc72025-01-07 13:03:022323 if (peg$c50.test(input.charAt(peg$currPos))) {
Tim van der Lippec8f6ffd2020-04-06 12:42:002324 s3 = input.charAt(peg$currPos);
2325 peg$currPos++;
2326 } else {
2327 s3 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:132328 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022329 peg$fail(peg$c51);
Tim van der Lippe16aca392020-11-13 11:37:132330 }
Tim van der Lippec8f6ffd2020-04-06 12:42:002331 }
2332 if (s3 === peg$FAILED) {
2333 s3 = peg$currPos;
2334 if (input.charCodeAt(peg$currPos) === 92) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022335 s4 = peg$c52;
Tim van der Lippec8f6ffd2020-04-06 12:42:002336 peg$currPos++;
2337 } else {
2338 s4 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:132339 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022340 peg$fail(peg$c53);
Tim van der Lippe16aca392020-11-13 11:37:132341 }
Tim van der Lippec8f6ffd2020-04-06 12:42:002342 }
2343 if (s4 !== peg$FAILED) {
2344 if (input.length > peg$currPos) {
2345 s5 = input.charAt(peg$currPos);
2346 peg$currPos++;
2347 } else {
2348 s5 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:132349 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022350 peg$fail(peg$c54);
Tim van der Lippe16aca392020-11-13 11:37:132351 }
Tim van der Lippec8f6ffd2020-04-06 12:42:002352 }
2353 if (s5 !== peg$FAILED) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022354 s4 = peg$c55(s4, s5);
Tim van der Lippec8f6ffd2020-04-06 12:42:002355 s3 = s4;
2356 } else {
2357 peg$currPos = s3;
2358 s3 = peg$FAILED;
2359 }
2360 } else {
2361 peg$currPos = s3;
2362 s3 = peg$FAILED;
2363 }
2364 }
Tim van der Lippec8f6ffd2020-04-06 12:42:002365 while (s3 !== peg$FAILED) {
2366 s2.push(s3);
Nikolay Vitkovb4e8dc72025-01-07 13:03:022367 if (peg$c50.test(input.charAt(peg$currPos))) {
Tim van der Lippec8f6ffd2020-04-06 12:42:002368 s3 = input.charAt(peg$currPos);
2369 peg$currPos++;
2370 } else {
2371 s3 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:132372 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022373 peg$fail(peg$c51);
Tim van der Lippe16aca392020-11-13 11:37:132374 }
Tim van der Lippec8f6ffd2020-04-06 12:42:002375 }
2376 if (s3 === peg$FAILED) {
2377 s3 = peg$currPos;
2378 if (input.charCodeAt(peg$currPos) === 92) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022379 s4 = peg$c52;
Tim van der Lippec8f6ffd2020-04-06 12:42:002380 peg$currPos++;
2381 } else {
2382 s4 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:132383 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022384 peg$fail(peg$c53);
Tim van der Lippe16aca392020-11-13 11:37:132385 }
Tim van der Lippec8f6ffd2020-04-06 12:42:002386 }
2387 if (s4 !== peg$FAILED) {
2388 if (input.length > peg$currPos) {
2389 s5 = input.charAt(peg$currPos);
2390 peg$currPos++;
2391 } else {
2392 s5 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:132393 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022394 peg$fail(peg$c54);
Tim van der Lippe16aca392020-11-13 11:37:132395 }
Tim van der Lippec8f6ffd2020-04-06 12:42:002396 }
2397 if (s5 !== peg$FAILED) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022398 s4 = peg$c55(s4, s5);
Tim van der Lippec8f6ffd2020-04-06 12:42:002399 s3 = s4;
2400 } else {
2401 peg$currPos = s3;
2402 s3 = peg$FAILED;
2403 }
2404 } else {
2405 peg$currPos = s3;
2406 s3 = peg$FAILED;
2407 }
2408 }
2409 }
2410 if (s2 !== peg$FAILED) {
Tim van der Lippe16aca392020-11-13 11:37:132411 if (input.charCodeAt(peg$currPos) === 34) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022412 s3 = peg$c48;
Tim van der Lippec8f6ffd2020-04-06 12:42:002413 peg$currPos++;
2414 } else {
2415 s3 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:132416 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022417 peg$fail(peg$c49);
Tim van der Lippe16aca392020-11-13 11:37:132418 }
Tim van der Lippec8f6ffd2020-04-06 12:42:002419 }
2420 if (s3 !== peg$FAILED) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022421 s1 = peg$c56(s2);
Tim van der Lippec8f6ffd2020-04-06 12:42:002422 s0 = s1;
2423 } else {
2424 peg$currPos = s0;
2425 s0 = peg$FAILED;
2426 }
2427 } else {
2428 peg$currPos = s0;
2429 s0 = peg$FAILED;
2430 }
2431 } else {
2432 peg$currPos = s0;
2433 s0 = peg$FAILED;
2434 }
Tim van der Lippe16aca392020-11-13 11:37:132435 if (s0 === peg$FAILED) {
2436 s0 = peg$currPos;
Tim van der Lippe16aca392020-11-13 11:37:132437 if (input.charCodeAt(peg$currPos) === 39) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022438 s1 = peg$c57;
Tim van der Lippe16aca392020-11-13 11:37:132439 peg$currPos++;
2440 } else {
2441 s1 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:132442 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022443 peg$fail(peg$c58);
Tim van der Lippe16aca392020-11-13 11:37:132444 }
2445 }
Tim van der Lippe16aca392020-11-13 11:37:132446 if (s1 !== peg$FAILED) {
2447 s2 = [];
Nikolay Vitkovb4e8dc72025-01-07 13:03:022448 if (peg$c59.test(input.charAt(peg$currPos))) {
Tim van der Lippec8f6ffd2020-04-06 12:42:002449 s3 = input.charAt(peg$currPos);
2450 peg$currPos++;
2451 } else {
2452 s3 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:132453 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022454 peg$fail(peg$c60);
Tim van der Lippe16aca392020-11-13 11:37:132455 }
2456 }
Tim van der Lippe16aca392020-11-13 11:37:132457 if (s3 === peg$FAILED) {
2458 s3 = peg$currPos;
Tim van der Lippe16aca392020-11-13 11:37:132459 if (input.charCodeAt(peg$currPos) === 92) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022460 s4 = peg$c52;
Tim van der Lippe16aca392020-11-13 11:37:132461 peg$currPos++;
2462 } else {
2463 s4 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:132464 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022465 peg$fail(peg$c53);
Tim van der Lippe16aca392020-11-13 11:37:132466 }
2467 }
Tim van der Lippe16aca392020-11-13 11:37:132468 if (s4 !== peg$FAILED) {
2469 if (input.length > peg$currPos) {
2470 s5 = input.charAt(peg$currPos);
2471 peg$currPos++;
2472 } else {
2473 s5 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:132474 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022475 peg$fail(peg$c54);
Tim van der Lippe16aca392020-11-13 11:37:132476 }
2477 }
Tim van der Lippe16aca392020-11-13 11:37:132478 if (s5 !== peg$FAILED) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022479 s4 = peg$c55(s4, s5);
Tim van der Lippe16aca392020-11-13 11:37:132480 s3 = s4;
2481 } else {
2482 peg$currPos = s3;
2483 s3 = peg$FAILED;
2484 }
2485 } else {
2486 peg$currPos = s3;
2487 s3 = peg$FAILED;
2488 }
2489 }
Tim van der Lippe16aca392020-11-13 11:37:132490 while (s3 !== peg$FAILED) {
2491 s2.push(s3);
Nikolay Vitkovb4e8dc72025-01-07 13:03:022492 if (peg$c59.test(input.charAt(peg$currPos))) {
Tim van der Lippe16aca392020-11-13 11:37:132493 s3 = input.charAt(peg$currPos);
2494 peg$currPos++;
2495 } else {
2496 s3 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:132497 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022498 peg$fail(peg$c60);
Tim van der Lippe16aca392020-11-13 11:37:132499 }
2500 }
Tim van der Lippe16aca392020-11-13 11:37:132501 if (s3 === peg$FAILED) {
2502 s3 = peg$currPos;
Tim van der Lippe16aca392020-11-13 11:37:132503 if (input.charCodeAt(peg$currPos) === 92) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022504 s4 = peg$c52;
Tim van der Lippe16aca392020-11-13 11:37:132505 peg$currPos++;
2506 } else {
2507 s4 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:132508 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022509 peg$fail(peg$c53);
Tim van der Lippe16aca392020-11-13 11:37:132510 }
2511 }
Tim van der Lippe16aca392020-11-13 11:37:132512 if (s4 !== peg$FAILED) {
2513 if (input.length > peg$currPos) {
2514 s5 = input.charAt(peg$currPos);
2515 peg$currPos++;
2516 } else {
2517 s5 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:132518 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022519 peg$fail(peg$c54);
Tim van der Lippe16aca392020-11-13 11:37:132520 }
2521 }
Tim van der Lippe16aca392020-11-13 11:37:132522 if (s5 !== peg$FAILED) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022523 s4 = peg$c55(s4, s5);
Tim van der Lippe16aca392020-11-13 11:37:132524 s3 = s4;
2525 } else {
2526 peg$currPos = s3;
2527 s3 = peg$FAILED;
2528 }
2529 } else {
2530 peg$currPos = s3;
2531 s3 = peg$FAILED;
2532 }
2533 }
2534 }
Tim van der Lippe16aca392020-11-13 11:37:132535 if (s2 !== peg$FAILED) {
2536 if (input.charCodeAt(peg$currPos) === 39) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022537 s3 = peg$c57;
Tim van der Lippe16aca392020-11-13 11:37:132538 peg$currPos++;
2539 } else {
2540 s3 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:132541 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022542 peg$fail(peg$c58);
Tim van der Lippe16aca392020-11-13 11:37:132543 }
2544 }
Tim van der Lippe16aca392020-11-13 11:37:132545 if (s3 !== peg$FAILED) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022546 s1 = peg$c56(s2);
Tim van der Lippe16aca392020-11-13 11:37:132547 s0 = s1;
2548 } else {
2549 peg$currPos = s0;
2550 s0 = peg$FAILED;
2551 }
2552 } else {
2553 peg$currPos = s0;
2554 s0 = peg$FAILED;
2555 }
2556 } else {
2557 peg$currPos = s0;
2558 s0 = peg$FAILED;
2559 }
2560 }
Tim van der Lippe16aca392020-11-13 11:37:132561 peg$resultsCache[key] = {
2562 nextPos: peg$currPos,
2563 result: s0
2564 };
2565 return s0;
2566 }
Tim van der Lippe16aca392020-11-13 11:37:132567 function peg$parsenumber() {
2568 var s0, s1, s2, s3;
Nikolay Vitkovb4e8dc72025-01-07 13:03:022569 var key = peg$currPos * 32 + 18,
Simon Zündaebbf4f2024-06-27 08:42:162570 cached = peg$resultsCache[key];
Tim van der Lippe16aca392020-11-13 11:37:132571 if (cached) {
2572 peg$currPos = cached.nextPos;
2573 return cached.result;
2574 }
Tim van der Lippe16aca392020-11-13 11:37:132575 s0 = peg$currPos;
2576 s1 = peg$currPos;
2577 s2 = [];
Nikolay Vitkovb4e8dc72025-01-07 13:03:022578 if (peg$c61.test(input.charAt(peg$currPos))) {
Tim van der Lippe16aca392020-11-13 11:37:132579 s3 = input.charAt(peg$currPos);
2580 peg$currPos++;
2581 } else {
2582 s3 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:132583 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022584 peg$fail(peg$c62);
Tim van der Lippe16aca392020-11-13 11:37:132585 }
2586 }
Tim van der Lippe16aca392020-11-13 11:37:132587 while (s3 !== peg$FAILED) {
2588 s2.push(s3);
Nikolay Vitkovb4e8dc72025-01-07 13:03:022589 if (peg$c61.test(input.charAt(peg$currPos))) {
Tim van der Lippe16aca392020-11-13 11:37:132590 s3 = input.charAt(peg$currPos);
2591 peg$currPos++;
2592 } else {
2593 s3 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:132594 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022595 peg$fail(peg$c62);
Tim van der Lippec8f6ffd2020-04-06 12:42:002596 }
2597 }
Tim van der Lippec8f6ffd2020-04-06 12:42:002598 }
2599 if (s2 !== peg$FAILED) {
Tim van der Lippe16aca392020-11-13 11:37:132600 if (input.charCodeAt(peg$currPos) === 46) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022601 s3 = peg$c43;
Tim van der Lippe16aca392020-11-13 11:37:132602 peg$currPos++;
2603 } else {
2604 s3 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:132605 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022606 peg$fail(peg$c44);
Tim van der Lippe16aca392020-11-13 11:37:132607 }
2608 }
Tim van der Lippe16aca392020-11-13 11:37:132609 if (s3 !== peg$FAILED) {
2610 s2 = [s2, s3];
2611 s1 = s2;
2612 } else {
2613 peg$currPos = s1;
2614 s1 = peg$FAILED;
2615 }
2616 } else {
2617 peg$currPos = s1;
2618 s1 = peg$FAILED;
2619 }
Tim van der Lippe16aca392020-11-13 11:37:132620 if (s1 === peg$FAILED) {
2621 s1 = null;
2622 }
Tim van der Lippe16aca392020-11-13 11:37:132623 if (s1 !== peg$FAILED) {
2624 s2 = [];
Nikolay Vitkovb4e8dc72025-01-07 13:03:022625 if (peg$c61.test(input.charAt(peg$currPos))) {
Tim van der Lippe16aca392020-11-13 11:37:132626 s3 = input.charAt(peg$currPos);
2627 peg$currPos++;
2628 } else {
2629 s3 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:132630 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022631 peg$fail(peg$c62);
Tim van der Lippe16aca392020-11-13 11:37:132632 }
2633 }
Tim van der Lippe16aca392020-11-13 11:37:132634 if (s3 !== peg$FAILED) {
2635 while (s3 !== peg$FAILED) {
2636 s2.push(s3);
Nikolay Vitkovb4e8dc72025-01-07 13:03:022637 if (peg$c61.test(input.charAt(peg$currPos))) {
Tim van der Lippe16aca392020-11-13 11:37:132638 s3 = input.charAt(peg$currPos);
2639 peg$currPos++;
2640 } else {
2641 s3 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:132642 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022643 peg$fail(peg$c62);
Tim van der Lippe16aca392020-11-13 11:37:132644 }
2645 }
2646 }
2647 } else {
2648 s2 = peg$FAILED;
2649 }
Tim van der Lippe16aca392020-11-13 11:37:132650 if (s2 !== peg$FAILED) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022651 s1 = peg$c63(s1, s2);
Tim van der Lippe16aca392020-11-13 11:37:132652 s0 = s1;
2653 } else {
2654 peg$currPos = s0;
2655 s0 = peg$FAILED;
2656 }
Tim van der Lippec8f6ffd2020-04-06 12:42:002657 } else {
2658 peg$currPos = s0;
2659 s0 = peg$FAILED;
2660 }
Tim van der Lippe16aca392020-11-13 11:37:132661 peg$resultsCache[key] = {
2662 nextPos: peg$currPos,
2663 result: s0
2664 };
2665 return s0;
Tim van der Lippec8f6ffd2020-04-06 12:42:002666 }
Tim van der Lippe16aca392020-11-13 11:37:132667 function peg$parsepath() {
2668 var s0, s1;
Nikolay Vitkovb4e8dc72025-01-07 13:03:022669 var key = peg$currPos * 32 + 19,
Simon Zündaebbf4f2024-06-27 08:42:162670 cached = peg$resultsCache[key];
Tim van der Lippe16aca392020-11-13 11:37:132671 if (cached) {
2672 peg$currPos = cached.nextPos;
2673 return cached.result;
2674 }
Tim van der Lippe16aca392020-11-13 11:37:132675 s0 = peg$currPos;
2676 s1 = peg$parseidentifierName();
Tim van der Lippe16aca392020-11-13 11:37:132677 if (s1 !== peg$FAILED) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022678 s1 = peg$c64(s1);
Tim van der Lippe16aca392020-11-13 11:37:132679 }
Tim van der Lippe16aca392020-11-13 11:37:132680 s0 = s1;
2681 peg$resultsCache[key] = {
2682 nextPos: peg$currPos,
2683 result: s0
2684 };
2685 return s0;
Tim van der Lippec8f6ffd2020-04-06 12:42:002686 }
Tim van der Lippe16aca392020-11-13 11:37:132687 function peg$parsetype() {
2688 var s0, s1, s2, s3, s4, s5;
Nikolay Vitkovb4e8dc72025-01-07 13:03:022689 var key = peg$currPos * 32 + 20,
Simon Zündaebbf4f2024-06-27 08:42:162690 cached = peg$resultsCache[key];
Tim van der Lippe16aca392020-11-13 11:37:132691 if (cached) {
2692 peg$currPos = cached.nextPos;
2693 return cached.result;
2694 }
Tim van der Lippe16aca392020-11-13 11:37:132695 s0 = peg$currPos;
Nikolay Vitkovb4e8dc72025-01-07 13:03:022696 if (input.substr(peg$currPos, 5) === peg$c65) {
2697 s1 = peg$c65;
Tim van der Lippe16aca392020-11-13 11:37:132698 peg$currPos += 5;
2699 } else {
2700 s1 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:132701 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022702 peg$fail(peg$c66);
Tim van der Lippe16aca392020-11-13 11:37:132703 }
2704 }
Tim van der Lippe16aca392020-11-13 11:37:132705 if (s1 !== peg$FAILED) {
2706 s2 = peg$parse_();
Tim van der Lippe16aca392020-11-13 11:37:132707 if (s2 !== peg$FAILED) {
2708 s3 = [];
Nikolay Vitkovb4e8dc72025-01-07 13:03:022709 if (peg$c67.test(input.charAt(peg$currPos))) {
Tim van der Lippe16aca392020-11-13 11:37:132710 s4 = input.charAt(peg$currPos);
2711 peg$currPos++;
2712 } else {
2713 s4 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:132714 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022715 peg$fail(peg$c68);
Tim van der Lippe16aca392020-11-13 11:37:132716 }
2717 }
Tim van der Lippe16aca392020-11-13 11:37:132718 if (s4 !== peg$FAILED) {
2719 while (s4 !== peg$FAILED) {
2720 s3.push(s4);
Nikolay Vitkovb4e8dc72025-01-07 13:03:022721 if (peg$c67.test(input.charAt(peg$currPos))) {
Tim van der Lippe16aca392020-11-13 11:37:132722 s4 = input.charAt(peg$currPos);
2723 peg$currPos++;
2724 } else {
2725 s4 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:132726 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022727 peg$fail(peg$c68);
Tim van der Lippe16aca392020-11-13 11:37:132728 }
2729 }
2730 }
2731 } else {
2732 s3 = peg$FAILED;
2733 }
Tim van der Lippe16aca392020-11-13 11:37:132734 if (s3 !== peg$FAILED) {
2735 s4 = peg$parse_();
Tim van der Lippe16aca392020-11-13 11:37:132736 if (s4 !== peg$FAILED) {
2737 if (input.charCodeAt(peg$currPos) === 41) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022738 s5 = peg$c69;
Tim van der Lippe16aca392020-11-13 11:37:132739 peg$currPos++;
2740 } else {
2741 s5 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:132742 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022743 peg$fail(peg$c70);
Tim van der Lippe16aca392020-11-13 11:37:132744 }
2745 }
Tim van der Lippe16aca392020-11-13 11:37:132746 if (s5 !== peg$FAILED) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022747 s1 = peg$c71(s3);
Tim van der Lippe16aca392020-11-13 11:37:132748 s0 = s1;
2749 } else {
2750 peg$currPos = s0;
2751 s0 = peg$FAILED;
2752 }
2753 } else {
2754 peg$currPos = s0;
2755 s0 = peg$FAILED;
2756 }
2757 } else {
2758 peg$currPos = s0;
2759 s0 = peg$FAILED;
2760 }
2761 } else {
2762 peg$currPos = s0;
2763 s0 = peg$FAILED;
2764 }
2765 } else {
2766 peg$currPos = s0;
2767 s0 = peg$FAILED;
2768 }
Tim van der Lippe16aca392020-11-13 11:37:132769 peg$resultsCache[key] = {
2770 nextPos: peg$currPos,
2771 result: s0
2772 };
2773 return s0;
Tim van der Lippec8f6ffd2020-04-06 12:42:002774 }
Tim van der Lippe16aca392020-11-13 11:37:132775 function peg$parseflags() {
2776 var s0, s1;
Nikolay Vitkovb4e8dc72025-01-07 13:03:022777 var key = peg$currPos * 32 + 21,
Simon Zündaebbf4f2024-06-27 08:42:162778 cached = peg$resultsCache[key];
Tim van der Lippe16aca392020-11-13 11:37:132779 if (cached) {
2780 peg$currPos = cached.nextPos;
2781 return cached.result;
2782 }
Tim van der Lippe16aca392020-11-13 11:37:132783 s0 = [];
Nikolay Vitkovb4e8dc72025-01-07 13:03:022784 if (peg$c72.test(input.charAt(peg$currPos))) {
Tim van der Lippe16aca392020-11-13 11:37:132785 s1 = input.charAt(peg$currPos);
2786 peg$currPos++;
2787 } else {
2788 s1 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:132789 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022790 peg$fail(peg$c73);
Tim van der Lippe16aca392020-11-13 11:37:132791 }
2792 }
Tim van der Lippe16aca392020-11-13 11:37:132793 if (s1 !== peg$FAILED) {
2794 while (s1 !== peg$FAILED) {
2795 s0.push(s1);
Nikolay Vitkovb4e8dc72025-01-07 13:03:022796 if (peg$c72.test(input.charAt(peg$currPos))) {
Tim van der Lippe16aca392020-11-13 11:37:132797 s1 = input.charAt(peg$currPos);
2798 peg$currPos++;
2799 } else {
2800 s1 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:132801 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022802 peg$fail(peg$c73);
Tim van der Lippe16aca392020-11-13 11:37:132803 }
2804 }
2805 }
2806 } else {
2807 s0 = peg$FAILED;
2808 }
Tim van der Lippe16aca392020-11-13 11:37:132809 peg$resultsCache[key] = {
2810 nextPos: peg$currPos,
2811 result: s0
2812 };
2813 return s0;
Tim van der Lippec8f6ffd2020-04-06 12:42:002814 }
Tim van der Lippe16aca392020-11-13 11:37:132815 function peg$parseregex() {
2816 var s0, s1, s2, s3, s4;
Nikolay Vitkovb4e8dc72025-01-07 13:03:022817 var key = peg$currPos * 32 + 22,
Simon Zündaebbf4f2024-06-27 08:42:162818 cached = peg$resultsCache[key];
Tim van der Lippe16aca392020-11-13 11:37:132819 if (cached) {
2820 peg$currPos = cached.nextPos;
2821 return cached.result;
2822 }
Tim van der Lippe16aca392020-11-13 11:37:132823 s0 = peg$currPos;
Tim van der Lippe16aca392020-11-13 11:37:132824 if (input.charCodeAt(peg$currPos) === 47) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022825 s1 = peg$c74;
Tim van der Lippe16aca392020-11-13 11:37:132826 peg$currPos++;
2827 } else {
2828 s1 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:132829 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022830 peg$fail(peg$c75);
Tim van der Lippe16aca392020-11-13 11:37:132831 }
2832 }
Tim van der Lippe16aca392020-11-13 11:37:132833 if (s1 !== peg$FAILED) {
2834 s2 = [];
Nikolay Vitkovb4e8dc72025-01-07 13:03:022835 if (peg$c76.test(input.charAt(peg$currPos))) {
Tim van der Lippe16aca392020-11-13 11:37:132836 s3 = input.charAt(peg$currPos);
Tim van der Lippec8f6ffd2020-04-06 12:42:002837 peg$currPos++;
2838 } else {
Tim van der Lippe16aca392020-11-13 11:37:132839 s3 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:132840 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022841 peg$fail(peg$c77);
Tim van der Lippe16aca392020-11-13 11:37:132842 }
Tim van der Lippec8f6ffd2020-04-06 12:42:002843 }
Tim van der Lippe16aca392020-11-13 11:37:132844 if (s3 !== peg$FAILED) {
2845 while (s3 !== peg$FAILED) {
2846 s2.push(s3);
Nikolay Vitkovb4e8dc72025-01-07 13:03:022847 if (peg$c76.test(input.charAt(peg$currPos))) {
Tim van der Lippe16aca392020-11-13 11:37:132848 s3 = input.charAt(peg$currPos);
Tim van der Lippec8f6ffd2020-04-06 12:42:002849 peg$currPos++;
2850 } else {
Tim van der Lippe16aca392020-11-13 11:37:132851 s3 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:132852 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022853 peg$fail(peg$c77);
Tim van der Lippe16aca392020-11-13 11:37:132854 }
Tim van der Lippec8f6ffd2020-04-06 12:42:002855 }
2856 }
2857 } else {
Tim van der Lippe16aca392020-11-13 11:37:132858 s2 = peg$FAILED;
Tim van der Lippec8f6ffd2020-04-06 12:42:002859 }
Tim van der Lippe16aca392020-11-13 11:37:132860 if (s2 !== peg$FAILED) {
2861 if (input.charCodeAt(peg$currPos) === 47) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022862 s3 = peg$c74;
Tim van der Lippe16aca392020-11-13 11:37:132863 peg$currPos++;
2864 } else {
2865 s3 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:132866 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022867 peg$fail(peg$c75);
Tim van der Lippec8f6ffd2020-04-06 12:42:002868 }
Tim van der Lippe16aca392020-11-13 11:37:132869 }
Tim van der Lippe16aca392020-11-13 11:37:132870 if (s3 !== peg$FAILED) {
2871 s4 = peg$parseflags();
Tim van der Lippe16aca392020-11-13 11:37:132872 if (s4 === peg$FAILED) {
2873 s4 = null;
2874 }
Tim van der Lippe16aca392020-11-13 11:37:132875 if (s4 !== peg$FAILED) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022876 s1 = peg$c78(s2, s4);
Tim van der Lippec8f6ffd2020-04-06 12:42:002877 s0 = s1;
2878 } else {
2879 peg$currPos = s0;
2880 s0 = peg$FAILED;
2881 }
2882 } else {
2883 peg$currPos = s0;
2884 s0 = peg$FAILED;
2885 }
2886 } else {
2887 peg$currPos = s0;
2888 s0 = peg$FAILED;
2889 }
2890 } else {
2891 peg$currPos = s0;
2892 s0 = peg$FAILED;
2893 }
Tim van der Lippe16aca392020-11-13 11:37:132894 peg$resultsCache[key] = {
2895 nextPos: peg$currPos,
2896 result: s0
2897 };
2898 return s0;
Tim van der Lippec8f6ffd2020-04-06 12:42:002899 }
Tim van der Lippe16aca392020-11-13 11:37:132900 function peg$parsefield() {
2901 var s0, s1, s2, s3, s4, s5, s6;
Nikolay Vitkovb4e8dc72025-01-07 13:03:022902 var key = peg$currPos * 32 + 23,
Simon Zündaebbf4f2024-06-27 08:42:162903 cached = peg$resultsCache[key];
Tim van der Lippe16aca392020-11-13 11:37:132904 if (cached) {
2905 peg$currPos = cached.nextPos;
2906 return cached.result;
Tim van der Lippec8f6ffd2020-04-06 12:42:002907 }
Tim van der Lippe16aca392020-11-13 11:37:132908 s0 = peg$currPos;
Tim van der Lippe16aca392020-11-13 11:37:132909 if (input.charCodeAt(peg$currPos) === 46) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022910 s1 = peg$c43;
Tim van der Lippec8f6ffd2020-04-06 12:42:002911 peg$currPos++;
2912 } else {
Tim van der Lippe16aca392020-11-13 11:37:132913 s1 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:132914 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022915 peg$fail(peg$c44);
Tim van der Lippe16aca392020-11-13 11:37:132916 }
Tim van der Lippec8f6ffd2020-04-06 12:42:002917 }
Tim van der Lippe16aca392020-11-13 11:37:132918 if (s1 !== peg$FAILED) {
2919 s2 = peg$parseidentifierName();
Tim van der Lippe16aca392020-11-13 11:37:132920 if (s2 !== peg$FAILED) {
2921 s3 = [];
2922 s4 = peg$currPos;
Tim van der Lippe16aca392020-11-13 11:37:132923 if (input.charCodeAt(peg$currPos) === 46) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022924 s5 = peg$c43;
Tim van der Lippec8f6ffd2020-04-06 12:42:002925 peg$currPos++;
2926 } else {
Tim van der Lippe16aca392020-11-13 11:37:132927 s5 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:132928 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022929 peg$fail(peg$c44);
Tim van der Lippe16aca392020-11-13 11:37:132930 }
Tim van der Lippec8f6ffd2020-04-06 12:42:002931 }
Tim van der Lippe16aca392020-11-13 11:37:132932 if (s5 !== peg$FAILED) {
2933 s6 = peg$parseidentifierName();
Tim van der Lippe16aca392020-11-13 11:37:132934 if (s6 !== peg$FAILED) {
2935 s5 = [s5, s6];
2936 s4 = s5;
2937 } else {
2938 peg$currPos = s4;
2939 s4 = peg$FAILED;
2940 }
2941 } else {
2942 peg$currPos = s4;
2943 s4 = peg$FAILED;
Tim van der Lippec8f6ffd2020-04-06 12:42:002944 }
Tim van der Lippe16aca392020-11-13 11:37:132945 while (s4 !== peg$FAILED) {
2946 s3.push(s4);
2947 s4 = peg$currPos;
Tim van der Lippe16aca392020-11-13 11:37:132948 if (input.charCodeAt(peg$currPos) === 46) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022949 s5 = peg$c43;
Tim van der Lippe16aca392020-11-13 11:37:132950 peg$currPos++;
2951 } else {
2952 s5 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:132953 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022954 peg$fail(peg$c44);
Tim van der Lippe16aca392020-11-13 11:37:132955 }
2956 }
Tim van der Lippe16aca392020-11-13 11:37:132957 if (s5 !== peg$FAILED) {
2958 s6 = peg$parseidentifierName();
Tim van der Lippe16aca392020-11-13 11:37:132959 if (s6 !== peg$FAILED) {
2960 s5 = [s5, s6];
2961 s4 = s5;
2962 } else {
2963 peg$currPos = s4;
2964 s4 = peg$FAILED;
2965 }
2966 } else {
2967 peg$currPos = s4;
2968 s4 = peg$FAILED;
2969 }
2970 }
Tim van der Lippe16aca392020-11-13 11:37:132971 if (s3 !== peg$FAILED) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:022972 s1 = peg$c79(s2, s3);
Tim van der Lippec8f6ffd2020-04-06 12:42:002973 s0 = s1;
2974 } else {
2975 peg$currPos = s0;
2976 s0 = peg$FAILED;
2977 }
2978 } else {
2979 peg$currPos = s0;
2980 s0 = peg$FAILED;
2981 }
2982 } else {
2983 peg$currPos = s0;
2984 s0 = peg$FAILED;
2985 }
Tim van der Lippe16aca392020-11-13 11:37:132986 peg$resultsCache[key] = {
2987 nextPos: peg$currPos,
2988 result: s0
2989 };
2990 return s0;
Tim van der Lippec8f6ffd2020-04-06 12:42:002991 }
Tim van der Lippe16aca392020-11-13 11:37:132992 function peg$parsenegation() {
2993 var s0, s1, s2, s3, s4, s5;
Nikolay Vitkovb4e8dc72025-01-07 13:03:022994 var key = peg$currPos * 32 + 24,
Simon Zündaebbf4f2024-06-27 08:42:162995 cached = peg$resultsCache[key];
Tim van der Lippe16aca392020-11-13 11:37:132996 if (cached) {
2997 peg$currPos = cached.nextPos;
2998 return cached.result;
2999 }
Tim van der Lippe16aca392020-11-13 11:37:133000 s0 = peg$currPos;
Nikolay Vitkovb4e8dc72025-01-07 13:03:023001 if (input.substr(peg$currPos, 5) === peg$c80) {
3002 s1 = peg$c80;
Tim van der Lippe16aca392020-11-13 11:37:133003 peg$currPos += 5;
3004 } else {
3005 s1 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:133006 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:023007 peg$fail(peg$c81);
Tim van der Lippec8f6ffd2020-04-06 12:42:003008 }
Tim van der Lippe16aca392020-11-13 11:37:133009 }
Tim van der Lippe16aca392020-11-13 11:37:133010 if (s1 !== peg$FAILED) {
3011 s2 = peg$parse_();
Tim van der Lippe16aca392020-11-13 11:37:133012 if (s2 !== peg$FAILED) {
3013 s3 = peg$parseselectors();
Tim van der Lippe16aca392020-11-13 11:37:133014 if (s3 !== peg$FAILED) {
3015 s4 = peg$parse_();
Tim van der Lippe16aca392020-11-13 11:37:133016 if (s4 !== peg$FAILED) {
3017 if (input.charCodeAt(peg$currPos) === 41) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:023018 s5 = peg$c69;
Tim van der Lippe16aca392020-11-13 11:37:133019 peg$currPos++;
3020 } else {
3021 s5 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:133022 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:023023 peg$fail(peg$c70);
Tim van der Lippe16aca392020-11-13 11:37:133024 }
3025 }
Tim van der Lippe16aca392020-11-13 11:37:133026 if (s5 !== peg$FAILED) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:023027 s1 = peg$c82(s3);
Tim van der Lippe16aca392020-11-13 11:37:133028 s0 = s1;
3029 } else {
3030 peg$currPos = s0;
3031 s0 = peg$FAILED;
3032 }
Tim van der Lippec8f6ffd2020-04-06 12:42:003033 } else {
Tim van der Lippe16aca392020-11-13 11:37:133034 peg$currPos = s0;
3035 s0 = peg$FAILED;
Tim van der Lippec8f6ffd2020-04-06 12:42:003036 }
3037 } else {
Tim van der Lippe16aca392020-11-13 11:37:133038 peg$currPos = s0;
3039 s0 = peg$FAILED;
3040 }
3041 } else {
3042 peg$currPos = s0;
3043 s0 = peg$FAILED;
3044 }
3045 } else {
3046 peg$currPos = s0;
3047 s0 = peg$FAILED;
3048 }
Tim van der Lippe16aca392020-11-13 11:37:133049 peg$resultsCache[key] = {
3050 nextPos: peg$currPos,
3051 result: s0
3052 };
3053 return s0;
3054 }
Tim van der Lippe16aca392020-11-13 11:37:133055 function peg$parsematches() {
3056 var s0, s1, s2, s3, s4, s5;
Nikolay Vitkovb4e8dc72025-01-07 13:03:023057 var key = peg$currPos * 32 + 25,
Simon Zündaebbf4f2024-06-27 08:42:163058 cached = peg$resultsCache[key];
Tim van der Lippe16aca392020-11-13 11:37:133059 if (cached) {
3060 peg$currPos = cached.nextPos;
3061 return cached.result;
3062 }
Tim van der Lippe16aca392020-11-13 11:37:133063 s0 = peg$currPos;
Nikolay Vitkovb4e8dc72025-01-07 13:03:023064 if (input.substr(peg$currPos, 9) === peg$c83) {
3065 s1 = peg$c83;
Tim van der Lippe16aca392020-11-13 11:37:133066 peg$currPos += 9;
3067 } else {
3068 s1 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:133069 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:023070 peg$fail(peg$c84);
Tim van der Lippe16aca392020-11-13 11:37:133071 }
3072 }
Tim van der Lippe16aca392020-11-13 11:37:133073 if (s1 !== peg$FAILED) {
3074 s2 = peg$parse_();
Tim van der Lippe16aca392020-11-13 11:37:133075 if (s2 !== peg$FAILED) {
3076 s3 = peg$parseselectors();
Tim van der Lippe16aca392020-11-13 11:37:133077 if (s3 !== peg$FAILED) {
3078 s4 = peg$parse_();
Tim van der Lippe16aca392020-11-13 11:37:133079 if (s4 !== peg$FAILED) {
3080 if (input.charCodeAt(peg$currPos) === 41) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:023081 s5 = peg$c69;
Tim van der Lippe16aca392020-11-13 11:37:133082 peg$currPos++;
3083 } else {
3084 s5 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:133085 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:023086 peg$fail(peg$c70);
Tim van der Lippe16aca392020-11-13 11:37:133087 }
3088 }
Tim van der Lippe16aca392020-11-13 11:37:133089 if (s5 !== peg$FAILED) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:023090 s1 = peg$c85(s3);
Tim van der Lippe16aca392020-11-13 11:37:133091 s0 = s1;
3092 } else {
3093 peg$currPos = s0;
3094 s0 = peg$FAILED;
3095 }
3096 } else {
3097 peg$currPos = s0;
3098 s0 = peg$FAILED;
3099 }
3100 } else {
3101 peg$currPos = s0;
3102 s0 = peg$FAILED;
3103 }
3104 } else {
3105 peg$currPos = s0;
3106 s0 = peg$FAILED;
3107 }
3108 } else {
3109 peg$currPos = s0;
3110 s0 = peg$FAILED;
3111 }
Tim van der Lippe16aca392020-11-13 11:37:133112 peg$resultsCache[key] = {
3113 nextPos: peg$currPos,
3114 result: s0
3115 };
3116 return s0;
3117 }
Tim van der Lippe16aca392020-11-13 11:37:133118 function peg$parsehas() {
3119 var s0, s1, s2, s3, s4, s5;
Nikolay Vitkovb4e8dc72025-01-07 13:03:023120 var key = peg$currPos * 32 + 26,
Simon Zündaebbf4f2024-06-27 08:42:163121 cached = peg$resultsCache[key];
Tim van der Lippe16aca392020-11-13 11:37:133122 if (cached) {
3123 peg$currPos = cached.nextPos;
3124 return cached.result;
3125 }
Tim van der Lippe16aca392020-11-13 11:37:133126 s0 = peg$currPos;
Nikolay Vitkovb4e8dc72025-01-07 13:03:023127 if (input.substr(peg$currPos, 5) === peg$c86) {
3128 s1 = peg$c86;
Tim van der Lippe16aca392020-11-13 11:37:133129 peg$currPos += 5;
3130 } else {
3131 s1 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:133132 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:023133 peg$fail(peg$c87);
Tim van der Lippe16aca392020-11-13 11:37:133134 }
3135 }
Tim van der Lippe16aca392020-11-13 11:37:133136 if (s1 !== peg$FAILED) {
3137 s2 = peg$parse_();
Tim van der Lippe16aca392020-11-13 11:37:133138 if (s2 !== peg$FAILED) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:023139 s3 = peg$parsehasSelectors();
Tim van der Lippe16aca392020-11-13 11:37:133140 if (s3 !== peg$FAILED) {
3141 s4 = peg$parse_();
Tim van der Lippe16aca392020-11-13 11:37:133142 if (s4 !== peg$FAILED) {
3143 if (input.charCodeAt(peg$currPos) === 41) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:023144 s5 = peg$c69;
Tim van der Lippe16aca392020-11-13 11:37:133145 peg$currPos++;
3146 } else {
3147 s5 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:133148 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:023149 peg$fail(peg$c70);
Tim van der Lippe16aca392020-11-13 11:37:133150 }
3151 }
Tim van der Lippe16aca392020-11-13 11:37:133152 if (s5 !== peg$FAILED) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:023153 s1 = peg$c88(s3);
Tim van der Lippe16aca392020-11-13 11:37:133154 s0 = s1;
3155 } else {
3156 peg$currPos = s0;
3157 s0 = peg$FAILED;
3158 }
3159 } else {
3160 peg$currPos = s0;
3161 s0 = peg$FAILED;
3162 }
3163 } else {
3164 peg$currPos = s0;
3165 s0 = peg$FAILED;
3166 }
3167 } else {
3168 peg$currPos = s0;
3169 s0 = peg$FAILED;
3170 }
3171 } else {
3172 peg$currPos = s0;
3173 s0 = peg$FAILED;
3174 }
Tim van der Lippe16aca392020-11-13 11:37:133175 peg$resultsCache[key] = {
3176 nextPos: peg$currPos,
3177 result: s0
3178 };
3179 return s0;
3180 }
Tim van der Lippe16aca392020-11-13 11:37:133181 function peg$parsefirstChild() {
3182 var s0, s1;
Nikolay Vitkovb4e8dc72025-01-07 13:03:023183 var key = peg$currPos * 32 + 27,
Simon Zündaebbf4f2024-06-27 08:42:163184 cached = peg$resultsCache[key];
Tim van der Lippe16aca392020-11-13 11:37:133185 if (cached) {
3186 peg$currPos = cached.nextPos;
3187 return cached.result;
3188 }
Tim van der Lippe16aca392020-11-13 11:37:133189 s0 = peg$currPos;
Nikolay Vitkovb4e8dc72025-01-07 13:03:023190 if (input.substr(peg$currPos, 12) === peg$c89) {
3191 s1 = peg$c89;
Tim van der Lippe16aca392020-11-13 11:37:133192 peg$currPos += 12;
3193 } else {
3194 s1 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:133195 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:023196 peg$fail(peg$c90);
Tim van der Lippe16aca392020-11-13 11:37:133197 }
3198 }
Tim van der Lippe16aca392020-11-13 11:37:133199 if (s1 !== peg$FAILED) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:023200 s1 = peg$c91();
Tim van der Lippe16aca392020-11-13 11:37:133201 }
Tim van der Lippe16aca392020-11-13 11:37:133202 s0 = s1;
3203 peg$resultsCache[key] = {
3204 nextPos: peg$currPos,
3205 result: s0
3206 };
3207 return s0;
3208 }
Tim van der Lippe16aca392020-11-13 11:37:133209 function peg$parselastChild() {
3210 var s0, s1;
Nikolay Vitkovb4e8dc72025-01-07 13:03:023211 var key = peg$currPos * 32 + 28,
Simon Zündaebbf4f2024-06-27 08:42:163212 cached = peg$resultsCache[key];
Tim van der Lippe16aca392020-11-13 11:37:133213 if (cached) {
3214 peg$currPos = cached.nextPos;
3215 return cached.result;
3216 }
Tim van der Lippe16aca392020-11-13 11:37:133217 s0 = peg$currPos;
Nikolay Vitkovb4e8dc72025-01-07 13:03:023218 if (input.substr(peg$currPos, 11) === peg$c92) {
3219 s1 = peg$c92;
Tim van der Lippe16aca392020-11-13 11:37:133220 peg$currPos += 11;
3221 } else {
3222 s1 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:133223 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:023224 peg$fail(peg$c93);
Tim van der Lippe16aca392020-11-13 11:37:133225 }
3226 }
Tim van der Lippe16aca392020-11-13 11:37:133227 if (s1 !== peg$FAILED) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:023228 s1 = peg$c94();
Tim van der Lippe16aca392020-11-13 11:37:133229 }
Tim van der Lippe16aca392020-11-13 11:37:133230 s0 = s1;
3231 peg$resultsCache[key] = {
3232 nextPos: peg$currPos,
3233 result: s0
3234 };
3235 return s0;
3236 }
Tim van der Lippe16aca392020-11-13 11:37:133237 function peg$parsenthChild() {
3238 var s0, s1, s2, s3, s4, s5;
Nikolay Vitkovb4e8dc72025-01-07 13:03:023239 var key = peg$currPos * 32 + 29,
Simon Zündaebbf4f2024-06-27 08:42:163240 cached = peg$resultsCache[key];
Tim van der Lippe16aca392020-11-13 11:37:133241 if (cached) {
3242 peg$currPos = cached.nextPos;
3243 return cached.result;
3244 }
Tim van der Lippe16aca392020-11-13 11:37:133245 s0 = peg$currPos;
Nikolay Vitkovb4e8dc72025-01-07 13:03:023246 if (input.substr(peg$currPos, 11) === peg$c95) {
3247 s1 = peg$c95;
Tim van der Lippe16aca392020-11-13 11:37:133248 peg$currPos += 11;
3249 } else {
3250 s1 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:133251 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:023252 peg$fail(peg$c96);
Tim van der Lippe16aca392020-11-13 11:37:133253 }
3254 }
Tim van der Lippe16aca392020-11-13 11:37:133255 if (s1 !== peg$FAILED) {
3256 s2 = peg$parse_();
Tim van der Lippe16aca392020-11-13 11:37:133257 if (s2 !== peg$FAILED) {
3258 s3 = [];
Nikolay Vitkovb4e8dc72025-01-07 13:03:023259 if (peg$c61.test(input.charAt(peg$currPos))) {
Tim van der Lippe16aca392020-11-13 11:37:133260 s4 = input.charAt(peg$currPos);
3261 peg$currPos++;
3262 } else {
Tim van der Lippec8f6ffd2020-04-06 12:42:003263 s4 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:133264 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:023265 peg$fail(peg$c62);
Tim van der Lippe16aca392020-11-13 11:37:133266 }
3267 }
Tim van der Lippe16aca392020-11-13 11:37:133268 if (s4 !== peg$FAILED) {
3269 while (s4 !== peg$FAILED) {
3270 s3.push(s4);
Nikolay Vitkovb4e8dc72025-01-07 13:03:023271 if (peg$c61.test(input.charAt(peg$currPos))) {
Tim van der Lippe16aca392020-11-13 11:37:133272 s4 = input.charAt(peg$currPos);
3273 peg$currPos++;
3274 } else {
3275 s4 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:133276 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:023277 peg$fail(peg$c62);
Tim van der Lippe16aca392020-11-13 11:37:133278 }
3279 }
3280 }
3281 } else {
3282 s3 = peg$FAILED;
3283 }
Tim van der Lippe16aca392020-11-13 11:37:133284 if (s3 !== peg$FAILED) {
3285 s4 = peg$parse_();
Tim van der Lippe16aca392020-11-13 11:37:133286 if (s4 !== peg$FAILED) {
3287 if (input.charCodeAt(peg$currPos) === 41) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:023288 s5 = peg$c69;
Tim van der Lippe16aca392020-11-13 11:37:133289 peg$currPos++;
3290 } else {
3291 s5 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:133292 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:023293 peg$fail(peg$c70);
Tim van der Lippe16aca392020-11-13 11:37:133294 }
3295 }
Tim van der Lippe16aca392020-11-13 11:37:133296 if (s5 !== peg$FAILED) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:023297 s1 = peg$c97(s3);
Tim van der Lippe16aca392020-11-13 11:37:133298 s0 = s1;
3299 } else {
3300 peg$currPos = s0;
3301 s0 = peg$FAILED;
3302 }
3303 } else {
3304 peg$currPos = s0;
3305 s0 = peg$FAILED;
3306 }
3307 } else {
3308 peg$currPos = s0;
3309 s0 = peg$FAILED;
3310 }
3311 } else {
3312 peg$currPos = s0;
3313 s0 = peg$FAILED;
3314 }
3315 } else {
3316 peg$currPos = s0;
3317 s0 = peg$FAILED;
3318 }
Tim van der Lippe16aca392020-11-13 11:37:133319 peg$resultsCache[key] = {
3320 nextPos: peg$currPos,
3321 result: s0
3322 };
3323 return s0;
3324 }
Tim van der Lippe16aca392020-11-13 11:37:133325 function peg$parsenthLastChild() {
3326 var s0, s1, s2, s3, s4, s5;
Nikolay Vitkovb4e8dc72025-01-07 13:03:023327 var key = peg$currPos * 32 + 30,
Simon Zündaebbf4f2024-06-27 08:42:163328 cached = peg$resultsCache[key];
Tim van der Lippe16aca392020-11-13 11:37:133329 if (cached) {
3330 peg$currPos = cached.nextPos;
3331 return cached.result;
3332 }
Tim van der Lippe16aca392020-11-13 11:37:133333 s0 = peg$currPos;
Nikolay Vitkovb4e8dc72025-01-07 13:03:023334 if (input.substr(peg$currPos, 16) === peg$c98) {
3335 s1 = peg$c98;
Tim van der Lippe16aca392020-11-13 11:37:133336 peg$currPos += 16;
3337 } else {
3338 s1 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:133339 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:023340 peg$fail(peg$c99);
Tim van der Lippe16aca392020-11-13 11:37:133341 }
3342 }
Tim van der Lippe16aca392020-11-13 11:37:133343 if (s1 !== peg$FAILED) {
3344 s2 = peg$parse_();
Tim van der Lippe16aca392020-11-13 11:37:133345 if (s2 !== peg$FAILED) {
3346 s3 = [];
Nikolay Vitkovb4e8dc72025-01-07 13:03:023347 if (peg$c61.test(input.charAt(peg$currPos))) {
Tim van der Lippe16aca392020-11-13 11:37:133348 s4 = input.charAt(peg$currPos);
3349 peg$currPos++;
3350 } else {
3351 s4 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:133352 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:023353 peg$fail(peg$c62);
Tim van der Lippe16aca392020-11-13 11:37:133354 }
3355 }
Tim van der Lippe16aca392020-11-13 11:37:133356 if (s4 !== peg$FAILED) {
3357 while (s4 !== peg$FAILED) {
3358 s3.push(s4);
Nikolay Vitkovb4e8dc72025-01-07 13:03:023359 if (peg$c61.test(input.charAt(peg$currPos))) {
Tim van der Lippe16aca392020-11-13 11:37:133360 s4 = input.charAt(peg$currPos);
3361 peg$currPos++;
3362 } else {
3363 s4 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:133364 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:023365 peg$fail(peg$c62);
Tim van der Lippe16aca392020-11-13 11:37:133366 }
3367 }
3368 }
3369 } else {
3370 s3 = peg$FAILED;
3371 }
Tim van der Lippe16aca392020-11-13 11:37:133372 if (s3 !== peg$FAILED) {
3373 s4 = peg$parse_();
Tim van der Lippe16aca392020-11-13 11:37:133374 if (s4 !== peg$FAILED) {
3375 if (input.charCodeAt(peg$currPos) === 41) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:023376 s5 = peg$c69;
Tim van der Lippe16aca392020-11-13 11:37:133377 peg$currPos++;
3378 } else {
3379 s5 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:133380 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:023381 peg$fail(peg$c70);
Tim van der Lippe16aca392020-11-13 11:37:133382 }
3383 }
Tim van der Lippe16aca392020-11-13 11:37:133384 if (s5 !== peg$FAILED) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:023385 s1 = peg$c100(s3);
Tim van der Lippe16aca392020-11-13 11:37:133386 s0 = s1;
3387 } else {
3388 peg$currPos = s0;
3389 s0 = peg$FAILED;
3390 }
3391 } else {
3392 peg$currPos = s0;
3393 s0 = peg$FAILED;
3394 }
3395 } else {
3396 peg$currPos = s0;
3397 s0 = peg$FAILED;
3398 }
3399 } else {
3400 peg$currPos = s0;
3401 s0 = peg$FAILED;
3402 }
3403 } else {
3404 peg$currPos = s0;
3405 s0 = peg$FAILED;
3406 }
Tim van der Lippe16aca392020-11-13 11:37:133407 peg$resultsCache[key] = {
3408 nextPos: peg$currPos,
3409 result: s0
3410 };
3411 return s0;
3412 }
Tim van der Lippe16aca392020-11-13 11:37:133413 function peg$parseclass() {
3414 var s0, s1, s2;
Nikolay Vitkovb4e8dc72025-01-07 13:03:023415 var key = peg$currPos * 32 + 31,
Simon Zündaebbf4f2024-06-27 08:42:163416 cached = peg$resultsCache[key];
Tim van der Lippe16aca392020-11-13 11:37:133417 if (cached) {
3418 peg$currPos = cached.nextPos;
3419 return cached.result;
3420 }
Tim van der Lippe16aca392020-11-13 11:37:133421 s0 = peg$currPos;
Tim van der Lippe16aca392020-11-13 11:37:133422 if (input.charCodeAt(peg$currPos) === 58) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:023423 s1 = peg$c101;
Tim van der Lippe16aca392020-11-13 11:37:133424 peg$currPos++;
3425 } else {
3426 s1 = peg$FAILED;
Tim van der Lippe16aca392020-11-13 11:37:133427 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:023428 peg$fail(peg$c102);
Tim van der Lippe16aca392020-11-13 11:37:133429 }
3430 }
Tim van der Lippe16aca392020-11-13 11:37:133431 if (s1 !== peg$FAILED) {
Simon Zündaebbf4f2024-06-27 08:42:163432 s2 = peg$parseidentifierName();
Tim van der Lippe16aca392020-11-13 11:37:133433 if (s2 !== peg$FAILED) {
Nikolay Vitkovb4e8dc72025-01-07 13:03:023434 s1 = peg$c103(s2);
Tim van der Lippec8f6ffd2020-04-06 12:42:003435 s0 = s1;
3436 } else {
3437 peg$currPos = s0;
3438 s0 = peg$FAILED;
3439 }
3440 } else {
3441 peg$currPos = s0;
3442 s0 = peg$FAILED;
3443 }
Tim van der Lippe16aca392020-11-13 11:37:133444 peg$resultsCache[key] = {
3445 nextPos: peg$currPos,
3446 result: s0
3447 };
3448 return s0;
Tim van der Lippec8f6ffd2020-04-06 12:42:003449 }
Tim van der Lippe16aca392020-11-13 11:37:133450 function nth(n) {
3451 return {
3452 type: 'nth-child',
3453 index: {
3454 type: 'literal',
3455 value: n
Tim van der Lippec8f6ffd2020-04-06 12:42:003456 }
Tim van der Lippe16aca392020-11-13 11:37:133457 };
Tim van der Lippec8f6ffd2020-04-06 12:42:003458 }
Tim van der Lippe16aca392020-11-13 11:37:133459 function nthLast(n) {
3460 return {
3461 type: 'nth-last-child',
3462 index: {
3463 type: 'literal',
3464 value: n
Tim van der Lippec8f6ffd2020-04-06 12:42:003465 }
Tim van der Lippe16aca392020-11-13 11:37:133466 };
Tim van der Lippec8f6ffd2020-04-06 12:42:003467 }
Tim van der Lippec8f6ffd2020-04-06 12:42:003468 function strUnescape(s) {
Tim van der Lippe16aca392020-11-13 11:37:133469 return s.replace(/\\(.)/g, function (match, ch) {
3470 switch (ch) {
3471 case 'b':
3472 return '\b';
Tim van der Lippe16aca392020-11-13 11:37:133473 case 'f':
3474 return '\f';
Tim van der Lippe16aca392020-11-13 11:37:133475 case 'n':
3476 return '\n';
Tim van der Lippe16aca392020-11-13 11:37:133477 case 'r':
3478 return '\r';
Tim van der Lippe16aca392020-11-13 11:37:133479 case 't':
3480 return '\t';
Tim van der Lippe16aca392020-11-13 11:37:133481 case 'v':
3482 return '\v';
Tim van der Lippe16aca392020-11-13 11:37:133483 default:
3484 return ch;
Tim van der Lippec8f6ffd2020-04-06 12:42:003485 }
3486 });
3487 }
Tim van der Lippe16aca392020-11-13 11:37:133488 peg$result = peg$startRuleFunction();
Tim van der Lippe16aca392020-11-13 11:37:133489 if (peg$result !== peg$FAILED && peg$currPos === input.length) {
3490 return peg$result;
3491 } else {
3492 if (peg$result !== peg$FAILED && peg$currPos < input.length) {
3493 peg$fail(peg$endExpectation());
3494 }
Tim van der Lippe16aca392020-11-13 11:37:133495 throw peg$buildStructuredError(peg$maxFailExpected, peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos));
Tim van der Lippec8f6ffd2020-04-06 12:42:003496 }
Tim van der Lippec8f6ffd2020-04-06 12:42:003497 }
Tim van der Lippe16aca392020-11-13 11:37:133498 return {
3499 SyntaxError: peg$SyntaxError,
3500 parse: peg$parse
3501 };
3502 });
Tim van der Lippec8f6ffd2020-04-06 12:42:003503});
3504
Tim van der Lippec8f6ffd2020-04-06 12:42:003505/**
3506* @typedef {"LEFT_SIDE"|"RIGHT_SIDE"} Side
3507*/
3508
Tim van der Lippe16aca392020-11-13 11:37:133509var LEFT_SIDE = 'LEFT_SIDE';
3510var RIGHT_SIDE = 'RIGHT_SIDE';
Simon Zündaebbf4f2024-06-27 08:42:163511
Tim van der Lippec8f6ffd2020-04-06 12:42:003512/**
3513 * @external AST
3514 * @see https://esprima.readthedocs.io/en/latest/syntax-tree-format.html
3515 */
3516
3517/**
3518 * One of the rules of `grammar.pegjs`
3519 * @typedef {PlainObject} SelectorAST
3520 * @see grammar.pegjs
3521*/
3522
3523/**
3524 * The `sequence` production of `grammar.pegjs`
3525 * @typedef {PlainObject} SelectorSequenceAST
3526*/
3527
3528/**
3529 * Get the value of a property which may be multiple levels down
3530 * in the object.
3531 * @param {?PlainObject} obj
Simon Zündaebbf4f2024-06-27 08:42:163532 * @param {string[]} keys
Tim van der Lippec8f6ffd2020-04-06 12:42:003533 * @returns {undefined|boolean|string|number|external:AST}
3534 */
Simon Zündaebbf4f2024-06-27 08:42:163535function getPath(obj, keys) {
3536 for (var i = 0; i < keys.length; ++i) {
3537 if (obj == null) {
3538 return obj;
Tim van der Lippeb97da6b2021-02-12 14:32:533539 }
Simon Zündaebbf4f2024-06-27 08:42:163540 obj = obj[keys[i]];
Tim van der Lippe16aca392020-11-13 11:37:133541 }
Tim van der Lippe16aca392020-11-13 11:37:133542 return obj;
3543}
Simon Zündaebbf4f2024-06-27 08:42:163544
Tim van der Lippec8f6ffd2020-04-06 12:42:003545/**
3546 * Determine whether `node` can be reached by following `path`,
3547 * starting at `ancestor`.
3548 * @param {?external:AST} node
3549 * @param {?external:AST} ancestor
3550 * @param {string[]} path
Simon Zündaebbf4f2024-06-27 08:42:163551 * @param {Integer} fromPathIndex
Tim van der Lippec8f6ffd2020-04-06 12:42:003552 * @returns {boolean}
3553 */
Simon Zündaebbf4f2024-06-27 08:42:163554function inPath(node, ancestor, path, fromPathIndex) {
3555 var current = ancestor;
3556 for (var i = fromPathIndex; i < path.length; ++i) {
3557 if (current == null) {
3558 return false;
3559 }
3560 var field = current[path[i]];
3561 if (Array.isArray(field)) {
3562 for (var k = 0; k < field.length; ++k) {
3563 if (inPath(node, field[k], path, i + 1)) {
Tim van der Lippeb97da6b2021-02-12 14:32:533564 return true;
3565 }
Tim van der Lippe16aca392020-11-13 11:37:133566 }
Simon Zündaebbf4f2024-06-27 08:42:163567 return false;
Tim van der Lippe16aca392020-11-13 11:37:133568 }
Simon Zündaebbf4f2024-06-27 08:42:163569 current = field;
Tim van der Lippe16aca392020-11-13 11:37:133570 }
Simon Zündaebbf4f2024-06-27 08:42:163571 return node === current;
Tim van der Lippe16aca392020-11-13 11:37:133572}
Simon Zündaebbf4f2024-06-27 08:42:163573
3574/**
3575 * A generated matcher function for a selector.
Nikolay Vitkovb4e8dc72025-01-07 13:03:023576 * @callback SelectorMatcher
3577 * @param {?SelectorAST} selector
3578 * @param {external:AST[]} [ancestry=[]]
3579 * @param {ESQueryOptions} [options]
3580 * @returns {void}
Simon Zündaebbf4f2024-06-27 08:42:163581*/
3582
3583/**
3584 * A WeakMap for holding cached matcher functions for selectors.
3585 * @type {WeakMap<SelectorAST, SelectorMatcher>}
3586*/
3587var MATCHER_CACHE = typeof WeakMap === 'function' ? new WeakMap() : null;
3588
3589/**
3590 * Look up a matcher function for `selector` in the cache.
3591 * If it does not exist, generate it with `generateMatcher` and add it to the cache.
3592 * In engines without WeakMap, the caching is skipped and matchers are generated with every call.
3593 * @param {?SelectorAST} selector
3594 * @returns {SelectorMatcher}
3595 */
3596function getMatcher(selector) {
3597 if (selector == null) {
3598 return function () {
3599 return true;
3600 };
3601 }
3602 if (MATCHER_CACHE != null) {
3603 var matcher = MATCHER_CACHE.get(selector);
3604 if (matcher != null) {
3605 return matcher;
3606 }
3607 matcher = generateMatcher(selector);
3608 MATCHER_CACHE.set(selector, matcher);
3609 return matcher;
3610 }
3611 return generateMatcher(selector);
3612}
3613
3614/**
3615 * Create a matcher function for `selector`,
3616 * @param {?SelectorAST} selector
3617 * @returns {SelectorMatcher}
3618 */
3619function generateMatcher(selector) {
3620 switch (selector.type) {
3621 case 'wildcard':
3622 return function () {
3623 return true;
3624 };
3625 case 'identifier':
3626 {
3627 var value = selector.value.toLowerCase();
3628 return function (node, ancestry, options) {
3629 var nodeTypeKey = options && options.nodeTypeKey || 'type';
3630 return value === node[nodeTypeKey].toLowerCase();
3631 };
3632 }
Nikolay Vitkovb4e8dc72025-01-07 13:03:023633 case 'exactNode':
3634 return function (node, ancestry) {
3635 return ancestry.length === 0;
3636 };
Simon Zündaebbf4f2024-06-27 08:42:163637 case 'field':
3638 {
3639 var path = selector.name.split('.');
3640 return function (node, ancestry) {
3641 var ancestor = ancestry[path.length - 1];
3642 return inPath(node, ancestor, path, 0);
3643 };
3644 }
3645 case 'matches':
3646 {
3647 var matchers = selector.selectors.map(getMatcher);
3648 return function (node, ancestry, options) {
3649 for (var i = 0; i < matchers.length; ++i) {
3650 if (matchers[i](node, ancestry, options)) {
3651 return true;
3652 }
3653 }
3654 return false;
3655 };
3656 }
3657 case 'compound':
3658 {
3659 var _matchers = selector.selectors.map(getMatcher);
3660 return function (node, ancestry, options) {
3661 for (var i = 0; i < _matchers.length; ++i) {
3662 if (!_matchers[i](node, ancestry, options)) {
3663 return false;
3664 }
3665 }
3666 return true;
3667 };
3668 }
3669 case 'not':
3670 {
3671 var _matchers2 = selector.selectors.map(getMatcher);
3672 return function (node, ancestry, options) {
3673 for (var i = 0; i < _matchers2.length; ++i) {
3674 if (_matchers2[i](node, ancestry, options)) {
3675 return false;
3676 }
3677 }
3678 return true;
3679 };
3680 }
3681 case 'has':
3682 {
3683 var _matchers3 = selector.selectors.map(getMatcher);
3684 return function (node, ancestry, options) {
3685 var result = false;
3686 var a = [];
3687 estraverse.traverse(node, {
3688 enter: function enter(node, parent) {
3689 if (parent != null) {
3690 a.unshift(parent);
3691 }
3692 for (var i = 0; i < _matchers3.length; ++i) {
3693 if (_matchers3[i](node, a, options)) {
3694 result = true;
3695 this["break"]();
3696 return;
3697 }
3698 }
3699 },
3700 leave: function leave() {
3701 a.shift();
3702 },
3703 keys: options && options.visitorKeys,
3704 fallback: options && options.fallback || 'iteration'
3705 });
3706 return result;
3707 };
3708 }
3709 case 'child':
3710 {
3711 var left = getMatcher(selector.left);
3712 var right = getMatcher(selector.right);
3713 return function (node, ancestry, options) {
3714 if (ancestry.length > 0 && right(node, ancestry, options)) {
3715 return left(ancestry[0], ancestry.slice(1), options);
3716 }
3717 return false;
3718 };
3719 }
3720 case 'descendant':
3721 {
3722 var _left = getMatcher(selector.left);
3723 var _right = getMatcher(selector.right);
3724 return function (node, ancestry, options) {
3725 if (_right(node, ancestry, options)) {
3726 for (var i = 0, l = ancestry.length; i < l; ++i) {
3727 if (_left(ancestry[i], ancestry.slice(i + 1), options)) {
3728 return true;
3729 }
3730 }
3731 }
3732 return false;
3733 };
3734 }
3735 case 'attribute':
3736 {
3737 var _path = selector.name.split('.');
3738 switch (selector.operator) {
3739 case void 0:
3740 return function (node) {
3741 return getPath(node, _path) != null;
3742 };
3743 case '=':
3744 switch (selector.value.type) {
3745 case 'regexp':
3746 return function (node) {
3747 var p = getPath(node, _path);
3748 return typeof p === 'string' && selector.value.value.test(p);
3749 };
3750 case 'literal':
3751 {
3752 var literal = "".concat(selector.value.value);
3753 return function (node) {
3754 return literal === "".concat(getPath(node, _path));
3755 };
3756 }
3757 case 'type':
3758 return function (node) {
3759 return selector.value.value === _typeof(getPath(node, _path));
3760 };
3761 }
3762 throw new Error("Unknown selector value type: ".concat(selector.value.type));
3763 case '!=':
3764 switch (selector.value.type) {
3765 case 'regexp':
3766 return function (node) {
3767 return !selector.value.value.test(getPath(node, _path));
3768 };
3769 case 'literal':
3770 {
3771 var _literal = "".concat(selector.value.value);
3772 return function (node) {
3773 return _literal !== "".concat(getPath(node, _path));
3774 };
3775 }
3776 case 'type':
3777 return function (node) {
3778 return selector.value.value !== _typeof(getPath(node, _path));
3779 };
3780 }
3781 throw new Error("Unknown selector value type: ".concat(selector.value.type));
3782 case '<=':
3783 return function (node) {
3784 return getPath(node, _path) <= selector.value.value;
3785 };
3786 case '<':
3787 return function (node) {
3788 return getPath(node, _path) < selector.value.value;
3789 };
3790 case '>':
3791 return function (node) {
3792 return getPath(node, _path) > selector.value.value;
3793 };
3794 case '>=':
3795 return function (node) {
3796 return getPath(node, _path) >= selector.value.value;
3797 };
3798 }
3799 throw new Error("Unknown operator: ".concat(selector.operator));
3800 }
3801 case 'sibling':
3802 {
3803 var _left2 = getMatcher(selector.left);
3804 var _right2 = getMatcher(selector.right);
3805 return function (node, ancestry, options) {
3806 return _right2(node, ancestry, options) && sibling(node, _left2, ancestry, LEFT_SIDE, options) || selector.left.subject && _left2(node, ancestry, options) && sibling(node, _right2, ancestry, RIGHT_SIDE, options);
3807 };
3808 }
3809 case 'adjacent':
3810 {
3811 var _left3 = getMatcher(selector.left);
3812 var _right3 = getMatcher(selector.right);
3813 return function (node, ancestry, options) {
3814 return _right3(node, ancestry, options) && adjacent(node, _left3, ancestry, LEFT_SIDE, options) || selector.right.subject && _left3(node, ancestry, options) && adjacent(node, _right3, ancestry, RIGHT_SIDE, options);
3815 };
3816 }
3817 case 'nth-child':
3818 {
3819 var nth = selector.index.value;
3820 var _right4 = getMatcher(selector.right);
3821 return function (node, ancestry, options) {
3822 return _right4(node, ancestry, options) && nthChild(node, ancestry, nth, options);
3823 };
3824 }
3825 case 'nth-last-child':
3826 {
3827 var _nth = -selector.index.value;
3828 var _right5 = getMatcher(selector.right);
3829 return function (node, ancestry, options) {
3830 return _right5(node, ancestry, options) && nthChild(node, ancestry, _nth, options);
3831 };
3832 }
3833 case 'class':
3834 {
Nikolay Vitkovb4e8dc72025-01-07 13:03:023835 var name = selector.name.toLowerCase();
Simon Zündaebbf4f2024-06-27 08:42:163836 return function (node, ancestry, options) {
3837 if (options && options.matchClass) {
3838 return options.matchClass(selector.name, node, ancestry);
3839 }
3840 if (options && options.nodeTypeKey) return false;
Simon Zündaebbf4f2024-06-27 08:42:163841 switch (name) {
3842 case 'statement':
3843 if (node.type.slice(-9) === 'Statement') return true;
3844 // fallthrough: interface Declaration <: Statement { }
3845 case 'declaration':
3846 return node.type.slice(-11) === 'Declaration';
3847 case 'pattern':
3848 if (node.type.slice(-7) === 'Pattern') return true;
3849 // fallthrough: interface Expression <: Node, Pattern { }
3850 case 'expression':
3851 return node.type.slice(-10) === 'Expression' || node.type.slice(-7) === 'Literal' || node.type === 'Identifier' && (ancestry.length === 0 || ancestry[0].type !== 'MetaProperty') || node.type === 'MetaProperty';
3852 case 'function':
3853 return node.type === 'FunctionDeclaration' || node.type === 'FunctionExpression' || node.type === 'ArrowFunctionExpression';
3854 }
3855 throw new Error("Unknown class name: ".concat(selector.name));
3856 };
3857 }
3858 }
3859 throw new Error("Unknown selector type: ".concat(selector.type));
3860}
3861
Tim van der Lippec8f6ffd2020-04-06 12:42:003862/**
Tim van der Lippeb97da6b2021-02-12 14:32:533863 * @callback TraverseOptionFallback
3864 * @param {external:AST} node The given node.
3865 * @returns {string[]} An array of visitor keys for the given node.
3866 */
3867
3868/**
Simon Zündaebbf4f2024-06-27 08:42:163869 * @callback ClassMatcher
3870 * @param {string} className The name of the class to match.
3871 * @param {external:AST} node The node to match against.
3872 * @param {Array<external:AST>} ancestry The ancestry of the node.
3873 * @returns {boolean} True if the node matches the class, false if not.
3874 */
3875
3876/**
Tim van der Lippeb97da6b2021-02-12 14:32:533877 * @typedef {object} ESQueryOptions
Simon Zündaebbf4f2024-06-27 08:42:163878 * @property {string} [nodeTypeKey="type"] By passing `nodeTypeKey`, we can allow other ASTs to use ESQuery.
Tim van der Lippeb97da6b2021-02-12 14:32:533879 * @property { { [nodeType: string]: string[] } } [visitorKeys] By passing `visitorKeys` mapping, we can extend the properties of the nodes that traverse the node.
3880 * @property {TraverseOptionFallback} [fallback] By passing `fallback` option, we can control the properties of traversing nodes when encountering unknown nodes.
Simon Zündaebbf4f2024-06-27 08:42:163881 * @property {ClassMatcher} [matchClass] By passing `matchClass` option, we can customize the interpretation of classes.
Tim van der Lippeb97da6b2021-02-12 14:32:533882 */
3883
3884/**
Tim van der Lippec8f6ffd2020-04-06 12:42:003885 * Given a `node` and its ancestors, determine if `node` is matched
3886 * by `selector`.
3887 * @param {?external:AST} node
3888 * @param {?SelectorAST} selector
3889 * @param {external:AST[]} [ancestry=[]]
Tim van der Lippeb97da6b2021-02-12 14:32:533890 * @param {ESQueryOptions} [options]
Tim van der Lippec8f6ffd2020-04-06 12:42:003891 * @throws {Error} Unknowns (operator, class name, selector type, or
3892 * selector value type)
3893 * @returns {boolean}
3894 */
Tim van der Lippeb97da6b2021-02-12 14:32:533895function matches(node, selector, ancestry, options) {
Tim van der Lippe16aca392020-11-13 11:37:133896 if (!selector) {
3897 return true;
3898 }
Tim van der Lippe16aca392020-11-13 11:37:133899 if (!node) {
3900 return false;
3901 }
Tim van der Lippe16aca392020-11-13 11:37:133902 if (!ancestry) {
3903 ancestry = [];
3904 }
Simon Zündaebbf4f2024-06-27 08:42:163905 return getMatcher(selector)(node, ancestry, options);
Tim van der Lippec8f6ffd2020-04-06 12:42:003906}
Simon Zündaebbf4f2024-06-27 08:42:163907
Tim van der Lippec8f6ffd2020-04-06 12:42:003908/**
Tim van der Lippeb97da6b2021-02-12 14:32:533909 * Get visitor keys of a given node.
3910 * @param {external:AST} node The AST node to get keys.
3911 * @param {ESQueryOptions|undefined} options
3912 * @returns {string[]} Visitor keys of the node.
3913 */
Tim van der Lippeb97da6b2021-02-12 14:32:533914function getVisitorKeys(node, options) {
Simon Zündaebbf4f2024-06-27 08:42:163915 var nodeTypeKey = options && options.nodeTypeKey || 'type';
3916 var nodeType = node[nodeTypeKey];
Tim van der Lippeb97da6b2021-02-12 14:32:533917 if (options && options.visitorKeys && options.visitorKeys[nodeType]) {
3918 return options.visitorKeys[nodeType];
3919 }
Tim van der Lippeb97da6b2021-02-12 14:32:533920 if (estraverse.VisitorKeys[nodeType]) {
3921 return estraverse.VisitorKeys[nodeType];
3922 }
Tim van der Lippeb97da6b2021-02-12 14:32:533923 if (options && typeof options.fallback === 'function') {
3924 return options.fallback(node);
Simon Zündaebbf4f2024-06-27 08:42:163925 }
3926 // 'iteration' fallback
Tim van der Lippeb97da6b2021-02-12 14:32:533927 return Object.keys(node).filter(function (key) {
Simon Zündaebbf4f2024-06-27 08:42:163928 return key !== nodeTypeKey;
Tim van der Lippeb97da6b2021-02-12 14:32:533929 });
3930}
Simon Zündaebbf4f2024-06-27 08:42:163931
Tim van der Lippeb97da6b2021-02-12 14:32:533932/**
3933 * Check whether the given value is an ASTNode or not.
3934 * @param {any} node The value to check.
Simon Zündaebbf4f2024-06-27 08:42:163935 * @param {ESQueryOptions|undefined} options The options to use.
Tim van der Lippeb97da6b2021-02-12 14:32:533936 * @returns {boolean} `true` if the value is an ASTNode.
3937 */
Simon Zündaebbf4f2024-06-27 08:42:163938function isNode(node, options) {
3939 var nodeTypeKey = options && options.nodeTypeKey || 'type';
3940 return node !== null && _typeof(node) === 'object' && typeof node[nodeTypeKey] === 'string';
Tim van der Lippeb97da6b2021-02-12 14:32:533941}
Simon Zündaebbf4f2024-06-27 08:42:163942
Tim van der Lippeb97da6b2021-02-12 14:32:533943/**
Tim van der Lippec8f6ffd2020-04-06 12:42:003944 * Determines if the given node has a sibling that matches the
Simon Zündaebbf4f2024-06-27 08:42:163945 * given selector matcher.
Tim van der Lippec8f6ffd2020-04-06 12:42:003946 * @param {external:AST} node
Simon Zündaebbf4f2024-06-27 08:42:163947 * @param {SelectorMatcher} matcher
Tim van der Lippec8f6ffd2020-04-06 12:42:003948 * @param {external:AST[]} ancestry
3949 * @param {Side} side
Tim van der Lippeb97da6b2021-02-12 14:32:533950 * @param {ESQueryOptions|undefined} options
Tim van der Lippec8f6ffd2020-04-06 12:42:003951 * @returns {boolean}
3952 */
Simon Zündaebbf4f2024-06-27 08:42:163953function sibling(node, matcher, ancestry, side, options) {
Tim van der Lippe16aca392020-11-13 11:37:133954 var _ancestry = _slicedToArray(ancestry, 1),
Simon Zündaebbf4f2024-06-27 08:42:163955 parent = _ancestry[0];
Tim van der Lippe16aca392020-11-13 11:37:133956 if (!parent) {
3957 return false;
3958 }
Tim van der Lippeb97da6b2021-02-12 14:32:533959 var keys = getVisitorKeys(parent, options);
Simon Zündaebbf4f2024-06-27 08:42:163960 for (var i = 0; i < keys.length; ++i) {
3961 var listProp = parent[keys[i]];
3962 if (Array.isArray(listProp)) {
3963 var startIndex = listProp.indexOf(node);
3964 if (startIndex < 0) {
3965 continue;
3966 }
3967 var lowerBound = void 0,
3968 upperBound = void 0;
3969 if (side === LEFT_SIDE) {
3970 lowerBound = 0;
3971 upperBound = startIndex;
3972 } else {
3973 lowerBound = startIndex + 1;
3974 upperBound = listProp.length;
3975 }
3976 for (var k = lowerBound; k < upperBound; ++k) {
3977 if (isNode(listProp[k], options) && matcher(listProp[k], ancestry, options)) {
3978 return true;
Tim van der Lippe16aca392020-11-13 11:37:133979 }
3980 }
3981 }
3982 }
Tim van der Lippe16aca392020-11-13 11:37:133983 return false;
3984}
Simon Zündaebbf4f2024-06-27 08:42:163985
Tim van der Lippec8f6ffd2020-04-06 12:42:003986/**
3987 * Determines if the given node has an adjacent sibling that matches
Simon Zündaebbf4f2024-06-27 08:42:163988 * the given selector matcher.
Tim van der Lippec8f6ffd2020-04-06 12:42:003989 * @param {external:AST} node
Simon Zündaebbf4f2024-06-27 08:42:163990 * @param {SelectorMatcher} matcher
Tim van der Lippec8f6ffd2020-04-06 12:42:003991 * @param {external:AST[]} ancestry
3992 * @param {Side} side
Tim van der Lippeb97da6b2021-02-12 14:32:533993 * @param {ESQueryOptions|undefined} options
Tim van der Lippec8f6ffd2020-04-06 12:42:003994 * @returns {boolean}
3995 */
Simon Zündaebbf4f2024-06-27 08:42:163996function adjacent(node, matcher, ancestry, side, options) {
Tim van der Lippe16aca392020-11-13 11:37:133997 var _ancestry2 = _slicedToArray(ancestry, 1),
Simon Zündaebbf4f2024-06-27 08:42:163998 parent = _ancestry2[0];
Tim van der Lippe16aca392020-11-13 11:37:133999 if (!parent) {
4000 return false;
4001 }
Tim van der Lippeb97da6b2021-02-12 14:32:534002 var keys = getVisitorKeys(parent, options);
Simon Zündaebbf4f2024-06-27 08:42:164003 for (var i = 0; i < keys.length; ++i) {
4004 var listProp = parent[keys[i]];
4005 if (Array.isArray(listProp)) {
4006 var idx = listProp.indexOf(node);
4007 if (idx < 0) {
4008 continue;
4009 }
4010 if (side === LEFT_SIDE && idx > 0 && isNode(listProp[idx - 1], options) && matcher(listProp[idx - 1], ancestry, options)) {
4011 return true;
4012 }
4013 if (side === RIGHT_SIDE && idx < listProp.length - 1 && isNode(listProp[idx + 1], options) && matcher(listProp[idx + 1], ancestry, options)) {
4014 return true;
Tim van der Lippe16aca392020-11-13 11:37:134015 }
4016 }
4017 }
Tim van der Lippe16aca392020-11-13 11:37:134018 return false;
4019}
Tim van der Lippec8f6ffd2020-04-06 12:42:004020
4021/**
Simon Zündaebbf4f2024-06-27 08:42:164022 * Determines if the given node is the `nth` child.
4023 * If `nth` is negative then the position is counted
4024 * from the end of the list of children.
Tim van der Lippec8f6ffd2020-04-06 12:42:004025 * @param {external:AST} node
4026 * @param {external:AST[]} ancestry
Simon Zündaebbf4f2024-06-27 08:42:164027 * @param {Integer} nth
Tim van der Lippeb97da6b2021-02-12 14:32:534028 * @param {ESQueryOptions|undefined} options
Tim van der Lippec8f6ffd2020-04-06 12:42:004029 * @returns {boolean}
4030 */
Simon Zündaebbf4f2024-06-27 08:42:164031function nthChild(node, ancestry, nth, options) {
4032 if (nth === 0) {
4033 return false;
4034 }
Tim van der Lippe16aca392020-11-13 11:37:134035 var _ancestry3 = _slicedToArray(ancestry, 1),
Simon Zündaebbf4f2024-06-27 08:42:164036 parent = _ancestry3[0];
Tim van der Lippe16aca392020-11-13 11:37:134037 if (!parent) {
4038 return false;
4039 }
Tim van der Lippeb97da6b2021-02-12 14:32:534040 var keys = getVisitorKeys(parent, options);
Simon Zündaebbf4f2024-06-27 08:42:164041 for (var i = 0; i < keys.length; ++i) {
4042 var listProp = parent[keys[i]];
4043 if (Array.isArray(listProp)) {
4044 var idx = nth < 0 ? listProp.length + nth : nth - 1;
4045 if (idx >= 0 && idx < listProp.length && listProp[idx] === node) {
4046 return true;
Tim van der Lippe16aca392020-11-13 11:37:134047 }
4048 }
4049 }
Tim van der Lippe16aca392020-11-13 11:37:134050 return false;
4051}
Simon Zündaebbf4f2024-06-27 08:42:164052
Tim van der Lippec8f6ffd2020-04-06 12:42:004053/**
4054 * For each selector node marked as a subject, find the portion of the
4055 * selector that the subject must match.
4056 * @param {SelectorAST} selector
4057 * @param {SelectorAST} [ancestor] Defaults to `selector`
4058 * @returns {SelectorAST[]}
4059 */
Tim van der Lippe16aca392020-11-13 11:37:134060function subjects(selector, ancestor) {
4061 if (selector == null || _typeof(selector) != 'object') {
4062 return [];
4063 }
Tim van der Lippe16aca392020-11-13 11:37:134064 if (ancestor == null) {
4065 ancestor = selector;
4066 }
Tim van der Lippe16aca392020-11-13 11:37:134067 var results = selector.subject ? [ancestor] : [];
Simon Zündaebbf4f2024-06-27 08:42:164068 var keys = Object.keys(selector);
4069 for (var i = 0; i < keys.length; ++i) {
4070 var p = keys[i];
4071 var sel = selector[p];
Tim van der Lippe16aca392020-11-13 11:37:134072 results.push.apply(results, _toConsumableArray(subjects(sel, p === 'left' ? sel : ancestor)));
4073 }
Tim van der Lippe16aca392020-11-13 11:37:134074 return results;
4075}
Simon Zündaebbf4f2024-06-27 08:42:164076
Tim van der Lippe16aca392020-11-13 11:37:134077/**
4078* @callback TraverseVisitor
4079* @param {?external:AST} node
4080* @param {?external:AST} parent
4081* @param {external:AST[]} ancestry
4082*/
4083
4084/**
4085 * From a JS AST and a selector AST, collect all JS AST nodes that
4086 * match the selector.
4087 * @param {external:AST} ast
4088 * @param {?SelectorAST} selector
4089 * @param {TraverseVisitor} visitor
Tim van der Lippeb97da6b2021-02-12 14:32:534090 * @param {ESQueryOptions} [options]
Tim van der Lippe16aca392020-11-13 11:37:134091 * @returns {external:AST[]}
4092 */
Tim van der Lippeb97da6b2021-02-12 14:32:534093function traverse(ast, selector, visitor, options) {
Tim van der Lippe16aca392020-11-13 11:37:134094 if (!selector) {
4095 return;
4096 }
Tim van der Lippe16aca392020-11-13 11:37:134097 var ancestry = [];
Simon Zündaebbf4f2024-06-27 08:42:164098 var matcher = getMatcher(selector);
4099 var altSubjects = subjects(selector).map(getMatcher);
Tim van der Lippe16aca392020-11-13 11:37:134100 estraverse.traverse(ast, {
4101 enter: function enter(node, parent) {
4102 if (parent != null) {
4103 ancestry.unshift(parent);
4104 }
Simon Zündaebbf4f2024-06-27 08:42:164105 if (matcher(node, ancestry, options)) {
Tim van der Lippe16aca392020-11-13 11:37:134106 if (altSubjects.length) {
4107 for (var i = 0, l = altSubjects.length; i < l; ++i) {
Simon Zündaebbf4f2024-06-27 08:42:164108 if (altSubjects[i](node, ancestry, options)) {
Tim van der Lippe16aca392020-11-13 11:37:134109 visitor(node, parent, ancestry);
4110 }
Tim van der Lippe16aca392020-11-13 11:37:134111 for (var k = 0, m = ancestry.length; k < m; ++k) {
4112 var succeedingAncestry = ancestry.slice(k + 1);
Simon Zündaebbf4f2024-06-27 08:42:164113 if (altSubjects[i](ancestry[k], succeedingAncestry, options)) {
Tim van der Lippe16aca392020-11-13 11:37:134114 visitor(ancestry[k], parent, succeedingAncestry);
4115 }
4116 }
4117 }
4118 } else {
4119 visitor(node, parent, ancestry);
4120 }
4121 }
4122 },
4123 leave: function leave() {
4124 ancestry.shift();
4125 },
Tim van der Lippeb97da6b2021-02-12 14:32:534126 keys: options && options.visitorKeys,
4127 fallback: options && options.fallback || 'iteration'
Tim van der Lippe16aca392020-11-13 11:37:134128 });
4129}
Simon Zündaebbf4f2024-06-27 08:42:164130
Tim van der Lippec8f6ffd2020-04-06 12:42:004131/**
4132 * From a JS AST and a selector AST, collect all JS AST nodes that
4133 * match the selector.
4134 * @param {external:AST} ast
4135 * @param {?SelectorAST} selector
Tim van der Lippeb97da6b2021-02-12 14:32:534136 * @param {ESQueryOptions} [options]
Tim van der Lippec8f6ffd2020-04-06 12:42:004137 * @returns {external:AST[]}
4138 */
Tim van der Lippeb97da6b2021-02-12 14:32:534139function match(ast, selector, options) {
Tim van der Lippe16aca392020-11-13 11:37:134140 var results = [];
4141 traverse(ast, selector, function (node) {
4142 results.push(node);
Tim van der Lippeb97da6b2021-02-12 14:32:534143 }, options);
Tim van der Lippe16aca392020-11-13 11:37:134144 return results;
4145}
Simon Zündaebbf4f2024-06-27 08:42:164146
Tim van der Lippec8f6ffd2020-04-06 12:42:004147/**
4148 * Parse a selector string and return its AST.
4149 * @param {string} selector
4150 * @returns {SelectorAST}
4151 */
Tim van der Lippe16aca392020-11-13 11:37:134152function parse(selector) {
4153 return parser.parse(selector);
4154}
Simon Zündaebbf4f2024-06-27 08:42:164155
Tim van der Lippec8f6ffd2020-04-06 12:42:004156/**
4157 * Query the code AST using the selector string.
4158 * @param {external:AST} ast
4159 * @param {string} selector
Tim van der Lippeb97da6b2021-02-12 14:32:534160 * @param {ESQueryOptions} [options]
Tim van der Lippec8f6ffd2020-04-06 12:42:004161 * @returns {external:AST[]}
4162 */
Tim van der Lippeb97da6b2021-02-12 14:32:534163function query(ast, selector, options) {
4164 return match(ast, parse(selector), options);
Tim van der Lippec8f6ffd2020-04-06 12:42:004165}
Tim van der Lippec8f6ffd2020-04-06 12:42:004166query.parse = parse;
4167query.match = match;
Tim van der Lippe16aca392020-11-13 11:37:134168query.traverse = traverse;
Tim van der Lippec8f6ffd2020-04-06 12:42:004169query.matches = matches;
4170query.query = query;
4171
4172export default query;