@witchcraft/expressit 0.2.1 → 0.3.0

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 (119) hide show
  1. package/README.md +6 -4
  2. package/dist/Lexer.d.ts +102 -99
  3. package/dist/Lexer.d.ts.map +1 -1
  4. package/dist/Lexer.js +211 -557
  5. package/dist/Parser.d.ts +27 -27
  6. package/dist/Parser.d.ts.map +1 -1
  7. package/dist/Parser.js +5 -2
  8. package/dist/ast/builders/condition.d.ts +1 -1
  9. package/dist/ast/builders/condition.d.ts.map +1 -1
  10. package/dist/ast/builders/condition.js +1 -0
  11. package/dist/ast/builders/delim.d.ts +3 -3
  12. package/dist/ast/builders/delim.d.ts.map +1 -1
  13. package/dist/ast/builders/error.d.ts +2 -2
  14. package/dist/ast/builders/error.d.ts.map +1 -1
  15. package/dist/ast/builders/expression.d.ts +2 -2
  16. package/dist/ast/builders/expression.d.ts.map +1 -1
  17. package/dist/ast/builders/expression.js +2 -6
  18. package/dist/ast/builders/group.d.ts +1 -1
  19. package/dist/ast/builders/group.d.ts.map +1 -1
  20. package/dist/ast/builders/group.js +1 -3
  21. package/dist/ast/builders/pos.d.ts +2 -2
  22. package/dist/ast/builders/pos.d.ts.map +1 -1
  23. package/dist/ast/builders/token.d.ts +2 -2
  24. package/dist/ast/builders/token.d.ts.map +1 -1
  25. package/dist/ast/builders/type.d.ts +2 -2
  26. package/dist/ast/builders/type.d.ts.map +1 -1
  27. package/dist/ast/builders/variable.d.ts +3 -3
  28. package/dist/ast/builders/variable.d.ts.map +1 -1
  29. package/dist/ast/createConditionNode.d.ts +1 -1
  30. package/dist/ast/createConditionNode.d.ts.map +1 -1
  31. package/dist/ast/createGroupNode.d.ts +1 -1
  32. package/dist/ast/createGroupNode.d.ts.map +1 -1
  33. package/dist/ast/createToken.d.ts +2 -2
  34. package/dist/ast/createToken.d.ts.map +1 -1
  35. package/dist/ast/createToken.js +2 -2
  36. package/dist/ast/error.d.ts +2 -2
  37. package/dist/ast/error.d.ts.map +1 -1
  38. package/dist/ast/error.js +1 -0
  39. package/dist/ast/handlers.d.ts +23 -23
  40. package/dist/ast/handlers.d.ts.map +1 -1
  41. package/dist/ast/handlers.js +4 -4
  42. package/dist/examples/ParserWithSqlSupport.d.ts +62 -0
  43. package/dist/examples/ParserWithSqlSupport.d.ts.map +1 -0
  44. package/dist/examples/ParserWithSqlSupport.js +271 -0
  45. package/dist/examples/{shortcutContextParser.d.ts → ShortcutContextParser.d.ts} +5 -5
  46. package/dist/examples/ShortcutContextParser.d.ts.map +1 -0
  47. package/dist/examples/{shortcutContextParser.js → ShortcutContextParser.js} +2 -2
  48. package/dist/examples/index.d.ts +2 -1
  49. package/dist/examples/index.d.ts.map +1 -1
  50. package/dist/examples/index.js +3 -1
  51. package/dist/index.js +2 -2
  52. package/dist/internal/ExpressitError.d.ts +2 -2
  53. package/dist/internal/ExpressitError.d.ts.map +1 -1
  54. package/dist/internal/ExpressitError.js +2 -1
  55. package/dist/internal/checkParserOpts.d.ts +1 -1
  56. package/dist/internal/checkParserOpts.d.ts.map +1 -1
  57. package/dist/internal/checkParserOpts.js +11 -11
  58. package/dist/internal/parseParserOptions.d.ts +1 -1
  59. package/dist/internal/parseParserOptions.d.ts.map +1 -1
  60. package/dist/package.json.js +4 -195
  61. package/dist/types/ast.d.ts +60 -58
  62. package/dist/types/ast.d.ts.map +1 -1
  63. package/dist/types/ast.js +26 -27
  64. package/dist/types/autocomplete.d.ts +23 -21
  65. package/dist/types/autocomplete.d.ts.map +1 -1
  66. package/dist/types/autocomplete.js +24 -21
  67. package/dist/types/errors.d.ts +12 -10
  68. package/dist/types/errors.d.ts.map +1 -1
  69. package/dist/types/errors.js +8 -7
  70. package/dist/types/index.js +2 -2
  71. package/dist/types/parser.d.ts +9 -9
  72. package/dist/types/parser.d.ts.map +1 -1
  73. package/dist/utils/getCursorInfo.js +3 -1
  74. package/dist/utils/getOppositeDelimiter.d.ts +2 -2
  75. package/dist/utils/getOppositeDelimiter.d.ts.map +1 -1
  76. package/dist/utils/isDelimiter.d.ts +2 -2
  77. package/dist/utils/isDelimiter.d.ts.map +1 -1
  78. package/dist/utils/isParen.d.ts +2 -2
  79. package/dist/utils/isParen.d.ts.map +1 -1
  80. package/dist/utils/isQuote.d.ts +2 -2
  81. package/dist/utils/isQuote.d.ts.map +1 -1
  82. package/package.json +29 -27
  83. package/src/Lexer.ts +103 -92
  84. package/src/Parser.ts +70 -64
  85. package/src/ast/builders/condition.ts +3 -3
  86. package/src/ast/builders/delim.ts +5 -5
  87. package/src/ast/builders/error.ts +3 -3
  88. package/src/ast/builders/expression.ts +4 -8
  89. package/src/ast/builders/group.ts +2 -4
  90. package/src/ast/builders/pos.ts +3 -3
  91. package/src/ast/builders/token.ts +2 -2
  92. package/src/ast/builders/type.ts +2 -2
  93. package/src/ast/builders/variable.ts +5 -5
  94. package/src/ast/createConditionNode.ts +2 -2
  95. package/src/ast/createGroupNode.ts +4 -4
  96. package/src/ast/createToken.ts +6 -6
  97. package/src/ast/error.ts +2 -2
  98. package/src/ast/handlers.ts +23 -23
  99. package/src/examples/ParserWithSqlSupport.ts +371 -0
  100. package/src/examples/{shortcutContextParser.ts → ShortcutContextParser.ts} +14 -14
  101. package/src/examples/index.ts +2 -1
  102. package/src/internal/ExpressitError.ts +4 -4
  103. package/src/internal/checkParserOpts.ts +14 -14
  104. package/src/internal/parseParserOptions.ts +2 -2
  105. package/src/types/ast.ts +101 -96
  106. package/src/types/autocomplete.ts +26 -22
  107. package/src/types/errors.ts +18 -13
  108. package/src/types/parser.ts +9 -9
  109. package/src/utils/getCursorInfo.ts +1 -1
  110. package/src/utils/getOppositeDelimiter.ts +2 -2
  111. package/src/utils/getSurroundingErrors.ts +4 -4
  112. package/src/utils/isDelimiter.ts +3 -3
  113. package/src/utils/isParen.ts +2 -2
  114. package/src/utils/isQuote.ts +2 -2
  115. package/dist/examples/shortcutContextParser.d.ts.map +0 -1
  116. package/dist/global.d.js +0 -1
  117. package/dist/package.js +0 -7
  118. package/src/global.d.ts +0 -4
  119. package/src/package.js +0 -11
package/dist/Lexer.js CHANGED
@@ -1,52 +1,67 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
3
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
+ import { enumFromArray } from "@alanscodelog/utils/enumFromArray.js";
4
5
  import { isBlank } from "@alanscodelog/utils/isBlank.js";
5
6
  import { pushIfNotIn } from "@alanscodelog/utils/pushIfNotIn.js";
6
7
  import { checkParserOpts } from "./internal/checkParserOpts.js";
7
8
  import { parseParserOptions } from "./internal/parseParserOptions.js";
8
9
  const regexFlags = /^[a-zA-Z]+/;
10
+ const MODE = enumFromArray([
11
+ "MAIN",
12
+ "MAYBE_QUOTE_ERROR",
13
+ "NOT_SINGLE",
14
+ "NOT_DOUBLE",
15
+ "NOT_BACKTICK",
16
+ "NOT_REGEX",
17
+ "REGEX_END",
18
+ "BRACKET_MAIN",
19
+ "BRACKET_MAYBE_QUOTE_ERROR",
20
+ "BRACKET_NOT_SINGLE",
21
+ "BRACKET_NOT_DOUBLE",
22
+ "BRACKET_NOT_BACKTICK",
23
+ "BRACKET_NOT_REGEX",
24
+ "BRACKET_REGEX_END"
25
+ ]);
9
26
  const BRACKET_PREFIX = "BRACKET";
10
- var $T = /* @__PURE__ */ (($T2) => {
11
- $T2["_"] = "_";
12
- $T2["VALUE_UNQUOTED"] = "VALUE_UNQUOTED";
13
- $T2["VALUE_REGEX"] = "VALUE_REGEX";
14
- $T2["VALUE_NOT_SINGLE"] = "VALUE_NOT_SINGLE";
15
- $T2["VALUE_NOT_DOUBLE"] = "VALUE_NOT_DOUBLE";
16
- $T2["VALUE_NOT_BACKTICK"] = "VALUE_NOT_BACKTICK";
17
- $T2["SYM_OR"] = "SYM_OR";
18
- $T2["SYM_AND"] = "SYM_AND";
19
- $T2["SYM_NOT"] = "SYM_NOT";
20
- $T2["WORD_OR"] = "WORD_OR";
21
- $T2["WORD_AND"] = "WORD_AND";
22
- $T2["WORD_NOT"] = "WORD_NOT";
23
- $T2["REGEX_START"] = "REGEX_START";
24
- $T2["REGEX_END"] = "REGEX_END";
25
- $T2["EXP_PROP_OP"] = "EXP_PROP_OP";
26
- $T2["CUSTOM_PROP_OP"] = "CUSTOM_PROP_OP";
27
- $T2["PAREN_L"] = "PAREN_L";
28
- $T2["PAREN_R"] = "PAREN_R";
29
- $T2["BRACKET_L"] = "BRACKET_L";
30
- $T2["BRACKET_R"] = "BRACKET_R";
31
- $T2["QUOTE_SINGLE"] = "QUOTE_SINGLE";
32
- $T2["QUOTE_DOUBLE"] = "QUOTE_DOUBLE";
33
- $T2["QUOTE_BACKTICK"] = "QUOTE_BACKTICK";
34
- return $T2;
35
- })($T || {});
36
- var $C = /* @__PURE__ */ (($C2) => {
37
- $C2["ANY"] = "ANY";
38
- $C2["QUOTE_ANY"] = "QUOTE_ANY";
39
- $C2["REGEX_ANY"] = "REGEX_ANY";
40
- $C2["VALUE_FOR_SINGLE"] = "VALUE_FOR_SINGLE";
41
- $C2["VALUE_FOR_DOUBLE"] = "VALUE_FOR_DOUBLE";
42
- $C2["VALUE_FOR_BACKTICK"] = "VALUE_FOR_BACKTICK";
43
- $C2["OPERATOR_OR"] = "OPERATOR_OR";
44
- $C2["OPERATOR_AND"] = "OPERATOR_AND";
45
- $C2["OPERATOR_NOT"] = "OPERATOR_NOT";
46
- $C2["VALUE"] = "VALUE";
47
- return $C2;
48
- })($C || {});
49
- function createTokenCategoryType(type, entries) {
27
+ const $T = enumFromArray([
28
+ "_",
29
+ "VALUE_UNQUOTED",
30
+ "VALUE_REGEX",
31
+ "VALUE_NOT_SINGLE",
32
+ "VALUE_NOT_DOUBLE",
33
+ "VALUE_NOT_BACKTICK",
34
+ "SYM_OR",
35
+ "SYM_AND",
36
+ "SYM_NOT",
37
+ "WORD_OR",
38
+ "WORD_AND",
39
+ "WORD_NOT",
40
+ "REGEX_START",
41
+ "REGEX_END",
42
+ "EXP_PROP_OP",
43
+ "CUSTOM_PROP_OP",
44
+ "PAREN_L",
45
+ "PAREN_R",
46
+ "BRACKET_L",
47
+ "BRACKET_R",
48
+ "QUOTE_SINGLE",
49
+ "QUOTE_DOUBLE",
50
+ "QUOTE_BACKTICK"
51
+ ]);
52
+ const $C = enumFromArray([
53
+ "ANY",
54
+ "QUOTE_ANY",
55
+ "REGEX_ANY",
56
+ "VALUE_FOR_SINGLE",
57
+ "VALUE_FOR_DOUBLE",
58
+ "VALUE_FOR_BACKTICK",
59
+ "OPERATOR_OR",
60
+ "OPERATOR_AND",
61
+ "OPERATOR_NOT",
62
+ "VALUE"
63
+ ]);
64
+ function createLexerCategoryToken(type, entries) {
50
65
  return {
51
66
  type,
52
67
  isCategory: true,
@@ -151,10 +166,7 @@ class Lexer {
151
166
  const opts = this.opts;
152
167
  const symbols = this.symbols;
153
168
  const $ = {
154
- [
155
- "_"
156
- /* _ */
157
- ]: createTokenType("_", {
169
+ [$T._]: createTokenType($T._, {
158
170
  skip: true,
159
171
  matches: (c, input, start) => {
160
172
  let end = start;
@@ -166,18 +178,12 @@ class Lexer {
166
178
  return input.slice(start, end);
167
179
  }
168
180
  }),
169
- [
170
- "REGEX_START"
171
- /* REGEX_START */
172
- ]: createTokenType("REGEX_START", {
173
- push: "NOT_REGEX",
181
+ [$T.REGEX_START]: createTokenType($T.REGEX_START, {
182
+ push: MODE.NOT_REGEX,
174
183
  matches: (c) => c === "/"
175
184
  }),
176
- [
177
- "REGEX_END"
178
- /* REGEX_END */
179
- ]: createTokenType("REGEX_END", {
180
- push: "MAIN",
185
+ [$T.REGEX_END]: createTokenType($T.REGEX_END, {
186
+ push: MODE.MAIN,
181
187
  matches: (c, input, start) => {
182
188
  let end = start;
183
189
  if (c === "/") {
@@ -191,11 +197,8 @@ class Lexer {
191
197
  } else return false;
192
198
  }
193
199
  }),
194
- [
195
- "VALUE_REGEX"
196
- /* VALUE_REGEX */
197
- ]: createTokenType("VALUE_REGEX", {
198
- push: "REGEX_END",
200
+ [$T.VALUE_REGEX]: createTokenType($T.VALUE_REGEX, {
201
+ push: MODE.REGEX_END,
199
202
  matches: (c, input, start) => {
200
203
  let end = start;
201
204
  let inGroup = 0;
@@ -219,10 +222,7 @@ class Lexer {
219
222
  return input.slice(start, end);
220
223
  }
221
224
  }),
222
- [
223
- "QUOTE_SINGLE"
224
- /* QUOTE_SINGLE */
225
- ]: createTokenType("QUOTE_SINGLE", {
225
+ [$T.QUOTE_SINGLE]: createTokenType($T.QUOTE_SINGLE, {
226
226
  push: (mode, tokens) => {
227
227
  const previous = tokens[tokens.length - 2];
228
228
  if (
@@ -231,91 +231,75 @@ class Lexer {
231
231
  * Go back to main instead of searching for the quoted value
232
232
  * Otherwise input like 'a'b'c' will trap us in a MAIN <=> NOT_SINGLE loop.
233
233
  */
234
- (previous == null ? void 0 : previous.type) === "VALUE_NOT_SINGLE" || (previous == null ? void 0 : previous.type) === "VALUE_UNQUOTED"
234
+ (previous == null ? void 0 : previous.type) === $T.VALUE_NOT_SINGLE || (previous == null ? void 0 : previous.type) === $T.VALUE_UNQUOTED
235
235
  ) {
236
- return "MAIN";
236
+ if (mode.startsWith(BRACKET_PREFIX)) return MODE.BRACKET_MAIN;
237
+ return MODE.MAIN;
237
238
  }
238
239
  switch (mode) {
239
- case "BRACKET_MAIN":
240
- return "BRACKET_NOT_SINGLE";
241
- case "MAIN":
242
- return "NOT_SINGLE";
240
+ case MODE.BRACKET_MAIN:
241
+ return MODE.BRACKET_NOT_SINGLE;
242
+ case MODE.MAIN:
243
+ return MODE.NOT_SINGLE;
243
244
  default:
244
- if (mode.startsWith(BRACKET_PREFIX)) return "BRACKET_MAIN";
245
- return "MAIN";
245
+ if (mode.startsWith(BRACKET_PREFIX)) return MODE.BRACKET_MAIN;
246
+ return MODE.MAIN;
246
247
  }
247
248
  },
248
249
  matches: (c) => c === "'"
249
250
  }),
250
- [
251
- "QUOTE_DOUBLE"
252
- /* QUOTE_DOUBLE */
253
- ]: createTokenType("QUOTE_DOUBLE", {
251
+ [$T.QUOTE_DOUBLE]: createTokenType($T.QUOTE_DOUBLE, {
254
252
  push: (mode, tokens) => {
255
253
  const previous = tokens[tokens.length - 2];
256
- if ((previous == null ? void 0 : previous.type) === "VALUE_NOT_DOUBLE" || (previous == null ? void 0 : previous.type) === "VALUE_UNQUOTED") {
257
- if (mode.startsWith(BRACKET_PREFIX)) return "BRACKET_MAIN";
258
- return "MAIN";
254
+ if ((previous == null ? void 0 : previous.type) === $T.VALUE_NOT_DOUBLE || (previous == null ? void 0 : previous.type) === $T.VALUE_UNQUOTED) {
255
+ if (mode.startsWith(BRACKET_PREFIX)) return MODE.BRACKET_MAIN;
256
+ return MODE.MAIN;
259
257
  }
260
258
  switch (mode) {
261
- case "BRACKET_MAIN":
262
- return "BRACKET_NOT_DOUBLE";
263
- case "MAIN":
264
- return "NOT_DOUBLE";
259
+ case MODE.BRACKET_MAIN:
260
+ return MODE.BRACKET_NOT_DOUBLE;
261
+ case MODE.MAIN:
262
+ return MODE.NOT_DOUBLE;
265
263
  default:
266
- if (mode.startsWith(BRACKET_PREFIX)) return "BRACKET_MAIN";
267
- return "MAIN";
264
+ if (mode.startsWith(BRACKET_PREFIX)) return MODE.BRACKET_MAIN;
265
+ return MODE.MAIN;
268
266
  }
269
267
  },
270
268
  matches: (c) => c === '"'
271
269
  }),
272
- [
273
- "QUOTE_BACKTICK"
274
- /* QUOTE_BACKTICK */
275
- ]: createTokenType("QUOTE_BACKTICK", {
270
+ [$T.QUOTE_BACKTICK]: createTokenType($T.QUOTE_BACKTICK, {
276
271
  push: (mode, tokens) => {
277
272
  const previous = tokens[tokens.length - 2];
278
- if ((previous == null ? void 0 : previous.type) === "VALUE_NOT_BACKTICK" || (previous == null ? void 0 : previous.type) === "VALUE_UNQUOTED") {
279
- return "MAIN";
273
+ if ((previous == null ? void 0 : previous.type) === $T.VALUE_NOT_BACKTICK || (previous == null ? void 0 : previous.type) === $T.VALUE_UNQUOTED) {
274
+ if (mode.startsWith(BRACKET_PREFIX)) return MODE.BRACKET_MAIN;
275
+ return MODE.MAIN;
280
276
  }
281
277
  switch (mode) {
282
- case "BRACKET_MAIN":
283
- return "BRACKET_NOT_BACKTICK";
284
- case "MAIN":
285
- return "NOT_BACKTICK";
278
+ case MODE.BRACKET_MAIN:
279
+ return MODE.BRACKET_NOT_BACKTICK;
280
+ case MODE.MAIN:
281
+ return MODE.NOT_BACKTICK;
286
282
  default:
287
- if (mode.startsWith(BRACKET_PREFIX)) return "BRACKET_MAIN";
288
- return "MAIN";
283
+ if (mode.startsWith(BRACKET_PREFIX)) return MODE.BRACKET_MAIN;
284
+ return MODE.MAIN;
289
285
  }
290
286
  },
291
287
  matches: (c) => c === "`"
292
288
  }),
293
- [
294
- "VALUE_NOT_SINGLE"
295
- /* VALUE_NOT_SINGLE */
296
- ]: createTokenType("VALUE_NOT_SINGLE", {
297
- push: (mode) => mode.startsWith(BRACKET_PREFIX) ? "BRACKET_MAIN" : "MAIN",
289
+ [$T.VALUE_NOT_SINGLE]: createTokenType($T.VALUE_NOT_SINGLE, {
290
+ push: (mode) => mode.startsWith(BRACKET_PREFIX) ? MODE.BRACKET_MAIN : MODE.MAIN,
298
291
  matches: matchWhileCharNotEqualToUnescaped("'")
299
292
  }),
300
- [
301
- "VALUE_NOT_DOUBLE"
302
- /* VALUE_NOT_DOUBLE */
303
- ]: createTokenType("VALUE_NOT_DOUBLE", {
304
- push: (mode) => mode.startsWith(BRACKET_PREFIX) ? "BRACKET_MAIN" : "MAIN",
293
+ [$T.VALUE_NOT_DOUBLE]: createTokenType($T.VALUE_NOT_DOUBLE, {
294
+ push: (mode) => mode.startsWith(BRACKET_PREFIX) ? MODE.BRACKET_MAIN : MODE.MAIN,
305
295
  matches: matchWhileCharNotEqualToUnescaped('"')
306
296
  }),
307
- [
308
- "VALUE_NOT_BACKTICK"
309
- /* VALUE_NOT_BACKTICK */
310
- ]: createTokenType("VALUE_NOT_BACKTICK", {
311
- push: (mode) => mode.startsWith(BRACKET_PREFIX) ? "BRACKET_MAIN" : "MAIN",
297
+ [$T.VALUE_NOT_BACKTICK]: createTokenType($T.VALUE_NOT_BACKTICK, {
298
+ push: (mode) => mode.startsWith(BRACKET_PREFIX) ? MODE.BRACKET_MAIN : MODE.MAIN,
312
299
  matches: matchWhileCharNotEqualToUnescaped("`")
313
300
  }),
314
- [
315
- "VALUE_UNQUOTED"
316
- /* VALUE_UNQUOTED */
317
- ]: createTokenType("VALUE_UNQUOTED", {
318
- push: (mode) => mode.startsWith(BRACKET_PREFIX) ? "BRACKET_MAIN" : "MAIN",
301
+ [$T.VALUE_UNQUOTED]: createTokenType($T.VALUE_UNQUOTED, {
302
+ push: (mode) => mode.startsWith(BRACKET_PREFIX) ? MODE.BRACKET_MAIN : MODE.MAIN,
319
303
  // manual version of pattern: /(\\[\s\S]|(${syms.length > 0 ? `(?!(${syms.join("|")}))` : ``}[^ \t()'"`\\]))+/,
320
304
  matches: (c, input, start, mode) => {
321
305
  let end = start;
@@ -325,7 +309,7 @@ class Lexer {
325
309
  c = input[end];
326
310
  continue;
327
311
  }
328
- if (mode === "MAIN") {
312
+ if (mode === MODE.MAIN) {
329
313
  let found = false;
330
314
  for (const sym of symbols.all) {
331
315
  const textSlice = input.slice(end, end + sym.length);
@@ -336,7 +320,7 @@ class Lexer {
336
320
  }
337
321
  if (found) break;
338
322
  }
339
- if (c === " " || c === " " || c === "(" || c === ")" || c === "'" || c === '"' || c === "`" || c === "\\" || mode === "BRACKET_MAIN" && c === "]") {
323
+ if (c === " " || c === " " || c === "(" || c === ")" || c === "'" || c === '"' || c === "`" || c === "\\" || mode === MODE.BRACKET_MAIN && c === "]") {
340
324
  break;
341
325
  }
342
326
  end++;
@@ -347,62 +331,38 @@ class Lexer {
347
331
  }
348
332
  }),
349
333
  ...symbols.symOrs.length > 0 ? {
350
- [
351
- "SYM_OR"
352
- /* SYM_OR */
353
- ]: createTokenType("SYM_OR", {
334
+ [$T.SYM_OR]: createTokenType($T.SYM_OR, {
354
335
  matches: matchSymbol(symbols.symOrs)
355
336
  })
356
337
  } : {},
357
338
  ...symbols.symAnds.length > 0 ? {
358
- [
359
- "SYM_AND"
360
- /* SYM_AND */
361
- ]: createTokenType("SYM_AND", {
339
+ [$T.SYM_AND]: createTokenType($T.SYM_AND, {
362
340
  matches: matchSymbol(symbols.symAnds)
363
341
  })
364
342
  } : {},
365
343
  ...symbols.symNots.length > 0 ? {
366
- [
367
- "SYM_NOT"
368
- /* SYM_NOT */
369
- ]: createTokenType("SYM_NOT", {
344
+ [$T.SYM_NOT]: createTokenType($T.SYM_NOT, {
370
345
  matches: matchSymbol(symbols.symNots)
371
346
  })
372
347
  } : {},
373
348
  ...symbols.wordOrs.length > 0 ? {
374
- [
375
- "WORD_OR"
376
- /* WORD_OR */
377
- ]: createTokenType("WORD_OR", {
349
+ [$T.WORD_OR]: createTokenType($T.WORD_OR, {
378
350
  matches: matchSymbol(symbols.wordOrs),
379
- longerAlt: "VALUE_UNQUOTED"
380
- /* VALUE_UNQUOTED */
351
+ longerAlt: $T.VALUE_UNQUOTED
381
352
  })
382
353
  } : {},
383
354
  ...symbols.wordAnds.length > 0 ? {
384
- [
385
- "WORD_AND"
386
- /* WORD_AND */
387
- ]: createTokenType("WORD_AND", {
355
+ [$T.WORD_AND]: createTokenType($T.WORD_AND, {
388
356
  matches: matchSymbol(symbols.wordAnds),
389
- longerAlt: "VALUE_UNQUOTED"
390
- /* VALUE_UNQUOTED */
357
+ longerAlt: $T.VALUE_UNQUOTED
391
358
  })
392
359
  } : {},
393
- ...symbols.wordNots.length > 0 ? { [
394
- "WORD_NOT"
395
- /* WORD_NOT */
396
- ]: createTokenType("WORD_NOT", {
360
+ ...symbols.wordNots.length > 0 ? { [$T.WORD_NOT]: createTokenType($T.WORD_NOT, {
397
361
  matches: matchSymbol(symbols.wordNots),
398
- longerAlt: "VALUE_UNQUOTED"
399
- /* VALUE_UNQUOTED */
362
+ longerAlt: $T.VALUE_UNQUOTED
400
363
  }) } : {},
401
364
  ...!isBlank(opts.expandedPropertySeparator ?? "") ? {
402
- [
403
- "EXP_PROP_OP"
404
- /* EXP_PROP_OP */
405
- ]: createTokenType("EXP_PROP_OP", {
365
+ [$T.EXP_PROP_OP]: createTokenType($T.EXP_PROP_OP, {
406
366
  matches: (_c, input, start) => {
407
367
  for (const op of opts.expandedPropertySeparator) {
408
368
  const chars = input.slice(start, start + op.length);
@@ -413,10 +373,7 @@ class Lexer {
413
373
  })
414
374
  } : {},
415
375
  ...(((_a = opts.customPropertyOperators) == null ? void 0 : _a.length) ?? 0) > 0 && !symbols.customOpAlsoNegation ? {
416
- [
417
- "CUSTOM_PROP_OP"
418
- /* CUSTOM_PROP_OP */
419
- ]: createTokenType("CUSTOM_PROP_OP", {
376
+ [$T.CUSTOM_PROP_OP]: createTokenType($T.CUSTOM_PROP_OP, {
420
377
  matches: (_c, input, start) => {
421
378
  for (const op of opts.customPropertyOperators ?? []) {
422
379
  const chars = input.slice(start, start + op.length);
@@ -426,239 +383,80 @@ class Lexer {
426
383
  }
427
384
  })
428
385
  } : {},
429
- [
430
- "PAREN_L"
431
- /* PAREN_L */
432
- ]: createTokenType("PAREN_L", {
386
+ [$T.PAREN_L]: createTokenType($T.PAREN_L, {
433
387
  matches: (c) => c === "("
434
388
  }),
435
- [
436
- "PAREN_R"
437
- /* PAREN_R */
438
- ]: createTokenType("PAREN_R", {
389
+ [$T.PAREN_R]: createTokenType($T.PAREN_R, {
439
390
  matches: (c) => c === ")"
440
391
  }),
441
- [
442
- "BRACKET_L"
443
- /* BRACKET_L */
444
- ]: createTokenType("BRACKET_L", {
445
- push: "BRACKET_MAIN",
392
+ [$T.BRACKET_L]: createTokenType($T.BRACKET_L, {
393
+ push: MODE.BRACKET_MAIN,
446
394
  matches: (c) => c === "["
447
395
  }),
448
- [
449
- "BRACKET_R"
450
- /* BRACKET_R */
451
- ]: createTokenType("BRACKET_R", {
452
- push: "MAIN",
396
+ [$T.BRACKET_R]: createTokenType($T.BRACKET_R, {
397
+ push: MODE.MAIN,
453
398
  matches: (c) => c === "]"
454
399
  })
455
400
  };
456
401
  const $categories = {
457
- [
458
- "ANY"
459
- /* ANY */
460
- ]: createTokenCategoryType("ANY", [
461
- $[
462
- "REGEX_START"
463
- /* REGEX_START */
464
- ],
465
- $[
466
- "REGEX_END"
467
- /* REGEX_END */
468
- ],
469
- $[
470
- "QUOTE_SINGLE"
471
- /* QUOTE_SINGLE */
472
- ],
473
- $[
474
- "QUOTE_DOUBLE"
475
- /* QUOTE_DOUBLE */
476
- ],
477
- $[
478
- "QUOTE_BACKTICK"
479
- /* QUOTE_BACKTICK */
480
- ],
481
- $[
482
- "VALUE_NOT_SINGLE"
483
- /* VALUE_NOT_SINGLE */
484
- ],
485
- $[
486
- "VALUE_NOT_DOUBLE"
487
- /* VALUE_NOT_DOUBLE */
488
- ],
489
- $[
490
- "VALUE_NOT_BACKTICK"
491
- /* VALUE_NOT_BACKTICK */
492
- ],
493
- $[
494
- "VALUE_UNQUOTED"
495
- /* VALUE_UNQUOTED */
496
- ],
497
- $[
498
- "SYM_OR"
499
- /* SYM_OR */
500
- ],
501
- $[
502
- "SYM_AND"
503
- /* SYM_AND */
504
- ],
505
- $[
506
- "SYM_NOT"
507
- /* SYM_NOT */
508
- ],
509
- $[
510
- "WORD_OR"
511
- /* WORD_OR */
512
- ],
513
- $[
514
- "WORD_AND"
515
- /* WORD_AND */
516
- ],
517
- $[
518
- "WORD_NOT"
519
- /* WORD_NOT */
520
- ],
521
- $[
522
- "EXP_PROP_OP"
523
- /* EXP_PROP_OP */
524
- ],
525
- $[
526
- "CUSTOM_PROP_OP"
527
- /* CUSTOM_PROP_OP */
528
- ],
529
- $[
530
- "PAREN_L"
531
- /* PAREN_L */
532
- ],
533
- $[
534
- "PAREN_R"
535
- /* PAREN_R */
536
- ],
537
- $[
538
- "BRACKET_L"
539
- /* BRACKET_L */
540
- ],
541
- $[
542
- "BRACKET_R"
543
- /* BRACKET_R */
544
- ]
402
+ [$C.ANY]: createLexerCategoryToken($C.ANY, [
403
+ $[$T.REGEX_START],
404
+ $[$T.REGEX_END],
405
+ $[$T.QUOTE_SINGLE],
406
+ $[$T.QUOTE_DOUBLE],
407
+ $[$T.QUOTE_BACKTICK],
408
+ $[$T.VALUE_NOT_SINGLE],
409
+ $[$T.VALUE_NOT_DOUBLE],
410
+ $[$T.VALUE_NOT_BACKTICK],
411
+ $[$T.VALUE_UNQUOTED],
412
+ $[$T.SYM_OR],
413
+ $[$T.SYM_AND],
414
+ $[$T.SYM_NOT],
415
+ $[$T.WORD_OR],
416
+ $[$T.WORD_AND],
417
+ $[$T.WORD_NOT],
418
+ $[$T.EXP_PROP_OP],
419
+ $[$T.CUSTOM_PROP_OP],
420
+ $[$T.PAREN_L],
421
+ $[$T.PAREN_R],
422
+ $[$T.BRACKET_L],
423
+ $[$T.BRACKET_R]
545
424
  ]),
546
- [
547
- "VALUE"
548
- /* VALUE */
549
- ]: createTokenCategoryType("VALUE", [
550
- $[
551
- "VALUE_UNQUOTED"
552
- /* VALUE_UNQUOTED */
553
- ],
554
- $[
555
- "VALUE_NOT_SINGLE"
556
- /* VALUE_NOT_SINGLE */
557
- ],
558
- $[
559
- "VALUE_NOT_DOUBLE"
560
- /* VALUE_NOT_DOUBLE */
561
- ],
562
- $[
563
- "VALUE_NOT_BACKTICK"
564
- /* VALUE_NOT_BACKTICK */
565
- ]
425
+ [$C.VALUE]: createLexerCategoryToken($C.VALUE, [
426
+ $[$T.VALUE_UNQUOTED],
427
+ $[$T.VALUE_NOT_SINGLE],
428
+ $[$T.VALUE_NOT_DOUBLE],
429
+ $[$T.VALUE_NOT_BACKTICK]
566
430
  ]),
567
- [
568
- "VALUE_FOR_SINGLE"
569
- /* VALUE_FOR_SINGLE */
570
- ]: createTokenCategoryType("VALUE_FOR_SINGLE", [
571
- $[
572
- "VALUE_NOT_SINGLE"
573
- /* VALUE_NOT_SINGLE */
574
- ]
431
+ [$C.VALUE_FOR_SINGLE]: createLexerCategoryToken($C.VALUE_FOR_SINGLE, [
432
+ $[$T.VALUE_NOT_SINGLE]
575
433
  ]),
576
- [
577
- "VALUE_FOR_DOUBLE"
578
- /* VALUE_FOR_DOUBLE */
579
- ]: createTokenCategoryType("VALUE_FOR_DOUBLE", [
580
- $[
581
- "VALUE_NOT_DOUBLE"
582
- /* VALUE_NOT_DOUBLE */
583
- ]
434
+ [$C.VALUE_FOR_DOUBLE]: createLexerCategoryToken($C.VALUE_FOR_DOUBLE, [
435
+ $[$T.VALUE_NOT_DOUBLE]
584
436
  ]),
585
- [
586
- "VALUE_FOR_BACKTICK"
587
- /* VALUE_FOR_BACKTICK */
588
- ]: createTokenCategoryType("VALUE_FOR_BACKTICK", [
589
- $[
590
- "VALUE_NOT_BACKTICK"
591
- /* VALUE_NOT_BACKTICK */
592
- ]
437
+ [$C.VALUE_FOR_BACKTICK]: createLexerCategoryToken($C.VALUE_FOR_BACKTICK, [
438
+ $[$T.VALUE_NOT_BACKTICK]
593
439
  ]),
594
- [
595
- "REGEX_ANY"
596
- /* REGEX_ANY */
597
- ]: createTokenCategoryType("REGEX_ANY", [
598
- $[
599
- "REGEX_START"
600
- /* REGEX_START */
601
- ],
602
- $[
603
- "REGEX_END"
604
- /* REGEX_END */
605
- ]
440
+ [$C.REGEX_ANY]: createLexerCategoryToken($C.REGEX_ANY, [
441
+ $[$T.REGEX_START],
442
+ $[$T.REGEX_END]
606
443
  ]),
607
- [
608
- "QUOTE_ANY"
609
- /* QUOTE_ANY */
610
- ]: createTokenCategoryType("QUOTE_ANY", [
611
- $[
612
- "QUOTE_SINGLE"
613
- /* QUOTE_SINGLE */
614
- ],
615
- $[
616
- "QUOTE_DOUBLE"
617
- /* QUOTE_DOUBLE */
618
- ],
619
- $[
620
- "QUOTE_BACKTICK"
621
- /* QUOTE_BACKTICK */
622
- ]
444
+ [$C.QUOTE_ANY]: createLexerCategoryToken($C.QUOTE_ANY, [
445
+ $[$T.QUOTE_SINGLE],
446
+ $[$T.QUOTE_DOUBLE],
447
+ $[$T.QUOTE_BACKTICK]
623
448
  ]),
624
- [
625
- "OPERATOR_OR"
626
- /* OPERATOR_OR */
627
- ]: createTokenCategoryType("OPERATOR_OR", [
628
- $[
629
- "SYM_OR"
630
- /* SYM_OR */
631
- ],
632
- $[
633
- "WORD_OR"
634
- /* WORD_OR */
635
- ]
449
+ [$C.OPERATOR_OR]: createLexerCategoryToken($C.OPERATOR_OR, [
450
+ $[$T.SYM_OR],
451
+ $[$T.WORD_OR]
636
452
  ]),
637
- [
638
- "OPERATOR_AND"
639
- /* OPERATOR_AND */
640
- ]: createTokenCategoryType("OPERATOR_AND", [
641
- $[
642
- "SYM_AND"
643
- /* SYM_AND */
644
- ],
645
- $[
646
- "WORD_AND"
647
- /* WORD_AND */
648
- ]
453
+ [$C.OPERATOR_AND]: createLexerCategoryToken($C.OPERATOR_AND, [
454
+ $[$T.SYM_AND],
455
+ $[$T.WORD_AND]
649
456
  ]),
650
- [
651
- "OPERATOR_NOT"
652
- /* OPERATOR_NOT */
653
- ]: createTokenCategoryType("OPERATOR_NOT", [
654
- $[
655
- "SYM_NOT"
656
- /* SYM_NOT */
657
- ],
658
- $[
659
- "WORD_NOT"
660
- /* WORD_NOT */
661
- ]
457
+ [$C.OPERATOR_NOT]: createLexerCategoryToken($C.OPERATOR_NOT, [
458
+ $[$T.SYM_NOT],
459
+ $[$T.WORD_NOT]
662
460
  ])
663
461
  };
664
462
  return { $, $categories };
@@ -667,220 +465,76 @@ class Lexer {
667
465
  const opts = this.opts;
668
466
  const $ = this.$;
669
467
  const quotes = [
670
- $[
671
- "QUOTE_SINGLE"
672
- /* QUOTE_SINGLE */
673
- ],
674
- $[
675
- "QUOTE_DOUBLE"
676
- /* QUOTE_DOUBLE */
677
- ],
678
- $[
679
- "QUOTE_BACKTICK"
680
- /* QUOTE_BACKTICK */
681
- ]
468
+ $[$T.QUOTE_SINGLE],
469
+ $[$T.QUOTE_DOUBLE],
470
+ $[$T.QUOTE_BACKTICK]
682
471
  ];
683
- const parens = [$[
684
- "PAREN_L"
685
- /* PAREN_L */
686
- ], $[
687
- "PAREN_R"
688
- /* PAREN_R */
689
- ]];
472
+ const parens = [$[$T.PAREN_L], $[$T.PAREN_R]];
690
473
  const operators = [
691
- $[
692
- "EXP_PROP_OP"
693
- /* EXP_PROP_OP */
694
- ],
695
- $[
696
- "CUSTOM_PROP_OP"
697
- /* CUSTOM_PROP_OP */
698
- ],
699
- $[
700
- "SYM_OR"
701
- /* SYM_OR */
702
- ],
703
- $[
704
- "SYM_AND"
705
- /* SYM_AND */
706
- ],
707
- $[
708
- "SYM_NOT"
709
- /* SYM_NOT */
710
- ],
711
- $[
712
- "WORD_OR"
713
- /* WORD_OR */
714
- ],
715
- $[
716
- "WORD_AND"
717
- /* WORD_AND */
718
- ],
719
- $[
720
- "WORD_NOT"
721
- /* WORD_NOT */
722
- ]
474
+ $[$T.EXP_PROP_OP],
475
+ $[$T.CUSTOM_PROP_OP],
476
+ $[$T.SYM_OR],
477
+ $[$T.SYM_AND],
478
+ $[$T.SYM_NOT],
479
+ $[$T.WORD_OR],
480
+ $[$T.WORD_AND],
481
+ $[$T.WORD_NOT]
723
482
  ].filter((_) => _ !== void 0);
724
483
  return {
725
- [
726
- "MAIN"
727
- /* MAIN */
728
- ]: [
729
- $[
730
- "_"
731
- /* _ */
732
- ],
484
+ [MODE.MAIN]: [
485
+ $[$T._],
733
486
  ...parens,
734
- ...opts.arrayValues ? [$[
735
- "BRACKET_L"
736
- /* BRACKET_L */
737
- ]] : [],
487
+ ...opts.arrayValues ? [$[$T.BRACKET_L]] : [],
738
488
  // => MODE.BRACKET_MAIN
739
489
  ...operators,
740
490
  ...quotes,
741
491
  // => MODE.NOT_*
742
- ...opts.regexValues ? [$[
743
- "REGEX_START"
744
- /* REGEX_START */
745
- ]] : [],
492
+ ...opts.regexValues ? [$[$T.REGEX_START]] : [],
746
493
  // => MODE.NOT_REGEX
747
- $[
748
- "VALUE_UNQUOTED"
749
- /* VALUE_UNQUOTED */
750
- ]
494
+ $[$T.VALUE_UNQUOTED]
751
495
  ],
752
496
  // this is just MAIN by another name, but allows us to properly distinguish start/end quotes
753
497
  // // we can have situations like `a"` where the left quote is missing
754
498
  // // we want the quote to match a quote so that it pushes the state to main again, instead of shifting how everything is parsed
755
- [
756
- "MAYBE_QUOTE_ERROR"
757
- /* MAYBE_QUOTE_ERROR */
758
- ]: [
499
+ [MODE.MAYBE_QUOTE_ERROR]: [
759
500
  ...quotes,
760
- ...opts.regexValues ? [$[
761
- "REGEX_END"
762
- /* REGEX_END */
763
- ]] : []
501
+ ...opts.regexValues ? [$[$T.REGEX_END]] : []
764
502
  ],
765
503
  // all => MODE.MAIN
766
- [
767
- "NOT_SINGLE"
768
- /* NOT_SINGLE */
769
- ]: [$[
770
- "VALUE_NOT_SINGLE"
771
- /* VALUE_NOT_SINGLE */
772
- ], $[
773
- "QUOTE_SINGLE"
774
- /* QUOTE_SINGLE */
775
- ]],
776
- [
777
- "NOT_DOUBLE"
778
- /* NOT_DOUBLE */
779
- ]: [$[
780
- "VALUE_NOT_DOUBLE"
781
- /* VALUE_NOT_DOUBLE */
782
- ], $[
783
- "QUOTE_DOUBLE"
784
- /* QUOTE_DOUBLE */
785
- ]],
786
- [
787
- "NOT_BACKTICK"
788
- /* NOT_BACKTICK */
789
- ]: [$[
790
- "VALUE_NOT_BACKTICK"
791
- /* VALUE_NOT_BACKTICK */
792
- ], $[
793
- "QUOTE_BACKTICK"
794
- /* QUOTE_BACKTICK */
795
- ]],
504
+ [MODE.NOT_SINGLE]: [$[$T.VALUE_NOT_SINGLE], $[$T.QUOTE_SINGLE]],
505
+ [MODE.NOT_DOUBLE]: [$[$T.VALUE_NOT_DOUBLE], $[$T.QUOTE_DOUBLE]],
506
+ [MODE.NOT_BACKTICK]: [$[$T.VALUE_NOT_BACKTICK], $[$T.QUOTE_BACKTICK]],
796
507
  ...opts.regexValues ? {
797
- [
798
- "NOT_REGEX"
799
- /* NOT_REGEX */
800
- ]: [
801
- $[
802
- "VALUE_REGEX"
803
- /* VALUE_REGEX */
804
- ],
805
- $[
806
- "REGEX_END"
807
- /* REGEX_END */
808
- ]
508
+ [MODE.NOT_REGEX]: [
509
+ $[$T.VALUE_REGEX],
510
+ $[$T.REGEX_END]
809
511
  // regex is empty
810
512
  ],
811
513
  // => MODE.REGEX_END
812
- [
813
- "REGEX_END"
814
- /* REGEX_END */
815
- ]: [$[
816
- "REGEX_END"
817
- /* REGEX_END */
818
- ]]
514
+ [MODE.REGEX_END]: [$[$T.REGEX_END]]
819
515
  // => MODE.MAIN
820
516
  } : {},
821
517
  ...opts.arrayValues ? {
822
- [
823
- "BRACKET_MAIN"
824
- /* BRACKET_MAIN */
825
- ]: [
826
- $[
827
- "_"
828
- /* _ */
829
- ],
518
+ [MODE.BRACKET_MAIN]: [
519
+ $[$T._],
830
520
  ...quotes,
831
- $[
832
- "BRACKET_R"
833
- /* BRACKET_R */
834
- ],
521
+ $[$T.BRACKET_R],
835
522
  // => MODE.MAIN
836
- $[
837
- "VALUE_UNQUOTED"
838
- /* VALUE_UNQUOTED */
839
- ]
523
+ $[$T.VALUE_UNQUOTED]
840
524
  ],
841
525
  // 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 VALUE_UNQUOTED
842
- [
843
- "BRACKET_MAYBE_QUOTE_ERROR"
844
- /* BRACKET_MAYBE_QUOTE_ERROR */
845
- ]: [...quotes],
846
- [
847
- "BRACKET_NOT_SINGLE"
848
- /* BRACKET_NOT_SINGLE */
849
- ]: [
850
- $[
851
- "VALUE_NOT_SINGLE"
852
- /* VALUE_NOT_SINGLE */
853
- ],
854
- $[
855
- "QUOTE_SINGLE"
856
- /* QUOTE_SINGLE */
857
- ]
858
- ],
859
- [
860
- "BRACKET_NOT_DOUBLE"
861
- /* BRACKET_NOT_DOUBLE */
862
- ]: [
863
- $[
864
- "VALUE_NOT_DOUBLE"
865
- /* VALUE_NOT_DOUBLE */
866
- ],
867
- $[
868
- "QUOTE_DOUBLE"
869
- /* QUOTE_DOUBLE */
870
- ]
871
- ],
872
- [
873
- "BRACKET_NOT_BACKTICK"
874
- /* BRACKET_NOT_BACKTICK */
875
- ]: [
876
- $[
877
- "VALUE_NOT_BACKTICK"
878
- /* VALUE_NOT_BACKTICK */
879
- ],
880
- $[
881
- "QUOTE_BACKTICK"
882
- /* QUOTE_BACKTICK */
883
- ]
526
+ [MODE.BRACKET_MAYBE_QUOTE_ERROR]: [...quotes],
527
+ [MODE.BRACKET_NOT_SINGLE]: [
528
+ $[$T.VALUE_NOT_SINGLE],
529
+ $[$T.QUOTE_SINGLE]
530
+ ],
531
+ [MODE.BRACKET_NOT_DOUBLE]: [
532
+ $[$T.VALUE_NOT_DOUBLE],
533
+ $[$T.QUOTE_DOUBLE]
534
+ ],
535
+ [MODE.BRACKET_NOT_BACKTICK]: [
536
+ $[$T.VALUE_NOT_BACKTICK],
537
+ $[$T.QUOTE_BACKTICK]
884
538
  ]
885
539
  } : {}
886
540
  };
@@ -888,7 +542,7 @@ class Lexer {
888
542
  tokenize(input) {
889
543
  const branches = this.createModeBranches();
890
544
  const tokens = [];
891
- let mode = "MAIN";
545
+ let mode = MODE.MAIN;
892
546
  let index = 0;
893
547
  let c = input[index];
894
548
  let branch = branches[mode];