@stackwright-pro/openapi 0.3.0-alpha.2 → 0.3.0-alpha.4
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.d.mts +103 -4
- package/dist/index.d.ts +103 -4
- package/dist/index.js +320 -5734
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +323 -5739
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../node_modules/.pnpm/safe-regex@2.1.1/node_modules/safe-regex/lib/analyzer.js","../../../node_modules/.pnpm/regexp-tree@0.1.27/node_modules/regexp-tree/dist/compat-transpiler/transforms/compat-dotall-s-transform.js","../../../node_modules/.pnpm/regexp-tree@0.1.27/node_modules/regexp-tree/dist/compat-transpiler/transforms/compat-named-capturing-groups-transform.js","../../../node_modules/.pnpm/regexp-tree@0.1.27/node_modules/regexp-tree/dist/compat-transpiler/transforms/compat-x-flag-transform.js","../../../node_modules/.pnpm/regexp-tree@0.1.27/node_modules/regexp-tree/dist/compat-transpiler/transforms/index.js","../../../node_modules/.pnpm/regexp-tree@0.1.27/node_modules/regexp-tree/dist/generator/index.js","../../../node_modules/.pnpm/regexp-tree@0.1.27/node_modules/regexp-tree/dist/parser/unicode/parser-unicode-properties.js","../../../node_modules/.pnpm/regexp-tree@0.1.27/node_modules/regexp-tree/dist/parser/generated/regexp-tree.js","../../../node_modules/.pnpm/regexp-tree@0.1.27/node_modules/regexp-tree/dist/parser/index.js","../../../node_modules/.pnpm/regexp-tree@0.1.27/node_modules/regexp-tree/dist/traverse/node-path.js","../../../node_modules/.pnpm/regexp-tree@0.1.27/node_modules/regexp-tree/dist/traverse/index.js","../../../node_modules/.pnpm/regexp-tree@0.1.27/node_modules/regexp-tree/dist/transform/index.js","../../../node_modules/.pnpm/regexp-tree@0.1.27/node_modules/regexp-tree/dist/compat-transpiler/index.js","../../../node_modules/.pnpm/regexp-tree@0.1.27/node_modules/regexp-tree/dist/utils/clone.js","../../../node_modules/.pnpm/regexp-tree@0.1.27/node_modules/regexp-tree/dist/optimizer/transforms/char-surrogate-pair-to-single-unicode-transform.js","../../../node_modules/.pnpm/regexp-tree@0.1.27/node_modules/regexp-tree/dist/optimizer/transforms/char-code-to-simple-char-transform.js","../../../node_modules/.pnpm/regexp-tree@0.1.27/node_modules/regexp-tree/dist/optimizer/transforms/char-case-insensitive-lowercase-transform.js","../../../node_modules/.pnpm/regexp-tree@0.1.27/node_modules/regexp-tree/dist/optimizer/transforms/char-class-remove-duplicates-transform.js","../../../node_modules/.pnpm/regexp-tree@0.1.27/node_modules/regexp-tree/dist/transform/utils.js","../../../node_modules/.pnpm/regexp-tree@0.1.27/node_modules/regexp-tree/dist/optimizer/transforms/quantifiers-merge-transform.js","../../../node_modules/.pnpm/regexp-tree@0.1.27/node_modules/regexp-tree/dist/optimizer/transforms/quantifier-range-to-symbol-transform.js","../../../node_modules/.pnpm/regexp-tree@0.1.27/node_modules/regexp-tree/dist/optimizer/transforms/char-class-classranges-to-chars-transform.js","../../../node_modules/.pnpm/regexp-tree@0.1.27/node_modules/regexp-tree/dist/optimizer/transforms/char-class-to-meta-transform.js","../../../node_modules/.pnpm/regexp-tree@0.1.27/node_modules/regexp-tree/dist/optimizer/transforms/char-class-to-single-char-transform.js","../../../node_modules/.pnpm/regexp-tree@0.1.27/node_modules/regexp-tree/dist/optimizer/transforms/char-escape-unescape-transform.js","../../../node_modules/.pnpm/regexp-tree@0.1.27/node_modules/regexp-tree/dist/optimizer/transforms/char-class-classranges-merge-transform.js","../../../node_modules/.pnpm/regexp-tree@0.1.27/node_modules/regexp-tree/dist/optimizer/transforms/disjunction-remove-duplicates-transform.js","../../../node_modules/.pnpm/regexp-tree@0.1.27/node_modules/regexp-tree/dist/optimizer/transforms/group-single-chars-to-char-class.js","../../../node_modules/.pnpm/regexp-tree@0.1.27/node_modules/regexp-tree/dist/optimizer/transforms/remove-empty-group-transform.js","../../../node_modules/.pnpm/regexp-tree@0.1.27/node_modules/regexp-tree/dist/optimizer/transforms/ungroup-transform.js","../../../node_modules/.pnpm/regexp-tree@0.1.27/node_modules/regexp-tree/dist/optimizer/transforms/combine-repeating-patterns-transform.js","../../../node_modules/.pnpm/regexp-tree@0.1.27/node_modules/regexp-tree/dist/optimizer/transforms/index.js","../../../node_modules/.pnpm/regexp-tree@0.1.27/node_modules/regexp-tree/dist/optimizer/index.js","../../../node_modules/.pnpm/regexp-tree@0.1.27/node_modules/regexp-tree/dist/interpreter/finite-automaton/special-symbols.js","../../../node_modules/.pnpm/regexp-tree@0.1.27/node_modules/regexp-tree/dist/interpreter/finite-automaton/nfa/nfa.js","../../../node_modules/.pnpm/regexp-tree@0.1.27/node_modules/regexp-tree/dist/interpreter/finite-automaton/dfa/dfa-minimizer.js","../../../node_modules/.pnpm/regexp-tree@0.1.27/node_modules/regexp-tree/dist/interpreter/finite-automaton/dfa/dfa.js","../../../node_modules/.pnpm/regexp-tree@0.1.27/node_modules/regexp-tree/dist/interpreter/finite-automaton/state.js","../../../node_modules/.pnpm/regexp-tree@0.1.27/node_modules/regexp-tree/dist/interpreter/finite-automaton/nfa/nfa-state.js","../../../node_modules/.pnpm/regexp-tree@0.1.27/node_modules/regexp-tree/dist/interpreter/finite-automaton/nfa/builders.js","../../../node_modules/.pnpm/regexp-tree@0.1.27/node_modules/regexp-tree/dist/interpreter/finite-automaton/nfa/nfa-from-regexp.js","../../../node_modules/.pnpm/regexp-tree@0.1.27/node_modules/regexp-tree/dist/interpreter/finite-automaton/index.js","../../../node_modules/.pnpm/regexp-tree@0.1.27/node_modules/regexp-tree/dist/compat-transpiler/runtime/index.js","../../../node_modules/.pnpm/regexp-tree@0.1.27/node_modules/regexp-tree/dist/regexp-tree.js","../../../node_modules/.pnpm/regexp-tree@0.1.27/node_modules/regexp-tree/index.js","../../../node_modules/.pnpm/safe-regex@2.1.1/node_modules/safe-regex/lib/heuristic-analyzer.js","../../../node_modules/.pnpm/safe-regex@2.1.1/node_modules/safe-regex/lib/analyzer-family.js","../../../node_modules/.pnpm/safe-regex@2.1.1/node_modules/safe-regex/index.js","../src/parser/OpenAPIParser.ts","../src/parser/SchemaResolver.ts","../src/compiler/ZodSchemaGenerator.ts","../src/compiler/TypeGenerator.ts","../src/compiler/CollectionProviderGenerator.ts","../src/compiler/ClientGenerator.ts","../src/utils/EndpointFilter.ts","../src/utils/ApprovedSpecsValidator.ts","../src/prebuild/OpenAPIPlugin.ts","../src/sources/openapi.ts"],"names":["exports","shouldRun","path","RegExp","yytext","tokenizer","loc","NodePath","TransformResult","expression","require_transforms","transform","NFA","visitState","set","_loop","state","updateAcceptingStates","idx","DFA","states","originalNumber","State","NFAState","RegExpTree","require_regexp_tree","regexpTree","analyzer","isSafe","import_safe_regex","URL","fs","isIP"],"mappings":"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AM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,MAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,OAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,MAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IA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AM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAO,MAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,OAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,MAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,OAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,MAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,OAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,MAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,OAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EA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AA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,OAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,MAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,OAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,MAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,MAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,OAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI,MAAM,EAAA,EAAI,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,OAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KA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","file":"index.mjs","sourcesContent":["// Generic options\nclass AnalyzerOptions {\n constructor(heuristic_replimit) {\n this.heuristic_replimit = heuristic_replimit;\n }\n}\n\nclass AttackString {\n constructor(prefixAndPumpList, suffix) {\n this.prefixAndPumpList = prefixAndPumpList;\n this.suffix = suffix;\n }\n}\n\n// Abstract class\nclass Analyzer {\n constructor(analyzerOptions) {\n this.options = analyzerOptions;\n }\n\n // Subclasser must implement\n // Return boolean\n isVulnerable(regExp) {\n return false;\n }\n\n // Subclass must implement\n // Returns an AttackString or null\n genAttackString(regExp) {\n return null;\n }\n}\n\nmodule.exports = function(re, replimit) {\n // Build an AST\n let myRegExp = null;\n let ast = null;\n try {\n // Construct a RegExp object\n if (re instanceof RegExp) {\n myRegExp = re;\n } else if (typeof re === \"string\") {\n myRegExp = new RegExp(re);\n } else {\n myRegExp = new RegExp(String(re));\n }\n\n // Build an AST\n ast = regexpTree.parse(myRegExp);\n } catch (err) {\n // Invalid or unparseable input\n return false;\n }\n\n let currentStarHeight = 0;\n let maxObservedStarHeight = 0;\n\n let repetitionCount = 0;\n\n regexpTree.traverse(ast, {\n Repetition: {\n pre({ node }) {\n repetitionCount++;\n\n currentStarHeight++;\n if (maxObservedStarHeight < currentStarHeight) {\n maxObservedStarHeight = currentStarHeight;\n }\n },\n\n post({ node }) {\n currentStarHeight--;\n }\n }\n });\n\n return maxObservedStarHeight <= 1 && repetitionCount <= replimit;\n};\n\nmodule.exports = {\n \"AnalyzerOptions\": AnalyzerOptions,\n \"Analyzer\": Analyzer,\n};\n","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\n/**\n * A regexp-tree plugin to translate `/./s` to `/[\\0-\\uFFFF]/`.\n */\n\nmodule.exports = {\n\n // Whether `u` flag present. In which case we transform to\n // \\u{10FFFF} instead of \\uFFFF.\n _hasUFlag: false,\n\n // Only run this plugin if we have `s` flag.\n shouldRun: function shouldRun(ast) {\n var shouldRun = ast.flags.includes('s');\n\n if (!shouldRun) {\n return false;\n }\n\n // Strip the `s` flag.\n ast.flags = ast.flags.replace('s', '');\n\n // Whether we have also `u`.\n this._hasUFlag = ast.flags.includes('u');\n\n return true;\n },\n Char: function Char(path) {\n var node = path.node;\n\n\n if (node.kind !== 'meta' || node.value !== '.') {\n return;\n }\n\n var toValue = '\\\\uFFFF';\n var toSymbol = '\\uFFFF';\n\n if (this._hasUFlag) {\n toValue = '\\\\u{10FFFF}';\n toSymbol = '\\uDBFF\\uDFFF';\n }\n\n path.replace({\n type: 'CharacterClass',\n expressions: [{\n type: 'ClassRange',\n from: {\n type: 'Char',\n value: '\\\\0',\n kind: 'decimal',\n symbol: '\\0'\n },\n to: {\n type: 'Char',\n value: toValue,\n kind: 'unicode',\n symbol: toSymbol\n }\n }]\n });\n }\n};","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\n/**\n * A regexp-tree plugin to translate `/(?<name>a)\\k<name>/` to `/(a)\\1/`.\n */\n\nmodule.exports = {\n // To track the names of the groups, and return them\n // in the transform result state.\n //\n // A map from name to number: {foo: 2, bar: 4}\n _groupNames: {},\n\n /**\n * Initialises the trasnform.\n */\n init: function init() {\n this._groupNames = {};\n },\n\n\n /**\n * Returns extra state, which eventually is returned to\n */\n getExtra: function getExtra() {\n return this._groupNames;\n },\n Group: function Group(path) {\n var node = path.node;\n\n\n if (!node.name) {\n return;\n }\n\n // Record group name.\n this._groupNames[node.name] = node.number;\n\n delete node.name;\n delete node.nameRaw;\n },\n Backreference: function Backreference(path) {\n var node = path.node;\n\n\n if (node.kind !== 'name') {\n return;\n }\n\n node.kind = 'number';\n node.reference = node.number;\n delete node.referenceRaw;\n }\n};","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\n/**\n * A regexp-tree plugin to remove `x` flag `/foo/x` to `/foo/`.\n *\n * Note: other features of `x` flags (whitespace, comments) are\n * already removed at parsing stage.\n */\n\nmodule.exports = {\n RegExp: function RegExp(_ref) {\n var node = _ref.node;\n\n if (node.flags.includes('x')) {\n node.flags = node.flags.replace('x', '');\n }\n }\n};","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\nmodule.exports = {\n // \"dotAll\" `s` flag\n dotAll: require('./compat-dotall-s-transform'),\n\n // Named capturing groups.\n namedCapturingGroups: require('./compat-named-capturing-groups-transform'),\n\n // `x` flag\n xFlag: require('./compat-x-flag-transform')\n};","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\n/**\n * Helper `gen` function calls node type handler.\n */\n\nfunction gen(node) {\n return node ? generator[node.type](node) : '';\n}\n\n/**\n * AST handler.\n */\nvar generator = {\n RegExp: function RegExp(node) {\n return '/' + gen(node.body) + '/' + node.flags;\n },\n Alternative: function Alternative(node) {\n return (node.expressions || []).map(gen).join('');\n },\n Disjunction: function Disjunction(node) {\n return gen(node.left) + '|' + gen(node.right);\n },\n Group: function Group(node) {\n var expression = gen(node.expression);\n\n if (node.capturing) {\n // A named group.\n if (node.name) {\n return '(?<' + (node.nameRaw || node.name) + '>' + expression + ')';\n }\n\n return '(' + expression + ')';\n }\n\n return '(?:' + expression + ')';\n },\n Backreference: function Backreference(node) {\n switch (node.kind) {\n case 'number':\n return '\\\\' + node.reference;\n case 'name':\n return '\\\\k<' + (node.referenceRaw || node.reference) + '>';\n default:\n throw new TypeError('Unknown Backreference kind: ' + node.kind);\n }\n },\n Assertion: function Assertion(node) {\n switch (node.kind) {\n case '^':\n case '$':\n case '\\\\b':\n case '\\\\B':\n return node.kind;\n\n case 'Lookahead':\n {\n var assertion = gen(node.assertion);\n\n if (node.negative) {\n return '(?!' + assertion + ')';\n }\n\n return '(?=' + assertion + ')';\n }\n\n case 'Lookbehind':\n {\n var _assertion = gen(node.assertion);\n\n if (node.negative) {\n return '(?<!' + _assertion + ')';\n }\n\n return '(?<=' + _assertion + ')';\n }\n\n default:\n throw new TypeError('Unknown Assertion kind: ' + node.kind);\n }\n },\n CharacterClass: function CharacterClass(node) {\n var expressions = node.expressions.map(gen).join('');\n\n if (node.negative) {\n return '[^' + expressions + ']';\n }\n\n return '[' + expressions + ']';\n },\n ClassRange: function ClassRange(node) {\n return gen(node.from) + '-' + gen(node.to);\n },\n Repetition: function Repetition(node) {\n return '' + gen(node.expression) + gen(node.quantifier);\n },\n Quantifier: function Quantifier(node) {\n var quantifier = void 0;\n var greedy = node.greedy ? '' : '?';\n\n switch (node.kind) {\n case '+':\n case '?':\n case '*':\n quantifier = node.kind;\n break;\n case 'Range':\n // Exact: {1}\n if (node.from === node.to) {\n quantifier = '{' + node.from + '}';\n }\n // Open: {1,}\n else if (!node.to) {\n quantifier = '{' + node.from + ',}';\n }\n // Closed: {1,3}\n else {\n quantifier = '{' + node.from + ',' + node.to + '}';\n }\n break;\n default:\n throw new TypeError('Unknown Quantifier kind: ' + node.kind);\n }\n\n return '' + quantifier + greedy;\n },\n Char: function Char(node) {\n var value = node.value;\n\n switch (node.kind) {\n case 'simple':\n {\n if (node.escaped) {\n return '\\\\' + value;\n }\n return value;\n }\n\n case 'hex':\n case 'unicode':\n case 'oct':\n case 'decimal':\n case 'control':\n case 'meta':\n return value;\n\n default:\n throw new TypeError('Unknown Char kind: ' + node.kind);\n }\n },\n UnicodeProperty: function UnicodeProperty(node) {\n var escapeChar = node.negative ? 'P' : 'p';\n var namePart = void 0;\n\n if (!node.shorthand && !node.binary) {\n namePart = node.name + '=';\n } else {\n namePart = '';\n }\n\n return '\\\\' + escapeChar + '{' + namePart + node.value + '}';\n }\n};\n\nmodule.exports = {\n /**\n * Generates a regexp string from an AST.\n *\n * @param Object ast - an AST node\n */\n generate: gen\n};","'use strict';\n\n/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\nvar NON_BINARY_PROP_NAMES_TO_ALIASES = {\n General_Category: 'gc',\n Script: 'sc',\n Script_Extensions: 'scx'\n};\n\nvar NON_BINARY_ALIASES_TO_PROP_NAMES = inverseMap(NON_BINARY_PROP_NAMES_TO_ALIASES);\n\nvar BINARY_PROP_NAMES_TO_ALIASES = {\n ASCII: 'ASCII',\n ASCII_Hex_Digit: 'AHex',\n Alphabetic: 'Alpha',\n Any: 'Any',\n Assigned: 'Assigned',\n Bidi_Control: 'Bidi_C',\n Bidi_Mirrored: 'Bidi_M',\n Case_Ignorable: 'CI',\n Cased: 'Cased',\n Changes_When_Casefolded: 'CWCF',\n Changes_When_Casemapped: 'CWCM',\n Changes_When_Lowercased: 'CWL',\n Changes_When_NFKC_Casefolded: 'CWKCF',\n Changes_When_Titlecased: 'CWT',\n Changes_When_Uppercased: 'CWU',\n Dash: 'Dash',\n Default_Ignorable_Code_Point: 'DI',\n Deprecated: 'Dep',\n Diacritic: 'Dia',\n Emoji: 'Emoji',\n Emoji_Component: 'Emoji_Component',\n Emoji_Modifier: 'Emoji_Modifier',\n Emoji_Modifier_Base: 'Emoji_Modifier_Base',\n Emoji_Presentation: 'Emoji_Presentation',\n Extended_Pictographic: 'Extended_Pictographic',\n Extender: 'Ext',\n Grapheme_Base: 'Gr_Base',\n Grapheme_Extend: 'Gr_Ext',\n Hex_Digit: 'Hex',\n IDS_Binary_Operator: 'IDSB',\n IDS_Trinary_Operator: 'IDST',\n ID_Continue: 'IDC',\n ID_Start: 'IDS',\n Ideographic: 'Ideo',\n Join_Control: 'Join_C',\n Logical_Order_Exception: 'LOE',\n Lowercase: 'Lower',\n Math: 'Math',\n Noncharacter_Code_Point: 'NChar',\n Pattern_Syntax: 'Pat_Syn',\n Pattern_White_Space: 'Pat_WS',\n Quotation_Mark: 'QMark',\n Radical: 'Radical',\n Regional_Indicator: 'RI',\n Sentence_Terminal: 'STerm',\n Soft_Dotted: 'SD',\n Terminal_Punctuation: 'Term',\n Unified_Ideograph: 'UIdeo',\n Uppercase: 'Upper',\n Variation_Selector: 'VS',\n White_Space: 'space',\n XID_Continue: 'XIDC',\n XID_Start: 'XIDS'\n};\n\nvar BINARY_ALIASES_TO_PROP_NAMES = inverseMap(BINARY_PROP_NAMES_TO_ALIASES);\n\nvar GENERAL_CATEGORY_VALUE_TO_ALIASES = {\n Cased_Letter: 'LC',\n Close_Punctuation: 'Pe',\n Connector_Punctuation: 'Pc',\n Control: ['Cc', 'cntrl'],\n Currency_Symbol: 'Sc',\n Dash_Punctuation: 'Pd',\n Decimal_Number: ['Nd', 'digit'],\n Enclosing_Mark: 'Me',\n Final_Punctuation: 'Pf',\n Format: 'Cf',\n Initial_Punctuation: 'Pi',\n Letter: 'L',\n Letter_Number: 'Nl',\n Line_Separator: 'Zl',\n Lowercase_Letter: 'Ll',\n Mark: ['M', 'Combining_Mark'],\n Math_Symbol: 'Sm',\n Modifier_Letter: 'Lm',\n Modifier_Symbol: 'Sk',\n Nonspacing_Mark: 'Mn',\n Number: 'N',\n Open_Punctuation: 'Ps',\n Other: 'C',\n Other_Letter: 'Lo',\n Other_Number: 'No',\n Other_Punctuation: 'Po',\n Other_Symbol: 'So',\n Paragraph_Separator: 'Zp',\n Private_Use: 'Co',\n Punctuation: ['P', 'punct'],\n Separator: 'Z',\n Space_Separator: 'Zs',\n Spacing_Mark: 'Mc',\n Surrogate: 'Cs',\n Symbol: 'S',\n Titlecase_Letter: 'Lt',\n Unassigned: 'Cn',\n Uppercase_Letter: 'Lu'\n};\n\nvar GENERAL_CATEGORY_VALUE_ALIASES_TO_VALUES = inverseMap(GENERAL_CATEGORY_VALUE_TO_ALIASES);\n\nvar SCRIPT_VALUE_TO_ALIASES = {\n Adlam: 'Adlm',\n Ahom: 'Ahom',\n Anatolian_Hieroglyphs: 'Hluw',\n Arabic: 'Arab',\n Armenian: 'Armn',\n Avestan: 'Avst',\n Balinese: 'Bali',\n Bamum: 'Bamu',\n Bassa_Vah: 'Bass',\n Batak: 'Batk',\n Bengali: 'Beng',\n Bhaiksuki: 'Bhks',\n Bopomofo: 'Bopo',\n Brahmi: 'Brah',\n Braille: 'Brai',\n Buginese: 'Bugi',\n Buhid: 'Buhd',\n Canadian_Aboriginal: 'Cans',\n Carian: 'Cari',\n Caucasian_Albanian: 'Aghb',\n Chakma: 'Cakm',\n Cham: 'Cham',\n Cherokee: 'Cher',\n Common: 'Zyyy',\n Coptic: ['Copt', 'Qaac'],\n Cuneiform: 'Xsux',\n Cypriot: 'Cprt',\n Cyrillic: 'Cyrl',\n Deseret: 'Dsrt',\n Devanagari: 'Deva',\n Dogra: 'Dogr',\n Duployan: 'Dupl',\n Egyptian_Hieroglyphs: 'Egyp',\n Elbasan: 'Elba',\n Ethiopic: 'Ethi',\n Georgian: 'Geor',\n Glagolitic: 'Glag',\n Gothic: 'Goth',\n Grantha: 'Gran',\n Greek: 'Grek',\n Gujarati: 'Gujr',\n Gunjala_Gondi: 'Gong',\n Gurmukhi: 'Guru',\n Han: 'Hani',\n Hangul: 'Hang',\n Hanifi_Rohingya: 'Rohg',\n Hanunoo: 'Hano',\n Hatran: 'Hatr',\n Hebrew: 'Hebr',\n Hiragana: 'Hira',\n Imperial_Aramaic: 'Armi',\n Inherited: ['Zinh', 'Qaai'],\n Inscriptional_Pahlavi: 'Phli',\n Inscriptional_Parthian: 'Prti',\n Javanese: 'Java',\n Kaithi: 'Kthi',\n Kannada: 'Knda',\n Katakana: 'Kana',\n Kayah_Li: 'Kali',\n Kharoshthi: 'Khar',\n Khmer: 'Khmr',\n Khojki: 'Khoj',\n Khudawadi: 'Sind',\n Lao: 'Laoo',\n Latin: 'Latn',\n Lepcha: 'Lepc',\n Limbu: 'Limb',\n Linear_A: 'Lina',\n Linear_B: 'Linb',\n Lisu: 'Lisu',\n Lycian: 'Lyci',\n Lydian: 'Lydi',\n Mahajani: 'Mahj',\n Makasar: 'Maka',\n Malayalam: 'Mlym',\n Mandaic: 'Mand',\n Manichaean: 'Mani',\n Marchen: 'Marc',\n Medefaidrin: 'Medf',\n Masaram_Gondi: 'Gonm',\n Meetei_Mayek: 'Mtei',\n Mende_Kikakui: 'Mend',\n Meroitic_Cursive: 'Merc',\n Meroitic_Hieroglyphs: 'Mero',\n Miao: 'Plrd',\n Modi: 'Modi',\n Mongolian: 'Mong',\n Mro: 'Mroo',\n Multani: 'Mult',\n Myanmar: 'Mymr',\n Nabataean: 'Nbat',\n New_Tai_Lue: 'Talu',\n Newa: 'Newa',\n Nko: 'Nkoo',\n Nushu: 'Nshu',\n Ogham: 'Ogam',\n Ol_Chiki: 'Olck',\n Old_Hungarian: 'Hung',\n Old_Italic: 'Ital',\n Old_North_Arabian: 'Narb',\n Old_Permic: 'Perm',\n Old_Persian: 'Xpeo',\n Old_Sogdian: 'Sogo',\n Old_South_Arabian: 'Sarb',\n Old_Turkic: 'Orkh',\n Oriya: 'Orya',\n Osage: 'Osge',\n Osmanya: 'Osma',\n Pahawh_Hmong: 'Hmng',\n Palmyrene: 'Palm',\n Pau_Cin_Hau: 'Pauc',\n Phags_Pa: 'Phag',\n Phoenician: 'Phnx',\n Psalter_Pahlavi: 'Phlp',\n Rejang: 'Rjng',\n Runic: 'Runr',\n Samaritan: 'Samr',\n Saurashtra: 'Saur',\n Sharada: 'Shrd',\n Shavian: 'Shaw',\n Siddham: 'Sidd',\n SignWriting: 'Sgnw',\n Sinhala: 'Sinh',\n Sogdian: 'Sogd',\n Sora_Sompeng: 'Sora',\n Soyombo: 'Soyo',\n Sundanese: 'Sund',\n Syloti_Nagri: 'Sylo',\n Syriac: 'Syrc',\n Tagalog: 'Tglg',\n Tagbanwa: 'Tagb',\n Tai_Le: 'Tale',\n Tai_Tham: 'Lana',\n Tai_Viet: 'Tavt',\n Takri: 'Takr',\n Tamil: 'Taml',\n Tangut: 'Tang',\n Telugu: 'Telu',\n Thaana: 'Thaa',\n Thai: 'Thai',\n Tibetan: 'Tibt',\n Tifinagh: 'Tfng',\n Tirhuta: 'Tirh',\n Ugaritic: 'Ugar',\n Vai: 'Vaii',\n Warang_Citi: 'Wara',\n Yi: 'Yiii',\n Zanabazar_Square: 'Zanb'\n};\n\nvar SCRIPT_VALUE_ALIASES_TO_VALUE = inverseMap(SCRIPT_VALUE_TO_ALIASES);\n\nfunction inverseMap(data) {\n var inverse = {};\n\n for (var name in data) {\n if (!data.hasOwnProperty(name)) {\n continue;\n }\n var value = data[name];\n if (Array.isArray(value)) {\n for (var i = 0; i < value.length; i++) {\n inverse[value[i]] = name;\n }\n } else {\n inverse[value] = name;\n }\n }\n\n return inverse;\n}\n\nfunction isValidName(name) {\n return NON_BINARY_PROP_NAMES_TO_ALIASES.hasOwnProperty(name) || NON_BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(name) || BINARY_PROP_NAMES_TO_ALIASES.hasOwnProperty(name) || BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(name);\n}\n\nfunction isValidValue(name, value) {\n if (isGeneralCategoryName(name)) {\n return isGeneralCategoryValue(value);\n }\n\n if (isScriptCategoryName(name)) {\n return isScriptCategoryValue(value);\n }\n\n return false;\n}\n\nfunction isAlias(name) {\n return NON_BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(name) || BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(name);\n}\n\nfunction isGeneralCategoryName(name) {\n return name === 'General_Category' || name == 'gc';\n}\n\nfunction isScriptCategoryName(name) {\n return name === 'Script' || name === 'Script_Extensions' || name === 'sc' || name === 'scx';\n}\n\nfunction isGeneralCategoryValue(value) {\n return GENERAL_CATEGORY_VALUE_TO_ALIASES.hasOwnProperty(value) || GENERAL_CATEGORY_VALUE_ALIASES_TO_VALUES.hasOwnProperty(value);\n}\n\nfunction isScriptCategoryValue(value) {\n return SCRIPT_VALUE_TO_ALIASES.hasOwnProperty(value) || SCRIPT_VALUE_ALIASES_TO_VALUE.hasOwnProperty(value);\n}\n\nfunction isBinaryPropertyName(name) {\n return BINARY_PROP_NAMES_TO_ALIASES.hasOwnProperty(name) || BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(name);\n}\n\nfunction getCanonicalName(name) {\n if (NON_BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(name)) {\n return NON_BINARY_ALIASES_TO_PROP_NAMES[name];\n }\n\n if (BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(name)) {\n return BINARY_ALIASES_TO_PROP_NAMES[name];\n }\n\n return null;\n}\n\nfunction getCanonicalValue(value) {\n if (GENERAL_CATEGORY_VALUE_ALIASES_TO_VALUES.hasOwnProperty(value)) {\n return GENERAL_CATEGORY_VALUE_ALIASES_TO_VALUES[value];\n }\n\n if (SCRIPT_VALUE_ALIASES_TO_VALUE.hasOwnProperty(value)) {\n return SCRIPT_VALUE_ALIASES_TO_VALUE[value];\n }\n\n if (BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(value)) {\n return BINARY_ALIASES_TO_PROP_NAMES[value];\n }\n\n return null;\n}\n\nmodule.exports = {\n isAlias: isAlias,\n isValidName: isValidName,\n isValidValue: isValidValue,\n isGeneralCategoryValue: isGeneralCategoryValue,\n isScriptCategoryValue: isScriptCategoryValue,\n isBinaryPropertyName: isBinaryPropertyName,\n getCanonicalName: getCanonicalName,\n getCanonicalValue: getCanonicalValue,\n\n NON_BINARY_PROP_NAMES_TO_ALIASES: NON_BINARY_PROP_NAMES_TO_ALIASES,\n NON_BINARY_ALIASES_TO_PROP_NAMES: NON_BINARY_ALIASES_TO_PROP_NAMES,\n\n BINARY_PROP_NAMES_TO_ALIASES: BINARY_PROP_NAMES_TO_ALIASES,\n BINARY_ALIASES_TO_PROP_NAMES: BINARY_ALIASES_TO_PROP_NAMES,\n\n GENERAL_CATEGORY_VALUE_TO_ALIASES: GENERAL_CATEGORY_VALUE_TO_ALIASES,\n GENERAL_CATEGORY_VALUE_ALIASES_TO_VALUES: GENERAL_CATEGORY_VALUE_ALIASES_TO_VALUES,\n\n SCRIPT_VALUE_TO_ALIASES: SCRIPT_VALUE_TO_ALIASES,\n SCRIPT_VALUE_ALIASES_TO_VALUE: SCRIPT_VALUE_ALIASES_TO_VALUE\n};","/**\n * LR parser generated by the Syntax tool.\n *\n * https://www.npmjs.com/package/syntax-cli\n *\n * npm install -g syntax-cli\n *\n * syntax-cli --help\n *\n * To regenerate run:\n *\n * syntax-cli \\\n * --grammar ~/path-to-grammar-file \\\n * --mode <parsing-mode> \\\n * --output ~/path-to-output-parser-file.js\n */\n\n'use strict';\n\n/**\n * Matched token text.\n */\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar yytext = void 0;\n\n/**\n * Length of the matched token text.\n */\nvar yyleng = void 0;\n\n/**\n * Storage object.\n */\nvar yy = {};\n\n/**\n * Result of semantic action.\n */\nvar __ = void 0;\n\n/**\n * Result location object.\n */\nvar __loc = void 0;\n\nfunction yyloc(start, end) {\n if (!yy.options.captureLocations) {\n return null;\n }\n\n // Epsilon doesn't produce location.\n if (!start || !end) {\n return start || end;\n }\n\n return {\n startOffset: start.startOffset,\n endOffset: end.endOffset,\n startLine: start.startLine,\n endLine: end.endLine,\n startColumn: start.startColumn,\n endColumn: end.endColumn\n };\n}\n\nvar EOF = '$';\n\n/**\n * List of productions (generated by Syntax tool).\n */\nvar productions = [[-1, 1, function (_1, _1loc) {\n __loc = yyloc(_1loc, _1loc);__ = _1;\n}], [0, 4, function (_1, _2, _3, _4, _1loc, _2loc, _3loc, _4loc) {\n __loc = yyloc(_1loc, _4loc);\n __ = Node({\n type: 'RegExp',\n body: _2,\n flags: checkFlags(_4)\n }, loc(_1loc, _4loc || _3loc));\n}], [1, 1, function (_1, _1loc) {\n __loc = yyloc(_1loc, _1loc);__ = _1;\n}], [1, 0, function () {\n __loc = null;__ = '';\n}], [2, 1, function (_1, _1loc) {\n __loc = yyloc(_1loc, _1loc);__ = _1;\n}], [2, 2, function (_1, _2, _1loc, _2loc) {\n __loc = yyloc(_1loc, _2loc);__ = _1 + _2;\n}], [3, 1, function (_1, _1loc) {\n __loc = yyloc(_1loc, _1loc);__ = _1;\n}], [4, 1, function (_1, _1loc) {\n __loc = yyloc(_1loc, _1loc);__ = _1;\n}], [4, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {\n __loc = yyloc(_1loc, _3loc);\n // Location for empty disjunction: /|/\n var _loc = null;\n\n if (_2loc) {\n _loc = loc(_1loc || _2loc, _3loc || _2loc);\n };\n\n __ = Node({\n type: 'Disjunction',\n left: _1,\n right: _3\n }, _loc);\n}], [5, 1, function (_1, _1loc) {\n __loc = yyloc(_1loc, _1loc);\n if (_1.length === 0) {\n __ = null;\n return;\n }\n\n if (_1.length === 1) {\n __ = Node(_1[0], __loc);\n } else {\n __ = Node({\n type: 'Alternative',\n expressions: _1\n }, __loc);\n }\n}], [6, 0, function () {\n __loc = null;__ = [];\n}], [6, 2, function (_1, _2, _1loc, _2loc) {\n __loc = yyloc(_1loc, _2loc);__ = _1.concat(_2);\n}], [7, 1, function (_1, _1loc) {\n __loc = yyloc(_1loc, _1loc);__ = Node(Object.assign({ type: 'Assertion' }, _1), __loc);\n}], [7, 2, function (_1, _2, _1loc, _2loc) {\n __loc = yyloc(_1loc, _2loc);\n __ = _1;\n\n if (_2) {\n __ = Node({\n type: 'Repetition',\n expression: _1,\n quantifier: _2\n }, __loc);\n }\n}], [8, 1, function (_1, _1loc) {\n __loc = yyloc(_1loc, _1loc);__ = { kind: '^' };\n}], [8, 1, function (_1, _1loc) {\n __loc = yyloc(_1loc, _1loc);__ = { kind: '$' };\n}], [8, 1, function (_1, _1loc) {\n __loc = yyloc(_1loc, _1loc);__ = { kind: '\\\\b' };\n}], [8, 1, function (_1, _1loc) {\n __loc = yyloc(_1loc, _1loc);__ = { kind: '\\\\B' };\n}], [8, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {\n __loc = yyloc(_1loc, _3loc);\n __ = {\n kind: 'Lookahead',\n assertion: _2\n };\n}], [8, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {\n __loc = yyloc(_1loc, _3loc);\n __ = {\n kind: 'Lookahead',\n negative: true,\n assertion: _2\n };\n}], [8, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {\n __loc = yyloc(_1loc, _3loc);\n __ = {\n kind: 'Lookbehind',\n assertion: _2\n };\n}], [8, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {\n __loc = yyloc(_1loc, _3loc);\n __ = {\n kind: 'Lookbehind',\n negative: true,\n assertion: _2\n };\n}], [9, 1, function (_1, _1loc) {\n __loc = yyloc(_1loc, _1loc);__ = _1;\n}], [9, 1, function (_1, _1loc) {\n __loc = yyloc(_1loc, _1loc);__ = _1;\n}], [9, 1, function (_1, _1loc) {\n __loc = yyloc(_1loc, _1loc);__ = _1;\n}], [10, 1, function (_1, _1loc) {\n __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'simple', __loc);\n}], [10, 1, function (_1, _1loc) {\n __loc = yyloc(_1loc, _1loc);__ = Char(_1.slice(1), 'simple', __loc);__.escaped = true;\n}], [10, 1, function (_1, _1loc) {\n __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'unicode', __loc);__.isSurrogatePair = true;\n}], [10, 1, function (_1, _1loc) {\n __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'unicode', __loc);\n}], [10, 1, function (_1, _1loc) {\n __loc = yyloc(_1loc, _1loc);__ = UnicodeProperty(_1, __loc);\n}], [10, 1, function (_1, _1loc) {\n __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'control', __loc);\n}], [10, 1, function (_1, _1loc) {\n __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'hex', __loc);\n}], [10, 1, function (_1, _1loc) {\n __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'oct', __loc);\n}], [10, 1, function (_1, _1loc) {\n __loc = yyloc(_1loc, _1loc);__ = GroupRefOrDecChar(_1, __loc);\n}], [10, 1, function (_1, _1loc) {\n __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'meta', __loc);\n}], [10, 1, function (_1, _1loc) {\n __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'meta', __loc);\n}], [10, 1, function (_1, _1loc) {\n __loc = yyloc(_1loc, _1loc);__ = NamedGroupRefOrChars(_1, _1loc);\n}], [11, 1, function (_1, _1loc) {\n __loc = yyloc(_1loc, _1loc);__ = _1;\n}], [11, 0], [12, 1, function (_1, _1loc) {\n __loc = yyloc(_1loc, _1loc);__ = _1;\n}], [12, 2, function (_1, _2, _1loc, _2loc) {\n __loc = yyloc(_1loc, _2loc);\n _1.greedy = false;\n __ = _1;\n}], [13, 1, function (_1, _1loc) {\n __loc = yyloc(_1loc, _1loc);\n __ = Node({\n type: 'Quantifier',\n kind: _1,\n greedy: true\n }, __loc);\n}], [13, 1, function (_1, _1loc) {\n __loc = yyloc(_1loc, _1loc);\n __ = Node({\n type: 'Quantifier',\n kind: _1,\n greedy: true\n }, __loc);\n}], [13, 1, function (_1, _1loc) {\n __loc = yyloc(_1loc, _1loc);\n __ = Node({\n type: 'Quantifier',\n kind: _1,\n greedy: true\n }, __loc);\n}], [13, 1, function (_1, _1loc) {\n __loc = yyloc(_1loc, _1loc);\n var range = getRange(_1);\n __ = Node({\n type: 'Quantifier',\n kind: 'Range',\n from: range[0],\n to: range[0],\n greedy: true\n }, __loc);\n}], [13, 1, function (_1, _1loc) {\n __loc = yyloc(_1loc, _1loc);\n __ = Node({\n type: 'Quantifier',\n kind: 'Range',\n from: getRange(_1)[0],\n greedy: true\n }, __loc);\n}], [13, 1, function (_1, _1loc) {\n __loc = yyloc(_1loc, _1loc);\n var range = getRange(_1);\n __ = Node({\n type: 'Quantifier',\n kind: 'Range',\n from: range[0],\n to: range[1],\n greedy: true\n }, __loc);\n}], [14, 1, function (_1, _1loc) {\n __loc = yyloc(_1loc, _1loc);__ = _1;\n}], [14, 1, function (_1, _1loc) {\n __loc = yyloc(_1loc, _1loc);__ = _1;\n}], [15, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {\n __loc = yyloc(_1loc, _3loc);\n var nameRaw = String(_1);\n var name = decodeUnicodeGroupName(nameRaw);\n if (!yy.options.allowGroupNameDuplicates && namedGroups.hasOwnProperty(name)) {\n throw new SyntaxError('Duplicate of the named group \"' + name + '\".');\n }\n\n namedGroups[name] = _1.groupNumber;\n\n __ = Node({\n type: 'Group',\n capturing: true,\n name: name,\n nameRaw: nameRaw,\n number: _1.groupNumber,\n expression: _2\n }, __loc);\n}], [15, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {\n __loc = yyloc(_1loc, _3loc);\n __ = Node({\n type: 'Group',\n capturing: true,\n number: _1.groupNumber,\n expression: _2\n }, __loc);\n}], [16, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {\n __loc = yyloc(_1loc, _3loc);\n __ = Node({\n type: 'Group',\n capturing: false,\n expression: _2\n }, __loc);\n}], [17, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {\n __loc = yyloc(_1loc, _3loc);\n __ = Node({\n type: 'CharacterClass',\n negative: true,\n expressions: _2\n }, __loc);\n}], [17, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {\n __loc = yyloc(_1loc, _3loc);\n __ = Node({\n type: 'CharacterClass',\n expressions: _2\n }, __loc);\n}], [18, 0, function () {\n __loc = null;__ = [];\n}], [18, 1, function (_1, _1loc) {\n __loc = yyloc(_1loc, _1loc);__ = _1;\n}], [19, 1, function (_1, _1loc) {\n __loc = yyloc(_1loc, _1loc);__ = [_1];\n}], [19, 2, function (_1, _2, _1loc, _2loc) {\n __loc = yyloc(_1loc, _2loc);__ = [_1].concat(_2);\n}], [19, 4, function (_1, _2, _3, _4, _1loc, _2loc, _3loc, _4loc) {\n __loc = yyloc(_1loc, _4loc);\n checkClassRange(_1, _3);\n\n __ = [Node({\n type: 'ClassRange',\n from: _1,\n to: _3\n }, loc(_1loc, _3loc))];\n\n if (_4) {\n __ = __.concat(_4);\n }\n}], [20, 1, function (_1, _1loc) {\n __loc = yyloc(_1loc, _1loc);__ = _1;\n}], [20, 2, function (_1, _2, _1loc, _2loc) {\n __loc = yyloc(_1loc, _2loc);__ = [_1].concat(_2);\n}], [20, 4, function (_1, _2, _3, _4, _1loc, _2loc, _3loc, _4loc) {\n __loc = yyloc(_1loc, _4loc);\n checkClassRange(_1, _3);\n\n __ = [Node({\n type: 'ClassRange',\n from: _1,\n to: _3\n }, loc(_1loc, _3loc))];\n\n if (_4) {\n __ = __.concat(_4);\n }\n}], [21, 1, function (_1, _1loc) {\n __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'simple', __loc);\n}], [21, 1, function (_1, _1loc) {\n __loc = yyloc(_1loc, _1loc);__ = _1;\n}], [22, 1, function (_1, _1loc) {\n __loc = yyloc(_1loc, _1loc);__ = _1;\n}], [22, 1, function (_1, _1loc) {\n __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'meta', __loc);\n}]];\n\n/**\n * Encoded tokens map.\n */\nvar tokens = { \"SLASH\": \"23\", \"CHAR\": \"24\", \"BAR\": \"25\", \"BOS\": \"26\", \"EOS\": \"27\", \"ESC_b\": \"28\", \"ESC_B\": \"29\", \"POS_LA_ASSERT\": \"30\", \"R_PAREN\": \"31\", \"NEG_LA_ASSERT\": \"32\", \"POS_LB_ASSERT\": \"33\", \"NEG_LB_ASSERT\": \"34\", \"ESC_CHAR\": \"35\", \"U_CODE_SURROGATE\": \"36\", \"U_CODE\": \"37\", \"U_PROP_VALUE_EXP\": \"38\", \"CTRL_CH\": \"39\", \"HEX_CODE\": \"40\", \"OCT_CODE\": \"41\", \"DEC_CODE\": \"42\", \"META_CHAR\": \"43\", \"ANY\": \"44\", \"NAMED_GROUP_REF\": \"45\", \"Q_MARK\": \"46\", \"STAR\": \"47\", \"PLUS\": \"48\", \"RANGE_EXACT\": \"49\", \"RANGE_OPEN\": \"50\", \"RANGE_CLOSED\": \"51\", \"NAMED_CAPTURE_GROUP\": \"52\", \"L_PAREN\": \"53\", \"NON_CAPTURE_GROUP\": \"54\", \"NEG_CLASS\": \"55\", \"R_BRACKET\": \"56\", \"L_BRACKET\": \"57\", \"DASH\": \"58\", \"$\": \"59\" };\n\n/**\n * Parsing table (generated by Syntax tool).\n */\nvar table = [{ \"0\": 1, \"23\": \"s2\" }, { \"59\": \"acc\" }, { \"3\": 3, \"4\": 4, \"5\": 5, \"6\": 6, \"23\": \"r10\", \"24\": \"r10\", \"25\": \"r10\", \"26\": \"r10\", \"27\": \"r10\", \"28\": \"r10\", \"29\": \"r10\", \"30\": \"r10\", \"32\": \"r10\", \"33\": \"r10\", \"34\": \"r10\", \"35\": \"r10\", \"36\": \"r10\", \"37\": \"r10\", \"38\": \"r10\", \"39\": \"r10\", \"40\": \"r10\", \"41\": \"r10\", \"42\": \"r10\", \"43\": \"r10\", \"44\": \"r10\", \"45\": \"r10\", \"52\": \"r10\", \"53\": \"r10\", \"54\": \"r10\", \"55\": \"r10\", \"57\": \"r10\" }, { \"23\": \"s7\" }, { \"23\": \"r6\", \"25\": \"s12\" }, { \"23\": \"r7\", \"25\": \"r7\", \"31\": \"r7\" }, { \"7\": 14, \"8\": 15, \"9\": 16, \"10\": 25, \"14\": 27, \"15\": 42, \"16\": 43, \"17\": 26, \"23\": \"r9\", \"24\": \"s28\", \"25\": \"r9\", \"26\": \"s17\", \"27\": \"s18\", \"28\": \"s19\", \"29\": \"s20\", \"30\": \"s21\", \"31\": \"r9\", \"32\": \"s22\", \"33\": \"s23\", \"34\": \"s24\", \"35\": \"s29\", \"36\": \"s30\", \"37\": \"s31\", \"38\": \"s32\", \"39\": \"s33\", \"40\": \"s34\", \"41\": \"s35\", \"42\": \"s36\", \"43\": \"s37\", \"44\": \"s38\", \"45\": \"s39\", \"52\": \"s44\", \"53\": \"s45\", \"54\": \"s46\", \"55\": \"s40\", \"57\": \"s41\" }, { \"1\": 8, \"2\": 9, \"24\": \"s10\", \"59\": \"r3\" }, { \"59\": \"r1\" }, { \"24\": \"s11\", \"59\": \"r2\" }, { \"24\": \"r4\", \"59\": \"r4\" }, { \"24\": \"r5\", \"59\": \"r5\" }, { \"5\": 13, \"6\": 6, \"23\": \"r10\", \"24\": \"r10\", \"25\": \"r10\", \"26\": \"r10\", \"27\": \"r10\", \"28\": \"r10\", \"29\": \"r10\", \"30\": \"r10\", \"31\": \"r10\", \"32\": \"r10\", \"33\": \"r10\", \"34\": \"r10\", \"35\": \"r10\", \"36\": \"r10\", \"37\": \"r10\", \"38\": \"r10\", \"39\": \"r10\", \"40\": \"r10\", \"41\": \"r10\", \"42\": \"r10\", \"43\": \"r10\", \"44\": \"r10\", \"45\": \"r10\", \"52\": \"r10\", \"53\": \"r10\", \"54\": \"r10\", \"55\": \"r10\", \"57\": \"r10\" }, { \"23\": \"r8\", \"25\": \"r8\", \"31\": \"r8\" }, { \"23\": \"r11\", \"24\": \"r11\", \"25\": \"r11\", \"26\": \"r11\", \"27\": \"r11\", \"28\": \"r11\", \"29\": \"r11\", \"30\": \"r11\", \"31\": \"r11\", \"32\": \"r11\", \"33\": \"r11\", \"34\": \"r11\", \"35\": \"r11\", \"36\": \"r11\", \"37\": \"r11\", \"38\": \"r11\", \"39\": \"r11\", \"40\": \"r11\", \"41\": \"r11\", \"42\": \"r11\", \"43\": \"r11\", \"44\": \"r11\", \"45\": \"r11\", \"52\": \"r11\", \"53\": \"r11\", \"54\": \"r11\", \"55\": \"r11\", \"57\": \"r11\" }, { \"23\": \"r12\", \"24\": \"r12\", \"25\": \"r12\", \"26\": \"r12\", \"27\": \"r12\", \"28\": \"r12\", \"29\": \"r12\", \"30\": \"r12\", \"31\": \"r12\", \"32\": \"r12\", \"33\": \"r12\", \"34\": \"r12\", \"35\": \"r12\", \"36\": \"r12\", \"37\": \"r12\", \"38\": \"r12\", \"39\": \"r12\", \"40\": \"r12\", \"41\": \"r12\", \"42\": \"r12\", \"43\": \"r12\", \"44\": \"r12\", \"45\": \"r12\", \"52\": \"r12\", \"53\": \"r12\", \"54\": \"r12\", \"55\": \"r12\", \"57\": \"r12\" }, { \"11\": 47, \"12\": 48, \"13\": 49, \"23\": \"r38\", \"24\": \"r38\", \"25\": \"r38\", \"26\": \"r38\", \"27\": \"r38\", \"28\": \"r38\", \"29\": \"r38\", \"30\": \"r38\", \"31\": \"r38\", \"32\": \"r38\", \"33\": \"r38\", \"34\": \"r38\", \"35\": \"r38\", \"36\": \"r38\", \"37\": \"r38\", \"38\": \"r38\", \"39\": \"r38\", \"40\": \"r38\", \"41\": \"r38\", \"42\": \"r38\", \"43\": \"r38\", \"44\": \"r38\", \"45\": \"r38\", \"46\": \"s52\", \"47\": \"s50\", \"48\": \"s51\", \"49\": \"s53\", \"50\": \"s54\", \"51\": \"s55\", \"52\": \"r38\", \"53\": \"r38\", \"54\": \"r38\", \"55\": \"r38\", \"57\": \"r38\" }, { \"23\": \"r14\", \"24\": \"r14\", \"25\": \"r14\", \"26\": \"r14\", \"27\": \"r14\", \"28\": \"r14\", \"29\": \"r14\", \"30\": \"r14\", \"31\": \"r14\", \"32\": \"r14\", \"33\": \"r14\", \"34\": \"r14\", \"35\": \"r14\", \"36\": \"r14\", \"37\": \"r14\", \"38\": \"r14\", \"39\": \"r14\", \"40\": \"r14\", \"41\": \"r14\", \"42\": \"r14\", \"43\": \"r14\", \"44\": \"r14\", \"45\": \"r14\", \"52\": \"r14\", \"53\": \"r14\", \"54\": \"r14\", \"55\": \"r14\", \"57\": \"r14\" }, { \"23\": \"r15\", \"24\": \"r15\", \"25\": \"r15\", \"26\": \"r15\", \"27\": \"r15\", \"28\": \"r15\", \"29\": \"r15\", \"30\": \"r15\", \"31\": \"r15\", \"32\": \"r15\", \"33\": \"r15\", \"34\": \"r15\", \"35\": \"r15\", \"36\": \"r15\", \"37\": \"r15\", \"38\": \"r15\", \"39\": \"r15\", \"40\": \"r15\", \"41\": \"r15\", \"42\": \"r15\", \"43\": \"r15\", \"44\": \"r15\", \"45\": \"r15\", \"52\": \"r15\", \"53\": \"r15\", \"54\": \"r15\", \"55\": \"r15\", \"57\": \"r15\" }, { \"23\": \"r16\", \"24\": \"r16\", \"25\": \"r16\", \"26\": \"r16\", \"27\": \"r16\", \"28\": \"r16\", \"29\": \"r16\", \"30\": \"r16\", \"31\": \"r16\", \"32\": \"r16\", \"33\": \"r16\", \"34\": \"r16\", \"35\": \"r16\", \"36\": \"r16\", \"37\": \"r16\", \"38\": \"r16\", \"39\": \"r16\", \"40\": \"r16\", \"41\": \"r16\", \"42\": \"r16\", \"43\": \"r16\", \"44\": \"r16\", \"45\": \"r16\", \"52\": \"r16\", \"53\": \"r16\", \"54\": \"r16\", \"55\": \"r16\", \"57\": \"r16\" }, { \"23\": \"r17\", \"24\": \"r17\", \"25\": \"r17\", \"26\": \"r17\", \"27\": \"r17\", \"28\": \"r17\", \"29\": \"r17\", \"30\": \"r17\", \"31\": \"r17\", \"32\": \"r17\", \"33\": \"r17\", \"34\": \"r17\", \"35\": \"r17\", \"36\": \"r17\", \"37\": \"r17\", \"38\": \"r17\", \"39\": \"r17\", \"40\": \"r17\", \"41\": \"r17\", \"42\": \"r17\", \"43\": \"r17\", \"44\": \"r17\", \"45\": \"r17\", \"52\": \"r17\", \"53\": \"r17\", \"54\": \"r17\", \"55\": \"r17\", \"57\": \"r17\" }, { \"4\": 57, \"5\": 5, \"6\": 6, \"24\": \"r10\", \"25\": \"r10\", \"26\": \"r10\", \"27\": \"r10\", \"28\": \"r10\", \"29\": \"r10\", \"30\": \"r10\", \"31\": \"r10\", \"32\": \"r10\", \"33\": \"r10\", \"34\": \"r10\", \"35\": \"r10\", \"36\": \"r10\", \"37\": \"r10\", \"38\": \"r10\", \"39\": \"r10\", \"40\": \"r10\", \"41\": \"r10\", \"42\": \"r10\", \"43\": \"r10\", \"44\": \"r10\", \"45\": \"r10\", \"52\": \"r10\", \"53\": \"r10\", \"54\": \"r10\", \"55\": \"r10\", \"57\": \"r10\" }, { \"4\": 59, \"5\": 5, \"6\": 6, \"24\": \"r10\", \"25\": \"r10\", \"26\": \"r10\", \"27\": \"r10\", \"28\": \"r10\", \"29\": \"r10\", \"30\": \"r10\", \"31\": \"r10\", \"32\": \"r10\", \"33\": \"r10\", \"34\": \"r10\", \"35\": \"r10\", \"36\": \"r10\", \"37\": \"r10\", \"38\": \"r10\", \"39\": \"r10\", \"40\": \"r10\", \"41\": \"r10\", \"42\": \"r10\", \"43\": \"r10\", \"44\": \"r10\", \"45\": \"r10\", \"52\": \"r10\", \"53\": \"r10\", \"54\": \"r10\", \"55\": \"r10\", \"57\": \"r10\" }, { \"4\": 61, \"5\": 5, \"6\": 6, \"24\": \"r10\", \"25\": \"r10\", \"26\": \"r10\", \"27\": \"r10\", \"28\": \"r10\", \"29\": \"r10\", \"30\": \"r10\", \"31\": \"r10\", \"32\": \"r10\", \"33\": \"r10\", \"34\": \"r10\", \"35\": \"r10\", \"36\": \"r10\", \"37\": \"r10\", \"38\": \"r10\", \"39\": \"r10\", \"40\": \"r10\", \"41\": \"r10\", \"42\": \"r10\", \"43\": \"r10\", \"44\": \"r10\", \"45\": \"r10\", \"52\": \"r10\", \"53\": \"r10\", \"54\": \"r10\", \"55\": \"r10\", \"57\": \"r10\" }, { \"4\": 63, \"5\": 5, \"6\": 6, \"24\": \"r10\", \"25\": \"r10\", \"26\": \"r10\", \"27\": \"r10\", \"28\": \"r10\", \"29\": \"r10\", \"30\": \"r10\", \"31\": \"r10\", \"32\": \"r10\", \"33\": \"r10\", \"34\": \"r10\", \"35\": \"r10\", \"36\": \"r10\", \"37\": \"r10\", \"38\": \"r10\", \"39\": \"r10\", \"40\": \"r10\", \"41\": \"r10\", \"42\": \"r10\", \"43\": \"r10\", \"44\": \"r10\", \"45\": \"r10\", \"52\": \"r10\", \"53\": \"r10\", \"54\": \"r10\", \"55\": \"r10\", \"57\": \"r10\" }, { \"23\": \"r22\", \"24\": \"r22\", \"25\": \"r22\", \"26\": \"r22\", \"27\": \"r22\", \"28\": \"r22\", \"29\": \"r22\", \"30\": \"r22\", \"31\": \"r22\", \"32\": \"r22\", \"33\": \"r22\", \"34\": \"r22\", \"35\": \"r22\", \"36\": \"r22\", \"37\": \"r22\", \"38\": \"r22\", \"39\": \"r22\", \"40\": \"r22\", \"41\": \"r22\", \"42\": \"r22\", \"43\": \"r22\", \"44\": \"r22\", \"45\": \"r22\", \"46\": \"r22\", \"47\": \"r22\", \"48\": \"r22\", \"49\": \"r22\", \"50\": \"r22\", \"51\": \"r22\", \"52\": \"r22\", \"53\": \"r22\", \"54\": \"r22\", \"55\": \"r22\", \"57\": \"r22\" }, { \"23\": \"r23\", \"24\": \"r23\", \"25\": \"r23\", \"26\": \"r23\", \"27\": \"r23\", \"28\": \"r23\", \"29\": \"r23\", \"30\": \"r23\", \"31\": \"r23\", \"32\": \"r23\", \"33\": \"r23\", \"34\": \"r23\", \"35\": \"r23\", \"36\": \"r23\", \"37\": \"r23\", \"38\": \"r23\", \"39\": \"r23\", \"40\": \"r23\", \"41\": \"r23\", \"42\": \"r23\", \"43\": \"r23\", \"44\": \"r23\", \"45\": \"r23\", \"46\": \"r23\", \"47\": \"r23\", \"48\": \"r23\", \"49\": \"r23\", \"50\": \"r23\", \"51\": \"r23\", \"52\": \"r23\", \"53\": \"r23\", \"54\": \"r23\", \"55\": \"r23\", \"57\": \"r23\" }, { \"23\": \"r24\", \"24\": \"r24\", \"25\": \"r24\", \"26\": \"r24\", \"27\": \"r24\", \"28\": \"r24\", \"29\": \"r24\", \"30\": \"r24\", \"31\": \"r24\", \"32\": \"r24\", \"33\": \"r24\", \"34\": \"r24\", \"35\": \"r24\", \"36\": \"r24\", \"37\": \"r24\", \"38\": \"r24\", \"39\": \"r24\", \"40\": \"r24\", \"41\": \"r24\", \"42\": \"r24\", \"43\": \"r24\", \"44\": \"r24\", \"45\": \"r24\", \"46\": \"r24\", \"47\": \"r24\", \"48\": \"r24\", \"49\": \"r24\", \"50\": \"r24\", \"51\": \"r24\", \"52\": \"r24\", \"53\": \"r24\", \"54\": \"r24\", \"55\": \"r24\", \"57\": \"r24\" }, { \"23\": \"r25\", \"24\": \"r25\", \"25\": \"r25\", \"26\": \"r25\", \"27\": \"r25\", \"28\": \"r25\", \"29\": \"r25\", \"30\": \"r25\", \"31\": \"r25\", \"32\": \"r25\", \"33\": \"r25\", \"34\": \"r25\", \"35\": \"r25\", \"36\": \"r25\", \"37\": \"r25\", \"38\": \"r25\", \"39\": \"r25\", \"40\": \"r25\", \"41\": \"r25\", \"42\": \"r25\", \"43\": \"r25\", \"44\": \"r25\", \"45\": \"r25\", \"46\": \"r25\", \"47\": \"r25\", \"48\": \"r25\", \"49\": \"r25\", \"50\": \"r25\", \"51\": \"r25\", \"52\": \"r25\", \"53\": \"r25\", \"54\": \"r25\", \"55\": \"r25\", \"56\": \"r25\", \"57\": \"r25\", \"58\": \"r25\" }, { \"23\": \"r26\", \"24\": \"r26\", \"25\": \"r26\", \"26\": \"r26\", \"27\": \"r26\", \"28\": \"r26\", \"29\": \"r26\", \"30\": \"r26\", \"31\": \"r26\", \"32\": \"r26\", \"33\": \"r26\", \"34\": \"r26\", \"35\": \"r26\", \"36\": \"r26\", \"37\": \"r26\", \"38\": \"r26\", \"39\": \"r26\", \"40\": \"r26\", \"41\": \"r26\", \"42\": \"r26\", \"43\": \"r26\", \"44\": \"r26\", \"45\": \"r26\", \"46\": \"r26\", \"47\": \"r26\", \"48\": \"r26\", \"49\": \"r26\", \"50\": \"r26\", \"51\": \"r26\", \"52\": \"r26\", \"53\": \"r26\", \"54\": \"r26\", \"55\": \"r26\", \"56\": \"r26\", \"57\": \"r26\", \"58\": \"r26\" }, { \"23\": \"r27\", \"24\": \"r27\", \"25\": \"r27\", \"26\": \"r27\", \"27\": \"r27\", \"28\": \"r27\", \"29\": \"r27\", \"30\": \"r27\", \"31\": \"r27\", \"32\": \"r27\", \"33\": \"r27\", \"34\": \"r27\", \"35\": \"r27\", \"36\": \"r27\", \"37\": \"r27\", \"38\": \"r27\", \"39\": \"r27\", \"40\": \"r27\", \"41\": \"r27\", \"42\": \"r27\", \"43\": \"r27\", \"44\": \"r27\", \"45\": \"r27\", \"46\": \"r27\", \"47\": \"r27\", \"48\": \"r27\", \"49\": \"r27\", \"50\": \"r27\", \"51\": \"r27\", \"52\": \"r27\", \"53\": \"r27\", \"54\": \"r27\", \"55\": \"r27\", \"56\": \"r27\", \"57\": \"r27\", \"58\": \"r27\" }, { \"23\": \"r28\", \"24\": \"r28\", \"25\": \"r28\", \"26\": \"r28\", \"27\": \"r28\", \"28\": \"r28\", \"29\": \"r28\", \"30\": \"r28\", \"31\": \"r28\", \"32\": \"r28\", \"33\": \"r28\", \"34\": \"r28\", \"35\": \"r28\", \"36\": \"r28\", \"37\": \"r28\", \"38\": \"r28\", \"39\": \"r28\", \"40\": \"r28\", \"41\": \"r28\", \"42\": \"r28\", \"43\": \"r28\", \"44\": \"r28\", \"45\": \"r28\", \"46\": \"r28\", \"47\": \"r28\", \"48\": \"r28\", \"49\": \"r28\", \"50\": \"r28\", \"51\": \"r28\", \"52\": \"r28\", \"53\": \"r28\", \"54\": \"r28\", \"55\": \"r28\", \"56\": \"r28\", \"57\": \"r28\", \"58\": \"r28\" }, { \"23\": \"r29\", \"24\": \"r29\", \"25\": \"r29\", \"26\": \"r29\", \"27\": \"r29\", \"28\": \"r29\", \"29\": \"r29\", \"30\": \"r29\", \"31\": \"r29\", \"32\": \"r29\", \"33\": \"r29\", \"34\": \"r29\", \"35\": \"r29\", \"36\": \"r29\", \"37\": \"r29\", \"38\": \"r29\", \"39\": \"r29\", \"40\": \"r29\", \"41\": \"r29\", \"42\": \"r29\", \"43\": \"r29\", \"44\": \"r29\", \"45\": \"r29\", \"46\": \"r29\", \"47\": \"r29\", \"48\": \"r29\", \"49\": \"r29\", \"50\": \"r29\", \"51\": \"r29\", \"52\": \"r29\", \"53\": \"r29\", \"54\": \"r29\", \"55\": \"r29\", \"56\": \"r29\", \"57\": \"r29\", \"58\": \"r29\" }, { \"23\": \"r30\", \"24\": \"r30\", \"25\": \"r30\", \"26\": \"r30\", \"27\": \"r30\", \"28\": \"r30\", \"29\": \"r30\", \"30\": \"r30\", \"31\": \"r30\", \"32\": \"r30\", \"33\": \"r30\", \"34\": \"r30\", \"35\": \"r30\", \"36\": \"r30\", \"37\": \"r30\", \"38\": \"r30\", \"39\": \"r30\", \"40\": \"r30\", \"41\": \"r30\", \"42\": \"r30\", \"43\": \"r30\", \"44\": \"r30\", \"45\": \"r30\", \"46\": \"r30\", \"47\": \"r30\", \"48\": \"r30\", \"49\": \"r30\", \"50\": \"r30\", \"51\": \"r30\", \"52\": \"r30\", \"53\": \"r30\", \"54\": \"r30\", \"55\": \"r30\", \"56\": \"r30\", \"57\": \"r30\", \"58\": \"r30\" }, { \"23\": \"r31\", \"24\": \"r31\", \"25\": \"r31\", \"26\": \"r31\", \"27\": \"r31\", \"28\": \"r31\", \"29\": \"r31\", \"30\": \"r31\", \"31\": \"r31\", \"32\": \"r31\", \"33\": \"r31\", \"34\": \"r31\", \"35\": \"r31\", \"36\": \"r31\", \"37\": \"r31\", \"38\": \"r31\", \"39\": \"r31\", \"40\": \"r31\", \"41\": \"r31\", \"42\": \"r31\", \"43\": \"r31\", \"44\": \"r31\", \"45\": \"r31\", \"46\": \"r31\", \"47\": \"r31\", \"48\": \"r31\", \"49\": \"r31\", \"50\": \"r31\", \"51\": \"r31\", \"52\": \"r31\", \"53\": \"r31\", \"54\": \"r31\", \"55\": \"r31\", \"56\": \"r31\", \"57\": \"r31\", \"58\": \"r31\" }, { \"23\": \"r32\", \"24\": \"r32\", \"25\": \"r32\", \"26\": \"r32\", \"27\": \"r32\", \"28\": \"r32\", \"29\": \"r32\", \"30\": \"r32\", \"31\": \"r32\", \"32\": \"r32\", \"33\": \"r32\", \"34\": \"r32\", \"35\": \"r32\", \"36\": \"r32\", \"37\": \"r32\", \"38\": \"r32\", \"39\": \"r32\", \"40\": \"r32\", \"41\": \"r32\", \"42\": \"r32\", \"43\": \"r32\", \"44\": \"r32\", \"45\": \"r32\", \"46\": \"r32\", \"47\": \"r32\", \"48\": \"r32\", \"49\": \"r32\", \"50\": \"r32\", \"51\": \"r32\", \"52\": \"r32\", \"53\": \"r32\", \"54\": \"r32\", \"55\": \"r32\", \"56\": \"r32\", \"57\": \"r32\", \"58\": \"r32\" }, { \"23\": \"r33\", \"24\": \"r33\", \"25\": \"r33\", \"26\": \"r33\", \"27\": \"r33\", \"28\": \"r33\", \"29\": \"r33\", \"30\": \"r33\", \"31\": \"r33\", \"32\": \"r33\", \"33\": \"r33\", \"34\": \"r33\", \"35\": \"r33\", \"36\": \"r33\", \"37\": \"r33\", \"38\": \"r33\", \"39\": \"r33\", \"40\": \"r33\", \"41\": \"r33\", \"42\": \"r33\", \"43\": \"r33\", \"44\": \"r33\", \"45\": \"r33\", \"46\": \"r33\", \"47\": \"r33\", \"48\": \"r33\", \"49\": \"r33\", \"50\": \"r33\", \"51\": \"r33\", \"52\": \"r33\", \"53\": \"r33\", \"54\": \"r33\", \"55\": \"r33\", \"56\": \"r33\", \"57\": \"r33\", \"58\": \"r33\" }, { \"23\": \"r34\", \"24\": \"r34\", \"25\": \"r34\", \"26\": \"r34\", \"27\": \"r34\", \"28\": \"r34\", \"29\": \"r34\", \"30\": \"r34\", \"31\": \"r34\", \"32\": \"r34\", \"33\": \"r34\", \"34\": \"r34\", \"35\": \"r34\", \"36\": \"r34\", \"37\": \"r34\", \"38\": \"r34\", \"39\": \"r34\", \"40\": \"r34\", \"41\": \"r34\", \"42\": \"r34\", \"43\": \"r34\", \"44\": \"r34\", \"45\": \"r34\", \"46\": \"r34\", \"47\": \"r34\", \"48\": \"r34\", \"49\": \"r34\", \"50\": \"r34\", \"51\": \"r34\", \"52\": \"r34\", \"53\": \"r34\", \"54\": \"r34\", \"55\": \"r34\", \"56\": \"r34\", \"57\": \"r34\", \"58\": \"r34\" }, { \"23\": \"r35\", \"24\": \"r35\", \"25\": \"r35\", \"26\": \"r35\", \"27\": \"r35\", \"28\": \"r35\", \"29\": \"r35\", \"30\": \"r35\", \"31\": \"r35\", \"32\": \"r35\", \"33\": \"r35\", \"34\": \"r35\", \"35\": \"r35\", \"36\": \"r35\", \"37\": \"r35\", \"38\": \"r35\", \"39\": \"r35\", \"40\": \"r35\", \"41\": \"r35\", \"42\": \"r35\", \"43\": \"r35\", \"44\": \"r35\", \"45\": \"r35\", \"46\": \"r35\", \"47\": \"r35\", \"48\": \"r35\", \"49\": \"r35\", \"50\": \"r35\", \"51\": \"r35\", \"52\": \"r35\", \"53\": \"r35\", \"54\": \"r35\", \"55\": \"r35\", \"56\": \"r35\", \"57\": \"r35\", \"58\": \"r35\" }, { \"23\": \"r36\", \"24\": \"r36\", \"25\": \"r36\", \"26\": \"r36\", \"27\": \"r36\", \"28\": \"r36\", \"29\": \"r36\", \"30\": \"r36\", \"31\": \"r36\", \"32\": \"r36\", \"33\": \"r36\", \"34\": \"r36\", \"35\": \"r36\", \"36\": \"r36\", \"37\": \"r36\", \"38\": \"r36\", \"39\": \"r36\", \"40\": \"r36\", \"41\": \"r36\", \"42\": \"r36\", \"43\": \"r36\", \"44\": \"r36\", \"45\": \"r36\", \"46\": \"r36\", \"47\": \"r36\", \"48\": \"r36\", \"49\": \"r36\", \"50\": \"r36\", \"51\": \"r36\", \"52\": \"r36\", \"53\": \"r36\", \"54\": \"r36\", \"55\": \"r36\", \"56\": \"r36\", \"57\": \"r36\", \"58\": \"r36\" }, { \"10\": 70, \"18\": 65, \"19\": 66, \"21\": 67, \"22\": 69, \"24\": \"s28\", \"28\": \"s71\", \"35\": \"s29\", \"36\": \"s30\", \"37\": \"s31\", \"38\": \"s32\", \"39\": \"s33\", \"40\": \"s34\", \"41\": \"s35\", \"42\": \"s36\", \"43\": \"s37\", \"44\": \"s38\", \"45\": \"s39\", \"56\": \"r54\", \"58\": \"s68\" }, { \"10\": 70, \"18\": 83, \"19\": 66, \"21\": 67, \"22\": 69, \"24\": \"s28\", \"28\": \"s71\", \"35\": \"s29\", \"36\": \"s30\", \"37\": \"s31\", \"38\": \"s32\", \"39\": \"s33\", \"40\": \"s34\", \"41\": \"s35\", \"42\": \"s36\", \"43\": \"s37\", \"44\": \"s38\", \"45\": \"s39\", \"56\": \"r54\", \"58\": \"s68\" }, { \"23\": \"r47\", \"24\": \"r47\", \"25\": \"r47\", \"26\": \"r47\", \"27\": \"r47\", \"28\": \"r47\", \"29\": \"r47\", \"30\": \"r47\", \"31\": \"r47\", \"32\": \"r47\", \"33\": \"r47\", \"34\": \"r47\", \"35\": \"r47\", \"36\": \"r47\", \"37\": \"r47\", \"38\": \"r47\", \"39\": \"r47\", \"40\": \"r47\", \"41\": \"r47\", \"42\": \"r47\", \"43\": \"r47\", \"44\": \"r47\", \"45\": \"r47\", \"46\": \"r47\", \"47\": \"r47\", \"48\": \"r47\", \"49\": \"r47\", \"50\": \"r47\", \"51\": \"r47\", \"52\": \"r47\", \"53\": \"r47\", \"54\": \"r47\", \"55\": \"r47\", \"57\": \"r47\" }, { \"23\": \"r48\", \"24\": \"r48\", \"25\": \"r48\", \"26\": \"r48\", \"27\": \"r48\", \"28\": \"r48\", \"29\": \"r48\", \"30\": \"r48\", \"31\": \"r48\", \"32\": \"r48\", \"33\": \"r48\", \"34\": \"r48\", \"35\": \"r48\", \"36\": \"r48\", \"37\": \"r48\", \"38\": \"r48\", \"39\": \"r48\", \"40\": \"r48\", \"41\": \"r48\", \"42\": \"r48\", \"43\": \"r48\", \"44\": \"r48\", \"45\": \"r48\", \"46\": \"r48\", \"47\": \"r48\", \"48\": \"r48\", \"49\": \"r48\", \"50\": \"r48\", \"51\": \"r48\", \"52\": \"r48\", \"53\": \"r48\", \"54\": \"r48\", \"55\": \"r48\", \"57\": \"r48\" }, { \"4\": 85, \"5\": 5, \"6\": 6, \"24\": \"r10\", \"25\": \"r10\", \"26\": \"r10\", \"27\": \"r10\", \"28\": \"r10\", \"29\": \"r10\", \"30\": \"r10\", \"31\": \"r10\", \"32\": \"r10\", \"33\": \"r10\", \"34\": \"r10\", \"35\": \"r10\", \"36\": \"r10\", \"37\": \"r10\", \"38\": \"r10\", \"39\": \"r10\", \"40\": \"r10\", \"41\": \"r10\", \"42\": \"r10\", \"43\": \"r10\", \"44\": \"r10\", \"45\": \"r10\", \"52\": \"r10\", \"53\": \"r10\", \"54\": \"r10\", \"55\": \"r10\", \"57\": \"r10\" }, { \"4\": 87, \"5\": 5, \"6\": 6, \"24\": \"r10\", \"25\": \"r10\", \"26\": \"r10\", \"27\": \"r10\", \"28\": \"r10\", \"29\": \"r10\", \"30\": \"r10\", \"31\": \"r10\", \"32\": \"r10\", \"33\": \"r10\", \"34\": \"r10\", \"35\": \"r10\", \"36\": \"r10\", \"37\": \"r10\", \"38\": \"r10\", \"39\": \"r10\", \"40\": \"r10\", \"41\": \"r10\", \"42\": \"r10\", \"43\": \"r10\", \"44\": \"r10\", \"45\": \"r10\", \"52\": \"r10\", \"53\": \"r10\", \"54\": \"r10\", \"55\": \"r10\", \"57\": \"r10\" }, { \"4\": 89, \"5\": 5, \"6\": 6, \"24\": \"r10\", \"25\": \"r10\", \"26\": \"r10\", \"27\": \"r10\", \"28\": \"r10\", \"29\": \"r10\", \"30\": \"r10\", \"31\": \"r10\", \"32\": \"r10\", \"33\": \"r10\", \"34\": \"r10\", \"35\": \"r10\", \"36\": \"r10\", \"37\": \"r10\", \"38\": \"r10\", \"39\": \"r10\", \"40\": \"r10\", \"41\": \"r10\", \"42\": \"r10\", \"43\": \"r10\", \"44\": \"r10\", \"45\": \"r10\", \"52\": \"r10\", \"53\": \"r10\", \"54\": \"r10\", \"55\": \"r10\", \"57\": \"r10\" }, { \"23\": \"r13\", \"24\": \"r13\", \"25\": \"r13\", \"26\": \"r13\", \"27\": \"r13\", \"28\": \"r13\", \"29\": \"r13\", \"30\": \"r13\", \"31\": \"r13\", \"32\": \"r13\", \"33\": \"r13\", \"34\": \"r13\", \"35\": \"r13\", \"36\": \"r13\", \"37\": \"r13\", \"38\": \"r13\", \"39\": \"r13\", \"40\": \"r13\", \"41\": \"r13\", \"42\": \"r13\", \"43\": \"r13\", \"44\": \"r13\", \"45\": \"r13\", \"52\": \"r13\", \"53\": \"r13\", \"54\": \"r13\", \"55\": \"r13\", \"57\": \"r13\" }, { \"23\": \"r37\", \"24\": \"r37\", \"25\": \"r37\", \"26\": \"r37\", \"27\": \"r37\", \"28\": \"r37\", \"29\": \"r37\", \"30\": \"r37\", \"31\": \"r37\", \"32\": \"r37\", \"33\": \"r37\", \"34\": \"r37\", \"35\": \"r37\", \"36\": \"r37\", \"37\": \"r37\", \"38\": \"r37\", \"39\": \"r37\", \"40\": \"r37\", \"41\": \"r37\", \"42\": \"r37\", \"43\": \"r37\", \"44\": \"r37\", \"45\": \"r37\", \"52\": \"r37\", \"53\": \"r37\", \"54\": \"r37\", \"55\": \"r37\", \"57\": \"r37\" }, { \"23\": \"r39\", \"24\": \"r39\", \"25\": \"r39\", \"26\": \"r39\", \"27\": \"r39\", \"28\": \"r39\", \"29\": \"r39\", \"30\": \"r39\", \"31\": \"r39\", \"32\": \"r39\", \"33\": \"r39\", \"34\": \"r39\", \"35\": \"r39\", \"36\": \"r39\", \"37\": \"r39\", \"38\": \"r39\", \"39\": \"r39\", \"40\": \"r39\", \"41\": \"r39\", \"42\": \"r39\", \"43\": \"r39\", \"44\": \"r39\", \"45\": \"r39\", \"46\": \"s56\", \"52\": \"r39\", \"53\": \"r39\", \"54\": \"r39\", \"55\": \"r39\", \"57\": \"r39\" }, { \"23\": \"r41\", \"24\": \"r41\", \"25\": \"r41\", \"26\": \"r41\", \"27\": \"r41\", \"28\": \"r41\", \"29\": \"r41\", \"30\": \"r41\", \"31\": \"r41\", \"32\": \"r41\", \"33\": \"r41\", \"34\": \"r41\", \"35\": \"r41\", \"36\": \"r41\", \"37\": \"r41\", \"38\": \"r41\", \"39\": \"r41\", \"40\": \"r41\", \"41\": \"r41\", \"42\": \"r41\", \"43\": \"r41\", \"44\": \"r41\", \"45\": \"r41\", \"46\": \"r41\", \"52\": \"r41\", \"53\": \"r41\", \"54\": \"r41\", \"55\": \"r41\", \"57\": \"r41\" }, { \"23\": \"r42\", \"24\": \"r42\", \"25\": \"r42\", \"26\": \"r42\", \"27\": \"r42\", \"28\": \"r42\", \"29\": \"r42\", \"30\": \"r42\", \"31\": \"r42\", \"32\": \"r42\", \"33\": \"r42\", \"34\": \"r42\", \"35\": \"r42\", \"36\": \"r42\", \"37\": \"r42\", \"38\": \"r42\", \"39\": \"r42\", \"40\": \"r42\", \"41\": \"r42\", \"42\": \"r42\", \"43\": \"r42\", \"44\": \"r42\", \"45\": \"r42\", \"46\": \"r42\", \"52\": \"r42\", \"53\": \"r42\", \"54\": \"r42\", \"55\": \"r42\", \"57\": \"r42\" }, { \"23\": \"r43\", \"24\": \"r43\", \"25\": \"r43\", \"26\": \"r43\", \"27\": \"r43\", \"28\": \"r43\", \"29\": \"r43\", \"30\": \"r43\", \"31\": \"r43\", \"32\": \"r43\", \"33\": \"r43\", \"34\": \"r43\", \"35\": \"r43\", \"36\": \"r43\", \"37\": \"r43\", \"38\": \"r43\", \"39\": \"r43\", \"40\": \"r43\", \"41\": \"r43\", \"42\": \"r43\", \"43\": \"r43\", \"44\": \"r43\", \"45\": \"r43\", \"46\": \"r43\", \"52\": \"r43\", \"53\": \"r43\", \"54\": \"r43\", \"55\": \"r43\", \"57\": \"r43\" }, { \"23\": \"r44\", \"24\": \"r44\", \"25\": \"r44\", \"26\": \"r44\", \"27\": \"r44\", \"28\": \"r44\", \"29\": \"r44\", \"30\": \"r44\", \"31\": \"r44\", \"32\": \"r44\", \"33\": \"r44\", \"34\": \"r44\", \"35\": \"r44\", \"36\": \"r44\", \"37\": \"r44\", \"38\": \"r44\", \"39\": \"r44\", \"40\": \"r44\", \"41\": \"r44\", \"42\": \"r44\", \"43\": \"r44\", \"44\": \"r44\", \"45\": \"r44\", \"46\": \"r44\", \"52\": \"r44\", \"53\": \"r44\", \"54\": \"r44\", \"55\": \"r44\", \"57\": \"r44\" }, { \"23\": \"r45\", \"24\": \"r45\", \"25\": \"r45\", \"26\": \"r45\", \"27\": \"r45\", \"28\": \"r45\", \"29\": \"r45\", \"30\": \"r45\", \"31\": \"r45\", \"32\": \"r45\", \"33\": \"r45\", \"34\": \"r45\", \"35\": \"r45\", \"36\": \"r45\", \"37\": \"r45\", \"38\": \"r45\", \"39\": \"r45\", \"40\": \"r45\", \"41\": \"r45\", \"42\": \"r45\", \"43\": \"r45\", \"44\": \"r45\", \"45\": \"r45\", \"46\": \"r45\", \"52\": \"r45\", \"53\": \"r45\", \"54\": \"r45\", \"55\": \"r45\", \"57\": \"r45\" }, { \"23\": \"r46\", \"24\": \"r46\", \"25\": \"r46\", \"26\": \"r46\", \"27\": \"r46\", \"28\": \"r46\", \"29\": \"r46\", \"30\": \"r46\", \"31\": \"r46\", \"32\": \"r46\", \"33\": \"r46\", \"34\": \"r46\", \"35\": \"r46\", \"36\": \"r46\", \"37\": \"r46\", \"38\": \"r46\", \"39\": \"r46\", \"40\": \"r46\", \"41\": \"r46\", \"42\": \"r46\", \"43\": \"r46\", \"44\": \"r46\", \"45\": \"r46\", \"46\": \"r46\", \"52\": \"r46\", \"53\": \"r46\", \"54\": \"r46\", \"55\": \"r46\", \"57\": \"r46\" }, { \"23\": \"r40\", \"24\": \"r40\", \"25\": \"r40\", \"26\": \"r40\", \"27\": \"r40\", \"28\": \"r40\", \"29\": \"r40\", \"30\": \"r40\", \"31\": \"r40\", \"32\": \"r40\", \"33\": \"r40\", \"34\": \"r40\", \"35\": \"r40\", \"36\": \"r40\", \"37\": \"r40\", \"38\": \"r40\", \"39\": \"r40\", \"40\": \"r40\", \"41\": \"r40\", \"42\": \"r40\", \"43\": \"r40\", \"44\": \"r40\", \"45\": \"r40\", \"52\": \"r40\", \"53\": \"r40\", \"54\": \"r40\", \"55\": \"r40\", \"57\": \"r40\" }, { \"25\": \"s12\", \"31\": \"s58\" }, { \"23\": \"r18\", \"24\": \"r18\", \"25\": \"r18\", \"26\": \"r18\", \"27\": \"r18\", \"28\": \"r18\", \"29\": \"r18\", \"30\": \"r18\", \"31\": \"r18\", \"32\": \"r18\", \"33\": \"r18\", \"34\": \"r18\", \"35\": \"r18\", \"36\": \"r18\", \"37\": \"r18\", \"38\": \"r18\", \"39\": \"r18\", \"40\": \"r18\", \"41\": \"r18\", \"42\": \"r18\", \"43\": \"r18\", \"44\": \"r18\", \"45\": \"r18\", \"52\": \"r18\", \"53\": \"r18\", \"54\": \"r18\", \"55\": \"r18\", \"57\": \"r18\" }, { \"25\": \"s12\", \"31\": \"s60\" }, { \"23\": \"r19\", \"24\": \"r19\", \"25\": \"r19\", \"26\": \"r19\", \"27\": \"r19\", \"28\": \"r19\", \"29\": \"r19\", \"30\": \"r19\", \"31\": \"r19\", \"32\": \"r19\", \"33\": \"r19\", \"34\": \"r19\", \"35\": \"r19\", \"36\": \"r19\", \"37\": \"r19\", \"38\": \"r19\", \"39\": \"r19\", \"40\": \"r19\", \"41\": \"r19\", \"42\": \"r19\", \"43\": \"r19\", \"44\": \"r19\", \"45\": \"r19\", \"52\": \"r19\", \"53\": \"r19\", \"54\": \"r19\", \"55\": \"r19\", \"57\": \"r19\" }, { \"25\": \"s12\", \"31\": \"s62\" }, { \"23\": \"r20\", \"24\": \"r20\", \"25\": \"r20\", \"26\": \"r20\", \"27\": \"r20\", \"28\": \"r20\", \"29\": \"r20\", \"30\": \"r20\", \"31\": \"r20\", \"32\": \"r20\", \"33\": \"r20\", \"34\": \"r20\", \"35\": \"r20\", \"36\": \"r20\", \"37\": \"r20\", \"38\": \"r20\", \"39\": \"r20\", \"40\": \"r20\", \"41\": \"r20\", \"42\": \"r20\", \"43\": \"r20\", \"44\": \"r20\", \"45\": \"r20\", \"52\": \"r20\", \"53\": \"r20\", \"54\": \"r20\", \"55\": \"r20\", \"57\": \"r20\" }, { \"25\": \"s12\", \"31\": \"s64\" }, { \"23\": \"r21\", \"24\": \"r21\", \"25\": \"r21\", \"26\": \"r21\", \"27\": \"r21\", \"28\": \"r21\", \"29\": \"r21\", \"30\": \"r21\", \"31\": \"r21\", \"32\": \"r21\", \"33\": \"r21\", \"34\": \"r21\", \"35\": \"r21\", \"36\": \"r21\", \"37\": \"r21\", \"38\": \"r21\", \"39\": \"r21\", \"40\": \"r21\", \"41\": \"r21\", \"42\": \"r21\", \"43\": \"r21\", \"44\": \"r21\", \"45\": \"r21\", \"52\": \"r21\", \"53\": \"r21\", \"54\": \"r21\", \"55\": \"r21\", \"57\": \"r21\" }, { \"56\": \"s72\" }, { \"56\": \"r55\" }, { \"10\": 70, \"20\": 73, \"21\": 75, \"22\": 76, \"24\": \"s28\", \"28\": \"s71\", \"35\": \"s29\", \"36\": \"s30\", \"37\": \"s31\", \"38\": \"s32\", \"39\": \"s33\", \"40\": \"s34\", \"41\": \"s35\", \"42\": \"s36\", \"43\": \"s37\", \"44\": \"s38\", \"45\": \"s39\", \"56\": \"r56\", \"58\": \"s74\" }, { \"24\": \"r62\", \"28\": \"r62\", \"35\": \"r62\", \"36\": \"r62\", \"37\": \"r62\", \"38\": \"r62\", \"39\": \"r62\", \"40\": \"r62\", \"41\": \"r62\", \"42\": \"r62\", \"43\": \"r62\", \"44\": \"r62\", \"45\": \"r62\", \"56\": \"r62\", \"58\": \"r62\" }, { \"24\": \"r63\", \"28\": \"r63\", \"35\": \"r63\", \"36\": \"r63\", \"37\": \"r63\", \"38\": \"r63\", \"39\": \"r63\", \"40\": \"r63\", \"41\": \"r63\", \"42\": \"r63\", \"43\": \"r63\", \"44\": \"r63\", \"45\": \"r63\", \"56\": \"r63\", \"58\": \"r63\" }, { \"24\": \"r64\", \"28\": \"r64\", \"35\": \"r64\", \"36\": \"r64\", \"37\": \"r64\", \"38\": \"r64\", \"39\": \"r64\", \"40\": \"r64\", \"41\": \"r64\", \"42\": \"r64\", \"43\": \"r64\", \"44\": \"r64\", \"45\": \"r64\", \"56\": \"r64\", \"58\": \"r64\" }, { \"24\": \"r65\", \"28\": \"r65\", \"35\": \"r65\", \"36\": \"r65\", \"37\": \"r65\", \"38\": \"r65\", \"39\": \"r65\", \"40\": \"r65\", \"41\": \"r65\", \"42\": \"r65\", \"43\": \"r65\", \"44\": \"r65\", \"45\": \"r65\", \"56\": \"r65\", \"58\": \"r65\" }, { \"23\": \"r52\", \"24\": \"r52\", \"25\": \"r52\", \"26\": \"r52\", \"27\": \"r52\", \"28\": \"r52\", \"29\": \"r52\", \"30\": \"r52\", \"31\": \"r52\", \"32\": \"r52\", \"33\": \"r52\", \"34\": \"r52\", \"35\": \"r52\", \"36\": \"r52\", \"37\": \"r52\", \"38\": \"r52\", \"39\": \"r52\", \"40\": \"r52\", \"41\": \"r52\", \"42\": \"r52\", \"43\": \"r52\", \"44\": \"r52\", \"45\": \"r52\", \"46\": \"r52\", \"47\": \"r52\", \"48\": \"r52\", \"49\": \"r52\", \"50\": \"r52\", \"51\": \"r52\", \"52\": \"r52\", \"53\": \"r52\", \"54\": \"r52\", \"55\": \"r52\", \"57\": \"r52\" }, { \"56\": \"r57\" }, { \"10\": 70, \"21\": 77, \"22\": 69, \"24\": \"s28\", \"28\": \"s71\", \"35\": \"s29\", \"36\": \"s30\", \"37\": \"s31\", \"38\": \"s32\", \"39\": \"s33\", \"40\": \"s34\", \"41\": \"s35\", \"42\": \"s36\", \"43\": \"s37\", \"44\": \"s38\", \"45\": \"s39\", \"56\": \"r62\", \"58\": \"s68\" }, { \"56\": \"r59\" }, { \"10\": 70, \"20\": 79, \"21\": 75, \"22\": 76, \"24\": \"s28\", \"28\": \"s71\", \"35\": \"s29\", \"36\": \"s30\", \"37\": \"s31\", \"38\": \"s32\", \"39\": \"s33\", \"40\": \"s34\", \"41\": \"s35\", \"42\": \"s36\", \"43\": \"s37\", \"44\": \"s38\", \"45\": \"s39\", \"56\": \"r63\", \"58\": \"s80\" }, { \"10\": 70, \"18\": 78, \"19\": 66, \"21\": 67, \"22\": 69, \"24\": \"s28\", \"28\": \"s71\", \"35\": \"s29\", \"36\": \"s30\", \"37\": \"s31\", \"38\": \"s32\", \"39\": \"s33\", \"40\": \"s34\", \"41\": \"s35\", \"42\": \"s36\", \"43\": \"s37\", \"44\": \"s38\", \"45\": \"s39\", \"56\": \"r54\", \"58\": \"s68\" }, { \"56\": \"r58\" }, { \"56\": \"r60\" }, { \"10\": 70, \"21\": 81, \"22\": 69, \"24\": \"s28\", \"28\": \"s71\", \"35\": \"s29\", \"36\": \"s30\", \"37\": \"s31\", \"38\": \"s32\", \"39\": \"s33\", \"40\": \"s34\", \"41\": \"s35\", \"42\": \"s36\", \"43\": \"s37\", \"44\": \"s38\", \"45\": \"s39\", \"56\": \"r62\", \"58\": \"s68\" }, { \"10\": 70, \"18\": 82, \"19\": 66, \"21\": 67, \"22\": 69, \"24\": \"s28\", \"28\": \"s71\", \"35\": \"s29\", \"36\": \"s30\", \"37\": \"s31\", \"38\": \"s32\", \"39\": \"s33\", \"40\": \"s34\", \"41\": \"s35\", \"42\": \"s36\", \"43\": \"s37\", \"44\": \"s38\", \"45\": \"s39\", \"56\": \"r54\", \"58\": \"s68\" }, { \"56\": \"r61\" }, { \"56\": \"s84\" }, { \"23\": \"r53\", \"24\": \"r53\", \"25\": \"r53\", \"26\": \"r53\", \"27\": \"r53\", \"28\": \"r53\", \"29\": \"r53\", \"30\": \"r53\", \"31\": \"r53\", \"32\": \"r53\", \"33\": \"r53\", \"34\": \"r53\", \"35\": \"r53\", \"36\": \"r53\", \"37\": \"r53\", \"38\": \"r53\", \"39\": \"r53\", \"40\": \"r53\", \"41\": \"r53\", \"42\": \"r53\", \"43\": \"r53\", \"44\": \"r53\", \"45\": \"r53\", \"46\": \"r53\", \"47\": \"r53\", \"48\": \"r53\", \"49\": \"r53\", \"50\": \"r53\", \"51\": \"r53\", \"52\": \"r53\", \"53\": \"r53\", \"54\": \"r53\", \"55\": \"r53\", \"57\": \"r53\" }, { \"25\": \"s12\", \"31\": \"s86\" }, { \"23\": \"r49\", \"24\": \"r49\", \"25\": \"r49\", \"26\": \"r49\", \"27\": \"r49\", \"28\": \"r49\", \"29\": \"r49\", \"30\": \"r49\", \"31\": \"r49\", \"32\": \"r49\", \"33\": \"r49\", \"34\": \"r49\", \"35\": \"r49\", \"36\": \"r49\", \"37\": \"r49\", \"38\": \"r49\", \"39\": \"r49\", \"40\": \"r49\", \"41\": \"r49\", \"42\": \"r49\", \"43\": \"r49\", \"44\": \"r49\", \"45\": \"r49\", \"46\": \"r49\", \"47\": \"r49\", \"48\": \"r49\", \"49\": \"r49\", \"50\": \"r49\", \"51\": \"r49\", \"52\": \"r49\", \"53\": \"r49\", \"54\": \"r49\", \"55\": \"r49\", \"57\": \"r49\" }, { \"25\": \"s12\", \"31\": \"s88\" }, { \"23\": \"r50\", \"24\": \"r50\", \"25\": \"r50\", \"26\": \"r50\", \"27\": \"r50\", \"28\": \"r50\", \"29\": \"r50\", \"30\": \"r50\", \"31\": \"r50\", \"32\": \"r50\", \"33\": \"r50\", \"34\": \"r50\", \"35\": \"r50\", \"36\": \"r50\", \"37\": \"r50\", \"38\": \"r50\", \"39\": \"r50\", \"40\": \"r50\", \"41\": \"r50\", \"42\": \"r50\", \"43\": \"r50\", \"44\": \"r50\", \"45\": \"r50\", \"46\": \"r50\", \"47\": \"r50\", \"48\": \"r50\", \"49\": \"r50\", \"50\": \"r50\", \"51\": \"r50\", \"52\": \"r50\", \"53\": \"r50\", \"54\": \"r50\", \"55\": \"r50\", \"57\": \"r50\" }, { \"25\": \"s12\", \"31\": \"s90\" }, { \"23\": \"r51\", \"24\": \"r51\", \"25\": \"r51\", \"26\": \"r51\", \"27\": \"r51\", \"28\": \"r51\", \"29\": \"r51\", \"30\": \"r51\", \"31\": \"r51\", \"32\": \"r51\", \"33\": \"r51\", \"34\": \"r51\", \"35\": \"r51\", \"36\": \"r51\", \"37\": \"r51\", \"38\": \"r51\", \"39\": \"r51\", \"40\": \"r51\", \"41\": \"r51\", \"42\": \"r51\", \"43\": \"r51\", \"44\": \"r51\", \"45\": \"r51\", \"46\": \"r51\", \"47\": \"r51\", \"48\": \"r51\", \"49\": \"r51\", \"50\": \"r51\", \"51\": \"r51\", \"52\": \"r51\", \"53\": \"r51\", \"54\": \"r51\", \"55\": \"r51\", \"57\": \"r51\" }];\n\n/**\n * Parsing stack.\n */\nvar stack = [];\n\n/**\n * Tokenizer instance.\n */\nvar tokenizer = void 0;\n/**\n * Generic tokenizer used by the parser in the Syntax tool.\n *\n * https://www.npmjs.com/package/syntax-cli\n *\n * See `--custom-tokinzer` to skip this generation, and use a custom one.\n */\n\nvar lexRules = [[/^#[^\\n]+/, function () {/* skip comments */}], [/^\\s+/, function () {/* skip whitespace */}], [/^-/, function () {\n return 'DASH';\n}], [/^\\//, function () {\n return 'CHAR';\n}], [/^#/, function () {\n return 'CHAR';\n}], [/^\\|/, function () {\n return 'CHAR';\n}], [/^\\./, function () {\n return 'CHAR';\n}], [/^\\{/, function () {\n return 'CHAR';\n}], [/^\\{\\d+\\}/, function () {\n return 'RANGE_EXACT';\n}], [/^\\{\\d+,\\}/, function () {\n return 'RANGE_OPEN';\n}], [/^\\{\\d+,\\d+\\}/, function () {\n return 'RANGE_CLOSED';\n}], [/^\\\\k<(([\\u0041-\\u005a\\u0061-\\u007a\\u00aa\\u00b5\\u00ba\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376-\\u0377\\u037a-\\u037d\\u037f\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u052f\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05d0-\\u05ea\\u05ef-\\u05f2\\u0620-\\u064a\\u066e-\\u066f\\u0671-\\u06d3\\u06d5\\u06e5-\\u06e6\\u06ee-\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4-\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086a\\u08a0-\\u08b4\\u08b6-\\u08bd\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098c\\u098f-\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc-\\u09dd\\u09df-\\u09e1\\u09f0-\\u09f1\\u09fc\\u0a05-\\u0a0a\\u0a0f-\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32-\\u0a33\\u0a35-\\u0a36\\u0a38-\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2-\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0-\\u0ae1\\u0af9\\u0b05-\\u0b0c\\u0b0f-\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32-\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c-\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99-\\u0b9a\\u0b9c\\u0b9e-\\u0b9f\\u0ba3-\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d\\u0c58-\\u0c5a\\u0c60-\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cde\\u0ce0-\\u0ce1\\u0cf1-\\u0cf2\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d54-\\u0d56\\u0d5f-\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32-\\u0e33\\u0e40-\\u0e46\\u0e81-\\u0e82\\u0e84\\u0e86-\\u0e8a\\u0e8c-\\u0ea3\\u0ea5\\u0ea7-\\u0eb0\\u0eb2-\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065-\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f5\\u13f8-\\u13fd\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f8\\u1700-\\u170c\\u170e-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1878\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4b\\u1b83-\\u1ba0\\u1bae-\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1c80-\\u1c88\\u1c90-\\u1cba\\u1cbd-\\u1cbf\\u1ce9-\\u1cec\\u1cee-\\u1cf3\\u1cf5-\\u1cf6\\u1cfa\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2118-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cee\\u2cf2-\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309b-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312f\\u3131-\\u318e\\u31a0-\\u31ba\\u31f0-\\u31ff\\u3400-\\u4db5\\u4e00-\\u9fef\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a-\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7bf\\ua7c2-\\ua7c6\\ua7f7-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua8fd-\\ua8fe\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\ua9e0-\\ua9e4\\ua9e6-\\ua9ef\\ua9fa-\\ua9fe\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa7e-\\uaaaf\\uaab1\\uaab5-\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab67\\uab70-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40-\\ufb41\\ufb43-\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc]|\\ud800[\\udc00-\\udc0b\\udc0d-\\udc26\\udc28-\\udc3a\\udc3c-\\udc3d\\udc3f-\\udc4d\\udc50-\\udc5d\\udc80-\\udcfa\\udd40-\\udd74\\ude80-\\ude9c\\udea0-\\uded0\\udf00-\\udf1f\\udf2d-\\udf4a\\udf50-\\udf75\\udf80-\\udf9d\\udfa0-\\udfc3\\udfc8-\\udfcf\\udfd1-\\udfd5]|\\ud801[\\udc00-\\udc9d\\udcb0-\\udcd3\\udcd8-\\udcfb\\udd00-\\udd27\\udd30-\\udd63\\ude00-\\udf36\\udf40-\\udf55\\udf60-\\udf67]|\\ud802[\\udc00-\\udc05\\udc08\\udc0a-\\udc35\\udc37-\\udc38\\udc3c\\udc3f-\\udc55\\udc60-\\udc76\\udc80-\\udc9e\\udce0-\\udcf2\\udcf4-\\udcf5\\udd00-\\udd15\\udd20-\\udd39\\udd80-\\uddb7\\uddbe-\\uddbf\\ude00\\ude10-\\ude13\\ude15-\\ude17\\ude19-\\ude35\\ude60-\\ude7c\\ude80-\\ude9c\\udec0-\\udec7\\udec9-\\udee4\\udf00-\\udf35\\udf40-\\udf55\\udf60-\\udf72\\udf80-\\udf91]|\\ud803[\\udc00-\\udc48\\udc80-\\udcb2\\udcc0-\\udcf2\\udd00-\\udd23\\udf00-\\udf1c\\udf27\\udf30-\\udf45\\udfe0-\\udff6]|\\ud804[\\udc03-\\udc37\\udc83-\\udcaf\\udcd0-\\udce8\\udd03-\\udd26\\udd44\\udd50-\\udd72\\udd76\\udd83-\\uddb2\\uddc1-\\uddc4\\uddda\\udddc\\ude00-\\ude11\\ude13-\\ude2b\\ude80-\\ude86\\ude88\\ude8a-\\ude8d\\ude8f-\\ude9d\\ude9f-\\udea8\\udeb0-\\udede\\udf05-\\udf0c\\udf0f-\\udf10\\udf13-\\udf28\\udf2a-\\udf30\\udf32-\\udf33\\udf35-\\udf39\\udf3d\\udf50\\udf5d-\\udf61]|\\ud805[\\udc00-\\udc34\\udc47-\\udc4a\\udc5f\\udc80-\\udcaf\\udcc4-\\udcc5\\udcc7\\udd80-\\uddae\\uddd8-\\udddb\\ude00-\\ude2f\\ude44\\ude80-\\udeaa\\udeb8\\udf00-\\udf1a]|\\ud806[\\udc00-\\udc2b\\udca0-\\udcdf\\udcff\\udda0-\\udda7\\uddaa-\\uddd0\\udde1\\udde3\\ude00\\ude0b-\\ude32\\ude3a\\ude50\\ude5c-\\ude89\\ude9d\\udec0-\\udef8]|\\ud807[\\udc00-\\udc08\\udc0a-\\udc2e\\udc40\\udc72-\\udc8f\\udd00-\\udd06\\udd08-\\udd09\\udd0b-\\udd30\\udd46\\udd60-\\udd65\\udd67-\\udd68\\udd6a-\\udd89\\udd98\\udee0-\\udef2]|\\ud808[\\udc00-\\udf99]|\\ud809[\\udc00-\\udc6e\\udc80-\\udd43]|\\ud80c[\\udc00-\\udfff]|\\ud80d[\\udc00-\\udc2e]|\\ud811[\\udc00-\\ude46]|\\ud81a[\\udc00-\\ude38\\ude40-\\ude5e\\uded0-\\udeed\\udf00-\\udf2f\\udf40-\\udf43\\udf63-\\udf77\\udf7d-\\udf8f]|\\ud81b[\\ude40-\\ude7f\\udf00-\\udf4a\\udf50\\udf93-\\udf9f\\udfe0-\\udfe1\\udfe3]|\\ud81c[\\udc00-\\udfff]|\\ud81d[\\udc00-\\udfff]|\\ud81e[\\udc00-\\udfff]|\\ud81f[\\udc00-\\udfff]|\\ud820[\\udc00-\\udfff]|\\ud821[\\udc00-\\udff7]|\\ud822[\\udc00-\\udef2]|\\ud82c[\\udc00-\\udd1e\\udd50-\\udd52\\udd64-\\udd67\\udd70-\\udefb]|\\ud82f[\\udc00-\\udc6a\\udc70-\\udc7c\\udc80-\\udc88\\udc90-\\udc99]|\\ud835[\\udc00-\\udc54\\udc56-\\udc9c\\udc9e-\\udc9f\\udca2\\udca5-\\udca6\\udca9-\\udcac\\udcae-\\udcb9\\udcbb\\udcbd-\\udcc3\\udcc5-\\udd05\\udd07-\\udd0a\\udd0d-\\udd14\\udd16-\\udd1c\\udd1e-\\udd39\\udd3b-\\udd3e\\udd40-\\udd44\\udd46\\udd4a-\\udd50\\udd52-\\udea5\\udea8-\\udec0\\udec2-\\udeda\\udedc-\\udefa\\udefc-\\udf14\\udf16-\\udf34\\udf36-\\udf4e\\udf50-\\udf6e\\udf70-\\udf88\\udf8a-\\udfa8\\udfaa-\\udfc2\\udfc4-\\udfcb]|\\ud838[\\udd00-\\udd2c\\udd37-\\udd3d\\udd4e\\udec0-\\udeeb]|\\ud83a[\\udc00-\\udcc4\\udd00-\\udd43\\udd4b]|\\ud83b[\\ude00-\\ude03\\ude05-\\ude1f\\ude21-\\ude22\\ude24\\ude27\\ude29-\\ude32\\ude34-\\ude37\\ude39\\ude3b\\ude42\\ude47\\ude49\\ude4b\\ude4d-\\ude4f\\ude51-\\ude52\\ude54\\ude57\\ude59\\ude5b\\ude5d\\ude5f\\ude61-\\ude62\\ude64\\ude67-\\ude6a\\ude6c-\\ude72\\ude74-\\ude77\\ude79-\\ude7c\\ude7e\\ude80-\\ude89\\ude8b-\\ude9b\\udea1-\\udea3\\udea5-\\udea9\\udeab-\\udebb]|\\ud840[\\udc00-\\udfff]|\\ud841[\\udc00-\\udfff]|\\ud842[\\udc00-\\udfff]|\\ud843[\\udc00-\\udfff]|\\ud844[\\udc00-\\udfff]|\\ud845[\\udc00-\\udfff]|\\ud846[\\udc00-\\udfff]|\\ud847[\\udc00-\\udfff]|\\ud848[\\udc00-\\udfff]|\\ud849[\\udc00-\\udfff]|\\ud84a[\\udc00-\\udfff]|\\ud84b[\\udc00-\\udfff]|\\ud84c[\\udc00-\\udfff]|\\ud84d[\\udc00-\\udfff]|\\ud84e[\\udc00-\\udfff]|\\ud84f[\\udc00-\\udfff]|\\ud850[\\udc00-\\udfff]|\\ud851[\\udc00-\\udfff]|\\ud852[\\udc00-\\udfff]|\\ud853[\\udc00-\\udfff]|\\ud854[\\udc00-\\udfff]|\\ud855[\\udc00-\\udfff]|\\ud856[\\udc00-\\udfff]|\\ud857[\\udc00-\\udfff]|\\ud858[\\udc00-\\udfff]|\\ud859[\\udc00-\\udfff]|\\ud85a[\\udc00-\\udfff]|\\ud85b[\\udc00-\\udfff]|\\ud85c[\\udc00-\\udfff]|\\ud85d[\\udc00-\\udfff]|\\ud85e[\\udc00-\\udfff]|\\ud85f[\\udc00-\\udfff]|\\ud860[\\udc00-\\udfff]|\\ud861[\\udc00-\\udfff]|\\ud862[\\udc00-\\udfff]|\\ud863[\\udc00-\\udfff]|\\ud864[\\udc00-\\udfff]|\\ud865[\\udc00-\\udfff]|\\ud866[\\udc00-\\udfff]|\\ud867[\\udc00-\\udfff]|\\ud868[\\udc00-\\udfff]|\\ud869[\\udc00-\\uded6\\udf00-\\udfff]|\\ud86a[\\udc00-\\udfff]|\\ud86b[\\udc00-\\udfff]|\\ud86c[\\udc00-\\udfff]|\\ud86d[\\udc00-\\udf34\\udf40-\\udfff]|\\ud86e[\\udc00-\\udc1d\\udc20-\\udfff]|\\ud86f[\\udc00-\\udfff]|\\ud870[\\udc00-\\udfff]|\\ud871[\\udc00-\\udfff]|\\ud872[\\udc00-\\udfff]|\\ud873[\\udc00-\\udea1\\udeb0-\\udfff]|\\ud874[\\udc00-\\udfff]|\\ud875[\\udc00-\\udfff]|\\ud876[\\udc00-\\udfff]|\\ud877[\\udc00-\\udfff]|\\ud878[\\udc00-\\udfff]|\\ud879[\\udc00-\\udfff]|\\ud87a[\\udc00-\\udfe0]|\\ud87e[\\udc00-\\ude1d])|[$_]|(\\\\u[0-9a-fA-F]{4}|\\\\u\\{[0-9a-fA-F]{1,}\\}))(([\\u0030-\\u0039\\u0041-\\u005a\\u005f\\u0061-\\u007a\\u00aa\\u00b5\\u00b7\\u00ba\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0300-\\u0374\\u0376-\\u0377\\u037a-\\u037d\\u037f\\u0386-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u0483-\\u0487\\u048a-\\u052f\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u0591-\\u05bd\\u05bf\\u05c1-\\u05c2\\u05c4-\\u05c5\\u05c7\\u05d0-\\u05ea\\u05ef-\\u05f2\\u0610-\\u061a\\u0620-\\u0669\\u066e-\\u06d3\\u06d5-\\u06dc\\u06df-\\u06e8\\u06ea-\\u06fc\\u06ff\\u0710-\\u074a\\u074d-\\u07b1\\u07c0-\\u07f5\\u07fa\\u07fd\\u0800-\\u082d\\u0840-\\u085b\\u0860-\\u086a\\u08a0-\\u08b4\\u08b6-\\u08bd\\u08d3-\\u08e1\\u08e3-\\u0963\\u0966-\\u096f\\u0971-\\u0983\\u0985-\\u098c\\u098f-\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bc-\\u09c4\\u09c7-\\u09c8\\u09cb-\\u09ce\\u09d7\\u09dc-\\u09dd\\u09df-\\u09e3\\u09e6-\\u09f1\\u09fc\\u09fe\\u0a01-\\u0a03\\u0a05-\\u0a0a\\u0a0f-\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32-\\u0a33\\u0a35-\\u0a36\\u0a38-\\u0a39\\u0a3c\\u0a3e-\\u0a42\\u0a47-\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a59-\\u0a5c\\u0a5e\\u0a66-\\u0a75\\u0a81-\\u0a83\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2-\\u0ab3\\u0ab5-\\u0ab9\\u0abc-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ad0\\u0ae0-\\u0ae3\\u0ae6-\\u0aef\\u0af9-\\u0aff\\u0b01-\\u0b03\\u0b05-\\u0b0c\\u0b0f-\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32-\\u0b33\\u0b35-\\u0b39\\u0b3c-\\u0b44\\u0b47-\\u0b48\\u0b4b-\\u0b4d\\u0b56-\\u0b57\\u0b5c-\\u0b5d\\u0b5f-\\u0b63\\u0b66-\\u0b6f\\u0b71\\u0b82-\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99-\\u0b9a\\u0b9c\\u0b9e-\\u0b9f\\u0ba3-\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd0\\u0bd7\\u0be6-\\u0bef\\u0c00-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55-\\u0c56\\u0c58-\\u0c5a\\u0c60-\\u0c63\\u0c66-\\u0c6f\\u0c80-\\u0c83\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbc-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5-\\u0cd6\\u0cde\\u0ce0-\\u0ce3\\u0ce6-\\u0cef\\u0cf1-\\u0cf2\\u0d00-\\u0d03\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4e\\u0d54-\\u0d57\\u0d5f-\\u0d63\\u0d66-\\u0d6f\\u0d7a-\\u0d7f\\u0d82-\\u0d83\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0de6-\\u0def\\u0df2-\\u0df3\\u0e01-\\u0e3a\\u0e40-\\u0e4e\\u0e50-\\u0e59\\u0e81-\\u0e82\\u0e84\\u0e86-\\u0e8a\\u0e8c-\\u0ea3\\u0ea5\\u0ea7-\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0ec8-\\u0ecd\\u0ed0-\\u0ed9\\u0edc-\\u0edf\\u0f00\\u0f18-\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e-\\u0f47\\u0f49-\\u0f6c\\u0f71-\\u0f84\\u0f86-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u1000-\\u1049\\u1050-\\u109d\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u135d-\\u135f\\u1369-\\u1371\\u1380-\\u138f\\u13a0-\\u13f5\\u13f8-\\u13fd\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f8\\u1700-\\u170c\\u170e-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176c\\u176e-\\u1770\\u1772-\\u1773\\u1780-\\u17d3\\u17d7\\u17dc-\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u1810-\\u1819\\u1820-\\u1878\\u1880-\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u19d0-\\u19da\\u1a00-\\u1a1b\\u1a20-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1aa7\\u1ab0-\\u1abd\\u1b00-\\u1b4b\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1bf3\\u1c00-\\u1c37\\u1c40-\\u1c49\\u1c4d-\\u1c7d\\u1c80-\\u1c88\\u1c90-\\u1cba\\u1cbd-\\u1cbf\\u1cd0-\\u1cd2\\u1cd4-\\u1cfa\\u1d00-\\u1df9\\u1dfb-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u203f-\\u2040\\u2054\\u2071\\u207f\\u2090-\\u209c\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2118-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d7f-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u2de0-\\u2dff\\u3005-\\u3007\\u3021-\\u302f\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u3099-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312f\\u3131-\\u318e\\u31a0-\\u31ba\\u31f0-\\u31ff\\u3400-\\u4db5\\u4e00-\\u9fef\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua62b\\ua640-\\ua66f\\ua674-\\ua67d\\ua67f-\\ua6f1\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7bf\\ua7c2-\\ua7c6\\ua7f7-\\ua827\\ua840-\\ua873\\ua880-\\ua8c5\\ua8d0-\\ua8d9\\ua8e0-\\ua8f7\\ua8fb\\ua8fd-\\ua92d\\ua930-\\ua953\\ua960-\\ua97c\\ua980-\\ua9c0\\ua9cf-\\ua9d9\\ua9e0-\\ua9fe\\uaa00-\\uaa36\\uaa40-\\uaa4d\\uaa50-\\uaa59\\uaa60-\\uaa76\\uaa7a-\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaef\\uaaf2-\\uaaf6\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab67\\uab70-\\uabea\\uabec-\\uabed\\uabf0-\\uabf9\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40-\\ufb41\\ufb43-\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\ufe33-\\ufe34\\ufe4d-\\ufe4f\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff10-\\uff19\\uff21-\\uff3a\\uff3f\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc]|\\ud800[\\udc00-\\udc0b\\udc0d-\\udc26\\udc28-\\udc3a\\udc3c-\\udc3d\\udc3f-\\udc4d\\udc50-\\udc5d\\udc80-\\udcfa\\udd40-\\udd74\\uddfd\\ude80-\\ude9c\\udea0-\\uded0\\udee0\\udf00-\\udf1f\\udf2d-\\udf4a\\udf50-\\udf7a\\udf80-\\udf9d\\udfa0-\\udfc3\\udfc8-\\udfcf\\udfd1-\\udfd5]|\\ud801[\\udc00-\\udc9d\\udca0-\\udca9\\udcb0-\\udcd3\\udcd8-\\udcfb\\udd00-\\udd27\\udd30-\\udd63\\ude00-\\udf36\\udf40-\\udf55\\udf60-\\udf67]|\\ud802[\\udc00-\\udc05\\udc08\\udc0a-\\udc35\\udc37-\\udc38\\udc3c\\udc3f-\\udc55\\udc60-\\udc76\\udc80-\\udc9e\\udce0-\\udcf2\\udcf4-\\udcf5\\udd00-\\udd15\\udd20-\\udd39\\udd80-\\uddb7\\uddbe-\\uddbf\\ude00-\\ude03\\ude05-\\ude06\\ude0c-\\ude13\\ude15-\\ude17\\ude19-\\ude35\\ude38-\\ude3a\\ude3f\\ude60-\\ude7c\\ude80-\\ude9c\\udec0-\\udec7\\udec9-\\udee6\\udf00-\\udf35\\udf40-\\udf55\\udf60-\\udf72\\udf80-\\udf91]|\\ud803[\\udc00-\\udc48\\udc80-\\udcb2\\udcc0-\\udcf2\\udd00-\\udd27\\udd30-\\udd39\\udf00-\\udf1c\\udf27\\udf30-\\udf50\\udfe0-\\udff6]|\\ud804[\\udc00-\\udc46\\udc66-\\udc6f\\udc7f-\\udcba\\udcd0-\\udce8\\udcf0-\\udcf9\\udd00-\\udd34\\udd36-\\udd3f\\udd44-\\udd46\\udd50-\\udd73\\udd76\\udd80-\\uddc4\\uddc9-\\uddcc\\uddd0-\\uddda\\udddc\\ude00-\\ude11\\ude13-\\ude37\\ude3e\\ude80-\\ude86\\ude88\\ude8a-\\ude8d\\ude8f-\\ude9d\\ude9f-\\udea8\\udeb0-\\udeea\\udef0-\\udef9\\udf00-\\udf03\\udf05-\\udf0c\\udf0f-\\udf10\\udf13-\\udf28\\udf2a-\\udf30\\udf32-\\udf33\\udf35-\\udf39\\udf3b-\\udf44\\udf47-\\udf48\\udf4b-\\udf4d\\udf50\\udf57\\udf5d-\\udf63\\udf66-\\udf6c\\udf70-\\udf74]|\\ud805[\\udc00-\\udc4a\\udc50-\\udc59\\udc5e-\\udc5f\\udc80-\\udcc5\\udcc7\\udcd0-\\udcd9\\udd80-\\uddb5\\uddb8-\\uddc0\\uddd8-\\udddd\\ude00-\\ude40\\ude44\\ude50-\\ude59\\ude80-\\udeb8\\udec0-\\udec9\\udf00-\\udf1a\\udf1d-\\udf2b\\udf30-\\udf39]|\\ud806[\\udc00-\\udc3a\\udca0-\\udce9\\udcff\\udda0-\\udda7\\uddaa-\\uddd7\\uddda-\\udde1\\udde3-\\udde4\\ude00-\\ude3e\\ude47\\ude50-\\ude99\\ude9d\\udec0-\\udef8]|\\ud807[\\udc00-\\udc08\\udc0a-\\udc36\\udc38-\\udc40\\udc50-\\udc59\\udc72-\\udc8f\\udc92-\\udca7\\udca9-\\udcb6\\udd00-\\udd06\\udd08-\\udd09\\udd0b-\\udd36\\udd3a\\udd3c-\\udd3d\\udd3f-\\udd47\\udd50-\\udd59\\udd60-\\udd65\\udd67-\\udd68\\udd6a-\\udd8e\\udd90-\\udd91\\udd93-\\udd98\\udda0-\\udda9\\udee0-\\udef6]|\\ud808[\\udc00-\\udf99]|\\ud809[\\udc00-\\udc6e\\udc80-\\udd43]|\\ud80c[\\udc00-\\udfff]|\\ud80d[\\udc00-\\udc2e]|\\ud811[\\udc00-\\ude46]|\\ud81a[\\udc00-\\ude38\\ude40-\\ude5e\\ude60-\\ude69\\uded0-\\udeed\\udef0-\\udef4\\udf00-\\udf36\\udf40-\\udf43\\udf50-\\udf59\\udf63-\\udf77\\udf7d-\\udf8f]|\\ud81b[\\ude40-\\ude7f\\udf00-\\udf4a\\udf4f-\\udf87\\udf8f-\\udf9f\\udfe0-\\udfe1\\udfe3]|\\ud81c[\\udc00-\\udfff]|\\ud81d[\\udc00-\\udfff]|\\ud81e[\\udc00-\\udfff]|\\ud81f[\\udc00-\\udfff]|\\ud820[\\udc00-\\udfff]|\\ud821[\\udc00-\\udff7]|\\ud822[\\udc00-\\udef2]|\\ud82c[\\udc00-\\udd1e\\udd50-\\udd52\\udd64-\\udd67\\udd70-\\udefb]|\\ud82f[\\udc00-\\udc6a\\udc70-\\udc7c\\udc80-\\udc88\\udc90-\\udc99\\udc9d-\\udc9e]|\\ud834[\\udd65-\\udd69\\udd6d-\\udd72\\udd7b-\\udd82\\udd85-\\udd8b\\uddaa-\\uddad\\ude42-\\ude44]|\\ud835[\\udc00-\\udc54\\udc56-\\udc9c\\udc9e-\\udc9f\\udca2\\udca5-\\udca6\\udca9-\\udcac\\udcae-\\udcb9\\udcbb\\udcbd-\\udcc3\\udcc5-\\udd05\\udd07-\\udd0a\\udd0d-\\udd14\\udd16-\\udd1c\\udd1e-\\udd39\\udd3b-\\udd3e\\udd40-\\udd44\\udd46\\udd4a-\\udd50\\udd52-\\udea5\\udea8-\\udec0\\udec2-\\udeda\\udedc-\\udefa\\udefc-\\udf14\\udf16-\\udf34\\udf36-\\udf4e\\udf50-\\udf6e\\udf70-\\udf88\\udf8a-\\udfa8\\udfaa-\\udfc2\\udfc4-\\udfcb\\udfce-\\udfff]|\\ud836[\\ude00-\\ude36\\ude3b-\\ude6c\\ude75\\ude84\\ude9b-\\ude9f\\udea1-\\udeaf]|\\ud838[\\udc00-\\udc06\\udc08-\\udc18\\udc1b-\\udc21\\udc23-\\udc24\\udc26-\\udc2a\\udd00-\\udd2c\\udd30-\\udd3d\\udd40-\\udd49\\udd4e\\udec0-\\udef9]|\\ud83a[\\udc00-\\udcc4\\udcd0-\\udcd6\\udd00-\\udd4b\\udd50-\\udd59]|\\ud83b[\\ude00-\\ude03\\ude05-\\ude1f\\ude21-\\ude22\\ude24\\ude27\\ude29-\\ude32\\ude34-\\ude37\\ude39\\ude3b\\ude42\\ude47\\ude49\\ude4b\\ude4d-\\ude4f\\ude51-\\ude52\\ude54\\ude57\\ude59\\ude5b\\ude5d\\ude5f\\ude61-\\ude62\\ude64\\ude67-\\ude6a\\ude6c-\\ude72\\ude74-\\ude77\\ude79-\\ude7c\\ude7e\\ude80-\\ude89\\ude8b-\\ude9b\\udea1-\\udea3\\udea5-\\udea9\\udeab-\\udebb]|\\ud840[\\udc00-\\udfff]|\\ud841[\\udc00-\\udfff]|\\ud842[\\udc00-\\udfff]|\\ud843[\\udc00-\\udfff]|\\ud844[\\udc00-\\udfff]|\\ud845[\\udc00-\\udfff]|\\ud846[\\udc00-\\udfff]|\\ud847[\\udc00-\\udfff]|\\ud848[\\udc00-\\udfff]|\\ud849[\\udc00-\\udfff]|\\ud84a[\\udc00-\\udfff]|\\ud84b[\\udc00-\\udfff]|\\ud84c[\\udc00-\\udfff]|\\ud84d[\\udc00-\\udfff]|\\ud84e[\\udc00-\\udfff]|\\ud84f[\\udc00-\\udfff]|\\ud850[\\udc00-\\udfff]|\\ud851[\\udc00-\\udfff]|\\ud852[\\udc00-\\udfff]|\\ud853[\\udc00-\\udfff]|\\ud854[\\udc00-\\udfff]|\\ud855[\\udc00-\\udfff]|\\ud856[\\udc00-\\udfff]|\\ud857[\\udc00-\\udfff]|\\ud858[\\udc00-\\udfff]|\\ud859[\\udc00-\\udfff]|\\ud85a[\\udc00-\\udfff]|\\ud85b[\\udc00-\\udfff]|\\ud85c[\\udc00-\\udfff]|\\ud85d[\\udc00-\\udfff]|\\ud85e[\\udc00-\\udfff]|\\ud85f[\\udc00-\\udfff]|\\ud860[\\udc00-\\udfff]|\\ud861[\\udc00-\\udfff]|\\ud862[\\udc00-\\udfff]|\\ud863[\\udc00-\\udfff]|\\ud864[\\udc00-\\udfff]|\\ud865[\\udc00-\\udfff]|\\ud866[\\udc00-\\udfff]|\\ud867[\\udc00-\\udfff]|\\ud868[\\udc00-\\udfff]|\\ud869[\\udc00-\\uded6\\udf00-\\udfff]|\\ud86a[\\udc00-\\udfff]|\\ud86b[\\udc00-\\udfff]|\\ud86c[\\udc00-\\udfff]|\\ud86d[\\udc00-\\udf34\\udf40-\\udfff]|\\ud86e[\\udc00-\\udc1d\\udc20-\\udfff]|\\ud86f[\\udc00-\\udfff]|\\ud870[\\udc00-\\udfff]|\\ud871[\\udc00-\\udfff]|\\ud872[\\udc00-\\udfff]|\\ud873[\\udc00-\\udea1\\udeb0-\\udfff]|\\ud874[\\udc00-\\udfff]|\\ud875[\\udc00-\\udfff]|\\ud876[\\udc00-\\udfff]|\\ud877[\\udc00-\\udfff]|\\ud878[\\udc00-\\udfff]|\\ud879[\\udc00-\\udfff]|\\ud87a[\\udc00-\\udfe0]|\\ud87e[\\udc00-\\ude1d]|\\udb40[\\udd00-\\uddef])|[$_]|(\\\\u[0-9a-fA-F]{4}|\\\\u\\{[0-9a-fA-F]{1,}\\})|[\\u200c\\u200d])*>/, function () {\n var groupName = yytext.slice(3, -1);\n validateUnicodeGroupName(groupName, this.getCurrentState());\n return 'NAMED_GROUP_REF';\n}], [/^\\\\b/, function () {\n return 'ESC_b';\n}], [/^\\\\B/, function () {\n return 'ESC_B';\n}], [/^\\\\c[a-zA-Z]/, function () {\n return 'CTRL_CH';\n}], [/^\\\\0\\d{1,2}/, function () {\n return 'OCT_CODE';\n}], [/^\\\\0/, function () {\n return 'DEC_CODE';\n}], [/^\\\\\\d{1,3}/, function () {\n return 'DEC_CODE';\n}], [/^\\\\u[dD][89abAB][0-9a-fA-F]{2}\\\\u[dD][c-fC-F][0-9a-fA-F]{2}/, function () {\n return 'U_CODE_SURROGATE';\n}], [/^\\\\u\\{[0-9a-fA-F]{1,}\\}/, function () {\n return 'U_CODE';\n}], [/^\\\\u[0-9a-fA-F]{4}/, function () {\n return 'U_CODE';\n}], [/^\\\\[pP]\\{\\w+(?:=\\w+)?\\}/, function () {\n return 'U_PROP_VALUE_EXP';\n}], [/^\\\\x[0-9a-fA-F]{2}/, function () {\n return 'HEX_CODE';\n}], [/^\\\\[tnrdDsSwWvf]/, function () {\n return 'META_CHAR';\n}], [/^\\\\\\//, function () {\n return 'ESC_CHAR';\n}], [/^\\\\[ #]/, function () {\n return 'ESC_CHAR';\n}], [/^\\\\[\\^\\$\\.\\*\\+\\?\\(\\)\\\\\\[\\]\\{\\}\\|\\/]/, function () {\n return 'ESC_CHAR';\n}], [/^\\\\[^*?+\\[()\\\\|]/, function () {\n var s = this.getCurrentState();\n if (s === 'u_class' && yytext === \"\\\\-\") {\n return 'ESC_CHAR';\n } else if (s === 'u' || s === 'xu' || s === 'u_class') {\n throw new SyntaxError('invalid Unicode escape ' + yytext);\n }\n return 'ESC_CHAR';\n}], [/^\\(/, function () {\n return 'CHAR';\n}], [/^\\)/, function () {\n return 'CHAR';\n}], [/^\\(\\?=/, function () {\n return 'POS_LA_ASSERT';\n}], [/^\\(\\?!/, function () {\n return 'NEG_LA_ASSERT';\n}], [/^\\(\\?<=/, function () {\n return 'POS_LB_ASSERT';\n}], [/^\\(\\?<!/, function () {\n return 'NEG_LB_ASSERT';\n}], [/^\\(\\?:/, function () {\n return 'NON_CAPTURE_GROUP';\n}], [/^\\(\\?<(([\\u0041-\\u005a\\u0061-\\u007a\\u00aa\\u00b5\\u00ba\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376-\\u0377\\u037a-\\u037d\\u037f\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u052f\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05d0-\\u05ea\\u05ef-\\u05f2\\u0620-\\u064a\\u066e-\\u066f\\u0671-\\u06d3\\u06d5\\u06e5-\\u06e6\\u06ee-\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4-\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086a\\u08a0-\\u08b4\\u08b6-\\u08bd\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098c\\u098f-\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc-\\u09dd\\u09df-\\u09e1\\u09f0-\\u09f1\\u09fc\\u0a05-\\u0a0a\\u0a0f-\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32-\\u0a33\\u0a35-\\u0a36\\u0a38-\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2-\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0-\\u0ae1\\u0af9\\u0b05-\\u0b0c\\u0b0f-\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32-\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c-\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99-\\u0b9a\\u0b9c\\u0b9e-\\u0b9f\\u0ba3-\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d\\u0c58-\\u0c5a\\u0c60-\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cde\\u0ce0-\\u0ce1\\u0cf1-\\u0cf2\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d54-\\u0d56\\u0d5f-\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32-\\u0e33\\u0e40-\\u0e46\\u0e81-\\u0e82\\u0e84\\u0e86-\\u0e8a\\u0e8c-\\u0ea3\\u0ea5\\u0ea7-\\u0eb0\\u0eb2-\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065-\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f5\\u13f8-\\u13fd\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f8\\u1700-\\u170c\\u170e-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1878\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4b\\u1b83-\\u1ba0\\u1bae-\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1c80-\\u1c88\\u1c90-\\u1cba\\u1cbd-\\u1cbf\\u1ce9-\\u1cec\\u1cee-\\u1cf3\\u1cf5-\\u1cf6\\u1cfa\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2118-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cee\\u2cf2-\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309b-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312f\\u3131-\\u318e\\u31a0-\\u31ba\\u31f0-\\u31ff\\u3400-\\u4db5\\u4e00-\\u9fef\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a-\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7bf\\ua7c2-\\ua7c6\\ua7f7-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua8fd-\\ua8fe\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\ua9e0-\\ua9e4\\ua9e6-\\ua9ef\\ua9fa-\\ua9fe\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa7e-\\uaaaf\\uaab1\\uaab5-\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab67\\uab70-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40-\\ufb41\\ufb43-\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc]|\\ud800[\\udc00-\\udc0b\\udc0d-\\udc26\\udc28-\\udc3a\\udc3c-\\udc3d\\udc3f-\\udc4d\\udc50-\\udc5d\\udc80-\\udcfa\\udd40-\\udd74\\ude80-\\ude9c\\udea0-\\uded0\\udf00-\\udf1f\\udf2d-\\udf4a\\udf50-\\udf75\\udf80-\\udf9d\\udfa0-\\udfc3\\udfc8-\\udfcf\\udfd1-\\udfd5]|\\ud801[\\udc00-\\udc9d\\udcb0-\\udcd3\\udcd8-\\udcfb\\udd00-\\udd27\\udd30-\\udd63\\ude00-\\udf36\\udf40-\\udf55\\udf60-\\udf67]|\\ud802[\\udc00-\\udc05\\udc08\\udc0a-\\udc35\\udc37-\\udc38\\udc3c\\udc3f-\\udc55\\udc60-\\udc76\\udc80-\\udc9e\\udce0-\\udcf2\\udcf4-\\udcf5\\udd00-\\udd15\\udd20-\\udd39\\udd80-\\uddb7\\uddbe-\\uddbf\\ude00\\ude10-\\ude13\\ude15-\\ude17\\ude19-\\ude35\\ude60-\\ude7c\\ude80-\\ude9c\\udec0-\\udec7\\udec9-\\udee4\\udf00-\\udf35\\udf40-\\udf55\\udf60-\\udf72\\udf80-\\udf91]|\\ud803[\\udc00-\\udc48\\udc80-\\udcb2\\udcc0-\\udcf2\\udd00-\\udd23\\udf00-\\udf1c\\udf27\\udf30-\\udf45\\udfe0-\\udff6]|\\ud804[\\udc03-\\udc37\\udc83-\\udcaf\\udcd0-\\udce8\\udd03-\\udd26\\udd44\\udd50-\\udd72\\udd76\\udd83-\\uddb2\\uddc1-\\uddc4\\uddda\\udddc\\ude00-\\ude11\\ude13-\\ude2b\\ude80-\\ude86\\ude88\\ude8a-\\ude8d\\ude8f-\\ude9d\\ude9f-\\udea8\\udeb0-\\udede\\udf05-\\udf0c\\udf0f-\\udf10\\udf13-\\udf28\\udf2a-\\udf30\\udf32-\\udf33\\udf35-\\udf39\\udf3d\\udf50\\udf5d-\\udf61]|\\ud805[\\udc00-\\udc34\\udc47-\\udc4a\\udc5f\\udc80-\\udcaf\\udcc4-\\udcc5\\udcc7\\udd80-\\uddae\\uddd8-\\udddb\\ude00-\\ude2f\\ude44\\ude80-\\udeaa\\udeb8\\udf00-\\udf1a]|\\ud806[\\udc00-\\udc2b\\udca0-\\udcdf\\udcff\\udda0-\\udda7\\uddaa-\\uddd0\\udde1\\udde3\\ude00\\ude0b-\\ude32\\ude3a\\ude50\\ude5c-\\ude89\\ude9d\\udec0-\\udef8]|\\ud807[\\udc00-\\udc08\\udc0a-\\udc2e\\udc40\\udc72-\\udc8f\\udd00-\\udd06\\udd08-\\udd09\\udd0b-\\udd30\\udd46\\udd60-\\udd65\\udd67-\\udd68\\udd6a-\\udd89\\udd98\\udee0-\\udef2]|\\ud808[\\udc00-\\udf99]|\\ud809[\\udc00-\\udc6e\\udc80-\\udd43]|\\ud80c[\\udc00-\\udfff]|\\ud80d[\\udc00-\\udc2e]|\\ud811[\\udc00-\\ude46]|\\ud81a[\\udc00-\\ude38\\ude40-\\ude5e\\uded0-\\udeed\\udf00-\\udf2f\\udf40-\\udf43\\udf63-\\udf77\\udf7d-\\udf8f]|\\ud81b[\\ude40-\\ude7f\\udf00-\\udf4a\\udf50\\udf93-\\udf9f\\udfe0-\\udfe1\\udfe3]|\\ud81c[\\udc00-\\udfff]|\\ud81d[\\udc00-\\udfff]|\\ud81e[\\udc00-\\udfff]|\\ud81f[\\udc00-\\udfff]|\\ud820[\\udc00-\\udfff]|\\ud821[\\udc00-\\udff7]|\\ud822[\\udc00-\\udef2]|\\ud82c[\\udc00-\\udd1e\\udd50-\\udd52\\udd64-\\udd67\\udd70-\\udefb]|\\ud82f[\\udc00-\\udc6a\\udc70-\\udc7c\\udc80-\\udc88\\udc90-\\udc99]|\\ud835[\\udc00-\\udc54\\udc56-\\udc9c\\udc9e-\\udc9f\\udca2\\udca5-\\udca6\\udca9-\\udcac\\udcae-\\udcb9\\udcbb\\udcbd-\\udcc3\\udcc5-\\udd05\\udd07-\\udd0a\\udd0d-\\udd14\\udd16-\\udd1c\\udd1e-\\udd39\\udd3b-\\udd3e\\udd40-\\udd44\\udd46\\udd4a-\\udd50\\udd52-\\udea5\\udea8-\\udec0\\udec2-\\udeda\\udedc-\\udefa\\udefc-\\udf14\\udf16-\\udf34\\udf36-\\udf4e\\udf50-\\udf6e\\udf70-\\udf88\\udf8a-\\udfa8\\udfaa-\\udfc2\\udfc4-\\udfcb]|\\ud838[\\udd00-\\udd2c\\udd37-\\udd3d\\udd4e\\udec0-\\udeeb]|\\ud83a[\\udc00-\\udcc4\\udd00-\\udd43\\udd4b]|\\ud83b[\\ude00-\\ude03\\ude05-\\ude1f\\ude21-\\ude22\\ude24\\ude27\\ude29-\\ude32\\ude34-\\ude37\\ude39\\ude3b\\ude42\\ude47\\ude49\\ude4b\\ude4d-\\ude4f\\ude51-\\ude52\\ude54\\ude57\\ude59\\ude5b\\ude5d\\ude5f\\ude61-\\ude62\\ude64\\ude67-\\ude6a\\ude6c-\\ude72\\ude74-\\ude77\\ude79-\\ude7c\\ude7e\\ude80-\\ude89\\ude8b-\\ude9b\\udea1-\\udea3\\udea5-\\udea9\\udeab-\\udebb]|\\ud840[\\udc00-\\udfff]|\\ud841[\\udc00-\\udfff]|\\ud842[\\udc00-\\udfff]|\\ud843[\\udc00-\\udfff]|\\ud844[\\udc00-\\udfff]|\\ud845[\\udc00-\\udfff]|\\ud846[\\udc00-\\udfff]|\\ud847[\\udc00-\\udfff]|\\ud848[\\udc00-\\udfff]|\\ud849[\\udc00-\\udfff]|\\ud84a[\\udc00-\\udfff]|\\ud84b[\\udc00-\\udfff]|\\ud84c[\\udc00-\\udfff]|\\ud84d[\\udc00-\\udfff]|\\ud84e[\\udc00-\\udfff]|\\ud84f[\\udc00-\\udfff]|\\ud850[\\udc00-\\udfff]|\\ud851[\\udc00-\\udfff]|\\ud852[\\udc00-\\udfff]|\\ud853[\\udc00-\\udfff]|\\ud854[\\udc00-\\udfff]|\\ud855[\\udc00-\\udfff]|\\ud856[\\udc00-\\udfff]|\\ud857[\\udc00-\\udfff]|\\ud858[\\udc00-\\udfff]|\\ud859[\\udc00-\\udfff]|\\ud85a[\\udc00-\\udfff]|\\ud85b[\\udc00-\\udfff]|\\ud85c[\\udc00-\\udfff]|\\ud85d[\\udc00-\\udfff]|\\ud85e[\\udc00-\\udfff]|\\ud85f[\\udc00-\\udfff]|\\ud860[\\udc00-\\udfff]|\\ud861[\\udc00-\\udfff]|\\ud862[\\udc00-\\udfff]|\\ud863[\\udc00-\\udfff]|\\ud864[\\udc00-\\udfff]|\\ud865[\\udc00-\\udfff]|\\ud866[\\udc00-\\udfff]|\\ud867[\\udc00-\\udfff]|\\ud868[\\udc00-\\udfff]|\\ud869[\\udc00-\\uded6\\udf00-\\udfff]|\\ud86a[\\udc00-\\udfff]|\\ud86b[\\udc00-\\udfff]|\\ud86c[\\udc00-\\udfff]|\\ud86d[\\udc00-\\udf34\\udf40-\\udfff]|\\ud86e[\\udc00-\\udc1d\\udc20-\\udfff]|\\ud86f[\\udc00-\\udfff]|\\ud870[\\udc00-\\udfff]|\\ud871[\\udc00-\\udfff]|\\ud872[\\udc00-\\udfff]|\\ud873[\\udc00-\\udea1\\udeb0-\\udfff]|\\ud874[\\udc00-\\udfff]|\\ud875[\\udc00-\\udfff]|\\ud876[\\udc00-\\udfff]|\\ud877[\\udc00-\\udfff]|\\ud878[\\udc00-\\udfff]|\\ud879[\\udc00-\\udfff]|\\ud87a[\\udc00-\\udfe0]|\\ud87e[\\udc00-\\ude1d])|[$_]|(\\\\u[0-9a-fA-F]{4}|\\\\u\\{[0-9a-fA-F]{1,}\\}))(([\\u0030-\\u0039\\u0041-\\u005a\\u005f\\u0061-\\u007a\\u00aa\\u00b5\\u00b7\\u00ba\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0300-\\u0374\\u0376-\\u0377\\u037a-\\u037d\\u037f\\u0386-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u0483-\\u0487\\u048a-\\u052f\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u0591-\\u05bd\\u05bf\\u05c1-\\u05c2\\u05c4-\\u05c5\\u05c7\\u05d0-\\u05ea\\u05ef-\\u05f2\\u0610-\\u061a\\u0620-\\u0669\\u066e-\\u06d3\\u06d5-\\u06dc\\u06df-\\u06e8\\u06ea-\\u06fc\\u06ff\\u0710-\\u074a\\u074d-\\u07b1\\u07c0-\\u07f5\\u07fa\\u07fd\\u0800-\\u082d\\u0840-\\u085b\\u0860-\\u086a\\u08a0-\\u08b4\\u08b6-\\u08bd\\u08d3-\\u08e1\\u08e3-\\u0963\\u0966-\\u096f\\u0971-\\u0983\\u0985-\\u098c\\u098f-\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bc-\\u09c4\\u09c7-\\u09c8\\u09cb-\\u09ce\\u09d7\\u09dc-\\u09dd\\u09df-\\u09e3\\u09e6-\\u09f1\\u09fc\\u09fe\\u0a01-\\u0a03\\u0a05-\\u0a0a\\u0a0f-\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32-\\u0a33\\u0a35-\\u0a36\\u0a38-\\u0a39\\u0a3c\\u0a3e-\\u0a42\\u0a47-\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a59-\\u0a5c\\u0a5e\\u0a66-\\u0a75\\u0a81-\\u0a83\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2-\\u0ab3\\u0ab5-\\u0ab9\\u0abc-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ad0\\u0ae0-\\u0ae3\\u0ae6-\\u0aef\\u0af9-\\u0aff\\u0b01-\\u0b03\\u0b05-\\u0b0c\\u0b0f-\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32-\\u0b33\\u0b35-\\u0b39\\u0b3c-\\u0b44\\u0b47-\\u0b48\\u0b4b-\\u0b4d\\u0b56-\\u0b57\\u0b5c-\\u0b5d\\u0b5f-\\u0b63\\u0b66-\\u0b6f\\u0b71\\u0b82-\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99-\\u0b9a\\u0b9c\\u0b9e-\\u0b9f\\u0ba3-\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd0\\u0bd7\\u0be6-\\u0bef\\u0c00-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55-\\u0c56\\u0c58-\\u0c5a\\u0c60-\\u0c63\\u0c66-\\u0c6f\\u0c80-\\u0c83\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbc-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5-\\u0cd6\\u0cde\\u0ce0-\\u0ce3\\u0ce6-\\u0cef\\u0cf1-\\u0cf2\\u0d00-\\u0d03\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4e\\u0d54-\\u0d57\\u0d5f-\\u0d63\\u0d66-\\u0d6f\\u0d7a-\\u0d7f\\u0d82-\\u0d83\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0de6-\\u0def\\u0df2-\\u0df3\\u0e01-\\u0e3a\\u0e40-\\u0e4e\\u0e50-\\u0e59\\u0e81-\\u0e82\\u0e84\\u0e86-\\u0e8a\\u0e8c-\\u0ea3\\u0ea5\\u0ea7-\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0ec8-\\u0ecd\\u0ed0-\\u0ed9\\u0edc-\\u0edf\\u0f00\\u0f18-\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e-\\u0f47\\u0f49-\\u0f6c\\u0f71-\\u0f84\\u0f86-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u1000-\\u1049\\u1050-\\u109d\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u135d-\\u135f\\u1369-\\u1371\\u1380-\\u138f\\u13a0-\\u13f5\\u13f8-\\u13fd\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f8\\u1700-\\u170c\\u170e-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176c\\u176e-\\u1770\\u1772-\\u1773\\u1780-\\u17d3\\u17d7\\u17dc-\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u1810-\\u1819\\u1820-\\u1878\\u1880-\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u19d0-\\u19da\\u1a00-\\u1a1b\\u1a20-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1aa7\\u1ab0-\\u1abd\\u1b00-\\u1b4b\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1bf3\\u1c00-\\u1c37\\u1c40-\\u1c49\\u1c4d-\\u1c7d\\u1c80-\\u1c88\\u1c90-\\u1cba\\u1cbd-\\u1cbf\\u1cd0-\\u1cd2\\u1cd4-\\u1cfa\\u1d00-\\u1df9\\u1dfb-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u203f-\\u2040\\u2054\\u2071\\u207f\\u2090-\\u209c\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2118-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d7f-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u2de0-\\u2dff\\u3005-\\u3007\\u3021-\\u302f\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u3099-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312f\\u3131-\\u318e\\u31a0-\\u31ba\\u31f0-\\u31ff\\u3400-\\u4db5\\u4e00-\\u9fef\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua62b\\ua640-\\ua66f\\ua674-\\ua67d\\ua67f-\\ua6f1\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7bf\\ua7c2-\\ua7c6\\ua7f7-\\ua827\\ua840-\\ua873\\ua880-\\ua8c5\\ua8d0-\\ua8d9\\ua8e0-\\ua8f7\\ua8fb\\ua8fd-\\ua92d\\ua930-\\ua953\\ua960-\\ua97c\\ua980-\\ua9c0\\ua9cf-\\ua9d9\\ua9e0-\\ua9fe\\uaa00-\\uaa36\\uaa40-\\uaa4d\\uaa50-\\uaa59\\uaa60-\\uaa76\\uaa7a-\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaef\\uaaf2-\\uaaf6\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab67\\uab70-\\uabea\\uabec-\\uabed\\uabf0-\\uabf9\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40-\\ufb41\\ufb43-\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\ufe33-\\ufe34\\ufe4d-\\ufe4f\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff10-\\uff19\\uff21-\\uff3a\\uff3f\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc]|\\ud800[\\udc00-\\udc0b\\udc0d-\\udc26\\udc28-\\udc3a\\udc3c-\\udc3d\\udc3f-\\udc4d\\udc50-\\udc5d\\udc80-\\udcfa\\udd40-\\udd74\\uddfd\\ude80-\\ude9c\\udea0-\\uded0\\udee0\\udf00-\\udf1f\\udf2d-\\udf4a\\udf50-\\udf7a\\udf80-\\udf9d\\udfa0-\\udfc3\\udfc8-\\udfcf\\udfd1-\\udfd5]|\\ud801[\\udc00-\\udc9d\\udca0-\\udca9\\udcb0-\\udcd3\\udcd8-\\udcfb\\udd00-\\udd27\\udd30-\\udd63\\ude00-\\udf36\\udf40-\\udf55\\udf60-\\udf67]|\\ud802[\\udc00-\\udc05\\udc08\\udc0a-\\udc35\\udc37-\\udc38\\udc3c\\udc3f-\\udc55\\udc60-\\udc76\\udc80-\\udc9e\\udce0-\\udcf2\\udcf4-\\udcf5\\udd00-\\udd15\\udd20-\\udd39\\udd80-\\uddb7\\uddbe-\\uddbf\\ude00-\\ude03\\ude05-\\ude06\\ude0c-\\ude13\\ude15-\\ude17\\ude19-\\ude35\\ude38-\\ude3a\\ude3f\\ude60-\\ude7c\\ude80-\\ude9c\\udec0-\\udec7\\udec9-\\udee6\\udf00-\\udf35\\udf40-\\udf55\\udf60-\\udf72\\udf80-\\udf91]|\\ud803[\\udc00-\\udc48\\udc80-\\udcb2\\udcc0-\\udcf2\\udd00-\\udd27\\udd30-\\udd39\\udf00-\\udf1c\\udf27\\udf30-\\udf50\\udfe0-\\udff6]|\\ud804[\\udc00-\\udc46\\udc66-\\udc6f\\udc7f-\\udcba\\udcd0-\\udce8\\udcf0-\\udcf9\\udd00-\\udd34\\udd36-\\udd3f\\udd44-\\udd46\\udd50-\\udd73\\udd76\\udd80-\\uddc4\\uddc9-\\uddcc\\uddd0-\\uddda\\udddc\\ude00-\\ude11\\ude13-\\ude37\\ude3e\\ude80-\\ude86\\ude88\\ude8a-\\ude8d\\ude8f-\\ude9d\\ude9f-\\udea8\\udeb0-\\udeea\\udef0-\\udef9\\udf00-\\udf03\\udf05-\\udf0c\\udf0f-\\udf10\\udf13-\\udf28\\udf2a-\\udf30\\udf32-\\udf33\\udf35-\\udf39\\udf3b-\\udf44\\udf47-\\udf48\\udf4b-\\udf4d\\udf50\\udf57\\udf5d-\\udf63\\udf66-\\udf6c\\udf70-\\udf74]|\\ud805[\\udc00-\\udc4a\\udc50-\\udc59\\udc5e-\\udc5f\\udc80-\\udcc5\\udcc7\\udcd0-\\udcd9\\udd80-\\uddb5\\uddb8-\\uddc0\\uddd8-\\udddd\\ude00-\\ude40\\ude44\\ude50-\\ude59\\ude80-\\udeb8\\udec0-\\udec9\\udf00-\\udf1a\\udf1d-\\udf2b\\udf30-\\udf39]|\\ud806[\\udc00-\\udc3a\\udca0-\\udce9\\udcff\\udda0-\\udda7\\uddaa-\\uddd7\\uddda-\\udde1\\udde3-\\udde4\\ude00-\\ude3e\\ude47\\ude50-\\ude99\\ude9d\\udec0-\\udef8]|\\ud807[\\udc00-\\udc08\\udc0a-\\udc36\\udc38-\\udc40\\udc50-\\udc59\\udc72-\\udc8f\\udc92-\\udca7\\udca9-\\udcb6\\udd00-\\udd06\\udd08-\\udd09\\udd0b-\\udd36\\udd3a\\udd3c-\\udd3d\\udd3f-\\udd47\\udd50-\\udd59\\udd60-\\udd65\\udd67-\\udd68\\udd6a-\\udd8e\\udd90-\\udd91\\udd93-\\udd98\\udda0-\\udda9\\udee0-\\udef6]|\\ud808[\\udc00-\\udf99]|\\ud809[\\udc00-\\udc6e\\udc80-\\udd43]|\\ud80c[\\udc00-\\udfff]|\\ud80d[\\udc00-\\udc2e]|\\ud811[\\udc00-\\ude46]|\\ud81a[\\udc00-\\ude38\\ude40-\\ude5e\\ude60-\\ude69\\uded0-\\udeed\\udef0-\\udef4\\udf00-\\udf36\\udf40-\\udf43\\udf50-\\udf59\\udf63-\\udf77\\udf7d-\\udf8f]|\\ud81b[\\ude40-\\ude7f\\udf00-\\udf4a\\udf4f-\\udf87\\udf8f-\\udf9f\\udfe0-\\udfe1\\udfe3]|\\ud81c[\\udc00-\\udfff]|\\ud81d[\\udc00-\\udfff]|\\ud81e[\\udc00-\\udfff]|\\ud81f[\\udc00-\\udfff]|\\ud820[\\udc00-\\udfff]|\\ud821[\\udc00-\\udff7]|\\ud822[\\udc00-\\udef2]|\\ud82c[\\udc00-\\udd1e\\udd50-\\udd52\\udd64-\\udd67\\udd70-\\udefb]|\\ud82f[\\udc00-\\udc6a\\udc70-\\udc7c\\udc80-\\udc88\\udc90-\\udc99\\udc9d-\\udc9e]|\\ud834[\\udd65-\\udd69\\udd6d-\\udd72\\udd7b-\\udd82\\udd85-\\udd8b\\uddaa-\\uddad\\ude42-\\ude44]|\\ud835[\\udc00-\\udc54\\udc56-\\udc9c\\udc9e-\\udc9f\\udca2\\udca5-\\udca6\\udca9-\\udcac\\udcae-\\udcb9\\udcbb\\udcbd-\\udcc3\\udcc5-\\udd05\\udd07-\\udd0a\\udd0d-\\udd14\\udd16-\\udd1c\\udd1e-\\udd39\\udd3b-\\udd3e\\udd40-\\udd44\\udd46\\udd4a-\\udd50\\udd52-\\udea5\\udea8-\\udec0\\udec2-\\udeda\\udedc-\\udefa\\udefc-\\udf14\\udf16-\\udf34\\udf36-\\udf4e\\udf50-\\udf6e\\udf70-\\udf88\\udf8a-\\udfa8\\udfaa-\\udfc2\\udfc4-\\udfcb\\udfce-\\udfff]|\\ud836[\\ude00-\\ude36\\ude3b-\\ude6c\\ude75\\ude84\\ude9b-\\ude9f\\udea1-\\udeaf]|\\ud838[\\udc00-\\udc06\\udc08-\\udc18\\udc1b-\\udc21\\udc23-\\udc24\\udc26-\\udc2a\\udd00-\\udd2c\\udd30-\\udd3d\\udd40-\\udd49\\udd4e\\udec0-\\udef9]|\\ud83a[\\udc00-\\udcc4\\udcd0-\\udcd6\\udd00-\\udd4b\\udd50-\\udd59]|\\ud83b[\\ude00-\\ude03\\ude05-\\ude1f\\ude21-\\ude22\\ude24\\ude27\\ude29-\\ude32\\ude34-\\ude37\\ude39\\ude3b\\ude42\\ude47\\ude49\\ude4b\\ude4d-\\ude4f\\ude51-\\ude52\\ude54\\ude57\\ude59\\ude5b\\ude5d\\ude5f\\ude61-\\ude62\\ude64\\ude67-\\ude6a\\ude6c-\\ude72\\ude74-\\ude77\\ude79-\\ude7c\\ude7e\\ude80-\\ude89\\ude8b-\\ude9b\\udea1-\\udea3\\udea5-\\udea9\\udeab-\\udebb]|\\ud840[\\udc00-\\udfff]|\\ud841[\\udc00-\\udfff]|\\ud842[\\udc00-\\udfff]|\\ud843[\\udc00-\\udfff]|\\ud844[\\udc00-\\udfff]|\\ud845[\\udc00-\\udfff]|\\ud846[\\udc00-\\udfff]|\\ud847[\\udc00-\\udfff]|\\ud848[\\udc00-\\udfff]|\\ud849[\\udc00-\\udfff]|\\ud84a[\\udc00-\\udfff]|\\ud84b[\\udc00-\\udfff]|\\ud84c[\\udc00-\\udfff]|\\ud84d[\\udc00-\\udfff]|\\ud84e[\\udc00-\\udfff]|\\ud84f[\\udc00-\\udfff]|\\ud850[\\udc00-\\udfff]|\\ud851[\\udc00-\\udfff]|\\ud852[\\udc00-\\udfff]|\\ud853[\\udc00-\\udfff]|\\ud854[\\udc00-\\udfff]|\\ud855[\\udc00-\\udfff]|\\ud856[\\udc00-\\udfff]|\\ud857[\\udc00-\\udfff]|\\ud858[\\udc00-\\udfff]|\\ud859[\\udc00-\\udfff]|\\ud85a[\\udc00-\\udfff]|\\ud85b[\\udc00-\\udfff]|\\ud85c[\\udc00-\\udfff]|\\ud85d[\\udc00-\\udfff]|\\ud85e[\\udc00-\\udfff]|\\ud85f[\\udc00-\\udfff]|\\ud860[\\udc00-\\udfff]|\\ud861[\\udc00-\\udfff]|\\ud862[\\udc00-\\udfff]|\\ud863[\\udc00-\\udfff]|\\ud864[\\udc00-\\udfff]|\\ud865[\\udc00-\\udfff]|\\ud866[\\udc00-\\udfff]|\\ud867[\\udc00-\\udfff]|\\ud868[\\udc00-\\udfff]|\\ud869[\\udc00-\\uded6\\udf00-\\udfff]|\\ud86a[\\udc00-\\udfff]|\\ud86b[\\udc00-\\udfff]|\\ud86c[\\udc00-\\udfff]|\\ud86d[\\udc00-\\udf34\\udf40-\\udfff]|\\ud86e[\\udc00-\\udc1d\\udc20-\\udfff]|\\ud86f[\\udc00-\\udfff]|\\ud870[\\udc00-\\udfff]|\\ud871[\\udc00-\\udfff]|\\ud872[\\udc00-\\udfff]|\\ud873[\\udc00-\\udea1\\udeb0-\\udfff]|\\ud874[\\udc00-\\udfff]|\\ud875[\\udc00-\\udfff]|\\ud876[\\udc00-\\udfff]|\\ud877[\\udc00-\\udfff]|\\ud878[\\udc00-\\udfff]|\\ud879[\\udc00-\\udfff]|\\ud87a[\\udc00-\\udfe0]|\\ud87e[\\udc00-\\ude1d]|\\udb40[\\udd00-\\uddef])|[$_]|(\\\\u[0-9a-fA-F]{4}|\\\\u\\{[0-9a-fA-F]{1,}\\})|[\\u200c\\u200d])*>/, function () {\n yytext = yytext.slice(3, -1);\n validateUnicodeGroupName(yytext, this.getCurrentState());\n return 'NAMED_CAPTURE_GROUP';\n}], [/^\\(/, function () {\n return 'L_PAREN';\n}], [/^\\)/, function () {\n return 'R_PAREN';\n}], [/^[*?+[^$]/, function () {\n return 'CHAR';\n}], [/^\\\\\\]/, function () {\n return 'ESC_CHAR';\n}], [/^\\]/, function () {\n this.popState();return 'R_BRACKET';\n}], [/^\\^/, function () {\n return 'BOS';\n}], [/^\\$/, function () {\n return 'EOS';\n}], [/^\\*/, function () {\n return 'STAR';\n}], [/^\\?/, function () {\n return 'Q_MARK';\n}], [/^\\+/, function () {\n return 'PLUS';\n}], [/^\\|/, function () {\n return 'BAR';\n}], [/^\\./, function () {\n return 'ANY';\n}], [/^\\//, function () {\n return 'SLASH';\n}], [/^[^*?+\\[()\\\\|]/, function () {\n return 'CHAR';\n}], [/^\\[\\^/, function () {\n var s = this.getCurrentState();this.pushState(s === 'u' || s === 'xu' ? 'u_class' : 'class');return 'NEG_CLASS';\n}], [/^\\[/, function () {\n var s = this.getCurrentState();this.pushState(s === 'u' || s === 'xu' ? 'u_class' : 'class');return 'L_BRACKET';\n}]];\nvar lexRulesByConditions = { \"INITIAL\": [8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 20, 22, 23, 24, 26, 27, 30, 31, 32, 33, 34, 35, 36, 37, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51], \"u\": [8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 30, 31, 32, 33, 34, 35, 36, 37, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51], \"xu\": [0, 1, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 30, 31, 32, 33, 34, 35, 36, 37, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51], \"x\": [0, 1, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 20, 22, 23, 24, 26, 27, 30, 31, 32, 33, 34, 35, 36, 37, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51], \"u_class\": [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51], \"class\": [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 20, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51] };\n\nvar EOF_TOKEN = {\n type: EOF,\n value: ''\n};\n\ntokenizer = {\n initString: function initString(string) {\n this._string = string;\n this._cursor = 0;\n\n this._states = ['INITIAL'];\n this._tokensQueue = [];\n\n this._currentLine = 1;\n this._currentColumn = 0;\n this._currentLineBeginOffset = 0;\n\n /**\n * Matched token location data.\n */\n this._tokenStartOffset = 0;\n this._tokenEndOffset = 0;\n this._tokenStartLine = 1;\n this._tokenEndLine = 1;\n this._tokenStartColumn = 0;\n this._tokenEndColumn = 0;\n\n return this;\n },\n\n\n /**\n * Returns tokenizer states.\n */\n getStates: function getStates() {\n return this._states;\n },\n getCurrentState: function getCurrentState() {\n return this._states[this._states.length - 1];\n },\n pushState: function pushState(state) {\n this._states.push(state);\n },\n begin: function begin(state) {\n this.pushState(state);\n },\n popState: function popState() {\n if (this._states.length > 1) {\n return this._states.pop();\n }\n return this._states[0];\n },\n getNextToken: function getNextToken() {\n // Something was queued, return it.\n if (this._tokensQueue.length > 0) {\n return this.onToken(this._toToken(this._tokensQueue.shift()));\n }\n\n if (!this.hasMoreTokens()) {\n return this.onToken(EOF_TOKEN);\n }\n\n var string = this._string.slice(this._cursor);\n var lexRulesForState = lexRulesByConditions[this.getCurrentState()];\n\n for (var i = 0; i < lexRulesForState.length; i++) {\n var lexRuleIndex = lexRulesForState[i];\n var lexRule = lexRules[lexRuleIndex];\n\n var matched = this._match(string, lexRule[0]);\n\n // Manual handling of EOF token (the end of string). Return it\n // as `EOF` symbol.\n if (string === '' && matched === '') {\n this._cursor++;\n }\n\n if (matched !== null) {\n yytext = matched;\n yyleng = yytext.length;\n var token = lexRule[1].call(this);\n\n if (!token) {\n return this.getNextToken();\n }\n\n // If multiple tokens are returned, save them to return\n // on next `getNextToken` call.\n\n if (Array.isArray(token)) {\n var tokensToQueue = token.slice(1);\n token = token[0];\n if (tokensToQueue.length > 0) {\n var _tokensQueue;\n\n (_tokensQueue = this._tokensQueue).unshift.apply(_tokensQueue, _toConsumableArray(tokensToQueue));\n }\n }\n\n return this.onToken(this._toToken(token, yytext));\n }\n }\n\n if (this.isEOF()) {\n this._cursor++;\n return EOF_TOKEN;\n }\n\n this.throwUnexpectedToken(string[0], this._currentLine, this._currentColumn);\n },\n\n\n /**\n * Throws default \"Unexpected token\" exception, showing the actual\n * line from the source, pointing with the ^ marker to the bad token.\n * In addition, shows `line:column` location.\n */\n throwUnexpectedToken: function throwUnexpectedToken(symbol, line, column) {\n var lineSource = this._string.split('\\n')[line - 1];\n var lineData = '';\n\n if (lineSource) {\n var pad = ' '.repeat(column);\n lineData = '\\n\\n' + lineSource + '\\n' + pad + '^\\n';\n }\n\n throw new SyntaxError(lineData + 'Unexpected token: \"' + symbol + '\" ' + ('at ' + line + ':' + column + '.'));\n },\n getCursor: function getCursor() {\n return this._cursor;\n },\n getCurrentLine: function getCurrentLine() {\n return this._currentLine;\n },\n getCurrentColumn: function getCurrentColumn() {\n return this._currentColumn;\n },\n _captureLocation: function _captureLocation(matched) {\n var nlRe = /\\n/g;\n\n // Absolute offsets.\n this._tokenStartOffset = this._cursor;\n\n // Line-based locations, start.\n this._tokenStartLine = this._currentLine;\n this._tokenStartColumn = this._tokenStartOffset - this._currentLineBeginOffset;\n\n // Extract `\\n` in the matched token.\n var nlMatch = void 0;\n while ((nlMatch = nlRe.exec(matched)) !== null) {\n this._currentLine++;\n this._currentLineBeginOffset = this._tokenStartOffset + nlMatch.index + 1;\n }\n\n this._tokenEndOffset = this._cursor + matched.length;\n\n // Line-based locations, end.\n this._tokenEndLine = this._currentLine;\n this._tokenEndColumn = this._currentColumn = this._tokenEndOffset - this._currentLineBeginOffset;\n },\n _toToken: function _toToken(tokenType) {\n var yytext = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n\n return {\n // Basic data.\n type: tokenType,\n value: yytext,\n\n // Location data.\n startOffset: this._tokenStartOffset,\n endOffset: this._tokenEndOffset,\n startLine: this._tokenStartLine,\n endLine: this._tokenEndLine,\n startColumn: this._tokenStartColumn,\n endColumn: this._tokenEndColumn\n };\n },\n isEOF: function isEOF() {\n return this._cursor === this._string.length;\n },\n hasMoreTokens: function hasMoreTokens() {\n return this._cursor <= this._string.length;\n },\n _match: function _match(string, regexp) {\n var matched = string.match(regexp);\n if (matched) {\n // Handle `\\n` in the matched token to track line numbers.\n this._captureLocation(matched[0]);\n this._cursor += matched[0].length;\n return matched[0];\n }\n return null;\n },\n\n\n /**\n * Allows analyzing, and transforming token. Default implementation\n * just passes the token through.\n */\n onToken: function onToken(token) {\n return token;\n }\n};\n\n/**\n * Expose tokenizer so it can be accessed in semantic actions.\n */\nyy.lexer = tokenizer;\nyy.tokenizer = tokenizer;\n\n/**\n * Global parsing options. Some options can be shadowed per\n * each `parse` call, if the optations are passed.\n *\n * Initalized to the `captureLocations` which is passed\n * from the generator. Other options can be added at runtime.\n */\nyy.options = {\n captureLocations: true\n};\n\n/**\n * Parsing module.\n */\nvar yyparse = {\n /**\n * Sets global parsing options.\n */\n setOptions: function setOptions(options) {\n yy.options = options;\n return this;\n },\n\n\n /**\n * Returns parsing options.\n */\n getOptions: function getOptions() {\n return yy.options;\n },\n\n\n /**\n * Parses a string.\n */\n parse: function parse(string, parseOptions) {\n if (!tokenizer) {\n throw new Error('Tokenizer instance wasn\\'t specified.');\n }\n\n tokenizer.initString(string);\n\n /**\n * If parse options are passed, override global parse options for\n * this call, and later restore global options.\n */\n var globalOptions = yy.options;\n if (parseOptions) {\n yy.options = Object.assign({}, yy.options, parseOptions);\n }\n\n /**\n * Allow callers to do setup work based on the\n * parsing string, and passed options.\n */\n yyparse.onParseBegin(string, tokenizer, yy.options);\n\n stack.length = 0;\n stack.push(0);\n\n var token = tokenizer.getNextToken();\n var shiftedToken = null;\n\n do {\n if (!token) {\n // Restore options.\n yy.options = globalOptions;\n unexpectedEndOfInput();\n }\n\n var state = stack[stack.length - 1];\n var column = tokens[token.type];\n\n if (!table[state].hasOwnProperty(column)) {\n yy.options = globalOptions;\n unexpectedToken(token);\n }\n\n var entry = table[state][column];\n\n // Shift action.\n if (entry[0] === 's') {\n var _loc2 = null;\n\n if (yy.options.captureLocations) {\n _loc2 = {\n startOffset: token.startOffset,\n endOffset: token.endOffset,\n startLine: token.startLine,\n endLine: token.endLine,\n startColumn: token.startColumn,\n endColumn: token.endColumn\n };\n }\n\n shiftedToken = this.onShift(token);\n\n stack.push({ symbol: tokens[shiftedToken.type], semanticValue: shiftedToken.value, loc: _loc2 }, Number(entry.slice(1)));\n\n token = tokenizer.getNextToken();\n }\n\n // Reduce action.\n else if (entry[0] === 'r') {\n var productionNumber = entry.slice(1);\n var production = productions[productionNumber];\n var hasSemanticAction = typeof production[2] === 'function';\n var semanticValueArgs = hasSemanticAction ? [] : null;\n\n var locationArgs = hasSemanticAction && yy.options.captureLocations ? [] : null;\n\n if (production[1] !== 0) {\n var rhsLength = production[1];\n while (rhsLength-- > 0) {\n stack.pop();\n var stackEntry = stack.pop();\n\n if (hasSemanticAction) {\n semanticValueArgs.unshift(stackEntry.semanticValue);\n\n if (locationArgs) {\n locationArgs.unshift(stackEntry.loc);\n }\n }\n }\n }\n\n var reduceStackEntry = { symbol: production[0] };\n\n if (hasSemanticAction) {\n yytext = shiftedToken ? shiftedToken.value : null;\n yyleng = shiftedToken ? shiftedToken.value.length : null;\n\n var semanticActionArgs = locationArgs !== null ? semanticValueArgs.concat(locationArgs) : semanticValueArgs;\n\n production[2].apply(production, _toConsumableArray(semanticActionArgs));\n\n reduceStackEntry.semanticValue = __;\n\n if (locationArgs) {\n reduceStackEntry.loc = __loc;\n }\n }\n\n var nextState = stack[stack.length - 1];\n var symbolToReduceWith = production[0];\n\n stack.push(reduceStackEntry, table[nextState][symbolToReduceWith]);\n }\n\n // Accept.\n else if (entry === 'acc') {\n stack.pop();\n var parsed = stack.pop();\n\n if (stack.length !== 1 || stack[0] !== 0 || tokenizer.hasMoreTokens()) {\n // Restore options.\n yy.options = globalOptions;\n unexpectedToken(token);\n }\n\n if (parsed.hasOwnProperty('semanticValue')) {\n yy.options = globalOptions;\n yyparse.onParseEnd(parsed.semanticValue);\n return parsed.semanticValue;\n }\n\n yyparse.onParseEnd();\n\n // Restore options.\n yy.options = globalOptions;\n return true;\n }\n } while (tokenizer.hasMoreTokens() || stack.length > 1);\n },\n setTokenizer: function setTokenizer(customTokenizer) {\n tokenizer = customTokenizer;\n return yyparse;\n },\n getTokenizer: function getTokenizer() {\n return tokenizer;\n },\n onParseBegin: function onParseBegin(string, tokenizer, options) {},\n onParseEnd: function onParseEnd(parsed) {},\n\n\n /**\n * Allows analyzing, and transforming shifted token. Default implementation\n * just passes the token through.\n */\n onShift: function onShift(token) {\n return token;\n }\n};\n\n/**\n * Tracks capturing groups.\n */\nvar capturingGroupsCount = 0;\n\n/**\n * Tracks named groups.\n */\nvar namedGroups = {};\n\n/**\n * Parsing string.\n */\nvar parsingString = '';\n\nyyparse.onParseBegin = function (string, lexer) {\n parsingString = string;\n capturingGroupsCount = 0;\n namedGroups = {};\n\n var lastSlash = string.lastIndexOf('/');\n var flags = string.slice(lastSlash);\n\n if (flags.includes('x') && flags.includes('u')) {\n lexer.pushState('xu');\n } else {\n if (flags.includes('x')) {\n lexer.pushState('x');\n }\n if (flags.includes('u')) {\n lexer.pushState('u');\n }\n }\n};\n\n/**\n * On shifting `(` remember its number to used on reduce.\n */\nyyparse.onShift = function (token) {\n if (token.type === 'L_PAREN' || token.type === 'NAMED_CAPTURE_GROUP') {\n token.value = new String(token.value);\n token.value.groupNumber = ++capturingGroupsCount;\n }\n return token;\n};\n\n/**\n * Extracts ranges from the range string.\n */\nfunction getRange(text) {\n var range = text.match(/\\d+/g).map(Number);\n\n if (Number.isFinite(range[1]) && range[1] < range[0]) {\n throw new SyntaxError('Numbers out of order in ' + text + ' quantifier');\n }\n\n return range;\n}\n\n/**\n * Checks class range\n */\nfunction checkClassRange(from, to) {\n if (from.kind === 'control' || to.kind === 'control' || !isNaN(from.codePoint) && !isNaN(to.codePoint) && from.codePoint > to.codePoint) {\n throw new SyntaxError('Range ' + from.value + '-' + to.value + ' out of order in character class');\n }\n}\n\n// ---------------------- Unicode property -------------------------------------------\n\nvar unicodeProperties = require('../unicode/parser-unicode-properties.js');\n\n/**\n * Unicode property.\n */\nfunction UnicodeProperty(matched, loc) {\n var negative = matched[1] === 'P';\n var separatorIdx = matched.indexOf('=');\n\n var name = matched.slice(3, separatorIdx !== -1 ? separatorIdx : -1);\n var value = void 0;\n\n // General_Category allows using only value as a shorthand.\n var isShorthand = separatorIdx === -1 && unicodeProperties.isGeneralCategoryValue(name);\n\n // Binary propery name.\n var isBinaryProperty = separatorIdx === -1 && unicodeProperties.isBinaryPropertyName(name);\n\n if (isShorthand) {\n value = name;\n name = 'General_Category';\n } else if (isBinaryProperty) {\n value = name;\n } else {\n if (!unicodeProperties.isValidName(name)) {\n throw new SyntaxError('Invalid unicode property name: ' + name + '.');\n }\n\n value = matched.slice(separatorIdx + 1, -1);\n\n if (!unicodeProperties.isValidValue(name, value)) {\n throw new SyntaxError('Invalid ' + name + ' unicode property value: ' + value + '.');\n }\n }\n\n return Node({\n type: 'UnicodeProperty',\n name: name,\n value: value,\n negative: negative,\n shorthand: isShorthand,\n binary: isBinaryProperty,\n canonicalName: unicodeProperties.getCanonicalName(name) || name,\n canonicalValue: unicodeProperties.getCanonicalValue(value) || value\n }, loc);\n}\n\n// ----------------------------------------------------------------------------------\n\n\n/**\n * Creates a character node.\n */\nfunction Char(value, kind, loc) {\n var symbol = void 0;\n var codePoint = void 0;\n\n switch (kind) {\n case 'decimal':\n {\n codePoint = Number(value.slice(1));\n symbol = String.fromCodePoint(codePoint);\n break;\n }\n case 'oct':\n {\n codePoint = parseInt(value.slice(1), 8);\n symbol = String.fromCodePoint(codePoint);\n break;\n }\n case 'hex':\n case 'unicode':\n {\n if (value.lastIndexOf('\\\\u') > 0) {\n var _value$split$slice = value.split('\\\\u').slice(1),\n _value$split$slice2 = _slicedToArray(_value$split$slice, 2),\n lead = _value$split$slice2[0],\n trail = _value$split$slice2[1];\n\n lead = parseInt(lead, 16);\n trail = parseInt(trail, 16);\n codePoint = (lead - 0xd800) * 0x400 + (trail - 0xdc00) + 0x10000;\n\n symbol = String.fromCodePoint(codePoint);\n } else {\n var hex = value.slice(2).replace('{', '');\n codePoint = parseInt(hex, 16);\n if (codePoint > 0x10ffff) {\n throw new SyntaxError('Bad character escape sequence: ' + value);\n }\n\n symbol = String.fromCodePoint(codePoint);\n }\n break;\n }\n case 'meta':\n {\n switch (value) {\n case '\\\\t':\n symbol = '\\t';\n codePoint = symbol.codePointAt(0);\n break;\n case '\\\\n':\n symbol = '\\n';\n codePoint = symbol.codePointAt(0);\n break;\n case '\\\\r':\n symbol = '\\r';\n codePoint = symbol.codePointAt(0);\n break;\n case '\\\\v':\n symbol = '\\v';\n codePoint = symbol.codePointAt(0);\n break;\n case '\\\\f':\n symbol = '\\f';\n codePoint = symbol.codePointAt(0);\n break;\n case '\\\\b':\n symbol = '\\b';\n codePoint = symbol.codePointAt(0);\n case '\\\\0':\n symbol = '\\0';\n codePoint = 0;\n case '.':\n symbol = '.';\n codePoint = NaN;\n break;\n default:\n codePoint = NaN;\n }\n break;\n }\n case 'simple':\n {\n symbol = value;\n codePoint = symbol.codePointAt(0);\n break;\n }\n }\n\n return Node({\n type: 'Char',\n value: value,\n kind: kind,\n symbol: symbol,\n codePoint: codePoint\n }, loc);\n}\n\n/**\n * Valid flags per current ECMAScript spec and\n * stage 3+ proposals.\n */\nvar validFlags = 'gimsuxy';\n\n/**\n * Checks the flags are valid, and that\n * we don't duplicate flags.\n */\nfunction checkFlags(flags) {\n var seen = new Set();\n\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = flags[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var flag = _step.value;\n\n if (seen.has(flag) || !validFlags.includes(flag)) {\n throw new SyntaxError('Invalid flags: ' + flags);\n }\n seen.add(flag);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n return flags.split('').sort().join('');\n}\n\n/**\n * Parses patterns like \\1, \\2, etc. either as a backreference\n * to a group, or a deciaml char code.\n */\nfunction GroupRefOrDecChar(text, textLoc) {\n var reference = Number(text.slice(1));\n\n if (reference > 0 && reference <= capturingGroupsCount) {\n return Node({\n type: 'Backreference',\n kind: 'number',\n number: reference,\n reference: reference\n }, textLoc);\n }\n\n return Char(text, 'decimal', textLoc);\n}\n\n/**\n * Unicode names.\n */\nvar uReStart = /^\\\\u[0-9a-fA-F]{4}/; // only matches start of string\nvar ucpReStart = /^\\\\u\\{[0-9a-fA-F]{1,}\\}/; // only matches start of string\nvar ucpReAnywhere = /\\\\u\\{[0-9a-fA-F]{1,}\\}/; // matches anywhere in string\n\n/**\n * Validates Unicode group name.\n */\nfunction validateUnicodeGroupName(name, state) {\n var isUnicodeName = ucpReAnywhere.test(name);\n var isUnicodeState = state === 'u' || state === 'xu' || state === 'u_class';\n\n if (isUnicodeName && !isUnicodeState) {\n throw new SyntaxError('invalid group Unicode name \"' + name + '\", use `u` flag.');\n }\n\n return name;\n}\n\n// Matches the following production: https://tc39.es/ecma262/#prod-RegExpUnicodeEscapeSequence\n//\n// RegExpUnicodeEscapeSequence ::\n// `u` LeadSurrogate `\\u` TrailSurrogate # as 'leadSurrogate', 'trailSurrogate'\n// `u` LeadSurrogate # as 'leadSurrogateOnly'\n// `u` TrailSurrogate # as 'trailSurrogateOnly'\n// `u` NonSurrogate # as 'nonSurrogate'\n// `u` `{` CodePoint `}` # as 'codePoint'\n//\n// LeadSurrogate ::\n// Hex4Digits but only if the SV of Hex4Digits is in the inclusive range 0xD800 to 0xDBFF # [dD][89aAbB][0-9a-fA-F]{2}\n//\n// TrailSurrogate ::\n// Hex4Digits but only if the SV of Hex4Digits is in the inclusive range 0xDC00 to 0xDFFF # [dD][c-fC-F][0-9a-fA-F]{2}\n//\n// NonSurrogate ::\n// Hex4Digits but only if the SV of Hex4Digits is not in the inclusive range 0xD800 to 0xDFFF # [0-9a-ce-fA-CE-F][0-9a-fA-F]{3}|[dD][0-7][0-9a-fA-F]{2}\n//\n// CodePoint ::\n// HexDigits but only if MV of HexDigits ≤ 0x10FFFF # 0*(?:[0-9a-fA-F]{1,5}|10[0-9a-fA-F]{4})\n//\nvar uidRe = /\\\\u(?:([dD][89aAbB][0-9a-fA-F]{2})\\\\u([dD][c-fC-F][0-9a-fA-F]{2})|([dD][89aAbB][0-9a-fA-F]{2})|([dD][c-fC-F][0-9a-fA-F]{2})|([0-9a-ce-fA-CE-F][0-9a-fA-F]{3}|[dD][0-7][0-9a-fA-F]{2})|\\{(0*(?:[0-9a-fA-F]{1,5}|10[0-9a-fA-F]{4}))\\})/;\n\nfunction decodeUnicodeGroupName(name) {\n return name.replace(new RegExp(uidRe, 'g'), function (_, leadSurrogate, trailSurrogate, leadSurrogateOnly, trailSurrogateOnly, nonSurrogate, codePoint) {\n if (leadSurrogate) {\n return String.fromCodePoint(parseInt(leadSurrogate, 16), parseInt(trailSurrogate, 16));\n }\n if (leadSurrogateOnly) {\n return String.fromCodePoint(parseInt(leadSurrogateOnly, 16));\n }\n if (trailSurrogateOnly) {\n // TODO: Per the spec: https://tc39.es/ecma262/#prod-RegExpUnicodeEscapeSequence\n // > Each `\\u` TrailSurrogate for which the choice of associated `u` LeadSurrogate is ambiguous shall be associated with the nearest possible `u` LeadSurrogate that would otherwise have no corresponding `\\u` TrailSurrogate.\n return String.fromCodePoint(parseInt(trailSurrogateOnly, 16));\n }\n if (nonSurrogate) {\n return String.fromCodePoint(parseInt(nonSurrogate, 16));\n }\n if (codePoint) {\n return String.fromCodePoint(parseInt(codePoint, 16));\n }\n return _;\n });\n}\n\n/**\n * Extracts from `\\k<foo>` pattern either a backreference\n * to a named capturing group (if it presents), or parses it\n * as a list of char: `\\k`, `<`, `f`, etc.\n */\nfunction NamedGroupRefOrChars(text, textLoc) {\n var referenceRaw = text.slice(3, -1);\n var reference = decodeUnicodeGroupName(referenceRaw);\n\n if (namedGroups.hasOwnProperty(reference)) {\n return Node({\n type: 'Backreference',\n kind: 'name',\n number: namedGroups[reference],\n reference: reference,\n referenceRaw: referenceRaw\n }, textLoc);\n }\n\n // Else `\\k<foo>` should be parsed as a list of `Char`s.\n // This is really a 0.01% edge case, but we should handle it.\n\n var startOffset = null;\n var startLine = null;\n var endLine = null;\n var startColumn = null;\n\n if (textLoc) {\n startOffset = textLoc.startOffset;\n startLine = textLoc.startLine;\n endLine = textLoc.endLine;\n startColumn = textLoc.startColumn;\n }\n\n var charRe = /^[\\w$<>]/;\n var loc = void 0;\n\n var chars = [\n // Init to first \\k, taking 2 symbols.\n Char(text.slice(1, 2), 'simple', startOffset ? {\n startLine: startLine,\n endLine: endLine,\n startColumn: startColumn,\n startOffset: startOffset,\n endOffset: startOffset += 2,\n endColumn: startColumn += 2\n } : null)];\n\n // For \\k\n chars[0].escaped = true;\n\n // Other symbols.\n text = text.slice(2);\n\n while (text.length > 0) {\n var matched = null;\n\n // Unicode, \\u003B or \\u{003B}\n if ((matched = text.match(uReStart)) || (matched = text.match(ucpReStart))) {\n if (startOffset) {\n loc = {\n startLine: startLine,\n endLine: endLine,\n startColumn: startColumn,\n startOffset: startOffset,\n endOffset: startOffset += matched[0].length,\n endColumn: startColumn += matched[0].length\n };\n }\n chars.push(Char(matched[0], 'unicode', loc));\n text = text.slice(matched[0].length);\n }\n\n // Simple char.\n else if (matched = text.match(charRe)) {\n if (startOffset) {\n loc = {\n startLine: startLine,\n endLine: endLine,\n startColumn: startColumn,\n startOffset: startOffset,\n endOffset: ++startOffset,\n endColumn: ++startColumn\n };\n }\n chars.push(Char(matched[0], 'simple', loc));\n text = text.slice(1);\n }\n }\n\n return chars;\n}\n\n/**\n * Creates an AST node with a location.\n */\nfunction Node(node, loc) {\n if (yy.options.captureLocations) {\n node.loc = {\n source: parsingString.slice(loc.startOffset, loc.endOffset),\n start: {\n line: loc.startLine,\n column: loc.startColumn,\n offset: loc.startOffset\n },\n end: {\n line: loc.endLine,\n column: loc.endColumn,\n offset: loc.endOffset\n }\n };\n }\n return node;\n}\n\n/**\n * Creates location node.\n */\nfunction loc(start, end) {\n if (!yy.options.captureLocations) {\n return null;\n }\n\n return {\n startOffset: start.startOffset,\n endOffset: end.endOffset,\n startLine: start.startLine,\n endLine: end.endLine,\n startColumn: start.startColumn,\n endColumn: end.endColumn\n };\n}\n\nfunction unexpectedToken(token) {\n if (token.type === EOF) {\n unexpectedEndOfInput();\n }\n\n tokenizer.throwUnexpectedToken(token.value, token.startLine, token.startColumn);\n}\n\nfunction unexpectedEndOfInput() {\n parseError('Unexpected end of input.');\n}\n\nfunction parseError(message) {\n throw new SyntaxError(message);\n}\n\nmodule.exports = yyparse;","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\nvar regexpTreeParser = require('./generated/regexp-tree');\n\n/**\n * Original parse function.\n */\nvar generatedParseFn = regexpTreeParser.parse.bind(regexpTreeParser);\n\n/**\n * Parses a regular expression.\n *\n * Override original `regexpTreeParser.parse` to convert a value to a string,\n * since in regexp-tree we may pass strings, and RegExp instance.\n */\nregexpTreeParser.parse = function (regexp, options) {\n return generatedParseFn('' + regexp, options);\n};\n\n// By default do not capture locations; callers may override.\nregexpTreeParser.setOptions({ captureLocations: false });\n\nmodule.exports = regexpTreeParser;","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar DEFAULT_COLLECTION_PROP = 'expressions';\nvar DEFAULT_SINGLE_PROP = 'expression';\n\n/**\n * NodePath class encapsulates a traversing node,\n * its parent node, property name in the parent node, and\n * an index (in case if a node is part of a collection).\n * It also provides set of methods for AST manipulation.\n */\n\nvar NodePath = function () {\n /**\n * NodePath constructor.\n *\n * @param Object node - an AST node\n * @param NodePath parentPath - a nullable parent path\n * @param string property - property name of the node in the parent\n * @param number index - index of the node in a collection.\n */\n function NodePath(node) {\n var parentPath = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var property = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var index = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n _classCallCheck(this, NodePath);\n\n this.node = node;\n this.parentPath = parentPath;\n this.parent = parentPath ? parentPath.node : null;\n this.property = property;\n this.index = index;\n }\n\n _createClass(NodePath, [{\n key: '_enforceProp',\n value: function _enforceProp(property) {\n if (!this.node.hasOwnProperty(property)) {\n throw new Error('Node of type ' + this.node.type + ' doesn\\'t have \"' + property + '\" collection.');\n }\n }\n\n /**\n * Sets a node into a children collection or the single child.\n * By default child nodes are supposed to be under `expressions` property.\n * An explicit property can be passed.\n *\n * @param Object node - a node to set into a collection or as single child\n * @param number index - index at which to set\n * @param string property - name of the collection or single property\n */\n\n }, {\n key: 'setChild',\n value: function setChild(node) {\n var index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var property = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n\n var childPath = void 0;\n if (index != null) {\n if (!property) {\n property = DEFAULT_COLLECTION_PROP;\n }\n this._enforceProp(property);\n this.node[property][index] = node;\n childPath = NodePath.getForNode(node, this, property, index);\n } else {\n if (!property) {\n property = DEFAULT_SINGLE_PROP;\n }\n this._enforceProp(property);\n this.node[property] = node;\n childPath = NodePath.getForNode(node, this, property, null);\n }\n return childPath;\n }\n\n /**\n * Appends a node to a children collection.\n * By default child nodes are supposed to be under `expressions` property.\n * An explicit property can be passed.\n *\n * @param Object node - a node to set into a collection or as single child\n * @param string property - name of the collection or single property\n */\n\n }, {\n key: 'appendChild',\n value: function appendChild(node) {\n var property = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n\n if (!property) {\n property = DEFAULT_COLLECTION_PROP;\n }\n this._enforceProp(property);\n var end = this.node[property].length;\n return this.setChild(node, end, property);\n }\n\n /**\n * Inserts a node into a collection.\n * By default child nodes are supposed to be under `expressions` property.\n * An explicit property can be passed.\n *\n * @param Object node - a node to insert into a collection\n * @param number index - index at which to insert\n * @param string property - name of the collection property\n */\n\n }, {\n key: 'insertChildAt',\n value: function insertChildAt(node, index) {\n var property = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : DEFAULT_COLLECTION_PROP;\n\n this._enforceProp(property);\n\n this.node[property].splice(index, 0, node);\n\n // If we inserted a node before the traversing index,\n // we should increase the later.\n if (index <= NodePath.getTraversingIndex()) {\n NodePath.updateTraversingIndex(+1);\n }\n\n this._rebuildIndex(this.node, property);\n }\n\n /**\n * Removes a node.\n */\n\n }, {\n key: 'remove',\n value: function remove() {\n if (this.isRemoved()) {\n return;\n }\n NodePath.registry.delete(this.node);\n\n this.node = null;\n\n if (!this.parent) {\n return;\n }\n\n // A node is in a collection.\n if (this.index !== null) {\n this.parent[this.property].splice(this.index, 1);\n\n // If we remove a node before the traversing index,\n // we should increase the later.\n if (this.index <= NodePath.getTraversingIndex()) {\n NodePath.updateTraversingIndex(-1);\n }\n\n // Rebuild index.\n this._rebuildIndex(this.parent, this.property);\n\n this.index = null;\n this.property = null;\n\n return;\n }\n\n // A simple node.\n delete this.parent[this.property];\n this.property = null;\n }\n\n /**\n * Rebuilds child nodes index (used on remove/insert).\n */\n\n }, {\n key: '_rebuildIndex',\n value: function _rebuildIndex(parent, property) {\n var parentPath = NodePath.getForNode(parent);\n\n for (var i = 0; i < parent[property].length; i++) {\n var path = NodePath.getForNode(parent[property][i], parentPath, property, i);\n path.index = i;\n }\n }\n\n /**\n * Whether the path was removed.\n */\n\n }, {\n key: 'isRemoved',\n value: function isRemoved() {\n return this.node === null;\n }\n\n /**\n * Replaces a node with the passed one.\n */\n\n }, {\n key: 'replace',\n value: function replace(newNode) {\n NodePath.registry.delete(this.node);\n\n this.node = newNode;\n\n if (!this.parent) {\n return null;\n }\n\n // A node is in a collection.\n if (this.index !== null) {\n this.parent[this.property][this.index] = newNode;\n }\n\n // A simple node.\n else {\n this.parent[this.property] = newNode;\n }\n\n // Rebuild the node path for the new node.\n return NodePath.getForNode(newNode, this.parentPath, this.property, this.index);\n }\n\n /**\n * Updates a node inline.\n */\n\n }, {\n key: 'update',\n value: function update(nodeProps) {\n Object.assign(this.node, nodeProps);\n }\n\n /**\n * Returns parent.\n */\n\n }, {\n key: 'getParent',\n value: function getParent() {\n return this.parentPath;\n }\n\n /**\n * Returns nth child.\n */\n\n }, {\n key: 'getChild',\n value: function getChild() {\n var n = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n if (this.node.expressions) {\n return NodePath.getForNode(this.node.expressions[n], this, DEFAULT_COLLECTION_PROP, n);\n } else if (this.node.expression && n == 0) {\n return NodePath.getForNode(this.node.expression, this, DEFAULT_SINGLE_PROP);\n }\n return null;\n }\n\n /**\n * Whether a path node is syntactically equal to the passed one.\n *\n * NOTE: we don't rely on `source` property from the `loc` data\n * (which would be the fastest comparison), since it might be unsync\n * after several modifications. We use here simple `JSON.stringify`\n * excluding the `loc` data.\n *\n * @param NodePath other - path to compare to.\n * @return boolean\n */\n\n }, {\n key: 'hasEqualSource',\n value: function hasEqualSource(path) {\n return JSON.stringify(this.node, jsonSkipLoc) === JSON.stringify(path.node, jsonSkipLoc);\n }\n\n /**\n * JSON-encodes a node skipping location.\n */\n\n }, {\n key: 'jsonEncode',\n value: function jsonEncode() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n format = _ref.format,\n useLoc = _ref.useLoc;\n\n return JSON.stringify(this.node, useLoc ? null : jsonSkipLoc, format);\n }\n\n /**\n * Returns previous sibling.\n */\n\n }, {\n key: 'getPreviousSibling',\n value: function getPreviousSibling() {\n if (!this.parent || this.index == null) {\n return null;\n }\n return NodePath.getForNode(this.parent[this.property][this.index - 1], NodePath.getForNode(this.parent), this.property, this.index - 1);\n }\n\n /**\n * Returns next sibling.\n */\n\n }, {\n key: 'getNextSibling',\n value: function getNextSibling() {\n if (!this.parent || this.index == null) {\n return null;\n }\n return NodePath.getForNode(this.parent[this.property][this.index + 1], NodePath.getForNode(this.parent), this.property, this.index + 1);\n }\n\n /**\n * Returns a NodePath instance for a node.\n *\n * The same NodePath can be reused in several places, e.g.\n * a parent node passed for all its children.\n */\n\n }], [{\n key: 'getForNode',\n value: function getForNode(node) {\n var parentPath = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var prop = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var index = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : -1;\n\n if (!node) {\n return null;\n }\n\n if (!NodePath.registry.has(node)) {\n NodePath.registry.set(node, new NodePath(node, parentPath, prop, index == -1 ? null : index));\n }\n\n var path = NodePath.registry.get(node);\n\n if (parentPath !== null) {\n path.parentPath = parentPath;\n path.parent = path.parentPath.node;\n }\n\n if (prop !== null) {\n path.property = prop;\n }\n\n if (index >= 0) {\n path.index = index;\n }\n\n return path;\n }\n\n /**\n * Initializes the NodePath registry. The registry is a map from\n * a node to its NodePath instance.\n */\n\n }, {\n key: 'initRegistry',\n value: function initRegistry() {\n if (!NodePath.registry) {\n NodePath.registry = new Map();\n }\n NodePath.registry.clear();\n }\n\n /**\n * Updates index of a currently traversing collection.\n */\n\n }, {\n key: 'updateTraversingIndex',\n value: function updateTraversingIndex(dx) {\n return NodePath.traversingIndexStack[NodePath.traversingIndexStack.length - 1] += dx;\n }\n\n /**\n * Returns current traversing index.\n */\n\n }, {\n key: 'getTraversingIndex',\n value: function getTraversingIndex() {\n return NodePath.traversingIndexStack[NodePath.traversingIndexStack.length - 1];\n }\n }]);\n\n return NodePath;\n}();\n\nNodePath.initRegistry();\n\n/**\n * Index of a currently traversing collection is stored on top of the\n * `NodePath.traversingIndexStack`. Remove/insert methods can adjust\n * this index.\n */\nNodePath.traversingIndexStack = [];\n\n// Helper function used to skip `loc` in JSON operations.\nfunction jsonSkipLoc(prop, value) {\n if (prop === 'loc') {\n return undefined;\n }\n return value;\n}\n\nmodule.exports = NodePath;","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\nvar NodePath = require('./node-path');\n\n/**\n * Does an actual AST traversal, using visitor pattern,\n * and calling set of callbacks.\n *\n * Based on https://github.com/olov/ast-traverse\n *\n * Expects AST in Mozilla Parser API: nodes which are supposed to be\n * handled should have `type` property.\n *\n * @param Object root - a root node to start traversal from.\n *\n * @param Object options - an object with set of callbacks:\n *\n * - `pre(node, parent, prop, index)` - a hook called on node enter\n * - `post`(node, parent, prop, index) - a hook called on node exit\n * - `skipProperty(prop)` - a predicated whether a property should be skipped\n */\nfunction astTraverse(root) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var pre = options.pre;\n var post = options.post;\n var skipProperty = options.skipProperty;\n\n function visit(node, parent, prop, idx) {\n if (!node || typeof node.type !== 'string') {\n return;\n }\n\n var res = undefined;\n if (pre) {\n res = pre(node, parent, prop, idx);\n }\n\n if (res !== false) {\n\n // A node can be replaced during traversal, so we have to\n // recalculate it from the parent, to avoid traversing \"dead\" nodes.\n if (parent && parent[prop]) {\n if (!isNaN(idx)) {\n node = parent[prop][idx];\n } else {\n node = parent[prop];\n }\n }\n\n for (var _prop in node) {\n if (node.hasOwnProperty(_prop)) {\n if (skipProperty ? skipProperty(_prop, node) : _prop[0] === '$') {\n continue;\n }\n\n var child = node[_prop];\n\n // Collection node.\n //\n // NOTE: a node (or several nodes) can be removed or inserted\n // during traversal.\n //\n // Current traversing index is stored on top of the\n // `NodePath.traversingIndexStack`. The stack is used to support\n // recursive nature of the traversal.\n //\n // In this case `NodePath.traversingIndex` (which we use here) is\n // updated in the NodePath remove/insert methods.\n //\n if (Array.isArray(child)) {\n var index = 0;\n NodePath.traversingIndexStack.push(index);\n while (index < child.length) {\n visit(child[index], node, _prop, index);\n index = NodePath.updateTraversingIndex(+1);\n }\n NodePath.traversingIndexStack.pop();\n }\n\n // Simple node.\n else {\n visit(child, node, _prop);\n }\n }\n }\n }\n\n if (post) {\n post(node, parent, prop, idx);\n }\n }\n\n visit(root, null);\n}\n\nmodule.exports = {\n /**\n * Traverses an AST.\n *\n * @param Object ast - an AST node\n *\n * @param Object | Array<Object> handlers:\n *\n * an object (or an array of objects)\n *\n * Each such object contains a handler function per node.\n * In case of an array of handlers, they are applied in order.\n * A handler may return a transformed node (or a different type).\n *\n * The per-node function may instead be an object with functions pre and post.\n * pre is called before visiting the node, post after.\n * If a handler is a function, it is treated as the pre function, with an empty post.\n *\n * @param Object options:\n *\n * a config object, specifying traversal options:\n *\n * `asNodes`: boolean - whether handlers should receives raw AST nodes\n * (false by default), instead of a `NodePath` wrapper. Note, by default\n * `NodePath` wrapper provides a set of convenient method to manipulate\n * a traversing AST, and also has access to all parents list. A raw\n * nodes traversal should be used in rare cases, when no `NodePath`\n * features are needed.\n *\n * Special hooks:\n *\n * - `shouldRun(ast)` - a predicate determining whether the handler\n * should be applied.\n *\n * NOTE: Multiple handlers are used as an optimization of applying all of\n * them in one AST traversal pass.\n */\n traverse: function traverse(ast, handlers) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : { asNodes: false };\n\n\n if (!Array.isArray(handlers)) {\n handlers = [handlers];\n }\n\n // Filter out handlers by result of `shouldRun`, if the method is present.\n handlers = handlers.filter(function (handler) {\n if (typeof handler.shouldRun !== 'function') {\n return true;\n }\n return handler.shouldRun(ast);\n });\n\n NodePath.initRegistry();\n\n // Allow handlers to initializer themselves.\n handlers.forEach(function (handler) {\n if (typeof handler.init === 'function') {\n handler.init(ast);\n }\n });\n\n function getPathFor(node, parent, prop, index) {\n var parentPath = NodePath.getForNode(parent);\n var nodePath = NodePath.getForNode(node, parentPath, prop, index);\n\n return nodePath;\n }\n\n // Handle actual nodes.\n astTraverse(ast, {\n /**\n * Handler on node enter.\n */\n pre: function pre(node, parent, prop, index) {\n var nodePath = void 0;\n if (!options.asNodes) {\n nodePath = getPathFor(node, parent, prop, index);\n }\n\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = handlers[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var handler = _step.value;\n\n // \"Catch-all\" `*` handler.\n if (typeof handler['*'] === 'function') {\n if (nodePath) {\n // A path/node can be removed by some previous handler.\n if (!nodePath.isRemoved()) {\n var handlerResult = handler['*'](nodePath);\n // Explicitly stop traversal.\n if (handlerResult === false) {\n return false;\n }\n }\n } else {\n handler['*'](node, parent, prop, index);\n }\n }\n\n // Per-node handler.\n var handlerFuncPre = void 0;\n if (typeof handler[node.type] === 'function') {\n handlerFuncPre = handler[node.type];\n } else if (typeof handler[node.type] === 'object' && typeof handler[node.type].pre === 'function') {\n handlerFuncPre = handler[node.type].pre;\n }\n\n if (handlerFuncPre) {\n if (nodePath) {\n // A path/node can be removed by some previous handler.\n if (!nodePath.isRemoved()) {\n var _handlerResult = handlerFuncPre.call(handler, nodePath);\n // Explicitly stop traversal.\n if (_handlerResult === false) {\n return false;\n }\n }\n } else {\n handlerFuncPre.call(handler, node, parent, prop, index);\n }\n }\n } // Loop over handlers\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n },\n // pre func\n\n /**\n * Handler on node exit.\n */\n post: function post(node, parent, prop, index) {\n if (!node) {\n return;\n }\n\n var nodePath = void 0;\n if (!options.asNodes) {\n nodePath = getPathFor(node, parent, prop, index);\n }\n\n var _iteratorNormalCompletion2 = true;\n var _didIteratorError2 = false;\n var _iteratorError2 = undefined;\n\n try {\n for (var _iterator2 = handlers[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var handler = _step2.value;\n\n // Per-node handler.\n var handlerFuncPost = void 0;\n if (typeof handler[node.type] === 'object' && typeof handler[node.type].post === 'function') {\n handlerFuncPost = handler[node.type].post;\n }\n\n if (handlerFuncPost) {\n if (nodePath) {\n // A path/node can be removed by some previous handler.\n if (!nodePath.isRemoved()) {\n var handlerResult = handlerFuncPost.call(handler, nodePath);\n // Explicitly stop traversal.\n if (handlerResult === false) {\n return false;\n }\n }\n } else {\n handlerFuncPost.call(handler, node, parent, prop, index);\n }\n }\n } // Loop over handlers\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n },\n // post func\n\n /**\n * Skip locations by default.\n */\n skipProperty: function skipProperty(prop) {\n return prop === 'loc';\n }\n });\n }\n};","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar generator = require('../generator');\nvar parser = require('../parser');\nvar traverse = require('../traverse');\n\n/**\n * Transform result.\n */\n\nvar TransformResult = function () {\n /**\n * Initializes a transform result for an AST.\n *\n * @param Object ast - an AST node\n * @param mixed extra - any extra data a transform may return\n */\n function TransformResult(ast) {\n var extra = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n _classCallCheck(this, TransformResult);\n\n this._ast = ast;\n this._source = null;\n this._string = null;\n this._regexp = null;\n this._extra = extra;\n }\n\n _createClass(TransformResult, [{\n key: 'getAST',\n value: function getAST() {\n return this._ast;\n }\n }, {\n key: 'setExtra',\n value: function setExtra(extra) {\n this._extra = extra;\n }\n }, {\n key: 'getExtra',\n value: function getExtra() {\n return this._extra;\n }\n }, {\n key: 'toRegExp',\n value: function toRegExp() {\n if (!this._regexp) {\n this._regexp = new RegExp(this.getSource(), this._ast.flags);\n }\n return this._regexp;\n }\n }, {\n key: 'getSource',\n value: function getSource() {\n if (!this._source) {\n this._source = generator.generate(this._ast.body);\n }\n return this._source;\n }\n }, {\n key: 'getFlags',\n value: function getFlags() {\n return this._ast.flags;\n }\n }, {\n key: 'toString',\n value: function toString() {\n if (!this._string) {\n this._string = generator.generate(this._ast);\n }\n return this._string;\n }\n }]);\n\n return TransformResult;\n}();\n\nmodule.exports = {\n /**\n * Expose `TransformResult`.\n */\n TransformResult: TransformResult,\n\n /**\n * Transforms a regular expression applying a set of\n * transformation handlers.\n *\n * @param string | AST | RegExp:\n *\n * a regular expression in different representations: a string,\n * a RegExp object, or an AST.\n *\n * @param Object | Array<Object>:\n *\n * a handler (or a list of handlers) from `traverse` API.\n *\n * @return TransformResult instance.\n *\n * Example:\n *\n * transform(/[a-z]/i, {\n * onChar(path) {\n * const {node} = path;\n *\n * if (...) {\n * path.remove();\n * }\n * }\n * });\n */\n transform: function transform(regexp, handlers) {\n var ast = regexp;\n\n if (regexp instanceof RegExp) {\n regexp = '' + regexp;\n }\n\n if (typeof regexp === 'string') {\n ast = parser.parse(regexp, {\n captureLocations: true\n });\n }\n\n traverse.traverse(ast, handlers);\n\n return new TransformResult(ast);\n }\n};","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\nvar compatTransforms = require('./transforms');\nvar _transform = require('../transform');\n\nmodule.exports = {\n /**\n * Translates a regexp in new syntax to equivalent regexp in old syntax.\n *\n * @param string|RegExp|AST - regexp\n * @param Array transformsWhitelist - names of the transforms to apply\n */\n transform: function transform(regexp) {\n var transformsWhitelist = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n var transformToApply = transformsWhitelist.length > 0 ? transformsWhitelist : Object.keys(compatTransforms);\n\n var result = void 0;\n\n // Collect extra data per transform.\n var extra = {};\n\n transformToApply.forEach(function (transformName) {\n\n if (!compatTransforms.hasOwnProperty(transformName)) {\n throw new Error('Unknown compat-transform: ' + transformName + '. ' + 'Available transforms are: ' + Object.keys(compatTransforms).join(', '));\n }\n\n var handler = compatTransforms[transformName];\n\n result = _transform.transform(regexp, handler);\n regexp = result.getAST();\n\n // Collect `extra` transform result.\n if (typeof handler.getExtra === 'function') {\n extra[transformName] = handler.getExtra();\n }\n });\n\n // Set the final extras for all transforms.\n result.setExtra(extra);\n\n return result;\n }\n};","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\n/**\n * Performs a deep copy of an simple object.\n * Only handles scalar values, arrays and objects.\n *\n * @param obj Object\n */\n\nmodule.exports = function clone(obj) {\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n var res = void 0;\n if (Array.isArray(obj)) {\n res = [];\n } else {\n res = {};\n }\n for (var i in obj) {\n res[i] = clone(obj[i]);\n }\n return res;\n};","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\n/**\n * A regexp-tree plugin to transform surrogate pairs into single unicode code point\n *\n * \\ud83d\\ude80 -> \\u{1f680}\n */\n\nmodule.exports = {\n shouldRun: function shouldRun(ast) {\n return ast.flags.includes('u');\n },\n Char: function Char(path) {\n var node = path.node;\n\n if (node.kind !== 'unicode' || !node.isSurrogatePair || isNaN(node.codePoint)) {\n return;\n }\n node.value = '\\\\u{' + node.codePoint.toString(16) + '}';\n delete node.isSurrogatePair;\n }\n};","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\nvar UPPER_A_CP = 'A'.codePointAt(0);\nvar UPPER_Z_CP = 'Z'.codePointAt(0);\nvar LOWER_A_CP = 'a'.codePointAt(0);\nvar LOWER_Z_CP = 'z'.codePointAt(0);\nvar DIGIT_0_CP = '0'.codePointAt(0);\nvar DIGIT_9_CP = '9'.codePointAt(0);\n\n/**\n * A regexp-tree plugin to transform coded chars into simple chars.\n *\n * \\u0061 -> a\n */\nmodule.exports = {\n Char: function Char(path) {\n var node = path.node,\n parent = path.parent;\n\n if (isNaN(node.codePoint) || node.kind === 'simple') {\n return;\n }\n\n if (parent.type === 'ClassRange') {\n if (!isSimpleRange(parent)) {\n return;\n }\n }\n\n if (!isPrintableASCIIChar(node.codePoint)) {\n return;\n }\n\n var symbol = String.fromCodePoint(node.codePoint);\n var newChar = {\n type: 'Char',\n kind: 'simple',\n value: symbol,\n symbol: symbol,\n codePoint: node.codePoint\n };\n if (needsEscape(symbol, parent.type)) {\n newChar.escaped = true;\n }\n path.replace(newChar);\n }\n};\n\n/**\n * Checks if a range is included either in 0-9, a-z or A-Z\n * @param classRange\n * @returns {boolean}\n */\nfunction isSimpleRange(classRange) {\n var from = classRange.from,\n to = classRange.to;\n\n return from.codePoint >= DIGIT_0_CP && from.codePoint <= DIGIT_9_CP && to.codePoint >= DIGIT_0_CP && to.codePoint <= DIGIT_9_CP || from.codePoint >= UPPER_A_CP && from.codePoint <= UPPER_Z_CP && to.codePoint >= UPPER_A_CP && to.codePoint <= UPPER_Z_CP || from.codePoint >= LOWER_A_CP && from.codePoint <= LOWER_Z_CP && to.codePoint >= LOWER_A_CP && to.codePoint <= LOWER_Z_CP;\n}\n\n/**\n * Checks if a code point in the range of printable ASCII chars\n * (DEL char excluded)\n * @param codePoint\n * @returns {boolean}\n */\nfunction isPrintableASCIIChar(codePoint) {\n return codePoint >= 0x20 && codePoint <= 0x7e;\n}\n\nfunction needsEscape(symbol, parentType) {\n if (parentType === 'ClassRange' || parentType === 'CharacterClass') {\n return (/[\\]\\\\^-]/.test(symbol)\n );\n }\n\n return (/[*[()+?^$./\\\\|{}]/.test(symbol)\n );\n}","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\nvar UPPER_A_CP = 'A'.codePointAt(0);\nvar UPPER_Z_CP = 'Z'.codePointAt(0);\n/**\n * Transforms case-insensitive regexp to lowercase\n *\n * /AaBbÏ/i -> /aabbï/i\n */\nmodule.exports = {\n _AZClassRanges: null,\n _hasUFlag: false,\n init: function init(ast) {\n this._AZClassRanges = new Set();\n this._hasUFlag = ast.flags.includes('u');\n },\n shouldRun: function shouldRun(ast) {\n return ast.flags.includes('i');\n },\n Char: function Char(path) {\n var node = path.node,\n parent = path.parent;\n\n if (isNaN(node.codePoint)) {\n return;\n }\n\n // Engine support for case-insensitive matching without the u flag\n // for characters above \\u1000 does not seem reliable.\n if (!this._hasUFlag && node.codePoint >= 0x1000) {\n return;\n }\n\n if (parent.type === 'ClassRange') {\n // The only class ranges we handle must be inside A-Z.\n // After the `from` char is processed, the isAZClassRange test\n // will be false, so we use a Set to keep track of parents and\n // process the `to` char.\n if (!this._AZClassRanges.has(parent) && !isAZClassRange(parent)) {\n return;\n }\n this._AZClassRanges.add(parent);\n }\n\n var lower = node.symbol.toLowerCase();\n if (lower !== node.symbol) {\n node.value = displaySymbolAsValue(lower, node);\n node.symbol = lower;\n node.codePoint = lower.codePointAt(0);\n }\n }\n};\n\nfunction isAZClassRange(classRange) {\n var from = classRange.from,\n to = classRange.to;\n // A-Z\n\n return from.codePoint >= UPPER_A_CP && from.codePoint <= UPPER_Z_CP && to.codePoint >= UPPER_A_CP && to.codePoint <= UPPER_Z_CP;\n}\n\nfunction displaySymbolAsValue(symbol, node) {\n var codePoint = symbol.codePointAt(0);\n if (node.kind === 'decimal') {\n return '\\\\' + codePoint;\n }\n if (node.kind === 'oct') {\n return '\\\\0' + codePoint.toString(8);\n }\n if (node.kind === 'hex') {\n return '\\\\x' + codePoint.toString(16);\n }\n if (node.kind === 'unicode') {\n if (node.isSurrogatePair) {\n var _getSurrogatePairFrom = getSurrogatePairFromCodePoint(codePoint),\n lead = _getSurrogatePairFrom.lead,\n trail = _getSurrogatePairFrom.trail;\n\n return '\\\\u' + '0'.repeat(4 - lead.length) + lead + '\\\\u' + '0'.repeat(4 - trail.length) + trail;\n } else if (node.value.includes('{')) {\n return '\\\\u{' + codePoint.toString(16) + '}';\n } else {\n var code = codePoint.toString(16);\n return '\\\\u' + '0'.repeat(4 - code.length) + code;\n }\n }\n // simple\n return symbol;\n}\n\n/**\n * Converts a code point to a surrogate pair.\n * Conversion algorithm is taken from The Unicode Standard 3.0 Section 3.7\n * (https://www.unicode.org/versions/Unicode3.0.0/ch03.pdf)\n * @param {number} codePoint - Between 0x10000 and 0x10ffff\n * @returns {{lead: string, trail: string}}\n */\nfunction getSurrogatePairFromCodePoint(codePoint) {\n var lead = Math.floor((codePoint - 0x10000) / 0x400) + 0xd800;\n var trail = (codePoint - 0x10000) % 0x400 + 0xdc00;\n return {\n lead: lead.toString(16),\n trail: trail.toString(16)\n };\n}","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\n/**\n * A regexp-tree plugin to remove duplicates from character classes.\n */\n\nmodule.exports = {\n CharacterClass: function CharacterClass(path) {\n var node = path.node;\n\n var sources = {};\n\n for (var i = 0; i < node.expressions.length; i++) {\n var childPath = path.getChild(i);\n var source = childPath.jsonEncode();\n\n if (sources.hasOwnProperty(source)) {\n childPath.remove();\n\n // Since we remove the current node.\n // TODO: make it simpler for users with a method.\n i--;\n }\n\n sources[source] = true;\n }\n }\n};","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\n/**\n * Flattens a nested disjunction node to a list.\n *\n * /a|b|c|d/\n *\n * {{{a, b}, c}, d} -> [a, b, c, d]\n */\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction disjunctionToList(node) {\n if (node.type !== 'Disjunction') {\n throw new TypeError('Expected \"Disjunction\" node, got \"' + node.type + '\"');\n }\n\n var list = [];\n\n if (node.left && node.left.type === 'Disjunction') {\n list.push.apply(list, _toConsumableArray(disjunctionToList(node.left)).concat([node.right]));\n } else {\n list.push(node.left, node.right);\n }\n\n return list;\n}\n\n/**\n * Builds a nested disjunction node from a list.\n *\n * /a|b|c|d/\n *\n * [a, b, c, d] -> {{{a, b}, c}, d}\n */\nfunction listToDisjunction(list) {\n return list.reduce(function (left, right) {\n return {\n type: 'Disjunction',\n left: left,\n right: right\n };\n });\n}\n\n/**\n * Increases a quantifier by one.\n * Does not change greediness.\n * * -> +\n * + -> {2,}\n * ? -> {1,2}\n * {2} -> {3}\n * {2,} -> {3,}\n * {2,3} -> {3,4}\n */\nfunction increaseQuantifierByOne(quantifier) {\n if (quantifier.kind === '*') {\n\n quantifier.kind = '+';\n } else if (quantifier.kind === '+') {\n\n quantifier.kind = 'Range';\n quantifier.from = 2;\n delete quantifier.to;\n } else if (quantifier.kind === '?') {\n\n quantifier.kind = 'Range';\n quantifier.from = 1;\n quantifier.to = 2;\n } else if (quantifier.kind === 'Range') {\n\n quantifier.from += 1;\n if (quantifier.to) {\n quantifier.to += 1;\n }\n }\n}\n\nmodule.exports = {\n disjunctionToList: disjunctionToList,\n listToDisjunction: listToDisjunction,\n increaseQuantifierByOne: increaseQuantifierByOne\n};","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\nvar _require = require('../../transform/utils'),\n increaseQuantifierByOne = _require.increaseQuantifierByOne;\n\n/**\n * A regexp-tree plugin to merge quantifiers\n *\n * a+a+ -> a{2,}\n * a{2}a{3} -> a{5}\n * a{1,2}a{2,3} -> a{3,5}\n */\n\n\nmodule.exports = {\n Repetition: function Repetition(path) {\n var node = path.node,\n parent = path.parent;\n\n\n if (parent.type !== 'Alternative' || !path.index) {\n return;\n }\n\n var previousSibling = path.getPreviousSibling();\n\n if (!previousSibling) {\n return;\n }\n\n if (previousSibling.node.type === 'Repetition') {\n if (!previousSibling.getChild().hasEqualSource(path.getChild())) {\n return;\n }\n\n var _extractFromTo = extractFromTo(previousSibling.node.quantifier),\n previousSiblingFrom = _extractFromTo.from,\n previousSiblingTo = _extractFromTo.to;\n\n var _extractFromTo2 = extractFromTo(node.quantifier),\n nodeFrom = _extractFromTo2.from,\n nodeTo = _extractFromTo2.to;\n\n // It's does not seem reliable to merge quantifiers with different greediness\n // when none of both is a greedy open range\n\n\n if (previousSibling.node.quantifier.greedy !== node.quantifier.greedy && !isGreedyOpenRange(previousSibling.node.quantifier) && !isGreedyOpenRange(node.quantifier)) {\n return;\n }\n\n // a*a* -> a*\n // a*a+ -> a+\n // a+a+ -> a{2,}\n // a{2}a{4} -> a{6}\n // a{1,2}a{2,3} -> a{3,5}\n // a{1,}a{2,} -> a{3,}\n // a+a{2,} -> a{3,}\n\n // a??a{2,} -> a{2,}\n // a*?a{2,} -> a{2,}\n // a+?a{2,} -> a{3,}\n\n node.quantifier.kind = 'Range';\n node.quantifier.from = previousSiblingFrom + nodeFrom;\n if (previousSiblingTo && nodeTo) {\n node.quantifier.to = previousSiblingTo + nodeTo;\n } else {\n delete node.quantifier.to;\n }\n if (isGreedyOpenRange(previousSibling.node.quantifier) || isGreedyOpenRange(node.quantifier)) {\n node.quantifier.greedy = true;\n }\n\n previousSibling.remove();\n } else {\n if (!previousSibling.hasEqualSource(path.getChild())) {\n return;\n }\n\n increaseQuantifierByOne(node.quantifier);\n previousSibling.remove();\n }\n }\n};\n\nfunction isGreedyOpenRange(quantifier) {\n return quantifier.greedy && (quantifier.kind === '+' || quantifier.kind === '*' || quantifier.kind === 'Range' && !quantifier.to);\n}\n\nfunction extractFromTo(quantifier) {\n var from = void 0,\n to = void 0;\n if (quantifier.kind === '*') {\n from = 0;\n } else if (quantifier.kind === '+') {\n from = 1;\n } else if (quantifier.kind === '?') {\n from = 0;\n to = 1;\n } else {\n from = quantifier.from;\n if (quantifier.to) {\n to = quantifier.to;\n }\n }\n return { from: from, to: to };\n}","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\n/**\n * A regexp-tree plugin to replace different range-based quantifiers\n * with their symbol equivalents.\n *\n * a{0,} -> a*\n * a{1,} -> a+\n * a{1} -> a\n *\n * NOTE: the following is automatically handled in the generator:\n *\n * a{3,3} -> a{3}\n */\n\nmodule.exports = {\n Quantifier: function Quantifier(path) {\n var node = path.node;\n\n\n if (node.kind !== 'Range') {\n return;\n }\n\n // a{0,} -> a*\n rewriteOpenZero(path);\n\n // a{1,} -> a+\n rewriteOpenOne(path);\n\n // a{1} -> a\n rewriteExactOne(path);\n }\n};\n\nfunction rewriteOpenZero(path) {\n var node = path.node;\n\n\n if (node.from !== 0 || node.to) {\n return;\n }\n\n node.kind = '*';\n delete node.from;\n}\n\nfunction rewriteOpenOne(path) {\n var node = path.node;\n\n\n if (node.from !== 1 || node.to) {\n return;\n }\n\n node.kind = '+';\n delete node.from;\n}\n\nfunction rewriteExactOne(path) {\n var node = path.node;\n\n\n if (node.from !== 1 || node.to !== 1) {\n return;\n }\n\n path.parentPath.replace(path.parentPath.node.expression);\n}","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\n/**\n * A regexp-tree plugin to simplify character classes\n * spanning only one or two chars.\n *\n * [a-a] -> [a]\n * [a-b] -> [ab]\n */\n\nmodule.exports = {\n ClassRange: function ClassRange(path) {\n var node = path.node;\n\n\n if (node.from.codePoint === node.to.codePoint) {\n\n path.replace(node.from);\n } else if (node.from.codePoint === node.to.codePoint - 1) {\n\n path.getParent().insertChildAt(node.to, path.index + 1);\n path.replace(node.from);\n }\n }\n};","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\n/**\n * A regexp-tree plugin to replace standard character classes with\n * their meta symbols equivalents.\n */\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nmodule.exports = {\n _hasIFlag: false,\n _hasUFlag: false,\n init: function init(ast) {\n this._hasIFlag = ast.flags.includes('i');\n this._hasUFlag = ast.flags.includes('u');\n },\n CharacterClass: function CharacterClass(path) {\n // [0-9] -> \\d\n rewriteNumberRanges(path);\n\n // [a-zA-Z_0-9] -> \\w\n rewriteWordRanges(path, this._hasIFlag, this._hasUFlag);\n\n // [ \\f\\n\\r\\t\\v\\u00a0\\u1680\\u2000-\\u200a\\u2028\\u2029\\u202f\\u205f\\u3000\\ufeff] -> \\s\n rewriteWhitespaceRanges(path);\n }\n};\n\n/**\n * Rewrites number ranges: [0-9] -> \\d\n */\nfunction rewriteNumberRanges(path) {\n var node = path.node;\n\n\n node.expressions.forEach(function (expression, i) {\n if (isFullNumberRange(expression)) {\n path.getChild(i).replace({\n type: 'Char',\n value: '\\\\d',\n kind: 'meta'\n });\n }\n });\n}\n\n/**\n * Rewrites word ranges: [a-zA-Z_0-9] -> \\w\n * Thus, the ranges may go in any order, and other symbols/ranges\n * are kept untouched, e.g. [a-z_\\dA-Z$] -> [\\w$]\n */\nfunction rewriteWordRanges(path, hasIFlag, hasUFlag) {\n var node = path.node;\n\n\n var numberPath = null;\n var lowerCasePath = null;\n var upperCasePath = null;\n var underscorePath = null;\n var u017fPath = null;\n var u212aPath = null;\n\n node.expressions.forEach(function (expression, i) {\n // \\d\n if (isMetaChar(expression, '\\\\d')) {\n numberPath = path.getChild(i);\n }\n\n // a-z\n else if (isLowerCaseRange(expression)) {\n lowerCasePath = path.getChild(i);\n }\n\n // A-Z\n else if (isUpperCaseRange(expression)) {\n upperCasePath = path.getChild(i);\n }\n\n // _\n else if (isUnderscore(expression)) {\n underscorePath = path.getChild(i);\n } else if (hasIFlag && hasUFlag && isCodePoint(expression, 0x017f)) {\n u017fPath = path.getChild(i);\n } else if (hasIFlag && hasUFlag && isCodePoint(expression, 0x212a)) {\n u212aPath = path.getChild(i);\n }\n });\n\n // If we found the whole pattern, replace it.\n if (numberPath && (lowerCasePath && upperCasePath || hasIFlag && (lowerCasePath || upperCasePath)) && underscorePath && (!hasUFlag || !hasIFlag || u017fPath && u212aPath)) {\n // Put \\w in place of \\d.\n numberPath.replace({\n type: 'Char',\n value: '\\\\w',\n kind: 'meta'\n });\n\n // Other paths are removed.\n if (lowerCasePath) {\n lowerCasePath.remove();\n }\n if (upperCasePath) {\n upperCasePath.remove();\n }\n underscorePath.remove();\n if (u017fPath) {\n u017fPath.remove();\n }\n if (u212aPath) {\n u212aPath.remove();\n }\n }\n}\n\n/**\n * Rewrites whitespace ranges: [ \\f\\n\\r\\t\\v\\u00a0\\u1680\\u2000-\\u200a\\u2028\\u2029\\u202f\\u205f\\u3000\\ufeff] -> \\s.\n */\nvar whitespaceRangeTests = [function (node) {\n return isChar(node, ' ');\n}].concat(_toConsumableArray(['\\\\f', '\\\\n', '\\\\r', '\\\\t', '\\\\v'].map(function (char) {\n return function (node) {\n return isMetaChar(node, char);\n };\n})), _toConsumableArray([0x00a0, 0x1680, 0x2028, 0x2029, 0x202f, 0x205f, 0x3000, 0xfeff].map(function (codePoint) {\n return function (node) {\n return isCodePoint(node, codePoint);\n };\n})), [function (node) {\n return node.type === 'ClassRange' && isCodePoint(node.from, 0x2000) && isCodePoint(node.to, 0x200a);\n}]);\n\nfunction rewriteWhitespaceRanges(path) {\n var node = path.node;\n\n\n if (node.expressions.length < whitespaceRangeTests.length || !whitespaceRangeTests.every(function (test) {\n return node.expressions.some(function (expression) {\n return test(expression);\n });\n })) {\n return;\n }\n\n // If we found the whole pattern, replace it.\n\n // Put \\s in place of \\n.\n var nNode = node.expressions.find(function (expression) {\n return isMetaChar(expression, '\\\\n');\n });\n nNode.value = '\\\\s';\n nNode.symbol = undefined;\n nNode.codePoint = NaN;\n\n // Other paths are removed.\n node.expressions.map(function (expression, i) {\n return whitespaceRangeTests.some(function (test) {\n return test(expression);\n }) ? path.getChild(i) : undefined;\n }).filter(Boolean).forEach(function (path) {\n return path.remove();\n });\n}\n\nfunction isFullNumberRange(node) {\n return node.type === 'ClassRange' && node.from.value === '0' && node.to.value === '9';\n}\n\nfunction isChar(node, value) {\n var kind = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'simple';\n\n return node.type === 'Char' && node.value === value && node.kind === kind;\n}\n\nfunction isMetaChar(node, value) {\n return isChar(node, value, 'meta');\n}\n\nfunction isLowerCaseRange(node) {\n return node.type === 'ClassRange' && node.from.value === 'a' && node.to.value === 'z';\n}\n\nfunction isUpperCaseRange(node) {\n return node.type === 'ClassRange' && node.from.value === 'A' && node.to.value === 'Z';\n}\n\nfunction isUnderscore(node) {\n return node.type === 'Char' && node.value === '_' && node.kind === 'simple';\n}\n\nfunction isCodePoint(node, codePoint) {\n return node.type === 'Char' && node.kind === 'unicode' && node.codePoint === codePoint;\n}","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\n/**\n * A regexp-tree plugin to replace single char character classes with\n * just that character.\n *\n * [\\d] -> \\d, [^\\w] -> \\W\n */\n\nmodule.exports = {\n CharacterClass: function CharacterClass(path) {\n var node = path.node;\n\n\n if (node.expressions.length !== 1 || !hasAppropriateSiblings(path) || !isAppropriateChar(node.expressions[0])) {\n return;\n }\n\n var _node$expressions$ = node.expressions[0],\n value = _node$expressions$.value,\n kind = _node$expressions$.kind,\n escaped = _node$expressions$.escaped;\n\n\n if (node.negative) {\n // For negative can extract only meta chars like [^\\w] -> \\W\n // cannot do for [^a] -> a (wrong).\n if (!isMeta(value)) {\n return;\n }\n\n value = getInverseMeta(value);\n }\n\n path.replace({\n type: 'Char',\n value: value,\n kind: kind,\n escaped: escaped || shouldEscape(value)\n });\n }\n};\n\nfunction isAppropriateChar(node) {\n return node.type === 'Char' &&\n // We don't extract [\\b] (backspace) since \\b has different\n // semantics (word boundary).\n node.value !== '\\\\b';\n}\n\nfunction isMeta(value) {\n return (/^\\\\[dwsDWS]$/.test(value)\n );\n}\n\nfunction getInverseMeta(value) {\n return (/[dws]/.test(value) ? value.toUpperCase() : value.toLowerCase()\n );\n}\n\nfunction hasAppropriateSiblings(path) {\n var parent = path.parent,\n index = path.index;\n\n\n if (parent.type !== 'Alternative') {\n return true;\n }\n\n var previousNode = parent.expressions[index - 1];\n if (previousNode == null) {\n return true;\n }\n\n // Don't optimized \\1[0] to \\10\n if (previousNode.type === 'Backreference' && previousNode.kind === 'number') {\n return false;\n }\n\n // Don't optimized \\2[0] to \\20\n if (previousNode.type === 'Char' && previousNode.kind === 'decimal') {\n return false;\n }\n\n return true;\n}\n\n// Note: \\{ and \\} are always preserved to avoid `a[{]2[}]` turning\n// into `a{2}`.\nfunction shouldEscape(value) {\n return (/[*[()+?$./{}|]/.test(value)\n );\n}","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\n/**\n * A regexp-tree plugin to remove unnecessary escape.\n *\n * \\e -> e\n *\n * [\\(] -> [(]\n */\n\nmodule.exports = {\n _hasXFlag: false,\n init: function init(ast) {\n this._hasXFlag = ast.flags.includes('x');\n },\n Char: function Char(path) {\n var node = path.node;\n\n\n if (!node.escaped) {\n return;\n }\n\n if (shouldUnescape(path, this._hasXFlag)) {\n delete node.escaped;\n }\n }\n};\n\nfunction shouldUnescape(path, hasXFlag) {\n var value = path.node.value,\n index = path.index,\n parent = path.parent;\n\n // In char class (, etc are allowed.\n\n if (parent.type !== 'CharacterClass' && parent.type !== 'ClassRange') {\n return !preservesEscape(value, index, parent, hasXFlag);\n }\n\n return !preservesInCharClass(value, index, parent);\n}\n\n/**\n * \\], \\\\, \\^, \\-\n */\nfunction preservesInCharClass(value, index, parent) {\n if (value === '^') {\n // Avoid [\\^a] turning into [^a]\n return index === 0 && !parent.negative;\n }\n if (value === '-') {\n // Avoid [a\\-z] turning into [a-z]\n return true;\n }\n return (/[\\]\\\\]/.test(value)\n );\n}\n\nfunction preservesEscape(value, index, parent, hasXFlag) {\n if (value === '{') {\n return preservesOpeningCurlyBraceEscape(index, parent);\n }\n\n if (value === '}') {\n return preservesClosingCurlyBraceEscape(index, parent);\n }\n\n if (hasXFlag && /[ #]/.test(value)) {\n return true;\n }\n\n return (/[*[()+?^$./\\\\|]/.test(value)\n );\n}\n\nfunction consumeNumbers(startIndex, parent, rtl) {\n var i = startIndex;\n var siblingNode = (rtl ? i >= 0 : i < parent.expressions.length) && parent.expressions[i];\n\n while (siblingNode && siblingNode.type === 'Char' && siblingNode.kind === 'simple' && !siblingNode.escaped && /\\d/.test(siblingNode.value)) {\n rtl ? i-- : i++;\n siblingNode = (rtl ? i >= 0 : i < parent.expressions.length) && parent.expressions[i];\n }\n\n return Math.abs(startIndex - i);\n}\n\nfunction isSimpleChar(node, value) {\n return node && node.type === 'Char' && node.kind === 'simple' && !node.escaped && node.value === value;\n}\n\nfunction preservesOpeningCurlyBraceEscape(index, parent) {\n // (?:\\{) -> (?:{)\n if (index == null) {\n return false;\n }\n\n var nbFollowingNumbers = consumeNumbers(index + 1, parent);\n var i = index + nbFollowingNumbers + 1;\n var nextSiblingNode = i < parent.expressions.length && parent.expressions[i];\n\n if (nbFollowingNumbers) {\n // Avoid \\{3} turning into {3}\n if (isSimpleChar(nextSiblingNode, '}')) {\n return true;\n }\n\n if (isSimpleChar(nextSiblingNode, ',')) {\n nbFollowingNumbers = consumeNumbers(i + 1, parent);\n i = i + nbFollowingNumbers + 1;\n nextSiblingNode = i < parent.expressions.length && parent.expressions[i];\n\n // Avoid \\{3,} turning into {3,}\n return isSimpleChar(nextSiblingNode, '}');\n }\n }\n return false;\n}\n\nfunction preservesClosingCurlyBraceEscape(index, parent) {\n // (?:\\{) -> (?:{)\n if (index == null) {\n return false;\n }\n\n var nbPrecedingNumbers = consumeNumbers(index - 1, parent, true);\n var i = index - nbPrecedingNumbers - 1;\n var previousSiblingNode = i >= 0 && parent.expressions[i];\n\n // Avoid {3\\} turning into {3}\n if (nbPrecedingNumbers && isSimpleChar(previousSiblingNode, '{')) {\n return true;\n }\n\n if (isSimpleChar(previousSiblingNode, ',')) {\n nbPrecedingNumbers = consumeNumbers(i - 1, parent, true);\n i = i - nbPrecedingNumbers - 1;\n previousSiblingNode = i < parent.expressions.length && parent.expressions[i];\n\n // Avoid {3,\\} turning into {3,}\n return nbPrecedingNumbers && isSimpleChar(previousSiblingNode, '{');\n }\n return false;\n}","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\n/**\n * A regexp-tree plugin to merge class ranges.\n *\n * [a-ec] -> [a-e]\n * [a-ec-e] -> [a-e]\n * [\\w\\da-f] -> [\\w]\n * [abcdef] -> [a-f]\n */\n\nmodule.exports = {\n _hasIUFlags: false,\n init: function init(ast) {\n this._hasIUFlags = ast.flags.includes('i') && ast.flags.includes('u');\n },\n CharacterClass: function CharacterClass(path) {\n var node = path.node;\n\n var expressions = node.expressions;\n\n var metas = [];\n // Extract metas\n expressions.forEach(function (expression) {\n if (isMeta(expression)) {\n metas.push(expression.value);\n }\n });\n\n expressions.sort(sortCharClass);\n\n for (var i = 0; i < expressions.length; i++) {\n var expression = expressions[i];\n if (fitsInMetas(expression, metas, this._hasIUFlags) || combinesWithPrecedingClassRange(expression, expressions[i - 1]) || combinesWithFollowingClassRange(expression, expressions[i + 1])) {\n expressions.splice(i, 1);\n i--;\n } else {\n var nbMergedChars = charCombinesWithPrecedingChars(expression, i, expressions);\n expressions.splice(i - nbMergedChars + 1, nbMergedChars);\n i -= nbMergedChars;\n }\n }\n }\n};\n\n/**\n * Sorts expressions in char class in the following order:\n * - meta chars, ordered alphabetically by value\n * - chars (except `control` kind) and class ranges, ordered alphabetically (`from` char is used for class ranges)\n * - if ambiguous, class range comes before char\n * - if ambiguous between two class ranges, orders alphabetically by `to` char\n * - control chars, ordered alphabetically by value\n * @param {Object} a - Left Char or ClassRange node\n * @param {Object} b - Right Char or ClassRange node\n * @returns {number}\n */\nfunction sortCharClass(a, b) {\n var aValue = getSortValue(a);\n var bValue = getSortValue(b);\n\n if (aValue === bValue) {\n // We want ClassRange before Char\n // [bb-d] -> [b-db]\n if (a.type === 'ClassRange' && b.type !== 'ClassRange') {\n return -1;\n }\n if (b.type === 'ClassRange' && a.type !== 'ClassRange') {\n return 1;\n }\n if (a.type === 'ClassRange' && b.type === 'ClassRange') {\n return getSortValue(a.to) - getSortValue(b.to);\n }\n if (isMeta(a) && isMeta(b) || isControl(a) && isControl(b)) {\n return a.value < b.value ? -1 : 1;\n }\n }\n return aValue - bValue;\n}\n\n/**\n * @param {Object} expression - Char or ClassRange node\n * @returns {number}\n */\nfunction getSortValue(expression) {\n if (expression.type === 'Char') {\n if (expression.value === '-') {\n return Infinity;\n }\n if (expression.kind === 'control') {\n return Infinity;\n }\n if (expression.kind === 'meta' && isNaN(expression.codePoint)) {\n return -1;\n }\n return expression.codePoint;\n }\n // ClassRange\n return expression.from.codePoint;\n}\n\n/**\n * Checks if a node is a meta char from the set \\d\\w\\s\\D\\W\\S\n * @param {Object} expression - Char or ClassRange node\n * @param {?string} value\n * @returns {boolean}\n */\nfunction isMeta(expression) {\n var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n return expression.type === 'Char' && expression.kind === 'meta' && (value ? expression.value === value : /^\\\\[dws]$/i.test(expression.value));\n}\n\n/**\n * @param {Object} expression - Char or ClassRange node\n * @returns {boolean}\n */\nfunction isControl(expression) {\n return expression.type === 'Char' && expression.kind === 'control';\n}\n\n/**\n * @param {Object} expression - Char or ClassRange node\n * @param {string[]} metas - Array of meta chars, e.g. [\"\\\\w\", \"\\\\s\"]\n * @param {boolean} hasIUFlags\n * @returns {boolean}\n */\nfunction fitsInMetas(expression, metas, hasIUFlags) {\n for (var i = 0; i < metas.length; i++) {\n if (fitsInMeta(expression, metas[i], hasIUFlags)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * @param {Object} expression - Char or ClassRange node\n * @param {string} meta - e.g. \"\\\\w\"\n * @param {boolean} hasIUFlags\n * @returns {boolean}\n */\nfunction fitsInMeta(expression, meta, hasIUFlags) {\n if (expression.type === 'ClassRange') {\n return fitsInMeta(expression.from, meta, hasIUFlags) && fitsInMeta(expression.to, meta, hasIUFlags);\n }\n\n // Special cases:\n // \\S contains \\w and \\d\n if (meta === '\\\\S' && (isMeta(expression, '\\\\w') || isMeta(expression, '\\\\d'))) {\n return true;\n }\n // \\D contains \\W and \\s\n if (meta === '\\\\D' && (isMeta(expression, '\\\\W') || isMeta(expression, '\\\\s'))) {\n return true;\n }\n // \\w contains \\d\n if (meta === '\\\\w' && isMeta(expression, '\\\\d')) {\n return true;\n }\n // \\W contains \\s\n if (meta === '\\\\W' && isMeta(expression, '\\\\s')) {\n return true;\n }\n\n if (expression.type !== 'Char' || isNaN(expression.codePoint)) {\n return false;\n }\n\n if (meta === '\\\\s') {\n return fitsInMetaS(expression);\n }\n if (meta === '\\\\S') {\n return !fitsInMetaS(expression);\n }\n if (meta === '\\\\d') {\n return fitsInMetaD(expression);\n }\n if (meta === '\\\\D') {\n return !fitsInMetaD(expression);\n }\n if (meta === '\\\\w') {\n return fitsInMetaW(expression, hasIUFlags);\n }\n if (meta === '\\\\W') {\n return !fitsInMetaW(expression, hasIUFlags);\n }\n return false;\n}\n\n/**\n * @param {Object} expression - Char node with codePoint\n * @returns {boolean}\n */\nfunction fitsInMetaS(expression) {\n return expression.codePoint === 0x0009 || // \\t\n expression.codePoint === 0x000a || // \\n\n expression.codePoint === 0x000b || // \\v\n expression.codePoint === 0x000c || // \\f\n expression.codePoint === 0x000d || // \\r\n expression.codePoint === 0x0020 || // space\n expression.codePoint === 0x00a0 || // nbsp\n expression.codePoint === 0x1680 || // part of Zs\n expression.codePoint >= 0x2000 && expression.codePoint <= 0x200a || // part of Zs\n expression.codePoint === 0x2028 || // line separator\n expression.codePoint === 0x2029 || // paragraph separator\n expression.codePoint === 0x202f || // part of Zs\n expression.codePoint === 0x205f || // part of Zs\n expression.codePoint === 0x3000 || // part of Zs\n expression.codePoint === 0xfeff; // zwnbsp\n}\n\n/**\n * @param {Object} expression - Char node with codePoint\n * @returns {boolean}\n */\nfunction fitsInMetaD(expression) {\n return expression.codePoint >= 0x30 && expression.codePoint <= 0x39; // 0-9\n}\n\n/**\n * @param {Object} expression - Char node with codePoint\n * @param {boolean} hasIUFlags\n * @returns {boolean}\n */\nfunction fitsInMetaW(expression, hasIUFlags) {\n return fitsInMetaD(expression) || expression.codePoint >= 0x41 && expression.codePoint <= 0x5a || // A-Z\n expression.codePoint >= 0x61 && expression.codePoint <= 0x7a || // a-z\n expression.value === '_' || hasIUFlags && (expression.codePoint === 0x017f || expression.codePoint === 0x212a);\n}\n\n/**\n * @param {Object} expression - Char or ClassRange node\n * @param {Object} classRange - Char or ClassRange node\n * @returns {boolean}\n */\nfunction combinesWithPrecedingClassRange(expression, classRange) {\n if (classRange && classRange.type === 'ClassRange') {\n if (fitsInClassRange(expression, classRange)) {\n // [a-gc] -> [a-g]\n // [a-gc-e] -> [a-g]\n return true;\n } else if (\n // We only want \\w chars or char codes to keep readability\n isMetaWCharOrCode(expression) && classRange.to.codePoint === expression.codePoint - 1) {\n // [a-de] -> [a-e]\n classRange.to = expression;\n return true;\n } else if (expression.type === 'ClassRange' && expression.from.codePoint <= classRange.to.codePoint + 1 && expression.to.codePoint >= classRange.from.codePoint - 1) {\n // [a-db-f] -> [a-f]\n // [b-fa-d] -> [a-f]\n // [a-cd-f] -> [a-f]\n if (expression.from.codePoint < classRange.from.codePoint) {\n classRange.from = expression.from;\n }\n if (expression.to.codePoint > classRange.to.codePoint) {\n classRange.to = expression.to;\n }\n return true;\n }\n }\n return false;\n}\n\n/**\n * @param {Object} expression - Char or ClassRange node\n * @param {Object} classRange - Char or ClassRange node\n * @returns {boolean}\n */\nfunction combinesWithFollowingClassRange(expression, classRange) {\n if (classRange && classRange.type === 'ClassRange') {\n // Considering the elements were ordered alphabetically,\n // there is only one case to handle\n // [ab-e] -> [a-e]\n if (\n // We only want \\w chars or char codes to keep readability\n isMetaWCharOrCode(expression) && classRange.from.codePoint === expression.codePoint + 1) {\n classRange.from = expression;\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * @param {Object} expression - Char or ClassRange node\n * @param {Object} classRange - ClassRange node\n * @returns {boolean}\n */\nfunction fitsInClassRange(expression, classRange) {\n if (expression.type === 'Char' && isNaN(expression.codePoint)) {\n return false;\n }\n if (expression.type === 'ClassRange') {\n return fitsInClassRange(expression.from, classRange) && fitsInClassRange(expression.to, classRange);\n }\n return expression.codePoint >= classRange.from.codePoint && expression.codePoint <= classRange.to.codePoint;\n}\n\n/**\n * @param {Object} expression - Char or ClassRange node\n * @param {Number} index\n * @param {Object[]} expressions - expressions in CharClass\n * @returns {number} - Number of characters combined with expression\n */\nfunction charCombinesWithPrecedingChars(expression, index, expressions) {\n // We only want \\w chars or char codes to keep readability\n if (!isMetaWCharOrCode(expression)) {\n return 0;\n }\n var nbMergedChars = 0;\n while (index > 0) {\n var currentExpression = expressions[index];\n var precedingExpresion = expressions[index - 1];\n if (isMetaWCharOrCode(precedingExpresion) && precedingExpresion.codePoint === currentExpression.codePoint - 1) {\n nbMergedChars++;\n index--;\n } else {\n break;\n }\n }\n\n if (nbMergedChars > 1) {\n expressions[index] = {\n type: 'ClassRange',\n from: expressions[index],\n to: expression\n };\n return nbMergedChars;\n }\n return 0;\n}\n\nfunction isMetaWCharOrCode(expression) {\n return expression && expression.type === 'Char' && !isNaN(expression.codePoint) && (fitsInMetaW(expression, false) || expression.kind === 'unicode' || expression.kind === 'hex' || expression.kind === 'oct' || expression.kind === 'decimal');\n}","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\nvar NodePath = require('../../traverse/node-path');\n\nvar _require = require('../../transform/utils'),\n disjunctionToList = _require.disjunctionToList,\n listToDisjunction = _require.listToDisjunction;\n\n/**\n * Removes duplicates from a disjunction sequence:\n *\n * /(ab|bc|ab)+(xy|xy)+/ -> /(ab|bc)+(xy)+/\n */\n\n\nmodule.exports = {\n Disjunction: function Disjunction(path) {\n var node = path.node;\n\n // Make unique nodes.\n\n var uniqueNodesMap = {};\n\n var parts = disjunctionToList(node).filter(function (part) {\n var encoded = part ? NodePath.getForNode(part).jsonEncode() : 'null';\n\n // Already recorded this part, filter out.\n if (uniqueNodesMap.hasOwnProperty(encoded)) {\n return false;\n }\n\n uniqueNodesMap[encoded] = part;\n return true;\n });\n\n // Replace with the optimized disjunction.\n path.replace(listToDisjunction(parts));\n }\n};","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\n/**\n * A regexp-tree plugin to replace single char group disjunction to char group\n *\n * a|b|c -> [abc]\n * [12]|3|4 -> [1234]\n * (a|b|c) -> ([abc])\n * (?:a|b|c) -> [abc]\n */\n\nmodule.exports = {\n Disjunction: function Disjunction(path) {\n var node = path.node,\n parent = path.parent;\n\n\n if (!handlers[parent.type]) {\n return;\n }\n\n var charset = new Map();\n\n if (!shouldProcess(node, charset) || !charset.size) {\n return;\n }\n\n var characterClass = {\n type: 'CharacterClass',\n expressions: Array.from(charset.keys()).sort().map(function (key) {\n return charset.get(key);\n })\n };\n\n handlers[parent.type](path.getParent(), characterClass);\n }\n};\n\nvar handlers = {\n RegExp: function RegExp(path, characterClass) {\n var node = path.node;\n\n\n node.body = characterClass;\n },\n Group: function Group(path, characterClass) {\n var node = path.node;\n\n\n if (node.capturing) {\n node.expression = characterClass;\n } else {\n path.replace(characterClass);\n }\n }\n};\n\nfunction shouldProcess(expression, charset) {\n if (!expression) {\n // Abort on empty disjunction part\n return false;\n }\n\n var type = expression.type;\n\n\n if (type === 'Disjunction') {\n var left = expression.left,\n right = expression.right;\n\n\n return shouldProcess(left, charset) && shouldProcess(right, charset);\n } else if (type === 'Char') {\n if (expression.kind === 'meta' && expression.symbol === '.') {\n return false;\n }\n\n var value = expression.value;\n\n\n charset.set(value, expression);\n\n return true;\n } else if (type === 'CharacterClass' && !expression.negative) {\n return expression.expressions.every(function (expression) {\n return shouldProcess(expression, charset);\n });\n }\n\n return false;\n}","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\n/**\n * A regexp-tree plugin to remove non-capturing empty groups.\n *\n * /(?:)a/ -> /a/\n * /a|(?:)/ -> /a|/\n */\n\nmodule.exports = {\n Group: function Group(path) {\n var node = path.node,\n parent = path.parent;\n\n var childPath = path.getChild();\n\n if (node.capturing || childPath) {\n return;\n }\n\n if (parent.type === 'Repetition') {\n\n path.getParent().replace(node);\n } else if (parent.type !== 'RegExp') {\n\n path.remove();\n }\n }\n};","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\n/**\n * A regexp-tree plugin to remove unnecessary groups.\n *\n * /(?:a)/ -> /a/\n */\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nmodule.exports = {\n Group: function Group(path) {\n var node = path.node,\n parent = path.parent;\n\n var childPath = path.getChild();\n\n if (node.capturing || !childPath) {\n return;\n }\n\n // Don't optimize \\1(?:0) to \\10\n if (!hasAppropriateSiblings(path)) {\n return;\n }\n\n // Don't optimize /a(?:b|c)/ to /ab|c/\n // but /(?:b|c)/ to /b|c/ is ok\n if (childPath.node.type === 'Disjunction' && parent.type !== 'RegExp') {\n return;\n }\n\n // Don't optimize /(?:ab)+/ to /ab+/\n // but /(?:a)+/ to /a+/ is ok\n // and /(?:[a-d])+/ to /[a-d]+/ is ok too\n if (parent.type === 'Repetition' && childPath.node.type !== 'Char' && childPath.node.type !== 'CharacterClass') {\n return;\n }\n\n if (childPath.node.type === 'Alternative') {\n var parentPath = path.getParent();\n if (parentPath.node.type === 'Alternative') {\n // /abc(?:def)ghi/ When (?:def) is ungrouped its content must be merged with parent alternative\n\n parentPath.replace({\n type: 'Alternative',\n expressions: [].concat(_toConsumableArray(parent.expressions.slice(0, path.index)), _toConsumableArray(childPath.node.expressions), _toConsumableArray(parent.expressions.slice(path.index + 1)))\n });\n }\n } else {\n path.replace(childPath.node);\n }\n }\n};\n\nfunction hasAppropriateSiblings(path) {\n var parent = path.parent,\n index = path.index;\n\n\n if (parent.type !== 'Alternative') {\n return true;\n }\n\n var previousNode = parent.expressions[index - 1];\n if (previousNode == null) {\n return true;\n }\n\n // Don't optimized \\1(?:0) to \\10\n if (previousNode.type === 'Backreference' && previousNode.kind === 'number') {\n return false;\n }\n\n // Don't optimized \\2(?:0) to \\20\n if (previousNode.type === 'Char' && previousNode.kind === 'decimal') {\n return false;\n }\n\n return true;\n}","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar NodePath = require('../../traverse/node-path');\n\nvar _require = require('../../transform/utils'),\n increaseQuantifierByOne = _require.increaseQuantifierByOne;\n\n/**\n * A regexp-tree plugin to combine repeating patterns.\n *\n * /^abcabcabc/ -> /^abc{3}/\n * /^(?:abc){2}abc/ -> /^(?:abc){3}/\n * /^abc(?:abc){2}/ -> /^(?:abc){3}/\n */\n\nmodule.exports = {\n Alternative: function Alternative(path) {\n var node = path.node;\n\n // We can skip the first child\n\n var index = 1;\n while (index < node.expressions.length) {\n var child = path.getChild(index);\n index = Math.max(1, combineRepeatingPatternLeft(path, child, index));\n\n if (index >= node.expressions.length) {\n break;\n }\n\n child = path.getChild(index);\n index = Math.max(1, combineWithPreviousRepetition(path, child, index));\n\n if (index >= node.expressions.length) {\n break;\n }\n\n child = path.getChild(index);\n index = Math.max(1, combineRepetitionWithPrevious(path, child, index));\n\n index++;\n }\n }\n};\n\n// abcabc -> (?:abc){2}\nfunction combineRepeatingPatternLeft(alternative, child, index) {\n var node = alternative.node;\n\n\n var nbPossibleLengths = Math.ceil(index / 2);\n var i = 0;\n\n while (i < nbPossibleLengths) {\n var startIndex = index - 2 * i - 1;\n var right = void 0,\n left = void 0;\n\n if (i === 0) {\n right = child;\n left = alternative.getChild(startIndex);\n } else {\n right = NodePath.getForNode({\n type: 'Alternative',\n expressions: [].concat(_toConsumableArray(node.expressions.slice(index - i, index)), [child.node])\n });\n\n left = NodePath.getForNode({\n type: 'Alternative',\n expressions: [].concat(_toConsumableArray(node.expressions.slice(startIndex, index - i)))\n });\n }\n\n if (right.hasEqualSource(left)) {\n for (var j = 0; j < 2 * i + 1; j++) {\n alternative.getChild(startIndex).remove();\n }\n\n child.replace({\n type: 'Repetition',\n expression: i === 0 && right.node.type !== 'Repetition' ? right.node : {\n type: 'Group',\n capturing: false,\n expression: right.node\n },\n quantifier: {\n type: 'Quantifier',\n kind: 'Range',\n from: 2,\n to: 2,\n greedy: true\n }\n });\n return startIndex;\n }\n\n i++;\n }\n\n return index;\n}\n\n// (?:abc){2}abc -> (?:abc){3}\nfunction combineWithPreviousRepetition(alternative, child, index) {\n var node = alternative.node;\n\n\n var i = 0;\n while (i < index) {\n var previousChild = alternative.getChild(i);\n\n if (previousChild.node.type === 'Repetition' && previousChild.node.quantifier.greedy) {\n var left = previousChild.getChild();\n var right = void 0;\n\n if (left.node.type === 'Group' && !left.node.capturing) {\n left = left.getChild();\n }\n\n if (i + 1 === index) {\n right = child;\n if (right.node.type === 'Group' && !right.node.capturing) {\n right = right.getChild();\n }\n } else {\n right = NodePath.getForNode({\n type: 'Alternative',\n expressions: [].concat(_toConsumableArray(node.expressions.slice(i + 1, index + 1)))\n });\n }\n\n if (left.hasEqualSource(right)) {\n for (var j = i; j < index; j++) {\n alternative.getChild(i + 1).remove();\n }\n\n increaseQuantifierByOne(previousChild.node.quantifier);\n\n return i;\n }\n }\n\n i++;\n }\n return index;\n}\n\n// abc(?:abc){2} -> (?:abc){3}\nfunction combineRepetitionWithPrevious(alternative, child, index) {\n var node = alternative.node;\n\n\n if (child.node.type === 'Repetition' && child.node.quantifier.greedy) {\n var right = child.getChild();\n var left = void 0;\n\n if (right.node.type === 'Group' && !right.node.capturing) {\n right = right.getChild();\n }\n\n var rightLength = void 0;\n if (right.node.type === 'Alternative') {\n rightLength = right.node.expressions.length;\n left = NodePath.getForNode({\n type: 'Alternative',\n expressions: [].concat(_toConsumableArray(node.expressions.slice(index - rightLength, index)))\n });\n } else {\n rightLength = 1;\n left = alternative.getChild(index - 1);\n if (left.node.type === 'Group' && !left.node.capturing) {\n left = left.getChild();\n }\n }\n\n if (left.hasEqualSource(right)) {\n for (var j = index - rightLength; j < index; j++) {\n alternative.getChild(index - rightLength).remove();\n }\n\n increaseQuantifierByOne(child.node.quantifier);\n\n return index - rightLength;\n }\n }\n return index;\n}","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\nmodule.exports = new Map([\n// \\ud83d\\ude80 -> \\u{1f680}\n['charSurrogatePairToSingleUnicode', require('./char-surrogate-pair-to-single-unicode-transform')],\n\n// \\u0061 -> a\n['charCodeToSimpleChar', require('./char-code-to-simple-char-transform')],\n\n// /Aa/i -> /aa/i\n['charCaseInsensitiveLowerCaseTransform', require('./char-case-insensitive-lowercase-transform')],\n\n// [\\d\\d] -> [\\d]\n['charClassRemoveDuplicates', require('./char-class-remove-duplicates-transform')],\n\n// a{1,2}a{2,3} -> a{3,5}\n['quantifiersMerge', require('./quantifiers-merge-transform')],\n\n// a{1,} -> a+, a{3,3} -> a{3}, a{1} -> a\n['quantifierRangeToSymbol', require('./quantifier-range-to-symbol-transform')],\n\n// [a-a] -> [a], [a-b] -> [ab]\n['charClassClassrangesToChars', require('./char-class-classranges-to-chars-transform')],\n\n// [0-9] -> [\\d]\n['charClassToMeta', require('./char-class-to-meta-transform')],\n\n// [\\d] -> \\d, [^\\w] -> \\W\n['charClassToSingleChar', require('./char-class-to-single-char-transform')],\n\n// \\e -> e\n['charEscapeUnescape', require('./char-escape-unescape-transform')],\n\n// [a-de-f] -> [a-f]\n['charClassClassrangesMerge', require('./char-class-classranges-merge-transform')],\n\n// (ab|ab) -> (ab)\n['disjunctionRemoveDuplicates', require('./disjunction-remove-duplicates-transform')],\n\n// (a|b|c) -> [abc]\n['groupSingleCharsToCharClass', require('./group-single-chars-to-char-class')],\n\n// (?:)a -> a\n['removeEmptyGroup', require('./remove-empty-group-transform')],\n\n// (?:a) -> a\n['ungroup', require('./ungroup-transform')],\n\n// abcabcabc -> (?:abc){3}\n['combineRepeatingPatterns', require('./combine-repeating-patterns-transform')]]);","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\nvar clone = require('../utils/clone');\nvar parser = require('../parser');\nvar transform = require('../transform');\nvar optimizationTransforms = require('./transforms');\n\nmodule.exports = {\n /**\n * Optimizer transforms a regular expression into an optimized version,\n * replacing some sub-expressions with their idiomatic patterns.\n *\n * @param string | RegExp | AST - a regexp to optimize.\n *\n * @return TransformResult - an optimized regexp.\n *\n * Example:\n *\n * /[a-zA-Z_0-9][a-zA-Z_0-9]*\\e{1,}/\n *\n * Optimized to:\n *\n * /\\w+e+/\n */\n optimize: function optimize(regexp) {\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref$whitelist = _ref.whitelist,\n whitelist = _ref$whitelist === undefined ? [] : _ref$whitelist,\n _ref$blacklist = _ref.blacklist,\n blacklist = _ref$blacklist === undefined ? [] : _ref$blacklist;\n\n var transformsRaw = whitelist.length > 0 ? whitelist : Array.from(optimizationTransforms.keys());\n\n var transformToApply = transformsRaw.filter(function (transform) {\n return !blacklist.includes(transform);\n });\n\n var ast = regexp;\n if (regexp instanceof RegExp) {\n regexp = '' + regexp;\n }\n\n if (typeof regexp === 'string') {\n ast = parser.parse(regexp);\n }\n\n var result = new transform.TransformResult(ast);\n var prevResultString = void 0;\n\n do {\n // Get a copy of the current state here so\n // we can compare it with the state at the\n // end of the loop.\n prevResultString = result.toString();\n ast = clone(result.getAST());\n\n transformToApply.forEach(function (transformName) {\n if (!optimizationTransforms.has(transformName)) {\n throw new Error('Unknown optimization-transform: ' + transformName + '. ' + 'Available transforms are: ' + Array.from(optimizationTransforms.keys()).join(', '));\n }\n\n var transformer = optimizationTransforms.get(transformName);\n\n // Don't override result just yet since we\n // might want to rollback the transform\n var newResult = transform.transform(ast, transformer);\n\n if (newResult.toString() !== result.toString()) {\n if (newResult.toString().length <= result.toString().length) {\n result = newResult;\n } else {\n // Result has changed but is not shorter:\n // restore ast to its previous state.\n\n ast = clone(result.getAST());\n }\n }\n });\n\n // Keep running the optimizer until it stops\n // making any change to the regexp.\n } while (result.toString() !== prevResultString);\n\n return result;\n }\n};","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\n/**\n * Epsilon, the empty string.\n */\n\nvar EPSILON = 'ε';\n\n/**\n * Epsilon-closure.\n */\nvar EPSILON_CLOSURE = EPSILON + '*';\n\nmodule.exports = {\n EPSILON: EPSILON,\n EPSILON_CLOSURE: EPSILON_CLOSURE\n};","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar _require = require('../special-symbols'),\n EPSILON = _require.EPSILON,\n EPSILON_CLOSURE = _require.EPSILON_CLOSURE;\n\n/**\n * NFA fragment.\n *\n * NFA sub-fragments can be combined to a larger NFAs building\n * the resulting machine. Combining the fragments is done by patching\n * edges of the in- and out-states.\n *\n * 2-states implementation, `in`, and `out`. Eventually all transitions\n * go to the same `out`, which can further be connected via ε-transition\n * with other fragment.\n */\n\n\nvar NFA = function () {\n function NFA(inState, outState) {\n _classCallCheck(this, NFA);\n\n this.in = inState;\n this.out = outState;\n }\n\n /**\n * Tries to recognize a string based on this NFA fragment.\n */\n\n\n _createClass(NFA, [{\n key: 'matches',\n value: function matches(string) {\n return this.in.matches(string);\n }\n\n /**\n * Returns an alphabet for this NFA.\n */\n\n }, {\n key: 'getAlphabet',\n value: function getAlphabet() {\n if (!this._alphabet) {\n this._alphabet = new Set();\n var table = this.getTransitionTable();\n for (var state in table) {\n var transitions = table[state];\n for (var symbol in transitions) {\n if (symbol !== EPSILON_CLOSURE) {\n this._alphabet.add(symbol);\n }\n }\n }\n }\n return this._alphabet;\n }\n\n /**\n * Returns set of accepting states.\n */\n\n }, {\n key: 'getAcceptingStates',\n value: function getAcceptingStates() {\n if (!this._acceptingStates) {\n // States are determined during table construction.\n this.getTransitionTable();\n }\n return this._acceptingStates;\n }\n\n /**\n * Returns accepting state numbers.\n */\n\n }, {\n key: 'getAcceptingStateNumbers',\n value: function getAcceptingStateNumbers() {\n if (!this._acceptingStateNumbers) {\n this._acceptingStateNumbers = new Set();\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = this.getAcceptingStates()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var acceptingState = _step.value;\n\n this._acceptingStateNumbers.add(acceptingState.number);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n }\n return this._acceptingStateNumbers;\n }\n\n /**\n * Builds and returns transition table.\n */\n\n }, {\n key: 'getTransitionTable',\n value: function getTransitionTable() {\n var _this = this;\n\n if (!this._transitionTable) {\n this._transitionTable = {};\n this._acceptingStates = new Set();\n\n var visited = new Set();\n var symbols = new Set();\n\n var visitState = function visitState(state) {\n if (visited.has(state)) {\n return;\n }\n\n visited.add(state);\n state.number = visited.size;\n _this._transitionTable[state.number] = {};\n\n if (state.accepting) {\n _this._acceptingStates.add(state);\n }\n\n var transitions = state.getTransitions();\n\n var _iteratorNormalCompletion2 = true;\n var _didIteratorError2 = false;\n var _iteratorError2 = undefined;\n\n try {\n for (var _iterator2 = transitions[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var _ref = _step2.value;\n\n var _ref2 = _slicedToArray(_ref, 2);\n\n var symbol = _ref2[0];\n var symbolTransitions = _ref2[1];\n\n var combinedState = [];\n symbols.add(symbol);\n var _iteratorNormalCompletion3 = true;\n var _didIteratorError3 = false;\n var _iteratorError3 = undefined;\n\n try {\n for (var _iterator3 = symbolTransitions[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n var nextState = _step3.value;\n\n visitState(nextState);\n combinedState.push(nextState.number);\n }\n } catch (err) {\n _didIteratorError3 = true;\n _iteratorError3 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion3 && _iterator3.return) {\n _iterator3.return();\n }\n } finally {\n if (_didIteratorError3) {\n throw _iteratorError3;\n }\n }\n }\n\n _this._transitionTable[state.number][symbol] = combinedState;\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n };\n\n // Traverse the graph starting from the `in`.\n visitState(this.in);\n\n // Append epsilon-closure column.\n visited.forEach(function (state) {\n delete _this._transitionTable[state.number][EPSILON];\n _this._transitionTable[state.number][EPSILON_CLOSURE] = [].concat(_toConsumableArray(state.getEpsilonClosure())).map(function (s) {\n return s.number;\n });\n });\n }\n\n return this._transitionTable;\n }\n }]);\n\n return NFA;\n}();\n\nmodule.exports = NFA;","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\n// DFA minization.\n\n/**\n * Map from state to current set it goes.\n */\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nfunction _toArray(arr) { return Array.isArray(arr) ? arr : Array.from(arr); }\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar currentTransitionMap = null;\n\n/**\n * Takes a DFA, and returns a minimized version of it\n * compressing some states to groups (using standard, 0-, 1-,\n * 2-, ... N-equivalence algorithm).\n */\nfunction minimize(dfa) {\n var table = dfa.getTransitionTable();\n var allStates = Object.keys(table);\n var alphabet = dfa.getAlphabet();\n var accepting = dfa.getAcceptingStateNumbers();\n\n currentTransitionMap = {};\n\n var nonAccepting = new Set();\n\n allStates.forEach(function (state) {\n state = Number(state);\n var isAccepting = accepting.has(state);\n\n if (isAccepting) {\n currentTransitionMap[state] = accepting;\n } else {\n nonAccepting.add(state);\n currentTransitionMap[state] = nonAccepting;\n }\n });\n\n // ---------------------------------------------------------------------------\n // Step 1: build equivalent sets.\n\n // All [1..N] equivalent sets.\n var all = [\n // 0-equivalent sets.\n [nonAccepting, accepting].filter(function (set) {\n return set.size > 0;\n })];\n\n var current = void 0;\n var previous = void 0;\n\n // Top of the stack is the current list of sets to analyze.\n current = all[all.length - 1];\n\n // Previous set (to check whether we need to stop).\n previous = all[all.length - 2];\n\n // Until we'll not have the same N and N-1 equivalent rows.\n\n var _loop = function _loop() {\n var newTransitionMap = {};\n\n var _iteratorNormalCompletion3 = true;\n var _didIteratorError3 = false;\n var _iteratorError3 = undefined;\n\n try {\n for (var _iterator3 = current[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n var _set = _step3.value;\n\n // Handled states for this set.\n var handledStates = {};\n\n var _set2 = _toArray(_set),\n first = _set2[0],\n rest = _set2.slice(1);\n\n handledStates[first] = new Set([first]);\n\n // Have to compare each from the rest states with\n // the already handled states, and see if they are equivalent.\n var _iteratorNormalCompletion4 = true;\n var _didIteratorError4 = false;\n var _iteratorError4 = undefined;\n\n try {\n restSets: for (var _iterator4 = rest[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n var state = _step4.value;\n var _iteratorNormalCompletion5 = true;\n var _didIteratorError5 = false;\n var _iteratorError5 = undefined;\n\n try {\n for (var _iterator5 = Object.keys(handledStates)[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {\n var handledState = _step5.value;\n\n // This and some previously handled state are equivalent --\n // just append this state to the same set.\n if (areEquivalent(state, handledState, table, alphabet)) {\n handledStates[handledState].add(state);\n handledStates[state] = handledStates[handledState];\n continue restSets;\n }\n }\n // Else, this state is not equivalent to any of the\n // handled states -- allocate a new set for it.\n } catch (err) {\n _didIteratorError5 = true;\n _iteratorError5 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion5 && _iterator5.return) {\n _iterator5.return();\n }\n } finally {\n if (_didIteratorError5) {\n throw _iteratorError5;\n }\n }\n }\n\n handledStates[state] = new Set([state]);\n }\n } catch (err) {\n _didIteratorError4 = true;\n _iteratorError4 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion4 && _iterator4.return) {\n _iterator4.return();\n }\n } finally {\n if (_didIteratorError4) {\n throw _iteratorError4;\n }\n }\n }\n\n // Add these handled states to all states map.\n\n\n Object.assign(newTransitionMap, handledStates);\n }\n\n // Update current transition map for the handled row.\n } catch (err) {\n _didIteratorError3 = true;\n _iteratorError3 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion3 && _iterator3.return) {\n _iterator3.return();\n }\n } finally {\n if (_didIteratorError3) {\n throw _iteratorError3;\n }\n }\n }\n\n currentTransitionMap = newTransitionMap;\n\n var newSets = new Set(Object.keys(newTransitionMap).map(function (state) {\n return newTransitionMap[state];\n }));\n\n all.push([].concat(_toConsumableArray(newSets)));\n\n // Top of the stack is the current.\n current = all[all.length - 1];\n\n // Previous set.\n previous = all[all.length - 2];\n };\n\n while (!sameRow(current, previous)) {\n _loop();\n }\n\n // ---------------------------------------------------------------------------\n // Step 2: build minimized table from the equivalent sets.\n\n // Remap state numbers from sets to index-based.\n var remaped = new Map();\n var idx = 1;\n current.forEach(function (set) {\n return remaped.set(set, idx++);\n });\n\n // Build the minimized table from the calculated equivalent sets.\n var minimizedTable = {};\n\n var minimizedAcceptingStates = new Set();\n\n var updateAcceptingStates = function updateAcceptingStates(set, idx) {\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = set[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var state = _step.value;\n\n if (accepting.has(state)) {\n minimizedAcceptingStates.add(idx);\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n };\n\n var _iteratorNormalCompletion2 = true;\n var _didIteratorError2 = false;\n var _iteratorError2 = undefined;\n\n try {\n for (var _iterator2 = remaped.entries()[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var _ref = _step2.value;\n\n var _ref2 = _slicedToArray(_ref, 2);\n\n var set = _ref2[0];\n var _idx = _ref2[1];\n\n minimizedTable[_idx] = {};\n var _iteratorNormalCompletion6 = true;\n var _didIteratorError6 = false;\n var _iteratorError6 = undefined;\n\n try {\n for (var _iterator6 = alphabet[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {\n var symbol = _step6.value;\n\n updateAcceptingStates(set, _idx);\n\n // Determine original transition for this symbol from the set.\n var originalTransition = void 0;\n var _iteratorNormalCompletion7 = true;\n var _didIteratorError7 = false;\n var _iteratorError7 = undefined;\n\n try {\n for (var _iterator7 = set[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) {\n var originalState = _step7.value;\n\n originalTransition = table[originalState][symbol];\n if (originalTransition) {\n break;\n }\n }\n } catch (err) {\n _didIteratorError7 = true;\n _iteratorError7 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion7 && _iterator7.return) {\n _iterator7.return();\n }\n } finally {\n if (_didIteratorError7) {\n throw _iteratorError7;\n }\n }\n }\n\n if (originalTransition) {\n minimizedTable[_idx][symbol] = remaped.get(currentTransitionMap[originalTransition]);\n }\n }\n } catch (err) {\n _didIteratorError6 = true;\n _iteratorError6 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion6 && _iterator6.return) {\n _iterator6.return();\n }\n } finally {\n if (_didIteratorError6) {\n throw _iteratorError6;\n }\n }\n }\n }\n\n // Update the table, and accepting states on the original DFA.\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n\n dfa.setTransitionTable(minimizedTable);\n dfa.setAcceptingStateNumbers(minimizedAcceptingStates);\n\n return dfa;\n}\n\nfunction sameRow(r1, r2) {\n if (!r2) {\n return false;\n }\n\n if (r1.length !== r2.length) {\n return false;\n }\n\n for (var i = 0; i < r1.length; i++) {\n var s1 = r1[i];\n var s2 = r2[i];\n\n if (s1.size !== s2.size) {\n return false;\n }\n\n if ([].concat(_toConsumableArray(s1)).sort().join(',') !== [].concat(_toConsumableArray(s2)).sort().join(',')) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Checks whether two states are N-equivalent, i.e. whether they go\n * to the same set on a symbol.\n */\nfunction areEquivalent(s1, s2, table, alphabet) {\n var _iteratorNormalCompletion8 = true;\n var _didIteratorError8 = false;\n var _iteratorError8 = undefined;\n\n try {\n for (var _iterator8 = alphabet[Symbol.iterator](), _step8; !(_iteratorNormalCompletion8 = (_step8 = _iterator8.next()).done); _iteratorNormalCompletion8 = true) {\n var symbol = _step8.value;\n\n if (!goToSameSet(s1, s2, table, symbol)) {\n return false;\n }\n }\n } catch (err) {\n _didIteratorError8 = true;\n _iteratorError8 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion8 && _iterator8.return) {\n _iterator8.return();\n }\n } finally {\n if (_didIteratorError8) {\n throw _iteratorError8;\n }\n }\n }\n\n return true;\n}\n\n/**\n * Checks whether states go to the same set.\n */\nfunction goToSameSet(s1, s2, table, symbol) {\n if (!currentTransitionMap[s1] || !currentTransitionMap[s2]) {\n return false;\n }\n\n var originalTransitionS1 = table[s1][symbol];\n var originalTransitionS2 = table[s2][symbol];\n\n // If no actual transition on this symbol, treat it as positive.\n if (!originalTransitionS1 && !originalTransitionS2) {\n return true;\n }\n\n // Otherwise, check if they are in the same sets.\n return currentTransitionMap[s1].has(originalTransitionS1) && currentTransitionMap[s2].has(originalTransitionS2);\n}\n\nmodule.exports = {\n minimize: minimize\n};","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar DFAMinimizer = require('./dfa-minimizer');\n\nvar _require = require('../special-symbols'),\n EPSILON_CLOSURE = _require.EPSILON_CLOSURE;\n\n/**\n * DFA is build by converting from NFA (subset construction).\n */\n\n\nvar DFA = function () {\n function DFA(nfa) {\n _classCallCheck(this, DFA);\n\n this._nfa = nfa;\n }\n\n /**\n * Minimizes DFA.\n */\n\n\n _createClass(DFA, [{\n key: 'minimize',\n value: function minimize() {\n this.getTransitionTable();\n\n this._originalAcceptingStateNumbers = this._acceptingStateNumbers;\n this._originalTransitionTable = this._transitionTable;\n\n DFAMinimizer.minimize(this);\n }\n\n /**\n * Returns alphabet for this DFA.\n */\n\n }, {\n key: 'getAlphabet',\n value: function getAlphabet() {\n return this._nfa.getAlphabet();\n }\n\n /**\n * Returns accepting states.\n */\n\n }, {\n key: 'getAcceptingStateNumbers',\n value: function getAcceptingStateNumbers() {\n if (!this._acceptingStateNumbers) {\n // Accepting states are determined during table construction.\n this.getTransitionTable();\n }\n\n return this._acceptingStateNumbers;\n }\n\n /**\n * Returns original accepting states.\n */\n\n }, {\n key: 'getOriginaAcceptingStateNumbers',\n value: function getOriginaAcceptingStateNumbers() {\n if (!this._originalAcceptingStateNumbers) {\n // Accepting states are determined during table construction.\n this.getTransitionTable();\n }\n\n return this._originalAcceptingStateNumbers;\n }\n\n /**\n * Sets transition table.\n */\n\n }, {\n key: 'setTransitionTable',\n value: function setTransitionTable(table) {\n this._transitionTable = table;\n }\n\n /**\n * Sets accepting states.\n */\n\n }, {\n key: 'setAcceptingStateNumbers',\n value: function setAcceptingStateNumbers(stateNumbers) {\n this._acceptingStateNumbers = stateNumbers;\n }\n\n /**\n * DFA transition table is built from NFA table.\n */\n\n }, {\n key: 'getTransitionTable',\n value: function getTransitionTable() {\n var _this = this;\n\n if (this._transitionTable) {\n return this._transitionTable;\n }\n\n // Calculate from NFA transition table.\n var nfaTable = this._nfa.getTransitionTable();\n var nfaStates = Object.keys(nfaTable);\n\n this._acceptingStateNumbers = new Set();\n\n // Start state of DFA is E(S[nfa])\n var startState = nfaTable[nfaStates[0]][EPSILON_CLOSURE];\n\n // Init the worklist (states which should be in the DFA).\n var worklist = [startState];\n\n var alphabet = this.getAlphabet();\n var nfaAcceptingStates = this._nfa.getAcceptingStateNumbers();\n\n var dfaTable = {};\n\n // Determine whether the combined DFA state is accepting.\n var updateAcceptingStates = function updateAcceptingStates(states) {\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = nfaAcceptingStates[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var nfaAcceptingState = _step.value;\n\n // If any of the states from NFA is accepting, DFA's\n // state is accepting as well.\n if (states.indexOf(nfaAcceptingState) !== -1) {\n _this._acceptingStateNumbers.add(states.join(','));\n break;\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n };\n\n while (worklist.length > 0) {\n var states = worklist.shift();\n var dfaStateLabel = states.join(',');\n dfaTable[dfaStateLabel] = {};\n\n var _iteratorNormalCompletion2 = true;\n var _didIteratorError2 = false;\n var _iteratorError2 = undefined;\n\n try {\n for (var _iterator2 = alphabet[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var symbol = _step2.value;\n\n var onSymbol = [];\n\n // Determine whether the combined state is accepting.\n updateAcceptingStates(states);\n\n var _iteratorNormalCompletion3 = true;\n var _didIteratorError3 = false;\n var _iteratorError3 = undefined;\n\n try {\n for (var _iterator3 = states[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n var state = _step3.value;\n\n var nfaStatesOnSymbol = nfaTable[state][symbol];\n if (!nfaStatesOnSymbol) {\n continue;\n }\n\n var _iteratorNormalCompletion4 = true;\n var _didIteratorError4 = false;\n var _iteratorError4 = undefined;\n\n try {\n for (var _iterator4 = nfaStatesOnSymbol[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n var nfaStateOnSymbol = _step4.value;\n\n if (!nfaTable[nfaStateOnSymbol]) {\n continue;\n }\n onSymbol.push.apply(onSymbol, _toConsumableArray(nfaTable[nfaStateOnSymbol][EPSILON_CLOSURE]));\n }\n } catch (err) {\n _didIteratorError4 = true;\n _iteratorError4 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion4 && _iterator4.return) {\n _iterator4.return();\n }\n } finally {\n if (_didIteratorError4) {\n throw _iteratorError4;\n }\n }\n }\n }\n } catch (err) {\n _didIteratorError3 = true;\n _iteratorError3 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion3 && _iterator3.return) {\n _iterator3.return();\n }\n } finally {\n if (_didIteratorError3) {\n throw _iteratorError3;\n }\n }\n }\n\n var dfaStatesOnSymbolSet = new Set(onSymbol);\n var dfaStatesOnSymbol = [].concat(_toConsumableArray(dfaStatesOnSymbolSet));\n\n if (dfaStatesOnSymbol.length > 0) {\n var dfaOnSymbolStr = dfaStatesOnSymbol.join(',');\n\n dfaTable[dfaStateLabel][symbol] = dfaOnSymbolStr;\n\n if (!dfaTable.hasOwnProperty(dfaOnSymbolStr)) {\n worklist.unshift(dfaStatesOnSymbol);\n }\n }\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n }\n\n return this._transitionTable = this._remapStateNumbers(dfaTable);\n }\n\n /**\n * Remaps state numbers in the resulting table:\n * combined states '1,2,3' -> 1, '3,4' -> 2, etc.\n */\n\n }, {\n key: '_remapStateNumbers',\n value: function _remapStateNumbers(calculatedDFATable) {\n var newStatesMap = {};\n\n this._originalTransitionTable = calculatedDFATable;\n var transitionTable = {};\n\n Object.keys(calculatedDFATable).forEach(function (originalNumber, newNumber) {\n newStatesMap[originalNumber] = newNumber + 1;\n });\n\n for (var originalNumber in calculatedDFATable) {\n var originalRow = calculatedDFATable[originalNumber];\n var row = {};\n\n for (var symbol in originalRow) {\n row[symbol] = newStatesMap[originalRow[symbol]];\n }\n\n transitionTable[newStatesMap[originalNumber]] = row;\n }\n\n // Remap accepting states.\n this._originalAcceptingStateNumbers = this._acceptingStateNumbers;\n this._acceptingStateNumbers = new Set();\n\n var _iteratorNormalCompletion5 = true;\n var _didIteratorError5 = false;\n var _iteratorError5 = undefined;\n\n try {\n for (var _iterator5 = this._originalAcceptingStateNumbers[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {\n var _originalNumber = _step5.value;\n\n this._acceptingStateNumbers.add(newStatesMap[_originalNumber]);\n }\n } catch (err) {\n _didIteratorError5 = true;\n _iteratorError5 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion5 && _iterator5.return) {\n _iterator5.return();\n }\n } finally {\n if (_didIteratorError5) {\n throw _iteratorError5;\n }\n }\n }\n\n return transitionTable;\n }\n\n /**\n * Returns original DFA table, where state numbers\n * are combined numbers from NFA.\n */\n\n }, {\n key: 'getOriginalTransitionTable',\n value: function getOriginalTransitionTable() {\n if (!this._originalTransitionTable) {\n // Original table is determined during table construction.\n this.getTransitionTable();\n }\n return this._originalTransitionTable;\n }\n\n /**\n * Checks whether this DFA accepts a string.\n */\n\n }, {\n key: 'matches',\n value: function matches(string) {\n var state = 1;\n var i = 0;\n var table = this.getTransitionTable();\n\n while (string[i]) {\n state = table[state][string[i++]];\n if (!state) {\n return false;\n }\n }\n\n if (!this.getAcceptingStateNumbers().has(state)) {\n return false;\n }\n\n return true;\n }\n }]);\n\n return DFA;\n}();\n\nmodule.exports = DFA;","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\n/**\n * A generic FA State class (base for NFA and DFA).\n *\n * Maintains the transition map, and the flag whether\n * the state is accepting.\n */\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar State = function () {\n function State() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref$accepting = _ref.accepting,\n accepting = _ref$accepting === undefined ? false : _ref$accepting;\n\n _classCallCheck(this, State);\n\n /**\n * Outgoing transitions to other states.\n */\n this._transitions = new Map();\n\n /**\n * Whether the state is accepting.\n */\n this.accepting = accepting;\n }\n\n /**\n * Returns transitions for this state.\n */\n\n\n _createClass(State, [{\n key: 'getTransitions',\n value: function getTransitions() {\n return this._transitions;\n }\n\n /**\n * Creates a transition on symbol.\n */\n\n }, {\n key: 'addTransition',\n value: function addTransition(symbol, toState) {\n this.getTransitionsOnSymbol(symbol).add(toState);\n return this;\n }\n\n /**\n * Returns transitions set on symbol.\n */\n\n }, {\n key: 'getTransitionsOnSymbol',\n value: function getTransitionsOnSymbol(symbol) {\n var transitions = this._transitions.get(symbol);\n\n if (!transitions) {\n transitions = new Set();\n this._transitions.set(symbol, transitions);\n }\n\n return transitions;\n }\n }]);\n\n return State;\n}();\n\nmodule.exports = State;","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar State = require('../state');\n\nvar _require = require('../special-symbols'),\n EPSILON = _require.EPSILON;\n\n/**\n * NFA state.\n *\n * Allows nondeterministic transitions to several states on the\n * same symbol, and also epsilon-transitions.\n */\n\n\nvar NFAState = function (_State) {\n _inherits(NFAState, _State);\n\n function NFAState() {\n _classCallCheck(this, NFAState);\n\n return _possibleConstructorReturn(this, (NFAState.__proto__ || Object.getPrototypeOf(NFAState)).apply(this, arguments));\n }\n\n _createClass(NFAState, [{\n key: 'matches',\n\n\n /**\n * Whether this state matches a string.\n *\n * We maintain set of visited epsilon-states to avoid infinite loops\n * when an epsilon-transition goes eventually to itself.\n *\n * NOTE: this function is rather \"educational\", since we use DFA for strings\n * matching. DFA is built on top of NFA, and uses fast transition table.\n */\n value: function matches(string) {\n var visited = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Set();\n\n // An epsilon-state has been visited, stop to avoid infinite loop.\n if (visited.has(this)) {\n return false;\n }\n\n visited.add(this);\n\n // No symbols left..\n if (string.length === 0) {\n // .. and we're in the accepting state.\n if (this.accepting) {\n return true;\n }\n\n // Check if we can reach any accepting state from\n // on the epsilon transitions.\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = this.getTransitionsOnSymbol(EPSILON)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var nextState = _step.value;\n\n if (nextState.matches('', visited)) {\n return true;\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n return false;\n }\n\n // Else, we get some symbols.\n var symbol = string[0];\n var rest = string.slice(1);\n\n var symbolTransitions = this.getTransitionsOnSymbol(symbol);\n var _iteratorNormalCompletion2 = true;\n var _didIteratorError2 = false;\n var _iteratorError2 = undefined;\n\n try {\n for (var _iterator2 = symbolTransitions[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var _nextState = _step2.value;\n\n if (_nextState.matches(rest)) {\n return true;\n }\n }\n\n // If we couldn't match on symbol, check still epsilon-transitions\n // without consuming the symbol (i.e. continue from `string`, not `rest`).\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n\n var _iteratorNormalCompletion3 = true;\n var _didIteratorError3 = false;\n var _iteratorError3 = undefined;\n\n try {\n for (var _iterator3 = this.getTransitionsOnSymbol(EPSILON)[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n var _nextState2 = _step3.value;\n\n if (_nextState2.matches(string, visited)) {\n return true;\n }\n }\n } catch (err) {\n _didIteratorError3 = true;\n _iteratorError3 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion3 && _iterator3.return) {\n _iterator3.return();\n }\n } finally {\n if (_didIteratorError3) {\n throw _iteratorError3;\n }\n }\n }\n\n return false;\n }\n\n /**\n * Returns an ε-closure for this state:\n * self + all states following ε-transitions.\n */\n\n }, {\n key: 'getEpsilonClosure',\n value: function getEpsilonClosure() {\n var _this2 = this;\n\n if (!this._epsilonClosure) {\n (function () {\n var epsilonTransitions = _this2.getTransitionsOnSymbol(EPSILON);\n var closure = _this2._epsilonClosure = new Set();\n closure.add(_this2);\n var _iteratorNormalCompletion4 = true;\n var _didIteratorError4 = false;\n var _iteratorError4 = undefined;\n\n try {\n for (var _iterator4 = epsilonTransitions[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n var nextState = _step4.value;\n\n if (!closure.has(nextState)) {\n closure.add(nextState);\n var nextClosure = nextState.getEpsilonClosure();\n nextClosure.forEach(function (state) {\n return closure.add(state);\n });\n }\n }\n } catch (err) {\n _didIteratorError4 = true;\n _iteratorError4 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion4 && _iterator4.return) {\n _iterator4.return();\n }\n } finally {\n if (_didIteratorError4) {\n throw _iteratorError4;\n }\n }\n }\n })();\n }\n\n return this._epsilonClosure;\n }\n }]);\n\n return NFAState;\n}(State);\n\nmodule.exports = NFAState;","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\nvar NFA = require('./nfa');\nvar NFAState = require('./nfa-state');\n\nvar _require = require('../special-symbols'),\n EPSILON = _require.EPSILON;\n\n// -----------------------------------------------------------------------------\n// Char NFA fragment: `c`\n\n/**\n * Char factory.\n *\n * Creates an NFA fragment for a single char.\n *\n * [in] --c--> [out]\n */\n\n\nfunction char(c) {\n var inState = new NFAState();\n var outState = new NFAState({\n accepting: true\n });\n\n return new NFA(inState.addTransition(c, outState), outState);\n}\n\n// -----------------------------------------------------------------------------\n// Epsilon NFA fragment\n\n/**\n * Epsilon factory.\n *\n * Creates an NFA fragment for ε (recognizes an empty string).\n *\n * [in] --ε--> [out]\n */\nfunction e() {\n return char(EPSILON);\n}\n\n// -----------------------------------------------------------------------------\n// Alteration NFA fragment: `abc`\n\n/**\n * Creates a connection between two NFA fragments on epsilon transition.\n *\n * [in-a] --a--> [out-a] --ε--> [in-b] --b--> [out-b]\n */\nfunction altPair(first, second) {\n first.out.accepting = false;\n second.out.accepting = true;\n\n first.out.addTransition(EPSILON, second.in);\n\n return new NFA(first.in, second.out);\n}\n\n/**\n * Alteration factory.\n *\n * Creates a alteration NFA for (at least) two NFA-fragments.\n */\nfunction alt(first) {\n for (var _len = arguments.length, fragments = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n fragments[_key - 1] = arguments[_key];\n }\n\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = fragments[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var fragment = _step.value;\n\n first = altPair(first, fragment);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n return first;\n}\n\n// -----------------------------------------------------------------------------\n// Disjunction NFA fragment: `a|b`\n\n/**\n * Creates a disjunction choice between two fragments.\n */\nfunction orPair(first, second) {\n var inState = new NFAState();\n var outState = new NFAState();\n\n inState.addTransition(EPSILON, first.in);\n inState.addTransition(EPSILON, second.in);\n\n outState.accepting = true;\n first.out.accepting = false;\n second.out.accepting = false;\n\n first.out.addTransition(EPSILON, outState);\n second.out.addTransition(EPSILON, outState);\n\n return new NFA(inState, outState);\n}\n\n/**\n * Disjunction factory.\n *\n * Creates a disjunction NFA for (at least) two NFA-fragments.\n */\nfunction or(first) {\n for (var _len2 = arguments.length, fragments = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n fragments[_key2 - 1] = arguments[_key2];\n }\n\n var _iteratorNormalCompletion2 = true;\n var _didIteratorError2 = false;\n var _iteratorError2 = undefined;\n\n try {\n for (var _iterator2 = fragments[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var fragment = _step2.value;\n\n first = orPair(first, fragment);\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n\n return first;\n}\n\n// -----------------------------------------------------------------------------\n// Kleene-closure\n\n/**\n * Kleene star/closure.\n *\n * a*\n */\nfunction repExplicit(fragment) {\n var inState = new NFAState();\n var outState = new NFAState({\n accepting: true\n });\n\n // 0 or more.\n inState.addTransition(EPSILON, fragment.in);\n inState.addTransition(EPSILON, outState);\n\n fragment.out.accepting = false;\n fragment.out.addTransition(EPSILON, outState);\n outState.addTransition(EPSILON, fragment.in);\n\n return new NFA(inState, outState);\n}\n\n/**\n * Optimized Kleene-star: just adds ε-transitions from\n * input to the output, and back.\n */\nfunction rep(fragment) {\n fragment.in.addTransition(EPSILON, fragment.out);\n fragment.out.addTransition(EPSILON, fragment.in);\n return fragment;\n}\n\n/**\n * Optimized Plus: just adds ε-transitions from\n * the output to the input.\n */\nfunction plusRep(fragment) {\n fragment.out.addTransition(EPSILON, fragment.in);\n return fragment;\n}\n\n/**\n * Optimized ? repetition: just adds ε-transitions from\n * the input to the output.\n */\nfunction questionRep(fragment) {\n fragment.in.addTransition(EPSILON, fragment.out);\n return fragment;\n}\n\nmodule.exports = {\n alt: alt,\n char: char,\n e: e,\n or: or,\n rep: rep,\n repExplicit: repExplicit,\n plusRep: plusRep,\n questionRep: questionRep\n};","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar parser = require('../../../parser');\n\nvar _require = require('./builders'),\n alt = _require.alt,\n char = _require.char,\n or = _require.or,\n rep = _require.rep,\n plusRep = _require.plusRep,\n questionRep = _require.questionRep;\n\n/**\n * Helper `gen` function calls node type handler.\n */\n\n\nfunction gen(node) {\n if (node && !generator[node.type]) {\n throw new Error(node.type + ' is not supported in NFA/DFA interpreter.');\n }\n\n return node ? generator[node.type](node) : '';\n}\n\n/**\n * AST handler.\n */\nvar generator = {\n RegExp: function RegExp(node) {\n if (node.flags !== '') {\n throw new Error('NFA/DFA: Flags are not supported yet.');\n }\n\n return gen(node.body);\n },\n Alternative: function Alternative(node) {\n var fragments = (node.expressions || []).map(gen);\n return alt.apply(undefined, _toConsumableArray(fragments));\n },\n Disjunction: function Disjunction(node) {\n return or(gen(node.left), gen(node.right));\n },\n Repetition: function Repetition(node) {\n switch (node.quantifier.kind) {\n case '*':\n return rep(gen(node.expression));\n case '+':\n return plusRep(gen(node.expression));\n case '?':\n return questionRep(gen(node.expression));\n default:\n throw new Error('Unknown repeatition: ' + node.quantifier.kind + '.');\n }\n },\n Char: function Char(node) {\n if (node.kind !== 'simple') {\n throw new Error('NFA/DFA: Only simple chars are supported yet.');\n }\n\n return char(node.value);\n },\n Group: function Group(node) {\n return gen(node.expression);\n }\n};\n\nmodule.exports = {\n /**\n * Builds an NFA from the passed regexp.\n */\n build: function build(regexp) {\n var ast = regexp;\n\n if (regexp instanceof RegExp) {\n regexp = '' + regexp;\n }\n\n if (typeof regexp === 'string') {\n ast = parser.parse(regexp, {\n captureLocations: true\n });\n }\n\n return gen(ast);\n }\n};","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\nvar NFA = require('./nfa/nfa');\nvar DFA = require('./dfa/dfa');\n\nvar nfaFromRegExp = require('./nfa/nfa-from-regexp');\nvar builders = require('./nfa/builders');\n\nmodule.exports = {\n\n /**\n * Export NFA and DFA classes.\n */\n NFA: NFA,\n DFA: DFA,\n\n /**\n * Expose builders.\n */\n builders: builders,\n\n /**\n * Builds an NFA for the passed regexp.\n *\n * @param string | AST | RegExp:\n *\n * a regular expression in different representations: a string,\n * a RegExp object, or an AST.\n */\n toNFA: function toNFA(regexp) {\n return nfaFromRegExp.build(regexp);\n },\n\n\n /**\n * Builds DFA for the passed regexp.\n *\n * @param string | AST | RegExp:\n *\n * a regular expression in different representations: a string,\n * a RegExp object, or an AST.\n */\n toDFA: function toDFA(regexp) {\n return new DFA(this.toNFA(regexp));\n },\n\n\n /**\n * Returns true if regexp accepts the string.\n */\n test: function test(regexp, string) {\n return this.toDFA(regexp).matches(string);\n }\n};","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\n/**\n * The `RegExpTree` class provides runtime support for `compat-transpiler`\n * module from `regexp-tree`.\n *\n * E.g. it tracks names of the capturing groups, in order to access the\n * names on the matched result.\n *\n * It's a thin-wrapper on top of original regexp.\n */\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar RegExpTree = function () {\n /**\n * Initializes a `RegExpTree` instance.\n *\n * @param RegExp - a regular expression\n *\n * @param Object state:\n *\n * An extra state which may store any related to transformation\n * data, for example, names of the groups.\n *\n * - flags - original flags\n * - groups - names of the groups, and their indices\n * - source - original source\n */\n function RegExpTree(re, _ref) {\n var flags = _ref.flags,\n groups = _ref.groups,\n source = _ref.source;\n\n _classCallCheck(this, RegExpTree);\n\n this._re = re;\n this._groups = groups;\n\n // Original props.\n this.flags = flags;\n this.source = source || re.source;\n this.dotAll = flags.includes('s');\n\n // Inherited directly from `re`.\n this.global = re.global;\n this.ignoreCase = re.ignoreCase;\n this.multiline = re.multiline;\n this.sticky = re.sticky;\n this.unicode = re.unicode;\n }\n\n /**\n * Facade wrapper for RegExp `test` method.\n */\n\n\n _createClass(RegExpTree, [{\n key: 'test',\n value: function test(string) {\n return this._re.test(string);\n }\n\n /**\n * Facade wrapper for RegExp `compile` method.\n */\n\n }, {\n key: 'compile',\n value: function compile(string) {\n return this._re.compile(string);\n }\n\n /**\n * Facade wrapper for RegExp `toString` method.\n */\n\n }, {\n key: 'toString',\n value: function toString() {\n if (!this._toStringResult) {\n this._toStringResult = '/' + this.source + '/' + this.flags;\n }\n return this._toStringResult;\n }\n\n /**\n * Facade wrapper for RegExp `exec` method.\n */\n\n }, {\n key: 'exec',\n value: function exec(string) {\n var result = this._re.exec(string);\n\n if (!this._groups || !result) {\n return result;\n }\n\n result.groups = {};\n\n for (var group in this._groups) {\n var groupNumber = this._groups[group];\n result.groups[group] = result[groupNumber];\n }\n\n return result;\n }\n }]);\n\n return RegExpTree;\n}();\n\nmodule.exports = {\n RegExpTree: RegExpTree\n};","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\nvar compatTranspiler = require('./compat-transpiler');\nvar generator = require('./generator');\nvar optimizer = require('./optimizer');\nvar parser = require('./parser');\nvar _transform = require('./transform');\nvar _traverse = require('./traverse');\nvar fa = require('./interpreter/finite-automaton');\n\nvar _require = require('./compat-transpiler/runtime'),\n RegExpTree = _require.RegExpTree;\n\n/**\n * An API object for RegExp processing (parsing/transform/generation).\n */\n\n\nvar regexpTree = {\n /**\n * Parser module exposed.\n */\n parser: parser,\n\n /**\n * Expose finite-automaton module.\n */\n fa: fa,\n\n /**\n * `TransformResult` exposed.\n */\n TransformResult: _transform.TransformResult,\n\n /**\n * Parses a regexp string, producing an AST.\n *\n * @param string regexp\n *\n * a regular expression in different formats: string, AST, RegExp.\n *\n * @param Object options\n *\n * parsing options for this parse call. Default are:\n *\n * - captureLocations: boolean\n * - any other custom options\n *\n * @return Object AST\n */\n parse: function parse(regexp, options) {\n return parser.parse('' + regexp, options);\n },\n\n\n /**\n * Traverses a RegExp AST.\n *\n * @param Object ast\n * @param Object | Array<Object> handlers\n *\n * Each `handler` is an object containing handler function for needed\n * node types. Example:\n *\n * regexpTree.traverse(ast, {\n * onChar(node) {\n * ...\n * },\n * });\n *\n * The value for a node type may also be an object with functions pre and post.\n * This enables more context-aware analyses, e.g. measuring star height.\n */\n traverse: function traverse(ast, handlers, options) {\n return _traverse.traverse(ast, handlers, options);\n },\n\n\n /**\n * Transforms a regular expression.\n *\n * A regexp can be passed in different formats (string, regexp or AST),\n * applying a set of transformations. It is a convenient wrapper\n * on top of \"parse-traverse-generate\" tool chain.\n *\n * @param string | AST | RegExp regexp - a regular expression;\n * @param Object | Array<Object> handlers - a list of handlers.\n *\n * @return TransformResult - a transformation result.\n */\n transform: function transform(regexp, handlers) {\n return _transform.transform(regexp, handlers);\n },\n\n\n /**\n * Generates a RegExp string from an AST.\n *\n * @param Object ast\n *\n * Invariant:\n *\n * regexpTree.generate(regexpTree.parse('/[a-z]+/i')); // '/[a-z]+/i'\n */\n generate: function generate(ast) {\n return generator.generate(ast);\n },\n\n\n /**\n * Creates a RegExp object from a regexp string.\n *\n * @param string regexp\n */\n toRegExp: function toRegExp(regexp) {\n var compat = this.compatTranspile(regexp);\n return new RegExp(compat.getSource(), compat.getFlags());\n },\n\n\n /**\n * Optimizes a regular expression by replacing some\n * sub-expressions with their idiomatic patterns.\n *\n * @param string regexp\n *\n * @return TransformResult object\n */\n optimize: function optimize(regexp, whitelist) {\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n blacklist = _ref.blacklist;\n\n return optimizer.optimize(regexp, { whitelist: whitelist, blacklist: blacklist });\n },\n\n\n /**\n * Translates a regular expression in new syntax or in new format\n * into equivalent expressions in old syntax.\n *\n * @param string regexp\n *\n * @return TransformResult object\n */\n compatTranspile: function compatTranspile(regexp, whitelist) {\n return compatTranspiler.transform(regexp, whitelist);\n },\n\n\n /**\n * Executes a regular expression on a string.\n *\n * @param RegExp|string re - a regular expression.\n * @param string string - a testing string.\n */\n exec: function exec(re, string) {\n if (typeof re === 'string') {\n var compat = this.compatTranspile(re);\n var extra = compat.getExtra();\n\n if (extra.namedCapturingGroups) {\n re = new RegExpTree(compat.toRegExp(), {\n flags: compat.getFlags(),\n source: compat.getSource(),\n groups: extra.namedCapturingGroups\n });\n } else {\n re = compat.toRegExp();\n }\n }\n\n return re.exec(string);\n }\n};\n\nmodule.exports = regexpTree;","/**\n * The MIT License (MIT)\n * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>\n */\n\n'use strict';\n\nmodule.exports = require('./dist/regexp-tree');","// Exports an Analyzer subclass\n\nconst regexpTree = require(\"regexp-tree\");\nconst analyzer = require(\"./analyzer\");\n\nclass HeuristicAnalyzer extends analyzer.Analyzer {\n constructor(analyzerOptions) {\n super(analyzerOptions);\n }\n\n isVulnerable(regExp) {\n // Heuristic #1: Star height > 1\n const starHeight = this._measureStarHeight(regExp);\n if (starHeight > 1) {\n return true;\n }\n\n // Heuristic #2: # repetitions > limit\n // TODO This is a poor heuristic\n const nRepetitions = this._measureRepetitions(regExp);\n if (nRepetitions > this.options.heuristic_replimit) {\n return true;\n }\n\n return false;\n }\n\n genAttackString(regExp) {\n return null;\n }\n\n _measureStarHeight(regExp) {\n let currentStarHeight = 0;\n let maxObservedStarHeight = 0;\n\n const ast = regexpTree.parse(regExp);\n\n regexpTree.traverse(ast, {\n Repetition: {\n pre({ node }) {\n currentStarHeight++;\n if (maxObservedStarHeight < currentStarHeight) {\n maxObservedStarHeight = currentStarHeight;\n }\n },\n\n post({ node }) {\n currentStarHeight--;\n }\n }\n });\n\n return maxObservedStarHeight;\n }\n\n _measureRepetitions(regExp) {\n let nRepetitions = 0;\n\n const ast = regexpTree.parse(regExp);\n regexpTree.traverse(ast, {\n Repetition: {\n pre({ node }) {\n nRepetitions++;\n }\n }\n });\n\n return nRepetitions;\n }\n}\n\nmodule.exports = HeuristicAnalyzer;\n","// Load the analyzers\nconst heuristicAnalyzer = require(\"./heuristic-analyzer\");\n\nmodule.exports = [heuristicAnalyzer];\n","const analyzer = require('./lib/analyzer');\nconst analyzerFamily = require('./lib/analyzer-family');\n\nconst DEFAULT_SAFE_REP_LIMIT = 25;\nconst RET_IS_SAFE = true;\nconst RET_IS_VULNERABLE = false;\n\nclass Args {\n constructor(regExp, analyzerOptions) {\n this.regExp = regExp;\n this.analyzerOptions = analyzerOptions;\n }\n}\n\nfunction safeRegex(re, opts) {\n try {\n const args = buildArgs(re, opts);\n const analyzerResponses = askAnalyzersIfVulnerable(args);\n\n // Did any analyzer say true?\n if (analyzerResponses.find((isVulnerable) => isVulnerable)) {\n return RET_IS_VULNERABLE;\n } else {\n return RET_IS_SAFE;\n }\n } catch (err) {\n // Invalid or unparseable input\n return false;\n }\n}\n\nfunction buildArgs(re, opts) {\n // Build AnalyzerOptions\n if (!opts) opts = {};\n const heuristic_replimit = opts.limit === undefined ? DEFAULT_SAFE_REP_LIMIT : opts.limit;\n\n const analyzerOptions = new analyzer.AnalyzerOptions(heuristic_replimit);\n\n // Build RegExp\n let regExp = null;\n // Construct a RegExp object\n if (re instanceof RegExp) {\n regExp = re;\n } else if (typeof re === 'string') {\n regExp = new RegExp(re);\n } else {\n regExp = new RegExp(String(re));\n }\n\n return new Args(regExp, analyzerOptions);\n}\n\nfunction askAnalyzersIfVulnerable(args) {\n let analyzerSaysVulnerable = [];\n\n // Query the Analyzers\n let Analyzer;\n for (Analyzer of analyzerFamily) {\n try {\n const analyzer = new Analyzer(args.analyzerOptions);\n analyzerSaysVulnerable.push(analyzer.isVulnerable(args.regExp));\n } catch (err) {\n /* istanbul ignore next */ // No need to worry about code coverage here.\n analyzerSaysVulnerable.push(false);\n }\n }\n\n return analyzerSaysVulnerable;\n}\n\n// Export\n\nmodule.exports = safeRegex;","import SwaggerParser from '@apidevtools/swagger-parser';\nimport type { OpenAPIDocument } from '../types';\n\nexport interface ParseOptions {\n /** Whether to dereference $ref (default: true) */\n dereference?: boolean;\n\n /** Whether to validate the spec (default: true) */\n validate?: boolean;\n}\n\nexport interface ParseResult {\n /** Parsed and normalized OpenAPI document */\n document: OpenAPIDocument;\n\n /** OpenAPI version (3.0.x or 3.1.x) */\n version: string;\n\n /** Whether the spec was dereferenced */\n dereferenced: boolean;\n}\n\n/**\n * OpenAPI spec parser and validator\n *\n * Handles both OpenAPI 3.0 and 3.1 specs.\n * Can parse from URL or local file path.\n */\nexport class OpenAPIParser {\n /**\n * Parse an OpenAPI specification from URL or file path\n *\n * @param specPath - URL or local file path to OpenAPI spec\n * @param options - Parsing options\n * @returns Parsed and validated OpenAPI document\n *\n * @example\n * ```typescript\n * const parser = new OpenAPIParser();\n * const result = await parser.parse('https://api.example.com/openapi.json');\n * console.log(`Parsed OpenAPI ${result.version}`);\n * ```\n */\n async parse(specPath: string, options: ParseOptions = {}): Promise<ParseResult> {\n const { dereference = true, validate = true } = options;\n\n try {\n // Parse and optionally dereference the spec\n const api = await SwaggerParser.parse(specPath);\n\n // Validate the spec structure\n if (validate) {\n await SwaggerParser.validate(api);\n }\n\n // Dereference $ref pointers if requested\n let document: OpenAPIDocument;\n if (dereference) {\n document = (await SwaggerParser.dereference(api)) as OpenAPIDocument;\n } else {\n document = api as OpenAPIDocument;\n }\n\n // Detect version\n const version = this.detectVersion(document);\n\n return {\n document,\n version,\n dereferenced: dereference,\n };\n } catch (error) {\n throw this.enhanceError(error, specPath);\n }\n }\n\n /**\n * Detect OpenAPI version from document\n */\n private detectVersion(document: OpenAPIDocument): string {\n // Access the openapi property - it's always present in valid OpenAPI 3.x documents\n // The 'openapi' field is a required string in OpenAPI 3.x specifications\n const openapiVersion =\n 'openapi' in document ? (document as unknown as { openapi: string }).openapi : undefined;\n if (openapiVersion !== undefined) {\n return openapiVersion;\n }\n throw new Error('Invalid OpenAPI document: missing openapi version field');\n }\n\n /**\n * Enhance error messages with context\n */\n private enhanceError(error: unknown, specPath: string): Error {\n if (error instanceof Error) {\n const message = `Failed to parse OpenAPI spec from \"${specPath}\": ${error.message}`;\n const enhancedError = new Error(message);\n // Preserve original stack trace if available\n if (error.stack !== undefined) {\n enhancedError.stack = error.stack;\n }\n return enhancedError;\n }\n return new Error(`Failed to parse OpenAPI spec from \"${specPath}\": ${String(error)}`);\n }\n\n /**\n * Check if a spec path is a URL\n */\n static isURL(specPath: string): boolean {\n try {\n new URL(specPath);\n return true;\n } catch {\n return false;\n }\n }\n\n /**\n * Validate that a document is OpenAPI 3.x (not Swagger 2.x)\n */\n static isOpenAPI3(document: unknown): document is OpenAPIDocument {\n return (\n typeof document === 'object' &&\n document !== null &&\n 'openapi' in document &&\n typeof (document as any).openapi === 'string' &&\n (document as any).openapi.startsWith('3.')\n );\n }\n}\n","import type { OpenAPIV3, OpenAPIV3_1 } from 'openapi-types';\n\ntype SchemaObject = OpenAPIV3.SchemaObject | OpenAPIV3_1.SchemaObject;\n\n/**\n * Resolves schemas from OpenAPI documents\n *\n * Handles extracting and normalizing schemas for code generation.\n */\nexport class SchemaResolver {\n constructor(private document: OpenAPIV3.Document | OpenAPIV3_1.Document) {}\n\n /**\n * Get schema for a specific path and method\n *\n * @param path - API path (e.g., '/equipment')\n * @param method - HTTP method (e.g., 'get')\n * @param responseCode - Response code (default: '200')\n * @returns Schema object or undefined\n */\n getResponseSchema(\n path: string,\n method: string,\n responseCode: string = '200'\n ): SchemaObject | undefined {\n const pathItem = this.document.paths?.[path];\n if (!pathItem) return undefined;\n\n const operation = pathItem[method as keyof typeof pathItem] as\n | OpenAPIV3.OperationObject\n | OpenAPIV3_1.OperationObject\n | undefined;\n\n if (!operation?.responses) return undefined;\n\n const response = operation.responses[responseCode] as\n | OpenAPIV3.ResponseObject\n | OpenAPIV3_1.ResponseObject\n | undefined;\n\n if (!response) return undefined;\n\n // Get JSON response schema\n const content = response.content?.['application/json'];\n return content?.schema as SchemaObject | undefined;\n }\n\n /**\n * Get all schemas defined in components\n */\n getAllSchemas(): Record<string, SchemaObject> {\n return (this.document.components?.schemas || {}) as Record<string, SchemaObject>;\n }\n\n /**\n * Get a specific component schema by name\n */\n getComponentSchema(name: string): SchemaObject | undefined {\n return this.document.components?.schemas?.[name] as SchemaObject | undefined;\n }\n\n /**\n * Extract all endpoints from the OpenAPI document\n */\n getAllEndpoints(): Array<{\n path: string;\n method: string;\n operationId?: string;\n summary?: string;\n description?: string;\n }> {\n const endpoints: ReturnType<typeof this.getAllEndpoints> = [];\n\n for (const [path, pathItem] of Object.entries(this.document.paths || {})) {\n if (!pathItem) continue;\n\n const methods = ['get', 'post', 'put', 'patch', 'delete', 'options', 'head'] as const;\n\n for (const method of methods) {\n const operation = pathItem[method] as\n | OpenAPIV3.OperationObject\n | OpenAPIV3_1.OperationObject\n | undefined;\n\n if (operation) {\n endpoints.push({\n path,\n method,\n ...(operation.operationId !== undefined && { operationId: operation.operationId }),\n ...(operation.summary !== undefined && { summary: operation.summary }),\n ...(operation.description !== undefined && { description: operation.description }),\n });\n }\n }\n }\n\n return endpoints;\n }\n}\n","import type { OpenAPIV3, OpenAPIV3_1 } from 'openapi-types';\nimport { z } from 'zod';\nimport isSafe from 'safe-regex';\n\ntype SchemaObject = OpenAPIV3.SchemaObject | OpenAPIV3_1.SchemaObject;\n\nexport interface ZodGenerationOptions {\n /** Whether to make all fields optional by default */\n optionalByDefault?: boolean;\n\n /** Custom name for the generated schema */\n schemaName?: string;\n\n /** If true, emit only the schema + type — no import statements */\n bare?: boolean;\n}\n\n/**\n * Generates Zod schemas from OpenAPI schema objects\n *\n * This is the CORE of the \"mathematically proven code\" value proposition.\n * OpenAPI schemas → Zod validation = runtime safety guarantees.\n */\nexport class ZodSchemaGenerator {\n /**\n * Generate a Zod schema from an OpenAPI schema object\n *\n * @param schema - OpenAPI schema object\n * @param options - Generation options\n * @returns Zod schema code as string\n */\n generate(schema: SchemaObject, options: ZodGenerationOptions = {}): string {\n const { schemaName = 'GeneratedSchema', bare = false } = options;\n\n const zodSchemaCode = this.schemaToZod(schema);\n\n const body = `export const ${schemaName} = ${zodSchemaCode};\n\nexport type ${schemaName}Type = z.infer<typeof ${schemaName}>;\n`;\n\n if (bare) {\n return body;\n }\n\n return `import { z } from 'zod';\nimport isSafe from 'safe-regex';\n\n${body}`;\n }\n\n /**\n * Convert OpenAPI schema to Zod schema code\n */\n private schemaToZod(schema: SchemaObject, depth = 0): string {\n // Gracefully handle unresolved $ref encountered during recursion\n if ('$ref' in schema && (schema as any).$ref) {\n const refPath = (schema as any).$ref;\n console.warn(\n `\\u26a0\\ufe0f Unresolved $ref encountered: ${refPath} \\u2014 generating z.unknown()`\n );\n return `z.unknown() /* unresolved $ref: ${refPath} */`;\n }\n\n // Handle nullable (OpenAPI 3.0 nullable, OpenAPI 3.1 type array with null)\n const isNullable = 'nullable' in schema && schema.nullable === true;\n\n // Base schema generation\n let baseSchema = this.schemaTypeToZod(schema);\n\n // Add description if present\n if (schema.description) {\n const escapedDesc = schema.description.replace(/'/g, \"\\\\'\");\n baseSchema += `.describe('${escapedDesc}')`;\n }\n\n // Handle nullable\n if (isNullable) {\n baseSchema += '.nullable()';\n }\n\n // Handle optional (not in required array)\n // Note: This is handled at the object level, not here\n\n return baseSchema;\n }\n\n /**\n * Map OpenAPI type to Zod schema\n */\n private schemaTypeToZod(schema: SchemaObject): string {\n // Handle $ref (shouldn't happen after dereferencing, but just in case)\n if ('$ref' in schema) {\n throw new Error('$ref found in schema - ensure spec is dereferenced');\n }\n\n // Handle allOf, anyOf, oneOf\n if ('allOf' in schema && schema.allOf) {\n return this.handleComposition(schema.allOf, 'intersection');\n }\n if ('anyOf' in schema && schema.anyOf) {\n return this.handleComposition(schema.anyOf, 'union');\n }\n if ('oneOf' in schema && schema.oneOf) {\n return this.handleComposition(schema.oneOf, 'discriminatedUnion');\n }\n\n // Handle type-based schemas\n const type = schema.type;\n\n // Infer type: object when properties are present (common in real-world specs)\n // OpenAPI spec says: if \"properties\" is defined, the schema describes an object\n if (!type && schema.properties) {\n return this.objectToZod(schema as OpenAPIV3.NonArraySchemaObject);\n }\n\n // Also infer object if additionalProperties is set but no type\n if (!type && schema.additionalProperties !== undefined) {\n return this.objectToZod(schema as OpenAPIV3.NonArraySchemaObject);\n }\n\n switch (type) {\n case 'string':\n return this.stringToZod(schema);\n case 'number':\n case 'integer':\n return this.numberToZod(schema);\n case 'boolean':\n return 'z.boolean()';\n case 'array':\n return this.arrayToZod(schema as OpenAPIV3.ArraySchemaObject);\n case 'object':\n return this.objectToZod(schema as OpenAPIV3.NonArraySchemaObject);\n case 'null':\n return 'z.null()';\n default:\n // No type specified - allow any\n return 'z.unknown()';\n }\n }\n\n /**\n * Handle string schemas with formats and enums\n */\n private stringToZod(schema: SchemaObject): string {\n // Handle enum\n if (schema.enum && schema.enum.length > 0) {\n const values = schema.enum.map((v: unknown) => `'${v}'`).join(', ');\n return `z.enum([${values}])`;\n }\n\n let base = 'z.string()';\n\n // Handle string formats\n if ('format' in schema && schema.format) {\n switch (schema.format) {\n case 'email':\n base += '.email()';\n break;\n case 'uri':\n case 'url':\n base += '.url()';\n break;\n case 'uuid':\n base += '.uuid()';\n break;\n case 'date-time':\n base += '.datetime()';\n break;\n case 'date':\n base += '.date()';\n break;\n // Add more formats as needed\n }\n }\n\n // Handle string constraints\n if ('minLength' in schema && typeof schema.minLength === 'number') {\n base += `.min(${schema.minLength})`;\n }\n if ('maxLength' in schema && typeof schema.maxLength === 'number') {\n base += `.max(${schema.maxLength})`;\n }\n if ('pattern' in schema && schema.pattern) {\n // ✅ SECURITY FIX: Validate regex safety to prevent ReDoS\n if (!isSafe(schema.pattern)) {\n console.warn(`⚠️ Unsafe regex pattern detected: ${schema.pattern}`);\n console.warn(' Skipping pattern validation to prevent ReDoS');\n // Skip the unsafe pattern - better safe than DoS\n } else {\n const escapedPattern = schema.pattern.replace(/\\\\/g, '\\\\\\\\');\n base += `.regex(/${escapedPattern}/)`;\n }\n }\n\n return base;\n }\n\n /**\n * Handle number/integer schemas\n */\n private numberToZod(schema: SchemaObject): string {\n let base = schema.type === 'integer' ? 'z.number().int()' : 'z.number()';\n\n if ('minimum' in schema && typeof schema.minimum === 'number') {\n base += `.min(${schema.minimum})`;\n }\n if ('maximum' in schema && typeof schema.maximum === 'number') {\n base += `.max(${schema.maximum})`;\n }\n if ('exclusiveMinimum' in schema && typeof schema.exclusiveMinimum === 'number') {\n base += `.gt(${schema.exclusiveMinimum})`;\n }\n if ('exclusiveMaximum' in schema && typeof schema.exclusiveMaximum === 'number') {\n base += `.lt(${schema.exclusiveMaximum})`;\n }\n\n return base;\n }\n\n /**\n * Handle array schemas\n */\n private arrayToZod(schema: OpenAPIV3.ArraySchemaObject): string {\n if (!schema.items) {\n return 'z.array(z.unknown())';\n }\n\n const itemSchema = this.schemaToZod(schema.items as SchemaObject);\n let base = `z.array(${itemSchema})`;\n\n if ('minItems' in schema && typeof schema.minItems === 'number') {\n base += `.min(${schema.minItems})`;\n }\n if ('maxItems' in schema && typeof schema.maxItems === 'number') {\n base += `.max(${schema.maxItems})`;\n }\n\n return base;\n }\n\n /**\n * Handle object schemas\n */\n private objectToZod(schema: OpenAPIV3.NonArraySchemaObject): string {\n if (!schema.properties || Object.keys(schema.properties).length === 0) {\n // Empty object or record type\n if (schema.additionalProperties) {\n const valueSchema =\n typeof schema.additionalProperties === 'object'\n ? this.schemaToZod(schema.additionalProperties as SchemaObject)\n : 'z.unknown()';\n return `z.record(${valueSchema})`;\n }\n return 'z.object({})';\n }\n\n const properties = schema.properties;\n const required = schema.required || [];\n\n const fields = Object.entries(properties)\n .map(([key, propSchema]) => {\n const isRequired = required.includes(key);\n let fieldSchema = this.schemaToZod(propSchema as SchemaObject);\n\n if (!isRequired) {\n fieldSchema += '.optional()';\n }\n\n // Escape key if needed (e.g., if it has special characters)\n const safeKey = /^[a-zA-Z_][a-zA-Z0-9_]*$/.test(key) ? key : `'${key}'`;\n\n return ` ${safeKey}: ${fieldSchema}`;\n })\n .join(',\\n');\n\n let result = `z.object({\\n${fields}\\n})`;\n\n // Handle additional properties\n if (schema.additionalProperties === false) {\n result += '.strict()';\n } else if (schema.additionalProperties && typeof schema.additionalProperties === 'object') {\n const valueSchema = this.schemaToZod(schema.additionalProperties as SchemaObject);\n result += `.catchall(${valueSchema})`;\n }\n\n return result;\n }\n\n /**\n * Handle allOf, anyOf, oneOf composition\n */\n private handleComposition(\n schemas: Array<SchemaObject | OpenAPIV3.ReferenceObject>,\n type: 'intersection' | 'union' | 'discriminatedUnion'\n ): string {\n const zodSchemas = schemas\n .filter((s): s is SchemaObject => !('$ref' in s))\n .map((s) => this.schemaToZod(s));\n\n if (zodSchemas.length === 0) {\n return 'z.unknown()';\n }\n\n switch (type) {\n case 'intersection':\n // allOf - all schemas must match\n return zodSchemas.reduce((acc, curr) => `${acc}.and(${curr})`);\n case 'union':\n // anyOf - at least one schema must match\n return `z.union([${zodSchemas.join(', ')}])`;\n case 'discriminatedUnion':\n // oneOf - exactly one schema must match\n // For now, treat as union (full discriminated union support is complex)\n return `z.union([${zodSchemas.join(', ')}])`;\n default:\n return 'z.unknown()';\n }\n }\n}\n","import { printNode, zodToTs, createAuxiliaryTypeStore } from 'zod-to-ts';\nimport { z } from 'zod';\n\nexport interface TypeGenerationOptions {\n /** Name for the generated type */\n typeName?: string;\n\n /** Whether to include JSDoc comments */\n includeJsDoc?: boolean;\n}\n\n/**\n * Generates TypeScript types from Zod schemas\n *\n * Converts runtime-validatable Zod schemas into compile-time TypeScript types.\n */\nexport class TypeGenerator {\n /**\n * Generate TypeScript type definition from a Zod schema\n *\n * @param zodSchema - Zod schema object\n * @param options - Generation options\n * @returns TypeScript type definition as string\n *\n * @example\n * ```typescript\n * const schema = z.object({ name: z.string(), age: z.number() });\n * const generator = new TypeGenerator();\n * const typeCode = generator.generate(schema, { typeName: 'User' });\n * // export type User = { name: string; age: number; };\n * ```\n */\n generate(zodSchema: z.ZodTypeAny, options: TypeGenerationOptions = {}): string {\n const { typeName = 'GeneratedType', includeJsDoc = true } = options;\n\n try {\n // Create auxiliary type store for recursive types (required in zod-to-ts v2+)\n const auxiliaryTypeStore = createAuxiliaryTypeStore();\n\n // Use zod-to-ts to convert Zod schema to TypeScript AST\n const { node } = zodToTs(zodSchema, { auxiliaryTypeStore });\n\n // Convert AST to TypeScript code\n const typeCode = printNode(node);\n\n // Build the complete type definition\n let result = '';\n\n if (includeJsDoc && zodSchema.description) {\n result += `/**\\n * ${zodSchema.description}\\n */\\n`;\n }\n\n result += `export type ${typeName} = ${typeCode};\\n`;\n\n return result;\n } catch (error) {\n throw new Error(\n `Failed to generate TypeScript type for ${typeName}: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n }\n\n /**\n * Generate type from Zod schema code string\n *\n * This is used when we have the schema as code (from ZodSchemaGenerator)\n * rather than as a runtime Zod object.\n *\n * @param zodSchemaCode - Zod schema as TypeScript code string\n * @param typeName - Name for the generated type\n * @returns TypeScript type definition\n */\n generateFromCode(zodSchemaCode: string, typeName: string): string {\n // For code-based generation, we rely on z.infer<>\n // The ZodSchemaGenerator already includes this\n return `export type ${typeName} = z.infer<typeof ${typeName}Schema>;\\n`;\n }\n\n /**\n * Generate multiple types from a map of Zod schemas\n *\n * @param schemas - Map of schema names to Zod schemas\n * @returns Object with type definitions for each schema\n */\n generateMultiple(\n schemas: Record<string, z.ZodTypeAny>,\n options: Omit<TypeGenerationOptions, 'typeName'> = {}\n ): Record<string, string> {\n const results: Record<string, string> = {};\n\n for (const [name, schema] of Object.entries(schemas)) {\n results[name] = this.generate(schema, { ...options, typeName: name });\n }\n\n return results;\n }\n\n /**\n * Combine multiple type definitions into a single TypeScript module\n *\n * @param types - Map of type names to type code\n * @param imports - Additional imports to include\n * @returns Complete TypeScript module code\n */\n createModule(types: Record<string, string>, imports: string[] = []): string {\n let module = '';\n\n // Add imports\n if (imports.length > 0) {\n module += imports.join('\\n') + '\\n\\n';\n }\n\n // Add type definitions\n module += Object.values(types).join('\\n');\n\n return module;\n }\n}\n","import type { OpenAPIDocument } from '../types';\nimport { SchemaResolver } from '../parser/SchemaResolver';\n\nexport interface CollectionConfig {\n /** API endpoint path */\n endpoint: string;\n\n /** Field to use as slug/ID */\n slugField: string;\n\n /** HTTP method (default: 'get') */\n method?: string;\n\n /** Collection name (defaults to sanitized endpoint) */\n name?: string;\n}\n\nexport interface ProviderGenerationOptions {\n /** Name for the provider class */\n providerName?: string;\n\n /** Base URL for the API */\n baseUrl?: string;\n\n /** Auth configuration */\n auth?: {\n type: 'bearer' | 'apiKey';\n headerName?: string;\n };\n\n /** If true, emit only the class code without import statements */\n bare?: boolean;\n}\n\n/**\n * Generates CollectionProvider implementations from OpenAPI specs\n *\n * This is the bridge between OpenAPI APIs and Stackwright's content system.\n */\nexport class CollectionProviderGenerator {\n constructor(private document: OpenAPIDocument) {}\n\n /**\n * Generate a CollectionProvider implementation for a specific endpoint\n *\n * @param config - Collection configuration\n * @param options - Generation options\n * @returns TypeScript code for the provider\n */\n generate(config: CollectionConfig, options: ProviderGenerationOptions = {}): string {\n const {\n providerName = this.generateProviderName(config),\n baseUrl = this.getBaseUrl(),\n auth,\n bare = false,\n } = options;\n\n const { endpoint, slugField, method = 'get', name } = config;\n const collectionName = name || this.sanitizePath(endpoint);\n\n const resolver = new SchemaResolver(this.document);\n const schema = resolver.getResponseSchema(endpoint, method);\n\n if (!schema) {\n throw new Error(`No response schema found for ${method.toUpperCase()} ${endpoint}`);\n }\n\n // Determine if response is an array or object\n const isArray = schema.type === 'array';\n\n const schemaName = `${this.capitalize(collectionName)}Schema`;\n\n // Build params object, conditionally including auth\n const params: {\n providerName: string;\n collectionName: string;\n endpoint: string;\n slugField: string;\n method: string;\n baseUrl: string;\n schemaName: string;\n isArray: boolean;\n bare: boolean;\n auth?: { type: string; headerName?: string };\n } = {\n providerName,\n collectionName,\n endpoint,\n slugField,\n method,\n baseUrl,\n schemaName,\n isArray,\n bare,\n };\n\n // Only include auth if it's defined (exactOptionalPropertyTypes)\n if (auth !== undefined) {\n params.auth = auth;\n }\n\n return this.generateProviderCode(params);\n }\n\n /**\n * Generate the complete provider code\n */\n private generateProviderCode(params: {\n providerName: string;\n collectionName: string;\n endpoint: string;\n slugField: string;\n method: string;\n baseUrl: string;\n auth?: { type: string; headerName?: string };\n schemaName: string;\n isArray: boolean;\n bare: boolean;\n }): string {\n const {\n providerName,\n collectionName,\n endpoint,\n slugField,\n method,\n baseUrl,\n auth,\n schemaName,\n isArray,\n bare,\n } = params;\n\n const authHeader = this.generateAuthHeader(auth);\n // Use the array schema for list endpoints\n const arraySchemaName = `${schemaName.replace(/Schema$/, '')}ArraySchema`;\n const validationSchema = isArray ? arraySchemaName : schemaName;\n\n const imports = bare\n ? ''\n : `import type { CollectionProvider, CollectionItem } from '@stackwright/collections';\nimport { ${isArray ? arraySchemaName : schemaName}} } from './schemas';\n\n`;\n\n return `${imports}/**\n * CollectionProvider for ${collectionName}\n *\n * Generated from OpenAPI endpoint: ${method.toUpperCase()} ${endpoint}\n */\nexport class ${providerName} implements CollectionProvider {\n private baseUrl: string;\n private authToken?: string;\n\n constructor(config?: { baseUrl?: string; authToken?: string }) {\n this.baseUrl = config?.baseUrl || '${baseUrl}';\n this.authToken = config?.authToken;\n }\n\n /**\n * Get collection name\n */\n getName(): string {\n return '${collectionName}';\n }\n\n /**\n * List all items in the collection\n */\n async list(options?: {\n limit?: number;\n offset?: number;\n filters?: Record<string, unknown>;\n }): Promise<CollectionItem[]> {\n const url = new URL(\\`\\${this.baseUrl}${endpoint}\\`);\n\n // Add pagination/filter params if supported\n if (options?.limit) {\n url.searchParams.set('limit', String(options.limit));\n }\n if (options?.offset) {\n url.searchParams.set('offset', String(options.offset));\n }\n\n const response = await fetch(url.toString(), {\n method: '${method.toUpperCase()}',\n headers: this.getHeaders(),\n });\n\n if (!response.ok) {\n throw new Error(\\`Failed to fetch ${collectionName}: \\${response.statusText}\\`);\n }\n\n const data = await response.json();\n \n // Validate response with Zod schema\n const validated = ${validationSchema}.parse(data);\n \n // Convert to CollectionItem format\n return ${isArray ? 'validated' : '[validated]'}.map((item: any) => this.toCollectionItem(item));\n }\n\n /**\n * Get a single item by slug\n */\n async get(slug: string): Promise<CollectionItem | null> {\n ${this.generateGetMethod(endpoint, slugField, isArray, collectionName, schemaName)}\n }\n\n /**\n * Convert API response to CollectionItem\n */\n private toCollectionItem(item: any): CollectionItem {\n return {\n slug: String(item.${slugField}),\n title: item.${this.guessTitle(slugField)},\n data: item,\n metadata: {\n source: '${collectionName}',\n _raw: item,\n },\n };\n }\n\n /**\n * Get request headers including auth\n */\n private getHeaders(): Record<string, string> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n };\n\n ${authHeader}\n\n return headers;\n }\n}\n`;\n }\n\n /**\n * Generate get method implementation\n */\n private generateGetMethod(\n endpoint: string,\n slugField: string,\n isArray: boolean,\n collectionName: string,\n schemaName: string\n ): string {\n if (endpoint.includes('{id}') || endpoint.includes(':id')) {\n // Detail endpoint exists\n const detailEndpoint = endpoint.replace('{id}', '${slug}').replace(':id', '${slug}');\n return `const url = \\`\\${this.baseUrl}${detailEndpoint}\\`;\n \n const response = await fetch(url, {\n method: 'GET',\n headers: this.getHeaders(),\n });\n\n if (!response.ok) {\n if (response.status === 404) {\n return null;\n }\n throw new Error(\\`Failed to fetch ${collectionName} item: \\${response.statusText}\\`);\n }\n\n const data = await response.json();\n const validated = ${schemaName}.parse(data);\n \n return this.toCollectionItem(validated);`;\n } else {\n // No detail endpoint - list all and filter\n return `const items = await this.list();\n return items.find((item) => item.slug === slug) || null;`;\n }\n }\n\n /**\n * Generate auth header code\n */\n private generateAuthHeader(auth?: { type: string; headerName?: string }): string {\n if (!auth) {\n return '// No authentication configured';\n }\n\n if (auth.type === 'bearer') {\n return `if (this.authToken) {\n headers['Authorization'] = \\`Bearer \\${this.authToken}\\`;\n }`;\n }\n\n if (auth.type === 'apiKey') {\n const headerName = auth.headerName || 'X-API-Key';\n return `if (this.authToken) {\n headers['${headerName}'] = this.authToken;\n }`;\n }\n\n return '// Unknown auth type';\n }\n\n /**\n * Get base URL from OpenAPI spec\n */\n private getBaseUrl(): string {\n if ('servers' in this.document && this.document.servers && this.document.servers.length > 0) {\n const firstServer = this.document.servers[0];\n if (firstServer !== undefined) {\n return firstServer.url;\n }\n }\n return 'http://localhost:3000';\n }\n\n /**\n * Generate provider class name from config\n */\n private generateProviderName(config: CollectionConfig): string {\n const name = config.name || this.sanitizePath(config.endpoint);\n return `${this.capitalize(name)}Provider`;\n }\n\n /**\n * Sanitize path to valid identifier\n */\n private sanitizePath(path: string): string {\n return path.replace(/^\\//, '').replace(/\\//g, '-').replace(/[{}:]/g, '').replace(/-+/g, '-');\n }\n\n /**\n * Capitalize string\n */\n private capitalize(str: string): string {\n return str\n .split('-')\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join('');\n }\n\n /**\n * Guess which field might be a good title\n */\n private guessTitle(slugField: string): string {\n // Common title field names\n const titleFields = ['title', 'name', 'label', 'displayName'];\n const firstField = titleFields[0];\n\n // Use slugField as fallback\n return firstField !== undefined ? firstField : `item.${slugField}`;\n }\n}\n","import type { OpenAPIV3, OpenAPIV3_1 } from 'openapi-types';\nimport type { OpenAPIDocument } from '../types';\nimport { SchemaResolver } from '../parser/SchemaResolver';\nimport isSafe from 'safe-regex';\n\ntype OperationObject = OpenAPIV3.OperationObject | OpenAPIV3_1.OperationObject;\ntype ParameterObject = OpenAPIV3.ParameterObject | OpenAPIV3_1.ParameterObject;\ntype SchemaObject = OpenAPIV3.SchemaObject | OpenAPIV3_1.SchemaObject;\ntype RequestBodyObject = OpenAPIV3.RequestBodyObject | OpenAPIV3_1.RequestBodyObject;\n\n/**\n * Mapping of operationId to schema names\n */\nexport interface SchemaMapping {\n [operationId: string]: {\n /** Schema name for request validation (null if no params) */\n requestSchema: string | null;\n /** Schema name for response validation */\n responseSchema: string;\n };\n}\n\n/**\n * Options for client generation\n */\nexport interface ClientGenerationOptions {\n /** Name of the client class */\n className?: string;\n\n /** Whether to include JSDoc comments (default: true) */\n includeJsDoc?: boolean;\n\n /** Base URL for the API */\n baseUrl?: string;\n\n /** Whether to validate responses with Zod (default: true) */\n validateResponses?: boolean;\n\n /** Use strict validation - throw on parse errors vs safe parse (default: false) */\n strictValidation?: boolean;\n\n /** Mapping of operationId to schema names for Zod validation */\n schemaMapping?: SchemaMapping;\n}\n\ninterface EndpointInfo {\n path: string;\n method: string;\n operationId?: string;\n summary?: string;\n description?: string;\n operation: OperationObject;\n}\n\n/**\n * ClientGenerator\n *\n * Generates fully typed API client functions from OpenAPI operations.\n * Each endpoint becomes a type-safe function with runtime Zod validation.\n *\n * **Refactored to use Zod schemas as single source of truth:**\n * - Types inferred from Zod schemas (no more manual type generation)\n * - Request validation before API calls\n * - Response validation after API calls\n * - Optional strict validation mode\n */\nexport class ClientGenerator {\n private resolver: SchemaResolver;\n private schemaMapping?: SchemaMapping;\n private requiredSchemas: Set<string>;\n private generatedRequestSchemas: Set<string>;\n\n constructor(\n private document: OpenAPIDocument,\n schemaMapping?: SchemaMapping\n ) {\n this.resolver = new SchemaResolver(document);\n if (schemaMapping !== undefined) {\n this.schemaMapping = schemaMapping;\n }\n this.requiredSchemas = new Set();\n this.generatedRequestSchemas = new Set();\n }\n\n /**\n * Generate typed API client code from OpenAPI document\n */\n generate(options: ClientGenerationOptions = {}): string {\n const {\n className = 'APIClient',\n includeJsDoc = true,\n baseUrl = this.getDefaultBaseUrl(),\n validateResponses = true,\n strictValidation = false,\n schemaMapping = this.schemaMapping,\n } = options;\n\n const endpoints = this.getAllEndpoints();\n\n if (endpoints.length === 0) {\n throw new Error('No endpoints found in OpenAPI document');\n }\n\n // Reset required schemas tracking\n this.requiredSchemas.clear();\n this.generatedRequestSchemas.clear();\n\n // Generate imports (including Zod and schema imports)\n let code = this.generateImports(!!schemaMapping, validateResponses);\n code += '\\n';\n\n // Generate request schemas (NEW - Zod schemas for validation)\n if (schemaMapping) {\n code += this.generateRequestSchemas(endpoints);\n code += '\\n';\n }\n\n // Generate types (using z.infer if schemaMapping provided)\n code += this.generateTypes(endpoints, schemaMapping);\n code += '\\n';\n\n // Generate error classes (including ValidationError)\n code += this.generateErrorClasses();\n code += '\\n';\n\n // Generate client class with validation\n code += this.generateClientClass(\n className,\n baseUrl,\n endpoints,\n includeJsDoc,\n validateResponses,\n strictValidation,\n schemaMapping\n );\n\n return code;\n }\n\n // ============================================================================\n // Import Generation\n // ============================================================================\n\n /**\n * Generate import statements including Zod and schemas\n */\n private generateImports(useSchemas: boolean, validateResponses: boolean): string {\n let code = `/**\n * Auto-generated API client from OpenAPI spec\n * \n * DO NOT EDIT - This file is auto-generated by @stackwright-pro/openapi\n * Regenerate by running: pnpm prebuild\n */\\n\\n`;\n\n if (useSchemas && validateResponses) {\n code += `import { z } from 'zod';\\n`;\n code += `import * as schemas from './schemas';\\n`;\n }\n\n return code;\n }\n\n /**\n * Track which schemas are used for imports\n */\n private addRequiredSchema(schemaName: string): void {\n this.requiredSchemas.add(schemaName);\n }\n\n // ============================================================================\n // Request Schema Generation (NEW - Zod Schemas)\n // ============================================================================\n\n /**\n * Generate Zod schemas for request parameters\n *\n * This generates schemas like:\n * export const ListEquipmentRequestSchema = z.object({\n * query: z.object({ ... }).optional(),\n * });\n */\n private generateRequestSchemas(endpoints: EndpointInfo[]): string {\n let code = '// ============================================================================\\n';\n code += '// Request Schemas (Zod Validation)\\n';\n code += '// ============================================================================\\n\\n';\n\n for (const endpoint of endpoints) {\n const operationId = endpoint.operationId || this.getMethodName(endpoint);\n const typeName = this.getOperationTypeName(endpoint);\n const schemaName = `${typeName}RequestSchema`;\n\n const schemaCode = this.generateRequestSchemaForEndpoint(endpoint);\n\n // Only generate if there are parameters\n if (schemaCode) {\n code += `export const ${schemaName} = ${schemaCode};\\n\\n`;\n this.generatedRequestSchemas.add(schemaName);\n }\n }\n\n return code;\n }\n\n /**\n * Generate request schema for a single endpoint\n */\n private generateRequestSchemaForEndpoint(endpoint: EndpointInfo): string | null {\n const { operation } = endpoint;\n const params = this.getOperationParameters(operation);\n const hasBody = this.hasRequestBody(operation);\n\n const pathParams = params.filter((p) => p.in === 'path');\n const queryParams = params.filter((p) => p.in === 'query');\n const headerParams = params.filter((p) => p.in === 'header');\n\n // If no parameters at all, return null\n if (\n pathParams.length === 0 &&\n queryParams.length === 0 &&\n headerParams.length === 0 &&\n !hasBody\n ) {\n return null;\n }\n\n const parts: string[] = [];\n\n // Path parameters\n if (pathParams.length > 0) {\n const pathSchema = this.generatePathParamsSchema(pathParams);\n parts.push(` path: ${pathSchema}`);\n }\n\n // Query parameters\n if (queryParams.length > 0) {\n const querySchema = this.generateQueryParamsSchema(queryParams);\n parts.push(` query: ${querySchema}`);\n }\n\n // Header parameters\n if (headerParams.length > 0) {\n const headerSchema = this.generateHeaderParamsSchema(headerParams);\n parts.push(` headers: ${headerSchema}`);\n }\n\n // Request body\n if (hasBody) {\n const bodySchema = this.generateRequestBodySchema(operation);\n const isRequired = this.isRequestBodyRequired(operation);\n parts.push(` body: ${bodySchema}${isRequired ? '' : '.optional()'}`);\n }\n\n return `z.object({\\n${parts.join(',\\n')}\\n})`;\n }\n\n /**\n * Generate Zod schema for path parameters\n */\n private generatePathParamsSchema(params: ParameterObject[]): string {\n const paramSchemas: string[] = [];\n\n for (const param of params) {\n const zodSchema = this.parameterSchemaToZod(param);\n const desc = param.description ? `.describe('${this.escapeString(param.description)}')` : '';\n paramSchemas.push(` ${param.name}: ${zodSchema}${desc}`);\n }\n\n return `z.object({\\n${paramSchemas.join(',\\n')}\\n })`;\n }\n\n /**\n * Generate Zod schema for query parameters\n */\n private generateQueryParamsSchema(params: ParameterObject[]): string {\n const paramSchemas: string[] = [];\n\n for (const param of params) {\n let zodSchema = this.parameterSchemaToZod(param);\n\n // Add description\n if (param.description) {\n zodSchema += `.describe('${this.escapeString(param.description)}')`;\n }\n\n // Query params are optional unless explicitly required\n if (!param.required) {\n zodSchema += '.optional()';\n }\n\n paramSchemas.push(` ${param.name}: ${zodSchema}`);\n }\n\n return `z.object({\\n${paramSchemas.join(',\\n')}\\n }).optional()`;\n }\n\n /**\n * Generate Zod schema for header parameters\n */\n private generateHeaderParamsSchema(params: ParameterObject[]): string {\n // Filter out common headers that are handled by the client\n const customParams = params.filter((p) => !this.isCommonHeader(p.name));\n\n if (customParams.length === 0) {\n return 'z.object({}).optional()';\n }\n\n const paramSchemas: string[] = [];\n\n for (const param of customParams) {\n let zodSchema = this.parameterSchemaToZod(param);\n\n if (param.description) {\n zodSchema += `.describe('${this.escapeString(param.description)}')`;\n }\n\n if (!param.required) {\n zodSchema += '.optional()';\n }\n\n paramSchemas.push(` '${param.name}': ${zodSchema}`);\n }\n\n return `z.object({\\n${paramSchemas.join(',\\n')}\\n }).optional()`;\n }\n\n /**\n * Generate Zod schema for request body\n */\n private generateRequestBodySchema(operation: OperationObject): string {\n const requestBody = operation.requestBody as RequestBodyObject | undefined;\n if (!requestBody) return 'z.unknown()';\n\n const content = requestBody.content?.['application/json'];\n if (!content?.schema) return 'z.unknown()';\n\n const schema = content.schema as SchemaObject;\n\n // Check if it's a $ref to component schema\n if ('$ref' in schema && schema.$ref) {\n const componentName = this.extractComponentName(schema.$ref as string);\n return `schemas.${componentName}Schema`;\n }\n\n // Inline schema - convert to Zod\n return this.schemaObjectToZod(schema);\n }\n\n /**\n * Convert parameter schema to Zod schema string\n */\n private parameterSchemaToZod(param: ParameterObject): string {\n const schema = param.schema as SchemaObject | undefined;\n if (!schema) return 'z.string()';\n\n return this.schemaObjectToZod(schema);\n }\n\n /**\n * Convert OpenAPI schema object to Zod schema string\n *\n * This is a simplified version for parameter schemas.\n * Reuses logic similar to ZodSchemaGenerator but outputs inline.\n */\n private schemaObjectToZod(schema: SchemaObject): string {\n // Handle arrays\n if (schema.type === 'array') {\n const items = schema.items as SchemaObject | undefined;\n const itemSchema = items ? this.schemaObjectToZod(items) : 'z.unknown()';\n let arraySchema = `z.array(${itemSchema})`;\n\n if ('minItems' in schema && typeof schema.minItems === 'number') {\n arraySchema += `.min(${schema.minItems})`;\n }\n if ('maxItems' in schema && typeof schema.maxItems === 'number') {\n arraySchema += `.max(${schema.maxItems})`;\n }\n\n return arraySchema;\n }\n\n // Handle objects\n if (schema.type === 'object') {\n if (!schema.properties) {\n return 'z.record(z.unknown())';\n }\n\n const props: string[] = [];\n const required = schema.required || [];\n\n for (const [key, propSchema] of Object.entries(schema.properties)) {\n const isRequired = required.includes(key);\n let propZod = this.schemaObjectToZod(propSchema as SchemaObject);\n\n if (!isRequired) {\n propZod += '.optional()';\n }\n\n props.push(`${key}: ${propZod}`);\n }\n\n return `z.object({ ${props.join(', ')} })`;\n }\n\n // Handle enums\n if (schema.enum && schema.enum.length > 0) {\n const values = schema.enum.map((v: unknown) => `'${v}'`).join(', ');\n return `z.enum([${values}])`;\n }\n\n // Handle type-based schemas\n switch (schema.type) {\n case 'string':\n return this.stringSchemaToZod(schema);\n case 'number':\n case 'integer':\n return this.numberSchemaToZod(schema);\n case 'boolean':\n return 'z.boolean()';\n case 'null':\n return 'z.null()';\n default:\n return 'z.unknown()';\n }\n }\n\n /**\n * Convert string schema to Zod\n */\n private stringSchemaToZod(schema: SchemaObject): string {\n let base = 'z.string()';\n\n // Handle formats\n if ('format' in schema && schema.format) {\n switch (schema.format) {\n case 'email':\n base += '.email()';\n break;\n case 'uri':\n case 'url':\n base += '.url()';\n break;\n case 'uuid':\n base += '.uuid()';\n break;\n case 'date-time':\n base += '.datetime()';\n break;\n case 'date':\n base += '.date()';\n break;\n }\n }\n\n // Handle constraints\n if ('minLength' in schema && typeof schema.minLength === 'number') {\n base += `.min(${schema.minLength})`;\n }\n if ('maxLength' in schema && typeof schema.maxLength === 'number') {\n base += `.max(${schema.maxLength})`;\n }\n if ('pattern' in schema && schema.pattern) {\n // ✅ SECURITY FIX: Validate regex safety to prevent ReDoS\n if (!isSafe(schema.pattern)) {\n console.warn(`⚠️ Unsafe regex pattern detected: ${schema.pattern}`);\n console.warn(' Skipping pattern validation to prevent ReDoS');\n // Skip the unsafe pattern - better safe than DoS\n } else {\n const escapedPattern = schema.pattern.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\");\n base += `.regex(/${escapedPattern}/)`;\n }\n }\n\n // Handle default\n if ('default' in schema && schema.default !== undefined) {\n const defaultValue =\n typeof schema.default === 'string' ? `'${schema.default}'` : schema.default;\n base += `.default(${defaultValue})`;\n }\n\n return base;\n }\n\n /**\n * Convert number schema to Zod\n */\n private numberSchemaToZod(schema: SchemaObject): string {\n let base = schema.type === 'integer' ? 'z.number().int()' : 'z.number()';\n\n if ('minimum' in schema && typeof schema.minimum === 'number') {\n base += `.min(${schema.minimum})`;\n }\n if ('maximum' in schema && typeof schema.maximum === 'number') {\n base += `.max(${schema.maximum})`;\n }\n if ('exclusiveMinimum' in schema && typeof schema.exclusiveMinimum === 'number') {\n base += `.gt(${schema.exclusiveMinimum})`;\n }\n if ('exclusiveMaximum' in schema && typeof schema.exclusiveMaximum === 'number') {\n base += `.lt(${schema.exclusiveMaximum})`;\n }\n\n // Handle default\n if ('default' in schema && schema.default !== undefined) {\n base += `.default(${schema.default})`;\n }\n\n return base;\n }\n\n /**\n * Check if header is a common header handled by fetch\n */\n private isCommonHeader(name: string): boolean {\n const commonHeaders = [\n 'authorization',\n 'content-type',\n 'accept',\n 'user-agent',\n 'content-length',\n ];\n return commonHeaders.includes(name.toLowerCase());\n }\n\n /**\n * Extract component name from $ref\n */\n private extractComponentName(ref: string): string {\n // #/components/schemas/Equipment → Equipment\n const parts = ref.split('/');\n const lastPart = parts[parts.length - 1];\n return lastPart ?? ref;\n }\n\n /**\n * Escape string for use in Zod .describe()\n */\n private escapeString(str: string): string {\n return str.replace(/'/g, \"\\\\'\").replace(/\\n/g, ' ');\n }\n\n /**\n * Get list of all required schema names\n */\n private getRequiredSchemas(): string[] {\n return Array.from(this.requiredSchemas).sort();\n }\n\n // ============================================================================\n // Type Generation (Zod Inference)\n // ============================================================================\n\n /**\n * Generate TypeScript types for request/response\n *\n * If schemaMapping is provided, use z.infer<> to get types from Zod schemas.\n * Otherwise, fall back to legacy manual type generation.\n */\n private generateTypes(endpoints: EndpointInfo[], schemaMapping?: SchemaMapping): string {\n let code = '// ============================================================================\\n';\n code += '// Request/Response Types\\n';\n code += '// ============================================================================\\n\\n';\n\n if (schemaMapping) {\n // NEW: Use Zod inference\n code += this.generateTypesFromZod(endpoints, schemaMapping);\n } else {\n // LEGACY: Manual type generation (backward compatible)\n code += this.generateTypesLegacy(endpoints);\n }\n\n return code;\n }\n\n /**\n * Generate types using Zod inference (NEW)\n */\n /**\n * Generate types using Zod inference (NEW)\n *\n * Request types infer from request schemas (defined in this file).\n * Response types infer from response schemas (imported from ./schemas).\n */\n private generateTypesFromZod(endpoints: EndpointInfo[], schemaMapping: SchemaMapping): string {\n let code = '';\n\n for (const endpoint of endpoints) {\n const operationId = endpoint.operationId || this.getMethodName(endpoint);\n const mapping = schemaMapping[operationId];\n\n if (!mapping) {\n // No schema mapping - skip or use legacy\n continue;\n }\n\n const typeName = this.getOperationTypeName(endpoint);\n\n // Request type - infer from request schema (defined locally in this file)\n // Build the schema name using the same logic as generateRequestSchemas\n const requestSchemaName = mapping.requestSchema || typeName + 'RequestSchema';\n // Always generate request type if the schema was generated (i.e., endpoint has parameters)\n if (this.generatedRequestSchemas.has(requestSchemaName)) {\n this.addRequiredSchema(requestSchemaName);\n code +=\n 'export type ' + typeName + 'Request = z.infer<typeof ' + requestSchemaName + '>;\\n';\n }\n\n // Response type - infer from response schema (imported from ./schemas)\n this.addRequiredSchema(mapping.responseSchema);\n code += `export type ${typeName}Response = z.infer<typeof schemas.${mapping.responseSchema}>;\\n\\n`;\n }\n\n return code;\n }\n\n /**\n * Generate types using manual conversion (LEGACY - backward compatible)\n */\n private generateTypesLegacy(endpoints: EndpointInfo[]): string {\n let code = '';\n\n for (const endpoint of endpoints) {\n const typeName = this.getOperationTypeName(endpoint);\n\n // Generate request type\n code += this.generateRequestTypeLegacy(endpoint, typeName);\n\n // Generate response type\n code += this.generateResponseTypeLegacy(endpoint, typeName);\n }\n\n return code;\n }\n\n /**\n * Generate request type for an operation (LEGACY)\n */\n private generateRequestTypeLegacy(endpoint: EndpointInfo, typeName: string): string {\n const { operation } = endpoint;\n const params = this.getOperationParameters(operation);\n const hasBody = this.hasRequestBody(operation);\n\n let code = '';\n\n // Check if we need a request type at all\n const pathParams = params.filter((p) => p.in === 'path');\n const queryParams = params.filter((p) => p.in === 'query');\n const headerParams = params.filter((p) => p.in === 'header');\n\n if (\n pathParams.length === 0 &&\n queryParams.length === 0 &&\n headerParams.length === 0 &&\n !hasBody\n ) {\n // No request parameters needed\n return code;\n }\n\n code += `export interface ${typeName}Request {\\n`;\n\n // Path parameters\n if (pathParams.length > 0) {\n code += ' /** Path parameters */\\n';\n code += ' path: {\\n';\n for (const param of pathParams) {\n const required = param.required ? '' : '?';\n const type = this.getTypeFromSchemaLegacy(param.schema as SchemaObject);\n const desc = param.description ? ` /** ${param.description} */\\n` : '';\n code += desc;\n code += ` ${param.name}${required}: ${type};\\n`;\n }\n code += ' };\\n';\n }\n\n // Query parameters\n if (queryParams.length > 0) {\n code += ' /** Query parameters */\\n';\n code += ' query?: {\\n';\n for (const param of queryParams) {\n const required = param.required ? '' : '?';\n const type = this.getTypeFromSchemaLegacy(param.schema as SchemaObject);\n const desc = param.description ? ` /** ${param.description} */\\n` : '';\n code += desc;\n code += ` ${param.name}${required}: ${type};\\n`;\n }\n code += ' };\\n';\n }\n\n // Header parameters\n if (headerParams.length > 0) {\n code += ' /** Custom headers */\\n';\n code += ' headers?: {\\n';\n for (const param of headerParams) {\n const required = param.required ? '' : '?';\n const type = this.getTypeFromSchemaLegacy(param.schema as SchemaObject);\n const desc = param.description ? ` /** ${param.description} */\\n` : '';\n code += desc;\n code += ` ${param.name}${required}: ${type};\\n`;\n }\n code += ' };\\n';\n }\n\n // Request body\n if (hasBody) {\n const bodyType = this.getRequestBodyTypeLegacy(operation);\n code += ' /** Request body */\\n';\n code += ` body${this.isRequestBodyRequired(operation) ? '' : '?'}: ${bodyType};\\n`;\n }\n\n code += '}\\n\\n';\n\n return code;\n }\n\n /**\n * Generate response type for an operation (LEGACY)\n */\n private generateResponseTypeLegacy(endpoint: EndpointInfo, typeName: string): string {\n const schema = this.resolver.getResponseSchema(endpoint.path, endpoint.method, '200');\n\n if (!schema) {\n return `export type ${typeName}Response = unknown;\\n\\n`;\n }\n\n const type = this.getTypeFromSchemaLegacy(schema);\n return `export type ${typeName}Response = ${type};\\n\\n`;\n }\n\n /**\n * Get request body type (LEGACY)\n */\n private getRequestBodyTypeLegacy(operation: OperationObject): string {\n const requestBody = operation.requestBody as RequestBodyObject | undefined;\n if (!requestBody) return 'unknown';\n\n const content = requestBody.content?.['application/json'];\n if (!content?.schema) return 'unknown';\n\n return this.getTypeFromSchemaLegacy(content.schema as SchemaObject);\n }\n\n /**\n * Convert OpenAPI schema to TypeScript type (LEGACY)\n *\n * NOTE: This method is kept for backward compatibility but should be\n * replaced with Zod inference in new code.\n */\n private getTypeFromSchemaLegacy(schema: SchemaObject | undefined): string {\n if (!schema) return 'unknown';\n\n // Handle arrays\n if (schema.type === 'array') {\n const itemType = this.getTypeFromSchemaLegacy(schema.items as SchemaObject);\n return `${itemType}[]`;\n }\n\n // Handle objects\n if (schema.type === 'object') {\n if (!schema.properties) return 'Record<string, unknown>';\n\n const props: string[] = [];\n const required = schema.required || [];\n\n for (const [key, propSchema] of Object.entries(schema.properties)) {\n const isRequired = required.includes(key);\n const propType = this.getTypeFromSchemaLegacy(propSchema as SchemaObject);\n props.push(`${key}${isRequired ? '' : '?'}: ${propType}`);\n }\n\n return `{ ${props.join('; ')} }`;\n }\n\n // Handle enums\n if (schema.enum) {\n return schema.enum.map((v) => `'${v}'`).join(' | ');\n }\n\n // Handle primitives\n switch (schema.type) {\n case 'string':\n return 'string';\n case 'number':\n case 'integer':\n return 'number';\n case 'boolean':\n return 'boolean';\n case 'null':\n return 'null';\n default:\n return 'unknown';\n }\n }\n\n // ============================================================================\n // Error Class Generation\n // ============================================================================\n\n /**\n * Generate error classes for API errors and validation errors\n */\n /**\n * Generate error classes (APIError and ValidationError)\n */\n private generateErrorClasses(): string {\n let code = '// ============================================================================\\n';\n code += '// Error Handling\\n';\n code += '// ============================================================================\\n\\n';\n\n // APIError class\n code += '/**\\n';\n code += ' * HTTP API Error\\n';\n code += ' * \\n';\n code += ' * Thrown when an HTTP request fails (4xx, 5xx status codes)\\n';\n code += ' */\\n';\n code += 'export class APIError extends Error {\\n';\n code += ' constructor(\\n';\n code += ' message: string,\\n';\n code += ' public readonly status: number,\\n';\n code += ' public readonly response?: unknown\\n';\n code += ' ) {\\n';\n code += ' super(message);\\n';\n code += \" this.name = 'APIError';\\n\";\n code += ' }\\n';\n code += '}\\n\\n';\n\n // ValidationError class\n code += '/**\\n';\n code += ' * Validation Error\\n';\n code += ' * \\n';\n code += ' * Thrown when Zod schema validation fails for request or response data.\\n';\n code += ' * Contains detailed information about what failed validation.\\n';\n code += ' */\\n';\n code += 'export class ValidationError extends Error {\\n';\n code += ' constructor(\\n';\n code += ' message: string,\\n';\n code += ' public readonly issues: z.ZodIssue[]\\n';\n code += ' ) {\\n';\n code += ' super(message);\\n';\n code += \" this.name = 'ValidationError';\\n\";\n code += ' }\\n\\n';\n\n // getFormattedErrors method\n code += ' /**\\n';\n code += ' * Get formatted error messages for debugging\\n';\n code += ' * \\n';\n code += ' * @returns Array of human-readable error messages\\n';\n code += ' * \\n';\n code += ' * @example\\n';\n code += ' * ```typescript\\n';\n code += ' * try {\\n';\n code += \" * await client.createEquipment({ body: { invalid: 'data' } });\\n\";\n code += ' * } catch (error) {\\n';\n code += ' * if (error instanceof ValidationError) {\\n';\n code += ' * console.error(error.getFormattedErrors());\\n';\n code += \" * // Output: ['body.name: Required', 'body.type: Required']\\n\";\n code += ' * }\\n';\n code += ' * }\\n';\n code += ' * ```\\n';\n code += ' */\\n';\n code += ' getFormattedErrors(): string[] {\\n';\n code += ' return this.issues.map(issue => {\\n';\n code += \" const path = issue.path.length > 0 ? issue.path.join('.') : 'root';\\n\";\n code += ' return `${path}: ${issue.message}`;\\n';\n code += ' });\\n';\n code += ' }\\n\\n';\n\n // getDetailedMessage method\n code += ' /**\\n';\n code += ' * Get a single formatted error message with all issues\\n';\n code += ' * \\n';\n code += ' * @returns Multi-line error message\\n';\n code += ' */\\n';\n code += ' getDetailedMessage(): string {\\n';\n code += ' const errors = this.getFormattedErrors();\\n';\n code += \" return `${this.message}\\\\n - ${errors.join('\\\\n - ')}`;\\n\";\n code += ' }\\n\\n';\n\n // toJSON method\n code += ' /**\\n';\n code += ' * Convert to JSON for logging/serialization\\n';\n code += ' * \\n';\n code += ' * @returns Plain object representation\\n';\n code += ' */\\n';\n code += ' toJSON() {\\n';\n code += ' return {\\n';\n code += ' name: this.name,\\n';\n code += ' message: this.message,\\n';\n code += ' issues: this.issues.map(issue => ({\\n';\n code += ' path: issue.path,\\n';\n code += ' message: issue.message,\\n';\n code += ' code: issue.code,\\n';\n code += ' })),\\n';\n code += ' };\\n';\n code += ' }\\n';\n code += '}\\n';\n\n return code;\n }\n // ============================================================================\n // Client Class Generation\n // ============================================================================\n\n /**\n * Generate the main client class\n */\n private generateClientClass(\n className: string,\n baseUrl: string,\n endpoints: EndpointInfo[],\n includeJsDoc: boolean,\n validateResponses: boolean,\n strictValidation: boolean,\n schemaMapping?: SchemaMapping\n ): string {\n let code = '// ============================================================================\\n';\n code += '// API Client\\n';\n code += '// ============================================================================\\n\\n';\n\n if (includeJsDoc) {\n code += `/**\\n * ${this.getAPITitle()}\\n`;\n if (this.getAPIDescription()) {\n code += ` * \\n * ${this.getAPIDescription()}\\n`;\n }\n if (validateResponses && schemaMapping) {\n code += ` * \\n * This client includes runtime validation using Zod schemas.\\n`;\n }\n code += ` */\\n`;\n }\n\n code += `export class ${className} {\\n`;\n code += ` private baseUrl: string;\\n`;\n code += ` private headers: Record<string, string>;\\n`;\n\n if (validateResponses && schemaMapping) {\n code += ` private validateResponses: boolean;\\n`;\n code += ` private strictValidation: boolean;\\n`;\n }\n\n code += `\\n`;\n\n // Constructor\n code += this.generateConstructor(baseUrl, validateResponses, strictValidation, schemaMapping);\n\n // Generate method for each endpoint\n for (const endpoint of endpoints) {\n if (schemaMapping) {\n code += this.generateMethodWithValidation(endpoint, includeJsDoc, schemaMapping);\n } else {\n code += this.generateMethodLegacy(endpoint, includeJsDoc);\n }\n }\n\n // Helper methods\n code += this.generateRequestHelper(validateResponses, strictValidation, !!schemaMapping);\n\n code += '}\\n';\n\n return code;\n }\n\n /**\n * Generate constructor\n */\n private generateConstructor(\n baseUrl: string,\n validateResponses: boolean,\n strictValidation: boolean,\n schemaMapping?: SchemaMapping\n ): string {\n let code = ` constructor(config?: {\\n`;\n code += ` baseUrl?: string;\\n`;\n code += ` headers?: Record<string, string>;\\n`;\n\n if (validateResponses && schemaMapping) {\n code += ` validateResponses?: boolean;\\n`;\n code += ` strictValidation?: boolean;\\n`;\n }\n\n code += ` }) {\\n`;\n code += ` this.baseUrl = config?.baseUrl || '${baseUrl}';\\n`;\n code += ` this.headers = config?.headers || {};\\n`;\n\n if (validateResponses && schemaMapping) {\n code += ` this.validateResponses = config?.validateResponses ?? ${validateResponses};\\n`;\n code += ` this.strictValidation = config?.strictValidation ?? ${strictValidation};\\n`;\n }\n\n code += ` }\\n\\n`;\n\n return code;\n }\n\n /**\n * Generate a method for an endpoint with Zod validation (NEW)\n */\n /**\n * Generate a method for an endpoint with Zod validation (NEW)\n */\n private generateMethodWithValidation(\n endpoint: EndpointInfo,\n includeJsDoc: boolean,\n schemaMapping: SchemaMapping\n ): string {\n const { operation, path, method } = endpoint;\n const methodName = this.getMethodName(endpoint);\n const typeName = this.getOperationTypeName(endpoint);\n const operationId = endpoint.operationId || methodName;\n\n const mapping = schemaMapping[operationId];\n if (!mapping) {\n // No schema mapping for this endpoint - fall back to legacy\n return this.generateMethodLegacy(endpoint, includeJsDoc);\n }\n\n const params = this.getOperationParameters(operation);\n const hasBody = this.hasRequestBody(operation);\n const pathParams = params.filter((p) => p.in === 'path');\n const queryParams = params.filter((p) => p.in === 'query');\n const headerParams = params.filter((p) => p.in === 'header');\n const hasAnyParams =\n pathParams.length > 0 || queryParams.length > 0 || headerParams.length > 0 || hasBody;\n\n let code = '';\n\n // JSDoc comment\n if (includeJsDoc) {\n code += ' /**\\n';\n if (operation.summary) {\n code += ` * ${operation.summary}\\n`;\n }\n if (operation.description) {\n code += ` * \\n * ${operation.description.split('\\n').join('\\n * ')}\\n`;\n }\n if (hasAnyParams) {\n code += ` * \\n * @param request - Request parameters\\n`;\n }\n code += ` * @returns Promise with the response data\\n`;\n code += ` * @throws {APIError} When the request fails\\n`;\n code += ` * @throws {ValidationError} When validation fails (if enabled)\\n`;\n code += ' */\\n';\n }\n\n // Method signature - request param defaults to empty object if optional\n let requestParam = '';\n if (hasAnyParams) {\n // If only query params (all optional), make request optional with default\n const onlyOptionalParams =\n pathParams.length === 0 && !hasBody && queryParams.every((p) => !p.required);\n requestParam = onlyOptionalParams\n ? `request: ${typeName}Request = {}`\n : `request: ${typeName}Request`;\n }\n\n code += ` async ${methodName}(${requestParam}): Promise<${typeName}Response> {\\n`;\n\n // Request validation (optional)\n if (mapping.requestSchema && hasAnyParams) {\n code += ` // Validate request parameters\\n`;\n code += ` if (this.validateResponses) {\\n`;\n code += ` ${mapping.requestSchema}.parse(request);\\n`;\n code += ` }\\n\\n`;\n }\n\n // Build URL with path parameters\n if (pathParams.length > 0) {\n code += ` // Build URL with path parameters\\n`;\n code += ` let url = this.baseUrl + '${path}'\\n`;\n for (const param of pathParams) {\n code += ` .replace('{${param.name}}', encodeURIComponent(String(request.path.${param.name})))\\n`;\n }\n code += `;\\n\\n`;\n } else {\n code += ` const url = this.baseUrl + '${path}';\\n\\n`;\n }\n\n // Add query parameters\n if (queryParams.length > 0) {\n code += ` // Add query parameters\\n`;\n code += ` const searchParams = new URLSearchParams();\\n`;\n code += ` if (request.query) {\\n`;\n for (const param of queryParams) {\n code += ` if (request.query.${param.name} != null) {\\n`;\n code += ` searchParams.append('${param.name}', String(request.query.${param.name}));\\n`;\n code += ` }\\n`;\n }\n code += ` }\\n`;\n code += ` const queryString = searchParams.toString();\\n`;\n code += ` const fullUrl = queryString ? \\`\\${url}?\\${queryString}\\` : url;\\n\\n`;\n } else {\n code += ` const fullUrl = url;\\n\\n`;\n }\n\n // Make request with validation\n code += ` // Make request\\n`;\n code += ` const rawResponse = await this.request(fullUrl, {\\n`;\n code += ` method: '${method.toUpperCase()}',\\n`;\n\n if (hasBody) {\n code += ` body: request.body ? JSON.stringify(request.body) : null,\\n`;\n }\n\n if (headerParams.length > 0) {\n code += ` headers: request.headers,\\n`;\n }\n\n code += ` });\\n\\n`;\n\n // Response validation\n code += ` // Validate response\\n`;\n code += ` if (this.validateResponses) {\\n`;\n code += ` if (this.strictValidation) {\\n`;\n code += ` // Strict mode - throw on validation error\\n`;\n code += ` return schemas.${mapping.responseSchema}.parse(rawResponse) as ${typeName}Response;\\n`;\n code += ` } else {\\n`;\n code += ` // Safe mode - catch validation errors and throw ValidationError\\n`;\n code += ` const result = schemas.${mapping.responseSchema}.safeParse(rawResponse);\\n`;\n code += ` if (!result.success) {\\n`;\n code += ` throw new ValidationError(\\n`;\n code += ` 'Response validation failed: ' + result.error.message,\\n`;\n code += ` result.error.issues\\n`;\n code += ` );\\n`;\n code += ` }\\n`;\n code += ` return result.data as ${typeName}Response;\\n`;\n code += ` }\\n`;\n code += ` }\\n\\n`;\n\n code += ` // Return unvalidated response (validation disabled)\\n`;\n code += ` return rawResponse as ${typeName}Response;\\n`;\n code += ` }\\n\\n`;\n\n return code;\n }\n /**\n * Generate a method for an endpoint (LEGACY)\n */\n private generateMethodLegacy(endpoint: EndpointInfo, includeJsDoc: boolean): string {\n const { operation, path, method } = endpoint;\n const methodName = this.getMethodName(endpoint);\n const typeName = this.getOperationTypeName(endpoint);\n\n const params = this.getOperationParameters(operation);\n const hasBody = this.hasRequestBody(operation);\n const pathParams = params.filter((p) => p.in === 'path');\n const hasAnyParams = pathParams.length > 0 || params.some((p) => p.in === 'query') || hasBody;\n\n let code = '';\n\n // JSDoc comment\n if (includeJsDoc) {\n code += ' /**\\n';\n if (operation.summary) {\n code += ` * ${operation.summary}\\n`;\n }\n if (operation.description) {\n code += ` * \\n * ${operation.description.split('\\n').join('\\n * ')}\\n`;\n }\n if (hasAnyParams) {\n code += ` * \\n * @param request - Request parameters\\n`;\n }\n code += ` * @returns Promise with the response data\\n`;\n code += ` * @throws {APIError} When the request fails\\n`;\n code += ' */\\n';\n }\n\n // Method signature\n const requestParam = hasAnyParams ? `request: ${typeName}Request` : '';\n code += ` async ${methodName}(${requestParam}): Promise<${typeName}Response> {\\n`;\n\n // Build URL with path parameters\n if (pathParams.length > 0) {\n code += ` // Build URL with path parameters\\n`;\n code += ` let url = this.baseUrl + '${path}'\\n`;\n for (const param of pathParams) {\n code += ` .replace('{${param.name}}', encodeURIComponent(String(request.path.${param.name})))\\n`;\n }\n code += `;\\n\\n`;\n } else {\n code += ` const url = this.baseUrl + '${path}';\\n\\n`;\n }\n\n // Add query parameters\n const queryParams = params.filter((p) => p.in === 'query');\n if (queryParams.length > 0) {\n code += ` // Add query parameters\\n`;\n code += ` const searchParams = new URLSearchParams();\\n`;\n code += ` if (request.query) {\\n`;\n for (const param of queryParams) {\n code += ` if (request.query.${param.name} != null) {\\n`;\n code += ` searchParams.append('${param.name}', String(request.query.${param.name}));\\n`;\n code += ` }\\n`;\n }\n code += ` }\\n`;\n code += ` const queryString = searchParams.toString();\\n`;\n code += ` const fullUrl = queryString ? \\`\\${url}?\\${queryString}\\` : url;\\n\\n`;\n } else {\n code += ` const fullUrl = url;\\n\\n`;\n }\n\n // Build request options\n code += ` return this.request<${typeName}Response>(fullUrl, {\\n`;\n code += ` method: '${method.toUpperCase()}',\\n`;\n\n if (hasBody) {\n code += ` body: request.body ? JSON.stringify(request.body) : null,\\n`;\n }\n\n const headerParams = params.filter((p) => p.in === 'header');\n if (headerParams.length > 0) {\n code += ` headers: request.headers,\\n`;\n }\n\n code += ` });\\n`;\n code += ` }\\n\\n`;\n\n return code;\n }\n\n /**\n * Generate the request helper method\n */\n private generateRequestHelper(\n validateResponses: boolean,\n strictValidation: boolean,\n useSchemas: boolean\n ): string {\n // TODO: Implement validation in Task 2.4\n // For now, return legacy implementation\n return ` /**\n * Make an HTTP request\n * @private\n */\n private async request<T>(\n url: string,\n options: {\n method: string;\n body?: string;\n headers?: Record<string, string>;\n }\n ): Promise<T> {\n const headers = {\n 'Content-Type': 'application/json',\n ...this.headers,\n ...options.headers,\n };\n\n const response = await fetch(url, {\n method: options.method,\n headers,\n body: options.body,\n });\n\n if (!response.ok) {\n const errorBody = await response.text().catch(() => null);\n \n // ✅ SECURITY FIX: Safe JSON parsing with fallback\n let parsedError: unknown;\n if (errorBody) {\n try {\n parsedError = JSON.parse(errorBody);\n } catch (parseError) {\n // Non-JSON error response - store as object with raw text\n parsedError = { \n raw: errorBody,\n contentType: response.headers.get('content-type') \n };\n }\n }\n \n throw new APIError(\n \\`HTTP \\${response.status}: \\${response.statusText}\\`,\n response.status,\n parsedError\n );\n }\n\n // Handle empty responses (204 No Content, etc.)\n if (response.status === 204 || response.headers.get('content-length') === '0') {\n return null as unknown as T;\n }\n\n // ✅ SECURITY FIX: Validate Content-Type before parsing JSON\n const contentType = response.headers.get('content-type');\n if (!contentType || !contentType.includes('application/json')) {\n const body = await response.text();\n throw new APIError(\n \\`Unexpected content type: \\${contentType}. Expected application/json\\`,\n response.status,\n { contentType, body }\n );\n }\n\n return response.json();\n }\n`;\n }\n\n // ============================================================================\n // Helper Methods\n // ============================================================================\n\n /**\n * Get all endpoints from the document\n */\n private getAllEndpoints(): EndpointInfo[] {\n const endpoints: EndpointInfo[] = [];\n\n for (const [path, pathItem] of Object.entries(this.document.paths || {})) {\n if (!pathItem) continue;\n\n const methods = ['get', 'post', 'put', 'patch', 'delete', 'options', 'head'] as const;\n\n for (const method of methods) {\n const operation = pathItem[method] as OperationObject | undefined;\n\n if (operation) {\n endpoints.push({\n path,\n method,\n ...(operation.operationId !== undefined && { operationId: operation.operationId }),\n ...(operation.summary !== undefined && { summary: operation.summary }),\n ...(operation.description !== undefined && { description: operation.description }),\n operation,\n });\n }\n }\n }\n\n return this.deduplicateOperationIds(endpoints);\n }\n\n /**\n * Deduplicate colliding operationIds by appending a path-based suffix.\n *\n * Real-world specs (e.g. SAM.gov) reuse the same operationId across\n * versioned paths. We make each one unique so the generated client\n * has no duplicate method names.\n */\n private deduplicateOperationIds(endpoints: EndpointInfo[]): EndpointInfo[] {\n const seen = new Map<string, number>();\n\n return endpoints.map((ep) => {\n if (!ep.operationId) return ep;\n\n const count = seen.get(ep.operationId) ?? 0;\n seen.set(ep.operationId, count + 1);\n\n if (count === 0) return ep;\n\n // Build a deterministic suffix from the path\n const suffix = this.sanitizePath(ep.path);\n return { ...ep, operationId: `${ep.operationId}_${suffix}` };\n });\n }\n\n /**\n * Turn an API path into a valid, readable identifier suffix.\n * e.g. '/entity-information/v4/download-entities' -> 'entityInformationV4DownloadEntities'\n */\n private sanitizePath(path: string): string {\n return path\n .split('/')\n .filter((seg) => seg && !seg.startsWith('{'))\n .join('-')\n .replace(/[^a-zA-Z0-9]+(.)/g, (_, chr) => chr.toUpperCase())\n .replace(/^[A-Z]/, (chr) => chr.toLowerCase());\n }\n\n /**\n * Get parameters for an operation\n */\n private getOperationParameters(operation: OperationObject): ParameterObject[] {\n if (!operation.parameters) return [];\n return operation.parameters as ParameterObject[];\n }\n\n /**\n * Check if operation has request body\n */\n private hasRequestBody(operation: OperationObject): boolean {\n return !!operation.requestBody;\n }\n\n /**\n * Check if request body is required\n */\n private isRequestBodyRequired(operation: OperationObject): boolean {\n const requestBody = operation.requestBody as RequestBodyObject | undefined;\n return requestBody?.required || false;\n }\n\n /**\n * Get method name from endpoint\n */\n private getMethodName(endpoint: EndpointInfo): string {\n // Use operationId if available\n if (endpoint.operationId) {\n return this.camelCase(endpoint.operationId);\n }\n\n // Generate from method + path\n const pathParts = endpoint.path\n .split('/')\n .filter((p) => p && !p.startsWith('{'))\n .join('-');\n\n return this.camelCase(`${endpoint.method}-${pathParts}`);\n }\n\n /**\n * Get type name for operation\n */\n private getOperationTypeName(endpoint: EndpointInfo): string {\n const methodName = this.getMethodName(endpoint);\n return this.pascalCase(methodName);\n }\n\n /**\n * Convert to camelCase\n */\n private camelCase(str: string): string {\n return str\n .replace(/[^a-zA-Z0-9]+(.)/g, (_, chr) => chr.toUpperCase())\n .replace(/^[A-Z]/, (chr) => chr.toLowerCase());\n }\n\n /**\n * Convert to PascalCase\n */\n private pascalCase(str: string): string {\n const camel = this.camelCase(str);\n return camel.charAt(0).toUpperCase() + camel.slice(1);\n }\n\n /**\n * Get default base URL from servers\n */\n private getDefaultBaseUrl(): string {\n if ('servers' in this.document && this.document.servers && this.document.servers.length > 0) {\n const firstServer = this.document.servers[0];\n return firstServer ? firstServer.url : 'http://localhost:3000';\n }\n return 'http://localhost:3000';\n }\n\n /**\n * Get API title\n */\n private getAPITitle(): string {\n return this.document.info?.title || 'API Client';\n }\n\n /**\n * Get API description\n */\n private getAPIDescription(): string {\n return this.document.info?.description || '';\n }\n}\n","import type { EndpointFilter as IEndpointFilter } from '../types';\n\n/**\n * Filters endpoints based on include/exclude patterns.\n *\n * Supports:\n * - Exact match: /equipment\n * - Path prefix (includes subpaths): /equipment matches /equipment and /equipment/123\n * - Path with params: /equipment/{id}\n * - Single wildcard: /admin/* matches /admin/users (not /admin itself)\n * - Double wildcard: /admin/** matches /admin/users and /admin/nested/deep\n * - Root path: / matches all paths\n */\nexport class EndpointFilter {\n private include: string[];\n private exclude: string[];\n\n constructor(filter?: IEndpointFilter) {\n // Default: include all paths (only if not explicitly set to empty)\n if (filter?.include !== undefined && filter.include.length > 0) {\n this.include = filter.include;\n } else {\n this.include = ['/**'];\n }\n this.exclude = filter?.exclude ?? [];\n }\n\n /**\n * Check if a path should be included in code generation.\n *\n * Logic:\n * 1. If path matches any exclude pattern → excluded\n * 2. If path matches any include pattern → included\n * 3. Otherwise → excluded (default deny)\n */\n matches(path: string): boolean {\n // Ensure path starts with /\n const normalizedPath = path.startsWith('/') ? path : `/${path}`;\n\n // Check exclude patterns first (deny takes precedence)\n for (const pattern of this.exclude) {\n if (this.matchPattern(normalizedPath, pattern)) {\n return false;\n }\n }\n\n // Check include patterns\n for (const pattern of this.include) {\n if (this.matchPattern(normalizedPath, pattern)) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Match path against a pattern.\n */\n private matchPattern(path: string, pattern: string): boolean {\n // Normalize pattern\n const normalizedPattern = pattern.startsWith('/') ? pattern : `/${pattern}`;\n\n // Special case: pattern \"/\" matches all paths\n if (normalizedPattern === '/') {\n return true;\n }\n\n // Convert glob pattern to regex\n const regex = this.globToRegex(normalizedPattern);\n\n // First try exact match\n if (regex.test(path)) {\n return true;\n }\n\n // For include patterns without trailing wildcards,\n // check if path starts with pattern (subpath matching)\n if (!normalizedPattern.endsWith('*')) {\n // Check if path is a subpath of the pattern\n // e.g., /equipment matches /equipment/123\n const patternSegments = normalizedPattern.split('/');\n const pathSegments = path.split('/');\n\n // Must have same prefix and path must have more or equal segments\n if (pathSegments.length >= patternSegments.length) {\n let matches = true;\n for (let i = 0; i < patternSegments.length; i++) {\n const pSeg = patternSegments[i];\n // With noUncheckedIndexedAccess, patternSegments[i] could be undefined\n if (pSeg === undefined) {\n matches = false;\n break;\n }\n // Skip wildcard checks here since globToRegex handles those\n if (pSeg === '*' || pSeg === '**') {\n continue;\n }\n // Handle {param}\n if (pSeg.startsWith('{') && pSeg.endsWith('}')) {\n continue;\n }\n // With noUncheckedIndexedAccess, we need to check if pathSegment exists\n const pathSeg = pathSegments[i];\n if (pSeg !== pathSeg) {\n matches = false;\n break;\n }\n }\n if (matches) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n /**\n * Convert a glob-like pattern to a RegExp.\n *\n * Pattern semantics:\n * - `*` = single path segment (no slashes), minimum 1 character\n * - `**` = multiple path segments (includes slashes), zero or more segments\n * - `{param}` = single path segment parameter\n * - Exact match segments are literal strings\n */\n private globToRegex(pattern: string): RegExp {\n // Escape regex special chars first (except * and {})\n let result = pattern.replace(/[.+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\n // Handle ** first (before *) to avoid replacement order issues\n result = result.replace(/\\*\\*/g, '⟪DOUBLESTAR⟫');\n\n // Handle * (matches ONE segment: one or more non-slash chars)\n result = result.replace(/\\*/g, '⟪STAR⟫');\n\n // Replace ** with regex based on position:\n // - ** at START of pattern (e.g., /**) → .* (matches everything)\n // - ** after / (e.g., /admin/**) → (?:\\/.*)? with / removed\n // - ** in MIDDLE (e.g., /api/**/users) → (?:/.*)?\n if (result.startsWith('⟪DOUBLESTAR⟫')) {\n // Pattern starts with **\n result = '.*' + result.slice('⟪DOUBLESTAR⟫'.length);\n } else if (result.endsWith('⟪DOUBLESTAR⟫') && result.endsWith('/⟪DOUBLESTAR⟫')) {\n // Pattern ends with /**\n // Remove the / before ** and replace with optional group\n result = result.slice(0, -'⟪DOUBLESTAR⟫'.length - 1) + '(?:/.*)?';\n } else {\n // ** in middle or ends with bare **\n result = result.replace(/⟪DOUBLESTAR⟫/g, '(?:/.*)?');\n }\n\n result = result.replace(/⟪STAR⟫/g, '[^/]+'); // * matches one segment (no /)\n\n // Handle {param} - matches a single segment\n result = result.replace(/\\{[^}]+\\}/g, '[^/]+');\n\n return new RegExp(`^${result}$`);\n }\n}\n","import crypto from 'crypto';\nimport fs from 'fs';\nimport https from 'https';\nimport http from 'http';\nimport { URL } from 'url';\nimport path from 'path';\nimport { realpathSync } from 'fs';\nimport { isIP } from 'net';\nimport type { ApprovedSpec, PrebuildSecurityConfig, ValidationResult } from '../types';\n\n/**\n * Validates that OpenAPI specs are on the approved list\n * and haven't been modified since approval.\n *\n * @example\n * ```typescript\n * const config: PrebuildSecurityConfig = {\n * enabled: true,\n * allowlist: [\n * {\n * name: 'Government Logistics API',\n * url: 'https://api.gov.mil/logistics/v1/openapi.yaml',\n * sha256: 'a1b2c3d4e5f6...'\n * }\n * ]\n * };\n *\n * const validator = new ApprovedSpecsValidator(config);\n * const result = await validator.validate('https://api.gov.mil/logistics/v1/openapi.yaml');\n *\n * if (!result.valid) {\n * console.error('Security rejection:', result.error);\n * process.exit(1);\n * }\n * ```\n */\nexport class ApprovedSpecsValidator {\n private allowlist: ApprovedSpec[];\n private cache: Map<string, { content: string; hash: string }> = new Map();\n private skipHashVerification: boolean;\n private readonly ALLOWED_DIRS: string[];\n private readonly MAX_RESPONSE_SIZE = 10 * 1024 * 1024; // 10MB - prevents memory exhaustion attacks\n\n /**\n * Create a new ApprovedSpecsValidator\n *\n * @param config - Security configuration from stackwright.yml\n * @param skipHashVerification - Skip hash check (for testing/development)\n */\n constructor(config: PrebuildSecurityConfig, skipHashVerification = false) {\n this.allowlist = config.allowlist || [];\n this.skipHashVerification = skipHashVerification;\n this.ALLOWED_DIRS = this.buildAllowedDirs();\n }\n\n /**\n * Build list of allowed directories for path traversal prevention.\n * Defaults to cwd, specs subdir, and .stackwright cache dir.\n */\n private buildAllowedDirs(): string[] {\n const cwd = process.cwd();\n return [cwd, path.join(cwd, 'specs'), path.join(cwd, '.stackwright')];\n }\n\n /**\n * Validate that a file path is within allowed directories (path traversal prevention).\n * Uses realpathSync to resolve symlinks and prevent symlink traversal attacks.\n *\n * @param filePath - File path to validate\n * @returns true if path is allowed, false otherwise\n */\n private isPathAllowed(filePath: string): boolean {\n try {\n // Resolve symlinks to prevent symlink traversal attacks\n const realPath = realpathSync(filePath);\n return this.ALLOWED_DIRS.some((dir) => {\n const realDir = realpathSync(dir);\n return realPath.startsWith(realDir + path.sep) || realPath === realDir;\n });\n } catch {\n return false;\n }\n }\n\n /**\n * Check if a URL/path is a path traversal attempt.\n * This is checked BEFORE the allowlist to prevent bypassing path security.\n *\n * @param specUrl - URL or path to check\n * @returns true if this is a path traversal attempt\n */\n private isPathTraversalAttempt(specUrl: string): boolean {\n // Check for file:// protocol (potential SSRF/path traversal)\n if (specUrl.startsWith('file://')) {\n return true;\n }\n\n // If it's a local file path, check if it's within allowed directories\n if (fs.existsSync(specUrl)) {\n return !this.isPathAllowed(specUrl);\n }\n\n // For URLs, check for malicious patterns\n // (protocol validation happens in download(), but we block known bad patterns here)\n if (!specUrl.startsWith('http://') && !specUrl.startsWith('https://')) {\n // Contains path traversal patterns but not a valid URL\n if (specUrl.includes('../') || specUrl.includes('..\\\\')) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Validate that a hex string is a valid SHA-256 hash (64 hex characters).\n *\n * @param hash - String to validate\n * @returns true if valid SHA-256 hex format\n */\n private isValidHex(hash: string): boolean {\n return /^[a-fA-F0-9]{64}$/.test(hash);\n }\n\n /**\n * Validate that a redirect URL is safe (SSRF protection).\n * Blocks:\n * - HTTPS → HTTP downgrades\n * - Private IP ranges (10.x.x.x, 172.16-31.x.x, 192.168.x.x, 127.x.x.x)\n * - Localhost and loopback addresses\n * - Cloud metadata endpoints\n * - IPv6 private/link-local addresses\n *\n * @param location - Redirect location URL\n * @param originalProtocol - Protocol of the original request\n * @returns true if redirect is safe, false if it should be blocked\n */\n private isRedirectSafe(location: string, originalProtocol: string): boolean {\n try {\n // Parse the redirect location\n const redirectUrl = new URL(location);\n\n // Block HTTPS → HTTP downgrade (protocol downgrade attack)\n if (redirectUrl.protocol === 'http:' && originalProtocol === 'https:') {\n return false;\n }\n\n // Block private IPs and localhost patterns\n const blockedPatterns = [\n 'localhost',\n '127.0.0.1',\n '::1',\n '0.0.0.0',\n '169.254.169.254', // AWS/GCP/Azure metadata\n '.metadata.google.internal', // GCP metadata\n 'metadata.google.internal',\n 'metadata.internal',\n ];\n\n for (const pattern of blockedPatterns) {\n if (redirectUrl.hostname.includes(pattern)) {\n return false;\n }\n }\n\n // Check for private IP ranges using regex\n const ipv4Match = redirectUrl.hostname.match(/^(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$/);\n if (ipv4Match && ipv4Match.length >= 5) {\n const octets = ipv4Match.slice(1, 5).map(Number);\n const first = octets[0];\n const second = octets[1];\n\n // 10.0.0.0/8 (private network)\n if (first !== undefined && first === 10) {\n return false;\n }\n // 172.16.0.0/12 (private network)\n if (\n first !== undefined &&\n second !== undefined &&\n first === 172 &&\n second >= 16 &&\n second <= 31\n ) {\n return false;\n }\n // 192.168.0.0/16 (private network)\n if (first !== undefined && second !== undefined && first === 192 && second === 168) {\n return false;\n }\n // 127.0.0.0/8 (loopback)\n if (first !== undefined && first === 127) {\n return false;\n }\n }\n\n // Use isIP for proper IPv6 detection and blocking\n const ipVersion = isIP(redirectUrl.hostname);\n if (ipVersion === 6) {\n // Block IPv6 private/link-local addresses\n const blockedPrefixes = [\n '::1', // Loopback\n 'fe80:', // Link-local\n 'fc00:', // Unique local\n 'fd', // Unique local (short form)\n '::ffff:', // IPv4-mapped\n ];\n if (blockedPrefixes.some((p) => redirectUrl.hostname.startsWith(p))) {\n return false;\n }\n }\n\n return true;\n } catch {\n // Invalid URL - block it\n return false;\n }\n }\n\n /**\n * Atomically check if path is allowed and read content if so.\n * Prevents TOCTOU race conditions by combining existence check,\n * symlink resolution, path validation, and file read in a single operation.\n *\n * @param filePath - File path to check and read\n * @returns Object with content if successful, or error message\n */\n private readAllowedFile(filePath: string): { content?: string; error?: string } {\n try {\n // Use lstatSync to NOT follow symlinks during check\n fs.lstatSync(filePath);\n\n // If it's a symlink, resolve where it actually points\n // realpathSync handles symlink resolution\n const realPath = fs.realpathSync(filePath);\n\n // Now check if the real path is allowed\n if (!this.isPathAllowed(realPath)) {\n return { error: 'File path outside allowed directories (path traversal blocked)' };\n }\n\n // Read the file - this is now atomic with the path check\n return { content: fs.readFileSync(filePath, 'utf8') };\n } catch (e) {\n const err = e as NodeJS.ErrnoException;\n if (err.code === 'ENOENT') {\n return { error: 'File not found' };\n }\n return { error: String(e) };\n }\n }\n\n /**\n * Check if security enforcement is enabled\n */\n isEnabled(): boolean {\n return this.allowlist.length > 0;\n }\n\n /**\n * Get the allowlist count\n */\n getAllowlistCount(): number {\n return this.allowlist.length;\n }\n\n /**\n * Validate that a spec is on the approved list and matches expected hash.\n *\n * @param specUrl - URL or file path to the spec to validate\n * @returns ValidationResult indicating if the spec is approved\n */\n async validate(specUrl: string): Promise<ValidationResult> {\n // CRITICAL: Check for path traversal BEFORE allowlist check\n // This prevents bypassing path security with skipHashVerification\n if (this.isPathTraversalAttempt(specUrl)) {\n return {\n valid: false,\n errorCode: 'DOWNLOAD_FAILED',\n specUrl,\n error: 'File path outside allowed directories (path traversal blocked)',\n };\n }\n\n // Find matching approved spec\n const approved = this.allowlist.find((a) => this.urlsMatch(a.url, specUrl));\n\n if (!approved) {\n return {\n valid: false,\n errorCode: 'SPEC_NOT_ON_ALLOWLIST',\n specUrl,\n error: this.formatAllowlistError(specUrl),\n };\n }\n\n // Skip hash verification if requested (dev mode)\n if (this.skipHashVerification) {\n return { valid: true, specUrl };\n }\n\n // Download/load and hash the spec\n const hashResult = await this.getHash(specUrl);\n\n if (hashResult.error) {\n return {\n valid: false,\n errorCode: 'DOWNLOAD_FAILED',\n specUrl,\n error: `Failed to fetch spec '${specUrl}': ${hashResult.error}`,\n };\n }\n\n // Validate hash formats before comparison (defense in depth)\n if (!this.isValidHex(hashResult.hash!)) {\n return {\n valid: false,\n errorCode: 'DOWNLOAD_FAILED',\n specUrl,\n error: 'Invalid hash format returned from download',\n };\n }\n\n if (!this.isValidHex(approved.sha256)) {\n return {\n valid: false,\n errorCode: 'DOWNLOAD_FAILED',\n specUrl,\n error: 'Invalid hash format in approved spec configuration',\n };\n }\n\n // Use timing-safe comparison to prevent timing attacks\n if (\n !crypto.timingSafeEqual(\n Buffer.from(hashResult.hash!, 'hex'),\n Buffer.from(approved.sha256, 'hex')\n )\n ) {\n return {\n valid: false,\n errorCode: 'SPEC_MODIFIED',\n specUrl,\n error: this.formatHashMismatchError(approved, hashResult.hash!),\n };\n }\n\n return { valid: true, specUrl };\n }\n\n /**\n * Validate multiple specs at once (batch validation).\n * Fails fast on first error.\n *\n * @param specUrls - Array of URLs/paths to validate\n * @returns Map of URL to ValidationResult\n */\n async validateAll(specUrls: string[]): Promise<Map<string, ValidationResult>> {\n const results = new Map<string, ValidationResult>();\n\n for (const url of specUrls) {\n const result = await this.validate(url);\n results.set(url, result);\n\n if (!result.valid) {\n // Fail fast - stop on first error\n return results;\n }\n }\n\n return results;\n }\n\n /**\n * Validate all specs and return all results (non-fail-fast).\n *\n * @param specUrls - Array of URLs/paths to validate\n * @returns Map of URL to ValidationResult\n */\n async validateAllComplete(specUrls: string[]): Promise<Map<string, ValidationResult>> {\n const results = new Map<string, ValidationResult>();\n\n for (const url of specUrls) {\n const result = await this.validate(url);\n results.set(url, result);\n }\n\n return results;\n }\n\n /**\n * Get content hash from cache or download.\n */\n private async getHash(url: string): Promise<{ hash?: string; error?: string }> {\n // Check cache\n const cached = this.cache.get(url);\n if (cached) {\n return { hash: cached.hash };\n }\n\n // Download content\n const contentResult = await this.download(url);\n if (contentResult.error) {\n return { error: contentResult.error };\n }\n\n const content = contentResult.content!;\n const hash = crypto.createHash('sha256').update(content).digest('hex');\n\n // Cache\n this.cache.set(url, { content, hash });\n\n return { hash };\n }\n\n /**\n * Download content from URL or file.\n * Includes path traversal and SSRF protection.\n */\n private async download(\n url: string,\n originalProtocol = ''\n ): Promise<{ content?: string; error?: string }> {\n // Check if it's a file path - use atomic method to prevent TOCTOU race conditions\n if (fs.existsSync(url)) {\n return this.readAllowedFile(url);\n }\n\n // Validate URL protocol\n if (!url.startsWith('http://') && !url.startsWith('https://')) {\n return { error: `Invalid URL protocol. Expected http:// or https://, got: ${url}` };\n }\n\n // Store original protocol for SSRF check on redirects\n const parsed = new URL(url);\n const requestProtocol = originalProtocol || parsed.protocol;\n\n // Download from URL\n return new Promise((resolve) => {\n const client = url.startsWith('https') ? https : http;\n\n const req = client.get(url, { timeout: 30000 }, (res) => {\n // Handle redirects with SSRF protection\n if (\n res.statusCode &&\n res.statusCode >= 300 &&\n res.statusCode < 400 &&\n res.headers.location\n ) {\n const location = res.headers.location;\n\n // Validate redirect is safe (SSRF protection)\n if (!this.isRedirectSafe(location, requestProtocol)) {\n resolve({ error: `Unsafe redirect target blocked: ${location}` });\n return;\n }\n\n // Follow redirect\n this.download(location, requestProtocol).then(resolve);\n return;\n }\n\n if (res.statusCode !== 200) {\n resolve({ error: `HTTP ${res.statusCode}` });\n return;\n }\n\n // Memory exhaustion protection - limit response size\n let data = '';\n let size = 0;\n res.on('data', (chunk: Buffer) => {\n size += chunk.length;\n if (size > this.MAX_RESPONSE_SIZE) {\n req.destroy();\n resolve({ error: `Response too large (>${this.MAX_RESPONSE_SIZE / 1024 / 1024}MB)` });\n return;\n }\n data += chunk;\n });\n res.on('end', () => resolve({ content: data }));\n res.on('error', (e) => resolve({ error: String(e) }));\n });\n\n req.on('error', (e) => resolve({ error: String(e) }));\n req.on('timeout', () => {\n req.destroy();\n resolve({ error: 'Request timeout (30s)' });\n });\n });\n }\n\n /**\n * Check if two URLs match (handles trailing slashes, case sensitivity, etc.).\n * Strips credentials and hash to prevent bypass via @ symbol.\n */\n private urlsMatch(url1: string, url2: string): boolean {\n const normalize = (u: string) => {\n try {\n const parsed = new URL(u);\n // Strip credentials and hash to prevent bypass via @ symbol\n const normalized = `${parsed.protocol}//${parsed.hostname}${parsed.pathname}`;\n return normalized.replace(/\\/$/, '').toLowerCase();\n } catch {\n // Not a URL, treat as file path - normalize separators and trailing slash\n return u.replace(/\\/$/, '').replace(/\\\\/g, '/').toLowerCase();\n }\n };\n\n return normalize(url1) === normalize(url2);\n }\n\n /**\n * Format error message for spec not on allowlist\n */\n private formatAllowlistError(specUrl: string): string {\n const lines = [`Spec '${specUrl}' is not on the approved list.`];\n\n if (this.allowlist.length === 0) {\n lines.push('');\n lines.push('No approved specs are configured.');\n lines.push('Add approved specs to stackwright.yml under prebuild.security.allowlist');\n } else {\n lines.push('');\n lines.push('Allowed specs:');\n for (const spec of this.allowlist) {\n lines.push(` • ${spec.name}`);\n lines.push(` ${spec.url}`);\n }\n }\n\n return lines.join('\\n');\n }\n\n /**\n * Format error message for hash mismatch\n */\n private formatHashMismatchError(approved: ApprovedSpec, actualHash: string): string {\n const lines = [\n `Spec '${approved.url}' has been modified since approval.`,\n '',\n 'Expected hash (approved): ' + approved.sha256,\n 'Actual hash (current): ' + actualHash,\n '',\n 'This may indicate:',\n ' • The spec has been updated on the server',\n ' • Network corruption during download',\n ' • A man-in-the-middle attack',\n '',\n 'If this is expected, update the sha256 in stackwright.yml.',\n ];\n\n return lines.join('\\n');\n }\n\n /**\n * Clear the download cache.\n * Useful for long-running processes.\n */\n clearCache(): void {\n this.cache.clear();\n }\n}\n","/**\n * Prebuild plugin types\n * TODO: Move to @stackwright/types package when created\n */\nexport interface PrebuildPluginContext {\n /** Parsed site configuration from stackwright.yml */\n siteConfig: Record<string, any>;\n /** Project root directory */\n projectRoot: string;\n}\n\nexport interface PrebuildPlugin {\n /** Plugin name */\n name: string;\n /** Called before build starts */\n beforeBuild?(context: PrebuildPluginContext): Promise<void>;\n /** Called after build completes */\n afterBuild?(context: PrebuildPluginContext): Promise<void>;\n}\n\nimport fs from 'fs';\nimport path from 'path';\nimport { OpenAPIParser } from '../parser/OpenAPIParser';\nimport { ZodSchemaGenerator } from '../compiler/ZodSchemaGenerator';\nimport { TypeGenerator } from '../compiler/TypeGenerator';\nimport { ClientGenerator, type SchemaMapping } from '../compiler/ClientGenerator';\nimport {\n CollectionProviderGenerator,\n type ProviderGenerationOptions,\n} from '../compiler/CollectionProviderGenerator';\nimport { SchemaResolver } from '../parser/SchemaResolver';\nimport { EndpointFilter } from '../utils/EndpointFilter';\nimport { ApprovedSpecsValidator } from '../utils/ApprovedSpecsValidator';\nimport type { OpenAPIConfig, PrebuildSecurityConfig } from '../types';\n\n/**\n * Prebuild plugin for OpenAPI integration\n *\n * Reads OpenAPI configuration from stackwright.yml and generates:\n * - Zod validation schemas\n * - TypeScript type definitions\n * - CollectionProvider implementations\n * - Typed API client functions\n *\n * All generated code is written to src/generated/{integrationName}/\n *\n * === Phase 2: Approved-Specs Enforcement ===\n *\n * Enterprise customers can enable security enforcement via stackwright.yml:\n *\n * ```yaml\n * prebuild:\n * security:\n * enabled: true\n * allowlist:\n * - name: logistics-api\n * url: https://api.gov.mil/logistics/v1/openapi.yaml\n * sha256: a1b2c3d4e5f6...\n * ```\n *\n * This ensures only approved API specs can generate code.\n */\nexport class OpenAPIPlugin implements PrebuildPlugin {\n name = '@stackwright-pro/openapi';\n\n async beforeBuild(context: PrebuildPluginContext): Promise<void> {\n const { siteConfig, projectRoot } = context;\n\n // Check for prebuild security config\n const prebuildConfig = (siteConfig.prebuild || {}) as Record<string, any>;\n const securityConfig = prebuildConfig.security as PrebuildSecurityConfig | undefined;\n\n let validator: ApprovedSpecsValidator | null = null;\n\n if (securityConfig?.enabled) {\n // Check for skip flag (development mode)\n const skipApprovedSpecs = process.argv.includes('--skip-approved-specs');\n\n if (skipApprovedSpecs) {\n // SECURITY: Block this flag in production/CI environments\n const isProductionBuild =\n process.env.NODE_ENV === 'production' || process.env.CI === 'true';\n\n if (isProductionBuild) {\n console.error('\\n❌ FATAL: --skip-approved-specs not allowed in production/CI builds\\n');\n throw new Error(\n 'SECURITY_CONFIG_VIOLATION: Cannot use --skip-approved-specs in production or CI environments'\n );\n }\n\n console.log(\n '\\n[@stackwright-pro/openapi] ⚠️ Approved-specs enforcement DISABLED (--skip-approved-specs)\\n'\n );\n console.log(' This is ONLY allowed in development mode.\\n');\n } else {\n validator = new ApprovedSpecsValidator(securityConfig);\n console.log('\\n[@stackwright-pro/openapi] 🔒 Approved-specs enforcement ENABLED');\n console.log(` Approved specs: ${validator.getAllowlistCount()}`);\n }\n }\n\n // Look for integrations config in site config\n const integrations = siteConfig.integrations as unknown[] | undefined;\n\n if (!integrations || !Array.isArray(integrations)) {\n // No integrations configured - silently skip\n return;\n }\n\n // Filter for OpenAPI integrations\n const openAPIIntegrations = integrations.filter(\n (int): int is OpenAPIConfig =>\n typeof int === 'object' && int !== null && 'name' in int && 'spec' in int\n );\n\n if (openAPIIntegrations.length === 0) {\n return;\n }\n\n // Batch validate all specs upfront if validator is enabled\n if (validator) {\n const specUrls = openAPIIntegrations.map((i) => i.spec);\n const results = await validator.validateAll(specUrls);\n\n for (const [url, result] of results) {\n if (!result.valid) {\n // Security rejection - fail hard\n this.printSecurityRejection(result);\n throw new Error(`SPEC_NOT_APPROVED: ${result.error}`);\n }\n\n console.log(` ✓ Approved: ${url}`);\n }\n }\n\n console.log(\n `\\n[@stackwright-pro/openapi] Processing ${openAPIIntegrations.length} integration(s)...`\n );\n\n // Process each OpenAPI integration\n for (const config of openAPIIntegrations) {\n await this.processIntegration(config, projectRoot);\n }\n\n console.log('[@stackwright-pro/openapi] Generation complete\\n');\n }\n\n /**\n * Print a security rejection error in a formatted box\n */\n private printSecurityRejection(result: { errorCode?: string; error?: string }): void {\n const lines: string[] = [];\n\n lines.push(\n '\\n╔══════════════════════════════════════════════════════════════════════════════╗'\n );\n lines.push(\n '║ 🔒 SECURITY REJECTED ║'\n );\n lines.push('╠══════════════════════════════════════════════════════════════════════════════╣');\n lines.push(`║ Error: ${(result.errorCode || 'UNKNOWN').padEnd(73)} ║`);\n lines.push('╠══════════════════════════════════════════════════════════════════════════════╣');\n\n // Print error message with proper wrapping\n const errorLines = (result.error || 'Unknown error').split('\\n');\n const maxLen = 76;\n\n for (const line of errorLines) {\n // Wrap long lines\n if (line.length <= maxLen) {\n lines.push(`║ ${line.padEnd(maxLen)} ║`);\n } else {\n // Split long lines\n let remaining = line;\n while (remaining.length > 0) {\n lines.push(`║ ${remaining.substring(0, maxLen).padEnd(maxLen)} ║`);\n remaining = remaining.substring(maxLen);\n }\n }\n }\n\n lines.push(\n '╚══════════════════════════════════════════════════════════════════════════════╝\\n'\n );\n\n for (const line of lines) {\n console.error(line);\n }\n }\n\n private async processIntegration(config: OpenAPIConfig, projectRoot: string): Promise<void> {\n const { name, spec, auth, mockUrl, collections, endpoints } = config;\n\n console.log(` - Processing integration: ${name}`);\n\n // Resolve spec path (can be URL or local file)\n const specPath = spec.startsWith('http') ? spec : path.resolve(projectRoot, spec);\n\n // Parse OpenAPI spec\n const parser = new OpenAPIParser();\n const { document } = await parser.parse(specPath);\n\n // Override servers array with mock URL if configured\n // This ensures generated client uses the Prism mock server\n if (mockUrl) {\n const originalServer = document.servers?.[0]?.url || 'unknown';\n document.servers = [{ url: mockUrl }];\n console.log(` > Using mock URL: ${mockUrl} (was: ${originalServer})`);\n }\n\n // Create endpoint filter\n const endpointFilter = new EndpointFilter(endpoints);\n\n // Log filter info if configured\n if (endpoints && (endpoints.include?.length || endpoints.exclude?.length)) {\n const includeStr = endpoints.include?.join(', ') || '/**';\n const excludeStr = endpoints.exclude?.length\n ? ` (exclude: ${endpoints.exclude.join(', ')})`\n : '';\n console.log(` > Filter: include [${includeStr}]${excludeStr}`);\n }\n\n // Create output directory\n const outputDir = path.join(projectRoot, 'src', 'generated', name);\n fs.mkdirSync(outputDir, { recursive: true });\n\n // Generate Zod schemas for all collections\n const schemaMapping = await this.generateSchemas(\n document,\n collections || [],\n outputDir,\n name,\n endpointFilter\n );\n\n // Generate TypeScript types\n await this.generateTypes(document, collections || [], outputDir, name);\n\n // Generate CollectionProvider\n if (collections && collections.length > 0) {\n await this.generateProvider(document, config, outputDir, name);\n }\n\n // Generate API client\n await this.generateClient(document, outputDir, name, schemaMapping, endpointFilter);\n\n console.log(` > Generated code in src/generated/${name}/`);\n }\n\n private async generateSchemas(\n document: any,\n collections: OpenAPIConfig['collections'],\n outputDir: string,\n integrationName: string,\n endpointFilter: EndpointFilter\n ): Promise<SchemaMapping> {\n const resolver = new SchemaResolver(document);\n const zodGenerator = new ZodSchemaGenerator();\n\n // Single import at top — all schemas use bare: true to avoid duplicates\n let schemasCode = `/**\n * Generated Zod schemas from OpenAPI spec\n * Integration: ${integrationName}\n * \n * DO NOT EDIT - This file is auto-generated by @stackwright-pro/openapi\n * Regenerate by running: pnpm prebuild\n */\n\nimport { z } from 'zod';\n\n`;\n\n // Generate schema for each collection\n if (collections) {\n for (const collection of collections) {\n const { endpoint } = collection;\n // Default to GET method for collections\n const method = 'get';\n const schema = resolver.getResponseSchema(endpoint, method);\n\n if (!schema) {\n console.warn(` > No schema found for ${method.toUpperCase()} ${endpoint}`);\n continue;\n }\n\n const collectionName = this.sanitizeName(endpoint);\n const schemaName = `${this.capitalize(collectionName)}Schema`;\n\n // Check if response is array\n const isArray = schema.type === 'array';\n const itemSchema = isArray ? (schema as any).items : schema;\n\n // Generate Zod schema (bare = no duplicate imports)\n const zodCode = zodGenerator.generate(itemSchema, { schemaName, bare: true });\n\n schemasCode += zodCode + '\\n';\n\n // If response is array, create array schema too\n if (isArray) {\n schemasCode += `export const ${this.capitalize(collectionName)}ArraySchema = z.array(${schemaName});\\n\\n`;\n }\n }\n }\n\n // ========================================================================\n // Generate response schemas for filtered endpoints\n // ========================================================================\n schemasCode += '\\n// Response schemas for filtered endpoints\\n';\n\n // Track which schemas we've already generated\n const generatedSchemas = new Set<string>();\n let filteredCount = 0;\n\n const paths = document.paths || {};\n for (const [pathStr, pathItem] of Object.entries(paths) as [string, any][]) {\n // SKIP paths that don't match the filter\n if (!endpointFilter.matches(pathStr)) {\n filteredCount++;\n continue;\n }\n\n const methods = ['get', 'post', 'put', 'patch', 'delete'] as const;\n\n for (const method of methods) {\n const operation = pathItem[method];\n if (!operation) continue;\n\n const opId = operation.operationId || this.generateOperationId(pathStr, method);\n const responseSchemaName = `${this.getOperationTypeName(opId)}ResponseSchema`;\n\n // Skip if already generated\n if (generatedSchemas.has(responseSchemaName)) {\n continue;\n }\n\n // Get the response schema from OpenAPI spec\n const responseSchema = resolver.getResponseSchema(pathStr, method);\n if (!responseSchema) {\n console.warn(` > No response schema for ${method.toUpperCase()} ${pathStr}`);\n continue;\n }\n\n // Check if it's an array response\n const isArray = responseSchema.type === 'array';\n\n if (isArray && (responseSchema as any).items?.$ref) {\n // Array of component schema reference\n const componentName = this.extractComponentName((responseSchema as any).items.$ref);\n schemasCode += `export const ${responseSchemaName} = z.array(${componentName}Schema);\\n`;\n generatedSchemas.add(responseSchemaName);\n } else if ('$ref' in responseSchema && responseSchema.$ref) {\n // Direct component schema reference\n const componentName = this.extractComponentName(responseSchema.$ref as string);\n schemasCode += `export const ${responseSchemaName} = ${componentName}Schema;\\n`;\n generatedSchemas.add(responseSchemaName);\n } else if (isArray) {\n // Inline array schema (bare = no duplicate imports)\n const zodCode = zodGenerator.generate(responseSchema, {\n schemaName: responseSchemaName,\n bare: true,\n });\n schemasCode += zodCode + '\\n';\n generatedSchemas.add(responseSchemaName);\n } else {\n // Inline object schema (bare = no duplicate imports)\n const zodCode = zodGenerator.generate(responseSchema, {\n schemaName: responseSchemaName,\n bare: true,\n });\n schemasCode += zodCode + '\\n';\n generatedSchemas.add(responseSchemaName);\n }\n }\n }\n\n if (filteredCount > 0) {\n console.log(` > Skipped ${filteredCount} paths (filtered)`);\n }\n\n // Build schema mapping for ClientGenerator (only for filtered endpoints)\n const schemaMapping: SchemaMapping = {};\n\n for (const [pathStr, pathItem] of Object.entries(paths) as [string, any][]) {\n // Only include filtered paths\n if (!endpointFilter.matches(pathStr)) {\n continue;\n }\n\n const methods = ['get', 'post', 'put', 'patch', 'delete'] as const;\n\n for (const method of methods) {\n const operation = pathItem[method];\n if (!operation) continue;\n\n const opId = operation.operationId || this.generateOperationId(pathStr, method);\n const responseSchemaName = `${this.getOperationTypeName(opId)}ResponseSchema`;\n\n schemaMapping[opId] = {\n requestSchema: null, // ClientGenerator handles request schema generation + type inference\n responseSchema: responseSchemaName,\n };\n }\n }\n\n // Write schemas file\n fs.writeFileSync(path.join(outputDir, 'schemas.ts'), schemasCode);\n\n return schemaMapping;\n }\n\n private async generateTypes(\n document: any,\n collections: OpenAPIConfig['collections'],\n outputDir: string,\n integrationName: string\n ): Promise<void> {\n let typesCode = `/**\n * Generated TypeScript types from OpenAPI spec\n * Integration: ${integrationName}\n * \n * DO NOT EDIT - This file is auto-generated by @stackwright-pro/openapi\n * Regenerate by running: pnpm prebuild\n */\n\nimport type { z } from 'zod';\nimport type * as schemas from './schemas';\n\n`;\n\n // Infer types from schemas\n if (collections) {\n for (const collection of collections) {\n const collectionName = this.sanitizeName(collection.endpoint);\n const typeName = this.capitalize(collectionName);\n const schemaName = `${typeName}Schema`;\n\n typesCode += `export type ${typeName} = z.infer<typeof schemas.${schemaName}>;\\n`;\n }\n }\n\n // Write types file\n fs.writeFileSync(path.join(outputDir, 'types.ts'), typesCode);\n }\n\n private async generateProvider(\n document: any,\n config: OpenAPIConfig,\n outputDir: string,\n integrationName: string\n ): Promise<void> {\n const generator = new CollectionProviderGenerator(document);\n const { collections, auth } = config;\n\n if (!collections || collections.length === 0) {\n return;\n }\n\n // Collect all schema imports needed\n const schemaImports = new Set<string>();\n\n // Generate each provider class with bare=true (no imports)\n const classBlocks: string[] = [];\n\n for (const collection of collections) {\n const collectionConfig = {\n endpoint: collection.endpoint,\n slugField: collection.slug_field,\n filters: collection.filters,\n };\n\n const providerOptions: ProviderGenerationOptions = { bare: true };\n\n if (auth) {\n if (auth.type === 'bearer' || auth.type === 'apiKey') {\n providerOptions.auth = {\n type: auth.type,\n ...(auth.type === 'apiKey' && { headerName: 'X-API-Key' }),\n };\n } else if (auth.type === 'oauth2') {\n console.warn(\n ` > OAuth2 auth not yet supported for ${collection.endpoint} (coming soon)`\n );\n }\n }\n\n const code = generator.generate(collectionConfig, providerOptions);\n classBlocks.push(code);\n\n // Track needed schema imports\n const collectionName = this.sanitizeName(collection.endpoint);\n const resolver = new SchemaResolver(document);\n const schema = resolver.getResponseSchema(collection.endpoint, 'get');\n const isArray = schema?.type === 'array';\n if (isArray) {\n schemaImports.add(`${this.capitalize(collectionName)}ArraySchema`);\n } else {\n schemaImports.add(`${this.capitalize(collectionName)}Schema`);\n }\n }\n\n // Assemble the file with a single import block\n let providerCode = `/**\n * Generated CollectionProvider from OpenAPI spec\n * Integration: ${integrationName}\n * \n * DO NOT EDIT - This file is auto-generated by @stackwright-pro/openapi\n * Regenerate by running: pnpm prebuild\n */\n\nimport type { CollectionProvider, CollectionItem } from '@stackwright/collections';\nimport { ${Array.from(schemaImports).join(', ')} } from './schemas';\n\n`;\n\n providerCode += classBlocks.join('\\n');\n\n // Write provider file\n fs.writeFileSync(path.join(outputDir, 'provider.ts'), providerCode);\n }\n\n private async generateClient(\n document: any,\n outputDir: string,\n integrationName: string,\n schemaMapping: SchemaMapping,\n endpointFilter: EndpointFilter\n ): Promise<void> {\n // Count endpoints that will be filtered\n const paths = document.paths || {};\n let filteredEndpoints = 0;\n for (const pathStr of Object.keys(paths)) {\n if (!endpointFilter.matches(pathStr)) {\n filteredEndpoints++;\n }\n }\n\n if (filteredEndpoints > 0) {\n console.log(\n ` > Generating client for ${Object.keys(paths).length - filteredEndpoints} endpoints (${filteredEndpoints} filtered)`\n );\n }\n\n const generator = new ClientGenerator(document);\n // Generate the client with custom class name\n const className = `${this.capitalize(integrationName)}Client`;\n const clientCode = generator.generate({\n className,\n includeJsDoc: true,\n schemaMapping,\n validateResponses: true,\n strictValidation: false,\n });\n\n // Write client file\n fs.writeFileSync(path.join(outputDir, 'client.ts'), clientCode);\n }\n\n private extractComponentName(ref: string): string {\n // Extract component name from $ref\n // Example: #/components/schemas/Equipment -> Equipment\n const parts = ref.split('/');\n const lastPart = parts[parts.length - 1];\n return lastPart ?? ref;\n }\n\n private getOperationTypeName(operationId: string): string {\n // Convert operationId to PascalCase for type names\n // Example: listEquipment -> ListEquipment\n return operationId.charAt(0).toUpperCase() + operationId.slice(1);\n }\n\n private generateOperationId(pathStr: string, method: string): string {\n const sanitized = this.sanitizeName(pathStr);\n return `${method}${this.capitalize(sanitized)}`;\n }\n\n private getResponseSchemaName(pathStr: string, method: string): string {\n const sanitized = this.sanitizeName(pathStr);\n const baseName = this.capitalize(sanitized);\n\n // GET /equipment -> ListEquipmentResponseSchema / EquipmentArraySchema\n if (method === 'get' && !pathStr.includes('{')) {\n return `${baseName}ArraySchema`;\n }\n\n // GET /equipment/{id} -> EquipmentSchema (single item)\n return `${baseName}Schema`;\n }\n\n private sanitizeName(pathStr: string): string {\n return pathStr.replace(/^\\//, '').replace(/\\//g, '-').replace(/[{}:]/g, '').replace(/-+/g, '-');\n }\n\n private capitalize(str: string): string {\n return str\n .split('-')\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join('');\n }\n}\n\n/**\n * Factory function to create the plugin instance\n *\n * Usage in user's prebuild script:\n * ```typescript\n * const { createOpenAPIPlugin } = require('@stackwright-pro/openapi/prebuild');\n * runPrebuild({ plugins: [createOpenAPIPlugin()] });\n * ```\n */\nexport function createOpenAPIPlugin(): PrebuildPlugin {\n return new OpenAPIPlugin();\n}\n","import { isIP } from 'net';\nimport type { ZodSchema } from 'zod';\n\n/**\n * Blocked host patterns for SSRF prevention\n */\nconst BLOCKED_HOST_PATTERNS = [\n /^localhost$/i,\n /^127\\./, // Loopback (127.0.0.0/8)\n /^10\\./, // Class A private (10.0.0.0/8)\n /^172\\.(1[6-9]|2[0-9]|3[0-1])\\./, // Class B private (172.16.0.0/12)\n /^192\\.168\\./, // Class C private (192.168.0.0/16)\n /^169\\.254\\./, // Link-local (169.254.0.0/16) - AWS/GCP metadata\n /^0\\./, // Current network (0.0.0.0/8)\n /^::1$/, // IPv6 loopback (no brackets)\n /^\\[::1\\]$/i, // IPv6 loopback (with brackets)\n /^[fF][cCdD][0-9a-fA-F]{2}:/, // IPv6 private (fc00::/7)\n /^169\\.254\\.169\\.254$/i, // AWS metadata endpoint\n /^metadata\\.googleapis\\.com$/i, // GCP metadata endpoint\n /^metadata\\.azure\\.com$/i, // Azure metadata endpoint\n /^imds\\.azure\\.com$/i, // Azure IMDS endpoint\n /^100\\.100\\.100\\.200$/, // Alibaba Cloud metadata\n];\n\n/**\n * Blocked IPv6 prefixes for SSRF prevention\n * Extracted as a named constant for explicit auditability\n */\nconst BLOCKED_IPV6_PREFIXES = [\n '::1', // Loopback\n 'fe80:', // Link-local\n 'fc', // Unique local (fc00::/7 — covers fc00:: through fcff::)\n 'fd', // Unique local (short form)\n];\n\n/**\n * Allowed protocols for outbound requests\n */\nconst ALLOWED_PROTOCOLS = ['http:', 'https:'];\n\n/**\n * NOTE: Validates the URL structure and hostname at call time.\n * Does NOT re-validate after DNS resolution (DNS rebinding).\n * This is acceptable for build-time prebuild use.\n * DO NOT reuse this function for runtime server-side request proxying\n * without adding post-resolution IP validation.\n */\n\n/**\n * Validates that a URL is safe to fetch (SSRF prevention).\n * Exported for use by external consumers and tests.\n *\n * @throws Error if URL targets internal networks or disallowed protocols\n */\nexport function validateUrlSafe(baseUrl: string): URL {\n let url: URL;\n\n try {\n url = new URL(baseUrl);\n } catch {\n throw new Error('SECURITY: baseUrl must be a valid absolute URL');\n }\n\n // Protocol validation\n if (!ALLOWED_PROTOCOLS.includes(url.protocol)) {\n throw new Error('SECURITY: Only HTTP and HTTPS protocols are allowed, got ' + url.protocol);\n }\n\n // Host validation against known-bad patterns\n const hostname = url.hostname.toLowerCase();\n\n for (const pattern of BLOCKED_HOST_PATTERNS) {\n if (pattern.test(hostname)) {\n throw new Error('SECURITY: Blocked internal network address: ' + hostname);\n }\n }\n\n // Deep IPv4 CIDR check for private ranges\n const ip = url.hostname;\n if (/^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$/.test(ip)) {\n const octets = ip.split('.').map(Number);\n\n // With noUncheckedIndexedAccess, we need to check array bounds\n const first = octets[0];\n const second = octets[1];\n\n // 127.x.x.x\n if (first !== undefined && first === 127) {\n throw new Error('SECURITY: Base URL resolves to private IP');\n }\n\n // 10.x.x.x\n if (first !== undefined && first === 10) {\n throw new Error('SECURITY: Base URL resolves to private IP');\n }\n\n // 172.16.x.x - 172.31.x.x\n if (\n first !== undefined &&\n second !== undefined &&\n first === 172 &&\n second >= 16 &&\n second <= 31\n ) {\n throw new Error('SECURITY: Base URL resolves to private IP');\n }\n\n // 192.168.x.x (RFC 1918 private)\n if (first !== undefined && second !== undefined && first === 192 && second === 168) {\n throw new Error('SECURITY: Base URL resolves to private IP');\n }\n\n // 169.254.x.x (link-local)\n if (first !== undefined && second !== undefined && first === 169 && second === 254) {\n throw new Error('SECURITY: Base URL resolves to private IP');\n }\n\n // 0.x.x.x (current network)\n if (first !== undefined && first === 0) {\n throw new Error('SECURITY: Base URL resolves to private IP');\n }\n }\n\n // Strip brackets for IPv6 addresses (e.g., [::1] -> ::1)\n // This is required for isIP() to work correctly\n const cleanHostname = hostname.replace(/^\\[|\\]$/g, '');\n\n // Deep IPv6 check via isIP from 'net'\n const ipVersion = isIP(cleanHostname);\n if (ipVersion === 6) {\n // Check against explicit auditable prefix list\n for (const prefix of BLOCKED_IPV6_PREFIXES) {\n if (cleanHostname.startsWith(prefix)) {\n throw new Error('SECURITY: Base URL resolves to private IP');\n }\n }\n\n // Check IPv4-mapped addresses (::ffff:x.x.x.x) — tunneled private IPs\n if (cleanHostname.startsWith('::ffff:')) {\n const mapped = cleanHostname.slice('::ffff:'.length); // e.g. \"c0a8:101\" or \"192.168.1.1\"\n\n let octets: number[] | null = null;\n\n // Case 1: decimal dotted notation (defense-in-depth; URL parser normalizes this away)\n const decMatch = mapped.match(/^(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$/);\n if (decMatch) {\n octets = decMatch.slice(1, 5).map(Number);\n }\n\n // Case 2: hex group notation — the form URL constructor actually produces\n // e.g. \"c0a8:101\" => 192.168.1.1, \"a9fe:a9fe\" => 169.254.169.254\n const hexMatch = mapped.match(/^([0-9a-f]{1,4}):([0-9a-f]{1,4})$/i);\n if (!octets && hexMatch && hexMatch[1] !== undefined && hexMatch[2] !== undefined) {\n const high = parseInt(hexMatch[1], 16);\n const low = parseInt(hexMatch[2], 16);\n octets = [(high >> 8) & 0xff, high & 0xff, (low >> 8) & 0xff, low & 0xff];\n }\n\n if (octets !== null) {\n const o0 = octets[0];\n const o1 = octets[1];\n if (\n o0 === 127 || // 127.0.0.0/8 loopback\n o0 === 10 || // 10.0.0.0/8 private\n o0 === 0 || // 0.0.0.0/8 current network\n (o0 === 172 && o1 !== undefined && o1 >= 16 && o1 <= 31) || // 172.16/12 private\n (o0 === 192 && o1 === 168) || // 192.168/16 private\n (o0 === 169 && o1 === 254) // 169.254/16 link-local / IMDS\n ) {\n throw new Error('SECURITY: Base URL resolves to private IP');\n }\n // Allow public IPv4-mapped addresses (e.g., ::ffff:8.8.8.8 → ::ffff:808:808)\n } else {\n // Unrecognised ::ffff: format — fail closed\n throw new Error('SECURITY: Base URL resolves to unrecognisable IPv4-mapped address');\n }\n }\n }\n\n return url;\n}\n\n/**\n * Alias for validateUrlSafe — backward compatibility export\n */\nexport const isUrlSafe = validateUrlSafe;\n\n/**\n * Validates endpoint for path traversal\n */\nfunction validateEndpoint(endpoint: string): void {\n if (endpoint.includes('..')) {\n throw new Error('SECURITY: Path traversal detected in endpoint');\n }\n\n if (endpoint.includes('\\\\')) {\n throw new Error('SECURITY: Backslash detected in endpoint');\n }\n}\n\n/**\n * Configuration for OpenAPI source adapter\n */\nexport interface OpenAPISourceConfig<T = unknown> {\n /** Base URL of the API */\n baseUrl: string;\n\n /** API endpoint path */\n endpoint: string;\n\n /** HTTP method (default: 'get') */\n method?: 'get' | 'post' | 'put' | 'patch' | 'delete';\n\n /** Optional query parameters */\n params?: Record<string, string | number | boolean>;\n\n /** Optional request body */\n body?: unknown;\n\n /** Optional headers */\n headers?: Record<string, string>;\n\n /** Optional Zod schema for validation */\n schema?: ZodSchema<T>;\n\n /** Authentication config */\n auth?: {\n type: 'bearer' | 'apiKey';\n token?: string;\n apiKey?: string;\n headerName?: string;\n };\n}\n\n/**\n * Creates a fetcher function from OpenAPI configuration\n *\n * @example\n * ```typescript\n * const fetcher = createOpenAPIFetcher({\n * baseUrl: 'https://api.example.com',\n * endpoint: '/equipment',\n * auth: { type: 'bearer', token: process.env.API_TOKEN }\n * });\n *\n * // Use with Pulse\n * <Pulse fetcher={fetcher} interval={5000} />\n * ```\n */\nexport function createOpenAPIFetcher<T = unknown>(\n config: OpenAPISourceConfig<T>\n): () => Promise<T> {\n const { baseUrl, endpoint, method = 'get', params, body, headers = {}, auth, schema } = config;\n\n // Validate URLs (SSRF prevention)\n const validatedBaseUrl = validateUrlSafe(baseUrl);\n validateEndpoint(endpoint);\n\n return async (): Promise<T> => {\n // Build URL with query params\n const url = new URL(endpoint, validatedBaseUrl.toString());\n if (params) {\n Object.entries(params).forEach(([key, value]) => {\n url.searchParams.append(key, String(value));\n });\n }\n\n // Build headers\n const requestHeaders: Record<string, string> = {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n ...headers,\n };\n\n // Add auth\n if (auth) {\n if (auth.type === 'bearer' && auth.token) {\n requestHeaders['Authorization'] = `Bearer ${auth.token}`;\n } else if (auth.type === 'apiKey' && auth.apiKey) {\n requestHeaders[auth.headerName ?? 'X-API-Key'] = auth.apiKey;\n }\n }\n\n // Make request (only include body for methods that support it)\n const supportsBody = ['post', 'put', 'patch', 'delete'].includes(method);\n const response = await fetch(url.toString(), {\n method: method.toUpperCase(),\n headers: requestHeaders,\n body: supportsBody && body ? JSON.stringify(body) : null,\n redirect: 'error', // Prevent SSRF via 301/302 redirect to internal addresses\n });\n\n // Sanitize error message (don't expose server details)\n if (!response.ok) {\n const safeStatus = response.status;\n throw new Error('API error: ' + safeStatus);\n }\n\n const result = await response.json();\n\n // Validate with schema if provided\n if (schema) {\n return schema.parse(result) as T;\n }\n\n return result as T;\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/parser/OpenAPIParser.ts","../src/parser/SchemaResolver.ts","../src/compiler/ZodSchemaGenerator.ts","../src/compiler/TypeGenerator.ts","../src/compiler/CollectionProviderGenerator.ts","../src/compiler/ActionGenerator.ts","../src/compiler/ClientGenerator.ts","../src/utils/EndpointFilter.ts","../src/utils/ApprovedSpecsValidator.ts","../src/prebuild/OpenAPIPlugin.ts","../src/sources/openapi.ts"],"names":["path","isSafe","fs","URL","isIP"],"mappings":"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","file":"index.mjs","sourcesContent":["import SwaggerParser from '@apidevtools/swagger-parser';\nimport type { OpenAPIDocument } from '../types';\n\nexport interface ParseOptions {\n /** Whether to dereference $ref (default: true) */\n dereference?: boolean;\n\n /** Whether to validate the spec (default: true) */\n validate?: boolean;\n}\n\nexport interface ParseResult {\n /** Parsed and normalized OpenAPI document */\n document: OpenAPIDocument;\n\n /** OpenAPI version (3.0.x or 3.1.x) */\n version: string;\n\n /** Whether the spec was dereferenced */\n dereferenced: boolean;\n}\n\n/**\n * OpenAPI spec parser and validator\n *\n * Handles both OpenAPI 3.0 and 3.1 specs.\n * Can parse from URL or local file path.\n */\nexport class OpenAPIParser {\n /**\n * Parse an OpenAPI specification from URL or file path\n *\n * @param specPath - URL or local file path to OpenAPI spec\n * @param options - Parsing options\n * @returns Parsed and validated OpenAPI document\n *\n * @example\n * ```typescript\n * const parser = new OpenAPIParser();\n * const result = await parser.parse('https://api.example.com/openapi.json');\n * console.log(`Parsed OpenAPI ${result.version}`);\n * ```\n */\n async parse(specPath: string, options: ParseOptions = {}): Promise<ParseResult> {\n const { dereference = true, validate = true } = options;\n\n try {\n // Parse and optionally dereference the spec\n const api = await SwaggerParser.parse(specPath);\n\n // Validate the spec structure\n if (validate) {\n await SwaggerParser.validate(api);\n }\n\n // Dereference $ref pointers if requested\n let document: OpenAPIDocument;\n if (dereference) {\n document = (await SwaggerParser.dereference(api)) as OpenAPIDocument;\n } else {\n document = api as OpenAPIDocument;\n }\n\n // Detect version\n const version = this.detectVersion(document);\n\n return {\n document,\n version,\n dereferenced: dereference,\n };\n } catch (error) {\n throw this.enhanceError(error, specPath);\n }\n }\n\n /**\n * Detect OpenAPI version from document\n */\n private detectVersion(document: OpenAPIDocument): string {\n // Access the openapi property - it's always present in valid OpenAPI 3.x documents\n // The 'openapi' field is a required string in OpenAPI 3.x specifications\n const openapiVersion =\n 'openapi' in document ? (document as unknown as { openapi: string }).openapi : undefined;\n if (openapiVersion !== undefined) {\n return openapiVersion;\n }\n throw new Error('Invalid OpenAPI document: missing openapi version field');\n }\n\n /**\n * Enhance error messages with context\n */\n private enhanceError(error: unknown, specPath: string): Error {\n if (error instanceof Error) {\n const message = `Failed to parse OpenAPI spec from \"${specPath}\": ${error.message}`;\n const enhancedError = new Error(message);\n // Preserve original stack trace if available\n if (error.stack !== undefined) {\n enhancedError.stack = error.stack;\n }\n return enhancedError;\n }\n return new Error(`Failed to parse OpenAPI spec from \"${specPath}\": ${String(error)}`);\n }\n\n /**\n * Check if a spec path is a URL\n */\n static isURL(specPath: string): boolean {\n try {\n new URL(specPath);\n return true;\n } catch {\n return false;\n }\n }\n\n /**\n * Validate that a document is OpenAPI 3.x (not Swagger 2.x)\n */\n static isOpenAPI3(document: unknown): document is OpenAPIDocument {\n return (\n typeof document === 'object' &&\n document !== null &&\n 'openapi' in document &&\n typeof (document as any).openapi === 'string' &&\n (document as any).openapi.startsWith('3.')\n );\n }\n}\n","import type { OpenAPIV3, OpenAPIV3_1 } from 'openapi-types';\n\ntype SchemaObject = OpenAPIV3.SchemaObject | OpenAPIV3_1.SchemaObject;\n\n/**\n * Resolves schemas from OpenAPI documents\n *\n * Handles extracting and normalizing schemas for code generation.\n */\nexport class SchemaResolver {\n /**\n * @param document - Fully dereferenced OpenAPI document. Pass the result of\n * SwaggerParser.dereference() or OpenAPIParser.parse(). Passing a document\n * with unresolved $ref objects will produce console warnings and undefined\n * returns from schema extraction methods.\n */\n constructor(private document: OpenAPIV3.Document | OpenAPIV3_1.Document) {}\n\n /**\n * Get schema for a specific path and method.\n *\n * Tries `preferredResponseCode` first (default `'200'`). If that code is\n * absent or has no JSON schema, falls back through other 2xx codes in\n * priority order so that REST-correct `201 Created` responses are resolved\n * automatically.\n *\n * @param path - API path (e.g., '/equipment')\n * @param method - HTTP method (e.g., 'get')\n * @param preferredResponseCode - Response code to try first (default: '200')\n * @returns Schema object or undefined\n */\n getResponseSchema(\n path: string,\n method: string,\n preferredResponseCode: string = '200'\n ): SchemaObject | undefined {\n const pathItem = this.document.paths?.[path];\n if (!pathItem) return undefined;\n\n const operation = pathItem[method.toLowerCase() as keyof typeof pathItem] as\n | OpenAPIV3.OperationObject\n | OpenAPIV3_1.OperationObject\n | undefined;\n\n const responses = operation?.responses;\n if (!responses) return undefined;\n\n // Helper: extract JSON schema from a response object\n const extractSchema = (responseCode: string): SchemaObject | undefined => {\n const response = responses[responseCode] as\n | OpenAPIV3.ResponseObject\n | OpenAPIV3_1.ResponseObject\n | undefined;\n if (!response) return undefined;\n const content = response.content?.['application/json'];\n const schema = content?.schema;\n if (!schema) return undefined;\n if ('$ref' in schema) {\n // Warn but return the $ref as-is — callers that need a resolved schema\n // should use a dereferenced document. Silently dropping it here loses\n // valid schema references from the generator pipeline.\n console.warn(\n `[SchemaResolver] Unresolved $ref in schema for ${path}. ` +\n `Ensure the document is fully dereferenced before passing to SchemaResolver.`\n );\n return schema as SchemaObject;\n }\n return schema as SchemaObject;\n };\n\n // Try the preferred code first (preserves existing behaviour for 200-based specs)\n const preferred = extractSchema(preferredResponseCode);\n if (preferred) return preferred;\n\n // Cascade through remaining 2xx codes in priority order\n const fallbackCodes = ['200', '201', '202', '204', '2XX', '2xx'];\n for (const code of fallbackCodes) {\n if (code === preferredResponseCode) continue; // already tried\n const schema = extractSchema(code);\n if (schema) return schema;\n }\n\n return undefined;\n }\n\n /**\n * Get the request body schema for a specific path and method.\n *\n * Extracts the application/json schema from the operation's requestBody.\n * Returns undefined if the operation has no requestBody or no JSON content.\n *\n * @param path - API path (e.g., '/supplies/request')\n * @param method - HTTP method (e.g., 'post')\n * @returns Schema object or undefined\n */\n getRequestBodySchema(path: string, method: string): SchemaObject | undefined {\n const pathItem = this.document.paths?.[path];\n if (!pathItem) return undefined;\n\n const operation = pathItem[method.toLowerCase() as keyof typeof pathItem] as\n | OpenAPIV3.OperationObject\n | OpenAPIV3_1.OperationObject\n | undefined;\n\n if (!operation) return undefined;\n\n const rawRequestBody = operation.requestBody;\n if (!rawRequestBody) return undefined;\n\n // Guard: $refs must be resolved before reaching SchemaResolver.\n // This package uses @apidevtools/swagger-parser for dereferencing — if a\n // ReferenceObject appears here, the caller passed a non-dereferenced document.\n if ('$ref' in rawRequestBody) {\n console.warn(\n `[SchemaResolver] Unresolved $ref in requestBody for ${method.toUpperCase()} ${path}. ` +\n `Ensure the document is fully dereferenced before passing to SchemaResolver.`\n );\n return undefined;\n }\n\n const requestBody = rawRequestBody as\n | OpenAPIV3.RequestBodyObject\n | OpenAPIV3_1.RequestBodyObject;\n\n const content = requestBody.content?.['application/json'];\n const schema = content?.schema;\n if (!schema) return undefined;\n if ('$ref' in schema) {\n console.warn(\n `[SchemaResolver] Unresolved $ref in schema for ${path}. ` +\n `Ensure the document is fully dereferenced before passing to SchemaResolver.`\n );\n return undefined;\n }\n return schema as SchemaObject;\n }\n\n /**\n * Get all schemas defined in components\n */\n getAllSchemas(): Record<string, SchemaObject> {\n return (this.document.components?.schemas || {}) as Record<string, SchemaObject>;\n }\n\n /**\n * Get a specific component schema by name\n */\n getComponentSchema(name: string): SchemaObject | undefined {\n return this.document.components?.schemas?.[name] as SchemaObject | undefined;\n }\n\n /**\n * Extract all endpoints from the OpenAPI document\n */\n getAllEndpoints(): Array<{\n path: string;\n method: string;\n operationId?: string;\n summary?: string;\n description?: string;\n }> {\n const endpoints: ReturnType<typeof this.getAllEndpoints> = [];\n\n for (const [path, pathItem] of Object.entries(this.document.paths || {})) {\n if (!pathItem) continue;\n\n const methods = ['get', 'post', 'put', 'patch', 'delete', 'options', 'head'] as const;\n\n for (const method of methods) {\n const operation = pathItem[method] as\n | OpenAPIV3.OperationObject\n | OpenAPIV3_1.OperationObject\n | undefined;\n\n if (operation) {\n endpoints.push({\n path,\n method,\n ...(operation.operationId !== undefined && { operationId: operation.operationId }),\n ...(operation.summary !== undefined && { summary: operation.summary }),\n ...(operation.description !== undefined && { description: operation.description }),\n });\n }\n }\n }\n\n return endpoints;\n }\n}\n","import type { OpenAPIV3, OpenAPIV3_1 } from 'openapi-types';\nimport { z } from 'zod';\nimport isSafe from 'safe-regex';\n\ntype SchemaObject = OpenAPIV3.SchemaObject | OpenAPIV3_1.SchemaObject;\n\nexport interface ZodGenerationOptions {\n /** Whether to make all fields optional by default */\n optionalByDefault?: boolean;\n\n /** Custom name for the generated schema */\n schemaName?: string;\n\n /** If true, emit only the schema + type — no import statements */\n bare?: boolean;\n}\n\n/**\n * Generates Zod schemas from OpenAPI schema objects\n *\n * This is the CORE of the \"mathematically proven code\" value proposition.\n * OpenAPI schemas → Zod validation = runtime safety guarantees.\n */\nexport class ZodSchemaGenerator {\n /**\n * Generate a Zod schema from an OpenAPI schema object\n *\n * @param schema - OpenAPI schema object\n * @param options - Generation options\n * @returns Zod schema code as string\n */\n generate(schema: SchemaObject, options: ZodGenerationOptions = {}): string {\n const { schemaName = 'GeneratedSchema', bare = false } = options;\n\n const zodSchemaCode = this.schemaToZod(schema);\n\n const body = `export const ${schemaName} = ${zodSchemaCode};\n\nexport type ${schemaName}Type = z.infer<typeof ${schemaName}>;\n`;\n\n if (bare) {\n return body;\n }\n\n return `import { z } from 'zod';\nimport isSafe from 'safe-regex';\n\n${body}`;\n }\n\n /**\n * Convert OpenAPI schema to Zod schema code\n */\n private schemaToZod(schema: SchemaObject, depth = 0): string {\n // Gracefully handle unresolved $ref encountered during recursion\n if ('$ref' in schema && (schema as any).$ref) {\n const refPath = (schema as any).$ref;\n console.warn(\n `\\u26a0\\ufe0f Unresolved $ref encountered: ${refPath} \\u2014 generating z.unknown()`\n );\n return `z.unknown() /* unresolved $ref: ${refPath} */`;\n }\n\n // Handle nullable (OpenAPI 3.0 nullable, OpenAPI 3.1 type array with null)\n const isNullable = 'nullable' in schema && schema.nullable === true;\n\n // Base schema generation\n let baseSchema = this.schemaTypeToZod(schema);\n\n // Add description if present\n if (schema.description) {\n const escapedDesc = schema.description.replace(/'/g, \"\\\\'\");\n baseSchema += `.describe('${escapedDesc}')`;\n }\n\n // Handle nullable\n if (isNullable) {\n baseSchema += '.nullable()';\n }\n\n // Handle optional (not in required array)\n // Note: This is handled at the object level, not here\n\n return baseSchema;\n }\n\n /**\n * Map OpenAPI type to Zod schema\n */\n private schemaTypeToZod(schema: SchemaObject): string {\n // Handle $ref (shouldn't happen after dereferencing, but just in case)\n if ('$ref' in schema) {\n throw new Error('$ref found in schema - ensure spec is dereferenced');\n }\n\n // Handle allOf, anyOf, oneOf\n if ('allOf' in schema && schema.allOf) {\n return this.handleComposition(schema.allOf, 'intersection');\n }\n if ('anyOf' in schema && schema.anyOf) {\n return this.handleComposition(schema.anyOf, 'union');\n }\n if ('oneOf' in schema && schema.oneOf) {\n return this.handleComposition(schema.oneOf, 'discriminatedUnion');\n }\n\n // Handle type-based schemas\n const type = schema.type;\n\n // Infer type: object when properties are present (common in real-world specs)\n // OpenAPI spec says: if \"properties\" is defined, the schema describes an object\n if (!type && schema.properties) {\n return this.objectToZod(schema as OpenAPIV3.NonArraySchemaObject);\n }\n\n // Also infer object if additionalProperties is set but no type\n if (!type && schema.additionalProperties !== undefined) {\n return this.objectToZod(schema as OpenAPIV3.NonArraySchemaObject);\n }\n\n switch (type) {\n case 'string':\n return this.stringToZod(schema);\n case 'number':\n case 'integer':\n return this.numberToZod(schema);\n case 'boolean':\n return 'z.boolean()';\n case 'array':\n return this.arrayToZod(schema as OpenAPIV3.ArraySchemaObject);\n case 'object':\n return this.objectToZod(schema as OpenAPIV3.NonArraySchemaObject);\n case 'null':\n return 'z.null()';\n default:\n // No type specified - allow any\n return 'z.unknown()';\n }\n }\n\n /**\n * Handle string schemas with formats and enums\n */\n private stringToZod(schema: SchemaObject): string {\n // Handle enum\n if (schema.enum && schema.enum.length > 0) {\n const values = schema.enum.map((v: unknown) => `'${v}'`).join(', ');\n return `z.enum([${values}])`;\n }\n\n let base = 'z.string()';\n\n // Handle string formats\n if ('format' in schema && schema.format) {\n switch (schema.format) {\n case 'email':\n base += '.email()';\n break;\n case 'uri':\n case 'url':\n base += '.url()';\n break;\n case 'uuid':\n base += '.uuid()';\n break;\n case 'date-time':\n base += '.datetime()';\n break;\n case 'date':\n base += '.date()';\n break;\n // Add more formats as needed\n }\n }\n\n // Handle string constraints\n if ('minLength' in schema && typeof schema.minLength === 'number') {\n base += `.min(${schema.minLength})`;\n }\n if ('maxLength' in schema && typeof schema.maxLength === 'number') {\n base += `.max(${schema.maxLength})`;\n }\n if ('pattern' in schema && schema.pattern) {\n // ✅ SECURITY FIX: Validate regex safety to prevent ReDoS\n if (!isSafe(schema.pattern)) {\n console.warn(`⚠️ Unsafe regex pattern detected: ${schema.pattern}`);\n console.warn(' Skipping pattern validation to prevent ReDoS');\n // Skip the unsafe pattern - better safe than DoS\n } else {\n const escapedPattern = schema.pattern.replace(/\\\\/g, '\\\\\\\\');\n base += `.regex(/${escapedPattern}/)`;\n }\n }\n\n return base;\n }\n\n /**\n * Handle number/integer schemas\n */\n private numberToZod(schema: SchemaObject): string {\n let base = schema.type === 'integer' ? 'z.number().int()' : 'z.number()';\n\n if ('minimum' in schema && typeof schema.minimum === 'number') {\n base += `.min(${schema.minimum})`;\n }\n if ('maximum' in schema && typeof schema.maximum === 'number') {\n base += `.max(${schema.maximum})`;\n }\n if ('exclusiveMinimum' in schema && typeof schema.exclusiveMinimum === 'number') {\n base += `.gt(${schema.exclusiveMinimum})`;\n }\n if ('exclusiveMaximum' in schema && typeof schema.exclusiveMaximum === 'number') {\n base += `.lt(${schema.exclusiveMaximum})`;\n }\n\n return base;\n }\n\n /**\n * Handle array schemas\n */\n private arrayToZod(schema: OpenAPIV3.ArraySchemaObject): string {\n if (!schema.items) {\n return 'z.array(z.unknown())';\n }\n\n const itemSchema = this.schemaToZod(schema.items as SchemaObject);\n let base = `z.array(${itemSchema})`;\n\n if ('minItems' in schema && typeof schema.minItems === 'number') {\n base += `.min(${schema.minItems})`;\n }\n if ('maxItems' in schema && typeof schema.maxItems === 'number') {\n base += `.max(${schema.maxItems})`;\n }\n\n return base;\n }\n\n /**\n * Handle object schemas\n */\n private objectToZod(schema: OpenAPIV3.NonArraySchemaObject): string {\n if (!schema.properties || Object.keys(schema.properties).length === 0) {\n // Empty object or record type\n if (schema.additionalProperties) {\n const valueSchema =\n typeof schema.additionalProperties === 'object'\n ? this.schemaToZod(schema.additionalProperties as SchemaObject)\n : 'z.unknown()';\n return `z.record(${valueSchema})`;\n }\n return 'z.object({})';\n }\n\n const properties = schema.properties;\n const required = schema.required || [];\n\n const fields = Object.entries(properties)\n .map(([key, propSchema]) => {\n const isRequired = required.includes(key);\n let fieldSchema = this.schemaToZod(propSchema as SchemaObject);\n\n if (!isRequired) {\n fieldSchema += '.optional()';\n }\n\n // Escape key if needed (e.g., if it has special characters)\n const safeKey = /^[a-zA-Z_][a-zA-Z0-9_]*$/.test(key) ? key : `'${key}'`;\n\n return ` ${safeKey}: ${fieldSchema}`;\n })\n .join(',\\n');\n\n let result = `z.object({\\n${fields}\\n})`;\n\n // Handle additional properties\n if (schema.additionalProperties === false) {\n result += '.strict()';\n } else if (schema.additionalProperties && typeof schema.additionalProperties === 'object') {\n const valueSchema = this.schemaToZod(schema.additionalProperties as SchemaObject);\n result += `.catchall(${valueSchema})`;\n }\n\n return result;\n }\n\n /**\n * Handle allOf, anyOf, oneOf composition\n */\n private handleComposition(\n schemas: Array<SchemaObject | OpenAPIV3.ReferenceObject>,\n type: 'intersection' | 'union' | 'discriminatedUnion'\n ): string {\n const zodSchemas = schemas\n .filter((s): s is SchemaObject => !('$ref' in s))\n .map((s) => this.schemaToZod(s));\n\n if (zodSchemas.length === 0) {\n return 'z.unknown()';\n }\n\n switch (type) {\n case 'intersection':\n // allOf - all schemas must match\n return zodSchemas.reduce((acc, curr) => `${acc}.and(${curr})`);\n case 'union':\n // anyOf - at least one schema must match\n return `z.union([${zodSchemas.join(', ')}])`;\n case 'discriminatedUnion':\n // oneOf - exactly one schema must match\n // For now, treat as union (full discriminated union support is complex)\n return `z.union([${zodSchemas.join(', ')}])`;\n default:\n return 'z.unknown()';\n }\n }\n}\n","import { printNode, zodToTs, createAuxiliaryTypeStore } from 'zod-to-ts';\nimport { z } from 'zod';\n\nexport interface TypeGenerationOptions {\n /** Name for the generated type */\n typeName?: string;\n\n /** Whether to include JSDoc comments */\n includeJsDoc?: boolean;\n}\n\n/**\n * Generates TypeScript types from Zod schemas\n *\n * Converts runtime-validatable Zod schemas into compile-time TypeScript types.\n */\nexport class TypeGenerator {\n /**\n * Generate TypeScript type definition from a Zod schema\n *\n * @param zodSchema - Zod schema object\n * @param options - Generation options\n * @returns TypeScript type definition as string\n *\n * @example\n * ```typescript\n * const schema = z.object({ name: z.string(), age: z.number() });\n * const generator = new TypeGenerator();\n * const typeCode = generator.generate(schema, { typeName: 'User' });\n * // export type User = { name: string; age: number; };\n * ```\n */\n generate(zodSchema: z.ZodTypeAny, options: TypeGenerationOptions = {}): string {\n const { typeName = 'GeneratedType', includeJsDoc = true } = options;\n\n try {\n // Create auxiliary type store for recursive types (required in zod-to-ts v2+)\n const auxiliaryTypeStore = createAuxiliaryTypeStore();\n\n // Use zod-to-ts to convert Zod schema to TypeScript AST\n const { node } = zodToTs(zodSchema, { auxiliaryTypeStore });\n\n // Convert AST to TypeScript code\n const typeCode = printNode(node);\n\n // Build the complete type definition\n let result = '';\n\n if (includeJsDoc && zodSchema.description) {\n result += `/**\\n * ${zodSchema.description}\\n */\\n`;\n }\n\n result += `export type ${typeName} = ${typeCode};\\n`;\n\n return result;\n } catch (error) {\n throw new Error(\n `Failed to generate TypeScript type for ${typeName}: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n }\n\n /**\n * Generate type from Zod schema code string\n *\n * This is used when we have the schema as code (from ZodSchemaGenerator)\n * rather than as a runtime Zod object.\n *\n * @param zodSchemaCode - Zod schema as TypeScript code string\n * @param typeName - Name for the generated type\n * @returns TypeScript type definition\n */\n generateFromCode(zodSchemaCode: string, typeName: string): string {\n // For code-based generation, we rely on z.infer<>\n // The ZodSchemaGenerator already includes this\n return `export type ${typeName} = z.infer<typeof ${typeName}Schema>;\\n`;\n }\n\n /**\n * Generate multiple types from a map of Zod schemas\n *\n * @param schemas - Map of schema names to Zod schemas\n * @returns Object with type definitions for each schema\n */\n generateMultiple(\n schemas: Record<string, z.ZodTypeAny>,\n options: Omit<TypeGenerationOptions, 'typeName'> = {}\n ): Record<string, string> {\n const results: Record<string, string> = {};\n\n for (const [name, schema] of Object.entries(schemas)) {\n results[name] = this.generate(schema, { ...options, typeName: name });\n }\n\n return results;\n }\n\n /**\n * Combine multiple type definitions into a single TypeScript module\n *\n * @param types - Map of type names to type code\n * @param imports - Additional imports to include\n * @returns Complete TypeScript module code\n */\n createModule(types: Record<string, string>, imports: string[] = []): string {\n let module = '';\n\n // Add imports\n if (imports.length > 0) {\n module += imports.join('\\n') + '\\n\\n';\n }\n\n // Add type definitions\n module += Object.values(types).join('\\n');\n\n return module;\n }\n}\n","import type { OpenAPIDocument } from '../types';\nimport { SchemaResolver } from '../parser/SchemaResolver';\n\nexport interface CollectionConfig {\n /** API endpoint path */\n endpoint: string;\n\n /** Field to use as slug/ID */\n slugField: string;\n\n /** HTTP method (default: 'get') */\n method?: string;\n\n /** Collection name (defaults to sanitized endpoint) */\n name?: string;\n}\n\nexport interface ProviderGenerationOptions {\n /** Name for the provider class */\n providerName?: string;\n\n /** Base URL for the API */\n baseUrl?: string;\n\n /** Auth configuration */\n auth?: {\n type: 'bearer' | 'apiKey';\n headerName?: string;\n };\n\n /** If true, emit only the class code without import statements */\n bare?: boolean;\n}\n\n/**\n * Generates CollectionProvider implementations from OpenAPI specs\n *\n * This is the bridge between OpenAPI APIs and Stackwright's content system.\n */\nexport class CollectionProviderGenerator {\n constructor(private document: OpenAPIDocument) {}\n\n /**\n * Generate a CollectionProvider implementation for a specific endpoint\n *\n * @param config - Collection configuration\n * @param options - Generation options\n * @returns TypeScript code for the provider\n */\n generate(config: CollectionConfig, options: ProviderGenerationOptions = {}): string {\n const {\n providerName = this.generateProviderName(config),\n baseUrl = this.getBaseUrl(),\n auth,\n bare = false,\n } = options;\n\n const { endpoint, slugField, method: rawMethod = 'get', name } = config;\n const method = rawMethod.toLowerCase();\n const collectionName = name || this.sanitizePath(endpoint);\n\n const resolver = new SchemaResolver(this.document);\n const schema = resolver.getResponseSchema(endpoint, method);\n\n if (!schema) {\n throw new Error(`No response schema found for ${method.toUpperCase()} ${endpoint}`);\n }\n\n // Determine if response is an array or object\n const isArray = schema.type === 'array';\n\n const schemaName = `${this.capitalize(collectionName)}Schema`;\n\n // Build params object, conditionally including auth\n const params: {\n providerName: string;\n collectionName: string;\n endpoint: string;\n slugField: string;\n method: string;\n baseUrl: string;\n schemaName: string;\n isArray: boolean;\n bare: boolean;\n auth?: { type: string; headerName?: string };\n } = {\n providerName,\n collectionName,\n endpoint,\n slugField,\n method,\n baseUrl,\n schemaName,\n isArray,\n bare,\n };\n\n // Only include auth if it's defined (exactOptionalPropertyTypes)\n if (auth !== undefined) {\n params.auth = auth;\n }\n\n return this.generateProviderCode(params);\n }\n\n /**\n * Generate the complete provider code\n */\n private generateProviderCode(params: {\n providerName: string;\n collectionName: string;\n endpoint: string;\n slugField: string;\n method: string;\n baseUrl: string;\n auth?: { type: string; headerName?: string };\n schemaName: string;\n isArray: boolean;\n bare: boolean;\n }): string {\n const {\n providerName,\n collectionName,\n endpoint,\n slugField,\n method,\n baseUrl,\n auth,\n schemaName,\n isArray,\n bare,\n } = params;\n\n const authHeader = this.generateAuthHeader(auth);\n // Use the array schema for list endpoints\n const arraySchemaName = `${schemaName.replace(/Schema$/, '')}ArraySchema`;\n const validationSchema = isArray ? arraySchemaName : schemaName;\n\n const imports = bare\n ? ''\n : `import type { CollectionProvider, CollectionItem } from '@stackwright/collections';\nimport { ${isArray ? arraySchemaName : schemaName}} } from './schemas';\n\n`;\n\n return `${imports}/**\n * CollectionProvider for ${collectionName}\n *\n * Generated from OpenAPI endpoint: ${method.toUpperCase()} ${endpoint}\n */\nexport class ${providerName} implements CollectionProvider {\n private baseUrl: string;\n private authToken?: string;\n\n constructor(config?: { baseUrl?: string; authToken?: string }) {\n this.baseUrl = config?.baseUrl || '${baseUrl}';\n this.authToken = config?.authToken;\n }\n\n /**\n * Get collection name\n */\n getName(): string {\n return '${collectionName}';\n }\n\n /**\n * List all items in the collection\n */\n async list(options?: {\n limit?: number;\n offset?: number;\n filters?: Record<string, unknown>;\n }): Promise<CollectionItem[]> {\n const url = new URL(\\`\\${this.baseUrl}${endpoint}\\`);\n\n // Add pagination/filter params if supported\n if (options?.limit) {\n url.searchParams.set('limit', String(options.limit));\n }\n if (options?.offset) {\n url.searchParams.set('offset', String(options.offset));\n }\n\n const response = await fetch(url.toString(), {\n method: '${method.toUpperCase()}',\n headers: this.getHeaders(),\n });\n\n if (!response.ok) {\n throw new Error(\\`Failed to fetch ${collectionName}: \\${response.statusText}\\`);\n }\n\n const data = await response.json();\n \n // Validate response with Zod schema\n const validated = ${validationSchema}.parse(data);\n \n // Convert to CollectionItem format\n return ${isArray ? 'validated' : '[validated]'}.map((item: any) => this.toCollectionItem(item));\n }\n\n /**\n * Get a single item by slug\n */\n async get(slug: string): Promise<CollectionItem | null> {\n ${this.generateGetMethod(endpoint, slugField, isArray, collectionName, schemaName)}\n }\n\n /**\n * Convert API response to CollectionItem\n */\n private toCollectionItem(item: any): CollectionItem {\n return {\n slug: String(item.${slugField}),\n title: item.${this.guessTitle(slugField)},\n data: item,\n metadata: {\n source: '${collectionName}',\n _raw: item,\n },\n };\n }\n\n /**\n * Get request headers including auth\n */\n private getHeaders(): Record<string, string> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n };\n\n ${authHeader}\n\n return headers;\n }\n}\n`;\n }\n\n /**\n * Generate get method implementation\n */\n private generateGetMethod(\n endpoint: string,\n slugField: string,\n isArray: boolean,\n collectionName: string,\n schemaName: string\n ): string {\n if (endpoint.includes('{id}') || endpoint.includes(':id')) {\n // Detail endpoint exists\n const detailEndpoint = endpoint.replace('{id}', '${slug}').replace(':id', '${slug}');\n return `const url = \\`\\${this.baseUrl}${detailEndpoint}\\`;\n \n const response = await fetch(url, {\n method: 'GET',\n headers: this.getHeaders(),\n });\n\n if (!response.ok) {\n if (response.status === 404) {\n return null;\n }\n throw new Error(\\`Failed to fetch ${collectionName} item: \\${response.statusText}\\`);\n }\n\n const data = await response.json();\n const validated = ${schemaName}.parse(data);\n \n return this.toCollectionItem(validated);`;\n } else {\n // No detail endpoint - list all and filter\n return `const items = await this.list();\n return items.find((item) => item.slug === slug) || null;`;\n }\n }\n\n /**\n * Generate auth header code\n */\n private generateAuthHeader(auth?: { type: string; headerName?: string }): string {\n if (!auth) {\n return '// No authentication configured';\n }\n\n if (auth.type === 'bearer') {\n return `if (this.authToken) {\n headers['Authorization'] = \\`Bearer \\${this.authToken}\\`;\n }`;\n }\n\n if (auth.type === 'apiKey') {\n const headerName = auth.headerName || 'X-API-Key';\n return `if (this.authToken) {\n headers['${headerName}'] = this.authToken;\n }`;\n }\n\n return '// Unknown auth type';\n }\n\n /**\n * Get base URL from OpenAPI spec\n */\n private getBaseUrl(): string {\n if ('servers' in this.document && this.document.servers && this.document.servers.length > 0) {\n const firstServer = this.document.servers[0];\n if (firstServer !== undefined) {\n return firstServer.url;\n }\n }\n return 'http://localhost:3000';\n }\n\n /**\n * Generate provider class name from config\n */\n private generateProviderName(config: CollectionConfig): string {\n const name = config.name || this.sanitizePath(config.endpoint);\n return `${this.capitalize(name)}Provider`;\n }\n\n /**\n * Sanitize path to valid identifier\n */\n private sanitizePath(path: string): string {\n return path.replace(/^\\//, '').replace(/\\//g, '-').replace(/[{}:]/g, '').replace(/-+/g, '-');\n }\n\n /**\n * Capitalize string\n */\n private capitalize(str: string): string {\n return str\n .split('-')\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join('');\n }\n\n /**\n * Guess which field might be a good title\n */\n private guessTitle(slugField: string): string {\n // Common title field names\n const titleFields = ['title', 'name', 'label', 'displayName'];\n const firstField = titleFields[0];\n\n // Use slugField as fallback\n return firstField !== undefined ? firstField : `item.${slugField}`;\n }\n}\n","import type { OpenAPIV3, OpenAPIV3_1 } from 'openapi-types';\nimport type { OpenAPIDocument, ActionConfig } from '../types';\nimport { SchemaResolver } from '../parser/SchemaResolver';\nimport { ZodSchemaGenerator } from './ZodSchemaGenerator';\n\ntype SchemaObject = OpenAPIV3.SchemaObject | OpenAPIV3_1.SchemaObject;\n\ninterface ProcessedAction {\n config: ActionConfig;\n camelName: string; // e.g. createSupplyRequest\n pascalName: string; // e.g. CreateSupplyRequest\n inputSchemaName: string; // e.g. CreateSupplyRequestInputSchema\n outputSchemaName: string; // e.g. CreateSupplyRequestOutputSchema\n inputSchema: SchemaObject | undefined;\n outputSchema: SchemaObject | undefined;\n}\n\n/**\n * ActionGenerator\n *\n * Generates typed CollectionAction implementations from OpenAPI action configs.\n * Each configured action endpoint becomes a named export satisfying the\n * CollectionAction<TInput, TOutput> interface from @stackwright-pro/workflow.\n *\n * The generated actions.ts is the bridge between:\n * - stackwright.yml actions: config (what to generate)\n * - workflow YAML service: refs (how it's addressed at runtime)\n * - useWorkflow actions registry (where it executes)\n *\n * IoC note: This generator emits `import type { CollectionAction } from\n * '@stackwright-pro/workflow'` as a string. The generator package itself has\n * no dependency on @stackwright-pro/workflow — only the generated files do.\n */\nexport class ActionGenerator {\n private resolver: SchemaResolver;\n private zodGenerator: ZodSchemaGenerator;\n\n constructor(private document: OpenAPIDocument) {\n this.resolver = new SchemaResolver(document);\n this.zodGenerator = new ZodSchemaGenerator();\n }\n\n /**\n * Generate the complete actions.ts file content.\n *\n * @param actions - Action configs from stackwright.yml\n * @param integrationName - Used in the file header comment\n * @param clientClassName - Name of the generated API client class to import\n * @returns Complete TypeScript source for actions.ts\n */\n generate(actions: ActionConfig[], integrationName: string, clientClassName: string): string {\n if (actions.length === 0) {\n return this.generateEmptyFile(integrationName);\n }\n\n const processedActions = actions.map((config) => this.processAction(config));\n\n let code = this.generateHeader(integrationName);\n code += this.generateImports(clientClassName);\n code += '\\n';\n code += this.generateInlineSchemas(processedActions);\n code += '\\n';\n code += this.generateActionExports(processedActions);\n code += '\\n';\n code += this.generateRegistry(processedActions, integrationName);\n\n return code;\n }\n\n private processAction(config: ActionConfig): ProcessedAction {\n const method = config.method.toLowerCase();\n const inputSchema = this.resolver.getRequestBodySchema(config.endpoint, method);\n const outputSchema = this.resolver.getResponseSchema(config.endpoint, method);\n\n const camelName = this.toCamelCase(config.name);\n const pascalName = this.toPascalCase(config.name);\n\n return {\n config,\n camelName,\n pascalName,\n inputSchemaName: `${pascalName}InputSchema`,\n outputSchemaName: `${pascalName}OutputSchema`,\n inputSchema,\n outputSchema,\n };\n }\n\n private generateHeader(integrationName: string): string {\n return `/**\n * Generated CollectionAction implementations\n * Integration: ${integrationName}\n *\n * DO NOT EDIT — This file is auto-generated by @stackwright-pro/openapi\n * Regenerate by running: pnpm prebuild\n *\n * Each export satisfies the CollectionAction interface from @stackwright-pro/workflow.\n * Wire actions into useWorkflow via the \\`actions\\` option:\n *\n * import { actions } from '@/generated/${integrationName}/actions';\n * <WorkflowPage workflow={definition} actions={actions} />\n */\\n\\n`;\n }\n\n private generateImports(clientClassName: string): string {\n return `import { z } from 'zod';\nimport type { CollectionAction, CollectionActionRegistry } from '@stackwright-pro/workflow';\nimport { ${clientClassName} } from './client';\n\nconst _client = new ${clientClassName}();\\n`;\n }\n\n private generateInlineSchemas(actions: ProcessedAction[]): string {\n const lines: string[] = [\n '// ─── Inline Schemas ─────────────────────────────────────────────────────────',\n ];\n\n for (const action of actions) {\n const { inputSchemaName, outputSchemaName, inputSchema, outputSchema, config } = action;\n\n // Input schema\n if (inputSchema) {\n try {\n const zodCode = this.zodGenerator.generate(inputSchema, {\n schemaName: inputSchemaName,\n bare: true,\n });\n lines.push(zodCode);\n } catch {\n lines.push(`// WARNING: Could not generate input schema for ${config.endpoint}`);\n lines.push(`const ${inputSchemaName} = z.unknown();\\n`);\n }\n } else {\n lines.push(`// No requestBody defined for ${config.method} ${config.endpoint}`);\n lines.push(`const ${inputSchemaName} = z.unknown();\\n`);\n }\n\n // Output schema\n if (outputSchema) {\n try {\n const zodCode = this.zodGenerator.generate(outputSchema, {\n schemaName: outputSchemaName,\n bare: true,\n });\n lines.push(zodCode);\n } catch {\n lines.push(`// WARNING: Could not generate output schema for ${config.endpoint}`);\n lines.push(`const ${outputSchemaName} = z.unknown();\\n`);\n }\n } else {\n lines.push(`// No 2xx response schema defined for ${config.method} ${config.endpoint}`);\n lines.push(`const ${outputSchemaName} = z.unknown();\\n`);\n }\n }\n\n return lines.join('\\n') + '\\n';\n }\n\n private generateActionExports(actions: ProcessedAction[]): string {\n const lines: string[] = [\n '// ─── Action Exports ─────────────────────────────────────────────────────────',\n ];\n\n for (const action of actions) {\n const { config, camelName, inputSchemaName, outputSchemaName } = action;\n const safeName = config.name.replace(/'/g, \"\\\\'\");\n const safeDesc = config.description?.replace(/\\*\\//g, '* /');\n const methodName = this.endpointToClientMethod(config.endpoint, config.method);\n const jsDoc = safeDesc\n ? `/**\\n * ${safeDesc}\\n * Resolves service:${safeName} in workflow YAML.\\n */\\n`\n : `/** Resolves service:${safeName} in workflow YAML. */\\n`;\n\n lines.push(\n jsDoc +\n `export const ${camelName}: CollectionAction<\\n` +\n ` z.infer<typeof ${inputSchemaName}>,\\n` +\n ` z.infer<typeof ${outputSchemaName}>\\n` +\n `> = {\\n` +\n ` name: '${safeName}',\\n` +\n ` inputSchema: ${inputSchemaName},\\n` +\n ` outputSchema: ${outputSchemaName},\\n` +\n ` async execute(data) {\\n` +\n ` const validated = ${inputSchemaName}.parse(data);\\n` +\n ` const result = await _client.${methodName}({ body: validated });\\n` +\n ` return ${outputSchemaName}.parse(result);\\n` +\n ` },\\n` +\n `};\\n`\n );\n }\n\n return lines.join('\\n') + '\\n';\n }\n\n private generateRegistry(actions: ProcessedAction[], integrationName: string): string {\n const entries = actions\n .map((a) => {\n const safeName = a.config.name.replace(/'/g, \"\\\\'\");\n return ` '${safeName}': ${a.camelName},`;\n })\n .join('\\n');\n\n return (\n `// ─── Registry ────────────────────────────────────────────────────────────────\\n` +\n `/**\\n` +\n ` * Complete action registry for this integration.\\n` +\n ` * Pass directly to useWorkflow or WorkflowPage:\\n` +\n ` *\\n` +\n ` * import { actions } from '@/generated/${integrationName}/actions';\\n` +\n ` * const { send } = useWorkflow(definition, { actions });\\n` +\n ` */\\n` +\n `export const actions: CollectionActionRegistry = {\\n` +\n `${entries}\\n` +\n `};\\n`\n );\n }\n\n private generateEmptyFile(integrationName: string): string {\n return (\n `/**\\n` +\n ` * Generated CollectionAction implementations\\n` +\n ` * Integration: ${integrationName}\\n` +\n ` *\\n` +\n ` * DO NOT EDIT — This file is auto-generated by @stackwright-pro/openapi\\n` +\n ` *\\n` +\n ` * No actions configured for this integration.\\n` +\n ` * Add an actions: key to this integration in stackwright.yml to generate actions.\\n` +\n ` */\\n` +\n `\\n` +\n `import type { CollectionActionRegistry } from '@stackwright-pro/workflow';\\n` +\n `\\n` +\n `export const actions: CollectionActionRegistry = {};\\n`\n );\n }\n\n /** Derives the client method name from endpoint + method (best-effort) */\n private endpointToClientMethod(endpoint: string, method: string): string {\n // e.g. POST /supplies/request → postSuppliesRequest\n const parts = endpoint\n .split('/')\n .filter(Boolean)\n .filter((p) => !p.startsWith('{')) // strip path params\n .map((p) => p.replace(/-/g, '_'));\n\n const prefix = method.toLowerCase();\n const suffix = parts.map((p) => this.capitalize(p)).join('');\n return `${prefix}${suffix}`;\n }\n\n private toCamelCase(str: string): string {\n const parts = str.split(/[-_]/);\n return parts.map((p, i) => (i === 0 ? p.toLowerCase() : this.capitalize(p))).join('');\n }\n\n private toPascalCase(str: string): string {\n return str\n .split(/[-_]/)\n .map((p) => this.capitalize(p))\n .join('');\n }\n\n private capitalize(str: string): string {\n return str.length > 0 ? str[0]!.toUpperCase() + str.slice(1) : '';\n }\n}\n","import type { OpenAPIV3, OpenAPIV3_1 } from 'openapi-types';\nimport type { OpenAPIDocument } from '../types';\nimport { SchemaResolver } from '../parser/SchemaResolver';\nimport isSafe from 'safe-regex';\n\ntype OperationObject = OpenAPIV3.OperationObject | OpenAPIV3_1.OperationObject;\ntype ParameterObject = OpenAPIV3.ParameterObject | OpenAPIV3_1.ParameterObject;\ntype SchemaObject = OpenAPIV3.SchemaObject | OpenAPIV3_1.SchemaObject;\ntype RequestBodyObject = OpenAPIV3.RequestBodyObject | OpenAPIV3_1.RequestBodyObject;\n\n/**\n * Mapping of operationId to schema names\n */\nexport interface SchemaMapping {\n [operationId: string]: {\n /** Schema name for request validation (null if no params) */\n requestSchema: string | null;\n /** Schema name for response validation */\n responseSchema: string;\n };\n}\n\n/**\n * Options for client generation\n */\nexport interface ClientGenerationOptions {\n /** Name of the client class */\n className?: string;\n\n /** Whether to include JSDoc comments (default: true) */\n includeJsDoc?: boolean;\n\n /** Base URL for the API */\n baseUrl?: string;\n\n /** Whether to validate responses with Zod (default: true) */\n validateResponses?: boolean;\n\n /** Use strict validation - throw on parse errors vs safe parse (default: false) */\n strictValidation?: boolean;\n\n /** Mapping of operationId to schema names for Zod validation */\n schemaMapping?: SchemaMapping;\n}\n\ninterface EndpointInfo {\n path: string;\n method: string;\n operationId?: string;\n summary?: string;\n description?: string;\n operation: OperationObject;\n}\n\n/**\n * ClientGenerator\n *\n * Generates fully typed API client functions from OpenAPI operations.\n * Each endpoint becomes a type-safe function with runtime Zod validation.\n *\n * **Refactored to use Zod schemas as single source of truth:**\n * - Types inferred from Zod schemas (no more manual type generation)\n * - Request validation before API calls\n * - Response validation after API calls\n * - Optional strict validation mode\n */\nexport class ClientGenerator {\n private resolver: SchemaResolver;\n private schemaMapping?: SchemaMapping;\n private requiredSchemas: Set<string>;\n private generatedRequestSchemas: Set<string>;\n\n constructor(\n private document: OpenAPIDocument,\n schemaMapping?: SchemaMapping\n ) {\n this.resolver = new SchemaResolver(document);\n if (schemaMapping !== undefined) {\n this.schemaMapping = schemaMapping;\n }\n this.requiredSchemas = new Set();\n this.generatedRequestSchemas = new Set();\n }\n\n /**\n * Generate typed API client code from OpenAPI document\n */\n generate(options: ClientGenerationOptions = {}): string {\n const {\n className = 'APIClient',\n includeJsDoc = true,\n baseUrl = this.getDefaultBaseUrl(),\n validateResponses = true,\n strictValidation = false,\n schemaMapping = this.schemaMapping,\n } = options;\n\n const endpoints = this.getAllEndpoints();\n\n if (endpoints.length === 0) {\n throw new Error('No endpoints found in OpenAPI document');\n }\n\n // Reset required schemas tracking\n this.requiredSchemas.clear();\n this.generatedRequestSchemas.clear();\n\n // Generate imports (including Zod and schema imports)\n let code = this.generateImports(!!schemaMapping, validateResponses);\n code += '\\n';\n\n // Generate request schemas (NEW - Zod schemas for validation)\n if (schemaMapping) {\n code += this.generateRequestSchemas(endpoints);\n code += '\\n';\n }\n\n // Generate types (using z.infer if schemaMapping provided)\n code += this.generateTypes(endpoints, schemaMapping);\n code += '\\n';\n\n // Generate error classes (including ValidationError)\n code += this.generateErrorClasses();\n code += '\\n';\n\n // Generate client class with validation\n code += this.generateClientClass(\n className,\n baseUrl,\n endpoints,\n includeJsDoc,\n validateResponses,\n strictValidation,\n schemaMapping\n );\n\n return code;\n }\n\n // ============================================================================\n // Import Generation\n // ============================================================================\n\n /**\n * Generate import statements including Zod and schemas\n */\n private generateImports(useSchemas: boolean, validateResponses: boolean): string {\n let code = `/**\n * Auto-generated API client from OpenAPI spec\n * \n * DO NOT EDIT - This file is auto-generated by @stackwright-pro/openapi\n * Regenerate by running: pnpm prebuild\n */\\n\\n`;\n\n if (useSchemas && validateResponses) {\n code += `import { z } from 'zod';\\n`;\n code += `import * as schemas from './schemas';\\n`;\n }\n\n return code;\n }\n\n /**\n * Track which schemas are used for imports\n */\n private addRequiredSchema(schemaName: string): void {\n this.requiredSchemas.add(schemaName);\n }\n\n // ============================================================================\n // Request Schema Generation (NEW - Zod Schemas)\n // ============================================================================\n\n /**\n * Generate Zod schemas for request parameters\n *\n * This generates schemas like:\n * export const ListEquipmentRequestSchema = z.object({\n * query: z.object({ ... }).optional(),\n * });\n */\n private generateRequestSchemas(endpoints: EndpointInfo[]): string {\n let code = '// ============================================================================\\n';\n code += '// Request Schemas (Zod Validation)\\n';\n code += '// ============================================================================\\n\\n';\n\n for (const endpoint of endpoints) {\n const operationId = endpoint.operationId || this.getMethodName(endpoint);\n const typeName = this.getOperationTypeName(endpoint);\n const schemaName = `${typeName}RequestSchema`;\n\n const schemaCode = this.generateRequestSchemaForEndpoint(endpoint);\n\n // Only generate if there are parameters\n if (schemaCode) {\n code += `export const ${schemaName} = ${schemaCode};\\n\\n`;\n this.generatedRequestSchemas.add(schemaName);\n }\n }\n\n return code;\n }\n\n /**\n * Generate request schema for a single endpoint\n */\n private generateRequestSchemaForEndpoint(endpoint: EndpointInfo): string | null {\n const { operation } = endpoint;\n const params = this.getOperationParameters(operation);\n const hasBody = this.hasRequestBody(operation);\n\n const pathParams = params.filter((p) => p.in === 'path');\n const queryParams = params.filter((p) => p.in === 'query');\n const headerParams = params.filter((p) => p.in === 'header');\n\n // If no parameters at all, return null\n if (\n pathParams.length === 0 &&\n queryParams.length === 0 &&\n headerParams.length === 0 &&\n !hasBody\n ) {\n return null;\n }\n\n const parts: string[] = [];\n\n // Path parameters\n if (pathParams.length > 0) {\n const pathSchema = this.generatePathParamsSchema(pathParams);\n parts.push(` path: ${pathSchema}`);\n }\n\n // Query parameters\n if (queryParams.length > 0) {\n const querySchema = this.generateQueryParamsSchema(queryParams);\n parts.push(` query: ${querySchema}`);\n }\n\n // Header parameters\n if (headerParams.length > 0) {\n const headerSchema = this.generateHeaderParamsSchema(headerParams);\n parts.push(` headers: ${headerSchema}`);\n }\n\n // Request body\n if (hasBody) {\n const bodySchema = this.generateRequestBodySchema(operation);\n const isRequired = this.isRequestBodyRequired(operation);\n parts.push(` body: ${bodySchema}${isRequired ? '' : '.optional()'}`);\n }\n\n return `z.object({\\n${parts.join(',\\n')}\\n})`;\n }\n\n /**\n * Generate Zod schema for path parameters\n */\n private generatePathParamsSchema(params: ParameterObject[]): string {\n const paramSchemas: string[] = [];\n\n for (const param of params) {\n const zodSchema = this.parameterSchemaToZod(param);\n const desc = param.description ? `.describe('${this.escapeString(param.description)}')` : '';\n paramSchemas.push(` ${param.name}: ${zodSchema}${desc}`);\n }\n\n return `z.object({\\n${paramSchemas.join(',\\n')}\\n })`;\n }\n\n /**\n * Generate Zod schema for query parameters\n */\n private generateQueryParamsSchema(params: ParameterObject[]): string {\n const paramSchemas: string[] = [];\n\n for (const param of params) {\n let zodSchema = this.parameterSchemaToZod(param);\n\n // Add description\n if (param.description) {\n zodSchema += `.describe('${this.escapeString(param.description)}')`;\n }\n\n // Query params are optional unless explicitly required\n if (!param.required) {\n zodSchema += '.optional()';\n }\n\n paramSchemas.push(` ${param.name}: ${zodSchema}`);\n }\n\n return `z.object({\\n${paramSchemas.join(',\\n')}\\n }).optional()`;\n }\n\n /**\n * Generate Zod schema for header parameters\n */\n private generateHeaderParamsSchema(params: ParameterObject[]): string {\n // Filter out common headers that are handled by the client\n const customParams = params.filter((p) => !this.isCommonHeader(p.name));\n\n if (customParams.length === 0) {\n return 'z.object({}).optional()';\n }\n\n const paramSchemas: string[] = [];\n\n for (const param of customParams) {\n let zodSchema = this.parameterSchemaToZod(param);\n\n if (param.description) {\n zodSchema += `.describe('${this.escapeString(param.description)}')`;\n }\n\n if (!param.required) {\n zodSchema += '.optional()';\n }\n\n paramSchemas.push(` '${param.name}': ${zodSchema}`);\n }\n\n return `z.object({\\n${paramSchemas.join(',\\n')}\\n }).optional()`;\n }\n\n /**\n * Generate Zod schema for request body\n */\n private generateRequestBodySchema(operation: OperationObject): string {\n const requestBody = operation.requestBody as RequestBodyObject | undefined;\n if (!requestBody) return 'z.unknown()';\n\n const content = requestBody.content?.['application/json'];\n if (!content?.schema) return 'z.unknown()';\n\n const schema = content.schema as SchemaObject;\n\n // Check if it's a $ref to component schema\n if ('$ref' in schema && schema.$ref) {\n const componentName = this.extractComponentName(schema.$ref as string);\n return `schemas.${componentName}Schema`;\n }\n\n // Inline schema - convert to Zod\n return this.schemaObjectToZod(schema);\n }\n\n /**\n * Convert parameter schema to Zod schema string\n */\n private parameterSchemaToZod(param: ParameterObject): string {\n const schema = param.schema as SchemaObject | undefined;\n if (!schema) return 'z.string()';\n\n return this.schemaObjectToZod(schema);\n }\n\n /**\n * Convert OpenAPI schema object to Zod schema string\n *\n * This is a simplified version for parameter schemas.\n * Reuses logic similar to ZodSchemaGenerator but outputs inline.\n */\n private schemaObjectToZod(schema: SchemaObject): string {\n // Handle arrays\n if (schema.type === 'array') {\n const items = schema.items as SchemaObject | undefined;\n const itemSchema = items ? this.schemaObjectToZod(items) : 'z.unknown()';\n let arraySchema = `z.array(${itemSchema})`;\n\n if ('minItems' in schema && typeof schema.minItems === 'number') {\n arraySchema += `.min(${schema.minItems})`;\n }\n if ('maxItems' in schema && typeof schema.maxItems === 'number') {\n arraySchema += `.max(${schema.maxItems})`;\n }\n\n return arraySchema;\n }\n\n // Handle objects\n if (schema.type === 'object') {\n if (!schema.properties) {\n return 'z.record(z.unknown())';\n }\n\n const props: string[] = [];\n const required = schema.required || [];\n\n for (const [key, propSchema] of Object.entries(schema.properties)) {\n const isRequired = required.includes(key);\n let propZod = this.schemaObjectToZod(propSchema as SchemaObject);\n\n if (!isRequired) {\n propZod += '.optional()';\n }\n\n props.push(`${key}: ${propZod}`);\n }\n\n return `z.object({ ${props.join(', ')} })`;\n }\n\n // Handle enums\n if (schema.enum && schema.enum.length > 0) {\n const values = schema.enum.map((v: unknown) => `'${v}'`).join(', ');\n return `z.enum([${values}])`;\n }\n\n // Handle type-based schemas\n switch (schema.type) {\n case 'string':\n return this.stringSchemaToZod(schema);\n case 'number':\n case 'integer':\n return this.numberSchemaToZod(schema);\n case 'boolean':\n return 'z.boolean()';\n case 'null':\n return 'z.null()';\n default:\n return 'z.unknown()';\n }\n }\n\n /**\n * Convert string schema to Zod\n */\n private stringSchemaToZod(schema: SchemaObject): string {\n let base = 'z.string()';\n\n // Handle formats\n if ('format' in schema && schema.format) {\n switch (schema.format) {\n case 'email':\n base += '.email()';\n break;\n case 'uri':\n case 'url':\n base += '.url()';\n break;\n case 'uuid':\n base += '.uuid()';\n break;\n case 'date-time':\n base += '.datetime()';\n break;\n case 'date':\n base += '.date()';\n break;\n }\n }\n\n // Handle constraints\n if ('minLength' in schema && typeof schema.minLength === 'number') {\n base += `.min(${schema.minLength})`;\n }\n if ('maxLength' in schema && typeof schema.maxLength === 'number') {\n base += `.max(${schema.maxLength})`;\n }\n if ('pattern' in schema && schema.pattern) {\n // ✅ SECURITY FIX: Validate regex safety to prevent ReDoS\n if (!isSafe(schema.pattern)) {\n console.warn(`⚠️ Unsafe regex pattern detected: ${schema.pattern}`);\n console.warn(' Skipping pattern validation to prevent ReDoS');\n // Skip the unsafe pattern - better safe than DoS\n } else {\n const escapedPattern = schema.pattern.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\");\n base += `.regex(/${escapedPattern}/)`;\n }\n }\n\n // Handle default\n if ('default' in schema && schema.default !== undefined) {\n const defaultValue =\n typeof schema.default === 'string' ? `'${schema.default}'` : schema.default;\n base += `.default(${defaultValue})`;\n }\n\n return base;\n }\n\n /**\n * Convert number schema to Zod\n */\n private numberSchemaToZod(schema: SchemaObject): string {\n let base = schema.type === 'integer' ? 'z.number().int()' : 'z.number()';\n\n if ('minimum' in schema && typeof schema.minimum === 'number') {\n base += `.min(${schema.minimum})`;\n }\n if ('maximum' in schema && typeof schema.maximum === 'number') {\n base += `.max(${schema.maximum})`;\n }\n if ('exclusiveMinimum' in schema && typeof schema.exclusiveMinimum === 'number') {\n base += `.gt(${schema.exclusiveMinimum})`;\n }\n if ('exclusiveMaximum' in schema && typeof schema.exclusiveMaximum === 'number') {\n base += `.lt(${schema.exclusiveMaximum})`;\n }\n\n // Handle default\n if ('default' in schema && schema.default !== undefined) {\n base += `.default(${schema.default})`;\n }\n\n return base;\n }\n\n /**\n * Check if header is a common header handled by fetch\n */\n private isCommonHeader(name: string): boolean {\n const commonHeaders = [\n 'authorization',\n 'content-type',\n 'accept',\n 'user-agent',\n 'content-length',\n ];\n return commonHeaders.includes(name.toLowerCase());\n }\n\n /**\n * Extract component name from $ref\n */\n private extractComponentName(ref: string): string {\n // #/components/schemas/Equipment → Equipment\n const parts = ref.split('/');\n const lastPart = parts[parts.length - 1];\n return lastPart ?? ref;\n }\n\n /**\n * Escape string for use in Zod .describe()\n */\n private escapeString(str: string): string {\n return str.replace(/'/g, \"\\\\'\").replace(/\\n/g, ' ');\n }\n\n /**\n * Get list of all required schema names\n */\n private getRequiredSchemas(): string[] {\n return Array.from(this.requiredSchemas).sort();\n }\n\n // ============================================================================\n // Type Generation (Zod Inference)\n // ============================================================================\n\n /**\n * Generate TypeScript types for request/response\n *\n * If schemaMapping is provided, use z.infer<> to get types from Zod schemas.\n * Otherwise, fall back to legacy manual type generation.\n */\n private generateTypes(endpoints: EndpointInfo[], schemaMapping?: SchemaMapping): string {\n let code = '// ============================================================================\\n';\n code += '// Request/Response Types\\n';\n code += '// ============================================================================\\n\\n';\n\n if (schemaMapping) {\n // NEW: Use Zod inference\n code += this.generateTypesFromZod(endpoints, schemaMapping);\n } else {\n // LEGACY: Manual type generation (backward compatible)\n code += this.generateTypesLegacy(endpoints);\n }\n\n return code;\n }\n\n /**\n * Generate types using Zod inference (NEW)\n */\n /**\n * Generate types using Zod inference (NEW)\n *\n * Request types infer from request schemas (defined in this file).\n * Response types infer from response schemas (imported from ./schemas).\n */\n private generateTypesFromZod(endpoints: EndpointInfo[], schemaMapping: SchemaMapping): string {\n let code = '';\n\n for (const endpoint of endpoints) {\n const operationId = endpoint.operationId || this.getMethodName(endpoint);\n const mapping = schemaMapping[operationId];\n\n if (!mapping) {\n // No schema mapping - skip or use legacy\n continue;\n }\n\n const typeName = this.getOperationTypeName(endpoint);\n\n // Request type - infer from request schema (defined locally in this file)\n // Build the schema name using the same logic as generateRequestSchemas\n const requestSchemaName = mapping.requestSchema || typeName + 'RequestSchema';\n // Always generate request type if the schema was generated (i.e., endpoint has parameters)\n if (this.generatedRequestSchemas.has(requestSchemaName)) {\n this.addRequiredSchema(requestSchemaName);\n code +=\n 'export type ' + typeName + 'Request = z.infer<typeof ' + requestSchemaName + '>;\\n';\n }\n\n // Response type - infer from response schema (imported from ./schemas)\n this.addRequiredSchema(mapping.responseSchema);\n code += `export type ${typeName}Response = z.infer<typeof schemas.${mapping.responseSchema}>;\\n\\n`;\n }\n\n return code;\n }\n\n /**\n * Generate types using manual conversion (LEGACY - backward compatible)\n */\n private generateTypesLegacy(endpoints: EndpointInfo[]): string {\n let code = '';\n\n for (const endpoint of endpoints) {\n const typeName = this.getOperationTypeName(endpoint);\n\n // Generate request type\n code += this.generateRequestTypeLegacy(endpoint, typeName);\n\n // Generate response type\n code += this.generateResponseTypeLegacy(endpoint, typeName);\n }\n\n return code;\n }\n\n /**\n * Generate request type for an operation (LEGACY)\n */\n private generateRequestTypeLegacy(endpoint: EndpointInfo, typeName: string): string {\n const { operation } = endpoint;\n const params = this.getOperationParameters(operation);\n const hasBody = this.hasRequestBody(operation);\n\n let code = '';\n\n // Check if we need a request type at all\n const pathParams = params.filter((p) => p.in === 'path');\n const queryParams = params.filter((p) => p.in === 'query');\n const headerParams = params.filter((p) => p.in === 'header');\n\n if (\n pathParams.length === 0 &&\n queryParams.length === 0 &&\n headerParams.length === 0 &&\n !hasBody\n ) {\n // No request parameters needed\n return code;\n }\n\n code += `export interface ${typeName}Request {\\n`;\n\n // Path parameters\n if (pathParams.length > 0) {\n code += ' /** Path parameters */\\n';\n code += ' path: {\\n';\n for (const param of pathParams) {\n const required = param.required ? '' : '?';\n const type = this.getTypeFromSchemaLegacy(param.schema as SchemaObject);\n const desc = param.description ? ` /** ${param.description} */\\n` : '';\n code += desc;\n code += ` ${param.name}${required}: ${type};\\n`;\n }\n code += ' };\\n';\n }\n\n // Query parameters\n if (queryParams.length > 0) {\n code += ' /** Query parameters */\\n';\n code += ' query?: {\\n';\n for (const param of queryParams) {\n const required = param.required ? '' : '?';\n const type = this.getTypeFromSchemaLegacy(param.schema as SchemaObject);\n const desc = param.description ? ` /** ${param.description} */\\n` : '';\n code += desc;\n code += ` ${param.name}${required}: ${type};\\n`;\n }\n code += ' };\\n';\n }\n\n // Header parameters\n if (headerParams.length > 0) {\n code += ' /** Custom headers */\\n';\n code += ' headers?: {\\n';\n for (const param of headerParams) {\n const required = param.required ? '' : '?';\n const type = this.getTypeFromSchemaLegacy(param.schema as SchemaObject);\n const desc = param.description ? ` /** ${param.description} */\\n` : '';\n code += desc;\n code += ` ${param.name}${required}: ${type};\\n`;\n }\n code += ' };\\n';\n }\n\n // Request body\n if (hasBody) {\n const bodyType = this.getRequestBodyTypeLegacy(operation);\n code += ' /** Request body */\\n';\n code += ` body${this.isRequestBodyRequired(operation) ? '' : '?'}: ${bodyType};\\n`;\n }\n\n code += '}\\n\\n';\n\n return code;\n }\n\n /**\n * Generate response type for an operation (LEGACY)\n */\n private generateResponseTypeLegacy(endpoint: EndpointInfo, typeName: string): string {\n const schema = this.resolver.getResponseSchema(endpoint.path, endpoint.method, '200');\n\n if (!schema) {\n return `export type ${typeName}Response = unknown;\\n\\n`;\n }\n\n const type = this.getTypeFromSchemaLegacy(schema);\n return `export type ${typeName}Response = ${type};\\n\\n`;\n }\n\n /**\n * Get request body type (LEGACY)\n */\n private getRequestBodyTypeLegacy(operation: OperationObject): string {\n const requestBody = operation.requestBody as RequestBodyObject | undefined;\n if (!requestBody) return 'unknown';\n\n const content = requestBody.content?.['application/json'];\n if (!content?.schema) return 'unknown';\n\n return this.getTypeFromSchemaLegacy(content.schema as SchemaObject);\n }\n\n /**\n * Convert OpenAPI schema to TypeScript type (LEGACY)\n *\n * NOTE: This method is kept for backward compatibility but should be\n * replaced with Zod inference in new code.\n */\n private getTypeFromSchemaLegacy(schema: SchemaObject | undefined): string {\n if (!schema) return 'unknown';\n\n // Handle arrays\n if (schema.type === 'array') {\n const itemType = this.getTypeFromSchemaLegacy(schema.items as SchemaObject);\n return `${itemType}[]`;\n }\n\n // Handle objects\n if (schema.type === 'object') {\n if (!schema.properties) return 'Record<string, unknown>';\n\n const props: string[] = [];\n const required = schema.required || [];\n\n for (const [key, propSchema] of Object.entries(schema.properties)) {\n const isRequired = required.includes(key);\n const propType = this.getTypeFromSchemaLegacy(propSchema as SchemaObject);\n props.push(`${key}${isRequired ? '' : '?'}: ${propType}`);\n }\n\n return `{ ${props.join('; ')} }`;\n }\n\n // Handle enums\n if (schema.enum) {\n return schema.enum.map((v) => `'${v}'`).join(' | ');\n }\n\n // Handle primitives\n switch (schema.type) {\n case 'string':\n return 'string';\n case 'number':\n case 'integer':\n return 'number';\n case 'boolean':\n return 'boolean';\n case 'null':\n return 'null';\n default:\n return 'unknown';\n }\n }\n\n // ============================================================================\n // Error Class Generation\n // ============================================================================\n\n /**\n * Generate error classes for API errors and validation errors\n */\n /**\n * Generate error classes (APIError and ValidationError)\n */\n private generateErrorClasses(): string {\n let code = '// ============================================================================\\n';\n code += '// Error Handling\\n';\n code += '// ============================================================================\\n\\n';\n\n // APIError class\n code += '/**\\n';\n code += ' * HTTP API Error\\n';\n code += ' * \\n';\n code += ' * Thrown when an HTTP request fails (4xx, 5xx status codes)\\n';\n code += ' */\\n';\n code += 'export class APIError extends Error {\\n';\n code += ' constructor(\\n';\n code += ' message: string,\\n';\n code += ' public readonly status: number,\\n';\n code += ' public readonly response?: unknown\\n';\n code += ' ) {\\n';\n code += ' super(message);\\n';\n code += \" this.name = 'APIError';\\n\";\n code += ' }\\n';\n code += '}\\n\\n';\n\n // ValidationError class\n code += '/**\\n';\n code += ' * Validation Error\\n';\n code += ' * \\n';\n code += ' * Thrown when Zod schema validation fails for request or response data.\\n';\n code += ' * Contains detailed information about what failed validation.\\n';\n code += ' */\\n';\n code += 'export class ValidationError extends Error {\\n';\n code += ' constructor(\\n';\n code += ' message: string,\\n';\n code += ' public readonly issues: z.ZodIssue[]\\n';\n code += ' ) {\\n';\n code += ' super(message);\\n';\n code += \" this.name = 'ValidationError';\\n\";\n code += ' }\\n\\n';\n\n // getFormattedErrors method\n code += ' /**\\n';\n code += ' * Get formatted error messages for debugging\\n';\n code += ' * \\n';\n code += ' * @returns Array of human-readable error messages\\n';\n code += ' * \\n';\n code += ' * @example\\n';\n code += ' * ```typescript\\n';\n code += ' * try {\\n';\n code += \" * await client.createEquipment({ body: { invalid: 'data' } });\\n\";\n code += ' * } catch (error) {\\n';\n code += ' * if (error instanceof ValidationError) {\\n';\n code += ' * console.error(error.getFormattedErrors());\\n';\n code += \" * // Output: ['body.name: Required', 'body.type: Required']\\n\";\n code += ' * }\\n';\n code += ' * }\\n';\n code += ' * ```\\n';\n code += ' */\\n';\n code += ' getFormattedErrors(): string[] {\\n';\n code += ' return this.issues.map(issue => {\\n';\n code += \" const path = issue.path.length > 0 ? issue.path.join('.') : 'root';\\n\";\n code += ' return `${path}: ${issue.message}`;\\n';\n code += ' });\\n';\n code += ' }\\n\\n';\n\n // getDetailedMessage method\n code += ' /**\\n';\n code += ' * Get a single formatted error message with all issues\\n';\n code += ' * \\n';\n code += ' * @returns Multi-line error message\\n';\n code += ' */\\n';\n code += ' getDetailedMessage(): string {\\n';\n code += ' const errors = this.getFormattedErrors();\\n';\n code += \" return `${this.message}\\\\n - ${errors.join('\\\\n - ')}`;\\n\";\n code += ' }\\n\\n';\n\n // toJSON method\n code += ' /**\\n';\n code += ' * Convert to JSON for logging/serialization\\n';\n code += ' * \\n';\n code += ' * @returns Plain object representation\\n';\n code += ' */\\n';\n code += ' toJSON() {\\n';\n code += ' return {\\n';\n code += ' name: this.name,\\n';\n code += ' message: this.message,\\n';\n code += ' issues: this.issues.map(issue => ({\\n';\n code += ' path: issue.path,\\n';\n code += ' message: issue.message,\\n';\n code += ' code: issue.code,\\n';\n code += ' })),\\n';\n code += ' };\\n';\n code += ' }\\n';\n code += '}\\n';\n\n return code;\n }\n // ============================================================================\n // Client Class Generation\n // ============================================================================\n\n /**\n * Generate the main client class\n */\n private generateClientClass(\n className: string,\n baseUrl: string,\n endpoints: EndpointInfo[],\n includeJsDoc: boolean,\n validateResponses: boolean,\n strictValidation: boolean,\n schemaMapping?: SchemaMapping\n ): string {\n let code = '// ============================================================================\\n';\n code += '// API Client\\n';\n code += '// ============================================================================\\n\\n';\n\n if (includeJsDoc) {\n code += `/**\\n * ${this.getAPITitle()}\\n`;\n if (this.getAPIDescription()) {\n code += ` * \\n * ${this.getAPIDescription()}\\n`;\n }\n if (validateResponses && schemaMapping) {\n code += ` * \\n * This client includes runtime validation using Zod schemas.\\n`;\n }\n code += ` */\\n`;\n }\n\n code += `export class ${className} {\\n`;\n code += ` private baseUrl: string;\\n`;\n code += ` private headers: Record<string, string>;\\n`;\n\n if (validateResponses && schemaMapping) {\n code += ` private validateResponses: boolean;\\n`;\n code += ` private strictValidation: boolean;\\n`;\n }\n\n code += `\\n`;\n\n // Constructor\n code += this.generateConstructor(baseUrl, validateResponses, strictValidation, schemaMapping);\n\n // Generate method for each endpoint\n for (const endpoint of endpoints) {\n if (schemaMapping) {\n code += this.generateMethodWithValidation(endpoint, includeJsDoc, schemaMapping);\n } else {\n code += this.generateMethodLegacy(endpoint, includeJsDoc);\n }\n }\n\n // Helper methods\n code += this.generateRequestHelper(validateResponses, strictValidation, !!schemaMapping);\n\n code += '}\\n';\n\n return code;\n }\n\n /**\n * Generate constructor\n */\n private generateConstructor(\n baseUrl: string,\n validateResponses: boolean,\n strictValidation: boolean,\n schemaMapping?: SchemaMapping\n ): string {\n let code = ` constructor(config?: {\\n`;\n code += ` baseUrl?: string;\\n`;\n code += ` headers?: Record<string, string>;\\n`;\n\n if (validateResponses && schemaMapping) {\n code += ` validateResponses?: boolean;\\n`;\n code += ` strictValidation?: boolean;\\n`;\n }\n\n code += ` }) {\\n`;\n code += ` this.baseUrl = config?.baseUrl || '${baseUrl}';\\n`;\n code += ` this.headers = config?.headers || {};\\n`;\n\n if (validateResponses && schemaMapping) {\n code += ` this.validateResponses = config?.validateResponses ?? ${validateResponses};\\n`;\n code += ` this.strictValidation = config?.strictValidation ?? ${strictValidation};\\n`;\n }\n\n code += ` }\\n\\n`;\n\n return code;\n }\n\n /**\n * Generate a method for an endpoint with Zod validation (NEW)\n */\n /**\n * Generate a method for an endpoint with Zod validation (NEW)\n */\n private generateMethodWithValidation(\n endpoint: EndpointInfo,\n includeJsDoc: boolean,\n schemaMapping: SchemaMapping\n ): string {\n const { operation, path, method } = endpoint;\n const methodName = this.getMethodName(endpoint);\n const typeName = this.getOperationTypeName(endpoint);\n const operationId = endpoint.operationId || methodName;\n\n const mapping = schemaMapping[operationId];\n if (!mapping) {\n // No schema mapping for this endpoint - fall back to legacy\n return this.generateMethodLegacy(endpoint, includeJsDoc);\n }\n\n const params = this.getOperationParameters(operation);\n const hasBody = this.hasRequestBody(operation);\n const pathParams = params.filter((p) => p.in === 'path');\n const queryParams = params.filter((p) => p.in === 'query');\n const headerParams = params.filter((p) => p.in === 'header');\n const hasAnyParams =\n pathParams.length > 0 || queryParams.length > 0 || headerParams.length > 0 || hasBody;\n\n let code = '';\n\n // JSDoc comment\n if (includeJsDoc) {\n code += ' /**\\n';\n if (operation.summary) {\n code += ` * ${operation.summary}\\n`;\n }\n if (operation.description) {\n code += ` * \\n * ${operation.description.split('\\n').join('\\n * ')}\\n`;\n }\n if (hasAnyParams) {\n code += ` * \\n * @param request - Request parameters\\n`;\n }\n code += ` * @returns Promise with the response data\\n`;\n code += ` * @throws {APIError} When the request fails\\n`;\n code += ` * @throws {ValidationError} When validation fails (if enabled)\\n`;\n code += ' */\\n';\n }\n\n // Method signature - request param defaults to empty object if optional\n let requestParam = '';\n if (hasAnyParams) {\n // If only query params (all optional), make request optional with default\n const onlyOptionalParams =\n pathParams.length === 0 && !hasBody && queryParams.every((p) => !p.required);\n requestParam = onlyOptionalParams\n ? `request: ${typeName}Request = {}`\n : `request: ${typeName}Request`;\n }\n\n code += ` async ${methodName}(${requestParam}): Promise<${typeName}Response> {\\n`;\n\n // Request validation (optional)\n if (mapping.requestSchema && hasAnyParams) {\n code += ` // Validate request parameters\\n`;\n code += ` if (this.validateResponses) {\\n`;\n code += ` ${mapping.requestSchema}.parse(request);\\n`;\n code += ` }\\n\\n`;\n }\n\n // Build URL with path parameters\n if (pathParams.length > 0) {\n code += ` // Build URL with path parameters\\n`;\n code += ` let url = this.baseUrl + '${path}'\\n`;\n for (const param of pathParams) {\n code += ` .replace('{${param.name}}', encodeURIComponent(String(request.path.${param.name})))\\n`;\n }\n code += `;\\n\\n`;\n } else {\n code += ` const url = this.baseUrl + '${path}';\\n\\n`;\n }\n\n // Add query parameters\n if (queryParams.length > 0) {\n code += ` // Add query parameters\\n`;\n code += ` const searchParams = new URLSearchParams();\\n`;\n code += ` if (request.query) {\\n`;\n for (const param of queryParams) {\n code += ` if (request.query.${param.name} != null) {\\n`;\n code += ` searchParams.append('${param.name}', String(request.query.${param.name}));\\n`;\n code += ` }\\n`;\n }\n code += ` }\\n`;\n code += ` const queryString = searchParams.toString();\\n`;\n code += ` const fullUrl = queryString ? \\`\\${url}?\\${queryString}\\` : url;\\n\\n`;\n } else {\n code += ` const fullUrl = url;\\n\\n`;\n }\n\n // Make request with validation\n code += ` // Make request\\n`;\n code += ` const rawResponse = await this.request(fullUrl, {\\n`;\n code += ` method: '${method.toUpperCase()}',\\n`;\n\n if (hasBody) {\n code += ` body: request.body ? JSON.stringify(request.body) : null,\\n`;\n }\n\n if (headerParams.length > 0) {\n code += ` headers: request.headers,\\n`;\n }\n\n code += ` });\\n\\n`;\n\n // Response validation\n code += ` // Validate response\\n`;\n code += ` if (this.validateResponses) {\\n`;\n code += ` if (this.strictValidation) {\\n`;\n code += ` // Strict mode - throw on validation error\\n`;\n code += ` return schemas.${mapping.responseSchema}.parse(rawResponse) as ${typeName}Response;\\n`;\n code += ` } else {\\n`;\n code += ` // Safe mode - catch validation errors and throw ValidationError\\n`;\n code += ` const result = schemas.${mapping.responseSchema}.safeParse(rawResponse);\\n`;\n code += ` if (!result.success) {\\n`;\n code += ` throw new ValidationError(\\n`;\n code += ` 'Response validation failed: ' + result.error.message,\\n`;\n code += ` result.error.issues\\n`;\n code += ` );\\n`;\n code += ` }\\n`;\n code += ` return result.data as ${typeName}Response;\\n`;\n code += ` }\\n`;\n code += ` }\\n\\n`;\n\n code += ` // Return unvalidated response (validation disabled)\\n`;\n code += ` return rawResponse as ${typeName}Response;\\n`;\n code += ` }\\n\\n`;\n\n return code;\n }\n /**\n * Generate a method for an endpoint (LEGACY)\n */\n private generateMethodLegacy(endpoint: EndpointInfo, includeJsDoc: boolean): string {\n const { operation, path, method } = endpoint;\n const methodName = this.getMethodName(endpoint);\n const typeName = this.getOperationTypeName(endpoint);\n\n const params = this.getOperationParameters(operation);\n const hasBody = this.hasRequestBody(operation);\n const pathParams = params.filter((p) => p.in === 'path');\n const hasAnyParams = pathParams.length > 0 || params.some((p) => p.in === 'query') || hasBody;\n\n let code = '';\n\n // JSDoc comment\n if (includeJsDoc) {\n code += ' /**\\n';\n if (operation.summary) {\n code += ` * ${operation.summary}\\n`;\n }\n if (operation.description) {\n code += ` * \\n * ${operation.description.split('\\n').join('\\n * ')}\\n`;\n }\n if (hasAnyParams) {\n code += ` * \\n * @param request - Request parameters\\n`;\n }\n code += ` * @returns Promise with the response data\\n`;\n code += ` * @throws {APIError} When the request fails\\n`;\n code += ' */\\n';\n }\n\n // Method signature\n const requestParam = hasAnyParams ? `request: ${typeName}Request` : '';\n code += ` async ${methodName}(${requestParam}): Promise<${typeName}Response> {\\n`;\n\n // Build URL with path parameters\n if (pathParams.length > 0) {\n code += ` // Build URL with path parameters\\n`;\n code += ` let url = this.baseUrl + '${path}'\\n`;\n for (const param of pathParams) {\n code += ` .replace('{${param.name}}', encodeURIComponent(String(request.path.${param.name})))\\n`;\n }\n code += `;\\n\\n`;\n } else {\n code += ` const url = this.baseUrl + '${path}';\\n\\n`;\n }\n\n // Add query parameters\n const queryParams = params.filter((p) => p.in === 'query');\n if (queryParams.length > 0) {\n code += ` // Add query parameters\\n`;\n code += ` const searchParams = new URLSearchParams();\\n`;\n code += ` if (request.query) {\\n`;\n for (const param of queryParams) {\n code += ` if (request.query.${param.name} != null) {\\n`;\n code += ` searchParams.append('${param.name}', String(request.query.${param.name}));\\n`;\n code += ` }\\n`;\n }\n code += ` }\\n`;\n code += ` const queryString = searchParams.toString();\\n`;\n code += ` const fullUrl = queryString ? \\`\\${url}?\\${queryString}\\` : url;\\n\\n`;\n } else {\n code += ` const fullUrl = url;\\n\\n`;\n }\n\n // Build request options\n code += ` return this.request<${typeName}Response>(fullUrl, {\\n`;\n code += ` method: '${method.toUpperCase()}',\\n`;\n\n if (hasBody) {\n code += ` body: request.body ? JSON.stringify(request.body) : null,\\n`;\n }\n\n const headerParams = params.filter((p) => p.in === 'header');\n if (headerParams.length > 0) {\n code += ` headers: request.headers,\\n`;\n }\n\n code += ` });\\n`;\n code += ` }\\n\\n`;\n\n return code;\n }\n\n /**\n * Generate the request helper method\n */\n private generateRequestHelper(\n validateResponses: boolean,\n strictValidation: boolean,\n useSchemas: boolean\n ): string {\n // TODO: Implement validation in Task 2.4\n // For now, return legacy implementation\n return ` /**\n * Make an HTTP request\n * @private\n */\n private async request<T>(\n url: string,\n options: {\n method: string;\n body?: string;\n headers?: Record<string, string>;\n }\n ): Promise<T> {\n const headers = {\n 'Content-Type': 'application/json',\n ...this.headers,\n ...options.headers,\n };\n\n const response = await fetch(url, {\n method: options.method,\n headers,\n body: options.body,\n });\n\n if (!response.ok) {\n const errorBody = await response.text().catch(() => null);\n \n // ✅ SECURITY FIX: Safe JSON parsing with fallback\n let parsedError: unknown;\n if (errorBody) {\n try {\n parsedError = JSON.parse(errorBody);\n } catch (parseError) {\n // Non-JSON error response - store as object with raw text\n parsedError = { \n raw: errorBody,\n contentType: response.headers.get('content-type') \n };\n }\n }\n \n throw new APIError(\n \\`HTTP \\${response.status}: \\${response.statusText}\\`,\n response.status,\n parsedError\n );\n }\n\n // Handle empty responses (204 No Content, etc.)\n if (response.status === 204 || response.headers.get('content-length') === '0') {\n return null as unknown as T;\n }\n\n // ✅ SECURITY FIX: Validate Content-Type before parsing JSON\n const contentType = response.headers.get('content-type');\n if (!contentType || !contentType.includes('application/json')) {\n const body = await response.text();\n throw new APIError(\n \\`Unexpected content type: \\${contentType}. Expected application/json\\`,\n response.status,\n { contentType, body }\n );\n }\n\n return response.json();\n }\n`;\n }\n\n // ============================================================================\n // Helper Methods\n // ============================================================================\n\n /**\n * Get all endpoints from the document\n */\n private getAllEndpoints(): EndpointInfo[] {\n const endpoints: EndpointInfo[] = [];\n\n for (const [path, pathItem] of Object.entries(this.document.paths || {})) {\n if (!pathItem) continue;\n\n const methods = ['get', 'post', 'put', 'patch', 'delete', 'options', 'head'] as const;\n\n for (const method of methods) {\n const operation = pathItem[method] as OperationObject | undefined;\n\n if (operation) {\n endpoints.push({\n path,\n method,\n ...(operation.operationId !== undefined && { operationId: operation.operationId }),\n ...(operation.summary !== undefined && { summary: operation.summary }),\n ...(operation.description !== undefined && { description: operation.description }),\n operation,\n });\n }\n }\n }\n\n return this.deduplicateOperationIds(endpoints);\n }\n\n /**\n * Deduplicate colliding operationIds by appending a path-based suffix.\n *\n * Real-world specs (e.g. SAM.gov) reuse the same operationId across\n * versioned paths. We make each one unique so the generated client\n * has no duplicate method names.\n */\n private deduplicateOperationIds(endpoints: EndpointInfo[]): EndpointInfo[] {\n const seen = new Map<string, number>();\n\n return endpoints.map((ep) => {\n if (!ep.operationId) return ep;\n\n const count = seen.get(ep.operationId) ?? 0;\n seen.set(ep.operationId, count + 1);\n\n if (count === 0) return ep;\n\n // Build a deterministic suffix from the path\n const suffix = this.sanitizePath(ep.path);\n return { ...ep, operationId: `${ep.operationId}_${suffix}` };\n });\n }\n\n /**\n * Turn an API path into a valid, readable identifier suffix.\n * e.g. '/entity-information/v4/download-entities' -> 'entityInformationV4DownloadEntities'\n */\n private sanitizePath(path: string): string {\n return path\n .split('/')\n .filter((seg) => seg && !seg.startsWith('{'))\n .join('-')\n .replace(/[^a-zA-Z0-9]+(.)/g, (_, chr) => chr.toUpperCase())\n .replace(/^[A-Z]/, (chr) => chr.toLowerCase());\n }\n\n /**\n * Get parameters for an operation\n */\n private getOperationParameters(operation: OperationObject): ParameterObject[] {\n if (!operation.parameters) return [];\n return operation.parameters as ParameterObject[];\n }\n\n /**\n * Check if operation has request body\n */\n private hasRequestBody(operation: OperationObject): boolean {\n return !!operation.requestBody;\n }\n\n /**\n * Check if request body is required\n */\n private isRequestBodyRequired(operation: OperationObject): boolean {\n const requestBody = operation.requestBody as RequestBodyObject | undefined;\n return requestBody?.required || false;\n }\n\n /**\n * Get method name from endpoint\n */\n private getMethodName(endpoint: EndpointInfo): string {\n // Use operationId if available\n if (endpoint.operationId) {\n return this.camelCase(endpoint.operationId);\n }\n\n // Generate from method + path\n const pathParts = endpoint.path\n .split('/')\n .filter((p) => p && !p.startsWith('{'))\n .join('-');\n\n return this.camelCase(`${endpoint.method}-${pathParts}`);\n }\n\n /**\n * Get type name for operation\n */\n private getOperationTypeName(endpoint: EndpointInfo): string {\n const methodName = this.getMethodName(endpoint);\n return this.pascalCase(methodName);\n }\n\n /**\n * Convert to camelCase\n */\n private camelCase(str: string): string {\n return str\n .replace(/[^a-zA-Z0-9]+(.)/g, (_, chr) => chr.toUpperCase())\n .replace(/^[A-Z]/, (chr) => chr.toLowerCase());\n }\n\n /**\n * Convert to PascalCase\n */\n private pascalCase(str: string): string {\n const camel = this.camelCase(str);\n return camel.charAt(0).toUpperCase() + camel.slice(1);\n }\n\n /**\n * Get default base URL from servers\n */\n private getDefaultBaseUrl(): string {\n if ('servers' in this.document && this.document.servers && this.document.servers.length > 0) {\n const firstServer = this.document.servers[0];\n return firstServer ? firstServer.url : 'http://localhost:3000';\n }\n return 'http://localhost:3000';\n }\n\n /**\n * Get API title\n */\n private getAPITitle(): string {\n return this.document.info?.title || 'API Client';\n }\n\n /**\n * Get API description\n */\n private getAPIDescription(): string {\n return this.document.info?.description || '';\n }\n}\n","import type { EndpointFilter as IEndpointFilter } from '../types';\n\n/**\n * Filters endpoints based on include/exclude patterns.\n *\n * Supports:\n * - Exact match: /equipment\n * - Path prefix (includes subpaths): /equipment matches /equipment and /equipment/123\n * - Path with params: /equipment/{id}\n * - Single wildcard: /admin/* matches /admin/users (not /admin itself)\n * - Double wildcard: /admin/** matches /admin/users and /admin/nested/deep\n * - Root path: / matches all paths\n */\nexport class EndpointFilter {\n private include: string[];\n private exclude: string[];\n\n constructor(filter?: IEndpointFilter) {\n // Default: include all paths (only if not explicitly set to empty)\n if (filter?.include !== undefined && filter.include.length > 0) {\n this.include = filter.include;\n } else {\n this.include = ['/**'];\n }\n this.exclude = filter?.exclude ?? [];\n }\n\n /**\n * Check if a path should be included in code generation.\n *\n * Logic:\n * 1. If path matches any exclude pattern → excluded\n * 2. If path matches any include pattern → included\n * 3. Otherwise → excluded (default deny)\n */\n matches(path: string): boolean {\n // Ensure path starts with /\n const normalizedPath = path.startsWith('/') ? path : `/${path}`;\n\n // Check exclude patterns first (deny takes precedence)\n for (const pattern of this.exclude) {\n if (this.matchPattern(normalizedPath, pattern)) {\n return false;\n }\n }\n\n // Check include patterns\n for (const pattern of this.include) {\n if (this.matchPattern(normalizedPath, pattern)) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Match path against a pattern.\n */\n private matchPattern(path: string, pattern: string): boolean {\n // Normalize pattern\n const normalizedPattern = pattern.startsWith('/') ? pattern : `/${pattern}`;\n\n // Special case: pattern \"/\" matches all paths\n if (normalizedPattern === '/') {\n return true;\n }\n\n // Convert glob pattern to regex\n const regex = this.globToRegex(normalizedPattern);\n\n // First try exact match\n if (regex.test(path)) {\n return true;\n }\n\n // For include patterns without trailing wildcards,\n // check if path starts with pattern (subpath matching)\n if (!normalizedPattern.endsWith('*')) {\n // Check if path is a subpath of the pattern\n // e.g., /equipment matches /equipment/123\n const patternSegments = normalizedPattern.split('/');\n const pathSegments = path.split('/');\n\n // Must have same prefix and path must have more or equal segments\n if (pathSegments.length >= patternSegments.length) {\n let matches = true;\n for (let i = 0; i < patternSegments.length; i++) {\n const pSeg = patternSegments[i];\n // With noUncheckedIndexedAccess, patternSegments[i] could be undefined\n if (pSeg === undefined) {\n matches = false;\n break;\n }\n // Skip wildcard checks here since globToRegex handles those\n if (pSeg === '*' || pSeg === '**') {\n continue;\n }\n // Handle {param}\n if (pSeg.startsWith('{') && pSeg.endsWith('}')) {\n continue;\n }\n // With noUncheckedIndexedAccess, we need to check if pathSegment exists\n const pathSeg = pathSegments[i];\n if (pSeg !== pathSeg) {\n matches = false;\n break;\n }\n }\n if (matches) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n /**\n * Convert a glob-like pattern to a RegExp.\n *\n * Pattern semantics:\n * - `*` = single path segment (no slashes), minimum 1 character\n * - `**` = multiple path segments (includes slashes), zero or more segments\n * - `{param}` = single path segment parameter\n * - Exact match segments are literal strings\n */\n private globToRegex(pattern: string): RegExp {\n // Escape regex special chars first (except * and {})\n let result = pattern.replace(/[.+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\n // Handle ** first (before *) to avoid replacement order issues\n result = result.replace(/\\*\\*/g, '⟪DOUBLESTAR⟫');\n\n // Handle * (matches ONE segment: one or more non-slash chars)\n result = result.replace(/\\*/g, '⟪STAR⟫');\n\n // Replace ** with regex based on position:\n // - ** at START of pattern (e.g., /**) → .* (matches everything)\n // - ** after / (e.g., /admin/**) → (?:\\/.*)? with / removed\n // - ** in MIDDLE (e.g., /api/**/users) → (?:/.*)?\n if (result.startsWith('⟪DOUBLESTAR⟫')) {\n // Pattern starts with **\n result = '.*' + result.slice('⟪DOUBLESTAR⟫'.length);\n } else if (result.endsWith('⟪DOUBLESTAR⟫') && result.endsWith('/⟪DOUBLESTAR⟫')) {\n // Pattern ends with /**\n // Remove the / before ** and replace with optional group\n result = result.slice(0, -'⟪DOUBLESTAR⟫'.length - 1) + '(?:/.*)?';\n } else {\n // ** in middle or ends with bare **\n result = result.replace(/⟪DOUBLESTAR⟫/g, '(?:/.*)?');\n }\n\n result = result.replace(/⟪STAR⟫/g, '[^/]+'); // * matches one segment (no /)\n\n // Handle {param} - matches a single segment\n result = result.replace(/\\{[^}]+\\}/g, '[^/]+');\n\n return new RegExp(`^${result}$`);\n }\n}\n","import crypto from 'crypto';\nimport fs from 'fs';\nimport https from 'https';\nimport http from 'http';\nimport { URL } from 'url';\nimport path from 'path';\nimport { realpathSync } from 'fs';\nimport { isIP } from 'net';\nimport type { ApprovedSpec, PrebuildSecurityConfig, ValidationResult } from '../types';\n\n/**\n * Validates that OpenAPI specs are on the approved list\n * and haven't been modified since approval.\n *\n * @example\n * ```typescript\n * const config: PrebuildSecurityConfig = {\n * enabled: true,\n * allowlist: [\n * {\n * name: 'Government Logistics API',\n * url: 'https://api.gov.mil/logistics/v1/openapi.yaml',\n * sha256: 'a1b2c3d4e5f6...'\n * }\n * ]\n * };\n *\n * const validator = new ApprovedSpecsValidator(config);\n * const result = await validator.validate('https://api.gov.mil/logistics/v1/openapi.yaml');\n *\n * if (!result.valid) {\n * console.error('Security rejection:', result.error);\n * process.exit(1);\n * }\n * ```\n */\nexport class ApprovedSpecsValidator {\n private allowlist: ApprovedSpec[];\n private cache: Map<string, { content: string; hash: string }> = new Map();\n private skipHashVerification: boolean;\n private readonly ALLOWED_DIRS: string[];\n private readonly MAX_RESPONSE_SIZE = 10 * 1024 * 1024; // 10MB - prevents memory exhaustion attacks\n\n /**\n * Create a new ApprovedSpecsValidator\n *\n * @param config - Security configuration from stackwright.yml\n * @param skipHashVerification - Skip hash check (for testing/development)\n */\n constructor(config: PrebuildSecurityConfig, skipHashVerification = false) {\n this.allowlist = config.allowlist || [];\n this.skipHashVerification = skipHashVerification;\n this.ALLOWED_DIRS = this.buildAllowedDirs();\n }\n\n /**\n * Build list of allowed directories for path traversal prevention.\n * Defaults to cwd, specs subdir, and .stackwright cache dir.\n */\n private buildAllowedDirs(): string[] {\n const cwd = process.cwd();\n return [cwd, path.join(cwd, 'specs'), path.join(cwd, '.stackwright')];\n }\n\n /**\n * Validate that a file path is within allowed directories (path traversal prevention).\n * Uses realpathSync to resolve symlinks and prevent symlink traversal attacks.\n *\n * @param filePath - File path to validate\n * @returns true if path is allowed, false otherwise\n */\n private isPathAllowed(filePath: string): boolean {\n try {\n // Resolve symlinks to prevent symlink traversal attacks\n const realPath = realpathSync(filePath);\n return this.ALLOWED_DIRS.some((dir) => {\n const realDir = realpathSync(dir);\n return realPath.startsWith(realDir + path.sep) || realPath === realDir;\n });\n } catch {\n return false;\n }\n }\n\n /**\n * Check if a URL/path is a path traversal attempt.\n * This is checked BEFORE the allowlist to prevent bypassing path security.\n *\n * @param specUrl - URL or path to check\n * @returns true if this is a path traversal attempt\n */\n private isPathTraversalAttempt(specUrl: string): boolean {\n // Check for file:// protocol (potential SSRF/path traversal)\n if (specUrl.startsWith('file://')) {\n return true;\n }\n\n // If it's a local file path, check if it's within allowed directories\n if (fs.existsSync(specUrl)) {\n return !this.isPathAllowed(specUrl);\n }\n\n // For URLs, check for malicious patterns\n // (protocol validation happens in download(), but we block known bad patterns here)\n if (!specUrl.startsWith('http://') && !specUrl.startsWith('https://')) {\n // Contains path traversal patterns but not a valid URL\n if (specUrl.includes('../') || specUrl.includes('..\\\\')) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Validate that a hex string is a valid SHA-256 hash (64 hex characters).\n *\n * @param hash - String to validate\n * @returns true if valid SHA-256 hex format\n */\n private isValidHex(hash: string): boolean {\n return /^[a-fA-F0-9]{64}$/.test(hash);\n }\n\n /**\n * Validate that a redirect URL is safe (SSRF protection).\n * Blocks:\n * - HTTPS → HTTP downgrades\n * - Private IP ranges (10.x.x.x, 172.16-31.x.x, 192.168.x.x, 127.x.x.x)\n * - Localhost and loopback addresses\n * - Cloud metadata endpoints\n * - IPv6 private/link-local addresses\n *\n * @param location - Redirect location URL\n * @param originalProtocol - Protocol of the original request\n * @returns true if redirect is safe, false if it should be blocked\n */\n private isRedirectSafe(location: string, originalProtocol: string): boolean {\n try {\n // Parse the redirect location\n const redirectUrl = new URL(location);\n\n // Block HTTPS → HTTP downgrade (protocol downgrade attack)\n if (redirectUrl.protocol === 'http:' && originalProtocol === 'https:') {\n return false;\n }\n\n // Block private IPs and localhost patterns\n const blockedPatterns = [\n 'localhost',\n '127.0.0.1',\n '::1',\n '0.0.0.0',\n '169.254.169.254', // AWS/GCP/Azure metadata\n '.metadata.google.internal', // GCP metadata\n 'metadata.google.internal',\n 'metadata.internal',\n ];\n\n for (const pattern of blockedPatterns) {\n if (redirectUrl.hostname.includes(pattern)) {\n return false;\n }\n }\n\n // Check for private IP ranges using regex\n const ipv4Match = redirectUrl.hostname.match(/^(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$/);\n if (ipv4Match && ipv4Match.length >= 5) {\n const octets = ipv4Match.slice(1, 5).map(Number);\n const first = octets[0];\n const second = octets[1];\n\n // 10.0.0.0/8 (private network)\n if (first !== undefined && first === 10) {\n return false;\n }\n // 172.16.0.0/12 (private network)\n if (\n first !== undefined &&\n second !== undefined &&\n first === 172 &&\n second >= 16 &&\n second <= 31\n ) {\n return false;\n }\n // 192.168.0.0/16 (private network)\n if (first !== undefined && second !== undefined && first === 192 && second === 168) {\n return false;\n }\n // 127.0.0.0/8 (loopback)\n if (first !== undefined && first === 127) {\n return false;\n }\n }\n\n // Use isIP for proper IPv6 detection and blocking\n const ipVersion = isIP(redirectUrl.hostname);\n if (ipVersion === 6) {\n // Block IPv6 private/link-local addresses\n const blockedPrefixes = [\n '::1', // Loopback\n 'fe80:', // Link-local\n 'fc00:', // Unique local\n 'fd', // Unique local (short form)\n '::ffff:', // IPv4-mapped\n ];\n if (blockedPrefixes.some((p) => redirectUrl.hostname.startsWith(p))) {\n return false;\n }\n }\n\n return true;\n } catch {\n // Invalid URL - block it\n return false;\n }\n }\n\n /**\n * Atomically check if path is allowed and read content if so.\n * Prevents TOCTOU race conditions by combining existence check,\n * symlink resolution, path validation, and file read in a single operation.\n *\n * @param filePath - File path to check and read\n * @returns Object with content if successful, or error message\n */\n private readAllowedFile(filePath: string): { content?: string; error?: string } {\n try {\n // Use lstatSync to NOT follow symlinks during check\n fs.lstatSync(filePath);\n\n // If it's a symlink, resolve where it actually points\n // realpathSync handles symlink resolution\n const realPath = fs.realpathSync(filePath);\n\n // Now check if the real path is allowed\n if (!this.isPathAllowed(realPath)) {\n return { error: 'File path outside allowed directories (path traversal blocked)' };\n }\n\n // Read the file - this is now atomic with the path check\n return { content: fs.readFileSync(filePath, 'utf8') };\n } catch (e) {\n const err = e as NodeJS.ErrnoException;\n if (err.code === 'ENOENT') {\n return { error: 'File not found' };\n }\n return { error: String(e) };\n }\n }\n\n /**\n * Check if security enforcement is enabled\n */\n isEnabled(): boolean {\n return this.allowlist.length > 0;\n }\n\n /**\n * Get the allowlist count\n */\n getAllowlistCount(): number {\n return this.allowlist.length;\n }\n\n /**\n * Validate that a spec is on the approved list and matches expected hash.\n *\n * @param specUrl - URL or file path to the spec to validate\n * @returns ValidationResult indicating if the spec is approved\n */\n async validate(specUrl: string): Promise<ValidationResult> {\n // CRITICAL: Check for path traversal BEFORE allowlist check\n // This prevents bypassing path security with skipHashVerification\n if (this.isPathTraversalAttempt(specUrl)) {\n return {\n valid: false,\n errorCode: 'DOWNLOAD_FAILED',\n specUrl,\n error: 'File path outside allowed directories (path traversal blocked)',\n };\n }\n\n // Find matching approved spec\n const approved = this.allowlist.find((a) => this.urlsMatch(a.url, specUrl));\n\n if (!approved) {\n return {\n valid: false,\n errorCode: 'SPEC_NOT_ON_ALLOWLIST',\n specUrl,\n error: this.formatAllowlistError(specUrl),\n };\n }\n\n // Skip hash verification if requested (dev mode)\n if (this.skipHashVerification) {\n return { valid: true, specUrl };\n }\n\n // Download/load and hash the spec\n const hashResult = await this.getHash(specUrl);\n\n if (hashResult.error) {\n return {\n valid: false,\n errorCode: 'DOWNLOAD_FAILED',\n specUrl,\n error: `Failed to fetch spec '${specUrl}': ${hashResult.error}`,\n };\n }\n\n // Validate hash formats before comparison (defense in depth)\n if (!this.isValidHex(hashResult.hash!)) {\n return {\n valid: false,\n errorCode: 'DOWNLOAD_FAILED',\n specUrl,\n error: 'Invalid hash format returned from download',\n };\n }\n\n if (!this.isValidHex(approved.sha256)) {\n return {\n valid: false,\n errorCode: 'DOWNLOAD_FAILED',\n specUrl,\n error: 'Invalid hash format in approved spec configuration',\n };\n }\n\n // Use timing-safe comparison to prevent timing attacks\n if (\n !crypto.timingSafeEqual(\n Buffer.from(hashResult.hash!, 'hex'),\n Buffer.from(approved.sha256, 'hex')\n )\n ) {\n return {\n valid: false,\n errorCode: 'SPEC_MODIFIED',\n specUrl,\n error: this.formatHashMismatchError(approved, hashResult.hash!),\n };\n }\n\n return { valid: true, specUrl };\n }\n\n /**\n * Validate multiple specs at once (batch validation).\n * Fails fast on first error.\n *\n * @param specUrls - Array of URLs/paths to validate\n * @returns Map of URL to ValidationResult\n */\n async validateAll(specUrls: string[]): Promise<Map<string, ValidationResult>> {\n const results = new Map<string, ValidationResult>();\n\n for (const url of specUrls) {\n const result = await this.validate(url);\n results.set(url, result);\n\n if (!result.valid) {\n // Fail fast - stop on first error\n return results;\n }\n }\n\n return results;\n }\n\n /**\n * Validate all specs and return all results (non-fail-fast).\n *\n * @param specUrls - Array of URLs/paths to validate\n * @returns Map of URL to ValidationResult\n */\n async validateAllComplete(specUrls: string[]): Promise<Map<string, ValidationResult>> {\n const results = new Map<string, ValidationResult>();\n\n for (const url of specUrls) {\n const result = await this.validate(url);\n results.set(url, result);\n }\n\n return results;\n }\n\n /**\n * Get content hash from cache or download.\n */\n private async getHash(url: string): Promise<{ hash?: string; error?: string }> {\n // Check cache\n const cached = this.cache.get(url);\n if (cached) {\n return { hash: cached.hash };\n }\n\n // Download content\n const contentResult = await this.download(url);\n if (contentResult.error) {\n return { error: contentResult.error };\n }\n\n const content = contentResult.content!;\n const hash = crypto.createHash('sha256').update(content).digest('hex');\n\n // Cache\n this.cache.set(url, { content, hash });\n\n return { hash };\n }\n\n /**\n * Download content from URL or file.\n * Includes path traversal and SSRF protection.\n */\n private async download(\n url: string,\n originalProtocol = ''\n ): Promise<{ content?: string; error?: string }> {\n // Check if it's a file path - use atomic method to prevent TOCTOU race conditions\n if (fs.existsSync(url)) {\n return this.readAllowedFile(url);\n }\n\n // Validate URL protocol\n if (!url.startsWith('http://') && !url.startsWith('https://')) {\n return { error: `Invalid URL protocol. Expected http:// or https://, got: ${url}` };\n }\n\n // Store original protocol for SSRF check on redirects\n const parsed = new URL(url);\n const requestProtocol = originalProtocol || parsed.protocol;\n\n // Download from URL\n return new Promise((resolve) => {\n const client = url.startsWith('https') ? https : http;\n\n const req = client.get(url, { timeout: 30000 }, (res) => {\n // Handle redirects with SSRF protection\n if (\n res.statusCode &&\n res.statusCode >= 300 &&\n res.statusCode < 400 &&\n res.headers.location\n ) {\n const location = res.headers.location;\n\n // Validate redirect is safe (SSRF protection)\n if (!this.isRedirectSafe(location, requestProtocol)) {\n resolve({ error: `Unsafe redirect target blocked: ${location}` });\n return;\n }\n\n // Follow redirect\n this.download(location, requestProtocol).then(resolve);\n return;\n }\n\n if (res.statusCode !== 200) {\n resolve({ error: `HTTP ${res.statusCode}` });\n return;\n }\n\n // Memory exhaustion protection - limit response size\n let data = '';\n let size = 0;\n res.on('data', (chunk: Buffer) => {\n size += chunk.length;\n if (size > this.MAX_RESPONSE_SIZE) {\n req.destroy();\n resolve({ error: `Response too large (>${this.MAX_RESPONSE_SIZE / 1024 / 1024}MB)` });\n return;\n }\n data += chunk;\n });\n res.on('end', () => resolve({ content: data }));\n res.on('error', (e) => resolve({ error: String(e) }));\n });\n\n req.on('error', (e) => resolve({ error: String(e) }));\n req.on('timeout', () => {\n req.destroy();\n resolve({ error: 'Request timeout (30s)' });\n });\n });\n }\n\n /**\n * Check if two URLs match (handles trailing slashes, case sensitivity, etc.).\n * Strips credentials and hash to prevent bypass via @ symbol.\n */\n private urlsMatch(url1: string, url2: string): boolean {\n const normalize = (u: string) => {\n try {\n const parsed = new URL(u);\n // Strip credentials and hash to prevent bypass via @ symbol\n const normalized = `${parsed.protocol}//${parsed.hostname}${parsed.pathname}`;\n return normalized.replace(/\\/$/, '').toLowerCase();\n } catch {\n // Not a URL, treat as file path - normalize separators and trailing slash\n return u.replace(/\\/$/, '').replace(/\\\\/g, '/').toLowerCase();\n }\n };\n\n return normalize(url1) === normalize(url2);\n }\n\n /**\n * Format error message for spec not on allowlist\n */\n private formatAllowlistError(specUrl: string): string {\n const lines = [`Spec '${specUrl}' is not on the approved list.`];\n\n if (this.allowlist.length === 0) {\n lines.push('');\n lines.push('No approved specs are configured.');\n lines.push('Add approved specs to stackwright.yml under prebuild.security.allowlist');\n } else {\n lines.push('');\n lines.push('Allowed specs:');\n for (const spec of this.allowlist) {\n lines.push(` • ${spec.name}`);\n lines.push(` ${spec.url}`);\n }\n }\n\n return lines.join('\\n');\n }\n\n /**\n * Format error message for hash mismatch\n */\n private formatHashMismatchError(approved: ApprovedSpec, actualHash: string): string {\n const lines = [\n `Spec '${approved.url}' has been modified since approval.`,\n '',\n 'Expected hash (approved): ' + approved.sha256,\n 'Actual hash (current): ' + actualHash,\n '',\n 'This may indicate:',\n ' • The spec has been updated on the server',\n ' • Network corruption during download',\n ' • A man-in-the-middle attack',\n '',\n 'If this is expected, update the sha256 in stackwright.yml.',\n ];\n\n return lines.join('\\n');\n }\n\n /**\n * Clear the download cache.\n * Useful for long-running processes.\n */\n clearCache(): void {\n this.cache.clear();\n }\n}\n","/**\n * Prebuild plugin types\n * TODO: Move to @stackwright/types package when created\n */\nexport interface PrebuildPluginContext {\n /** Parsed site configuration from stackwright.yml */\n siteConfig: Record<string, any>;\n /** Project root directory */\n projectRoot: string;\n}\n\nexport interface PrebuildPlugin {\n /** Plugin name */\n name: string;\n /** Called before build starts */\n beforeBuild?(context: PrebuildPluginContext): Promise<void>;\n /** Called after build completes */\n afterBuild?(context: PrebuildPluginContext): Promise<void>;\n}\n\nimport fs from 'fs';\nimport path from 'path';\nimport { OpenAPIParser } from '../parser/OpenAPIParser';\nimport { ZodSchemaGenerator } from '../compiler/ZodSchemaGenerator';\nimport { TypeGenerator } from '../compiler/TypeGenerator';\nimport { ActionGenerator } from '../compiler/ActionGenerator';\nimport { ClientGenerator, type SchemaMapping } from '../compiler/ClientGenerator';\nimport {\n CollectionProviderGenerator,\n type ProviderGenerationOptions,\n} from '../compiler/CollectionProviderGenerator';\nimport { SchemaResolver } from '../parser/SchemaResolver';\nimport { EndpointFilter } from '../utils/EndpointFilter';\nimport { ApprovedSpecsValidator } from '../utils/ApprovedSpecsValidator';\nimport type { OpenAPIConfig, PrebuildSecurityConfig } from '../types';\n\n/**\n * Prebuild plugin for OpenAPI integration\n *\n * Reads OpenAPI configuration from stackwright.yml and generates:\n * - Zod validation schemas\n * - TypeScript type definitions\n * - CollectionProvider implementations\n * - Typed API client functions\n *\n * All generated code is written to src/generated/{integrationName}/\n *\n * === Phase 2: Approved-Specs Enforcement ===\n *\n * Enterprise customers can enable security enforcement via stackwright.yml:\n *\n * ```yaml\n * prebuild:\n * security:\n * enabled: true\n * allowlist:\n * - name: logistics-api\n * url: https://api.gov.mil/logistics/v1/openapi.yaml\n * sha256: a1b2c3d4e5f6...\n * ```\n *\n * This ensures only approved API specs can generate code.\n */\nexport class OpenAPIPlugin implements PrebuildPlugin {\n name = '@stackwright-pro/openapi';\n\n async beforeBuild(context: PrebuildPluginContext): Promise<void> {\n const { siteConfig, projectRoot } = context;\n\n // Check for prebuild security config\n const prebuildConfig = (siteConfig.prebuild || {}) as Record<string, any>;\n const securityConfig = prebuildConfig.security as PrebuildSecurityConfig | undefined;\n\n let validator: ApprovedSpecsValidator | null = null;\n\n if (securityConfig?.enabled) {\n // Check for skip flag (development mode)\n const skipApprovedSpecs = process.argv.includes('--skip-approved-specs');\n\n if (skipApprovedSpecs) {\n // SECURITY: Block this flag in production/CI environments\n const isProductionBuild =\n process.env.NODE_ENV === 'production' || process.env.CI === 'true';\n\n if (isProductionBuild) {\n console.error('\\n❌ FATAL: --skip-approved-specs not allowed in production/CI builds\\n');\n throw new Error(\n 'SECURITY_CONFIG_VIOLATION: Cannot use --skip-approved-specs in production or CI environments'\n );\n }\n\n console.log(\n '\\n[@stackwright-pro/openapi] ⚠️ Approved-specs enforcement DISABLED (--skip-approved-specs)\\n'\n );\n console.log(' This is ONLY allowed in development mode.\\n');\n } else {\n validator = new ApprovedSpecsValidator(securityConfig);\n console.log('\\n[@stackwright-pro/openapi] 🔒 Approved-specs enforcement ENABLED');\n console.log(` Approved specs: ${validator.getAllowlistCount()}`);\n }\n }\n\n // Look for integrations config in site config\n const integrations = siteConfig.integrations as unknown[] | undefined;\n\n if (!integrations || !Array.isArray(integrations)) {\n // No integrations configured - silently skip\n return;\n }\n\n // Filter for OpenAPI integrations\n const openAPIIntegrations = integrations.filter(\n (int): int is OpenAPIConfig =>\n typeof int === 'object' && int !== null && 'name' in int && 'spec' in int\n );\n\n if (openAPIIntegrations.length === 0) {\n return;\n }\n\n // Batch validate all specs upfront if validator is enabled\n if (validator) {\n const specUrls = openAPIIntegrations.map((i) => i.spec);\n const results = await validator.validateAll(specUrls);\n\n for (const [url, result] of results) {\n if (!result.valid) {\n // Security rejection - fail hard\n this.printSecurityRejection(result);\n throw new Error(`SPEC_NOT_APPROVED: ${result.error}`);\n }\n\n console.log(` ✓ Approved: ${url}`);\n }\n }\n\n console.log(\n `\\n[@stackwright-pro/openapi] Processing ${openAPIIntegrations.length} integration(s)...`\n );\n\n // Process each OpenAPI integration\n for (const config of openAPIIntegrations) {\n await this.processIntegration(config, projectRoot);\n }\n\n console.log('[@stackwright-pro/openapi] Generation complete\\n');\n }\n\n /**\n * Print a security rejection error in a formatted box\n */\n private printSecurityRejection(result: { errorCode?: string; error?: string }): void {\n const lines: string[] = [];\n\n lines.push(\n '\\n╔══════════════════════════════════════════════════════════════════════════════╗'\n );\n lines.push(\n '║ 🔒 SECURITY REJECTED ║'\n );\n lines.push('╠══════════════════════════════════════════════════════════════════════════════╣');\n lines.push(`║ Error: ${(result.errorCode || 'UNKNOWN').padEnd(73)} ║`);\n lines.push('╠══════════════════════════════════════════════════════════════════════════════╣');\n\n // Print error message with proper wrapping\n const errorLines = (result.error || 'Unknown error').split('\\n');\n const maxLen = 76;\n\n for (const line of errorLines) {\n // Wrap long lines\n if (line.length <= maxLen) {\n lines.push(`║ ${line.padEnd(maxLen)} ║`);\n } else {\n // Split long lines\n let remaining = line;\n while (remaining.length > 0) {\n lines.push(`║ ${remaining.substring(0, maxLen).padEnd(maxLen)} ║`);\n remaining = remaining.substring(maxLen);\n }\n }\n }\n\n lines.push(\n '╚══════════════════════════════════════════════════════════════════════════════╝\\n'\n );\n\n for (const line of lines) {\n console.error(line);\n }\n }\n\n private async processIntegration(config: OpenAPIConfig, projectRoot: string): Promise<void> {\n const { name, spec, auth, mockUrl, collections, endpoints, actions } = config;\n\n console.log(` - Processing integration: ${name}`);\n\n // Resolve spec path (can be URL or local file)\n const specPath = spec.startsWith('http') ? spec : path.resolve(projectRoot, spec);\n\n // Parse OpenAPI spec\n const parser = new OpenAPIParser();\n const { document } = await parser.parse(specPath);\n\n // Override servers array with mock URL if configured\n // This ensures generated client uses the Prism mock server\n if (mockUrl) {\n const originalServer = document.servers?.[0]?.url || 'unknown';\n document.servers = [{ url: mockUrl }];\n console.log(` > Using mock URL: ${mockUrl} (was: ${originalServer})`);\n }\n\n // Create endpoint filter\n const endpointFilter = new EndpointFilter(endpoints);\n\n // Log filter info if configured\n if (endpoints && (endpoints.include?.length || endpoints.exclude?.length)) {\n const includeStr = endpoints.include?.join(', ') || '/**';\n const excludeStr = endpoints.exclude?.length\n ? ` (exclude: ${endpoints.exclude.join(', ')})`\n : '';\n console.log(` > Filter: include [${includeStr}]${excludeStr}`);\n }\n\n // Create output directory\n const outputDir = path.join(projectRoot, 'src', 'generated', name);\n fs.mkdirSync(outputDir, { recursive: true });\n\n // Generate Zod schemas for all collections\n const schemaMapping = await this.generateSchemas(\n document,\n collections || [],\n outputDir,\n name,\n endpointFilter\n );\n\n // Generate TypeScript types\n await this.generateTypes(document, collections || [], outputDir, name);\n\n // Generate CollectionProvider\n if (collections && collections.length > 0) {\n await this.generateProvider(document, config, outputDir, name);\n }\n\n // Generate API client\n await this.generateClient(document, outputDir, name, schemaMapping, endpointFilter);\n\n // Generate CollectionAction implementations\n await this.generateActions(document, config, outputDir, name);\n\n console.log(` > Generated code in src/generated/${name}/`);\n }\n\n private async generateSchemas(\n document: any,\n collections: OpenAPIConfig['collections'],\n outputDir: string,\n integrationName: string,\n endpointFilter: EndpointFilter\n ): Promise<SchemaMapping> {\n const resolver = new SchemaResolver(document);\n const zodGenerator = new ZodSchemaGenerator();\n\n // Single import at top — all schemas use bare: true to avoid duplicates\n let schemasCode = `/**\n * Generated Zod schemas from OpenAPI spec\n * Integration: ${integrationName}\n * \n * DO NOT EDIT - This file is auto-generated by @stackwright-pro/openapi\n * Regenerate by running: pnpm prebuild\n */\n\nimport { z } from 'zod';\n\n`;\n\n // Generate schema for each collection\n if (collections) {\n for (const collection of collections) {\n const { endpoint } = collection;\n // Use configured method, defaulting to GET\n const method = collection.method?.toLowerCase() ?? 'get';\n const schema = resolver.getResponseSchema(endpoint, method);\n\n if (!schema) {\n console.warn(` > No schema found for ${method.toUpperCase()} ${endpoint}`);\n continue;\n }\n\n const collectionName = this.sanitizeName(endpoint);\n const schemaName = `${this.capitalize(collectionName)}Schema`;\n\n // Check if response is array\n const isArray = schema.type === 'array';\n const itemSchema = isArray ? (schema as any).items : schema;\n\n // Generate Zod schema (bare = no duplicate imports)\n const zodCode = zodGenerator.generate(itemSchema, { schemaName, bare: true });\n\n schemasCode += zodCode + '\\n';\n\n // If response is array, create array schema too\n if (isArray) {\n schemasCode += `export const ${this.capitalize(collectionName)}ArraySchema = z.array(${schemaName});\\n\\n`;\n }\n }\n }\n\n // ========================================================================\n // Generate response schemas for filtered endpoints\n // ========================================================================\n schemasCode += '\\n// Response schemas for filtered endpoints\\n';\n\n // Track which schemas we've already generated\n const generatedSchemas = new Set<string>();\n let filteredCount = 0;\n\n const paths = document.paths || {};\n for (const [pathStr, pathItem] of Object.entries(paths) as [string, any][]) {\n // SKIP paths that don't match the filter\n if (!endpointFilter.matches(pathStr)) {\n filteredCount++;\n continue;\n }\n\n const methods = ['get', 'post', 'put', 'patch', 'delete'] as const;\n\n for (const method of methods) {\n const operation = pathItem[method];\n if (!operation) continue;\n\n const opId = operation.operationId || this.generateOperationId(pathStr, method);\n const responseSchemaName = `${this.getOperationTypeName(opId)}ResponseSchema`;\n\n // Skip if already generated\n if (generatedSchemas.has(responseSchemaName)) {\n continue;\n }\n\n // Get the response schema from OpenAPI spec\n const responseSchema = resolver.getResponseSchema(pathStr, method);\n if (!responseSchema) {\n console.warn(` > No response schema for ${method.toUpperCase()} ${pathStr}`);\n continue;\n }\n\n // Check if it's an array response\n const isArray = responseSchema.type === 'array';\n\n if (isArray && (responseSchema as any).items?.$ref) {\n // Array of component schema reference\n const componentName = this.extractComponentName((responseSchema as any).items.$ref);\n schemasCode += `export const ${responseSchemaName} = z.array(${componentName}Schema);\\n`;\n generatedSchemas.add(responseSchemaName);\n } else if ('$ref' in responseSchema && responseSchema.$ref) {\n // Direct component schema reference\n const componentName = this.extractComponentName(responseSchema.$ref as string);\n schemasCode += `export const ${responseSchemaName} = ${componentName}Schema;\\n`;\n generatedSchemas.add(responseSchemaName);\n } else if (isArray) {\n // Inline array schema (bare = no duplicate imports)\n const zodCode = zodGenerator.generate(responseSchema, {\n schemaName: responseSchemaName,\n bare: true,\n });\n schemasCode += zodCode + '\\n';\n generatedSchemas.add(responseSchemaName);\n } else {\n // Inline object schema (bare = no duplicate imports)\n const zodCode = zodGenerator.generate(responseSchema, {\n schemaName: responseSchemaName,\n bare: true,\n });\n schemasCode += zodCode + '\\n';\n generatedSchemas.add(responseSchemaName);\n }\n }\n }\n\n if (filteredCount > 0) {\n console.log(` > Skipped ${filteredCount} paths (filtered)`);\n }\n\n // Build schema mapping for ClientGenerator (only for filtered endpoints)\n const schemaMapping: SchemaMapping = {};\n\n for (const [pathStr, pathItem] of Object.entries(paths) as [string, any][]) {\n // Only include filtered paths\n if (!endpointFilter.matches(pathStr)) {\n continue;\n }\n\n const methods = ['get', 'post', 'put', 'patch', 'delete'] as const;\n\n for (const method of methods) {\n const operation = pathItem[method];\n if (!operation) continue;\n\n const opId = operation.operationId || this.generateOperationId(pathStr, method);\n const responseSchemaName = `${this.getOperationTypeName(opId)}ResponseSchema`;\n\n schemaMapping[opId] = {\n requestSchema: null, // ClientGenerator handles request schema generation + type inference\n responseSchema: responseSchemaName,\n };\n }\n }\n\n // Write schemas file\n fs.writeFileSync(path.join(outputDir, 'schemas.ts'), schemasCode);\n\n return schemaMapping;\n }\n\n private async generateTypes(\n document: any,\n collections: OpenAPIConfig['collections'],\n outputDir: string,\n integrationName: string\n ): Promise<void> {\n let typesCode = `/**\n * Generated TypeScript types from OpenAPI spec\n * Integration: ${integrationName}\n * \n * DO NOT EDIT - This file is auto-generated by @stackwright-pro/openapi\n * Regenerate by running: pnpm prebuild\n */\n\nimport type { z } from 'zod';\nimport type * as schemas from './schemas';\n\n`;\n\n // Infer types from schemas\n if (collections) {\n for (const collection of collections) {\n const collectionName = this.sanitizeName(collection.endpoint);\n const typeName = this.capitalize(collectionName);\n const schemaName = `${typeName}Schema`;\n\n typesCode += `export type ${typeName} = z.infer<typeof schemas.${schemaName}>;\\n`;\n }\n }\n\n // Write types file\n fs.writeFileSync(path.join(outputDir, 'types.ts'), typesCode);\n }\n\n private async generateProvider(\n document: any,\n config: OpenAPIConfig,\n outputDir: string,\n integrationName: string\n ): Promise<void> {\n const generator = new CollectionProviderGenerator(document);\n const { collections, auth } = config;\n\n if (!collections || collections.length === 0) {\n return;\n }\n\n // Collect all schema imports needed\n const schemaImports = new Set<string>();\n\n // Generate each provider class with bare=true (no imports)\n const classBlocks: string[] = [];\n\n for (const collection of collections) {\n const collectionConfig = {\n endpoint: collection.endpoint,\n slugField: collection.slug_field,\n ...(collection.method !== undefined && { method: collection.method }),\n filters: collection.filters,\n };\n\n const providerOptions: ProviderGenerationOptions = { bare: true };\n\n if (auth) {\n if (auth.type === 'bearer' || auth.type === 'apiKey') {\n providerOptions.auth = {\n type: auth.type,\n ...(auth.type === 'apiKey' && { headerName: 'X-API-Key' }),\n };\n } else if (auth.type === 'oauth2') {\n console.warn(\n ` > OAuth2 auth not yet supported for ${collection.endpoint} (coming soon)`\n );\n }\n }\n\n const code = generator.generate(collectionConfig, providerOptions);\n classBlocks.push(code);\n\n // Track needed schema imports\n const collectionName = this.sanitizeName(collection.endpoint);\n const resolver = new SchemaResolver(document);\n const schema = resolver.getResponseSchema(\n collection.endpoint,\n collection.method?.toLowerCase() ?? 'get'\n );\n const isArray = schema?.type === 'array';\n if (isArray) {\n schemaImports.add(`${this.capitalize(collectionName)}ArraySchema`);\n } else {\n schemaImports.add(`${this.capitalize(collectionName)}Schema`);\n }\n }\n\n // Assemble the file with a single import block\n let providerCode = `/**\n * Generated CollectionProvider from OpenAPI spec\n * Integration: ${integrationName}\n * \n * DO NOT EDIT - This file is auto-generated by @stackwright-pro/openapi\n * Regenerate by running: pnpm prebuild\n */\n\nimport type { CollectionProvider, CollectionItem } from '@stackwright/collections';\nimport { ${Array.from(schemaImports).join(', ')} } from './schemas';\n\n`;\n\n providerCode += classBlocks.join('\\n');\n\n // Write provider file\n fs.writeFileSync(path.join(outputDir, 'provider.ts'), providerCode);\n }\n\n private async generateActions(\n document: any,\n config: OpenAPIConfig,\n outputDir: string,\n integrationName: string\n ): Promise<void> {\n const { actions } = config;\n\n if (!actions || actions.length === 0) {\n return;\n }\n\n // Derive client class name — same logic as generateClient() to stay DRY\n const clientClassName = `${this.capitalize(integrationName)}Client`;\n\n const generator = new ActionGenerator(document);\n const code = generator.generate(actions, integrationName, clientClassName);\n\n fs.writeFileSync(path.join(outputDir, 'actions.ts'), code);\n console.log(\n ` > Generated actions.ts (${actions.length} action${actions.length === 1 ? '' : 's'})`\n );\n }\n\n private async generateClient(\n document: any,\n outputDir: string,\n integrationName: string,\n schemaMapping: SchemaMapping,\n endpointFilter: EndpointFilter\n ): Promise<void> {\n // Count endpoints that will be filtered\n const paths = document.paths || {};\n let filteredEndpoints = 0;\n for (const pathStr of Object.keys(paths)) {\n if (!endpointFilter.matches(pathStr)) {\n filteredEndpoints++;\n }\n }\n\n if (filteredEndpoints > 0) {\n console.log(\n ` > Generating client for ${Object.keys(paths).length - filteredEndpoints} endpoints (${filteredEndpoints} filtered)`\n );\n }\n\n const generator = new ClientGenerator(document);\n // Generate the client with custom class name\n const className = `${this.capitalize(integrationName)}Client`;\n const clientCode = generator.generate({\n className,\n includeJsDoc: true,\n schemaMapping,\n validateResponses: true,\n strictValidation: false,\n });\n\n // Write client file\n fs.writeFileSync(path.join(outputDir, 'client.ts'), clientCode);\n }\n\n private extractComponentName(ref: string): string {\n // Extract component name from $ref\n // Example: #/components/schemas/Equipment -> Equipment\n const parts = ref.split('/');\n const lastPart = parts[parts.length - 1];\n return lastPart ?? ref;\n }\n\n private getOperationTypeName(operationId: string): string {\n // Convert operationId to PascalCase for type names\n // Example: listEquipment -> ListEquipment\n return operationId.charAt(0).toUpperCase() + operationId.slice(1);\n }\n\n private generateOperationId(pathStr: string, method: string): string {\n const sanitized = this.sanitizeName(pathStr);\n return `${method}${this.capitalize(sanitized)}`;\n }\n\n private getResponseSchemaName(pathStr: string, method: string): string {\n const sanitized = this.sanitizeName(pathStr);\n const baseName = this.capitalize(sanitized);\n\n // GET /equipment -> ListEquipmentResponseSchema / EquipmentArraySchema\n if (method === 'get' && !pathStr.includes('{')) {\n return `${baseName}ArraySchema`;\n }\n\n // GET /equipment/{id} -> EquipmentSchema (single item)\n return `${baseName}Schema`;\n }\n\n private sanitizeName(pathStr: string): string {\n return pathStr.replace(/^\\//, '').replace(/\\//g, '-').replace(/[{}:]/g, '').replace(/-+/g, '-');\n }\n\n private capitalize(str: string): string {\n return str\n .split('-')\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join('');\n }\n}\n\n/**\n * Factory function to create the plugin instance\n *\n * Usage in user's prebuild script:\n * ```typescript\n * const { createOpenAPIPlugin } = require('@stackwright-pro/openapi/prebuild');\n * runPrebuild({ plugins: [createOpenAPIPlugin()] });\n * ```\n */\nexport function createOpenAPIPlugin(): PrebuildPlugin {\n return new OpenAPIPlugin();\n}\n","import { isIP } from 'net';\nimport type { ZodSchema } from 'zod';\n\n/**\n * Blocked host patterns for SSRF prevention\n */\nconst BLOCKED_HOST_PATTERNS = [\n /^localhost$/i,\n /^127\\./, // Loopback (127.0.0.0/8)\n /^10\\./, // Class A private (10.0.0.0/8)\n /^172\\.(1[6-9]|2[0-9]|3[0-1])\\./, // Class B private (172.16.0.0/12)\n /^192\\.168\\./, // Class C private (192.168.0.0/16)\n /^169\\.254\\./, // Link-local (169.254.0.0/16) - AWS/GCP metadata\n /^0\\./, // Current network (0.0.0.0/8)\n /^::1$/, // IPv6 loopback (no brackets)\n /^\\[::1\\]$/i, // IPv6 loopback (with brackets)\n /^[fF][cCdD][0-9a-fA-F]{2}:/, // IPv6 private (fc00::/7)\n /^169\\.254\\.169\\.254$/i, // AWS metadata endpoint\n /^metadata\\.googleapis\\.com$/i, // GCP metadata endpoint\n /^metadata\\.azure\\.com$/i, // Azure metadata endpoint\n /^imds\\.azure\\.com$/i, // Azure IMDS endpoint\n /^100\\.100\\.100\\.200$/, // Alibaba Cloud metadata\n];\n\n/**\n * Blocked IPv6 prefixes for SSRF prevention\n * Extracted as a named constant for explicit auditability\n */\nconst BLOCKED_IPV6_PREFIXES = [\n '::1', // Loopback\n 'fe80:', // Link-local\n 'fc', // Unique local (fc00::/7 — covers fc00:: through fcff::)\n 'fd', // Unique local (short form)\n];\n\n/**\n * Allowed protocols for outbound requests\n */\nconst ALLOWED_PROTOCOLS = ['http:', 'https:'];\n\n/**\n * NOTE: Validates the URL structure and hostname at call time.\n * Does NOT re-validate after DNS resolution (DNS rebinding).\n * This is acceptable for build-time prebuild use.\n * DO NOT reuse this function for runtime server-side request proxying\n * without adding post-resolution IP validation.\n */\n\n/**\n * Validates that a URL is safe to fetch (SSRF prevention).\n * Exported for use by external consumers and tests.\n *\n * @throws Error if URL targets internal networks or disallowed protocols\n */\nexport function validateUrlSafe(baseUrl: string): URL {\n let url: URL;\n\n try {\n url = new URL(baseUrl);\n } catch {\n throw new Error('SECURITY: baseUrl must be a valid absolute URL');\n }\n\n // Protocol validation\n if (!ALLOWED_PROTOCOLS.includes(url.protocol)) {\n throw new Error('SECURITY: Only HTTP and HTTPS protocols are allowed, got ' + url.protocol);\n }\n\n // Host validation against known-bad patterns\n const hostname = url.hostname.toLowerCase();\n\n for (const pattern of BLOCKED_HOST_PATTERNS) {\n if (pattern.test(hostname)) {\n throw new Error('SECURITY: Blocked internal network address: ' + hostname);\n }\n }\n\n // Deep IPv4 CIDR check for private ranges\n const ip = url.hostname;\n if (/^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$/.test(ip)) {\n const octets = ip.split('.').map(Number);\n\n // With noUncheckedIndexedAccess, we need to check array bounds\n const first = octets[0];\n const second = octets[1];\n\n // 127.x.x.x\n if (first !== undefined && first === 127) {\n throw new Error('SECURITY: Base URL resolves to private IP');\n }\n\n // 10.x.x.x\n if (first !== undefined && first === 10) {\n throw new Error('SECURITY: Base URL resolves to private IP');\n }\n\n // 172.16.x.x - 172.31.x.x\n if (\n first !== undefined &&\n second !== undefined &&\n first === 172 &&\n second >= 16 &&\n second <= 31\n ) {\n throw new Error('SECURITY: Base URL resolves to private IP');\n }\n\n // 192.168.x.x (RFC 1918 private)\n if (first !== undefined && second !== undefined && first === 192 && second === 168) {\n throw new Error('SECURITY: Base URL resolves to private IP');\n }\n\n // 169.254.x.x (link-local)\n if (first !== undefined && second !== undefined && first === 169 && second === 254) {\n throw new Error('SECURITY: Base URL resolves to private IP');\n }\n\n // 0.x.x.x (current network)\n if (first !== undefined && first === 0) {\n throw new Error('SECURITY: Base URL resolves to private IP');\n }\n }\n\n // Strip brackets for IPv6 addresses (e.g., [::1] -> ::1)\n // This is required for isIP() to work correctly\n const cleanHostname = hostname.replace(/^\\[|\\]$/g, '');\n\n // Deep IPv6 check via isIP from 'net'\n const ipVersion = isIP(cleanHostname);\n if (ipVersion === 6) {\n // Check against explicit auditable prefix list\n for (const prefix of BLOCKED_IPV6_PREFIXES) {\n if (cleanHostname.startsWith(prefix)) {\n throw new Error('SECURITY: Base URL resolves to private IP');\n }\n }\n\n // Check IPv4-mapped addresses (::ffff:x.x.x.x) — tunneled private IPs\n if (cleanHostname.startsWith('::ffff:')) {\n const mapped = cleanHostname.slice('::ffff:'.length); // e.g. \"c0a8:101\" or \"192.168.1.1\"\n\n let octets: number[] | null = null;\n\n // Case 1: decimal dotted notation (defense-in-depth; URL parser normalizes this away)\n const decMatch = mapped.match(/^(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$/);\n if (decMatch) {\n octets = decMatch.slice(1, 5).map(Number);\n }\n\n // Case 2: hex group notation — the form URL constructor actually produces\n // e.g. \"c0a8:101\" => 192.168.1.1, \"a9fe:a9fe\" => 169.254.169.254\n const hexMatch = mapped.match(/^([0-9a-f]{1,4}):([0-9a-f]{1,4})$/i);\n if (!octets && hexMatch && hexMatch[1] !== undefined && hexMatch[2] !== undefined) {\n const high = parseInt(hexMatch[1], 16);\n const low = parseInt(hexMatch[2], 16);\n octets = [(high >> 8) & 0xff, high & 0xff, (low >> 8) & 0xff, low & 0xff];\n }\n\n if (octets !== null) {\n const o0 = octets[0];\n const o1 = octets[1];\n if (\n o0 === 127 || // 127.0.0.0/8 loopback\n o0 === 10 || // 10.0.0.0/8 private\n o0 === 0 || // 0.0.0.0/8 current network\n (o0 === 172 && o1 !== undefined && o1 >= 16 && o1 <= 31) || // 172.16/12 private\n (o0 === 192 && o1 === 168) || // 192.168/16 private\n (o0 === 169 && o1 === 254) // 169.254/16 link-local / IMDS\n ) {\n throw new Error('SECURITY: Base URL resolves to private IP');\n }\n // Allow public IPv4-mapped addresses (e.g., ::ffff:8.8.8.8 → ::ffff:808:808)\n } else {\n // Unrecognised ::ffff: format — fail closed\n throw new Error('SECURITY: Base URL resolves to unrecognisable IPv4-mapped address');\n }\n }\n }\n\n return url;\n}\n\n/**\n * Alias for validateUrlSafe — backward compatibility export\n */\nexport const isUrlSafe = validateUrlSafe;\n\n/**\n * Validates endpoint for path traversal\n */\nfunction validateEndpoint(endpoint: string): void {\n if (endpoint.includes('..')) {\n throw new Error('SECURITY: Path traversal detected in endpoint');\n }\n\n if (endpoint.includes('\\\\')) {\n throw new Error('SECURITY: Backslash detected in endpoint');\n }\n}\n\n/**\n * Configuration for OpenAPI source adapter\n */\nexport interface OpenAPISourceConfig<T = unknown> {\n /** Base URL of the API */\n baseUrl: string;\n\n /** API endpoint path */\n endpoint: string;\n\n /** HTTP method (default: 'get') */\n method?: 'get' | 'post' | 'put' | 'patch' | 'delete';\n\n /** Optional query parameters */\n params?: Record<string, string | number | boolean>;\n\n /** Optional request body */\n body?: unknown;\n\n /** Optional headers */\n headers?: Record<string, string>;\n\n /** Optional Zod schema for validation */\n schema?: ZodSchema<T>;\n\n /** Authentication config */\n auth?: {\n type: 'bearer' | 'apiKey';\n token?: string;\n apiKey?: string;\n headerName?: string;\n };\n}\n\n/**\n * Creates a fetcher function from OpenAPI configuration\n *\n * @example\n * ```typescript\n * const fetcher = createOpenAPIFetcher({\n * baseUrl: 'https://api.example.com',\n * endpoint: '/equipment',\n * auth: { type: 'bearer', token: process.env.API_TOKEN }\n * });\n *\n * // Use with Pulse\n * <Pulse fetcher={fetcher} interval={5000} />\n * ```\n */\nexport function createOpenAPIFetcher<T = unknown>(\n config: OpenAPISourceConfig<T>\n): () => Promise<T> {\n const { baseUrl, endpoint, method = 'get', params, body, headers = {}, auth, schema } = config;\n\n // Validate URLs (SSRF prevention)\n const validatedBaseUrl = validateUrlSafe(baseUrl);\n validateEndpoint(endpoint);\n\n return async (): Promise<T> => {\n // Build URL with query params\n const url = new URL(endpoint, validatedBaseUrl.toString());\n if (params) {\n Object.entries(params).forEach(([key, value]) => {\n url.searchParams.append(key, String(value));\n });\n }\n\n // Build headers\n const requestHeaders: Record<string, string> = {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n ...headers,\n };\n\n // Add auth\n if (auth) {\n if (auth.type === 'bearer' && auth.token) {\n requestHeaders['Authorization'] = `Bearer ${auth.token}`;\n } else if (auth.type === 'apiKey' && auth.apiKey) {\n requestHeaders[auth.headerName ?? 'X-API-Key'] = auth.apiKey;\n }\n }\n\n // Make request (only include body for methods that support it)\n const supportsBody = ['post', 'put', 'patch', 'delete'].includes(method);\n const response = await fetch(url.toString(), {\n method: method.toUpperCase(),\n headers: requestHeaders,\n body: supportsBody && body ? JSON.stringify(body) : null,\n redirect: 'error', // Prevent SSRF via 301/302 redirect to internal addresses\n });\n\n // Sanitize error message (don't expose server details)\n if (!response.ok) {\n const safeStatus = response.status;\n throw new Error('API error: ' + safeStatus);\n }\n\n const result = await response.json();\n\n // Validate with schema if provided\n if (schema) {\n return schema.parse(result) as T;\n }\n\n return result as T;\n };\n}\n"]}
|