proto.io 0.0.205 → 0.0.207

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 (54) hide show
  1. package/dist/adapters/file/aliyun-oss.d.ts +3 -3
  2. package/dist/adapters/file/database.d.ts +2 -2
  3. package/dist/adapters/file/database.js +2 -2
  4. package/dist/adapters/file/database.js.map +1 -1
  5. package/dist/adapters/file/database.mjs +2 -2
  6. package/dist/adapters/file/database.mjs.map +1 -1
  7. package/dist/adapters/file/filesystem.d.ts +3 -3
  8. package/dist/adapters/file/google-cloud-storage.d.ts +3 -3
  9. package/dist/adapters/storage/progres.d.ts +9 -20
  10. package/dist/adapters/storage/progres.js +28 -109
  11. package/dist/adapters/storage/progres.js.map +1 -1
  12. package/dist/adapters/storage/progres.mjs +28 -109
  13. package/dist/adapters/storage/progres.mjs.map +1 -1
  14. package/dist/client.d.ts +3 -3
  15. package/dist/client.js +2 -1
  16. package/dist/client.js.map +1 -1
  17. package/dist/client.mjs +3 -2
  18. package/dist/client.mjs.map +1 -1
  19. package/dist/index.d.ts +3 -3
  20. package/dist/index.js +45 -109
  21. package/dist/index.js.map +1 -1
  22. package/dist/index.mjs +46 -110
  23. package/dist/index.mjs.map +1 -1
  24. package/dist/internals/{base-Cf7WkDhO.d.ts → base-DHkvlTFy.d.ts} +2 -2
  25. package/dist/internals/base-DHkvlTFy.d.ts.map +1 -0
  26. package/dist/internals/{chunk-ONaLyXL0.d.ts → chunk-C7kDLOLD.d.ts} +3 -3
  27. package/dist/internals/chunk-C7kDLOLD.d.ts.map +1 -0
  28. package/dist/internals/{index-DByHjIHI.js → index-BRzKDwPs.js} +64 -22
  29. package/dist/internals/index-BRzKDwPs.js.map +1 -0
  30. package/dist/internals/{index-DI-jPA6f.d.ts → index-CKcESGqE.d.ts} +3 -3
  31. package/dist/internals/index-CKcESGqE.d.ts.map +1 -0
  32. package/dist/internals/{index-C4vwSN74.js → index-CkAvNaAe.js} +240 -1
  33. package/dist/internals/index-CkAvNaAe.js.map +1 -0
  34. package/dist/internals/{index-DtCgllhg.mjs → index-DAkcqabS.mjs} +64 -22
  35. package/dist/internals/index-DAkcqabS.mjs.map +1 -0
  36. package/dist/internals/{index-Blw7vAq5.mjs → index-DlY33lfO.mjs} +240 -1
  37. package/dist/internals/index-DlY33lfO.mjs.map +1 -0
  38. package/dist/internals/{index-JdEs5VLY.d.ts → index-PLz89AWF.d.ts} +23 -31
  39. package/dist/internals/index-PLz89AWF.d.ts.map +1 -0
  40. package/dist/internals/{random-Dk3OhDNU.js → random-B0V0EnjP.js} +2 -2
  41. package/dist/internals/random-B0V0EnjP.js.map +1 -0
  42. package/dist/internals/{random-6nHcBOxn.mjs → random-ZgzzM5v_.mjs} +2 -2
  43. package/dist/internals/random-ZgzzM5v_.mjs.map +1 -0
  44. package/package.json +1 -1
  45. package/dist/internals/base-Cf7WkDhO.d.ts.map +0 -1
  46. package/dist/internals/chunk-ONaLyXL0.d.ts.map +0 -1
  47. package/dist/internals/index-Blw7vAq5.mjs.map +0 -1
  48. package/dist/internals/index-C4vwSN74.js.map +0 -1
  49. package/dist/internals/index-DByHjIHI.js.map +0 -1
  50. package/dist/internals/index-DI-jPA6f.d.ts.map +0 -1
  51. package/dist/internals/index-DtCgllhg.mjs.map +0 -1
  52. package/dist/internals/index-JdEs5VLY.d.ts.map +0 -1
  53. package/dist/internals/random-6nHcBOxn.mjs.map +0 -1
  54. package/dist/internals/random-Dk3OhDNU.js.map +0 -1
@@ -2,6 +2,7 @@
2
2
 
3
3
  var _ = require('lodash');
4
4
  var index = require('./index-B8TESzd9.js');
5
+ var Decimal = require('decimal.js');
5
6
 
6
7
  //
7
8
  // keys.ts
@@ -57,6 +58,127 @@ const TDistanceKeys = [
57
58
  '$rectilinearDistance',
58
59
  ];
59
60
 
61
+ //
62
+ // utils.ts
63
+ //
64
+ // The MIT License
65
+ // Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.
66
+ //
67
+ // Permission is hereby granted, free of charge, to any person obtaining a copy
68
+ // of this software and associated documentation files (the "Software"), to deal
69
+ // in the Software without restriction, including without limitation the rights
70
+ // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
71
+ // copies of the Software, and to permit persons to whom the Software is
72
+ // furnished to do so, subject to the following conditions:
73
+ //
74
+ // The above copyright notice and this permission notice shall be included in
75
+ // all copies or substantial portions of the Software.
76
+ //
77
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
78
+ // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
79
+ // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
80
+ // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
81
+ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
82
+ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
83
+ // THE SOFTWARE.
84
+ //
85
+ const isNum = (x) => _.isNumber(x) || x instanceof BigInt || x instanceof Decimal;
86
+ const equalNum = (lhs, rhs) => {
87
+ if (lhs instanceof Decimal && rhs instanceof Decimal) {
88
+ return lhs.equals(rhs);
89
+ }
90
+ else if (lhs instanceof Decimal) {
91
+ return lhs.equals(rhs instanceof BigInt ? rhs.toString() : rhs);
92
+ }
93
+ else if (rhs instanceof Decimal) {
94
+ return rhs.equals(lhs instanceof BigInt ? lhs.toString() : lhs);
95
+ }
96
+ else {
97
+ return lhs === rhs;
98
+ }
99
+ };
100
+ const lessNum = (lhs, rhs) => {
101
+ if (lhs instanceof Decimal && rhs instanceof Decimal) {
102
+ return lhs.lessThan(rhs);
103
+ }
104
+ else if (lhs instanceof Decimal) {
105
+ return lhs.lessThan(rhs instanceof BigInt ? rhs.toString() : rhs);
106
+ }
107
+ else if (rhs instanceof Decimal) {
108
+ return rhs.greaterThan(lhs instanceof BigInt ? lhs.toString() : lhs);
109
+ }
110
+ else {
111
+ return lhs < rhs;
112
+ }
113
+ };
114
+ const equal = (lhs, rhs) => {
115
+ if (_.isNil(lhs) && _.isNil(rhs))
116
+ return true;
117
+ if (isNum(lhs) && isNum(rhs))
118
+ return equalNum(lhs, rhs);
119
+ return _.isEqual(lhs, rhs);
120
+ };
121
+ const lessThan = (lhs, rhs) => {
122
+ if (_.isString(lhs) && _.isString(rhs))
123
+ return lhs < rhs;
124
+ if (_.isDate(lhs) && _.isDate(rhs))
125
+ return lhs < rhs;
126
+ if (isNum(lhs) && isNum(rhs))
127
+ return lessNum(lhs, rhs);
128
+ if (_.isArray(lhs) && _.isArray(rhs)) {
129
+ for (const i of _.range(Math.min(lhs.length, rhs.length))) {
130
+ if (lessThan(lhs[i], rhs[i]))
131
+ return true;
132
+ if (greaterThan(lhs[i], rhs[i]))
133
+ return false;
134
+ }
135
+ return lhs.length < rhs.length;
136
+ }
137
+ return false;
138
+ };
139
+ const greaterThan = (lhs, rhs) => {
140
+ return lessThan(rhs, lhs);
141
+ };
142
+ const lessThanOrEqual = (lhs, rhs) => {
143
+ return equal(lhs, rhs) || lessThan(lhs, rhs);
144
+ };
145
+ const greaterThanOrEqual = (lhs, rhs) => {
146
+ return lessThanOrEqual(rhs, lhs);
147
+ };
148
+ const isSubset = (lhs, rhs) => {
149
+ return _.some(lhs, l => _.every(rhs, r => equal(l, r)));
150
+ };
151
+ const isSuperset = (lhs, rhs) => {
152
+ return isSubset(rhs, lhs);
153
+ };
154
+ const isIntersect = (lhs, rhs) => {
155
+ return _.some(lhs, l => _.some(rhs, r => equal(l, r)));
156
+ };
157
+ const innerProduct = (v1, v2) => {
158
+ if (v1.length !== v2.length)
159
+ throw Error('Invalid comparison of two vectors of different lengths');
160
+ return _.sumBy(_.zip(v1, v2), ([a, b]) => (a - b) ** 2);
161
+ };
162
+ const distance = (v1, v2) => {
163
+ return Math.sqrt(innerProduct(v1, v2));
164
+ };
165
+ const rectilinearDistance = (v1, v2) => {
166
+ if (v1.length !== v2.length)
167
+ throw Error('Invalid comparison of two vectors of different lengths');
168
+ return _.sumBy(_.zip(v1, v2), ([a, b]) => Math.abs(a - b));
169
+ };
170
+ const cosine = (v1, v2) => {
171
+ if (v1.length !== v2.length)
172
+ throw Error('Invalid comparison of two vectors of different lengths');
173
+ const s1 = _.sumBy(v1, v => v ** 2);
174
+ const s2 = _.sumBy(v2, v => v ** 2);
175
+ if (s1 === 0 && s2 === 0)
176
+ return 1;
177
+ if (s1 === 0 || s2 === 0)
178
+ return 0;
179
+ return _.sumBy(_.zip(v1, v2), ([a, b]) => a * b) / Math.sqrt(s1 * s2);
180
+ };
181
+
60
182
  //
61
183
  // expressions.ts
62
184
  //
@@ -137,6 +259,9 @@ class QueryExpression {
137
259
  mapKey(callback) {
138
260
  return this;
139
261
  }
262
+ eval(value) {
263
+ return true;
264
+ }
140
265
  }
141
266
  class QueryCoditionalExpression extends QueryExpression {
142
267
  type;
@@ -165,6 +290,13 @@ class QueryCoditionalExpression extends QueryExpression {
165
290
  mapKey(callback) {
166
291
  return new QueryCoditionalExpression(this.type, _.map(this.exprs, x => x.mapKey(callback)));
167
292
  }
293
+ eval(value) {
294
+ switch (this.type) {
295
+ case '$and': return _.every(this.exprs, expr => expr.eval(value));
296
+ case '$nor': return !_.some(this.exprs, expr => expr.eval(value));
297
+ case '$or': return _.some(this.exprs, expr => expr.eval(value));
298
+ }
299
+ }
168
300
  }
169
301
  class QueryComparisonExpression extends QueryExpression {
170
302
  type;
@@ -188,6 +320,16 @@ class QueryComparisonExpression extends QueryExpression {
188
320
  mapKey(callback) {
189
321
  return new QueryComparisonExpression(this.type, this.left.mapKey(callback), this.right.mapKey(callback));
190
322
  }
323
+ eval(value) {
324
+ switch (this.type) {
325
+ case '$eq': return equal(this.left.eval(value), this.right.eval(value));
326
+ case '$gt': return greaterThan(this.left.eval(value), this.right.eval(value));
327
+ case '$gte': return greaterThanOrEqual(this.left.eval(value), this.right.eval(value));
328
+ case '$lt': return lessThan(this.left.eval(value), this.right.eval(value));
329
+ case '$lte': return lessThanOrEqual(this.left.eval(value), this.right.eval(value));
330
+ case '$ne': return !equal(this.left.eval(value), this.right.eval(value));
331
+ }
332
+ }
191
333
  }
192
334
  class QueryNotExpression extends QueryExpression {
193
335
  expr;
@@ -204,6 +346,9 @@ class QueryNotExpression extends QueryExpression {
204
346
  mapKey(callback) {
205
347
  return new QueryNotExpression(this.expr.mapKey(callback));
206
348
  }
349
+ eval(value) {
350
+ return !this.expr.eval(value);
351
+ }
207
352
  }
208
353
  class QueryArrayExpression extends QueryExpression {
209
354
  exprs;
@@ -220,6 +365,9 @@ class QueryArrayExpression extends QueryExpression {
220
365
  mapKey(callback) {
221
366
  return new QueryArrayExpression(_.map(this.exprs, x => x.mapKey(callback)));
222
367
  }
368
+ eval(value) {
369
+ return _.map(this.exprs, x => x.eval(value));
370
+ }
223
371
  }
224
372
  class QueryDistanceExpression extends QueryExpression {
225
373
  type;
@@ -243,6 +391,21 @@ class QueryDistanceExpression extends QueryExpression {
243
391
  mapKey(callback) {
244
392
  return new QueryDistanceExpression(this.type, _.map(this.left, x => x.mapKey(callback)), _.map(this.right, x => x.mapKey(callback)));
245
393
  }
394
+ eval(value) {
395
+ const left = this.left.length === 1 ? this.left[0].eval(value) : _.map(this.left, x => x.eval(value));
396
+ const right = this.right.length === 1 ? this.right[0].eval(value) : _.map(this.right, x => x.eval(value));
397
+ if (!_.isArray(left) || !_.every(left, x => _.isFinite(x)))
398
+ throw Error('Invalid vectors');
399
+ if (!_.isArray(right) || !_.every(right, x => _.isFinite(x)))
400
+ throw Error('Invalid vectors');
401
+ switch (this.type) {
402
+ case '$distance': return distance(left, right);
403
+ case '$innerProduct': return innerProduct(left, right);
404
+ case '$negInnerProduct': return -innerProduct(left, right);
405
+ case '$cosineDistance': return cosine(left, right);
406
+ case '$rectilinearDistance': return rectilinearDistance(left, right);
407
+ }
408
+ }
246
409
  }
247
410
  class QueryKeyExpression extends QueryExpression {
248
411
  key;
@@ -256,6 +419,9 @@ class QueryKeyExpression extends QueryExpression {
256
419
  mapKey(callback) {
257
420
  return new QueryKeyExpression(callback(this.key));
258
421
  }
422
+ eval(value) {
423
+ return _.get(value, this.key);
424
+ }
259
425
  }
260
426
  class QueryValueExpression extends QueryExpression {
261
427
  value;
@@ -263,6 +429,9 @@ class QueryValueExpression extends QueryExpression {
263
429
  super();
264
430
  this.value = value;
265
431
  }
432
+ eval(value) {
433
+ return value;
434
+ }
266
435
  }
267
436
 
268
437
  //
@@ -352,6 +521,9 @@ class QuerySelector {
352
521
  keyPaths() {
353
522
  return [];
354
523
  }
524
+ eval(value) {
525
+ return true;
526
+ }
355
527
  }
356
528
  class QueryCoditionalSelector extends QuerySelector {
357
529
  type;
@@ -377,6 +549,13 @@ class QueryCoditionalSelector extends QuerySelector {
377
549
  keyPaths() {
378
550
  return _.uniq(_.flatMap(this.exprs, x => x.keyPaths()));
379
551
  }
552
+ eval(value) {
553
+ switch (this.type) {
554
+ case '$and': return _.every(this.exprs, expr => expr.eval(value));
555
+ case '$nor': return !_.some(this.exprs, expr => expr.eval(value));
556
+ case '$or': return _.some(this.exprs, expr => expr.eval(value));
557
+ }
558
+ }
380
559
  }
381
560
  class FieldSelectorExpression {
382
561
  type;
@@ -458,6 +637,60 @@ class FieldSelectorExpression {
458
637
  }
459
638
  return field ? result.map(x => `${field}.${x}`) : result;
460
639
  }
640
+ eval(value) {
641
+ if (_.includes(TComparisonKeys, this.type)) {
642
+ switch (this.type) {
643
+ case '$eq': return equal(value, this.value);
644
+ case '$gt': return greaterThan(value, this.value);
645
+ case '$gte': return greaterThanOrEqual(value, this.value);
646
+ case '$lt': return lessThan(value, this.value);
647
+ case '$lte': return lessThanOrEqual(value, this.value);
648
+ case '$ne': return !equal(value, this.value);
649
+ }
650
+ }
651
+ else if (_.includes(TValueListKeys, this.type) || _.includes(TValueSetKeys, this.type)) {
652
+ switch (this.type) {
653
+ case '$in': return _.isArray(value) && _.some(value, x => equal(x, this.value));
654
+ case '$nin': return _.isArray(value) && !_.some(value, x => equal(x, this.value));
655
+ case '$subset': return _.isArray(value) && _.isArray(this.value) && isSubset(value, this.value);
656
+ case '$superset': return _.isArray(value) && _.isArray(this.value) && isSuperset(value, this.value);
657
+ case '$intersect': return _.isArray(value) && _.isArray(this.value) && isIntersect(value, this.value);
658
+ }
659
+ }
660
+ else {
661
+ switch (this.type) {
662
+ case '$not':
663
+ return this.value instanceof FieldSelectorExpression && !this.value.eval(value);
664
+ case '$pattern':
665
+ if (_.isString(this.value)) {
666
+ return _.isString(value) && value.includes(this.value);
667
+ }
668
+ if (_.isRegExp(this.value)) {
669
+ return _.isString(value) && !!value.match(this.value);
670
+ }
671
+ return false;
672
+ case '$starts':
673
+ return _.isString(this.value) && _.isString(value) && value.startsWith(this.value);
674
+ case '$ends':
675
+ return _.isString(this.value) && _.isString(value) && value.endsWith(this.value);
676
+ case '$size':
677
+ return _.isNumber(this.value) && (_.isString(value) || _.isArray(value)) && value.length === this.value;
678
+ case '$empty':
679
+ return _.isBoolean(this.value) && (_.isString(value) || _.isArray(value)) && _.isEmpty(value);
680
+ case '$every':
681
+ {
682
+ const expr = this.value;
683
+ return expr instanceof QuerySelector && _.isArray(value) && _.every(value, x => expr.eval(x));
684
+ }
685
+ case '$some':
686
+ {
687
+ const expr = this.value;
688
+ return expr instanceof QuerySelector && _.isArray(value) && _.some(value, x => expr.eval(x));
689
+ }
690
+ }
691
+ }
692
+ throw Error('Invalid expression');
693
+ }
461
694
  }
462
695
  class QueryFieldSelector extends QuerySelector {
463
696
  field;
@@ -473,6 +706,9 @@ class QueryFieldSelector extends QuerySelector {
473
706
  keyPaths() {
474
707
  return this.field === '$' ? this.expr.keyPaths() : [this.field, ...this.expr.keyPaths(this.field)];
475
708
  }
709
+ eval(value) {
710
+ return this.expr.eval(this.field === '$' ? value : _.get(value, this.field));
711
+ }
476
712
  }
477
713
  class QueryExpressionSelector extends QuerySelector {
478
714
  expr;
@@ -486,6 +722,9 @@ class QueryExpressionSelector extends QuerySelector {
486
722
  keyPaths() {
487
723
  return this.expr.keyPaths();
488
724
  }
725
+ eval(value) {
726
+ return !!this.expr.eval(value);
727
+ }
489
728
  }
490
729
 
491
730
  exports.FieldSelectorExpression = FieldSelectorExpression;
@@ -501,4 +740,4 @@ exports.QueryKeyExpression = QueryKeyExpression;
501
740
  exports.QueryNotExpression = QueryNotExpression;
502
741
  exports.QuerySelector = QuerySelector;
503
742
  exports.QueryValueExpression = QueryValueExpression;
504
- //# sourceMappingURL=index-C4vwSN74.js.map
743
+ //# sourceMappingURL=index-CkAvNaAe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-CkAvNaAe.js","sources":["../../../src/internals/query/types/keys.ts","../../../src/server/query/dispatcher/parser/utils.ts","../../../src/server/query/dispatcher/parser/expressions.ts","../../../src/internals/query/types/selectors.ts","../../../src/server/query/dispatcher/parser/index.ts"],"sourcesContent":["//\n// keys.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nexport const TComparisonKeys = [\n '$eq',\n '$gt',\n '$gte',\n '$lt',\n '$lte',\n '$ne',\n] as const;\n\nexport const TValueListKeys = [\n '$in',\n '$nin',\n] as const;\n\nexport const TValueSetKeys = [\n '$subset',\n '$superset',\n '$intersect',\n] as const;\n\nexport const TConditionalKeys = [\n '$and',\n '$nor',\n '$or',\n] as const;\n\nexport const TDistanceKeys = [\n '$distance',\n '$innerProduct',\n '$negInnerProduct',\n '$cosineDistance',\n '$rectilinearDistance',\n] as const;\n","//\n// utils.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport Decimal from 'decimal.js';\nimport { TNumber } from '../../../../common';\n\nconst isNum = (x: any): x is TNumber => _.isNumber(x) || x instanceof BigInt || x instanceof Decimal;\n\nconst equalNum = (lhs: TNumber, rhs: TNumber) => {\n if (lhs instanceof Decimal && rhs instanceof Decimal) {\n return lhs.equals(rhs);\n } else if (lhs instanceof Decimal) {\n return lhs.equals(rhs instanceof BigInt ? rhs.toString() : rhs);\n } else if (rhs instanceof Decimal) {\n return rhs.equals(lhs instanceof BigInt ? lhs.toString() : lhs);\n } else {\n return lhs === rhs;\n }\n}\n\nconst lessNum = (lhs: TNumber, rhs: TNumber) => {\n if (lhs instanceof Decimal && rhs instanceof Decimal) {\n return lhs.lessThan(rhs);\n } else if (lhs instanceof Decimal) {\n return lhs.lessThan(rhs instanceof BigInt ? rhs.toString() : rhs);\n } else if (rhs instanceof Decimal) {\n return rhs.greaterThan(lhs instanceof BigInt ? lhs.toString() : lhs);\n } else {\n return lhs < rhs;\n }\n}\n\nexport const equal = (lhs: any, rhs: any) => {\n if (_.isNil(lhs) && _.isNil(rhs)) return true;\n if (isNum(lhs) && isNum(rhs)) return equalNum(lhs, rhs);\n return _.isEqual(lhs, rhs);\n};\n\nexport const lessThan = (lhs: any, rhs: any) => {\n if (_.isString(lhs) && _.isString(rhs)) return lhs < rhs;\n if (_.isDate(lhs) && _.isDate(rhs)) return lhs < rhs;\n if (isNum(lhs) && isNum(rhs)) return lessNum(lhs, rhs);\n if (_.isArray(lhs) && _.isArray(rhs)) {\n for (const i of _.range(Math.min(lhs.length, rhs.length))) {\n if (lessThan(lhs[i], rhs[i])) return true;\n if (greaterThan(lhs[i], rhs[i])) return false;\n }\n return lhs.length < rhs.length;\n }\n return false;\n};\n\nexport const greaterThan = (lhs: any, rhs: any) => {\n return lessThan(rhs, lhs);\n};\n\nexport const lessThanOrEqual = (lhs: any, rhs: any) => {\n return equal(lhs, rhs) || lessThan(lhs, rhs);\n};\n\nexport const greaterThanOrEqual = (lhs: any, rhs: any) => {\n return lessThanOrEqual(rhs, lhs);\n};\n\nexport const isSubset = (lhs: any[], rhs: any[]) => {\n return _.some(lhs, l => _.every(rhs, r => equal(l, r)));\n}\n\nexport const isSuperset = (lhs: any[], rhs: any[]) => {\n return isSubset(rhs, lhs);\n}\n\nexport const isIntersect = (lhs: any[], rhs: any[]) => {\n return _.some(lhs, l => _.some(rhs, r => equal(l, r)));\n}\n\nexport const innerProduct = (v1: number[], v2: number[]) => {\n if (v1.length !== v2.length) throw Error('Invalid comparison of two vectors of different lengths');\n return _.sumBy(_.zip(v1, v2), ([a, b]) => (a! - b!) ** 2);\n};\n\nexport const distance = (v1: number[], v2: number[]) => {\n return Math.sqrt(innerProduct(v1, v2));\n};\n\nexport const rectilinearDistance = (v1: number[], v2: number[]) => {\n if (v1.length !== v2.length) throw Error('Invalid comparison of two vectors of different lengths');\n return _.sumBy(_.zip(v1, v2), ([a, b]) => Math.abs(a! - b!));\n};\n\nexport const cosine = (v1: number[], v2: number[]) => {\n if (v1.length !== v2.length) throw Error('Invalid comparison of two vectors of different lengths');\n const s1 = _.sumBy(v1, v => v ** 2);\n const s2 = _.sumBy(v2, v => v ** 2);\n if (s1 === 0 && s2 === 0) return 1;\n if (s1 === 0 || s2 === 0) return 0;\n return _.sumBy(_.zip(v1, v2), ([a, b]) => a! * b!) / Math.sqrt(s1 * s2);\n};\n","//\n// expressions.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { TExpression } from '../../../../internals/query/types/expressions';\nimport { TComparisonKeys, TConditionalKeys, TDistanceKeys } from '../../../../internals/query/types/keys';\nimport { isValue } from '../../../../internals/object';\nimport { TValue } from '../../../../internals/types';\nimport { cosine, distance, equal, greaterThan, greaterThanOrEqual, innerProduct, lessThan, lessThanOrEqual, rectilinearDistance } from './utils';\n\nexport class QueryExpression {\n\n static decode(expr: _.Many<TExpression>, dollerSign: boolean): QueryExpression {\n const exprs: QueryExpression[] = [];\n for (const selector of _.castArray(expr)) {\n for (const [key, query] of _.toPairs(selector)) {\n if (_.includes(TConditionalKeys, key) && _.isArray(query)) {\n exprs.push(new QueryCoditionalExpression(key as any, _.map(query, x => QueryExpression.decode(x as any, dollerSign))));\n } else if (_.includes(TComparisonKeys, key) && _.isArray(query) && query.length === 2) {\n const [left, right] = query;\n exprs.push(new QueryComparisonExpression(key as any, QueryExpression.decode(left as any, dollerSign), QueryExpression.decode(right as any, dollerSign)));\n } else if (_.includes(TDistanceKeys, key) && _.isArray(query) && query.length === 2) {\n const [left, right] = query;\n const _left = _.isArray(left) ? _.map(left, x => QueryExpression.decode(x as any, dollerSign)) : QueryExpression.decode(left as any, dollerSign);\n const _right = _.isArray(right) ? _.map(right, x => QueryExpression.decode(x as any, dollerSign)) : QueryExpression.decode(right as any, dollerSign);\n exprs.push(new QueryDistanceExpression(key as any, _.castArray(_left), _.castArray(_right)));\n } else if (key === '$not') {\n exprs.push(new QueryNotExpression(QueryExpression.decode(query as any, dollerSign)));\n } else if (key === '$array' && _.isArray(query)) {\n exprs.push(new QueryArrayExpression(_.map(query, x => QueryExpression.decode(x as any, dollerSign))));\n } else if (key === '$key' && _.isString(query)) {\n if (dollerSign && query === '$') {\n exprs.push(new QueryKeyExpression(query));\n } else if (!query.startsWith('$')) {\n exprs.push(new QueryKeyExpression(query));\n } else {\n throw Error('Invalid expression');\n }\n } else if (key === '$value' && isValue(query)) {\n exprs.push(new QueryValueExpression(query));\n } else {\n throw Error('Invalid expression');\n }\n }\n }\n if (_.isEmpty(exprs)) return new QueryExpression;\n return (exprs.length === 1 ? exprs[0] : new QueryCoditionalExpression('$and', exprs)).simplify();\n }\n\n simplify(): QueryExpression {\n return this;\n }\n\n keyPaths(): string[] {\n return [];\n }\n\n mapKey(callback: (key: string) => string): QueryExpression {\n return this;\n }\n\n eval(value: any): any {\n return true;\n }\n}\n\nexport class QueryCoditionalExpression extends QueryExpression {\n\n type: typeof TConditionalKeys[number];\n exprs: QueryExpression[];\n\n constructor(type: typeof TConditionalKeys[number], exprs: QueryExpression[]) {\n super();\n this.type = type;\n this.exprs = exprs;\n }\n\n simplify() {\n if (_.isEmpty(this.exprs)) return new QueryExpression;\n if (this.exprs.length === 1 && this.type !== '$nor') return this.exprs[0];\n switch (this.type) {\n case '$and':\n return new QueryCoditionalExpression(this.type, _.flatMap(\n this.exprs, x => x instanceof QueryCoditionalExpression && x.type === '$and' ? _.map(x.exprs, y => y.simplify()) : [x.simplify()]\n )) as QueryExpression;\n case '$nor':\n case '$or':\n return new QueryCoditionalExpression(this.type, _.flatMap(\n this.exprs, x => x instanceof QueryCoditionalExpression && x.type === '$or' ? _.map(x.exprs, y => y.simplify()) : [x.simplify()]\n )) as QueryExpression;\n }\n }\n\n keyPaths(): string[] {\n return _.uniq(_.flatMap(this.exprs, x => x.keyPaths()));\n }\n\n mapKey(callback: (key: string) => string): QueryExpression {\n return new QueryCoditionalExpression(this.type, _.map(this.exprs, x => x.mapKey(callback)));\n }\n\n eval(value: any) {\n switch (this.type) {\n case '$and': return _.every(this.exprs, expr => expr.eval(value));\n case '$nor': return !_.some(this.exprs, expr => expr.eval(value));\n case '$or': return _.some(this.exprs, expr => expr.eval(value));\n }\n }\n}\n\nexport class QueryComparisonExpression extends QueryExpression {\n\n type: typeof TComparisonKeys[number];\n left: QueryExpression;\n right: QueryExpression;\n\n constructor(type: typeof TComparisonKeys[number], left: QueryExpression, right: QueryExpression) {\n super();\n this.type = type;\n this.left = left;\n this.right = right;\n }\n\n simplify() {\n return new QueryComparisonExpression(this.type, this.left.simplify(), this.right.simplify());\n }\n\n keyPaths(): string[] {\n return _.uniq([\n ...this.left.keyPaths(),\n ...this.right.keyPaths(),\n ]);\n }\n\n mapKey(callback: (key: string) => string): QueryExpression {\n return new QueryComparisonExpression(this.type, this.left.mapKey(callback), this.right.mapKey(callback));\n }\n\n eval(value: any) {\n switch (this.type) {\n case '$eq': return equal(this.left.eval(value), this.right.eval(value));\n case '$gt': return greaterThan(this.left.eval(value), this.right.eval(value));\n case '$gte': return greaterThanOrEqual(this.left.eval(value), this.right.eval(value));\n case '$lt': return lessThan(this.left.eval(value), this.right.eval(value));\n case '$lte': return lessThanOrEqual(this.left.eval(value), this.right.eval(value));\n case '$ne': return !equal(this.left.eval(value), this.right.eval(value));\n }\n }\n}\n\nexport class QueryNotExpression extends QueryExpression {\n\n expr: QueryExpression;\n\n constructor(expr: QueryExpression) {\n super();\n this.expr = expr;\n }\n\n simplify() {\n return new QueryNotExpression(this.expr.simplify());\n }\n\n keyPaths(): string[] {\n return this.expr.keyPaths();\n }\n\n mapKey(callback: (key: string) => string): QueryExpression {\n return new QueryNotExpression(this.expr.mapKey(callback));\n }\n\n eval(value: any) {\n return !this.expr.eval(value);\n }\n}\n\nexport class QueryArrayExpression extends QueryExpression {\n\n exprs: QueryExpression[];\n\n constructor(exprs: QueryExpression[]) {\n super();\n this.exprs = exprs;\n }\n\n simplify() {\n return new QueryArrayExpression(_.map(this.exprs, x => x.simplify())) as QueryExpression;\n }\n\n keyPaths(): string[] {\n return _.uniq(_.flatMap(this.exprs, x => x.keyPaths()));\n }\n\n mapKey(callback: (key: string) => string): QueryExpression {\n return new QueryArrayExpression(_.map(this.exprs, x => x.mapKey(callback)));\n }\n\n eval(value: any) {\n return _.map(this.exprs, x => x.eval(value));\n }\n}\n\nexport class QueryDistanceExpression extends QueryExpression {\n\n type: typeof TDistanceKeys[number];\n left: QueryExpression[];\n right: QueryExpression[];\n\n constructor(type: typeof TDistanceKeys[number], left: QueryExpression[], right: QueryExpression[]) {\n super();\n this.type = type;\n this.left = left;\n this.right = right;\n }\n\n simplify() {\n return new QueryDistanceExpression(this.type, _.map(this.left, x => x.simplify()), _.map(this.right, x => x.simplify()));\n }\n\n keyPaths(): string[] {\n return _.uniq([\n ..._.flatMap(this.left, x => x.keyPaths()),\n ..._.flatMap(this.right, x => x.keyPaths()),\n ]);\n }\n\n mapKey(callback: (key: string) => string): QueryExpression {\n return new QueryDistanceExpression(this.type, _.map(this.left, x => x.mapKey(callback)), _.map(this.right, x => x.mapKey(callback)));\n }\n\n eval(value: any) {\n const left = this.left.length === 1 ? this.left[0].eval(value) : _.map(this.left, x => x.eval(value));\n const right = this.right.length === 1 ? this.right[0].eval(value) : _.map(this.right, x => x.eval(value));\n if (!_.isArray(left) || !_.every(left, x => _.isFinite(x))) throw Error('Invalid vectors');\n if (!_.isArray(right) || !_.every(right, x => _.isFinite(x))) throw Error('Invalid vectors');\n switch (this.type) {\n case '$distance': return distance(left, right);\n case '$innerProduct': return innerProduct(left, right);\n case '$negInnerProduct': return -innerProduct(left, right);\n case '$cosineDistance': return cosine(left, right);\n case '$rectilinearDistance': return rectilinearDistance(left, right);\n }\n }\n}\n\nexport class QueryKeyExpression extends QueryExpression {\n\n key: string;\n\n constructor(key: string) {\n super();\n this.key = key;\n }\n\n keyPaths(): string[] {\n return this.key === '$' ? [] : [this.key];\n }\n\n mapKey(callback: (key: string) => string): QueryExpression {\n return new QueryKeyExpression(callback(this.key));\n }\n\n eval(value: any) {\n return _.get(value, this.key);\n }\n}\n\nexport class QueryValueExpression extends QueryExpression {\n\n value: TValue;\n\n constructor(value: TValue) {\n super();\n this.value = value;\n }\n\n eval(value: any) {\n return value;\n }\n}\n","//\n// selectors.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport { TValue } from '../../types';\nimport { TBooleanExpression } from './expressions';\nimport { TConditionalKeys, TValueListKeys, TValueSetKeys, TComparisonKeys } from './keys';\n\nexport const allFieldQueryKeys = [\n '$not', '$pattern', '$starts', '$ends', '$size', '$empty', '$every', '$some',\n ...TConditionalKeys,\n ...TValueListKeys,\n ...TValueSetKeys\n];\n\ntype TThisQuerySelector = { $?: TFieldQuerySelector; };\n\nexport type TFieldQuerySelector = {\n $not?: TFieldQuerySelector;\n $starts?: string;\n $ends?: string;\n $pattern?: RegExp | string;\n $size?: number;\n $empty?: boolean;\n $every?: TQuerySelector | TThisQuerySelector;\n $some?: TQuerySelector | TThisQuerySelector;\n} & {\n [x in (typeof TComparisonKeys)[number]]?: TValue;\n } & {\n [x in (typeof TValueListKeys)[number]]?: TValue[];\n } & {\n [x in (typeof TValueSetKeys)[number]]?: TValue[];\n };\n\nexport type TCoditionalQuerySelector = {\n [x in (typeof TConditionalKeys)[number]]?: TQuerySelector[];\n};\n\nexport type TQuerySelector = TCoditionalQuerySelector & {\n $expr?: TBooleanExpression\n} | {\n [x: string]: TFieldQuerySelector;\n};\n","//\n// index.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { QueryExpression } from './expressions';\nimport { TFieldQuerySelector, TQuerySelector, allFieldQueryKeys } from '../../../../internals/query/types/selectors';\nimport { TComparisonKeys, TConditionalKeys, TValueListKeys, TValueSetKeys } from '../../../../internals/query/types/keys';\nimport { isValue } from '../../../../internals/object';\nimport { TValue } from '../../../../internals/types';\nimport { equal, greaterThan, greaterThanOrEqual, isIntersect, isSubset, isSuperset, lessThan, lessThanOrEqual } from './utils';\n\nexport class QuerySelector {\n\n static decode(selectors: _.Many<TQuerySelector>, dollerSign: boolean = false): QuerySelector {\n const exprs: QuerySelector[] = [];\n for (const selector of _.castArray(selectors)) {\n for (const [key, query] of _.toPairs(selector)) {\n if (_.includes(TConditionalKeys, key) && _.isArray(query)) {\n exprs.push(new QueryCoditionalSelector(key as any, _.map(query, x => QuerySelector.decode(x, dollerSign))));\n } else if (key === '$expr') {\n exprs.push(new QueryExpressionSelector(QueryExpression.decode(query as any, dollerSign)));\n } else if (dollerSign && key === '$' && !_.isArray(query)) {\n exprs.push(new QueryFieldSelector(key, FieldSelectorExpression.decode(query)));\n } else if (!key.startsWith('$') && !_.isArray(query)) {\n exprs.push(new QueryFieldSelector(key, FieldSelectorExpression.decode(query)));\n } else {\n throw Error('Invalid expression');\n }\n }\n }\n if (_.isEmpty(exprs)) return new QuerySelector;\n return (exprs.length === 1 ? exprs[0] : new QueryCoditionalSelector('$and', exprs)).simplify();\n }\n\n simplify(): QuerySelector {\n return this;\n }\n\n keyPaths(): string[] {\n return [];\n }\n\n eval(value: any): boolean {\n return true;\n }\n}\n\nexport class QueryCoditionalSelector extends QuerySelector {\n\n type: typeof TConditionalKeys[number];\n exprs: QuerySelector[];\n\n constructor(type: typeof TConditionalKeys[number], exprs: QuerySelector[]) {\n super();\n this.type = type;\n this.exprs = exprs;\n }\n\n simplify() {\n if (_.isEmpty(this.exprs)) return new QuerySelector;\n if (this.exprs.length === 1 && this.type !== '$nor') return this.exprs[0];\n switch (this.type) {\n case '$and':\n return new QueryCoditionalSelector(this.type, _.flatMap(\n this.exprs, x => x instanceof QueryCoditionalSelector && x.type === '$and' ? _.map(x.exprs, y => y.simplify()) : [x.simplify()]\n )) as QuerySelector;\n case '$nor':\n case '$or':\n return new QueryCoditionalSelector(this.type, _.flatMap(\n this.exprs, x => x instanceof QueryCoditionalSelector && x.type === '$or' ? _.map(x.exprs, y => y.simplify()) : [x.simplify()]\n )) as QuerySelector;\n }\n }\n\n keyPaths(): string[] {\n return _.uniq(_.flatMap(this.exprs, x => x.keyPaths()));\n }\n\n eval(value: any) {\n switch (this.type) {\n case '$and': return _.every(this.exprs, expr => expr.eval(value));\n case '$nor': return !_.some(this.exprs, expr => expr.eval(value));\n case '$or': return _.some(this.exprs, expr => expr.eval(value));\n }\n }\n}\n\nexport class FieldSelectorExpression {\n\n type: keyof TFieldQuerySelector;\n value: QuerySelector | FieldSelectorExpression | RegExp | TValue;\n\n constructor(type: keyof TFieldQuerySelector, value: QuerySelector | FieldSelectorExpression | RegExp | TValue) {\n this.type = type;\n this.value = value;\n }\n\n static decode(selector: TFieldQuerySelector): FieldSelectorExpression {\n for (const [type, expr] of _.toPairs(selector)) {\n if (_.includes(TComparisonKeys, type)) {\n if (!isValue(expr)) throw Error('Invalid expression');\n return new FieldSelectorExpression(type as any, expr);\n } else if (_.includes(TValueListKeys, type) || _.includes(TValueSetKeys, type)) {\n if (!isValue(expr) || !_.isArray(expr)) throw Error('Invalid expression');\n return new FieldSelectorExpression(type as any, expr);\n } else {\n switch (type) {\n case '$not':\n {\n const _expr = expr ? { ...expr as any } : {};\n const keys = _.keys(_expr);\n if (keys.length !== 1 && !allFieldQueryKeys.includes(keys[0])) throw Error('Invalid expression');\n return new FieldSelectorExpression(type, FieldSelectorExpression.decode(_expr));\n }\n case '$pattern':\n if (!_.isString(expr) && !_.isRegExp(expr)) throw Error('Invalid expression');\n return new FieldSelectorExpression(type, expr);\n case '$starts':\n case '$ends':\n if (!_.isString(expr)) throw Error('Invalid expression');\n return new FieldSelectorExpression(type, expr);\n case '$size':\n if (!_.isNumber(expr)) throw Error('Invalid expression');\n return new FieldSelectorExpression(type, expr);\n case '$empty':\n if (!_.isBoolean(expr)) throw Error('Invalid expression');\n return new FieldSelectorExpression(type, expr);\n case '$every':\n case '$some':\n return new FieldSelectorExpression(type, QuerySelector.decode(expr ? { ...expr as any } : {}, true));\n default: throw Error('Invalid expression');\n }\n }\n }\n throw Error('Invalid expression');\n }\n\n simplify(): FieldSelectorExpression {\n if (this.value instanceof QuerySelector) {\n return new FieldSelectorExpression(this.type, this.value.simplify());\n }\n if (this.value instanceof FieldSelectorExpression) {\n return new FieldSelectorExpression(this.type, this.value.simplify());\n }\n return this;\n }\n\n keyPaths(field?: string): string[] {\n let result: string[] = [];\n if (this.value instanceof QuerySelector) {\n result = this.value.keyPaths();\n } else if (this.value instanceof FieldSelectorExpression) {\n switch (this.type) {\n case '$every':\n case '$some':\n result = this.value.keyPaths();\n default:\n result = this.value.keyPaths();\n }\n }\n return field ? result.map(x => `${field}.${x}`) : result;\n }\n\n eval(value: any): any {\n if (_.includes(TComparisonKeys, this.type)) {\n switch (this.type) {\n case '$eq': return equal(value, this.value);\n case '$gt': return greaterThan(value, this.value);\n case '$gte': return greaterThanOrEqual(value, this.value);\n case '$lt': return lessThan(value, this.value);\n case '$lte': return lessThanOrEqual(value, this.value);\n case '$ne': return !equal(value, this.value);\n }\n } else if (_.includes(TValueListKeys, this.type) || _.includes(TValueSetKeys, this.type)) {\n switch (this.type) {\n case '$in': return _.isArray(value) && _.some(value, x => equal(x, this.value));\n case '$nin': return _.isArray(value) && !_.some(value, x => equal(x, this.value));\n case '$subset': return _.isArray(value) && _.isArray(this.value) && isSubset(value, this.value);\n case '$superset': return _.isArray(value) && _.isArray(this.value) && isSuperset(value, this.value);\n case '$intersect': return _.isArray(value) && _.isArray(this.value) && isIntersect(value, this.value);\n }\n } else {\n switch (this.type) {\n case '$not':\n return this.value instanceof FieldSelectorExpression && !this.value.eval(value);\n case '$pattern':\n if (_.isString(this.value)) {\n return _.isString(value) && value.includes(this.value);\n }\n if (_.isRegExp(this.value)) {\n return _.isString(value) && !!value.match(this.value);\n }\n return false;\n case '$starts':\n return _.isString(this.value) && _.isString(value) && value.startsWith(this.value);\n case '$ends':\n return _.isString(this.value) && _.isString(value) && value.endsWith(this.value);\n case '$size':\n return _.isNumber(this.value) && (_.isString(value) || _.isArray(value)) && value.length === this.value;\n case '$empty':\n return _.isBoolean(this.value) && (_.isString(value) || _.isArray(value)) && _.isEmpty(value);\n case '$every':\n {\n const expr = this.value;\n return expr instanceof QuerySelector && _.isArray(value) && _.every(value, x => expr.eval(x));\n }\n case '$some':\n {\n const expr = this.value;\n return expr instanceof QuerySelector && _.isArray(value) && _.some(value, x => expr.eval(x));\n }\n default: break;\n }\n }\n throw Error('Invalid expression');\n }\n}\n\nexport class QueryFieldSelector extends QuerySelector {\n\n field: string;\n expr: FieldSelectorExpression;\n\n constructor(field: string, expr: FieldSelectorExpression) {\n super();\n this.field = field;\n this.expr = expr;\n }\n\n simplify() {\n return new QueryFieldSelector(this.field, this.expr.simplify());\n }\n\n keyPaths(): string[] {\n return this.field === '$' ? this.expr.keyPaths() : [this.field, ...this.expr.keyPaths(this.field)];\n }\n\n eval(value: any) {\n return this.expr.eval(this.field === '$' ? value : _.get(value, this.field));\n }\n}\n\nexport class QueryExpressionSelector extends QuerySelector {\n\n expr: QueryExpression;\n\n constructor(expr: QueryExpression) {\n super();\n this.expr = expr;\n }\n\n simplify() {\n return new QueryExpressionSelector(this.expr.simplify());\n }\n\n keyPaths(): string[] {\n return this.expr.keyPaths();\n }\n\n eval(value: any) {\n return !!this.expr.eval(value);\n }\n}\n"],"names":["isValue"],"mappings":"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"}
@@ -5,6 +5,7 @@ import { T as TObject, e as decodeUpdateOp } from './index-al1N-qi7.mjs';
5
5
  import axios from 'axios';
6
6
  import { XSRF_COOKIE_NAME, XSRF_HEADER_NAME } from '@o2ter/server-js/dist/const';
7
7
  import { io } from 'socket.io-client';
8
+ import { randomUUID } from '@o2ter/crypto-js';
8
9
  import { Decimal } from 'decimal.js';
9
10
 
10
11
  //
@@ -399,6 +400,48 @@ class TQueryBase extends TQueryFilterBase {
399
400
  class TQuery extends TQueryBase {
400
401
  /** @internal */
401
402
  [PVK] = { options: {} };
403
+ /**
404
+ * Inserts a new record.
405
+ * @param attrs - The attributes of the new record.
406
+ * @param options - Extra options for the query.
407
+ * @returns A promise that resolves to the inserted record.
408
+ */
409
+ async insert(attrs, options) {
410
+ const result = _.first(await this.clone().insertMany([attrs], options));
411
+ if (!result)
412
+ throw Error('Unable to insert document');
413
+ return result;
414
+ }
415
+ /**
416
+ * Updates a single record.
417
+ * @param update - The update operations.
418
+ * @param options - Extra options for the query.
419
+ * @returns A promise that resolves to the updated record or undefined.
420
+ */
421
+ async updateOne(update, options) {
422
+ return _.first(await this.clone().limit(1).updateMany(update, options));
423
+ }
424
+ /**
425
+ * Upserts a single record.
426
+ * @param update - The update operations.
427
+ * @param setOnInsert - The attributes to set on insert.
428
+ * @param options - Extra options for the query.
429
+ * @returns A promise that resolves to the upserted record.
430
+ */
431
+ async upsertOne(update, setOnInsert, options) {
432
+ const result = _.first(await this.clone().limit(1).upsertMany(update, setOnInsert, options));
433
+ if (!result)
434
+ throw Error('Unable to upsert document');
435
+ return result;
436
+ }
437
+ /**
438
+ * Deletes a single record.
439
+ * @param options - Extra options for the query.
440
+ * @returns A promise that resolves to the deleted record or undefined.
441
+ */
442
+ async deleteOne(options) {
443
+ return _.first(await this.clone().limit(1).deleteMany(options));
444
+ }
402
445
  /**
403
446
  * Adds fields to include in the query.
404
447
  * @param includes - The fields to include.
@@ -1463,24 +1506,20 @@ class Service {
1463
1506
  const options = { auth: { token: this.token } };
1464
1507
  const socket = endpoint ? io(endpoint, options) : io(options);
1465
1508
  this.sockets.push(socket);
1466
- let disconnect = false;
1467
- let listeners = [];
1509
+ let listeners = {};
1468
1510
  let destroyCallbacks = [];
1469
- socket.on('connect_error', () => {
1470
- if (!disconnect && !socket.active)
1471
- socket.connect();
1472
- });
1473
- socket.on('disconnect', () => {
1474
- if (!disconnect && !socket.active)
1475
- socket.connect();
1476
- });
1477
- socket.on('data', (payload) => {
1478
- for (const callback of listeners) {
1479
- callback(payload);
1511
+ const register = () => {
1512
+ socket.emit('register', _.mapValues(listeners, x => x.selector ?? true));
1513
+ };
1514
+ socket.on('data', ({ ids, data }) => {
1515
+ for (const [id, { callback }] of _.entries(listeners)) {
1516
+ if (_.includes(ids, id))
1517
+ callback(data);
1480
1518
  }
1481
1519
  });
1520
+ socket.on('connect', register);
1521
+ socket.on('reconnect', register);
1482
1522
  const destroy = () => {
1483
- disconnect = true;
1484
1523
  this.sockets = this.sockets.filter(x => x !== socket);
1485
1524
  socket.disconnect();
1486
1525
  for (const callback of destroyCallbacks) {
@@ -1489,10 +1528,13 @@ class Service {
1489
1528
  };
1490
1529
  return {
1491
1530
  socket,
1492
- listen: (callback) => {
1493
- listeners.push(callback);
1531
+ listen: (callback, selector) => {
1532
+ const id = randomUUID();
1533
+ listeners[id] = { callback, selector };
1534
+ register();
1494
1535
  return () => {
1495
- listeners = listeners.filter(x => x !== callback);
1536
+ listeners = _.omit(listeners, id);
1537
+ register();
1496
1538
  if (_.isEmpty(listeners))
1497
1539
  destroy();
1498
1540
  };
@@ -1756,7 +1798,7 @@ class ProtoClientInternal {
1756
1798
  ...opts,
1757
1799
  });
1758
1800
  }
1759
- listen(proto, callback) {
1801
+ listen(proto, callback, selector) {
1760
1802
  const { socket, listen, onDestroy } = this.socket ?? this.service.socket();
1761
1803
  if (_.isNil(this.socket)) {
1762
1804
  this.socket = { socket, listen, onDestroy };
@@ -1766,7 +1808,7 @@ class ProtoClientInternal {
1766
1808
  socket,
1767
1809
  remove: listen((payload) => {
1768
1810
  callback(payload);
1769
- }),
1811
+ }, selector),
1770
1812
  };
1771
1813
  }
1772
1814
  refs(proto, object, options) {
@@ -1887,8 +1929,8 @@ class ProtoClient extends ProtoType {
1887
1929
  notify(data, options) {
1888
1930
  return this[PVK].notify(this, data, options);
1889
1931
  }
1890
- listen(callback) {
1891
- return this[PVK].listen(this, callback);
1932
+ listen(callback, selector) {
1933
+ return this[PVK].listen(this, callback, selector);
1892
1934
  }
1893
1935
  refs(object, options) {
1894
1936
  return this[PVK].refs(this, object, options);
@@ -1896,4 +1938,4 @@ class ProtoClient extends ProtoType {
1896
1938
  }
1897
1939
 
1898
1940
  export { AUTH_COOKIE_KEY as A, MASTER_USER_HEADER_NAME as M, PROTO_NOTY_MSG as P, TQuery as T, UPLOAD_TOKEN_HEADER_NAME as U, MASTER_PASS_HEADER_NAME as a, TUser as b, ProtoType as c, deserialize as d, ProtoClient as e, classExtends as f, isObject as g, isUser as h, isQuery as i, isRole as j, isFile as k, isJob as l, serialize as s };
1899
- //# sourceMappingURL=index-DtCgllhg.mjs.map
1941
+ //# sourceMappingURL=index-DAkcqabS.mjs.map