@witchcraft/expressit 0.2.2 → 0.3.1

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 (122) 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 +221 -574
  5. package/dist/Parser.d.ts +26 -26
  6. package/dist/Parser.d.ts.map +1 -1
  7. package/dist/Parser.js +106 -116
  8. package/dist/ast/builders/array.js +7 -8
  9. package/dist/ast/builders/condition.d.ts +1 -1
  10. package/dist/ast/builders/condition.d.ts.map +1 -1
  11. package/dist/ast/builders/condition.js +2 -1
  12. package/dist/ast/builders/delim.d.ts +2 -2
  13. package/dist/ast/builders/delim.d.ts.map +1 -1
  14. package/dist/ast/builders/error.d.ts +2 -2
  15. package/dist/ast/builders/error.d.ts.map +1 -1
  16. package/dist/ast/builders/expression.d.ts +2 -2
  17. package/dist/ast/builders/expression.d.ts.map +1 -1
  18. package/dist/ast/builders/expression.js +4 -8
  19. package/dist/ast/builders/group.d.ts +1 -1
  20. package/dist/ast/builders/group.d.ts.map +1 -1
  21. package/dist/ast/builders/group.js +8 -11
  22. package/dist/ast/builders/pos.d.ts +2 -2
  23. package/dist/ast/builders/pos.d.ts.map +1 -1
  24. package/dist/ast/builders/token.d.ts +2 -2
  25. package/dist/ast/builders/token.d.ts.map +1 -1
  26. package/dist/ast/builders/token.js +1 -1
  27. package/dist/ast/builders/type.d.ts +2 -2
  28. package/dist/ast/builders/type.d.ts.map +1 -1
  29. package/dist/ast/builders/variable.d.ts +3 -3
  30. package/dist/ast/builders/variable.d.ts.map +1 -1
  31. package/dist/ast/builders/variable.js +5 -6
  32. package/dist/ast/createConditionNode.d.ts +1 -1
  33. package/dist/ast/createConditionNode.d.ts.map +1 -1
  34. package/dist/ast/createConditionNode.js +1 -2
  35. package/dist/ast/createGroupNode.d.ts +1 -1
  36. package/dist/ast/createGroupNode.d.ts.map +1 -1
  37. package/dist/ast/createToken.d.ts +2 -2
  38. package/dist/ast/createToken.d.ts.map +1 -1
  39. package/dist/ast/createToken.js +2 -2
  40. package/dist/ast/error.d.ts +2 -2
  41. package/dist/ast/error.d.ts.map +1 -1
  42. package/dist/ast/error.js +1 -0
  43. package/dist/ast/handlers.d.ts +23 -23
  44. package/dist/ast/handlers.d.ts.map +1 -1
  45. package/dist/ast/handlers.js +23 -26
  46. package/dist/examples/ParserWithSqlSupport.d.ts +5 -5
  47. package/dist/examples/ParserWithSqlSupport.d.ts.map +1 -1
  48. package/dist/examples/ParserWithSqlSupport.js +22 -28
  49. package/dist/examples/ShortcutContextParser.js +2 -5
  50. package/dist/index.js +2 -2
  51. package/dist/internal/ExpressitError.d.ts +2 -2
  52. package/dist/internal/ExpressitError.d.ts.map +1 -1
  53. package/dist/internal/ExpressitError.js +7 -10
  54. package/dist/internal/checkParserOpts.js +21 -22
  55. package/dist/internal/escapeVariableOrPrefix.js +1 -1
  56. package/dist/internal/parseParserOptions.js +3 -4
  57. package/dist/package.json.js +2 -60
  58. package/dist/types/ast.d.ts +60 -58
  59. package/dist/types/ast.d.ts.map +1 -1
  60. package/dist/types/ast.js +26 -27
  61. package/dist/types/autocomplete.d.ts +23 -21
  62. package/dist/types/autocomplete.d.ts.map +1 -1
  63. package/dist/types/autocomplete.js +24 -21
  64. package/dist/types/errors.d.ts +12 -10
  65. package/dist/types/errors.d.ts.map +1 -1
  66. package/dist/types/errors.js +8 -7
  67. package/dist/types/index.js +2 -2
  68. package/dist/types/parser.d.ts +3 -3
  69. package/dist/types/parser.d.ts.map +1 -1
  70. package/dist/utils/extractTokens.js +4 -5
  71. package/dist/utils/generateParentsMap.js +7 -8
  72. package/dist/utils/getCursorInfo.js +5 -3
  73. package/dist/utils/getOppositeDelimiter.d.ts +2 -2
  74. package/dist/utils/getOppositeDelimiter.d.ts.map +1 -1
  75. package/dist/utils/getOppositeDelimiter.js +1 -1
  76. package/dist/utils/getSurroundingErrors.js +2 -3
  77. package/dist/utils/isBracket.js +1 -1
  78. package/dist/utils/isDelimiter.d.ts +2 -2
  79. package/dist/utils/isDelimiter.d.ts.map +1 -1
  80. package/dist/utils/isDelimiter.js +1 -1
  81. package/dist/utils/isNode.js +1 -1
  82. package/dist/utils/isParen.d.ts +2 -2
  83. package/dist/utils/isParen.d.ts.map +1 -1
  84. package/dist/utils/isParen.js +1 -1
  85. package/dist/utils/isQuote.d.ts +2 -2
  86. package/dist/utils/isQuote.d.ts.map +1 -1
  87. package/dist/utils/isQuote.js +1 -1
  88. package/dist/utils/isToken.js +1 -1
  89. package/dist/utils/prettyAst.js +10 -11
  90. package/package.json +19 -20
  91. package/src/Lexer.ts +100 -90
  92. package/src/Parser.ts +68 -68
  93. package/src/ast/builders/condition.ts +3 -3
  94. package/src/ast/builders/delim.ts +4 -4
  95. package/src/ast/builders/error.ts +3 -3
  96. package/src/ast/builders/expression.ts +4 -8
  97. package/src/ast/builders/group.ts +2 -4
  98. package/src/ast/builders/pos.ts +3 -3
  99. package/src/ast/builders/token.ts +3 -3
  100. package/src/ast/builders/type.ts +2 -2
  101. package/src/ast/builders/variable.ts +5 -5
  102. package/src/ast/createConditionNode.ts +2 -2
  103. package/src/ast/createGroupNode.ts +4 -4
  104. package/src/ast/createToken.ts +6 -6
  105. package/src/ast/error.ts +2 -2
  106. package/src/ast/handlers.ts +20 -20
  107. package/src/examples/ParserWithSqlSupport.ts +12 -6
  108. package/src/internal/ExpressitError.ts +6 -6
  109. package/src/internal/checkParserOpts.ts +13 -13
  110. package/src/internal/escapeVariableOrPrefix.ts +1 -1
  111. package/src/types/ast.ts +101 -96
  112. package/src/types/autocomplete.ts +26 -22
  113. package/src/types/errors.ts +18 -13
  114. package/src/types/parser.ts +3 -3
  115. package/src/utils/extractTokens.ts +1 -1
  116. package/src/utils/getCursorInfo.ts +2 -2
  117. package/src/utils/getOppositeDelimiter.ts +3 -3
  118. package/src/utils/getSurroundingErrors.ts +4 -4
  119. package/src/utils/isDelimiter.ts +3 -3
  120. package/src/utils/isParen.ts +2 -2
  121. package/src/utils/isQuote.ts +2 -2
  122. package/src/utils/prettyAst.ts +3 -3
package/dist/Lexer.js CHANGED
@@ -1,52 +1,64 @@
1
- var __defProp = Object.defineProperty;
2
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
- var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
- import { isBlank } from "@alanscodelog/utils/isBlank.js";
5
- import { pushIfNotIn } from "@alanscodelog/utils/pushIfNotIn.js";
1
+ import { enumFromArray } from "@alanscodelog/utils/enumFromArray";
2
+ import { isBlank } from "@alanscodelog/utils/isBlank";
3
+ import { pushIfNotIn } from "@alanscodelog/utils/pushIfNotIn";
6
4
  import { checkParserOpts } from "./internal/checkParserOpts.js";
7
5
  import { parseParserOptions } from "./internal/parseParserOptions.js";
8
6
  const regexFlags = /^[a-zA-Z]+/;
7
+ const MODE = enumFromArray([
8
+ "MAIN",
9
+ "MAYBE_QUOTE_ERROR",
10
+ "NOT_SINGLE",
11
+ "NOT_DOUBLE",
12
+ "NOT_BACKTICK",
13
+ "NOT_REGEX",
14
+ "REGEX_END",
15
+ "BRACKET_MAIN",
16
+ "BRACKET_MAYBE_QUOTE_ERROR",
17
+ "BRACKET_NOT_SINGLE",
18
+ "BRACKET_NOT_DOUBLE",
19
+ "BRACKET_NOT_BACKTICK",
20
+ "BRACKET_NOT_REGEX",
21
+ "BRACKET_REGEX_END"
22
+ ]);
9
23
  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) {
24
+ const $T = enumFromArray([
25
+ "_",
26
+ "VALUE_UNQUOTED",
27
+ "VALUE_REGEX",
28
+ "VALUE_NOT_SINGLE",
29
+ "VALUE_NOT_DOUBLE",
30
+ "VALUE_NOT_BACKTICK",
31
+ "SYM_OR",
32
+ "SYM_AND",
33
+ "SYM_NOT",
34
+ "WORD_OR",
35
+ "WORD_AND",
36
+ "WORD_NOT",
37
+ "REGEX_START",
38
+ "REGEX_END",
39
+ "EXP_PROP_OP",
40
+ "CUSTOM_PROP_OP",
41
+ "PAREN_L",
42
+ "PAREN_R",
43
+ "BRACKET_L",
44
+ "BRACKET_R",
45
+ "QUOTE_SINGLE",
46
+ "QUOTE_DOUBLE",
47
+ "QUOTE_BACKTICK"
48
+ ]);
49
+ const $C = enumFromArray([
50
+ "ANY",
51
+ "QUOTE_ANY",
52
+ "REGEX_ANY",
53
+ "VALUE_FOR_SINGLE",
54
+ "VALUE_FOR_DOUBLE",
55
+ "VALUE_FOR_BACKTICK",
56
+ "OPERATOR_OR",
57
+ "OPERATOR_AND",
58
+ "OPERATOR_NOT",
59
+ "VALUE"
60
+ ]);
61
+ function createLexerCategoryToken(type, entries) {
50
62
  return {
51
63
  type,
52
64
  isCategory: true,
@@ -89,12 +101,12 @@ function matchSymbol(symbols) {
89
101
  };
90
102
  }
91
103
  class Lexer {
104
+ symbols;
105
+ $;
106
+ $categories;
107
+ branches;
108
+ opts;
92
109
  constructor(opts = {}) {
93
- __publicField(this, "symbols");
94
- __publicField(this, "$");
95
- __publicField(this, "$categories");
96
- __publicField(this, "branches");
97
- __publicField(this, "opts");
98
110
  this.opts = parseParserOptions(opts);
99
111
  checkParserOpts(this.opts);
100
112
  this.symbols = this.calculateSymbolInfo();
@@ -104,7 +116,6 @@ class Lexer {
104
116
  this.branches = this.createModeBranches();
105
117
  }
106
118
  calculateSymbolInfo() {
107
- var _a;
108
119
  const opts = this.opts;
109
120
  const symOrs = opts.keywords.or.filter((_) => _.isSymbol).map((_) => _.value);
110
121
  const symAnds = opts.keywords.and.filter((_) => _.isSymbol).map((_) => _.value);
@@ -131,7 +142,7 @@ class Lexer {
131
142
  wordNots: wordNots.sort((a, b) => b.length - a.length),
132
143
  all: syms.sort((a, b) => b.length - a.length)
133
144
  };
134
- const expandedSepAlsoCustom = ((_a = opts.customPropertyOperators) == null ? void 0 : _a.includes(opts.expandedPropertySeparator)) ?? false;
145
+ const expandedSepAlsoCustom = opts.customPropertyOperators?.includes(opts.expandedPropertySeparator) ?? false;
135
146
  let customOpAlsoNegation = false;
136
147
  if (symbols.symNots.length > 0) {
137
148
  for (const op of opts.customPropertyOperators ?? []) {
@@ -147,14 +158,10 @@ class Lexer {
147
158
  }
148
159
  // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
149
160
  createTokens() {
150
- var _a;
151
161
  const opts = this.opts;
152
162
  const symbols = this.symbols;
153
163
  const $ = {
154
- [
155
- "_"
156
- /* _ */
157
- ]: createTokenType("_", {
164
+ [$T._]: createTokenType($T._, {
158
165
  skip: true,
159
166
  matches: (c, input, start) => {
160
167
  let end = start;
@@ -166,18 +173,12 @@ class Lexer {
166
173
  return input.slice(start, end);
167
174
  }
168
175
  }),
169
- [
170
- "REGEX_START"
171
- /* REGEX_START */
172
- ]: createTokenType("REGEX_START", {
173
- push: "NOT_REGEX",
176
+ [$T.REGEX_START]: createTokenType($T.REGEX_START, {
177
+ push: MODE.NOT_REGEX,
174
178
  matches: (c) => c === "/"
175
179
  }),
176
- [
177
- "REGEX_END"
178
- /* REGEX_END */
179
- ]: createTokenType("REGEX_END", {
180
- push: "MAIN",
180
+ [$T.REGEX_END]: createTokenType($T.REGEX_END, {
181
+ push: MODE.MAIN,
181
182
  matches: (c, input, start) => {
182
183
  let end = start;
183
184
  if (c === "/") {
@@ -191,11 +192,8 @@ class Lexer {
191
192
  } else return false;
192
193
  }
193
194
  }),
194
- [
195
- "VALUE_REGEX"
196
- /* VALUE_REGEX */
197
- ]: createTokenType("VALUE_REGEX", {
198
- push: "REGEX_END",
195
+ [$T.VALUE_REGEX]: createTokenType($T.VALUE_REGEX, {
196
+ push: MODE.REGEX_END,
199
197
  matches: (c, input, start) => {
200
198
  let end = start;
201
199
  let inGroup = 0;
@@ -210,7 +208,7 @@ class Lexer {
210
208
  prevEscaped = false;
211
209
  }
212
210
  } else {
213
- prevEscaped && (prevEscaped = false);
211
+ prevEscaped &&= false;
214
212
  }
215
213
  end++;
216
214
  c = input[end];
@@ -219,10 +217,7 @@ class Lexer {
219
217
  return input.slice(start, end);
220
218
  }
221
219
  }),
222
- [
223
- "QUOTE_SINGLE"
224
- /* QUOTE_SINGLE */
225
- ]: createTokenType("QUOTE_SINGLE", {
220
+ [$T.QUOTE_SINGLE]: createTokenType($T.QUOTE_SINGLE, {
226
221
  push: (mode, tokens) => {
227
222
  const previous = tokens[tokens.length - 2];
228
223
  if (
@@ -231,93 +226,75 @@ class Lexer {
231
226
  * Go back to main instead of searching for the quoted value
232
227
  * Otherwise input like 'a'b'c' will trap us in a MAIN <=> NOT_SINGLE loop.
233
228
  */
234
- (previous == null ? void 0 : previous.type) === "VALUE_NOT_SINGLE" || (previous == null ? void 0 : previous.type) === "VALUE_UNQUOTED"
229
+ previous?.type === $T.VALUE_NOT_SINGLE || previous?.type === $T.VALUE_UNQUOTED
235
230
  ) {
236
- if (mode.startsWith(BRACKET_PREFIX)) return "BRACKET_MAIN";
237
- return "MAIN";
231
+ if (mode.startsWith(BRACKET_PREFIX)) return MODE.BRACKET_MAIN;
232
+ return MODE.MAIN;
238
233
  }
239
234
  switch (mode) {
240
- case "BRACKET_MAIN":
241
- return "BRACKET_NOT_SINGLE";
242
- case "MAIN":
243
- return "NOT_SINGLE";
235
+ case MODE.BRACKET_MAIN:
236
+ return MODE.BRACKET_NOT_SINGLE;
237
+ case MODE.MAIN:
238
+ return MODE.NOT_SINGLE;
244
239
  default:
245
- if (mode.startsWith(BRACKET_PREFIX)) return "BRACKET_MAIN";
246
- return "MAIN";
240
+ if (mode.startsWith(BRACKET_PREFIX)) return MODE.BRACKET_MAIN;
241
+ return MODE.MAIN;
247
242
  }
248
243
  },
249
244
  matches: (c) => c === "'"
250
245
  }),
251
- [
252
- "QUOTE_DOUBLE"
253
- /* QUOTE_DOUBLE */
254
- ]: createTokenType("QUOTE_DOUBLE", {
246
+ [$T.QUOTE_DOUBLE]: createTokenType($T.QUOTE_DOUBLE, {
255
247
  push: (mode, tokens) => {
256
248
  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";
249
+ if (previous?.type === $T.VALUE_NOT_DOUBLE || previous?.type === $T.VALUE_UNQUOTED) {
250
+ if (mode.startsWith(BRACKET_PREFIX)) return MODE.BRACKET_MAIN;
251
+ return MODE.MAIN;
260
252
  }
261
253
  switch (mode) {
262
- case "BRACKET_MAIN":
263
- return "BRACKET_NOT_DOUBLE";
264
- case "MAIN":
265
- return "NOT_DOUBLE";
254
+ case MODE.BRACKET_MAIN:
255
+ return MODE.BRACKET_NOT_DOUBLE;
256
+ case MODE.MAIN:
257
+ return MODE.NOT_DOUBLE;
266
258
  default:
267
- if (mode.startsWith(BRACKET_PREFIX)) return "BRACKET_MAIN";
268
- return "MAIN";
259
+ if (mode.startsWith(BRACKET_PREFIX)) return MODE.BRACKET_MAIN;
260
+ return MODE.MAIN;
269
261
  }
270
262
  },
271
263
  matches: (c) => c === '"'
272
264
  }),
273
- [
274
- "QUOTE_BACKTICK"
275
- /* QUOTE_BACKTICK */
276
- ]: createTokenType("QUOTE_BACKTICK", {
265
+ [$T.QUOTE_BACKTICK]: createTokenType($T.QUOTE_BACKTICK, {
277
266
  push: (mode, tokens) => {
278
267
  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";
268
+ if (previous?.type === $T.VALUE_NOT_BACKTICK || previous?.type === $T.VALUE_UNQUOTED) {
269
+ if (mode.startsWith(BRACKET_PREFIX)) return MODE.BRACKET_MAIN;
270
+ return MODE.MAIN;
282
271
  }
283
272
  switch (mode) {
284
- case "BRACKET_MAIN":
285
- return "BRACKET_NOT_BACKTICK";
286
- case "MAIN":
287
- return "NOT_BACKTICK";
273
+ case MODE.BRACKET_MAIN:
274
+ return MODE.BRACKET_NOT_BACKTICK;
275
+ case MODE.MAIN:
276
+ return MODE.NOT_BACKTICK;
288
277
  default:
289
- if (mode.startsWith(BRACKET_PREFIX)) return "BRACKET_MAIN";
290
- return "MAIN";
278
+ if (mode.startsWith(BRACKET_PREFIX)) return MODE.BRACKET_MAIN;
279
+ return MODE.MAIN;
291
280
  }
292
281
  },
293
282
  matches: (c) => c === "`"
294
283
  }),
295
- [
296
- "VALUE_NOT_SINGLE"
297
- /* VALUE_NOT_SINGLE */
298
- ]: createTokenType("VALUE_NOT_SINGLE", {
299
- push: (mode) => mode.startsWith(BRACKET_PREFIX) ? "BRACKET_MAIN" : "MAIN",
284
+ [$T.VALUE_NOT_SINGLE]: createTokenType($T.VALUE_NOT_SINGLE, {
285
+ push: (mode) => mode.startsWith(BRACKET_PREFIX) ? MODE.BRACKET_MAIN : MODE.MAIN,
300
286
  matches: matchWhileCharNotEqualToUnescaped("'")
301
287
  }),
302
- [
303
- "VALUE_NOT_DOUBLE"
304
- /* VALUE_NOT_DOUBLE */
305
- ]: createTokenType("VALUE_NOT_DOUBLE", {
306
- push: (mode) => mode.startsWith(BRACKET_PREFIX) ? "BRACKET_MAIN" : "MAIN",
288
+ [$T.VALUE_NOT_DOUBLE]: createTokenType($T.VALUE_NOT_DOUBLE, {
289
+ push: (mode) => mode.startsWith(BRACKET_PREFIX) ? MODE.BRACKET_MAIN : MODE.MAIN,
307
290
  matches: matchWhileCharNotEqualToUnescaped('"')
308
291
  }),
309
- [
310
- "VALUE_NOT_BACKTICK"
311
- /* VALUE_NOT_BACKTICK */
312
- ]: createTokenType("VALUE_NOT_BACKTICK", {
313
- push: (mode) => mode.startsWith(BRACKET_PREFIX) ? "BRACKET_MAIN" : "MAIN",
292
+ [$T.VALUE_NOT_BACKTICK]: createTokenType($T.VALUE_NOT_BACKTICK, {
293
+ push: (mode) => mode.startsWith(BRACKET_PREFIX) ? MODE.BRACKET_MAIN : MODE.MAIN,
314
294
  matches: matchWhileCharNotEqualToUnescaped("`")
315
295
  }),
316
- [
317
- "VALUE_UNQUOTED"
318
- /* VALUE_UNQUOTED */
319
- ]: createTokenType("VALUE_UNQUOTED", {
320
- push: (mode) => mode.startsWith(BRACKET_PREFIX) ? "BRACKET_MAIN" : "MAIN",
296
+ [$T.VALUE_UNQUOTED]: createTokenType($T.VALUE_UNQUOTED, {
297
+ push: (mode) => mode.startsWith(BRACKET_PREFIX) ? MODE.BRACKET_MAIN : MODE.MAIN,
321
298
  // manual version of pattern: /(\\[\s\S]|(${syms.length > 0 ? `(?!(${syms.join("|")}))` : ``}[^ \t()'"`\\]))+/,
322
299
  matches: (c, input, start, mode) => {
323
300
  let end = start;
@@ -327,7 +304,7 @@ class Lexer {
327
304
  c = input[end];
328
305
  continue;
329
306
  }
330
- if (mode === "MAIN") {
307
+ if (mode === MODE.MAIN) {
331
308
  let found = false;
332
309
  for (const sym of symbols.all) {
333
310
  const textSlice = input.slice(end, end + sym.length);
@@ -338,7 +315,7 @@ class Lexer {
338
315
  }
339
316
  if (found) break;
340
317
  }
341
- if (c === " " || c === " " || c === "(" || c === ")" || c === "'" || c === '"' || c === "`" || c === "\\" || mode === "BRACKET_MAIN" && c === "]") {
318
+ if (c === " " || c === " " || c === "(" || c === ")" || c === "'" || c === '"' || c === "`" || c === "\\" || mode === MODE.BRACKET_MAIN && c === "]") {
342
319
  break;
343
320
  }
344
321
  end++;
@@ -349,62 +326,38 @@ class Lexer {
349
326
  }
350
327
  }),
351
328
  ...symbols.symOrs.length > 0 ? {
352
- [
353
- "SYM_OR"
354
- /* SYM_OR */
355
- ]: createTokenType("SYM_OR", {
329
+ [$T.SYM_OR]: createTokenType($T.SYM_OR, {
356
330
  matches: matchSymbol(symbols.symOrs)
357
331
  })
358
332
  } : {},
359
333
  ...symbols.symAnds.length > 0 ? {
360
- [
361
- "SYM_AND"
362
- /* SYM_AND */
363
- ]: createTokenType("SYM_AND", {
334
+ [$T.SYM_AND]: createTokenType($T.SYM_AND, {
364
335
  matches: matchSymbol(symbols.symAnds)
365
336
  })
366
337
  } : {},
367
338
  ...symbols.symNots.length > 0 ? {
368
- [
369
- "SYM_NOT"
370
- /* SYM_NOT */
371
- ]: createTokenType("SYM_NOT", {
339
+ [$T.SYM_NOT]: createTokenType($T.SYM_NOT, {
372
340
  matches: matchSymbol(symbols.symNots)
373
341
  })
374
342
  } : {},
375
343
  ...symbols.wordOrs.length > 0 ? {
376
- [
377
- "WORD_OR"
378
- /* WORD_OR */
379
- ]: createTokenType("WORD_OR", {
344
+ [$T.WORD_OR]: createTokenType($T.WORD_OR, {
380
345
  matches: matchSymbol(symbols.wordOrs),
381
- longerAlt: "VALUE_UNQUOTED"
382
- /* VALUE_UNQUOTED */
346
+ longerAlt: $T.VALUE_UNQUOTED
383
347
  })
384
348
  } : {},
385
349
  ...symbols.wordAnds.length > 0 ? {
386
- [
387
- "WORD_AND"
388
- /* WORD_AND */
389
- ]: createTokenType("WORD_AND", {
350
+ [$T.WORD_AND]: createTokenType($T.WORD_AND, {
390
351
  matches: matchSymbol(symbols.wordAnds),
391
- longerAlt: "VALUE_UNQUOTED"
392
- /* VALUE_UNQUOTED */
352
+ longerAlt: $T.VALUE_UNQUOTED
393
353
  })
394
354
  } : {},
395
- ...symbols.wordNots.length > 0 ? { [
396
- "WORD_NOT"
397
- /* WORD_NOT */
398
- ]: createTokenType("WORD_NOT", {
355
+ ...symbols.wordNots.length > 0 ? { [$T.WORD_NOT]: createTokenType($T.WORD_NOT, {
399
356
  matches: matchSymbol(symbols.wordNots),
400
- longerAlt: "VALUE_UNQUOTED"
401
- /* VALUE_UNQUOTED */
357
+ longerAlt: $T.VALUE_UNQUOTED
402
358
  }) } : {},
403
359
  ...!isBlank(opts.expandedPropertySeparator ?? "") ? {
404
- [
405
- "EXP_PROP_OP"
406
- /* EXP_PROP_OP */
407
- ]: createTokenType("EXP_PROP_OP", {
360
+ [$T.EXP_PROP_OP]: createTokenType($T.EXP_PROP_OP, {
408
361
  matches: (_c, input, start) => {
409
362
  for (const op of opts.expandedPropertySeparator) {
410
363
  const chars = input.slice(start, start + op.length);
@@ -414,11 +367,8 @@ class Lexer {
414
367
  }
415
368
  })
416
369
  } : {},
417
- ...(((_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", {
370
+ ...(opts.customPropertyOperators?.length ?? 0) > 0 && !symbols.customOpAlsoNegation ? {
371
+ [$T.CUSTOM_PROP_OP]: createTokenType($T.CUSTOM_PROP_OP, {
422
372
  matches: (_c, input, start) => {
423
373
  for (const op of opts.customPropertyOperators ?? []) {
424
374
  const chars = input.slice(start, start + op.length);
@@ -428,239 +378,80 @@ class Lexer {
428
378
  }
429
379
  })
430
380
  } : {},
431
- [
432
- "PAREN_L"
433
- /* PAREN_L */
434
- ]: createTokenType("PAREN_L", {
381
+ [$T.PAREN_L]: createTokenType($T.PAREN_L, {
435
382
  matches: (c) => c === "("
436
383
  }),
437
- [
438
- "PAREN_R"
439
- /* PAREN_R */
440
- ]: createTokenType("PAREN_R", {
384
+ [$T.PAREN_R]: createTokenType($T.PAREN_R, {
441
385
  matches: (c) => c === ")"
442
386
  }),
443
- [
444
- "BRACKET_L"
445
- /* BRACKET_L */
446
- ]: createTokenType("BRACKET_L", {
447
- push: "BRACKET_MAIN",
387
+ [$T.BRACKET_L]: createTokenType($T.BRACKET_L, {
388
+ push: MODE.BRACKET_MAIN,
448
389
  matches: (c) => c === "["
449
390
  }),
450
- [
451
- "BRACKET_R"
452
- /* BRACKET_R */
453
- ]: createTokenType("BRACKET_R", {
454
- push: "MAIN",
391
+ [$T.BRACKET_R]: createTokenType($T.BRACKET_R, {
392
+ push: MODE.MAIN,
455
393
  matches: (c) => c === "]"
456
394
  })
457
395
  };
458
396
  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
- ]
397
+ [$C.ANY]: createLexerCategoryToken($C.ANY, [
398
+ $[$T.REGEX_START],
399
+ $[$T.REGEX_END],
400
+ $[$T.QUOTE_SINGLE],
401
+ $[$T.QUOTE_DOUBLE],
402
+ $[$T.QUOTE_BACKTICK],
403
+ $[$T.VALUE_NOT_SINGLE],
404
+ $[$T.VALUE_NOT_DOUBLE],
405
+ $[$T.VALUE_NOT_BACKTICK],
406
+ $[$T.VALUE_UNQUOTED],
407
+ $[$T.SYM_OR],
408
+ $[$T.SYM_AND],
409
+ $[$T.SYM_NOT],
410
+ $[$T.WORD_OR],
411
+ $[$T.WORD_AND],
412
+ $[$T.WORD_NOT],
413
+ $[$T.EXP_PROP_OP],
414
+ $[$T.CUSTOM_PROP_OP],
415
+ $[$T.PAREN_L],
416
+ $[$T.PAREN_R],
417
+ $[$T.BRACKET_L],
418
+ $[$T.BRACKET_R]
547
419
  ]),
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
- ]
420
+ [$C.VALUE]: createLexerCategoryToken($C.VALUE, [
421
+ $[$T.VALUE_UNQUOTED],
422
+ $[$T.VALUE_NOT_SINGLE],
423
+ $[$T.VALUE_NOT_DOUBLE],
424
+ $[$T.VALUE_NOT_BACKTICK]
568
425
  ]),
569
- [
570
- "VALUE_FOR_SINGLE"
571
- /* VALUE_FOR_SINGLE */
572
- ]: createTokenCategoryType("VALUE_FOR_SINGLE", [
573
- $[
574
- "VALUE_NOT_SINGLE"
575
- /* VALUE_NOT_SINGLE */
576
- ]
426
+ [$C.VALUE_FOR_SINGLE]: createLexerCategoryToken($C.VALUE_FOR_SINGLE, [
427
+ $[$T.VALUE_NOT_SINGLE]
577
428
  ]),
578
- [
579
- "VALUE_FOR_DOUBLE"
580
- /* VALUE_FOR_DOUBLE */
581
- ]: createTokenCategoryType("VALUE_FOR_DOUBLE", [
582
- $[
583
- "VALUE_NOT_DOUBLE"
584
- /* VALUE_NOT_DOUBLE */
585
- ]
429
+ [$C.VALUE_FOR_DOUBLE]: createLexerCategoryToken($C.VALUE_FOR_DOUBLE, [
430
+ $[$T.VALUE_NOT_DOUBLE]
586
431
  ]),
587
- [
588
- "VALUE_FOR_BACKTICK"
589
- /* VALUE_FOR_BACKTICK */
590
- ]: createTokenCategoryType("VALUE_FOR_BACKTICK", [
591
- $[
592
- "VALUE_NOT_BACKTICK"
593
- /* VALUE_NOT_BACKTICK */
594
- ]
432
+ [$C.VALUE_FOR_BACKTICK]: createLexerCategoryToken($C.VALUE_FOR_BACKTICK, [
433
+ $[$T.VALUE_NOT_BACKTICK]
595
434
  ]),
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
- ]
435
+ [$C.REGEX_ANY]: createLexerCategoryToken($C.REGEX_ANY, [
436
+ $[$T.REGEX_START],
437
+ $[$T.REGEX_END]
608
438
  ]),
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
- ]
439
+ [$C.QUOTE_ANY]: createLexerCategoryToken($C.QUOTE_ANY, [
440
+ $[$T.QUOTE_SINGLE],
441
+ $[$T.QUOTE_DOUBLE],
442
+ $[$T.QUOTE_BACKTICK]
625
443
  ]),
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
- ]
444
+ [$C.OPERATOR_OR]: createLexerCategoryToken($C.OPERATOR_OR, [
445
+ $[$T.SYM_OR],
446
+ $[$T.WORD_OR]
638
447
  ]),
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
- ]
448
+ [$C.OPERATOR_AND]: createLexerCategoryToken($C.OPERATOR_AND, [
449
+ $[$T.SYM_AND],
450
+ $[$T.WORD_AND]
651
451
  ]),
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
- ]
452
+ [$C.OPERATOR_NOT]: createLexerCategoryToken($C.OPERATOR_NOT, [
453
+ $[$T.SYM_NOT],
454
+ $[$T.WORD_NOT]
664
455
  ])
665
456
  };
666
457
  return { $, $categories };
@@ -669,220 +460,76 @@ class Lexer {
669
460
  const opts = this.opts;
670
461
  const $ = this.$;
671
462
  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
- ]
463
+ $[$T.QUOTE_SINGLE],
464
+ $[$T.QUOTE_DOUBLE],
465
+ $[$T.QUOTE_BACKTICK]
684
466
  ];
685
- const parens = [$[
686
- "PAREN_L"
687
- /* PAREN_L */
688
- ], $[
689
- "PAREN_R"
690
- /* PAREN_R */
691
- ]];
467
+ const parens = [$[$T.PAREN_L], $[$T.PAREN_R]];
692
468
  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
- ]
469
+ $[$T.EXP_PROP_OP],
470
+ $[$T.CUSTOM_PROP_OP],
471
+ $[$T.SYM_OR],
472
+ $[$T.SYM_AND],
473
+ $[$T.SYM_NOT],
474
+ $[$T.WORD_OR],
475
+ $[$T.WORD_AND],
476
+ $[$T.WORD_NOT]
725
477
  ].filter((_) => _ !== void 0);
726
478
  return {
727
- [
728
- "MAIN"
729
- /* MAIN */
730
- ]: [
731
- $[
732
- "_"
733
- /* _ */
734
- ],
479
+ [MODE.MAIN]: [
480
+ $[$T._],
735
481
  ...parens,
736
- ...opts.arrayValues ? [$[
737
- "BRACKET_L"
738
- /* BRACKET_L */
739
- ]] : [],
482
+ ...opts.arrayValues ? [$[$T.BRACKET_L]] : [],
740
483
  // => MODE.BRACKET_MAIN
741
484
  ...operators,
742
485
  ...quotes,
743
486
  // => MODE.NOT_*
744
- ...opts.regexValues ? [$[
745
- "REGEX_START"
746
- /* REGEX_START */
747
- ]] : [],
487
+ ...opts.regexValues ? [$[$T.REGEX_START]] : [],
748
488
  // => MODE.NOT_REGEX
749
- $[
750
- "VALUE_UNQUOTED"
751
- /* VALUE_UNQUOTED */
752
- ]
489
+ $[$T.VALUE_UNQUOTED]
753
490
  ],
754
491
  // this is just MAIN by another name, but allows us to properly distinguish start/end quotes
755
492
  // // we can have situations like `a"` where the left quote is missing
756
493
  // // 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
- ]: [
494
+ [MODE.MAYBE_QUOTE_ERROR]: [
761
495
  ...quotes,
762
- ...opts.regexValues ? [$[
763
- "REGEX_END"
764
- /* REGEX_END */
765
- ]] : []
496
+ ...opts.regexValues ? [$[$T.REGEX_END]] : []
766
497
  ],
767
498
  // 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
- ]],
499
+ [MODE.NOT_SINGLE]: [$[$T.VALUE_NOT_SINGLE], $[$T.QUOTE_SINGLE]],
500
+ [MODE.NOT_DOUBLE]: [$[$T.VALUE_NOT_DOUBLE], $[$T.QUOTE_DOUBLE]],
501
+ [MODE.NOT_BACKTICK]: [$[$T.VALUE_NOT_BACKTICK], $[$T.QUOTE_BACKTICK]],
798
502
  ...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
- ]
503
+ [MODE.NOT_REGEX]: [
504
+ $[$T.VALUE_REGEX],
505
+ $[$T.REGEX_END]
811
506
  // regex is empty
812
507
  ],
813
508
  // => MODE.REGEX_END
814
- [
815
- "REGEX_END"
816
- /* REGEX_END */
817
- ]: [$[
818
- "REGEX_END"
819
- /* REGEX_END */
820
- ]]
509
+ [MODE.REGEX_END]: [$[$T.REGEX_END]]
821
510
  // => MODE.MAIN
822
511
  } : {},
823
512
  ...opts.arrayValues ? {
824
- [
825
- "BRACKET_MAIN"
826
- /* BRACKET_MAIN */
827
- ]: [
828
- $[
829
- "_"
830
- /* _ */
831
- ],
513
+ [MODE.BRACKET_MAIN]: [
514
+ $[$T._],
832
515
  ...quotes,
833
- $[
834
- "BRACKET_R"
835
- /* BRACKET_R */
836
- ],
516
+ $[$T.BRACKET_R],
837
517
  // => MODE.MAIN
838
- $[
839
- "VALUE_UNQUOTED"
840
- /* VALUE_UNQUOTED */
841
- ]
518
+ $[$T.VALUE_UNQUOTED]
842
519
  ],
843
520
  // 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
- ]
521
+ [MODE.BRACKET_MAYBE_QUOTE_ERROR]: [...quotes],
522
+ [MODE.BRACKET_NOT_SINGLE]: [
523
+ $[$T.VALUE_NOT_SINGLE],
524
+ $[$T.QUOTE_SINGLE]
525
+ ],
526
+ [MODE.BRACKET_NOT_DOUBLE]: [
527
+ $[$T.VALUE_NOT_DOUBLE],
528
+ $[$T.QUOTE_DOUBLE]
529
+ ],
530
+ [MODE.BRACKET_NOT_BACKTICK]: [
531
+ $[$T.VALUE_NOT_BACKTICK],
532
+ $[$T.QUOTE_BACKTICK]
886
533
  ]
887
534
  } : {}
888
535
  };
@@ -890,7 +537,7 @@ class Lexer {
890
537
  tokenize(input) {
891
538
  const branches = this.createModeBranches();
892
539
  const tokens = [];
893
- let mode = "MAIN";
540
+ let mode = MODE.MAIN;
894
541
  let index = 0;
895
542
  let c = input[index];
896
543
  let branch = branches[mode];