@noldova/context.parsers.regex 0.0.0-stage → 0.0.2

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.
Files changed (320) hide show
  1. package/LICENSE +21 -0
  2. package/api/index.d.ts +1752 -0
  3. package/api/index.js +78 -0
  4. package/api/index.js.map +1 -0
  5. package/extensions/nodes/assertions/regex-end-assertion.node.extensions.js +12 -0
  6. package/extensions/nodes/assertions/regex-end-assertion.node.extensions.js.map +1 -0
  7. package/extensions/nodes/assertions/regex-non-word-boundary-assertion.node.extensions.js +12 -0
  8. package/extensions/nodes/assertions/regex-non-word-boundary-assertion.node.extensions.js.map +1 -0
  9. package/extensions/nodes/assertions/regex-start-assertion.node.extensions.js +12 -0
  10. package/extensions/nodes/assertions/regex-start-assertion.node.extensions.js.map +1 -0
  11. package/extensions/nodes/assertions/regex-word-boundary-assertion.node.extensions.js +12 -0
  12. package/extensions/nodes/assertions/regex-word-boundary-assertion.node.extensions.js.map +1 -0
  13. package/extensions/nodes/classes/regex-character-class.node.extensions.js +12 -0
  14. package/extensions/nodes/classes/regex-character-class.node.extensions.js.map +1 -0
  15. package/extensions/nodes/classes/regex-class-intersection.node.extensions.js +12 -0
  16. package/extensions/nodes/classes/regex-class-intersection.node.extensions.js.map +1 -0
  17. package/extensions/nodes/classes/regex-class-string-disjunction.node.extensions.js +12 -0
  18. package/extensions/nodes/classes/regex-class-string-disjunction.node.extensions.js.map +1 -0
  19. package/extensions/nodes/classes/regex-class-subtraction.node.extensions.js +12 -0
  20. package/extensions/nodes/classes/regex-class-subtraction.node.extensions.js.map +1 -0
  21. package/extensions/nodes/classes/regex-class-union.node.extensions.js +12 -0
  22. package/extensions/nodes/classes/regex-class-union.node.extensions.js.map +1 -0
  23. package/extensions/nodes/escapes/regex-backspace-escape.node.extensions.js +13 -0
  24. package/extensions/nodes/escapes/regex-backspace-escape.node.extensions.js.map +1 -0
  25. package/extensions/nodes/escapes/regex-carriage-return-escape.node.extensions.js +13 -0
  26. package/extensions/nodes/escapes/regex-carriage-return-escape.node.extensions.js.map +1 -0
  27. package/extensions/nodes/escapes/regex-class-control-escape.node.extensions.js +12 -0
  28. package/extensions/nodes/escapes/regex-class-control-escape.node.extensions.js.map +1 -0
  29. package/extensions/nodes/escapes/regex-control-letter-escape.node.extensions.js +12 -0
  30. package/extensions/nodes/escapes/regex-control-letter-escape.node.extensions.js.map +1 -0
  31. package/extensions/nodes/escapes/regex-form-feed-escape.node.extensions.js +13 -0
  32. package/extensions/nodes/escapes/regex-form-feed-escape.node.extensions.js.map +1 -0
  33. package/extensions/nodes/escapes/regex-hex-escape.node.extensions.js +12 -0
  34. package/extensions/nodes/escapes/regex-hex-escape.node.extensions.js.map +1 -0
  35. package/extensions/nodes/escapes/regex-identity-escape.node.extensions.js +12 -0
  36. package/extensions/nodes/escapes/regex-identity-escape.node.extensions.js.map +1 -0
  37. package/extensions/nodes/escapes/regex-legacy-octal-escape.node.extensions.js +12 -0
  38. package/extensions/nodes/escapes/regex-legacy-octal-escape.node.extensions.js.map +1 -0
  39. package/extensions/nodes/escapes/regex-newline-escape.node.extensions.js +13 -0
  40. package/extensions/nodes/escapes/regex-newline-escape.node.extensions.js.map +1 -0
  41. package/extensions/nodes/escapes/regex-null-escape.node.extensions.js +13 -0
  42. package/extensions/nodes/escapes/regex-null-escape.node.extensions.js.map +1 -0
  43. package/extensions/nodes/escapes/regex-tab-escape.node.extensions.js +13 -0
  44. package/extensions/nodes/escapes/regex-tab-escape.node.extensions.js.map +1 -0
  45. package/extensions/nodes/escapes/regex-unicode-escape.node.extensions.js +12 -0
  46. package/extensions/nodes/escapes/regex-unicode-escape.node.extensions.js.map +1 -0
  47. package/extensions/nodes/escapes/regex-unicode-property-escape.node.extensions.js +12 -0
  48. package/extensions/nodes/escapes/regex-unicode-property-escape.node.extensions.js.map +1 -0
  49. package/extensions/nodes/escapes/regex-vertical-tab-escape.node.extensions.js +13 -0
  50. package/extensions/nodes/escapes/regex-vertical-tab-escape.node.extensions.js.map +1 -0
  51. package/extensions/nodes/node.extensions.js +78 -0
  52. package/extensions/nodes/node.extensions.js.map +1 -0
  53. package/extensions/nodes/punctuators/regex-ampersand-ampersand.node.extensions.js +21 -0
  54. package/extensions/nodes/punctuators/regex-ampersand-ampersand.node.extensions.js.map +1 -0
  55. package/extensions/nodes/punctuators/regex-asterisk.node.extensions.js +16 -0
  56. package/extensions/nodes/punctuators/regex-asterisk.node.extensions.js.map +1 -0
  57. package/extensions/nodes/punctuators/regex-bar.node.extensions.js +12 -0
  58. package/extensions/nodes/punctuators/regex-bar.node.extensions.js.map +1 -0
  59. package/extensions/nodes/punctuators/regex-close-brace.node.extensions.js +16 -0
  60. package/extensions/nodes/punctuators/regex-close-brace.node.extensions.js.map +1 -0
  61. package/extensions/nodes/punctuators/regex-close-bracket.node.extensions.js +16 -0
  62. package/extensions/nodes/punctuators/regex-close-bracket.node.extensions.js.map +1 -0
  63. package/extensions/nodes/punctuators/regex-close-parenthesis.node.extensions.js +12 -0
  64. package/extensions/nodes/punctuators/regex-close-parenthesis.node.extensions.js.map +1 -0
  65. package/extensions/nodes/punctuators/regex-colon.node.extensions.js +14 -0
  66. package/extensions/nodes/punctuators/regex-colon.node.extensions.js.map +1 -0
  67. package/extensions/nodes/punctuators/regex-comma.node.extensions.js +14 -0
  68. package/extensions/nodes/punctuators/regex-comma.node.extensions.js.map +1 -0
  69. package/extensions/nodes/punctuators/regex-equals.node.extensions.js +14 -0
  70. package/extensions/nodes/punctuators/regex-equals.node.extensions.js.map +1 -0
  71. package/extensions/nodes/punctuators/regex-exclamation.node.extensions.js +14 -0
  72. package/extensions/nodes/punctuators/regex-exclamation.node.extensions.js.map +1 -0
  73. package/extensions/nodes/punctuators/regex-greater-than.node.extensions.js +14 -0
  74. package/extensions/nodes/punctuators/regex-greater-than.node.extensions.js.map +1 -0
  75. package/extensions/nodes/punctuators/regex-hyphen-hyphen.node.extensions.js +21 -0
  76. package/extensions/nodes/punctuators/regex-hyphen-hyphen.node.extensions.js.map +1 -0
  77. package/extensions/nodes/punctuators/regex-hyphen.node.extensions.js +18 -0
  78. package/extensions/nodes/punctuators/regex-hyphen.node.extensions.js.map +1 -0
  79. package/extensions/nodes/punctuators/regex-less-than.node.extensions.js +14 -0
  80. package/extensions/nodes/punctuators/regex-less-than.node.extensions.js.map +1 -0
  81. package/extensions/nodes/punctuators/regex-open-brace.node.extensions.js +16 -0
  82. package/extensions/nodes/punctuators/regex-open-brace.node.extensions.js.map +1 -0
  83. package/extensions/nodes/punctuators/regex-open-bracket.node.extensions.js +12 -0
  84. package/extensions/nodes/punctuators/regex-open-bracket.node.extensions.js.map +1 -0
  85. package/extensions/nodes/punctuators/regex-open-parenthesis.node.extensions.js +12 -0
  86. package/extensions/nodes/punctuators/regex-open-parenthesis.node.extensions.js.map +1 -0
  87. package/extensions/nodes/punctuators/regex-plus.node.extensions.js +16 -0
  88. package/extensions/nodes/punctuators/regex-plus.node.extensions.js.map +1 -0
  89. package/extensions/nodes/punctuators/regex-question.node.extensions.js +19 -0
  90. package/extensions/nodes/punctuators/regex-question.node.extensions.js.map +1 -0
  91. package/extensions/nodes/regex-character.node.extensions.js +12 -0
  92. package/extensions/nodes/regex-character.node.extensions.js.map +1 -0
  93. package/models/diagnostics/regex-diagnostic-templates.js +53 -0
  94. package/models/diagnostics/regex-diagnostic-templates.js.map +1 -0
  95. package/models/nodes/assertions/regex-end-assertion.node.js +15 -0
  96. package/models/nodes/assertions/regex-end-assertion.node.js.map +1 -0
  97. package/models/nodes/assertions/regex-lookahead-assertion.node.js +18 -0
  98. package/models/nodes/assertions/regex-lookahead-assertion.node.js.map +1 -0
  99. package/models/nodes/assertions/regex-lookbehind-assertion.node.js +18 -0
  100. package/models/nodes/assertions/regex-lookbehind-assertion.node.js.map +1 -0
  101. package/models/nodes/assertions/regex-non-word-boundary-assertion.node.js +15 -0
  102. package/models/nodes/assertions/regex-non-word-boundary-assertion.node.js.map +1 -0
  103. package/models/nodes/assertions/regex-start-assertion.node.js +15 -0
  104. package/models/nodes/assertions/regex-start-assertion.node.js.map +1 -0
  105. package/models/nodes/assertions/regex-word-boundary-assertion.node.js +15 -0
  106. package/models/nodes/assertions/regex-word-boundary-assertion.node.js.map +1 -0
  107. package/models/nodes/classes/regex-character-class.node.js +20 -0
  108. package/models/nodes/classes/regex-character-class.node.js.map +1 -0
  109. package/models/nodes/classes/regex-character-range.node.js +18 -0
  110. package/models/nodes/classes/regex-character-range.node.js.map +1 -0
  111. package/models/nodes/classes/regex-class-intersection.node.js +17 -0
  112. package/models/nodes/classes/regex-class-intersection.node.js.map +1 -0
  113. package/models/nodes/classes/regex-class-string-disjunction.node.js +19 -0
  114. package/models/nodes/classes/regex-class-string-disjunction.node.js.map +1 -0
  115. package/models/nodes/classes/regex-class-string.node.js +14 -0
  116. package/models/nodes/classes/regex-class-string.node.js.map +1 -0
  117. package/models/nodes/classes/regex-class-subtraction.node.js +17 -0
  118. package/models/nodes/classes/regex-class-subtraction.node.js.map +1 -0
  119. package/models/nodes/classes/regex-class-union.node.js +14 -0
  120. package/models/nodes/classes/regex-class-union.node.js.map +1 -0
  121. package/models/nodes/escapes/regex-backreference.node.js +16 -0
  122. package/models/nodes/escapes/regex-backreference.node.js.map +1 -0
  123. package/models/nodes/escapes/regex-backspace-escape.node.js +15 -0
  124. package/models/nodes/escapes/regex-backspace-escape.node.js.map +1 -0
  125. package/models/nodes/escapes/regex-carriage-return-escape.node.js +15 -0
  126. package/models/nodes/escapes/regex-carriage-return-escape.node.js.map +1 -0
  127. package/models/nodes/escapes/regex-class-control-escape.node.js +16 -0
  128. package/models/nodes/escapes/regex-class-control-escape.node.js.map +1 -0
  129. package/models/nodes/escapes/regex-control-letter-escape.node.js +16 -0
  130. package/models/nodes/escapes/regex-control-letter-escape.node.js.map +1 -0
  131. package/models/nodes/escapes/regex-decimal-escape.node.js +16 -0
  132. package/models/nodes/escapes/regex-decimal-escape.node.js.map +1 -0
  133. package/models/nodes/escapes/regex-digit-escape.node.js +15 -0
  134. package/models/nodes/escapes/regex-digit-escape.node.js.map +1 -0
  135. package/models/nodes/escapes/regex-form-feed-escape.node.js +15 -0
  136. package/models/nodes/escapes/regex-form-feed-escape.node.js.map +1 -0
  137. package/models/nodes/escapes/regex-hex-escape.node.js +16 -0
  138. package/models/nodes/escapes/regex-hex-escape.node.js.map +1 -0
  139. package/models/nodes/escapes/regex-identity-escape.node.js +16 -0
  140. package/models/nodes/escapes/regex-identity-escape.node.js.map +1 -0
  141. package/models/nodes/escapes/regex-legacy-octal-escape.node.js +16 -0
  142. package/models/nodes/escapes/regex-legacy-octal-escape.node.js.map +1 -0
  143. package/models/nodes/escapes/regex-named-backreference.node.js +16 -0
  144. package/models/nodes/escapes/regex-named-backreference.node.js.map +1 -0
  145. package/models/nodes/escapes/regex-newline-escape.node.js +15 -0
  146. package/models/nodes/escapes/regex-newline-escape.node.js.map +1 -0
  147. package/models/nodes/escapes/regex-non-digit-escape.node.js +15 -0
  148. package/models/nodes/escapes/regex-non-digit-escape.node.js.map +1 -0
  149. package/models/nodes/escapes/regex-non-whitespace-escape.node.js +15 -0
  150. package/models/nodes/escapes/regex-non-whitespace-escape.node.js.map +1 -0
  151. package/models/nodes/escapes/regex-non-word-escape.node.js +15 -0
  152. package/models/nodes/escapes/regex-non-word-escape.node.js.map +1 -0
  153. package/models/nodes/escapes/regex-null-escape.node.js +15 -0
  154. package/models/nodes/escapes/regex-null-escape.node.js.map +1 -0
  155. package/models/nodes/escapes/regex-tab-escape.node.js +15 -0
  156. package/models/nodes/escapes/regex-tab-escape.node.js.map +1 -0
  157. package/models/nodes/escapes/regex-unicode-escape.node.js +16 -0
  158. package/models/nodes/escapes/regex-unicode-escape.node.js.map +1 -0
  159. package/models/nodes/escapes/regex-unicode-property-escape.node.js +22 -0
  160. package/models/nodes/escapes/regex-unicode-property-escape.node.js.map +1 -0
  161. package/models/nodes/escapes/regex-vertical-tab-escape.node.js +15 -0
  162. package/models/nodes/escapes/regex-vertical-tab-escape.node.js.map +1 -0
  163. package/models/nodes/escapes/regex-whitespace-escape.node.js +15 -0
  164. package/models/nodes/escapes/regex-whitespace-escape.node.js.map +1 -0
  165. package/models/nodes/escapes/regex-word-escape.node.js +15 -0
  166. package/models/nodes/escapes/regex-word-escape.node.js.map +1 -0
  167. package/models/nodes/groups/regex-capturing-group.node.js +18 -0
  168. package/models/nodes/groups/regex-capturing-group.node.js.map +1 -0
  169. package/models/nodes/groups/regex-modifier-group.node.js +20 -0
  170. package/models/nodes/groups/regex-modifier-group.node.js.map +1 -0
  171. package/models/nodes/groups/regex-named-capturing-group.node.js +20 -0
  172. package/models/nodes/groups/regex-named-capturing-group.node.js.map +1 -0
  173. package/models/nodes/groups/regex-non-capturing-group.node.js +16 -0
  174. package/models/nodes/groups/regex-non-capturing-group.node.js.map +1 -0
  175. package/models/nodes/punctuators/regex-ampersand-ampersand.node.js +15 -0
  176. package/models/nodes/punctuators/regex-ampersand-ampersand.node.js.map +1 -0
  177. package/models/nodes/punctuators/regex-asterisk.node.js +15 -0
  178. package/models/nodes/punctuators/regex-asterisk.node.js.map +1 -0
  179. package/models/nodes/punctuators/regex-bar.node.js +15 -0
  180. package/models/nodes/punctuators/regex-bar.node.js.map +1 -0
  181. package/models/nodes/punctuators/regex-class-string-disjunction-start.node.js +15 -0
  182. package/models/nodes/punctuators/regex-class-string-disjunction-start.node.js.map +1 -0
  183. package/models/nodes/punctuators/regex-close-brace.node.js +15 -0
  184. package/models/nodes/punctuators/regex-close-brace.node.js.map +1 -0
  185. package/models/nodes/punctuators/regex-close-bracket.node.js +15 -0
  186. package/models/nodes/punctuators/regex-close-bracket.node.js.map +1 -0
  187. package/models/nodes/punctuators/regex-close-parenthesis.node.js +15 -0
  188. package/models/nodes/punctuators/regex-close-parenthesis.node.js.map +1 -0
  189. package/models/nodes/punctuators/regex-colon.node.js +15 -0
  190. package/models/nodes/punctuators/regex-colon.node.js.map +1 -0
  191. package/models/nodes/punctuators/regex-comma.node.js +15 -0
  192. package/models/nodes/punctuators/regex-comma.node.js.map +1 -0
  193. package/models/nodes/punctuators/regex-equals.node.js +15 -0
  194. package/models/nodes/punctuators/regex-equals.node.js.map +1 -0
  195. package/models/nodes/punctuators/regex-exclamation.node.js +15 -0
  196. package/models/nodes/punctuators/regex-exclamation.node.js.map +1 -0
  197. package/models/nodes/punctuators/regex-greater-than.node.js +15 -0
  198. package/models/nodes/punctuators/regex-greater-than.node.js.map +1 -0
  199. package/models/nodes/punctuators/regex-hyphen-hyphen.node.js +15 -0
  200. package/models/nodes/punctuators/regex-hyphen-hyphen.node.js.map +1 -0
  201. package/models/nodes/punctuators/regex-hyphen.node.js +15 -0
  202. package/models/nodes/punctuators/regex-hyphen.node.js.map +1 -0
  203. package/models/nodes/punctuators/regex-less-than.node.js +15 -0
  204. package/models/nodes/punctuators/regex-less-than.node.js.map +1 -0
  205. package/models/nodes/punctuators/regex-open-brace.node.js +15 -0
  206. package/models/nodes/punctuators/regex-open-brace.node.js.map +1 -0
  207. package/models/nodes/punctuators/regex-open-bracket.node.js +15 -0
  208. package/models/nodes/punctuators/regex-open-bracket.node.js.map +1 -0
  209. package/models/nodes/punctuators/regex-open-parenthesis.node.js +15 -0
  210. package/models/nodes/punctuators/regex-open-parenthesis.node.js.map +1 -0
  211. package/models/nodes/punctuators/regex-plus.node.js +15 -0
  212. package/models/nodes/punctuators/regex-plus.node.js.map +1 -0
  213. package/models/nodes/punctuators/regex-question.node.js +15 -0
  214. package/models/nodes/punctuators/regex-question.node.js.map +1 -0
  215. package/models/nodes/regex-alternative.node.js +14 -0
  216. package/models/nodes/regex-alternative.node.js.map +1 -0
  217. package/models/nodes/regex-character.node.js +14 -0
  218. package/models/nodes/regex-character.node.js.map +1 -0
  219. package/models/nodes/regex-disjunction.node.js +17 -0
  220. package/models/nodes/regex-disjunction.node.js.map +1 -0
  221. package/models/nodes/regex-dot.node.js +15 -0
  222. package/models/nodes/regex-dot.node.js.map +1 -0
  223. package/models/nodes/regex-flags.node.js +31 -0
  224. package/models/nodes/regex-flags.node.js.map +1 -0
  225. package/models/nodes/regex-pattern.node.js +18 -0
  226. package/models/nodes/regex-pattern.node.js.map +1 -0
  227. package/models/nodes/regex-quantifier.node.js +20 -0
  228. package/models/nodes/regex-quantifier.node.js.map +1 -0
  229. package/models/nodes/regex-unknown.node.js +14 -0
  230. package/models/nodes/regex-unknown.node.js.map +1 -0
  231. package/models/nodes/regex.node.js +20 -0
  232. package/models/nodes/regex.node.js.map +1 -0
  233. package/models/regex-alternative-branch.js +16 -0
  234. package/models/regex-alternative-branch.js.map +1 -0
  235. package/models/regex-capturing-group-summary.js +16 -0
  236. package/models/regex-capturing-group-summary.js.map +1 -0
  237. package/models/regex-group-name.js +16 -0
  238. package/models/regex-group-name.js.map +1 -0
  239. package/models/regex-named-group-branch.js +12 -0
  240. package/models/regex-named-group-branch.js.map +1 -0
  241. package/models/regex-parser-context.js +41 -0
  242. package/models/regex-parser-context.js.map +1 -0
  243. package/models/regex-unicode-escape-value.js +16 -0
  244. package/models/regex-unicode-escape-value.js.map +1 -0
  245. package/package.json +26 -4
  246. package/resources.js +112 -0
  247. package/resources.js.map +1 -0
  248. package/services/lexers/character.lexer.js +24 -0
  249. package/services/lexers/character.lexer.js.map +1 -0
  250. package/services/lexers/code-point-escape.lexer.js +56 -0
  251. package/services/lexers/code-point-escape.lexer.js.map +1 -0
  252. package/services/lexers/control-escape.lexer.js +40 -0
  253. package/services/lexers/control-escape.lexer.js.map +1 -0
  254. package/services/lexers/escape.lexer.js +130 -0
  255. package/services/lexers/escape.lexer.js.map +1 -0
  256. package/services/lexers/named-backreference.lexer.js +48 -0
  257. package/services/lexers/named-backreference.lexer.js.map +1 -0
  258. package/services/lexers/numeric-escape.lexer.js +87 -0
  259. package/services/lexers/numeric-escape.lexer.js.map +1 -0
  260. package/services/lexers/regex.lexer.js +200 -0
  261. package/services/lexers/regex.lexer.js.map +1 -0
  262. package/services/lexers/unicode-property-escape.lexer.js +59 -0
  263. package/services/lexers/unicode-property-escape.lexer.js.map +1 -0
  264. package/services/parsers/regex-alternative.parser.js +27 -0
  265. package/services/parsers/regex-alternative.parser.js.map +1 -0
  266. package/services/parsers/regex-assertion.parser.js +38 -0
  267. package/services/parsers/regex-assertion.parser.js.map +1 -0
  268. package/services/parsers/regex-capturing-group.parser.js +24 -0
  269. package/services/parsers/regex-capturing-group.parser.js.map +1 -0
  270. package/services/parsers/regex-character-class.parser.js +107 -0
  271. package/services/parsers/regex-character-class.parser.js.map +1 -0
  272. package/services/parsers/regex-class-set-expression.parser.js +114 -0
  273. package/services/parsers/regex-class-set-expression.parser.js.map +1 -0
  274. package/services/parsers/regex-class-string-disjunction.parser.js +57 -0
  275. package/services/parsers/regex-class-string-disjunction.parser.js.map +1 -0
  276. package/services/parsers/regex-disjunction.parser.js +33 -0
  277. package/services/parsers/regex-disjunction.parser.js.map +1 -0
  278. package/services/parsers/regex-group-end.parser.js +25 -0
  279. package/services/parsers/regex-group-end.parser.js.map +1 -0
  280. package/services/parsers/regex-group.parser.js +91 -0
  281. package/services/parsers/regex-group.parser.js.map +1 -0
  282. package/services/parsers/regex-lookaround.parser.js +35 -0
  283. package/services/parsers/regex-lookaround.parser.js.map +1 -0
  284. package/services/parsers/regex-modifier-group.parser.js +78 -0
  285. package/services/parsers/regex-modifier-group.parser.js.map +1 -0
  286. package/services/parsers/regex-named-capturing-group.parser.js +60 -0
  287. package/services/parsers/regex-named-capturing-group.parser.js.map +1 -0
  288. package/services/parsers/regex-non-capturing-group.parser.js +24 -0
  289. package/services/parsers/regex-non-capturing-group.parser.js.map +1 -0
  290. package/services/parsers/regex-pattern.parser.js +23 -0
  291. package/services/parsers/regex-pattern.parser.js.map +1 -0
  292. package/services/parsers/regex-quantifier.parser.js +85 -0
  293. package/services/parsers/regex-quantifier.parser.js.map +1 -0
  294. package/services/parsers/regex-term.parser.js +50 -0
  295. package/services/parsers/regex-term.parser.js.map +1 -0
  296. package/services/readers/regex-capturing-group-summary.reader.js +56 -0
  297. package/services/readers/regex-capturing-group-summary.reader.js.map +1 -0
  298. package/services/readers/regex-group-name.reader.js +44 -0
  299. package/services/readers/regex-group-name.reader.js.map +1 -0
  300. package/services/readers/regex-unicode-escape.reader.js +72 -0
  301. package/services/readers/regex-unicode-escape.reader.js.map +1 -0
  302. package/services/regex-named-group-registry.js +48 -0
  303. package/services/regex-named-group-registry.js.map +1 -0
  304. package/services/regex-syntax.parser.js +73 -0
  305. package/services/regex-syntax.parser.js.map +1 -0
  306. package/services/regex.parser.js +39 -0
  307. package/services/regex.parser.js.map +1 -0
  308. package/services/unicode/regex-unicode-property-catalog.js +118 -0
  309. package/services/unicode/regex-unicode-property-catalog.js.map +1 -0
  310. package/services/validators/regex-character-range.validator.js +22 -0
  311. package/services/validators/regex-character-range.validator.js.map +1 -0
  312. package/services/validators/regex-class-set-character.validator.js +30 -0
  313. package/services/validators/regex-class-set-character.validator.js.map +1 -0
  314. package/services/validators/regex-flag.validator.js +36 -0
  315. package/services/validators/regex-flag.validator.js.map +1 -0
  316. package/services/validators/regex-group-name.validator.js +17 -0
  317. package/services/validators/regex-group-name.validator.js.map +1 -0
  318. package/services/validators/regex-identity-escape.validator.js +25 -0
  319. package/services/validators/regex-identity-escape.validator.js.map +1 -0
  320. package/README.md +0 -3
@@ -0,0 +1,130 @@
1
+ /**
2
+ * @license
3
+ * Copyright (c) Noldova.
4
+ *
5
+ * This source code is licensed under the license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+ import "@noldova/context.core";
9
+ import "@noldova/context.text";
10
+ import { RegexDiagnosticTemplates } from "../../models/diagnostics/regex-diagnostic-templates.js";
11
+ import { RegexNonWordBoundaryAssertionNode } from "../../models/nodes/assertions/regex-non-word-boundary-assertion.node.js";
12
+ import { RegexWordBoundaryAssertionNode } from "../../models/nodes/assertions/regex-word-boundary-assertion.node.js";
13
+ import { RegexBackspaceEscapeNode } from "../../models/nodes/escapes/regex-backspace-escape.node.js";
14
+ import { RegexCarriageReturnEscapeNode } from "../../models/nodes/escapes/regex-carriage-return-escape.node.js";
15
+ import { RegexDigitEscapeNode } from "../../models/nodes/escapes/regex-digit-escape.node.js";
16
+ import { RegexFormFeedEscapeNode } from "../../models/nodes/escapes/regex-form-feed-escape.node.js";
17
+ import { RegexIdentityEscapeNode } from "../../models/nodes/escapes/regex-identity-escape.node.js";
18
+ import { RegexNewlineEscapeNode } from "../../models/nodes/escapes/regex-newline-escape.node.js";
19
+ import { RegexNonDigitEscapeNode } from "../../models/nodes/escapes/regex-non-digit-escape.node.js";
20
+ import { RegexNonWhitespaceEscapeNode } from "../../models/nodes/escapes/regex-non-whitespace-escape.node.js";
21
+ import { RegexNonWordEscapeNode } from "../../models/nodes/escapes/regex-non-word-escape.node.js";
22
+ import { RegexTabEscapeNode } from "../../models/nodes/escapes/regex-tab-escape.node.js";
23
+ import { RegexVerticalTabEscapeNode } from "../../models/nodes/escapes/regex-vertical-tab-escape.node.js";
24
+ import { RegexWhitespaceEscapeNode } from "../../models/nodes/escapes/regex-whitespace-escape.node.js";
25
+ import { RegexWordEscapeNode } from "../../models/nodes/escapes/regex-word-escape.node.js";
26
+ import { RegexClassStringDisjunctionStartNode } from "../../models/nodes/punctuators/regex-class-string-disjunction-start.node.js";
27
+ import { RegexUnknownNode } from "../../models/nodes/regex-unknown.node.js";
28
+ import { Resources } from "../../resources.js";
29
+ import { RegexIdentityEscapeValidator } from "../validators/regex-identity-escape.validator.js";
30
+ import { CodePointEscapeLexer } from "./code-point-escape.lexer.js";
31
+ import { ControlEscapeLexer } from "./control-escape.lexer.js";
32
+ import { NamedBackreferenceLexer } from "./named-backreference.lexer.js";
33
+ import { NumericEscapeLexer } from "./numeric-escape.lexer.js";
34
+ import { UnicodePropertyEscapeLexer } from "./unicode-property-escape.lexer.js";
35
+ export class EscapeLexer {
36
+ codePointEscapeLexer = new CodePointEscapeLexer();
37
+ controlEscapeLexer = new ControlEscapeLexer();
38
+ identityEscapeValidator = new RegexIdentityEscapeValidator();
39
+ namedBackreferenceLexer = new NamedBackreferenceLexer();
40
+ numericEscapeLexer = new NumericEscapeLexer();
41
+ unicodePropertyEscapeLexer = new UnicodePropertyEscapeLexer();
42
+ lex(lexer) {
43
+ const reader = lexer.reader;
44
+ const startOffset = reader.currentOffset;
45
+ reader.advance();
46
+ if (reader.isAtEnd)
47
+ return this.createUnknown(lexer, startOffset);
48
+ const codePoint = lexer.unicodeMode ? reader.readCodePoint() : reader.readCodeUnit().charCodeAt(0);
49
+ const character = String.fromCodePoint(codePoint);
50
+ switch (character) {
51
+ case Resources.digitEscapeCharacter:
52
+ return new RegexDigitEscapeNode(this.createSpan(lexer, startOffset));
53
+ case Resources.nonDigitEscapeCharacter:
54
+ return new RegexNonDigitEscapeNode(this.createSpan(lexer, startOffset));
55
+ case Resources.wordEscapeCharacter:
56
+ return new RegexWordEscapeNode(this.createSpan(lexer, startOffset));
57
+ case Resources.nonWordEscapeCharacter:
58
+ return new RegexNonWordEscapeNode(this.createSpan(lexer, startOffset));
59
+ case Resources.whitespaceEscapeCharacter:
60
+ return new RegexWhitespaceEscapeNode(this.createSpan(lexer, startOffset));
61
+ case Resources.nonWhitespaceEscapeCharacter:
62
+ return new RegexNonWhitespaceEscapeNode(this.createSpan(lexer, startOffset));
63
+ case Resources.formFeedEscapeCharacter:
64
+ return new RegexFormFeedEscapeNode(this.createSpan(lexer, startOffset));
65
+ case Resources.newlineEscapeCharacter:
66
+ return new RegexNewlineEscapeNode(this.createSpan(lexer, startOffset));
67
+ case Resources.carriageReturnEscapeCharacter:
68
+ return new RegexCarriageReturnEscapeNode(this.createSpan(lexer, startOffset));
69
+ case Resources.tabEscapeCharacter:
70
+ return new RegexTabEscapeNode(this.createSpan(lexer, startOffset));
71
+ case Resources.verticalTabEscapeCharacter:
72
+ return new RegexVerticalTabEscapeNode(this.createSpan(lexer, startOffset));
73
+ case Resources.backspaceEscapeCharacter:
74
+ return lexer.isInCharacterClass
75
+ ? new RegexBackspaceEscapeNode(this.createSpan(lexer, startOffset))
76
+ : new RegexWordBoundaryAssertionNode(this.createSpan(lexer, startOffset));
77
+ case Resources.nonWordBoundaryEscapeCharacter:
78
+ if (!lexer.isInCharacterClass)
79
+ return new RegexNonWordBoundaryAssertionNode(this.createSpan(lexer, startOffset));
80
+ break;
81
+ case Resources.classControlEscapeCharacter:
82
+ return this.controlEscapeLexer.lex(lexer, startOffset);
83
+ case Resources.digitZero:
84
+ return this.numericEscapeLexer.lex(lexer, startOffset, character);
85
+ case Resources.hexEscapeCharacter:
86
+ return this.codePointEscapeLexer.lexHexadecimal(lexer, startOffset);
87
+ case Resources.unicodeEscapeCharacter:
88
+ return this.codePointEscapeLexer.lexUnicode(lexer, startOffset);
89
+ case Resources.unicodePropertyEscapeCharacter:
90
+ return lexer.unicodeMode
91
+ ? this.unicodePropertyEscapeLexer.lex(lexer, startOffset, false)
92
+ : this.createIdentity(lexer, startOffset, codePoint);
93
+ case Resources.negatedUnicodePropertyEscapeCharacter:
94
+ return lexer.unicodeMode
95
+ ? this.unicodePropertyEscapeLexer.lex(lexer, startOffset, true)
96
+ : this.createIdentity(lexer, startOffset, codePoint);
97
+ case Resources.namedBackreferenceEscapeCharacter:
98
+ return this.namedBackreferenceLexer.lex(lexer, startOffset, codePoint);
99
+ case Resources.classStringDisjunctionEscapeCharacter:
100
+ return this.lexClassStringDisjunctionStart(lexer, startOffset, codePoint);
101
+ }
102
+ if (String.isAsciiDigit(character))
103
+ return this.numericEscapeLexer.lex(lexer, startOffset, character);
104
+ if (this.identityEscapeValidator.isValid(lexer, character))
105
+ return this.createIdentity(lexer, startOffset, codePoint);
106
+ return this.createUnknown(lexer, startOffset);
107
+ }
108
+ createIdentity(lexer, startOffset, codePoint) {
109
+ const span = this.createSpan(lexer, startOffset);
110
+ return new RegexIdentityEscapeNode(lexer.reader.source.getText(span), codePoint, span);
111
+ }
112
+ createSpan(lexer, startOffset) {
113
+ return lexer.reader.createSpan(startOffset, lexer.reader.currentOffset - startOffset);
114
+ }
115
+ createUnknown(lexer, startOffset) {
116
+ const span = this.createSpan(lexer, startOffset);
117
+ lexer.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1014, span);
118
+ return new RegexUnknownNode(lexer.reader.source.getText(span), span);
119
+ }
120
+ lexClassStringDisjunctionStart(lexer, startOffset, codePoint) {
121
+ if (lexer.isInCharacterClass && lexer.unicodeSetsMode && lexer.reader.peekCodeUnit() === Resources.openBrace) {
122
+ lexer.reader.advance();
123
+ return new RegexClassStringDisjunctionStartNode(this.createSpan(lexer, startOffset));
124
+ }
125
+ return this.identityEscapeValidator.isValid(lexer, Resources.classStringDisjunctionEscapeCharacter)
126
+ ? this.createIdentity(lexer, startOffset, codePoint)
127
+ : this.createUnknown(lexer, startOffset);
128
+ }
129
+ }
130
+ //# sourceMappingURL=escape.lexer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"escape.lexer.js","sourceRoot":"","sources":["../../../../../src/parsers/noldova.context.parsers.regex/src/services/lexers/escape.lexer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * @license
3
+ * Copyright (c) Noldova.
4
+ *
5
+ * This source code is licensed under the license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+ import "@noldova/context.core";
9
+ import { RegexDiagnosticTemplates } from "../../models/diagnostics/regex-diagnostic-templates.js";
10
+ import { RegexIdentityEscapeNode } from "../../models/nodes/escapes/regex-identity-escape.node.js";
11
+ import { RegexNamedBackreferenceNode } from "../../models/nodes/escapes/regex-named-backreference.node.js";
12
+ import { RegexUnknownNode } from "../../models/nodes/regex-unknown.node.js";
13
+ import { Resources } from "../../resources.js";
14
+ import { RegexGroupNameReader } from "../readers/regex-group-name.reader.js";
15
+ import { RegexIdentityEscapeValidator } from "../validators/regex-identity-escape.validator.js";
16
+ export class NamedBackreferenceLexer {
17
+ groupNameReader = new RegexGroupNameReader();
18
+ identityEscapeValidator = new RegexIdentityEscapeValidator();
19
+ lex(lexer, startOffset, codePoint) {
20
+ if (lexer.isInCharacterClass || !lexer.hasNamedCapturingGroups || lexer.reader.peekCodeUnit() !== Resources.lessThan)
21
+ return this.createFallback(lexer, startOffset, codePoint);
22
+ lexer.reader.advance();
23
+ const groupName = this.groupNameReader.read(lexer.reader);
24
+ if (Object.isUndefined(groupName))
25
+ return this.createUnknown(lexer, startOffset);
26
+ const span = lexer.reader.createSpan(startOffset, lexer.reader.currentOffset - startOffset);
27
+ if (!groupName.isValid) {
28
+ lexer.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1032, span);
29
+ return new RegexNamedBackreferenceNode(lexer.reader.source.getText(span), groupName.value, span);
30
+ }
31
+ if (!lexer.hasNamedCapturingGroup(groupName.value))
32
+ lexer.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1016, span, [groupName.value]);
33
+ return new RegexNamedBackreferenceNode(lexer.reader.source.getText(span), groupName.value, span);
34
+ }
35
+ createFallback(lexer, startOffset, codePoint) {
36
+ const span = lexer.reader.createSpan(startOffset, lexer.reader.currentOffset - startOffset);
37
+ if (this.identityEscapeValidator.isValid(lexer, Resources.namedBackreferenceEscapeCharacter))
38
+ return new RegexIdentityEscapeNode(lexer.reader.source.getText(span), codePoint, span);
39
+ lexer.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1014, span);
40
+ return new RegexUnknownNode(lexer.reader.source.getText(span), span);
41
+ }
42
+ createUnknown(lexer, startOffset) {
43
+ const span = lexer.reader.createSpan(startOffset, lexer.reader.currentOffset - startOffset);
44
+ lexer.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1015, span);
45
+ return new RegexUnknownNode(lexer.reader.source.getText(span), span);
46
+ }
47
+ }
48
+ //# sourceMappingURL=named-backreference.lexer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"named-backreference.lexer.js","sourceRoot":"","sources":["../../../../../src/parsers/noldova.context.parsers.regex/src/services/lexers/named-backreference.lexer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * @license
3
+ * Copyright (c) Noldova.
4
+ *
5
+ * This source code is licensed under the license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+ import "@noldova/context.core";
9
+ import "@noldova/context.text";
10
+ import { RegexDiagnosticTemplates } from "../../models/diagnostics/regex-diagnostic-templates.js";
11
+ import { RegexBackreferenceNode } from "../../models/nodes/escapes/regex-backreference.node.js";
12
+ import { RegexDecimalEscapeNode } from "../../models/nodes/escapes/regex-decimal-escape.node.js";
13
+ import { RegexIdentityEscapeNode } from "../../models/nodes/escapes/regex-identity-escape.node.js";
14
+ import { RegexLegacyOctalEscapeNode } from "../../models/nodes/escapes/regex-legacy-octal-escape.node.js";
15
+ import { RegexNullEscapeNode } from "../../models/nodes/escapes/regex-null-escape.node.js";
16
+ import { RegexUnknownNode } from "../../models/nodes/regex-unknown.node.js";
17
+ import { Resources } from "../../resources.js";
18
+ export class NumericEscapeLexer {
19
+ static MAXIMUM_FOLLOWING_OCTAL_DIGITS = 2;
20
+ static OCTAL_RADIX = 8;
21
+ lex(lexer, startOffset, firstDigit) {
22
+ return firstDigit === Resources.digitZero
23
+ ? this.lexZero(lexer, startOffset)
24
+ : this.lexDecimal(lexer, startOffset, firstDigit);
25
+ }
26
+ createIdentity(lexer, startOffset, character) {
27
+ const span = lexer.reader.createSpan(startOffset, lexer.reader.currentOffset - startOffset);
28
+ return new RegexIdentityEscapeNode(lexer.reader.source.getText(span), character.charCodeAt(0), span);
29
+ }
30
+ lexDecimal(lexer, startOffset, firstDigit) {
31
+ const followingDigits = lexer.reader.peekWhile(String.isAsciiDigit).toString();
32
+ const digits = firstDigit + followingDigits;
33
+ const decimalValue = BigInt(digits);
34
+ const groupCount = lexer.capturingGroupCount;
35
+ if (lexer.isInCharacterClass) {
36
+ if (lexer.unicodeMode) {
37
+ lexer.reader.advance(followingDigits.length);
38
+ const span = lexer.reader.createSpan(startOffset, lexer.reader.currentOffset - startOffset);
39
+ lexer.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1035, span);
40
+ return new RegexDecimalEscapeNode(lexer.reader.source.getText(span), decimalValue, span);
41
+ }
42
+ return String.isAsciiOctalDigit(firstDigit)
43
+ ? this.lexLegacyOctal(lexer, startOffset, firstDigit)
44
+ : this.createIdentity(lexer, startOffset, firstDigit);
45
+ }
46
+ if (decimalValue <= BigInt(groupCount)) {
47
+ lexer.reader.advance(followingDigits.length);
48
+ const span = lexer.reader.createSpan(startOffset, lexer.reader.currentOffset - startOffset);
49
+ return new RegexBackreferenceNode(lexer.reader.source.getText(span), Number(decimalValue), span);
50
+ }
51
+ if (lexer.unicodeMode) {
52
+ const diagnosticSpan = lexer.reader.createSpan(startOffset + Resources.backslash.length, digits.length);
53
+ lexer.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1017, diagnosticSpan, [digits, groupCount]);
54
+ lexer.reader.advance(followingDigits.length);
55
+ const span = lexer.reader.createSpan(startOffset, lexer.reader.currentOffset - startOffset);
56
+ return new RegexDecimalEscapeNode(lexer.reader.source.getText(span), decimalValue, span);
57
+ }
58
+ return String.isAsciiOctalDigit(firstDigit)
59
+ ? this.lexLegacyOctal(lexer, startOffset, firstDigit)
60
+ : this.createIdentity(lexer, startOffset, firstDigit);
61
+ }
62
+ lexLegacyOctal(lexer, startOffset, firstDigit) {
63
+ const maximumFollowingDigits = firstDigit <= Resources.digitThree
64
+ ? NumericEscapeLexer.MAXIMUM_FOLLOWING_OCTAL_DIGITS
65
+ : NumericEscapeLexer.MAXIMUM_FOLLOWING_OCTAL_DIGITS - 1;
66
+ for (let index = 0; index < maximumFollowingDigits; index++) {
67
+ if (!String.isAsciiOctalDigit(lexer.reader.peekCodeUnit()))
68
+ break;
69
+ lexer.reader.advance();
70
+ }
71
+ const span = lexer.reader.createSpan(startOffset, lexer.reader.currentOffset - startOffset);
72
+ const value = lexer.reader.source.getText(span);
73
+ return new RegexLegacyOctalEscapeNode(value, Number.parseInt(value.substring(Resources.backslash.length), NumericEscapeLexer.OCTAL_RADIX), span);
74
+ }
75
+ lexZero(lexer, startOffset) {
76
+ const followingCharacter = lexer.reader.peekCodeUnit();
77
+ if (lexer.unicodeMode && String.isAsciiDigit(followingCharacter)) {
78
+ const span = lexer.reader.createSpan(startOffset, lexer.reader.currentOffset - startOffset);
79
+ lexer.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1014, span);
80
+ return new RegexUnknownNode(lexer.reader.source.getText(span), span);
81
+ }
82
+ if (!lexer.unicodeMode && String.isAsciiOctalDigit(followingCharacter))
83
+ return this.lexLegacyOctal(lexer, startOffset, Resources.digitZero);
84
+ return new RegexNullEscapeNode(lexer.reader.createSpan(startOffset, lexer.reader.currentOffset - startOffset));
85
+ }
86
+ }
87
+ //# sourceMappingURL=numeric-escape.lexer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"numeric-escape.lexer.js","sourceRoot":"","sources":["../../../../../src/parsers/noldova.context.parsers.regex/src/services/lexers/numeric-escape.lexer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,uBAAuB,CAAC;AAC/B,OAAO,uBAAuB,CAAC;AAI/B,OAAO,EAAE,wBAAwB,EAAE,MAAM,wDAAwD,CAAC;AAClG,OAAO,EAAE,sBAAsB,EAAE,MAAM,wDAAwD,CAAC;AAChG,OAAO,EAAE,sBAAsB,EAAE,MAAM,yDAAyD,CAAC;AACjG,OAAO,EAAE,uBAAuB,EAAE,MAAM,0DAA0D,CAAC;AACnG,OAAO,EAAE,0BAA0B,EAAE,MAAM,8DAA8D,CAAC;AAC1G,OAAO,EAAE,mBAAmB,EAAE,MAAM,sDAAsD,CAAC;AAC3F,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG/C,MAAM,OAAO,kBAAkB;IACrB,MAAM,CAAU,8BAA8B,GAAW,CAAC,CAAC;IAC3D,MAAM,CAAU,WAAW,GAAW,CAAC,CAAC;IAEzC,GAAG,CAAC,KAAiB,EAAE,WAAmB,EAAE,UAAkB;QACnE,OAAO,UAAU,KAAK,SAAS,CAAC,SAAS;YACvC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC;YAClC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;IACtD,CAAC;IAEO,cAAc,CAAC,KAAiB,EAAE,WAAmB,EAAE,SAAiB;QAC9E,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,aAAa,GAAG,WAAW,CAAC,CAAC;QAC5F,OAAO,IAAI,uBAAuB,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACvG,CAAC;IAEO,UAAU,CAAC,KAAiB,EAAE,WAAmB,EAAE,UAAkB;QAC3E,MAAM,eAAe,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC/E,MAAM,MAAM,GAAG,UAAU,GAAG,eAAe,CAAC;QAC5C,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QACpC,MAAM,UAAU,GAAG,KAAK,CAAC,mBAAmB,CAAC;QAE7C,IAAI,KAAK,CAAC,kBAAkB,EAAE,CAAC;YAC7B,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;gBACtB,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;gBAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,aAAa,GAAG,WAAW,CAAC,CAAC;gBAC5F,KAAK,CAAC,mBAAmB,CAAC,GAAG,CAAC,wBAAwB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBACtE,OAAO,IAAI,sBAAsB,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;YAC3F,CAAC;YAED,OAAO,MAAM,CAAC,iBAAiB,CAAC,UAAU,CAAC;gBACzC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,WAAW,EAAE,UAAU,CAAC;gBACrD,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;QAC1D,CAAC;QAED,IAAI,YAAY,IAAI,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;YACvC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;YAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,aAAa,GAAG,WAAW,CAAC,CAAC;YAC5F,OAAO,IAAI,sBAAsB,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,CAAC;QACnG,CAAC;QAED,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YACtB,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YACxG,KAAK,CAAC,mBAAmB,CAAC,GAAG,CAAC,wBAAwB,CAAC,OAAO,EAAE,cAAc,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;YACtG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;YAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,aAAa,GAAG,WAAW,CAAC,CAAC;YAC5F,OAAO,IAAI,sBAAsB,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;QAC3F,CAAC;QAED,OAAO,MAAM,CAAC,iBAAiB,CAAC,UAAU,CAAC;YACzC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,WAAW,EAAE,UAAU,CAAC;YACrD,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;IAC1D,CAAC;IAEO,cAAc,CAAC,KAAiB,EAAE,WAAmB,EAAE,UAAkB;QAC/E,MAAM,sBAAsB,GAAG,UAAU,IAAI,SAAS,CAAC,UAAU;YAC/D,CAAC,CAAC,kBAAkB,CAAC,8BAA8B;YACnD,CAAC,CAAC,kBAAkB,CAAC,8BAA8B,GAAG,CAAC,CAAC;QAE1D,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,sBAAsB,EAAE,KAAK,EAAE,EAAE,CAAC;YAC5D,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;gBACxD,MAAM;YAER,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACzB,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,aAAa,GAAG,WAAW,CAAC,CAAC;QAC5F,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAChD,OAAO,IAAI,0BAA0B,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,kBAAkB,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,CAAC;IACnJ,CAAC;IAEO,OAAO,CAAC,KAAiB,EAAE,WAAmB;QACpD,MAAM,kBAAkB,GAAG,KAAK,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QACvD,IAAI,KAAK,CAAC,WAAW,IAAI,MAAM,CAAC,YAAY,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACjE,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,aAAa,GAAG,WAAW,CAAC,CAAC;YAC5F,KAAK,CAAC,mBAAmB,CAAC,GAAG,CAAC,wBAAwB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACtE,OAAO,IAAI,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;QACvE,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,MAAM,CAAC,iBAAiB,CAAC,kBAAkB,CAAC;YACpE,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,WAAW,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;QAEtE,OAAO,IAAI,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,aAAa,GAAG,WAAW,CAAC,CAAC,CAAC;IACjH,CAAC;CACF"}
@@ -0,0 +1,200 @@
1
+ /**
2
+ * @license
3
+ * Copyright (c) Noldova.
4
+ *
5
+ * This source code is licensed under the license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+ import { nameof } from "@noldova/context.core";
9
+ import { ArgumentException } from "@noldova/context.exceptions";
10
+ import { EndOfFileNode, Lexer, SourceReader } from "@noldova/context.parsers";
11
+ import { RegexEndAssertionNode } from "../../models/nodes/assertions/regex-end-assertion.node.js";
12
+ import { RegexStartAssertionNode } from "../../models/nodes/assertions/regex-start-assertion.node.js";
13
+ import { RegexAmpersandAmpersandNode } from "../../models/nodes/punctuators/regex-ampersand-ampersand.node.js";
14
+ import { RegexAsteriskNode } from "../../models/nodes/punctuators/regex-asterisk.node.js";
15
+ import { RegexBarNode } from "../../models/nodes/punctuators/regex-bar.node.js";
16
+ import { RegexCloseBraceNode } from "../../models/nodes/punctuators/regex-close-brace.node.js";
17
+ import { RegexCloseBracketNode } from "../../models/nodes/punctuators/regex-close-bracket.node.js";
18
+ import { RegexCloseParenthesisNode } from "../../models/nodes/punctuators/regex-close-parenthesis.node.js";
19
+ import { RegexColonNode } from "../../models/nodes/punctuators/regex-colon.node.js";
20
+ import { RegexCommaNode } from "../../models/nodes/punctuators/regex-comma.node.js";
21
+ import { RegexEqualsNode } from "../../models/nodes/punctuators/regex-equals.node.js";
22
+ import { RegexExclamationNode } from "../../models/nodes/punctuators/regex-exclamation.node.js";
23
+ import { RegexGreaterThanNode } from "../../models/nodes/punctuators/regex-greater-than.node.js";
24
+ import { RegexHyphenHyphenNode } from "../../models/nodes/punctuators/regex-hyphen-hyphen.node.js";
25
+ import { RegexHyphenNode } from "../../models/nodes/punctuators/regex-hyphen.node.js";
26
+ import { RegexLessThanNode } from "../../models/nodes/punctuators/regex-less-than.node.js";
27
+ import { RegexOpenBraceNode } from "../../models/nodes/punctuators/regex-open-brace.node.js";
28
+ import { RegexOpenBracketNode } from "../../models/nodes/punctuators/regex-open-bracket.node.js";
29
+ import { RegexOpenParenthesisNode } from "../../models/nodes/punctuators/regex-open-parenthesis.node.js";
30
+ import { RegexPlusNode } from "../../models/nodes/punctuators/regex-plus.node.js";
31
+ import { RegexQuestionNode } from "../../models/nodes/punctuators/regex-question.node.js";
32
+ import { RegexDotNode } from "../../models/nodes/regex-dot.node.js";
33
+ import { RegexFlagsNode } from "../../models/nodes/regex-flags.node.js";
34
+ import { Resources } from "../../resources.js";
35
+ import { RegexCapturingGroupSummaryReader } from "../readers/regex-capturing-group-summary.reader.js";
36
+ import { CharacterLexer } from "./character.lexer.js";
37
+ import { EscapeLexer } from "./escape.lexer.js";
38
+ export class RegexLexer extends Lexer {
39
+ capturingGroupSummary;
40
+ characterLexer = new CharacterLexer();
41
+ escapeLexer = new EscapeLexer();
42
+ characterClassDepth = 0;
43
+ groupNameDepth = 0;
44
+ flagsNode;
45
+ inputSpan;
46
+ constructor(...constructorArguments) {
47
+ let diagnosticCollector;
48
+ let flagsSpan;
49
+ let reader;
50
+ let resolvedInputSpan;
51
+ if (constructorArguments.length === 4)
52
+ [reader, flagsSpan, resolvedInputSpan, diagnosticCollector] = constructorArguments;
53
+ else {
54
+ const [source, patternSpan, sourceFlagsSpan, sourceInputSpan, sourceDiagnosticCollector] = constructorArguments;
55
+ reader = new SourceReader(source, patternSpan);
56
+ flagsSpan = sourceFlagsSpan;
57
+ resolvedInputSpan = sourceInputSpan;
58
+ diagnosticCollector = sourceDiagnosticCollector;
59
+ if (flagsSpan.startOffset < patternSpan.endOffset)
60
+ throw new ArgumentException(Resources.flagsOutsideInput, nameof(t => t.flagsNode));
61
+ }
62
+ const source = reader.source;
63
+ source.getSpan(flagsSpan);
64
+ source.getSpan(resolvedInputSpan);
65
+ if (reader.currentOffset !== reader.startOffset)
66
+ throw new ArgumentException(Resources.patternReaderMustStartAtRegionStart, nameof(t => t.reader));
67
+ if (reader.startOffset < resolvedInputSpan.startOffset || reader.endOffset > resolvedInputSpan.endOffset)
68
+ throw new ArgumentException(Resources.patternOutsideInput, nameof(t => t.reader));
69
+ if (flagsSpan.startOffset < reader.endOffset || flagsSpan.endOffset > resolvedInputSpan.endOffset)
70
+ throw new ArgumentException(Resources.flagsOutsideInput, nameof(t => t.flagsNode));
71
+ super(reader, diagnosticCollector);
72
+ this.inputSpan = resolvedInputSpan;
73
+ this.flagsNode = new RegexFlagsNode(source.getText(flagsSpan), flagsSpan);
74
+ this.capturingGroupSummary = new RegexCapturingGroupSummaryReader().read(reader, this.unicodeSetsMode);
75
+ }
76
+ get capturingGroupCount() {
77
+ return this.capturingGroupSummary.capturingGroupCount;
78
+ }
79
+ get hasNamedCapturingGroups() {
80
+ return this.capturingGroupSummary.namedCapturingGroupNames.size > 0;
81
+ }
82
+ get isInCharacterClass() {
83
+ return this.characterClassDepth > 0;
84
+ }
85
+ get isInGroupName() {
86
+ return this.groupNameDepth > 0;
87
+ }
88
+ get unicodeMode() {
89
+ return this.flagsNode.unicode || this.flagsNode.unicodeSets;
90
+ }
91
+ get unicodeSetsMode() {
92
+ return this.flagsNode.unicodeSets;
93
+ }
94
+ enterCharacterClass() {
95
+ this.characterClassDepth++;
96
+ }
97
+ leaveCharacterClass() {
98
+ this.characterClassDepth--;
99
+ }
100
+ enterGroupName() {
101
+ this.groupNameDepth++;
102
+ }
103
+ leaveGroupName() {
104
+ this.groupNameDepth--;
105
+ }
106
+ hasNamedCapturingGroup(groupName) {
107
+ return this.capturingGroupSummary.namedCapturingGroupNames.has(groupName);
108
+ }
109
+ lexNode() {
110
+ const reader = this.reader;
111
+ if (reader.isAtEnd)
112
+ return new EndOfFileNode(reader.createSpan(reader.currentOffset, 0));
113
+ const character = reader.peekCodeUnit();
114
+ if (character === Resources.backslash)
115
+ return this.escapeLexer.lex(this);
116
+ if (this.isInCharacterClass) {
117
+ if (character === Resources.closeBracket) {
118
+ const node = this.lexPunctuator(RegexCloseBracketNode);
119
+ this.leaveCharacterClass();
120
+ return node;
121
+ }
122
+ if (!this.unicodeSetsMode)
123
+ return character === Resources.hyphen ? this.lexPunctuator(RegexHyphenNode) : this.characterLexer.lex(this, character);
124
+ if (character === Resources.ampersandAmpersand.charAt(0) && reader.startsWith(Resources.ampersandAmpersand))
125
+ return this.lexPunctuator(RegexAmpersandAmpersandNode, Resources.ampersandAmpersand.length);
126
+ if (character === Resources.hyphen && reader.startsWith(Resources.hyphenHyphen))
127
+ return this.lexPunctuator(RegexHyphenHyphenNode, Resources.hyphenHyphen.length);
128
+ if (character !== Resources.openBracket && character !== Resources.hyphen && character !== Resources.bar && character !== Resources.closeBrace)
129
+ return this.characterLexer.lex(this, character);
130
+ }
131
+ switch (character) {
132
+ case Resources.caret:
133
+ return this.lexStartAssertion();
134
+ case Resources.dollar:
135
+ return this.lexEndAssertion();
136
+ case Resources.dot:
137
+ return this.lexDot();
138
+ case Resources.asterisk:
139
+ return this.lexPunctuator(RegexAsteriskNode);
140
+ case Resources.bar:
141
+ return this.lexPunctuator(RegexBarNode);
142
+ case Resources.closeBrace:
143
+ return this.lexPunctuator(RegexCloseBraceNode);
144
+ case Resources.closeBracket:
145
+ return this.lexPunctuator(RegexCloseBracketNode);
146
+ case Resources.closeParenthesis:
147
+ return this.lexPunctuator(RegexCloseParenthesisNode);
148
+ case Resources.colon:
149
+ return this.lexPunctuator(RegexColonNode);
150
+ case Resources.comma:
151
+ return this.lexPunctuator(RegexCommaNode);
152
+ case Resources.equals:
153
+ return this.lexPunctuator(RegexEqualsNode);
154
+ case Resources.exclamation:
155
+ return this.lexPunctuator(RegexExclamationNode);
156
+ case Resources.greaterThan:
157
+ return this.lexPunctuator(RegexGreaterThanNode);
158
+ case Resources.hyphen:
159
+ return this.lexPunctuator(RegexHyphenNode);
160
+ case Resources.lessThan:
161
+ return this.lexPunctuator(RegexLessThanNode);
162
+ case Resources.openBrace:
163
+ return this.lexPunctuator(RegexOpenBraceNode);
164
+ case Resources.openBracket: {
165
+ const node = this.lexPunctuator(RegexOpenBracketNode);
166
+ this.enterCharacterClass();
167
+ return node;
168
+ }
169
+ case Resources.openParenthesis:
170
+ return this.lexPunctuator(RegexOpenParenthesisNode);
171
+ case Resources.plus:
172
+ return this.lexPunctuator(RegexPlusNode);
173
+ case Resources.question:
174
+ return this.lexPunctuator(RegexQuestionNode);
175
+ default:
176
+ return this.characterLexer.lex(this, character);
177
+ }
178
+ }
179
+ lexDot() {
180
+ const startOffset = this.reader.currentOffset;
181
+ this.reader.advance();
182
+ return new RegexDotNode(this.reader.createSpan(startOffset, Resources.dot.length));
183
+ }
184
+ lexEndAssertion() {
185
+ const startOffset = this.reader.currentOffset;
186
+ this.reader.advance();
187
+ return new RegexEndAssertionNode(this.reader.createSpan(startOffset, Resources.dollar.length));
188
+ }
189
+ lexPunctuator(nodeType, length = 1) {
190
+ const startOffset = this.reader.currentOffset;
191
+ this.reader.advance(length);
192
+ return new nodeType(this.reader.createSpan(startOffset, length));
193
+ }
194
+ lexStartAssertion() {
195
+ const startOffset = this.reader.currentOffset;
196
+ this.reader.advance();
197
+ return new RegexStartAssertionNode(this.reader.createSpan(startOffset, Resources.caret.length));
198
+ }
199
+ }
200
+ //# sourceMappingURL=regex.lexer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regex.lexer.js","sourceRoot":"","sources":["../../../../../src/parsers/noldova.context.parsers.regex/src/services/lexers/regex.lexer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * @license
3
+ * Copyright (c) Noldova.
4
+ *
5
+ * This source code is licensed under the license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+ import "@noldova/context.core";
9
+ import { RegexDiagnosticTemplates } from "../../models/diagnostics/regex-diagnostic-templates.js";
10
+ import { RegexUnicodePropertyEscapeNode } from "../../models/nodes/escapes/regex-unicode-property-escape.node.js";
11
+ import { RegexUnknownNode } from "../../models/nodes/regex-unknown.node.js";
12
+ import { Resources } from "../../resources.js";
13
+ import { RegexUnicodePropertyCatalog } from "../unicode/regex-unicode-property-catalog.js";
14
+ export class UnicodePropertyEscapeLexer {
15
+ lex(lexer, startOffset, negated) {
16
+ if (lexer.reader.peekCodeUnit() !== Resources.openBrace)
17
+ return this.createUnknown(lexer, startOffset);
18
+ lexer.reader.advance();
19
+ const expressionStartOffset = lexer.reader.currentOffset;
20
+ lexer.reader.readUntil(t => t === Resources.closeBrace);
21
+ if (lexer.reader.peekCodeUnit() !== Resources.closeBrace)
22
+ return this.createUnknown(lexer, startOffset);
23
+ const expression = lexer.reader.source.getText(expressionStartOffset, lexer.reader.currentOffset - expressionStartOffset);
24
+ lexer.reader.advance();
25
+ if (expression.length === 0)
26
+ return this.createUnknown(lexer, startOffset);
27
+ const separatorIndex = expression.indexOf(Resources.equals);
28
+ const propertyName = separatorIndex < 0 ? undefined : expression.substring(0, separatorIndex);
29
+ const propertyValue = separatorIndex < 0 ? expression : expression.substring(separatorIndex + Resources.equals.length);
30
+ const span = lexer.reader.createSpan(startOffset, lexer.reader.currentOffset - startOffset);
31
+ let mayContainStrings = false;
32
+ if (Object.isUndefined(propertyName)) {
33
+ if (!RegexUnicodePropertyCatalog.isValidLoneProperty(propertyValue))
34
+ lexer.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1020, span, [propertyValue]);
35
+ else if (RegexUnicodePropertyCatalog.isStringProperty(propertyValue)) {
36
+ if (!lexer.unicodeSetsMode)
37
+ lexer.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1021, span, [propertyValue]);
38
+ else if (negated)
39
+ lexer.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1022, span);
40
+ else
41
+ mayContainStrings = true;
42
+ }
43
+ }
44
+ else {
45
+ const canonicalName = RegexUnicodePropertyCatalog.getCanonicalPropertyName(propertyName);
46
+ if (Object.isUndefined(canonicalName))
47
+ lexer.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1019, span, [propertyName]);
48
+ else if (!RegexUnicodePropertyCatalog.isPropertyValue(canonicalName, propertyValue))
49
+ lexer.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1020, span, [propertyValue]);
50
+ }
51
+ return new RegexUnicodePropertyEscapeNode(lexer.reader.source.getText(span), propertyName, propertyValue, negated, mayContainStrings, span);
52
+ }
53
+ createUnknown(lexer, startOffset) {
54
+ const span = lexer.reader.createSpan(startOffset, lexer.reader.currentOffset - startOffset);
55
+ lexer.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1018, span);
56
+ return new RegexUnknownNode(lexer.reader.source.getText(span), span);
57
+ }
58
+ }
59
+ //# sourceMappingURL=unicode-property-escape.lexer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unicode-property-escape.lexer.js","sourceRoot":"","sources":["../../../../../src/parsers/noldova.context.parsers.regex/src/services/lexers/unicode-property-escape.lexer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @license
3
+ * Copyright (c) Noldova.
4
+ *
5
+ * This source code is licensed under the license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+ import { RegexBarNode } from "../../models/nodes/punctuators/regex-bar.node.js";
9
+ import { RegexCloseParenthesisNode } from "../../models/nodes/punctuators/regex-close-parenthesis.node.js";
10
+ import { RegexAlternativeNode } from "../../models/nodes/regex-alternative.node.js";
11
+ export class RegexAlternativeParser {
12
+ regexParser;
13
+ constructor(regexParser) {
14
+ this.regexParser = regexParser;
15
+ }
16
+ parse(stopsAtCloseParenthesis) {
17
+ const startOffset = this.regexParser.currentNode.span.startOffset;
18
+ const terms = [];
19
+ while (!this.regexParser.isEndOfFile &&
20
+ !(this.regexParser.currentNode instanceof RegexBarNode) &&
21
+ (!stopsAtCloseParenthesis || !(this.regexParser.currentNode instanceof RegexCloseParenthesisNode)))
22
+ terms.push(...this.regexParser.parseTerm());
23
+ const endOffset = this.regexParser.currentNode.span.startOffset;
24
+ return new RegexAlternativeNode(terms, this.regexParser.regexLexer.reader.createSpan(startOffset, endOffset - startOffset));
25
+ }
26
+ }
27
+ //# sourceMappingURL=regex-alternative.parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regex-alternative.parser.js","sourceRoot":"","sources":["../../../../../src/parsers/noldova.context.parsers.regex/src/services/parsers/regex-alternative.parser.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,kDAAkD,CAAC;AAChF,OAAO,EAAE,yBAAyB,EAAE,MAAM,gEAAgE,CAAC;AAC3G,OAAO,EAAE,oBAAoB,EAAE,MAAM,8CAA8C,CAAC;AAGpF,MAAM,OAAO,sBAAsB;IAChB,WAAW,CAAoB;IAEhD,YAAmB,WAA8B;QAC/C,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAEM,KAAK,CAAC,uBAAgC;QAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;QAClE,MAAM,KAAK,GAAW,EAAE,CAAC;QAEzB,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW;YAClC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,YAAY,YAAY,CAAC;YACvD,CAAC,CAAC,uBAAuB,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,YAAY,yBAAyB,CAAC,CAAC;YAClG,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,CAAC;QAE9C,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;QAChE,OAAO,IAAI,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC;IAC9H,CAAC;CACF"}