typeglish 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/NOTICE +13 -0
- package/README.md +301 -0
- package/dist/chunk-3NQ3VYO6.js +566 -0
- package/dist/chunk-3NQ3VYO6.js.map +1 -0
- package/dist/chunk-KRYC4OTL.js +3573 -0
- package/dist/chunk-KRYC4OTL.js.map +1 -0
- package/dist/chunk-NLQIL5WD.js +25 -0
- package/dist/chunk-NLQIL5WD.js.map +1 -0
- package/dist/chunk-PR4QN5HX.js +39 -0
- package/dist/chunk-PR4QN5HX.js.map +1 -0
- package/dist/chunk-PXAMTGYY.js +3 -0
- package/dist/chunk-PXAMTGYY.js.map +1 -0
- package/dist/chunk-VMACILYN.js +140 -0
- package/dist/chunk-VMACILYN.js.map +1 -0
- package/dist/chunk-Y64EAEYB.js +10919 -0
- package/dist/chunk-Y64EAEYB.js.map +1 -0
- package/dist/chunk-YH4ZLQ4G.js +4260 -0
- package/dist/chunk-YH4ZLQ4G.js.map +1 -0
- package/dist/chunk-ZKMHZHID.js +56 -0
- package/dist/chunk-ZKMHZHID.js.map +1 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +447 -0
- package/dist/cli.js.map +1 -0
- package/dist/compile-DViQS2oG.d.ts +310 -0
- package/dist/diagnostics-BWJ_oMd8.d.ts +49 -0
- package/dist/exhaustiveness-VBVWCX5W.js +123 -0
- package/dist/exhaustiveness-VBVWCX5W.js.map +1 -0
- package/dist/index-Df_QnTgq.d.ts +313 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp.d.ts +11 -0
- package/dist/mcp.js +36378 -0
- package/dist/mcp.js.map +1 -0
- package/dist/monaco.css +46 -0
- package/dist/monaco.d.ts +43 -0
- package/dist/monaco.js +971 -0
- package/dist/monaco.js.map +1 -0
- package/dist/node.d.ts +21 -0
- package/dist/node.js +8 -0
- package/dist/node.js.map +1 -0
- package/dist/spell-node.d.ts +8 -0
- package/dist/spell-node.js +23 -0
- package/dist/spell-node.js.map +1 -0
- package/dist/spell.d.ts +18 -0
- package/dist/spell.js +4 -0
- package/dist/spell.js.map +1 -0
- package/dist/z3-MWU3GSVT.js +5 -0
- package/dist/z3-MWU3GSVT.js.map +1 -0
- package/package.json +160 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../node_modules/peggy/lib/grammar-location.js","../node_modules/peggy/lib/grammar-error.js","../node_modules/peggy/lib/compiler/visitor.js","../node_modules/peggy/lib/compiler/asts.js","../node_modules/peggy/lib/compiler/passes/add-imported-rules.js","../node_modules/peggy/lib/compiler/passes/fix-library-numbers.js","../node_modules/peggy/lib/compiler/opcodes.js","../node_modules/peggy/lib/compiler/intern.js","../node_modules/peggy/lib/compiler/passes/inference-match-result.js","../node_modules/peggy/lib/compiler/passes/generate-bytecode.js","../node_modules/source-map-generator/lib/base64.js","../node_modules/source-map-generator/lib/base64-vlq.js","../node_modules/source-map-generator/lib/util.js","../node_modules/source-map-generator/lib/array-set.js","../node_modules/source-map-generator/lib/mapping-list.js","../node_modules/source-map-generator/lib/source-map-generator.js","../node_modules/source-map-generator/lib/source-node.js","../node_modules/source-map-generator/source-map.js","../node_modules/peggy/lib/compiler/stack.js","../node_modules/peggy/lib/version.js","../node_modules/peggy/lib/compiler/utils.js","../node_modules/peggy/lib/parser.js","../node_modules/peggy/lib/compiler/passes/generate-js.js","../node_modules/peggy/lib/compiler/passes/remove-proxy-rules.js","../node_modules/peggy/lib/compiler/passes/merge-character-classes.js","../node_modules/peggy/lib/compiler/passes/remove-unused-rules.js","../node_modules/peggy/lib/compiler/passes/report-duplicate-imports.js","../node_modules/peggy/lib/compiler/passes/report-duplicate-labels.js","../node_modules/peggy/lib/compiler/passes/report-duplicate-rules.js","../node_modules/peggy/lib/compiler/passes/report-infinite-recursion.js","../node_modules/peggy/lib/compiler/passes/report-infinite-repetition.js","../node_modules/peggy/lib/compiler/passes/report-undefined-rules.js","../node_modules/peggy/lib/compiler/passes/report-incorrect-plucking.js","../node_modules/peggy/lib/compiler/passes/report-unreachable.js","../node_modules/peggy/lib/compiler/session.js","../node_modules/peggy/lib/compiler/index.js","../node_modules/peggy/lib/peg.js","../src/core/line.ts","../src/core/parser.ts","../src/core/copula.ts","../src/core/lexicon.ts","../src/core/typeglish-grammar.ts","../src/core/tagname.ts","../src/core/clause.ts","../src/core/grammar.ts","../src/core/verbs.ts","../src/core/predicate.ts","../src/core/guards.ts","../src/core/ast.ts","../src/core/sentence.ts","../src/core/ir.ts"],"names":["exports","module","location","visitor","ast","node","asts","addImportedRules","fixLibraryNumbers","session","options","inferenceMatchResult","generateBytecode","context","base64","s","expected","found","text","offset","generateJS","code","name","e","parts","bc","r","removeProxyRules","mergeCharacterClasses","removeUnusedRules","reportDuplicateImports","reportDuplicateLabels","reportDuplicateRules","reportInfiniteRecursion","reportInfiniteRepetition","reportUndefinedRules","reportIncorrectPlucking","reportUnreachable","Session","compiler","parser","passes","peggy","inert"],"mappings":"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","file":"chunk-Y64EAEYB.js","sourcesContent":["\"use strict\";\n\n/**\n * When used as a grammarSource, allows grammars embedded in larger files to\n * specify their offset. The start location is the first character in the\n * grammar. The first line is often moved to the right by some number of\n * columns, but subsequent lines all start at the first column.\n */\nclass GrammarLocation {\n /**\n * Create an instance.\n *\n * @param {any} source The original grammarSource. Should be a string or\n * have a toString() method.\n * @param {import(\"./peg\").Location} start The starting offset for the\n * grammar in the larger file.\n */\n constructor(source, start) {\n this.source = source;\n this.start = start;\n }\n\n /**\n * Coerce to a string.\n *\n * @returns {string} The source, stringified.\n */\n toString() {\n return String(this.source);\n }\n\n /**\n * Return a new Location offset from the given location by the start of the\n * grammar.\n *\n * @param {import(\"./peg\").Location} loc The location as if the start of the\n * grammar was the start of the file.\n * @returns {import(\"./peg\").Location} The offset location.\n */\n offset(loc) {\n return {\n line: loc.line + this.start.line - 1,\n column: (loc.line === 1)\n ? loc.column + this.start.column - 1\n : loc.column,\n offset: loc.offset + this.start.offset,\n };\n }\n\n /**\n * If the range has a grammarSource that is a GrammarLocation, offset the\n * start of that range by the GrammarLocation.\n *\n * @param {import(\"./peg\").LocationRange} range The range to extract from.\n * @returns {import(\"./peg\").Location} The offset start if possible, or the\n * original start.\n */\n static offsetStart(range) {\n if (range.source && (typeof range.source.offset === \"function\")) {\n return range.source.offset(range.start);\n }\n return range.start;\n }\n\n /**\n * If the range has a grammarSource that is a GrammarLocation, offset the\n * end of that range by the GrammarLocation.\n *\n * @param {import(\"./peg\").LocationRange} range The range to extract from.\n * @returns {import(\"./peg\").Location} The offset end if possible, or the\n * original end.\n */\n static offsetEnd(range) {\n if (range.source && (typeof range.source.offset === \"function\")) {\n return range.source.offset(range.end);\n }\n return range.end;\n }\n}\n\nmodule.exports = GrammarLocation;\n","// @ts-check\n\"use strict\";\n\nconst GrammarLocation = require(\"./grammar-location\");\n\n// Thrown when the grammar contains an error.\n/** @type {import(\"./peg\").GrammarError} */\nclass GrammarError extends SyntaxError {\n /**\n *\n * @param {string} message\n * @param {PEG.LocationRange} [location]\n * @param {PEG.DiagnosticNote[]} [diagnostics]\n */\n constructor(message, location, diagnostics) {\n super(message);\n this.name = \"GrammarError\";\n this.location = location;\n if (diagnostics === undefined) {\n diagnostics = [];\n }\n this.diagnostics = diagnostics;\n // All problems if this error is thrown by the plugin and not at stage\n // checking phase\n this.stage = null;\n this.problems = [\n /** @type {PEG.Problem} */\n ([\"error\", message, location, diagnostics]),\n ];\n }\n\n toString() {\n let str = super.toString();\n if (this.location) {\n str += \"\\n at \";\n if ((this.location.source !== undefined)\n && (this.location.source !== null)) {\n str += `${this.location.source}:`;\n }\n str += `${this.location.start.line}:${this.location.start.column}`;\n }\n for (const diag of this.diagnostics) {\n str += \"\\n from \";\n if ((diag.location.source !== undefined)\n && (diag.location.source !== null)) {\n str += `${diag.location.source}:`;\n }\n str += `${diag.location.start.line}:${diag.location.start.column}: ${diag.message}`;\n }\n\n return str;\n }\n\n /**\n * Format the error with associated sources. The `location.source` should have\n * a `toString()` representation in order the result to look nice. If source\n * is `null` or `undefined`, it is skipped from the output\n *\n * Sample output:\n * ```\n * Error: Label \"head\" is already defined\n * --> examples/arithmetics.pegjs:15:17\n * |\n * 15 | = head:Factor head:(_ (\"*\" / \"/\") _ Factor)* {\n * | ^^^^\n * note: Original label location\n * --> examples/arithmetics.pegjs:15:5\n * |\n * 15 | = head:Factor head:(_ (\"*\" / \"/\") _ Factor)* {\n * | ^^^^\n * ```\n *\n * @param {import(\"./peg\").SourceText[]} sources mapping from location source to source text\n *\n * @returns {string} the formatted error\n */\n format(sources) {\n const srcLines = sources.map(({ source, text }) => ({\n source,\n text: (text !== null && text !== undefined)\n ? String(text).split(/\\r\\n|\\n|\\r/g)\n : [],\n }));\n\n /**\n * Returns a highlighted piece of source to which the `location` points\n *\n * @param {import(\"./peg\").LocationRange} location\n * @param {number} indent How much width in symbols line number strip should have\n * @param {string} message Additional message that will be shown after location\n * @returns {string}\n */\n function entry(location, indent, message = \"\") {\n let str = \"\";\n const src = srcLines.find(({ source }) => source === location.source);\n const s = location.start;\n const offset_s = GrammarLocation.offsetStart(location);\n if (src) {\n const e = location.end;\n const line = src.text[s.line - 1];\n const last = s.line === e.line ? e.column : line.length + 1;\n const hatLen = (last - s.column) || 1;\n if (message) {\n str += `\\nnote: ${message}`;\n }\n str += `\n --> ${location.source}:${offset_s.line}:${offset_s.column}\n${\"\".padEnd(indent)} |\n${offset_s.line.toString().padStart(indent)} | ${line}\n${\"\".padEnd(indent)} | ${\"\".padEnd(s.column - 1)}${\"\".padEnd(hatLen, \"^\")}`;\n } else {\n str += `\\n at ${location.source}:${offset_s.line}:${offset_s.column}`;\n if (message) {\n str += `: ${message}`;\n }\n }\n\n return str;\n }\n\n /**\n * Returns a formatted representation of the one problem in the error.\n *\n * @param {import(\"./peg\").Severity} severity Importance of the message\n * @param {string} message Test message of the problem\n * @param {import(\"./peg\").LocationRange} [location] Location of the problem in the source\n * @param {import(\"./peg\").DiagnosticNote[]} [diagnostics] Additional notes about the problem\n * @returns {string}\n */\n function formatProblem(severity, message, location, diagnostics = []) {\n // Calculate maximum width of all lines\n // eslint-disable-next-line no-useless-assignment\n let maxLine = -Infinity;\n if (location) {\n maxLine = diagnostics.reduce(\n (t, { location }) => Math.max(\n t, GrammarLocation.offsetStart(location).line\n ),\n location.start.line\n );\n } else {\n maxLine = Math.max.apply(\n null,\n diagnostics.map(d => d.location.start.line)\n );\n }\n maxLine = maxLine.toString().length;\n\n let str = `${severity}: ${message}`;\n if (location) {\n str += entry(location, maxLine);\n }\n for (const diag of diagnostics) {\n str += entry(diag.location, maxLine, diag.message);\n }\n\n return str;\n }\n\n // \"info\" problems are only appropriate if in verbose mode.\n // Handle them separately.\n return this.problems\n .filter(p => p[0] !== \"info\")\n .map(p => formatProblem(...p)).join(\"\\n\\n\");\n }\n}\n\nmodule.exports = GrammarError;\n","\"use strict\";\n\n// Simple AST node visitor builder.\nconst visitor = {\n build(functions) {\n function visit(node, ...args) {\n return functions[node.type](node, ...args);\n }\n\n function visitNop() {\n // Do nothing.\n }\n\n function visitExpression(node, ...args) {\n return visit(node.expression, ...args);\n }\n\n function visitChildren(property) {\n return function(node, ...args) {\n // We do not use .map() here, because if you need the result\n // of applying visitor to children you probable also need to\n // process it in some way, therefore you anyway have to override\n // this method. If you do not needed that, we do not waste time\n // and memory for creating the output array\n node[property].forEach(child => visit(child, ...args));\n };\n }\n\n const DEFAULT_FUNCTIONS = {\n grammar(node, ...args) {\n for (const imp of node.imports) {\n visit(imp, ...args);\n }\n\n if (node.topLevelInitializer) {\n if (Array.isArray(node.topLevelInitializer)) {\n for (const tli of node.topLevelInitializer) {\n visit(tli, ...args);\n }\n } else {\n visit(node.topLevelInitializer, ...args);\n }\n }\n\n if (node.initializer) {\n if (Array.isArray(node.initializer)) {\n for (const init of node.initializer) {\n visit(init, ...args);\n }\n } else {\n visit(node.initializer, ...args);\n }\n }\n\n node.rules.forEach(rule => visit(rule, ...args));\n },\n\n grammar_import: visitNop,\n top_level_initializer: visitNop,\n initializer: visitNop,\n rule: visitExpression,\n named: visitExpression,\n choice: visitChildren(\"alternatives\"),\n action: visitExpression,\n sequence: visitChildren(\"elements\"),\n labeled: visitExpression,\n text: visitExpression,\n simple_and: visitExpression,\n simple_not: visitExpression,\n optional: visitExpression,\n zero_or_more: visitExpression,\n one_or_more: visitExpression,\n repeated(node, ...args) {\n if (node.delimiter) {\n visit(node.delimiter, ...args);\n }\n\n return visit(node.expression, ...args);\n },\n group: visitExpression,\n semantic_and: visitNop,\n semantic_not: visitNop,\n rule_ref: visitNop,\n library_ref: visitNop,\n literal: visitNop,\n class: visitNop,\n any: visitNop,\n };\n\n Object.keys(DEFAULT_FUNCTIONS).forEach(type => {\n if (!Object.prototype.hasOwnProperty.call(functions, type)) {\n functions[type] = DEFAULT_FUNCTIONS[type];\n }\n });\n\n return visit;\n },\n};\n\nmodule.exports = visitor;\n","\"use strict\";\n\nconst visitor = require(\"./visitor\");\n\n/**\n * Combine two things, each of which might be an array, into a single value,\n * in the order [...a, ...b].\n *\n * @template T\n * @param {T | T[]} a\n * @param {T | T[]} b\n * @returns {T | T[]}\n */\nfunction combinePossibleArrays(a, b) {\n // First might be an array, second will not. Either might be null.\n if (!(a && b)) {\n return a || b;\n }\n const aa = Array.isArray(a) ? a : [a];\n aa.push(b);\n return aa;\n}\n\n// AST utilities.\nconst asts = {\n /**\n * Find the rule with the given name, if it exists.\n *\n * @param {PEG.ast.Grammar} ast\n * @param {string} name\n * @returns {PEG.ast.Rule | undefined}\n */\n findRule(ast, name) {\n for (let i = 0; i < ast.rules.length; i++) {\n if (ast.rules[i].name === name) {\n return ast.rules[i];\n }\n }\n\n return undefined;\n },\n\n /**\n * Find the index of the rule with the given name, if it exists.\n * Otherwise returns -1.\n *\n * @param {PEG.ast.Grammar} ast\n * @param {string} name\n * @returns {number}\n */\n indexOfRule(ast, name) {\n for (let i = 0; i < ast.rules.length; i++) {\n if (ast.rules[i].name === name) {\n return i;\n }\n }\n\n // istanbul ignore next Presence of rules checked using another approach that not involve this function\n // Any time when it is called the rules always exist\n return -1;\n },\n\n alwaysConsumesOnSuccess(ast, node) {\n function consumesTrue() { return true; }\n function consumesFalse() { return false; }\n\n const consumes = visitor.build({\n choice(node) {\n return node.alternatives.every(consumes);\n },\n\n sequence(node) {\n return node.elements.some(consumes);\n },\n\n simple_and: consumesFalse,\n simple_not: consumesFalse,\n optional: consumesFalse,\n zero_or_more: consumesFalse,\n repeated(node) {\n // If minimum is `null` it is equals to maximum (parsed from `|exact|` syntax)\n const min = node.min ? node.min : node.max;\n\n // If the low boundary is variable then it can be zero.\n // Expression, repeated zero times, does not consume any input\n // but always matched - so it does not always consumes on success\n if (min.type !== \"constant\" || min.value === 0) {\n return false;\n }\n if (consumes(node.expression)) {\n return true;\n }\n // |node.delimiter| used only when |node.expression| match at least two times\n // The first `if` filtered out all non-constant minimums, so at this point\n // |min.value| is always a constant\n if (min.value > 1 && node.delimiter && consumes(node.delimiter)) {\n return true;\n }\n\n return false;\n },\n semantic_and: consumesFalse,\n semantic_not: consumesFalse,\n\n rule_ref(node) {\n const rule = asts.findRule(ast, node.name);\n\n // Because we run all checks in one stage, some rules could be missing.\n // Checking for missing rules could be executed in parallel to this check\n return rule ? consumes(rule) : undefined;\n },\n\n // No way to know for external rules.\n library_ref: consumesFalse,\n\n literal(node) {\n return node.value !== \"\";\n },\n\n class: consumesTrue,\n any: consumesTrue,\n });\n\n return consumes(node);\n },\n\n combine(asts) {\n return asts.reduce((combined, ast) => {\n combined.topLevelInitializer = combinePossibleArrays(\n combined.topLevelInitializer,\n ast.topLevelInitializer\n );\n combined.initializer = combinePossibleArrays(\n combined.initializer,\n ast.initializer\n );\n combined.rules = combined.rules.concat(ast.rules);\n return combined;\n });\n },\n};\n\nmodule.exports = asts;\n","// @ts-check\n\"use strict\";\n\n/**\n * Generate trampoline stubs for each rule imported into this namespace.\n *\n * @example\n * import bar from \"./lib.js\" // Default rule imported into this namespace\n * import {baz} from \"./lib.js\" // One rule imported into this namespace by name\n *\n * @type {PEG.Pass}\n */\nfunction addImportedRules(ast) {\n let libraryNumber = 0;\n for (const imp of ast.imports) {\n for (const what of imp.what) {\n let original = undefined;\n switch (what.type) {\n case \"import_binding_all\":\n // Don't create stub.\n continue;\n case \"import_binding_default\":\n // Use the default (usually first) rule.\n break;\n case \"import_binding\":\n original = what.binding;\n break;\n case \"import_binding_rename\":\n original = what.rename;\n break;\n default:\n throw new TypeError(\"Unknown binding type\");\n }\n ast.rules.push({\n type: \"rule\",\n name: what.binding,\n nameLocation: what.location,\n expression: {\n type: \"library_ref\",\n name: original,\n library: imp.from.module,\n libraryNumber,\n location: what.location,\n },\n location: imp.from.location,\n });\n }\n libraryNumber++;\n }\n}\n\nmodule.exports = addImportedRules;\n","// @ts-check\n\"use strict\";\n\nconst visitor = require(\"../visitor\");\n\n/**\n * @param {PEG.ast.Grammar} ast\n * @param {string} name\n * @returns {number}\n */\nfunction findLibraryNumber(ast, name) {\n let libraryNumber = 0;\n for (const imp of ast.imports) {\n for (const what of imp.what) {\n if ((what.type === \"import_binding_all\") && (what.binding === name)) {\n return libraryNumber;\n }\n }\n libraryNumber++;\n }\n\n return -1;\n}\n\n/** @type {PEG.Pass} */\nfunction fixLibraryNumbers(ast, _options, session) {\n const check = visitor.build({\n library_ref(/** @type {PEG.ast.LibraryReference} */ node) {\n if (node.libraryNumber === -1) {\n node.libraryNumber = findLibraryNumber(ast, node.library);\n if (node.libraryNumber === -1) {\n session.error(\n `Unknown module \"${node.library}\"`,\n node.location\n );\n }\n }\n },\n });\n check(ast);\n}\n\nmodule.exports = fixLibraryNumbers;\n","\"use strict\";\n\n// Bytecode instruction opcodes.\nconst opcodes = {\n // Stack Manipulation\n\n /** @deprecated Unused */\n PUSH: 0, // PUSH c\n PUSH_EMPTY_STRING: 35, // PUSH_EMPTY_STRING\n PUSH_UNDEFINED: 1, // PUSH_UNDEFINED\n PUSH_NULL: 2, // PUSH_NULL\n PUSH_FAILED: 3, // PUSH_FAILED\n PUSH_EMPTY_ARRAY: 4, // PUSH_EMPTY_ARRAY\n PUSH_CURR_POS: 5, // PUSH_CURR_POS\n POP: 6, // POP\n POP_CURR_POS: 7, // POP_CURR_POS\n POP_N: 8, // POP_N n\n NIP: 9, // NIP\n APPEND: 10, // APPEND\n WRAP: 11, // WRAP n\n TEXT: 12, // TEXT\n PLUCK: 36, // PLUCK n, k, p1, ..., pK\n\n // Conditions and Loops\n\n IF: 13, // IF t, f\n IF_ERROR: 14, // IF_ERROR t, f\n IF_NOT_ERROR: 15, // IF_NOT_ERROR t, f\n IF_LT: 30, // IF_LT min, t, f\n IF_GE: 31, // IF_GE max, t, f\n IF_LT_DYNAMIC: 32, // IF_LT_DYNAMIC min, t, f\n IF_GE_DYNAMIC: 33, // IF_GE_DYNAMIC max, t, f\n WHILE_NOT_ERROR: 16, // WHILE_NOT_ERROR b\n\n // Matching\n\n MATCH_ANY: 17, // MATCH_ANY a, f, ...\n MATCH_STRING: 18, // MATCH_STRING s, a, f, ...\n MATCH_STRING_IC: 19, // MATCH_STRING_IC s, a, f, ...\n MATCH_CHAR_CLASS: 20, // MATCH_CHAR_CLASS c, a, f, ...\n MATCH_UNICODE_CLASS: 42, // MATCH_UNICODE_CLASS c, a, f, ...\n /** @deprecated Replaced with `MATCH_CHAR_CLASS` */\n MATCH_REGEXP: 20, // MATCH_REGEXP r, a, f, ...\n ACCEPT_N: 21, // ACCEPT_N n\n ACCEPT_STRING: 22, // ACCEPT_STRING s\n FAIL: 23, // FAIL e\n\n // Calls\n\n LOAD_SAVED_POS: 24, // LOAD_SAVED_POS p\n UPDATE_SAVED_POS: 25, // UPDATE_SAVED_POS\n CALL: 26, // CALL f, n, pc, p1, p2, ..., pN\n\n // Rules\n\n RULE: 27, // RULE r\n LIBRARY_RULE: 41, // LIBRARY_RULE moduleIndex, whatIndex\n\n // Failure Reporting\n\n SILENT_FAILS_ON: 28, // SILENT_FAILS_ON\n SILENT_FAILS_OFF: 29, // SILENT_FAILS_OFF\n\n // Because the tests have hard-coded opcode numbers, don't renumber\n // existing opcodes. New opcodes that have been put in the correct\n // sections above are repeated here in order to ensure we don't\n // reuse them.\n //\n // IF_LT: 30\n // IF_GE: 31\n // IF_LT_DYNAMIC: 32\n // IF_GE_DYNAMIC: 33\n // 34 reserved for @mingun\n // PUSH_EMPTY_STRING: 35\n // PLUCK: 36\n\n SOURCE_MAP_PUSH: 37, // SOURCE_MAP_PUSH loc-index\n SOURCE_MAP_POP: 38, // SOURCE_MAP_POP\n SOURCE_MAP_LABEL_PUSH: 39, // SOURCE_MAP_LABEL_PUSH sp, literal-index, loc-index\n SOURCE_MAP_LABEL_POP: 40, // SOURCE_MAP_LABEL_POP sp\n // LIBRARY_RULE: 41,\n // MATCH_UNICODE_CLASS: 42,\n};\n\nmodule.exports = opcodes;\n","// @ts-check\n\"use strict\";\n\n/**\n * Intern strings or objects, so there is only one copy of each, by value.\n * Objects may need to be converted to another representation before storing.\n * Each inputs corresponds to a number, starting with 0.\n *\n * @template [T=string],[V=T]\n */\nclass Intern {\n /**\n * @typedef {object} InternOptions\n * @property {(input: V) => string} [stringify=String] Represent the\n * converted input as a string, for value comparison.\n * @property {(input: T) => V} [convert=(x) => x] Convert the input to its\n * stored form. Required if type V is not the same as type T. Return\n * falsy value to have this input not be added; add() will return -1 in\n * this case.\n */\n\n /**\n * @param {InternOptions} [options]\n */\n constructor(options) {\n /** @type {Required<InternOptions>} */\n this.options = {\n stringify: String,\n convert: x => /** @type {V} */ (/** @type {unknown} */ (x)),\n ...options,\n };\n /** @type {V[]} */\n this.items = [];\n /** @type {Record<string, number>} */\n this.offsets = Object.create(null);\n }\n\n /**\n * Intern an item, getting it's asssociated number. Returns -1 for falsy\n * inputs. O(1) with constants tied to the convert and stringify options.\n *\n * @param {T} input\n * @return {number}\n */\n add(input) {\n const c = this.options.convert(input);\n if (!c) {\n return -1;\n }\n const s = this.options.stringify(c);\n let num = this.offsets[s];\n if (num === undefined) {\n num = this.items.push(c) - 1;\n this.offsets[s] = num;\n }\n return num;\n }\n\n /**\n * @param {number} i\n * @returns {V}\n */\n get(i) {\n return this.items[i];\n }\n\n /**\n * @template U\n * @param {(value: V, index: number, array: V[]) => U} fn\n * @returns {U[]}\n */\n map(fn) {\n return this.items.map(fn);\n }\n}\n\nmodule.exports = Intern;\n","\"use strict\";\n\nconst visitor = require(\"../visitor\");\nconst asts = require(\"../asts\");\nconst GrammarError = require(\"../../grammar-error\");\n\nconst ALWAYS_MATCH = 1;\nconst SOMETIMES_MATCH = 0;\nconst NEVER_MATCH = -1;\n\n// Inference match result of the each node. Can be:\n// -1: negative result, matching of that node always fails\n// 0: neutral result, may be fail, may be match\n// 1: positive result, always match\nfunction inferenceMatchResult(ast) {\n function sometimesMatch(node) { return (node.match = SOMETIMES_MATCH); }\n function alwaysMatch(node) {\n // eslint-disable-next-line no-use-before-define -- Mutual recursion\n inference(node.expression);\n\n return (node.match = ALWAYS_MATCH);\n }\n\n function inferenceExpression(node) {\n // eslint-disable-next-line no-use-before-define -- Mutual recursion\n return (node.match = inference(node.expression));\n }\n function inferenceElements(elements, forChoice) {\n const length = elements.length;\n let always = 0;\n let never = 0;\n\n for (let i = 0; i < length; ++i) {\n // eslint-disable-next-line no-use-before-define -- Mutual recursion\n const result = inference(elements[i]);\n\n if (result === ALWAYS_MATCH) { ++always; }\n if (result === NEVER_MATCH) { ++never; }\n }\n\n if (always === length) {\n return ALWAYS_MATCH;\n }\n if (forChoice) {\n return never === length ? NEVER_MATCH : SOMETIMES_MATCH;\n }\n\n return never > 0 ? NEVER_MATCH : SOMETIMES_MATCH;\n }\n\n const inference = visitor.build({\n rule(node) {\n // eslint-disable-next-line init-declarations\n let oldResult;\n let count = 0;\n\n // If property not yet calculated, do that\n if (typeof node.match === \"undefined\") {\n node.match = SOMETIMES_MATCH;\n do {\n oldResult = node.match;\n node.match = inference(node.expression);\n // 6 == 3! -- permutations count for all transitions from one match\n // state to another.\n // After 6 iterations the cycle with guarantee begins\n // For example, an input of `start = [] start` will generate the\n // sequence: 0 -> -1 -> -1 (then stop)\n //\n // A more complex grammar theoretically would generate the\n // sequence: 0 -> 1 -> 0 -> -1 -> 0 -> 1 -> ... (then cycle)\n // but there are no examples of such grammars yet (possible, they\n // do not exist at all)\n\n // istanbul ignore next This is canary test, shouldn't trigger in real life\n if (++count > 6) {\n throw new GrammarError(\n \"Infinity cycle detected when trying to evaluate node match result\",\n node.location\n );\n }\n } while (oldResult !== node.match);\n }\n\n return node.match;\n },\n named: inferenceExpression,\n choice(node) {\n return (node.match = inferenceElements(node.alternatives, true));\n },\n action: inferenceExpression,\n sequence(node) {\n return (node.match = inferenceElements(node.elements, false));\n },\n labeled: inferenceExpression,\n text: inferenceExpression,\n simple_and: inferenceExpression,\n simple_not(node) {\n return (node.match = -inference(node.expression));\n },\n optional: alwaysMatch,\n zero_or_more: alwaysMatch,\n one_or_more: inferenceExpression,\n repeated(node) {\n const match = inference(node.expression);\n const dMatch = node.delimiter ? inference(node.delimiter) : NEVER_MATCH;\n // If minimum is `null` it is equals to maximum (parsed from `|exact|` syntax)\n const min = node.min ? node.min : node.max;\n\n // If any boundary are variable - it can be negative, and it that case\n // node does not match, but it may be match with some other values\n if (min.type !== \"constant\" || node.max.type !== \"constant\") {\n return (node.match = SOMETIMES_MATCH);\n }\n // Now both boundaries is constants\n // If the upper boundary is zero or minimum exceeds maximum,\n // matching is impossible\n if (node.max.value === 0\n || (node.max.value !== null && min.value > node.max.value)\n ) {\n return (node.match = NEVER_MATCH);\n }\n\n if (match === NEVER_MATCH) {\n // If an expression always fails, a range will also always fail\n // (with the one exception - never matched expression repeated\n // zero times always match and returns an empty array).\n return (node.match = min.value === 0 ? ALWAYS_MATCH : NEVER_MATCH);\n }\n if (match === ALWAYS_MATCH) {\n if (node.delimiter && min.value >= 2) {\n // If an expression always match the final result determined only\n // by the delimiter, but delimiter used only when count of elements\n // two and more\n return (node.match = dMatch);\n }\n\n return (node.match = ALWAYS_MATCH);\n }\n\n // Here `match === SOMETIMES_MATCH`\n if (node.delimiter && min.value >= 2) {\n // If an expression always match the final result determined only\n // by the delimiter, but delimiter used only when count of elements\n // two and more\n return (\n // If a delimiter never match then the range also never match (because\n // there at least one delimiter)\n node.match = dMatch === NEVER_MATCH ? NEVER_MATCH : SOMETIMES_MATCH\n );\n }\n\n return (node.match = min.value === 0 ? ALWAYS_MATCH : SOMETIMES_MATCH);\n },\n group: inferenceExpression,\n semantic_and: sometimesMatch,\n semantic_not: sometimesMatch,\n rule_ref(node) {\n const rule = asts.findRule(ast, node.name);\n if (!rule) {\n return SOMETIMES_MATCH;\n }\n return (node.match = inference(rule));\n },\n library_ref() {\n // Can't look into pre-compiled rules.\n return 0;\n },\n literal(node) {\n // Empty literal always match on any input\n const match = node.value.length === 0 ? ALWAYS_MATCH : SOMETIMES_MATCH;\n\n return (node.match = match);\n },\n class(node) {\n // Empty character class never match on any input\n const match = node.parts.length === 0 ? NEVER_MATCH : SOMETIMES_MATCH;\n\n return (node.match = match);\n },\n // |any| not match on empty input\n any: sometimesMatch,\n });\n\n inference(ast);\n}\n\ninferenceMatchResult.ALWAYS_MATCH = ALWAYS_MATCH;\ninferenceMatchResult.SOMETIMES_MATCH = SOMETIMES_MATCH;\ninferenceMatchResult.NEVER_MATCH = NEVER_MATCH;\n\nmodule.exports = inferenceMatchResult;\n","// @ts-check\n\"use strict\";\n\nconst asts = require(\"../asts\");\nconst op = require(\"../opcodes\");\nconst visitor = require(\"../visitor\");\nconst Intern = require(\"../intern\");\nconst { ALWAYS_MATCH, SOMETIMES_MATCH, NEVER_MATCH } = require(\"./inference-match-result\");\n\n/**\n * @typedef {import(\"../../peg\")} PEG\n */\n\n// Generates bytecode.\n//\n// Instructions\n// ============\n//\n// Stack Manipulation\n// ------------------\n//\n// [35] PUSH_EMPTY_STRING\n//\n// stack.push(\"\");\n//\n// [1] PUSH_UNDEFINED\n//\n// stack.push(undefined);\n//\n// [2] PUSH_NULL\n//\n// stack.push(null);\n//\n// [3] PUSH_FAILED\n//\n// stack.push(FAILED);\n//\n// [4] PUSH_EMPTY_ARRAY\n//\n// stack.push([]);\n//\n// [5] PUSH_CURR_POS\n//\n// stack.push(currPos);\n//\n// [6] POP\n//\n// stack.pop();\n//\n// [7] POP_CURR_POS\n//\n// currPos = stack.pop();\n//\n// [8] POP_N n\n//\n// stack.pop(n);\n//\n// [9] NIP\n//\n// value = stack.pop();\n// stack.pop();\n// stack.push(value);\n//\n// [10] APPEND\n//\n// value = stack.pop();\n// array = stack.pop();\n// array.push(value);\n// stack.push(array);\n//\n// [11] WRAP n\n//\n// stack.push(stack.pop(n));\n//\n// [12] TEXT\n//\n// stack.push(input.substring(stack.pop(), currPos));\n//\n// [36] PLUCK n, k, p1, ..., pK\n//\n// value = [stack[p1], ..., stack[pK]]; // when k != 1\n// -or-\n// value = stack[p1]; // when k == 1\n//\n// stack.pop(n);\n// stack.push(value);\n//\n// Conditions and Loops\n// --------------------\n//\n// [13] IF t, f\n//\n// if (stack.top()) {\n// interpret(ip + 3, ip + 3 + t);\n// } else {\n// interpret(ip + 3 + t, ip + 3 + t + f);\n// }\n//\n// [14] IF_ERROR t, f\n//\n// if (stack.top() === FAILED) {\n// interpret(ip + 3, ip + 3 + t);\n// } else {\n// interpret(ip + 3 + t, ip + 3 + t + f);\n// }\n//\n// [15] IF_NOT_ERROR t, f\n//\n// if (stack.top() !== FAILED) {\n// interpret(ip + 3, ip + 3 + t);\n// } else {\n// interpret(ip + 3 + t, ip + 3 + t + f);\n// }\n//\n// [30] IF_LT min, t, f\n//\n// if (stack.top().length < min) {\n// interpret(ip + 3, ip + 3 + t);\n// } else {\n// interpret(ip + 3 + t, ip + 3 + t + f);\n// }\n//\n// [31] IF_GE max, t, f\n//\n// if (stack.top().length >= max) {\n// interpret(ip + 3, ip + 3 + t);\n// } else {\n// interpret(ip + 3 + t, ip + 3 + t + f);\n// }\n//\n// [32] IF_LT_DYNAMIC min, t, f\n//\n// if (stack.top().length < stack[min]) {\n// interpret(ip + 3, ip + 3 + t);\n// } else {\n// interpret(ip + 3 + t, ip + 3 + t + f);\n// }\n//\n// [33] IF_GE_DYNAMIC max, t, f\n//\n// if (stack.top().length >= stack[max]) {\n// interpret(ip + 3, ip + 3 + t);\n// } else {\n// interpret(ip + 3 + t, ip + 3 + t + f);\n// }\n//\n// [16] WHILE_NOT_ERROR b\n//\n// while(stack.top() !== FAILED) {\n// interpret(ip + 2, ip + 2 + b);\n// }\n//\n// Matching\n// --------\n//\n// [17] MATCH_ANY a, f, ...\n//\n// if (input.length > currPos) {\n// interpret(ip + 3, ip + 3 + a);\n// } else {\n// interpret(ip + 3 + a, ip + 3 + a + f);\n// }\n//\n// [18] MATCH_STRING s, a, f, ...\n//\n// if (input.substr(currPos, literals[s].length) === literals[s]) {\n// interpret(ip + 4, ip + 4 + a);\n// } else {\n// interpret(ip + 4 + a, ip + 4 + a + f);\n// }\n//\n// [19] MATCH_STRING_IC s, a, f, ...\n//\n// if (input.substr(currPos, literals[s].length).toLowerCase() === literals[s]) {\n// interpret(ip + 4, ip + 4 + a);\n// } else {\n// interpret(ip + 4 + a, ip + 4 + a + f);\n// }\n//\n// [20] MATCH_CHAR_CLASS c, a, f, ...\n//\n// if (classes[c].test(input.charAt(currPos))) {\n// interpret(ip + 4, ip + 4 + a);\n// } else {\n// interpret(ip + 4 + a, ip + 4 + a + f);\n// }\n//\n// [42] MATCH_UNICODE_CLASS c, a, f, ...\n//\n// if (classes[c].test(input.unicodeCharAt(currPos))) {\n// interpret(ip + 4, ip + 4 + a);\n// } else {\n// interpret(ip + 4 + a, ip + 4 + a + f);\n// }\n//\n// [21] ACCEPT_N n\n//\n// stack.push(input.substring(currPos, n));\n// currPos += n;\n//\n// [22] ACCEPT_STRING s\n//\n// stack.push(literals[s]);\n// currPos += literals[s].length;\n//\n// [23] FAIL e\n//\n// stack.push(FAILED);\n// fail(expectations[e]);\n//\n// Calls\n// -----\n//\n// [24] LOAD_SAVED_POS p\n//\n// savedPos = stack[p];\n//\n// [25] UPDATE_SAVED_POS\n//\n// savedPos = currPos;\n//\n// [26] CALL f, n, pc, p1, p2, ..., pN\n//\n// value = functions[f](stack[p1], ..., stack[pN]);\n// stack.pop(n);\n// stack.push(value);\n//\n// Rules\n// -----\n//\n// [27] RULE r\n//\n// stack.push(parseRule(r));\n//\n// [41] LIBRARY_RULE moduleIndex whatIndex\n//\n// stack.push(callLibrary(module, what));\n//\n// Failure Reporting\n// -----------------\n//\n// [28] SILENT_FAILS_ON\n//\n// silentFails++;\n//\n// [29] SILENT_FAILS_OFF\n//\n// silentFails--;\n//\n// Source Mapping\n// --------------\n//\n// [37] SOURCE_MAP_PUSH n\n//\n// Everything generated from here until the corresponding SOURCE_MAP_POP\n// will be wrapped in a SourceNode tagged with locations[n].\n//\n// [38] SOURCE_MAP_POP\n//\n// See above.\n//\n// [39] SOURCE_MAP_LABEL_PUSH sp, label, loc\n//\n// Mark that the stack location sp will be used to hold the value\n// of the label named literals[label], with location info locations[loc]\n//\n// [40] SOURCE_MAP_LABEL_POP sp\n//\n// End the region started by [39]\n//\n// This pass can use the results of other previous passes, each of which can\n// change the AST (and, as consequence, the bytecode).\n//\n// In particular, if the pass |inferenceMatchResult| has been run before this pass,\n// then each AST node will contain a |match| property, which represents a possible\n// match result of the node:\n// - `<0` - node is never matched, for example, `!('a'*)` (negation of the always\n// matched node). Generator can put |FAILED| to the stack immediately\n// - `=0` - sometimes node matched, sometimes not. This is the same behavior\n// when |match| is missed\n// - `>0` - node is always matched, for example, `'a'*` (because result is an\n// empty array, or an array with some elements). The generator does not\n// need to add a check for |FAILED|, because it is impossible\n//\n// To handle the situation, when the |inferenceMatchResult| has not run (that\n// happens, for example, in tests), the |match| value extracted using the\n// `|0` trick, which performing cast of any value to an integer with value `0`\n// that is equivalent of an unknown match result and signals the generator that\n// runtime check for the |FAILED| is required. Trick is explained on the\n// Wikipedia page (https://en.wikipedia.org/wiki/Asm.js#Code_generation)\n/**\n *\n * @param {PEG.ast.Grammar} ast\n * @param {PEG.ParserOptions} options\n */\nfunction generateBytecode(ast, options) {\n const literals = new Intern();\n /** @type Intern<PEG.ast.CharacterClass, PEG.ast.GrammarCharacterClass> */\n const classes = new Intern({\n stringify: JSON.stringify,\n /** @type {(input: PEG.ast.CharacterClass) => PEG.ast.GrammarCharacterClass} */\n convert: node => ({\n value: node.parts,\n inverted: node.inverted,\n ignoreCase: node.ignoreCase,\n unicode: node.unicode,\n }),\n });\n /** @type Intern<PEG.ast.GrammarExpectation> */\n const expectations = new Intern({\n stringify: JSON.stringify,\n });\n /**\n * @type {Intern<string | undefined, string>}\n */\n const importedNames = new Intern();\n /** @type PEG.ast.FunctionConst[] */\n const functions = [];\n /** @type PEG.LocationRange[] */\n const locations = [];\n\n /**\n * @param {boolean} predicate\n * @param {string[]} params\n * @param {{code:string; codeLocation: PEG.LocationRange}} node\n * @returns {number}\n */\n function addFunctionConst(predicate, params, node) {\n const func = {\n predicate,\n params,\n body: node.code,\n location: node.codeLocation,\n };\n const pattern = JSON.stringify(func);\n const index = functions.findIndex(f => JSON.stringify(f) === pattern);\n\n return index === -1 ? functions.push(func) - 1 : index;\n }\n\n /**\n * @param {PEG.LocationRange} location\n * @returns {number}\n */\n function addLocation(location) {\n // Don't bother de-duplicating. There can be a lot of locations,\n // they will almost never collide, and unlike the \"consts\" above,\n // it won't affect code generation even if they do.\n return locations.push(location) - 1;\n }\n\n /** @typedef {Record<string, number>} Env */\n /** @typedef {{ sp: number; env:Env; action:PEG.ast.Action|null; pluck?: number[] }} Context */\n\n /**\n * @param {Env} env\n * @returns {Env}\n */\n function cloneEnv(env) {\n /** @type {Env} */\n const clone = {};\n\n Object.keys(env).forEach(name => {\n clone[name] = env[name];\n });\n\n return clone;\n }\n\n /**\n * @param {number[]} first\n * @param {number[][]} args\n * @returns {number[]}\n */\n function buildSequence(first, ...args) {\n return first.concat(...args);\n }\n\n /**\n * @param {number} match\n * @param {number[]} condCode\n * @param {number[]} thenCode\n * @param {number[]} elseCode\n * @returns {number[]}\n */\n function buildCondition(match, condCode, thenCode, elseCode) {\n if (match === ALWAYS_MATCH) { return thenCode; }\n if (match === NEVER_MATCH) { return elseCode; }\n\n return condCode.concat(\n [thenCode.length, elseCode.length],\n thenCode,\n elseCode\n );\n }\n\n /**\n * @param {number[]} condCode\n * @param {number[]} bodyCode\n * @returns {number[]}\n */\n function buildLoop(condCode, bodyCode) {\n return condCode.concat([bodyCode.length], bodyCode);\n }\n\n /**\n * @param {number} functionIndex\n * @param {number} delta\n * @param {Env} env\n * @param {number} sp\n * @returns {number[]}\n */\n function buildCall(functionIndex, delta, env, sp) {\n const params = Object.keys(env).map(name => sp - env[name]);\n\n return [op.CALL, functionIndex, delta, params.length].concat(params);\n }\n\n /**\n * @template T\n * @param {PEG.ast.Expr<T>} expression\n * @param {boolean} negative\n * @param {Context} context\n * @returns {number[]}\n */\n function buildSimplePredicate(expression, negative, context) {\n const match = expression.match || 0;\n\n return buildSequence(\n [op.PUSH_CURR_POS],\n [op.SILENT_FAILS_ON],\n // eslint-disable-next-line no-use-before-define -- Mutual recursion\n generate(expression, {\n sp: context.sp + 1,\n env: cloneEnv(context.env),\n action: null,\n }),\n [op.SILENT_FAILS_OFF],\n buildCondition(\n negative ? -match : match,\n [negative ? op.IF_ERROR : op.IF_NOT_ERROR],\n buildSequence(\n [op.POP],\n [negative ? op.POP : op.POP_CURR_POS],\n [op.PUSH_UNDEFINED]\n ),\n buildSequence(\n [op.POP],\n [negative ? op.POP_CURR_POS : op.POP],\n [op.PUSH_FAILED]\n )\n )\n );\n }\n /**\n *\n * @param {PEG.ast.SemanticPredicate} node\n * @param {boolean} negative\n * @param {Context} context\n * @returns {number[]}\n */\n function buildSemanticPredicate(node, negative, context) {\n const functionIndex = addFunctionConst(\n true, Object.keys(context.env), node\n );\n\n return buildSequence(\n [op.UPDATE_SAVED_POS],\n buildCall(functionIndex, 0, context.env, context.sp),\n buildCondition(\n node.match || 0,\n [op.IF],\n buildSequence(\n [op.POP],\n negative ? [op.PUSH_FAILED] : [op.PUSH_UNDEFINED]\n ),\n buildSequence(\n [op.POP],\n negative ? [op.PUSH_UNDEFINED] : [op.PUSH_FAILED]\n )\n )\n );\n }\n\n /**\n * @param {number[]} expressionCode\n * @returns {number[]}\n */\n function buildAppendLoop(expressionCode) {\n return buildLoop(\n [op.WHILE_NOT_ERROR],\n buildSequence([op.APPEND], expressionCode)\n );\n }\n\n /**\n * @param {never} boundary\n * @returns {Error}\n */\n function unknownBoundary(boundary) {\n const b = /** @type {{ type: string }} */(boundary);\n return new Error(`Unknown boundary type \"${b.type}\" for the \"repeated\" node`);\n }\n\n /**\n *\n * @param {import(\"../../peg\").ast.RepeatedBoundary} boundary\n * @param {{ [label: string]: number}} env Mapping of label names to stack positions\n * @param {number} sp Number of the first free slot in the stack\n * @param {number} offset\n *\n * @returns {{ pre: number[], post: number[], sp: number}}\n * Bytecode that should be added before and after parsing and new\n * first free slot in the stack\n */\n function buildRangeCall(boundary, env, sp, offset) {\n switch (boundary.type) {\n case \"constant\":\n return { pre: [], post: [], sp };\n case \"variable\":\n boundary.sp = offset + sp - env[boundary.value];\n return { pre: [], post: [], sp };\n case \"function\": {\n boundary.sp = offset;\n\n const functionIndex = addFunctionConst(\n true,\n Object.keys(env),\n { code: boundary.value, codeLocation: boundary.codeLocation }\n );\n\n return {\n pre: buildCall(functionIndex, 0, env, sp),\n post: [op.NIP],\n // +1 for the function result\n sp: sp + 1,\n };\n }\n\n // istanbul ignore next Because we never generate invalid boundary type we cannot reach this branch\n default:\n throw unknownBoundary(boundary);\n }\n }\n\n /**\n * @param {number[]} expressionCode Bytecode for parsing repetitions\n * @param {import(\"../../peg\").ast.RepeatedBoundary} max Maximum boundary of repetitions.\n * If `null`, the maximum boundary is unlimited\n *\n * @returns {number[]} Bytecode that performs check of the maximum boundary\n */\n function buildCheckMax(expressionCode, max) {\n if (max.value !== null) {\n const checkCode = max.type === \"constant\"\n ? [op.IF_GE, max.value]\n : [op.IF_GE_DYNAMIC, max.sp || 0];\n\n // Push `peg$FAILED` - this break loop on next iteration, so |result|\n // will contains not more then |max| elements.\n return buildCondition(\n SOMETIMES_MATCH,\n checkCode, // if (r.length >= max) stack:[ [elem...] ]\n [op.PUSH_FAILED], // elem = peg$FAILED; stack:[ [elem...], peg$FAILED ]\n expressionCode // else\n ); // elem = expr(); stack:[ [elem...], elem ]\n }\n\n return expressionCode;\n }\n\n /* eslint capitalized-comments: \"off\" */\n /**\n * @param {number[]} expressionCode Bytecode for parsing repeated elements\n * @param {import(\"../../peg\").ast.RepeatedBoundary} min Minimum boundary of repetitions.\n * If `null`, the minimum boundary is zero\n *\n * @returns {number[]} Bytecode that performs check of the minimum boundary\n */\n function buildCheckMin(expressionCode, min) {\n const checkCode = min.type === \"constant\"\n ? [op.IF_LT, min.value]\n : [op.IF_LT_DYNAMIC, min.sp || 0];\n\n return buildSequence(\n expressionCode, // result = [elem...]; stack:[ pos, [elem...] ]\n buildCondition(\n SOMETIMES_MATCH,\n checkCode, // if (result.length < min) {\n /* eslint-disable @stylistic/indent -- Clarity */\n [op.POP, op.POP_CURR_POS, // currPos = savedPos; stack:[ ]\n op.PUSH_FAILED], // result = peg$FAILED; stack:[ peg$FAILED ]\n /* eslint-enable @stylistic/indent */\n [op.NIP] // } stack:[ [elem...] ]\n )\n );\n }\n /**\n *\n * @param {PEG.ast.Expression|null} delimiterNode\n * @param {number} expressionMatch\n * @param {number[]} expressionCode\n * @param {Context} context\n * @param {number} offset\n * @returns {number[]}\n */\n function buildRangeBody(\n delimiterNode,\n expressionMatch,\n expressionCode,\n context,\n offset\n ) {\n if (delimiterNode) {\n return buildSequence( // stack:[ ]\n [op.PUSH_CURR_POS], // pos = peg$currPos; stack:[ pos ]\n // eslint-disable-next-line no-use-before-define -- Mutual recursion\n generate(delimiterNode, { // item = delim(); stack:[ pos, delim ]\n // +1 for the saved offset\n sp: context.sp + offset + 1,\n env: cloneEnv(context.env),\n action: null,\n }),\n buildCondition(\n delimiterNode.match || 0,\n [op.IF_NOT_ERROR], // if (item !== peg$FAILED) {\n buildSequence(\n [op.POP], // stack:[ pos ]\n expressionCode, // item = expr(); stack:[ pos, item ]\n buildCondition(\n -expressionMatch,\n [op.IF_ERROR], // if (item === peg$FAILED) {\n // If element FAILED, rollback currPos to saved value.\n /* eslint-disable @stylistic/indent -- Clarity */\n [op.POP, // stack:[ pos ]\n op.POP_CURR_POS, // peg$currPos = pos; stack:[ ]\n op.PUSH_FAILED], // item = peg$FAILED; stack:[ peg$FAILED ]\n /* eslint-enable @stylistic/indent */\n // Else, just drop saved currPos.\n [op.NIP] // } stack:[ item ]\n )\n ), // }\n // If delimiter FAILED, currPos not changed, so just drop it.\n [op.NIP] // stack:[ peg$FAILED ]\n ) // stack:[ <?> ]\n );\n }\n\n return expressionCode;\n }\n\n /**\n * @param {PEG.compiler.visitor.NodeTypes} generators\n * @returns {PEG.compiler.visitor.AnyFunction}\n */\n function wrapGenerators(generators) {\n if (options && options.output === \"source-and-map\") {\n Object.keys(generators).forEach(name => {\n // @ts-ignore\n const generator = generators[name];\n // @ts-ignore\n generators[name] = function(node, ...args) {\n const generated = generator(node, ...args);\n // Some generators (\"grammar\" and \"rule\") don't return anything,\n // so don't bother wrapping their return values.\n if (generated === undefined || !node.location) {\n return generated;\n }\n return buildSequence(\n [\n op.SOURCE_MAP_PUSH,\n addLocation(node.location),\n ],\n generated,\n [\n op.SOURCE_MAP_POP,\n ]\n );\n };\n });\n }\n return visitor.build(generators);\n }\n\n const generate = wrapGenerators({\n grammar(node) {\n node.rules.forEach(generate);\n\n node.literals = literals.items;\n node.classes = classes.items;\n node.expectations = expectations.items;\n node.importedNames = importedNames.items;\n node.functions = functions;\n node.locations = locations;\n },\n\n rule(node) {\n node.bytecode = generate(node.expression, {\n sp: -1, // Stack pointer\n env: {}, // Mapping of label names to stack positions\n pluck: [], // Fields that have been picked\n action: null, // Action nodes pass themselves to children here\n });\n },\n\n named(node, context) {\n const match = node.match || 0;\n // Expectation not required if node always match\n const nameIndex = (match === ALWAYS_MATCH)\n ? -1\n : expectations.add({ type: \"rule\", value: node.name });\n\n // The code generated below is slightly suboptimal because |FAIL| pushes\n // to the stack, so we need to stick a |POP| in front of it. We lack a\n // dedicated instruction that would just report the failure and not touch\n // the stack.\n return buildSequence(\n [op.SILENT_FAILS_ON],\n generate(node.expression, context),\n [op.SILENT_FAILS_OFF],\n buildCondition(-match, [op.IF_ERROR], [op.FAIL, nameIndex], [])\n );\n },\n\n choice(node, context) {\n /**\n *\n * @param {PEG.ast.Expression[]} alternatives\n * @param {Context} context\n * @returns {number[]}\n */\n function buildAlternativesCode(alternatives, context) {\n const match = alternatives[0].match || 0;\n const first = generate(alternatives[0], {\n sp: context.sp,\n env: cloneEnv(context.env),\n action: null,\n });\n // If an alternative always match, no need to generate code for the next\n // alternatives. Because their will never tried to match, any side-effects\n // from next alternatives is impossible so we can skip their generation\n if (match === ALWAYS_MATCH) {\n return first;\n }\n\n // Even if an alternative never match it can have side-effects from\n // a semantic predicates or an actions, so we can not skip generation\n // of the first alternative.\n // We can do that when analysis for possible side-effects will be introduced\n return buildSequence(\n first,\n alternatives.length > 1\n ? buildCondition(\n SOMETIMES_MATCH,\n [op.IF_ERROR],\n buildSequence(\n [op.POP],\n buildAlternativesCode(alternatives.slice(1), context)\n ),\n []\n )\n : []\n );\n }\n\n return buildAlternativesCode(node.alternatives, context);\n },\n\n action(node, context) {\n const env = cloneEnv(context.env);\n const emitCall = node.expression.type !== \"sequence\"\n || node.expression.elements.length === 0;\n const expressionCode = generate(node.expression, {\n sp: context.sp + (emitCall ? 1 : 0),\n env,\n action: node,\n });\n const match = node.expression.match || 0;\n // Function only required if expression can match\n const functionIndex = emitCall && match !== NEVER_MATCH\n ? addFunctionConst(false, Object.keys(env), node)\n : -1;\n\n return emitCall\n ? buildSequence(\n [op.PUSH_CURR_POS],\n expressionCode,\n buildCondition(\n match,\n [op.IF_NOT_ERROR],\n buildSequence(\n [op.LOAD_SAVED_POS, 1],\n buildCall(functionIndex, 1, env, context.sp + 2)\n ),\n []\n ),\n [op.NIP]\n )\n : expressionCode;\n },\n\n sequence(node, context) {\n /**\n *\n * @param {PEG.ast.Expression[]} elements\n * @param {Context} context\n * @returns {number[]}\n */\n function buildElementsCode(elements, context) {\n if (elements.length > 0) {\n const processedCount = node.elements.length - elements.length + 1;\n\n return buildSequence(\n generate(elements[0], {\n sp: context.sp,\n env: context.env,\n pluck: context.pluck,\n action: null,\n }),\n buildCondition(\n elements[0].match || 0,\n [op.IF_NOT_ERROR],\n buildElementsCode(elements.slice(1), {\n sp: context.sp + 1,\n env: context.env,\n pluck: context.pluck,\n action: context.action,\n }),\n buildSequence(\n processedCount > 1 ? [op.POP_N, processedCount] : [op.POP],\n [op.POP_CURR_POS],\n [op.PUSH_FAILED]\n )\n )\n );\n } else {\n if (context.pluck && context.pluck.length > 0) {\n return buildSequence(\n [op.PLUCK, node.elements.length + 1, context.pluck.length],\n context.pluck.map(eSP => context.sp - eSP)\n );\n }\n\n if (context.action) {\n const functionIndex = addFunctionConst(\n false,\n Object.keys(context.env),\n context.action\n );\n\n return buildSequence(\n [op.LOAD_SAVED_POS, node.elements.length],\n buildCall(\n functionIndex,\n node.elements.length + 1,\n context.env,\n context.sp\n )\n );\n } else {\n return buildSequence([op.WRAP, node.elements.length], [op.NIP]);\n }\n }\n }\n\n return buildSequence(\n [op.PUSH_CURR_POS],\n buildElementsCode(node.elements, {\n sp: context.sp + 1,\n env: context.env,\n pluck: [],\n action: context.action,\n })\n );\n },\n\n labeled(node, context) {\n let env = context.env;\n const label = node.label;\n const sp = context.sp + 1;\n\n if (label) {\n env = cloneEnv(context.env);\n context.env[label] = sp;\n }\n\n if (node.pick) {\n context.pluck.push(sp);\n }\n\n const expression = generate(node.expression, {\n sp: context.sp,\n env,\n action: null,\n });\n\n if (label && node.labelLocation && options && options.output === \"source-and-map\") {\n return buildSequence(\n [\n op.SOURCE_MAP_LABEL_PUSH,\n sp,\n literals.add(label),\n addLocation(node.labelLocation),\n ],\n expression,\n [op.SOURCE_MAP_LABEL_POP, sp]\n );\n }\n return expression;\n },\n\n text(node, context) {\n return buildSequence(\n [op.PUSH_CURR_POS],\n generate(node.expression, {\n sp: context.sp + 1,\n env: cloneEnv(context.env),\n action: null,\n }),\n buildCondition(\n node.match || 0,\n [op.IF_NOT_ERROR],\n buildSequence([op.POP], [op.TEXT]),\n [op.NIP]\n )\n );\n },\n\n simple_and(node, context) {\n return buildSimplePredicate(node.expression, false, context);\n },\n\n simple_not(node, context) {\n return buildSimplePredicate(node.expression, true, context);\n },\n\n optional(node, context) {\n return buildSequence(\n generate(node.expression, {\n sp: context.sp,\n env: cloneEnv(context.env),\n action: null,\n }),\n buildCondition(\n // Check expression match, not the node match\n // If expression always match, no need to replace FAILED to NULL,\n // because FAILED will never appeared\n -(node.expression.match || 0),\n [op.IF_ERROR],\n buildSequence([op.POP], [op.PUSH_NULL]),\n []\n )\n );\n },\n\n zero_or_more(node, context) {\n const expressionCode = generate(node.expression, {\n sp: context.sp + 1,\n env: cloneEnv(context.env),\n action: null,\n });\n\n return buildSequence(\n [op.PUSH_EMPTY_ARRAY],\n expressionCode,\n buildAppendLoop(expressionCode),\n [op.POP]\n );\n },\n\n one_or_more(node, context) {\n const expressionCode = generate(node.expression, {\n sp: context.sp + 1,\n env: cloneEnv(context.env),\n action: null,\n });\n\n return buildSequence(\n [op.PUSH_EMPTY_ARRAY],\n expressionCode,\n buildCondition(\n // Condition depends on the expression match, not the node match\n node.expression.match || 0,\n [op.IF_NOT_ERROR],\n buildSequence(buildAppendLoop(expressionCode), [op.POP]),\n buildSequence([op.POP], [op.POP], [op.PUSH_FAILED])\n )\n );\n },\n\n repeated(node, context) {\n // Handle case when minimum was literally equals to maximum\n const min = node.min ? node.min : node.max;\n const hasMin = min.type !== \"constant\" || min.value > 0;\n const hasBoundedMax = node.max.type !== \"constant\" && node.max.value !== null;\n\n // +1 for the result slot with an array\n // +1 if we have non-constant (i.e. potentially non-zero) or non-zero minimum\n // for the position before match for backtracking\n const offset = hasMin ? 2 : 1;\n\n // Do not generate function for \"minimum\" if grammar used `exact` syntax\n const minCode = node.min\n ? buildRangeCall(\n node.min,\n context.env,\n context.sp,\n // +1 for the result slot with an array\n // +1 for the saved position\n // +1 if we have a \"function\" maximum it occupies an additional slot in the stack\n 2 + (node.max.type === \"function\" ? 1 : 0)\n )\n : { pre: [], post: [], sp: context.sp };\n const maxCode = buildRangeCall(node.max, context.env, minCode.sp, offset);\n\n const firstExpressionCode = generate(node.expression, {\n sp: maxCode.sp + offset,\n env: cloneEnv(context.env),\n action: null,\n });\n const expressionCode = node.delimiter !== null\n ? generate(node.expression, {\n // +1 for the saved position before parsing the `delimiter elem` pair\n sp: maxCode.sp + offset + 1,\n env: cloneEnv(context.env),\n action: null,\n })\n : firstExpressionCode;\n const bodyCode = buildRangeBody(\n node.delimiter,\n node.expression.match || 0,\n expressionCode,\n context,\n offset\n );\n // Check the high boundary, if it is defined.\n const checkMaxCode = buildCheckMax(bodyCode, node.max);\n // For dynamic high boundary we need check the first iteration, because the result can be\n // empty. Constant boundaries does not require that check, because they are always >=1\n const firstElemCode = hasBoundedMax\n ? buildCheckMax(firstExpressionCode, node.max)\n : firstExpressionCode;\n const mainLoopCode = buildSequence(\n // If the low boundary present, then backtracking is possible, so save the current pos\n hasMin ? [op.PUSH_CURR_POS] : [], // var savedPos = curPos; stack:[ pos ]\n [op.PUSH_EMPTY_ARRAY], // var result = []; stack:[ pos, [] ]\n firstElemCode, // var elem = expr(); stack:[ pos, [], elem ]\n buildAppendLoop(checkMaxCode), // while(...)r.push(elem); stack:[ pos, [...], elem|peg$FAILED ]\n [op.POP] // stack:[ pos, [...] ] (pop elem===`peg$FAILED`)\n );\n\n return buildSequence(\n minCode.pre,\n maxCode.pre,\n // Check the low boundary, if it is defined and not |0|.\n hasMin\n ? buildCheckMin(mainLoopCode, min)\n : mainLoopCode,\n maxCode.post,\n minCode.post\n );\n },\n\n group(node, context) {\n return generate(node.expression, {\n sp: context.sp,\n env: cloneEnv(context.env),\n action: null,\n });\n },\n\n semantic_and(node, context) {\n return buildSemanticPredicate(node, false, context);\n },\n\n semantic_not(node, context) {\n return buildSemanticPredicate(node, true, context);\n },\n\n rule_ref(node) {\n return [op.RULE, asts.indexOfRule(ast, node.name)];\n },\n\n library_ref(node) {\n return [\n op.LIBRARY_RULE,\n node.libraryNumber,\n importedNames.add(node.name),\n ];\n },\n\n literal(node) {\n if (node.value.length > 0) {\n const match = node.match || 0;\n // String only required if condition is generated or string is\n // case-sensitive and node always match\n const needConst = match === SOMETIMES_MATCH\n || (match === ALWAYS_MATCH && !node.ignoreCase);\n const stringIndex = needConst\n ? literals.add(\n node.ignoreCase ? node.value.toLowerCase() : node.value\n )\n : -1;\n // Expectation not required if node always match\n const expectedIndex = (match !== ALWAYS_MATCH)\n ? expectations.add({\n type: \"literal\",\n value: node.value,\n ignoreCase: node.ignoreCase,\n })\n : -1;\n\n // For case-sensitive strings the value must match the beginning of the\n // remaining input exactly. As a result, we can use |ACCEPT_STRING| and\n // save one |substr| call that would be needed if we used |ACCEPT_N|.\n return buildCondition(\n match,\n node.ignoreCase\n ? [op.MATCH_STRING_IC, stringIndex]\n : [op.MATCH_STRING, stringIndex],\n node.ignoreCase\n ? [op.ACCEPT_N, node.value.length]\n : [op.ACCEPT_STRING, stringIndex],\n [op.FAIL, expectedIndex]\n );\n }\n\n return [op.PUSH_EMPTY_STRING];\n },\n\n class(node) {\n const match = node.match || 0;\n // Character class constant only required if condition is generated\n const classIndex = match === SOMETIMES_MATCH ? classes.add(node) : -1;\n // Expectation not required if node always match\n const expectedIndex = (match !== ALWAYS_MATCH)\n ? expectations.add({\n type: \"class\",\n value: node.parts,\n inverted: node.inverted,\n ignoreCase: node.ignoreCase,\n unicode: node.unicode,\n })\n : -1;\n\n return buildCondition(\n match,\n [\n node.unicode ? op.MATCH_UNICODE_CLASS : op.MATCH_CHAR_CLASS,\n classIndex,\n ],\n [op.ACCEPT_N, node.unicode ? -1 : 1],\n [op.FAIL, expectedIndex]\n );\n },\n\n any(node) {\n const match = node.match || 0;\n // Expectation not required if node always match\n const expectedIndex = (match !== ALWAYS_MATCH)\n ? expectations.add({\n type: \"any\",\n })\n : -1;\n\n return buildCondition(\n match,\n [op.MATCH_ANY],\n [op.ACCEPT_N, 1],\n [op.FAIL, expectedIndex]\n );\n },\n });\n\n generate(ast);\n}\n\nmodule.exports = generateBytecode;\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nconst intToCharMap =\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\".split(\"\");\n\n/**\n * Encode an integer in the range of 0 to 63 to a single base 64 digit.\n */\nexports.encode = function (number) {\n if (0 <= number && number < intToCharMap.length) {\n return intToCharMap[number];\n }\n throw new TypeError(\"Must be between 0 and 63: \" + number);\n};\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n *\n * Based on the Base 64 VLQ implementation in Closure Compiler:\n * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java\n *\n * Copyright 2011 The Closure Compiler Authors. All rights reserved.\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following\n * disclaimer in the documentation and/or other materials provided\n * with the distribution.\n * * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived\n * from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nconst base64 = require(\"./base64\");\n\n// A single base 64 digit can contain 6 bits of data. For the base 64 variable\n// length quantities we use in the source map spec, the first bit is the sign,\n// the next four bits are the actual value, and the 6th bit is the\n// continuation bit. The continuation bit tells us whether there are more\n// digits in this value following this digit.\n//\n// Continuation\n// | Sign\n// | |\n// V V\n// 101011\n\nconst VLQ_BASE_SHIFT = 5;\n\n// binary: 100000\nconst VLQ_BASE = 1 << VLQ_BASE_SHIFT;\n\n// binary: 011111\nconst VLQ_BASE_MASK = VLQ_BASE - 1;\n\n// binary: 100000\nconst VLQ_CONTINUATION_BIT = VLQ_BASE;\n\n/**\n * Converts from a two-complement value to a value where the sign bit is\n * placed in the least significant bit. For example, as decimals:\n * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary)\n * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary)\n */\nfunction toVLQSigned(aValue) {\n return aValue < 0 ? (-aValue << 1) + 1 : (aValue << 1) + 0;\n}\n\n/**\n * Returns the base 64 VLQ encoded value.\n */\nexports.encode = function base64VLQ_encode(aValue) {\n let encoded = \"\";\n let digit;\n\n let vlq = toVLQSigned(aValue);\n\n do {\n digit = vlq & VLQ_BASE_MASK;\n vlq >>>= VLQ_BASE_SHIFT;\n if (vlq > 0) {\n // There are still more digits in this value, so we must make sure the\n // continuation bit is marked.\n digit |= VLQ_CONTINUATION_BIT;\n }\n encoded += base64.encode(digit);\n } while (vlq > 0);\n\n return encoded;\n};\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n/**\n * This is a helper function for getting values from parameter/options\n * objects.\n *\n * @param args The object we are extracting values from\n * @param name The name of the property we are getting.\n * @param defaultValue An optional value to return if the property is missing\n * from the object. If this is not specified and the property is missing, an\n * error will be thrown.\n */\nfunction getArg(aArgs, aName, aDefaultValue) {\n if (aName in aArgs) {\n return aArgs[aName];\n } else if (arguments.length === 3) {\n return aDefaultValue;\n }\n throw new Error('\"' + aName + '\" is a required argument.');\n}\nexports.getArg = getArg;\n\nconst supportsNullProto = (function () {\n const obj = Object.create(null);\n return !(\"__proto__\" in obj);\n})();\n\nfunction identity(s) {\n return s;\n}\n\n/**\n * Because behavior goes wacky when you set `__proto__` on objects, we\n * have to prefix all the strings in our set with an arbitrary character.\n *\n * See https://github.com/mozilla/source-map/pull/31 and\n * https://github.com/mozilla/source-map/issues/30\n *\n * @param String aStr\n */\nfunction toSetString(aStr) {\n if (isProtoString(aStr)) {\n return \"$\" + aStr;\n }\n\n return aStr;\n}\nexports.toSetString = supportsNullProto ? identity : toSetString;\n\nfunction fromSetString(aStr) {\n if (isProtoString(aStr)) {\n return aStr.slice(1);\n }\n\n return aStr;\n}\nexports.fromSetString = supportsNullProto ? identity : fromSetString;\n\nfunction isProtoString(s) {\n if (!s) {\n return false;\n }\n\n const length = s.length;\n\n if (length < 9 /* \"__proto__\".length */) {\n return false;\n }\n\n if (\n s.charCodeAt(length - 1) !== 95 /* '_' */ ||\n s.charCodeAt(length - 2) !== 95 /* '_' */ ||\n s.charCodeAt(length - 3) !== 111 /* 'o' */ ||\n s.charCodeAt(length - 4) !== 116 /* 't' */ ||\n s.charCodeAt(length - 5) !== 111 /* 'o' */ ||\n s.charCodeAt(length - 6) !== 114 /* 'r' */ ||\n s.charCodeAt(length - 7) !== 112 /* 'p' */ ||\n s.charCodeAt(length - 8) !== 95 /* '_' */ ||\n s.charCodeAt(length - 9) !== 95 /* '_' */\n ) {\n return false;\n }\n\n for (let i = length - 10; i >= 0; i--) {\n if (s.charCodeAt(i) !== 36 /* '$' */) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction strcmp(aStr1, aStr2) {\n if (aStr1 === aStr2) {\n return 0;\n }\n\n if (aStr1 === null) {\n return 1; // aStr2 !== null\n }\n\n if (aStr2 === null) {\n return -1; // aStr1 !== null\n }\n\n if (aStr1 > aStr2) {\n return 1;\n }\n\n return -1;\n}\n\n/**\n * Comparator between two mappings with inflated source and name strings where\n * the generated positions are compared.\n */\nfunction compareByGeneratedPositionsInflated(mappingA, mappingB) {\n let cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = strcmp(mappingA.source, mappingB.source);\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsInflated =\n compareByGeneratedPositionsInflated;\n\n// We use 'http' as the base here because we want URLs processed relative\n// to the safe base to be treated as \"special\" URLs during parsing using\n// the WHATWG URL parsing. This ensures that backslash normalization\n// applies to the path and such.\nconst PROTOCOL = \"http:\";\nconst PROTOCOL_AND_HOST = `${PROTOCOL}//host`;\n\n/**\n * Make it easy to create small utilities that tweak a URL's path.\n */\nfunction createSafeHandler(cb) {\n return input => {\n const type = getURLType(input);\n const base = buildSafeBase(input);\n const url = new URL(input, base);\n\n cb(url);\n\n const result = url.toString();\n\n if (type === \"absolute\") {\n return result;\n } else if (type === \"scheme-relative\") {\n return result.slice(PROTOCOL.length);\n } else if (type === \"path-absolute\") {\n return result.slice(PROTOCOL_AND_HOST.length);\n }\n\n // This assumes that the callback will only change\n // the path, search and hash values.\n return computeRelativeURL(base, result);\n };\n}\n\nfunction withBase(url, base) {\n return new URL(url, base).toString();\n}\n\nfunction buildUniqueSegment(prefix, str) {\n let id = 0;\n do {\n const ident = prefix + id++;\n if (str.indexOf(ident) === -1) return ident;\n } while (true);\n}\n\nfunction buildSafeBase(str) {\n const maxDotParts = str.split(\"..\").length - 1;\n\n // If we used a segment that also existed in `str`, then we would be unable\n // to compute relative paths. For example, if `segment` were just \"a\":\n //\n // const url = \"../../a/\"\n // const base = buildSafeBase(url); // http://host/a/a/\n // const joined = \"http://host/a/\";\n // const result = relative(base, joined);\n //\n // Expected: \"../../a/\";\n // Actual: \"a/\"\n //\n const segment = buildUniqueSegment(\"p\", str);\n\n let base = `${PROTOCOL_AND_HOST}/`;\n for (let i = 0; i < maxDotParts; i++) {\n base += `${segment}/`;\n }\n return base;\n}\n\nconst ABSOLUTE_SCHEME = /^[A-Za-z0-9\\+\\-\\.]+:/;\nfunction getURLType(url) {\n if (url[0] === \"/\") {\n if (url[1] === \"/\") return \"scheme-relative\";\n return \"path-absolute\";\n }\n\n return ABSOLUTE_SCHEME.test(url) ? \"absolute\" : \"path-relative\";\n}\n\n/**\n * Given two URLs that are assumed to be on the same\n * protocol/host/user/password build a relative URL from the\n * path, params, and hash values.\n *\n * @param rootURL The root URL that the target will be relative to.\n * @param targetURL The target that the relative URL points to.\n * @return A rootURL-relative, normalized URL value.\n */\nfunction computeRelativeURL(rootURL, targetURL) {\n if (typeof rootURL === \"string\") rootURL = new URL(rootURL);\n if (typeof targetURL === \"string\") targetURL = new URL(targetURL);\n\n const targetParts = targetURL.pathname.split(\"/\");\n const rootParts = rootURL.pathname.split(\"/\");\n\n // If we've got a URL path ending with a \"/\", we remove it since we'd\n // otherwise be relative to the wrong location.\n if (rootParts.length > 0 && !rootParts[rootParts.length - 1]) {\n rootParts.pop();\n }\n\n while (\n targetParts.length > 0 &&\n rootParts.length > 0 &&\n targetParts[0] === rootParts[0]\n ) {\n targetParts.shift();\n rootParts.shift();\n }\n\n const relativePath = rootParts\n .map(() => \"..\")\n .concat(targetParts)\n .join(\"/\");\n\n return relativePath + targetURL.search + targetURL.hash;\n}\n\n/**\n * Given a URL, ensure that it is treated as a directory URL.\n *\n * @param url\n * @return A normalized URL value.\n */\nconst ensureDirectory = createSafeHandler(url => {\n url.pathname = url.pathname.replace(/\\/?$/, \"/\");\n});\n\n/**\n * Normalize a given URL.\n * * Convert backslashes.\n * * Remove any \"..\" and \".\" segments.\n *\n * @param url\n * @return A normalized URL value.\n */\nconst normalize = createSafeHandler(url => {});\nexports.normalize = normalize;\n\n/**\n * Joins two paths/URLs.\n *\n * All returned URLs will be normalized.\n *\n * @param aRoot The root path or URL. Assumed to reference a directory.\n * @param aPath The path or URL to be joined with the root.\n * @return A joined and normalized URL value.\n */\nfunction join(aRoot, aPath) {\n const pathType = getURLType(aPath);\n const rootType = getURLType(aRoot);\n\n aRoot = ensureDirectory(aRoot);\n\n if (pathType === \"absolute\") {\n return withBase(aPath, undefined);\n }\n if (rootType === \"absolute\") {\n return withBase(aPath, aRoot);\n }\n\n if (pathType === \"scheme-relative\") {\n return normalize(aPath);\n }\n if (rootType === \"scheme-relative\") {\n return withBase(aPath, withBase(aRoot, PROTOCOL_AND_HOST)).slice(\n PROTOCOL.length\n );\n }\n\n if (pathType === \"path-absolute\") {\n return normalize(aPath);\n }\n if (rootType === \"path-absolute\") {\n return withBase(aPath, withBase(aRoot, PROTOCOL_AND_HOST)).slice(\n PROTOCOL_AND_HOST.length\n );\n }\n\n const base = buildSafeBase(aPath + aRoot);\n const newPath = withBase(aPath, withBase(aRoot, base));\n return computeRelativeURL(base, newPath);\n}\nexports.join = join;\n\n/**\n * Make a path relative to a URL or another path. If returning a\n * relative URL is not possible, the original target will be returned.\n * All returned URLs will be normalized.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be made relative to aRoot.\n * @return A rootURL-relative (if possible), normalized URL value.\n */\nfunction relative(rootURL, targetURL) {\n const result = relativeIfPossible(rootURL, targetURL);\n\n return typeof result === \"string\" ? result : normalize(targetURL);\n}\nexports.relative = relative;\n\nfunction relativeIfPossible(rootURL, targetURL) {\n const urlType = getURLType(rootURL);\n if (urlType !== getURLType(targetURL)) {\n return null;\n }\n\n const base = buildSafeBase(rootURL + targetURL);\n const root = new URL(rootURL, base);\n const target = new URL(targetURL, base);\n\n try {\n new URL(\"\", target.toString());\n } catch (_err) {\n // Bail if the URL doesn't support things being relative to it,\n // For example, data: and blob: URLs.\n return null;\n }\n\n if (\n target.protocol !== root.protocol ||\n target.user !== root.user ||\n target.password !== root.password ||\n target.hostname !== root.hostname ||\n target.port !== root.port\n ) {\n return null;\n }\n\n return computeRelativeURL(root, target);\n}\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n/**\n * A data structure which is a combination of an array and a set. Adding a new\n * member is O(1), testing for membership is O(1), and finding the index of an\n * element is O(1). Removing elements from the set is not supported. Only\n * strings are supported for membership.\n */\nclass ArraySet {\n constructor() {\n this._array = [];\n this._set = new Map();\n }\n\n /**\n * Static method for creating ArraySet instances from an existing array.\n */\n static fromArray(aArray, aAllowDuplicates) {\n const set = new ArraySet();\n for (let i = 0, len = aArray.length; i < len; i++) {\n set.add(aArray[i], aAllowDuplicates);\n }\n return set;\n }\n\n /**\n * Return how many unique items are in this ArraySet. If duplicates have been\n * added, than those do not count towards the size.\n *\n * @returns Number\n */\n size() {\n return this._set.size;\n }\n\n /**\n * Add the given string to this set.\n *\n * @param String aStr\n */\n add(aStr, aAllowDuplicates) {\n const isDuplicate = this.has(aStr);\n const idx = this._array.length;\n if (!isDuplicate || aAllowDuplicates) {\n this._array.push(aStr);\n }\n if (!isDuplicate) {\n this._set.set(aStr, idx);\n }\n }\n\n /**\n * Is the given string a member of this set?\n *\n * @param String aStr\n */\n has(aStr) {\n return this._set.has(aStr);\n }\n\n /**\n * What is the index of the given string in the array?\n *\n * @param String aStr\n */\n indexOf(aStr) {\n const idx = this._set.get(aStr);\n if (idx >= 0) {\n return idx;\n }\n throw new Error('\"' + aStr + '\" is not in the set.');\n }\n\n /**\n * What is the element at the given index?\n *\n * @param Number aIdx\n */\n at(aIdx) {\n if (aIdx >= 0 && aIdx < this._array.length) {\n return this._array[aIdx];\n }\n throw new Error(\"No element indexed by \" + aIdx);\n }\n\n /**\n * Returns the array representation of this set (which has the proper indices\n * indicated by indexOf). Note that this is a copy of the internal array used\n * for storing the members so that no one can mess with internal state.\n */\n toArray() {\n return this._array.slice();\n }\n}\nexports.ArraySet = ArraySet;\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2014 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nconst util = require(\"./util\");\n\n/**\n * Determine whether mappingB is after mappingA with respect to generated\n * position.\n */\nfunction generatedPositionAfter(mappingA, mappingB) {\n // Optimized for most common case\n const lineA = mappingA.generatedLine;\n const lineB = mappingB.generatedLine;\n const columnA = mappingA.generatedColumn;\n const columnB = mappingB.generatedColumn;\n return (\n lineB > lineA ||\n (lineB == lineA && columnB >= columnA) ||\n util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0\n );\n}\n\n/**\n * A data structure to provide a sorted view of accumulated mappings in a\n * performance conscious manner. It trades a negligible overhead in general\n * case for a large speedup in case of mappings being added in order.\n */\nclass MappingList {\n constructor() {\n this._array = [];\n this._sorted = true;\n // Serves as infimum\n this._last = { generatedLine: -1, generatedColumn: 0 };\n }\n\n /**\n * Iterate through internal items. This method takes the same arguments that\n * `Array.prototype.forEach` takes.\n *\n * NOTE: The order of the mappings is NOT guaranteed.\n */\n unsortedForEach(aCallback, aThisArg) {\n this._array.forEach(aCallback, aThisArg);\n }\n\n /**\n * Add the given source mapping.\n *\n * @param Object aMapping\n */\n add(aMapping) {\n if (generatedPositionAfter(this._last, aMapping)) {\n this._last = aMapping;\n this._array.push(aMapping);\n } else {\n this._sorted = false;\n this._array.push(aMapping);\n }\n }\n\n /**\n * Returns the flat, sorted array of mappings. The mappings are sorted by\n * generated position.\n *\n * WARNING: This method returns internal data without copying, for\n * performance. The return value must NOT be mutated, and should be treated as\n * an immutable borrow. If you want to take ownership, you must make your own\n * copy.\n */\n toArray() {\n if (!this._sorted) {\n this._array.sort(util.compareByGeneratedPositionsInflated);\n this._sorted = true;\n }\n return this._array;\n }\n}\n\nexports.MappingList = MappingList;\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nconst base64VLQ = require(\"./base64-vlq\");\nconst util = require(\"./util\");\nconst ArraySet = require(\"./array-set\").ArraySet;\nconst MappingList = require(\"./mapping-list\").MappingList;\n\n/**\n * An instance of the SourceMapGenerator represents a source map which is\n * being built incrementally. You may pass an object with the following\n * properties:\n *\n * - file: The filename of the generated source.\n * - sourceRoot: A root for all relative URLs in this source map.\n */\nclass SourceMapGenerator {\n constructor(aArgs) {\n if (!aArgs) {\n aArgs = {};\n }\n this._file = util.getArg(aArgs, \"file\", null);\n this._sourceRoot = util.getArg(aArgs, \"sourceRoot\", null);\n this._skipValidation = util.getArg(aArgs, \"skipValidation\", false);\n this._sources = new ArraySet();\n this._names = new ArraySet();\n this._mappings = new MappingList();\n this._sourcesContents = null;\n }\n\n /**\n * Creates a new SourceMapGenerator based on a SourceMapConsumer\n *\n * @param aSourceMapConsumer The SourceMap.\n */\n static fromSourceMap(aSourceMapConsumer) {\n const sourceRoot = aSourceMapConsumer.sourceRoot;\n const generator = new SourceMapGenerator({\n file: aSourceMapConsumer.file,\n sourceRoot,\n });\n aSourceMapConsumer.eachMapping(function (mapping) {\n const newMapping = {\n generated: {\n line: mapping.generatedLine,\n column: mapping.generatedColumn,\n },\n };\n\n if (mapping.source != null) {\n newMapping.source = mapping.source;\n if (sourceRoot != null) {\n newMapping.source = util.relative(sourceRoot, newMapping.source);\n }\n\n newMapping.original = {\n line: mapping.originalLine,\n column: mapping.originalColumn,\n };\n\n if (mapping.name != null) {\n newMapping.name = mapping.name;\n }\n }\n\n generator.addMapping(newMapping);\n });\n aSourceMapConsumer.sources.forEach(function (sourceFile) {\n let sourceRelative = sourceFile;\n if (sourceRoot != null) {\n sourceRelative = util.relative(sourceRoot, sourceFile);\n }\n\n if (!generator._sources.has(sourceRelative)) {\n generator._sources.add(sourceRelative);\n }\n\n const content = aSourceMapConsumer.sourceContentFor(sourceFile);\n if (content != null) {\n generator.setSourceContent(sourceFile, content);\n }\n });\n return generator;\n }\n\n /**\n * Add a single mapping from original source line and column to the generated\n * source's line and column for this source map being created. The mapping\n * object should have the following properties:\n *\n * - generated: An object with the generated line and column positions.\n * - original: An object with the original line and column positions.\n * - source: The original source file (relative to the sourceRoot).\n * - name: An optional original token name for this mapping.\n */\n addMapping(aArgs) {\n const generated = util.getArg(aArgs, \"generated\");\n const original = util.getArg(aArgs, \"original\", null);\n let source = util.getArg(aArgs, \"source\", null);\n let name = util.getArg(aArgs, \"name\", null);\n\n if (!this._skipValidation) {\n this._validateMapping(generated, original, source, name);\n }\n\n if (source != null) {\n source = String(source);\n if (!this._sources.has(source)) {\n this._sources.add(source);\n }\n }\n\n if (name != null) {\n name = String(name);\n if (!this._names.has(name)) {\n this._names.add(name);\n }\n }\n\n this._mappings.add({\n generatedLine: generated.line,\n generatedColumn: generated.column,\n originalLine: original && original.line,\n originalColumn: original && original.column,\n source,\n name,\n });\n }\n\n /**\n * Set the source content for a source file.\n */\n setSourceContent(aSourceFile, aSourceContent) {\n let source = aSourceFile;\n if (this._sourceRoot != null) {\n source = util.relative(this._sourceRoot, source);\n }\n\n if (aSourceContent != null) {\n // Add the source content to the _sourcesContents map.\n // Create a new _sourcesContents map if the property is null.\n if (!this._sourcesContents) {\n this._sourcesContents = Object.create(null);\n }\n this._sourcesContents[util.toSetString(source)] = aSourceContent;\n } else if (this._sourcesContents) {\n // Remove the source file from the _sourcesContents map.\n // If the _sourcesContents map is empty, set the property to null.\n delete this._sourcesContents[util.toSetString(source)];\n if (Object.keys(this._sourcesContents).length === 0) {\n this._sourcesContents = null;\n }\n }\n }\n\n /**\n * Applies the mappings of a sub-source-map for a specific source file to the\n * source map being generated. Each mapping to the supplied source file is\n * rewritten using the supplied source map. Note: The resolution for the\n * resulting mappings is the minimium of this map and the supplied map.\n *\n * @param aSourceMapConsumer The source map to be applied.\n * @param aSourceFile Optional. The filename of the source file.\n * If omitted, SourceMapConsumer's file property will be used.\n * @param aSourceMapPath Optional. The dirname of the path to the source map\n * to be applied. If relative, it is relative to the SourceMapConsumer.\n * This parameter is needed when the two source maps aren't in the same\n * directory, and the source map to be applied contains relative source\n * paths. If so, those relative source paths need to be rewritten\n * relative to the SourceMapGenerator.\n */\n applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {\n let sourceFile = aSourceFile;\n // If aSourceFile is omitted, we will use the file property of the SourceMap\n if (aSourceFile == null) {\n if (aSourceMapConsumer.file == null) {\n throw new Error(\n \"SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, \" +\n 'or the source map\\'s \"file\" property. Both were omitted.'\n );\n }\n sourceFile = aSourceMapConsumer.file;\n }\n const sourceRoot = this._sourceRoot;\n // Make \"sourceFile\" relative if an absolute Url is passed.\n if (sourceRoot != null) {\n sourceFile = util.relative(sourceRoot, sourceFile);\n }\n // Applying the SourceMap can add and remove items from the sources and\n // the names array.\n const newSources =\n this._mappings.toArray().length > 0 ? new ArraySet() : this._sources;\n const newNames = new ArraySet();\n\n // Find mappings for the \"sourceFile\"\n this._mappings.unsortedForEach(function (mapping) {\n if (mapping.source === sourceFile && mapping.originalLine != null) {\n // Check if it can be mapped by the source map, then update the mapping.\n const original = aSourceMapConsumer.originalPositionFor({\n line: mapping.originalLine,\n column: mapping.originalColumn,\n });\n if (original.source != null) {\n // Copy mapping\n mapping.source = original.source;\n if (aSourceMapPath != null) {\n mapping.source = util.join(aSourceMapPath, mapping.source);\n }\n if (sourceRoot != null) {\n mapping.source = util.relative(sourceRoot, mapping.source);\n }\n mapping.originalLine = original.line;\n mapping.originalColumn = original.column;\n if (original.name != null) {\n mapping.name = original.name;\n }\n }\n }\n\n const source = mapping.source;\n if (source != null && !newSources.has(source)) {\n newSources.add(source);\n }\n\n const name = mapping.name;\n if (name != null && !newNames.has(name)) {\n newNames.add(name);\n }\n }, this);\n this._sources = newSources;\n this._names = newNames;\n\n // Copy sourcesContents of applied map.\n aSourceMapConsumer.sources.forEach(function (srcFile) {\n const content = aSourceMapConsumer.sourceContentFor(srcFile);\n if (content != null) {\n if (aSourceMapPath != null) {\n srcFile = util.join(aSourceMapPath, srcFile);\n }\n if (sourceRoot != null) {\n srcFile = util.relative(sourceRoot, srcFile);\n }\n this.setSourceContent(srcFile, content);\n }\n }, this);\n }\n\n /**\n * A mapping can have one of the three levels of data:\n *\n * 1. Just the generated position.\n * 2. The Generated position, original position, and original source.\n * 3. Generated and original position, original source, as well as a name\n * token.\n *\n * To maintain consistency, we validate that any new mapping being added falls\n * in to one of these categories.\n */\n _validateMapping(aGenerated, aOriginal, aSource, aName) {\n // When aOriginal is truthy but has empty values for .line and .column,\n // it is most likely a programmer error. In this case we throw a very\n // specific error message to try to guide them the right way.\n // For example: https://github.com/Polymer/polymer-bundler/pull/519\n if (\n aOriginal &&\n typeof aOriginal.line !== \"number\" &&\n typeof aOriginal.column !== \"number\"\n ) {\n throw new Error(\n \"original.line and original.column are not numbers -- you probably meant to omit \" +\n \"the original mapping entirely and only map the generated position. If so, pass \" +\n \"null for the original mapping instead of an object with empty or null values.\"\n );\n }\n\n if (\n aGenerated &&\n \"line\" in aGenerated &&\n \"column\" in aGenerated &&\n aGenerated.line > 0 &&\n aGenerated.column >= 0 &&\n !aOriginal &&\n !aSource &&\n !aName\n ) {\n // Case 1.\n } else if (\n aGenerated &&\n \"line\" in aGenerated &&\n \"column\" in aGenerated &&\n aOriginal &&\n \"line\" in aOriginal &&\n \"column\" in aOriginal &&\n aGenerated.line > 0 &&\n aGenerated.column >= 0 &&\n aOriginal.line > 0 &&\n aOriginal.column >= 0 &&\n aSource\n ) {\n // Cases 2 and 3.\n } else {\n throw new Error(\n \"Invalid mapping: \" +\n JSON.stringify({\n generated: aGenerated,\n source: aSource,\n original: aOriginal,\n name: aName,\n })\n );\n }\n }\n\n /**\n * Serialize the accumulated mappings in to the stream of base 64 VLQs\n * specified by the source map format.\n */\n _serializeMappings() {\n let previousGeneratedColumn = 0;\n let previousGeneratedLine = 1;\n let previousOriginalColumn = 0;\n let previousOriginalLine = 0;\n let previousName = 0;\n let previousSource = 0;\n let result = \"\";\n let next;\n let mapping;\n let nameIdx;\n let sourceIdx;\n\n const mappings = this._mappings.toArray();\n for (let i = 0, len = mappings.length; i < len; i++) {\n mapping = mappings[i];\n next = \"\";\n\n if (mapping.generatedLine !== previousGeneratedLine) {\n previousGeneratedColumn = 0;\n while (mapping.generatedLine !== previousGeneratedLine) {\n next += \";\";\n previousGeneratedLine++;\n }\n } else if (i > 0) {\n if (\n !util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])\n ) {\n continue;\n }\n next += \",\";\n }\n\n next += base64VLQ.encode(\n mapping.generatedColumn - previousGeneratedColumn\n );\n previousGeneratedColumn = mapping.generatedColumn;\n\n if (mapping.source != null) {\n sourceIdx = this._sources.indexOf(mapping.source);\n next += base64VLQ.encode(sourceIdx - previousSource);\n previousSource = sourceIdx;\n\n // lines are stored 0-based in SourceMap spec version 3\n next += base64VLQ.encode(\n mapping.originalLine - 1 - previousOriginalLine\n );\n previousOriginalLine = mapping.originalLine - 1;\n\n next += base64VLQ.encode(\n mapping.originalColumn - previousOriginalColumn\n );\n previousOriginalColumn = mapping.originalColumn;\n\n if (mapping.name != null) {\n nameIdx = this._names.indexOf(mapping.name);\n next += base64VLQ.encode(nameIdx - previousName);\n previousName = nameIdx;\n }\n }\n\n result += next;\n }\n\n return result;\n }\n\n _generateSourcesContent(aSources, aSourceRoot) {\n return aSources.map(function (source) {\n if (!this._sourcesContents) {\n return null;\n }\n if (aSourceRoot != null) {\n source = util.relative(aSourceRoot, source);\n }\n const key = util.toSetString(source);\n return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)\n ? this._sourcesContents[key]\n : null;\n }, this);\n }\n\n /**\n * Externalize the source map.\n */\n toJSON() {\n const map = {\n version: this._version,\n sources: this._sources.toArray(),\n names: this._names.toArray(),\n mappings: this._serializeMappings(),\n };\n if (this._file != null) {\n map.file = this._file;\n }\n if (this._sourceRoot != null) {\n map.sourceRoot = this._sourceRoot;\n }\n if (this._sourcesContents) {\n map.sourcesContent = this._generateSourcesContent(\n map.sources,\n map.sourceRoot\n );\n }\n\n return map;\n }\n\n /**\n * Render the source map being generated to a string.\n */\n toString() {\n return JSON.stringify(this.toJSON());\n }\n}\n\nSourceMapGenerator.prototype._version = 3;\nexports.SourceMapGenerator = SourceMapGenerator;\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nconst SourceMapGenerator = require(\"./source-map-generator\").SourceMapGenerator;\nconst util = require(\"./util\");\n\n// Matches a Windows-style `\\r\\n` newline or a `\\n` newline used by all other\n// operating systems these days (capturing the result).\nconst REGEX_NEWLINE = /(\\r?\\n)/;\n\n// Newline character code for charCodeAt() comparisons\nconst NEWLINE_CODE = 10;\n\n// Private symbol for identifying `SourceNode`s when multiple versions of\n// the source-map library are loaded. This MUST NOT CHANGE across\n// versions!\nconst isSourceNode = \"$$$isSourceNode$$$\";\n\n/**\n * SourceNodes provide a way to abstract over interpolating/concatenating\n * snippets of generated JavaScript source code while maintaining the line and\n * column information associated with the original source code.\n *\n * @param aLine The original line number.\n * @param aColumn The original column number.\n * @param aSource The original source's filename.\n * @param aChunks Optional. An array of strings which are snippets of\n * generated JS, or other SourceNodes.\n * @param aName The original identifier.\n */\nclass SourceNode {\n constructor(aLine, aColumn, aSource, aChunks, aName) {\n this.children = [];\n this.sourceContents = {};\n this.line = aLine == null ? null : aLine;\n this.column = aColumn == null ? null : aColumn;\n this.source = aSource == null ? null : aSource;\n this.name = aName == null ? null : aName;\n this[isSourceNode] = true;\n if (aChunks != null) this.add(aChunks);\n }\n\n /**\n * Creates a SourceNode from generated code and a SourceMapConsumer.\n *\n * @param aGeneratedCode The generated code\n * @param aSourceMapConsumer The SourceMap for the generated code\n * @param aRelativePath Optional. The path that relative sources in the\n * SourceMapConsumer should be relative to.\n */\n static fromStringWithSourceMap(\n aGeneratedCode,\n aSourceMapConsumer,\n aRelativePath\n ) {\n // The SourceNode we want to fill with the generated code\n // and the SourceMap\n const node = new SourceNode();\n\n // All even indices of this array are one line of the generated code,\n // while all odd indices are the newlines between two adjacent lines\n // (since `REGEX_NEWLINE` captures its match).\n // Processed fragments are accessed by calling `shiftNextLine`.\n const remainingLines = aGeneratedCode.split(REGEX_NEWLINE);\n let remainingLinesIndex = 0;\n const shiftNextLine = function () {\n const lineContents = getNextLine();\n // The last line of a file might not have a newline.\n const newLine = getNextLine() || \"\";\n return lineContents + newLine;\n\n function getNextLine() {\n return remainingLinesIndex < remainingLines.length\n ? remainingLines[remainingLinesIndex++]\n : undefined;\n }\n };\n\n // We need to remember the position of \"remainingLines\"\n let lastGeneratedLine = 1,\n lastGeneratedColumn = 0;\n\n // The generate SourceNodes we need a code range.\n // To extract it current and last mapping is used.\n // Here we store the last mapping.\n let lastMapping = null;\n let nextLine;\n\n aSourceMapConsumer.eachMapping(function (mapping) {\n if (lastMapping !== null) {\n // We add the code from \"lastMapping\" to \"mapping\":\n // First check if there is a new line in between.\n if (lastGeneratedLine < mapping.generatedLine) {\n // Associate first line with \"lastMapping\"\n addMappingWithCode(lastMapping, shiftNextLine());\n lastGeneratedLine++;\n lastGeneratedColumn = 0;\n // The remaining code is added without mapping\n } else {\n // There is no new line in between.\n // Associate the code between \"lastGeneratedColumn\" and\n // \"mapping.generatedColumn\" with \"lastMapping\"\n nextLine = remainingLines[remainingLinesIndex] || \"\";\n const code = nextLine.substr(\n 0,\n mapping.generatedColumn - lastGeneratedColumn\n );\n remainingLines[remainingLinesIndex] = nextLine.substr(\n mapping.generatedColumn - lastGeneratedColumn\n );\n lastGeneratedColumn = mapping.generatedColumn;\n addMappingWithCode(lastMapping, code);\n // No more remaining code, continue\n lastMapping = mapping;\n return;\n }\n }\n // We add the generated code until the first mapping\n // to the SourceNode without any mapping.\n // Each line is added as separate string.\n while (lastGeneratedLine < mapping.generatedLine) {\n node.add(shiftNextLine());\n lastGeneratedLine++;\n }\n if (lastGeneratedColumn < mapping.generatedColumn) {\n nextLine = remainingLines[remainingLinesIndex] || \"\";\n node.add(nextLine.substr(0, mapping.generatedColumn));\n remainingLines[remainingLinesIndex] = nextLine.substr(\n mapping.generatedColumn\n );\n lastGeneratedColumn = mapping.generatedColumn;\n }\n lastMapping = mapping;\n }, this);\n // We have processed all mappings.\n if (remainingLinesIndex < remainingLines.length) {\n if (lastMapping) {\n // Associate the remaining code in the current line with \"lastMapping\"\n addMappingWithCode(lastMapping, shiftNextLine());\n }\n // and add the remaining lines without any mapping\n node.add(remainingLines.splice(remainingLinesIndex).join(\"\"));\n }\n\n // Copy sourcesContent into SourceNode\n aSourceMapConsumer.sources.forEach(function (sourceFile) {\n const content = aSourceMapConsumer.sourceContentFor(sourceFile);\n if (content != null) {\n if (aRelativePath != null) {\n sourceFile = util.join(aRelativePath, sourceFile);\n }\n node.setSourceContent(sourceFile, content);\n }\n });\n\n return node;\n\n function addMappingWithCode(mapping, code) {\n if (mapping === null || mapping.source === undefined) {\n node.add(code);\n } else {\n const source = aRelativePath\n ? util.join(aRelativePath, mapping.source)\n : mapping.source;\n node.add(\n new SourceNode(\n mapping.originalLine,\n mapping.originalColumn,\n source,\n code,\n mapping.name\n )\n );\n }\n }\n }\n\n /**\n * Add a chunk of generated JS to this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n * SourceNode, or an array where each member is one of those things.\n */\n add(aChunk) {\n if (Array.isArray(aChunk)) {\n aChunk.forEach(function (chunk) {\n this.add(chunk);\n }, this);\n } else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n if (aChunk) {\n this.children.push(aChunk);\n }\n } else {\n throw new TypeError(\n \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" +\n aChunk\n );\n }\n return this;\n }\n\n /**\n * Add a chunk of generated JS to the beginning of this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n * SourceNode, or an array where each member is one of those things.\n */\n prepend(aChunk) {\n if (Array.isArray(aChunk)) {\n for (let i = aChunk.length - 1; i >= 0; i--) {\n this.prepend(aChunk[i]);\n }\n } else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n this.children.unshift(aChunk);\n } else {\n throw new TypeError(\n \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" +\n aChunk\n );\n }\n return this;\n }\n\n /**\n * Walk over the tree of JS snippets in this node and its children. The\n * walking function is called once for each snippet of JS and is passed that\n * snippet and the its original associated source's line/column location.\n *\n * @param aFn The traversal function.\n */\n walk(aFn) {\n let chunk;\n for (let i = 0, len = this.children.length; i < len; i++) {\n chunk = this.children[i];\n if (chunk[isSourceNode]) {\n chunk.walk(aFn);\n } else if (chunk !== \"\") {\n aFn(chunk, {\n source: this.source,\n line: this.line,\n column: this.column,\n name: this.name,\n });\n }\n }\n }\n\n /**\n * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between\n * each of `this.children`.\n *\n * @param aSep The separator.\n */\n join(aSep) {\n let newChildren;\n let i;\n const len = this.children.length;\n if (len > 0) {\n newChildren = [];\n for (i = 0; i < len - 1; i++) {\n newChildren.push(this.children[i]);\n newChildren.push(aSep);\n }\n newChildren.push(this.children[i]);\n this.children = newChildren;\n }\n return this;\n }\n\n /**\n * Call String.prototype.replace on the very right-most source snippet. Useful\n * for trimming whitespace from the end of a source node, etc.\n *\n * @param aPattern The pattern to replace.\n * @param aReplacement The thing to replace the pattern with.\n */\n replaceRight(aPattern, aReplacement) {\n const lastChild = this.children[this.children.length - 1];\n if (lastChild[isSourceNode]) {\n lastChild.replaceRight(aPattern, aReplacement);\n } else if (typeof lastChild === \"string\") {\n this.children[this.children.length - 1] = lastChild.replace(\n aPattern,\n aReplacement\n );\n } else {\n this.children.push(\"\".replace(aPattern, aReplacement));\n }\n return this;\n }\n\n /**\n * Set the source content for a source file. This will be added to the SourceMapGenerator\n * in the sourcesContent field.\n *\n * @param aSourceFile The filename of the source file\n * @param aSourceContent The content of the source file\n */\n setSourceContent(aSourceFile, aSourceContent) {\n this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;\n }\n\n /**\n * Walk over the tree of SourceNodes. The walking function is called for each\n * source file content and is passed the filename and source content.\n *\n * @param aFn The traversal function.\n */\n walkSourceContents(aFn) {\n for (let i = 0, len = this.children.length; i < len; i++) {\n if (this.children[i][isSourceNode]) {\n this.children[i].walkSourceContents(aFn);\n }\n }\n\n const sources = Object.keys(this.sourceContents);\n for (let i = 0, len = sources.length; i < len; i++) {\n aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);\n }\n }\n\n /**\n * Return the string representation of this source node. Walks over the tree\n * and concatenates all the various snippets together to one string.\n */\n toString() {\n let str = \"\";\n this.walk(function (chunk) {\n str += chunk;\n });\n return str;\n }\n\n /**\n * Returns the string representation of this source node along with a source\n * map.\n */\n toStringWithSourceMap(aArgs) {\n const generated = {\n code: \"\",\n line: 1,\n column: 0,\n };\n const map = new SourceMapGenerator(aArgs);\n let sourceMappingActive = false;\n let lastOriginalSource = null;\n let lastOriginalLine = null;\n let lastOriginalColumn = null;\n let lastOriginalName = null;\n this.walk(function (chunk, original) {\n generated.code += chunk;\n if (\n original.source !== null &&\n original.line !== null &&\n original.column !== null\n ) {\n if (\n lastOriginalSource !== original.source ||\n lastOriginalLine !== original.line ||\n lastOriginalColumn !== original.column ||\n lastOriginalName !== original.name\n ) {\n map.addMapping({\n source: original.source,\n original: {\n line: original.line,\n column: original.column,\n },\n generated: {\n line: generated.line,\n column: generated.column,\n },\n name: original.name,\n });\n }\n lastOriginalSource = original.source;\n lastOriginalLine = original.line;\n lastOriginalColumn = original.column;\n lastOriginalName = original.name;\n sourceMappingActive = true;\n } else if (sourceMappingActive) {\n map.addMapping({\n generated: {\n line: generated.line,\n column: generated.column,\n },\n });\n lastOriginalSource = null;\n sourceMappingActive = false;\n }\n for (let idx = 0, length = chunk.length; idx < length; idx++) {\n if (chunk.charCodeAt(idx) === NEWLINE_CODE) {\n generated.line++;\n generated.column = 0;\n // Mappings end at eol\n if (idx + 1 === length) {\n lastOriginalSource = null;\n sourceMappingActive = false;\n } else if (sourceMappingActive) {\n map.addMapping({\n source: original.source,\n original: {\n line: original.line,\n column: original.column,\n },\n generated: {\n line: generated.line,\n column: generated.column,\n },\n name: original.name,\n });\n }\n } else {\n generated.column++;\n }\n }\n });\n this.walkSourceContents(function (sourceFile, sourceContent) {\n map.setSourceContent(sourceFile, sourceContent);\n });\n\n return { code: generated.code, map };\n }\n}\n\nexports.SourceNode = SourceNode;\n","/*\n * Copyright 2009-2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE.txt or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\nexports.SourceMapGenerator =\n require(\"./lib/source-map-generator\").SourceMapGenerator;\nexports.SourceNode = require(\"./lib/source-node\").SourceNode;\n","// @ts-check\n\"use strict\";\n\nconst { SourceNode } = require(\"source-map-generator\");\nconst GrammarLocation = require(\"../grammar-location.js\");\n\n/**\n * @typedef {(string|SourceNode)[]} SourceArray\n */\n\n/** Utility class that helps generating code for C-like languages. */\nclass Stack {\n /**\n * Constructs the helper for tracking variable slots of the stack virtual machine\n *\n * @param {string} ruleName The name of rule that will be used in error messages\n * @param {string} varName The prefix for generated names of variables\n * @param {string} type The type of the variables. For JavaScript there are `var` or `let`\n * @param {number[]} bytecode Bytecode for error messages\n */\n constructor(ruleName, varName, type, bytecode) {\n /** Last used variable in the stack. */\n this.sp = -1;\n /** Maximum stack size. */\n this.maxSp = -1;\n this.varName = varName;\n this.ruleName = ruleName;\n this.type = type;\n this.bytecode = bytecode;\n /**\n * Map from stack index, to label targetting that index\n * @type {Record<number,{label:string,location:import(\"../peg.js\").LocationRange}>}\n */\n this.labels = {};\n /**\n * Stack of in-flight source mappings\n * @type {[SourceArray, number, PEG.LocationRange][]}\n */\n this.sourceMapStack = [];\n }\n\n /**\n * Returns name of the variable at the index `i`.\n *\n * @param {number} i Index for which name must be generated\n * @return {string} Generated name\n *\n * @throws {RangeError} If `i < 0`, which means a stack underflow (there are more `pop`s than `push`es)\n */\n name(i) {\n if (i < 0) {\n throw new RangeError(\n `Rule '${this.ruleName}': The variable stack underflow: attempt to use a variable '${this.varName}<x>' at an index ${i}.\\nBytecode: ${this.bytecode}`\n );\n }\n\n return this.varName + i;\n }\n\n /**\n *\n * @param {PEG.LocationRange} location\n * @param {SourceArray} chunks\n * @param {string} [name]\n * @returns\n */\n static sourceNode(location, chunks, name) {\n const start = GrammarLocation.offsetStart(location);\n return new SourceNode(\n start.line,\n start.column ? start.column - 1 : null,\n String(location.source),\n chunks,\n name\n );\n }\n\n /**\n * Assigns `exprCode` to the new variable in the stack, returns generated code.\n * As the result, the size of a stack increases on 1.\n *\n * @param {string} exprCode Any expression code that must be assigned to the new variable in the stack\n * @return {string|SourceNode} Assignment code\n */\n push(exprCode) {\n if (++this.sp > this.maxSp) { this.maxSp = this.sp; }\n\n const label = this.labels[this.sp];\n const code = [this.name(this.sp), \" = \", exprCode, \";\"];\n if (label) {\n if (this.sourceMapStack.length) {\n const sourceNode = Stack.sourceNode(\n label.location,\n code.splice(0, 2),\n label.label\n );\n const { parts, location } = this.sourceMapPopInternal();\n const newLoc = (location.start.offset < label.location.end.offset)\n ? {\n start: label.location.end,\n end: location.end,\n source: location.source,\n }\n : location;\n\n const outerNode = Stack.sourceNode(\n newLoc,\n code.concat(\"\\n\")\n );\n this.sourceMapStack.push([parts, parts.length + 1, location]);\n return new SourceNode(\n null,\n null,\n label.location.source,\n [sourceNode, outerNode]\n );\n } else {\n return Stack.sourceNode(\n label.location,\n code.concat(\"\\n\")\n );\n }\n }\n return code.join(\"\");\n }\n\n /**\n * @overload\n * @param {undefined} [n]\n * @return {string}\n */\n /**\n * @overload\n * @param {number} n\n * @return {string[]}\n */\n /**\n * Returns name or `n` names of the variable(s) from the top of the stack.\n *\n * @param {number} [n] Quantity of variables, which need to be removed from the stack\n * @returns {string[]|string} Generated name(s). If n is defined then it returns an\n * array of length `n`\n *\n * @throws {RangeError} If the stack underflow (there are more `pop`s than `push`es)\n */\n pop(n) {\n if (n !== undefined) {\n this.sp -= n;\n\n return Array.from({ length: n }, (_v, i) => this.name(this.sp + 1 + i));\n }\n\n return this.name(this.sp--);\n }\n\n /**\n * Returns name of the first free variable. The same as `index(0)`.\n *\n * @return {string} Generated name\n *\n * @throws {RangeError} If the stack is empty (there was no `push`'s yet)\n */\n top() { return this.name(this.sp); }\n\n /**\n * Returns name of the variable at index `i`.\n *\n * @param {number} i Index of the variable from top of the stack\n * @return {string} Generated name\n *\n * @throws {RangeError} If `i < 0` or more than the stack size\n */\n index(i) {\n if (i < 0) {\n throw new RangeError(\n `Rule '${this.ruleName}': The variable stack overflow: attempt to get a variable at a negative index ${i}.\\nBytecode: ${this.bytecode}`\n );\n }\n\n return this.name(this.sp - i);\n }\n\n /**\n * Returns variable name that contains result (bottom of the stack).\n *\n * @return {string} Generated name\n *\n * @throws {RangeError} If the stack is empty (there was no `push`es yet)\n */\n result() {\n if (this.maxSp < 0) {\n throw new RangeError(\n `Rule '${this.ruleName}': The variable stack is empty, can't get the result.\\nBytecode: ${this.bytecode}`\n );\n }\n\n return this.name(0);\n }\n\n /**\n * Returns defines of all used variables.\n *\n * @return {string} Generated define variable expression with the type `this.type`.\n * If the stack is empty, returns empty string\n */\n defines() {\n if (this.maxSp < 0) {\n return \"\";\n }\n\n return this.type + \" \" + Array.from({ length: this.maxSp + 1 }, (_v, i) => this.name(i)).join(\", \") + \";\";\n }\n\n /**\n * Checks that code in the `generateIf` and `generateElse` move the stack pointer in the same way.\n *\n * @template T\n * @param {number} pos Opcode number for error messages\n * @param {() => T} generateIf First function that works with this stack\n * @param {(() => T)|null} [generateElse] Second function that works with this stack\n * @return {T[]}\n *\n * @throws {Error} If `generateElse` is defined and the stack pointer moved differently in the\n * `generateIf` and `generateElse`\n */\n checkedIf(pos, generateIf, generateElse) {\n const baseSp = this.sp;\n\n const ifResult = generateIf();\n\n if (!generateElse) {\n return [ifResult];\n }\n const thenSp = this.sp;\n\n this.sp = baseSp;\n const elseResult = generateElse();\n\n if (thenSp !== this.sp) {\n throw new Error(\n \"Rule '\" + this.ruleName + \"', position \" + pos + \": \"\n + \"Branches of a condition can't move the stack pointer differently \"\n + \"(before: \" + baseSp + \", after then: \" + thenSp + \", after else: \" + this.sp + \"). \"\n + \"Bytecode: \" + this.bytecode\n );\n }\n return [ifResult, elseResult];\n }\n\n /**\n * Checks that code in the `generateBody` do not move stack pointer.\n *\n * @template T\n * @param {number} pos Opcode number for error messages\n * @param {() => T} generateBody Function that works with this stack\n * @return {T}\n *\n * @throws {Error} If `generateBody` move the stack pointer (if it contains unbalanced `push`es and `pop`s)\n */\n checkedLoop(pos, generateBody) {\n const baseSp = this.sp;\n\n const result = generateBody();\n\n if (baseSp !== this.sp) {\n throw new Error(\n \"Rule '\" + this.ruleName + \"', position \" + pos + \": \"\n + \"Body of a loop can't move the stack pointer \"\n + \"(before: \" + baseSp + \", after: \" + this.sp + \"). \"\n + \"Bytecode: \" + this.bytecode\n );\n }\n return result;\n }\n\n /**\n *\n * @param {SourceArray} parts\n * @param {PEG.LocationRange} location\n */\n sourceMapPush(parts, location) {\n if (this.sourceMapStack.length) {\n const top = this.sourceMapStack[this.sourceMapStack.length - 1];\n // If the current top of stack starts at the same location as\n // the about to be pushed item, we should update its start location to\n // be past the new one. Otherwise any code it generates will\n // get allocated to the inner node.\n if (top[2].start.offset === location.start.offset\n && top[2].end.offset > location.end.offset) {\n top[2] = {\n start: location.end,\n end: top[2].end,\n source: top[2].source,\n };\n }\n }\n this.sourceMapStack.push([\n parts,\n parts.length,\n location,\n ]);\n }\n\n /**\n * @returns {{parts:SourceArray,location:PEG.LocationRange}}\n */\n sourceMapPopInternal() {\n const elt = this.sourceMapStack.pop();\n if (!elt) {\n throw new RangeError(\n `Rule '${this.ruleName}': Attempting to pop an empty source map stack.\\nBytecode: ${this.bytecode}`\n );\n }\n const [\n parts,\n index,\n location,\n ] = elt;\n const chunks = parts.splice(index).map(\n chunk => (chunk instanceof SourceNode\n ? chunk\n : chunk + \"\\n\"\n )\n );\n if (chunks.length) {\n const start = GrammarLocation.offsetStart(location);\n parts.push(new SourceNode(\n start.line,\n start.column - 1,\n String(location.source),\n chunks\n ));\n }\n return { parts, location };\n }\n\n /**\n * @param {number} [offset]\n * @returns {[SourceArray, number, PEG.LocationRange]|undefined}\n */\n sourceMapPop(offset) {\n const { location } = this.sourceMapPopInternal();\n if (this.sourceMapStack.length\n && location.end.offset\n < this.sourceMapStack[this.sourceMapStack.length - 1][2].end.offset) {\n const { parts, location: outer } = this.sourceMapPopInternal();\n const newLoc = (outer.start.offset < location.end.offset)\n ? {\n start: location.end,\n end: outer.end,\n source: outer.source,\n }\n : outer;\n\n this.sourceMapStack.push([\n parts,\n parts.length + (offset || 0),\n newLoc,\n ]);\n }\n return undefined;\n }\n}\n\nmodule.exports = Stack;\n","// Generated by package-extract v3.1.5\n// Do not modify by hand.\n\n\"use strict\";\n\nexports.version = \"5.1.0\";\n","\"use strict\";\n\nfunction hex(ch) { return ch.codePointAt(0).toString(16).toUpperCase(); }\nexports.hex = hex;\n\nfunction stringEscape(s) {\n if (typeof s === \"object\") {\n return `\\\\\\\\${s.value}`;\n }\n // ECMA-262, 5th ed., 7.8.4: All characters may appear literally in a string\n // literal except for the closing quote character, backslash, carriage\n // return, line separator, paragraph separator, and line feed. Any character\n // may appear in the form of an escape sequence.\n //\n // For portability, we also escape all control and non-ASCII characters.\n return s\n .replace(/\\\\/g, \"\\\\\\\\\") // Backslash\n .replace(/\"/g, \"\\\\\\\"\") // Closing double quote\n .replace(/\\0/g, \"\\\\0\") // Null\n .replace(/\\x08/g, \"\\\\b\") // Backspace\n .replace(/\\t/g, \"\\\\t\") // Horizontal tab\n .replace(/\\n/g, \"\\\\n\") // Line feed\n .replace(/\\v/g, \"\\\\v\") // Vertical tab\n .replace(/\\f/g, \"\\\\f\") // Form feed\n .replace(/\\r/g, \"\\\\r\") // Carriage return\n .replace(/[\\u{10000}-\\u{10FFFF}]/gu, ch => `\\\\u{${hex(ch)}}`)\n .replace(/[\\x00-\\x0F]/g, ch => \"\\\\x0\" + hex(ch))\n .replace(/[\\x10-\\x1F\\x7F-\\xFF]/g, ch => \"\\\\x\" + hex(ch))\n .replace(/[\\u0100-\\u0FFF]/g, ch => \"\\\\u0\" + hex(ch))\n .replace(/[\\u1000-\\uFFFF]/g, ch => \"\\\\u\" + hex(ch));\n}\nexports.stringEscape = stringEscape;\n\nfunction regexpClassEscape(s) {\n if (typeof s === \"object\") {\n return `\\\\${s.value}`;\n }\n // Based on ECMA-262, 5th ed., 7.8.5 & 15.10.1.\n //\n // For portability, we also escape all control and non-ASCII characters.\n return s\n .replace(/\\\\/g, \"\\\\\\\\\") // Backslash\n .replace(/\\//g, \"\\\\/\") // Closing slash\n .replace(/]/g, \"\\\\]\") // Closing bracket\n .replace(/\\^/g, \"\\\\^\") // Caret\n .replace(/-/g, \"\\\\-\") // Dash\n .replace(/\\0/g, \"\\\\0\") // Null\n .replace(/\\x08/g, \"\\\\b\") // Backspace\n .replace(/\\t/g, \"\\\\t\") // Horizontal tab\n .replace(/\\n/g, \"\\\\n\") // Line feed\n .replace(/\\v/g, \"\\\\v\") // Vertical tab\n .replace(/\\f/g, \"\\\\f\") // Form feed\n .replace(/\\r/g, \"\\\\r\") // Carriage return\n .replace(/[\\x00-\\x0F]/g, ch => \"\\\\x0\" + hex(ch))\n .replace(/[\\x10-\\x1F\\x7F-\\xFF]/g, ch => \"\\\\x\" + hex(ch))\n .replace(/[\\u{10000}-\\u{10FFFF}]/gu, ch => \"\\\\u{\" + hex(ch) + \"}\")\n .replace(/[\\u0100-\\u0FFF]/g, ch => \"\\\\u0\" + hex(ch))\n .replace(/[\\u1000-\\uFFFF]/g, ch => \"\\\\u\" + hex(ch));\n}\nexports.regexpClassEscape = regexpClassEscape;\n\n/**\n * Base64 encode a Uint8Array. Needed for browser compatibility where\n * the Buffer class is not available.\n *\n * @param {Uint8Array} u8 Bytes to encode\n * @returns {string} Base64 encoded string\n */\nfunction base64(u8) {\n // Note: btoa has the worst API, and even mentioning Buffer here will\n // cause rollup to suck it in.\n\n // See RFC4648, sec. 4.\n // https://datatracker.ietf.org/doc/html/rfc4648#section-4\n const A = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n const rem = u8.length % 3;\n const len = u8.length - rem;\n let res = \"\";\n\n for (let i = 0; i < len; i += 3) {\n res += A[u8[i] >> 2];\n res += A[((u8[i] & 0x3) << 4) | (u8[i + 1] >> 4)];\n res += A[((u8[i + 1] & 0xf) << 2) | (u8[i + 2] >> 6)];\n res += A[u8[i + 2] & 0x3f];\n }\n if (rem === 1) {\n res += A[u8[len] >> 2];\n res += A[(u8[len] & 0x3) << 4];\n res += \"==\";\n } else if (rem === 2) {\n res += A[u8[len] >> 2];\n res += A[((u8[len] & 0x3) << 4) | (u8[len + 1] >> 4)];\n res += A[(u8[len + 1] & 0xf) << 2];\n res += \"=\";\n }\n\n return res;\n}\nexports.base64 = base64;\n\n/**\n * Is the given string exactly one unicode character long? Might be 1 or 2\n * JS chars in UTF-16.\n *\n * @param {string} s\n * @return {number} Codepoint of single char, or -1.\n */\nfunction codePointLen1(s) {\n const iter = s[Symbol.iterator]();\n const first = iter.next();\n if (first.done) {\n return -1;\n }\n const second = iter.next();\n if (!second.done) {\n return -1;\n }\n return first.value.codePointAt(0);\n}\nexports.codePointLen1 = codePointLen1;\n","// @generated by Peggy 5.1.0.\n//\n// https://peggyjs.org/\n\n\"use strict\";\n\n\nconst OPS_TO_PREFIXED_TYPES = {\n \"$\": \"text\",\n \"&\": \"simple_and\",\n \"!\": \"simple_not\",\n};\n\nconst OPS_TO_SUFFIXED_TYPES = {\n \"?\": \"optional\",\n \"*\": \"zero_or_more\",\n \"+\": \"one_or_more\",\n};\n\nconst OPS_TO_SEMANTIC_PREDICATE_TYPES = {\n \"&\": \"semantic_and\",\n \"!\": \"semantic_not\",\n};\n\nclass peg$SyntaxError extends SyntaxError {\n constructor(message, expected, found, location) {\n super(message);\n this.expected = expected;\n this.found = found;\n this.location = location;\n this.name = \"SyntaxError\";\n }\n\n format(sources) {\n let str = \"Error: \" + this.message;\n if (this.location) {\n let src = null;\n const st = sources.find(s => s.source === this.location.source);\n if (st) {\n src = st.text.split(/\\r\\n|\\n|\\r/g);\n }\n const s = this.location.start;\n const offset_s = (this.location.source && (typeof this.location.source.offset === \"function\"))\n ? this.location.source.offset(s)\n : s;\n const loc = this.location.source + \":\" + offset_s.line + \":\" + offset_s.column;\n if (src) {\n const e = this.location.end;\n const filler = \"\".padEnd(offset_s.line.toString().length, \" \");\n const line = src[s.line - 1];\n const last = s.line === e.line ? e.column : line.length + 1;\n const hatLen = (last - s.column) || 1;\n str += \"\\n --> \" + loc + \"\\n\"\n + filler + \" |\\n\"\n + offset_s.line + \" | \" + line + \"\\n\"\n + filler + \" | \" + \"\".padEnd(s.column - 1, \" \")\n + \"\".padEnd(hatLen, \"^\");\n } else {\n str += \"\\n at \" + loc;\n }\n }\n return str;\n }\n\n static buildMessage(expected, found) {\n function hex(ch) {\n return ch.codePointAt(0).toString(16).toUpperCase();\n }\n\n const nonPrintable = Object.prototype.hasOwnProperty.call(RegExp.prototype, \"unicode\")\n ? new RegExp(\"[\\\\p{C}\\\\p{Mn}\\\\p{Mc}]\", \"gu\")\n : null;\n function unicodeEscape(s) {\n if (nonPrintable) {\n return s.replace(nonPrintable, ch => \"\\\\u{\" + hex(ch) + \"}\");\n }\n return s;\n }\n\n function literalEscape(s) {\n return unicodeEscape(s\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\"/g, \"\\\\\\\"\")\n .replace(/\\0/g, \"\\\\0\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/[\\x00-\\x0F]/g, ch => \"\\\\x0\" + hex(ch))\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, ch => \"\\\\x\" + hex(ch)));\n }\n\n function classEscape(s) {\n return unicodeEscape(s\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\\]/g, \"\\\\]\")\n .replace(/\\^/g, \"\\\\^\")\n .replace(/-/g, \"\\\\-\")\n .replace(/\\0/g, \"\\\\0\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/[\\x00-\\x0F]/g, ch => \"\\\\x0\" + hex(ch))\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, ch => \"\\\\x\" + hex(ch)));\n }\n\n const DESCRIBE_EXPECTATION_FNS = {\n literal(expectation) {\n return \"\\\"\" + literalEscape(expectation.text) + \"\\\"\";\n },\n\n class(expectation) {\n const escapedParts = expectation.parts.map(\n part => (Array.isArray(part)\n ? classEscape(part[0]) + \"-\" + classEscape(part[1])\n : classEscape(part))\n );\n\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\" + (expectation.unicode ? \"u\" : \"\");\n },\n\n any() {\n return \"any character\";\n },\n\n end() {\n return \"end of input\";\n },\n\n other(expectation) {\n return expectation.description;\n },\n };\n\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n\n function describeExpected(expected) {\n const descriptions = expected.map(describeExpectation);\n descriptions.sort();\n\n if (descriptions.length > 0) {\n let j = 1;\n for (let i = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n\n default:\n return descriptions.slice(0, -1).join(\", \")\n + \", or \"\n + descriptions[descriptions.length - 1];\n }\n }\n\n function describeFound(found) {\n return found ? \"\\\"\" + literalEscape(found) + \"\\\"\" : \"end of input\";\n }\n\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n }\n}\n\nfunction peg$parse(input, options) {\n options = options !== undefined ? options : {};\n\n const peg$FAILED = {};\n const peg$source = options.grammarSource;\n\n const peg$startRuleFunctions = {\n Grammar: peg$parseGrammar,\n ImportsAndSource: peg$parseImportsAndSource,\n };\n let peg$startRuleFunction = peg$parseGrammar;\n\n const peg$c0 = \"import\";\n const peg$c1 = \";\";\n const peg$c2 = \",\";\n const peg$c3 = \"*\";\n const peg$c4 = \"as\";\n const peg$c5 = \"{\";\n const peg$c6 = \"}\";\n const peg$c7 = \"from\";\n const peg$c8 = \"=\";\n const peg$c9 = \"/\";\n const peg$c10 = \"@\";\n const peg$c11 = \":\";\n const peg$c12 = \"|\";\n const peg$c13 = \"..\";\n const peg$c14 = \"(\";\n const peg$c15 = \")\";\n const peg$c16 = \".\";\n const peg$c17 = \"\\n\";\n const peg$c18 = \"\\r\\n\";\n const peg$c19 = \"/*\";\n const peg$c20 = \"*/\";\n const peg$c21 = \"//\";\n const peg$c22 = \"\\\\\";\n const peg$c23 = \"i\";\n const peg$c24 = \"\\\"\";\n const peg$c25 = \"'\";\n const peg$c26 = \"[\";\n const peg$c27 = \"^\";\n const peg$c28 = \"]\";\n const peg$c29 = \"p\";\n const peg$c30 = \"_\";\n const peg$c31 = \"u\";\n const peg$c32 = \"-\";\n const peg$c33 = \"0\";\n const peg$c34 = \"b\";\n const peg$c35 = \"f\";\n const peg$c36 = \"n\";\n const peg$c37 = \"r\";\n const peg$c38 = \"t\";\n const peg$c39 = \"v\";\n const peg$c40 = \"x\";\n\n const peg$r0 = /^[!$&]/;\n const peg$r1 = /^[*-+?]/;\n const peg$r2 = /^[!&]/;\n const peg$r3 = /^[\\0-\\uD7FF\\uE000-\\uFFFF]/;\n const peg$r4 = /^[\\uD800-\\uDBFF]/;\n const peg$r5 = /^[\\uDC00-\\uDFFF]/;\n const peg$r6 = /^[\\uD800-\\uDFFF]/;\n const peg$r7 = /^[\\t\\v-\\f \\p{Zs}\\xA0\\uFEFF]/u;\n const peg$r8 = /^[\\n\\r\\u2028\\u2029]/;\n const peg$r9 = /^[\\r\\u2028-\\u2029]/;\n const peg$r10 = /^[\\p{ID_Start}_]/u;\n const peg$r11 = /^[$\\p{ID_Continue}]/u;\n const peg$r12 = /^[\\n\\r\"\\\\\\u2028-\\u2029]/;\n const peg$r13 = /^[\\n\\r'\\\\\\u2028-\\u2029]/;\n const peg$r14 = /^[a-z]/i;\n const peg$r15 = /^[\\n\\r\\\\-\\]\\u2028-\\u2029]/;\n const peg$r16 = /^[\"'\\\\]/;\n const peg$r17 = /^[0-9pux]/;\n const peg$r18 = /^[0-9]/;\n const peg$r19 = /^[0-9a-f]/i;\n const peg$r20 = /^[{}]/;\n\n const peg$e0 = peg$anyExpectation();\n const peg$e1 = peg$literalExpectation(\"import\", false);\n const peg$e2 = peg$literalExpectation(\";\", false);\n const peg$e3 = peg$literalExpectation(\",\", false);\n const peg$e4 = peg$literalExpectation(\"*\", false);\n const peg$e5 = peg$literalExpectation(\"as\", false);\n const peg$e6 = peg$literalExpectation(\"{\", false);\n const peg$e7 = peg$literalExpectation(\"}\", false);\n const peg$e8 = peg$literalExpectation(\"from\", false);\n const peg$e9 = peg$literalExpectation(\"=\", false);\n const peg$e10 = peg$literalExpectation(\"/\", false);\n const peg$e11 = peg$literalExpectation(\"@\", false);\n const peg$e12 = peg$literalExpectation(\":\", false);\n const peg$e13 = peg$classExpectation([\"!\", \"$\", \"&\"], false, false, false);\n const peg$e14 = peg$classExpectation([[\"*\", \"+\"], \"?\"], false, false, false);\n const peg$e15 = peg$literalExpectation(\"|\", false);\n const peg$e16 = peg$literalExpectation(\"..\", false);\n const peg$e17 = peg$literalExpectation(\"(\", false);\n const peg$e18 = peg$literalExpectation(\")\", false);\n const peg$e19 = peg$literalExpectation(\".\", false);\n const peg$e20 = peg$classExpectation([\"!\", \"&\"], false, false, false);\n const peg$e21 = peg$classExpectation([[\"\\0\", \"\\uD7FF\"], [\"\\uE000\", \"\\uFFFF\"]], false, false, false);\n const peg$e22 = peg$classExpectation([[\"\\uD800\", \"\\uDBFF\"]], false, false, false);\n const peg$e23 = peg$classExpectation([[\"\\uDC00\", \"\\uDFFF\"]], false, false, false);\n const peg$e24 = peg$classExpectation([[\"\\uD800\", \"\\uDFFF\"]], false, false, false);\n const peg$e25 = peg$otherExpectation(\"whitespace\");\n const peg$e26 = peg$classExpectation([\"\\t\", [\"\\v\", \"\\f\"], \" \", \"\\\\p{Zs}\", \"\\xA0\", \"\\uFEFF\"], false, false, true);\n const peg$e27 = peg$classExpectation([\"\\n\", \"\\r\", \"\\u2028\", \"\\u2029\"], false, false, false);\n const peg$e28 = peg$otherExpectation(\"end of line\");\n const peg$e29 = peg$literalExpectation(\"\\n\", false);\n const peg$e30 = peg$literalExpectation(\"\\r\\n\", false);\n const peg$e31 = peg$classExpectation([\"\\r\", [\"\\u2028\", \"\\u2029\"]], false, false, false);\n const peg$e32 = peg$otherExpectation(\"comment\");\n const peg$e33 = peg$literalExpectation(\"/*\", false);\n const peg$e34 = peg$literalExpectation(\"*/\", false);\n const peg$e35 = peg$literalExpectation(\"//\", false);\n const peg$e36 = peg$otherExpectation(\"identifier\");\n const peg$e37 = peg$classExpectation([\"\\\\p{ID_Start}\", \"_\"], false, false, true);\n const peg$e38 = peg$literalExpectation(\"\\\\\", false);\n const peg$e39 = peg$classExpectation([\"$\", \"\\\\p{ID_Continue}\"], false, false, true);\n const peg$e40 = peg$otherExpectation(\"literal\");\n const peg$e41 = peg$literalExpectation(\"i\", false);\n const peg$e42 = peg$otherExpectation(\"string\");\n const peg$e43 = peg$literalExpectation(\"\\\"\", false);\n const peg$e44 = peg$literalExpectation(\"'\", false);\n const peg$e45 = peg$classExpectation([\"\\n\", \"\\r\", \"\\\"\", \"\\\\\", [\"\\u2028\", \"\\u2029\"]], false, false, false);\n const peg$e46 = peg$classExpectation([\"\\n\", \"\\r\", \"'\", \"\\\\\", [\"\\u2028\", \"\\u2029\"]], false, false, false);\n const peg$e47 = peg$otherExpectation(\"character class\");\n const peg$e48 = peg$literalExpectation(\"[\", false);\n const peg$e49 = peg$literalExpectation(\"^\", false);\n const peg$e50 = peg$literalExpectation(\"]\", false);\n const peg$e51 = peg$literalExpectation(\"p\", true);\n const peg$e52 = peg$literalExpectation(\"_\", false);\n const peg$e53 = peg$classExpectation([[\"a\", \"z\"]], false, true, false);\n const peg$e54 = peg$literalExpectation(\"u\", false);\n const peg$e55 = peg$literalExpectation(\"-\", false);\n const peg$e56 = peg$classExpectation([\"\\n\", \"\\r\", [\"\\\\\", \"]\"], [\"\\u2028\", \"\\u2029\"]], false, false, false);\n const peg$e57 = peg$literalExpectation(\"0\", false);\n const peg$e58 = peg$classExpectation([\"\\\"\", \"'\", \"\\\\\"], false, false, false);\n const peg$e59 = peg$literalExpectation(\"b\", false);\n const peg$e60 = peg$literalExpectation(\"f\", false);\n const peg$e61 = peg$literalExpectation(\"n\", false);\n const peg$e62 = peg$literalExpectation(\"r\", false);\n const peg$e63 = peg$literalExpectation(\"t\", false);\n const peg$e64 = peg$literalExpectation(\"v\", false);\n const peg$e65 = peg$classExpectation([[\"0\", \"9\"], \"p\", \"u\", \"x\"], false, false, false);\n const peg$e66 = peg$literalExpectation(\"x\", false);\n const peg$e67 = peg$classExpectation([[\"0\", \"9\"]], false, false, false);\n const peg$e68 = peg$classExpectation([[\"0\", \"9\"], [\"a\", \"f\"]], false, true, false);\n const peg$e69 = peg$otherExpectation(\"code block\");\n const peg$e70 = peg$classExpectation([\"{\", \"}\"], false, false, false);\n\n function peg$f0(imports, topLevelInitializer, initializer, rules) {\n return {\n type: \"grammar\",\n imports,\n topLevelInitializer,\n initializer,\n rules,\n location: location(),\n };\n }\n function peg$f1(imports, body) {\n return [imports, body];\n }\n function peg$f2(code) {\n return {\n type: \"top_level_initializer\",\n code,\n codeLocation: location(),\n };\n }\n function peg$f3(code) {\n return {\n type: \"top_level_initializer\",\n code,\n codeLocation: location(),\n };\n }\n function peg$f4(what, from) {\n return {\n type: \"grammar_import\", what, from, location: location(),\n };\n }\n function peg$f5(from) {\n return {\n type: \"grammar_import\", what: [], from, location: location(),\n };\n }\n function peg$f6(first, others) {\n if (!others) {\n return [first];\n }\n // 'others' is always an array.\n others.unshift(first);\n return others;\n }\n function peg$f7(binding) {\n return {\n type: \"import_binding_default\",\n binding: binding[0],\n location: binding[1],\n };\n }\n function peg$f8(binding) {\n return [{\n type: \"import_binding_all\",\n binding: binding[0],\n location: binding[1],\n }];\n }\n function peg$f9() { return []; }\n function peg$f10(rename, binding) {\n return {\n type: \"import_binding_rename\",\n rename: rename[0],\n renameLocation: rename[1],\n binding: binding[0],\n location: binding[1],\n };\n }\n function peg$f11(binding) {\n return {\n type: \"import_binding\",\n binding: binding[0],\n location: binding[1],\n };\n }\n function peg$f12(module) {\n return { type: \"import_module_specifier\", module, location: location() };\n }\n function peg$f13(id) { return [id, location()]; }\n function peg$f14(id) { return [id, location()]; }\n function peg$f15(id) {\n if (reservedWords.has(id[0])) {\n error(`Binding identifier can't be a reserved word \"${id[0]}\"`, id[1]);\n }\n return id[0];\n }\n function peg$f16(code) {\n return {\n type: \"top_level_initializer\",\n code: code[0],\n codeLocation: code[1],\n location: location(),\n };\n }\n function peg$f17(code) {\n return {\n type: \"initializer\",\n code: code[0],\n codeLocation: code[1],\n location: location(),\n };\n }\n function peg$f18(name, displayName, expression) {\n return {\n type: \"rule\",\n name: name[0],\n nameLocation: name[1],\n expression: displayName !== null\n ? {\n type: \"named\",\n name: displayName,\n expression,\n location: location(),\n }\n : expression,\n location: location(),\n };\n }\n function peg$f19(head, tail) {\n return tail.length > 0\n ? {\n type: \"choice\",\n alternatives: [head].concat(tail),\n location: location(),\n }\n : head;\n }\n function peg$f20(expression, code) {\n return code !== null\n ? {\n type: \"action\",\n expression,\n code: code[0],\n codeLocation: code[1],\n location: location(),\n }\n : expression;\n }\n function peg$f21(head, tail) {\n return ((tail.length > 0) || (head.type === \"labeled\" && head.pick))\n ? {\n type: \"sequence\",\n elements: [head].concat(tail),\n location: location(),\n }\n : head;\n }\n function peg$f22(pluck, label, expression) {\n if (expression.type.startsWith(\"semantic_\")) {\n error(\"\\\"@\\\" cannot be used on a semantic predicate\", pluck);\n }\n return {\n type: \"labeled\",\n label: label !== null ? label[0] : null,\n // Use location of \"@\" if label is unavailable\n labelLocation: label !== null ? label[1] : pluck,\n pick: true,\n expression,\n location: location(),\n };\n }\n function peg$f23(label, expression) {\n return {\n type: \"labeled\",\n label: label[0],\n labelLocation: label[1],\n expression,\n location: location(),\n };\n }\n function peg$f24() { return location(); }\n function peg$f25(label) {\n if (reservedWords.has(label[0])) {\n error(`Label can't be a reserved word \"${label[0]}\"`, label[1]);\n }\n\n return label;\n }\n function peg$f26(operator, expression) {\n return {\n type: OPS_TO_PREFIXED_TYPES[operator],\n expression,\n location: location(),\n };\n }\n function peg$f27(expression, operator) {\n return {\n type: OPS_TO_SUFFIXED_TYPES[operator],\n expression,\n location: location(),\n };\n }\n function peg$f28(expression, boundaries, delimiter) {\n const min = boundaries[0];\n const max = boundaries[1];\n if (max.type === \"constant\" && max.value === 0) {\n error(\"The maximum count of repetitions of the rule must be > 0\", max.location);\n }\n\n return {\n type: \"repeated\",\n min,\n max,\n expression,\n delimiter,\n location: location(),\n };\n }\n function peg$f29(min, max) {\n return [\n min !== null ? min : { type: \"constant\", value: 0 },\n max !== null ? max : { type: \"constant\", value: null },\n ];\n }\n function peg$f30(exact) { return [null, exact]; }\n function peg$f31(value) { return { type: \"constant\", value, location: location() }; }\n function peg$f32(value) { return { type: \"variable\", value: value[0], location: location() }; }\n function peg$f33(value) {\n return {\n type: \"function\",\n value: value[0],\n codeLocation: value[1],\n location: location(),\n };\n }\n function peg$f34(expression) {\n // The purpose of the \"group\" AST node is just to isolate label scope. We\n // don't need to put it around nodes that can't contain any labels or\n // nodes that already isolate label scope themselves. This leaves us with\n // \"labeled\" and \"sequence\".\n return expression.type === \"labeled\" || expression.type === \"sequence\"\n ? { type: \"group\", expression, location: location() }\n : expression;\n }\n function peg$f35(library, name) {\n return {\n type: \"library_ref\",\n name: name[0],\n library: library[0],\n libraryNumber: -1,\n location: location(),\n };\n }\n function peg$f36(name) {\n return { type: \"rule_ref\", name: name[0], location: location() };\n }\n function peg$f37(operator, code) {\n return {\n type: OPS_TO_SEMANTIC_PREDICATE_TYPES[operator],\n code: code[0],\n codeLocation: code[1],\n location: location(),\n };\n }\n function peg$f38(head, tail) {\n return [head + tail.join(\"\"), location()];\n }\n function peg$f39(value, ignoreCase) {\n return {\n type: \"literal\",\n value,\n ignoreCase: ignoreCase !== null,\n location: location(),\n };\n }\n function peg$f40(chars) { return chars.join(\"\"); }\n function peg$f41(chars) { return chars.join(\"\"); }\n function peg$f42(inverted, parts, flags) {\n // [^]u is like . but for a codepoint: not-nothing.\n if (inverted && (parts.length === 0)) {\n if (flags.unicode) {\n parts = [[\"\\ud800\", \"\\udfff\"]];\n } else {\n return {\n type: \"any\",\n location: location(),\n };\n }\n }\n return {\n type: \"class\",\n parts: parts.filter(part => part !== \"\"),\n inverted: Boolean(inverted),\n ignoreCase: Boolean(flags.ignoreCase),\n location: location(),\n unicode: Boolean(flags.unicode) || parts.flat().some(\n c => ((typeof c === \"object\") && c.unicode) || (c.codePointAt(0) > 0xffff)\n ),\n };\n }\n function peg$f43(value) {\n try {\n new RegExp(`[\\\\${value}]`, \"u\");\n } catch (er) {\n error(\"Invalid Unicode property escape\");\n }\n return {\n type: \"classEscape\",\n value,\n unicode: true,\n location: location(),\n };\n }\n function peg$f44(flags) {\n const ret = Object.fromEntries(flags);\n if (Object.keys(ret).length !== flags.length) {\n error(\"Invalid flags\");\n }\n return ret;\n }\n function peg$f45() { return [\"ignoreCase\", true]; }\n function peg$f46() { return [\"unicode\", true]; }\n function peg$f47(begin, end) {\n if (begin.codePointAt(0) > end.codePointAt(0)) {\n error(\n \"Invalid character range: \" + text() + \".\"\n );\n }\n\n return [begin, end];\n }\n function peg$f48() { return \"\"; }\n function peg$f49() { return \"\\0\"; }\n function peg$f50() { return \"\\b\"; }\n function peg$f51() { return \"\\f\"; }\n function peg$f52() { return \"\\n\"; }\n function peg$f53() { return \"\\r\"; }\n function peg$f54() { return \"\\t\"; }\n function peg$f55() { return \"\\v\"; }\n function peg$f56(digits) {\n return String.fromCharCode(parseInt(digits, 16));\n }\n function peg$f57(digits) {\n return String.fromCharCode(parseInt(digits, 16));\n }\n function peg$f58(digits) {\n return String.fromCodePoint(parseInt(digits, 16));\n }\n function peg$f59() { return { type: \"any\", location: location() }; }\n function peg$f60(code) { return [code, location()]; }\n function peg$f61(digits) { return parseInt(digits, 10); }\n let peg$currPos = options.peg$currPos | 0;\n let peg$savedPos = peg$currPos;\n const peg$posDetailsCache = [{ line: 1, column: 1 }];\n let peg$maxFailPos = peg$currPos;\n let peg$maxFailExpected = options.peg$maxFailExpected || [];\n let peg$silentFails = options.peg$silentFails | 0;\n\n let peg$result;\n\n if (options.startRule) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n }\n\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n\n function offset() {\n return peg$savedPos;\n }\n\n function range() {\n return {\n source: peg$source,\n start: peg$savedPos,\n end: peg$currPos,\n };\n }\n\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n\n function expected(description, location) {\n location = location !== undefined\n ? location\n : peg$computeLocation(peg$savedPos, peg$currPos);\n\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location\n );\n }\n\n function error(message, location) {\n location = location !== undefined\n ? location\n : peg$computeLocation(peg$savedPos, peg$currPos);\n\n throw peg$buildSimpleError(message, location);\n }\n\n function peg$getUnicode(pos = peg$currPos) {\n const cp = input.codePointAt(pos);\n if (cp === undefined) {\n return \"\";\n }\n return String.fromCodePoint(cp);\n }\n\n function peg$literalExpectation(text, ignoreCase) {\n return { type: \"literal\", text, ignoreCase };\n }\n\n function peg$classExpectation(parts, inverted, ignoreCase, unicode) {\n return { type: \"class\", parts, inverted, ignoreCase, unicode };\n }\n\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n\n function peg$otherExpectation(description) {\n return { type: \"other\", description };\n }\n\n function peg$computePosDetails(pos) {\n let details = peg$posDetailsCache[pos];\n let p;\n\n if (details) {\n return details;\n } else {\n if (pos >= peg$posDetailsCache.length) {\n p = peg$posDetailsCache.length - 1;\n } else {\n p = pos;\n while (!peg$posDetailsCache[--p]) {}\n }\n\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column,\n };\n\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n\n p++;\n }\n\n peg$posDetailsCache[pos] = details;\n\n return details;\n }\n }\n\n function peg$computeLocation(startPos, endPos, offset) {\n const startPosDetails = peg$computePosDetails(startPos);\n const endPosDetails = peg$computePosDetails(endPos);\n\n const res = {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column,\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column,\n },\n };\n if (offset && peg$source && (typeof peg$source.offset === \"function\")) {\n res.start = peg$source.offset(res.start);\n res.end = peg$source.offset(res.end);\n }\n return res;\n }\n\n function peg$fail(expected) {\n if (peg$currPos < peg$maxFailPos) { return; }\n\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n\n peg$maxFailExpected.push(expected);\n }\n\n function peg$buildSimpleError(message, location) {\n return new peg$SyntaxError(message, null, null, location);\n }\n\n function peg$buildStructuredError(expected, found, location) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected, found),\n expected,\n found,\n location\n );\n }\n\n function peg$parseGrammar() {\n let s0, s1, s2, s3, s4, s5, s6, s7, s8;\n\n s0 = peg$currPos;\n s1 = peg$parseImportDeclarations();\n s2 = peg$currPos;\n s3 = peg$parse__();\n s4 = peg$parseTopLevelInitializer();\n if (s4 !== peg$FAILED) {\n s2 = s4;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n s3 = peg$currPos;\n s4 = peg$parse__();\n s5 = peg$parseInitializer();\n if (s5 !== peg$FAILED) {\n s3 = s5;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = peg$parse__();\n s5 = [];\n s6 = peg$currPos;\n s7 = peg$parseRule();\n if (s7 !== peg$FAILED) {\n s8 = peg$parse__();\n s6 = s7;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$currPos;\n s7 = peg$parseRule();\n if (s7 !== peg$FAILED) {\n s8 = peg$parse__();\n s6 = s7;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n }\n } else {\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f0(s1, s2, s3, s5);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseImportsAndSource() {\n let s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = peg$parseImportsAsText();\n s2 = peg$parseGrammarBody();\n peg$savedPos = s0;\n s0 = peg$f1(s1, s2);\n\n return s0;\n }\n\n function peg$parseGrammarBody() {\n let s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = [];\n if (input.length > peg$currPos) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (input.length > peg$currPos) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n }\n s1 = input.substring(s1, peg$currPos);\n peg$savedPos = s0;\n s1 = peg$f2(s1);\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseImportsAsText() {\n let s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parseImportDeclarations();\n s1 = input.substring(s1, peg$currPos);\n peg$savedPos = s0;\n s1 = peg$f3(s1);\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseImportDeclarations() {\n let s0, s1;\n\n s0 = [];\n s1 = peg$parseImportDeclaration();\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n s1 = peg$parseImportDeclaration();\n }\n\n return s0;\n }\n\n function peg$parseImportDeclaration() {\n let s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;\n\n s0 = peg$currPos;\n s1 = peg$parse__();\n if (input.substr(peg$currPos, 6) === peg$c0) {\n s2 = peg$c0;\n peg$currPos += 6;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parse__();\n s4 = peg$parseImportClause();\n if (s4 !== peg$FAILED) {\n s5 = peg$parse__();\n s6 = peg$parseFromClause();\n if (s6 !== peg$FAILED) {\n s7 = peg$currPos;\n s8 = peg$parse__();\n if (input.charCodeAt(peg$currPos) === 59) {\n s9 = peg$c1;\n peg$currPos++;\n } else {\n s9 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s9 !== peg$FAILED) {\n s8 = [s8, s9];\n s7 = s8;\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n if (s7 === peg$FAILED) {\n s7 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f4(s4, s6);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parse__();\n if (input.substr(peg$currPos, 6) === peg$c0) {\n s2 = peg$c0;\n peg$currPos += 6;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parse__();\n s4 = peg$parseModuleSpecifier();\n if (s4 !== peg$FAILED) {\n s5 = peg$currPos;\n s6 = peg$parse__();\n if (input.charCodeAt(peg$currPos) === 59) {\n s7 = peg$c1;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 === peg$FAILED) {\n s5 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f5(s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n\n return s0;\n }\n\n function peg$parseImportClause() {\n let s0, s1, s2, s3, s4, s5, s6;\n\n s0 = peg$parseNameSpaceImport();\n if (s0 === peg$FAILED) {\n s0 = peg$parseNamedImports();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseImportedDefaultBinding();\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n s3 = peg$parse__();\n if (input.charCodeAt(peg$currPos) === 44) {\n s4 = peg$c2;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parse__();\n s6 = peg$parseNameSpaceImport();\n if (s6 === peg$FAILED) {\n s6 = peg$parseNamedImports();\n }\n if (s6 !== peg$FAILED) {\n s2 = s6;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f6(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseImportedDefaultBinding() {\n let s0, s1;\n\n s0 = peg$currPos;\n s1 = peg$parseImportedBinding();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f7(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseNameSpaceImport() {\n let s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 42) {\n s1 = peg$c3;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e4); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse__();\n if (input.substr(peg$currPos, 2) === peg$c4) {\n s3 = peg$c4;\n peg$currPos += 2;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e5); }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parse__();\n s5 = peg$parseImportedBinding();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f8(s5);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseNamedImports() {\n let s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c5;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e6); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse__();\n if (input.charCodeAt(peg$currPos) === 125) {\n s3 = peg$c6;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e7); }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f9();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c5;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e6); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse__();\n s3 = peg$parseImportsList();\n if (s3 !== peg$FAILED) {\n s4 = peg$parse__();\n s5 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 44) {\n s6 = peg$c2;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s6 !== peg$FAILED) {\n s7 = peg$parse__();\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 === peg$FAILED) {\n s5 = null;\n }\n if (input.charCodeAt(peg$currPos) === 125) {\n s6 = peg$c6;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e7); }\n }\n if (s6 !== peg$FAILED) {\n s0 = s3;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n\n return s0;\n }\n\n function peg$parseFromClause() {\n let s0, s1, s2, s3;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 4) === peg$c7) {\n s1 = peg$c7;\n peg$currPos += 4;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e8); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse__();\n s3 = peg$parseModuleSpecifier();\n if (s3 !== peg$FAILED) {\n s0 = s3;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseImportsList() {\n let s0, s1, s2, s3, s4, s5, s6;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseImportSpecifier();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$currPos;\n s3 = peg$currPos;\n s4 = peg$parse__();\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c2;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse__();\n s4 = [s4, s5, s6];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n s3 = peg$parseImportSpecifier();\n if (s3 === peg$FAILED) {\n peg$currPos = s2;\n s2 = peg$FAILED;\n } else {\n s2 = s3;\n }\n } else {\n s2 = s3;\n }\n }\n if (s1.length < 1) {\n peg$currPos = s0;\n s0 = peg$FAILED;\n } else {\n s0 = s1;\n }\n\n return s0;\n }\n\n function peg$parseImportSpecifier() {\n let s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n s1 = peg$parseModuleExportName();\n if (s1 !== peg$FAILED) {\n s2 = peg$parse__();\n if (input.substr(peg$currPos, 2) === peg$c4) {\n s3 = peg$c4;\n peg$currPos += 2;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e5); }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parse__();\n s5 = peg$parseImportedBinding();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f10(s1, s5);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseImportedBinding();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f11(s1);\n }\n s0 = s1;\n }\n\n return s0;\n }\n\n function peg$parseModuleSpecifier() {\n let s0, s1;\n\n s0 = peg$currPos;\n s1 = peg$parseStringLiteral();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f12(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseImportedBinding() {\n let s0, s1;\n\n s0 = peg$currPos;\n s1 = peg$parseBindingIdentifier();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f13(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseModuleExportName() {\n let s0, s1;\n\n s0 = peg$parseIdentifierName();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseStringLiteral();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f14(s1);\n }\n s0 = s1;\n }\n\n return s0;\n }\n\n function peg$parseBindingIdentifier() {\n let s0, s1;\n\n s0 = peg$currPos;\n s1 = peg$parseIdentifierName();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f15(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseTopLevelInitializer() {\n let s0, s1, s2, s3, s4;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c5;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e6); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseCodeBlock();\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s3 = peg$c6;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e7); }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parseEOS();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f16(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseInitializer() {\n let s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = peg$parseCodeBlock();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseEOS();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f17(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseRule() {\n let s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$parseIdentifierName();\n if (s1 !== peg$FAILED) {\n s2 = peg$parse__();\n s3 = peg$currPos;\n s4 = peg$parseStringLiteral();\n if (s4 !== peg$FAILED) {\n s5 = peg$parse__();\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n if (input.charCodeAt(peg$currPos) === 61) {\n s4 = peg$c8;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e9); }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parse__();\n s6 = peg$parseChoiceExpression();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseEOS();\n if (s7 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f18(s1, s3, s6);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseChoiceExpression() {\n let s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$parseActionExpression();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse__();\n if (input.charCodeAt(peg$currPos) === 47) {\n s5 = peg$c9;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e10); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse__();\n s7 = peg$parseActionExpression();\n if (s7 !== peg$FAILED) {\n s3 = s7;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse__();\n if (input.charCodeAt(peg$currPos) === 47) {\n s5 = peg$c9;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e10); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse__();\n s7 = peg$parseActionExpression();\n if (s7 !== peg$FAILED) {\n s3 = s7;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n peg$savedPos = s0;\n s0 = peg$f19(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseActionExpression() {\n let s0, s1, s2, s3, s4;\n\n s0 = peg$currPos;\n s1 = peg$parseSequenceExpression();\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n s3 = peg$parse__();\n s4 = peg$parseCodeBlock();\n if (s4 !== peg$FAILED) {\n s2 = s4;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f20(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseSequenceExpression() {\n let s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n s1 = peg$parseLabeledExpression();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse__();\n s5 = peg$parseLabeledExpression();\n if (s5 !== peg$FAILED) {\n s3 = s5;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse__();\n s5 = peg$parseLabeledExpression();\n if (s5 !== peg$FAILED) {\n s3 = s5;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n peg$savedPos = s0;\n s0 = peg$f21(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseLabeledExpression() {\n let s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = peg$parsePluck();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseLabelColon();\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n s3 = peg$parsePrefixedExpression();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f22(s1, s2, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseLabelColon();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsePrefixedExpression();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f23(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parsePrefixedExpression();\n }\n }\n\n return s0;\n }\n\n function peg$parsePluck() {\n let s0, s1;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 64) {\n s1 = peg$c10;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e11); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f24();\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseLabelColon() {\n let s0, s1, s2, s3, s4;\n\n s0 = peg$currPos;\n s1 = peg$parseIdentifierName();\n if (s1 !== peg$FAILED) {\n s2 = peg$parse__();\n if (input.charCodeAt(peg$currPos) === 58) {\n s3 = peg$c11;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e12); }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parse__();\n peg$savedPos = s0;\n s0 = peg$f25(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsePrefixedExpression() {\n let s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = peg$parsePrefixedOperator();\n if (s1 !== peg$FAILED) {\n s2 = peg$parse__();\n s3 = peg$parseSuffixedExpression();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f26(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parseSuffixedExpression();\n }\n\n return s0;\n }\n\n function peg$parsePrefixedOperator() {\n let s0;\n\n s0 = input.charAt(peg$currPos);\n if (peg$r0.test(s0)) {\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e13); }\n }\n\n return s0;\n }\n\n function peg$parseSuffixedExpression() {\n let s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = peg$parsePrimaryExpression();\n if (s1 !== peg$FAILED) {\n s2 = peg$parse__();\n s3 = peg$parseSuffixedOperator();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f27(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parseRepeatedExpression();\n if (s0 === peg$FAILED) {\n s0 = peg$parsePrimaryExpression();\n }\n }\n\n return s0;\n }\n\n function peg$parseSuffixedOperator() {\n let s0;\n\n s0 = input.charAt(peg$currPos);\n if (peg$r1.test(s0)) {\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e14); }\n }\n\n return s0;\n }\n\n function peg$parseRepeatedExpression() {\n let s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11;\n\n s0 = peg$currPos;\n s1 = peg$parsePrimaryExpression();\n if (s1 !== peg$FAILED) {\n s2 = peg$parse__();\n if (input.charCodeAt(peg$currPos) === 124) {\n s3 = peg$c12;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e15); }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parse__();\n s5 = peg$parseBoundaries();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse__();\n s7 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 44) {\n s8 = peg$c2;\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s8 !== peg$FAILED) {\n s9 = peg$parse__();\n s10 = peg$parseChoiceExpression();\n if (s10 !== peg$FAILED) {\n s11 = peg$parse__();\n s7 = s10;\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n if (s7 === peg$FAILED) {\n s7 = null;\n }\n if (input.charCodeAt(peg$currPos) === 124) {\n s8 = peg$c12;\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e15); }\n }\n if (s8 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f28(s1, s5, s7);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseBoundaries() {\n let s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n s1 = peg$parseBoundary();\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n s2 = peg$parse__();\n if (input.substr(peg$currPos, 2) === peg$c13) {\n s3 = peg$c13;\n peg$currPos += 2;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e16); }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parse__();\n s5 = peg$parseBoundary();\n if (s5 === peg$FAILED) {\n s5 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f29(s1, s5);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseBoundary();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f30(s1);\n }\n s0 = s1;\n }\n\n return s0;\n }\n\n function peg$parseBoundary() {\n let s0, s1;\n\n s0 = peg$currPos;\n s1 = peg$parseInteger();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f31(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseIdentifierName();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f32(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseCodeBlock();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f33(s1);\n }\n s0 = s1;\n }\n }\n\n return s0;\n }\n\n function peg$parsePrimaryExpression() {\n let s0, s1, s2, s3, s4, s5;\n\n s0 = peg$parseLiteralMatcher();\n if (s0 === peg$FAILED) {\n s0 = peg$parseCharacterClassMatcher();\n if (s0 === peg$FAILED) {\n s0 = peg$parseAnyMatcher();\n if (s0 === peg$FAILED) {\n s0 = peg$parseRuleReferenceExpression();\n if (s0 === peg$FAILED) {\n s0 = peg$parseSemanticPredicateExpression();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 40) {\n s1 = peg$c14;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e17); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse__();\n s3 = peg$parseChoiceExpression();\n if (s3 !== peg$FAILED) {\n s4 = peg$parse__();\n if (input.charCodeAt(peg$currPos) === 41) {\n s5 = peg$c15;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e18); }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f34(s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseRuleReferenceExpression() {\n let s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$parseIdentifierName();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 46) {\n s2 = peg$c16;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e19); }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parseIdentifierName();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f35(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseIdentifierName();\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n peg$silentFails++;\n s3 = peg$currPos;\n s4 = peg$parse__();\n s5 = peg$currPos;\n s6 = peg$parseStringLiteral();\n if (s6 !== peg$FAILED) {\n s7 = peg$parse__();\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 === peg$FAILED) {\n s5 = null;\n }\n if (input.charCodeAt(peg$currPos) === 61) {\n s6 = peg$c8;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e9); }\n }\n if (s6 !== peg$FAILED) {\n s4 = [s4, s5, s6];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n peg$silentFails--;\n if (s3 === peg$FAILED) {\n s2 = undefined;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f36(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n\n return s0;\n }\n\n function peg$parseSemanticPredicateExpression() {\n let s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = peg$parseSemanticPredicateOperator();\n if (s1 !== peg$FAILED) {\n s2 = peg$parse__();\n s3 = peg$parseCodeBlock();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f37(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseSemanticPredicateOperator() {\n let s0;\n\n s0 = input.charAt(peg$currPos);\n if (peg$r2.test(s0)) {\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e20); }\n }\n\n return s0;\n }\n\n function peg$parseSourceCharacter() {\n let s0;\n\n s0 = peg$parseSourceCharacterLow();\n if (s0 === peg$FAILED) {\n s0 = peg$parseSourceCharacterHigh();\n }\n\n return s0;\n }\n\n function peg$parseSourceCharacterLow() {\n let s0;\n\n s0 = input.charAt(peg$currPos);\n if (peg$r3.test(s0)) {\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e21); }\n }\n\n return s0;\n }\n\n function peg$parseSourceCharacterHigh() {\n let s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = input.charAt(peg$currPos);\n if (peg$r4.test(s2)) {\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e22); }\n }\n if (s2 !== peg$FAILED) {\n s3 = input.charAt(peg$currPos);\n if (peg$r5.test(s3)) {\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e23); }\n }\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n if (s0 === peg$FAILED) {\n s0 = input.charAt(peg$currPos);\n if (peg$r6.test(s0)) {\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e24); }\n }\n }\n\n return s0;\n }\n\n function peg$parseWhiteSpace() {\n let s0, s1;\n\n peg$silentFails++;\n s0 = peg$getUnicode();\n if (peg$r7.test(s0)) {\n peg$currPos += s0.length;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e26); }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e25); }\n }\n\n return s0;\n }\n\n function peg$parseLineTerminator() {\n let s0;\n\n s0 = input.charAt(peg$currPos);\n if (peg$r8.test(s0)) {\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e27); }\n }\n\n return s0;\n }\n\n function peg$parseLineTerminatorSequence() {\n let s0, s1;\n\n peg$silentFails++;\n if (input.charCodeAt(peg$currPos) === 10) {\n s0 = peg$c17;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c18) {\n s0 = peg$c18;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e30); }\n }\n if (s0 === peg$FAILED) {\n s0 = input.charAt(peg$currPos);\n if (peg$r9.test(s0)) {\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e31); }\n }\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e28); }\n }\n\n return s0;\n }\n\n function peg$parseComment() {\n let s0, s1;\n\n peg$silentFails++;\n s0 = peg$parseMultiLineComment();\n if (s0 === peg$FAILED) {\n s0 = peg$parseSingleLineComment();\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e32); }\n }\n\n return s0;\n }\n\n function peg$parseMultiLineComment() {\n let s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c19) {\n s1 = peg$c19;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e33); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n if (input.substr(peg$currPos, 2) === peg$c20) {\n s5 = peg$c20;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e34); }\n }\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = undefined;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parseSourceCharacter();\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n if (input.substr(peg$currPos, 2) === peg$c20) {\n s5 = peg$c20;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e34); }\n }\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = undefined;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parseSourceCharacter();\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n if (input.substr(peg$currPos, 2) === peg$c20) {\n s3 = peg$c20;\n peg$currPos += 2;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e34); }\n }\n if (s3 !== peg$FAILED) {\n s1 = [s1, s2, s3];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseMultiLineCommentNoLineTerminator() {\n let s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c19) {\n s1 = peg$c19;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e33); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n if (input.substr(peg$currPos, 2) === peg$c20) {\n s5 = peg$c20;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e34); }\n }\n if (s5 === peg$FAILED) {\n s5 = peg$parseLineTerminator();\n }\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = undefined;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parseSourceCharacter();\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n if (input.substr(peg$currPos, 2) === peg$c20) {\n s5 = peg$c20;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e34); }\n }\n if (s5 === peg$FAILED) {\n s5 = peg$parseLineTerminator();\n }\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = undefined;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parseSourceCharacter();\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n if (input.substr(peg$currPos, 2) === peg$c20) {\n s3 = peg$c20;\n peg$currPos += 2;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e34); }\n }\n if (s3 !== peg$FAILED) {\n s1 = [s1, s2, s3];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseSingleLineComment() {\n let s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c21) {\n s1 = peg$c21;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e35); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parseLineTerminator();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = undefined;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parseSourceCharacter();\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parseLineTerminator();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = undefined;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parseSourceCharacter();\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseIdentifierName() {\n let s0, s1, s2, s3;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parseIdentifierStart();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parseIdentifierPart();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parseIdentifierPart();\n }\n peg$savedPos = s0;\n s0 = peg$f38(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e36); }\n }\n\n return s0;\n }\n\n function peg$parseIdentifierStart() {\n let s0, s1, s2;\n\n s0 = peg$getUnicode();\n if (peg$r10.test(s0)) {\n peg$currPos += s0.length;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e37); }\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s1 = peg$c22;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e38); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseUnicodeEscapeSequence();\n if (s2 !== peg$FAILED) {\n s0 = s2;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n\n return s0;\n }\n\n function peg$parseIdentifierPart() {\n let s0;\n\n s0 = peg$getUnicode();\n if (peg$r11.test(s0)) {\n peg$currPos += s0.length;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e39); }\n }\n\n return s0;\n }\n\n function peg$parseLiteralMatcher() {\n let s0, s1, s2;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parseStringLiteral();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 105) {\n s2 = peg$c23;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e41); }\n }\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f39(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e40); }\n }\n\n return s0;\n }\n\n function peg$parseStringLiteral() {\n let s0, s1, s2, s3;\n\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 34) {\n s1 = peg$c24;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e43); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parseDoubleStringCharacter();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parseDoubleStringCharacter();\n }\n if (input.charCodeAt(peg$currPos) === 34) {\n s3 = peg$c24;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e43); }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f40(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 39) {\n s1 = peg$c25;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e44); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parseSingleStringCharacter();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parseSingleStringCharacter();\n }\n if (input.charCodeAt(peg$currPos) === 39) {\n s3 = peg$c25;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e44); }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f41(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e42); }\n }\n\n return s0;\n }\n\n function peg$parseDoubleStringCharacter() {\n let s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$currPos;\n peg$silentFails++;\n s3 = input.charAt(peg$currPos);\n if (peg$r12.test(s3)) {\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e45); }\n }\n peg$silentFails--;\n if (s3 === peg$FAILED) {\n s2 = undefined;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parseSourceCharacter();\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s1 = peg$c22;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e38); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseEscapeSequence();\n if (s2 !== peg$FAILED) {\n s0 = s2;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parseLineContinuation();\n }\n }\n\n return s0;\n }\n\n function peg$parseSingleStringCharacter() {\n let s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$currPos;\n peg$silentFails++;\n s3 = input.charAt(peg$currPos);\n if (peg$r13.test(s3)) {\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e46); }\n }\n peg$silentFails--;\n if (s3 === peg$FAILED) {\n s2 = undefined;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parseSourceCharacter();\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s1 = peg$c22;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e38); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseEscapeSequence();\n if (s2 !== peg$FAILED) {\n s0 = s2;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parseLineContinuation();\n }\n }\n\n return s0;\n }\n\n function peg$parseCharacterClassMatcher() {\n let s0, s1, s2, s3, s4, s5;\n\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 91) {\n s1 = peg$c26;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e48); }\n }\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 94) {\n s2 = peg$c27;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e49); }\n }\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n s3 = [];\n s4 = peg$parseAtomEscape();\n if (s4 === peg$FAILED) {\n s4 = peg$parseClassCharacterRange();\n if (s4 === peg$FAILED) {\n s4 = peg$parseClassCharacter();\n }\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parseAtomEscape();\n if (s4 === peg$FAILED) {\n s4 = peg$parseClassCharacterRange();\n if (s4 === peg$FAILED) {\n s4 = peg$parseClassCharacter();\n }\n }\n }\n if (input.charCodeAt(peg$currPos) === 93) {\n s4 = peg$c28;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e50); }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parseClassFlags();\n peg$savedPos = s0;\n s0 = peg$f42(s2, s3, s5);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e47); }\n }\n\n return s0;\n }\n\n function peg$parseAtomEscape() {\n let s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s1 = peg$c22;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e38); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseCharacterClassEscape();\n if (s2 !== peg$FAILED) {\n s0 = s2;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseCharacterClassEscape() {\n let s0, s1, s2, s3, s4, s5, s6;\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$currPos;\n s3 = input.charAt(peg$currPos);\n if (s3.toLowerCase() === peg$c29) {\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e51); }\n }\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 123) {\n s4 = peg$c5;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e6); }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parseUnicodePropertyValueExpression();\n if (s5 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s6 = peg$c6;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e7); }\n }\n if (s6 !== peg$FAILED) {\n s3 = [s3, s4, s5, s6];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = input.substring(s1, peg$currPos);\n } else {\n s1 = s2;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f43(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseUnicodePropertyValueExpression() {\n let s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = peg$parseUnicodePropertyName();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 61) {\n s2 = peg$c8;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e9); }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parseUnicodePropertyValue();\n if (s3 !== peg$FAILED) {\n s1 = [s1, s2, s3];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parseLoneUnicodePropertyNameOrValue();\n }\n\n return s0;\n }\n\n function peg$parseUnicodePropertyName() {\n let s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseUnicodePropertyNameCharacter();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseUnicodePropertyNameCharacter();\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n\n return s0;\n }\n\n function peg$parseUnicodePropertyValue() {\n let s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseUnicodePropertyValueCharacter();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseUnicodePropertyValueCharacter();\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n\n return s0;\n }\n\n function peg$parseLoneUnicodePropertyNameOrValue() {\n let s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseUnicodePropertyValueCharacter();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseUnicodePropertyValueCharacter();\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n\n return s0;\n }\n\n function peg$parseUnicodePropertyValueCharacter() {\n let s0;\n\n s0 = peg$parseUnicodePropertyNameCharacter();\n if (s0 === peg$FAILED) {\n s0 = peg$parseDecimalDigit();\n }\n\n return s0;\n }\n\n function peg$parseUnicodePropertyNameCharacter() {\n let s0;\n\n s0 = peg$parseAsciiLetter();\n if (s0 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 95) {\n s0 = peg$c30;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e52); }\n }\n }\n\n return s0;\n }\n\n function peg$parseAsciiLetter() {\n let s0;\n\n s0 = input.charAt(peg$currPos);\n if (peg$r14.test(s0)) {\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e53); }\n }\n\n return s0;\n }\n\n function peg$parseClassFlags() {\n let s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseClassFlag();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseClassFlag();\n }\n peg$savedPos = s0;\n s1 = peg$f44(s1);\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseClassFlag() {\n let s0, s1;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 105) {\n s1 = peg$c23;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e41); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f45();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 117) {\n s1 = peg$c31;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e54); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f46();\n }\n s0 = s1;\n }\n\n return s0;\n }\n\n function peg$parseClassCharacterRange() {\n let s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = peg$parseClassCharacter();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 45) {\n s2 = peg$c32;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e55); }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parseClassCharacter();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f47(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseClassCharacter() {\n let s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$currPos;\n peg$silentFails++;\n s3 = input.charAt(peg$currPos);\n if (peg$r15.test(s3)) {\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e56); }\n }\n peg$silentFails--;\n if (s3 === peg$FAILED) {\n s2 = undefined;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parseSourceCharacter();\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s1 = peg$c22;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e38); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseEscapeSequence();\n if (s2 !== peg$FAILED) {\n s0 = s2;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parseLineContinuation();\n }\n }\n\n return s0;\n }\n\n function peg$parseLineContinuation() {\n let s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s1 = peg$c22;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e38); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseLineTerminatorSequence();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f48();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseEscapeSequence() {\n let s0, s1, s2, s3;\n\n s0 = peg$parseCharacterEscapeSequence();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 48) {\n s1 = peg$c33;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e57); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n peg$silentFails++;\n s3 = peg$parseDecimalDigit();\n peg$silentFails--;\n if (s3 === peg$FAILED) {\n s2 = undefined;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f49();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parseHexEscapeSequence();\n if (s0 === peg$FAILED) {\n s0 = peg$parseUnicodeEscapeSequence();\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseCharacterEscapeSequence() {\n let s0;\n\n s0 = peg$parseSingleEscapeCharacter();\n if (s0 === peg$FAILED) {\n s0 = peg$parseNonEscapeCharacter();\n }\n\n return s0;\n }\n\n function peg$parseSingleEscapeCharacter() {\n let s0, s1;\n\n s0 = input.charAt(peg$currPos);\n if (peg$r16.test(s0)) {\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e58); }\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 98) {\n s1 = peg$c34;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e59); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f50();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 102) {\n s1 = peg$c35;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e60); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f51();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 110) {\n s1 = peg$c36;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e61); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f52();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 114) {\n s1 = peg$c37;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e62); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f53();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 116) {\n s1 = peg$c38;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e63); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f54();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 118) {\n s1 = peg$c39;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e64); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f55();\n }\n s0 = s1;\n }\n }\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseNonEscapeCharacter() {\n let s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$currPos;\n peg$silentFails++;\n s3 = peg$parseEscapeCharacter();\n if (s3 === peg$FAILED) {\n s3 = peg$parseLineTerminator();\n }\n peg$silentFails--;\n if (s3 === peg$FAILED) {\n s2 = undefined;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parseSourceCharacter();\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n\n return s0;\n }\n\n function peg$parseEscapeCharacter() {\n let s0;\n\n s0 = peg$parseSingleEscapeCharacter();\n if (s0 === peg$FAILED) {\n s0 = input.charAt(peg$currPos);\n if (peg$r17.test(s0)) {\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e65); }\n }\n }\n\n return s0;\n }\n\n function peg$parseHexEscapeSequence() {\n let s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 120) {\n s1 = peg$c40;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e66); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n s3 = peg$currPos;\n s4 = peg$parseHexDigit();\n if (s4 !== peg$FAILED) {\n s5 = peg$parseHexDigit();\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n s2 = input.substring(s2, peg$currPos);\n } else {\n s2 = s3;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f56(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseUnicodeEscapeSequence() {\n let s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 117) {\n s1 = peg$c31;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e54); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n s3 = peg$currPos;\n s4 = peg$parseHexDigit();\n if (s4 !== peg$FAILED) {\n s5 = peg$parseHexDigit();\n if (s5 !== peg$FAILED) {\n s6 = peg$parseHexDigit();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseHexDigit();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n s2 = input.substring(s2, peg$currPos);\n } else {\n s2 = s3;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f57(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 117) {\n s1 = peg$c31;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e54); }\n }\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 123) {\n s2 = peg$c5;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e6); }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$currPos;\n s4 = [];\n s5 = peg$parseHexDigit();\n if (s5 !== peg$FAILED) {\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parseHexDigit();\n }\n } else {\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s3 = input.substring(s3, peg$currPos);\n } else {\n s3 = s4;\n }\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s4 = peg$c6;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e7); }\n }\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f58(s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n\n return s0;\n }\n\n function peg$parseDecimalDigit() {\n let s0;\n\n s0 = input.charAt(peg$currPos);\n if (peg$r18.test(s0)) {\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e67); }\n }\n\n return s0;\n }\n\n function peg$parseHexDigit() {\n let s0;\n\n s0 = input.charAt(peg$currPos);\n if (peg$r19.test(s0)) {\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e68); }\n }\n\n return s0;\n }\n\n function peg$parseAnyMatcher() {\n let s0, s1;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 46) {\n s1 = peg$c16;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e19); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f59();\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseCodeBlock() {\n let s0, s1, s2, s3;\n\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c5;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e6); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseBareCodeBlock();\n if (input.charCodeAt(peg$currPos) === 125) {\n s3 = peg$c6;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e7); }\n }\n if (s3 !== peg$FAILED) {\n s0 = s2;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e69); }\n }\n\n return s0;\n }\n\n function peg$parseBareCodeBlock() {\n let s0, s1;\n\n s0 = peg$currPos;\n s1 = peg$parseCode();\n peg$savedPos = s0;\n s1 = peg$f60(s1);\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseCode() {\n let s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = input.charAt(peg$currPos);\n if (peg$r20.test(s5)) {\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e70); }\n }\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = undefined;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parseSourceCharacter();\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = input.charAt(peg$currPos);\n if (peg$r20.test(s5)) {\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e70); }\n }\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = undefined;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parseSourceCharacter();\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 === peg$FAILED) {\n s2 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 123) {\n s3 = peg$c5;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e6); }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parseCode();\n if (input.charCodeAt(peg$currPos) === 125) {\n s5 = peg$c6;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e7); }\n }\n if (s5 !== peg$FAILED) {\n s3 = [s3, s4, s5];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n }\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = input.charAt(peg$currPos);\n if (peg$r20.test(s5)) {\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e70); }\n }\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = undefined;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parseSourceCharacter();\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = input.charAt(peg$currPos);\n if (peg$r20.test(s5)) {\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e70); }\n }\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = undefined;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parseSourceCharacter();\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 === peg$FAILED) {\n s2 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 123) {\n s3 = peg$c5;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e6); }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parseCode();\n if (input.charCodeAt(peg$currPos) === 125) {\n s5 = peg$c6;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e7); }\n }\n if (s5 !== peg$FAILED) {\n s3 = [s3, s4, s5];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n }\n }\n s0 = input.substring(s0, peg$currPos);\n\n return s0;\n }\n\n function peg$parseInteger() {\n let s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = [];\n s3 = peg$parseDecimalDigit();\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parseDecimalDigit();\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = input.substring(s1, peg$currPos);\n } else {\n s1 = s2;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f61(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parse__() {\n let s0, s1;\n\n s0 = [];\n s1 = peg$parseWhiteSpace();\n if (s1 === peg$FAILED) {\n s1 = peg$parseLineTerminatorSequence();\n if (s1 === peg$FAILED) {\n s1 = peg$parseComment();\n }\n }\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n s1 = peg$parseWhiteSpace();\n if (s1 === peg$FAILED) {\n s1 = peg$parseLineTerminatorSequence();\n if (s1 === peg$FAILED) {\n s1 = peg$parseComment();\n }\n }\n }\n\n return s0;\n }\n\n function peg$parse_() {\n let s0, s1;\n\n s0 = [];\n s1 = peg$parseWhiteSpace();\n if (s1 === peg$FAILED) {\n s1 = peg$parseMultiLineCommentNoLineTerminator();\n }\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n s1 = peg$parseWhiteSpace();\n if (s1 === peg$FAILED) {\n s1 = peg$parseMultiLineCommentNoLineTerminator();\n }\n }\n\n return s0;\n }\n\n function peg$parseEOS() {\n let s0, s1, s2, s3;\n\n s0 = [];\n s1 = peg$currPos;\n s2 = peg$parse__();\n if (input.charCodeAt(peg$currPos) === 59) {\n s3 = peg$c1;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n s1 = peg$currPos;\n s2 = peg$parse__();\n if (input.charCodeAt(peg$currPos) === 59) {\n s3 = peg$c1;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n }\n } else {\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parse_();\n s2 = peg$parseSingleLineComment();\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n s3 = peg$parseLineTerminatorSequence();\n if (s3 !== peg$FAILED) {\n s1 = [s1, s2, s3];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parse__();\n s2 = peg$parseEOF();\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseEOF() {\n let s0, s1;\n\n s0 = peg$currPos;\n peg$silentFails++;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n peg$silentFails--;\n if (s1 === peg$FAILED) {\n s0 = undefined;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n\n const reservedWords = new Set(options.reservedWords);\n\n peg$result = peg$startRuleFunction();\n\n const peg$success = (peg$result !== peg$FAILED && peg$currPos === input.length);\n function peg$throw() {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? peg$getUnicode(peg$maxFailPos) : null,\n peg$maxFailPos < input.length\n ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1)\n : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n if (options.peg$library) {\n return /** @type {any} */ ({\n peg$result,\n peg$currPos,\n peg$FAILED,\n peg$maxFailExpected,\n peg$maxFailPos,\n peg$success,\n peg$throw: peg$success ? undefined : peg$throw,\n });\n }\n if (peg$success) {\n return peg$result;\n } else {\n peg$throw();\n }\n}\n\nmodule.exports = {\n StartRules: [\"Grammar\", \"ImportsAndSource\"],\n SyntaxError: peg$SyntaxError,\n parse: peg$parse,\n};\n","// @ts-check\n\"use strict\";\n\nconst asts = require(\"../asts\");\nconst op = require(\"../opcodes\");\nconst Stack = require(\"../stack\");\nconst { version } = require(\"../../version\");\nconst { stringEscape, regexpClassEscape } = require(\"../utils\");\nconst { SourceNode } = require(\"source-map-generator\");\nconst GrammarLocation = require(\"../../grammar-location\");\nconst { parse } = require(\"../../parser.js\");\n\n/**\n * @typedef {import(\"../../peg\")} PEG\n */\n\n/**\n * Converts source text from the grammar into the `source-map` object\n *\n * @param {string} code Multiline string with source code\n * @param {PEG.LocationRange} location\n * Location that represents code block in the grammar\n * @param {string} [name] Name of the code chunk\n *\n * @returns {SourceNode} New node that represents code chunk.\n * Code will be splitted by lines if necessary\n */\nfunction toSourceNode(code, location, name) {\n const start = GrammarLocation.offsetStart(location);\n const line = start.line;\n // `source-map` columns are 0-based, peggy columns is 1-based\n const column = start.column - 1;\n const lines = code.split(\"\\n\");\n\n if (lines.length === 1) {\n return new SourceNode(\n line, column, String(location.source), code, name\n );\n }\n\n return new SourceNode(\n null, null, String(location.source), lines.map((l, i) => new SourceNode(\n line + i,\n i === 0 ? column : 0,\n String(location.source),\n i === lines.length - 1 ? l : [l, \"\\n\"],\n name\n ))\n );\n}\n\n/**\n * Wraps code line that consists from three parts into `SourceNode`.\n *\n * @param {string} prefix String that will be prepended before mapped chunk\n * @param {string} chunk Chunk for mapping (possible multiline)\n * @param {PEG.LocationRange} location\n * Location that represents chunk in the grammar\n * @param {string} suffix String that will be appended after mapped chunk\n * @param {string} [name] Name of the code chunk\n *\n * @returns {SourceNode} New node that represents code chunk.\n * Code will be splitted by lines if necessary\n */\nfunction wrapInSourceNode(prefix, chunk, location, suffix, name) {\n // If location is not defined (for example, AST node was replaced\n // by a plugin and does not provide location information, see\n // plugin-api.spec.js/\"can replace parser\") returns original chunk\n if (location) {\n const end = GrammarLocation.offsetEnd(location);\n return new SourceNode(null, null, String(location.source), [\n prefix,\n toSourceNode(chunk, location, name),\n // Mark end location with column information otherwise\n // mapping will be always continue to the end of line\n new SourceNode(\n end.line,\n // `source-map` columns are 0-based, peggy columns is 1-based\n end.column - 1,\n String(location.source),\n suffix\n ),\n ]);\n }\n\n return new SourceNode(null, null, null, [prefix, chunk, suffix]);\n}\n\n/**\n * @typedef {(string|SourceNode)[]} SourceArray\n *\n * @typedef {PEG.SourceBuildOptions<PEG.SourceOutputs>} SourceBuildOptions\n * @typedef {object} ExtraOptions\n * @property {PEG.Dependencies} [dependencies]\n * @property {string} [exportVar]\n * @typedef {SourceBuildOptions & ExtraOptions} Options\n */\n/**\n * Generates parser JavaScript code.\n *\n * @param {PEG.ast.Grammar} ast\n * @param {Options} options\n */\nfunction generateJS(ast, options) {\n if (!ast.literals || !ast.locations || !ast.classes\n || !ast.expectations || !ast.functions || !ast.importedNames) {\n throw new Error(\n \"generateJS: generate bytecode was not called.\"\n );\n }\n const {\n literals, locations, classes, expectations, functions, importedNames,\n } = ast;\n if (!options.allowedStartRules) {\n throw new Error(\n \"generateJS: options.allowedStartRules was not set.\"\n );\n }\n const { allowedStartRules } = options;\n /** @type {PEG.Dependencies} */\n const dependencies = options.dependencies || {};\n\n /**\n * Re-indent beginnings of each line so output is indented no matter what\n * your grammar indentation preference is.\n *\n * @param {string} str\n * @param {string} [indent = \"\"]\n * @returns\n */\n function reIndent(str, indent = \"\") {\n const leadingSpace = str.match(/^\\n*([ \\t]+)/);\n const body = leadingSpace\n ? str.replace(new RegExp(`^${leadingSpace[1]}`, \"gm\"), indent)\n : str;\n return body.replace(/[ \\t]+$/, \"\");\n }\n\n /**\n * @overload\n * @param {string} code\n * @returns {string}\n */\n /**\n * @overload\n * @param {SourceArray} code\n * @returns {SourceArray}\n */\n /**\n * These only indent non-empty lines to avoid trailing whitespace.\n * @param {SourceArray} code\n * @returns {SourceArray}\n */\n function indent2(code) {\n /*\n * - raw lines (outside of SourceNodes) have implict newlines\n * that get inserted at the end of processing, so indent\n * should always be applied to the next string.\n *\n * - chunks inside SourceNodes are assumed to have explict\n * new lines, and often have several chunks on one line.\n * we therefore shouldn't indent them, unless we've seen\n * an explicit new line, or the previous line was raw.\n *\n * So eg:\n * [\n * SourceNode([\"a \", \"b\", \"\\nfoo \"]),\n * \"x\",\n * \"y\",\n * ]\n *\n * Should end up as\n * [\n * SourceNode([\" a \", \"b\", \"\\n foo \"]),\n * \"x\",\n * \" y\",\n * ]\n *\n * sawEol, and inSourceNode are used to keep track of when\n * we should apply the indent.\n */\n let sawEol = true;\n let inSourceNode = 0;\n /**\n * @overload\n * @param {string | SourceNode} code\n * @returns {string | SourceNode}\n */\n /**\n * @overload\n * @param {SourceNode} code\n * @returns {SourceNode}\n */\n /**\n * @overload\n * @param {SourceNode[]} code\n * @returns {SourceNode[]}\n */\n /**\n * @overload\n * @param {SourceArray} code\n * @returns {SourceArray}\n */\n /**\n * @param {SourceArray | string | SourceNode} code\n * @returns {SourceArray | string | SourceNode}\n */\n function helper(code) {\n if (Array.isArray(code)) {\n return code.map(s => helper(s));\n }\n if (code instanceof SourceNode) {\n inSourceNode++;\n code.children = helper(code.children);\n inSourceNode--;\n return code;\n }\n if (sawEol) {\n // There was an immediately prior newline, so\n // indent at the start of every line\n code = code.replace(/^(.+)$/gm, \" $1\");\n } else {\n // This line will be appended directly to\n // the end of the previous one, so only indent\n // after each contained newline (and only if\n // there's non-whitespace following the newline)\n code = code.replace(/\\n(\\s*\\S)/g, \"\\n $1\");\n }\n sawEol = !inSourceNode || code.endsWith(\"\\n\");\n return code;\n }\n return helper(code);\n }\n /** @param {number} i */\n function l(i) { return \"peg$c\" + i; } // |literals[i]| of the abstract machine\n /** @param {number} i */\n function r(i) { return \"peg$r\" + i; } // |classes[i]| of the abstract machine\n /** @param {number} i */\n function e(i) { return \"peg$e\" + i; } // |expectations[i]| of the abstract machine\n /** @param {number} i */\n function f(i) { return \"peg$f\" + i; } // |actions[i]| of the abstract machine\n /** @param {number} i */\n function gi(i) { return \"peg$import\" + i; } // |grammar_import[i]|\n\n /**\n * Generates name of the function that parses specified rule.\n * @param {string} name\n */\n function name(name) { return \"peg$parse\" + name; }\n\n function generateTables() {\n /** @param {string} literal */\n function buildLiteral(literal) {\n return \"\\\"\" + stringEscape(literal) + \"\\\"\";\n }\n\n /** @param {PEG.ast.GrammarCharacterClass} cls */\n function buildRegexp(cls) {\n return \"/^[\"\n + (cls.inverted ? \"^\" : \"\")\n + cls.value.map(part => (Array.isArray(part)\n ? regexpClassEscape(part[0])\n + \"-\"\n + regexpClassEscape(part[1])\n : regexpClassEscape(part))).join(\"\")\n + \"]/\" + (cls.ignoreCase ? \"i\" : \"\") + (cls.unicode ? \"u\" : \"\");\n }\n\n /** @param {PEG.ast.GrammarExpectation} e */\n function buildExpectation(e) {\n switch (e.type) {\n case \"rule\": {\n return \"peg$otherExpectation(\\\"\" + stringEscape(e.value) + \"\\\")\";\n }\n case \"literal\": {\n return \"peg$literalExpectation(\\\"\"\n + stringEscape(e.value)\n + \"\\\", \"\n + e.ignoreCase\n + \")\";\n }\n case \"class\": {\n const parts = e.value.map(part => (Array.isArray(part)\n ? \"[\\\"\" + stringEscape(part[0]) + \"\\\", \\\"\" + stringEscape(part[1]) + \"\\\"]\"\n : \"\\\"\" + stringEscape(part) + \"\\\"\")).join(\", \");\n\n return \"peg$classExpectation([\"\n + parts + \"], \"\n + e.inverted + \", \"\n + e.ignoreCase + \", \"\n + e.unicode\n + \")\";\n }\n case \"any\": return \"peg$anyExpectation()\";\n // istanbul ignore next Because we never generate expectation type we cannot reach this branch\n default: throw new Error(\"Unknown expectation type (\" + JSON.stringify(e) + \")\");\n }\n }\n\n /**\n * @param {PEG.ast.FunctionConst} a\n * @param {number} i\n */\n function buildFunc(a, i) {\n return wrapInSourceNode(\n `\\n function ${f(i)}(${a.params.join(\", \")}) {`,\n reIndent(a.body, \" \"),\n a.location,\n \" }\"\n );\n }\n\n return new SourceNode(\n null, null, options.grammarSource, [\n literals.map(\n (c, i) => \" const \" + l(i) + \" = \" + buildLiteral(c) + \";\"\n ).concat(\"\", classes.map(\n (c, i) => \" const \" + r(i) + \" = \" + buildRegexp(c) + \";\"\n )).concat(\"\", expectations.map(\n (c, i) => \" const \" + e(i) + \" = \" + buildExpectation(c) + \";\"\n )).concat(\"\").join(\"\\n\"),\n ...functions.map(buildFunc),\n ]\n );\n }\n\n /**\n * @param {string} ruleNameCode\n * @param {number} ruleIndexCode\n */\n function generateRuleHeader(ruleNameCode, ruleIndexCode) {\n /** @type {string[]} */\n const parts = [];\n\n parts.push(\"\");\n\n if (options.trace) {\n parts.push(\n \"peg$tracer.trace({\",\n \" type: \\\"rule.enter\\\",\",\n \" rule: \" + ruleNameCode + \",\",\n \" location: peg$computeLocation(startPos, startPos, true)\",\n \"});\",\n \"\"\n );\n }\n\n if (options.cache) {\n parts.push(\n \"const key = peg$currPos * \" + ast.rules.length + \" + \" + ruleIndexCode + \";\",\n \"const cached = peg$resultsCache[key];\",\n \"\",\n \"if (cached) {\",\n \" peg$currPos = cached.nextPos;\",\n \"\"\n );\n\n if (options.trace) {\n parts.push(\n \"if (cached.result !== peg$FAILED) {\",\n \" peg$tracer.trace({\",\n \" type: \\\"rule.match\\\",\",\n \" rule: \" + ruleNameCode + \",\",\n \" result: cached.result,\",\n \" location: peg$computeLocation(startPos, peg$currPos, true)\",\n \" });\",\n \"} else {\",\n \" peg$tracer.trace({\",\n \" type: \\\"rule.fail\\\",\",\n \" rule: \" + ruleNameCode + \",\",\n \" location: peg$computeLocation(startPos, startPos, true)\",\n \" });\",\n \"}\",\n \"\"\n );\n }\n\n parts.push(\n \" return cached.result;\",\n \"}\",\n \"\"\n );\n }\n\n return parts;\n }\n\n /**\n * @param {string} ruleNameCode\n * @param {string} resultCode\n */\n function generateRuleFooter(ruleNameCode, resultCode) {\n /** @type {string[]} */\n const parts = [];\n\n if (options.cache) {\n parts.push(\n \"\",\n \"peg$resultsCache[key] = { nextPos: peg$currPos, result: \" + resultCode + \" };\"\n );\n }\n\n if (options.trace) {\n parts.push(\n \"\",\n \"if (\" + resultCode + \" !== peg$FAILED) {\",\n \" peg$tracer.trace({\",\n \" type: \\\"rule.match\\\",\",\n \" rule: \" + ruleNameCode + \",\",\n \" result: \" + resultCode + \",\",\n \" location: peg$computeLocation(startPos, peg$currPos, true)\",\n \" });\",\n \"} else {\",\n \" peg$tracer.trace({\",\n \" type: \\\"rule.fail\\\",\",\n \" rule: \" + ruleNameCode + \",\",\n \" location: peg$computeLocation(startPos, startPos, true)\",\n \" });\",\n \"}\"\n );\n }\n\n parts.push(\n \"\",\n \"return \" + resultCode + \";\"\n );\n\n return parts;\n }\n\n /** @param {PEG.ast.Rule} rule */\n function generateRuleFunction(rule) {\n /** @type {SourceArray} */\n const parts = [];\n const bytecode = /** @type {number[]} */(rule.bytecode);\n const stack = new Stack(rule.name, \"s\", \"let\", bytecode);\n\n /** @param {number[]} bc */\n function compile(bc) {\n let ip = 0;\n const end = bc.length;\n const parts = [];\n // eslint-disable-next-line no-useless-assignment\n let value = undefined;\n\n /**\n * @param {string} cond\n * @param {number} argCount\n * @param {((bc: number[])=>SourceArray) | null} [thenFn]\n */\n function compileCondition(cond, argCount, thenFn) {\n const baseLength = argCount + 3;\n const thenLength = bc[ip + baseLength - 2];\n const elseLength = bc[ip + baseLength - 1];\n\n const [thenCode, elseCode] = stack.checkedIf(\n ip,\n () => {\n ip += baseLength + thenLength;\n return (thenFn || compile)(bc.slice(ip - thenLength, ip));\n },\n (elseLength > 0)\n ? () => {\n ip += elseLength;\n return compile(bc.slice(ip - elseLength, ip));\n }\n : null\n );\n\n parts.push(\"if (\" + cond + \") {\");\n parts.push(...indent2(thenCode));\n if (elseLength > 0) {\n parts.push(\"} else {\");\n parts.push(...indent2(elseCode));\n }\n parts.push(\"}\");\n }\n\n /**\n * Get the code to retrieve an input chunk. -1 means \"one full Unicode\n * character\", which might be one or two UTF-16 code units (JS chars).\n * @param {number} inputChunkLength\n * @returns {string}\n */\n function getChunkCode(inputChunkLength) {\n switch (inputChunkLength) {\n case -1:\n return \"peg$getUnicode()\";\n case 1:\n return \"input.charAt(peg$currPos)\";\n default:\n return `input.substr(peg$currPos, ${inputChunkLength})`;\n }\n }\n\n /**\n * Get the code that increments peg$currPos correctly. -1 means \"one\n * full Unicode character\", which might be one or two UTF-16 code units\n * (JS chars), in which case the varname is required.\n *\n * @param {number} inputChunkLength\n * @param {string} varName\n * @returns {string}\n */\n function getIncrCode(inputChunkLength, varName) {\n switch (inputChunkLength) {\n case -1:\n return `peg$currPos += ${varName}.length;`;\n case 1:\n return \"peg$currPos++;\";\n default:\n return \"peg$currPos += (\" + inputChunkLength + \");\";\n }\n }\n\n /**\n MATCH_* opcodes typically do something like\n\n if (<test>(input.substr(peg$currPos, length))) {\n sN = input.substr(peg$currPos, length);\n ...\n } else {\n sN = peg$FAILED;\n ...\n }\n\n compileInputChunkCondition will convert that to\n\n sN = input.substr(peg$currPos, length);\n if (<test>(sN)) {\n ...\n } else {\n sN = peg$FAILED;\n ...\n }\n\n and avoid extracting the sub string twice.\n @param {(chunk:string, optimized:boolean)=>string} condFn\n @param {number} argCount\n @param {number} inputChunkLength\n */\n function compileInputChunkCondition(\n condFn, argCount, inputChunkLength\n ) {\n const baseLength = argCount + 3;\n let inputChunk = getChunkCode(inputChunkLength);\n let thenFn = null;\n if (bc[ip + baseLength] === op.ACCEPT_N\n && bc[ip + baseLength + 1] === inputChunkLength) {\n // Push the assignment to the next available variable.\n parts.push(stack.push(inputChunk));\n inputChunk = stack.pop();\n /** @param {number[]} bc */\n thenFn = bc => {\n // The bc[0] is an ACCEPT_N, and bc[1] is the N. We've already done\n // the assignment (before the if), so we just need to bump the\n // stack, and increment peg$currPos appropriately.\n stack.sp++;\n const code = compile(bc.slice(2));\n code.unshift(getIncrCode(inputChunkLength, inputChunk));\n return code;\n };\n }\n compileCondition(condFn(inputChunk, thenFn !== null), argCount, thenFn);\n }\n\n /** @param {string} cond */\n function compileLoop(cond) {\n const baseLength = 2;\n const bodyLength = bc[ip + baseLength - 1];\n\n const bodyCode = stack.checkedLoop(ip, () => {\n ip += baseLength + bodyLength;\n return compile(bc.slice(ip - bodyLength, ip));\n });\n\n parts.push(\"while (\" + cond + \") {\");\n parts.push(...indent2(bodyCode));\n parts.push(\"}\");\n }\n\n /** @param {number} baseLength */\n function compileCall(baseLength) {\n const paramsLength = bc[ip + baseLength - 1];\n\n return f(bc[ip + 1]) + \"(\"\n + bc.slice(ip + baseLength, ip + baseLength + paramsLength).map(\n p => stack.index(p)\n ).join(\", \")\n + \")\";\n }\n\n while (ip < end) {\n switch (bc[ip]) {\n case op.PUSH_EMPTY_STRING: // PUSH_EMPTY_STRING\n parts.push(stack.push(\"''\"));\n ip++;\n break;\n\n case op.PUSH_CURR_POS: // PUSH_CURR_POS\n parts.push(stack.push(\"peg$currPos\"));\n ip++;\n break;\n\n case op.PUSH_UNDEFINED: // PUSH_UNDEFINED\n parts.push(stack.push(\"undefined\"));\n ip++;\n break;\n\n case op.PUSH_NULL: // PUSH_NULL\n parts.push(stack.push(\"null\"));\n ip++;\n break;\n\n case op.PUSH_FAILED: // PUSH_FAILED\n parts.push(stack.push(\"peg$FAILED\"));\n ip++;\n break;\n\n case op.PUSH_EMPTY_ARRAY: // PUSH_EMPTY_ARRAY\n parts.push(stack.push(\"[]\"));\n ip++;\n break;\n\n case op.POP: // POP\n stack.pop();\n ip++;\n break;\n\n case op.POP_CURR_POS: // POP_CURR_POS\n parts.push(\"peg$currPos = \" + stack.pop() + \";\");\n ip++;\n break;\n\n case op.POP_N: // POP_N n\n stack.pop(bc[ip + 1]);\n ip += 2;\n break;\n\n case op.NIP: // NIP\n value = stack.pop();\n stack.pop();\n parts.push(stack.push(value));\n ip++;\n break;\n\n case op.APPEND: // APPEND\n value = stack.pop();\n parts.push(stack.top() + \".push(\" + value + \");\");\n ip++;\n break;\n\n case op.WRAP: // WRAP n\n parts.push(\n stack.push(\"[\" + stack.pop(bc[ip + 1]).join(\", \") + \"]\")\n );\n ip += 2;\n break;\n\n case op.TEXT: // TEXT\n parts.push(\n stack.push(\"input.substring(\" + stack.pop() + \", peg$currPos)\")\n );\n ip++;\n break;\n\n case op.PLUCK: { // PLUCK n, k, p1, ..., pK\n const baseLength = 3;\n const paramsLength = bc[ip + baseLength - 1];\n const n = baseLength + paramsLength;\n value = bc.slice(ip + baseLength, ip + n);\n value = paramsLength === 1\n ? stack.index(value[0])\n : `[ ${\n value.map(p => stack.index(p)).join(\", \")\n } ]`;\n stack.pop(bc[ip + 1]);\n parts.push(stack.push(value));\n ip += n;\n break;\n }\n\n case op.IF: // IF t, f\n compileCondition(stack.top(), 0);\n break;\n\n case op.IF_ERROR: // IF_ERROR t, f\n compileCondition(stack.top() + \" === peg$FAILED\", 0);\n break;\n\n case op.IF_NOT_ERROR: // IF_NOT_ERROR t, f\n compileCondition(stack.top() + \" !== peg$FAILED\", 0);\n break;\n\n case op.IF_LT: // IF_LT min, t, f\n compileCondition(stack.top() + \".length < \" + bc[ip + 1], 1);\n break;\n\n case op.IF_GE: // IF_GE max, t, f\n compileCondition(stack.top() + \".length >= \" + bc[ip + 1], 1);\n break;\n\n case op.IF_LT_DYNAMIC: // IF_LT_DYNAMIC min, t, f\n compileCondition(stack.top() + \".length < (\" + stack.index(bc[ip + 1]) + \"|0)\", 1);\n break;\n\n case op.IF_GE_DYNAMIC: // IF_GE_DYNAMIC max, t, f\n compileCondition(stack.top() + \".length >= (\" + stack.index(bc[ip + 1]) + \"|0)\", 1);\n break;\n\n case op.WHILE_NOT_ERROR: // WHILE_NOT_ERROR b\n compileLoop(stack.top() + \" !== peg$FAILED\");\n break;\n\n case op.MATCH_ANY: // MATCH_ANY a, f, ...\n compileCondition(\"input.length > peg$currPos\", 0);\n break;\n\n case op.MATCH_STRING: { // MATCH_STRING s, a, f, ...\n const litNum = bc[ip + 1];\n const literal = literals[litNum];\n compileInputChunkCondition(\n (inputChunk, optimized) => {\n if (literal.length > 1) {\n return `${inputChunk} === ${l(litNum)}`;\n }\n inputChunk = !optimized\n ? \"input.charCodeAt(peg$currPos)\"\n : `${inputChunk}.charCodeAt(0)`;\n return `${inputChunk} === ${literal.charCodeAt(0)}`;\n },\n 1,\n literal.length\n );\n break;\n }\n\n case op.MATCH_STRING_IC: { // MATCH_STRING_IC s, a, f, ...\n const litNum = bc[ip + 1];\n compileInputChunkCondition(\n inputChunk => `${inputChunk}.toLowerCase() === ${l(litNum)}`,\n 1,\n literals[litNum].length\n );\n break;\n }\n\n case op.MATCH_CHAR_CLASS: { // MATCH_CHAR_CLASS c, a, f, ...\n const regNum = bc[ip + 1];\n compileInputChunkCondition(\n inputChunk => `${r(regNum)}.test(${inputChunk})`, 1, 1\n );\n break;\n }\n\n case op.MATCH_UNICODE_CLASS: { // MATCH_UNICODE_CLASS c, a, f, ...\n const regNum = bc[ip + 1];\n compileInputChunkCondition(\n inputChunk => `${r(regNum)}.test(${inputChunk})`, 1, -1\n );\n break;\n }\n\n case op.ACCEPT_N: // ACCEPT_N n\n parts.push(stack.push(getChunkCode(bc[ip + 1])));\n parts.push(getIncrCode(bc[ip + 1], stack.top()));\n ip += 2;\n break;\n\n case op.ACCEPT_STRING: // ACCEPT_STRING s\n parts.push(stack.push(l(bc[ip + 1])));\n parts.push(\n literals[bc[ip + 1]].length > 1\n ? \"peg$currPos += \" + literals[bc[ip + 1]].length + \";\"\n : \"peg$currPos++;\"\n );\n ip += 2;\n break;\n\n case op.FAIL: // FAIL e\n parts.push(stack.push(\"peg$FAILED\"));\n parts.push(\"if (peg$silentFails === 0) { peg$fail(\" + e(bc[ip + 1]) + \"); }\");\n ip += 2;\n break;\n\n case op.LOAD_SAVED_POS: // LOAD_SAVED_POS p\n parts.push(\"peg$savedPos = \" + stack.index(bc[ip + 1]) + \";\");\n ip += 2;\n break;\n\n case op.UPDATE_SAVED_POS: // UPDATE_SAVED_POS\n parts.push(\"peg$savedPos = peg$currPos;\");\n ip++;\n break;\n\n case op.CALL: // CALL f, n, pc, p1, p2, ..., pN\n value = compileCall(4);\n stack.pop(bc[ip + 2]);\n parts.push(stack.push(value));\n ip += 4 + bc[ip + 3];\n break;\n\n case op.RULE: // RULE r\n parts.push(stack.push(name(ast.rules[bc[ip + 1]].name) + \"()\"));\n ip += 2;\n break;\n\n case op.LIBRARY_RULE: { // LIBRARY_RULE module, name\n const nm = bc[ip + 2];\n const cnm = (nm === -1) ? \"\" : \", \\\"\" + importedNames[nm] + \"\\\"\";\n parts.push(stack.push(\"peg$callLibrary(\"\n + gi(bc[ip + 1])\n + cnm\n + \")\"));\n ip += 3;\n break;\n }\n\n case op.SILENT_FAILS_ON: // SILENT_FAILS_ON\n parts.push(\"peg$silentFails++;\");\n ip++;\n break;\n\n case op.SILENT_FAILS_OFF: // SILENT_FAILS_OFF\n parts.push(\"peg$silentFails--;\");\n ip++;\n break;\n\n case op.SOURCE_MAP_PUSH:\n stack.sourceMapPush(\n parts,\n locations[bc[ip + 1]]\n );\n ip += 2;\n break;\n\n case op.SOURCE_MAP_POP: {\n stack.sourceMapPop();\n ip++;\n break;\n }\n\n case op.SOURCE_MAP_LABEL_PUSH:\n stack.labels[bc[ip + 1]] = {\n label: literals[bc[ip + 2]],\n location: locations[bc[ip + 3]],\n };\n ip += 4;\n break;\n\n case op.SOURCE_MAP_LABEL_POP:\n delete stack.labels[bc[ip + 1]];\n ip += 2;\n break;\n\n // istanbul ignore next Because we never generate invalid bytecode we cannot reach this branch\n default:\n throw new Error(\"Invalid opcode: \" + bc[ip] + \".\");\n }\n }\n\n return parts;\n }\n\n const code = compile(bytecode);\n\n parts.push(wrapInSourceNode(\n \"function \",\n name(rule.name),\n rule.nameLocation,\n \"() {\\n\",\n rule.name\n ));\n\n if (options.trace) {\n parts.push(\" var startPos = peg$currPos;\");\n }\n\n parts.push(indent2(stack.defines()));\n\n parts.push(...indent2(generateRuleHeader(\n \"\\\"\" + stringEscape(rule.name) + \"\\\"\",\n asts.indexOfRule(ast, rule.name)\n )));\n parts.push(...indent2(code));\n parts.push(...indent2(generateRuleFooter(\n \"\\\"\" + stringEscape(rule.name) + \"\\\"\",\n stack.result()\n )));\n\n parts.push(\"}\");\n parts.push(\"\");\n\n return parts;\n }\n\n /**\n * @template {string} T\n * @param {PEG.ast.CodeBlock<T>} node\n */\n function ast2SourceNode(node) {\n // If location is not defined (for example, AST node was replaced\n // by a plugin and does not provide location information, see\n // plugin-api.spec.js/\"can replace parser\") returns initializer code\n if (node.codeLocation) {\n // Append \"$\" to the name to create an impossible rule name\n // so that names will not collide with rule names\n return toSourceNode(node.code, node.codeLocation, \"$\" + node.type);\n }\n\n return node.code;\n }\n\n function generateToplevel() {\n const parts = [];\n\n let topLevel = ast.topLevelInitializer;\n if (topLevel) {\n if (Array.isArray(topLevel)) {\n if (options.format === \"es\") {\n const imps = [];\n const codes = [];\n for (const tli of topLevel) {\n const [\n imports,\n code,\n ] = /** @type {PEG.ast.TopLevelInitializer[]} */ (\n parse(tli.code, {\n startRule: \"ImportsAndSource\",\n grammarSource: new GrammarLocation(\n tli.codeLocation.source,\n tli.codeLocation.start\n ),\n })\n );\n if (imports.code) {\n imps.push(imports);\n codes.push(code);\n } else {\n // Prefer the original\n codes.push(tli);\n }\n }\n // Imports go at the end so that when reversed, they end up in front.\n topLevel = codes.concat(imps);\n }\n // Put library code before code using it.\n const reversed = topLevel.slice(0).reverse();\n for (const tli of reversed) {\n parts.push(ast2SourceNode(tli));\n parts.push(\"\");\n }\n } else {\n parts.push(ast2SourceNode(topLevel));\n parts.push(\"\");\n }\n }\n\n parts.push(\n \"class peg$SyntaxError extends SyntaxError {\",\n \" constructor(message, expected, found, location) {\",\n \" super(message);\",\n \" this.expected = expected;\",\n \" this.found = found;\",\n \" this.location = location;\",\n \" this.name = \\\"SyntaxError\\\";\",\n \" }\",\n \"\",\n \" format(sources) {\",\n \" let str = \\\"Error: \\\" + this.message;\",\n \" if (this.location) {\",\n \" let src = null;\",\n \" const st = sources.find(s => s.source === this.location.source);\",\n \" if (st) {\",\n \" src = st.text.split(/\\\\r\\\\n|\\\\n|\\\\r/g);\",\n \" }\",\n \" const s = this.location.start;\",\n \" const offset_s = (this.location.source && (typeof this.location.source.offset === \\\"function\\\"))\",\n \" ? this.location.source.offset(s)\",\n \" : s;\",\n \" const loc = this.location.source + \\\":\\\" + offset_s.line + \\\":\\\" + offset_s.column;\",\n \" if (src) {\",\n \" const e = this.location.end;\",\n \" const filler = \\\"\\\".padEnd(offset_s.line.toString().length, \\\" \\\");\",\n \" const line = src[s.line - 1];\",\n \" const last = s.line === e.line ? e.column : line.length + 1;\",\n \" const hatLen = (last - s.column) || 1;\",\n \" str += \\\"\\\\n --> \\\" + loc + \\\"\\\\n\\\"\",\n \" + filler + \\\" |\\\\n\\\"\",\n \" + offset_s.line + \\\" | \\\" + line + \\\"\\\\n\\\"\",\n \" + filler + \\\" | \\\" + \\\"\\\".padEnd(s.column - 1, \\\" \\\")\",\n \" + \\\"\\\".padEnd(hatLen, \\\"^\\\");\",\n \" } else {\",\n \" str += \\\"\\\\n at \\\" + loc;\",\n \" }\",\n \" }\",\n \" return str;\",\n \" }\",\n \"\",\n \" static buildMessage(expected, found) {\",\n \" function hex(ch) {\",\n \" return ch.codePointAt(0).toString(16).toUpperCase();\",\n \" }\",\n \"\",\n \" const nonPrintable = Object.prototype.hasOwnProperty.call(RegExp.prototype, \\\"unicode\\\")\",\n \" ? new RegExp(\\\"[\\\\\\\\p{C}\\\\\\\\p{Mn}\\\\\\\\p{Mc}]\\\", \\\"gu\\\")\",\n \" : null;\",\n \" function unicodeEscape(s) {\",\n \" if (nonPrintable) {\",\n \" return s.replace(nonPrintable, ch => \\\"\\\\\\\\u{\\\" + hex(ch) + \\\"}\\\");\",\n \" }\",\n \" return s;\",\n \" }\",\n \"\",\n \" function literalEscape(s) {\",\n \" return unicodeEscape(s\",\n \" .replace(/\\\\\\\\/g, \\\"\\\\\\\\\\\\\\\\\\\")\", // Backslash\n \" .replace(/\\\"/g, \\\"\\\\\\\\\\\\\\\"\\\")\", // Closing double quote\n \" .replace(/\\\\0/g, \\\"\\\\\\\\0\\\")\", // Null\n \" .replace(/\\\\t/g, \\\"\\\\\\\\t\\\")\", // Horizontal tab\n \" .replace(/\\\\n/g, \\\"\\\\\\\\n\\\")\", // Line feed\n \" .replace(/\\\\r/g, \\\"\\\\\\\\r\\\")\", // Carriage return\n \" .replace(/[\\\\x00-\\\\x0F]/g, ch => \\\"\\\\\\\\x0\\\" + hex(ch))\",\n \" .replace(/[\\\\x10-\\\\x1F\\\\x7F-\\\\x9F]/g, ch => \\\"\\\\\\\\x\\\" + hex(ch)));\",\n \" }\",\n \"\",\n \" function classEscape(s) {\",\n \" return unicodeEscape(s\",\n \" .replace(/\\\\\\\\/g, \\\"\\\\\\\\\\\\\\\\\\\")\", // Backslash\n \" .replace(/\\\\]/g, \\\"\\\\\\\\]\\\")\", // Closing bracket\n \" .replace(/\\\\^/g, \\\"\\\\\\\\^\\\")\", // Caret\n \" .replace(/-/g, \\\"\\\\\\\\-\\\")\", // Dash\n \" .replace(/\\\\0/g, \\\"\\\\\\\\0\\\")\", // Null\n \" .replace(/\\\\t/g, \\\"\\\\\\\\t\\\")\", // Horizontal tab\n \" .replace(/\\\\n/g, \\\"\\\\\\\\n\\\")\", // Line feed\n \" .replace(/\\\\r/g, \\\"\\\\\\\\r\\\")\", // Carriage return\n \" .replace(/[\\\\x00-\\\\x0F]/g, ch => \\\"\\\\\\\\x0\\\" + hex(ch))\",\n \" .replace(/[\\\\x10-\\\\x1F\\\\x7F-\\\\x9F]/g, ch => \\\"\\\\\\\\x\\\" + hex(ch)));\",\n \" }\",\n \"\",\n \" const DESCRIBE_EXPECTATION_FNS = {\",\n \" literal(expectation) {\",\n \" return \\\"\\\\\\\"\\\" + literalEscape(expectation.text) + \\\"\\\\\\\"\\\";\",\n \" },\",\n \"\",\n \" class(expectation) {\",\n \" const escapedParts = expectation.parts.map(\",\n \" part => (Array.isArray(part)\",\n \" ? classEscape(part[0]) + \\\"-\\\" + classEscape(part[1])\",\n \" : classEscape(part))\",\n \" );\",\n \"\",\n \" return \\\"[\\\" + (expectation.inverted ? \\\"^\\\" : \\\"\\\") + escapedParts.join(\\\"\\\") + \\\"]\\\" + (expectation.unicode ? \\\"u\\\" : \\\"\\\");\",\n \" },\",\n \"\",\n \" any() {\",\n \" return \\\"any character\\\";\",\n \" },\",\n \"\",\n \" end() {\",\n \" return \\\"end of input\\\";\",\n \" },\",\n \"\",\n \" other(expectation) {\",\n \" return expectation.description;\",\n \" },\",\n \" };\",\n \"\",\n \" function describeExpectation(expectation) {\",\n \" return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\",\n \" }\",\n \"\",\n \" function describeExpected(expected) {\",\n \" const descriptions = expected.map(describeExpectation);\",\n \" descriptions.sort();\",\n \"\",\n \" if (descriptions.length > 0) {\",\n \" let j = 1;\",\n \" for (let i = 1; i < descriptions.length; i++) {\",\n \" if (descriptions[i - 1] !== descriptions[i]) {\",\n \" descriptions[j] = descriptions[i];\",\n \" j++;\",\n \" }\",\n \" }\",\n \" descriptions.length = j;\",\n \" }\",\n \"\",\n \" switch (descriptions.length) {\",\n \" case 1:\",\n \" return descriptions[0];\",\n \"\",\n \" case 2:\",\n \" return descriptions[0] + \\\" or \\\" + descriptions[1];\",\n \"\",\n \" default:\",\n \" return descriptions.slice(0, -1).join(\\\", \\\")\",\n \" + \\\", or \\\"\",\n \" + descriptions[descriptions.length - 1];\",\n \" }\",\n \" }\",\n \"\",\n \" function describeFound(found) {\",\n \" return found ? \\\"\\\\\\\"\\\" + literalEscape(found) + \\\"\\\\\\\"\\\" : \\\"end of input\\\";\",\n \" }\",\n \"\",\n \" return \\\"Expected \\\" + describeExpected(expected) + \\\" but \\\" + describeFound(found) + \\\" found.\\\";\",\n \" }\",\n \"}\",\n \"\"\n );\n\n if (options.trace) {\n parts.push(\n \"class peg$DefaultTracer {\",\n \" constructor() {\",\n \" this.indentLevel = 0;\",\n \" }\",\n \"\",\n \" trace(event) {\",\n \" const that = this;\",\n \"\",\n \" function log(event) {\",\n \" console?.log?.(\",\n \" event.location.start.line + \\\":\\\" + event.location.start.column + \\\"-\\\"\",\n \" + event.location.end.line + \\\":\\\" + event.location.end.column + \\\" \\\"\",\n \" + event.type.padEnd(10, \\\" \\\")\",\n \" + \\\"\\\".padEnd((that.indentLevel * 2) + 1, \\\" \\\") + event.rule\",\n \" );\",\n \" }\",\n \"\",\n \" switch (event.type) {\",\n \" case \\\"rule.enter\\\":\",\n \" log(event);\",\n \" this.indentLevel++;\",\n \" break;\",\n \"\",\n \" case \\\"rule.match\\\":\",\n \" this.indentLevel--;\",\n \" log(event);\",\n \" break;\",\n \"\",\n \" case \\\"rule.fail\\\":\",\n \" this.indentLevel--;\",\n \" log(event);\",\n \" break;\",\n \"\",\n \" default:\",\n \" throw new Error(\\\"Invalid event type: \\\" + event.type + \\\".\\\");\",\n \" }\",\n \" }\",\n \"}\",\n \"\"\n );\n }\n\n const startRuleFunctions = \"{\\n\"\n + allowedStartRules.map(r => ` ${r}: ${name(r)},\\n`).join(\"\")\n + \" }\";\n const startRuleFunction = name(allowedStartRules[0]);\n\n parts.push(\n \"function peg$parse(input, options) {\",\n \" options = options !== undefined ? options : {};\",\n \"\",\n \" const peg$FAILED = {};\",\n \" const peg$source = options.grammarSource;\",\n \"\",\n \" const peg$startRuleFunctions = \" + startRuleFunctions + \";\",\n \" let peg$startRuleFunction = \" + startRuleFunction + \";\",\n \"\",\n generateTables(),\n \"\",\n \" let peg$currPos = options.peg$currPos | 0;\",\n \" let peg$savedPos = peg$currPos;\",\n \" const peg$posDetailsCache = [{ line: 1, column: 1 }];\",\n \" let peg$maxFailPos = peg$currPos;\",\n \" let peg$maxFailExpected = options.peg$maxFailExpected || [];\",\n \" let peg$silentFails = options.peg$silentFails | 0;\", // 0 = report failures, > 0 = silence failures\n \"\"\n );\n\n if (options.cache) {\n parts.push(\n \" let peg$resultsCache = {};\",\n \"\"\n );\n }\n\n if (options.trace) {\n parts.push(\n \" let peg$tracer = \\\"tracer\\\" in options ? options.tracer : new peg$DefaultTracer();\",\n \"\"\n );\n }\n\n parts.push(\n \" let peg$result;\",\n \"\",\n \" if (options.startRule) {\",\n \" if (!(options.startRule in peg$startRuleFunctions)) {\",\n \" throw new Error(\\\"Can't start parsing from rule \\\\\\\"\\\" + options.startRule + \\\"\\\\\\\".\\\");\",\n \" }\",\n \"\",\n \" peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\",\n \" }\",\n \"\",\n \" function text() {\",\n \" return input.substring(peg$savedPos, peg$currPos);\",\n \" }\",\n \"\",\n \" function offset() {\",\n \" return peg$savedPos;\",\n \" }\",\n \"\",\n \" function range() {\",\n \" return {\",\n \" source: peg$source,\",\n \" start: peg$savedPos,\",\n \" end: peg$currPos,\",\n \" };\",\n \" }\",\n \"\",\n \" function location() {\",\n \" return peg$computeLocation(peg$savedPos, peg$currPos);\",\n \" }\",\n \"\",\n \" function expected(description, location) {\",\n \" location = location !== undefined\",\n \" ? location\",\n \" : peg$computeLocation(peg$savedPos, peg$currPos);\",\n \"\",\n \" throw peg$buildStructuredError(\",\n \" [peg$otherExpectation(description)],\",\n \" input.substring(peg$savedPos, peg$currPos),\",\n \" location\",\n \" );\",\n \" }\",\n \"\",\n \" function error(message, location) {\",\n \" location = location !== undefined\",\n \" ? location\",\n \" : peg$computeLocation(peg$savedPos, peg$currPos);\",\n \"\",\n \" throw peg$buildSimpleError(message, location);\",\n \" }\",\n \"\",\n \" function peg$getUnicode(pos = peg$currPos) {\",\n \" const cp = input.codePointAt(pos);\",\n \" if (cp === undefined) {\",\n \" return \\\"\\\";\",\n \" }\",\n \" return String.fromCodePoint(cp);\",\n \" }\",\n \"\",\n \" function peg$literalExpectation(text, ignoreCase) {\",\n \" return { type: \\\"literal\\\", text, ignoreCase };\",\n \" }\",\n \"\",\n \" function peg$classExpectation(parts, inverted, ignoreCase, unicode) {\",\n \" return { type: \\\"class\\\", parts, inverted, ignoreCase, unicode };\",\n \" }\",\n \"\",\n \" function peg$anyExpectation() {\",\n \" return { type: \\\"any\\\" };\",\n \" }\",\n \"\",\n \" function peg$endExpectation() {\",\n \" return { type: \\\"end\\\" };\",\n \" }\",\n \"\",\n \" function peg$otherExpectation(description) {\",\n \" return { type: \\\"other\\\", description };\",\n \" }\",\n \"\",\n \" function peg$computePosDetails(pos) {\",\n \" let details = peg$posDetailsCache[pos];\",\n \" let p;\",\n \"\",\n \" if (details) {\",\n \" return details;\",\n \" } else {\",\n \" if (pos >= peg$posDetailsCache.length) {\",\n \" p = peg$posDetailsCache.length - 1;\",\n \" } else {\",\n \" p = pos;\",\n \" while (!peg$posDetailsCache[--p]) {}\",\n \" }\",\n \"\",\n \" details = peg$posDetailsCache[p];\",\n \" details = {\",\n \" line: details.line,\",\n \" column: details.column,\",\n \" };\",\n \"\",\n \" while (p < pos) {\",\n \" if (input.charCodeAt(p) === 10) {\",\n \" details.line++;\",\n \" details.column = 1;\",\n \" } else {\",\n \" details.column++;\",\n \" }\",\n \"\",\n \" p++;\",\n \" }\",\n \"\",\n \" peg$posDetailsCache[pos] = details;\",\n \"\",\n \" return details;\",\n \" }\",\n \" }\",\n \"\",\n \" function peg$computeLocation(startPos, endPos, offset) {\",\n \" const startPosDetails = peg$computePosDetails(startPos);\",\n \" const endPosDetails = peg$computePosDetails(endPos);\",\n \"\",\n \" const res = {\",\n \" source: peg$source,\",\n \" start: {\",\n \" offset: startPos,\",\n \" line: startPosDetails.line,\",\n \" column: startPosDetails.column,\",\n \" },\",\n \" end: {\",\n \" offset: endPos,\",\n \" line: endPosDetails.line,\",\n \" column: endPosDetails.column,\",\n \" },\",\n \" };\",\n \" if (offset && peg$source && (typeof peg$source.offset === \\\"function\\\")) {\",\n \" res.start = peg$source.offset(res.start);\",\n \" res.end = peg$source.offset(res.end);\",\n \" }\",\n \" return res;\",\n \" }\",\n \"\",\n \" function peg$fail(expected) {\",\n \" if (peg$currPos < peg$maxFailPos) { return; }\",\n \"\",\n \" if (peg$currPos > peg$maxFailPos) {\",\n \" peg$maxFailPos = peg$currPos;\",\n \" peg$maxFailExpected = [];\",\n \" }\",\n \"\",\n \" peg$maxFailExpected.push(expected);\",\n \" }\",\n \"\",\n \" function peg$buildSimpleError(message, location) {\",\n \" return new peg$SyntaxError(message, null, null, location);\",\n \" }\",\n \"\",\n \" function peg$buildStructuredError(expected, found, location) {\",\n \" return new peg$SyntaxError(\",\n \" peg$SyntaxError.buildMessage(expected, found),\",\n \" expected,\",\n \" found,\",\n \" location\",\n \" );\",\n \" }\",\n \"\"\n );\n\n if (ast.imports.length > 0) {\n parts.push(\n \" function peg$callLibrary(lib, startRule) {\",\n \" const opts = Object.assign({}, options, {\",\n \" startRule: startRule,\",\n \" peg$currPos: peg$currPos,\",\n \" peg$silentFails: peg$silentFails,\",\n \" peg$library: true,\",\n \" peg$maxFailExpected: peg$maxFailExpected\",\n \" });\",\n \" const res = lib.parse(input, opts);\",\n \" peg$currPos = res.peg$currPos;\",\n \" peg$maxFailPos = res.peg$maxFailPos;\",\n \" peg$maxFailExpected = res.peg$maxFailExpected;\",\n \" return (res.peg$result === res.peg$FAILED) ? peg$FAILED : res.peg$result;\",\n \" }\",\n \"\"\n );\n }\n\n ast.rules.forEach(rule => {\n parts.push(...indent2(generateRuleFunction(rule)));\n });\n\n if (ast.initializer) {\n if (Array.isArray(ast.initializer)) {\n for (const init of ast.initializer) {\n parts.push(ast2SourceNode(init));\n parts.push(\"\");\n }\n } else {\n parts.push(ast2SourceNode(ast.initializer));\n parts.push(\"\");\n }\n }\n\n parts.push(\n \" peg$result = peg$startRuleFunction();\",\n \"\",\n \" const peg$success = (peg$result !== peg$FAILED && peg$currPos === input.length);\",\n \" function peg$throw() {\",\n \" if (peg$result !== peg$FAILED && peg$currPos < input.length) {\",\n \" peg$fail(peg$endExpectation());\",\n \" }\",\n \"\",\n \" throw peg$buildStructuredError(\",\n \" peg$maxFailExpected,\",\n \" peg$maxFailPos < input.length ? peg$getUnicode(peg$maxFailPos) : null,\",\n \" peg$maxFailPos < input.length\",\n \" ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1)\",\n \" : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\",\n \" );\",\n \" }\",\n \" if (options.peg$library) {\",\n // Hide this from TypeScript. It's internal-only until library mode is stabilized.\n \" return /** @type {any} */ ({\",\n \" peg$result,\",\n \" peg$currPos,\",\n \" peg$FAILED,\",\n \" peg$maxFailExpected,\",\n \" peg$maxFailPos,\",\n \" peg$success,\",\n \" peg$throw: peg$success ? undefined : peg$throw,\",\n \" });\",\n \" }\",\n \" if (peg$success) {\",\n \" return peg$result;\",\n \" } else {\",\n \" peg$throw();\",\n \" }\",\n \"}\"\n );\n\n return new SourceNode(\n // This expression has a better readability when on two lines\n // eslint-disable-next-line @stylistic/function-call-argument-newline\n null, null, options.grammarSource,\n parts.map(s => (s instanceof SourceNode ? s : s + \"\\n\"))\n );\n }\n\n /** @param {SourceNode} toplevelCode */\n function generateWrapper(toplevelCode) {\n /** @return {(string|SourceNode)[]} */\n function generateGeneratedByComment() {\n return [\n `// @generated by Peggy ${version}.`,\n \"//\",\n \"// https://peggyjs.org/\",\n ];\n }\n\n function generateParserObject() {\n const res = [\"{\"];\n if (options.trace) {\n res.push(\" DefaultTracer: peg$DefaultTracer,\");\n }\n\n if (options.allowedStartRules) {\n res.push(\" StartRules: [\" + options.allowedStartRules.map(r => '\"' + r + '\"').join(\", \") + \"],\");\n }\n\n res.push(\n \" SyntaxError: peg$SyntaxError,\",\n \" parse: peg$parse,\"\n );\n\n res.push(\"}\");\n return res.join(\"\\n\");\n }\n\n const generators = {\n bare() {\n if ((Object.keys(dependencies).length > 0)\n || (ast.imports.length > 0)) {\n throw new Error(\"Dependencies not supported in format 'bare'.\");\n }\n return [\n ...generateGeneratedByComment(),\n \"(function() {\",\n \" \\\"use strict\\\";\",\n toplevelCode,\n indent2(\"return \" + generateParserObject() + \";\"),\n \"})()\",\n ];\n },\n\n commonjs() {\n const dependencyVars = Object.keys(dependencies);\n\n const parts = generateGeneratedByComment();\n parts.push(\n \"\",\n \"\\\"use strict\\\";\"\n );\n\n if (dependencyVars.length > 0) {\n dependencyVars.forEach(variable => {\n parts.push(\n \"const \" + variable\n + \" = require(\\\"\"\n + stringEscape(dependencies[variable])\n + \"\\\");\"\n );\n });\n parts.push(\"\");\n }\n\n const impLen = ast.imports.length;\n for (let i = 0; i < impLen; i++) {\n parts.push(\n \"const \" + gi(i)\n + \" = require(\\\"\"\n + stringEscape(ast.imports[i].from.module)\n + \"\\\");\"\n );\n }\n\n parts.push(\n \"\",\n toplevelCode,\n \"\",\n \"module.exports = \" + generateParserObject() + \";\"\n );\n\n return parts;\n },\n\n es() {\n const dependencyVars = Object.keys(dependencies);\n\n const parts = generateGeneratedByComment();\n parts.push(\"\");\n\n if (dependencyVars.length > 0) {\n dependencyVars.forEach(variable => {\n parts.push(\n \"import \" + variable\n + \" from \\\"\"\n + stringEscape(dependencies[variable])\n + \"\\\";\"\n );\n });\n parts.push(\"\");\n }\n\n for (let i = 0; i < ast.imports.length; i++) {\n parts.push(\n \"import * as \" + gi(i)\n + \" from \\\"\"\n + stringEscape(ast.imports[i].from.module)\n + \"\\\";\"\n );\n }\n\n parts.push(\n \"\",\n toplevelCode,\n \"\"\n );\n\n parts.push(\n \"const peg$allowedStartRules = [\",\n \" \" + (options.allowedStartRules ? options.allowedStartRules.map(r => '\"' + r + '\"').join(\",\\n \") : \"\"),\n \"];\",\n \"\"\n );\n\n parts.push(\n \"export {\"\n );\n\n if (options.trace) {\n parts.push(\" peg$DefaultTracer as DefaultTracer,\");\n }\n\n parts.push(\n \" peg$allowedStartRules as StartRules,\",\n \" peg$SyntaxError as SyntaxError,\",\n \" peg$parse as parse\",\n \"};\"\n );\n\n return parts;\n },\n\n amd() {\n if (ast.imports.length > 0) {\n throw new Error(\"Imports are not supported in format 'amd'.\");\n }\n\n const dependencyVars = Object.keys(dependencies);\n const dependencyIds = dependencyVars.map(v => dependencies[v]);\n const deps = \"[\"\n + dependencyIds.map(\n id => \"\\\"\" + stringEscape(id) + \"\\\"\"\n ).join(\", \")\n + \"]\";\n const params = dependencyVars.join(\", \");\n\n return [\n ...generateGeneratedByComment(),\n \"define(\" + deps + \", function(\" + params + \") {\",\n \" \\\"use strict\\\";\",\n toplevelCode,\n \"\",\n indent2(\"return \" + generateParserObject() + \";\"),\n \"});\",\n ];\n },\n\n globals() {\n if ((Object.keys(dependencies).length > 0)\n || (ast.imports.length > 0)) {\n throw new Error(\"Dependencies not supported in format 'globals'.\");\n }\n if (!options.exportVar) {\n throw new Error(\"No export variable defined for format 'globals'.\");\n }\n\n return [\n ...generateGeneratedByComment(),\n \"(function(root) {\",\n \" \\\"use strict\\\";\",\n toplevelCode,\n \"\",\n indent2(\"root.\" + options.exportVar + \" = \" + generateParserObject() + \";\"),\n \"})(this);\",\n ];\n },\n\n umd() {\n if (ast.imports.length > 0) {\n throw new Error(\"Imports are not supported in format 'umd'.\");\n }\n\n const dependencyVars = Object.keys(dependencies);\n const dependencyIds = dependencyVars.map(v => dependencies[v]);\n const deps = \"[\"\n + dependencyIds.map(\n id => \"\\\"\" + stringEscape(id) + \"\\\"\"\n ).join(\", \")\n + \"]\";\n const requires = dependencyIds.map(\n id => \"require(\\\"\" + stringEscape(id) + \"\\\")\"\n ).join(\", \");\n const params = dependencyVars.join(\", \");\n\n const parts = generateGeneratedByComment();\n parts.push(\n \"(function(root, factory) {\",\n \" if (typeof define === \\\"function\\\" && define.amd) {\",\n \" define(\" + deps + \", factory);\",\n \" } else if (typeof module === \\\"object\\\" && module.exports) {\",\n \" module.exports = factory(\" + requires + \");\"\n );\n\n if (options.exportVar) {\n parts.push(\n \" } else {\",\n \" root.\" + options.exportVar + \" = factory();\"\n );\n }\n\n parts.push(\n \" }\",\n \"})(this, function(\" + params + \") {\",\n \" \\\"use strict\\\";\",\n toplevelCode,\n \"\",\n indent2(\"return \" + generateParserObject() + \";\"),\n \"});\"\n );\n\n return parts;\n },\n };\n\n const parts = generators[options.format || \"bare\"]();\n\n return new SourceNode(\n // eslint-disable-next-line @stylistic/function-call-argument-newline -- This expression has a better readability when on two lines\n null, null, options.grammarSource,\n parts.map(s => (s instanceof SourceNode ? s : s + \"\\n\"))\n );\n }\n\n ast.code = generateWrapper(generateToplevel());\n}\n\nmodule.exports = generateJS;\n","\"use strict\";\n\nconst asts = require(\"../asts\");\nconst visitor = require(\"../visitor\");\n\n// Removes proxy rules -- that is, rules that only delegate to other rule.\nfunction removeProxyRules(ast, _options, session) {\n function isProxyRule(node) {\n return node.type === \"rule\" && node.expression.type === \"rule_ref\";\n }\n\n function replaceRuleRefs(ast, from, to) {\n const replace = visitor.build({\n rule_ref(node) {\n if (node.name === from) {\n node.name = to;\n\n session.info(\n `Proxy rule \"${from}\" replaced by the rule \"${to}\"`,\n node.location,\n [{\n message: \"This rule will be used\",\n location: asts.findRule(ast, to).nameLocation,\n }]\n );\n }\n },\n });\n\n replace(ast);\n }\n\n ast.rules.forEach(rule => {\n if (isProxyRule(rule)) {\n replaceRuleRefs(ast, rule.name, rule.expression.name);\n }\n });\n}\n\nmodule.exports = removeProxyRules;\n","// @ts-check\n\"use strict\";\n\nconst { stringEscape } = require(\"../utils\");\n\n/**\n * @typedef {import(\"../../peg\")} PEG\n */\n\n/** @type {PEG.compiler.visitor} */\nconst visitor = require(\"../visitor\");\nconst { codePointLen1 } = require(\"../utils\");\n\n/**\n * @param {unknown} target\n * @param {unknown} source\n */\nfunction cloneOver(target, source) {\n const t = /** @type {Record<string,unknown>} */ (target);\n const s = /** @type {Record<string,unknown>} */ (source);\n Object.keys(t).forEach(key => delete t[key]);\n Object.keys(s).forEach(key => { t[key] = s[key]; });\n}\n\n/**\n * Clean up the parts array of a `class` node, by sorting,\n * then removing \"contained\" ranges, and merging overlapping\n * or adjacent ranges.\n *\n * @param {PEG.ast.CharacterClass[\"parts\"]} parts\n */\nfunction cleanParts(parts) {\n // Sort parts on increasing start, and then decreasing end.\n parts.sort((a, b) => {\n const [aStart, aEnd] = Array.isArray(a) ? a : [a, a];\n const [bStart, bEnd] = Array.isArray(b) ? b : [b, b];\n if (aStart !== bStart) {\n return aStart < bStart ? -1 : 1;\n }\n if (aEnd !== bEnd) {\n return aEnd > bEnd ? -1 : 1;\n }\n return 0;\n });\n\n /** @type {string | PEG.ast.ClassEscape} */\n let prevStart = \"\";\n /** @type {string | PEG.ast.ClassEscape} */\n let prevEnd = \"\";\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n const [curStart, curEnd] = Array.isArray(part) ? part : [part, part];\n if ((typeof curStart === \"string\") && (typeof curEnd === \"string\")\n && (typeof prevStart === \"string\") && (typeof prevEnd === \"string\")) {\n if (curEnd <= prevEnd) {\n // Current range is contained in previous range,\n // so drop it.\n parts.splice(i--, 1);\n continue;\n }\n if (prevEnd.charCodeAt(0) + 1 >= curStart.charCodeAt(0)) {\n // Current and previous ranges overlap, or are adjacent.\n // Drop the current, and extend the previous range.\n parts.splice(i--, 1);\n parts[i] = [prevStart, prevEnd = curEnd];\n continue;\n }\n }\n prevStart = curStart;\n prevEnd = curEnd;\n }\n return parts;\n}\n\nconst LAST_LOW = String.fromCodePoint(0xD7FF);\nconst FIRST_SURROGATE = 0xD800;\nconst LAST_SURROGATE = 0xDFFF;\nconst FIRST_HIGH = String.fromCodePoint(0xE000);\n\n/**\n * Split Unicode ranges in classes that span over the surrogate range.\n * @param {PEG.ast.Grammar} ast\n * @param {PEG.Session} session\n */\nfunction splitUnicodeRanges(ast, session) {\n const split = visitor.build({\n /**\n * @param {PEG.ast.CharacterClass} node\n */\n class(node) {\n if (!node.unicode) {\n return;\n }\n const extras = [];\n for (const p of node.parts) {\n if (Array.isArray(p)) {\n const [s, e] = p.map(c => /** @type {number} */(c.codePointAt(0)));\n if ((s < FIRST_SURROGATE) && (e > LAST_SURROGATE)) {\n session.info(\n `Removing surrogate range from [${stringEscape(p[0])}-${stringEscape(p[1])}]`,\n node.location\n );\n extras.push([FIRST_HIGH, p[1]]);\n p[1] = LAST_LOW;\n }\n }\n }\n node.parts.push(...extras);\n },\n });\n split(ast);\n}\n\n/**\n * Merges a choice character classes into a character class\n * @type {PEG.Pass}\n */\nfunction mergeCharacterClasses(ast, _options, session) {\n // Build a map from rule names to rules for quick lookup of\n // ref_rules.\n const rules = Object.create(null);\n ast.rules.forEach(rule => (rules[rule.name] = rule.expression));\n // Keep a set of which rules have been processed, so that when\n // we find a ref_rule, we can make sure its processed, before we\n // try to use it.\n const processedRules = new Set();\n\n splitUnicodeRanges(ast, session);\n\n // Mutually-recursive. Get around use-before-declaration.\n const [asClass, merge] = [\n /**\n * Determine whether a node can be represented as a simple character class,\n * and return that class if so.\n *\n * @param {PEG.ast.Expression} node - the node to inspect\n * @param {boolean} [clone=false] - if true, always return a new node that\n * can be modified by the caller\n * @returns {PEG.ast.CharacterClass | null}\n */\n (node, clone = false) => { // \"asClass\"\n // eslint-disable-next-line default-case\n switch (node.type) {\n case \"class\":\n if (node.inverted) {\n // Only combine positives, which are more common.\n // Negatives are more subtle.\n break;\n }\n return clone ? { ...node, parts: [...node.parts] } : node;\n case \"literal\": {\n const ul = codePointLen1(node.value);\n if (ul < 0) {\n break;\n }\n return {\n type: \"class\",\n parts: [node.value],\n inverted: false,\n ignoreCase: node.ignoreCase,\n location: node.location,\n unicode: (ul > 0xFFFF),\n };\n }\n case \"rule_ref\": {\n const ref = rules[node.name];\n if (!ref) { // Undefined rule\n break;\n }\n if (!processedRules.has(node.name)) {\n processedRules.add(node.name);\n merge(ref);\n }\n const cls = asClass(ref, true);\n if (cls) {\n cls.location = node.location;\n }\n return cls;\n }\n }\n return null;\n },\n visitor.build({ // \"merge\"\n choice(node) {\n /** @type {PEG.ast.CharacterClass | null} */\n let prev = null;\n let changed = false;\n\n node.alternatives.forEach((alt, i) => {\n merge(alt);\n const cls = asClass(alt);\n if (!cls) {\n prev = null;\n return;\n }\n if (prev && (prev.ignoreCase === cls.ignoreCase)) {\n // Combine the two parts sets, leaving two copies of prev\n // to be cleaned up later.\n prev.parts.push(...cls.parts);\n // Leave prev as-is until we decide to merge it with cls.\n node.alternatives[i - 1] = prev;\n // Don't change the number of items during foreach\n node.alternatives[i] = prev;\n prev.unicode = prev.unicode || cls.unicode;\n prev.location = {\n // Fix this when imports work. Needs a combined source class.\n source: prev.location.source,\n start: prev.location.start,\n end: cls.location.end,\n };\n changed = true;\n } else {\n prev = cls;\n }\n });\n if (changed) {\n // Remove dups, these are places where we removed a merged class.\n node.alternatives = node.alternatives.filter(\n (alt, i, arr) => !i || alt !== arr[i - 1]\n );\n node.alternatives.forEach((alt, i) => {\n if (alt.type === \"class\") {\n alt.parts = cleanParts(alt.parts);\n // Convert single-char classes back to string literals.\n if (alt.parts.length === 1\n && !Array.isArray(alt.parts[0])\n && (typeof alt.parts[0] === \"string\")\n && !alt.inverted) { // Don't check alt.unicode on purpose\n node.alternatives[i] = {\n type: \"literal\",\n value: alt.parts[0],\n ignoreCase: alt.ignoreCase,\n location: alt.location,\n };\n }\n }\n });\n if (node.alternatives.length === 1) {\n cloneOver(node, node.alternatives[0]);\n }\n }\n },\n text(node) {\n merge(node.expression);\n if (node.expression.type === \"class\"\n || node.expression.type === \"literal\") {\n const location = node.location;\n cloneOver(node, node.expression);\n node.location = location;\n }\n },\n }),\n ];\n\n ast.rules.forEach(rule => {\n processedRules.add(rule.name);\n merge(rule.expression);\n });\n}\n\nmodule.exports = mergeCharacterClasses;\n","\"use strict\";\nconst visitor = require(\"../visitor\");\n\n/**\n * Remove rules that cannot be reached from the allowedStartRules. This\n * includes rules that are never referenced in the input grammar, rules that\n * only they call, and rules removed by previous passes such as\n * remove-proxy-rules and merge-character-classes.\n *\n * @type {PEG.Pass}\n */\nfunction removeUnusedRules(ast, options, session) {\n const rules = Object.create(null);\n ast.rules.forEach(rule => { rules[rule.name] = rule; });\n // Follow the call graph, starting at each of the startRules.\n // Try to not visit the same portion of the graph more than once.\n // report-infinite-recursion should have already found and errored\n // on loops.\n const queue = [...options.allowedStartRules];\n const found = new Set();\n const findRefs = visitor.build({\n rule_ref(node) {\n queue.push(node.name);\n },\n });\n while (queue.length) {\n const r = queue.shift();\n if (!found.has(r)) {\n found.add(r);\n findRefs(rules[r]);\n }\n }\n ast.rules = ast.rules.filter(r => {\n if (found.has(r.name)) {\n return true;\n }\n session.info(`Removing unused rule: \"${r.name}\"`, r.location);\n return false;\n });\n}\n\nmodule.exports = removeUnusedRules;\n","// @ts-check\n\"use strict\";\n\n/** @type {PEG.Pass} */\nfunction reportDuplicateImports(ast, _options, session) {\n /** @type {Record<string, PEG.LocationRange>} */\n const all = {};\n\n for (const imp of ast.imports) {\n for (const what of imp.what) {\n if (what.type === \"import_binding_all\") {\n if (Object.prototype.hasOwnProperty.call(all, what.binding)) {\n session.error(\n `Module \"${what.binding}\" is already imported`,\n what.location,\n [{\n message: \"Original module location\",\n location: all[what.binding],\n }]\n );\n }\n all[what.binding] = what.location;\n }\n }\n }\n}\n\nmodule.exports = reportDuplicateImports;\n","\"use strict\";\n\nconst visitor = require(\"../visitor\");\n\n// Checks that each label is defined only once within each scope.\nfunction reportDuplicateLabels(ast, _options, session) {\n function cloneEnv(env) {\n const clone = {};\n\n Object.keys(env).forEach(name => {\n clone[name] = env[name];\n });\n\n return clone;\n }\n\n function checkExpressionWithClonedEnv(node, env) {\n // eslint-disable-next-line no-use-before-define -- Mutual recursion\n check(node.expression, cloneEnv(env));\n }\n\n const check = visitor.build({\n rule(node) {\n check(node.expression, { });\n },\n\n choice(node, env) {\n node.alternatives.forEach(alternative => {\n check(alternative, cloneEnv(env));\n });\n },\n\n action: checkExpressionWithClonedEnv,\n\n labeled(node, env) {\n const label = node.label;\n if (label && Object.prototype.hasOwnProperty.call(env, label)) {\n session.error(\n `Label \"${node.label}\" is already defined`,\n node.labelLocation,\n [{\n message: \"Original label location\",\n location: env[label],\n }]\n );\n }\n\n check(node.expression, env);\n\n env[node.label] = node.labelLocation;\n },\n\n text: checkExpressionWithClonedEnv,\n simple_and: checkExpressionWithClonedEnv,\n simple_not: checkExpressionWithClonedEnv,\n optional: checkExpressionWithClonedEnv,\n zero_or_more: checkExpressionWithClonedEnv,\n one_or_more: checkExpressionWithClonedEnv,\n repeated(node, env) {\n if (node.delimiter) {\n check(node.delimiter, cloneEnv(env));\n }\n\n check(node.expression, cloneEnv(env));\n },\n group: checkExpressionWithClonedEnv,\n });\n\n check(ast);\n}\n\nmodule.exports = reportDuplicateLabels;\n","\"use strict\";\n\nconst visitor = require(\"../visitor\");\n\n// Checks that each rule is defined only once.\nfunction reportDuplicateRules(ast, _options, session) {\n const rules = {};\n\n const check = visitor.build({\n rule(node) {\n if (Object.prototype.hasOwnProperty.call(rules, node.name)) {\n session.error(\n `Rule \"${node.name}\" is already defined`,\n node.nameLocation,\n [{\n message: \"Original rule location\",\n location: rules[node.name],\n }]\n );\n\n // Do not rewrite original rule location\n return;\n }\n\n rules[node.name] = node.nameLocation;\n },\n });\n\n check(ast);\n}\n\nmodule.exports = reportDuplicateRules;\n","\"use strict\";\n\nconst asts = require(\"../asts\");\nconst visitor = require(\"../visitor\");\n\n// Reports left recursion in the grammar, which prevents infinite recursion in\n// the generated parser.\n//\n// Both direct and indirect recursion is detected. The pass also correctly\n// reports cases like this:\n//\n// start = \"a\"? start\n//\n// In general, if a rule reference can be reached without consuming any input,\n// it can lead to left recursion.\nfunction reportInfiniteRecursion(ast, _options, session) {\n // Array with rule names for error message\n const visitedRules = [];\n // Array with rule_refs for diagnostic\n const backtraceRefs = [];\n const seen = new Set();\n\n const check = visitor.build({\n rule(node) {\n if ((session.errors > 0) || seen.has(node.name)) {\n return;\n }\n seen.add(node.name);\n\n visitedRules.push(node.name);\n check(node.expression);\n visitedRules.pop();\n },\n\n sequence(node) {\n if (session.errors > 0) {\n return;\n }\n node.elements.every(element => {\n check(element);\n if (session.errors > 0) {\n return false;\n }\n return !asts.alwaysConsumesOnSuccess(ast, element);\n });\n },\n\n repeated(node) {\n if (session.errors > 0) {\n return;\n }\n check(node.expression);\n\n // If an expression does not consume input then recursion\n // over delimiter is possible\n if (node.delimiter\n && !asts.alwaysConsumesOnSuccess(ast, node.expression)\n ) {\n check(node.delimiter);\n }\n },\n\n rule_ref(node) {\n if (session.errors > 0) {\n return;\n }\n\n backtraceRefs.push(node);\n\n const rule = asts.findRule(ast, node.name);\n\n if (visitedRules.indexOf(node.name) !== -1) {\n visitedRules.push(node.name);\n\n session.error(\n \"Possible infinite loop when parsing (left recursion: \"\n + visitedRules.join(\" -> \")\n + \")\",\n rule.nameLocation,\n backtraceRefs.map((ref, i, a) => ({\n message: i + 1 !== a.length\n ? `Step ${i + 1}: call of the rule \"${ref.name}\" without input consumption`\n : `Step ${i + 1}: calls itself without input consumption - left recursion`,\n location: ref.location,\n }))\n );\n\n // Because we enter into recursion we should break it\n return;\n }\n\n // Because we run all checks in one stage, some rules could be missing - this check\n // executed in parallel\n if (rule) {\n check(rule);\n }\n backtraceRefs.pop();\n },\n });\n\n check(ast);\n}\n\nmodule.exports = reportInfiniteRecursion;\n","\"use strict\";\n\nconst asts = require(\"../asts\");\nconst visitor = require(\"../visitor\");\n\n// Reports expressions that don't consume any input inside |*|, |+| or repeated in the\n// grammar, which prevents infinite loops in the generated parser.\nfunction reportInfiniteRepetition(ast, _options, session) {\n const check = visitor.build({\n zero_or_more(node) {\n if (!asts.alwaysConsumesOnSuccess(ast, node.expression)) {\n session.error(\n \"Possible infinite loop when parsing (repetition used with an expression that may not consume any input)\",\n node.location\n );\n }\n },\n\n one_or_more(node) {\n if (!asts.alwaysConsumesOnSuccess(ast, node.expression)) {\n session.error(\n \"Possible infinite loop when parsing (repetition used with an expression that may not consume any input)\",\n node.location\n );\n }\n },\n\n repeated(node) {\n // No need to check min or max. They can only be numbers, variable\n // names, or code blocks.\n\n if (node.delimiter) {\n check(node.delimiter);\n }\n if (asts.alwaysConsumesOnSuccess(ast, node.expression)\n || (node.delimiter\n && asts.alwaysConsumesOnSuccess(ast, node.delimiter))) {\n return;\n }\n if (node.max.value === null) {\n session.error(\n \"Possible infinite loop when parsing (unbounded range repetition used with an expression that may not consume any input)\",\n node.location\n );\n } else {\n // If minimum is `null` it is equals to maximum (parsed from `|exact|` syntax)\n const min = node.min ? node.min : node.max;\n\n // Because the high boundary is defined, infinity repetition is not possible\n // but the grammar will waste of CPU\n session.warning(\n min.type === \"constant\" && node.max.type === \"constant\"\n ? `An expression may not consume any input and may always match ${node.max.value} times`\n : \"An expression may not consume any input and may always match with a maximum repetition count\",\n node.location\n );\n }\n },\n });\n\n check(ast);\n}\n\nmodule.exports = reportInfiniteRepetition;\n","\"use strict\";\n\nconst asts = require(\"../asts\");\nconst visitor = require(\"../visitor\");\n\n// Checks that all referenced rules exist.\nfunction reportUndefinedRules(ast, _options, session) {\n const check = visitor.build({\n rule_ref(node) {\n if (!asts.findRule(ast, node.name)) {\n session.error(\n `Rule \"${node.name}\" is not defined`,\n node.location\n );\n }\n },\n });\n\n check(ast);\n}\n\nmodule.exports = reportUndefinedRules;\n","\"use strict\";\n\nconst visitor = require(\"../visitor\");\n\n//\n// Compiler pass to ensure the following are enforced:\n//\n// - plucking can not be done with an action block\n//\nfunction reportIncorrectPlucking(ast, _options, session) {\n const check = visitor.build({\n action(node) {\n check(node.expression, node);\n },\n\n labeled(node, action) {\n if (node.pick) {\n if (action) {\n session.error(\n \"\\\"@\\\" cannot be used with an action block\",\n node.labelLocation,\n [{\n message: \"Action block location\",\n location: action.codeLocation,\n }]\n );\n }\n }\n\n check(node.expression);\n },\n });\n\n check(ast);\n}\n\nmodule.exports = reportIncorrectPlucking;\n","// @ts-check\n\"use strict\";\n\nconst visitor = require(\"../visitor\");\nconst { ALWAYS_MATCH, NEVER_MATCH } = require(\"./inference-match-result\");\n\n/** @type {PEG.Pass} */\nfunction reportUnreachable(ast, _options, session) {\n const visit = visitor.build({\n /**\n * @param {PEG.ast.Choice} node\n */\n choice(node) {\n node.alternatives.forEach(a => visit(a));\n for (let i = 0; i < node.alternatives.length - 1; i++) {\n const alt = node.alternatives[i];\n if (alt.match === ALWAYS_MATCH) {\n session.warning(\n \"Always matches. Following alternatives may not be reachable.\",\n alt.location\n );\n }\n }\n },\n /**\n * @param {PEG.ast.Prefixed} node\n */\n simple_and(node) {\n visit(node.expression);\n if (node.expression.match === ALWAYS_MATCH) {\n session.warning(\n \"Always matches, making the & predicate redundant.\",\n node.expression.location\n );\n } else if (node.expression.match === NEVER_MATCH) {\n session.warning(\n \"Never matches, making the & predicate always fail.\",\n node.expression.location\n );\n }\n },\n /**\n * @param {PEG.ast.Prefixed} node\n */\n simple_not(node) {\n visit(node.expression);\n if (node.expression.match === ALWAYS_MATCH) {\n session.warning(\n \"Always matches, making the ! predicate always fail.\",\n node.expression.location\n );\n } else if (node.expression.match === NEVER_MATCH) {\n session.warning(\n \"Never matches, making the ! predicate redundant.\",\n node.expression.location\n );\n }\n },\n });\n visit(ast);\n}\n\nmodule.exports = reportUnreachable;\n","\"use strict\";\n\nconst GrammarError = require(\"../grammar-error\");\n\nclass Defaults {\n constructor(options) {\n options = typeof options !== \"undefined\" ? options : {};\n\n if (typeof options.error === \"function\") { this.error = options.error; }\n if (typeof options.warning === \"function\") { this.warning = options.warning; }\n if (typeof options.info === \"function\") { this.info = options.info; }\n }\n\n // eslint-disable-next-line class-methods-use-this -- Abstract\n error() {\n // Intentionally empty placeholder\n }\n\n // eslint-disable-next-line class-methods-use-this -- Abstract\n warning() {\n // Intentionally empty placeholder\n }\n\n // eslint-disable-next-line class-methods-use-this -- Abstract\n info() {\n // Intentionally empty placeholder\n }\n}\n\nclass Session {\n constructor(options) {\n this._callbacks = new Defaults(options);\n this._firstError = null;\n this.errors = 0;\n /** @type {import(\"../peg\").Problem[]} */\n this.problems = [];\n /** @type {import(\"../peg\").Stage} */\n this.stage = null;\n }\n\n error(...args) {\n ++this.errors;\n // In order to preserve backward compatibility we cannot change `GrammarError`\n // constructor, nor throw another class of error:\n // - if we change `GrammarError` constructor, this will break plugins that\n // throws `GrammarError`\n // - if we throw another Error class, this will break parser clients that\n // catches GrammarError\n //\n // So we use a compromise: we throw an `GrammarError` with all found problems\n // in the `problems` property, but the thrown error itself is the first\n // registered error.\n //\n // Thus when the old client catches the error it can find all properties on\n // the Grammar error that it want. On the other hand the new client can\n // inspect the `problems` property to get all problems.\n if (this._firstError === null) {\n this._firstError = new GrammarError(...args);\n this._firstError.stage = this.stage;\n this._firstError.problems = this.problems;\n }\n\n this.problems.push([\"error\", ...args]);\n this._callbacks.error(this.stage, ...args);\n }\n\n warning(...args) {\n this.problems.push([\"warning\", ...args]);\n this._callbacks.warning(this.stage, ...args);\n }\n\n info(...args) {\n this.problems.push([\"info\", ...args]);\n this._callbacks.info(this.stage, ...args);\n }\n\n checkErrors() {\n if (this.errors !== 0) {\n throw this._firstError;\n }\n }\n}\n\nmodule.exports = Session;\n","\"use strict\";\n\nconst addImportedRules = require(\"./passes/add-imported-rules\");\nconst fixLibraryNumbers = require(\"./passes/fix-library-numbers\");\nconst generateBytecode = require(\"./passes/generate-bytecode\");\nconst generateJS = require(\"./passes/generate-js\");\nconst inferenceMatchResult = require(\"./passes/inference-match-result\");\nconst removeProxyRules = require(\"./passes/remove-proxy-rules\");\nconst mergeCharacterClasses = require(\"./passes/merge-character-classes\");\nconst removeUnusedRules = require(\"./passes/remove-unused-rules\");\nconst reportDuplicateImports = require(\"./passes/report-duplicate-imports\");\nconst reportDuplicateLabels = require(\"./passes/report-duplicate-labels\");\nconst reportDuplicateRules = require(\"./passes/report-duplicate-rules\");\nconst reportInfiniteRecursion = require(\"./passes/report-infinite-recursion\");\nconst reportInfiniteRepetition = require(\"./passes/report-infinite-repetition\");\nconst reportUndefinedRules = require(\"./passes/report-undefined-rules\");\nconst reportIncorrectPlucking = require(\"./passes/report-incorrect-plucking\");\nconst reportUnreachable = require(\"./passes/report-unreachable\");\nconst Session = require(\"./session\");\nconst visitor = require(\"./visitor\");\nconst { base64 } = require(\"./utils\");\n\nfunction processOptions(options, defaults) {\n const processedOptions = {};\n\n Object.keys(options).forEach(name => {\n processedOptions[name] = options[name];\n });\n\n Object.keys(defaults).forEach(name => {\n if (!Object.prototype.hasOwnProperty.call(processedOptions, name)) {\n processedOptions[name] = defaults[name];\n }\n });\n\n return processedOptions;\n}\n\nfunction isSourceMapCapable(target) {\n if (typeof target === \"string\") {\n return target.length > 0;\n }\n return target && (typeof target.offset === \"function\");\n}\n\nconst compiler = {\n // AST node visitor builder. Useful mainly for plugins which manipulate the\n // AST.\n visitor,\n\n // Compiler passes.\n //\n // Each pass is a function that is passed the AST. It can perform checks on it\n // or modify it as needed. If the pass encounters a semantic error, it throws\n // |peg.GrammarError|.\n passes: {\n prepare: [\n addImportedRules,\n reportInfiniteRecursion,\n ],\n check: [\n reportUndefinedRules,\n reportDuplicateRules,\n reportDuplicateLabels,\n reportInfiniteRepetition,\n reportIncorrectPlucking,\n reportDuplicateImports,\n ],\n transform: [\n fixLibraryNumbers,\n removeProxyRules,\n mergeCharacterClasses,\n removeUnusedRules,\n inferenceMatchResult,\n ],\n semantic: [\n reportUnreachable, // Not a transform, but has to be after inferenceMatchResult\n ],\n generate: [\n generateBytecode,\n generateJS,\n ],\n },\n\n // Generates a parser from a specified grammar AST. Throws |peg.GrammarError|\n // if the AST contains a semantic error. Note that not all errors are detected\n // during the generation and some may protrude to the generated parser and\n // cause its malfunction.\n compile(ast, passes, options) {\n options = options !== undefined ? options : {};\n\n const defaultStartRules = [ast.rules[0].name];\n options = processOptions(options, {\n allowedStartRules: defaultStartRules,\n cache: false,\n dependencies: {},\n exportVar: null,\n format: \"bare\",\n output: \"parser\",\n trace: false,\n });\n\n if (options.allowedStartRules === null\n || options.allowedStartRules === undefined) {\n options.allowedStartRules = defaultStartRules;\n }\n\n if (!Array.isArray(options.allowedStartRules)) {\n throw new Error(\"allowedStartRules must be an array\");\n }\n if (options.allowedStartRules.length === 0) {\n options.allowedStartRules = defaultStartRules;\n }\n const allRules = ast.rules.map(r => r.name);\n // \"*\" means all rules are start rules. \"*\" is not a valid rule name.\n if (options.allowedStartRules.some(r => r === \"*\")) {\n options.allowedStartRules = allRules;\n } else {\n for (const rule of options.allowedStartRules) {\n if (allRules.indexOf(rule) === -1) {\n throw new Error(`Unknown start rule \"${rule}\"`);\n }\n }\n }\n // Due to https://github.com/mozilla/source-map/issues/444\n // grammarSource is required\n if (((options.output === \"source-and-map\")\n || (options.output === \"source-with-inline-map\"))\n && !isSourceMapCapable(options.grammarSource)) {\n throw new Error(\"Must provide grammarSource (as a string or GrammarLocation) in order to generate source maps\");\n }\n\n const session = new Session(options);\n Object.keys(passes).forEach(stage => {\n session.stage = stage;\n session.info(`Process stage ${stage}`);\n\n passes[stage].forEach(pass => {\n session.info(`Process pass ${stage}.${pass.name}`);\n\n pass(ast, options, session);\n });\n\n // Collect all errors by stage\n session.checkErrors();\n });\n\n switch (options.output) {\n case \"parser\":\n // eslint-disable-next-line no-eval -- Required\n return eval(ast.code.toString());\n\n case \"source\":\n return ast.code.toString();\n\n case \"source-and-map\":\n return ast.code;\n\n case \"source-with-inline-map\": {\n if (typeof TextEncoder === \"undefined\") {\n throw new Error(\"TextEncoder is not supported by this platform\");\n }\n const sourceMap = ast.code.toStringWithSourceMap();\n const encoder = new TextEncoder();\n const b64 = base64(\n encoder.encode(JSON.stringify(sourceMap.map.toJSON()))\n );\n return sourceMap.code + `\\\n//\\x23 sourceMappingURL=data:application/json;charset=utf-8;base64,${b64}\n`;\n }\n\n case \"ast\":\n return ast;\n\n default:\n throw new Error(\"Invalid output format: \" + options.output + \".\");\n }\n },\n};\n\nmodule.exports = compiler;\n","\"use strict\";\n\nconst GrammarError = require(\"./grammar-error\");\nconst GrammarLocation = require(\"./grammar-location\");\nconst asts = require(\"./compiler/asts.js\");\nconst compiler = require(\"./compiler\");\nconst parser = require(\"./parser\");\nconst { version: VERSION } = require(\"./version\");\n\nconst RESERVED_WORDS = [\n // Reserved keywords as of ECMAScript 2015\n \"break\",\n \"case\",\n \"catch\",\n \"class\",\n \"const\",\n \"continue\",\n \"debugger\",\n \"default\",\n \"delete\",\n \"do\",\n \"else\",\n \"export\",\n \"extends\",\n \"finally\",\n \"for\",\n \"function\",\n \"if\",\n \"import\",\n \"in\",\n \"instanceof\",\n \"new\",\n \"return\",\n \"super\",\n \"switch\",\n \"this\",\n \"throw\",\n \"try\",\n \"typeof\",\n \"var\",\n \"void\",\n \"while\",\n \"with\",\n\n // Special constants\n \"null\",\n \"true\",\n \"false\",\n\n // These are always reserved:\n \"enum\",\n\n // The following are only reserved when they are found in strict mode code\n // Peggy generates code in strict mode, so they are applicable\n \"implements\",\n \"interface\",\n \"let\",\n \"package\",\n \"private\",\n \"protected\",\n \"public\",\n \"static\",\n \"yield\",\n\n // The following are only reserved when they are found in module code:\n \"await\",\n\n // The following are reserved as future keywords by ECMAScript 1..3\n // specifications, but not any more in modern ECMAScript. We don't need these\n // because the code-generation of Peggy only targets ECMAScript >= 5.\n //\n // - abstract\n // - boolean\n // - byte\n // - char\n // - double\n // - final\n // - float\n // - goto\n // - int\n // - long\n // - native\n // - short\n // - synchronized\n // - throws\n // - transient\n // - volatile\n\n // These are not reserved keywords, but using them as variable names is problematic.\n \"arguments\", // Conflicts with a special variable available inside functions.\n \"eval\", // Redeclaring eval() is prohibited in strict mode\n\n // A few identifiers have a special meaning in some contexts without being\n // reserved words of any kind. These we don't need to worry about as they can\n // all be safely used as variable names.\n //\n // - as\n // - async\n // - from\n // - get\n // - of\n // - set\n];\n\nconst peg = {\n // Peggy version (filled in by /tools/release).\n VERSION,\n /**\n * Default list of reserved words. Contains list of currently and future\n * JavaScript (ECMAScript 2015) reserved words.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar#reserved_words\n */\n RESERVED_WORDS,\n GrammarError,\n GrammarLocation,\n parser,\n compiler,\n\n // Generates a parser from a specified grammar and returns it.\n //\n // The grammar must be a string in the format described by the meta-grammar in\n // the parser.pegjs file.\n //\n // Throws |peg.parser.SyntaxError| if the grammar contains a syntax error or\n // |peg.GrammarError| if it contains a semantic error. Note that not all\n // errors are detected during the generation and some may protrude to the\n // generated parser and cause its malfunction.\n generate(grammar, options) {\n options = options !== undefined ? options : {};\n\n function copyPasses(passes) {\n const converted = {};\n Object.keys(passes).forEach(stage => {\n converted[stage] = passes[stage].slice();\n });\n\n return converted;\n }\n\n const plugins = \"plugins\" in options ? options.plugins : [];\n const config = {\n parser: peg.parser,\n passes: copyPasses(peg.compiler.passes),\n reservedWords: peg.RESERVED_WORDS.slice(),\n };\n\n plugins.forEach(p => { p.use(config, options); });\n\n if (!Array.isArray(grammar)) {\n grammar = [{\n source: options.grammarSource,\n text: grammar,\n }];\n }\n\n const combined = asts.combine(\n grammar.map(({ source, text }) => config.parser.parse(text, {\n grammarSource: source,\n reservedWords: config.reservedWords,\n }))\n );\n\n return peg.compiler.compile(\n combined,\n config.passes,\n options\n );\n },\n};\n\nmodule.exports = peg;\n","// Line structure — the layer below statements. A raw line splits into its indentation, an optional\n// list marker, and the clause the grammar then classifies. Pure and core, so the IR lowering and the\n// web classifier/diagnostics share one parser and list handling never diverges between them.\n\n/** A line stripped of its list marker, so the clause can be classified on its own. */\nexport interface ParsedLine {\n indent: number;\n list: 'none' | 'ordered' | 'unordered';\n clause: string;\n}\n\nexport function parseLine(raw: string): ParsedLine {\n const indent = raw.length - raw.trimStart().length;\n const body = raw.slice(indent);\n const ordered = body.match(/^\\d+[.)]\\s+(.*)$/);\n if (ordered) return { indent, list: 'ordered', clause: ordered[1] ?? '' };\n const unordered = body.match(/^[-*+]\\s+(.*)$/);\n if (unordered) return { indent, list: 'unordered', clause: unordered[1] ?? '' };\n return { indent, list: 'none', clause: body };\n}\n","import peggy from 'peggy';\n\nimport type { Stmt } from './ast';\nimport { GRAMMAR } from './typeglish-grammar';\n\n// Generate the parser once at module load. Runtime generation (vs a Vite build plugin) keeps the\n// grammar as one .ts source that behaves identically in the browser, Node, and Vitest with no extra\n// build step; the one-time generate cost is a few milliseconds, paid at startup.\nconst parser = peggy.generate(GRAMMAR);\n\n/**\n * Parse a single clause (any list marker already stripped) into its statement AST.\n *\n * Total by construction: the grammar's final alternative is Prose, which matches anything, so a\n * well-formed single-line clause always classifies. The try/catch is a belt-and-braces fallback —\n * e.g. a stray newline would otherwise throw \"expected end of input\" — and degrades to Prose so the\n * editor's per-keystroke path can never crash.\n */\nexport function parseStatement(clause: string): Stmt {\n const input = clause.replace(/^\\s+/, '');\n try {\n return parser.parse(input) as Stmt;\n } catch {\n return { type: 'prose', text: input, span: { start: 0, end: input.length } };\n }\n}\n","// The copula — an SSOT (CLAUDE.md invariant #1): one assignment operator with several surface forms. Defined ONCE here so\n// the parser, the renderer, the grammar, and the editor highlighting all derive from this list: add a\n// synonym and it works everywhere automatically, and any feature added to the copula applies to all\n// forms. IS / ARE / AM differ only by grammatical number and person; logically they are the same\n// operator — bind a name to a value.\nexport const COPULAS = ['IS', 'ARE', 'AM'] as const;\n\nexport type Copula = (typeof COPULAS)[number];\n\n/** Regex-alternation source for the copulas in BOTH cases — `IS|is|ARE|are|AM|am`. The copula is\n * case-insensitive like every operator (§2), and so is the subject: the NAME part is `\\p{L}` (any\n * case), so `You are x`, `you ARE x`, and `you are x` all declare `you`. Case is never the\n * declaration/prose distinction — that's grammar (§5, a copula outside a conditional/directive/quote);\n * quote a line to force it to literal prose. */\nexport const copulaAlternation = COPULAS.flatMap((c) => [c, c.toLowerCase()]).join('|');\n\n/** The contracted copulas: `'re` = are, `'m` = am, `'s` = is (straight `'` or curly `’` apostrophe).\n * A subject binds to whatever follows, so `You're Dan` reads exactly like `You are Dan`. Two `'s` cases are\n * deliberately NOT this copula: a Saxon possessive (`Sarah's name is Joe`) — those rules require a trailing\n * copula and are matched first, so they win — and the word `let's` (= \"let us\", not \"let is\"), excluded by a\n * word-boundary lookbehind that still lets a name ending in \"let\" (e.g. `Scarlet's helpful`) bind normally. */\nexport const copulaContraction = `(?<!\\\\b[Ll][Ee][Tt])['’](?:re|m|s)`;\n\n/** A copula connecting a subject to its value in EITHER surface form — the spaced word (` is` / ` are` /\n * ` am`) or an attached contraction (`'re` / `'m` / `'s`). Build subject→value regexes from THIS rather than\n * copulaAlternation, so every consumer (declaration parser, IR, editor highlighting) handles contractions. */\nexport const copulaConnector = `(?:\\\\s+(?:${copulaAlternation})|${copulaContraction})`;\n","// TypeGlish — the lexicon. THE single source of truth for the language's vocabulary: every operator,\n// command, sigil, section, and their documentation. Everything else derives from here:\n// - grammar.ts re-exports the keyword arrays + snippets (the tokenizer + completions read them).\n// - the syntax reference page (public/syntax.html) is GENERATED from the doc tables below\n// (src/core/syntax-doc.ts → scripts/gen-syntax.ts). Never hand-edit that file.\n// - lexicon.test.ts locks it all together: the parser must recognize exactly these operators, the\n// PEG must list them, and the committed page must equal the generator's output. So a change here\n// can't silently drift from the compiler OR the docs — CI + the pre-commit hook block it.\n//\n// Case: every operator is case-insensitive (§2) — `MUST`=`must`, `IF`=`if`, `IS`=`are`. The tokens are\n// written UPPERCASE here purely as the canonical display form.\n\nimport { COPULAS } from './copula';\n\n// ── Canonical keyword catalogs — the ONE definition (moved here from grammar.ts) ──────────────────\n// Order matters: longest-first WITHIN each group so a two-word form (`ELSE IF`, `MUST NOT`) wins over\n// its prefix (`IF`, `MUST`) when a matcher tries them in order.\n\nexport const CONTROL_KEYWORDS = ['ELSE IF', 'FOR EACH', 'WHENEVER', 'WHEN', 'UNLESS', 'WHILE', 'IF'] as const;\nexport const BRANCH_KEYWORDS = ['THEN', 'OTHERWISE', 'ELSE'] as const;\nexport const MODAL_KEYWORDS = [\n 'MUST NOT', 'SHOULD NOT', 'DO NOT', 'MUST', 'SHOULD', 'NEVER', 'ALWAYS', 'MAY',\n 'AVOID', 'PREFER', 'REQUIRE', 'ENSURE',\n] as const;\n/** A short, representative modal example for advice messages that nudge toward committing to a modal\n * (\"commit to a modal (MUST / NEVER / SHOULD)\"). Colocated with MODAL_KEYWORDS and locked to it in\n * lexicon.test.ts, so the hint can never name a word that isn't a real modal. The ONE place the hedging\n * diagnostic (diagnostics.ts) reads this list — no hardcoded modal copy in a message. */\nexport const MODAL_HINT = 'MUST / NEVER / SHOULD';\nexport const DEFINITION_KEYWORDS = ['DEFINE', 'AS'] as const;\n/** Command words — the `$`-sigil compiler directives (`$IF`, `$CONFIG`, …). The `$` is mandatory and no\n * English word starts with `$`, so this is the ONE plane the editor may auto-case while you type\n * (`$if ` → `$IF `). Bare prose operators are NEVER recased — `If you need help, ask.` is a statement\n * the model weighs, and case never carries meaning (SPEC §2). Longest-first (`ELSE IF` before `ELSE`).\n * Locked to the command doc tables (COMMANDS/SWITCH/TESTS) in lexicon.test.ts. */\nexport const COMMAND_WORDS = ['SWITCH ON', 'ELSE IF', 'EXAMPLE', 'REQUIRE', 'SERVICE', 'CONFIG', 'IMPORT', 'DEFINE', 'ELSE', 'TEST', 'TOOL', 'IF'] as const;\n/** Frequency words — the quantifier square over OCCASIONS. `ALWAYS` (every occasion) and `NEVER` (none)\n * are the square's A/E corners and live with the modals; this catalog holds the GRADED corners:\n * `sometimes` = on SOME occasions (I), `usually` = on MOST (M), `rarely` = on FEW (most-not, and still\n * some). The checker composes them with polarity (`sometimes do not X` = O) and runs the same\n * opposition + slot-axiom table as the entity square (SPEC §7). Longest-first (`AT TIMES` is two words). */\nexport type FreqKind = 'existential' | 'majority' | 'minority';\nexport const FREQUENCY_WORDS: { kind: FreqKind; words: readonly string[] }[] = [\n { kind: 'existential', words: ['SOMETIMES', 'OCCASIONALLY', 'AT TIMES'] },\n { kind: 'majority', words: ['USUALLY', 'MOSTLY', 'GENERALLY', 'TYPICALLY'] },\n { kind: 'minority', words: ['RARELY', 'SELDOM'] },\n];\nexport const FREQUENCY_KEYWORDS: readonly string[] = FREQUENCY_WORDS.flatMap((f) => [...f.words]);\nexport const OPERATOR_KEYWORDS = ['AND', 'OR', 'NOT', 'INCLUDING'] as const;\n// The comparison copulas of the MACHINE plane ($ expressions: `when=` guards, deterministic IF\n// conditions, $DEFINE bodies). Uniform shape — `$x is [not] <two-word operator> <operand>`:\n// `equal to` / `greater than` / `less than` take `not`; the inclusive pair `at least` / `at most`\n// never does (their negations ARE the strict positives — `is not at least 5` rewrites to\n// `is less than 5`). Symbols (`>`, `>=`, `<`, `<=`, `==`, `=`) and the bare copula (`$x is v`)\n// are compile errors carrying the canonical rewrite. expr.ts derives its keyword vocabulary from\n// THIS list — never a local copy (invariant #1).\nexport const COMPARISON_KEYWORDS = [\n 'IS NOT EQUAL TO', 'IS NOT GREATER THAN', 'IS NOT LESS THAN', 'IS NOT ONE OF',\n 'IS EQUAL TO', 'IS GREATER THAN', 'IS LESS THAN', 'IS AT LEAST', 'IS AT MOST', 'IS ONE OF',\n] as const;\n\n// ── Symbol rewrites — the code-era forms each machine-plane comparison operator rewrites FROM ──────\n// A `$` expression is English, never symbols: `$cart is at most 5`, never `$cart <= 5`. Each entry pairs a\n// comparison operator's canonical English with the symbols that must rewrite TO it — the ONE place the\n// $-expression parser (expr.ts) and the character-set fixer (charset.ts) read, so a renamed comparison\n// operator carries its symbol rewrite + quick-fix with it. lexicon.test.ts locks every `machine` form to a\n// real COMPARISON_KEYWORDS member.\nexport interface ComparisonSymbol {\n /** Code-era + Unicode-lookalike symbol forms that must rewrite to this operator. */\n symbols: readonly string[];\n /** The canonical machine-plane form — inside a `$x is <op> n` comparison (a COMPARISON_KEYWORDS member). */\n machine: string;\n /** The model-plane bound word — a bare quantifier in prose (`at most 3 sentences`). Only the inclusive pair. */\n bound?: string;\n}\n\nexport const COMPARISON_SYMBOLS: readonly ComparisonSymbol[] = [\n { symbols: ['>'], machine: 'is greater than' },\n { symbols: ['>=', '≥'], machine: 'is at least', bound: 'at least' },\n { symbols: ['<'], machine: 'is less than' },\n { symbols: ['<=', '≤'], machine: 'is at most', bound: 'at most' },\n { symbols: ['==', '='], machine: 'is equal to' },\n { symbols: ['!=', '≠'], machine: 'is not equal to' },\n];\n// The TYPE-EXPRESSION operators of the machine plane — the shared English type grammar\n// (type-system.ts) every domain reads: $TOOL params and $REQUIRE variable domains. `one of` picks\n// exactly one (enum), `any of` one or more (array of the enum), `list of` an open array (plural\n// base type), `optional` marks optionality, `default to` sets a default (implying optional).\n// lexicon.test.ts locks each phrase against the REAL parsers (parseTypeExpr / parseTools).\nexport const TYPE_KEYWORDS = ['DEFAULT TO', 'OPTIONAL', 'LIST OF', 'ONE OF', 'ANY OF'] as const;\n\n// ── The QUANTIFIER layer — the words that count, with their logic (SPEC §7) ───────────────────────\n// Two families, one doctrine (every fire is a proven contradiction). The PROPORTION determiners relate a\n// subject set S to a predicate P (Generalized Quantifier Theory, reduced to the square of opposition);\n// the CARDINAL quantities bound the SIZE of a set in the existential-there frame (`There is only one\n// tool` → |tool| ∈ [1,1]). quantifier.ts and cardinality.ts derive their vocabularies from THESE tables —\n// never a local copy (invariant #1) — and feed the object model (DeclaredObject.count), so the words are\n// full language operators, not checker heuristics.\nexport type QuantKind = 'universal' | 'existential' | 'negative' | 'exclusive' | 'majority';\nexport const QUANTIFIER_WORDS: readonly { readonly words: readonly string[]; readonly kind: QuantKind }[] = [\n { words: ['ALL', 'EVERY', 'EACH'], kind: 'universal' }, // S ⊆ P\n { words: ['SOME', 'ANY'], kind: 'existential' }, // S ∩ P ≠ ∅ (`a`/`an` is a generic, NOT ∃)\n { words: ['NO', 'NONE'], kind: 'negative' }, // S ∩ P = ∅\n { words: ['ONLY'], kind: 'exclusive' }, // closes a relation to one target\n { words: ['MOST'], kind: 'majority' }, // |S ∩ P| > |S| / 2\n];\n/** The flat display list — the `quantifier` operator group + SPEC §4 read this. */\nexport const QUANTIFIER_KEYWORDS = QUANTIFIER_WORDS.flatMap((q) => q.words);\n\n/** Number words the cardinal quantities parse (digits parse too). */\nexport const NUMBER_WORDS: Record<string, number> = { one: 1, two: 2, three: 3, four: 4, five: 5, six: 6, seven: 7, eight: 8, nine: 9, ten: 10 };\n/** Exactness markers: `only/exactly/just <n>` pins the count to exactly n — a bare number is at-least. */\nexport const EXACTNESS_MARKERS = ['ONLY', 'EXACTLY', 'JUST'] as const;\n// The FIXED cardinal phrases and the |S| interval each asserts (`hi: null` = unbounded above). Soundness\n// picks each reading: `many`/`several`/`multiple` assert only the weakest certainly-true bound (≥ 2);\n// `both` presupposes exactly two; `a`/`an` in this frame asserts existence, never uniqueness. Numeric\n// phrases (`exactly <n>`, `at least <n>`, bare `<n>`) compose from EXACTNESS_MARKERS / the bound words +\n// NUMBER_WORDS in cardinality.ts rather than being enumerated here.\nexport const CARDINAL_QUANTITIES: readonly { readonly phrase: string; readonly lo: number; readonly hi: number | null }[] = [\n { phrase: 'no', lo: 0, hi: 0 },\n { phrase: 'a', lo: 1, hi: null },\n { phrase: 'an', lo: 1, hi: null },\n { phrase: 'a single', lo: 1, hi: 1 },\n { phrase: 'both', lo: 2, hi: 2 },\n { phrase: 'many', lo: 2, hi: null },\n { phrase: 'several', lo: 2, hi: null },\n { phrase: 'multiple', lo: 2, hi: null },\n { phrase: 'more than one', lo: 2, hi: null },\n];\n\n/** Block headings whose body is descriptive prose, not typed instructions. */\nexport const PROSE_BLOCKS = new Set(['role', 'persona', 'context', 'background', 'examples', 'example', 'notes', 'note']);\n\nexport interface Snippet {\n label: string;\n insert: string;\n detail: string;\n /** A fill-in-the-blank template in LSP snippet syntax (`${1:placeholder}` tab stops). */\n snippet?: string;\n}\n\n/** Statement starters — offered at the beginning of a line so the UPPERCASE keyword is one pick, not typed. */\nexport const STATEMENT_SNIPPETS: Snippet[] = [\n { label: 'IF', insert: 'IF ', snippet: 'IF ${1:condition} THEN ${2:result}', detail: 'Conditional — pair with THEN' },\n { label: 'WHEN', insert: 'WHEN ', snippet: 'WHEN ${1:condition} THEN ${2:result}', detail: 'Event trigger' },\n { label: 'UNLESS', insert: 'UNLESS ', snippet: 'UNLESS ${1:condition} THEN ${2:result}', detail: 'Negative conditional (guard is negated)' },\n { label: 'ELSE IF', insert: 'ELSE IF ', snippet: 'ELSE IF ${1:condition} THEN ${2:result}', detail: 'Chained conditional' },\n { label: 'FOR EACH', insert: 'FOR EACH ', snippet: 'FOR EACH ${1:item} IN ${2:collection}', detail: 'Iterate' },\n { label: 'THEN', insert: 'THEN ', snippet: 'THEN ${1:result}', detail: 'Consequence of an IF' },\n { label: 'ELSE', insert: 'ELSE ', snippet: 'ELSE ${1:result}', detail: 'Alternative branch' },\n { label: 'OTHERWISE', insert: 'OTHERWISE ', snippet: 'OTHERWISE ${1:result}', detail: 'Default branch' },\n { label: 'MUST', insert: 'MUST ', snippet: 'MUST ${1:requirement}', detail: 'Hard requirement' },\n { label: 'MUST NOT', insert: 'MUST NOT ', snippet: 'MUST NOT ${1:action}', detail: 'Hard prohibition' },\n { label: 'NEVER', insert: 'NEVER ', snippet: 'NEVER ${1:action}', detail: 'Prohibition' },\n { label: 'ALWAYS', insert: 'ALWAYS ', snippet: 'ALWAYS ${1:behavior}', detail: 'Always' },\n { label: 'SHOULD', insert: 'SHOULD ', snippet: 'SHOULD ${1:behavior}', detail: 'Soft requirement' },\n { label: 'MAY', insert: 'MAY ', snippet: 'MAY ${1:behavior}', detail: 'Allowed' },\n { label: 'AVOID', insert: 'AVOID ', snippet: 'AVOID ${1:behavior}', detail: 'Discourage' },\n { label: 'PREFER', insert: 'PREFER ', snippet: 'PREFER ${1:this} OVER ${2:that}', detail: 'Preference (… OVER …)' },\n { label: 'DEFINE', insert: 'DEFINE ', snippet: 'DEFINE ${1:name} AS ${2:value}', detail: 'Define a variable (… AS …)' },\n];\n\n/** Block headers — offered at a true line start (no list marker). */\nexport const BLOCK_SNIPPETS: Snippet[] = [\n {\n label: '<$CONFIG>',\n insert: '<$CONFIG>\\n',\n snippet: '<\\\\$CONFIG>\\n${1:\\\\$IMPORT tool my_tool}\\n</\\\\$CONFIG>',\n detail: 'Foldable scaffolding section — never reaches the model',\n },\n { label: '# Role', insert: '# Role\\n', snippet: '# Role\\n${1:You are a ...}', detail: 'Persona (prose allowed)' },\n { label: '# Constraints', insert: '# Constraints\\n', snippet: '# Constraints\\n${1:NEVER ...}', detail: 'Rules' },\n { label: '# Instructions', insert: '# Instructions\\n', snippet: '# Instructions\\n${1:1. First step.}', detail: 'Procedure' },\n { label: '# Context', insert: '# Context\\n', snippet: '# Context\\n${1:Background ...}', detail: 'Background (prose allowed)' },\n { label: '# Examples', insert: '# Examples\\n', snippet: '# Examples\\n${1:Example ...}', detail: 'Examples (prose allowed)' },\n { label: '# Output', insert: '# Output\\n', snippet: '# Output\\n${1:Respond with ...}', detail: 'Output format' },\n];\n\n/** Directive starters — offered on a blank line so a whole `$`-command drops as a fill-in-the-blank template.\n * (Once `$` is typed, the directive PICKER in completionsAt narrows by prefix instead.) */\nexport const DIRECTIVE_SNIPPETS: Snippet[] = [\n { label: '$IMPORT tool', insert: '$IMPORT tool tool_name', snippet: '$IMPORT tool ${1:tool_name}', detail: 'declare external tools' },\n { label: '$IMPORT route', insert: '$IMPORT route \"Route Name\"', snippet: '$IMPORT route \"${1:Route Name}\"', detail: 'declare playbooks / routes' },\n { label: '$REQUIRE variable', insert: '$REQUIRE variable name: boolean', snippet: '$REQUIRE variable ${1:variable_name}: ${2:boolean}', detail: 'declare a required variable — a placeholder to fill' },\n { label: '$CONFIG model', insert: '$CONFIG model claude-opus-4', snippet: '$CONFIG model ${1:claude-opus-4}', detail: 'set the target model (stripped at compile)' },\n { label: '$TOOL', insert: '$TOOL tool_name', snippet: '$TOOL ${1:tool_name}\\n - description:: ${2:What it does, and when to use it.}\\n - input::\\n - ${3:param}:: ${4:what it is.}\\n - request:: ${5:GET https://api.example.com/path}', detail: 'define a tool (bullet fields, stripped at compile)' },\n { label: '$SERVICE', insert: '$SERVICE service_name', snippet: '$SERVICE ${1:service_name}\\n - base:: ${2:https://api.example.com}\\n - headers::\\n - ${3:Authorization}:: ${4:Bearer @{env.API_KEY\\\\}}', detail: 'define a shared backend tools can request through' },\n { label: '$IF chain', insert: '$IF @{input} is equal to value: instruction', snippet: '$IF @{${1:input}} is equal to ${2:value}: ${3:instruction}\\n$ELSE IF @{${1:input}} is equal to ${4:value}: ${5:instruction}\\n$ELSE: ${6:fallback}', detail: 'a deterministic chain — the compiler keeps one arm' },\n { label: '$DEFINE', insert: '$DEFINE name AS condition', snippet: '$DEFINE ${1:name} AS ${2:condition}', detail: 'a reusable named boolean condition (… AS …)' },\n];\n\n// ── Operator groups — the doc view of the keyword catalogs above ──────────────────────────────────\n// `tokens` is derived from the catalogs (or COPULAS), so the reference page can never list an operator\n// the tokenizer/parser doesn't know. Each group carries a one-line description + example for the docs.\n\nexport type OperatorGroupId = 'modal' | 'control' | 'branch' | 'connective' | 'copula' | 'type' | 'comparison' | 'quantifier' | 'frequency' | 'list';\n\nexport interface OperatorGroup {\n id: OperatorGroupId;\n label: string;\n tokens: readonly string[];\n description: string;\n example: string;\n}\n\nexport const OPERATOR_GROUPS: OperatorGroup[] = [\n {\n id: 'modal',\n label: 'Modal (deontic)',\n tokens: MODAL_KEYWORDS,\n description:\n 'Carry deontic force: `MUST`/`ALWAYS`/`REQUIRE`/`ENSURE` obligate; `NEVER`/`MUST NOT`/`DO NOT` prohibit; `SHOULD`/`PREFER` recommend; `SHOULD NOT`/`AVOID` discourage; `MAY` permits.',\n example: '`NEVER state a specific price`',\n },\n { id: 'control', label: 'Control', tokens: CONTROL_KEYWORDS, description: 'Open a conditional.', example: '`WHEN a refund is asked, escalate`' },\n { id: 'branch', label: 'Branch', tokens: BRANCH_KEYWORDS, description: 'The consequence or alternative of a conditional.', example: '`IF X THEN Y OTHERWISE Z`' },\n { id: 'connective', label: 'Connective', tokens: ['AND', 'OR', 'NOT'], description: 'Join or negate within a clause.', example: '`concise AND cited`' },\n { id: 'copula', label: 'Copula', tokens: COPULAS, description: 'One assignment operator, three surface forms — binds a name to a value.', example: '`Guidelines ARE concise and cited`' },\n {\n id: 'type',\n label: 'Type (machine-plane domains)',\n tokens: TYPE_KEYWORDS,\n description:\n 'The shared English type grammar every machine-plane domain reads ($TOOL params, `$REQUIRE variable` domains): `one of a, b` picks one, `any of a, b` picks many, `list of strings` is an open array, `optional` marks optionality, `default to 10` sets a default. Base types: `string`, `number`, `integer`, `boolean` — one spelling each.',\n example: '`- team:: optional one of finance, technical, sales: the destination team.`',\n },\n {\n id: 'comparison',\n label: 'Comparison (deterministic conditions)',\n tokens: COMPARISON_KEYWORDS,\n description:\n 'Compare a `@{variable}` pointer in a guard, a `$IF` condition, or a `$DEFINE`. Uniform shape: `is [not] <two-word operator> <operand>`. `equal to` / `greater than` / `less than` take `not`; `at least` / `at most` are the inclusive pair and never do (their negations are the strict positives). Symbols (`>`, `>=`, `==`) and bare `$name` variables are compile errors with the English rewrite.',\n example: '`@{cart_total} is at least 100`',\n },\n {\n id: 'quantifier',\n label: 'Quantifier (how many)',\n tokens: QUANTIFIER_KEYWORDS,\n description:\n 'The words that count, with their logic (SPEC §7). `all`/`every`/`each`, `some`/`any`, and `no`/`none` form the square of opposition; `only` closes a relation to one target; `most` is a majority. One quantity per fact (the slot axiom), and the existential-there frame (`There is only one tool`) bounds a set’s size. Every conflict fired is a proven contradiction; `a`/`an` is a generic, never an existential.',\n example: '`All refunds are approved` ⊥ `Some refund is not approved`',\n },\n {\n id: 'frequency',\n label: 'Frequency (how often)',\n tokens: FREQUENCY_KEYWORDS,\n description:\n 'The quantifier square over OCCASIONS (SPEC §7). `ALWAYS`/`NEVER` are its all/none corners (modals); `sometimes`/`occasionally`/`at times` claim some occasions, `usually`/`mostly`/`generally`/`typically` claim most, and `rarely`/`seldom` claim few (most-not, and still some). `ALWAYS X` then `sometimes X` restates one rule at two strengths (the slot axiom); `NEVER X` and `sometimes X` cannot both hold.',\n example: '`NEVER use jargon` ⊥ `Sometimes use jargon`',\n },\n { id: 'list', label: 'List / define', tokens: ['INCLUDING', 'DEFINE … AS …', '… one of …'], description: 'Declare a list, a named variable, or a closed set.', example: '`Tools INCLUDING search, escalate`' },\n];\n\n// ── Documentation tables — the DATA the reference page is generated from ──────────────────────────\n// Cell content is lightweight inline markdown: `code`, **bold**, plain text. The renderer escapes HTML\n// and projects the markup (to HTML now; to SPEC.md tables later). Keep it accurate: lexicon.test.ts +\n// the freshness gate make this the authoritative reference.\n\nexport interface DocTable {\n id: string;\n title: string;\n lead?: string;\n headers: [string, string, string];\n rows: [string, string, string][];\n}\n\nexport const STATEMENTS_TABLE: DocTable = {\n id: 'statements',\n title: 'Statements',\n lead:\n 'Every content line classifies as exactly one statement type (precedence order). Outside a prose block, a bare unclassified line is flagged — declare its type, move it into a prose block, or quote it.',\n headers: ['Type', 'Shape', 'Example'],\n rows: [\n ['**Conditional**', '`IF` / `WHEN` / `UNLESS` / `WHILE` / `WHENEVER` / `FOR EACH` / `ELSE IF`', '`IF unsure THEN escalate`'],\n ['**Branch**', '`THEN` / `ELSE` / `OTHERWISE`', '`OTHERWISE answer from the docs`'],\n ['**Directive**', '[subject] <modal> <action>', '`You SHOULD greet first`'],\n ['**Declaration**', '<Name> <copula> <value>', '`Persona IS a support agent`'],\n ['**Prose**', 'anything else (the catch-all)', '`Greet the user warmly.`'],\n ],\n};\n\nexport const DECLARATIONS_TABLE: DocTable = {\n id: 'declarations',\n title: 'Declarations & references',\n lead:\n 'A declaration binds a name to a value with the copula and is suppressed from output — it defines, it doesn’t print. Point at it with `@{name}` (bare braces are prose).',\n headers: ['Construct', 'Meaning', 'Example'],\n rows: [\n ['`Name IS/ARE/AM value`', 'Bind a name to a value (case-insensitive; suppressed from output)', '`Persona IS a support agent`'],\n ['`IS NOT` / `ARE NOT`', 'Negative assertion — renders, doesn’t bind. `NOT` folds by parity', '`Persona IS NOT a salesperson`'],\n ['`Name INCLUDING a, b, c`', 'List declaration (conjunctive — the name has all items)', '`Tools INCLUDING search, escalate`'],\n ['`Name ARE one of a, b`', 'Closed, mutually-exclusive set — two distinct members conflict (the quantifier never takes a colon)', '`Channel ARE one of voice, chat`'],\n ['`@{name}`', 'Pointer — expands the declared value at compile', '`You are @{persona}.`'],\n ['`@{object.field}`', 'Property pointer (aliases resolve too)', '`@{you.name}`'],\n ['`Your X is …` · `Sarah’s X is …`', 'Possession — binds a property of the owner, not a standalone object', '`Your name is Joe`'],\n ],\n};\n\nexport const STRUCTURE_TABLE: DocTable = {\n id: 'structure',\n title: 'Sections & structure',\n lead:\n 'Structure is carried by explicit markers, not indentation (leading whitespace is cosmetic, C-style). Prose blocks (`Role`, `Persona`, `Context`, `Background`, `Examples`, `Notes`) expect free English and are exempt from rule analysis.',\n headers: ['Construct', 'Meaning', 'Example'],\n rows: [\n ['`# Heading` · `##` · `###`', 'Section header (Role, Constraints, Instructions, Context, Examples, Output)', '`# Constraints`'],\n ['`<tag> … </tag>`', 'XML section / delimiter — preserved as authored (a boundary the model reads)', '`<examples> … </examples>`'],\n ['`<tag when=…>`', 'Section guard — include the section only when the condition holds', '`<tone when=@{channel} is equal to voice>`'],\n ['`<$CONFIG> … </$CONFIG>`', 'Foldable scaffolding section — whole extent never reaches the model', '`<$CONFIG> … </$CONFIG>`'],\n ['`<?example> … </?example>`', 'Quiet wrapper — the tag strips, the body flows through as few-shot', '`<?example> Q: … A: … </?example>`'],\n ['`<examples> … </examples>`', 'Literal illustration zone — interior exempt from rule analysis', '`<examples> … </examples>`'],\n ['`<\"name\"> … </\"name\">`', 'Literal zone by sigil — the quote pair escapes the compiler at section scale: body verbatim, interior analysis-exempt, tag emits bare `<name>`', '`<\"cheat_sheet\"> … </\"cheat_sheet\">`'],\n ['**Code fence**', 'A triple-backtick fenced block — content is verbatim; indentation and `//` stay literal', 'Wrap JSON or code samples so they render as-is'],\n ],\n};\n\nexport const COMMENTS_TABLE: DocTable = {\n id: 'comments',\n title: 'Comments, annotations & lists',\n headers: ['Construct', 'Meaning', 'Example'],\n rows: [\n ['`//`', 'Line comment — documentation, never sent to the model', '`NEVER stall // brevity tests best`'],\n ['`/* … */`', 'Block comment', '`/* draft — revisit */`'],\n ['`@@ note`', 'Statement annotation for the line below — authoring metadata, never compiled', '`@@ needs a test`'],\n ['`-` / `*` / `+` / `1.`', 'List bullets', '`- concise and cited`'],\n ['`Name ARE:`', 'List header — the bullets that follow are its items', '`Traits are:`'],\n ],\n};\n\nexport const COMMANDS_TABLE: DocTable = {\n id: 'commands',\n title: 'Commands ($-sigil)',\n lead:\n 'A command is a compiler directive, not content — the `$` is mandatory (no English word starts with `$`) and it sits at the top of the file. Commands never reach the model. Collect them inside a `<$CONFIG>` section to keep the manifest folded.',\n headers: ['Command', 'Meaning', 'Example'],\n rows: [\n ['`$CONFIG <kind> <value>`', 'Compile-time setting — a simple kind (modality) is header-only; a rich kind (`model`) nests `- param:: value` rows (`via`, `max_tokens`, …)', '`$CONFIG model claude-opus-4-8`'],\n ['`$IMPORT tool|route|input <names>`', 'Declare the external surface the host runtime provides', '`$IMPORT tool book_appointment, get_order`'],\n ['`$IMPORT file \"path\" as name`', 'Compose prompts from files (optional `with …` to fill requirements)', '`$IMPORT file \"shared.tg\" as shared`'],\n ['`$REQUIRE variable <name>[: type]`', 'A placeholder the prompt needs filled; a typed domain powers chain exhaustiveness', '`$REQUIRE variable channel: one of voice, chat`'],\n ['`$DEFINE <name> AS <value>`', 'A named state / condition read by chains and guards', '`$DEFINE vip AS @{tier} is equal to gold`'],\n ['`$TOOL <name>`', 'Define a tool — its body (description, params) compiles into the tool schema', '`$TOOL lookup_zip`'],\n ['`$SERVICE <name>`', 'Define a service', '`$SERVICE crm`'],\n ],\n};\n\nexport const SWITCH_TABLE: DocTable = {\n id: 'switch',\n title: 'Selection commands ($IF chains & $SWITCH ON blocks)',\n lead:\n 'ONE engine, TWO spellings — `$IF` is `$SWITCH` on a boolean. The plane is declared at column one: a deterministic arm is a COMMAND — the COMPILER evaluates it and losing arms never reach the model — while a bare prose `IF … THEN …` is a statement the model weighs. Choosing the spelling is choosing the CONTRACT: a `$IF` chain takes open PREDICATES (ordered, first-true-wins, may overlap — thresholds, compounds, multiple variables); a `$SWITCH ON` block takes MEMBERS of one typed input’s closed domain (unordered, total — coverage proven by construction, so a member added to the domain later fails loudly at every switch). Arms are members only: a condition in a `$SWITCH` arm is an error handing back the chain rewrite.',\n headers: ['Construct', 'Meaning', 'Example'],\n rows: [\n ['`$IF …:`', 'Open a deterministic chain — the arm runs when its condition holds; the body is inline after the `:` or indented beneath', '`$IF @{channel} is equal to voice: Speak amounts as words.`'],\n ['`$ELSE IF …:`', 'The next arm, tested first-true in order', '`$ELSE IF @{channel} is one of chat, sms: Use digits.`'],\n ['`$ELSE:`', 'The default arm — closes the chain', '`$ELSE: Match the user’s format.`'],\n ['`$SWITCH ON @{input}`', 'Open a member table over one typed input — every member gets its own arm; missing members are compile errors', '`$SWITCH ON @{channel}`'],\n ['`- <member>:: <body>`', 'One arm per domain member (bare key, never a condition); the body is inline after `::` or on the lines indented beneath', '`- voice:: Speak amounts as words.`'],\n ['`- otherwise:: <body>`', 'The deliberate fallback — legal only while members remain uncovered (on a fully covered domain it is a dead arm and errors)', '`- otherwise:: Use the default format.`'],\n ],\n};\n\nexport const POINTERS_TABLE: DocTable = {\n id: 'pointers',\n title: 'Pointers (@ + a typed bracket)',\n lead:\n 'A pointer names a declared symbol; the compiler resolves it and inlines its target. The BRACKET is the type — `{}` a variable, `<>` a section, `[]` a tool — and a pointer whose target does not exist is a compile error (a dangling pointer). Pointers are the ONE reference family: in prose, in `$IF` conditions, in guards, and in `$DEFINE` bodies alike.',\n headers: ['Construct', 'Meaning', 'Example'],\n rows: [\n ['`@{name}`', 'Variable pointer — the variable’s value, in prose or in any condition', '`@{cart_total} is at least 100`'],\n ['`@<name>`', 'Section pointer — transcludes the section’s content (same-file, or `@<alias.section>` from an `$IMPORT file`)', '`@<pricing_rules>`'],\n ['`@[name]`', 'Tool pointer — inlines the `$TOOL`’s schema', '`@[book_appointment]`'],\n ],\n};\n\nexport const TESTS_TABLE: DocTable = {\n id: 'tests',\n title: 'Tests ($TEST)',\n lead:\n 'The file carries its own eval suite. A `$TEST` block is control-plane — graded out-of-band, never sent to the model. Its body is `- input::` / `- expect::` bullets, the same record shape as a `$TOOL`; anything else inside is a structural error.',\n headers: ['Construct', 'Meaning', 'Example'],\n rows: [\n ['`$TEST <id>`', 'Open a test case; the body is bullet fields beneath it', '`$TEST pricing`'],\n ['`- input:: <turn>`', 'The user message the case sends', '`- input:: How much is Enterprise?`'],\n ['`- expect::`', 'A list — one expectation per `- ` sub-bullet (judge-scored prose, or a deterministic assert: `contains \"…\"` / `matches /…/` / `at most N sentences`)', '`- contains \"sales\"`'],\n ],\n};\n\nexport const EXAMPLES_TABLE: DocTable = {\n id: 'examples',\n title: 'Examples ($EXAMPLE)',\n lead:\n 'A structured, checkable few-shot demonstration. An `$EXAMPLE` block is part control-plane, part content: the scaffolding strips, but the `- good::` response is emitted to the model as a `User:` / `Assistant:` pair. `- bad::` is HELD OUT — a demonstrated bad response invites imitation — so it never reaches the prompt (it documents the failure mode and feeds evals). Its body is `- input::` / `- good::` / `- bad::` bullets, the same record shape as a `$TOOL`; anything else inside is a structural error.',\n headers: ['Construct', 'Meaning', 'Example'],\n rows: [\n ['`$EXAMPLE <id>`', 'Open a few-shot example; the body is bullet fields beneath it', '`$EXAMPLE pricing`'],\n ['`- input:: <turn>`', 'The user message the exchange answers', '`- input:: How much is Enterprise?`'],\n ['`- good:: <response>`', 'The ideal response — emitted as few-shot the model reads', '`- good:: Our sales team can help with that.`'],\n ['`- bad:: <response>`', 'A response to AVOID — held out of the prompt (optional)', '`- bad:: It is $2,000 a month.`'],\n ],\n};\n\nexport const LITERALS_TABLE: DocTable = {\n id: 'literals',\n title: 'Literals & case',\n headers: ['Construct', 'Meaning', 'Example'],\n rows: [\n ['`\"…\"`', 'Literal string — nothing inside is parsed as an operator/declaration; quotes strip on compile; `@{refs}` still expand. The escape hatch for prose that looks like an operator.', '`\"You are welcome.\"`'],\n ['**Case**', '**Every operator is case-insensitive** — `MUST`=`must`, `IF`=`if`, `IS`=`are`. Case is never the operator/prose distinction; to keep an operator word as literal prose, quote it.', '`must be concise` ≡ `MUST be concise`'],\n ],\n};\n\n/** The non-operator tables, in page order. (The Operators table is generated from OPERATOR_GROUPS.) */\nexport const DOC_TABLES: DocTable[] = [\n STATEMENTS_TABLE,\n DECLARATIONS_TABLE,\n STRUCTURE_TABLE,\n COMMENTS_TABLE,\n COMMANDS_TABLE,\n SWITCH_TABLE,\n POINTERS_TABLE,\n TESTS_TABLE,\n EXAMPLES_TABLE,\n LITERALS_TABLE,\n];\n","// The TypeGlish statement grammar (Peggy / PEG). One clause in → one AST node out.\n//\n// The ordered choice mirrors classifyClause's precedence EXACTLY, so the parser can back the\n// classifier without changing any observable type:\n// conditional > branch > directive > define > declaration > prose (the catch-all).\n//\n// Two PEG details worth calling out:\n// - Directive lists the BARE-modal alternative before the subject-led one. A naive\n// `subject? modal` fails on \"MUST be concise\" because PEG's `?` is possessive: it would consume\n// \"MUST\" as the subject and never backtrack. Two explicit alternatives avoid that.\n// - Keyword tokens assert a word boundary with `![A-Za-z0-9_]`, matching the `\\b` the regex\n// classifier uses (so \"MUSTard\" / \"IFunsure\" are NOT keywords).\n//\n// String.raw keeps `\\n` literal so Peggy parses the `[^\\n]` char classes itself.\nimport { COPULAS } from './copula';\nimport { BRANCH_KEYWORDS, CONTROL_KEYWORDS, MODAL_KEYWORDS } from './lexicon';\n\n// The operator alternations are DERIVED from the lexicon (the single source of truth) — never hardcode a\n// keyword list in this template. Each becomes a case-insensitive PEG choice, e.g. `\"IS\"i / \"ARE\"i / \"AM\"i`\n// or `\"MUST NOT\"i / \"MUST\"i / …` (longest-first order preserved from the lexicon so `ELSE IF` beats `IF`).\n// lexicon.test.ts asserts the reverse too: every `\"…\"i` token here is a known lexicon operator.\nconst choices = (words: readonly string[]): string => words.map((w) => `\"${w}\"i`).join(' / ');\nconst copulaChoices = choices(COPULAS);\nconst controlChoices = choices(CONTROL_KEYWORDS);\nconst branchChoices = choices(BRANCH_KEYWORDS);\nconst modalChoices = choices(MODAL_KEYWORDS);\n\nexport const GRAMMAR = String.raw`\n{{\n function sp(loc) { return { start: loc.start.offset, end: loc.end.offset }; }\n}}\n\nStatement\n = Conditional\n / Branch\n / Directive\n / Define\n / Declaration\n / Prose\n\nConditional\n = kw:Control rest:$[^\\n]* {\n return { type: 'conditional', keyword: kw, rest: rest.trim(), span: sp(location()) };\n }\n\nControl\n = w:(${controlChoices}) WB { return w.toUpperCase(); }\n\nBranch\n = kw:(${branchChoices}) WB rest:$[^\\n]* {\n return { type: 'branch', keyword: kw.toUpperCase(), body: rest.trim(), span: sp(location()) };\n }\n\nDirective\n = modal:Modal action:$[^\\n]* {\n return { type: 'directive', subject: null, modal: modal, action: action.trim(), span: sp(location()) };\n }\n / subj:SubjectWord WS modal:Modal action:$[^\\n]* {\n return { type: 'directive', subject: subj, modal: modal, action: action.trim(), span: sp(location()) };\n }\n\nModal\n = w:(${modalChoices}) WB { return w.toUpperCase(); }\n\nDefine\n = \"DEFINE\"i WB rest:$[^\\n]* {\n return { type: 'define', rest: rest.trim(), span: sp(location()) };\n }\n\nDeclaration\n = name:UpperWord WS copula:Copula WS negs:Negation* value:$[^\\n]+ {\n return { type: 'declaration', name: name, copula: copula, negated: negs.length % 2 === 1, value: value.trim(), span: sp(location()) };\n }\n / name:UpperWord WS \"INCLUDING\"i WB WS value:$[^\\n]+ {\n return { type: 'declaration', name: name, copula: 'INCLUDING', negated: false, value: value.trim(), span: sp(location()) };\n }\n\n// A chain of NOTs after the copula. NOT is a real logical negation (an involution), so the net\n// polarity is the parity of the count — IS NOT NOT a guy folds back to positive. The word boundary\n// keeps NOTHING / NOTABLE out (those are values, not negations).\nNegation = \"NOT\"i WB WS\n\nCopula\n = w:(${copulaChoices}) WB { return w.toUpperCase(); }\n\nProse\n = text:$[^\\n]* {\n return { type: 'prose', text: text, span: sp(location()) };\n }\n\n// A declaration name or a directive subject — any word, in any case. Case is irrelevant everywhere\n// now (operators and the copula alike); quotation marks (planned) are how literal prose is marked.\nUpperWord \"a name\"\n = $([A-Za-z][A-Za-z0-9_]*)\n\nSubjectWord \"a subject word\"\n = $([A-Za-z][A-Za-z0-9_]*)\n\nWS = [ \\t]+\nWB \"a word boundary\" = ![A-Za-z0-9_]\n`;\n","// ── tagname.ts · SSOT: the tag-name shape — ONE home for every reader (CLAUDE.md inv #1) ────────────\n// The parser (clause.ts TAG_ONLY_LINE / literal zones, structure.ts SECTION_LEAD), the tokenizer's\n// per-sigil scans (semantic-tokens.ts), the checker's masks (diagnostics.ts), and the editor shapes\n// (core/editor-config.ts → Monaco + the generated VS Code config) all build on these fragments, so a\n// new compile sigil lands on every surface at once — never hand-synced again.\n//\n// Deliberately ZERO-DEPENDENCY (like copula.ts): core has import cycles (prompt ↔ tool ↔ diagnostics ↔\n// fmt ↔ structure), and module-scope regexes read these bindings at evaluation time — a leaf module\n// evaluates before every importer under any bundler, so the fragments can never hit a TDZ.\n\n/** A bare tag name. */\nexport const TAG_NAME_PLAIN_SRC = '[a-z][a-z0-9_]*';\n/** A name with its optional `$`/`?` compile sigil. */\nexport const TAG_NAME_SIGIL_SRC = `[$?]?${TAG_NAME_PLAIN_SRC}`;\n/** The literal-zone quote pair — `\"name\"`. */\nexport const TAG_NAME_QUOTED_SRC = `\"${TAG_NAME_PLAIN_SRC}\"`;\n/** Any legal tag name: sigil-bearing or quoted. */\nexport const TAG_NAME_SRC = `(?:${TAG_NAME_SIGIL_SRC}|${TAG_NAME_QUOTED_SRC})`;\n","import { parseLine } from './line';\nimport { parseStatement } from './parser';\nimport { TAG_NAME_PLAIN_SRC, TAG_NAME_QUOTED_SRC, TAG_NAME_SRC } from './tagname';\n\n// Shared clause-level text utilities used by BOTH the declaration parser (prompt.ts) and the possession\n// parser (possession.ts). They live here, not in prompt.ts, so possession.ts can reuse them without\n// importing prompt.ts — which would form an import cycle.\n\n// Strip a trailing `//` inline comment. The required leading whitespace keeps URLs (https://…) intact;\n// callers skip fenced lines so example code comments survive.\nexport function stripInlineComment(text: string): string {\n return text.replace(/\\s+\\/\\/.*$/, '');\n}\n\n// A `@@` STATEMENT ANNOTATION documents the statement it PRECEDES — a leading, own-line note (like a docstring)\n// placed directly ABOVE the statement it describes. Everything from `@@` to end-of-line is the note, stripped from\n// the compiled prompt like a comment. A leading `@@` line compiles to nothing (it annotates the line BELOW it); a\n// `@@` that TRAILS content on a line is MISPLACED (annotations go before) — a warning, still stripped so it never\n// leaks. A leading `@@` with no statement after it documents nothing — an error. (Both are flagged in diagnostics.)\nconst ANNOTATION_RE = /(?:^\\s*|\\s+)@@.*$/; // the note span: `@@`+rest, at line start (leading) OR after ws (trailing)\nexport function stripAnnotation(text: string): string {\n return text.replace(ANNOTATION_RE, '');\n}\nexport function isAnnotationLine(text: string): boolean {\n return /^\\s*@@/.test(text); // the line LEADS with `@@` — a statement annotation for the statement that FOLLOWS\n}\nexport function hasTrailingAnnotation(text: string): boolean {\n return !isAnnotationLine(text) && ANNOTATION_RE.test(text); // a `@@` placed AFTER content on the line — misplaced\n}\n// ── The line-number system ──────────────────────────────────────────────────────────────────────────\n// TypeGlish numbers CONTENT lines: blanks and `@@` annotation lines take no number, so the gutter reads\n// 1, 2, 3 over statements. This is THE line-number system — the gutter, every diagnostic message that\n// names a line (\"conflicts with line N\"), every panel label, the copilot's NN│ context, and the CLI all\n// speak these numbers. Anything that formats a line for a human MUST go through here; a raw index+1\n// diverges the moment a file has a blank line.\n\n/** Per raw line: its display ordinal, or null when the line takes no number (blank / `@@`). */\nexport function lineOrdinals(rawLines: string[]): (number | null)[] {\n let n = 0;\n return rawLines.map((l) => (l.trim() === '' || isAnnotationLine(l) ? null : (n += 1)));\n}\n\n/** The display number for raw line i. An UNNUMBERED anchor (a diagnostic on a `@@` line or a blank)\n * borrows the next numbered line's ordinal — the statement it precedes — falling back to the previous. */\nexport function displayLine(ordinals: readonly (number | null)[], i: number): number {\n const own = ordinals[i];\n if (own !== null && own !== undefined) return own;\n for (let j = i + 1; j < ordinals.length; j += 1) {\n const o = ordinals[j];\n if (o !== null && o !== undefined) return o;\n }\n for (let j = i - 1; j >= 0; j -= 1) {\n const o = ordinals[j];\n if (o !== null && o !== undefined) return o;\n }\n return 1;\n}\n\n// `@@ name: …` NAMES the statement the annotation documents: the first identifier after `@@`, when followed by a\n// colon, is an ALIAS for that statement. No colon → a plain, nameless note. Returns the alias\n// name (lowercased), or null. Only meaningful on a LEADING annotation line (a trailing `@@` names nothing).\nconst ANNOTATION_ALIAS = /^\\s*@@\\s*([a-z][a-z0-9_]*)\\s*:/i;\nexport function annotationAlias(text: string): string | null {\n const m = text.match(ANNOTATION_ALIAS);\n return m ? (m[1] ?? '').toLowerCase() : null;\n}\n\n// A quoted span (\"…\") is a literal string: TypeGlish parses no operators, declarations, or possessives\n// inside it. maskQuotes replaces quoted spans with equal-length runs of `_` (so match offsets stay valid)\n// before a line is scanned; stripQuotes removes the quote delimiters for rendering, so the model sees the\n// literal text without the quotes (references inside still expand). `_` is deliberate: it is not whitespace\n// (so a greedy `\\s+` won't swallow it) and can't start a name (`[A-Za-z]`), so a masked span never reads as\n// a copula, a declaration name, or a modal.\nexport function maskQuotes(text: string): string {\n return text.replace(/\"[^\"]*\"/g, (m) => '_'.repeat(m.length));\n}\n\nexport function stripQuotes(text: string): string {\n return text.replace(/\"([^\"]*)\"/g, '$1');\n}\n\n// A copula inside a conditional's condition or a directive's action is structural, not an assignment:\n// `IF you are unsure THEN …` does NOT declare `you`. A binding — a declaration OR a possession — is\n// recognized only on a prose line or a whole-line declaration, never a typed conditional/directive/branch.\nexport function bindsHere(text: string): boolean {\n const t = parseStatement(parseLine(text).clause).type;\n return t !== 'conditional' && t !== 'directive' && t !== 'branch';\n}\n\n// ── Compiler commands ($-sigil) ──\n// A command is a deliberate compiler directive, NOT content: it starts with `$` and an EXACT-uppercase keyword.\n// The `$` guarantees no English word can ever be one by accident (nothing in prose starts with `$`), and the\n// required case makes it impossible to fat-finger into existence — you cannot write a command without meaning to.\n// Commands are parsed by the structural pass and stripped by render(), so they configure compilation but are\n// never sent to the model. They live here (the shared layer) so both passes see them without an import cycle.\n\n// `$IMPORT tool|route a, b, c` — declares the prompt's EXTERNAL surface. Kind is group 1, the comma-list 2.\n// `input` is still accepted here as a DEPRECATED alias for `$REQUIRE variable` (below); it normalizes to the\n// same 'variable' symbol so old files keep compiling.\nexport const IMPORT_RE = /^\\s*\\$IMPORT\\s+(tool|route|input)\\s+(.+)$/;\n\n// `$IMPORT file \"./path.tg\" as alias [with name = value, …]` — pulls another .tg file in as a named handle.\n// `{alias}` transcludes its whole compiled body; `{alias.section}` a section; `{alias#anchor}` a line. The\n// optional `with` clause fills the imported file's `$REQUIRE variable`s. Group 1 path, 2 alias, 3 the with-clause.\nexport const IMPORT_FILE_RE = /^\\s*\\$IMPORT\\s+file\\s+\"([^\"]+)\"\\s+as\\s+([a-z][a-z0-9_]*)(?:\\s+with\\s+(.+?))?\\s*$/i;\n\n// `$REQUIRE variable name[: type], …` — declares a REQUIRED variable: a placeholder this prompt needs filled\n// (by the values panel at top level, or by a parent when the file is imported). Same payload grammar as an\n// import's comma-list / typed-domain form; group 1 is everything after `variable`.\nexport const REQUIRE_RE = /^\\s*\\$REQUIRE\\s+variable\\s+(.+)$/i;\n\n// A line that IS a transclusion pointer — `@<name>` / `@<alias.section>` / `@<alias#anchor>` alone on its\n// line (indent allowed). Such a line is STRUCTURE, not a statement: it splices a section/file at compile\n// (imports.ts), the way a `<tag>` line opens one — so the terminator contract does not apply to it. An\n// inline pointer mid-sentence stays part of an ordinary statement. Group 1 is the name/alias.\nexport const TRANSCLUSION_LINE_RE = /^\\s*@<([a-z][a-z0-9_]*)(?:[.#][a-z][a-z0-9_]*)?>\\s*$/i;\n\n// A snake_case identifier (`book_appointment`) — the shape tool names take. Shared by the\n// structural pass (tool-reference scanning) and the predicate parser (light-verb tool binding).\nexport const SNAKE_RE = /\\b[a-z][a-z0-9]*(?:_[a-z0-9]+)+\\b/g;\n\n// `$CONFIG <key> <value>` — declares a compile-time setting (`model`, `modality`, `language`, …). Key is group 1\n// (a lowercase identifier, matching IMPORT's lowercase kinds), the value is group 2, trimmed and free-form so any\n// vendor id works (`gpt-4o`, `claude-opus-4`, `us.anthropic.claude-...`).\nexport const CONFIG_RE = /^\\s*\\$CONFIG\\s+([a-z][\\w-]*)\\s+(\\S.*?)\\s*$/;\n\n// `$DEFINE name AS expr` — a NAMED boolean state: a reusable condition (`ready_to_book AS $phase is equal to booking and\n// $authenticated`) that a guard or a deterministic chain reads by name. Group 1 is the name, group 2 the boolean expression.\n// Canonical binder: AS (the English binder, matching prose `DEFINE … AS …`). The retired `=` still\n// PARSES so the define registers (no cascading undeclared-input noise) — the checker errors on the\n// spelling with the exact rewrite.\nexport const DEFINE_RE = /^\\s*\\$DEFINE\\s+([a-z][a-z0-9_]*)\\s*(?:\\bAS\\b|=)\\s*(\\S.*)$/i;\n\n// A line shaped like a command but MISSING its `$` — almost always a forgotten sigil, so the checker flags it\n// (`$` is mandatory). Deliberately tight: it requires the full command shape (kind/key + a value), so ordinary\n// prose that merely begins with the word \"Import\"/\"Config\" is never caught — only a real command missing its `$`.\nexport const BARE_COMMAND_RE = /^\\s*(?:(?:IMPORT\\s+(?:tool|route|input)|REQUIRE\\s+variable|CONFIG\\s+[a-z][\\w-]*)\\s+\\S|(?:TOOL|SERVICE)\\s+[a-z][a-z0-9_]*\\s*$|DEFINE\\s+[a-z][a-z0-9_]*\\s*=)/;\n\n// ── Tool definitions ($TOOL / $SERVICE blocks) ──\n// A tool DEFINITION is CODE, not prose — the model never reads the definition itself, only the compiled schema\n// (and, within it, the `description:` string). So the syntax is YAML-shaped key:value pairs, opened by a\n// `$TOOL <name>` line (the $ sigil: compiler-facing syntax can never collide with prose) and scoped by\n// INDENTATION — every following indented line is the tool's body; the first non-indented line ends it, no\n// closing tag. These live in the shared bottom layer so prompt.ts (render/declarations) and structure.ts /\n// tool.ts can all see tool spans without a cycle.\n// The header may sit at any column (under the layout doctrine it sits at its section's column — e.g.\n// one unit deep inside <$CONFIG>); the BODY is every following line indented DEEPER than the header.\nexport const TOOL_DECL_RE = /^\\s*\\$TOOL\\s+([a-z][a-z0-9_]*)\\s*$/;\n\n// `$SERVICE <name>` — a shared external backend (base URL + headers), defined ONCE and referenced by tool\n// bindings (`request: POST acme /appointments`). Same block shape as $TOOL: sigil opener, indented YAML body.\nexport const SERVICE_DECL_RE = /^\\s*\\$SERVICE\\s+([a-z][a-z0-9_]*)\\s*$/;\n\n// Either definition-block opener — the shapes the indentation mask and the malformed-command check recognize.\nconst DEF_DECL_RE = /^\\s*\\$(?:TOOL|SERVICE)\\s+[a-z][a-z0-9_]*\\s*$/;\n\n// A `$CONFIG <kind> <value>` block opener — the typed-config form (DESIGN-config.md): a kind + primary value,\n// carrying an indented `- param:: value` body like $TOOL. Only a $CONFIG WITH such a body is a block; a\n// header-only `$CONFIG modality voice` stays a plain directive. Distinct from the `<$CONFIG>` scaffolding tag.\nexport const CONFIG_BLOCK_RE = /^\\s*\\$CONFIG\\s+[a-z][\\w-]*(?:\\s+\\S.*)?\\s*$/;\n\n// ── The <$CONFIG> section — a foldable home for the scaffolding pile ────────────────────────────────\n// `$` = control-plane, extended to a SECTION: `<$CONFIG> … </$CONFIG>` is a normal section in the\n// editor (folds, outlines) whose whole extent is invisible to the compiled prompt. It exists so the\n// $IMPORT/$CONFIG/$TOOL/$DEFINE/$TEST pile can collapse to one line instead of owning the screen.\n// Only command content is legal inside (structure.ts errors on anything else) — a prompt rule\n// dragged in here would otherwise VANISH silently from the render, the exact silent-wrong failure\n// the compiler exists to prevent.\n// Recognized with content on the same line too: `<$CONFIG>` opening the line (any trailing text is masked\n// content) and `</$CONFIG>` ending it (any leading text is masked content) — mirrors the general section grammar.\nexport const CONFIG_SECTION_OPEN = /^\\s*<\\$config>/i;\nexport const CONFIG_SECTION_CLOSE = /<\\/\\$config>\\s*$/i;\n\n/** Mark every line of every `<$CONFIG>` extent — tag lines included. Fence-aware; an unclosed open\n * masks to EOF (the structural error reports it; masking guarantees no half-leaked state). */\nexport function configSectionMask(rawLines: string[]): boolean[] {\n const mask = rawLines.map(() => false);\n // A `<$CONFIG>` SAMPLE inside a definition body is literal text — it must not open a phantom config\n // section (same rule literalZones applies for `<\"name\">` samples). No cycle: defEntries never reads\n // this mask.\n const defs = defListMask(rawLines);\n let inFence = false;\n let open = false;\n for (let i = 0; i < rawLines.length; i += 1) {\n const raw = rawLines[i] ?? '';\n const t = raw.trim();\n if (defs[i] && !open) continue; // a def-body line outside a real config section is inert\n if (t.startsWith('```') || t.startsWith('~~~')) {\n inFence = !inFence;\n if (open) mask[i] = true;\n continue;\n }\n if (inFence) {\n if (open) mask[i] = true;\n continue;\n }\n if (!open && CONFIG_SECTION_OPEN.test(raw)) {\n open = true;\n mask[i] = true;\n continue;\n }\n if (open) {\n mask[i] = true;\n if (CONFIG_SECTION_CLOSE.test(raw)) open = false;\n }\n }\n return mask;\n}\n\n// ── The <examples> literal zone ─────────────────────────────────────────────────────────────────────\n// Few-shot examples are ILLUSTRATION, not rules: they repeat by design, use messy user language, and show\n// contradictory scenarios on purpose. So the INTERIOR of an <examples>/<example> block is exempt from the\n// rule-analysis checks (duplication, logic, style, loose-content, and sample-tag structure) — but NOT from\n// spelling, and NOT from the block's OWN tag balance. Unlike <$CONFIG>, the content still compiles to the model.\nexport const EXAMPLES_OPEN = /^\\s*<\\??examples?(?:\\s[^>]*)?>/i; // `<example>` / `<?example>` (opt. attrs) leading the line\nexport const EXAMPLES_CLOSE = /<\\/\\??examples?>\\s*$/i; // `</example>` / `</?example>` ending the line\n// The tag-name shape lives in tagname.ts (zero-dependency leaf — see its header for why); re-exported\n// here so parser-side readers keep one import site.\nexport { TAG_NAME_PLAIN_SRC, TAG_NAME_QUOTED_SRC, TAG_NAME_SIGIL_SRC, TAG_NAME_SRC } from './tagname';\n\n// A `<\"name\">` section is a LITERAL ZONE by sigil — the declarable form of what <examples> is by name:\n// reference tables, syntax cheat-sheets, verbatim policy text. Interior analysis-exempt (spelling and the\n// secret scan still run), body rendered untouched, the tag emitted bare (`<name>`). The sigil IS the\n// quote pair: \"quotes are the one escape\" (§6) at section scale — quoted from the compiler, shown to the\n// model, quote marks stripped on compile exactly as an inline \"…\" span strips.\nexport const LITERAL_OPEN = new RegExp(`^\\\\s*<${TAG_NAME_QUOTED_SRC}(?:\\\\s[^>]*)?>`, 'i'); // `<\"name\" …>` leading the line\nexport const LITERAL_CLOSE = new RegExp(`<\\\\/${TAG_NAME_QUOTED_SRC}>\\\\s*$`, 'i'); // `</\"name\">` ending the line\n\n/** The literal-zone walker — one pass, both masks. Two zone families with DIFFERENT interior physics:\n *\n * - `<examples>` (literal by NAME): depth-counted within its own family, so a nested `<example>` never\n * closes the outer block early; fences inside toggle (they're samples too, still masked).\n * - `<\"name\">` (literal by SIGIL): VERBATIM means verbatim — the ONLY structural token inside is the\n * matching `</\"name\">` closer. Sample tags (`… </examples>` at a line end), fences, other sigils: all\n * plain text, none of it opens, closes, or toggles anything.\n *\n * The outermost tag lines stay unmasked, so balance is still checked and the section still folds/outlines.\n * An unclosed open masks to EOF. Pure. */\nfunction literalZones(rawLines: string[], inert?: readonly boolean[]): { analysis: boolean[]; verbatim: boolean[] } {\n const analysis = rawLines.map(() => false);\n const verbatim = rawLines.map(() => false);\n let exDepth = 0; // inside an <examples>-family block (depth-counted)\n let litName: string | null = null; // inside a `<\"name\">` section (name-matched)\n let inFence = false;\n for (let i = 0; i < rawLines.length; i += 1) {\n const raw = rawLines[i] ?? '';\n const t = raw.trim();\n if (litName !== null) {\n // Verbatim interior: only the matching closer ends it (leading `</\"name\"> …` or trailing `… </\"name\">`).\n const closeRe = new RegExp(`^\\\\s*</\"${litName}\">|</\"${litName}\">\\\\s*$`, 'i');\n if (closeRe.test(raw)) {\n litName = null; // the closing tag line itself stays unmasked (balance + folding see it)\n } else {\n analysis[i] = true;\n verbatim[i] = true;\n }\n continue;\n }\n if (inert?.[i] === true) {\n // A definition-body line is literal text — it can neither open nor close a zone (a `<\"name\">`\n // SAMPLE in a cheat-sheet row must not swallow the rest of the file). Inside an examples block\n // it's still interior.\n if (exDepth > 0) analysis[i] = true;\n continue;\n }\n if (t.startsWith('```') || t.startsWith('~~~')) {\n inFence = !inFence;\n if (exDepth > 0) analysis[i] = true;\n continue;\n }\n if (inFence) {\n if (exDepth > 0) analysis[i] = true;\n continue;\n }\n if (exDepth === 0) {\n const lit = raw.match(new RegExp(`^\\\\s*<\"(${TAG_NAME_PLAIN_SRC})\"(?:\\\\s[^>]*)?>`, 'i'));\n if (lit !== null) {\n // An inline `<\"x\">…</\"x\">` opens and closes on one line — nothing to mask.\n const name = (lit[1] ?? '').toLowerCase();\n if (!new RegExp(`</\"${name}\">\\\\s*$`, 'i').test(raw.slice(lit[0].length))) litName = name;\n continue;\n }\n }\n const opens = EXAMPLES_OPEN.test(raw);\n const closes = EXAMPLES_CLOSE.test(raw);\n if (opens && !closes) {\n if (exDepth > 0) analysis[i] = true; // a NESTED open is interior of the outer block\n exDepth += 1;\n } else if (closes && !opens) {\n exDepth = Math.max(0, exDepth - 1);\n if (exDepth > 0) analysis[i] = true; // a NESTED close is still interior of the outer block\n } else if (exDepth > 0) {\n analysis[i] = true; // interior content (or a nested inline <ex>…</ex>)\n }\n }\n return { analysis, verbatim };\n}\n\n/** Every ANALYSIS-exempt literal interior: `<examples>` blocks (literal by NAME), `<\"name\">` sections\n * (literal by SIGIL), and `term:: definition` entries (literal by CONSTRUCTION — a definition is\n * reference content). This is the mask every checker tier reads — content inside is illustration or\n * reference, never rules. (Spelling and the secret scan run regardless — a typo renders, a pasted key\n * is a leak.) */\nexport function examplesMask(rawLines: string[]): boolean[] {\n const defs = defListMask(rawLines);\n const mask = literalZones(rawLines, defs).analysis;\n for (let i = 0; i < mask.length; i += 1) if (defs[i]) mask[i] = true;\n return mask;\n}\n\n/** Only the ILLUSTRATION zones — the <examples> family + `<\"name\">` interiors — WITHOUT the\n * definition-list rows examplesMask folds in. The split matters to the checker: a zone is fully\n * illustrative, while a def entry is only PARSE-literal — its content is model-read reference\n * prose, so the content rules (character set, statement termination) still apply there. */\nexport function illustrationZoneMask(rawLines: string[]): boolean[] {\n return literalZones(rawLines, defListMask(rawLines)).analysis;\n}\n\n/** Only the `<\"name\">` interiors — the RENDER-verbatim subset. An <examples> body still renders normally\n * (comments strip, {refs} expand — few-shots want that); a `<\"…\">` body reaches the model byte-identical:\n * comments, annotations, quotes, refs, $-words — all kept. */\nexport function literalSectionMask(rawLines: string[]): boolean[] {\n return literalZones(rawLines, defListMask(rawLines)).verbatim;\n}\n\n// ── Definition lists — `term:: definition` ─────────────────────────────────────────────────────────\n// The reference-table syntax: a snake_case term, `::`, then free text; lines indented DEEPER than the\n// term continue the entry (the same indentation scoping $TOOL uses). Three-audience design:\n// humans — the editor styles term vs body; alignment is RENDERED, never hand-maintained\n// agents — position-insensitive: the `::` is the column, so ragged authoring never breaks anything\n// the LLM — compiles to plain `term: definition` (the `::` is for the parser, not the model)\n// Definition text is LITERAL by construction — a definition is reference content (syntax samples,\n// operator lists), so nothing inside is parsed, scanned, or deduplicated. Spelling + secrets still run.\nexport const DEF_ENTRY = /^(\\s*)([-*+]\\s+)?([a-z][a-z0-9_]*)::(\\s*)(.*)$/i;\n\nexport interface DefEntry {\n line: number; // the entry line\n indent: number; // the LINE's leading-whitespace column — the continuation scope boundary\n termCol: number; // where the term itself starts (past an optional `- ` bullet)\n term: string; // lowercased\n /** Every line of the entry: the entry line itself plus its indented continuations. */\n lines: number[];\n}\n\n/** Parse every `term:: definition` entry (with continuations) outside fences and literal zones. */\nexport function defEntries(rawLines: string[]): DefEntry[] {\n // The ANALYSIS gate: any zone interior (<examples> or <\"name\">) hides its `term::` rows — samples,\n // never entries the compiler binds, composes, or dedupes.\n return defEntriesWith(rawLines, (z, i) => z.analysis[i] === true);\n}\n\n/** Display-oriented def entries: the same scan, but rows inside a `<\"name\">` literal zone COUNT. The\n * PARSER keeps treating those rows as verbatim samples (defEntries above — nothing inside a zone\n * binds, compiles, or dedupes); the EDITOR renders them as the reference tables they visually are,\n * so a cheat-sheet inside a quoted zone reads exactly like one outside — only the tag differs (§2).\n * <examples> interiors stay excluded: few-shot content is illustration, not a reference table. */\nexport function defEntriesDisplay(rawLines: string[]): DefEntry[] {\n return defEntriesWith(rawLines, (z, i) => z.analysis[i] === true && z.verbatim[i] !== true);\n}\n\n// Zones and def entries are mutually referential: a zone hides `term::` samples inside it, and a\n// definition BODY hides zone-open samples inside IT. Iterate to a fixpoint (bounded — each round only\n// ever ADDS def lines, so it terminates in a few passes). The gate picks which zone interiors hide\n// rows: analysis-wide for the compiler, analysis-minus-verbatim for the display scan.\nfunction defEntriesWith(rawLines: string[], gate: (z: { analysis: boolean[]; verbatim: boolean[] }, i: number) => boolean): DefEntry[] {\n const maskFor = (inert: readonly boolean[]): boolean[] => {\n const zones = literalZones(rawLines, inert);\n return rawLines.map((_, i) => gate(zones, i));\n };\n let inert: boolean[] = rawLines.map(() => false);\n for (let round = 0; round < 4; round += 1) {\n const found = scanDefEntries(rawLines, maskFor(inert));\n const next = rawLines.map(() => false);\n for (const e of found) for (const l of e.lines) next[l] = true;\n if (next.every((v, i) => v === inert[i])) return found;\n inert = next;\n }\n return scanDefEntries(rawLines, maskFor(inert));\n}\n\nfunction scanDefEntries(rawLines: string[], zoneMaskArr: readonly boolean[]): DefEntry[] {\n const out: DefEntry[] = [];\n // Tool bodies use the SAME `::` marker (`description:: …` — one definition marker, one language),\n // but a tool field is TOOL syntax, never a def-list entry: the $TOOL parser owns its span. A\n // `$SWITCH ON` block's `- member::` arm rows reuse the marker the same way — switch syntax, same rule.\n const toolMask = toolBlockMask(rawLines);\n const switchMask = switchCommandMask(rawLines);\n let inFence = false;\n for (let i = 0; i < rawLines.length; i += 1) {\n const raw = rawLines[i] ?? '';\n const t = raw.trim();\n if (t.startsWith('```') || t.startsWith('~~~')) {\n inFence = !inFence;\n continue;\n }\n if (inFence || zoneMaskArr[i] || toolMask[i] || switchMask[i]) continue; // a `term::` inside a fence/<examples>/<\"zone\"> is a sample; in a $TOOL/$SWITCH body it is a field/arm\n const m = raw.match(DEF_ENTRY);\n if (m === null) continue;\n const indent = (m[1] ?? '').length;\n const entry: DefEntry = { line: i, indent, termCol: indent + (m[2] ?? '').length, term: (m[3] ?? '').toLowerCase(), lines: [i] };\n // Continuations: non-blank lines indented deeper than the term. INDENT alone draws the entry\n // boundary — a def-shaped line at the SAME indent is the next sibling entry (the indent check\n // breaks), while a DEEPER `- x:: …` is this entry's sub-item, def-shaped or not (`- request::\n // takes METHOD …` in a tools:: body documents request, it doesn't hijack the body). A FENCE\n // opened deeper than the term belongs to the body — a verbatim sample block — and is consumed\n // to its closing fence (interior lines join the entry whatever their indent).\n let j = i + 1;\n for (; j < rawLines.length; j += 1) {\n const cont = rawLines[j] ?? '';\n if (cont.trim() === '') break;\n const contIndent = cont.length - cont.trimStart().length;\n if (contIndent <= indent) break;\n if (cont.trim().startsWith('```') || cont.trim().startsWith('~~~')) {\n entry.lines.push(j);\n j += 1;\n for (; j < rawLines.length; j += 1) {\n entry.lines.push(j);\n const inner = rawLines[j] ?? '';\n if (inner.trim().startsWith('```') || inner.trim().startsWith('~~~')) break;\n }\n continue;\n }\n entry.lines.push(j);\n }\n out.push(entry);\n i = j - 1;\n }\n return out;\n}\n\n/** Every line belonging to a definition entry (term lines + continuations) — the def-list mask. */\nexport function defListMask(rawLines: string[]): boolean[] {\n const mask = rawLines.map(() => false);\n for (const e of defEntries(rawLines)) for (const l of e.lines) mask[l] = true;\n return mask;\n}\n\n/** Compile a whole definition entry to its canonical emission — a clean markdown block, because the\n * COMPILER owns the emitted layout (authoring is ragged; what matters is what the model reads):\n *\n * - term: lead prose … the entry line, prose continuations JOINED in (lazy continuation —\n * no mid-sentence hard wraps, no indent-gutter padding tokens)\n * - a sub-item a `- ` continuation → a nested bullet (one rule per bullet); a\n * - a deeper sub-item DEEPER `- ` is a sub-definition of the one above — sub-items nest\n * to ANY depth, each level one unit down (atomized facts retrieve well)\n * ``` a fenced block in the body stays FENCED — a sample must teach the\n * $TOOL name exact typeable surface, so it emits verbatim (dedented under the\n * ``` bullet, interior relative indentation preserved)\n */\nexport function renderDefBlock(rawLines: string[], e: DefEntry): string[] {\n const pad = ' '.repeat(e.indent);\n const first = rawLines[e.line] ?? '';\n const m = first.match(DEF_ENTRY);\n const out: string[] = [`${pad}- ${e.term}: ${(m?.[5] ?? '').trim()}`];\n let joinable: number | null = 0; // index in `out` that plain prose joins into; null right after a fence\n let fence: { dedent: number } | null = null;\n // Nesting: a `- ` sub-item indented DEEPER than the previous one is its CHILD — a sub-definition of a\n // sub-definition. Depth comes from the RELATIVE source indent (a stack), so ragged authoring collapses\n // to clean 2-space tiers in the emission. `curDepth` is the tier trailing prose and fences attach to;\n // an entry's own body (a fence or paragraph before any sub-item) is tier 1, exactly as before.\n const stack: number[] = []; // source indents of the open `- ` ancestors\n let curDepth = 1;\n const tier = (d: number): string => `${pad}${' '.repeat(d)}`;\n for (const li of e.lines.slice(1)) {\n const raw = rawLines[li] ?? '';\n const t = raw.trim();\n if (fence !== null) {\n out.push(`${tier(curDepth)}${raw.slice(Math.min(fence.dedent, raw.length - raw.trimStart().length))}`);\n if (t.startsWith('```') || t.startsWith('~~~')) fence = null; // the closing fence line just emitted\n continue;\n }\n if (t.startsWith('```') || t.startsWith('~~~')) {\n fence = { dedent: raw.length - raw.trimStart().length };\n out.push(`${tier(curDepth)}${t}`);\n joinable = null; // prose after the sample starts a fresh paragraph, not a join into pre-sample text\n continue;\n }\n if (t.startsWith('- ')) {\n // A def-shaped sub-item (`- request:: takes …`) emits with the SINGLE colon the model reads —\n // the `::` marker is source syntax, exactly as the entry's own `term::` emits as `- term:`.\n const si = raw.length - raw.trimStart().length; // source indent draws the nesting tree\n while (stack.length > 0 && (stack[stack.length - 1] ?? 0) >= si) stack.pop();\n stack.push(si);\n curDepth = stack.length;\n out.push(`${tier(curDepth)}- ${t.slice(2).trim().replace(/^([a-z][a-z0-9_]*\\??)::/i, '$1:')}`);\n joinable = out.length - 1; // prose that follows soft-wraps INTO this sub-item\n continue;\n }\n if (joinable === null) {\n out.push(`${tier(curDepth)}${t}`); // a post-sample paragraph line\n joinable = out.length - 1;\n } else {\n out[joinable] = `${out[joinable]} ${t}`;\n }\n }\n return out;\n}\n\n/** A line that is ONLY section tags — `<identity>`, `</identity>`, `<a></a>`, any sigil, a `when=` attr.\n * Structure, never a statement: it must not enter content analysis (a close tag normalizes to the same\n * text as its open, so a redundancy tier reading tags as prose flags every section against its own\n * closing tag). Same-line content (`<identity> You are Joe`) does NOT match — that line carries a statement. */\nexport const TAG_ONLY_LINE = new RegExp(`^\\\\s*(?:<\\\\/?${TAG_NAME_SRC}(?:\\\\s[^>]*)?>\\\\s*)+$`, 'i');\n\n/** Blank every tag-only line ('' — line COUNT preserved) so the analysis tiers — the sync logic checks\n * and the async solver/NLI audit alike — never read structure as prose. Fence-aware: a tag-only line\n * inside ``` code is a sample and stays. */\nexport function blankTagLines(text: string): string {\n const lines = text.split('\\n');\n let inFence = false;\n return lines\n .map((l) => {\n const t = l.trim();\n if (t.startsWith('```') || t.startsWith('~~~')) {\n inFence = !inFence;\n return l;\n }\n if (inFence) return l;\n return TAG_ONLY_LINE.test(l) ? '' : l;\n })\n .join('\\n');\n}\n\n/** Return `text` with every <examples> INTERIOR line emptied (line count preserved, so line numbers still align).\n * For handing the async tiers (Z3 solver, NLI audit) a prompt they can analyze without seeing example content —\n * they don't know the literal-zone rule, so blanking is how examples stay out of their findings. Pure. */\nexport function blankExamples(text: string): string {\n const lines = text.split('\\n');\n const mask = examplesMask(lines);\n return mask.some(Boolean) ? lines.map((l, i) => (mask[i] ? '' : l)).join('\\n') : text;\n}\n\n/** Return `text` with every `@@` statement-annotation note removed (a leading `@@` line emptied, a trailing\n * `@@ note` dropped so its statement remains), line count preserved. The async tiers (Z3 solver, NLI audit) get\n * this so an annotation — inert authoring metadata — never enters their findings, mirroring blankExamples. Pure. */\nexport function blankAnnotations(text: string): string {\n return text.split('\\n').map((l) => stripAnnotation(l)).join('\\n');\n}\n\n/** Mark every line of every definition block ($TOOL / $SERVICE: the opener + its indented body; interior blank\n * lines included, trailing blanks not). Definition bodies are their own SCOPE: nothing inside binds a prompt\n * object, a MUST in a description never collides with the prompt's rules, and render() strips the whole span.\n * Fence-aware (a `$TOOL` inside ``` example code is content). */\nexport function toolBlockMask(rawLines: string[]): boolean[] {\n const mask = rawLines.map(() => false);\n let inFence = false;\n for (let i = 0; i < rawLines.length; i += 1) {\n const t = (rawLines[i] ?? '').trim();\n if (t.startsWith('```') || t.startsWith('~~~')) {\n inFence = !inFence;\n continue;\n }\n const opener = rawLines[i] ?? '';\n const isDef = DEF_DECL_RE.test(opener);\n const isConfig = !isDef && CONFIG_BLOCK_RE.test(opener); // a typed `$CONFIG <kind>` block — only when it has a body\n if (inFence || !(isDef || isConfig)) continue;\n // The body is scoped RELATIVE to the header: every line indented deeper belongs to it, and the\n // first non-blank line at or above the header's column ends it (col-0 headers behave as before).\n const headerIndent = (opener.match(/^[ \\t]*/) ?? [''])[0].length;\n let lastBody = i;\n for (let j = i + 1; j < rawLines.length; j += 1) {\n const line = rawLines[j] ?? '';\n if (line.trim() === '') continue; // a blank may sit INSIDE the body — masked only if body continues below\n const lead = (line.match(/^[ \\t]*/) ?? [''])[0].length;\n if (lead <= headerIndent) break; // dedent to the header's column ends the block\n lastBody = j;\n }\n if (isConfig && lastBody === i) continue; // a header-only `$CONFIG modality voice` is a plain directive, not a block\n mask[i] = true;\n for (let k = i + 1; k <= lastBody; k += 1) mask[k] = true;\n i = lastBody;\n }\n return mask;\n}\n\n// `$SWITCH ON @{input}` — the selection command's BLOCK header (the member-keyed sibling of a `$IF`\n// chain; switch.ts owns the semantics). Lexical on purpose: this leaf can't (and needn't) parse arms —\n// the shape is all scanDefEntries needs to keep `- member::` rows out of the def-list plane.\nexport const SWITCH_ON_RE = /^\\s*\\$SWITCH\\s+ON\\s+@\\{[a-z][a-z0-9_]*\\}\\s*$/i;\n\n/** Mark every line of every `$SWITCH ON @{x}` block (the header + its indented arms and bodies) — the\n * same span rule as toolBlockMask. The switch parser owns its span: an arm row (`- even:: …`) reuses\n * the `::` marker but is SWITCH syntax, never a def-list entry — and masking the whole extent also\n * enforces the flat-arms rule (structure inside an arm is not a definition; it just fails its own\n * checks). Fence-aware (a `$SWITCH` inside ``` example code is content). */\nexport function switchCommandMask(rawLines: string[]): boolean[] {\n const mask = rawLines.map(() => false);\n let inFence = false;\n for (let i = 0; i < rawLines.length; i += 1) {\n const t = (rawLines[i] ?? '').trim();\n if (t.startsWith('```') || t.startsWith('~~~')) {\n inFence = !inFence;\n continue;\n }\n const opener = rawLines[i] ?? '';\n if (inFence || !SWITCH_ON_RE.test(opener)) continue;\n const headerIndent = (opener.match(/^[ \\t]*/) ?? [''])[0].length;\n let lastBody = i;\n for (let j = i + 1; j < rawLines.length; j += 1) {\n const line = rawLines[j] ?? '';\n if (line.trim() === '') continue;\n const lead = (line.match(/^[ \\t]*/) ?? [''])[0].length;\n if (lead <= headerIndent) break;\n lastBody = j;\n }\n mask[i] = true;\n for (let k = i + 1; k <= lastBody; k += 1) mask[k] = true;\n i = lastBody;\n }\n return mask;\n}\n\n// Honorific titles (`Mr.`, `Dr.`, …). The period after a known title is part of the abbreviation, NOT a\n// sentence boundary — so `Mr. Jones` is ONE name, not the surname `Jones` with a stray `Mr.` left over. This\n// is the standard known-abbreviation approach (Punkt, spaCy): a CLOSED allowlist, so any word not in the set\n// behaves exactly as before — the rule only ever recognizes more, never misreads less.\nexport const HONORIFICS = [\n 'Mr', 'Mrs', 'Ms', 'Dr', 'Prof', 'Rev', 'Fr', 'Hon', 'Sir', 'Dame', 'Lord', 'Lady',\n 'Capt', 'Col', 'Gen', 'Lt', 'Sgt', 'Maj', 'Gov', 'Sen', 'Rep', 'Pres', 'St', 'Mt',\n] as const;\n\nconst HONORIFIC_LOWER = new Set<string>(HONORIFICS.map((h) => h.toLowerCase()));\n\n// True if `token` (with or without a trailing `.`) is a known honorific — `Dr`, `Dr.`, `dr` all match.\nexport function isHonorific(token: string): boolean {\n return HONORIFIC_LOWER.has(token.replace(/\\.$/, '').toLowerCase());\n}\n\n// A regex fragment matching an OPTIONAL leading honorific (`Mr. `, `Dr `, …), to prefix a subject capture so\n// the title rides along with the name. Longest-first so `Mrs.` isn't shadowed by `Mr`; the first letter is a\n// case-insensitive class (`[Mm]r`) so `mr.`/`Mr.` both work WITHOUT an `i` flag — the declaration regexes\n// carry no `i` flag (they spell out both cases in their copula/name fragments instead), so a fragment\n// embedded in them handles its own casing. The `\\.?` allows the British no-period form (`Dr Smith`); the\n// whole group is optional, so a title-less subject is unchanged.\nexport const HONORIFIC_PREFIX_SRC = `(?:(?:${[...HONORIFICS]\n .sort((a, b) => b.length - a.length)\n .map((h) => `[${h.charAt(0)}${h.charAt(0).toLowerCase()}]${h.slice(1)}`)\n .join('|')})\\\\.?\\\\s+)?`;\n\n// Drop trailing sentence punctuation (`Your name is Joe.` -> `Joe`) so a value and its `{ref}` expansion\n// match and an alias keys cleanly (`Dr. Smith.` -> `Dr. Smith`). A trailing `.` on a known honorific (`Dr.`)\n// is the abbreviation marker, not a terminator, so it survives.\nexport function stripPunct(s: string): string {\n const t = s.trim();\n const tail = t.match(/(?:^|\\s)([A-Za-z]+)\\.$/);\n if (tail && isHonorific(tail[1] ?? '')) return t;\n return t.replace(/[.!?]+$/, '').trim();\n}\n\n// Identifier character runs for subjects, owners, and property paths. `\\p{L}` matches ANY Unicode letter, so\n// `José`, `Müller`, `Renée` parse exactly like `Smith`; `\\p{N}` matches a digit. Every regex that embeds one\n// of these MUST carry the `u` flag, or `\\p{…}` is a SyntaxError. NAME_WORD is a single greedy token;\n// NAME_PHRASE is a non-greedy run that may span words (a multi-word owner like `the support team`).\nexport const NAME_WORD = '\\\\p{L}[\\\\p{L}\\\\p{N}_]*';\nexport const NAME_PHRASE = '\\\\p{L}[\\\\p{L}\\\\p{N}_ ]*?';\n// A Unicode-aware word boundary built from look-around (JS `\\b` is ASCII-only, so it splits `José`). Pair the\n// open form before a run and the close form after; both require the `u` flag.\nexport const NAME_BOUNDARY_OPEN = '(?<![\\\\p{L}\\\\p{N}_])';\nexport const NAME_BOUNDARY_CLOSE = '(?![\\\\p{L}\\\\p{N}_])';\n","import type { StmtType } from './ast';\nimport { PROSE_BLOCKS } from './lexicon';\nimport { parseStatement } from './parser';\n\n// TypeGlish — the statement grammar for the prompt language.\n//\n// The language's VOCABULARY (operators, keyword arrays, completion snippets, prose blocks) is defined\n// ONCE in ./lexicon — the single source of truth — and re-exported here for back-compat, so the Monaco\n// tokenizer, the completion provider, and the linter keep importing them from `./grammar`. This module\n// keeps the LOGIC that reads that vocabulary: the classifier (backed by the parser), the keyword-regex\n// builders, and the prose-block predicate.\n//\n// Rule #1: every instruction line declares its type. There are no bare prose lines; freeform English\n// lives *inside* a typed statement's slot (the clause), or in a prose block (# Role, # Context,\n// # Examples). Force operators (MUST / IF / THEN / AND / NEVER …) are matched case-INsensitively: `must`\n// counts exactly as `MUST` — same type, same highlight. The copula (IS / ARE / AM) is case-insensitive\n// too; what a declaration keys on is grammar, not case (see lexicon.ts / SPEC §2, §5).\n\nexport {\n CONTROL_KEYWORDS,\n BRANCH_KEYWORDS,\n MODAL_KEYWORDS,\n DEFINITION_KEYWORDS,\n OPERATOR_KEYWORDS,\n PROSE_BLOCKS,\n STATEMENT_SNIPPETS,\n BLOCK_SNIPPETS,\n} from './lexicon';\nexport type { Snippet } from './lexicon';\n\nexport type StatementType = 'blank' | 'directive' | 'conditional' | 'branch' | 'definition' | 'prose';\n\n// Line structure (indent + list marker + clause) lives in core/line so the IR lowering and the\n// classifier share one parser — list handling never diverges between them.\nexport type { ParsedLine } from './line';\nexport { parseLine } from './line';\n\n// Map the parser's AST node type down to the coarse statement type the diagnostics layer keys on.\n// Both DEFINE and copula declarations collapse to \"definition\", matching the legacy classifier.\nconst STMT_TYPE: Record<StmtType, StatementType> = {\n directive: 'directive',\n conditional: 'conditional',\n branch: 'branch',\n define: 'definition',\n declaration: 'definition',\n prose: 'prose',\n};\n\n/**\n * Classify the clause of a line (after any list marker) into its TypeGlish statement type.\n * Backed by the formal grammar (src/core/parser): the parser is the single source of statement\n * structure, so the tokenizer, linter, and logic layer agree by construction rather than by three\n * regex tables drifting in parallel.\n */\nexport function classifyClause(clause: string): StatementType {\n const c = clause.replace(/^\\s+/, '');\n if (c === '') return 'blank';\n return STMT_TYPE[parseStatement(c).type];\n}\n\nexport function isProseBlock(headingText: string): boolean {\n const first = headingText.trim().toLowerCase().split(/\\s+/)[0] ?? '';\n return PROSE_BLOCKS.has(first);\n}\n\n// Both surface forms of each keyword (UPPER + lowercase), longest-first order preserved within each.\nfunction caseVariants(words: readonly string[]): string[] {\n return words.flatMap((w) => (w === w.toLowerCase() ? [w] : [w, w.toLowerCase()]));\n}\n\n/** A keyword alternation source (no anchors), both cases — for embedding in a larger Monarch regex. */\nexport function keywordAlt(words: readonly string[]): string {\n return caseVariants(words).join('|');\n}\n\n/** A keyword alternation source (no anchors) matching ANY casing (`All`, `aLL`, …) via per-character\n * classes — for embedding where a `/i` flag can't reach (e.g. a lookbehind inside a case-sensitive\n * rule). keywordAlt covers only the two display forms (UPPER + lower); title-case escapes it. */\nexport function keywordAltCI(words: readonly string[]): string {\n const ci = (w: string): string => [...w].map((c) => (/[a-z]/i.test(c) ? `[${c.toLowerCase()}${c.toUpperCase()}]` : c)).join('');\n return words.map(ci).join('|');\n}\n\n/** Build a Monarch/word-boundary keyword regex from a catalog — case-INSENSITIVE, so an operator highlights in\n * ANY case (`if`, `If`, `IF`, `iF`), matching the parser, which reads force operators case-insensitively. The\n * case lives in the PATTERN, as per-character classes (`[iI][fF]`), NOT a `/i` flag: Monarch rebuilds each\n * rule's regex with only its tokenizer-level `ignoreCase`, dropping a per-rule flag — and the tokenizer can't\n * be globally case-insensitive because the `$`-commands are case-exact, so each case-insensitive rule spells\n * its casing out per character. Longest-first order is preserved so `ELSE IF` wins over `IF`. */\nexport function keywordRegex(words: readonly string[]): RegExp {\n const ci = (w: string): string => [...w].map((c) => (/[a-z]/i.test(c) ? `[${c.toLowerCase()}${c.toUpperCase()}]` : c)).join('');\n return new RegExp(`\\\\b(${words.map(ci).join('|')})\\\\b`);\n}\n","// The verb catalog — TypeGlish's action ontology, DATA ONLY. An SSOT (CLAUDE.md invariant #1) — the predicate system's\n// equivalent of the operator tables: a curated, enumerable lexicon of the verbs agent prompts\n// actually use, mined from the real corpus (the bench golden pairs, the distillation store, and a\n// ~200-line production voice-agent prompt). Grow it from the distill store: the a/b texts of\n// EQUIVALENT / A_COVERS_B judge records are the paraphrase source for new synonyms.\n//\n// Two-tier semantics (the soundness split):\n// frame — coarse family, used ONLY by the semantic tier's candidate gate. Free to be broad:\n// a wrong frame costs one wasted NLI call, never a wrong verdict.\n// canon — strict merge head, used by the DETERMINISTIC checker to unify keys. Present only\n// where merging is provably safe ('output' ≡ 'emit'); absent = the verb participates in\n// gating but never merges checker keys. Every ANTONYMS participant carries a canon\n// (self-canon at minimum) so polarity normalization always has a head to land on.\n\nexport type Frame =\n | 'emit'\n | 'suppress'\n | 'route'\n | 'communicate-tell'\n | 'communicate-ask'\n | 'confirm'\n | 'capture'\n | 'execute'\n | 'query'\n | 'greet'\n | 'start'\n | 'stop'\n | 'permit';\n\nexport interface VerbEntry {\n /** Base form; the matcher folds -s / -es / -ing / -ed inflections onto it. */\n verb: string;\n /** Phrasal particle ('hand OFF', 'read BACK', 'look UP') — adjacent and split forms both parse. */\n particle?: string;\n frame: Frame;\n /** Strict merge head. Omitted ⇒ gating-only membership (checker keys stay textual). */\n canon?: string;\n /** Light verb: may bind a tool object ('fire book_appointment') — the object carries the meaning. */\n light?: boolean;\n}\n\nexport const VERBS: VerbEntry[] = [\n // emit — canon group (provably interchangeable in prompt-speak)\n { verb: 'output', frame: 'emit', canon: 'emit' },\n { verb: 'emit', frame: 'emit', canon: 'emit' },\n { verb: 'print', frame: 'emit', canon: 'emit' },\n { verb: 'display', frame: 'emit', canon: 'emit' },\n { verb: 'show', frame: 'emit', canon: 'emit' },\n // 'send' is emit-family for gating but keeps its own head ('send the SMS' ≠ 'display the SMS');\n // self-canon because it anchors the send↔block antonym pair.\n { verb: 'send', frame: 'emit', canon: 'send' },\n { verb: 'include', frame: 'emit', canon: 'include' }, // anchors include↔omit\n // 'return' is deliberately frame-only: \"return the call\" is routing, not emission.\n { verb: 'return', frame: 'emit' },\n\n // suppress — canon group\n { verb: 'withhold', frame: 'suppress', canon: 'suppress' },\n { verb: 'suppress', frame: 'suppress', canon: 'suppress' },\n { verb: 'hide', frame: 'suppress', canon: 'suppress' },\n { verb: 'omit', frame: 'suppress', canon: 'omit' }, // pairs with include\n { verb: 'block', frame: 'suppress', canon: 'block' }, // pairs with send\n // 'skip' stays frame-only: \"skip a turn\" is domain flow control, not information suppression.\n { verb: 'skip', frame: 'suppress' },\n\n // route — canon group (transfer/hand-off/escalate/forward all move the conversation)\n { verb: 'transfer', frame: 'route', canon: 'transfer' },\n { verb: 'hand', particle: 'off', frame: 'route', canon: 'transfer' },\n { verb: 'escalate', frame: 'route', canon: 'transfer' },\n { verb: 'forward', frame: 'route', canon: 'transfer' },\n { verb: 'redirect', frame: 'route', canon: 'transfer' },\n\n // confirm — canon group ('read X back' IS confirmation in agent-speak)\n { verb: 'confirm', frame: 'confirm', canon: 'confirm' },\n { verb: 'verify', frame: 'confirm', canon: 'confirm' },\n { verb: 'double-check', frame: 'confirm', canon: 'confirm' },\n { verb: 'read', particle: 'back', frame: 'confirm', canon: 'confirm' },\n\n // greet — canon group\n { verb: 'greet', frame: 'greet', canon: 'greet' },\n { verb: 'welcome', frame: 'greet', canon: 'greet' },\n\n // start / stop — self-canon anchors for the antonym pair\n { verb: 'start', frame: 'start', canon: 'start' },\n { verb: 'begin', frame: 'start', canon: 'start' },\n { verb: 'stop', frame: 'stop', canon: 'stop' },\n { verb: 'halt', frame: 'stop', canon: 'stop' },\n { verb: 'cease', frame: 'stop', canon: 'stop' },\n\n // allow / forbid — self-canon anchors for the antonym pair\n { verb: 'allow', frame: 'permit', canon: 'allow' },\n { verb: 'permit', frame: 'permit', canon: 'allow' },\n { verb: 'forbid', frame: 'permit', canon: 'forbid' },\n\n // communicate-tell — frame-only (say/tell/state/mention/imply/quote/name are NOT freely\n // interchangeable at proof strength; the semantic tier judges them)\n { verb: 'say', frame: 'communicate-tell' },\n { verb: 'tell', frame: 'communicate-tell' },\n { verb: 'state', frame: 'communicate-tell' },\n { verb: 'mention', frame: 'communicate-tell' },\n { verb: 'imply', frame: 'communicate-tell' },\n { verb: 'quote', frame: 'communicate-tell' },\n { verb: 'name', frame: 'communicate-tell' },\n { verb: 'acknowledge', frame: 'communicate-tell' },\n\n // communicate-ask — frame-only\n { verb: 'ask', frame: 'communicate-ask' },\n { verb: 'request', frame: 'communicate-ask' },\n { verb: 'prompt', frame: 'communicate-ask' },\n\n // capture — frame-only\n { verb: 'capture', frame: 'capture' },\n { verb: 'record', frame: 'capture' },\n { verb: 'store', frame: 'capture' },\n { verb: 'save', frame: 'capture' },\n { verb: 'hold', frame: 'capture' },\n { verb: 'collect', frame: 'capture' },\n\n // query — frame-only\n { verb: 'check', frame: 'query' },\n { verb: 'look', particle: 'up', frame: 'query' },\n { verb: 'search', frame: 'query' },\n { verb: 'fetch', frame: 'query' },\n { verb: 'pull', frame: 'query' },\n\n // execute — LIGHT VERBS: semantically bleached; the tool object carries the meaning\n { verb: 'fire', frame: 'execute', light: true },\n { verb: 'call', frame: 'execute', light: true },\n { verb: 'invoke', frame: 'execute', light: true },\n { verb: 'run', frame: 'execute', light: true },\n { verb: 'trigger', frame: 'execute', light: true },\n { verb: 'execute', frame: 'execute', light: true },\n { verb: 'use', frame: 'execute', light: true },\n];\n\n/** Antonym pairs over CANON heads, [positive, negative]. parsePredicate normalizes a negative-pole\n * verb to the positive head with lexicalPolarity −1; the checker folds that into obligate↔prohibit\n * (must-suppress-X ≡ must-not-emit-X). Curated and exact-theme-gated — this table flips badges. */\nexport const ANTONYMS: [positive: string, negative: string][] = [\n ['emit', 'suppress'],\n ['start', 'stop'],\n ['include', 'omit'],\n ['allow', 'forbid'],\n ['send', 'block'],\n];\n\n/** Preposition → semantic role. 'to' dominates the corpus (goal — routing targets). Temporal\n * before/after belong to the order checker, not roles. */\nexport const ROLE_PREPS: Record<string, 'goal' | 'source' | 'instrument' | 'beneficiary'> = {\n to: 'goal',\n into: 'goal',\n onto: 'goal',\n from: 'source',\n with: 'instrument',\n for: 'beneficiary',\n};\n\n/** Determiners/quantifiers that VETO tool binding on a light verb's object: 'fire no tools',\n * 'call any tools' — negated/quantified objects must never bind a declared tool. */\nexport const TOOL_BINDING_VETO = new Set(['no', 'any', 'none', 'zero', 'all', 'every', 'each', 'a', 'an', 'the']);\n","// The predicate parser — structure for the one constituent TypeGlish left opaque. A directive's\n// action (\"transfer the call to Office Follow Up\", \"fire book_appointment\") becomes\n// verb + particle + theme + preposition-marked roles + tool binding, against the curated catalog\n// in verbs.ts. Pure and browser-safe; shared by the deterministic checker (ir.ts / logic.ts) and\n// the semantic tier (atoms/candidates).\n//\n// The soundness firewall is `confidence`: 'lexicon' requires a catalog head AND full-span\n// consumption (theme + role PPs, zero residue — no subordinate clauses, no conjunctions, no\n// comma-tails). Anything else is 'heuristic', and canonicalActionKey then returns today's\n// normAtom(text) byte-for-byte — a heuristic parse may inform the semantic gate but can NEVER\n// change what the deterministic checker proves.\n\nimport { IMPORT_RE, SNAKE_RE } from './clause';\nimport { PROSE_BLOCKS } from './grammar';\nimport { ANTONYMS, ROLE_PREPS, TOOL_BINDING_VETO, VERBS } from './verbs';\nimport type { Frame, VerbEntry } from './verbs';\n\nexport interface PredicateIR {\n /** Canonical head: a canon verb ('transfer'), an antonym-normalized positive pole\n * ('emit' for 'withhold', lexicalPolarity −1), or the folded surface verb as fallback. */\n head: string;\n /** The verb as written, particle included ('hand off', 'read back'). */\n surface: string;\n frame?: Frame;\n particle?: string;\n /** Normalized object NP — article-stripped, last word singularized ('the calls' → 'call'). */\n theme?: string;\n roles: Partial<Record<'goal' | 'source' | 'instrument' | 'beneficiary', string>>;\n /** Bound $IMPORT tool key — only via a light verb + manifest/snake_case object. */\n tool?: string;\n /** −1 when the surface verb is the negative pole of an antonym pair (withhold = ¬emit). */\n lexicalPolarity: 1 | -1;\n confidence: 'lexicon' | 'heuristic';\n}\n\n/** Normalize an action/condition into an atom key: a `{ref}` collapses to its name, prose to a\n * trimmed lowercase key. Two clauses with the same key are the same proposition. (Moved here\n * verbatim from ir.ts/logic.ts — the previously-duplicated normalizer's single home.) */\nexport function normAtom(s: string): string {\n const t = s.trim();\n const ref = t.match(/^\\{([A-Za-z0-9_.]+)\\}$/);\n if (ref) return (ref[1] ?? '').toLowerCase();\n // The tool pointer is TRANSPARENT to the logic plane: `call @[book_appointment]` and\n // `call book_appointment` are the same proposition (the pointer is check-time syntax, §Insertion).\n return t.replace(/@\\[([a-z][a-z0-9_]*)\\]/gi, '$1').toLowerCase().replace(/[.,;:!?]+$/, '').replace(/\\s+/g, ' ').trim();\n}\n\n/** The declared-tool set from a document's `$IMPORT tool a, b` lines — the manifest that lets a\n * light verb bind its object ('fire book_appointment' → tool:book_appointment). Pure and cheap,\n * so every checker entry point can compute it without a StructuredDoc. */\nexport function toolsFromLines(rawLines: string[]): Set<string> {\n const tools = new Set<string>();\n for (const raw of rawLines) {\n const m = IMPORT_RE.exec(raw);\n if (!m || m[1] !== 'tool') continue;\n for (const name of (m[2] ?? '').split(',')) {\n const key = name.trim().toLowerCase();\n if (key !== '') tools.add(key);\n }\n }\n return tools;\n}\n\n// --- catalog index -------------------------------------------------------------------------------\n\nconst BY_VERB = new Map<string, VerbEntry[]>();\nfor (const entry of VERBS) {\n const list = BY_VERB.get(entry.verb);\n if (list) list.push(entry);\n else BY_VERB.set(entry.verb, [entry]);\n}\n\nconst NEG_TO_POS = new Map(ANTONYMS.map(([pos, neg]) => [neg, pos]));\nconst CANON_HEADS = new Set(VERBS.flatMap((v) => (v.canon ? [v.canon] : [])));\nconst SNAKE_EXACT = new RegExp(`^${SNAKE_RE.source}$`);\n\n/** Fold an inflected surface verb onto its catalog base — FOLD-TO-HIT only (a stem that isn't in\n * the catalog is not a stem we trust). Undoubling mirrors order.ts's stemEvent. */\nfunction foldVerb(word: string): string | null {\n const w = word.toLowerCase();\n if (BY_VERB.has(w)) return w;\n if (w.endsWith('es') && BY_VERB.has(w.slice(0, -2))) return w.slice(0, -2);\n if (w.endsWith('s') && BY_VERB.has(w.slice(0, -1))) return w.slice(0, -1);\n for (const [suffix, undouble] of [['ing', 3], ['ed', 2]] as const) {\n if (!w.endsWith(suffix) || w.length <= undouble + 2) continue;\n const base = w.slice(0, -undouble);\n if (BY_VERB.has(base)) return base;\n const last = base[base.length - 1] ?? '';\n if (last === base[base.length - 2] && !'aeiou'.includes(last) && BY_VERB.has(base.slice(0, -1))) {\n return base.slice(0, -1);\n }\n if (BY_VERB.has(`${base}e`)) return `${base}e`; // 'invoking' → 'invoke'\n }\n return null;\n}\n\n// Anything that signals clause structure beyond one predicate: subordinators, conjunctions,\n// comma-tails. Their presence drops confidence to heuristic — the provable subset is short and clean.\nconst RESIDUE =\n /[,;:()—]|\\bunless\\b|\\bif\\b|\\bwhen\\b|\\bwhile\\b|\\bafter\\b|\\bbefore\\b|\\buntil\\b|\\bbecause\\b|\\bexcept\\b|\\band\\b|\\bor\\b|\\bthen\\b|\\bthat\\b/i;\n\nconst THEME_MAX_WORDS = 6;\nconst ROLE_MAX_WORDS = 5;\n\n/** Normalize a noun phrase for keying: article-stripped (provenance possession.ts), last word\n * singularized (provenance quantifier.ts — conservative: plain -s only, never -ss/-us). */\nfunction normNP(s: string): string {\n const cleaned = s.toLowerCase().replace(/^(?:the|a|an)\\s+/, '').replace(/[.,;:!?]+$/, '').replace(/\\s+/g, ' ').trim();\n const words = cleaned.split(' ');\n const last = words[words.length - 1] ?? '';\n if (last.length > 3 && last.endsWith('s') && !last.endsWith('ss') && !last.endsWith('us')) {\n words[words.length - 1] = last.slice(0, -1);\n }\n return words.join(' ');\n}\n\n/** Parse one action span into a predicate. Verbs are read ONLY at head position — 'hand the CALL\n * to OFU' can never mistake the noun 'call' for the verb. Returns null when the head isn't a\n * catalog verb (the action stays an opaque span, exactly as today). */\nexport function parsePredicate(action: string, tools?: Set<string>): PredicateIR | null {\n // Unwrap tool pointers first — `fire @[book_appointment]` binds exactly like the bare name\n // (the pointer is check-time syntax; the predicate reads through it).\n const trimmed = action.replace(/@\\[([a-z][a-z0-9_]*)\\]/gi, '$1').trim().replace(/[.,;:!?]+$/, '');\n if (trimmed === '') return null;\n const tokens = trimmed.split(/\\s+/);\n const base = foldVerb(tokens[0] ?? '');\n if (base === null) return null;\n\n const entries = BY_VERB.get(base) ?? [];\n // Particle entries are more specific — try them first. The particle may sit adjacent ('hand off\n // the call') or split beyond the object ('hand the call off to billing', 'read the address\n // back'): one positional scan covers both, requiring the tokens before it to be role-prep-free\n // (a particle can't live inside a role PP).\n let entry: VerbEntry | undefined;\n let particle: string | undefined;\n let rest: string[] = [];\n for (const e of entries.filter((x) => x.particle !== undefined)) {\n const k = tokens.findIndex((t, ix) => ix >= 1 && t.toLowerCase() === e.particle);\n if (k >= 1 && !tokens.slice(1, k).some((t) => t.toLowerCase() in ROLE_PREPS)) {\n entry = e;\n particle = e.particle;\n rest = [...tokens.slice(1, k), ...tokens.slice(k + 1)];\n break;\n }\n }\n if (!entry) {\n entry = entries.find((x) => x.particle === undefined);\n if (!entry) return null; // only particle entries exist and none matched ('read' alone)\n rest = tokens.slice(1);\n }\n\n const surface = particle ? `${base} ${particle}` : base;\n const canonHead = entry.canon;\n const positive = canonHead !== undefined ? NEG_TO_POS.get(canonHead) : undefined;\n const head = positive ?? canonHead ?? base;\n const lexicalPolarity: 1 | -1 = positive !== undefined ? -1 : 1;\n\n const out: PredicateIR = { head, surface, frame: entry.frame, particle, roles: {}, lexicalPolarity, confidence: 'lexicon' };\n\n const restText = rest.join(' ');\n if (RESIDUE.test(restText)) {\n // Compound/adjunct-bearing action: the predicate identity is still useful for gating, but\n // nothing here is provable — no theme/roles, heuristic confidence, textual key downstream.\n out.confidence = 'heuristic';\n return out;\n }\n\n // Light-verb tool binding: the object carries the meaning. Bind only on manifest membership or\n // snake_case shape, and never through a vetoed determiner/quantifier ('fire no tools').\n if (entry.light) {\n const first = rest[0]?.toLowerCase() ?? '';\n const snake = first !== '' && SNAKE_EXACT.test(first);\n if (first !== '' && !TOOL_BINDING_VETO.has(first) && (tools?.has(first) || snake)) {\n out.tool = first;\n rest = rest.slice(1);\n // Tool-head frame inference: a tool NAME often names its own action —\n // `transfer_to_playbook_office_follow_up` is a route. Reading the first snake token through\n // the catalog gives bound tools a frame, so `fire transfer_…` gates against `transfer to\n // Office Follow Up` (gating only — the key stays tool:<name>).\n const headToken = foldVerb(first.split('_')[0] ?? '');\n const headEntry = headToken === null ? undefined : BY_VERB.get(headToken)?.find((x) => x.particle === undefined);\n if (headEntry) out.frame = headEntry.frame;\n } else {\n // A light verb without a bound tool proves nothing ('call the customer' is communication,\n // 'use common sense' is nothing) — gate-visible, checker-invisible.\n out.confidence = 'heuristic';\n }\n }\n\n // Theme + preposition roles: tokens up to the first role-prep are the theme; each prep opens a\n // role value running to the next prep. Empty values or oversized spans → heuristic.\n const themeTokens: string[] = [];\n let i = 0;\n while (i < rest.length && !(rest[i]!.toLowerCase() in ROLE_PREPS)) {\n themeTokens.push(rest[i]!);\n i += 1;\n }\n while (i < rest.length) {\n const role = ROLE_PREPS[rest[i]!.toLowerCase()]!;\n i += 1;\n const valueTokens: string[] = [];\n while (i < rest.length && !(rest[i]!.toLowerCase() in ROLE_PREPS)) {\n valueTokens.push(rest[i]!);\n i += 1;\n }\n if (valueTokens.length === 0 || valueTokens.length > ROLE_MAX_WORDS || out.roles[role] !== undefined) {\n out.confidence = 'heuristic';\n return out;\n }\n out.roles[role] = normNP(valueTokens.join(' '));\n }\n if (themeTokens.length > THEME_MAX_WORDS) {\n out.confidence = 'heuristic';\n return out;\n }\n if (themeTokens.length > 0) out.theme = normNP(themeTokens.join(' '));\n return out;\n}\n\nconst ROLE_ORDER = ['goal', 'source', 'instrument', 'beneficiary'] as const;\n\n/** The shared action normalizer. A lexicon-confidence parse whose head is a canon verb (or a bound\n * tool) yields the predicate-canonical key — 'emit(label)', 'transfer(call; goal=office follow up)',\n * 'tool:book_appointment()' — so synonyms merge and roles/themes keep distinct rules distinct.\n * Everything else returns today's normAtom(text) byte-for-byte. */\nexport function canonicalActionKey(\n action: string,\n tools?: Set<string>,\n): { key: string; parsed: PredicateIR | null; canonical: boolean } {\n const parsed = parsePredicate(action, tools);\n if (parsed && parsed.confidence === 'lexicon' && (parsed.tool !== undefined || CANON_HEADS.has(parsed.head))) {\n const roles = ROLE_ORDER.filter((r) => parsed.roles[r] !== undefined)\n .map((r) => `; ${r}=${parsed.roles[r]}`)\n .join('');\n const key = parsed.tool !== undefined\n ? `tool:${parsed.tool}(${parsed.theme ?? ''}${roles})`\n : `${parsed.head}(${parsed.theme ?? ''}${roles})`;\n return { key, parsed, canonical: true };\n }\n return { key: normAtom(action), parsed, canonical: false };\n}\n\n/** Lines exempt from the imperative-as-obligation reading: everything under a PROSE-BLOCK heading\n * (# Role / # Persona / # Context / # Background / # Examples / # Notes — free English is expected\n * there and must never become a rule) plus fenced code. Shared by the checker layers so example\n * prose can't produce phantom obligations. */\nexport function proseExemptLines(rawLines: string[]): Set<number> {\n const exempt = new Set<number>();\n let inFence = false;\n let inProse = false;\n rawLines.forEach((raw, i) => {\n const t = raw.trim();\n if (t.startsWith('```')) {\n inFence = !inFence;\n exempt.add(i);\n return;\n }\n const heading = /^#{1,6}\\s+(.+)$/.exec(t);\n if (!inFence && heading) {\n const first = (heading[1] ?? '').trim().toLowerCase().split(/\\s+/)[0] ?? '';\n inProse = PROSE_BLOCKS.has(first.replace(/[^a-z]/g, ''));\n exempt.add(i);\n return;\n }\n if (inFence || inProse) exempt.add(i);\n });\n return exempt;\n}\n\n/** Antonymy after normalization is just opposite polarity on an equal head. */\nexport function isAntonym(a: PredicateIR, b: PredicateIR): boolean {\n return a.head === b.head && a.lexicalPolarity !== b.lexicalPolarity;\n}\n\n/** Extract predicates from a PROSE segment for the semantic tier: chunk on clause punctuation and\n * 'and', strip a leading negation (flipping polarity), and parse each chunk's head. Recall-oriented\n * — these feed the candidate gate, never the checker. */\nexport function predicatesFromProse(text: string, tools?: Set<string>): PredicateIR[] {\n const out: PredicateIR[] = [];\n for (const chunk of text.split(/[,;:—]|\\band\\b/i)) {\n let t = chunk.trim().replace(/^please\\s+/i, '');\n let flip = false;\n const neg = /^(?:do\\s+not|don['’]t|never|not)\\s+/i.exec(t);\n if (neg) {\n flip = true;\n t = t.slice(neg[0].length);\n }\n const parsed = parsePredicate(t, tools);\n if (parsed) {\n if (flip) parsed.lexicalPolarity = parsed.lexicalPolarity === 1 ? -1 : 1;\n out.push(parsed);\n }\n if (out.length >= 6) break;\n }\n return out;\n}\n","// ── The guard-semantics registry — the SSOT for how CONTROL/BRANCH keywords LOWER ─────────────────\n// The lexicon owns WHICH words are conditionals (CONTROL_KEYWORDS, BRANCH_KEYWORDS); this owns what each\n// one MEANS when lowered. It is the exact sibling of `DEONTIC` (ir.ts): DEONTIC maps a modal word to its\n// force (obligate / prohibit / permit) — the one table that makes modals sound — and GUARDS maps a\n// conditional word to the guard it builds. Every conditional keyword exists to shape a directive's GUARD:\n// `IF` / `WHEN` build it, `UNLESS` negates it, `ELSE` / `OTHERWISE` take its complement, `THEN` divides it\n// from the body — so one table settles them all.\n//\n// Before this table the semantics were hardcoded in `splitConditional` (THEN / OTHERWISE only), so\n// `WHEN` / `UNLESS` / `WHILE` / `ELSE` fell through and their rules vanished from the consistency checker.\n// Now the splitter (ast.ts) and the lowering (ir.ts) both DERIVE from here, and the diagnostic that flags a\n// conditional missing its THEN does too. guards.test.ts locks the table to the lexicon — a CONTROL/BRANCH\n// keyword absent here, or a key that isn't a real keyword, fails CI (the same ratchet as the lexicon).\n\n/** The part a conditional keyword plays in a rule's guard:\n * - `guard` opens a condition; the body applies WHEN it holds (`negate` inverts it — UNLESS).\n * - `else` the complementary branch — the negation of the preceding guard.\n * - `separator` divides a guard's condition from its body (THEN).\n * - `iterate` a loop, not a guard — the body applies unconditionally (FOR EACH). */\nexport type GuardRole = 'guard' | 'else' | 'separator' | 'iterate';\n\nexport interface GuardKeyword {\n role: GuardRole;\n /** A guard that inverts its condition: `UNLESS x` is `IF NOT x`. Only meaningful for `role: 'guard'`. */\n negate?: boolean;\n}\n\n/** Every conditional/branch keyword (UPPERCASE, as the parser reports it) → the guard it builds.\n * Hand-authored like DEONTIC; locked to the lexicon's CONTROL + BRANCH keyword lists by guards.test.ts. */\nexport const GUARDS: Record<string, GuardKeyword> = {\n IF: { role: 'guard' },\n WHEN: { role: 'guard' },\n WHENEVER: { role: 'guard' },\n WHILE: { role: 'guard' },\n UNLESS: { role: 'guard', negate: true },\n 'ELSE IF': { role: 'guard' },\n 'FOR EACH': { role: 'iterate' },\n THEN: { role: 'separator' },\n OTHERWISE: { role: 'else' },\n ELSE: { role: 'else' },\n};\n\n/** A keyword's guard semantics, resolved case- and whitespace-insensitively (so `else if` finds `ELSE IF`). */\nexport function guardOf(keyword: string): GuardKeyword | undefined {\n return GUARDS[keyword.trim().replace(/\\s+/g, ' ').toUpperCase()];\n}\n\nconst wordsWithRole = (role: GuardRole): string[] => Object.keys(GUARDS).filter((k) => GUARDS[k]?.role === role);\n\n/** Guard openers — the keywords that introduce a condition (IF/WHEN/WHENEVER/WHILE/UNLESS/ELSE IF). */\nexport const GUARD_OPENERS = wordsWithRole('guard');\n/** Else-branch words — the complementary consequent (OTHERWISE/ELSE). */\nexport const ELSE_WORDS = wordsWithRole('else');\n/** Condition-to-body separators (THEN). One way to divide a guard from its body. */\nexport const SEPARATOR_WORDS = wordsWithRole('separator');\n\n/** A regex alternation for a set of keywords, longest-first so multi-word keys (`ELSE IF`, `FOR EACH`) beat\n * their prefixes; interior spaces match any whitespace run. */\nexport function keywordAlternation(words: readonly string[]): string {\n return [...words]\n .sort((a, b) => b.length - a.length)\n .map((w) => w.replace(/ +/g, '\\\\s+'))\n .join('|');\n}\n","// TypeGlish AST — the structured form of ONE statement (a single clause, with any list marker\n// already stripped by the line layer). The grammar is permissive: anything that isn't a recognized\n// typed statement is Prose. Prose is the `any` of TypeGlish — always valid, but the checker can\n// prove nothing about it (gradual typing). This module is the single source of truth for statement\n// structure; the regex classifier in src/web/grammar.ts becomes a thin adapter over it.\n\nimport type { Copula } from './copula';\nimport { ELSE_WORDS, SEPARATOR_WORDS, keywordAlternation } from './guards';\n\nexport type { Copula };\n\n/** Half-open [start, end) char offsets of a node within its source clause. */\nexport interface Span {\n start: number;\n end: number;\n}\n\n/** A modal keyword exactly as written (UPPERCASE). */\nexport type Modal =\n | 'MUST'\n | 'MUST NOT'\n | 'SHOULD'\n | 'SHOULD NOT'\n | 'DO NOT'\n | 'NEVER'\n | 'ALWAYS'\n | 'MAY'\n | 'AVOID'\n | 'PREFER'\n | 'REQUIRE'\n | 'ENSURE';\n\n// `Copula` (IS / ARE / AM) is defined alongside the rest of the copula synonyms in ./copula and\n// re-exported above, so there is one source of truth for the assignment operator.\n\nexport interface DirectiveStmt {\n type: 'directive';\n /** A named subject the directive constrains (\"You\", \"Responses\"), or null for the implicit agent. */\n subject: string | null;\n modal: Modal;\n /** Freeform action text after the modal. */\n action: string;\n span: Span;\n}\n\nexport interface ConditionalStmt {\n type: 'conditional';\n /** The control keyword that opened it: IF / WHEN / UNLESS / WHILE / WHENEVER / FOR EACH / ELSE IF. */\n keyword: string;\n /** Everything after the control keyword — split into condition/then/otherwise via splitConditional. */\n rest: string;\n span: Span;\n}\n\nexport interface BranchStmt {\n type: 'branch';\n keyword: 'THEN' | 'OTHERWISE' | 'ELSE';\n body: string;\n span: Span;\n}\n\nexport interface DefineStmt {\n type: 'define'; // DEFINE x AS y\n rest: string;\n span: Span;\n}\n\nexport interface DeclarationStmt {\n type: 'declaration'; // Name IS/ARE/AM [NOT] value, or Name INCLUDING a, b, c (a list)\n name: string;\n /** The assignment operator: a copula (IS/ARE/AM), or INCLUDING for a list declaration. */\n copula: Copula | 'INCLUDING';\n /** True for a negated copula (`IS NOT` / `ARE NOT` / `AM NOT`) — a negative fact, not a binding. */\n negated: boolean;\n value: string;\n span: Span;\n}\n\nexport interface ProseStmt {\n type: 'prose';\n text: string;\n span: Span;\n}\n\nexport type Stmt =\n | DirectiveStmt\n | ConditionalStmt\n | BranchStmt\n | DefineStmt\n | DeclarationStmt\n | ProseStmt;\n\nexport type StmtType = Stmt['type'];\n\n/** A conditional's `rest` split into condition + consequents. `then`/`otherwise` are null when\n * absent. Keyed on the same THEN / OTHERWISE boundaries the logic layer reasons over. */\nexport interface ConditionalParts {\n condition: string;\n then: string | null;\n otherwise: string | null;\n}\n\n// The condition/body separator (THEN) and the else words (OTHERWISE / ELSE) both come from the GUARDS\n// SSOT — one alternation each — so a keyword can never be recognized by the parser yet dropped here.\nconst SEPARATOR_RE = new RegExp(`^(.*?)\\\\b(?:${keywordAlternation(SEPARATOR_WORDS)})\\\\b(.*)$`, 'i');\nconst ELSE_RE = new RegExp(`^(.*?)\\\\b(?:${keywordAlternation(ELSE_WORDS)})\\\\b(.*)$`, 'i');\n\nexport function splitConditional(rest: string): ConditionalParts {\n const sep = rest.match(SEPARATOR_RE);\n if (!sep) return { condition: rest.trim(), then: null, otherwise: null };\n const condition = (sep[1] ?? '').trim();\n const body = sep[2] ?? '';\n const els = body.match(ELSE_RE);\n if (els) return { condition, then: (els[1] ?? '').trim(), otherwise: (els[2] ?? '').trim() };\n return { condition, then: body.trim(), otherwise: null };\n}\n","// Sentence segmentation. A TypeGlish clause can hold several sentences, and each is its own\n// statement — an assignment's value runs to the end of ITS sentence, not the end of the line. We\n// split on . ! ? that are genuine boundaries: not the dot of an abbreviation (Mr.), a decimal\n// (3.14), or an initial (J.), and not a terminator sitting inside parentheses or quotes.\n\nconst ABBREVIATIONS = new Set([\n 'mr', 'mrs', 'ms', 'dr', 'prof', 'sr', 'jr', 'st', 'vs', 'etc', 'inc', 'ltd', 'co', 'corp',\n 'no', 'al', 'eg', 'ie', 'fig', 'dept', 'est', 'approx', 'apt', 'ave', 'blvd',\n]);\n\nexport interface Sentence {\n text: string;\n /** 0-based offset of the sentence's first character within the clause. */\n start: number;\n}\n\nfunction isBoundary(s: string, i: number): boolean {\n if (s[i] === '.' && /\\d/.test(s[i - 1] ?? '') && /\\d/.test(s[i + 1] ?? '')) return false; // decimal\n const before = s.slice(0, i).match(/([A-Za-z]+)$/)?.[1] ?? '';\n if (before.length === 1 && /[A-Z]/.test(before)) return false; // initial, e.g. \"J.\"\n if (ABBREVIATIONS.has(before.toLowerCase())) return false;\n // A real boundary ends the line, or is followed by whitespace then the start of a new sentence\n // (a capital, digit, quote, bracket, or heading mark). Sentences are assumed to be capitalized.\n const after = s.slice(i + 1);\n return after.trim() === '' || /^\\s+[\"'([{#0-9A-Z]/.test(after);\n}\n\nexport function splitSentences(clause: string): Sentence[] {\n const spans: [number, number][] = [];\n let depth = 0;\n let inQuote = false;\n let segStart = 0;\n for (let i = 0; i < clause.length; i++) {\n const ch = clause[i];\n if (ch === '\"') {\n inQuote = !inQuote;\n } else if (!inQuote && (ch === '(' || ch === '[')) {\n depth++;\n } else if (!inQuote && (ch === ')' || ch === ']')) {\n depth = Math.max(0, depth - 1);\n } else if (!inQuote && depth === 0 && (ch === '.' || ch === '!' || ch === '?') && isBoundary(clause, i)) {\n spans.push([segStart, i + 1]);\n segStart = i + 1;\n }\n }\n if (segStart < clause.length) spans.push([segStart, clause.length]);\n\n const out: Sentence[] = [];\n for (const [s, e] of spans) {\n const raw = clause.slice(s, e);\n const text = raw.trim();\n if (text !== '') out.push({ text, start: s + (raw.length - raw.trimStart().length) });\n }\n return out;\n}\n","// The logical-form IR — what the grammar's AST lowers to, and the single input the consistency\n// layer reasons over (the Tier-1 fast check today; Z3 + ontology in later phases). Deliberately\n// decoupled: a consumer takes IR + abstract axioms and knows nothing about the grammar; this module\n// produces IR and knows nothing about any solver.\n\nimport { splitConditional } from './ast';\nimport { guardOf } from './guards';\nimport type { Modal, Span, Stmt } from './ast';\nimport { maskQuotes } from './clause';\nimport { parseLine } from './line';\nimport { canonicalActionKey, normAtom, parsePredicate, proseExemptLines, toolsFromLines } from './predicate';\nimport type { PredicateIR } from './predicate';\nimport { parseStatement } from './parser';\nimport { splitSentences } from './sentence';\n\n/** A boolean condition over named atoms (flat AND / OR / NOT — the shape conditions take today). */\nexport type Cond =\n | { t: 'true' }\n | { t: 'false' }\n | { t: 'atom'; key: string; text: string }\n | { t: 'not'; f: Cond }\n | { t: 'and'; fs: Cond[] }\n | { t: 'or'; fs: Cond[] };\n\n/** Deontic force of a directive, normalized from its modal. Obligate/prohibit are the hard pair the\n * consistency check keys on; the soft forms are defeasible and never hard-conflict. */\nexport type Deontic = 'obligate' | 'prohibit' | 'permit' | 'recommend' | 'discourage';\n\n/** A numeric bound parsed from a directive's action — `at most 3 sentences`, `at least 5 words`. The\n * SMT theory propositional reasoning can't reach: each bound alone is satisfiable, but two on the\n * same quantity may be jointly empty (`≤ 3` ∧ `≥ 5`), which only integer arithmetic decides. */\nexport type NumericOp = 'le' | 'ge' | 'lt' | 'gt' | 'eq';\n\nexport interface NumericConstraint {\n /** The measured unit, singularized (`sentence`, `word`). Two bounds conflict only on a shared quantity. */\n quantity: string;\n op: NumericOp;\n n: number;\n text: string;\n}\n\nexport interface DirectiveIR {\n kind: 'directive';\n deontic: Deontic;\n /** Normalized subject the directive scopes to; '' is the implicit agent (\"you\"). */\n subject: string;\n /** The action as a normalized atom key plus its original text. */\n action: { key: string; text: string };\n /** A numeric bound parsed from the action (`at most 3 sentences`), or null. */\n numeric: NumericConstraint | null;\n /** The parsed predicate (verb + theme + roles + tool binding), or null when the head isn't a\n * catalog verb. Lexicon-confidence canon/tool parses also shape `action.key`. */\n predicate: PredicateIR | null;\n /** Guard under which the directive applies (TRUE when unconditional). */\n cond: Cond;\n line: number;\n span: Span;\n}\n\nexport interface DeclarationIR {\n kind: 'declaration';\n name: string;\n value: string;\n /** True for a negated copula (`IS NOT`) — a negative fact rather than a binding. */\n negated: boolean;\n line: number;\n span: Span;\n}\n\nexport type IRNode = DirectiveIR | DeclarationIR;\n\nexport interface IR {\n nodes: IRNode[];\n}\n\nconst DEONTIC: Record<Modal, Deontic> = {\n MUST: 'obligate',\n ALWAYS: 'obligate',\n REQUIRE: 'obligate',\n ENSURE: 'obligate',\n 'MUST NOT': 'prohibit',\n 'DO NOT': 'prohibit',\n NEVER: 'prohibit',\n SHOULD: 'recommend',\n 'SHOULD NOT': 'discourage',\n AVOID: 'discourage',\n MAY: 'permit',\n PREFER: 'recommend',\n};\n\nconst TRUE: Cond = { t: 'true' };\n\n\n// Numeric-bound phrases, longest/most-specific first so `no more than` wins over `more than`.\nconst NUM_PHRASES: { re: RegExp; op: NumericOp }[] = [\n { re: /\\b(?:at most|no more than|up to)\\s+(\\d+)\\s+([a-z]+)/i, op: 'le' },\n { re: /\\b(?:at least|no fewer than|no less than)\\s+(\\d+)\\s+([a-z]+)/i, op: 'ge' },\n { re: /\\b(?:more than|over)\\s+(\\d+)\\s+([a-z]+)/i, op: 'gt' },\n { re: /\\b(?:fewer than|less than|under)\\s+(\\d+)\\s+([a-z]+)/i, op: 'lt' },\n { re: /\\bexactly\\s+(\\d+)\\s+([a-z]+)/i, op: 'eq' },\n];\n\n/** Pull the first `<phrase> N <unit>` numeric bound out of a directive's action, singularizing the unit. */\nexport function extractNumeric(action: string): NumericConstraint | null {\n for (const { re, op } of NUM_PHRASES) {\n const m = action.match(re);\n if (m) {\n const n = Number.parseInt(m[1] ?? '', 10);\n const quantity = (m[2] ?? '').toLowerCase().replace(/s$/, '');\n if (!Number.isNaN(n) && quantity !== '') return { quantity, op, n, text: m[0] };\n }\n }\n return null;\n}\n\n// A bare modal's implicit subject is the agent (\"you\"), left unscoped so `MUST x` and `You MUST x`\n// are the same proposition; any other subject is scoped in.\nfunction normSubject(subject: string | null): string {\n if (subject === null) return '';\n const s = subject.toLowerCase();\n return s === 'you' ? '' : s;\n}\n\nfunction negate(c: Cond): Cond {\n if (c.t === 'true') return { t: 'false' };\n if (c.t === 'false') return TRUE;\n return { t: 'not', f: c };\n}\n\n/** Parse a condition's text into a flat AND / OR / NOT formula over atoms. */\nexport function lowerCondition(text: string): Cond {\n const t = text.trim();\n if (t === '') return TRUE;\n const ors = t.split(/\\s+OR\\s+/i).map((op): Cond => {\n const ands = op\n .split(/\\s+AND\\s+/i)\n .map((s) => s.trim())\n .filter((x) => x !== '')\n .map((term): Cond => {\n const neg = /^NOT\\s+/i.test(term);\n const raw = (neg ? term.replace(/^NOT\\s+/i, '') : term).trim();\n const atom: Cond = { t: 'atom', key: normAtom(raw), text: raw };\n return neg ? { t: 'not', f: atom } : atom;\n });\n return ands.length === 0 ? TRUE : ands.length === 1 ? (ands[0] ?? TRUE) : { t: 'and', fs: ands };\n });\n return ors.length === 1 ? (ors[0] ?? TRUE) : { t: 'or', fs: ors };\n}\n\n/** The logical atom a directive constrains — its action key, scoped to a named subject. */\nexport function atomKey(d: DirectiveIR): string {\n return d.subject === '' ? d.action.key : `${d.subject}: ${d.action.key}`;\n}\n\nconst DEONTIC_DUAL: Partial<Record<Deontic, Deontic>> = {\n obligate: 'prohibit',\n prohibit: 'obligate',\n recommend: 'discourage',\n discourage: 'recommend',\n // `permit` has no dual (may-not-X is not the negation of may-X) — polarity never folds it.\n};\n\nfunction directiveFrom(\n subject: string | null,\n modal: Modal,\n action: string,\n cond: Cond,\n line: number,\n span: Span,\n tools?: Set<string>,\n forcedDeontic?: Deontic,\n): DirectiveIR {\n let deontic = forcedDeontic ?? DEONTIC[modal];\n const { key, parsed, canonical } = canonicalActionKey(action, tools);\n let finalKey = key;\n // D5: an antonym-normalized head carries polarity −1 (`suppress the fee` = ¬emit(fee)); fold it\n // into the deontic so `MUST suppress X` and `NEVER emit X` become the same proposition. A force\n // with no dual (permit) can't fold — fall back to the textual key so nothing merges unsoundly.\n if (canonical && parsed && parsed.lexicalPolarity === -1) {\n const dual = DEONTIC_DUAL[deontic];\n if (dual) deontic = dual;\n else finalKey = normAtom(action);\n }\n return {\n kind: 'directive',\n deontic,\n subject: normSubject(subject),\n action: { key: finalKey, text: action.trim() },\n numeric: extractNumeric(action),\n predicate: parsed,\n cond,\n line,\n span,\n };\n}\n\n// A consequent body may hold several `;`-separated directives. Re-parse each with the same grammar\n// and keep the directives — so `IF x THEN MUST y; MUST z` finds both, with no second parser.\nfunction lowerBody(body: string, cond: Cond, line: number, tools?: Set<string>): IRNode[] {\n const out: IRNode[] = [];\n for (const seg of body.split(';')) {\n const s = parseStatement(seg.trim());\n if (s.type === 'directive') out.push(directiveFrom(s.subject, s.modal, s.action, cond, line, s.span, tools));\n }\n return out;\n}\n\nfunction lowerStmt(stmt: Stmt, line: number, tools?: Set<string>): IRNode[] {\n switch (stmt.type) {\n case 'directive':\n return [directiveFrom(stmt.subject, stmt.modal, stmt.action, TRUE, line, stmt.span, tools)];\n case 'declaration':\n return [{ kind: 'declaration', name: stmt.name, value: stmt.value, negated: stmt.negated, line, span: stmt.span }];\n case 'conditional': {\n const sem = guardOf(stmt.keyword);\n if (sem?.role === 'iterate') return []; // FOR EACH is a loop, not a guard — body-lowering is a follow-up\n const parts = splitConditional(stmt.rest);\n let guard = lowerCondition(parts.condition);\n if (sem?.negate) guard = negate(guard); // UNLESS x = IF NOT x\n const out: IRNode[] = [];\n if (parts.then !== null) out.push(...lowerBody(parts.then, guard, line, tools));\n if (parts.otherwise !== null) out.push(...lowerBody(parts.otherwise, negate(guard), line, tools));\n return out;\n }\n default:\n return [];\n }\n}\n\n// A semicolon before a modal is a statement boundary — `X; NEVER Y` is two rules, not one. Built from\n// the SAME modal set lowering maps (DEONTIC keys), so the split and the deontic mapping can't drift. The\n// lookahead keeps the modal with the second part; a bare `;` (a list, `format as: a; b`) has no modal\n// after it and is left intact. Quotes are masked before matching so a literal \"…; MUST …\" never splits.\nconst COMPOUND_SPLIT = new RegExp(\n `;\\\\s*(?:and\\\\s+|but\\\\s+)?(?=(?:${Object.keys(DEONTIC).map((k) => k.replace(/ /g, '\\\\s+')).join('|')})\\\\b)`,\n 'gi',\n);\n\n// Break a clause into its statement segments — sentence boundaries (periods) AND `;`-before-a-modal —\n// each with its offset in the clause, so lowered spans stay clause-relative. A clause with a single\n// statement returns one segment (its caller then takes the byte-identical whole-clause path).\nfunction statementSegments(clause: string): { text: string; start: number }[] {\n const out: { text: string; start: number }[] = [];\n for (const s of splitSentences(clause)) {\n // A conditional distributes its guard over ;-separated consequents in lowerBody (`IF c THEN MUST x;\n // NEVER y` → both under `c`). Leave it whole so that split — with its guards — wins.\n if (/^\\s*IF\\b.+?\\bTHEN\\b/i.test(s.text)) {\n out.push({ text: s.text, start: s.start });\n continue;\n }\n const masked = maskQuotes(s.text);\n let cut = 0;\n COMPOUND_SPLIT.lastIndex = 0;\n for (let m = COMPOUND_SPLIT.exec(masked); m; m = COMPOUND_SPLIT.exec(masked)) {\n const modalAt = m.index + m[0].length; // the lookahead isn't consumed — the modal starts here\n out.push({ text: s.text.slice(cut, m.index), start: s.start + cut });\n cut = modalAt;\n COMPOUND_SPLIT.lastIndex = modalAt;\n }\n out.push({ text: s.text.slice(cut), start: s.start + cut });\n }\n return out.filter((seg) => seg.text.trim() !== '');\n}\n\n// Lower one sentence of a multi-sentence line. lowerStmt's spans are relative to the sentence text,\n// so shift them by the sentence's offset within the clause — highlight ranges stay line-relative.\nfunction lowerSentence(text: string, offset: number, i: number, exempt: Set<number>, tools?: Set<string>): IRNode[] {\n const lowered = lowerStmt(parseStatement(text), i, tools);\n if (lowered.length > 0) {\n for (const n of lowered) n.span = { start: n.span.start + offset, end: n.span.end + offset };\n return lowered;\n }\n if (exempt.has(i)) return [];\n const parsed = parsePredicate(text, tools);\n return parsed && parsed.confidence === 'lexicon'\n ? [directiveFrom(null, 'MUST', text, TRUE, i, { start: offset, end: offset + text.length }, tools)]\n : [];\n}\n\n/** Lower a whole prompt (multi-line text) to its logical-form IR. Bare IMPERATIVES whose head\n * verb is a catalog hit at lexicon confidence (`Output the label.`) lower as OBLIGATIONS — most\n * real prompt rules are written this way — except under prose-block headings (# Role, # Examples,\n * …), where free English must never become a rule. */\nexport function lower(text: string, opts: { tools?: Set<string> } = {}): IR {\n const lines = text.replace(/\\r\\n/g, '\\n').split('\\n');\n const tools = opts.tools ?? toolsFromLines(lines);\n const exempt = proseExemptLines(lines);\n const nodes: IRNode[] = [];\n lines.forEach((raw, i) => {\n const { clause } = parseLine(raw);\n // A clause can hold several statements: sentences (periods) AND semicolon-joined rules (`X; MUST Y`).\n // Lower each independently so every rule reaches the logic — otherwise the head modal swallows the\n // rest into its action text and the later rules vanish. Boundaries respect abbreviations / decimals /\n // quotes / parens (periods) and only fire before a modal (semicolons), so lists stay whole.\n const segments = statementSegments(clause);\n if (segments.length > 1) {\n for (const s of segments) nodes.push(...lowerSentence(s.text, s.start, i, exempt, tools));\n return;\n }\n // Single statement (or empty clause): the whole-clause path, unchanged — output byte-identical.\n const stmt = parseStatement(clause);\n const lowered = lowerStmt(stmt, i, tools);\n if (lowered.length > 0) {\n nodes.push(...lowered);\n return;\n }\n if (exempt.has(i)) return;\n // Imperative fallback: a verb-initial catalog parse of the whole clause reads as obligate.\n const seg = clause.trim();\n const parsed = parsePredicate(seg, tools);\n if (parsed && parsed.confidence === 'lexicon') {\n nodes.push(directiveFrom(null, 'MUST', seg, TRUE, i, { start: 0, end: raw.length }, tools));\n }\n });\n return { nodes };\n}\n"]}
|