@balena/odata-parser 2.3.0 → 2.4.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.
@@ -1,3 +1,18 @@
1
+ - commits:
2
+ - subject: Add support for `/$count` with nested `$filter` in $orderby & $orderby
3
+ hash: 350c08b3a8a8877290f1c753a57e86404f0d9548
4
+ body: ""
5
+ footer:
6
+ Change-type: minor
7
+ change-type: minor
8
+ See: https://github.com/balena-io/pinejs/issues/577
9
+ see: https://github.com/balena-io/pinejs/issues/577
10
+ Signed-off-by: Thodoris Greasidis <thodoris@balena.io>
11
+ signed-off-by: Thodoris Greasidis <thodoris@balena.io>
12
+ author: Thodoris Greasidis
13
+ version: 2.4.0
14
+ title: "'Add support for with nested in & '"
15
+ date: 2022-09-15T07:00:40.239Z
1
16
  - commits:
2
17
  - subject: Add source map
3
18
  hash: a6bb5e67fac1cdcc69491800ad042f003fa13556
@@ -8,7 +23,7 @@
8
23
  author: Pagan Gazzard
9
24
  version: 2.3.0
10
25
  title: "'Add source map'"
11
- date: 2022-06-06T16:33:40.752Z
26
+ date: 2022-06-06T15:59:20.389Z
12
27
  - commits:
13
28
  - subject: Update dependencies
14
29
  hash: e63884d3e86c2654fd601cacc53f3e8e61bb1d87
package/CHANGELOG.md CHANGED
@@ -4,6 +4,11 @@ All notable changes to this project will be documented in this file
4
4
  automatically by Versionist. DO NOT EDIT THIS FILE MANUALLY!
5
5
  This project adheres to [Semantic Versioning](http://semver.org/).
6
6
 
7
+ # v2.4.0
8
+ ## (2022-09-15)
9
+
10
+ * Add support for `/$count` with nested `$filter` in $orderby & $orderby [Thodoris Greasidis]
11
+
7
12
  # v2.3.0
8
13
  ## (2022-06-06)
9
14
 
package/odata-parser.js CHANGED
@@ -472,77 +472,78 @@ function peg$parse(input, options) {
472
472
  var peg$f43 = function(methodName) { return [] };
473
473
  var peg$f44 = function(methodName, args) { return [ 'call', { args: args, method: methodName } ] };
474
474
  var peg$f45 = function(path, paths) { return [path, ...paths] };
475
- var peg$f46 = function(resource, property) { return true };
476
- var peg$f47 = function(resource, property, count) { return { name: resource, property, count } };
477
- var peg$f48 = function(path, paths) { return [path, ...paths] };
478
- var peg$f49 = function(resource) { return true };
479
- var peg$f50 = function(resource, count, option, options) { return CollapseObjectArray([option, ...options]) };
480
- var peg$f51 = function(resource, count) { return {} };
481
- var peg$f52 = function(resource, count, optionsObj, next) { return { name: resource, property: next, count: count, options: optionsObj} };
482
- var peg$f53 = function(resource, next) { return { name: resource, property: next } };
483
- var peg$f54 = function(resource, lambda) { return { name: resource, lambda: lambda } };
484
- var peg$f55 = function(resource, method) { return { name: resource, method: method } };
485
- var peg$f56 = function(keyBind, keyBinds) { return CollapseObjectArray([keyBind, ...keyBinds]) };
486
- var peg$f57 = function(name, value) { return { name, value }};
487
- var peg$f58 = function(resource) { return { resource } };
488
- var peg$f59 = function(result, key) { result.key = key };
489
- var peg$f60 = function(result, link) {result.link = link};
490
- var peg$f61 = function(result, property) {result.property = property};
491
- var peg$f62 = function(result) {result.count = true};
492
- var peg$f63 = function(result) { return result };
493
- var peg$f64 = function(result, link) {result.link = link};
494
- var peg$f65 = function(result, property) {result.property = property};
495
- var peg$f66 = function(result) { return result };
496
- var peg$f67 = function(result, options) {result.options = options};
497
- var peg$f68 = function(result) { return result };
498
- var peg$f69 = function(resource) { return { resource } };
499
- var peg$f70 = function(result, key) { result.key = key };
500
- var peg$f71 = function(result, link) {result.link = link};
501
- var peg$f72 = function(result, property) {result.property = property};
502
- var peg$f73 = function(result) {result.count = true};
503
- var peg$f74 = function(result, options) {result.options = options};
504
- var peg$f75 = function(result) { return result };
505
- var peg$f76 = function(resourceName) { return decodeURIComponent(resourceName) };
506
- var peg$f77 = function(sign, d) { return Number(sign + d) };
507
- var peg$f78 = function(d) { return parseInt(d, 10) };
508
- var peg$f79 = function() { return null };
509
- var peg$f80 = function() { return true };
510
- var peg$f81 = function() { return false };
511
- var peg$f82 = function(sign, day, hour, minute, second) {return hour || minute || second};
512
- var peg$f83 = function(sign, day, hour, minute, second) {
475
+ var peg$f46 = function(resource, property, option) { return CollapseObjectArray([option]) };
476
+ var peg$f47 = function(resource, property, optionsObj) { return { count: true, options: optionsObj } };
477
+ var peg$f48 = function(resource, property, countOptions) { return { name: resource, property, ...countOptions } };
478
+ var peg$f49 = function(path, paths) { return [path, ...paths] };
479
+ var peg$f50 = function(resource) { return true };
480
+ var peg$f51 = function(resource, count, option, options) { return CollapseObjectArray([option, ...options]) };
481
+ var peg$f52 = function(resource, count) { return {} };
482
+ var peg$f53 = function(resource, count, optionsObj, next) { return { name: resource, property: next, count: count, options: optionsObj} };
483
+ var peg$f54 = function(resource, next) { return { name: resource, property: next } };
484
+ var peg$f55 = function(resource, lambda) { return { name: resource, lambda: lambda } };
485
+ var peg$f56 = function(resource, method) { return { name: resource, method: method } };
486
+ var peg$f57 = function(keyBind, keyBinds) { return CollapseObjectArray([keyBind, ...keyBinds]) };
487
+ var peg$f58 = function(name, value) { return { name, value }};
488
+ var peg$f59 = function(resource) { return { resource } };
489
+ var peg$f60 = function(result, key) { result.key = key };
490
+ var peg$f61 = function(result, link) {result.link = link};
491
+ var peg$f62 = function(result, property) {result.property = property};
492
+ var peg$f63 = function(result) {result.count = true};
493
+ var peg$f64 = function(result) { return result };
494
+ var peg$f65 = function(result, link) {result.link = link};
495
+ var peg$f66 = function(result, property) {result.property = property};
496
+ var peg$f67 = function(result) { return result };
497
+ var peg$f68 = function(result, options) {result.options = options};
498
+ var peg$f69 = function(result) { return result };
499
+ var peg$f70 = function(resource) { return { resource } };
500
+ var peg$f71 = function(result, key) { result.key = key };
501
+ var peg$f72 = function(result, link) {result.link = link};
502
+ var peg$f73 = function(result, property) {result.property = property};
503
+ var peg$f74 = function(result) {result.count = true};
504
+ var peg$f75 = function(result, options) {result.options = options};
505
+ var peg$f76 = function(result) { return result };
506
+ var peg$f77 = function(resourceName) { return decodeURIComponent(resourceName) };
507
+ var peg$f78 = function(sign, d) { return Number(sign + d) };
508
+ var peg$f79 = function(d) { return parseInt(d, 10) };
509
+ var peg$f80 = function() { return null };
510
+ var peg$f81 = function() { return true };
511
+ var peg$f82 = function() { return false };
512
+ var peg$f83 = function(sign, day, hour, minute, second) {return hour || minute || second};
513
+ var peg$f84 = function(sign, day, hour, minute, second) {
513
514
  return {
514
515
  hour: hour || undefined,
515
516
  minute: minute || undefined,
516
517
  second: second || undefined
517
518
  }
518
519
  };
519
- var peg$f84 = function(sign, day, time) {return day || time};
520
- var peg$f85 = function(sign, day, time) { return {
520
+ var peg$f85 = function(sign, day, time) {return day || time};
521
+ var peg$f86 = function(sign, day, time) { return {
521
522
  negative: sign === '-',
522
523
  day: day || undefined,
523
524
  hour: time ? time.hour : undefined,
524
525
  minute: time ? time.minute : undefined,
525
526
  second: time ? time.second : undefined,
526
527
  } };
527
- var peg$f86 = function(d) { return Number(d) };
528
- var peg$f87 = function(text) { return decodeURIComponent(text) };
529
- var peg$f88 = function() { return '+' };
530
- var peg$f89 = function() { return '\'' };
531
- var peg$f90 = function(text) { return decodeURIComponent(text.join('')) };
532
- var peg$f91 = function(param) { return { bind: '@' + param } };
533
- var peg$f92 = function(n) { return Bind('Real', n) };
534
- var peg$f93 = function() { return 'Date Time' };
535
- var peg$f94 = function() { return 'Date' };
536
- var peg$f95 = function(type, date) { return Date.parse(date) };
537
- var peg$f96 = function(type, date) { return isNaN(date) };
538
- var peg$f97 = function(type, date) { return [type, date] };
539
- var peg$f98 = function(d) { return Bind(d[0], d[1]) };
540
- var peg$f99 = function(b) { return Bind('Boolean', b) };
541
- var peg$f100 = function(resource) {
528
+ var peg$f87 = function(d) { return Number(d) };
529
+ var peg$f88 = function(text) { return decodeURIComponent(text) };
530
+ var peg$f89 = function() { return '+' };
531
+ var peg$f90 = function() { return '\'' };
532
+ var peg$f91 = function(text) { return decodeURIComponent(text.join('')) };
533
+ var peg$f92 = function(param) { return { bind: '@' + param } };
534
+ var peg$f93 = function(n) { return Bind('Real', n) };
535
+ var peg$f94 = function() { return 'Date Time' };
536
+ var peg$f95 = function() { return 'Date' };
537
+ var peg$f96 = function(type, date) { return Date.parse(date) };
538
+ var peg$f97 = function(type, date) { return isNaN(date) };
539
+ var peg$f98 = function(type, date) { return [type, date] };
540
+ var peg$f99 = function(d) { return Bind(d[0], d[1]) };
541
+ var peg$f100 = function(b) { return Bind('Boolean', b) };
542
+ var peg$f101 = function(resource) {
542
543
  var bind = Bind('ContentReference', resource)
543
544
  return { resource: bind, key: bind }
544
545
  };
545
- var peg$f101 = function(t) { return Bind('Text', t) };
546
+ var peg$f102 = function(t) { return Bind('Text', t) };
546
547
  var peg$currPos = 0;
547
548
  var peg$savedPos = 0;
548
549
  var peg$posDetailsCache = [{ line: 1, column: 1 }];
@@ -3259,7 +3260,7 @@ function peg$parse(input, options) {
3259
3260
  }
3260
3261
 
3261
3262
  function peg$parsePropertyPath() {
3262
- var s0, s1, s2, s3, s4;
3263
+ var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;
3263
3264
 
3264
3265
  var key = peg$currPos * 62 + 31;
3265
3266
  var cached = peg$resultsCache[key];
@@ -3305,15 +3306,66 @@ function peg$parse(input, options) {
3305
3306
  if (peg$silentFails === 0) { peg$fail(peg$e84); }
3306
3307
  }
3307
3308
  if (s4 !== peg$FAILED) {
3309
+ s5 = peg$currPos;
3310
+ if (input.charCodeAt(peg$currPos) === 40) {
3311
+ s6 = peg$c32;
3312
+ peg$currPos++;
3313
+ } else {
3314
+ s6 = peg$FAILED;
3315
+ if (peg$silentFails === 0) { peg$fail(peg$e34); }
3316
+ }
3317
+ if (s6 !== peg$FAILED) {
3318
+ s7 = peg$currPos;
3319
+ s8 = peg$parseDollar();
3320
+ if (s8 !== peg$FAILED) {
3321
+ s9 = peg$parseFilterByOption();
3322
+ if (s9 !== peg$FAILED) {
3323
+ peg$savedPos = s7;
3324
+ s7 = peg$f46(s1, s2, s9);
3325
+ } else {
3326
+ peg$currPos = s7;
3327
+ s7 = peg$FAILED;
3328
+ }
3329
+ } else {
3330
+ peg$currPos = s7;
3331
+ s7 = peg$FAILED;
3332
+ }
3333
+ if (s7 !== peg$FAILED) {
3334
+ if (input.charCodeAt(peg$currPos) === 41) {
3335
+ s8 = peg$c33;
3336
+ peg$currPos++;
3337
+ } else {
3338
+ s8 = peg$FAILED;
3339
+ if (peg$silentFails === 0) { peg$fail(peg$e35); }
3340
+ }
3341
+ if (s8 !== peg$FAILED) {
3342
+ s5 = s7;
3343
+ } else {
3344
+ peg$currPos = s5;
3345
+ s5 = peg$FAILED;
3346
+ }
3347
+ } else {
3348
+ peg$currPos = s5;
3349
+ s5 = peg$FAILED;
3350
+ }
3351
+ } else {
3352
+ peg$currPos = s5;
3353
+ s5 = peg$FAILED;
3354
+ }
3355
+ if (s5 === peg$FAILED) {
3356
+ s5 = null;
3357
+ }
3308
3358
  peg$savedPos = s3;
3309
- s4 = peg$f46(s1, s2);
3359
+ s3 = peg$f47(s1, s2, s5);
3360
+ } else {
3361
+ peg$currPos = s3;
3362
+ s3 = peg$FAILED;
3310
3363
  }
3311
- s3 = s4;
3312
3364
  if (s3 === peg$FAILED) {
3313
3365
  s3 = null;
3314
3366
  }
3315
3367
  peg$savedPos = s0;
3316
- s0 = peg$f47(s1, s2, s3);
3368
+ s0 = peg$f48(s1, s2, s3);
3317
3369
  } else {
3318
3370
  peg$currPos = s0;
3319
3371
  s0 = peg$FAILED;
@@ -3384,7 +3436,7 @@ function peg$parse(input, options) {
3384
3436
  }
3385
3437
  }
3386
3438
  peg$savedPos = s0;
3387
- s0 = peg$f48(s1, s2);
3439
+ s0 = peg$f49(s1, s2);
3388
3440
  } else {
3389
3441
  peg$currPos = s0;
3390
3442
  s0 = peg$FAILED;
@@ -3420,7 +3472,7 @@ function peg$parse(input, options) {
3420
3472
  }
3421
3473
  if (s3 !== peg$FAILED) {
3422
3474
  peg$savedPos = s2;
3423
- s3 = peg$f49(s1);
3475
+ s3 = peg$f50(s1);
3424
3476
  }
3425
3477
  s2 = s3;
3426
3478
  if (s2 === peg$FAILED) {
@@ -3483,7 +3535,7 @@ function peg$parse(input, options) {
3483
3535
  }
3484
3536
  }
3485
3537
  peg$savedPos = s5;
3486
- s5 = peg$f50(s1, s2, s6, s7);
3538
+ s5 = peg$f51(s1, s2, s6, s7);
3487
3539
  } else {
3488
3540
  peg$currPos = s5;
3489
3541
  s5 = peg$FAILED;
@@ -3492,7 +3544,7 @@ function peg$parse(input, options) {
3492
3544
  s5 = peg$currPos;
3493
3545
  s6 = '';
3494
3546
  peg$savedPos = s5;
3495
- s6 = peg$f51(s1, s2);
3547
+ s6 = peg$f52(s1, s2);
3496
3548
  s5 = s6;
3497
3549
  }
3498
3550
  if (s5 !== peg$FAILED) {
@@ -3544,7 +3596,7 @@ function peg$parse(input, options) {
3544
3596
  s4 = null;
3545
3597
  }
3546
3598
  peg$savedPos = s0;
3547
- s0 = peg$f52(s1, s2, s3, s4);
3599
+ s0 = peg$f53(s1, s2, s3, s4);
3548
3600
  } else {
3549
3601
  peg$currPos = s0;
3550
3602
  s0 = peg$FAILED;
@@ -3582,7 +3634,7 @@ function peg$parse(input, options) {
3582
3634
  s4 = peg$parseLambdaPropertyPath();
3583
3635
  if (s4 !== peg$FAILED) {
3584
3636
  peg$savedPos = s3;
3585
- s4 = peg$f53(s1, s4);
3637
+ s4 = peg$f54(s1, s4);
3586
3638
  }
3587
3639
  s3 = s4;
3588
3640
  if (s3 === peg$FAILED) {
@@ -3590,7 +3642,7 @@ function peg$parse(input, options) {
3590
3642
  s4 = peg$parseLambdaMethodCall();
3591
3643
  if (s4 !== peg$FAILED) {
3592
3644
  peg$savedPos = s3;
3593
- s4 = peg$f54(s1, s4);
3645
+ s4 = peg$f55(s1, s4);
3594
3646
  }
3595
3647
  s3 = s4;
3596
3648
  if (s3 === peg$FAILED) {
@@ -3598,7 +3650,7 @@ function peg$parse(input, options) {
3598
3650
  s4 = peg$parseResourceMethodCall();
3599
3651
  if (s4 !== peg$FAILED) {
3600
3652
  peg$savedPos = s3;
3601
- s4 = peg$f55(s1, s4);
3653
+ s4 = peg$f56(s1, s4);
3602
3654
  }
3603
3655
  s3 = s4;
3604
3656
  }
@@ -3694,7 +3746,7 @@ function peg$parse(input, options) {
3694
3746
  }
3695
3747
  }
3696
3748
  peg$savedPos = s2;
3697
- s2 = peg$f56(s3, s4);
3749
+ s2 = peg$f57(s3, s4);
3698
3750
  } else {
3699
3751
  peg$currPos = s2;
3700
3752
  s2 = peg$FAILED;
@@ -3754,7 +3806,7 @@ function peg$parse(input, options) {
3754
3806
  s3 = peg$parseKeyBind();
3755
3807
  if (s3 !== peg$FAILED) {
3756
3808
  peg$savedPos = s0;
3757
- s0 = peg$f57(s1, s3);
3809
+ s0 = peg$f58(s1, s3);
3758
3810
  } else {
3759
3811
  peg$currPos = s0;
3760
3812
  s0 = peg$FAILED;
@@ -3862,7 +3914,7 @@ function peg$parse(input, options) {
3862
3914
  s4 = peg$parseResourceName();
3863
3915
  if (s4 !== peg$FAILED) {
3864
3916
  peg$savedPos = s3;
3865
- s4 = peg$f58(s4);
3917
+ s4 = peg$f59(s4);
3866
3918
  }
3867
3919
  s3 = s4;
3868
3920
  if (s3 !== peg$FAILED) {
@@ -3871,7 +3923,7 @@ function peg$parse(input, options) {
3871
3923
  s6 = peg$parseKey();
3872
3924
  if (s6 !== peg$FAILED) {
3873
3925
  peg$savedPos = s5;
3874
- s6 = peg$f59(s3, s6);
3926
+ s6 = peg$f60(s3, s6);
3875
3927
  }
3876
3928
  s5 = s6;
3877
3929
  if (s5 !== peg$FAILED) {
@@ -3879,7 +3931,7 @@ function peg$parse(input, options) {
3879
3931
  s7 = peg$parseLinks();
3880
3932
  if (s7 !== peg$FAILED) {
3881
3933
  peg$savedPos = s6;
3882
- s7 = peg$f60(s3, s7);
3934
+ s7 = peg$f61(s3, s7);
3883
3935
  }
3884
3936
  s6 = s7;
3885
3937
  if (s6 === peg$FAILED) {
@@ -3887,7 +3939,7 @@ function peg$parse(input, options) {
3887
3939
  s7 = peg$parseSubPathSegment();
3888
3940
  if (s7 !== peg$FAILED) {
3889
3941
  peg$savedPos = s6;
3890
- s7 = peg$f61(s3, s7);
3942
+ s7 = peg$f62(s3, s7);
3891
3943
  }
3892
3944
  s6 = s7;
3893
3945
  }
@@ -3911,7 +3963,7 @@ function peg$parse(input, options) {
3911
3963
  }
3912
3964
  if (s5 !== peg$FAILED) {
3913
3965
  peg$savedPos = s4;
3914
- s5 = peg$f62(s3);
3966
+ s5 = peg$f63(s3);
3915
3967
  }
3916
3968
  s4 = s5;
3917
3969
  }
@@ -3919,7 +3971,7 @@ function peg$parse(input, options) {
3919
3971
  s4 = null;
3920
3972
  }
3921
3973
  peg$savedPos = s1;
3922
- s1 = peg$f63(s3);
3974
+ s1 = peg$f64(s3);
3923
3975
  } else {
3924
3976
  peg$currPos = s1;
3925
3977
  s1 = peg$FAILED;
@@ -3936,7 +3988,7 @@ function peg$parse(input, options) {
3936
3988
  s4 = peg$parseLinks();
3937
3989
  if (s4 !== peg$FAILED) {
3938
3990
  peg$savedPos = s3;
3939
- s4 = peg$f64(s2, s4);
3991
+ s4 = peg$f65(s2, s4);
3940
3992
  }
3941
3993
  s3 = s4;
3942
3994
  if (s3 === peg$FAILED) {
@@ -3944,7 +3996,7 @@ function peg$parse(input, options) {
3944
3996
  s4 = peg$parseSubPathSegment();
3945
3997
  if (s4 !== peg$FAILED) {
3946
3998
  peg$savedPos = s3;
3947
- s4 = peg$f65(s2, s4);
3999
+ s4 = peg$f66(s2, s4);
3948
4000
  }
3949
4001
  s3 = s4;
3950
4002
  }
@@ -3952,7 +4004,7 @@ function peg$parse(input, options) {
3952
4004
  s3 = null;
3953
4005
  }
3954
4006
  peg$savedPos = s1;
3955
- s1 = peg$f66(s2);
4007
+ s1 = peg$f67(s2);
3956
4008
  } else {
3957
4009
  peg$currPos = s1;
3958
4010
  s1 = peg$FAILED;
@@ -3972,7 +4024,7 @@ function peg$parse(input, options) {
3972
4024
  s5 = peg$parseQueryOptions();
3973
4025
  if (s5 !== peg$FAILED) {
3974
4026
  peg$savedPos = s4;
3975
- s5 = peg$f67(s1, s5);
4027
+ s5 = peg$f68(s1, s5);
3976
4028
  }
3977
4029
  s4 = s5;
3978
4030
  if (s4 === peg$FAILED) {
@@ -3988,7 +4040,7 @@ function peg$parse(input, options) {
3988
4040
  s2 = null;
3989
4041
  }
3990
4042
  peg$savedPos = s0;
3991
- s0 = peg$f68(s1);
4043
+ s0 = peg$f69(s1);
3992
4044
  } else {
3993
4045
  peg$currPos = s0;
3994
4046
  s0 = peg$FAILED;
@@ -4024,7 +4076,7 @@ function peg$parse(input, options) {
4024
4076
  s3 = peg$parseResourceName();
4025
4077
  if (s3 !== peg$FAILED) {
4026
4078
  peg$savedPos = s2;
4027
- s3 = peg$f69(s3);
4079
+ s3 = peg$f70(s3);
4028
4080
  }
4029
4081
  s2 = s3;
4030
4082
  if (s2 !== peg$FAILED) {
@@ -4032,7 +4084,7 @@ function peg$parse(input, options) {
4032
4084
  s4 = peg$parseKey();
4033
4085
  if (s4 !== peg$FAILED) {
4034
4086
  peg$savedPos = s3;
4035
- s4 = peg$f70(s2, s4);
4087
+ s4 = peg$f71(s2, s4);
4036
4088
  }
4037
4089
  s3 = s4;
4038
4090
  if (s3 === peg$FAILED) {
@@ -4050,7 +4102,7 @@ function peg$parse(input, options) {
4050
4102
  s6 = peg$parseSubPathSegment();
4051
4103
  if (s6 !== peg$FAILED) {
4052
4104
  peg$savedPos = s4;
4053
- s4 = peg$f71(s2, s6);
4105
+ s4 = peg$f72(s2, s6);
4054
4106
  } else {
4055
4107
  peg$currPos = s4;
4056
4108
  s4 = peg$FAILED;
@@ -4064,7 +4116,7 @@ function peg$parse(input, options) {
4064
4116
  s5 = peg$parseSubPathSegment();
4065
4117
  if (s5 !== peg$FAILED) {
4066
4118
  peg$savedPos = s4;
4067
- s5 = peg$f72(s2, s5);
4119
+ s5 = peg$f73(s2, s5);
4068
4120
  }
4069
4121
  s4 = s5;
4070
4122
  }
@@ -4081,7 +4133,7 @@ function peg$parse(input, options) {
4081
4133
  }
4082
4134
  if (s6 !== peg$FAILED) {
4083
4135
  peg$savedPos = s5;
4084
- s6 = peg$f73(s2);
4136
+ s6 = peg$f74(s2);
4085
4137
  }
4086
4138
  s5 = s6;
4087
4139
  if (s5 === peg$FAILED) {
@@ -4100,7 +4152,7 @@ function peg$parse(input, options) {
4100
4152
  s9 = peg$parseQueryOptions();
4101
4153
  if (s9 !== peg$FAILED) {
4102
4154
  peg$savedPos = s8;
4103
- s9 = peg$f74(s2, s9);
4155
+ s9 = peg$f75(s2, s9);
4104
4156
  }
4105
4157
  s8 = s9;
4106
4158
  if (s8 === peg$FAILED) {
@@ -4116,7 +4168,7 @@ function peg$parse(input, options) {
4116
4168
  s6 = null;
4117
4169
  }
4118
4170
  peg$savedPos = s0;
4119
- s0 = peg$f75(s2);
4171
+ s0 = peg$f76(s2);
4120
4172
  } else {
4121
4173
  peg$currPos = s0;
4122
4174
  s0 = peg$FAILED;
@@ -4174,7 +4226,7 @@ function peg$parse(input, options) {
4174
4226
  }
4175
4227
  if (s1 !== peg$FAILED) {
4176
4228
  peg$savedPos = s0;
4177
- s1 = peg$f76(s1);
4229
+ s1 = peg$f77(s1);
4178
4230
  }
4179
4231
  s0 = s1;
4180
4232
 
@@ -4281,7 +4333,7 @@ function peg$parse(input, options) {
4281
4333
  }
4282
4334
  if (s2 !== peg$FAILED) {
4283
4335
  peg$savedPos = s0;
4284
- s0 = peg$f77(s1, s2);
4336
+ s0 = peg$f78(s1, s2);
4285
4337
  } else {
4286
4338
  peg$currPos = s0;
4287
4339
  s0 = peg$FAILED;
@@ -4339,7 +4391,7 @@ function peg$parse(input, options) {
4339
4391
  }
4340
4392
  if (s1 !== peg$FAILED) {
4341
4393
  peg$savedPos = s0;
4342
- s1 = peg$f78(s1);
4394
+ s1 = peg$f79(s1);
4343
4395
  }
4344
4396
  s0 = s1;
4345
4397
 
@@ -4370,7 +4422,7 @@ function peg$parse(input, options) {
4370
4422
  }
4371
4423
  if (s1 !== peg$FAILED) {
4372
4424
  peg$savedPos = s0;
4373
- s1 = peg$f79();
4425
+ s1 = peg$f80();
4374
4426
  }
4375
4427
  s0 = s1;
4376
4428
 
@@ -4401,7 +4453,7 @@ function peg$parse(input, options) {
4401
4453
  }
4402
4454
  if (s1 !== peg$FAILED) {
4403
4455
  peg$savedPos = s0;
4404
- s1 = peg$f80();
4456
+ s1 = peg$f81();
4405
4457
  }
4406
4458
  s0 = s1;
4407
4459
  if (s0 === peg$FAILED) {
@@ -4415,7 +4467,7 @@ function peg$parse(input, options) {
4415
4467
  }
4416
4468
  if (s1 !== peg$FAILED) {
4417
4469
  peg$savedPos = s0;
4418
- s1 = peg$f81();
4470
+ s1 = peg$f82();
4419
4471
  }
4420
4472
  s0 = s1;
4421
4473
  }
@@ -4560,7 +4612,7 @@ function peg$parse(input, options) {
4560
4612
  s10 = null;
4561
4613
  }
4562
4614
  peg$savedPos = peg$currPos;
4563
- s11 = peg$f82(s3, s5, s8, s9, s10);
4615
+ s11 = peg$f83(s3, s5, s8, s9, s10);
4564
4616
  if (s11) {
4565
4617
  s11 = undefined;
4566
4618
  } else {
@@ -4568,7 +4620,7 @@ function peg$parse(input, options) {
4568
4620
  }
4569
4621
  if (s11 !== peg$FAILED) {
4570
4622
  peg$savedPos = s6;
4571
- s6 = peg$f83(s3, s5, s8, s9, s10);
4623
+ s6 = peg$f84(s3, s5, s8, s9, s10);
4572
4624
  } else {
4573
4625
  peg$currPos = s6;
4574
4626
  s6 = peg$FAILED;
@@ -4581,7 +4633,7 @@ function peg$parse(input, options) {
4581
4633
  s6 = null;
4582
4634
  }
4583
4635
  peg$savedPos = peg$currPos;
4584
- s7 = peg$f84(s3, s5, s6);
4636
+ s7 = peg$f85(s3, s5, s6);
4585
4637
  if (s7) {
4586
4638
  s7 = undefined;
4587
4639
  } else {
@@ -4591,7 +4643,7 @@ function peg$parse(input, options) {
4591
4643
  s8 = peg$parseApostrophe();
4592
4644
  if (s8 !== peg$FAILED) {
4593
4645
  peg$savedPos = s0;
4594
- s0 = peg$f85(s3, s5, s6);
4646
+ s0 = peg$f86(s3, s5, s6);
4595
4647
  } else {
4596
4648
  peg$currPos = s0;
4597
4649
  s0 = peg$FAILED;
@@ -4712,7 +4764,7 @@ function peg$parse(input, options) {
4712
4764
  }
4713
4765
  if (s1 !== peg$FAILED) {
4714
4766
  peg$savedPos = s0;
4715
- s1 = peg$f86(s1);
4767
+ s1 = peg$f87(s1);
4716
4768
  }
4717
4769
  s0 = s1;
4718
4770
  if (s0 === peg$FAILED) {
@@ -4758,7 +4810,7 @@ function peg$parse(input, options) {
4758
4810
  }
4759
4811
  s1 = input.substring(s1, peg$currPos);
4760
4812
  peg$savedPos = s0;
4761
- s1 = peg$f87(s1);
4813
+ s1 = peg$f88(s1);
4762
4814
  s0 = s1;
4763
4815
 
4764
4816
  peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };
@@ -4796,7 +4848,7 @@ function peg$parse(input, options) {
4796
4848
  }
4797
4849
  if (s1 !== peg$FAILED) {
4798
4850
  peg$savedPos = s0;
4799
- s1 = peg$f88();
4851
+ s1 = peg$f89();
4800
4852
  }
4801
4853
  s0 = s1;
4802
4854
  if (s0 === peg$FAILED) {
@@ -4848,7 +4900,7 @@ function peg$parse(input, options) {
4848
4900
  }
4849
4901
  if (s1 !== peg$FAILED) {
4850
4902
  peg$savedPos = s0;
4851
- s1 = peg$f89();
4903
+ s1 = peg$f90();
4852
4904
  }
4853
4905
  s0 = s1;
4854
4906
  }
@@ -4970,7 +5022,7 @@ function peg$parse(input, options) {
4970
5022
  s3 = peg$parseApostrophe();
4971
5023
  if (s3 !== peg$FAILED) {
4972
5024
  peg$savedPos = s0;
4973
- s0 = peg$f90(s2);
5025
+ s0 = peg$f91(s2);
4974
5026
  } else {
4975
5027
  peg$currPos = s0;
4976
5028
  s0 = peg$FAILED;
@@ -5009,7 +5061,7 @@ function peg$parse(input, options) {
5009
5061
  s2 = peg$parseResourceName();
5010
5062
  if (s2 !== peg$FAILED) {
5011
5063
  peg$savedPos = s0;
5012
- s0 = peg$f91(s2);
5064
+ s0 = peg$f92(s2);
5013
5065
  } else {
5014
5066
  peg$currPos = s0;
5015
5067
  s0 = peg$FAILED;
@@ -5040,7 +5092,7 @@ function peg$parse(input, options) {
5040
5092
  s1 = peg$parseNumber();
5041
5093
  if (s1 !== peg$FAILED) {
5042
5094
  peg$savedPos = s0;
5043
- s1 = peg$f92(s1);
5095
+ s1 = peg$f93(s1);
5044
5096
  }
5045
5097
  s0 = s1;
5046
5098
 
@@ -5072,7 +5124,7 @@ function peg$parse(input, options) {
5072
5124
  }
5073
5125
  if (s2 !== peg$FAILED) {
5074
5126
  peg$savedPos = s1;
5075
- s2 = peg$f93();
5127
+ s2 = peg$f94();
5076
5128
  }
5077
5129
  s1 = s2;
5078
5130
  if (s1 === peg$FAILED) {
@@ -5086,7 +5138,7 @@ function peg$parse(input, options) {
5086
5138
  }
5087
5139
  if (s2 !== peg$FAILED) {
5088
5140
  peg$savedPos = s1;
5089
- s2 = peg$f94();
5141
+ s2 = peg$f95();
5090
5142
  }
5091
5143
  s1 = s2;
5092
5144
  }
@@ -5095,12 +5147,12 @@ function peg$parse(input, options) {
5095
5147
  s3 = peg$parseQuotedText();
5096
5148
  if (s3 !== peg$FAILED) {
5097
5149
  peg$savedPos = s2;
5098
- s3 = peg$f95(s1, s3);
5150
+ s3 = peg$f96(s1, s3);
5099
5151
  }
5100
5152
  s2 = s3;
5101
5153
  if (s2 !== peg$FAILED) {
5102
5154
  peg$savedPos = peg$currPos;
5103
- s3 = peg$f96(s1, s2);
5155
+ s3 = peg$f97(s1, s2);
5104
5156
  if (s3) {
5105
5157
  s3 = peg$FAILED;
5106
5158
  } else {
@@ -5108,7 +5160,7 @@ function peg$parse(input, options) {
5108
5160
  }
5109
5161
  if (s3 !== peg$FAILED) {
5110
5162
  peg$savedPos = s0;
5111
- s0 = peg$f97(s1, s2);
5163
+ s0 = peg$f98(s1, s2);
5112
5164
  } else {
5113
5165
  peg$currPos = s0;
5114
5166
  s0 = peg$FAILED;
@@ -5143,7 +5195,7 @@ function peg$parse(input, options) {
5143
5195
  s1 = peg$parseDate();
5144
5196
  if (s1 !== peg$FAILED) {
5145
5197
  peg$savedPos = s0;
5146
- s1 = peg$f98(s1);
5198
+ s1 = peg$f99(s1);
5147
5199
  }
5148
5200
  s0 = s1;
5149
5201
 
@@ -5168,7 +5220,7 @@ function peg$parse(input, options) {
5168
5220
  s1 = peg$parseBoolean();
5169
5221
  if (s1 !== peg$FAILED) {
5170
5222
  peg$savedPos = s0;
5171
- s1 = peg$f99(s1);
5223
+ s1 = peg$f100(s1);
5172
5224
  }
5173
5225
  s0 = s1;
5174
5226
 
@@ -5201,7 +5253,7 @@ function peg$parse(input, options) {
5201
5253
  s2 = peg$parseResourceName();
5202
5254
  if (s2 !== peg$FAILED) {
5203
5255
  peg$savedPos = s0;
5204
- s0 = peg$f100(s2);
5256
+ s0 = peg$f101(s2);
5205
5257
  } else {
5206
5258
  peg$currPos = s0;
5207
5259
  s0 = peg$FAILED;
@@ -5232,7 +5284,7 @@ function peg$parse(input, options) {
5232
5284
  s1 = peg$parseQuotedText();
5233
5285
  if (s1 !== peg$FAILED) {
5234
5286
  peg$savedPos = s0;
5235
- s1 = peg$f101(s1);
5287
+ s1 = peg$f102(s1);
5236
5288
  }
5237
5289
  s0 = s1;
5238
5290
 
@@ -458,11 +458,19 @@ PropertyPath =
458
458
  '/'
459
459
  @PropertyPath
460
460
  )?
461
- count:(
461
+ countOptions:(
462
462
  '/$count'
463
- { return true }
463
+ optionsObj:(
464
+ '('
465
+ @( Dollar
466
+ option:FilterByOption
467
+ { return CollapseObjectArray([option]) }
468
+ )
469
+ ')'
470
+ )?
471
+ { return { count: true, options: optionsObj } }
464
472
  )?
465
- { return { name: resource, property, count } }
473
+ { return { name: resource, property, ...countOptions } }
466
474
  ExpandPropertyPathList =
467
475
  path:ExpandPropertyPath
468
476
  paths:(
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@balena/odata-parser",
3
- "version": "2.3.0",
3
+ "version": "2.4.0",
4
4
  "description": "An OData parser written in OMeta",
5
5
  "main": "odata-parser.js",
6
6
  "scripts": {
@@ -42,6 +42,6 @@
42
42
  "_": "test/run.js"
43
43
  },
44
44
  "versionist": {
45
- "publishedAt": "2022-06-06T16:33:40.852Z"
45
+ "publishedAt": "2022-09-15T07:00:40.336Z"
46
46
  }
47
47
  }
package/test/filterby.js CHANGED
@@ -401,6 +401,53 @@ export default function (test) {
401
401
  assert.equal(result.options.$filter[2].bind, 0));
402
402
  });
403
403
 
404
+ test(
405
+ '$filter=Products/$count($filter=Price lt 5) ge 1',
406
+ [5, 1],
407
+ function (result) {
408
+ it('A filter should be present', () =>
409
+ assert.notEqual(result.options.$filter, null));
410
+
411
+ it("Filter should be an instance of 'ge'", () =>
412
+ assert.equal(result.options.$filter[0], 'ge'));
413
+
414
+ it('lhr should have the Product count', function () {
415
+ expect(result.options.$filter[1])
416
+ .to.have.property('name')
417
+ .that.equals('Products');
418
+ expect(result.options.$filter[1])
419
+ .to.have.property('count')
420
+ .that.equals(true);
421
+ });
422
+
423
+ it('count options are present on the Product count', () => {
424
+ assert.notEqual(result.options.$filter[1].options, null);
425
+ console.log('***', result.options.$filter[1].options);
426
+ });
427
+
428
+ it('A filter should be present on the Product count lhs', () =>
429
+ assert.notEqual(result.options.$filter[1].options.$filter, null));
430
+
431
+ it(`has a Product count filter that is an instance of 'ge'`, () =>
432
+ assert.equal(result.options.$filter[1].options.$filter[0], 'lt'));
433
+
434
+ it(`has an lhs on the Product count filter that is an instance of 'ge'`, () => {
435
+ expect(result.options.$filter[1].options.$filter[1])
436
+ .to.have.property('name')
437
+ .that.equals('Price');
438
+ });
439
+
440
+ it(`has an rhs on the Product count filter that is $0`, () => {
441
+ expect(result.options.$filter[1].options.$filter[2])
442
+ .to.have.property('bind')
443
+ .that.equals(0);
444
+ });
445
+
446
+ it('rhr should be $1', () =>
447
+ assert.equal(result.options.$filter[2].bind, 1));
448
+ },
449
+ );
450
+
404
451
  test("$filter=note eq 'foobar'", ['foobar'], function (result) {
405
452
  it('A filter should be present', () =>
406
453
  assert.notEqual(result.options.$filter, null));
package/test/orderby.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import * as assert from 'assert';
2
+ import filterby from './filterby';
2
3
 
3
4
  export default (test) => {
4
5
  describe('$orderby', function () {
@@ -91,5 +92,46 @@ export default (test) => {
91
92
  );
92
93
  });
93
94
  });
95
+
96
+ test('$orderby=PropertyOne/$count', function (result) {
97
+ it('sort options are present on the result', () => {
98
+ assert.notEqual(result.options.$orderby, null);
99
+ });
100
+ it('sort options have property one name specified', () => {
101
+ assert.equal(result.options.$orderby.properties[0].name, 'PropertyOne');
102
+ });
103
+ it('has count defined', () => {
104
+ assert.equal(result.options.$orderby.properties[0].count, true);
105
+ });
106
+ });
107
+
108
+ const testFilterOption = function (nestedTest, input, ...optArgs) {
109
+ const expectation = optArgs.pop();
110
+ nestedTest(
111
+ `$orderby=PropertyOne/$count(${input})`,
112
+ ...optArgs,
113
+ function (result) {
114
+ it('sort options are present on the result', () => {
115
+ assert.notEqual(result.options.$orderby, null);
116
+ });
117
+ it('sort options have property one name specified', () => {
118
+ assert.equal(
119
+ result.options.$orderby.properties[0].name,
120
+ 'PropertyOne',
121
+ );
122
+ });
123
+ it('has count defined', () => {
124
+ assert.equal(result.options.$orderby.properties[0].count, true);
125
+ });
126
+ expectation(result?.options?.$orderby?.properties?.[0]);
127
+ },
128
+ );
129
+ };
130
+
131
+ const nestedFilterTest = testFilterOption.bind(null, test);
132
+ nestedFilterTest.skip = testFilterOption.bind(null, test.skip);
133
+ nestedFilterTest.only = testFilterOption.bind(null, test.only);
134
+
135
+ filterby(nestedFilterTest);
94
136
  });
95
137
  };