@nymphjs/query-parser 1.0.0-beta.11 → 1.0.0-beta.110

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.
@@ -1,10 +1,5 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const splitn_1 = __importDefault(require("@sciactive/splitn"));
7
- function queryParser({ query, entityClass, defaultFields = ['name'], qrefMap = {}, bareHandler = (input, _class, defaultFields = ['name']) => {
1
+ import { splitn } from '@sciactive/splitn';
2
+ export default function queryParser({ query, entityClass, defaultFields = ['name'], qrefMap = {}, bareHandler = (input, _class, defaultFields = ['name']) => {
8
3
  if (!input.match(/[_%]/)) {
9
4
  input = `%${input}%`;
10
5
  }
@@ -30,10 +25,10 @@ function queryParser({ query, entityClass, defaultFields = ['name'], qrefMap = {
30
25
  }),
31
26
  ];
32
27
  }
33
- exports.default = queryParser;
34
28
  function selectorsParser({ query, entityClass, type, defaultFields, qrefMap, options, bareHandler, }) {
35
29
  const selector = { type };
36
30
  let curQuery = query;
31
+ // Look for top level selectors inside parens.
37
32
  const subSelectorPairs = [];
38
33
  let inQuote = false;
39
34
  let nesting = 0;
@@ -51,7 +46,8 @@ function selectorsParser({ query, entityClass, type, defaultFields, qrefMap, opt
51
46
  continue;
52
47
  }
53
48
  else if (curQuery[i] === '(') {
54
- if (currentStart == null) {
49
+ const searchClause = i !== 0 && !curQuery[i - 1].match(/\s/);
50
+ if (currentStart == null && !searchClause) {
55
51
  currentStart = i;
56
52
  }
57
53
  else {
@@ -61,6 +57,7 @@ function selectorsParser({ query, entityClass, type, defaultFields, qrefMap, opt
61
57
  else if (curQuery[i] === ')') {
62
58
  if (nesting === 0) {
63
59
  if (currentStart == null) {
60
+ // mismatched parens
64
61
  }
65
62
  else {
66
63
  subSelectorPairs.push([currentStart, i + 1]);
@@ -74,10 +71,14 @@ function selectorsParser({ query, entityClass, type, defaultFields, qrefMap, opt
74
71
  }
75
72
  if (subSelectorPairs.length) {
76
73
  selector.selector = [];
74
+ // Reverse order so we can take them out back to front.
77
75
  subSelectorPairs.reverse();
78
76
  for (let pair of subSelectorPairs) {
77
+ // Slice out in between the parens.
79
78
  let selectorQuery = curQuery.slice(pair[0] + 1, pair[1] - 1);
79
+ // Cut the selector out of the query.
80
80
  curQuery = curQuery.slice(0, pair[0]) + curQuery.slice(pair[1]);
81
+ // First char inside parens determines type of selector.
81
82
  let type = '&';
82
83
  if (selectorQuery.startsWith('&')) {
83
84
  selectorQuery = selectorQuery.slice(1);
@@ -127,6 +128,14 @@ function selectorsParser({ query, entityClass, type, defaultFields, qrefMap, opt
127
128
  options.offset = Number(offsetMatch[1]);
128
129
  }
129
130
  curQuery = curQuery.replace(offsetRegex, '');
131
+ // JavaScript variable names are ridiculously infeasable to check
132
+ // thoroughly, so this is a "best attempt".
133
+ const sortRegex = /(?: |^)sort:(-|[_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)(?= |$)/;
134
+ const sortMatch = curQuery.match(sortRegex);
135
+ if (sortMatch) {
136
+ options.sort = sortMatch[1] === '-' ? null : sortMatch[1];
137
+ }
138
+ curQuery = curQuery.replace(sortRegex, '');
130
139
  const reverseRegex = /(?: |^)reverse:(true|false|1|0)(?= |$)/;
131
140
  const reverseMatch = curQuery.match(reverseRegex);
132
141
  if (reverseMatch) {
@@ -151,22 +160,53 @@ function selectorsParser({ query, entityClass, type, defaultFields, qrefMap, opt
151
160
  selector.selector.length === 1 &&
152
161
  Object.keys(selector).length === 2 &&
153
162
  (selector.type === '&' || selector.type === '|')) {
163
+ // There is only one subselector, and this selector is a positive match
164
+ // type, so just return it as the selector.
154
165
  return selector.selector;
155
166
  }
156
167
  return [selector];
157
168
  }
158
169
  function selectorParser({ query, selector, qrefMap, bareHandler, }) {
159
170
  let curQuery = query;
160
- const qrefRegex = /(?: |^)(\w+)!?<\{(\w+) (.*?[^\\])\}>(?= |$)/g;
171
+ // eg. prop(some search string) or prop!(some search string)
172
+ const searchRegex = /(?: |^)([^\s=\[\]<>{}]+?)!?\([^\)]+\)(?= |$)/g;
173
+ const searchMatch = curQuery.match(searchRegex);
174
+ if (searchMatch) {
175
+ selector.search = [];
176
+ selector['!search'] = [];
177
+ for (let match of searchMatch) {
178
+ try {
179
+ let [name, value] = splitn(match.trim().slice(0, -1), '(', 2);
180
+ if (name.endsWith('!')) {
181
+ selector['!search'].push([name.slice(0, -1), value]);
182
+ }
183
+ else {
184
+ selector.search.push([name, value]);
185
+ }
186
+ }
187
+ catch (e) {
188
+ continue;
189
+ }
190
+ }
191
+ if (!selector.search.length) {
192
+ delete selector.search;
193
+ }
194
+ if (!selector['!search'].length) {
195
+ delete selector['!search'];
196
+ }
197
+ }
198
+ curQuery = curQuery.replace(searchRegex, '');
199
+ // eg. user<{User name="Hunter"}> or user!<{User name="Hunter"}>
200
+ const qrefRegex = /(?: |^)([^\s=\[\]<>{}]+?)!?<\{(\w+) (.*?[^\\])\}>(?= |$)/g;
161
201
  const qrefMatch = curQuery.match(qrefRegex);
162
202
  if (qrefMatch) {
163
203
  selector.qref = [];
164
204
  selector['!qref'] = [];
165
205
  for (let match of qrefMatch) {
166
206
  try {
167
- let [name, value] = (0, splitn_1.default)(match.trim().slice(0, -1), '<', 2);
207
+ let [name, value] = splitn(match.trim().slice(0, -1), '<', 2);
168
208
  value = unQuoteCurlies(value.slice(1, -1));
169
- let [className, qrefQuery] = value.split(' ', 2);
209
+ let [className, qrefQuery] = splitn(value, ' ', 2);
170
210
  const EntityClass = qrefMap[className].class;
171
211
  if (EntityClass == null) {
172
212
  continue;
@@ -197,17 +237,72 @@ function selectorParser({ query, selector, qrefMap, bareHandler, }) {
197
237
  }
198
238
  }
199
239
  curQuery = curQuery.replace(qrefRegex, '');
200
- const equalRegex = /(?: |^)(\w+)!?=(""|".*?[^\\]"|[^ ]+)(?= |$)/g;
240
+ // eg. someArray=[1,2] or someObject={"prop":"some value"}
241
+ const equalJsonRegex = /(?: |^)([^\s=\[\]<>{}]+?)!?=(\{|\[)/g;
242
+ const equalJsonMatch = [...curQuery.matchAll(equalJsonRegex)];
243
+ if (equalJsonMatch) {
244
+ if (!('equal' in selector)) {
245
+ selector.equal = [];
246
+ }
247
+ if (!('!equal' in selector)) {
248
+ selector['!equal'] = [];
249
+ }
250
+ // Work backward to find all long JSON values.
251
+ for (let i = equalJsonMatch.length - 1; i >= 0; i--) {
252
+ const match = equalJsonMatch[i];
253
+ let [name, opener] = splitn(match[0].trim(), '=', 2);
254
+ let start = match.index + match[0].length - 1;
255
+ let nextEndToken = curQuery.indexOf(opener === '{' ? '}' : ']', start);
256
+ while (nextEndToken !== -1) {
257
+ try {
258
+ if (name.endsWith('!')) {
259
+ selector['!equal'].unshift([
260
+ name.slice(0, -1),
261
+ JSON.parse(curQuery.substring(start, nextEndToken + 1)),
262
+ ]);
263
+ }
264
+ else {
265
+ selector.equal.unshift([
266
+ name,
267
+ JSON.parse(curQuery.substring(start, nextEndToken + 1)),
268
+ ]);
269
+ }
270
+ curQuery =
271
+ curQuery.substring(0, match.index) +
272
+ curQuery.substring(nextEndToken + 1);
273
+ break;
274
+ }
275
+ catch (e) {
276
+ nextEndToken = curQuery.indexOf(opener === '{' ? '}' : ']', nextEndToken + 1);
277
+ }
278
+ }
279
+ }
280
+ if (selector.equal == null || !selector.equal.length) {
281
+ delete selector.equal;
282
+ }
283
+ if (selector['!equal'] == null || !selector['!equal'].length) {
284
+ delete selector['!equal'];
285
+ }
286
+ }
287
+ // eg. name=Marty or name="Marty McFly" or enabled=true
288
+ const equalRegex = /(?: |^)([^\s=\[\]<>{}]+?)!?=(""|".*?[^\\]"|[^ ]+)(?= |$)/g;
201
289
  const equalMatch = curQuery.match(equalRegex);
202
290
  if (equalMatch) {
203
- selector.equal = [];
204
- selector['!equal'] = [];
291
+ if (!('equal' in selector)) {
292
+ selector.equal = [];
293
+ }
294
+ if (!('!equal' in selector)) {
295
+ selector['!equal'] = [];
296
+ }
205
297
  for (let match of equalMatch) {
206
298
  try {
207
- let [name, value] = match.trim().split('=', 2);
299
+ let [name, value] = splitn(match.trim(), '=', 2);
208
300
  try {
209
301
  if (name.endsWith('!')) {
210
- selector['!equal'].push([name.slice(0, -1), JSON.parse(value)]);
302
+ selector['!equal'].push([
303
+ name.slice(0, -1),
304
+ JSON.parse(value),
305
+ ]);
211
306
  }
212
307
  else {
213
308
  selector.equal.push([name, JSON.parse(value)]);
@@ -215,10 +310,16 @@ function selectorParser({ query, selector, qrefMap, bareHandler, }) {
215
310
  }
216
311
  catch (e) {
217
312
  if (name.endsWith('!')) {
218
- selector['!equal'].push([name.slice(0, -1), unQuoteString(value)]);
313
+ selector['!equal'].push([
314
+ name.slice(0, -1),
315
+ unQuoteString(value),
316
+ ]);
219
317
  }
220
318
  else {
221
- selector.equal.push([name, unQuoteString(value)]);
319
+ selector.equal.push([
320
+ name,
321
+ unQuoteString(value),
322
+ ]);
222
323
  }
223
324
  }
224
325
  }
@@ -226,22 +327,23 @@ function selectorParser({ query, selector, qrefMap, bareHandler, }) {
226
327
  continue;
227
328
  }
228
329
  }
229
- if (!selector.equal.length) {
330
+ if (selector.equal == null || !selector.equal.length) {
230
331
  delete selector.equal;
231
332
  }
232
- if (!selector['!equal'].length) {
333
+ if (selector['!equal'] == null || !selector['!equal'].length) {
233
334
  delete selector['!equal'];
234
335
  }
235
336
  }
236
337
  curQuery = curQuery.replace(equalRegex, '');
237
- const refRegex = /(?: |^)(\w+)!?<\{([0-9a-f]{24})\}>(?= |$)/g;
338
+ // eg. user<{790274347f9b3a018c2cedee}> or user!<{790274347f9b3a018c2cedee}>
339
+ const refRegex = /(?: |^)([^\s=\[\]<>{}]+?)!?<\{([0-9a-f]{24})\}>(?= |$)/g;
238
340
  const refMatch = curQuery.match(refRegex);
239
341
  if (refMatch) {
240
342
  selector.ref = [];
241
343
  selector['!ref'] = [];
242
344
  for (let match of refMatch) {
243
345
  try {
244
- let [name, value] = match.trim().slice(0, -1).split('<', 2);
346
+ let [name, value] = splitn(match.trim().slice(0, -1), '<', 2);
245
347
  if (name.endsWith('!')) {
246
348
  selector['!ref'].push([name.slice(0, -1), value.slice(1, -1)]);
247
349
  }
@@ -261,34 +363,35 @@ function selectorParser({ query, selector, qrefMap, bareHandler, }) {
261
363
  }
262
364
  }
263
365
  curQuery = curQuery.replace(refRegex, '');
264
- const containRegex = /(?: |^)(\w+)!?(<.*?[^\\]>)(?= |$)/g;
366
+ // eg. someArrayOfNumbers<10> or someObject!<"some string">
367
+ const containRegex = /(?: |^)([^\s=\[\]<>{}]+?)!?(<(?:[^"][^>]*?|".*?[^\\]"))>(?= |$)/g;
265
368
  const containMatch = curQuery.match(containRegex);
266
369
  if (containMatch) {
267
370
  selector.contain = [];
268
371
  selector['!contain'] = [];
269
372
  for (let match of containMatch) {
270
373
  try {
271
- let [name, value] = match.trim().slice(0, -1).split('<', 2);
374
+ let [name, value] = splitn(match.trim().slice(0, -1), '<', 2);
272
375
  try {
273
376
  if (name.endsWith('!')) {
274
377
  selector['!contain'].push([
275
378
  name.slice(0, -1),
276
- JSON.parse(unQuoteAngles(value)),
379
+ JSON.parse(unQuoteString(value)),
277
380
  ]);
278
381
  }
279
382
  else {
280
- selector.contain.push([name, JSON.parse(unQuoteAngles(value))]);
383
+ selector.contain.push([name, JSON.parse(unQuoteString(value))]);
281
384
  }
282
385
  }
283
386
  catch (e) {
284
387
  if (name.endsWith('!')) {
285
388
  selector['!contain'].push([
286
389
  name.slice(0, -1),
287
- unQuoteAngles(value),
390
+ unQuoteString(value),
288
391
  ]);
289
392
  }
290
393
  else {
291
- selector.contain.push([name, unQuoteAngles(value)]);
394
+ selector.contain.push([name, unQuoteString(value)]);
292
395
  }
293
396
  }
294
397
  }
@@ -304,7 +407,8 @@ function selectorParser({ query, selector, qrefMap, bareHandler, }) {
304
407
  }
305
408
  }
306
409
  curQuery = curQuery.replace(containRegex, '');
307
- const posixRegex = /(?: |^)(\w+)!?~(\/\/|\/.*?[^\\]\/)i?(?= |$)/g;
410
+ // eg. name~/Hunter/ or name!~/hunter/i
411
+ const posixRegex = /(?: |^)([^\s=\[\]<>{}]+?)!?~(\/\/|\/.*?[^\\]\/)i?(?= |$)/g;
308
412
  const posixMatch = curQuery.match(posixRegex);
309
413
  if (posixMatch) {
310
414
  selector.match = [];
@@ -313,7 +417,7 @@ function selectorParser({ query, selector, qrefMap, bareHandler, }) {
313
417
  selector['!imatch'] = [];
314
418
  for (let match of posixMatch) {
315
419
  try {
316
- let [name, value] = match.trim().split('~', 2);
420
+ let [name, value] = splitn(match.trim(), '~', 2);
317
421
  if (name.endsWith('!')) {
318
422
  if (value.endsWith('i')) {
319
423
  selector['!imatch'].push([
@@ -355,7 +459,8 @@ function selectorParser({ query, selector, qrefMap, bareHandler, }) {
355
459
  }
356
460
  }
357
461
  curQuery = curQuery.replace(posixRegex, '');
358
- const likeRegex = /(?: |^)(\w+)!?~(""i?|".*?[^\\]"i?|[^ ]+)(?= |$)/g;
462
+ // eg. name~Hunter or name!~"hunter"i
463
+ const likeRegex = /(?: |^)([^\s=\[\]<>{}]+?)!?~(""i?|".*?[^\\]"i?|[^ ]+)(?= |$)/g;
359
464
  const likeMatch = curQuery.match(likeRegex);
360
465
  if (likeMatch) {
361
466
  selector.like = [];
@@ -364,7 +469,7 @@ function selectorParser({ query, selector, qrefMap, bareHandler, }) {
364
469
  selector['!ilike'] = [];
365
470
  for (let match of likeMatch) {
366
471
  try {
367
- let [name, value] = match.trim().split('~', 2);
472
+ let [name, value] = splitn(match.trim(), '~', 2);
368
473
  if (name.endsWith('!')) {
369
474
  if (value.endsWith('"i')) {
370
475
  selector['!ilike'].push([
@@ -403,6 +508,7 @@ function selectorParser({ query, selector, qrefMap, bareHandler, }) {
403
508
  }
404
509
  }
405
510
  curQuery = curQuery.replace(likeRegex, '');
511
+ // eg. {790274347f9b3a018c2cedee} or {!790274347f9b3a018c2cedee}
406
512
  const guidRegex = /(?: |^)\{!?([0-9a-f]{24})\}(?= |$)/g;
407
513
  const guidMatch = curQuery.match(guidRegex);
408
514
  if (guidMatch) {
@@ -430,7 +536,8 @@ function selectorParser({ query, selector, qrefMap, bareHandler, }) {
430
536
  }
431
537
  }
432
538
  curQuery = curQuery.replace(guidRegex, '');
433
- const truthyRegex = /(?: |^)\[(!?\w+)\](?= |$)/g;
539
+ // eg. [enabled] or [!defaultPrimaryGroup]
540
+ const truthyRegex = /(?: |^)\[(!?[^\s=\[\]<>{}]+?)\](?= |$)/g;
434
541
  const truthyMatch = curQuery.match(truthyRegex);
435
542
  if (truthyMatch) {
436
543
  selector.truthy = [];
@@ -457,6 +564,7 @@ function selectorParser({ query, selector, qrefMap, bareHandler, }) {
457
564
  }
458
565
  }
459
566
  curQuery = curQuery.replace(truthyRegex, '');
567
+ // eg. <archived> or <!archived>
460
568
  const tagRegex = /(?: |^)<(!?\w+)>(?= |$)/g;
461
569
  const tagMatch = curQuery.match(tagRegex);
462
570
  if (tagMatch) {
@@ -484,13 +592,14 @@ function selectorParser({ query, selector, qrefMap, bareHandler, }) {
484
592
  }
485
593
  }
486
594
  curQuery = curQuery.replace(tagRegex, '');
487
- const gtRegex = /(?: |^)(\w+)>(-?\d+(?:\.\d+)?)(?= |$)/g;
595
+ // eg. cdate>15
596
+ const gtRegex = /(?: |^)([^\s=\[\]<>{}]+?)>(-?\d+(?:\.\d+)?)(?= |$)/g;
488
597
  const gtMatch = curQuery.match(gtRegex);
489
598
  if (gtMatch) {
490
599
  selector.gt = [];
491
600
  for (let match of gtMatch) {
492
601
  try {
493
- let [name, value] = match.trim().split('>', 2);
602
+ let [name, value] = splitn(match.trim(), '>', 2);
494
603
  selector.gt.push([name, Number(value)]);
495
604
  }
496
605
  catch (e) {
@@ -502,7 +611,8 @@ function selectorParser({ query, selector, qrefMap, bareHandler, }) {
502
611
  }
503
612
  }
504
613
  curQuery = curQuery.replace(gtRegex, '');
505
- const gtRelativeRegex = /(?: |^)(\w+)>(\w+|"[^"]+")(?= |$)/g;
614
+ // eg. cdate>yesterday or cdate>"2 days ago"
615
+ const gtRelativeRegex = /(?: |^)([^\s=\[\]<>{}]+?)>(\w+|"[^"]+")(?= |$)/g;
506
616
  const gtRelativeMatch = curQuery.match(gtRelativeRegex);
507
617
  if (gtRelativeMatch) {
508
618
  if (selector.gt == null) {
@@ -510,7 +620,7 @@ function selectorParser({ query, selector, qrefMap, bareHandler, }) {
510
620
  }
511
621
  for (let match of gtRelativeMatch) {
512
622
  try {
513
- let [name, value] = match.trim().split('>', 2);
623
+ let [name, value] = splitn(match.trim(), '>', 2);
514
624
  selector.gt.push([
515
625
  name,
516
626
  null,
@@ -526,13 +636,14 @@ function selectorParser({ query, selector, qrefMap, bareHandler, }) {
526
636
  }
527
637
  }
528
638
  curQuery = curQuery.replace(gtRelativeRegex, '');
529
- const gteRegex = /(?: |^)(\w+)>=(-?\d+(?:\.\d+)?)(?= |$)/g;
639
+ // eg. cdate>=15
640
+ const gteRegex = /(?: |^)([^\s=\[\]<>{}]+?)>=(-?\d+(?:\.\d+)?)(?= |$)/g;
530
641
  const gteMatch = curQuery.match(gteRegex);
531
642
  if (gteMatch) {
532
643
  selector.gte = [];
533
644
  for (let match of gteMatch) {
534
645
  try {
535
- let [name, value] = match.trim().split('>=', 2);
646
+ let [name, value] = splitn(match.trim(), '>=', 2);
536
647
  selector.gte.push([name, Number(value)]);
537
648
  }
538
649
  catch (e) {
@@ -544,7 +655,8 @@ function selectorParser({ query, selector, qrefMap, bareHandler, }) {
544
655
  }
545
656
  }
546
657
  curQuery = curQuery.replace(gteRegex, '');
547
- const gteRelativeRegex = /(?: |^)(\w+)>=(\w+|"[^"]+")(?= |$)/g;
658
+ // eg. cdate>=yesterday or cdate>="2 days ago"
659
+ const gteRelativeRegex = /(?: |^)([^\s=\[\]<>{}]+?)>=(\w+|"[^"]+")(?= |$)/g;
548
660
  const gteRelativeMatch = curQuery.match(gteRelativeRegex);
549
661
  if (gteRelativeMatch) {
550
662
  if (selector.gte == null) {
@@ -552,7 +664,7 @@ function selectorParser({ query, selector, qrefMap, bareHandler, }) {
552
664
  }
553
665
  for (let match of gteRelativeMatch) {
554
666
  try {
555
- let [name, value] = match.trim().split('>=', 2);
667
+ let [name, value] = splitn(match.trim(), '>=', 2);
556
668
  selector.gte.push([
557
669
  name,
558
670
  null,
@@ -568,13 +680,14 @@ function selectorParser({ query, selector, qrefMap, bareHandler, }) {
568
680
  }
569
681
  }
570
682
  curQuery = curQuery.replace(gteRelativeRegex, '');
571
- const ltRegex = /(?: |^)(\w+)<(-?\d+(?:\.\d+)?)(?= |$)/g;
683
+ // eg. cdate<15
684
+ const ltRegex = /(?: |^)([^\s=\[\]<>{}]+?)<(-?\d+(?:\.\d+)?)(?= |$)/g;
572
685
  const ltMatch = curQuery.match(ltRegex);
573
686
  if (ltMatch) {
574
687
  selector.lt = [];
575
688
  for (let match of ltMatch) {
576
689
  try {
577
- let [name, value] = match.trim().split('<', 2);
690
+ let [name, value] = splitn(match.trim(), '<', 2);
578
691
  selector.lt.push([name, Number(value)]);
579
692
  }
580
693
  catch (e) {
@@ -586,7 +699,8 @@ function selectorParser({ query, selector, qrefMap, bareHandler, }) {
586
699
  }
587
700
  }
588
701
  curQuery = curQuery.replace(ltRegex, '');
589
- const ltRelativeRegex = /(?: |^)(\w+)<(\w+|"[^"]+")(?= |$)/g;
702
+ // eg. cdate<yesterday or cdate<"2 days ago"
703
+ const ltRelativeRegex = /(?: |^)([^\s=\[\]<>{}]+?)<(\w+|"[^"]+")(?= |$)/g;
590
704
  const ltRelativeMatch = curQuery.match(ltRelativeRegex);
591
705
  if (ltRelativeMatch) {
592
706
  if (selector.lt == null) {
@@ -594,7 +708,7 @@ function selectorParser({ query, selector, qrefMap, bareHandler, }) {
594
708
  }
595
709
  for (let match of ltRelativeMatch) {
596
710
  try {
597
- let [name, value] = match.trim().split('<', 2);
711
+ let [name, value] = splitn(match.trim(), '<', 2);
598
712
  selector.lt.push([
599
713
  name,
600
714
  null,
@@ -610,13 +724,14 @@ function selectorParser({ query, selector, qrefMap, bareHandler, }) {
610
724
  }
611
725
  }
612
726
  curQuery = curQuery.replace(ltRelativeRegex, '');
613
- const lteRegex = /(?: |^)(\w+)<=(-?\d+(?:\.\d+)?)(?= |$)/g;
727
+ // eg. cdate<=15
728
+ const lteRegex = /(?: |^)([^\s=\[\]<>{}]+?)<=(-?\d+(?:\.\d+)?)(?= |$)/g;
614
729
  const lteMatch = curQuery.match(lteRegex);
615
730
  if (lteMatch) {
616
731
  selector.lte = [];
617
732
  for (let match of lteMatch) {
618
733
  try {
619
- let [name, value] = match.trim().split('<=', 2);
734
+ let [name, value] = splitn(match.trim(), '<=', 2);
620
735
  selector.lte.push([name, Number(value)]);
621
736
  }
622
737
  catch (e) {
@@ -628,7 +743,8 @@ function selectorParser({ query, selector, qrefMap, bareHandler, }) {
628
743
  }
629
744
  }
630
745
  curQuery = curQuery.replace(lteRegex, '');
631
- const lteRelativeRegex = /(?: |^)(\w+)<=(\w+|"[^"]+")(?= |$)/g;
746
+ // eg. cdate<=yesterday or cdate<="2 days ago"
747
+ const lteRelativeRegex = /(?: |^)([^\s=\[\]<>{}]+?)<=(\w+|"[^"]+")(?= |$)/g;
632
748
  const lteRelativeMatch = curQuery.match(lteRelativeRegex);
633
749
  if (lteRelativeMatch) {
634
750
  if (selector.lte == null) {
@@ -636,7 +752,7 @@ function selectorParser({ query, selector, qrefMap, bareHandler, }) {
636
752
  }
637
753
  for (let match of lteRelativeMatch) {
638
754
  try {
639
- let [name, value] = match.trim().split('<=', 2);
755
+ let [name, value] = splitn(match.trim(), '<=', 2);
640
756
  selector.lte.push([
641
757
  name,
642
758
  null,
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryParser.js","sourceRoot":"","sources":["../src/queryParser.ts"],"names":[],"mappings":"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"}