@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,38 @@
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 { RegexOpenParenthesisNode } from "../../models/nodes/punctuators/regex-open-parenthesis.node.js";
10
+ import { Resources } from "../../resources.js";
11
+ export class RegexAssertionParser {
12
+ regexParser;
13
+ constructor(regexParser) {
14
+ this.regexParser = regexParser;
15
+ }
16
+ parse() {
17
+ const assertionNode = this.regexParser.currentNode;
18
+ if (assertionNode.isSimpleRegexAssertion()) {
19
+ this.regexParser.advance();
20
+ return assertionNode;
21
+ }
22
+ if (!(this.regexParser.currentNode instanceof RegexOpenParenthesisNode))
23
+ return undefined;
24
+ const reader = this.regexParser.regexLexer.reader;
25
+ if (reader.peekCodeUnit() !== Resources.question)
26
+ return undefined;
27
+ const prefixCharacter = reader.peekCodeUnit(Resources.question.length);
28
+ if (prefixCharacter === Resources.equals || prefixCharacter === Resources.exclamation)
29
+ return this.regexParser.parseGroup();
30
+ if (prefixCharacter !== Resources.lessThan)
31
+ return undefined;
32
+ const lookbehindCharacter = reader.peekCodeUnit(Resources.question.length + Resources.lessThan.length);
33
+ return lookbehindCharacter === Resources.equals || lookbehindCharacter === Resources.exclamation
34
+ ? this.regexParser.parseGroup()
35
+ : undefined;
36
+ }
37
+ }
38
+ //# sourceMappingURL=regex-assertion.parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regex-assertion.parser.js","sourceRoot":"","sources":["../../../../../src/parsers/noldova.context.parsers.regex/src/services/parsers/regex-assertion.parser.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,uBAAuB,CAAC;AAI/B,OAAO,EAAE,wBAAwB,EAAE,MAAM,+DAA+D,CAAC;AACzG,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG/C,MAAM,OAAO,oBAAoB;IACd,WAAW,CAAoB;IAEhD,YAAmB,WAA8B;QAC/C,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAEM,KAAK;QACV,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC;QACnD,IAAI,aAAa,CAAC,sBAAsB,EAAE,EAAE,CAAC;YAC3C,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;YAC3B,OAAO,aAAa,CAAC;QACvB,CAAC;QAED,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,YAAY,wBAAwB,CAAC;YACrE,OAAO,SAAS,CAAC;QAEnB,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC;QAClD,IAAI,MAAM,CAAC,YAAY,EAAE,KAAK,SAAS,CAAC,QAAQ;YAC9C,OAAO,SAAS,CAAC;QAEnB,MAAM,eAAe,GAAG,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACvE,IAAI,eAAe,KAAK,SAAS,CAAC,MAAM,IAAI,eAAe,KAAK,SAAS,CAAC,WAAW;YACnF,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;QAEvC,IAAI,eAAe,KAAK,SAAS,CAAC,QAAQ;YACxC,OAAO,SAAS,CAAC;QAEnB,MAAM,mBAAmB,GAAG,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACvG,OAAO,mBAAmB,KAAK,SAAS,CAAC,MAAM,IAAI,mBAAmB,KAAK,SAAS,CAAC,WAAW;YAC9F,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE;YAC/B,CAAC,CAAC,SAAS,CAAC;IAChB,CAAC;CACF"}
@@ -0,0 +1,24 @@
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 { RegexCapturingGroupNode } from "../../models/nodes/groups/regex-capturing-group.node.js";
9
+ export class RegexCapturingGroupParser {
10
+ groupEndParser;
11
+ regexParser;
12
+ constructor(regexParser, groupEndParser) {
13
+ this.regexParser = regexParser;
14
+ this.groupEndParser = groupEndParser;
15
+ }
16
+ parse(startOffset) {
17
+ const groupIndex = this.regexParser.context.claimCapturingGroupIndex();
18
+ const disjunctionNode = this.regexParser.parseDisjunction(true);
19
+ const endOffset = this.groupEndParser.parse();
20
+ const span = this.regexParser.regexLexer.reader.createSpan(startOffset, endOffset - startOffset);
21
+ return new RegexCapturingGroupNode(groupIndex, disjunctionNode, span);
22
+ }
23
+ }
24
+ //# sourceMappingURL=regex-capturing-group.parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regex-capturing-group.parser.js","sourceRoot":"","sources":["../../../../../src/parsers/noldova.context.parsers.regex/src/services/parsers/regex-capturing-group.parser.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,uBAAuB,EAAE,MAAM,yDAAyD,CAAC;AAIlG,MAAM,OAAO,yBAAyB;IACnB,cAAc,CAAsB;IACpC,WAAW,CAAoB;IAEhD,YAAmB,WAA8B,EAAE,cAAmC;QACpF,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;IAEM,KAAK,CAAC,WAAmB;QAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,wBAAwB,EAAE,CAAC;QACvE,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAChE,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,SAAS,GAAG,WAAW,CAAC,CAAC;QAEjG,OAAO,IAAI,uBAAuB,CAAC,UAAU,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC;IACxE,CAAC;CACF"}
@@ -0,0 +1,107 @@
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 { RegexDiagnosticTemplates } from "../../models/diagnostics/regex-diagnostic-templates.js";
9
+ import { RegexCharacterClassNode } from "../../models/nodes/classes/regex-character-class.node.js";
10
+ import { RegexCharacterRangeNode } from "../../models/nodes/classes/regex-character-range.node.js";
11
+ import { RegexClassUnionNode } from "../../models/nodes/classes/regex-class-union.node.js";
12
+ import { RegexCloseBracketNode } from "../../models/nodes/punctuators/regex-close-bracket.node.js";
13
+ import { RegexHyphenNode } from "../../models/nodes/punctuators/regex-hyphen.node.js";
14
+ import { RegexOpenBracketNode } from "../../models/nodes/punctuators/regex-open-bracket.node.js";
15
+ import { RegexCharacterNode } from "../../models/nodes/regex-character.node.js";
16
+ import { RegexUnknownNode } from "../../models/nodes/regex-unknown.node.js";
17
+ import { Resources } from "../../resources.js";
18
+ import { RegexCharacterRangeValidator } from "../validators/regex-character-range.validator.js";
19
+ export class RegexCharacterClassParser {
20
+ characterRangeValidator = new RegexCharacterRangeValidator();
21
+ regexParser;
22
+ constructor(regexParser) {
23
+ this.regexParser = regexParser;
24
+ }
25
+ parse() {
26
+ if (this.regexParser.context.nestingDepth >= Resources.maximumNestingDepth)
27
+ return this.parseExcessivelyNestedClass();
28
+ this.regexParser.context.nestingDepth++;
29
+ try {
30
+ return this.parseClass();
31
+ }
32
+ finally {
33
+ this.regexParser.context.nestingDepth--;
34
+ }
35
+ }
36
+ parseClass() {
37
+ const startOffset = this.regexParser.currentNode.span.startOffset;
38
+ this.regexParser.advance();
39
+ const firstNode = this.regexParser.currentNode;
40
+ const negated = firstNode instanceof RegexCharacterNode && firstNode.value === Resources.caret;
41
+ if (negated)
42
+ this.regexParser.advance();
43
+ const expressionNode = this.regexParser.regexLexer.unicodeSetsMode
44
+ ? this.regexParser.parseClassSetExpression()
45
+ : this.parseClassicExpression();
46
+ const mayContainStrings = this.regexParser.regexLexer.unicodeSetsMode && expressionNode.mayContainRegexStrings();
47
+ const endOffset = this.completeClass();
48
+ const span = this.regexParser.regexLexer.reader.createSpan(startOffset, endOffset - startOffset);
49
+ if (negated && mayContainStrings)
50
+ this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1030, span);
51
+ return new RegexCharacterClassNode(expressionNode, negated, mayContainStrings, span);
52
+ }
53
+ parseExcessivelyNestedClass() {
54
+ const startOffset = this.regexParser.currentNode.span.startOffset;
55
+ this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1037, this.regexParser.currentNode.span, [Resources.maximumNestingDepth]);
56
+ let nestingDepth = 0;
57
+ do {
58
+ if (this.regexParser.currentNode instanceof RegexOpenBracketNode)
59
+ nestingDepth++;
60
+ else if (this.regexParser.currentNode instanceof RegexCloseBracketNode)
61
+ nestingDepth--;
62
+ this.regexParser.advance();
63
+ } while (!this.regexParser.isEndOfFile && nestingDepth > 0);
64
+ const endOffset = this.regexParser.currentNode.span.startOffset;
65
+ const span = this.regexParser.regexLexer.reader.createSpan(startOffset, endOffset - startOffset);
66
+ const unknownNode = new RegexUnknownNode(this.regexParser.context.source.getText(span), span);
67
+ return new RegexCharacterClassNode(unknownNode, false, false, span);
68
+ }
69
+ completeClass() {
70
+ if (!(this.regexParser.currentNode instanceof RegexCloseBracketNode)) {
71
+ this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1004, this.regexParser.currentNode.span);
72
+ return this.regexParser.currentNode.span.startOffset;
73
+ }
74
+ const endOffset = this.regexParser.currentNode.span.endOffset;
75
+ this.regexParser.advance();
76
+ return endOffset;
77
+ }
78
+ parseClassicExpression() {
79
+ const startOffset = this.regexParser.currentNode.span.startOffset;
80
+ const operands = [];
81
+ while (!this.regexParser.isEndOfFile && !(this.regexParser.currentNode instanceof RegexCloseBracketNode)) {
82
+ const startNode = this.consumeClassAtom();
83
+ if (!(this.regexParser.currentNode instanceof RegexHyphenNode)) {
84
+ operands.push(startNode);
85
+ continue;
86
+ }
87
+ const hyphen = this.regexParser.currentNode;
88
+ this.regexParser.advance();
89
+ if (this.regexParser.isEndOfFile || this.regexParser.currentNode instanceof RegexCloseBracketNode) {
90
+ operands.push(startNode, hyphen);
91
+ continue;
92
+ }
93
+ const endNode = this.consumeClassAtom();
94
+ const span = this.regexParser.regexLexer.reader.createSpan(startNode.span, endNode.span);
95
+ this.characterRangeValidator.validate(this.regexParser, startNode, endNode, span);
96
+ operands.push(new RegexCharacterRangeNode(startNode, endNode, span));
97
+ }
98
+ const endOffset = this.regexParser.currentNode.span.startOffset;
99
+ return new RegexClassUnionNode(operands, this.regexParser.regexLexer.reader.createSpan(startOffset, endOffset - startOffset));
100
+ }
101
+ consumeClassAtom() {
102
+ const node = this.regexParser.currentNode;
103
+ this.regexParser.advance();
104
+ return node;
105
+ }
106
+ }
107
+ //# sourceMappingURL=regex-character-class.parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regex-character-class.parser.js","sourceRoot":"","sources":["../../../../../src/parsers/noldova.context.parsers.regex/src/services/parsers/regex-character-class.parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,114 @@
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 { RegexCharacterRangeNode } from "../../models/nodes/classes/regex-character-range.node.js";
11
+ import { RegexClassUnionNode } from "../../models/nodes/classes/regex-class-union.node.js";
12
+ import { RegexClassStringDisjunctionStartNode } from "../../models/nodes/punctuators/regex-class-string-disjunction-start.node.js";
13
+ import { RegexCloseBracketNode } from "../../models/nodes/punctuators/regex-close-bracket.node.js";
14
+ import { RegexHyphenNode } from "../../models/nodes/punctuators/regex-hyphen.node.js";
15
+ import { RegexOpenBracketNode } from "../../models/nodes/punctuators/regex-open-bracket.node.js";
16
+ import { RegexCharacterRangeValidator } from "../validators/regex-character-range.validator.js";
17
+ import { RegexClassSetCharacterValidator } from "../validators/regex-class-set-character.validator.js";
18
+ export class RegexClassSetExpressionParser {
19
+ characterRangeValidator = new RegexCharacterRangeValidator();
20
+ classSetCharacterValidator = new RegexClassSetCharacterValidator();
21
+ regexParser;
22
+ constructor(regexParser) {
23
+ this.regexParser = regexParser;
24
+ }
25
+ parse() {
26
+ const startOffset = this.regexParser.currentNode.span.startOffset;
27
+ const operands = [];
28
+ if (this.regexParser.isEndOfFile || this.regexParser.currentNode instanceof RegexCloseBracketNode)
29
+ return this.createUnion(operands, startOffset);
30
+ if (this.regexParser.currentNode.isRegexClassSetOperator()) {
31
+ this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1028, this.regexParser.currentNode.span);
32
+ this.regexParser.advance();
33
+ if (this.regexParser.isEndOfFile || this.regexParser.currentNode instanceof RegexCloseBracketNode)
34
+ return this.createUnion(operands, startOffset);
35
+ }
36
+ operands.push(this.parseOperand());
37
+ if (this.regexParser.currentNode.isRegexClassSetOperator())
38
+ return this.parseOperatorExpression(operands, startOffset, this.regexParser.currentNode);
39
+ while (!this.regexParser.isEndOfFile && !(this.regexParser.currentNode instanceof RegexCloseBracketNode)) {
40
+ if (this.regexParser.currentNode.isRegexClassSetOperator()) {
41
+ this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1027, this.regexParser.currentNode.span);
42
+ this.regexParser.advance();
43
+ if (this.regexParser.isEndOfFile || this.regexParser.currentNode instanceof RegexCloseBracketNode) {
44
+ this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1028, this.regexParser.currentNode.span);
45
+ break;
46
+ }
47
+ }
48
+ operands.push(this.parseOperand());
49
+ }
50
+ return this.createUnion(operands, startOffset);
51
+ }
52
+ createSpan(startOffset) {
53
+ const endOffset = this.regexParser.currentNode.span.startOffset;
54
+ return this.regexParser.regexLexer.reader.createSpan(startOffset, endOffset - startOffset);
55
+ }
56
+ parseOperand() {
57
+ let operand;
58
+ if (this.regexParser.currentNode instanceof RegexOpenBracketNode)
59
+ operand = this.regexParser.parseCharacterClass();
60
+ else if (this.regexParser.currentNode instanceof RegexClassStringDisjunctionStartNode)
61
+ operand = this.regexParser.parseClassStringDisjunction();
62
+ else {
63
+ operand = this.regexParser.currentNode;
64
+ this.classSetCharacterValidator.validate(this.regexParser, operand);
65
+ this.regexParser.advance();
66
+ }
67
+ if (!(this.regexParser.currentNode instanceof RegexHyphenNode))
68
+ return operand;
69
+ this.regexParser.advance();
70
+ return this.completeRange(operand);
71
+ }
72
+ completeRange(operand) {
73
+ if (this.regexParser.isEndOfFile || this.regexParser.currentNode instanceof RegexCloseBracketNode || this.regexParser.currentNode.isRegexClassSetOperator()) {
74
+ this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1028, this.regexParser.currentNode.span);
75
+ return operand;
76
+ }
77
+ const endNode = this.regexParser.currentNode;
78
+ this.classSetCharacterValidator.validate(this.regexParser, endNode);
79
+ this.regexParser.advance();
80
+ const span = this.regexParser.regexLexer.reader.createSpan(operand.span, endNode.span);
81
+ this.characterRangeValidator.validate(this.regexParser, operand, endNode, span);
82
+ return new RegexCharacterRangeNode(operand, endNode, span);
83
+ }
84
+ createUnion(operands, startOffset) {
85
+ return new RegexClassUnionNode(operands, this.createSpan(startOffset));
86
+ }
87
+ parseOperatorExpression(operands, startOffset, operatorNode) {
88
+ for (const operand of operands)
89
+ this.validateOperatorOperand(operand);
90
+ while (!this.regexParser.isEndOfFile && !(this.regexParser.currentNode instanceof RegexCloseBracketNode)) {
91
+ const operator = this.regexParser.currentNode;
92
+ const expectedOperator = operator.constructor === operatorNode.constructor;
93
+ if (!expectedOperator)
94
+ this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1027, operator.span);
95
+ if (operator.isRegexClassSetOperator())
96
+ this.regexParser.advance();
97
+ else
98
+ this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1028, operator.span);
99
+ if (this.regexParser.isEndOfFile || this.regexParser.currentNode instanceof RegexCloseBracketNode) {
100
+ this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1028, this.regexParser.currentNode.span);
101
+ break;
102
+ }
103
+ const operand = this.parseOperand();
104
+ this.validateOperatorOperand(operand);
105
+ operands.push(operand);
106
+ }
107
+ return operatorNode.createRegexClassSetExpression(operands, this.createSpan(startOffset));
108
+ }
109
+ validateOperatorOperand(node) {
110
+ if (node instanceof RegexCharacterRangeNode)
111
+ this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1038, node.span);
112
+ }
113
+ }
114
+ //# sourceMappingURL=regex-class-set-expression.parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regex-class-set-expression.parser.js","sourceRoot":"","sources":["../../../../../src/parsers/noldova.context.parsers.regex/src/services/parsers/regex-class-set-expression.parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
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 { RegexDiagnosticTemplates } from "../../models/diagnostics/regex-diagnostic-templates.js";
9
+ import { RegexClassStringDisjunctionNode } from "../../models/nodes/classes/regex-class-string-disjunction.node.js";
10
+ import { RegexClassStringNode } from "../../models/nodes/classes/regex-class-string.node.js";
11
+ import { RegexBarNode } from "../../models/nodes/punctuators/regex-bar.node.js";
12
+ import { RegexCloseBraceNode } from "../../models/nodes/punctuators/regex-close-brace.node.js";
13
+ import { RegexClassSetCharacterValidator } from "../validators/regex-class-set-character.validator.js";
14
+ export class RegexClassStringDisjunctionParser {
15
+ classSetCharacterValidator = new RegexClassSetCharacterValidator();
16
+ regexParser;
17
+ constructor(regexParser) {
18
+ this.regexParser = regexParser;
19
+ }
20
+ parse() {
21
+ const startOffset = this.regexParser.currentNode.span.startOffset;
22
+ this.regexParser.advance();
23
+ const strings = [];
24
+ do {
25
+ strings.push(this.parseString());
26
+ const separator = this.regexParser.currentNode;
27
+ if (!(separator instanceof RegexBarNode))
28
+ break;
29
+ this.regexParser.advance();
30
+ } while (true);
31
+ const closingBrace = this.regexParser.currentNode;
32
+ let endOffset = closingBrace.span.startOffset;
33
+ if (closingBrace instanceof RegexCloseBraceNode) {
34
+ endOffset = closingBrace.span.endOffset;
35
+ this.regexParser.advance();
36
+ }
37
+ else
38
+ this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1031, closingBrace.span);
39
+ return new RegexClassStringDisjunctionNode(strings, this.regexParser.regexLexer.reader.createSpan(startOffset, endOffset - startOffset));
40
+ }
41
+ parseString() {
42
+ const startOffset = this.regexParser.currentNode.span.startOffset;
43
+ const characters = [];
44
+ while (!this.regexParser.isEndOfFile && !(this.regexParser.currentNode instanceof RegexBarNode) && !(this.regexParser.currentNode instanceof RegexCloseBraceNode)) {
45
+ const character = this.regexParser.currentNode;
46
+ if (Object.isUndefined(character.getRegexCharacterValue()))
47
+ this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1036, character.span);
48
+ else
49
+ this.classSetCharacterValidator.validate(this.regexParser, character);
50
+ characters.push(character);
51
+ this.regexParser.advance();
52
+ }
53
+ const endOffset = this.regexParser.currentNode.span.startOffset;
54
+ return new RegexClassStringNode(characters, this.regexParser.regexLexer.reader.createSpan(startOffset, endOffset - startOffset));
55
+ }
56
+ }
57
+ //# sourceMappingURL=regex-class-string-disjunction.parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regex-class-string-disjunction.parser.js","sourceRoot":"","sources":["../../../../../src/parsers/noldova.context.parsers.regex/src/services/parsers/regex-class-string-disjunction.parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
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 { RegexDisjunctionNode } from "../../models/nodes/regex-disjunction.node.js";
10
+ export class RegexDisjunctionParser {
11
+ regexParser;
12
+ constructor(regexParser) {
13
+ this.regexParser = regexParser;
14
+ }
15
+ parse(stopsAtCloseParenthesis) {
16
+ const startOffset = this.regexParser.currentNode.span.startOffset;
17
+ const alternatives = [];
18
+ const disjunctionIndex = this.regexParser.context.beginDisjunction();
19
+ let alternativeIndex = 0;
20
+ while (true) {
21
+ this.regexParser.context.enterAlternative(disjunctionIndex, alternativeIndex);
22
+ alternatives.push(this.regexParser.parseAlternative(stopsAtCloseParenthesis));
23
+ this.regexParser.context.leaveAlternative();
24
+ if (!(this.regexParser.currentNode instanceof RegexBarNode))
25
+ break;
26
+ this.regexParser.advance();
27
+ alternativeIndex++;
28
+ }
29
+ const endOffset = this.regexParser.currentNode.span.startOffset;
30
+ return new RegexDisjunctionNode(alternatives, this.regexParser.regexLexer.reader.createSpan(startOffset, endOffset - startOffset));
31
+ }
32
+ }
33
+ //# sourceMappingURL=regex-disjunction.parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regex-disjunction.parser.js","sourceRoot":"","sources":["../../../../../src/parsers/noldova.context.parsers.regex/src/services/parsers/regex-disjunction.parser.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,kDAAkD,CAAC;AAEhF,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,YAAY,GAA2B,EAAE,CAAC;QAChD,MAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;QACrE,IAAI,gBAAgB,GAAG,CAAC,CAAC;QAEzB,OAAO,IAAI,EAAE,CAAC;YACZ,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;YAC9E,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,CAAC,CAAC;YAC9E,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAE5C,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,YAAY,YAAY,CAAC;gBACzD,MAAM;YAER,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;YAC3B,gBAAgB,EAAE,CAAC;QACrB,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;QAChE,OAAO,IAAI,oBAAoB,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC;IACrI,CAAC;CACF"}
@@ -0,0 +1,25 @@
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 { RegexDiagnosticTemplates } from "../../models/diagnostics/regex-diagnostic-templates.js";
9
+ import { RegexCloseParenthesisNode } from "../../models/nodes/punctuators/regex-close-parenthesis.node.js";
10
+ export class RegexGroupEndParser {
11
+ regexParser;
12
+ constructor(regexParser) {
13
+ this.regexParser = regexParser;
14
+ }
15
+ parse() {
16
+ if (!(this.regexParser.currentNode instanceof RegexCloseParenthesisNode)) {
17
+ this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1003, this.regexParser.currentNode.span);
18
+ return this.regexParser.currentNode.span.startOffset;
19
+ }
20
+ const endOffset = this.regexParser.currentNode.span.endOffset;
21
+ this.regexParser.advance();
22
+ return endOffset;
23
+ }
24
+ }
25
+ //# sourceMappingURL=regex-group-end.parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regex-group-end.parser.js","sourceRoot":"","sources":["../../../../../src/parsers/noldova.context.parsers.regex/src/services/parsers/regex-group-end.parser.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,wBAAwB,EAAE,MAAM,wDAAwD,CAAC;AAClG,OAAO,EAAE,yBAAyB,EAAE,MAAM,gEAAgE,CAAC;AAG3G,MAAM,OAAO,mBAAmB;IACb,WAAW,CAAoB;IAEhD,YAAmB,WAA8B;QAC/C,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAEM,KAAK;QACV,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,YAAY,yBAAyB,CAAC,EAAE,CAAC;YACzE,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,wBAAwB,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YACtH,OAAO,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;QACvD,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;QAC9D,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QAC3B,OAAO,SAAS,CAAC;IACnB,CAAC;CACF"}
@@ -0,0 +1,91 @@
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 { RegexDiagnosticTemplates } from "../../models/diagnostics/regex-diagnostic-templates.js";
9
+ import { RegexCloseParenthesisNode } from "../../models/nodes/punctuators/regex-close-parenthesis.node.js";
10
+ import { RegexColonNode } from "../../models/nodes/punctuators/regex-colon.node.js";
11
+ import { RegexEqualsNode } from "../../models/nodes/punctuators/regex-equals.node.js";
12
+ import { RegexExclamationNode } from "../../models/nodes/punctuators/regex-exclamation.node.js";
13
+ import { RegexHyphenNode } from "../../models/nodes/punctuators/regex-hyphen.node.js";
14
+ import { RegexLessThanNode } from "../../models/nodes/punctuators/regex-less-than.node.js";
15
+ import { RegexOpenParenthesisNode } from "../../models/nodes/punctuators/regex-open-parenthesis.node.js";
16
+ import { RegexQuestionNode } from "../../models/nodes/punctuators/regex-question.node.js";
17
+ import { RegexCharacterNode } from "../../models/nodes/regex-character.node.js";
18
+ import { RegexUnknownNode } from "../../models/nodes/regex-unknown.node.js";
19
+ import { Resources } from "../../resources.js";
20
+ import { RegexCapturingGroupParser } from "./regex-capturing-group.parser.js";
21
+ import { RegexGroupEndParser } from "./regex-group-end.parser.js";
22
+ import { RegexLookaroundParser } from "./regex-lookaround.parser.js";
23
+ import { RegexModifierGroupParser } from "./regex-modifier-group.parser.js";
24
+ import { RegexNamedCapturingGroupParser } from "./regex-named-capturing-group.parser.js";
25
+ import { RegexNonCapturingGroupParser } from "./regex-non-capturing-group.parser.js";
26
+ export class RegexGroupParser {
27
+ capturingGroupParser;
28
+ lookaroundParser;
29
+ modifierGroupParser;
30
+ namedCapturingGroupParser;
31
+ nonCapturingGroupParser;
32
+ regexParser;
33
+ constructor(regexParser) {
34
+ const groupEndParser = new RegexGroupEndParser(regexParser);
35
+ this.regexParser = regexParser;
36
+ this.capturingGroupParser = new RegexCapturingGroupParser(regexParser, groupEndParser);
37
+ this.lookaroundParser = new RegexLookaroundParser(regexParser, groupEndParser);
38
+ this.modifierGroupParser = new RegexModifierGroupParser(regexParser, groupEndParser);
39
+ this.namedCapturingGroupParser = new RegexNamedCapturingGroupParser(regexParser, groupEndParser);
40
+ this.nonCapturingGroupParser = new RegexNonCapturingGroupParser(regexParser, groupEndParser);
41
+ }
42
+ parse() {
43
+ const startOffset = this.regexParser.currentNode.span.startOffset;
44
+ if (this.regexParser.context.nestingDepth >= Resources.maximumNestingDepth)
45
+ return this.parseExcessivelyNestedGroup(startOffset);
46
+ this.regexParser.context.nestingDepth++;
47
+ this.regexParser.advance();
48
+ try {
49
+ const question = this.regexParser.currentNode;
50
+ if (!(question instanceof RegexQuestionNode))
51
+ return this.capturingGroupParser.parse(startOffset);
52
+ this.regexParser.advance();
53
+ const prefix = this.regexParser.currentNode;
54
+ if (prefix instanceof RegexColonNode)
55
+ return this.nonCapturingGroupParser.parse(startOffset);
56
+ if (prefix instanceof RegexEqualsNode || prefix instanceof RegexExclamationNode)
57
+ return this.lookaroundParser.parseLookahead(startOffset);
58
+ if (prefix instanceof RegexLessThanNode)
59
+ return this.parseLessThanGroup(startOffset);
60
+ if (!(prefix instanceof RegexCharacterNode) && !(prefix instanceof RegexHyphenNode))
61
+ this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1005, prefix.span);
62
+ return this.modifierGroupParser.parse(startOffset);
63
+ }
64
+ finally {
65
+ this.regexParser.context.nestingDepth--;
66
+ }
67
+ }
68
+ parseExcessivelyNestedGroup(startOffset) {
69
+ this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1037, this.regexParser.currentNode.span, [Resources.maximumNestingDepth]);
70
+ let nestingDepth = 0;
71
+ do {
72
+ if (this.regexParser.currentNode instanceof RegexOpenParenthesisNode)
73
+ nestingDepth++;
74
+ else if (this.regexParser.currentNode instanceof RegexCloseParenthesisNode)
75
+ nestingDepth--;
76
+ this.regexParser.advance();
77
+ } while (!this.regexParser.isEndOfFile && nestingDepth > 0);
78
+ const endOffset = this.regexParser.currentNode.span.startOffset;
79
+ const span = this.regexParser.regexLexer.reader.createSpan(startOffset, endOffset - startOffset);
80
+ return new RegexUnknownNode(this.regexParser.context.source.getText(span), span);
81
+ }
82
+ parseLessThanGroup(startOffset) {
83
+ const followingCharacter = this.regexParser.regexLexer.reader.peekCodeUnit();
84
+ if (followingCharacter === Resources.equals || followingCharacter === Resources.exclamation) {
85
+ this.regexParser.advance();
86
+ return this.lookaroundParser.parseLookbehind(startOffset);
87
+ }
88
+ return this.namedCapturingGroupParser.parse(startOffset);
89
+ }
90
+ }
91
+ //# sourceMappingURL=regex-group.parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regex-group.parser.js","sourceRoot":"","sources":["../../../../../src/parsers/noldova.context.parsers.regex/src/services/parsers/regex-group.parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
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 { RegexLookaheadAssertionNode } from "../../models/nodes/assertions/regex-lookahead-assertion.node.js";
9
+ import { RegexLookbehindAssertionNode } from "../../models/nodes/assertions/regex-lookbehind-assertion.node.js";
10
+ import { RegexExclamationNode } from "../../models/nodes/punctuators/regex-exclamation.node.js";
11
+ export class RegexLookaroundParser {
12
+ groupEndParser;
13
+ regexParser;
14
+ constructor(regexParser, groupEndParser) {
15
+ this.regexParser = regexParser;
16
+ this.groupEndParser = groupEndParser;
17
+ }
18
+ parseLookahead(startOffset) {
19
+ const negated = this.regexParser.currentNode instanceof RegexExclamationNode;
20
+ this.regexParser.advance();
21
+ const disjunctionNode = this.regexParser.parseDisjunction(true);
22
+ const endOffset = this.groupEndParser.parse();
23
+ const span = this.regexParser.regexLexer.reader.createSpan(startOffset, endOffset - startOffset);
24
+ return new RegexLookaheadAssertionNode(disjunctionNode, negated, span);
25
+ }
26
+ parseLookbehind(startOffset) {
27
+ const negated = this.regexParser.currentNode instanceof RegexExclamationNode;
28
+ this.regexParser.advance();
29
+ const disjunctionNode = this.regexParser.parseDisjunction(true);
30
+ const endOffset = this.groupEndParser.parse();
31
+ const span = this.regexParser.regexLexer.reader.createSpan(startOffset, endOffset - startOffset);
32
+ return new RegexLookbehindAssertionNode(disjunctionNode, negated, span);
33
+ }
34
+ }
35
+ //# sourceMappingURL=regex-lookaround.parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regex-lookaround.parser.js","sourceRoot":"","sources":["../../../../../src/parsers/noldova.context.parsers.regex/src/services/parsers/regex-lookaround.parser.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,2BAA2B,EAAE,MAAM,iEAAiE,CAAC;AAC9G,OAAO,EAAE,4BAA4B,EAAE,MAAM,kEAAkE,CAAC;AAChH,OAAO,EAAE,oBAAoB,EAAE,MAAM,0DAA0D,CAAC;AAIhG,MAAM,OAAO,qBAAqB;IACf,cAAc,CAAsB;IACpC,WAAW,CAAoB;IAEhD,YAAmB,WAA8B,EAAE,cAAmC;QACpF,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;IAEM,cAAc,CAAC,WAAmB;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,YAAY,oBAAoB,CAAC;QAC7E,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QAC3B,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAChE,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,SAAS,GAAG,WAAW,CAAC,CAAC;QAEjG,OAAO,IAAI,2BAA2B,CAAC,eAAe,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACzE,CAAC;IAEM,eAAe,CAAC,WAAmB;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,YAAY,oBAAoB,CAAC;QAC7E,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QAC3B,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAChE,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,SAAS,GAAG,WAAW,CAAC,CAAC;QAEjG,OAAO,IAAI,4BAA4B,CAAC,eAAe,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAC1E,CAAC;CACF"}