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

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,15 +1,10 @@
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 queryParser_1 = __importDefault(require("./queryParser"));
1
+ import queryParser from './queryParser.js';
7
2
  const BlogPost = function () { };
8
3
  const Category = function () { };
9
4
  describe('queryParser', () => {
10
5
  it('parses a basic query', () => {
11
6
  const query = 'search';
12
- const [options, ...selectors] = (0, queryParser_1.default)({
7
+ const [options, ...selectors] = queryParser({
13
8
  query,
14
9
  entityClass: BlogPost,
15
10
  defaultFields: ['text'],
@@ -26,7 +21,7 @@ describe('queryParser', () => {
26
21
  });
27
22
  it('allows bare queries to be customized', () => {
28
23
  const query = 'search';
29
- const [options, ...selectors] = (0, queryParser_1.default)({
24
+ const [options, ...selectors] = queryParser({
30
25
  query,
31
26
  entityClass: BlogPost,
32
27
  defaultFields: ['text'],
@@ -51,7 +46,7 @@ describe('queryParser', () => {
51
46
  });
52
47
  it('gives the correct entity and default fields to bare queries', () => {
53
48
  const query = 'category<{cat search}>';
54
- const [options, ...selectors] = (0, queryParser_1.default)({
49
+ const [options, ...selectors] = queryParser({
55
50
  query,
56
51
  entityClass: BlogPost,
57
52
  defaultFields: ['text'],
@@ -88,7 +83,7 @@ describe('queryParser', () => {
88
83
  });
89
84
  it('parses the example query from the readme', () => {
90
85
  const query = 'limit:4 foobar (| [archived] mdate<"2 weeks ago") category<{cat Tech}>';
91
- const [options, ...selectors] = (0, queryParser_1.default)({
86
+ const [options, ...selectors] = queryParser({
92
87
  query,
93
88
  entityClass: BlogPost,
94
89
  defaultFields: ['title', 'body'],
@@ -137,9 +132,316 @@ describe('queryParser', () => {
137
132
  },
138
133
  ]);
139
134
  });
135
+ it('parses a query with json value with spaces', () => {
136
+ const query = 'obj={"prop": "my value"} foobar arr=["a value", "another value"]';
137
+ const [options, ...selectors] = queryParser({
138
+ query,
139
+ entityClass: BlogPost,
140
+ defaultFields: ['title', 'body'],
141
+ });
142
+ expect(options).toEqual({
143
+ class: BlogPost,
144
+ });
145
+ expect(selectors).toEqual([
146
+ {
147
+ type: '&',
148
+ equal: [
149
+ ['obj', { prop: 'my value' }],
150
+ ['arr', ['a value', 'another value']],
151
+ ],
152
+ },
153
+ {
154
+ type: '|',
155
+ ilike: [
156
+ ['title', '%foobar%'],
157
+ ['body', '%foobar%'],
158
+ ],
159
+ },
160
+ ]);
161
+ });
162
+ it('parses a query with nested json value with spaces', () => {
163
+ const query = 'obj={"obj": {"sub": "my value"}, "prop": "my value"} foobar arr=["a value", "another value", {"prop": [1, 2, 3]}]';
164
+ const [options, ...selectors] = queryParser({
165
+ query,
166
+ entityClass: BlogPost,
167
+ defaultFields: ['title', 'body'],
168
+ });
169
+ expect(options).toEqual({
170
+ class: BlogPost,
171
+ });
172
+ expect(selectors).toEqual([
173
+ {
174
+ type: '&',
175
+ equal: [
176
+ ['obj', { obj: { sub: 'my value' }, prop: 'my value' }],
177
+ ['arr', ['a value', 'another value', { prop: [1, 2, 3] }]],
178
+ ],
179
+ },
180
+ {
181
+ type: '|',
182
+ ilike: [
183
+ ['title', '%foobar%'],
184
+ ['body', '%foobar%'],
185
+ ],
186
+ },
187
+ ]);
188
+ });
189
+ it('parses a query with broken json', () => {
190
+ const query = 'obj={"obj":"val"';
191
+ const [options, ...selectors] = queryParser({
192
+ query,
193
+ entityClass: BlogPost,
194
+ defaultFields: ['title', 'body'],
195
+ });
196
+ expect(options).toEqual({
197
+ class: BlogPost,
198
+ });
199
+ expect(selectors).toEqual([
200
+ {
201
+ type: '&',
202
+ equal: [['obj', '{"obj":"val"']],
203
+ },
204
+ ]);
205
+ });
206
+ it('parses a query with broken json and correct json', () => {
207
+ const query = 'obj={"obj":"val" another={"prop":"value"}';
208
+ const [options, ...selectors] = queryParser({
209
+ query,
210
+ entityClass: BlogPost,
211
+ defaultFields: ['title', 'body'],
212
+ });
213
+ expect(options).toEqual({
214
+ class: BlogPost,
215
+ });
216
+ expect(selectors).toEqual([
217
+ {
218
+ type: '&',
219
+ equal: [
220
+ ['another', { prop: 'value' }],
221
+ ['obj', '{"obj":"val"'],
222
+ ],
223
+ },
224
+ ]);
225
+ });
226
+ it('parses a query with search', () => {
227
+ const query = 'limit:4 foobar prop(a search string)';
228
+ const [options, ...selectors] = queryParser({
229
+ query,
230
+ entityClass: BlogPost,
231
+ defaultFields: ['title', 'body'],
232
+ qrefMap: {
233
+ cat: {
234
+ class: Category,
235
+ defaultFields: ['name'],
236
+ },
237
+ },
238
+ });
239
+ expect(options).toEqual({
240
+ class: BlogPost,
241
+ limit: 4,
242
+ });
243
+ expect(selectors).toEqual([
244
+ {
245
+ type: '&',
246
+ search: [['prop', 'a search string']],
247
+ },
248
+ {
249
+ type: '|',
250
+ ilike: [
251
+ ['title', '%foobar%'],
252
+ ['body', '%foobar%'],
253
+ ],
254
+ },
255
+ ]);
256
+ });
257
+ it('parses a query with search in a selector', () => {
258
+ const query = 'limit:4 foobar (| prop(a search string) prop2("another search string"))';
259
+ const [options, ...selectors] = queryParser({
260
+ query,
261
+ entityClass: BlogPost,
262
+ defaultFields: ['title', 'body'],
263
+ qrefMap: {
264
+ cat: {
265
+ class: Category,
266
+ defaultFields: ['name'],
267
+ },
268
+ },
269
+ });
270
+ expect(options).toEqual({
271
+ class: BlogPost,
272
+ limit: 4,
273
+ });
274
+ expect(selectors).toEqual([
275
+ {
276
+ type: '&',
277
+ selector: [
278
+ {
279
+ type: '|',
280
+ search: [
281
+ ['prop', 'a search string'],
282
+ ['prop2', '"another search string"'],
283
+ ],
284
+ },
285
+ ],
286
+ },
287
+ {
288
+ type: '|',
289
+ ilike: [
290
+ ['title', '%foobar%'],
291
+ ['body', '%foobar%'],
292
+ ],
293
+ },
294
+ ]);
295
+ });
296
+ it('parses a query with lt and tag', () => {
297
+ const query = 'limit:4 foobar mdate<"2 weeks ago" <tag>';
298
+ const [options, ...selectors] = queryParser({
299
+ query,
300
+ entityClass: BlogPost,
301
+ defaultFields: ['title', 'body'],
302
+ qrefMap: {
303
+ cat: {
304
+ class: Category,
305
+ defaultFields: ['name'],
306
+ },
307
+ },
308
+ });
309
+ expect(options).toEqual({
310
+ class: BlogPost,
311
+ limit: 4,
312
+ });
313
+ expect(selectors).toEqual([
314
+ {
315
+ type: '&',
316
+ lt: [['mdate', null, '2 weeks ago']],
317
+ tag: ['tag'],
318
+ },
319
+ {
320
+ type: '|',
321
+ ilike: [
322
+ ['title', '%foobar%'],
323
+ ['body', '%foobar%'],
324
+ ],
325
+ },
326
+ ]);
327
+ });
328
+ it('parses a query with contain that has brackets', () => {
329
+ const query = 'limit:4 foobar string<"a string with < and > characters">';
330
+ const [options, ...selectors] = queryParser({
331
+ query,
332
+ entityClass: BlogPost,
333
+ defaultFields: ['title', 'body'],
334
+ qrefMap: {
335
+ cat: {
336
+ class: Category,
337
+ defaultFields: ['name'],
338
+ },
339
+ },
340
+ });
341
+ expect(options).toEqual({
342
+ class: BlogPost,
343
+ limit: 4,
344
+ });
345
+ expect(selectors).toEqual([
346
+ {
347
+ type: '&',
348
+ contain: [['string', 'a string with < and > characters']],
349
+ },
350
+ {
351
+ type: '|',
352
+ ilike: [
353
+ ['title', '%foobar%'],
354
+ ['body', '%foobar%'],
355
+ ],
356
+ },
357
+ ]);
358
+ });
359
+ it('parses a query with contain that has quotes', () => {
360
+ const query = 'limit:4 foobar string<"a string with a \\" characters">';
361
+ const [options, ...selectors] = queryParser({
362
+ query,
363
+ entityClass: BlogPost,
364
+ defaultFields: ['title', 'body'],
365
+ qrefMap: {
366
+ cat: {
367
+ class: Category,
368
+ defaultFields: ['name'],
369
+ },
370
+ },
371
+ });
372
+ expect(options).toEqual({
373
+ class: BlogPost,
374
+ limit: 4,
375
+ });
376
+ expect(selectors).toEqual([
377
+ {
378
+ type: '&',
379
+ contain: [['string', 'a string with a " characters']],
380
+ },
381
+ {
382
+ type: '|',
383
+ ilike: [
384
+ ['title', '%foobar%'],
385
+ ['body', '%foobar%'],
386
+ ],
387
+ },
388
+ ]);
389
+ });
390
+ it('parses a query with a dash in the property name', () => {
391
+ const query = 'limit:4 foobar Test-Prop<"a string">';
392
+ const [options, ...selectors] = queryParser({
393
+ query,
394
+ entityClass: BlogPost,
395
+ defaultFields: ['title', 'body'],
396
+ qrefMap: {
397
+ cat: {
398
+ class: Category,
399
+ defaultFields: ['name'],
400
+ },
401
+ },
402
+ });
403
+ expect(options).toEqual({
404
+ class: BlogPost,
405
+ limit: 4,
406
+ });
407
+ expect(selectors).toEqual([
408
+ {
409
+ type: '&',
410
+ contain: [['Test-Prop', 'a string']],
411
+ },
412
+ {
413
+ type: '|',
414
+ ilike: [
415
+ ['title', '%foobar%'],
416
+ ['body', '%foobar%'],
417
+ ],
418
+ },
419
+ ]);
420
+ });
140
421
  it('parses all options', () => {
141
- const query = 'limit:10 offset:15 reverse:true search';
142
- const [options, ...selectors] = (0, queryParser_1.default)({
422
+ const query = 'limit:10 offset:15 sort:someProp reverse:true search';
423
+ const [options, ...selectors] = queryParser({
424
+ query,
425
+ entityClass: BlogPost,
426
+ defaultFields: ['text'],
427
+ });
428
+ expect(options).toEqual({
429
+ class: BlogPost,
430
+ limit: 10,
431
+ offset: 15,
432
+ sort: 'someProp',
433
+ reverse: true,
434
+ });
435
+ expect(selectors).toEqual([
436
+ {
437
+ type: '|',
438
+ ilike: [['text', '%search%']],
439
+ },
440
+ ]);
441
+ });
442
+ it('parses null sort option', () => {
443
+ const query = 'limit:10 offset:15 sort:- reverse:true search';
444
+ const [options, ...selectors] = queryParser({
143
445
  query,
144
446
  entityClass: BlogPost,
145
447
  defaultFields: ['text'],
@@ -148,6 +450,7 @@ describe('queryParser', () => {
148
450
  class: BlogPost,
149
451
  limit: 10,
150
452
  offset: 15,
453
+ sort: null,
151
454
  reverse: true,
152
455
  });
153
456
  expect(selectors).toEqual([
@@ -159,7 +462,7 @@ describe('queryParser', () => {
159
462
  });
160
463
  it('parses simple equal clauses', () => {
161
464
  const query = 'prop=string';
162
- const [options, ...selectors] = (0, queryParser_1.default)({
465
+ const [options, ...selectors] = queryParser({
163
466
  query,
164
467
  entityClass: BlogPost,
165
468
  });
@@ -175,7 +478,7 @@ describe('queryParser', () => {
175
478
  });
176
479
  it('parses simple not equal clauses', () => {
177
480
  const query = 'prop!=string';
178
- const [options, ...selectors] = (0, queryParser_1.default)({
481
+ const [options, ...selectors] = queryParser({
179
482
  query,
180
483
  entityClass: BlogPost,
181
484
  });
@@ -191,7 +494,7 @@ describe('queryParser', () => {
191
494
  });
192
495
  it('parses quoted equal clauses', () => {
193
496
  const query = 'prop="a string"';
194
- const [options, ...selectors] = (0, queryParser_1.default)({
497
+ const [options, ...selectors] = queryParser({
195
498
  query,
196
499
  entityClass: BlogPost,
197
500
  });
@@ -207,7 +510,7 @@ describe('queryParser', () => {
207
510
  });
208
511
  it('parses quoted not equal clauses', () => {
209
512
  const query = 'prop!="a string"';
210
- const [options, ...selectors] = (0, queryParser_1.default)({
513
+ const [options, ...selectors] = queryParser({
211
514
  query,
212
515
  entityClass: BlogPost,
213
516
  });
@@ -223,7 +526,7 @@ describe('queryParser', () => {
223
526
  });
224
527
  it('parses json equal clauses', () => {
225
528
  const query = 'prop=true';
226
- const [options, ...selectors] = (0, queryParser_1.default)({
529
+ const [options, ...selectors] = queryParser({
227
530
  query,
228
531
  entityClass: BlogPost,
229
532
  });
@@ -239,7 +542,7 @@ describe('queryParser', () => {
239
542
  });
240
543
  it('parses json not equal clauses', () => {
241
544
  const query = 'prop!=true';
242
- const [options, ...selectors] = (0, queryParser_1.default)({
545
+ const [options, ...selectors] = queryParser({
243
546
  query,
244
547
  entityClass: BlogPost,
245
548
  });
@@ -255,7 +558,7 @@ describe('queryParser', () => {
255
558
  });
256
559
  it('parses guid clauses', () => {
257
560
  const query = '{111111111111111111111111}';
258
- const [options, ...selectors] = (0, queryParser_1.default)({
561
+ const [options, ...selectors] = queryParser({
259
562
  query,
260
563
  entityClass: BlogPost,
261
564
  });
@@ -271,7 +574,7 @@ describe('queryParser', () => {
271
574
  });
272
575
  it('parses not guid clauses', () => {
273
576
  const query = '{!111111111111111111111111}';
274
- const [options, ...selectors] = (0, queryParser_1.default)({
577
+ const [options, ...selectors] = queryParser({
275
578
  query,
276
579
  entityClass: BlogPost,
277
580
  });
@@ -287,7 +590,7 @@ describe('queryParser', () => {
287
590
  });
288
591
  it('parses tag clauses', () => {
289
592
  const query = '<tagname>';
290
- const [options, ...selectors] = (0, queryParser_1.default)({
593
+ const [options, ...selectors] = queryParser({
291
594
  query,
292
595
  entityClass: BlogPost,
293
596
  });
@@ -303,7 +606,7 @@ describe('queryParser', () => {
303
606
  });
304
607
  it('parses not tag clauses', () => {
305
608
  const query = '<!tagname>';
306
- const [options, ...selectors] = (0, queryParser_1.default)({
609
+ const [options, ...selectors] = queryParser({
307
610
  query,
308
611
  entityClass: BlogPost,
309
612
  });
@@ -319,7 +622,7 @@ describe('queryParser', () => {
319
622
  });
320
623
  it('parses truthy clauses', () => {
321
624
  const query = '[truthyname]';
322
- const [options, ...selectors] = (0, queryParser_1.default)({
625
+ const [options, ...selectors] = queryParser({
323
626
  query,
324
627
  entityClass: BlogPost,
325
628
  });
@@ -335,7 +638,7 @@ describe('queryParser', () => {
335
638
  });
336
639
  it('parses not truthy clauses', () => {
337
640
  const query = '[!truthyname]';
338
- const [options, ...selectors] = (0, queryParser_1.default)({
641
+ const [options, ...selectors] = queryParser({
339
642
  query,
340
643
  entityClass: BlogPost,
341
644
  });
@@ -351,7 +654,7 @@ describe('queryParser', () => {
351
654
  });
352
655
  it('parses ref clauses', () => {
353
656
  const query = 'prop<{111111111111111111111111}>';
354
- const [options, ...selectors] = (0, queryParser_1.default)({
657
+ const [options, ...selectors] = queryParser({
355
658
  query,
356
659
  entityClass: BlogPost,
357
660
  });
@@ -367,7 +670,7 @@ describe('queryParser', () => {
367
670
  });
368
671
  it('parses not ref clauses', () => {
369
672
  const query = 'prop!<{111111111111111111111111}>';
370
- const [options, ...selectors] = (0, queryParser_1.default)({
673
+ const [options, ...selectors] = queryParser({
371
674
  query,
372
675
  entityClass: BlogPost,
373
676
  });
@@ -383,7 +686,7 @@ describe('queryParser', () => {
383
686
  });
384
687
  it('parses simple contain clauses', () => {
385
688
  const query = 'prop<string>';
386
- const [options, ...selectors] = (0, queryParser_1.default)({
689
+ const [options, ...selectors] = queryParser({
387
690
  query,
388
691
  entityClass: BlogPost,
389
692
  });
@@ -399,7 +702,7 @@ describe('queryParser', () => {
399
702
  });
400
703
  it('parses simple not contain clauses', () => {
401
704
  const query = 'prop!<string>';
402
- const [options, ...selectors] = (0, queryParser_1.default)({
705
+ const [options, ...selectors] = queryParser({
403
706
  query,
404
707
  entityClass: BlogPost,
405
708
  });
@@ -415,7 +718,7 @@ describe('queryParser', () => {
415
718
  });
416
719
  it('parses json contain clauses', () => {
417
720
  const query = 'prop<true>';
418
- const [options, ...selectors] = (0, queryParser_1.default)({
721
+ const [options, ...selectors] = queryParser({
419
722
  query,
420
723
  entityClass: BlogPost,
421
724
  });
@@ -431,7 +734,7 @@ describe('queryParser', () => {
431
734
  });
432
735
  it('parses json not contain clauses', () => {
433
736
  const query = 'prop!<true>';
434
- const [options, ...selectors] = (0, queryParser_1.default)({
737
+ const [options, ...selectors] = queryParser({
435
738
  query,
436
739
  entityClass: BlogPost,
437
740
  });
@@ -447,7 +750,7 @@ describe('queryParser', () => {
447
750
  });
448
751
  it('parses match clauses', () => {
449
752
  const query = 'prop~/regex/';
450
- const [options, ...selectors] = (0, queryParser_1.default)({
753
+ const [options, ...selectors] = queryParser({
451
754
  query,
452
755
  entityClass: BlogPost,
453
756
  });
@@ -463,7 +766,7 @@ describe('queryParser', () => {
463
766
  });
464
767
  it('parses not match clauses', () => {
465
768
  const query = 'prop!~/regex/';
466
- const [options, ...selectors] = (0, queryParser_1.default)({
769
+ const [options, ...selectors] = queryParser({
467
770
  query,
468
771
  entityClass: BlogPost,
469
772
  });
@@ -479,7 +782,7 @@ describe('queryParser', () => {
479
782
  });
480
783
  it('parses imatch clauses', () => {
481
784
  const query = 'prop~/regex/i';
482
- const [options, ...selectors] = (0, queryParser_1.default)({
785
+ const [options, ...selectors] = queryParser({
483
786
  query,
484
787
  entityClass: BlogPost,
485
788
  });
@@ -495,7 +798,7 @@ describe('queryParser', () => {
495
798
  });
496
799
  it('parses not imatch clauses', () => {
497
800
  const query = 'prop!~/regex/i';
498
- const [options, ...selectors] = (0, queryParser_1.default)({
801
+ const [options, ...selectors] = queryParser({
499
802
  query,
500
803
  entityClass: BlogPost,
501
804
  });
@@ -511,7 +814,7 @@ describe('queryParser', () => {
511
814
  });
512
815
  it('parses simple like clauses', () => {
513
816
  const query = 'prop~pattern';
514
- const [options, ...selectors] = (0, queryParser_1.default)({
817
+ const [options, ...selectors] = queryParser({
515
818
  query,
516
819
  entityClass: BlogPost,
517
820
  });
@@ -527,7 +830,7 @@ describe('queryParser', () => {
527
830
  });
528
831
  it('parses simple not like clauses', () => {
529
832
  const query = 'prop!~pattern';
530
- const [options, ...selectors] = (0, queryParser_1.default)({
833
+ const [options, ...selectors] = queryParser({
531
834
  query,
532
835
  entityClass: BlogPost,
533
836
  });
@@ -543,7 +846,7 @@ describe('queryParser', () => {
543
846
  });
544
847
  it('parses quoted like clauses', () => {
545
848
  const query = 'prop~"a pattern"';
546
- const [options, ...selectors] = (0, queryParser_1.default)({
849
+ const [options, ...selectors] = queryParser({
547
850
  query,
548
851
  entityClass: BlogPost,
549
852
  });
@@ -559,7 +862,7 @@ describe('queryParser', () => {
559
862
  });
560
863
  it('parses quoted not like clauses', () => {
561
864
  const query = 'prop!~"a pattern"';
562
- const [options, ...selectors] = (0, queryParser_1.default)({
865
+ const [options, ...selectors] = queryParser({
563
866
  query,
564
867
  entityClass: BlogPost,
565
868
  });
@@ -575,7 +878,7 @@ describe('queryParser', () => {
575
878
  });
576
879
  it('parses ilike clauses', () => {
577
880
  const query = 'prop~"a pattern"i';
578
- const [options, ...selectors] = (0, queryParser_1.default)({
881
+ const [options, ...selectors] = queryParser({
579
882
  query,
580
883
  entityClass: BlogPost,
581
884
  });
@@ -591,7 +894,7 @@ describe('queryParser', () => {
591
894
  });
592
895
  it('parses not ilike clauses', () => {
593
896
  const query = 'prop!~"a pattern"i';
594
- const [options, ...selectors] = (0, queryParser_1.default)({
897
+ const [options, ...selectors] = queryParser({
595
898
  query,
596
899
  entityClass: BlogPost,
597
900
  });
@@ -607,7 +910,7 @@ describe('queryParser', () => {
607
910
  });
608
911
  it('parses simple gt clauses', () => {
609
912
  const query = 'prop>30.5';
610
- const [options, ...selectors] = (0, queryParser_1.default)({
913
+ const [options, ...selectors] = queryParser({
611
914
  query,
612
915
  entityClass: BlogPost,
613
916
  });
@@ -623,7 +926,7 @@ describe('queryParser', () => {
623
926
  });
624
927
  it('parses simple relative gt clauses', () => {
625
928
  const query = 'prop>yesterday';
626
- const [options, ...selectors] = (0, queryParser_1.default)({
929
+ const [options, ...selectors] = queryParser({
627
930
  query,
628
931
  entityClass: BlogPost,
629
932
  });
@@ -639,7 +942,7 @@ describe('queryParser', () => {
639
942
  });
640
943
  it('parses quote relative gt clauses', () => {
641
944
  const query = 'prop>"3 weeks ago"';
642
- const [options, ...selectors] = (0, queryParser_1.default)({
945
+ const [options, ...selectors] = queryParser({
643
946
  query,
644
947
  entityClass: BlogPost,
645
948
  });
@@ -655,7 +958,7 @@ describe('queryParser', () => {
655
958
  });
656
959
  it('parses simple gte clauses', () => {
657
960
  const query = 'prop>=30.5';
658
- const [options, ...selectors] = (0, queryParser_1.default)({
961
+ const [options, ...selectors] = queryParser({
659
962
  query,
660
963
  entityClass: BlogPost,
661
964
  });
@@ -671,7 +974,7 @@ describe('queryParser', () => {
671
974
  });
672
975
  it('parses simple relative gte clauses', () => {
673
976
  const query = 'prop>=yesterday';
674
- const [options, ...selectors] = (0, queryParser_1.default)({
977
+ const [options, ...selectors] = queryParser({
675
978
  query,
676
979
  entityClass: BlogPost,
677
980
  });
@@ -687,7 +990,7 @@ describe('queryParser', () => {
687
990
  });
688
991
  it('parses quote relative gte clauses', () => {
689
992
  const query = 'prop>="3 weeks ago"';
690
- const [options, ...selectors] = (0, queryParser_1.default)({
993
+ const [options, ...selectors] = queryParser({
691
994
  query,
692
995
  entityClass: BlogPost,
693
996
  });
@@ -703,7 +1006,7 @@ describe('queryParser', () => {
703
1006
  });
704
1007
  it('parses simple lt clauses', () => {
705
1008
  const query = 'prop<30.5';
706
- const [options, ...selectors] = (0, queryParser_1.default)({
1009
+ const [options, ...selectors] = queryParser({
707
1010
  query,
708
1011
  entityClass: BlogPost,
709
1012
  });
@@ -719,7 +1022,7 @@ describe('queryParser', () => {
719
1022
  });
720
1023
  it('parses simple relative lt clauses', () => {
721
1024
  const query = 'prop<yesterday';
722
- const [options, ...selectors] = (0, queryParser_1.default)({
1025
+ const [options, ...selectors] = queryParser({
723
1026
  query,
724
1027
  entityClass: BlogPost,
725
1028
  });
@@ -735,7 +1038,7 @@ describe('queryParser', () => {
735
1038
  });
736
1039
  it('parses quote relative lt clauses', () => {
737
1040
  const query = 'prop<"3 weeks ago"';
738
- const [options, ...selectors] = (0, queryParser_1.default)({
1041
+ const [options, ...selectors] = queryParser({
739
1042
  query,
740
1043
  entityClass: BlogPost,
741
1044
  });
@@ -751,7 +1054,7 @@ describe('queryParser', () => {
751
1054
  });
752
1055
  it('parses simple lte clauses', () => {
753
1056
  const query = 'prop<=30.5';
754
- const [options, ...selectors] = (0, queryParser_1.default)({
1057
+ const [options, ...selectors] = queryParser({
755
1058
  query,
756
1059
  entityClass: BlogPost,
757
1060
  });
@@ -767,7 +1070,7 @@ describe('queryParser', () => {
767
1070
  });
768
1071
  it('parses simple relative lte clauses', () => {
769
1072
  const query = 'prop<=yesterday';
770
- const [options, ...selectors] = (0, queryParser_1.default)({
1073
+ const [options, ...selectors] = queryParser({
771
1074
  query,
772
1075
  entityClass: BlogPost,
773
1076
  });
@@ -783,7 +1086,7 @@ describe('queryParser', () => {
783
1086
  });
784
1087
  it('parses quote relative lte clauses', () => {
785
1088
  const query = 'prop<="3 weeks ago"';
786
- const [options, ...selectors] = (0, queryParser_1.default)({
1089
+ const [options, ...selectors] = queryParser({
787
1090
  query,
788
1091
  entityClass: BlogPost,
789
1092
  });
@@ -799,7 +1102,7 @@ describe('queryParser', () => {
799
1102
  });
800
1103
  it('parses complex selectors', () => {
801
1104
  const query = '(! [published] <draft>) (| cdate>"6 months ago" mdate>"1 month ago")';
802
- const [options, ...selectors] = (0, queryParser_1.default)({
1105
+ const [options, ...selectors] = queryParser({
803
1106
  query,
804
1107
  entityClass: BlogPost,
805
1108
  });
@@ -828,7 +1131,7 @@ describe('queryParser', () => {
828
1131
  });
829
1132
  it('parses nested selectors', () => {
830
1133
  const query = '(! [published] <draft> (| cdate>"6 months ago" mdate>"1 month ago"))';
831
- const [options, ...selectors] = (0, queryParser_1.default)({
1134
+ const [options, ...selectors] = queryParser({
832
1135
  query,
833
1136
  entityClass: BlogPost,
834
1137
  });
@@ -852,5 +1155,50 @@ describe('queryParser', () => {
852
1155
  },
853
1156
  ]);
854
1157
  });
1158
+ it('parses nested qref clauses', () => {
1159
+ const query = 'categories<{Category parent<{Category id="sort+newsletters"}>}> ';
1160
+ const [options, ...selectors] = queryParser({
1161
+ query,
1162
+ entityClass: BlogPost,
1163
+ defaultFields: ['title', 'body'],
1164
+ qrefMap: {
1165
+ Category: {
1166
+ class: Category,
1167
+ defaultFields: ['name'],
1168
+ },
1169
+ },
1170
+ });
1171
+ expect(options).toEqual({
1172
+ class: BlogPost,
1173
+ });
1174
+ expect(selectors).toEqual([
1175
+ {
1176
+ type: '&',
1177
+ qref: [
1178
+ [
1179
+ 'categories',
1180
+ [
1181
+ { class: Category },
1182
+ {
1183
+ type: '&',
1184
+ qref: [
1185
+ [
1186
+ 'parent',
1187
+ [
1188
+ { class: Category },
1189
+ {
1190
+ type: '&',
1191
+ equal: [['id', 'sort+newsletters']],
1192
+ },
1193
+ ],
1194
+ ],
1195
+ ],
1196
+ },
1197
+ ],
1198
+ ],
1199
+ ],
1200
+ },
1201
+ ]);
1202
+ });
855
1203
  });
856
1204
  //# sourceMappingURL=queryParser.test.js.map