@ngutil/data 0.0.91 → 0.0.93

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.
@@ -58,6 +58,10 @@ function normalize(obj, normalizer) {
58
58
  }
59
59
 
60
60
  class QueryProperty extends BehaviorSubject {
61
+ constructor(provider) {
62
+ super(undefined);
63
+ this.provider = provider;
64
+ }
61
65
  set(value) {
62
66
  this.#nextClone(value != null ? this.norm(value) : undefined);
63
67
  }
@@ -93,8 +97,9 @@ class QueryProperty extends BehaviorSubject {
93
97
  }
94
98
  class QueryPropertySet extends Observable {
95
99
  #combined;
96
- constructor(...names) {
100
+ constructor(provider, ...names) {
97
101
  super(dest => this.#combined.subscribe(dest));
102
+ this.provider = provider;
98
103
  const observables = [];
99
104
  const props = {};
100
105
  for (const name of names) {
@@ -109,31 +114,60 @@ class QueryPropertySet extends Observable {
109
114
  }
110
115
  }
111
116
 
117
+ var FilterOp;
118
+ (function (FilterOp) {
119
+ FilterOp["Eq"] = "==";
120
+ FilterOp["EqStrict"] = "===";
121
+ FilterOp["EqInsesitive"] = "==*";
122
+ FilterOp["Neq"] = "!=";
123
+ FilterOp["NeqStrict"] = "!==";
124
+ FilterOp["NeqInsesitive"] = "!=*";
125
+ FilterOp["Gt"] = ">";
126
+ FilterOp["GtInsesitive"] = ">*";
127
+ FilterOp["Gte"] = ">=";
128
+ FilterOp["GteInsesitive"] = ">=*";
129
+ FilterOp["Lt"] = "<";
130
+ FilterOp["LtInsesitive"] = "<*";
131
+ FilterOp["Lte"] = "<=";
132
+ FilterOp["LteInsesitive"] = "<=*";
133
+ FilterOp["Contains"] = "%";
134
+ FilterOp["ContainsInsesitive"] = "%*";
135
+ FilterOp["StartsWith"] = "^";
136
+ FilterOp["StartsWithInsesitive"] = "^*";
137
+ FilterOp["EndsWith"] = "$";
138
+ FilterOp["EndsWithInsesitive"] = "$*";
139
+ FilterOp["Similarity"] = "**";
140
+ FilterOp["Regexp"] = "~";
141
+ FilterOp["RegexpInsesitive"] = "~*";
142
+ FilterOp["Or"] = "|";
143
+ FilterOp["And"] = "&";
144
+ })(FilterOp || (FilterOp = {}));
112
145
  const OPERATORS = [
113
- "==" /* FilterOp.Eq */,
114
- "===" /* FilterOp.EqStrict */,
115
- "==*" /* FilterOp.EqInsesitive */,
116
- "!=" /* FilterOp.Neq */,
117
- "!==" /* FilterOp.NeqStrict */,
118
- "!=*" /* FilterOp.NeqInsesitive */,
119
- ">" /* FilterOp.Gt */,
120
- ">*" /* FilterOp.GtInsesitive */,
121
- ">=" /* FilterOp.Gte */,
122
- ">=*" /* FilterOp.GteInsesitive */,
123
- "<" /* FilterOp.Lt */,
124
- "<*" /* FilterOp.LtInsesitive */,
125
- "<=" /* FilterOp.Lte */,
126
- "<=*" /* FilterOp.LteInsesitive */,
127
- "%" /* FilterOp.Contains */,
128
- "%*" /* FilterOp.ContainsInsesitive */,
129
- "^" /* FilterOp.StartsWith */,
130
- "^*" /* FilterOp.StartsWithInsesitive */,
131
- "$" /* FilterOp.EndsWith */,
132
- "$*" /* FilterOp.EndsWithInsesitive */,
133
- "~" /* FilterOp.Regexp */,
134
- "~*" /* FilterOp.RegexpInsesitive */,
135
- "|" /* FilterOp.Or */,
136
- "&" /* FilterOp.And */
146
+ FilterOp.Eq,
147
+ FilterOp.EqStrict,
148
+ FilterOp.EqInsesitive,
149
+ FilterOp.Neq,
150
+ FilterOp.NeqStrict,
151
+ FilterOp.NeqInsesitive,
152
+ FilterOp.Gt,
153
+ FilterOp.GtInsesitive,
154
+ FilterOp.Gte,
155
+ FilterOp.GteInsesitive,
156
+ FilterOp.Lt,
157
+ FilterOp.LtInsesitive,
158
+ FilterOp.Lte,
159
+ FilterOp.LteInsesitive,
160
+ FilterOp.Contains,
161
+ FilterOp.ContainsInsesitive,
162
+ FilterOp.StartsWith,
163
+ FilterOp.StartsWithInsesitive,
164
+ FilterOp.EndsWith,
165
+ FilterOp.EndsWithInsesitive,
166
+ FilterOp.Similarity,
167
+ FilterOp.Regexp,
168
+ FilterOp.RegexpInsesitive,
169
+ FilterOp.Or,
170
+ FilterOp.And
137
171
  ];
138
172
  function asOperators(value) {
139
173
  const ops = intersection(Object.keys(value), OPERATORS);
@@ -143,7 +177,7 @@ function asOperators(value) {
143
177
  });
144
178
  }
145
179
  else {
146
- return [{ op: "==" /* FilterOp.Eq */, value }];
180
+ return [{ op: FilterOp.Eq, value }];
147
181
  }
148
182
  }
149
183
  /**
@@ -167,7 +201,7 @@ function filterNormalize(filters) {
167
201
  }
168
202
  function _normalizeFilter(filters, parent) {
169
203
  if ("op" in filters && "value" in filters) {
170
- if (filters["op"] === "|" /* FilterOp.Or */ || filters["op"] === "&" /* FilterOp.And */) {
204
+ if (filters["op"] === FilterOp.Or || filters["op"] === FilterOp.And) {
171
205
  return { op: filters["op"], value: filters["value"].map((v) => _normalizeFilter(v, parent)) };
172
206
  }
173
207
  if ("path" in filters) {
@@ -176,16 +210,16 @@ function _normalizeFilter(filters, parent) {
176
210
  }
177
211
  const norm = flattenDeep(Object.entries(filters).map(([path, value]) => {
178
212
  switch (path) {
179
- case "&" /* FilterOp.And */:
213
+ case FilterOp.And:
180
214
  if (!Array.isArray(value)) {
181
- throw new Error(`Operator AND (${"&" /* FilterOp.And */}) must have array type`);
215
+ throw new Error(`Operator AND (${FilterOp.And}) must have array type`);
182
216
  }
183
- return { op: "&" /* FilterOp.And */, value: value.map(v => _normalizeFilter(v, parent)) };
184
- case "|" /* FilterOp.Or */:
217
+ return { op: FilterOp.And, value: value.map(v => _normalizeFilter(v, parent)) };
218
+ case FilterOp.Or:
185
219
  if (!Array.isArray(value)) {
186
- throw new Error(`Operator OR (${"|" /* FilterOp.Or */}) must have array type`);
220
+ throw new Error(`Operator OR (${FilterOp.Or}) must have array type`);
187
221
  }
188
- return { op: "|" /* FilterOp.Or */, value: value.map(v => _normalizeFilter(v, parent)) };
222
+ return { op: FilterOp.Or, value: value.map(v => _normalizeFilter(v, parent)) };
189
223
  // TODO: check all filter, and if not found filter key, taht object maybne not a filter
190
224
  default:
191
225
  if (isPlainObject(value)) {
@@ -195,7 +229,7 @@ function _normalizeFilter(filters, parent) {
195
229
  return { path: parent, op: path, value };
196
230
  }
197
231
  else {
198
- return { path, op: "===" /* FilterOp.EqStrict */, value };
232
+ return { path, op: FilterOp.EqStrict, value };
199
233
  }
200
234
  }
201
235
  }));
@@ -206,7 +240,7 @@ function _normalizeFilter(filters, parent) {
206
240
  return norm[0];
207
241
  }
208
242
  else {
209
- return { op: "&" /* FilterOp.And */, value: norm };
243
+ return { op: FilterOp.And, value: norm };
210
244
  }
211
245
  }
212
246
  function _filterCompile(filters) {
@@ -222,9 +256,9 @@ function _filterCompile(filters) {
222
256
  }
223
257
  function _filterCompileNorm(filter, getPath) {
224
258
  switch (filter.op) {
225
- case "&" /* FilterOp.And */:
259
+ case FilterOp.And:
226
260
  return and_(filter.value.map(v => _filterCompileNorm(v, getPath)));
227
- case "|" /* FilterOp.Or */:
261
+ case FilterOp.Or:
228
262
  return or_(filter.value.map(v => _filterCompileNorm(v, getPath)));
229
263
  default:
230
264
  return _filterComplileNormPath(getPath(filter.path), filter.op, filter.value, getPath);
@@ -234,68 +268,70 @@ function _filterComplileNormPath(getter, op, value, getPath) {
234
268
  let lower;
235
269
  let regex;
236
270
  switch (op) {
237
- case "&" /* FilterOp.And */:
271
+ case FilterOp.And:
238
272
  return and_(value.map(v => _filterCompileNorm(v, getPath)));
239
- case "|" /* FilterOp.Or */:
273
+ case FilterOp.Or:
240
274
  return or_(value.map(v => _filterCompileNorm(v, getPath)));
241
- case "==" /* FilterOp.Eq */:
275
+ case FilterOp.Eq:
242
276
  // eslint-disable-next-line eqeqeq
243
277
  return matcher(getter, v => v == value);
244
- case "===" /* FilterOp.EqStrict */:
278
+ case FilterOp.EqStrict:
245
279
  return matcher(getter, v => v === value);
246
- case "==*" /* FilterOp.EqInsesitive */:
280
+ case FilterOp.EqInsesitive:
247
281
  lower = String(value).toLocaleLowerCase();
248
282
  return matcher(getter, v => String(v).toLocaleLowerCase() === lower);
249
- case "!=" /* FilterOp.Neq */:
283
+ case FilterOp.Neq:
250
284
  // eslint-disable-next-line eqeqeq
251
285
  return matcher(getter, v => v != value);
252
- case "!==" /* FilterOp.NeqStrict */:
286
+ case FilterOp.NeqStrict:
253
287
  return matcher(getter, v => v !== value);
254
- case "!=*" /* FilterOp.NeqInsesitive */:
288
+ case FilterOp.NeqInsesitive:
255
289
  lower = String(value).toLocaleLowerCase();
256
290
  return matcher(getter, v => String(v).toLocaleLowerCase() !== lower);
257
- case ">" /* FilterOp.Gt */:
291
+ case FilterOp.Gt:
258
292
  return matcher(getter, v => v > value);
259
- case ">*" /* FilterOp.GtInsesitive */:
293
+ case FilterOp.GtInsesitive:
260
294
  lower = String(value).toLocaleLowerCase();
261
295
  return matcher(getter, v => String(v).toLocaleLowerCase() > lower);
262
- case ">=" /* FilterOp.Gte */:
296
+ case FilterOp.Gte:
263
297
  return matcher(getter, v => v >= value);
264
- case ">=*" /* FilterOp.GteInsesitive */:
298
+ case FilterOp.GteInsesitive:
265
299
  lower = String(value).toLocaleLowerCase();
266
300
  return matcher(getter, v => String(v).toLocaleLowerCase() >= lower);
267
- case "<" /* FilterOp.Lt */:
301
+ case FilterOp.Lt:
268
302
  return matcher(getter, v => v < value);
269
- case "<*" /* FilterOp.LtInsesitive */:
303
+ case FilterOp.LtInsesitive:
270
304
  lower = String(value).toLocaleLowerCase();
271
305
  return matcher(getter, v => String(v).toLocaleLowerCase() < lower);
272
- case "<=" /* FilterOp.Lte */:
306
+ case FilterOp.Lte:
273
307
  return matcher(getter, v => v <= value);
274
- case "<=*" /* FilterOp.LteInsesitive */:
308
+ case FilterOp.LteInsesitive:
275
309
  lower = String(value).toLocaleLowerCase();
276
310
  return matcher(getter, v => String(v).toLocaleLowerCase() <= lower);
277
- case "%" /* FilterOp.Contains */:
311
+ case FilterOp.Contains:
278
312
  lower = String(value);
279
313
  return matcher(getter, v => (Array.isArray(v) ? v.includes(value) : String(v).includes(lower)));
280
- case "%*" /* FilterOp.ContainsInsesitive */:
314
+ case FilterOp.ContainsInsesitive:
315
+ case FilterOp.Similarity:
316
+ // TODO: proper similarity test
281
317
  lower = String(value).toLocaleLowerCase();
282
318
  return matcher(getter, v => String(v).toLocaleLowerCase().includes(lower));
283
- case "^" /* FilterOp.StartsWith */:
319
+ case FilterOp.StartsWith:
284
320
  lower = String(value);
285
321
  return matcher(getter, v => String(v).startsWith(lower));
286
- case "^*" /* FilterOp.StartsWithInsesitive */:
322
+ case FilterOp.StartsWithInsesitive:
287
323
  lower = String(value).toLocaleLowerCase();
288
324
  return matcher(getter, v => String(v).toLocaleLowerCase().startsWith(lower));
289
- case "$" /* FilterOp.EndsWith */:
325
+ case FilterOp.EndsWith:
290
326
  lower = String(value);
291
327
  return matcher(getter, v => String(v).endsWith(lower));
292
- case "$*" /* FilterOp.EndsWithInsesitive */:
328
+ case FilterOp.EndsWithInsesitive:
293
329
  lower = String(value).toLocaleLowerCase();
294
330
  return matcher(getter, v => String(v).toLocaleLowerCase().endsWith(lower));
295
- case "~" /* FilterOp.Regexp */:
331
+ case FilterOp.Regexp:
296
332
  regex = value instanceof RegExp ? value : new RegExp(value, "msv");
297
333
  return matcher(getter, v => regex.test(v));
298
- case "~*" /* FilterOp.RegexpInsesitive */:
334
+ case FilterOp.RegexpInsesitive:
299
335
  regex = value instanceof RegExp ? value : new RegExp(value, "msvi");
300
336
  return matcher(getter, v => regex.test(v));
301
337
  }
@@ -340,29 +376,29 @@ function filterMerge(...filters) {
340
376
  const value = filters
341
377
  .filter(v => v && ((Array.isArray(v) && v.length > 0) || (isPlainObject(v) && Object.keys(v).length > 0)))
342
378
  .map(filter => deepClone(filter));
343
- return compact({ op: "&" /* FilterOp.And */, value });
379
+ return compact({ op: FilterOp.And, value });
344
380
  }
345
381
  class FilterProperty extends QueryProperty {
346
382
  merge(a, b) {
347
- return filterMerge(a, b);
383
+ return this.provider.filterMerge(a, b);
348
384
  }
349
385
  norm(a) {
350
- return filterNormalize(a);
386
+ return this.provider.filterNormalize(a);
351
387
  }
352
388
  }
353
389
  class FilterPropertySet extends QueryPropertySet {
354
390
  newProperty() {
355
- return new FilterProperty(undefined);
391
+ return new FilterProperty(this.provider);
356
392
  }
357
393
  merge(...args) {
358
- return filterMerge(...args);
394
+ return this.provider.filterMerge(...args);
359
395
  }
360
396
  }
361
397
  function filterSimplify(filters) {
362
398
  if (isTruthy(filters)) {
363
399
  filters = compact(filterNormalize(filters));
364
400
  const result = {};
365
- if (filters["op"] === "&" /* FilterOp.And */) {
401
+ if (filters["op"] === FilterOp.And) {
366
402
  filters = filters["value"];
367
403
  if (filters == null) {
368
404
  return result;
@@ -373,7 +409,7 @@ function filterSimplify(filters) {
373
409
  }
374
410
  for (const f of filters) {
375
411
  if (f["value"] != null &&
376
- (f["op"] === "==" /* FilterOp.Eq */ || f["op"] === "===" /* FilterOp.EqStrict */ || f["op"] === "==*" /* FilterOp.EqInsesitive */)) {
412
+ (f["op"] === FilterOp.Eq || f["op"] === FilterOp.EqStrict || f["op"] === FilterOp.EqInsesitive)) {
377
413
  result[f["path"]] = f["value"];
378
414
  }
379
415
  }
@@ -384,7 +420,7 @@ function filterSimplify(filters) {
384
420
  }
385
421
  }
386
422
  function compact(filters) {
387
- if (filters.op === "&" /* FilterOp.And */ || filters.op === "|" /* FilterOp.Or */) {
423
+ if (filters.op === FilterOp.And || filters.op === FilterOp.Or) {
388
424
  if (isFalsy(filters.value)) {
389
425
  return null;
390
426
  }
@@ -487,18 +523,18 @@ function grouperNormalize(grouper) { }
487
523
  // }
488
524
  class GrouperProperty extends QueryProperty {
489
525
  norm(a) {
490
- return grouperNormalize;
526
+ return this.provider.grouperNormalize(a);
491
527
  }
492
528
  merge(a, b) {
493
- return grouperMerge(a, b);
529
+ return this.provider.grouperMerge(a, b);
494
530
  }
495
531
  }
496
532
  class GrouperPropertySet extends QueryPropertySet {
497
533
  newProperty() {
498
- return new GrouperProperty(undefined);
534
+ return new GrouperProperty(this.provider);
499
535
  }
500
536
  merge(...args) {
501
- return grouperMerge(...args);
537
+ return this.provider.grouperMerge(...args);
502
538
  }
503
539
  }
504
540
 
@@ -694,10 +730,10 @@ function sorterMerge(...sorters) {
694
730
  }
695
731
  class SorterProperty extends QueryProperty {
696
732
  norm(a) {
697
- return sorterNormalize(a);
733
+ return this.provider.sorterNormalize(a);
698
734
  }
699
735
  merge(a, b) {
700
- return sorterMerge(a, b);
736
+ return this.provider.sorterMerge(a, b);
701
737
  }
702
738
  }
703
739
  class SorterPropertySet extends QueryPropertySet {
@@ -711,10 +747,10 @@ class SorterPropertySet extends QueryPropertySet {
711
747
  return this.of(name).pipe(map(v => (v != null ? !v.isAsc : undefined)));
712
748
  }
713
749
  newProperty() {
714
- return new SorterProperty(undefined);
750
+ return new SorterProperty(this.provider);
715
751
  }
716
752
  merge(...args) {
717
- return sorterMerge(...args);
753
+ return this.provider.sorterMerge(...args);
718
754
  }
719
755
  }
720
756
 
@@ -726,18 +762,18 @@ function slimerCompile(slimer) {
726
762
  function slimerMerge(...slimers) { }
727
763
  class SlimerProperty extends QueryProperty {
728
764
  norm(a) {
729
- return slimerNormalize(a);
765
+ return this.provider.slimerNormalize(a);
730
766
  }
731
767
  merge(a, b) {
732
- return slimerMerge(a, b);
768
+ return this.provider.slimerMerge(a, b);
733
769
  }
734
770
  }
735
771
  class SlimerPropertySet extends QueryPropertySet {
736
772
  newProperty() {
737
- return new SlimerProperty(undefined);
773
+ return new SlimerProperty(this.provider);
738
774
  }
739
775
  merge(...args) {
740
- return slimerMerge(...args);
776
+ return this.provider.slimerMerge(...args);
741
777
  }
742
778
  }
743
779
 
@@ -804,11 +840,11 @@ function sliceEq(a, b) {
804
840
  // TODO: sliceConcat(...slices: Slice[]): Slice[]
805
841
  // TODO: sliceDiff(slice: Slice): Slice[]
806
842
 
807
- function querySubject(...names) {
808
- const filter = new FilterPropertySet(...names);
809
- const sorter = new SorterPropertySet(...names);
810
- const slimer = new SlimerPropertySet(...names);
811
- const grouper = new GrouperPropertySet(...names);
843
+ function querySubject(provider, ...names) {
844
+ const filter = new FilterPropertySet(provider, ...names);
845
+ const sorter = new SorterPropertySet(provider, ...names);
846
+ const slimer = new SlimerPropertySet(provider, ...names);
847
+ const grouper = new GrouperPropertySet(provider, ...names);
812
848
  const result = combineLatest({ filter, sorter, slimer, grouper }).pipe(shareReplay(1));
813
849
  readonlyProp(result, "filter", filter);
814
850
  readonlyProp(result, "sorter", sorter);
@@ -974,7 +1010,7 @@ class DataSource extends DataSource$1 {
974
1010
  #slice;
975
1011
  #reload;
976
1012
  #query;
977
- constructor(provider, store = new MemoryStore(), query$ = querySubject("normal", "forced")) {
1013
+ constructor(provider, store = new MemoryStore(), query$ = querySubject(provider, "normal", "forced")) {
978
1014
  super();
979
1015
  this.provider = provider;
980
1016
  this.store = store;
@@ -1120,6 +1156,30 @@ class DataProvider {
1120
1156
  clampSlice(slice) {
1121
1157
  return of(slice);
1122
1158
  }
1159
+ filterNormalize(filter) {
1160
+ return filterNormalize(filter);
1161
+ }
1162
+ filterMerge(...filters) {
1163
+ return filterMerge(...filters);
1164
+ }
1165
+ sorterNormalize(sorter) {
1166
+ return sorterNormalize(sorter);
1167
+ }
1168
+ sorterMerge(...sorters) {
1169
+ return sorterMerge(...sorters);
1170
+ }
1171
+ grouperNormalize(grouper) {
1172
+ return grouperNormalize(grouper);
1173
+ }
1174
+ grouperMerge(...groupers) {
1175
+ return grouperMerge(...groupers);
1176
+ }
1177
+ slimerNormalize(slimer) {
1178
+ return slimerNormalize(slimer);
1179
+ }
1180
+ slimerMerge(...slimers) {
1181
+ return slimerMerge(...slimers);
1182
+ }
1123
1183
  /**
1124
1184
  * @returns New data source instance
1125
1185
  */
@@ -1517,5 +1577,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImpor
1517
1577
  * Generated bundle index. Do not edit.
1518
1578
  */
1519
1579
 
1520
- export { ArrayProvider, CollectionStore, DataProvider, DataSource, DataSourceModule, DataSourceProxy, DataSourceProxyBusy, DataSourceProxyFilter, DataSourceProxyGrouper, DataSourceProxySlimer, DataSourceProxySorter, LocalProvider, MemoryStore, ModelMeta, ModelRefByIndex, ModelRefByKey, ModelRefNorm, ObservableProvider, UnknownMeta, filterBy, filterMerge, filterNormalize, filterSimplify, groupBy, grouperMerge, pathGetterCompile, queryExecutor, querySubject, sliceApply, sliceClamp, sliceEq, sliceInsert, sliceMerge, sliceToPages, slimBy, slimerMerge, sortBy, sorterMerge, sorterNormalize };
1580
+ export { ArrayProvider, CollectionStore, DataProvider, DataSource, DataSourceModule, DataSourceProxy, DataSourceProxyBusy, DataSourceProxyFilter, DataSourceProxyGrouper, DataSourceProxySlimer, DataSourceProxySorter, FilterOp, LocalProvider, MemoryStore, ModelMeta, ModelRefByIndex, ModelRefByKey, ModelRefNorm, ObservableProvider, UnknownMeta, filterBy, filterMerge, filterNormalize, filterSimplify, groupBy, grouperMerge, pathGetterCompile, queryExecutor, querySubject, sliceApply, sliceClamp, sliceEq, sliceInsert, sliceMerge, sliceToPages, slimBy, slimerMerge, sortBy, sorterMerge, sorterNormalize };
1521
1581
  //# sourceMappingURL=ngutil-data.mjs.map