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