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