@witchcraft/expressit 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 (307) hide show
  1. package/README.md +86 -0
  2. package/dist/ast/builders/array.d.ts +8 -0
  3. package/dist/ast/builders/array.d.ts.map +1 -0
  4. package/dist/ast/builders/array.js +31 -0
  5. package/dist/ast/builders/condition.d.ts +20 -0
  6. package/dist/ast/builders/condition.d.ts.map +1 -0
  7. package/dist/ast/builders/condition.js +28 -0
  8. package/dist/ast/builders/delim.d.ts +11 -0
  9. package/dist/ast/builders/delim.d.ts.map +1 -0
  10. package/dist/ast/builders/delim.js +20 -0
  11. package/dist/ast/builders/error.d.ts +9 -0
  12. package/dist/ast/builders/error.d.ts.map +1 -0
  13. package/dist/ast/builders/error.js +16 -0
  14. package/dist/ast/builders/expression.d.ts +12 -0
  15. package/dist/ast/builders/expression.d.ts.map +1 -0
  16. package/dist/ast/builders/expression.js +31 -0
  17. package/dist/ast/builders/group.d.ts +20 -0
  18. package/dist/ast/builders/group.d.ts.map +1 -0
  19. package/dist/ast/builders/group.js +47 -0
  20. package/dist/ast/builders/index.d.ts +12 -0
  21. package/dist/ast/builders/index.d.ts.map +1 -0
  22. package/dist/ast/builders/index.js +24 -0
  23. package/dist/ast/builders/isFullPos.d.ts +6 -0
  24. package/dist/ast/builders/isFullPos.d.ts.map +1 -0
  25. package/dist/ast/builders/isFullPos.js +6 -0
  26. package/dist/ast/builders/pos.d.ts +21 -0
  27. package/dist/ast/builders/pos.d.ts.map +1 -0
  28. package/dist/ast/builders/pos.js +28 -0
  29. package/dist/ast/builders/token.d.ts +12 -0
  30. package/dist/ast/builders/token.d.ts.map +1 -0
  31. package/dist/ast/builders/token.js +26 -0
  32. package/dist/ast/builders/type.d.ts +6 -0
  33. package/dist/ast/builders/type.d.ts.map +1 -0
  34. package/dist/ast/builders/type.js +37 -0
  35. package/dist/ast/builders/variable.d.ts +17 -0
  36. package/dist/ast/builders/variable.d.ts.map +1 -0
  37. package/dist/ast/builders/variable.js +62 -0
  38. package/dist/ast/classes/ArrayNode.d.ts +18 -0
  39. package/dist/ast/classes/ArrayNode.d.ts.map +1 -0
  40. package/dist/ast/classes/ArrayNode.js +55 -0
  41. package/dist/ast/classes/Condition.d.ts +13 -0
  42. package/dist/ast/classes/Condition.d.ts.map +1 -0
  43. package/dist/ast/classes/Condition.js +21 -0
  44. package/dist/ast/classes/ConditionNode.d.ts +73 -0
  45. package/dist/ast/classes/ConditionNode.d.ts.map +1 -0
  46. package/dist/ast/classes/ConditionNode.js +101 -0
  47. package/dist/ast/classes/ErrorToken.d.ts +27 -0
  48. package/dist/ast/classes/ErrorToken.d.ts.map +1 -0
  49. package/dist/ast/classes/ErrorToken.js +47 -0
  50. package/dist/ast/classes/Expression.d.ts +13 -0
  51. package/dist/ast/classes/Expression.d.ts.map +1 -0
  52. package/dist/ast/classes/Expression.js +19 -0
  53. package/dist/ast/classes/ExpressionNode.d.ts +21 -0
  54. package/dist/ast/classes/ExpressionNode.d.ts.map +1 -0
  55. package/dist/ast/classes/ExpressionNode.js +57 -0
  56. package/dist/ast/classes/GroupNode.d.ts +64 -0
  57. package/dist/ast/classes/GroupNode.d.ts.map +1 -0
  58. package/dist/ast/classes/GroupNode.js +69 -0
  59. package/dist/ast/classes/Node.d.ts +22 -0
  60. package/dist/ast/classes/Node.d.ts.map +1 -0
  61. package/dist/ast/classes/Node.js +28 -0
  62. package/dist/ast/classes/Token.d.ts +27 -0
  63. package/dist/ast/classes/Token.d.ts.map +1 -0
  64. package/dist/ast/classes/Token.js +28 -0
  65. package/dist/ast/classes/ValidToken.d.ts +26 -0
  66. package/dist/ast/classes/ValidToken.d.ts.map +1 -0
  67. package/dist/ast/classes/ValidToken.js +49 -0
  68. package/dist/ast/classes/VariableNode.d.ts +33 -0
  69. package/dist/ast/classes/VariableNode.d.ts.map +1 -0
  70. package/dist/ast/classes/VariableNode.js +58 -0
  71. package/dist/ast/classes/index.d.ts +12 -0
  72. package/dist/ast/classes/index.d.ts.map +1 -0
  73. package/dist/ast/classes/index.js +24 -0
  74. package/dist/ast/handlers.d.ts +42 -0
  75. package/dist/ast/handlers.d.ts.map +1 -0
  76. package/dist/ast/handlers.js +150 -0
  77. package/dist/ast/index.d.ts +4 -0
  78. package/dist/ast/index.d.ts.map +1 -0
  79. package/dist/ast/index.js +8 -0
  80. package/dist/examples/advancedValueComparer.d.ts +3 -0
  81. package/dist/examples/advancedValueComparer.d.ts.map +1 -0
  82. package/dist/examples/advancedValueComparer.js +28 -0
  83. package/dist/examples/shortcutContextParser.d.ts +22 -0
  84. package/dist/examples/shortcutContextParser.d.ts.map +1 -0
  85. package/dist/examples/shortcutContextParser.js +126 -0
  86. package/dist/global.d.js +1 -0
  87. package/dist/grammar/ParserBase.d.ts +51 -0
  88. package/dist/grammar/ParserBase.d.ts.map +1 -0
  89. package/dist/grammar/ParserBase.js +516 -0
  90. package/dist/grammar/createTokens.d.ts +56 -0
  91. package/dist/grammar/createTokens.d.ts.map +1 -0
  92. package/dist/grammar/createTokens.js +843 -0
  93. package/dist/grammar/index.d.ts +3 -0
  94. package/dist/grammar/index.d.ts.map +1 -0
  95. package/dist/grammar/index.js +6 -0
  96. package/dist/helpers/errors.d.ts +9 -0
  97. package/dist/helpers/errors.d.ts.map +1 -0
  98. package/dist/helpers/errors.js +41 -0
  99. package/dist/helpers/general/applyBoolean.d.ts +3 -0
  100. package/dist/helpers/general/applyBoolean.d.ts.map +1 -0
  101. package/dist/helpers/general/applyBoolean.js +17 -0
  102. package/dist/helpers/general/applyPrefix.d.ts +4 -0
  103. package/dist/helpers/general/applyPrefix.d.ts.map +1 -0
  104. package/dist/helpers/general/applyPrefix.js +9 -0
  105. package/dist/helpers/general/defaultConditionNormalizer.d.ts +3 -0
  106. package/dist/helpers/general/defaultConditionNormalizer.d.ts.map +1 -0
  107. package/dist/helpers/general/defaultConditionNormalizer.js +6 -0
  108. package/dist/helpers/general/defaultKeyParser.d.ts +3 -0
  109. package/dist/helpers/general/defaultKeyParser.d.ts.map +1 -0
  110. package/dist/helpers/general/defaultKeyParser.js +8 -0
  111. package/dist/helpers/general/defaultPrefixApplier.d.ts +3 -0
  112. package/dist/helpers/general/defaultPrefixApplier.d.ts.map +1 -0
  113. package/dist/helpers/general/defaultPrefixApplier.js +6 -0
  114. package/dist/helpers/general/defaultValueComparer.d.ts +3 -0
  115. package/dist/helpers/general/defaultValueComparer.d.ts.map +1 -0
  116. package/dist/helpers/general/defaultValueComparer.js +6 -0
  117. package/dist/helpers/general/index.d.ts +7 -0
  118. package/dist/helpers/general/index.d.ts.map +1 -0
  119. package/dist/helpers/general/index.js +14 -0
  120. package/dist/helpers/index.d.ts +4 -0
  121. package/dist/helpers/index.d.ts.map +1 -0
  122. package/dist/helpers/index.js +8 -0
  123. package/dist/helpers/parser/assignParents.d.ts +4 -0
  124. package/dist/helpers/parser/assignParents.d.ts.map +1 -0
  125. package/dist/helpers/parser/assignParents.js +71 -0
  126. package/dist/helpers/parser/checkParserOpts.d.ts +3 -0
  127. package/dist/helpers/parser/checkParserOpts.d.ts.map +1 -0
  128. package/dist/helpers/parser/checkParserOpts.js +126 -0
  129. package/dist/helpers/parser/extractPosition.d.ts +9 -0
  130. package/dist/helpers/parser/extractPosition.d.ts.map +1 -0
  131. package/dist/helpers/parser/extractPosition.js +9 -0
  132. package/dist/helpers/parser/getUnclosedRightParenCount.d.ts +5 -0
  133. package/dist/helpers/parser/getUnclosedRightParenCount.d.ts.map +1 -0
  134. package/dist/helpers/parser/getUnclosedRightParenCount.js +20 -0
  135. package/dist/helpers/parser/index.d.ts +9 -0
  136. package/dist/helpers/parser/index.d.ts.map +1 -0
  137. package/dist/helpers/parser/index.js +18 -0
  138. package/dist/helpers/parser/parseParserOptions.d.ts +4 -0
  139. package/dist/helpers/parser/parseParserOptions.d.ts.map +1 -0
  140. package/dist/helpers/parser/parseParserOptions.js +45 -0
  141. package/dist/helpers/parser/seal.d.ts +8 -0
  142. package/dist/helpers/parser/seal.d.ts.map +1 -0
  143. package/dist/helpers/parser/seal.js +10 -0
  144. package/dist/helpers/parser/setParent.d.ts +6 -0
  145. package/dist/helpers/parser/setParent.d.ts.map +1 -0
  146. package/dist/helpers/parser/setParent.js +4 -0
  147. package/dist/helpers/parser/unescape.d.ts +3 -0
  148. package/dist/helpers/parser/unescape.d.ts.map +1 -0
  149. package/dist/helpers/parser/unescape.js +6 -0
  150. package/dist/index.d.ts +6 -0
  151. package/dist/index.d.ts.map +1 -0
  152. package/dist/index.js +17 -0
  153. package/dist/methods/autocomplete.d.ts +18 -0
  154. package/dist/methods/autocomplete.d.ts.map +1 -0
  155. package/dist/methods/autocomplete.js +109 -0
  156. package/dist/methods/autoreplace.d.ts +13 -0
  157. package/dist/methods/autoreplace.d.ts.map +1 -0
  158. package/dist/methods/autoreplace.js +36 -0
  159. package/dist/methods/autosuggest.d.ts +28 -0
  160. package/dist/methods/autosuggest.d.ts.map +1 -0
  161. package/dist/methods/autosuggest.js +371 -0
  162. package/dist/methods/evaluate.d.ts +11 -0
  163. package/dist/methods/evaluate.d.ts.map +1 -0
  164. package/dist/methods/evaluate.js +30 -0
  165. package/dist/methods/getBestIndex.d.ts +19 -0
  166. package/dist/methods/getBestIndex.d.ts.map +1 -0
  167. package/dist/methods/getBestIndex.js +53 -0
  168. package/dist/methods/getIndexes.d.ts +17 -0
  169. package/dist/methods/getIndexes.d.ts.map +1 -0
  170. package/dist/methods/getIndexes.js +97 -0
  171. package/dist/methods/index.d.ts +9 -0
  172. package/dist/methods/index.d.ts.map +1 -0
  173. package/dist/methods/index.js +18 -0
  174. package/dist/methods/normalize.d.ts +12 -0
  175. package/dist/methods/normalize.d.ts.map +1 -0
  176. package/dist/methods/normalize.js +99 -0
  177. package/dist/methods/validate.d.ts +11 -0
  178. package/dist/methods/validate.d.ts.map +1 -0
  179. package/dist/methods/validate.js +111 -0
  180. package/dist/package.js +7 -0
  181. package/dist/package.json.js +193 -0
  182. package/dist/parser.d.ts +58 -0
  183. package/dist/parser.d.ts.map +1 -0
  184. package/dist/parser.js +136 -0
  185. package/dist/types/ast.d.ts +70 -0
  186. package/dist/types/ast.d.ts.map +1 -0
  187. package/dist/types/ast.js +29 -0
  188. package/dist/types/autocomplete.d.ts +143 -0
  189. package/dist/types/autocomplete.d.ts.map +1 -0
  190. package/dist/types/autocomplete.js +24 -0
  191. package/dist/types/errors.d.ts +34 -0
  192. package/dist/types/errors.d.ts.map +1 -0
  193. package/dist/types/errors.js +10 -0
  194. package/dist/types/index.d.ts +5 -0
  195. package/dist/types/index.d.ts.map +1 -0
  196. package/dist/types/index.js +9 -0
  197. package/dist/types/parser.d.ts +451 -0
  198. package/dist/types/parser.d.ts.map +1 -0
  199. package/dist/types/parser.js +1 -0
  200. package/dist/utils/extractTokens.d.ts +8 -0
  201. package/dist/utils/extractTokens.d.ts.map +1 -0
  202. package/dist/utils/extractTokens.js +50 -0
  203. package/dist/utils/getCursorInfo.d.ts +7 -0
  204. package/dist/utils/getCursorInfo.d.ts.map +1 -0
  205. package/dist/utils/getCursorInfo.js +86 -0
  206. package/dist/utils/getOppositeDelimiter.d.ts +6 -0
  207. package/dist/utils/getOppositeDelimiter.d.ts.map +1 -0
  208. package/dist/utils/getOppositeDelimiter.js +35 -0
  209. package/dist/utils/getSurroundingErrors.d.ts +25 -0
  210. package/dist/utils/getSurroundingErrors.d.ts.map +1 -0
  211. package/dist/utils/getSurroundingErrors.js +37 -0
  212. package/dist/utils/index.d.ts +10 -0
  213. package/dist/utils/index.d.ts.map +1 -0
  214. package/dist/utils/index.js +20 -0
  215. package/dist/utils/isBracket.d.ts +3 -0
  216. package/dist/utils/isBracket.d.ts.map +1 -0
  217. package/dist/utils/isBracket.js +7 -0
  218. package/dist/utils/isDelimiter.d.ts +6 -0
  219. package/dist/utils/isDelimiter.d.ts.map +1 -0
  220. package/dist/utils/isDelimiter.js +17 -0
  221. package/dist/utils/isParen.d.ts +3 -0
  222. package/dist/utils/isParen.d.ts.map +1 -0
  223. package/dist/utils/isParen.js +7 -0
  224. package/dist/utils/isQuote.d.ts +4 -0
  225. package/dist/utils/isQuote.d.ts.map +1 -0
  226. package/dist/utils/isQuote.js +7 -0
  227. package/dist/utils/prettyAst.d.ts +35 -0
  228. package/dist/utils/prettyAst.d.ts.map +1 -0
  229. package/dist/utils/prettyAst.js +112 -0
  230. package/package.json +152 -0
  231. package/src/ast/builders/array.ts +45 -0
  232. package/src/ast/builders/condition.ts +56 -0
  233. package/src/ast/builders/delim.ts +39 -0
  234. package/src/ast/builders/error.ts +22 -0
  235. package/src/ast/builders/expression.ts +66 -0
  236. package/src/ast/builders/group.ts +79 -0
  237. package/src/ast/builders/index.ts +13 -0
  238. package/src/ast/builders/isFullPos.ts +10 -0
  239. package/src/ast/builders/pos.ts +57 -0
  240. package/src/ast/builders/token.ts +46 -0
  241. package/src/ast/builders/type.ts +32 -0
  242. package/src/ast/builders/variable.ts +89 -0
  243. package/src/ast/classes/ArrayNode.ts +46 -0
  244. package/src/ast/classes/Condition.ts +22 -0
  245. package/src/ast/classes/ConditionNode.ts +141 -0
  246. package/src/ast/classes/ErrorToken.ts +49 -0
  247. package/src/ast/classes/Expression.ts +26 -0
  248. package/src/ast/classes/ExpressionNode.ts +62 -0
  249. package/src/ast/classes/GroupNode.ts +127 -0
  250. package/src/ast/classes/Node.ts +47 -0
  251. package/src/ast/classes/Token.ts +59 -0
  252. package/src/ast/classes/ValidToken.ts +56 -0
  253. package/src/ast/classes/VariableNode.ts +67 -0
  254. package/src/ast/classes/index.ts +13 -0
  255. package/src/ast/handlers.ts +190 -0
  256. package/src/ast/index.ts +5 -0
  257. package/src/examples/advancedValueComparer.ts +31 -0
  258. package/src/examples/shortcutContextParser.ts +140 -0
  259. package/src/global.d.ts +4 -0
  260. package/src/grammar/ParserBase.ts +715 -0
  261. package/src/grammar/createTokens.ts +512 -0
  262. package/src/grammar/index.ts +4 -0
  263. package/src/helpers/errors.ts +45 -0
  264. package/src/helpers/general/applyBoolean.ts +9 -0
  265. package/src/helpers/general/applyPrefix.ts +7 -0
  266. package/src/helpers/general/defaultConditionNormalizer.ts +9 -0
  267. package/src/helpers/general/defaultKeyParser.ts +8 -0
  268. package/src/helpers/general/defaultPrefixApplier.ts +7 -0
  269. package/src/helpers/general/defaultValueComparer.ts +7 -0
  270. package/src/helpers/general/index.ts +8 -0
  271. package/src/helpers/index.ts +5 -0
  272. package/src/helpers/parser/assignParents.ts +51 -0
  273. package/src/helpers/parser/checkParserOpts.ts +143 -0
  274. package/src/helpers/parser/extractPosition.ts +15 -0
  275. package/src/helpers/parser/getUnclosedRightParenCount.ts +22 -0
  276. package/src/helpers/parser/index.ts +10 -0
  277. package/src/helpers/parser/parseParserOptions.ts +54 -0
  278. package/src/helpers/parser/seal.ts +14 -0
  279. package/src/helpers/parser/setParent.ts +5 -0
  280. package/src/helpers/parser/unescape.ts +4 -0
  281. package/src/index.ts +7 -0
  282. package/src/methods/autocomplete.ts +128 -0
  283. package/src/methods/autoreplace.ts +46 -0
  284. package/src/methods/autosuggest.ts +543 -0
  285. package/src/methods/evaluate.ts +37 -0
  286. package/src/methods/getBestIndex.ts +53 -0
  287. package/src/methods/getIndexes.ts +99 -0
  288. package/src/methods/index.ts +10 -0
  289. package/src/methods/normalize.ts +138 -0
  290. package/src/methods/validate.ts +141 -0
  291. package/src/package.js +11 -0
  292. package/src/parser.ts +183 -0
  293. package/src/types/ast.ts +148 -0
  294. package/src/types/autocomplete.ts +152 -0
  295. package/src/types/errors.ts +40 -0
  296. package/src/types/index.ts +6 -0
  297. package/src/types/parser.ts +479 -0
  298. package/src/utils/extractTokens.ts +67 -0
  299. package/src/utils/getCursorInfo.ts +106 -0
  300. package/src/utils/getOppositeDelimiter.ts +36 -0
  301. package/src/utils/getSurroundingErrors.ts +57 -0
  302. package/src/utils/index.ts +11 -0
  303. package/src/utils/isBracket.ts +6 -0
  304. package/src/utils/isDelimiter.ts +18 -0
  305. package/src/utils/isParen.ts +6 -0
  306. package/src/utils/isQuote.ts +6 -0
  307. package/src/utils/prettyAst.ts +152 -0
@@ -0,0 +1,843 @@
1
+ import { escapeRegex, isBlank } from "@alanscodelog/utils";
2
+ import { createToken, Lexer } from "chevrotain";
3
+ function clone(token) {
4
+ const t = {};
5
+ if (token.name !== void 0)
6
+ t.name = token.name;
7
+ if (token.CATEGORIES !== void 0)
8
+ t.categories = token.CATEGORIES;
9
+ if (token.GROUP !== void 0)
10
+ t.group = token.GROUP;
11
+ if (token.LINE_BREAKS !== void 0)
12
+ t.line_breaks = token.LINE_BREAKS;
13
+ if (token.LONGER_ALT !== void 0)
14
+ t.longet_alt = token.LONGER_ALT;
15
+ if (token.PATTERN !== void 0)
16
+ t.pattern = token.PATTERN;
17
+ if (token.PUSH_MODE !== void 0)
18
+ t.push_mode = token.PUSH_MODE;
19
+ if (token.POP_MODE !== void 0)
20
+ t.pop_mode = token.POP_MODE;
21
+ return createToken(t);
22
+ }
23
+ function changePushMode(tokens, mode) {
24
+ return tokens.map((_) => clone({
25
+ ..._,
26
+ ...mode ? { PUSH_MODE: typeof mode === "function" ? mode(_.PUSH_MODE) : mode } : {}
27
+ }));
28
+ }
29
+ function createTokens(opts) {
30
+ const $ = {};
31
+ $[
32
+ "ANY"
33
+ /* ANY */
34
+ ] = createToken({
35
+ name: "ANY",
36
+ pattern: Lexer.NA
37
+ });
38
+ $[
39
+ "QUOTE_ANY"
40
+ /* QUOTE_ANY */
41
+ ] = createToken({
42
+ name: "QUOTE_ANY",
43
+ pattern: Lexer.NA
44
+ });
45
+ $[
46
+ "QUOTE_SINGLE"
47
+ /* QUOTE_SINGLE */
48
+ ] = createToken({
49
+ name: "QUOTE_SINGLE",
50
+ pattern: Lexer.NA
51
+ });
52
+ $[
53
+ "QUOTE_DOUBLE"
54
+ /* QUOTE_DOUBLE */
55
+ ] = createToken({
56
+ name: "QUOTE_DOUBLE",
57
+ pattern: Lexer.NA
58
+ });
59
+ $[
60
+ "QUOTE_BACKTICK"
61
+ /* QUOTE_BACKTICK */
62
+ ] = createToken({
63
+ name: "QUOTE_BACKTICK",
64
+ pattern: Lexer.NA
65
+ });
66
+ $[
67
+ "REGEX_ANY"
68
+ /* REGEX_ANY */
69
+ ] = createToken({
70
+ name: "REGEX_ANY",
71
+ pattern: Lexer.NA
72
+ });
73
+ $[
74
+ "VALUE_FOR_SINGLE"
75
+ /* VALUE_FOR_SINGLE */
76
+ ] = createToken({
77
+ name: "VALUE_FOR_SINGLE",
78
+ pattern: Lexer.NA
79
+ });
80
+ $[
81
+ "VALUE_FOR_DOUBLE"
82
+ /* VALUE_FOR_DOUBLE */
83
+ ] = createToken({
84
+ name: "VALUE_FOR_DOUBLE",
85
+ pattern: Lexer.NA
86
+ });
87
+ $[
88
+ "VALUE_FOR_BACKTICK"
89
+ /* VALUE_FOR_BACKTICK */
90
+ ] = createToken({
91
+ name: "VALUE_FOR_BACKTICK",
92
+ pattern: Lexer.NA
93
+ });
94
+ $[
95
+ "OPERATOR_OR"
96
+ /* OPERATOR_OR */
97
+ ] = createToken({
98
+ name: "OPERATOR_OR",
99
+ pattern: Lexer.NA
100
+ });
101
+ $[
102
+ "OPERATOR_AND"
103
+ /* OPERATOR_AND */
104
+ ] = createToken({
105
+ name: "OPERATOR_AND",
106
+ pattern: Lexer.NA
107
+ });
108
+ $[
109
+ "OPERATOR_NOT"
110
+ /* OPERATOR_NOT */
111
+ ] = createToken({
112
+ name: "OPERATOR_NOT",
113
+ pattern: Lexer.NA
114
+ });
115
+ $[
116
+ "VALUE"
117
+ /* VALUE */
118
+ ] = createToken({
119
+ name: "VALUE",
120
+ pattern: Lexer.NA
121
+ });
122
+ $[
123
+ "_"
124
+ /* _ */
125
+ ] = createToken({
126
+ name: "_",
127
+ pattern: /\s+/,
128
+ group: Lexer.SKIPPED,
129
+ line_breaks: true
130
+ });
131
+ $[
132
+ "REGEX_START"
133
+ /* REGEX_START */
134
+ ] = createToken({
135
+ name: "REGEX_START",
136
+ push_mode: "notRegex",
137
+ pattern: /\//,
138
+ categories: [$[
139
+ "REGEX_ANY"
140
+ /* REGEX_ANY */
141
+ ], $[
142
+ "ANY"
143
+ /* ANY */
144
+ ]]
145
+ });
146
+ $[
147
+ "REGEX_END"
148
+ /* REGEX_END */
149
+ ] = createToken({
150
+ name: "REGEX_END",
151
+ push_mode: "main",
152
+ pattern: /\/[a-z]*/,
153
+ categories: [$[
154
+ "REGEX_ANY"
155
+ /* REGEX_ANY */
156
+ ], $[
157
+ "ANY"
158
+ /* ANY */
159
+ ]]
160
+ });
161
+ $[
162
+ "VALUE_REGEX"
163
+ /* VALUE_REGEX */
164
+ ] = createToken({
165
+ name: "VALUE_REGEX",
166
+ push_mode: "regexEnd",
167
+ line_breaks: true,
168
+ categories: [$[
169
+ "ANY"
170
+ /* ANY */
171
+ ]],
172
+ pattern: {
173
+ exec: (text, start) => {
174
+ let end = start;
175
+ let inGroup = 0;
176
+ let char = text[end];
177
+ let prevEscaped = false;
178
+ while (char !== void 0 && (char !== "/" || inGroup > 0 || prevEscaped)) {
179
+ if (char === "[")
180
+ inGroup++;
181
+ if (char === "]" && inGroup > 0)
182
+ inGroup--;
183
+ if (char === "\\") {
184
+ if (!prevEscaped) {
185
+ prevEscaped = true;
186
+ } else {
187
+ prevEscaped = false;
188
+ }
189
+ } else {
190
+ prevEscaped && (prevEscaped = false);
191
+ }
192
+ end++;
193
+ char = text[end];
194
+ }
195
+ if (start === end)
196
+ return null;
197
+ return [text.substring(start, end)];
198
+ }
199
+ }
200
+ });
201
+ $[
202
+ "QUOTE_SINGLE_START"
203
+ /* QUOTE_SINGLE_START */
204
+ ] = createToken({
205
+ name: "QUOTE_SINGLE_START",
206
+ pattern: /'/,
207
+ push_mode: "notSingle",
208
+ categories: [$[
209
+ "QUOTE_SINGLE"
210
+ /* QUOTE_SINGLE */
211
+ ], $[
212
+ "QUOTE_ANY"
213
+ /* QUOTE_ANY */
214
+ ], $[
215
+ "ANY"
216
+ /* ANY */
217
+ ]]
218
+ });
219
+ $[
220
+ "QUOTE_DOUBLE_START"
221
+ /* QUOTE_DOUBLE_START */
222
+ ] = createToken({
223
+ name: "QUOTE_DOUBLE_START",
224
+ pattern: /"/,
225
+ push_mode: "notDouble",
226
+ categories: [$[
227
+ "QUOTE_DOUBLE"
228
+ /* QUOTE_DOUBLE */
229
+ ], $[
230
+ "QUOTE_ANY"
231
+ /* QUOTE_ANY */
232
+ ], $[
233
+ "ANY"
234
+ /* ANY */
235
+ ]]
236
+ });
237
+ $[
238
+ "QUOTE_BACKTICK_START"
239
+ /* QUOTE_BACKTICK_START */
240
+ ] = createToken({
241
+ name: "QUOTE_BACKTICK_START",
242
+ pattern: /`/,
243
+ push_mode: "notBacktick",
244
+ categories: [$[
245
+ "QUOTE_BACKTICK"
246
+ /* QUOTE_BACKTICK */
247
+ ], $[
248
+ "QUOTE_ANY"
249
+ /* QUOTE_ANY */
250
+ ], $[
251
+ "ANY"
252
+ /* ANY */
253
+ ]]
254
+ });
255
+ $[
256
+ "QUOTE_SINGLE_END"
257
+ /* QUOTE_SINGLE_END */
258
+ ] = createToken({
259
+ name: "QUOTE_SINGLE_END",
260
+ pattern: /'/,
261
+ push_mode: "main",
262
+ categories: [$[
263
+ "QUOTE_SINGLE"
264
+ /* QUOTE_SINGLE */
265
+ ], $[
266
+ "QUOTE_ANY"
267
+ /* QUOTE_ANY */
268
+ ], $[
269
+ "ANY"
270
+ /* ANY */
271
+ ]]
272
+ });
273
+ $[
274
+ "QUOTE_DOUBLE_END"
275
+ /* QUOTE_DOUBLE_END */
276
+ ] = createToken({
277
+ name: "QUOTE_DOUBLE_END",
278
+ pattern: /"/,
279
+ push_mode: "main",
280
+ categories: [$[
281
+ "QUOTE_DOUBLE"
282
+ /* QUOTE_DOUBLE */
283
+ ], $[
284
+ "QUOTE_ANY"
285
+ /* QUOTE_ANY */
286
+ ], $[
287
+ "ANY"
288
+ /* ANY */
289
+ ]]
290
+ });
291
+ $[
292
+ "QUOTE_BACKTICK_END"
293
+ /* QUOTE_BACKTICK_END */
294
+ ] = createToken({
295
+ name: "QUOTE_BACKTICK_END",
296
+ pattern: /`/,
297
+ push_mode: "main",
298
+ categories: [$[
299
+ "QUOTE_BACKTICK"
300
+ /* QUOTE_BACKTICK */
301
+ ], $[
302
+ "QUOTE_ANY"
303
+ /* QUOTE_ANY */
304
+ ], $[
305
+ "ANY"
306
+ /* ANY */
307
+ ]]
308
+ });
309
+ $[
310
+ "VALUE_NOT_SINGLE"
311
+ /* VALUE_NOT_SINGLE */
312
+ ] = createToken({
313
+ name: "VALUE_NOT_SINGLE",
314
+ pattern: /(\\[\s\S]|[^'])+/,
315
+ push_mode: "endQuotes",
316
+ categories: [$[
317
+ "VALUE"
318
+ /* VALUE */
319
+ ], $[
320
+ "VALUE_FOR_SINGLE"
321
+ /* VALUE_FOR_SINGLE */
322
+ ], $[
323
+ "ANY"
324
+ /* ANY */
325
+ ]],
326
+ line_breaks: true
327
+ });
328
+ $[
329
+ "VALUE_NOT_DOUBLE"
330
+ /* VALUE_NOT_DOUBLE */
331
+ ] = createToken({
332
+ name: "VALUE_NOT_DOUBLE",
333
+ pattern: /(\\[\s\S]|[^"])+/,
334
+ push_mode: "endQuotes",
335
+ categories: [$[
336
+ "VALUE"
337
+ /* VALUE */
338
+ ], $[
339
+ "VALUE_FOR_DOUBLE"
340
+ /* VALUE_FOR_DOUBLE */
341
+ ], $[
342
+ "ANY"
343
+ /* ANY */
344
+ ]],
345
+ line_breaks: true
346
+ });
347
+ $[
348
+ "VALUE_NOT_BACKTICK"
349
+ /* VALUE_NOT_BACKTICK */
350
+ ] = createToken({
351
+ name: "VALUE_NOT_BACKTICK",
352
+ pattern: /(\\[\s\S]|[^`])+/,
353
+ push_mode: "endQuotes",
354
+ categories: [$[
355
+ "VALUE"
356
+ /* VALUE */
357
+ ], $[
358
+ "VALUE_FOR_BACKTICK"
359
+ /* VALUE_FOR_BACKTICK */
360
+ ], $[
361
+ "ANY"
362
+ /* ANY */
363
+ ]],
364
+ line_breaks: true
365
+ });
366
+ const symOrs = opts.keywords.or.filter((_) => _.isSymbol).map((_) => escapeRegex(_.value));
367
+ const symAnds = opts.keywords.and.filter((_) => _.isSymbol).map((_) => escapeRegex(_.value));
368
+ const symNots = opts.keywords.not.filter((_) => _.isSymbol).map((_) => escapeRegex(_.value));
369
+ const wordOrs = opts.keywords.or.filter((_) => !_.isSymbol).map((_) => escapeRegex(_.value));
370
+ const wordAnds = opts.keywords.and.filter((_) => !_.isSymbol).map((_) => escapeRegex(_.value));
371
+ const wordNots = opts.keywords.not.filter((_) => !_.isSymbol).map((_) => escapeRegex(_.value));
372
+ let syms = [...symOrs, ...symAnds, ...symNots];
373
+ const customPropertyOperators = (opts.customPropertyOperators ?? []).map((_) => escapeRegex(_));
374
+ const expandedPropertySeparator = escapeRegex(opts.expandedPropertySeparator ?? "");
375
+ if (expandedPropertySeparator)
376
+ syms.push(expandedPropertySeparator);
377
+ if (customPropertyOperators)
378
+ syms = syms.concat(customPropertyOperators);
379
+ if (opts.regexValues)
380
+ syms.push("\\/");
381
+ if (opts.arrayValues) {
382
+ syms.push("\\[");
383
+ }
384
+ $[
385
+ "VALUE_UNQUOTED"
386
+ /* VALUE_UNQUOTED */
387
+ ] = createToken({
388
+ name: "VALUE_UNQUOTED",
389
+ pattern: new RegExp(`(\\\\[\\s\\S]|(${syms.length > 0 ? `(?!(${syms.join("|")}))` : ``}[^ \\t()'"\`\\\\]))+`),
390
+ push_mode: "endQuotes",
391
+ categories: [$[
392
+ "VALUE"
393
+ /* VALUE */
394
+ ], $[
395
+ "ANY"
396
+ /* ANY */
397
+ ]]
398
+ });
399
+ $[
400
+ "BRACKET_VALUE_UNQUOTED"
401
+ /* BRACKET_VALUE_UNQUOTED */
402
+ ] = createToken({
403
+ name: "BRACKET_VALUE_UNQUOTED",
404
+ pattern: /(\\[\s\S]|([^ \]\\t'"`\\]))+/,
405
+ push_mode: "bracket_endQuotes",
406
+ categories: [$[
407
+ "VALUE"
408
+ /* VALUE */
409
+ ], $[
410
+ "ANY"
411
+ /* ANY */
412
+ ]]
413
+ });
414
+ const operators = [];
415
+ $[
416
+ "SYM_OR"
417
+ /* SYM_OR */
418
+ ] = createToken({
419
+ name: "SYM_OR",
420
+ pattern: new RegExp(`(${symOrs.join("|")})`),
421
+ categories: [$[
422
+ "OPERATOR_OR"
423
+ /* OPERATOR_OR */
424
+ ], $[
425
+ "ANY"
426
+ /* ANY */
427
+ ]]
428
+ });
429
+ if (symOrs.length > 0)
430
+ operators.push($[
431
+ "SYM_OR"
432
+ /* SYM_OR */
433
+ ]);
434
+ $[
435
+ "SYM_AND"
436
+ /* SYM_AND */
437
+ ] = createToken({
438
+ name: "SYM_AND",
439
+ pattern: new RegExp(`(${symAnds.join("|")})`),
440
+ categories: [$[
441
+ "OPERATOR_AND"
442
+ /* OPERATOR_AND */
443
+ ], $[
444
+ "ANY"
445
+ /* ANY */
446
+ ]]
447
+ });
448
+ if (symAnds.length > 0)
449
+ operators.push($[
450
+ "SYM_AND"
451
+ /* SYM_AND */
452
+ ]);
453
+ $[
454
+ "SYM_NOT"
455
+ /* SYM_NOT */
456
+ ] = createToken({
457
+ name: "SYM_NOT",
458
+ pattern: new RegExp(`(${symNots.join("|")})`),
459
+ categories: [$[
460
+ "OPERATOR_NOT"
461
+ /* OPERATOR_NOT */
462
+ ], $[
463
+ "ANY"
464
+ /* ANY */
465
+ ]]
466
+ });
467
+ if (symNots.length > 0)
468
+ operators.push($[
469
+ "SYM_NOT"
470
+ /* SYM_NOT */
471
+ ]);
472
+ $[
473
+ "WORD_OR"
474
+ /* WORD_OR */
475
+ ] = createToken({
476
+ name: "WORD_OR",
477
+ pattern: new RegExp(`(${wordOrs.join("|")})`),
478
+ longer_alt: $[
479
+ "VALUE_UNQUOTED"
480
+ /* VALUE_UNQUOTED */
481
+ ],
482
+ categories: [$[
483
+ "OPERATOR_OR"
484
+ /* OPERATOR_OR */
485
+ ], $[
486
+ "ANY"
487
+ /* ANY */
488
+ ]]
489
+ });
490
+ if (wordOrs.length > 0)
491
+ operators.push($[
492
+ "WORD_OR"
493
+ /* WORD_OR */
494
+ ]);
495
+ $[
496
+ "WORD_AND"
497
+ /* WORD_AND */
498
+ ] = createToken({
499
+ name: "WORD_AND",
500
+ pattern: new RegExp(`(${wordAnds.join("|")})`),
501
+ longer_alt: $[
502
+ "VALUE_UNQUOTED"
503
+ /* VALUE_UNQUOTED */
504
+ ],
505
+ categories: [$[
506
+ "OPERATOR_AND"
507
+ /* OPERATOR_AND */
508
+ ], $[
509
+ "ANY"
510
+ /* ANY */
511
+ ]]
512
+ });
513
+ if (wordAnds.length > 0)
514
+ operators.push($[
515
+ "WORD_AND"
516
+ /* WORD_AND */
517
+ ]);
518
+ $[
519
+ "WORD_NOT"
520
+ /* WORD_NOT */
521
+ ] = createToken({
522
+ name: "WORD_NOT",
523
+ pattern: new RegExp(`(${wordNots.join("|")})`),
524
+ longer_alt: $[
525
+ "VALUE_UNQUOTED"
526
+ /* VALUE_UNQUOTED */
527
+ ],
528
+ categories: [$[
529
+ "OPERATOR_NOT"
530
+ /* OPERATOR_NOT */
531
+ ], $[
532
+ "ANY"
533
+ /* ANY */
534
+ ]]
535
+ });
536
+ if (wordNots.length > 0)
537
+ operators.push($[
538
+ "WORD_NOT"
539
+ /* WORD_NOT */
540
+ ]);
541
+ $[
542
+ "EXP_PROP_OP"
543
+ /* EXP_PROP_OP */
544
+ ] = createToken({
545
+ name: "EXP_PROP_OP",
546
+ pattern: new RegExp(`${expandedPropertySeparator}`),
547
+ categories: [$[
548
+ "ANY"
549
+ /* ANY */
550
+ ]]
551
+ });
552
+ if (!isBlank(expandedPropertySeparator))
553
+ operators.splice(0, 0, $[
554
+ "EXP_PROP_OP"
555
+ /* EXP_PROP_OP */
556
+ ]);
557
+ $[
558
+ "CUSTOM_PROP_OP"
559
+ /* CUSTOM_PROP_OP */
560
+ ] = createToken({
561
+ name: "CUSTOM_PROP_OP",
562
+ pattern: new RegExp(`(${customPropertyOperators.join("|")})`),
563
+ categories: [$[
564
+ "ANY"
565
+ /* ANY */
566
+ ]]
567
+ });
568
+ const customOpEqualsExpandedOrNegationToken = [$[
569
+ "SYM_NOT"
570
+ /* SYM_NOT */
571
+ ].PATTERN, $[
572
+ "EXP_PROP_OP"
573
+ /* EXP_PROP_OP */
574
+ ].PATTERN].find((_) => {
575
+ var _a;
576
+ return (_ == null ? void 0 : _.toString()) === ((_a = $[
577
+ "CUSTOM_PROP_OP"
578
+ /* CUSTOM_PROP_OP */
579
+ ].PATTERN) == null ? void 0 : _a.toString());
580
+ }) !== void 0;
581
+ if (((customPropertyOperators == null ? void 0 : customPropertyOperators.length) ?? 0) > 0 && !customOpEqualsExpandedOrNegationToken)
582
+ operators.splice(1, 0, $[
583
+ "CUSTOM_PROP_OP"
584
+ /* CUSTOM_PROP_OP */
585
+ ]);
586
+ const expandedSepAlsoCustom = customPropertyOperators.includes(expandedPropertySeparator);
587
+ const customOpAlsoNegation = symNots.length > 0 && (customPropertyOperators == null ? void 0 : customPropertyOperators.find((_) => symNots.includes(_))) !== void 0;
588
+ $[
589
+ "PAREN_L"
590
+ /* PAREN_L */
591
+ ] = createToken({
592
+ name: "PAREN_L",
593
+ pattern: /\(/,
594
+ categories: [$[
595
+ "ANY"
596
+ /* ANY */
597
+ ]]
598
+ });
599
+ $[
600
+ "PAREN_R"
601
+ /* PAREN_R */
602
+ ] = createToken({
603
+ name: "PAREN_R",
604
+ pattern: /\)/,
605
+ categories: [$[
606
+ "ANY"
607
+ /* ANY */
608
+ ]]
609
+ });
610
+ const parens = [$[
611
+ "PAREN_L"
612
+ /* PAREN_L */
613
+ ], $[
614
+ "PAREN_R"
615
+ /* PAREN_R */
616
+ ]];
617
+ $[
618
+ "BRACKET_L"
619
+ /* BRACKET_L */
620
+ ] = createToken({
621
+ name: "BRACKET_L",
622
+ pattern: /\[/,
623
+ push_mode: "bracket_main",
624
+ categories: [$[
625
+ "ANY"
626
+ /* ANY */
627
+ ]]
628
+ });
629
+ $[
630
+ "BRACKET_R"
631
+ /* BRACKET_R */
632
+ ] = createToken({
633
+ name: "BRACKET_R",
634
+ pattern: /\]/,
635
+ push_mode: "main",
636
+ categories: [$[
637
+ "ANY"
638
+ /* ANY */
639
+ ]]
640
+ });
641
+ const quotes = [
642
+ $[
643
+ "QUOTE_SINGLE_START"
644
+ /* QUOTE_SINGLE_START */
645
+ ],
646
+ $[
647
+ "QUOTE_DOUBLE_START"
648
+ /* QUOTE_DOUBLE_START */
649
+ ],
650
+ $[
651
+ "QUOTE_BACKTICK_START"
652
+ /* QUOTE_BACKTICK_START */
653
+ ]
654
+ ];
655
+ const quotesEnds = [
656
+ $[
657
+ "QUOTE_SINGLE_END"
658
+ /* QUOTE_SINGLE_END */
659
+ ],
660
+ $[
661
+ "QUOTE_DOUBLE_END"
662
+ /* QUOTE_DOUBLE_END */
663
+ ],
664
+ $[
665
+ "QUOTE_BACKTICK_END"
666
+ /* QUOTE_BACKTICK_END */
667
+ ]
668
+ ];
669
+ const toBracket = (mode) => `bracket_${mode}`;
670
+ const lexerOptions = {
671
+ modes: {
672
+ main: [
673
+ $[
674
+ "_"
675
+ /* _ */
676
+ ],
677
+ ...parens,
678
+ ...opts.arrayValues ? [$[
679
+ "BRACKET_L"
680
+ /* BRACKET_L */
681
+ ]] : [],
682
+ // moves to bracket_main until a bracket pops it back out
683
+ ...operators,
684
+ ...quotes,
685
+ // moves to not*
686
+ ...opts.regexValues ? [$[
687
+ "REGEX_START"
688
+ /* REGEX_START */
689
+ ]] : [],
690
+ // moves to notRegex
691
+ $[
692
+ "VALUE_UNQUOTED"
693
+ /* VALUE_UNQUOTED */
694
+ ]
695
+ // moves to maybeQuoteError
696
+ ],
697
+ endQuotes: [
698
+ $[
699
+ "_"
700
+ /* _ */
701
+ ],
702
+ ...parens,
703
+ ...opts.arrayValues ? [$[
704
+ "BRACKET_L"
705
+ /* BRACKET_L */
706
+ ]] : [],
707
+ // moves to bracket_main until a bracket pops it back out to main
708
+ ...operators,
709
+ ...quotesEnds,
710
+ $[
711
+ "VALUE_UNQUOTED"
712
+ /* VALUE_UNQUOTED */
713
+ ],
714
+ // moves to maybeQuoteError
715
+ ...opts.regexValues ? [$[
716
+ "REGEX_START"
717
+ /* REGEX_START */
718
+ ]] : []
719
+ // error
720
+ ],
721
+ // we can have situations like `a"` where the left quote is missing
722
+ // we want the quote to match a quote end so that it pushes the state to main again, instead of shifting how everything is parsed
723
+ maybeQuoteError: [
724
+ ...quotesEnds,
725
+ ...opts.regexValues ? [$[
726
+ "REGEX_END"
727
+ /* REGEX_END */
728
+ ]] : []
729
+ ],
730
+ // all move to endQuotes
731
+ notSingle: [$[
732
+ "VALUE_NOT_SINGLE"
733
+ /* VALUE_NOT_SINGLE */
734
+ ], $[
735
+ "QUOTE_SINGLE_END"
736
+ /* QUOTE_SINGLE_END */
737
+ ]],
738
+ notDouble: [$[
739
+ "VALUE_NOT_DOUBLE"
740
+ /* VALUE_NOT_DOUBLE */
741
+ ], $[
742
+ "QUOTE_DOUBLE_END"
743
+ /* QUOTE_DOUBLE_END */
744
+ ]],
745
+ notBacktick: [$[
746
+ "VALUE_NOT_BACKTICK"
747
+ /* VALUE_NOT_BACKTICK */
748
+ ], $[
749
+ "QUOTE_BACKTICK_END"
750
+ /* QUOTE_BACKTICK_END */
751
+ ]],
752
+ ...opts.regexValues ? {
753
+ notRegex: [
754
+ $[
755
+ "VALUE_REGEX"
756
+ /* VALUE_REGEX */
757
+ ],
758
+ $[
759
+ "REGEX_END"
760
+ /* REGEX_END */
761
+ ]
762
+ // regex is empty
763
+ ],
764
+ // moves to regexEnd
765
+ regexEnd: [$[
766
+ "REGEX_END"
767
+ /* REGEX_END */
768
+ ]]
769
+ // moves to main
770
+ } : {},
771
+ ...opts.arrayValues ? {
772
+ bracket_main: [
773
+ ...changePushMode(quotes, toBracket),
774
+ $[
775
+ "BRACKET_R"
776
+ /* BRACKET_R */
777
+ ],
778
+ // move back to main
779
+ $[
780
+ "BRACKET_VALUE_UNQUOTED"
781
+ /* BRACKET_VALUE_UNQUOTED */
782
+ ]
783
+ ],
784
+ // all the following follow the same logic as the non-bracket modes, except operators and parens and regexes are not supported and are just parsed as values with BRACKET_VALUE_UNQUOTED
785
+ // the following tokens are also cloned to push differently: quotes (above), quote values, and quote ends
786
+ // they can still be matched because their parent categories are also cloned and it's those we match against
787
+ bracket_endQuotes: [
788
+ $[
789
+ "_"
790
+ /* _ */
791
+ ],
792
+ ...changePushMode(quotesEnds, toBracket),
793
+ $[
794
+ "BRACKET_R"
795
+ /* BRACKET_R */
796
+ ],
797
+ // move back to main
798
+ $[
799
+ "BRACKET_VALUE_UNQUOTED"
800
+ /* BRACKET_VALUE_UNQUOTED */
801
+ ]
802
+ ],
803
+ bracket_maybeQuoteError: changePushMode(quotesEnds, toBracket),
804
+ bracket_notSingle: changePushMode([
805
+ $[
806
+ "VALUE_NOT_SINGLE"
807
+ /* VALUE_NOT_SINGLE */
808
+ ],
809
+ $[
810
+ "QUOTE_SINGLE_END"
811
+ /* QUOTE_SINGLE_END */
812
+ ]
813
+ ], toBracket),
814
+ bracket_notDouble: changePushMode([
815
+ $[
816
+ "VALUE_NOT_DOUBLE"
817
+ /* VALUE_NOT_DOUBLE */
818
+ ],
819
+ $[
820
+ "QUOTE_DOUBLE_END"
821
+ /* QUOTE_DOUBLE_END */
822
+ ]
823
+ ], toBracket),
824
+ bracket_notBacktick: changePushMode([
825
+ $[
826
+ "VALUE_NOT_BACKTICK"
827
+ /* VALUE_NOT_BACKTICK */
828
+ ],
829
+ $[
830
+ "QUOTE_BACKTICK_END"
831
+ /* QUOTE_BACKTICK_END */
832
+ ]
833
+ ], toBracket)
834
+ } : {}
835
+ },
836
+ defaultMode: "main"
837
+ };
838
+ const lexer = new Lexer(lexerOptions);
839
+ return { tokens: $, lexer, info: { expandedSepAlsoCustom, customOpAlsoNegation } };
840
+ }
841
+ export {
842
+ createTokens
843
+ };