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