@letsrunit/gherkin 0.3.8 → 0.3.10
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/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/locator/compile.ts +6 -0
package/dist/index.js
CHANGED
|
@@ -1410,6 +1410,10 @@ function getByFieldSelector(text, props = "") {
|
|
|
1410
1410
|
return `field=${q}${props ? ` ${props}` : ""}`;
|
|
1411
1411
|
}
|
|
1412
1412
|
function getByTextSelector(text, props = "") {
|
|
1413
|
+
if (typeof text === "string") {
|
|
1414
|
+
const escaped = text.replace(/[.*+?^${}()|[\]\\]/g, "\\$&").replace(/\//g, "\\/");
|
|
1415
|
+
return "text=/" + escaped + "/i" + (props ? ` ${props}` : "");
|
|
1416
|
+
}
|
|
1413
1417
|
return "text=" + escapeForTextSelector(text) + (props ? ` ${props}` : "");
|
|
1414
1418
|
}
|
|
1415
1419
|
function getByDateSelector(text, props = "") {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/keys/parse-key-combo.ts","../src/locator/parser.js","../src/locator/compile.ts","../src/locator/regexp.ts","../src/value.ts","../src/parameters.ts","../src/feature.ts","../src/sanitize.ts"],"names":["s","expected","found","text","offset","location"],"mappings":"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","file":"index.js","sourcesContent":["export type Modifier = 'Control' | 'Shift' | 'Alt' | 'Meta';\nexport type Key =\n | Modifier\n | 'Enter' | 'Escape' | 'Tab' | 'Backspace' | 'Delete'\n | 'Space' | 'ArrowUp' | 'ArrowDown' | 'ArrowLeft' | 'ArrowRight'\n | 'PageUp' | 'PageDown' | 'Home' | 'End'\n | `F${1|2|3|4|5|6|7|8|9|10|11|12}`;\n\nexport type KeyCombo = {\n /** Modifiers pressed and held before the final key. */\n modifiers: Modifier[];\n /** The final key to press (e.g. 'Enter', 'S', 'ArrowUp', 'F5', etc.). */\n key: Key | string; // string allows plain characters like \"A\", \"s\", \";\" etc.\n};\n\n// Normalization map (case-insensitive keys)\nconst SYNONYMS: Record<string, Key | Modifier> = {\n // modifiers\n 'ctrl': 'Control', 'control': 'Control',\n 'cmd': 'Meta', 'command': 'Meta', 'meta': 'Meta',\n 'opt': 'Alt', 'option': 'Alt', 'alt': 'Alt',\n 'shift': 'Shift',\n\n // common keys\n 'enter': 'Enter', 'return': 'Enter',\n 'esc': 'Escape', 'escape': 'Escape',\n 'tab': 'Tab',\n 'backspace': 'Backspace',\n 'del': 'Delete', 'delete': 'Delete',\n 'space': 'Space',\n 'home': 'Home', 'end': 'End',\n 'pageup': 'PageUp', 'page up': 'PageUp',\n 'pagedown': 'PageDown', 'page down': 'PageDown',\n\n // arrows\n 'arrowup': 'ArrowUp', 'arrow up': 'ArrowUp', 'up': 'ArrowUp',\n 'arrowdown': 'ArrowDown', 'arrow down': 'ArrowDown', 'down': 'ArrowDown',\n 'arrowleft': 'ArrowLeft', 'arrow left': 'ArrowLeft', 'left': 'ArrowLeft',\n 'arrowright': 'ArrowRight', 'arrow right': 'ArrowRight', 'right': 'ArrowRight',\n};\n\nfunction normalizeToken(raw: string): Key | string {\n const t = raw.trim().toLowerCase();\n\n // F-keys: f1..f12\n const fMatch = /^f([1-9]|1[0-2])$/.exec(t);\n if (fMatch) return `F${fMatch[1]}` as Key;\n\n // Letter/char keys like \"A\", \"s\", \";\", \"0\"\n // Keep as-is but upper-case single letters to look nicer in logs.\n if (!(t in SYNONYMS)) {\n if (t.length === 1) return raw.trim().length === 1 ? raw.trim().toUpperCase() : raw.trim();\n return raw.trim();\n }\n\n return SYNONYMS[t];\n}\n\nconst isModifier = (k: Key | string): k is Modifier =>\n k === 'Control' || k === 'Shift' || k === 'Alt' || k === 'Meta';\n\nexport function parseKeyCombo(text: string): KeyCombo {\n // Allow things like: Ctrl+S, Ctrl + S, \"Ctrl + Alt + Delete\"\n const parts = text.split('+').map(p => p.trim()).filter(Boolean);\n if (parts.length === 0) throw new Error(`Invalid key combo: \"${text}\"`);\n\n const tokens = parts.map(normalizeToken);\n\n const modifiers: Modifier[] = [];\n let key: Key | string | undefined;\n\n for (let i = 0; i < tokens.length; i++) {\n const tok = tokens[i];\n const isLast = i === tokens.length - 1;\n\n if (!isLast && isModifier(tok)) {\n modifiers.push(tok);\n } else if (isLast) {\n // The final token is the \"key\" (can be modifier or normal key)\n key = tok;\n } else {\n // Non-last, non-modifier token encountered (e.g., \"Ctrl + ArrowUp + Enter\" is fine,\n // but if a non-modifier appears before the last, we still allow it only if the last is present).\n // We treat everything before the last as modifiers-only; if tok isn't a modifier, error out:\n if (!isModifier(tok)) {\n throw new Error(`Only modifiers may precede the final key: \"${text}\"`);\n }\n modifiers.push(tok);\n }\n }\n\n if (!key) throw new Error(`Missing final key in combo: \"${text}\"`);\n return { modifiers, key };\n}\n","// @generated by Peggy 5.0.6.\n//\n// https://peggyjs.org/\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 Start: peg$parseStart,\n };\n let peg$startRuleFunction = peg$parseStart;\n\n const peg$c0 = \"within\";\n const peg$c1 = \"with\";\n const peg$c2 = \"without\";\n const peg$c3 = \"`\";\n const peg$c4 = \"date\";\n const peg$c5 = \"of\";\n const peg$c6 = \"button\";\n const peg$c7 = \"link\";\n const peg$c8 = \"field\";\n const peg$c9 = \"image\";\n const peg$c10 = \"text\";\n const peg$c11 = \"the\";\n const peg$c12 = \"\\\"\";\n const peg$c13 = \"\\\\\\\"\";\n\n const peg$r0 = /^[a-zA-Z]/;\n const peg$r1 = /^[^`]/;\n const peg$r2 = /^[a-zA-Z_]/;\n const peg$r3 = /^[a-zA-Z0-9_\\-]/;\n const peg$r4 = /^[ \\t\\r\\n]/;\n\n const peg$e0 = peg$literalExpectation(\"within\", true);\n const peg$e1 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"]], false, false, false);\n const peg$e2 = peg$literalExpectation(\"with\", true);\n const peg$e3 = peg$literalExpectation(\"without\", true);\n const peg$e4 = peg$literalExpectation(\"`\", false);\n const peg$e5 = peg$classExpectation([\"`\"], true, false, false);\n const peg$e6 = peg$literalExpectation(\"date\", true);\n const peg$e7 = peg$literalExpectation(\"of\", true);\n const peg$e8 = peg$anyExpectation();\n const peg$e9 = peg$literalExpectation(\"button\", true);\n const peg$e10 = peg$literalExpectation(\"link\", true);\n const peg$e11 = peg$literalExpectation(\"field\", true);\n const peg$e12 = peg$literalExpectation(\"image\", true);\n const peg$e13 = peg$literalExpectation(\"text\", true);\n const peg$e14 = peg$literalExpectation(\"the\", true);\n const peg$e15 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"], \"_\"], false, false, false);\n const peg$e16 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"], [\"0\", \"9\"], \"_\", \"-\"], false, false, false);\n const peg$e17 = peg$literalExpectation(\"\\\"\", false);\n const peg$e18 = peg$literalExpectation(\"\\\\\\\"\", false);\n const peg$e19 = peg$classExpectation([\" \", \"\\t\", \"\\r\", \"\\n\"], false, false, false);\n\n function peg$f0(e) { return e; }\n function peg$f1(base, s) { return s; }\n function peg$f2(base, rest) { return { type: \"Within\", base, ancestors: rest ?? [] }; }\n function peg$f3(sel, wp) { return wp; }\n function peg$f4(sel, parts) {\n const include = [], exclude = [];\n for (const x of parts) {\n (x.incl ? include : exclude).push(x.p);\n }\n return { type: \"With\", selector: sel, include, exclude };\n }\n function peg$f5(p) { return { incl: true, p }; }\n function peg$f6(p) { return { incl: false, p }; }\n function peg$f7(s) { return { type: \"Selector\", mode: \"raw\", raw: s.trim() }; }\n function peg$f8(base) { return { type: \"Selector\", mode: \"role\", role: base.role, name: base.name }; }\n function peg$f9(n) { return { type: \"Selector\", mode: \"date\", name: n }; }\n function peg$f10(s) { return `\"${s}\"`; }\n function peg$f11(r, n) { return { role: r, name: n ?? null }; }\n function peg$f12(r, n) { return { role: r, name: n }; }\n function peg$f13(t) { return { type: \"Selector\", mode: \"tag\", tag: t }; }\n function peg$f14(sel) { return { type: \"HasDescendant\", selector: sel }; }\n function peg$f15(chars) { return chars; }\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$parseStart() {\n let s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = peg$parse_();\n s2 = peg$parseExpr();\n if (s2 !== peg$FAILED) {\n s3 = peg$parse_();\n peg$savedPos = s0;\n s0 = peg$f0(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseExpr() {\n let s0, s1, s2, s3, s4, s5, s6, s7, s8;\n\n s0 = peg$currPos;\n s1 = peg$parseWithExpr();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n s5 = input.substr(peg$currPos, 6);\n if (s5.toLowerCase() === peg$c0) {\n peg$currPos += (6);\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = input.charAt(peg$currPos);\n if (peg$r0.test(s7)) {\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n peg$silentFails--;\n if (s7 === peg$FAILED) {\n s6 = undefined;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n s7 = peg$parse_();\n s8 = peg$parseSelector();\n if (s8 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f1(s1, s8);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n s5 = input.substr(peg$currPos, 6);\n if (s5.toLowerCase() === peg$c0) {\n peg$currPos += (6);\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = input.charAt(peg$currPos);\n if (peg$r0.test(s7)) {\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n peg$silentFails--;\n if (s7 === peg$FAILED) {\n s6 = undefined;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n s7 = peg$parse_();\n s8 = peg$parseSelector();\n if (s8 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f1(s1, s8);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n peg$savedPos = s0;\n s0 = peg$f2(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseWithExpr() {\n let s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n s1 = peg$parseSelector();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n s5 = peg$parseWithPart();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f3(s1, 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$parseWithPart();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f3(s1, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n peg$savedPos = s0;\n s0 = peg$f4(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseWithPart() {\n let s0, s1, s2, s3, s4;\n\n s0 = peg$currPos;\n s1 = input.substr(peg$currPos, 4);\n if (s1.toLowerCase() === peg$c1) {\n peg$currPos += (4);\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n peg$silentFails++;\n s3 = input.charAt(peg$currPos);\n if (peg$r0.test(s3)) {\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\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$parse_();\n s4 = peg$parsePredicate();\n if (s4 !== peg$FAILED) {\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 } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = input.substr(peg$currPos, 7);\n if (s1.toLowerCase() === peg$c2) {\n peg$currPos += (7);\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n peg$silentFails++;\n s3 = input.charAt(peg$currPos);\n if (peg$r0.test(s3)) {\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\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$parse_();\n s4 = peg$parsePredicate();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f6(s4);\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$parseSelector() {\n let s0;\n\n s0 = peg$parseRawSel();\n if (s0 === peg$FAILED) {\n s0 = peg$parseDateSel();\n if (s0 === peg$FAILED) {\n s0 = peg$parseRoleSelFull();\n if (s0 === peg$FAILED) {\n s0 = peg$parseTagSelFull();\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseRawSel() {\n let s0, s1, s2, s3;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 96) {\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$parseRawChars();\n if (input.charCodeAt(peg$currPos) === 96) {\n s3 = peg$c3;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e4); }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f7(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$parseRawChars() {\n let s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = input.charAt(peg$currPos);\n if (peg$r1.test(s2)) {\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e5); }\n }\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = input.charAt(peg$currPos);\n if (peg$r1.test(s2)) {\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e5); }\n }\n }\n s0 = input.substring(s0, peg$currPos);\n\n return s0;\n }\n\n function peg$parseRoleSelFull() {\n let s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = peg$parseTheOpt();\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n s2 = peg$parseRoleSel();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f8(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseDateSel() {\n let s0, s1, s2, s3, s4;\n\n s0 = peg$currPos;\n s1 = input.substr(peg$currPos, 4);\n if (s1.toLowerCase() === peg$c4) {\n peg$currPos += (4);\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$parseOfOpt();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = peg$parseDateValue();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f9(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 return s0;\n }\n\n function peg$parseOfOpt() {\n let s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = input.substr(peg$currPos, 2);\n if (s1.toLowerCase() === peg$c5) {\n peg$currPos += (2);\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e7); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n peg$silentFails++;\n s3 = input.charAt(peg$currPos);\n if (peg$r0.test(s3)) {\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\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$parse_();\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$parseDateValue() {\n let s0, s1, s2, s3, s4, s5, s6, s7, s8;\n\n s0 = peg$currPos;\n s1 = peg$parseStringLit();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f10(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$currPos;\n s3 = peg$currPos;\n peg$silentFails++;\n s4 = peg$currPos;\n s5 = peg$parse_();\n s6 = input.substr(peg$currPos, 6);\n if (s6.toLowerCase() === peg$c0) {\n peg$currPos += (6);\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s6 !== peg$FAILED) {\n s7 = peg$currPos;\n peg$silentFails++;\n s8 = input.charAt(peg$currPos);\n if (peg$r0.test(s8)) {\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n peg$silentFails--;\n if (s8 === peg$FAILED) {\n s7 = undefined;\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n if (s7 !== peg$FAILED) {\n s5 = [s5, s6, s7];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n peg$silentFails--;\n if (s4 === peg$FAILED) {\n s3 = undefined;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e8); }\n }\n if (s4 !== peg$FAILED) {\n s3 = [s3, s4];\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 if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$currPos;\n s3 = peg$currPos;\n peg$silentFails++;\n s4 = peg$currPos;\n s5 = peg$parse_();\n s6 = input.substr(peg$currPos, 6);\n if (s6.toLowerCase() === peg$c0) {\n peg$currPos += (6);\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s6 !== peg$FAILED) {\n s7 = peg$currPos;\n peg$silentFails++;\n s8 = input.charAt(peg$currPos);\n if (peg$r0.test(s8)) {\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n peg$silentFails--;\n if (s8 === peg$FAILED) {\n s7 = undefined;\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n if (s7 !== peg$FAILED) {\n s5 = [s5, s6, s7];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n peg$silentFails--;\n if (s4 === peg$FAILED) {\n s3 = undefined;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e8); }\n }\n if (s4 !== peg$FAILED) {\n s3 = [s3, s4];\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 } 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\n return s0;\n }\n\n function peg$parseRoleSel() {\n let s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = peg$parseKnownRole();\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n s3 = peg$parseStringLit();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f11(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseIdent();\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n s3 = peg$parseStringLit();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f12(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\n return s0;\n }\n\n function peg$parseKnownRole() {\n let s0;\n\n s0 = input.substr(peg$currPos, 6);\n if (s0.toLowerCase() === peg$c6) {\n peg$currPos += (6);\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e9); }\n }\n if (s0 === peg$FAILED) {\n s0 = input.substr(peg$currPos, 4);\n if (s0.toLowerCase() === peg$c7) {\n peg$currPos += (4);\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e10); }\n }\n if (s0 === peg$FAILED) {\n s0 = input.substr(peg$currPos, 5);\n if (s0.toLowerCase() === peg$c8) {\n peg$currPos += (5);\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e11); }\n }\n if (s0 === peg$FAILED) {\n s0 = input.substr(peg$currPos, 5);\n if (s0.toLowerCase() === peg$c9) {\n peg$currPos += (5);\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e12); }\n }\n if (s0 === peg$FAILED) {\n s0 = input.substr(peg$currPos, 4);\n if (s0.toLowerCase() === peg$c10) {\n peg$currPos += (4);\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e13); }\n }\n if (s0 === peg$FAILED) {\n s0 = input.substr(peg$currPos, 4);\n if (s0.toLowerCase() === peg$c4) {\n peg$currPos += (4);\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e6); }\n }\n }\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseTagSelFull() {\n let s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = peg$parseTheOpt();\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n s2 = peg$parseIdent();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f13(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsePredicate() {\n let s0, s1;\n\n s0 = peg$currPos;\n s1 = peg$parseSelector();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f14(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseTheOpt() {\n let s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = input.substr(peg$currPos, 3);\n if (s1.toLowerCase() === peg$c11) {\n peg$currPos += (3);\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e14); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n peg$silentFails++;\n s3 = input.charAt(peg$currPos);\n if (peg$r0.test(s3)) {\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\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$parse_();\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$parseIdent() {\n let s0, s1, s2, s3, s4;\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = input.charAt(peg$currPos);\n if (peg$r2.test(s2)) {\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e15); }\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = input.charAt(peg$currPos);\n if (peg$r3.test(s4)) {\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e16); }\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = input.charAt(peg$currPos);\n if (peg$r3.test(s4)) {\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e16); }\n }\n }\n s2 = [s2, s3];\n s1 = s2;\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$parseStringLit() {\n let s0, s1, s2, s3, s4, s5, s6;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 34) {\n s1 = peg$c12;\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$currPos;\n s3 = [];\n if (input.substr(peg$currPos, 2) === peg$c13) {\n s4 = peg$c13;\n peg$currPos += 2;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e18); }\n }\n if (s4 === peg$FAILED) {\n s4 = peg$currPos;\n s5 = peg$currPos;\n peg$silentFails++;\n if (input.charCodeAt(peg$currPos) === 34) {\n s6 = peg$c12;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e17); }\n }\n peg$silentFails--;\n if (s6 === peg$FAILED) {\n s5 = undefined;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e8); }\n }\n if (s6 !== peg$FAILED) {\n s5 = [s5, s6];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n if (input.substr(peg$currPos, 2) === peg$c13) {\n s4 = peg$c13;\n peg$currPos += 2;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e18); }\n }\n if (s4 === peg$FAILED) {\n s4 = peg$currPos;\n s5 = peg$currPos;\n peg$silentFails++;\n if (input.charCodeAt(peg$currPos) === 34) {\n s6 = peg$c12;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e17); }\n }\n peg$silentFails--;\n if (s6 === peg$FAILED) {\n s5 = undefined;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e8); }\n }\n if (s6 !== peg$FAILED) {\n s5 = [s5, s6];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n }\n s2 = input.substring(s2, peg$currPos);\n if (input.charCodeAt(peg$currPos) === 34) {\n s3 = peg$c12;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e17); }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f15(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$parse_() {\n let s0, s1;\n\n s0 = [];\n s1 = input.charAt(peg$currPos);\n if (peg$r4.test(s1)) {\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e19); }\n }\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n s1 = input.charAt(peg$currPos);\n if (peg$r4.test(s1)) {\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e19); }\n }\n }\n\n return s0;\n }\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\nconst peg$allowedStartRules = [\n \"Start\"\n];\n\nexport {\n peg$allowedStartRules as StartRules,\n peg$SyntaxError as SyntaxError,\n peg$parse as parse\n};\n","// @ts-ignore\nimport { parse } from './parser'; // generated by peggy from parser.peggy\n\n// ---------- AST Types (mirror the grammar; keep minimal) ----------\n\ntype RoleSelector = {\n type: 'Selector';\n mode: 'role';\n role: string; // any ARIA role, or the specials: field | image | text\n name: string | null; // the quoted name after role\n};\n\ntype TagSelector = {\n type: 'Selector';\n mode: 'tag';\n tag: string; // e.g., section, form, button\n};\n\ntype RawSelector = {\n type: 'Selector';\n mode: 'raw';\n raw: string; // backticked Playwright selector, without the backticks\n};\n\ntype DateSelector = {\n type: 'Selector';\n mode: 'date';\n name: string;\n};\n\ntype Selector = RoleSelector | TagSelector | RawSelector | DateSelector;\n\ntype Predicate = { type: 'HasDescendant'; selector: Selector };\n\ntype WithExpr = {\n type: 'With';\n selector: Selector;\n include: Predicate[]; // from `with <selector>`\n exclude: Predicate[]; // from `without <selector>`\n};\n\ntype Expr = {\n type: 'Within';\n base: WithExpr;\n ancestors: Selector[]; // outermost → innermost containers from chained `within`\n};\n\n// ---------- Escapers: same semantics as your snippet ----------\nfunction escapeRegexForSelector(re: RegExp): string {\n // keep unicode flags as-is; otherwise escape quotes and >> combinators\n // @ts-ignore - .unicodeSets may exist on some runtimes\n if (re.unicode || (re as any).unicodeSets) return String(re);\n return String(re)\n .replace(/(^|[^\\\\])(\\\\\\\\)*([\"'`])/g, '$1$2\\\\$3')\n .replace(/>>/g, '\\\\>\\\\>');\n}\n\nfunction escapeForTextSelector(text: string | RegExp, exact = false): string {\n if (typeof text !== 'string') return escapeRegexForSelector(text);\n return `${JSON.stringify(text)}${exact ? 's' : 'i'}`;\n}\n\nfunction escapeForAttributeSelector(value: string | RegExp, exact = false): string {\n if (typeof value !== 'string') return escapeRegexForSelector(value);\n return `\"${value.trim().replace(/\\\\/g, '\\\\\\\\').replace(/[\"]/g, '\\\\\"')}\"${exact ? 's' : 'i'}`;\n}\n\n// ---------- Builders for internal engines ----------\nfunction getByAttributeTextSelector(attrName: string, text: string | RegExp, props = ''): string {\n return `[${attrName}=${escapeForAttributeSelector(text)}]` + (props ? ` ${props}` : '');\n}\n\nfunction getByAltTextSelector(text: string | RegExp, props = ''): string {\n return getByAttributeTextSelector('alt', text, props);\n}\n\nfunction getByFieldSelector(text: string | RegExp, props = ''): string {\n const q = escapeForTextSelector(text);\n return `field=${q}${props ? ` ${props}` : ''}`;\n}\n\nfunction getByTextSelector(text: string | RegExp, props = ''): string {\n return 'text=' + escapeForTextSelector(text) + (props ? ` ${props}` : '');\n}\n\nfunction getByDateSelector(text: string, props = ''): string {\n return 'date=' + text.trim() + (props ? ` ${props}` : '');\n}\n\nfunction getByRoleSelector(role: string, name: string | RegExp = '', props = ''): string {\n return `role=${role}` + (name ? ` [name=${escapeForAttributeSelector(name)}]` : '') + (props ? ` ${props}` : '');\n}\n\n// ---------- Core compile helpers ----------\n/**\n * Compile a base selector (no predicates, no ancestors).\n */\nfunction compileBaseSelector(sel: Selector): string {\n switch (sel.mode) {\n case 'raw':\n return sel.raw;\n case 'tag':\n return sel.tag;\n case 'date':\n return getByDateSelector(sel.name);\n case 'role': {\n const r = sel.role.toLowerCase();\n if (r === 'field') {\n if (!sel.name) throw new Error('`field` requires a label string: field \"Name\"');\n return getByFieldSelector(sel.name);\n }\n if (r === 'image') {\n if (!sel.name) throw new Error('`image` requires an alt string: image \"Logo\"');\n return getByAltTextSelector(sel.name);\n }\n if (r === 'text') {\n if (!sel.name) throw new Error('`text` requires a string: text \"Hello\"');\n return getByTextSelector(sel.name);\n }\n // Generic ARIA role\n return getByRoleSelector(r, sel.name ?? '');\n }\n }\n}\n\n/**\n * Compile a predicate into ` >> has=...` or ` >> has-not=...`.\n * We always use the general `has` flavor and stringify the *inner* selector chain,\n * which matches the constructor pattern you showed.\n */\nfunction compilePredicates(include: Predicate[], exclude: Predicate[]): string {\n const parts: string[] = [];\n\n for (const p of include) {\n const inner = compileBaseSelector(p.selector);\n parts.push(`>> has=\"${inner}\"`);\n }\n for (const p of exclude) {\n const inner = compileBaseSelector(p.selector);\n parts.push(`>> has-not=\"${inner}\"`);\n }\n return parts.length ? ' ' + parts.join(' ') : '';\n}\n\n/**\n * Join a chain with Playwright’s engine combinator.\n */\nfunction joinChain(parts: string[]): string {\n return parts.filter(Boolean).join(' >> ');\n}\n\n/**\n * Public API: compile a DSL locator string into a Playwright selector string.\n */\nexport function compileLocator(input: string): string {\n const ast = parse(input) as Expr;\n\n // 1) compile ancestor containers (outer → inner)\n const chain: string[] = ast.ancestors.map(compileBaseSelector);\n\n // 2) compile base\n const base = compileBaseSelector(ast.base.selector);\n\n // 3) add predicates to the *base* (they apply to the current rightmost selector)\n const pred = compilePredicates(ast.base.include, ast.base.exclude);\n\n // 4) build final chain\n let selector = joinChain([...chain, base]);\n if (pred) selector += ' ' + pred.trim();\n\n return selector;\n}\n","const SELECTOR = /(?:the )?\\w+(?: \"[^\"]*\")?|`([^`]+|\\\\.)*`/;\nexport const locatorRegexp = new RegExp(String.raw`((?:${SELECTOR.source})(?: with(?:in|out)? (?:${SELECTOR.source}))*)`);\n","import { parseDateString, type Scalar } from '@letsrunit/utils';\n\nexport const scalarRegexp =\n /\"((?:[^\"\\\\]+|\\\\.)*)\"|(-?\\d+(?:\\.\\d+)?)|date (?:of )?((?:today|tomorrow|yesterday|\\d+ \\w+ (?:ago|from now))(?: (?:at )?\\d\\d?:\\d\\d?(?::\\d\\d?)?)?|\"\\d{4}-\\d{2}-\\d{2}(?:T\\d{2}:\\d{2}(?::\\d{2})?(?:.\\d{3})?Z?)?\")/;\nexport const arrayRegexp = new RegExp(String.raw`\\[(.*?)\\]`);\n\nfunction transformScalar(str?: string, num?: string, date?: string): Scalar {\n if (str != null) return str;\n if (num != null) return Number(num);\n if (date) return parseDateString(date);\n\n throw new Error('Unexpected value');\n}\n\nexport const valueTransformer = (\n str?: string,\n num?: string,\n date?: string,\n arr?: string,\n): Scalar | Scalar[] => {\n return arr\n ? Array.from(arr.matchAll(new RegExp(scalarRegexp, 'g')), (m) => transformScalar(m[1], m[2], m[3]))\n : transformScalar(str, num, date);\n};\n","import type { Scalar } from '@letsrunit/utils';\nimport { KeyCombo, parseKeyCombo } from './keys/parse-key-combo';\nimport { compileLocator, locatorRegexp } from './locator';\nimport { arrayRegexp, scalarRegexp, valueTransformer } from './value';\n\nexport interface ParameterTypeDefinition<T> {\n name: string;\n placeholder: string;\n regexp: readonly RegExp[] | readonly string[] | RegExp | string;\n transformer?: (...match: string[]) => T;\n useForSnippets?: boolean;\n preferForRegexpMatch?: boolean;\n}\n\nfunction enumToRegexp(values: readonly string[]) {\n const satinized = values.map((v) => v.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'));\n return new RegExp(`(${satinized.join('|')})`);\n}\n\nexport function booleanParameter(\n trueValue: string,\n falseValue: string,\n regexp?: RegExp,\n): ParameterTypeDefinition<boolean> {\n return {\n name: trueValue.replace(/\\W/, '_'),\n placeholder: `${trueValue}|${falseValue}`,\n regexp: regexp ?? enumToRegexp([trueValue, falseValue]),\n transformer: (value: string): boolean => value === trueValue,\n };\n}\n\nexport function enumParameter<const T extends readonly string[]>(\n values: T,\n regexp?: RegExp,\n): ParameterTypeDefinition<T[number]> {\n return {\n name: values[0].replace(/\\W/, '_'),\n placeholder: values.join('|'),\n regexp: regexp ?? enumToRegexp(values),\n transformer: (value: string): string => value,\n };\n}\n\nexport function valueParameter(name = 'value'): ParameterTypeDefinition<Scalar | Scalar[]> {\n return {\n name,\n placeholder: name,\n regexp: [scalarRegexp, arrayRegexp],\n transformer: valueTransformer,\n };\n}\n\nexport function locatorParameter(name = 'locator'): ParameterTypeDefinition<string> {\n return {\n name,\n placeholder: name,\n regexp: locatorRegexp,\n transformer: (locator: string) => {\n try {\n return compileLocator(locator);\n } catch (e) {\n console.error(e);\n return locator;\n }\n },\n };\n}\n\nexport function keysParameter(name = 'keys'): ParameterTypeDefinition<KeyCombo> {\n return {\n name,\n placeholder: name,\n regexp: /\"([^\"]+)\"|'([^']+)'/,\n transformer: (doubleQuoted?: string, singleQuoted?: string): KeyCombo => {\n const raw = (doubleQuoted ?? singleQuoted ?? '').trim();\n return parseKeyCombo(raw);\n },\n };\n}\n","import { generateMessages } from '@cucumber/gherkin';\nimport { IdGenerator, SourceMediaType } from '@cucumber/messages';\n\nconst newId = IdGenerator.uuid();\n\nexport interface Feature {\n name?: string;\n description?: string;\n comments?: string;\n background?: string[];\n steps: string[];\n}\n\nexport function makeFeature({ name, description, comments, background, steps }: Feature): string {\n const lines = [`Feature: ${name ?? ''}`.trim(), ''];\n\n if (description) {\n lines.push(\n ...description.split('\\n').map((s) => ` ${s.trim()}`),\n '',\n );\n }\n\n if (background && background.length > 0) {\n lines.push(\n ' Background:',\n ...background.map((s) => ` ${s}`),\n '',\n );\n }\n\n lines.push(\n ' Scenario:',\n ...steps.map((s) => ` ${s}`),\n );\n\n if (comments) {\n lines.push(\n '',\n ...comments.split('\\n').map((s) => ` # ${s.trim()}`),\n );\n }\n\n return lines.join('\\n') + '\\n';\n}\n\n// Wrap steps in a minimal feature/scenario so the parser accepts it\nfunction wrapIfNeeded(input: string): string {\n if (/^\\s*Feature:/im.test(input)) return input;\n\n const lines = input.split('\\n');\n const scenario = lines[0].trim().startsWith('Scenario:') ? lines.shift()!.trim() : 'Scenario:';\n\n const indented = lines.map((l) => (l.trim() ? ' ' + l : l));\n\n return ['Feature:', ` ${scenario}`, ...indented].join('\\n');\n}\n\nexport function parseFeature(input: string): Feature {\n const source = wrapIfNeeded(input);\n\n const envelopes = generateMessages(source, 'inline.feature', SourceMediaType.TEXT_X_CUCUMBER_GHERKIN_PLAIN, {\n newId: () => newId(),\n includeGherkinDocument: true,\n includePickles: false,\n includeSource: false,\n });\n\n const gherkinDoc = envelopes.find((e) => e.gherkinDocument)?.gherkinDocument;\n const feature = gherkinDoc?.feature;\n\n const comments =\n (gherkinDoc?.comments ?? [])\n .map((c) => (c.text ?? '').trim())\n .filter(Boolean)\n .join('\\n') || undefined;\n\n if (!feature) return { name: '', description: '', steps: [], comments };\n\n // Find the first real Scenario (skip Rules/Backgrounds)\n const firstScenarioChild = feature.children?.find((c) => c.scenario && !c.scenario?.examples?.length);\n const scenario = firstScenarioChild?.scenario;\n\n if (!scenario) return { name: '', description: feature.description, steps: [], comments };\n\n let currentKeyword = 'Given';\n\n const steps = (scenario.steps ?? []).map((s) => {\n let keyword = (s.keyword || '').trim();\n if (keyword.toLowerCase() === 'and' || keyword === '*') {\n keyword = currentKeyword;\n } else {\n currentKeyword = keyword;\n }\n\n const text = s.text?.trim() || '';\n let result = `${keyword} ${text}`.trim();\n\n if (s.docString?.content) {\n result += `\\n\"\"\"\\n${s.docString.content.trim()}\\n\"\"\"`;\n }\n\n if (s.dataTable?.rows?.length) {\n const table = s.dataTable.rows\n .map((r) => `| ${r.cells.map((c) => c.value.trim()).join(' | ')} |`)\n .join('\\n');\n result += `\\n${table}`;\n }\n\n return result;\n });\n\n return { name: feature.name, description: feature.description, steps, comments };\n}\n\nexport function deltaSteps(steps: string[], newSteps: string[]): string[] {\n let overlap = 0;\n\n for (let i = Math.min(steps.length, newSteps.length); i > 0; i--) {\n if (steps.slice(-i).join('\\n') === newSteps.slice(0, i).join('\\n')) {\n overlap = i;\n break;\n }\n }\n\n return newSteps.slice(overlap);\n}\n","export function sanitizeStepDefinition<T extends string | RegExp>(step: T): T {\n if (typeof step !== 'string') {\n return step;\n }\n\n return step.replace(/\\{([^|}]+)\\|[^}]+}/g, '{$1}') as any;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/keys/parse-key-combo.ts","../src/locator/parser.js","../src/locator/compile.ts","../src/locator/regexp.ts","../src/value.ts","../src/parameters.ts","../src/feature.ts","../src/sanitize.ts"],"names":["s","expected","found","text","offset","location"],"mappings":"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","file":"index.js","sourcesContent":["export type Modifier = 'Control' | 'Shift' | 'Alt' | 'Meta';\nexport type Key =\n | Modifier\n | 'Enter' | 'Escape' | 'Tab' | 'Backspace' | 'Delete'\n | 'Space' | 'ArrowUp' | 'ArrowDown' | 'ArrowLeft' | 'ArrowRight'\n | 'PageUp' | 'PageDown' | 'Home' | 'End'\n | `F${1|2|3|4|5|6|7|8|9|10|11|12}`;\n\nexport type KeyCombo = {\n /** Modifiers pressed and held before the final key. */\n modifiers: Modifier[];\n /** The final key to press (e.g. 'Enter', 'S', 'ArrowUp', 'F5', etc.). */\n key: Key | string; // string allows plain characters like \"A\", \"s\", \";\" etc.\n};\n\n// Normalization map (case-insensitive keys)\nconst SYNONYMS: Record<string, Key | Modifier> = {\n // modifiers\n 'ctrl': 'Control', 'control': 'Control',\n 'cmd': 'Meta', 'command': 'Meta', 'meta': 'Meta',\n 'opt': 'Alt', 'option': 'Alt', 'alt': 'Alt',\n 'shift': 'Shift',\n\n // common keys\n 'enter': 'Enter', 'return': 'Enter',\n 'esc': 'Escape', 'escape': 'Escape',\n 'tab': 'Tab',\n 'backspace': 'Backspace',\n 'del': 'Delete', 'delete': 'Delete',\n 'space': 'Space',\n 'home': 'Home', 'end': 'End',\n 'pageup': 'PageUp', 'page up': 'PageUp',\n 'pagedown': 'PageDown', 'page down': 'PageDown',\n\n // arrows\n 'arrowup': 'ArrowUp', 'arrow up': 'ArrowUp', 'up': 'ArrowUp',\n 'arrowdown': 'ArrowDown', 'arrow down': 'ArrowDown', 'down': 'ArrowDown',\n 'arrowleft': 'ArrowLeft', 'arrow left': 'ArrowLeft', 'left': 'ArrowLeft',\n 'arrowright': 'ArrowRight', 'arrow right': 'ArrowRight', 'right': 'ArrowRight',\n};\n\nfunction normalizeToken(raw: string): Key | string {\n const t = raw.trim().toLowerCase();\n\n // F-keys: f1..f12\n const fMatch = /^f([1-9]|1[0-2])$/.exec(t);\n if (fMatch) return `F${fMatch[1]}` as Key;\n\n // Letter/char keys like \"A\", \"s\", \";\", \"0\"\n // Keep as-is but upper-case single letters to look nicer in logs.\n if (!(t in SYNONYMS)) {\n if (t.length === 1) return raw.trim().length === 1 ? raw.trim().toUpperCase() : raw.trim();\n return raw.trim();\n }\n\n return SYNONYMS[t];\n}\n\nconst isModifier = (k: Key | string): k is Modifier =>\n k === 'Control' || k === 'Shift' || k === 'Alt' || k === 'Meta';\n\nexport function parseKeyCombo(text: string): KeyCombo {\n // Allow things like: Ctrl+S, Ctrl + S, \"Ctrl + Alt + Delete\"\n const parts = text.split('+').map(p => p.trim()).filter(Boolean);\n if (parts.length === 0) throw new Error(`Invalid key combo: \"${text}\"`);\n\n const tokens = parts.map(normalizeToken);\n\n const modifiers: Modifier[] = [];\n let key: Key | string | undefined;\n\n for (let i = 0; i < tokens.length; i++) {\n const tok = tokens[i];\n const isLast = i === tokens.length - 1;\n\n if (!isLast && isModifier(tok)) {\n modifiers.push(tok);\n } else if (isLast) {\n // The final token is the \"key\" (can be modifier or normal key)\n key = tok;\n } else {\n // Non-last, non-modifier token encountered (e.g., \"Ctrl + ArrowUp + Enter\" is fine,\n // but if a non-modifier appears before the last, we still allow it only if the last is present).\n // We treat everything before the last as modifiers-only; if tok isn't a modifier, error out:\n if (!isModifier(tok)) {\n throw new Error(`Only modifiers may precede the final key: \"${text}\"`);\n }\n modifiers.push(tok);\n }\n }\n\n if (!key) throw new Error(`Missing final key in combo: \"${text}\"`);\n return { modifiers, key };\n}\n","// @generated by Peggy 5.0.6.\n//\n// https://peggyjs.org/\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 Start: peg$parseStart,\n };\n let peg$startRuleFunction = peg$parseStart;\n\n const peg$c0 = \"within\";\n const peg$c1 = \"with\";\n const peg$c2 = \"without\";\n const peg$c3 = \"`\";\n const peg$c4 = \"date\";\n const peg$c5 = \"of\";\n const peg$c6 = \"button\";\n const peg$c7 = \"link\";\n const peg$c8 = \"field\";\n const peg$c9 = \"image\";\n const peg$c10 = \"text\";\n const peg$c11 = \"the\";\n const peg$c12 = \"\\\"\";\n const peg$c13 = \"\\\\\\\"\";\n\n const peg$r0 = /^[a-zA-Z]/;\n const peg$r1 = /^[^`]/;\n const peg$r2 = /^[a-zA-Z_]/;\n const peg$r3 = /^[a-zA-Z0-9_\\-]/;\n const peg$r4 = /^[ \\t\\r\\n]/;\n\n const peg$e0 = peg$literalExpectation(\"within\", true);\n const peg$e1 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"]], false, false, false);\n const peg$e2 = peg$literalExpectation(\"with\", true);\n const peg$e3 = peg$literalExpectation(\"without\", true);\n const peg$e4 = peg$literalExpectation(\"`\", false);\n const peg$e5 = peg$classExpectation([\"`\"], true, false, false);\n const peg$e6 = peg$literalExpectation(\"date\", true);\n const peg$e7 = peg$literalExpectation(\"of\", true);\n const peg$e8 = peg$anyExpectation();\n const peg$e9 = peg$literalExpectation(\"button\", true);\n const peg$e10 = peg$literalExpectation(\"link\", true);\n const peg$e11 = peg$literalExpectation(\"field\", true);\n const peg$e12 = peg$literalExpectation(\"image\", true);\n const peg$e13 = peg$literalExpectation(\"text\", true);\n const peg$e14 = peg$literalExpectation(\"the\", true);\n const peg$e15 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"], \"_\"], false, false, false);\n const peg$e16 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"], [\"0\", \"9\"], \"_\", \"-\"], false, false, false);\n const peg$e17 = peg$literalExpectation(\"\\\"\", false);\n const peg$e18 = peg$literalExpectation(\"\\\\\\\"\", false);\n const peg$e19 = peg$classExpectation([\" \", \"\\t\", \"\\r\", \"\\n\"], false, false, false);\n\n function peg$f0(e) { return e; }\n function peg$f1(base, s) { return s; }\n function peg$f2(base, rest) { return { type: \"Within\", base, ancestors: rest ?? [] }; }\n function peg$f3(sel, wp) { return wp; }\n function peg$f4(sel, parts) {\n const include = [], exclude = [];\n for (const x of parts) {\n (x.incl ? include : exclude).push(x.p);\n }\n return { type: \"With\", selector: sel, include, exclude };\n }\n function peg$f5(p) { return { incl: true, p }; }\n function peg$f6(p) { return { incl: false, p }; }\n function peg$f7(s) { return { type: \"Selector\", mode: \"raw\", raw: s.trim() }; }\n function peg$f8(base) { return { type: \"Selector\", mode: \"role\", role: base.role, name: base.name }; }\n function peg$f9(n) { return { type: \"Selector\", mode: \"date\", name: n }; }\n function peg$f10(s) { return `\"${s}\"`; }\n function peg$f11(r, n) { return { role: r, name: n ?? null }; }\n function peg$f12(r, n) { return { role: r, name: n }; }\n function peg$f13(t) { return { type: \"Selector\", mode: \"tag\", tag: t }; }\n function peg$f14(sel) { return { type: \"HasDescendant\", selector: sel }; }\n function peg$f15(chars) { return chars; }\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$parseStart() {\n let s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = peg$parse_();\n s2 = peg$parseExpr();\n if (s2 !== peg$FAILED) {\n s3 = peg$parse_();\n peg$savedPos = s0;\n s0 = peg$f0(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseExpr() {\n let s0, s1, s2, s3, s4, s5, s6, s7, s8;\n\n s0 = peg$currPos;\n s1 = peg$parseWithExpr();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n s5 = input.substr(peg$currPos, 6);\n if (s5.toLowerCase() === peg$c0) {\n peg$currPos += (6);\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = input.charAt(peg$currPos);\n if (peg$r0.test(s7)) {\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n peg$silentFails--;\n if (s7 === peg$FAILED) {\n s6 = undefined;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n s7 = peg$parse_();\n s8 = peg$parseSelector();\n if (s8 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f1(s1, s8);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n s5 = input.substr(peg$currPos, 6);\n if (s5.toLowerCase() === peg$c0) {\n peg$currPos += (6);\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = input.charAt(peg$currPos);\n if (peg$r0.test(s7)) {\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n peg$silentFails--;\n if (s7 === peg$FAILED) {\n s6 = undefined;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n s7 = peg$parse_();\n s8 = peg$parseSelector();\n if (s8 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f1(s1, s8);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n peg$savedPos = s0;\n s0 = peg$f2(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseWithExpr() {\n let s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n s1 = peg$parseSelector();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n s5 = peg$parseWithPart();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f3(s1, 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$parseWithPart();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f3(s1, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n peg$savedPos = s0;\n s0 = peg$f4(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseWithPart() {\n let s0, s1, s2, s3, s4;\n\n s0 = peg$currPos;\n s1 = input.substr(peg$currPos, 4);\n if (s1.toLowerCase() === peg$c1) {\n peg$currPos += (4);\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n peg$silentFails++;\n s3 = input.charAt(peg$currPos);\n if (peg$r0.test(s3)) {\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\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$parse_();\n s4 = peg$parsePredicate();\n if (s4 !== peg$FAILED) {\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 } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = input.substr(peg$currPos, 7);\n if (s1.toLowerCase() === peg$c2) {\n peg$currPos += (7);\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n peg$silentFails++;\n s3 = input.charAt(peg$currPos);\n if (peg$r0.test(s3)) {\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\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$parse_();\n s4 = peg$parsePredicate();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f6(s4);\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$parseSelector() {\n let s0;\n\n s0 = peg$parseRawSel();\n if (s0 === peg$FAILED) {\n s0 = peg$parseDateSel();\n if (s0 === peg$FAILED) {\n s0 = peg$parseRoleSelFull();\n if (s0 === peg$FAILED) {\n s0 = peg$parseTagSelFull();\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseRawSel() {\n let s0, s1, s2, s3;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 96) {\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$parseRawChars();\n if (input.charCodeAt(peg$currPos) === 96) {\n s3 = peg$c3;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e4); }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f7(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$parseRawChars() {\n let s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = input.charAt(peg$currPos);\n if (peg$r1.test(s2)) {\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e5); }\n }\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = input.charAt(peg$currPos);\n if (peg$r1.test(s2)) {\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e5); }\n }\n }\n s0 = input.substring(s0, peg$currPos);\n\n return s0;\n }\n\n function peg$parseRoleSelFull() {\n let s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = peg$parseTheOpt();\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n s2 = peg$parseRoleSel();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f8(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseDateSel() {\n let s0, s1, s2, s3, s4;\n\n s0 = peg$currPos;\n s1 = input.substr(peg$currPos, 4);\n if (s1.toLowerCase() === peg$c4) {\n peg$currPos += (4);\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$parseOfOpt();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = peg$parseDateValue();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f9(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 return s0;\n }\n\n function peg$parseOfOpt() {\n let s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = input.substr(peg$currPos, 2);\n if (s1.toLowerCase() === peg$c5) {\n peg$currPos += (2);\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e7); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n peg$silentFails++;\n s3 = input.charAt(peg$currPos);\n if (peg$r0.test(s3)) {\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\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$parse_();\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$parseDateValue() {\n let s0, s1, s2, s3, s4, s5, s6, s7, s8;\n\n s0 = peg$currPos;\n s1 = peg$parseStringLit();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f10(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$currPos;\n s3 = peg$currPos;\n peg$silentFails++;\n s4 = peg$currPos;\n s5 = peg$parse_();\n s6 = input.substr(peg$currPos, 6);\n if (s6.toLowerCase() === peg$c0) {\n peg$currPos += (6);\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s6 !== peg$FAILED) {\n s7 = peg$currPos;\n peg$silentFails++;\n s8 = input.charAt(peg$currPos);\n if (peg$r0.test(s8)) {\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n peg$silentFails--;\n if (s8 === peg$FAILED) {\n s7 = undefined;\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n if (s7 !== peg$FAILED) {\n s5 = [s5, s6, s7];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n peg$silentFails--;\n if (s4 === peg$FAILED) {\n s3 = undefined;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e8); }\n }\n if (s4 !== peg$FAILED) {\n s3 = [s3, s4];\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 if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$currPos;\n s3 = peg$currPos;\n peg$silentFails++;\n s4 = peg$currPos;\n s5 = peg$parse_();\n s6 = input.substr(peg$currPos, 6);\n if (s6.toLowerCase() === peg$c0) {\n peg$currPos += (6);\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s6 !== peg$FAILED) {\n s7 = peg$currPos;\n peg$silentFails++;\n s8 = input.charAt(peg$currPos);\n if (peg$r0.test(s8)) {\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n peg$silentFails--;\n if (s8 === peg$FAILED) {\n s7 = undefined;\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n if (s7 !== peg$FAILED) {\n s5 = [s5, s6, s7];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n peg$silentFails--;\n if (s4 === peg$FAILED) {\n s3 = undefined;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e8); }\n }\n if (s4 !== peg$FAILED) {\n s3 = [s3, s4];\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 } 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\n return s0;\n }\n\n function peg$parseRoleSel() {\n let s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = peg$parseKnownRole();\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n s3 = peg$parseStringLit();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f11(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseIdent();\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n s3 = peg$parseStringLit();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f12(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\n return s0;\n }\n\n function peg$parseKnownRole() {\n let s0;\n\n s0 = input.substr(peg$currPos, 6);\n if (s0.toLowerCase() === peg$c6) {\n peg$currPos += (6);\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e9); }\n }\n if (s0 === peg$FAILED) {\n s0 = input.substr(peg$currPos, 4);\n if (s0.toLowerCase() === peg$c7) {\n peg$currPos += (4);\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e10); }\n }\n if (s0 === peg$FAILED) {\n s0 = input.substr(peg$currPos, 5);\n if (s0.toLowerCase() === peg$c8) {\n peg$currPos += (5);\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e11); }\n }\n if (s0 === peg$FAILED) {\n s0 = input.substr(peg$currPos, 5);\n if (s0.toLowerCase() === peg$c9) {\n peg$currPos += (5);\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e12); }\n }\n if (s0 === peg$FAILED) {\n s0 = input.substr(peg$currPos, 4);\n if (s0.toLowerCase() === peg$c10) {\n peg$currPos += (4);\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e13); }\n }\n if (s0 === peg$FAILED) {\n s0 = input.substr(peg$currPos, 4);\n if (s0.toLowerCase() === peg$c4) {\n peg$currPos += (4);\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e6); }\n }\n }\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseTagSelFull() {\n let s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = peg$parseTheOpt();\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n s2 = peg$parseIdent();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f13(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsePredicate() {\n let s0, s1;\n\n s0 = peg$currPos;\n s1 = peg$parseSelector();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f14(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseTheOpt() {\n let s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = input.substr(peg$currPos, 3);\n if (s1.toLowerCase() === peg$c11) {\n peg$currPos += (3);\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e14); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n peg$silentFails++;\n s3 = input.charAt(peg$currPos);\n if (peg$r0.test(s3)) {\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\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$parse_();\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$parseIdent() {\n let s0, s1, s2, s3, s4;\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = input.charAt(peg$currPos);\n if (peg$r2.test(s2)) {\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e15); }\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = input.charAt(peg$currPos);\n if (peg$r3.test(s4)) {\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e16); }\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = input.charAt(peg$currPos);\n if (peg$r3.test(s4)) {\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e16); }\n }\n }\n s2 = [s2, s3];\n s1 = s2;\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$parseStringLit() {\n let s0, s1, s2, s3, s4, s5, s6;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 34) {\n s1 = peg$c12;\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$currPos;\n s3 = [];\n if (input.substr(peg$currPos, 2) === peg$c13) {\n s4 = peg$c13;\n peg$currPos += 2;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e18); }\n }\n if (s4 === peg$FAILED) {\n s4 = peg$currPos;\n s5 = peg$currPos;\n peg$silentFails++;\n if (input.charCodeAt(peg$currPos) === 34) {\n s6 = peg$c12;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e17); }\n }\n peg$silentFails--;\n if (s6 === peg$FAILED) {\n s5 = undefined;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e8); }\n }\n if (s6 !== peg$FAILED) {\n s5 = [s5, s6];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n if (input.substr(peg$currPos, 2) === peg$c13) {\n s4 = peg$c13;\n peg$currPos += 2;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e18); }\n }\n if (s4 === peg$FAILED) {\n s4 = peg$currPos;\n s5 = peg$currPos;\n peg$silentFails++;\n if (input.charCodeAt(peg$currPos) === 34) {\n s6 = peg$c12;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e17); }\n }\n peg$silentFails--;\n if (s6 === peg$FAILED) {\n s5 = undefined;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e8); }\n }\n if (s6 !== peg$FAILED) {\n s5 = [s5, s6];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n }\n s2 = input.substring(s2, peg$currPos);\n if (input.charCodeAt(peg$currPos) === 34) {\n s3 = peg$c12;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e17); }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f15(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$parse_() {\n let s0, s1;\n\n s0 = [];\n s1 = input.charAt(peg$currPos);\n if (peg$r4.test(s1)) {\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e19); }\n }\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n s1 = input.charAt(peg$currPos);\n if (peg$r4.test(s1)) {\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e19); }\n }\n }\n\n return s0;\n }\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\nconst peg$allowedStartRules = [\n \"Start\"\n];\n\nexport {\n peg$allowedStartRules as StartRules,\n peg$SyntaxError as SyntaxError,\n peg$parse as parse\n};\n","// @ts-ignore\nimport { parse } from './parser'; // generated by peggy from parser.peggy\n\n// ---------- AST Types (mirror the grammar; keep minimal) ----------\n\ntype RoleSelector = {\n type: 'Selector';\n mode: 'role';\n role: string; // any ARIA role, or the specials: field | image | text\n name: string | null; // the quoted name after role\n};\n\ntype TagSelector = {\n type: 'Selector';\n mode: 'tag';\n tag: string; // e.g., section, form, button\n};\n\ntype RawSelector = {\n type: 'Selector';\n mode: 'raw';\n raw: string; // backticked Playwright selector, without the backticks\n};\n\ntype DateSelector = {\n type: 'Selector';\n mode: 'date';\n name: string;\n};\n\ntype Selector = RoleSelector | TagSelector | RawSelector | DateSelector;\n\ntype Predicate = { type: 'HasDescendant'; selector: Selector };\n\ntype WithExpr = {\n type: 'With';\n selector: Selector;\n include: Predicate[]; // from `with <selector>`\n exclude: Predicate[]; // from `without <selector>`\n};\n\ntype Expr = {\n type: 'Within';\n base: WithExpr;\n ancestors: Selector[]; // outermost → innermost containers from chained `within`\n};\n\n// ---------- Escapers: same semantics as your snippet ----------\nfunction escapeRegexForSelector(re: RegExp): string {\n // keep unicode flags as-is; otherwise escape quotes and >> combinators\n // @ts-ignore - .unicodeSets may exist on some runtimes\n if (re.unicode || (re as any).unicodeSets) return String(re);\n return String(re)\n .replace(/(^|[^\\\\])(\\\\\\\\)*([\"'`])/g, '$1$2\\\\$3')\n .replace(/>>/g, '\\\\>\\\\>');\n}\n\nfunction escapeForTextSelector(text: string | RegExp, exact = false): string {\n if (typeof text !== 'string') return escapeRegexForSelector(text);\n return `${JSON.stringify(text)}${exact ? 's' : 'i'}`;\n}\n\nfunction escapeForAttributeSelector(value: string | RegExp, exact = false): string {\n if (typeof value !== 'string') return escapeRegexForSelector(value);\n return `\"${value.trim().replace(/\\\\/g, '\\\\\\\\').replace(/[\"]/g, '\\\\\"')}\"${exact ? 's' : 'i'}`;\n}\n\n// ---------- Builders for internal engines ----------\nfunction getByAttributeTextSelector(attrName: string, text: string | RegExp, props = ''): string {\n return `[${attrName}=${escapeForAttributeSelector(text)}]` + (props ? ` ${props}` : '');\n}\n\nfunction getByAltTextSelector(text: string | RegExp, props = ''): string {\n return getByAttributeTextSelector('alt', text, props);\n}\n\nfunction getByFieldSelector(text: string | RegExp, props = ''): string {\n const q = escapeForTextSelector(text);\n return `field=${q}${props ? ` ${props}` : ''}`;\n}\n\nfunction getByTextSelector(text: string | RegExp, props = ''): string {\n if (typeof text === 'string') {\n // Produce a regex selector for case-insensitive substring matching.\n // Regex special chars (and the delimiter /) must be escaped.\n const escaped = text.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&').replace(/\\//g, '\\\\/');\n return 'text=/' + escaped + '/i' + (props ? ` ${props}` : '');\n }\n return 'text=' + escapeForTextSelector(text) + (props ? ` ${props}` : '');\n}\n\nfunction getByDateSelector(text: string, props = ''): string {\n return 'date=' + text.trim() + (props ? ` ${props}` : '');\n}\n\nfunction getByRoleSelector(role: string, name: string | RegExp = '', props = ''): string {\n return `role=${role}` + (name ? ` [name=${escapeForAttributeSelector(name)}]` : '') + (props ? ` ${props}` : '');\n}\n\n// ---------- Core compile helpers ----------\n/**\n * Compile a base selector (no predicates, no ancestors).\n */\nfunction compileBaseSelector(sel: Selector): string {\n switch (sel.mode) {\n case 'raw':\n return sel.raw;\n case 'tag':\n return sel.tag;\n case 'date':\n return getByDateSelector(sel.name);\n case 'role': {\n const r = sel.role.toLowerCase();\n if (r === 'field') {\n if (!sel.name) throw new Error('`field` requires a label string: field \"Name\"');\n return getByFieldSelector(sel.name);\n }\n if (r === 'image') {\n if (!sel.name) throw new Error('`image` requires an alt string: image \"Logo\"');\n return getByAltTextSelector(sel.name);\n }\n if (r === 'text') {\n if (!sel.name) throw new Error('`text` requires a string: text \"Hello\"');\n return getByTextSelector(sel.name);\n }\n // Generic ARIA role\n return getByRoleSelector(r, sel.name ?? '');\n }\n }\n}\n\n/**\n * Compile a predicate into ` >> has=...` or ` >> has-not=...`.\n * We always use the general `has` flavor and stringify the *inner* selector chain,\n * which matches the constructor pattern you showed.\n */\nfunction compilePredicates(include: Predicate[], exclude: Predicate[]): string {\n const parts: string[] = [];\n\n for (const p of include) {\n const inner = compileBaseSelector(p.selector);\n parts.push(`>> has=\"${inner}\"`);\n }\n for (const p of exclude) {\n const inner = compileBaseSelector(p.selector);\n parts.push(`>> has-not=\"${inner}\"`);\n }\n return parts.length ? ' ' + parts.join(' ') : '';\n}\n\n/**\n * Join a chain with Playwright’s engine combinator.\n */\nfunction joinChain(parts: string[]): string {\n return parts.filter(Boolean).join(' >> ');\n}\n\n/**\n * Public API: compile a DSL locator string into a Playwright selector string.\n */\nexport function compileLocator(input: string): string {\n const ast = parse(input) as Expr;\n\n // 1) compile ancestor containers (outer → inner)\n const chain: string[] = ast.ancestors.map(compileBaseSelector);\n\n // 2) compile base\n const base = compileBaseSelector(ast.base.selector);\n\n // 3) add predicates to the *base* (they apply to the current rightmost selector)\n const pred = compilePredicates(ast.base.include, ast.base.exclude);\n\n // 4) build final chain\n let selector = joinChain([...chain, base]);\n if (pred) selector += ' ' + pred.trim();\n\n return selector;\n}\n","const SELECTOR = /(?:the )?\\w+(?: \"[^\"]*\")?|`([^`]+|\\\\.)*`/;\nexport const locatorRegexp = new RegExp(String.raw`((?:${SELECTOR.source})(?: with(?:in|out)? (?:${SELECTOR.source}))*)`);\n","import { parseDateString, type Scalar } from '@letsrunit/utils';\n\nexport const scalarRegexp =\n /\"((?:[^\"\\\\]+|\\\\.)*)\"|(-?\\d+(?:\\.\\d+)?)|date (?:of )?((?:today|tomorrow|yesterday|\\d+ \\w+ (?:ago|from now))(?: (?:at )?\\d\\d?:\\d\\d?(?::\\d\\d?)?)?|\"\\d{4}-\\d{2}-\\d{2}(?:T\\d{2}:\\d{2}(?::\\d{2})?(?:.\\d{3})?Z?)?\")/;\nexport const arrayRegexp = new RegExp(String.raw`\\[(.*?)\\]`);\n\nfunction transformScalar(str?: string, num?: string, date?: string): Scalar {\n if (str != null) return str;\n if (num != null) return Number(num);\n if (date) return parseDateString(date);\n\n throw new Error('Unexpected value');\n}\n\nexport const valueTransformer = (\n str?: string,\n num?: string,\n date?: string,\n arr?: string,\n): Scalar | Scalar[] => {\n return arr\n ? Array.from(arr.matchAll(new RegExp(scalarRegexp, 'g')), (m) => transformScalar(m[1], m[2], m[3]))\n : transformScalar(str, num, date);\n};\n","import type { Scalar } from '@letsrunit/utils';\nimport { KeyCombo, parseKeyCombo } from './keys/parse-key-combo';\nimport { compileLocator, locatorRegexp } from './locator';\nimport { arrayRegexp, scalarRegexp, valueTransformer } from './value';\n\nexport interface ParameterTypeDefinition<T> {\n name: string;\n placeholder: string;\n regexp: readonly RegExp[] | readonly string[] | RegExp | string;\n transformer?: (...match: string[]) => T;\n useForSnippets?: boolean;\n preferForRegexpMatch?: boolean;\n}\n\nfunction enumToRegexp(values: readonly string[]) {\n const satinized = values.map((v) => v.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'));\n return new RegExp(`(${satinized.join('|')})`);\n}\n\nexport function booleanParameter(\n trueValue: string,\n falseValue: string,\n regexp?: RegExp,\n): ParameterTypeDefinition<boolean> {\n return {\n name: trueValue.replace(/\\W/, '_'),\n placeholder: `${trueValue}|${falseValue}`,\n regexp: regexp ?? enumToRegexp([trueValue, falseValue]),\n transformer: (value: string): boolean => value === trueValue,\n };\n}\n\nexport function enumParameter<const T extends readonly string[]>(\n values: T,\n regexp?: RegExp,\n): ParameterTypeDefinition<T[number]> {\n return {\n name: values[0].replace(/\\W/, '_'),\n placeholder: values.join('|'),\n regexp: regexp ?? enumToRegexp(values),\n transformer: (value: string): string => value,\n };\n}\n\nexport function valueParameter(name = 'value'): ParameterTypeDefinition<Scalar | Scalar[]> {\n return {\n name,\n placeholder: name,\n regexp: [scalarRegexp, arrayRegexp],\n transformer: valueTransformer,\n };\n}\n\nexport function locatorParameter(name = 'locator'): ParameterTypeDefinition<string> {\n return {\n name,\n placeholder: name,\n regexp: locatorRegexp,\n transformer: (locator: string) => {\n try {\n return compileLocator(locator);\n } catch (e) {\n console.error(e);\n return locator;\n }\n },\n };\n}\n\nexport function keysParameter(name = 'keys'): ParameterTypeDefinition<KeyCombo> {\n return {\n name,\n placeholder: name,\n regexp: /\"([^\"]+)\"|'([^']+)'/,\n transformer: (doubleQuoted?: string, singleQuoted?: string): KeyCombo => {\n const raw = (doubleQuoted ?? singleQuoted ?? '').trim();\n return parseKeyCombo(raw);\n },\n };\n}\n","import { generateMessages } from '@cucumber/gherkin';\nimport { IdGenerator, SourceMediaType } from '@cucumber/messages';\n\nconst newId = IdGenerator.uuid();\n\nexport interface Feature {\n name?: string;\n description?: string;\n comments?: string;\n background?: string[];\n steps: string[];\n}\n\nexport function makeFeature({ name, description, comments, background, steps }: Feature): string {\n const lines = [`Feature: ${name ?? ''}`.trim(), ''];\n\n if (description) {\n lines.push(\n ...description.split('\\n').map((s) => ` ${s.trim()}`),\n '',\n );\n }\n\n if (background && background.length > 0) {\n lines.push(\n ' Background:',\n ...background.map((s) => ` ${s}`),\n '',\n );\n }\n\n lines.push(\n ' Scenario:',\n ...steps.map((s) => ` ${s}`),\n );\n\n if (comments) {\n lines.push(\n '',\n ...comments.split('\\n').map((s) => ` # ${s.trim()}`),\n );\n }\n\n return lines.join('\\n') + '\\n';\n}\n\n// Wrap steps in a minimal feature/scenario so the parser accepts it\nfunction wrapIfNeeded(input: string): string {\n if (/^\\s*Feature:/im.test(input)) return input;\n\n const lines = input.split('\\n');\n const scenario = lines[0].trim().startsWith('Scenario:') ? lines.shift()!.trim() : 'Scenario:';\n\n const indented = lines.map((l) => (l.trim() ? ' ' + l : l));\n\n return ['Feature:', ` ${scenario}`, ...indented].join('\\n');\n}\n\nexport function parseFeature(input: string): Feature {\n const source = wrapIfNeeded(input);\n\n const envelopes = generateMessages(source, 'inline.feature', SourceMediaType.TEXT_X_CUCUMBER_GHERKIN_PLAIN, {\n newId: () => newId(),\n includeGherkinDocument: true,\n includePickles: false,\n includeSource: false,\n });\n\n const gherkinDoc = envelopes.find((e) => e.gherkinDocument)?.gherkinDocument;\n const feature = gherkinDoc?.feature;\n\n const comments =\n (gherkinDoc?.comments ?? [])\n .map((c) => (c.text ?? '').trim())\n .filter(Boolean)\n .join('\\n') || undefined;\n\n if (!feature) return { name: '', description: '', steps: [], comments };\n\n // Find the first real Scenario (skip Rules/Backgrounds)\n const firstScenarioChild = feature.children?.find((c) => c.scenario && !c.scenario?.examples?.length);\n const scenario = firstScenarioChild?.scenario;\n\n if (!scenario) return { name: '', description: feature.description, steps: [], comments };\n\n let currentKeyword = 'Given';\n\n const steps = (scenario.steps ?? []).map((s) => {\n let keyword = (s.keyword || '').trim();\n if (keyword.toLowerCase() === 'and' || keyword === '*') {\n keyword = currentKeyword;\n } else {\n currentKeyword = keyword;\n }\n\n const text = s.text?.trim() || '';\n let result = `${keyword} ${text}`.trim();\n\n if (s.docString?.content) {\n result += `\\n\"\"\"\\n${s.docString.content.trim()}\\n\"\"\"`;\n }\n\n if (s.dataTable?.rows?.length) {\n const table = s.dataTable.rows\n .map((r) => `| ${r.cells.map((c) => c.value.trim()).join(' | ')} |`)\n .join('\\n');\n result += `\\n${table}`;\n }\n\n return result;\n });\n\n return { name: feature.name, description: feature.description, steps, comments };\n}\n\nexport function deltaSteps(steps: string[], newSteps: string[]): string[] {\n let overlap = 0;\n\n for (let i = Math.min(steps.length, newSteps.length); i > 0; i--) {\n if (steps.slice(-i).join('\\n') === newSteps.slice(0, i).join('\\n')) {\n overlap = i;\n break;\n }\n }\n\n return newSteps.slice(overlap);\n}\n","export function sanitizeStepDefinition<T extends string | RegExp>(step: T): T {\n if (typeof step !== 'string') {\n return step;\n }\n\n return step.replace(/\\{([^|}]+)\\|[^}]+}/g, '{$1}') as any;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@letsrunit/gherkin",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.10",
|
|
4
4
|
"description": "Gherkin types and utilities for letsrunit",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"testing",
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
"@cucumber/cucumber-expressions": "^18.1.0",
|
|
49
49
|
"@cucumber/gherkin": "^37.0.1",
|
|
50
50
|
"@cucumber/messages": "^31.2.0",
|
|
51
|
-
"@letsrunit/utils": "0.3.
|
|
51
|
+
"@letsrunit/utils": "0.3.10"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
54
|
"peggy": "^5.0.6",
|
package/src/locator/compile.ts
CHANGED
|
@@ -80,6 +80,12 @@ function getByFieldSelector(text: string | RegExp, props = ''): string {
|
|
|
80
80
|
}
|
|
81
81
|
|
|
82
82
|
function getByTextSelector(text: string | RegExp, props = ''): string {
|
|
83
|
+
if (typeof text === 'string') {
|
|
84
|
+
// Produce a regex selector for case-insensitive substring matching.
|
|
85
|
+
// Regex special chars (and the delimiter /) must be escaped.
|
|
86
|
+
const escaped = text.replace(/[.*+?^${}()|[\]\\]/g, '\\$&').replace(/\//g, '\\/');
|
|
87
|
+
return 'text=/' + escaped + '/i' + (props ? ` ${props}` : '');
|
|
88
|
+
}
|
|
83
89
|
return 'text=' + escapeForTextSelector(text) + (props ? ` ${props}` : '');
|
|
84
90
|
}
|
|
85
91
|
|