@ngutil/data 0.0.94 → 0.0.95
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.
- package/fesm2022/ngutil-data.mjs +60 -23
- package/fesm2022/ngutil-data.mjs.map +1 -1
- package/package.json +3 -3
- package/query/filter.d.ts +8 -3
package/fesm2022/ngutil-data.mjs
CHANGED
|
@@ -141,6 +141,7 @@ var FilterOp;
|
|
|
141
141
|
FilterOp["RegexpInsesitive"] = "~*";
|
|
142
142
|
FilterOp["Or"] = "|";
|
|
143
143
|
FilterOp["And"] = "&";
|
|
144
|
+
FilterOp["Not"] = "!";
|
|
144
145
|
})(FilterOp || (FilterOp = {}));
|
|
145
146
|
const OPERATORS = [
|
|
146
147
|
FilterOp.Eq,
|
|
@@ -167,7 +168,8 @@ const OPERATORS = [
|
|
|
167
168
|
FilterOp.Regexp,
|
|
168
169
|
FilterOp.RegexpInsesitive,
|
|
169
170
|
FilterOp.Or,
|
|
170
|
-
FilterOp.And
|
|
171
|
+
FilterOp.And,
|
|
172
|
+
FilterOp.Not
|
|
171
173
|
];
|
|
172
174
|
function asOperators(value) {
|
|
173
175
|
const ops = intersection(Object.keys(value), OPERATORS);
|
|
@@ -200,20 +202,23 @@ function filterNormalize(filters) {
|
|
|
200
202
|
return _normalizeFilter(filters);
|
|
201
203
|
}
|
|
202
204
|
function filterIsNormnalized(filters) {
|
|
203
|
-
if ("op" in filters && OPERATORS.includes(filters["op"])) {
|
|
204
|
-
if (filters
|
|
205
|
+
if (isPlainObject(filters) && "op" in filters && OPERATORS.includes(filters["op"])) {
|
|
206
|
+
if (filters["op"] === FilterOp.Or || filters["op"] === FilterOp.And || filters["op"] === FilterOp.Not) {
|
|
205
207
|
return Array.isArray(filters["value"]);
|
|
206
208
|
}
|
|
207
|
-
return typeof filters
|
|
209
|
+
return typeof filters["path"] === "string" && "value" in filters;
|
|
208
210
|
}
|
|
209
211
|
return false;
|
|
210
212
|
}
|
|
211
213
|
function _normalizeFilter(filters, parent) {
|
|
214
|
+
if (filters == null) {
|
|
215
|
+
return undefined;
|
|
216
|
+
}
|
|
212
217
|
if (filterIsNormnalized(filters)) {
|
|
213
218
|
return filters;
|
|
214
219
|
}
|
|
215
220
|
if ("op" in filters && "value" in filters) {
|
|
216
|
-
if (filters["op"] === FilterOp.Or || filters["op"] === FilterOp.And) {
|
|
221
|
+
if (filters["op"] === FilterOp.Or || filters["op"] === FilterOp.And || filters["op"] === FilterOp.Not) {
|
|
217
222
|
return { op: filters["op"], value: filters["value"].map((v) => _normalizeFilter(v, parent)) };
|
|
218
223
|
}
|
|
219
224
|
if ("path" in filters) {
|
|
@@ -223,15 +228,24 @@ function _normalizeFilter(filters, parent) {
|
|
|
223
228
|
const norm = flattenDeep(Object.entries(filters).map(([path, value]) => {
|
|
224
229
|
switch (path) {
|
|
225
230
|
case FilterOp.And:
|
|
226
|
-
if (!Array.isArray(value)) {
|
|
227
|
-
throw new Error(`Operator AND (${FilterOp.And}) must have array type`);
|
|
228
|
-
}
|
|
229
|
-
return { op: FilterOp.And, value: value.map(v => _normalizeFilter(v, parent)) };
|
|
230
231
|
case FilterOp.Or:
|
|
232
|
+
case FilterOp.Not:
|
|
231
233
|
if (!Array.isArray(value)) {
|
|
232
|
-
throw new Error(`Operator
|
|
234
|
+
throw new Error(`Operator (${path}) must have array type`);
|
|
233
235
|
}
|
|
234
|
-
return {
|
|
236
|
+
return {
|
|
237
|
+
op: path,
|
|
238
|
+
value: value
|
|
239
|
+
.map(v => {
|
|
240
|
+
if (isPlainObject(v)) {
|
|
241
|
+
return _normalizeFilter(v, parent);
|
|
242
|
+
}
|
|
243
|
+
else {
|
|
244
|
+
return parent ? { path: parent, op: FilterOp.EqStrict, value: v } : undefined;
|
|
245
|
+
}
|
|
246
|
+
})
|
|
247
|
+
.filter(v => v != null)
|
|
248
|
+
};
|
|
235
249
|
// TODO: check all filter, and if not found filter key, taht object maybne not a filter
|
|
236
250
|
default:
|
|
237
251
|
if (isPlainObject(value)) {
|
|
@@ -278,6 +292,8 @@ function _filterCompileNorm(filter, getPath) {
|
|
|
278
292
|
return and_(filter.value.map(v => _filterCompileNorm(v, getPath)));
|
|
279
293
|
case FilterOp.Or:
|
|
280
294
|
return or_(filter.value.map(v => _filterCompileNorm(v, getPath)));
|
|
295
|
+
case FilterOp.Not:
|
|
296
|
+
return not_(filter.value.map(v => _filterCompileNorm(v, getPath)));
|
|
281
297
|
default:
|
|
282
298
|
return _filterComplileNormPath(getPath(filter.path), filter.op, filter.value, getPath);
|
|
283
299
|
}
|
|
@@ -290,6 +306,8 @@ function _filterComplileNormPath(getter, op, value, getPath) {
|
|
|
290
306
|
return and_(value.map(v => _filterCompileNorm(v, getPath)));
|
|
291
307
|
case FilterOp.Or:
|
|
292
308
|
return or_(value.map(v => _filterCompileNorm(v, getPath)));
|
|
309
|
+
case FilterOp.Not:
|
|
310
|
+
return not_(value.map(v => _filterCompileNorm(v, getPath)));
|
|
293
311
|
case FilterOp.Eq:
|
|
294
312
|
// eslint-disable-next-line eqeqeq
|
|
295
313
|
return matcher(getter, v => v == value);
|
|
@@ -360,7 +378,7 @@ function matcher(getter, predict) {
|
|
|
360
378
|
}
|
|
361
379
|
function and_(fns) {
|
|
362
380
|
if (fns.length === 0) {
|
|
363
|
-
return
|
|
381
|
+
return alwaysTrue;
|
|
364
382
|
}
|
|
365
383
|
if (fns.length === 1) {
|
|
366
384
|
return fns[0];
|
|
@@ -376,7 +394,7 @@ function and_(fns) {
|
|
|
376
394
|
}
|
|
377
395
|
function or_(fns) {
|
|
378
396
|
if (fns.length === 0) {
|
|
379
|
-
return
|
|
397
|
+
return alwaysTrue;
|
|
380
398
|
}
|
|
381
399
|
if (fns.length === 1) {
|
|
382
400
|
return fns[0];
|
|
@@ -390,10 +408,27 @@ function or_(fns) {
|
|
|
390
408
|
return false;
|
|
391
409
|
};
|
|
392
410
|
}
|
|
411
|
+
function not_(fns) {
|
|
412
|
+
if (fns.length === 0) {
|
|
413
|
+
return alwaysTrue;
|
|
414
|
+
}
|
|
415
|
+
return item => !and_(fns)(item);
|
|
416
|
+
}
|
|
393
417
|
function filterMerge(...filters) {
|
|
418
|
+
filters.reverse();
|
|
419
|
+
const lastReset = filters.findIndex(v => v == null);
|
|
420
|
+
filters.reverse();
|
|
421
|
+
if (lastReset !== -1) {
|
|
422
|
+
filters = filters.slice(lastReset + 1);
|
|
423
|
+
}
|
|
394
424
|
const value = filters
|
|
395
|
-
.
|
|
425
|
+
.map(filterNormalize)
|
|
426
|
+
.filter(v => v !== undefined)
|
|
427
|
+
.filter(v => (Array.isArray(v) && v.length > 0) || (isPlainObject(v) && Object.keys(v).length > 0))
|
|
396
428
|
.map(filter => deepClone(filter));
|
|
429
|
+
if (value.length === 0) {
|
|
430
|
+
return undefined;
|
|
431
|
+
}
|
|
397
432
|
return compact({ op: FilterOp.And, value });
|
|
398
433
|
}
|
|
399
434
|
class FilterProperty extends QueryProperty {
|
|
@@ -438,13 +473,13 @@ function filterSimplify(filters) {
|
|
|
438
473
|
}
|
|
439
474
|
}
|
|
440
475
|
function compact(filters) {
|
|
441
|
-
if (filters.op === FilterOp.And || filters.op === FilterOp.Or) {
|
|
476
|
+
if (filters.op === FilterOp.And || filters.op === FilterOp.Or || filters.op === FilterOp.Not) {
|
|
442
477
|
if (isFalsy(filters.value)) {
|
|
443
|
-
return
|
|
478
|
+
return undefined;
|
|
444
479
|
}
|
|
445
480
|
let value = filters.value.map(compact).filter(isTruthy);
|
|
446
481
|
if (value.length === 0) {
|
|
447
|
-
return
|
|
482
|
+
return undefined;
|
|
448
483
|
}
|
|
449
484
|
// remove subfilters with the same operator
|
|
450
485
|
value = value.reduce((acc, value) => {
|
|
@@ -456,20 +491,22 @@ function compact(filters) {
|
|
|
456
491
|
return acc;
|
|
457
492
|
}
|
|
458
493
|
}, []);
|
|
459
|
-
// deduplicate
|
|
494
|
+
// deduplicate by path && op
|
|
460
495
|
value = value
|
|
461
496
|
.reverse()
|
|
462
|
-
.filter((v, i, a) => a.findIndex(v2 => v.path === v2.path && v.op === v2.op) === i)
|
|
497
|
+
.filter((v, i, a) => a.findIndex(v2 => "path" in v && "path" in v2 && v.path === v2.path && v.op === v2.op) === i)
|
|
498
|
+
// remove undefined values, keep null
|
|
499
|
+
.filter(v => "value" in v && v.value !== undefined)
|
|
463
500
|
.reverse();
|
|
501
|
+
if (value.length === 0) {
|
|
502
|
+
return undefined;
|
|
503
|
+
}
|
|
464
504
|
if (value.length === 1) {
|
|
465
505
|
return value[0];
|
|
466
506
|
}
|
|
467
507
|
return { op: filters.op, value };
|
|
468
508
|
}
|
|
469
|
-
|
|
470
|
-
return null;
|
|
471
|
-
}
|
|
472
|
-
return filters;
|
|
509
|
+
return filters ?? undefined;
|
|
473
510
|
}
|
|
474
511
|
|
|
475
512
|
function groupBy(grouper) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngutil-data.mjs","sources":["../../../../packages/data/src/query/path.ts","../../../../packages/data/src/query/common.ts","../../../../packages/data/src/query/query-property.ts","../../../../packages/data/src/query/filter.ts","../../../../packages/data/src/query/grouper.ts","../../../../packages/data/src/query/sorter.ts","../../../../packages/data/src/query/slimer.ts","../../../../packages/data/src/query/slice.ts","../../../../packages/data/src/query/query.ts","../../../../packages/data/src/query/executor.ts","../../../../packages/data/src/store/collection-store.ts","../../../../packages/data/src/store/memory-store.ts","../../../../packages/data/src/source/source.ts","../../../../packages/data/src/provider/provider.ts","../../../../packages/data/src/source/proxy.directive.ts","../../../../packages/data/src/model/meta.ts","../../../../packages/data/src/provider/local.ts","../../../../packages/data/src/provider/array.ts","../../../../packages/data/src/provider/observable.ts","../../../../packages/data/src/index.ts","../../../../packages/data/src/ngutil-data.ts"],"sourcesContent":["import { flatten } from \"es-toolkit\"\n\ntype GetterFn = (srcs: any[]) => any[]\nexport type PathGetter<T = any, R = any> = (obj: T) => R[]\n\nexport function pathGetterCompile(path: string): PathGetter {\n if (!path || path.length === 0) {\n throw new Error(\"Empty path\")\n }\n\n return path.split(\".\").reduce<GetterFn>(\n (parent, part) => makeGetter(part, parent),\n (obj: any) => (obj == null ? [] : [obj])\n )\n}\n\nconst IsNumber = /^\\d+$/\n\nfunction makeGetter(part: string, parent: GetterFn): GetterFn {\n if (part === \"*\") {\n return obj => flatten(parent(obj), 1)\n } else {\n const key = IsNumber.test(part) ? Number(part) : part\n return obj => parent(obj).map(v => (v != null ? v[key] : undefined))\n }\n}\n","export function readonlyProp(o: unknown, n: string | symbol, v: unknown) {\n Object.defineProperty(o, n, {\n value: v,\n configurable: false,\n enumerable: true,\n writable: false\n })\n}\n\nconst NORMALIZED = Symbol(\"NORMALIZED\")\nconst IS_NORMALIZED = Symbol(\"IS_NORMALIZED\")\n\nexport function normalize(obj: any, normalizer: (v: any) => any): any {\n if ((obj as any)[IS_NORMALIZED]) {\n return obj as any\n }\n\n if ((obj as any)[NORMALIZED] == null) {\n const normalized = normalizer(obj)\n Object.defineProperty(obj, NORMALIZED, {\n value: normalized,\n configurable: false,\n enumerable: false,\n writable: false\n })\n\n Object.defineProperty(normalize, IS_NORMALIZED, {\n value: true,\n configurable: false,\n enumerable: false,\n writable: false\n })\n\n return normalized\n }\n\n return (obj as any)[NORMALIZED]\n}\n","import { BehaviorSubject, combineLatest, map, Observable, shareReplay } from \"rxjs\"\n\nimport { isEqual } from \"es-toolkit\"\n\nimport { deepClone, deepFreeze } from \"@ngutil/common\"\n\nimport type { DataProvider } from \"../provider\"\nimport { readonlyProp } from \"./common\"\n\nexport abstract class QueryProperty<I, O> extends BehaviorSubject<O | undefined> {\n constructor(protected readonly provider: DataProvider<any>) {\n super(undefined)\n }\n\n set(value?: I | O) {\n this.#nextClone(value != null ? this.norm(value) : undefined)\n }\n\n update(value?: I | O): void {\n const norm = value != null ? this.norm(value) : undefined\n if (!isEqual(this.value, norm)) {\n this.#next(this.merge(this.value, norm))\n }\n }\n\n del(): void {\n this.set(undefined)\n }\n\n /**\n * Merge values and emit when changed (dont change original values)\n */\n protected abstract merge(a?: O, b?: O): O | undefined\n protected abstract norm(a: I | O): O | undefined\n\n #next(value?: O) {\n if (!isEqual(this.value, value)) {\n if (value == null) {\n this.next(undefined)\n } else {\n this.next(value)\n }\n }\n }\n\n #nextClone(value?: O) {\n if (!isEqual(this.value, value)) {\n if (value == null) {\n this.next(undefined)\n } else {\n this.next(deepClone<any>(value))\n }\n }\n }\n}\n\nexport abstract class QueryPropertySet<O> extends Observable<O> {\n readonly #combined: Observable<O>\n\n constructor(\n protected readonly provider: DataProvider<any>,\n ...names: string[]\n ) {\n super(dest => this.#combined.subscribe(dest))\n\n const observables: Array<Observable<any>> = []\n const props: { [key: string]: Observable<any> } = {}\n\n for (const name of names) {\n const o = this.newProperty()\n observables.push(o)\n props[name] = o\n }\n\n this.#combined = combineLatest(observables).pipe(\n map(values => deepFreeze(this.merge(...values))),\n shareReplay(1)\n )\n\n for (const [k, v] of Object.entries(props)) {\n readonlyProp(this, k, v)\n }\n }\n\n protected abstract newProperty(): QueryProperty<any, any>\n protected abstract merge(...args: any[]): any | undefined\n}\n\nexport type QueryPropertySetOf<T, P, N extends string[]> = T & { [K in N[number]]: P }\n","import { flattenDeep, intersection } from \"es-toolkit\"\n\nimport { AsPrimitive, deepClone, isFalsy, isPlainObject, isTruthy, MaxRecursion } from \"@ngutil/common\"\n\nimport { Model } from \"../model\"\nimport { PathGetter, pathGetterCompile } from \"./path\"\nimport { QueryProperty, QueryPropertySet } from \"./query-property\"\n\nexport enum FilterOp {\n Eq = \"==\",\n EqStrict = \"===\",\n EqInsesitive = \"==*\",\n Neq = \"!=\",\n NeqStrict = \"!==\",\n NeqInsesitive = \"!=*\",\n Gt = \">\",\n GtInsesitive = \">*\",\n Gte = \">=\",\n GteInsesitive = \">=*\",\n Lt = \"<\",\n LtInsesitive = \"<*\",\n Lte = \"<=\",\n LteInsesitive = \"<=*\",\n Contains = \"%\",\n ContainsInsesitive = \"%*\",\n StartsWith = \"^\",\n StartsWithInsesitive = \"^*\",\n EndsWith = \"$\",\n EndsWithInsesitive = \"$*\",\n Similarity = \"**\",\n Regexp = \"~\",\n RegexpInsesitive = \"~*\",\n Or = \"|\",\n And = \"&\"\n}\n\nexport const OPERATORS: Array<string> = [\n FilterOp.Eq,\n FilterOp.EqStrict,\n FilterOp.EqInsesitive,\n FilterOp.Neq,\n FilterOp.NeqStrict,\n FilterOp.NeqInsesitive,\n FilterOp.Gt,\n FilterOp.GtInsesitive,\n FilterOp.Gte,\n FilterOp.GteInsesitive,\n FilterOp.Lt,\n FilterOp.LtInsesitive,\n FilterOp.Lte,\n FilterOp.LteInsesitive,\n FilterOp.Contains,\n FilterOp.ContainsInsesitive,\n FilterOp.StartsWith,\n FilterOp.StartsWithInsesitive,\n FilterOp.EndsWith,\n FilterOp.EndsWithInsesitive,\n FilterOp.Similarity,\n FilterOp.Regexp,\n FilterOp.RegexpInsesitive,\n FilterOp.Or,\n FilterOp.And\n]\n\nexport function asOperators(value: any): Array<{ op: FilterOp; value: any }> {\n const ops = intersection(Object.keys(value), OPERATORS) as FilterOp[]\n if (ops.length > 0) {\n return ops.map(op => {\n return { op, value: value[op] }\n })\n } else {\n return [{ op: FilterOp.Eq, value }]\n }\n}\n\n// export type Filter<T extends Model> = _Filter<Flatten<T>, [], MaxRecursion>\n// TODO: fix recursion\nexport type Filter<T extends Model> = { [key: string]: any }\n\ntype _Filter<F, P extends number[], D extends number> = P[\"length\"] extends D ? never : _ObjectFilter<F, P, D>\n\ntype _ObjectFilter<F, P extends number[], D extends number> = P[\"length\"] extends D\n ? never\n : { [K in keyof F]?: Operators<F[K], P, D> }\n\ntype RootOr<F, P extends number[], D extends number> = P[\"length\"] extends D\n ? never\n : { [FilterOp.Or]: Array<_Filter<F, [...P, 0], D>> | undefined }\n\ntype RootAnd<F, P extends number[], D extends number> = P[\"length\"] extends D\n ? never\n : { [FilterOp.And]: Array<_Filter<F, [...P, 0], D>> | undefined }\n\nexport type Operators<T, P extends number[], D extends number = MaxRecursion> = P[\"length\"] extends D\n ? never\n : SimpleOperators<T>\n\ntype LocalOr<T, P extends number[], D extends number> = P[\"length\"] extends D\n ? never\n : { [FilterOp.Or]: Array<Operators<T, [...P, 0], D>> | undefined }\n\ntype LocalAnd<T, P extends number[], D extends number> = P[\"length\"] extends D\n ? never\n : { [FilterOp.And]: Array<Operators<T, [...P, 0], D>> | undefined }\n\ntype SimpleOperators<T> =\n | EqStrict<T>\n | NeqStrict<T>\n | Eq<T>\n | Neq<T>\n | Gt<T>\n | Gte<T>\n | Lt<T>\n | Lte<T>\n | Contains<T>\n | StartsWith<T>\n | Similarity<T>\n | EndsWith<T>\n | Regexp<T>\n | T\n | undefined\n | null\n\ntype EqStrict<T> = Operator<T, T, FilterOp.EqStrict, never, null>\ntype NeqStrict<T> = Operator<T, T, FilterOp.NeqStrict, never, null>\ntype Eq<T> = Operator<T, T | AsPrimitive<T>, FilterOp.Eq, FilterOp.EqInsesitive, null>\ntype Neq<T> = Operator<T, T | AsPrimitive<T>, FilterOp.Neq, FilterOp.NeqInsesitive, null>\ntype Gt<T> = Operator<T, T | AsPrimitive<T>, FilterOp.Gt, FilterOp.GtInsesitive>\ntype Gte<T> = Operator<T, T | AsPrimitive<T>, FilterOp.Gte, FilterOp.GteInsesitive>\ntype Lt<T> = Operator<T, T | AsPrimitive<T>, FilterOp.Lt, FilterOp.LtInsesitive>\ntype Lte<T> = Operator<T, T | AsPrimitive<T>, FilterOp.Lte, FilterOp.LteInsesitive>\ntype Contains<T> = Operator<T, string, FilterOp.Contains, FilterOp.ContainsInsesitive>\ntype StartsWith<T> = Operator<T, string, FilterOp.StartsWith, FilterOp.StartsWithInsesitive>\ntype Similarity<T> = Operator<T, string, FilterOp.Similarity, never, null>\ntype EndsWith<T> = Operator<T, string, FilterOp.EndsWith, FilterOp.EndsWithInsesitive>\ntype Regexp<T> = Operator<T, string, FilterOp.Regexp, FilterOp.RegexpInsesitive, RegExp>\n\ntype Operator<T, R, OP extends string, OPI extends string = never, ET = never> =\n | (T extends R ? { [k in OP]: T | ET | R } : never)\n | (T extends string ? (OPI extends never ? never : { [k in OPI]: string }) : never)\n\nexport type FilterFn<T = any> = (item: T) => boolean\n\n/**\n * @example\n * ```ts\n * items.filter(filterBy({id: 42}))\n * ```\n */\nexport function filterBy<T extends Model>(filters: Filter<T>): FilterFn<T> {\n return _filterCompile<T>(filters)\n}\n\n// TODO: Normalize filter\n// type _Filter = { path: string; op: FilterOp; value: any }\n// type _Or = { \"|\": Array<_Filter> }\n// type _And = { \"&\": Array<_Filter> }\n// export type NormalizedFilter = _Or | _And\ntype NormPath = { path: string; op: Exclude<FilterOp, FilterOp.Or | FilterOp.And>; value: any }\ntype NormOr = { op: FilterOp.Or; value: Array<NormEntry> }\ntype NormAnd = { op: FilterOp.And; value: Array<NormEntry> }\ntype NormEntry = NormPath | NormOr | NormAnd\nexport type FilterNormalized = NormEntry\n\n/**\n * @example\n * ```ts\n * filterNormalize({id: {\">\": 0, \"<\": 10}})\n * {op: \"&\", value: [{path: \"id\", op: \">\", value: 0}, {path: \"id\", op: \"<\", value: 10}]}\n * ```\n */\nexport function filterNormalize<T extends Model>(filters: Filter<T>): FilterNormalized | undefined {\n return _normalizeFilter(filters)\n}\n\nexport function filterIsNormnalized(filters: any): filters is FilterNormalized {\n if (\"op\" in filters && OPERATORS.includes(filters[\"op\"])) {\n if (filters.op === FilterOp.Or || filters.op === FilterOp.And) {\n return Array.isArray(filters[\"value\"])\n }\n return typeof filters.path === \"string\" && \"value\" in filters\n }\n return false\n}\n\nfunction _normalizeFilter<T extends Model>(filters: Filter<T>, parent?: string): FilterNormalized | undefined {\n if (filterIsNormnalized(filters)) {\n return filters\n }\n\n if (\"op\" in filters && \"value\" in filters) {\n if (filters[\"op\"] === FilterOp.Or || filters[\"op\"] === FilterOp.And) {\n return { op: filters[\"op\"], value: filters[\"value\"].map((v: any) => _normalizeFilter(v, parent)) }\n }\n if (\"path\" in filters) {\n return filters as FilterNormalized\n }\n }\n\n const norm = flattenDeep(\n Object.entries(filters).map(([path, value]) => {\n switch (path) {\n case FilterOp.And:\n if (!Array.isArray(value)) {\n throw new Error(`Operator AND (${FilterOp.And}) must have array type`)\n }\n return { op: FilterOp.And, value: value.map(v => _normalizeFilter(v, parent)) }\n\n case FilterOp.Or:\n if (!Array.isArray(value)) {\n throw new Error(`Operator OR (${FilterOp.Or}) must have array type`)\n }\n return { op: FilterOp.Or, value: value.map(v => _normalizeFilter(v, parent)) }\n\n // TODO: check all filter, and if not found filter key, taht object maybne not a filter\n default:\n if (isPlainObject(value)) {\n return _normalizeFilter(value, path)\n }\n if (parent != null) {\n return { path: parent, op: path, value }\n } else {\n return { path, op: FilterOp.EqStrict, value }\n }\n }\n })\n )\n\n if (norm.length === 0) {\n return undefined\n } else if (norm.length === 1) {\n return norm[0] as FilterNormalized\n } else {\n return { op: FilterOp.And, value: norm } as FilterNormalized\n }\n}\n\ntype GetPathFn = (pth: string) => ReturnType<typeof pathGetterCompile>\n\nfunction _filterCompile<T extends Model>(filters: Filter<T>): FilterFn<T> {\n const pathCache: { [key: string]: PathGetter } = {}\n const getPath = (pth: string) => {\n if (pathCache[pth] != null) {\n return pathCache[pth]\n }\n return (pathCache[pth] = pathGetterCompile(pth))\n }\n const normalized = filterNormalize(filters)\n if (normalized == null) {\n return alwaysTrue\n }\n return _filterCompileNorm(normalized, getPath)\n}\n\nfunction alwaysTrue() {\n return true\n}\n\nfunction _filterCompileNorm(filter: FilterNormalized, getPath: GetPathFn): FilterFn<any> {\n switch (filter.op) {\n case FilterOp.And:\n return and_(filter.value.map(v => _filterCompileNorm(v, getPath)))\n\n case FilterOp.Or:\n return or_(filter.value.map(v => _filterCompileNorm(v, getPath)))\n\n default:\n return _filterComplileNormPath(getPath(filter.path), filter.op, filter.value, getPath)\n }\n}\n\nfunction _filterComplileNormPath(getter: PathGetter, op: FilterOp, value: any, getPath: GetPathFn): FilterFn<any> {\n let lower: string\n let regex: RegExp\n switch (op) {\n case FilterOp.And:\n return and_((value as NormEntry[]).map(v => _filterCompileNorm(v, getPath)))\n\n case FilterOp.Or:\n return or_((value as NormEntry[]).map(v => _filterCompileNorm(v, getPath)))\n\n case FilterOp.Eq:\n // eslint-disable-next-line eqeqeq\n return matcher(getter, v => v == value)\n\n case FilterOp.EqStrict:\n return matcher(getter, v => v === value)\n\n case FilterOp.EqInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase() === lower)\n\n case FilterOp.Neq:\n // eslint-disable-next-line eqeqeq\n return matcher(getter, v => v != value)\n\n case FilterOp.NeqStrict:\n return matcher(getter, v => v !== value)\n\n case FilterOp.NeqInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase() !== lower)\n\n case FilterOp.Gt:\n return matcher(getter, v => v > value)\n\n case FilterOp.GtInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase() > lower)\n\n case FilterOp.Gte:\n return matcher(getter, v => v >= value)\n\n case FilterOp.GteInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase() >= lower)\n\n case FilterOp.Lt:\n return matcher(getter, v => v < value)\n\n case FilterOp.LtInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase() < lower)\n\n case FilterOp.Lte:\n return matcher(getter, v => v <= value)\n\n case FilterOp.LteInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase() <= lower)\n\n case FilterOp.Contains:\n lower = String(value)\n return matcher(getter, v => (Array.isArray(v) ? v.includes(value) : String(v).includes(lower)))\n\n case FilterOp.ContainsInsesitive:\n case FilterOp.Similarity:\n // TODO: proper similarity test\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase().includes(lower))\n\n case FilterOp.StartsWith:\n lower = String(value)\n return matcher(getter, v => String(v).startsWith(lower))\n\n case FilterOp.StartsWithInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase().startsWith(lower))\n\n case FilterOp.EndsWith:\n lower = String(value)\n return matcher(getter, v => String(v).endsWith(lower))\n\n case FilterOp.EndsWithInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase().endsWith(lower))\n\n case FilterOp.Regexp:\n regex = value instanceof RegExp ? value : new RegExp(value, \"msv\")\n return matcher(getter, v => regex.test(v))\n\n case FilterOp.RegexpInsesitive:\n regex = value instanceof RegExp ? value : new RegExp(value, \"msvi\")\n return matcher(getter, v => regex.test(v))\n }\n\n throw new Error(`Unexpected operator: ${op}`)\n}\n\nfunction matcher(getter: PathGetter, predict: (value: any) => boolean): FilterFn {\n return obj => getter(obj).some(predict)\n}\n\nfunction and_(fns: FilterFn[]): FilterFn {\n if (fns.length === 0) {\n return _ => true\n }\n\n if (fns.length === 1) {\n return fns[0]\n }\n\n return item => {\n for (const fn of fns) {\n if (!fn(item)) {\n return false\n }\n }\n return true\n }\n}\n\nfunction or_(fns: FilterFn[]): FilterFn {\n if (fns.length === 0) {\n return _ => true\n }\n\n if (fns.length === 1) {\n return fns[0]\n }\n\n return item => {\n for (const fn of fns) {\n if (fn(item)) {\n return true\n }\n }\n return false\n }\n}\n\nexport function filterMerge(...filters: any[]): any | undefined {\n const value = filters\n .filter(v => v && ((Array.isArray(v) && v.length > 0) || (isPlainObject(v) && Object.keys(v).length > 0)))\n .map(filter => deepClone(filter))\n\n return compact({ op: FilterOp.And, value })\n}\n\nexport class FilterProperty<T extends Model> extends QueryProperty<Filter<T>, FilterNormalized> {\n protected override merge(\n a?: FilterNormalized | undefined,\n b?: FilterNormalized | undefined\n ): FilterNormalized | undefined {\n return this.provider.filterMerge(a, b)\n }\n protected override norm(a: FilterNormalized | Filter<T>): FilterNormalized | undefined {\n return this.provider.filterNormalize(a)\n }\n}\n\nexport class FilterPropertySet<T extends Model> extends QueryPropertySet<Filter<T>> {\n protected override newProperty() {\n return new FilterProperty(this.provider)\n }\n\n protected override merge(...args: any[]) {\n return this.provider.filterMerge(...args)\n }\n}\n\nexport function filterSimplify(filters: any): object | null {\n if (isTruthy(filters)) {\n filters = compact(filterNormalize(filters)!)\n const result: { [key: string]: any } = {}\n if (filters[\"op\"] === FilterOp.And) {\n filters = filters[\"value\"]\n if (filters == null) {\n return result\n }\n }\n if (!Array.isArray(filters)) {\n filters = [filters]\n }\n\n for (const f of filters) {\n if (\n f[\"value\"] != null &&\n (f[\"op\"] === FilterOp.Eq || f[\"op\"] === FilterOp.EqStrict || f[\"op\"] === FilterOp.EqInsesitive)\n ) {\n result[f[\"path\"] as string] = f[\"value\"]\n }\n }\n return result\n } else {\n return null\n }\n}\n\nfunction compact(filters: FilterNormalized): any {\n if (filters.op === FilterOp.And || filters.op === FilterOp.Or) {\n if (isFalsy(filters.value)) {\n return null\n }\n\n let value = filters.value.map(compact).filter(isTruthy)\n if (value.length === 0) {\n return null\n }\n\n // remove subfilters with the same operator\n value = value.reduce((acc, value) => {\n if (value.op === filters.op) {\n return acc.concat(value.value)\n } else {\n acc.push(value)\n return acc\n }\n }, [])\n\n // deduplicate, and latest filter is the most priority\n value = value\n .reverse()\n .filter((v, i, a) => a.findIndex(v2 => v.path === v2.path && v.op === v2.op) === i)\n .reverse()\n\n if (value.length === 1) {\n return value[0]\n }\n\n return { op: filters.op, value }\n } else if (filters.value == null) {\n return null\n }\n return filters\n}\n","import { Flatten, Primitive } from \"@ngutil/common\"\n\nimport { Model } from \"../model\"\nimport { QueryProperty, QueryPropertySet } from \"./query-property\"\n\nexport type GrouperFn<T = any> = (item: any) => Primitive\n\nexport type Grouper<T extends Model, F = Flatten<T>> = any\nexport type GrouperNormalized = any\n\nexport function groupBy<T extends Model, F = Flatten<T>>(grouper: Grouper<T, F>): GrouperFn<T> {\n return grouperCompile<T, F>(grouper)\n}\n\nfunction grouperCompile<T extends Model, F = Flatten<T>>(grouper: Grouper<T, F>): GrouperFn<T> {\n return _ => undefined\n}\n\nexport function grouperMerge<T extends Model, F = Flatten<T>>(\n ...groupers: Array<Grouper<T, F> | undefined | null>\n): Grouper<T, F> | undefined {\n return undefined\n}\n\nexport function grouperNormalize<T extends Model>(grouper: Grouper<T>): GrouperNormalized {}\n\n// import { Primitive } from \"utility-types\"\n\n// import { Eval, Flatten } from \"@ngutil/common\"\n\n// import { type Model } from \"./query\"\n// import { SorterFn } from \"./sorter\"\n\n// export interface Grouped<T extends Model> {\n// items: T[]\n// groups: Group<T>\n// }\n\n// export type GrouperFn<T extends Model> = (items: T[]) => any\n\n// export type GroupKey<T extends Model> = (item: T, index: number) => Primitive[]\n\n// export type GroupItemIsMatch<T extends Model> = (item: T, index: number) => boolean\n\n// export interface GrouperX<T extends Model> {\n// name: string\n// title?: string\n// isMatch?: GroupKey<T>\n// [key: string]: any\n// }\n\n// export interface GrouperXNormalized<T extends Model> extends GrouperX<T> {\n// key: GroupKey<T>\n// }\n\n// type _Groupers<T extends Model, F> = keyof F | Grouper<T>\n// export type Grouper<T extends Model, F = Flatten<T>> = Eval<Array<_Groupers<T, F>>>\n\n// export type GrouperNormalized<T extends Model> = { [key: string]: GrouperXNormalized<T> }\n\n// export interface Group<T extends Model, G extends Grouper<T> = Grouper<T>> {\n// grouper: G\n// begin: number\n// end: number\n// }\n\n// /**\n// * @example\n// * ```ts\n// * const grouped = groupBy([\"status\"])(items)\n// * // expexted: {[status]: [...items]}\n// *\n// * const grouped = groupBy([\"name\", \"age\"])(items)\n// * // expected {[status]: {[age]: [...items]}}\n// *\n// * const STATUS_LABELS = {active: \"Active\", inactive: \"Inactive\"}\n// * const grouped = groupBy([(item) => (STATUS_LABELS[item.status] || \"Undefined\")])(items)\n// * // expected {[\"Active\" | \"Inactive\" | \"Undefined\"]: [...items]}\n// *\n// * const grouped = groupBy([(item) => (STATUS_LABELS[item.status] || \"Undefined\"), \"age\"])(items)\n// * // expected {[\"Active\" | \"Inactive\" | \"Undefined\"]: {[age]: [...items]}}\n// * ```\n// */\n// export function groupBy<T extends Model>(groupers: Grouper<T>): SorterFn<T> {\n// return (_a, _b) => 0\n// }\n\n// export function grouperNormalize() {}\n\n// export function grouperCompile<T extends Model>(groupers: Grouper<T>): GrouperFn<T> {\n// return _ => undefined\n// }\n\n// export function grouperMerge<T extends Model, F = Flatten<T>>(\n// ...groupers: Array<Grouper<T, F> | undefined | null>\n// ): Grouper<T, F> | undefined {\n// return undefined\n// }\n\nexport class GrouperProperty<T extends Model> extends QueryProperty<Grouper<T>, GrouperNormalized> {\n protected override norm(a: any) {\n return this.provider.grouperNormalize(a)\n }\n\n protected override merge(a?: any, b?: any) {\n return this.provider.grouperMerge(a, b)\n }\n}\n\nexport class GrouperPropertySet<T extends Model> extends QueryPropertySet<Grouper<T>> {\n protected override newProperty() {\n return new GrouperProperty(this.provider)\n }\n\n protected override merge(...args: any[]) {\n return this.provider.grouperMerge(...args)\n }\n}\n","import { map, Observable } from \"rxjs\"\n\nimport { flattenDeep, isEqual } from \"es-toolkit\"\n\nimport { deepClone, isPlainObject } from \"@ngutil/common\"\n\nimport { Model } from \"../model\"\nimport { pathGetterCompile } from \"./path\"\nimport { QueryProperty, QueryPropertySet } from \"./query-property\"\n\nexport type SorterFn<T = any> = (a: T, b: T) => number\n\nexport const enum SortDirection {\n Asc = \"asc\",\n Desc = \"desc\"\n}\n\nexport type SortDir = SortDirection.Asc | SortDirection.Desc | \"asc\" | \"desc\"\nexport type SortDirExtra = { dir: SortDir; emptyFirst: boolean }\n\ntype _Sorter<F> = { [K in keyof F]: { [key in K]: SortDir | SortDirExtra } }[keyof F]\n// TODO: fix recursion\n// export type Sorter<T extends Model> = Array<_Sorter<Flatten<T>>>\nexport type Sorter<T extends Model> = Array<{ [key: string]: SortDir | SortDirExtra | NormalizedEntry | undefined }>\n\ntype NormalizedEntry = { path: string; isAsc: boolean; emptyFirst: boolean; remove?: boolean }\nexport type SorterNormalized = Array<NormalizedEntry>\n\n/**\n * @example\n *```ts\n * items.toSorted(sortBy([{\"author.name\": \"asc\"}]))\n * ```\n */\nexport function sortBy<T extends Model>(sorters: Sorter<T> | SorterNormalized): SorterFn<T> {\n if (sorters.length === 0) {\n throw new Error(\"Empty sorter\")\n }\n return _sorterCompile<T>(sorters) as any\n}\n\n/**\n * Normalize sorter definition\n *\n * @example\n * ```ts\n * normalizeSorter([{id: \"asc\"}]) -> [{path: \"id\", isAsc: true, emptyFirst: true}]\n * normalizeSorter([{id: {dir: \"desc\", emptyFirst: false}}]) -> [{path: \"id\", isAsc: false, emptyFirst: false}]\n * ```\n */\nexport function sorterNormalize<T extends Model>(sorters: Sorter<T> | SorterNormalized): SorterNormalized {\n if (sorterIsNormalized(sorters)) {\n return sorters\n }\n return _sorterNormalize(sorters)\n}\n\nexport function sorterIsNormalized(sorter: any): sorter is SorterNormalized {\n return Array.isArray(sorter) && sorter.every(value => \"path\" in value && \"isAsc\" in value && \"emptyFirst\" in value)\n}\n\nfunction _sorterNormalize<T extends Model>(sorters: Sorter<T>): SorterNormalized {\n if (!Array.isArray(sorters)) {\n sorters = [sorters]\n }\n\n return flattenDeep(\n (sorters as any).map((s: any) => {\n if (isPlainObject(s)) {\n // entry is normalized\n if (s[\"path\"] != null && s[\"isAsc\"] != null && s[\"emptyFirst\"] != null) {\n return s\n }\n }\n\n return Object.entries(s).map(([k, v]) => {\n if (v == null) {\n return { path: k, remove: true }\n } else if (typeof v === \"string\") {\n const isAsc = v.toLowerCase() === \"asc\"\n return { path: k, isAsc, emptyFirst: isAsc ? false : true }\n } else if (isPlainObject(v)) {\n return {\n path: k,\n isAsc: ((v as SortDirExtra).dir || \"asc\").toLowerCase() === \"asc\",\n emptyFirst: (v as SortDirExtra).emptyFirst == null ? true : !!(v as SortDirExtra).emptyFirst\n }\n } else {\n throw new Error(`Invalid sorter: ${v}`)\n }\n })\n })\n )\n}\n\nfunction _sorterCompile<T extends Model>(sorters: Sorter<T> | SorterNormalized): SorterFn<T> {\n if (sorters.length === 0) {\n return (_a, _b) => 0\n }\n\n const norm = sorterNormalize<T>(sorters).map(createComparator)\n if (norm.length === 1) {\n return norm[0]\n }\n\n const initial = norm.pop()!\n return norm.reduceRight<SorterFn<T>>(\n (next, curr) => (a, b) => {\n const r = curr(a, b)\n return r === 0 ? next(a, b) : r\n },\n initial\n )\n}\n\nfunction createComparator({ path, isAsc, emptyFirst }: NormalizedEntry): SorterFn {\n const getter = pathGetterCompile(path)\n if (isAsc) {\n return (a, b) => compare(getter(a), getter(b), emptyFirst)\n } else {\n return (a, b) => compare(getter(a), getter(b), !emptyFirst) * -1\n }\n}\n\nexport function compare(a: any, b: any, emptyFirst: boolean): number {\n // console.log(\"COMPARE\", a, b)\n if (a == null && b != null) {\n return emptyFirst === true ? -1 : 1\n } else if (a != null && b == null) {\n return emptyFirst === true ? 1 : -1\n } else if (a == null && b == null) {\n return 0\n } else if (isEqual(a, b)) {\n return 0\n } else if (typeof a === \"number\" && typeof b === \"number\") {\n return a - b\n } else if (typeof a === \"string\" && typeof b === \"string\") {\n const al = a.length\n const bl = b.length\n // if both lengths is 0 the code execution not reach that point, because a === b\n if (emptyFirst === true) {\n if (al === 0) {\n return -1\n } else if (bl === 0) {\n return 1\n }\n } else {\n if (al === 0) {\n return 1\n } else if (bl === 0) {\n return -1\n }\n }\n return a.localeCompare(b)\n } else if (Array.isArray(a) && Array.isArray(b)) {\n const al = a.length\n const bl = b.length\n const l = Math.min(al, bl)\n\n for (let i = 0; i < l; i++) {\n const res = compare(a[i], b[i], emptyFirst)\n if (res !== 0) {\n return res\n }\n }\n\n if (al === bl) {\n return 0\n }\n\n if (emptyFirst === true) {\n if (al === 0) {\n return -1\n } else if (bl === 0) {\n return 1\n }\n } else {\n if (al === 0) {\n return 1\n } else if (bl === 0) {\n return -1\n }\n }\n\n return al - bl\n } else if (isPlainObject(a) && isPlainObject(b)) {\n return JSON.stringify(a).localeCompare(JSON.stringify(b))\n }\n\n return a > b ? -1 : 1\n}\n\nexport function sorterMerge(...sorters: (SorterNormalized | undefined | null)[]): SorterNormalized | undefined {\n let result: SorterNormalized | undefined\n\n for (const sorter of sorters) {\n if (sorter == null) {\n continue\n }\n\n if (result == null) {\n result = deepClone(sorter)\n continue\n }\n\n for (const sentry of sorter) {\n const existingIndex = result.findIndex(value => value.path === sentry.path)\n if (existingIndex > -1) {\n if (sentry.remove) {\n result.splice(existingIndex, 1)\n } else {\n result[existingIndex] = deepClone(sentry)\n }\n } else if (!sentry.remove) {\n result.push(deepClone(sentry))\n }\n }\n }\n\n if (result?.length === 0) {\n return undefined\n }\n\n return result\n}\n\nexport class SorterProperty<T extends Model> extends QueryProperty<Sorter<T>, SorterNormalized> {\n protected override norm(a: Sorter<T>): SorterNormalized | undefined {\n return this.provider.sorterNormalize(a)\n }\n protected override merge(a?: SorterNormalized, b?: SorterNormalized): SorterNormalized | undefined {\n return this.provider.sorterMerge(a, b)\n }\n}\n\nexport class SorterPropertySet extends QueryPropertySet<SorterNormalized> {\n of(name: string): Observable<NormalizedEntry | undefined> {\n return this.pipe(map(sorters => (sorters == null ? undefined : sorters.find(value => value.path === name))))\n }\n\n isAsc(name: string): Observable<boolean | undefined> {\n return this.of(name).pipe(map(v => (v != null ? v.isAsc : undefined)))\n }\n\n isDesc(name: string): Observable<boolean | undefined> {\n return this.of(name).pipe(map(v => (v != null ? !v.isAsc : undefined)))\n }\n\n protected override newProperty() {\n return new SorterProperty(this.provider)\n }\n protected override merge(...args: any[]) {\n return this.provider.sorterMerge(...args)\n }\n}\n","import { Model } from \"../model\"\nimport { QueryProperty, QueryPropertySet } from \"./query-property\"\n\n/**\n * @exmaple\n * ```ts\n * [\n * \"field_name\",\n * {\"child_name\": [\"child_field_name\"]},\n * {\"children\": [\"children_field_name\", {\"$type\": Article, slimer: [\"id\", \"title\"]}]},\n * {\"$type\": Employee, slimer: [\"name\"]}.\n * {\"$filter\": Filter<T, F>}\n * ]\n * ```\n */\nexport type Slimer<T extends Model> = any\nexport type SlimerNormalized = any\nexport type SlimerFn<T> = (item: T) => T\n\nexport function slimBy<T extends Model>(slimer: Slimer<T>): void {}\n\nexport function slimerNormalize<T extends Model>(slimer: Slimer<T>): SlimerNormalized {}\n\nfunction slimerCompile<T extends Model>(slimer: Slimer<T>): SlimerFn<T> {\n return item => item\n}\n\nexport function slimerMerge<T extends Model>(...slimers: Slimer<T>): any {}\n\nexport class SlimerProperty<T extends Model> extends QueryProperty<Slimer<T>, SlimerNormalized> {\n protected override norm(a: any) {\n return this.provider.slimerNormalize(a)\n }\n\n protected override merge(a?: any, b?: any) {\n return this.provider.slimerMerge(a, b)\n }\n}\n\nexport class SlimerPropertySet<T extends Model> extends QueryPropertySet<Slimer<T>> {\n protected override newProperty() {\n return new SlimerProperty(this.provider)\n }\n\n protected override merge(...args: any[]) {\n return this.provider.slimerMerge(...args)\n }\n}\n","import { ListRange } from \"@angular/cdk/collections\"\n\nimport { deepClone } from \"@ngutil/common\"\n\n// https://www.npmjs.com/package/array-view\n\n/**\n * @example\n * ```ts\n * {start: 0, end: 0} // empty range\n * {start: 0, end: 1} // range with one item.eg sliceApply([1, 2, 3], {start:0, end:1}) -> [1]\n * ```\n */\nexport interface Slice extends ListRange {\n /**\n * Start of slice, exact index of item in list\n */\n readonly start: number\n /**\n * End of slice, not include end index of item in list\n */\n readonly end: number\n readonly pageSize?: number\n}\n\nexport function sliceMerge(...slices: Slice[]) {\n let result: Slice | undefined = undefined\n\n for (const slice of slices) {\n if (slice == null) {\n continue\n }\n if (result == null) {\n result = deepClone(slice)\n } else {\n result = { ...(result as any), ...slice }\n }\n }\n\n return result\n}\n\n/**\n * Apply slice to array, and force the result length to equal with Slice length,\n * so fill array with undefined if not enought elements\n */\nexport function sliceApply(slice: Slice, array: readonly any[]): any[] {\n const result = array.slice(slice.start, slice.end)\n result.length = slice.end - slice.start\n return result\n}\n\n/**\n * @returns Page numbers, eg.: `[10, 11, 12, 13, ...]`\n */\nexport function sliceToPages(slice: Slice): number[] {\n if (slice.pageSize == null) {\n throw new Error(\"Missing `step` from slice\")\n }\n\n const start = Math.floor(slice.start / slice.pageSize)\n const end = Math.ceil(slice.end / slice.pageSize)\n return Array.from({ length: end - start }, (_, i) => start + i)\n}\n\nexport function sliceInsert(slice: Slice, array: readonly any[], newItems: readonly any[]): any[] {\n if (slice.start === slice.end) {\n return array as any\n }\n\n let result = array.slice(0, slice.start)\n result.length = slice.start\n\n result = result.concat(newItems)\n\n if (!isNaN(slice.end) && isFinite(slice.end)) {\n result.length = slice.end\n result = result.concat(array.slice(slice.end))\n }\n\n return result\n}\n\nexport function sliceClamp(slice: Slice, constraint: Slice): Slice {\n return {\n start: Math.max(slice.start, constraint.start),\n end: Math.min(slice.end, constraint.end),\n pageSize: slice.pageSize\n }\n}\n\nexport function sliceEq(a: Slice, b: Slice): boolean {\n return a.start === b.start && a.end === b.end && a.pageSize === b.pageSize\n}\n\n// TODO: sliceOverlap(other: Slice): Slice\n// TODO: sliceIncludes(other: Slice): boolean\n// TODO: sliceConcat(...slices: Slice[]): Slice[]\n// TODO: sliceDiff(slice: Slice): Slice[]\n","import { combineLatest, Observable, shareReplay } from \"rxjs\"\n\nimport { type DeepReadonly } from \"@ngutil/common\"\n\nimport { type Model } from \"../model\"\nimport type { DataProvider } from \"../provider\"\nimport { readonlyProp } from \"./common\"\nimport { type FilterNormalized, FilterProperty, FilterPropertySet } from \"./filter\"\nimport { type GrouperNormalized, GrouperProperty, GrouperPropertySet } from \"./grouper\"\nimport { type QueryPropertySetOf } from \"./query-property\"\nimport { type Slice } from \"./slice\"\nimport { type SlimerNormalized, SlimerProperty, SlimerPropertySet } from \"./slimer\"\nimport { type SorterNormalized, SorterProperty, SorterPropertySet } from \"./sorter\"\n\nexport interface Query {\n filter?: DeepReadonly<FilterNormalized>\n sorter?: DeepReadonly<SorterNormalized>\n slimer?: DeepReadonly<SlimerNormalized>\n grouper?: DeepReadonly<GrouperNormalized>\n}\n\nexport interface QueryWithSlice<T extends Model> extends Query {\n slice: DeepReadonly<Slice>\n}\n\nexport interface QueryResult<T extends Model> {\n items: readonly T[]\n total?: number\n groups?: any[]\n}\n\nexport interface QuerySubject<T extends Model, N extends string[]> extends Observable<Query> {\n readonly filter: QueryPropertySetOf<FilterPropertySet<T>, FilterProperty<T>, N>\n readonly sorter: QueryPropertySetOf<SorterPropertySet, SorterProperty<T>, N>\n readonly slimer: QueryPropertySetOf<SlimerPropertySet<T>, SlimerProperty<T>, N>\n readonly grouper: QueryPropertySetOf<GrouperPropertySet<T>, GrouperProperty<T>, N>\n}\n\nexport function querySubject<T extends Model, N extends string[]>(\n provider: DataProvider<T>,\n ...names: N\n): QuerySubject<T, N> {\n const filter = new FilterPropertySet(provider, ...names)\n const sorter = new SorterPropertySet(provider, ...names)\n const slimer = new SlimerPropertySet(provider, ...names)\n const grouper = new GrouperPropertySet(provider, ...names)\n\n const result = combineLatest({ filter, sorter, slimer, grouper }).pipe(shareReplay(1))\n readonlyProp(result, \"filter\", filter)\n readonlyProp(result, \"sorter\", sorter)\n readonlyProp(result, \"slimer\", slimer)\n readonlyProp(result, \"grouper\", grouper)\n\n return result as any\n}\n","import { isEqual } from \"es-toolkit\"\nimport { Primitive } from \"utility-types\"\n\nimport { DeepReadonly, toSorted } from \"@ngutil/common\"\n\nimport { Model } from \"../model\"\nimport { Filter, filterBy } from \"./filter\"\nimport { groupBy } from \"./grouper\"\nimport { QueryResult, QueryWithSlice } from \"./query\"\nimport { Slice } from \"./slice\"\nimport { sortBy, Sorter, type SorterNormalized } from \"./sorter\"\n\nconst INPUT = Symbol(\"INPUT\")\n\ninterface PartialExecutor {\n [INPUT]: any\n}\n\nexport interface QueryExecutors<T extends Model> {\n readonly filterFn?: FilterExecutor<T>\n readonly sorterFn?: SorterExecutor<T>\n readonly grouperFn?: GrouperExecutor<T>\n readonly slicerFn?: SliceExecutor<T>\n}\n\nexport interface QueryExecutor<T extends Model> extends QueryExecutors<T> {\n (items: readonly T[]): QueryResult<T>\n}\n\nexport function queryExecutor<T extends Model>(\n query: QueryWithSlice<T>,\n previous?: QueryExecutor<T>\n): QueryExecutor<T> {\n const executors: QueryExecutors<T> = {\n filterFn: filterExecutor(query.filter, previous?.filterFn),\n sorterFn: sorterExecutor(query.sorter, previous?.sorterFn),\n grouperFn: grouperExecutor(query.grouper, previous?.grouperFn),\n slicerFn: sliceExecutor(query.slice, previous?.slicerFn)\n }\n\n const changed = previous == null || Object.entries(executors).some(([k, v]) => (previous as any)[k] !== v)\n if (!changed) {\n return previous\n }\n\n const executor = (items: readonly T[]): QueryResult<T> => {\n if (items == null || items.length === 0) {\n return { items: [], total: 0 }\n }\n\n let result: readonly T[] = items\n\n if (executors.filterFn) {\n result = result.filter(executors.filterFn)\n }\n\n if (executors.sorterFn) {\n result = toSorted(result, executors.sorterFn)\n }\n\n const total = result.length\n\n // TODO: grouper\n\n if (executors.slicerFn) {\n result = executors.slicerFn(result)\n }\n\n return { items: result, total }\n }\n\n for (const [k, v] of Object.entries(executors)) {\n Object.defineProperty(executor, k, {\n value: v,\n enumerable: true,\n writable: false\n })\n }\n\n return executor\n}\n\ninterface FilterExecutor<T extends Model> extends PartialExecutor {\n (item: T): boolean\n}\n\nfunction filterExecutor<T extends Model>(\n filter?: DeepReadonly<Filter<T>>,\n prev?: FilterExecutor<T>\n): FilterExecutor<T> | undefined {\n return compileExec<T>(filter, prev, filterBy)\n}\n\ninterface SorterExecutor<T extends Model> extends PartialExecutor {\n (a: T, b: T): number\n}\n\nfunction sorterExecutor<T extends Model>(\n sorter?: DeepReadonly<Sorter<T>> | DeepReadonly<SorterNormalized>,\n prev?: SorterExecutor<T>\n): SorterExecutor<T> | undefined {\n return compileExec<T>(sorter, prev, sortBy)\n}\n\ninterface GrouperExecutor<T extends Model> extends PartialExecutor {\n (item: T): Primitive\n}\n\nfunction grouperExecutor<T extends Model>(\n sorter?: DeepReadonly<Sorter<T>>,\n prev?: GrouperExecutor<T>\n): GrouperExecutor<T> | undefined {\n return compileExec<T>(sorter, prev, groupBy)\n}\n\ninterface SliceExecutor<T extends Model> extends PartialExecutor {\n (items: readonly T[]): T[]\n}\n\nfunction sliceExecutor<T extends Model>(\n slice?: DeepReadonly<Slice>,\n prev?: SliceExecutor<T>\n): SliceExecutor<T> | undefined {\n return compileExec<T>(slice, prev, sliceBy)\n}\n\nfunction sliceBy<T extends Model>(slice: Slice) {\n return (items: T[]) => items.slice(slice.start, slice.end)\n}\n\nfunction compileExec<T extends Model>(input: any, prev: any, compiler: any): any {\n if (input == null) {\n return undefined\n }\n\n if (prev != null) {\n // thorically input is readonly\n if (prev[INPUT] === input || isEqual(prev[INPUT], input)) {\n return prev\n }\n }\n\n const exec = compiler(input) as any\n Object.defineProperty(exec, INPUT, {\n value: input,\n enumerable: true,\n writable: false\n })\n return exec\n}\n","import { Observable } from \"rxjs\"\n\nimport { DeepReadonly } from \"@ngutil/common\"\n\nimport { Model, ModelRefNorm } from \"../model\"\nimport { Slice } from \"../query\"\n\nexport type PartialCollection<T> = readonly (T | undefined)[]\n\nexport abstract class CollectionStore<T extends Model> {\n /**\n * Update the given slice, and return all items observable\n */\n abstract insertSlice(slice: DeepReadonly<Slice>, items: readonly T[]): Observable<PartialCollection<T>>\n\n /**\n * @returns `true` when the given slice is available in the cache\n */\n abstract hasSlice(slice: DeepReadonly<Slice>): Observable<boolean>\n\n /**\n * @returns items by the given slice\n */\n abstract getSlice(slice: DeepReadonly<Slice>): Observable<PartialCollection<T>>\n\n /**\n * Get item from collection\n */\n abstract get(ref: ModelRefNorm): Observable<T | undefined>\n\n /**\n * Get index of item in collection, -1 if not found\n */\n abstract indexOf(ref: ModelRefNorm): Observable<number>\n\n /**\n * Update item in collection\n *\n * @returns the updated index, or -1 if not found\n */\n abstract update(ref: ModelRefNorm, item: T): Observable<number>\n\n /**\n * Update item if exists in collection, or insert at the given position\n *\n * @param position If positon is negative, insert at the end of collection\n * @returns the updated index or index of where to insert\n */\n abstract updateOrInsert(ref: ModelRefNorm, item: T, position?: number): Observable<number>\n\n /**\n * Remove item from collection\n * @returns the index of deleted item, -1 if not found\n */\n abstract del(ref: ModelRefNorm): Observable<number>\n\n /**\n * Removes all items from collection\n */\n abstract clear(): Observable<void>\n}\n","import { BehaviorSubject, combineLatest, map, Observable, of, take } from \"rxjs\"\n\nimport { Model, ModelRefNorm } from \"../model\"\nimport { Slice, sliceApply, sliceClamp, sliceEq, sliceInsert } from \"../query\"\nimport { CollectionStore, PartialCollection } from \"./collection-store\"\n\nexport class MemoryStore<T extends Model> extends CollectionStore<T> {\n readonly #data = new BehaviorSubject<PartialCollection<T>>([])\n\n override insertSlice(slice: Slice, items: readonly T[]): Observable<PartialCollection<T>> {\n this.#data.next(sliceInsert(slice, this.#data.value, items))\n return this.#data\n }\n\n override hasSlice(slice: Slice): Observable<boolean> {\n return this.#data.pipe(\n map(data => {\n if (sliceEq(slice, sliceClamp(slice, { start: 0, end: data.length }))) {\n for (let i = slice.start; i < slice.end; i++) {\n if (data[i] == null) {\n return false\n }\n }\n return true\n } else {\n return false\n }\n })\n )\n }\n\n override getSlice(slice: Slice): Observable<PartialCollection<T>> {\n return this.#data.pipe(map(data => sliceApply(slice, data)))\n }\n\n override get(ref: ModelRefNorm): Observable<T | undefined> {\n return this.#data.pipe(map(data => data.find(ref.toFilter())))\n }\n\n override indexOf(ref: ModelRefNorm): Observable<number> {\n return this.#data.pipe(map(data => data.findIndex(ref.toFilter())))\n }\n\n override update(ref: ModelRefNorm, item: T): Observable<number> {\n return combineLatest({\n index: this.indexOf(ref),\n data: this.#data\n }).pipe(\n take(1),\n map(({ index, data }) => {\n if (index < 0) {\n return index\n }\n this.#data.next(sliceInsert({ start: index, end: index + 1 }, data, [item]))\n return index\n })\n )\n }\n\n override updateOrInsert(ref: ModelRefNorm, item: T, position?: number): Observable<number> {\n return combineLatest({\n index: this.indexOf(ref),\n data: this.#data\n }).pipe(\n take(1),\n map(({ index, data }) => {\n if (index < 0) {\n index = position == null ? data.length : position < 0 ? data.length : position\n }\n this.#data.next(sliceInsert({ start: index, end: index + 1 }, data, [item]))\n return index\n })\n )\n }\n\n override del(ref: ModelRefNorm): Observable<number> {\n return combineLatest({\n index: this.indexOf(ref),\n data: this.#data\n }).pipe(\n take(1),\n map(({ index, data }) => {\n if (index < 0) {\n return index\n }\n const result = data.slice(0)\n result.splice(index, 1)\n this.#data.next(result)\n return index\n })\n )\n }\n\n override clear(): Observable<void> {\n if (this.#data.value.length > 0) {\n this.#data.next([])\n }\n return of(undefined)\n }\n}\n","import { DataSource as CdkDataSource, CollectionViewer } from \"@angular/cdk/collections\"\n\nimport {\n BehaviorSubject,\n catchError,\n combineLatest,\n distinctUntilChanged,\n EMPTY,\n filter,\n map,\n merge,\n Observable,\n of,\n ReplaySubject,\n shareReplay,\n Subject,\n switchMap,\n take,\n takeUntil,\n tap,\n timer\n} from \"rxjs\"\n\nimport { isEqual } from \"es-toolkit\"\n\nimport { ConnectProtocol, deepClone, deepFreeze, isFalsy } from \"@ngutil/common\"\n\nimport type { Model, ModelRef } from \"../model\"\nimport type { DataProvider } from \"../provider/provider\"\nimport type { Filter, QueryResult, QueryWithSlice, Slice } from \"../query\"\nimport { querySubject } from \"../query\"\nimport { type CollectionStore, MemoryStore, type PartialCollection } from \"../store\"\n\nconst DEBOUNCE_TIME = 50\n\nexport class DataSource<T extends Model> extends CdkDataSource<T | undefined> implements ConnectProtocol {\n readonly isBusy$ = new BehaviorSubject<boolean>(false)\n readonly total$ = new BehaviorSubject<number | undefined>(undefined)\n\n readonly #slice = new ReplaySubject<Slice>(1)\n readonly slice$: Observable<Slice> = this.#slice.pipe(\n switchMap(slice => this.provider.clampSlice(slice)),\n distinctUntilChanged(isEqual),\n map(slice => deepFreeze(deepClone(slice))),\n shareReplay({ bufferSize: 1, refCount: true })\n )\n\n readonly #reload = new BehaviorSubject<void>(undefined)\n\n readonly #query: Observable<QueryWithSlice<T>> = combineLatest({\n query: this.query$,\n reload: merge(this.#reload, this.provider.changed$)\n }).pipe(\n // tap(() => this.#setBusy(true)),\n // TODO: maybe silent reset or prevent items$ chenges\n // TODO: alternative solution use cacheId, and query item from store with this cacheId\n switchMap(({ query }) =>\n this.store.clear().pipe(\n map(() => {\n this.total$.next(undefined)\n ;(this.reset$ as Subject<void>).next(void 0)\n return query\n })\n )\n ),\n switchMap(query =>\n this.slice$.pipe(\n map(slice => {\n // this.#setBusy(true)\n return { ...query, slice }\n })\n )\n ),\n shareReplay({ bufferSize: 1, refCount: true })\n )\n\n readonly reset$: Observable<void> = new Subject<void>()\n\n readonly items$: Observable<PartialCollection<T>> = this.#query.pipe(\n switchMap(v => (this.provider.isAsync ? timer(DEBOUNCE_TIME).pipe(map(() => v)) : of(v))),\n switchMap(query =>\n this.store.hasSlice(query.slice).pipe(\n take(1),\n switchMap(hasSlice => {\n if (!hasSlice) {\n this.#setBusy(true)\n return this.provider.queryList(query).pipe(\n take(1),\n catchError(() => {\n this.#setBusy(false)\n return of({ items: [], total: undefined } satisfies QueryResult<T>)\n }),\n tap(() => this.#setBusy(false)),\n switchMap(result => {\n if (result.total != null) {\n this.total$.next(result.total)\n } else if (result.items.length < query.slice.end - query.slice.start) {\n this.total$.next(query.slice.start + result.items.length)\n }\n return this.store.insertSlice(query.slice, result.items).pipe(take(1))\n })\n )\n } else {\n return EMPTY\n }\n }),\n switchMap(() => this.store.getSlice(query.slice).pipe(take(1)))\n )\n ),\n shareReplay({ bufferSize: 1, refCount: true })\n )\n\n readonly isEmpty$ = combineLatest({ busy: this.isBusy$, items: this.items$ }).pipe(\n filter(({ busy }) => !busy),\n map(({ items }) => items.every(isFalsy)),\n shareReplay({ bufferSize: 1, refCount: true })\n )\n\n constructor(\n public readonly provider: DataProvider<T>,\n public readonly store: CollectionStore<T> = new MemoryStore(),\n public readonly query$ = querySubject(provider, \"normal\", \"forced\")\n ) {\n super()\n }\n\n setSlice(slice: Slice) {\n this.#slice.next(slice)\n return this\n }\n\n setFilter(filter: Partial<Record<\"normal\" | \"forced\", Filter<T>>>) {\n for (const [k, v] of Object.entries(filter)) {\n this.query$.filter[k as \"normal\" | \"forced\"].set(v)\n }\n return this\n }\n\n updateFilter(filter: Partial<Record<\"normal\" | \"forced\", Filter<T>>>) {\n for (const [k, v] of Object.entries(filter)) {\n this.query$.filter[k as \"normal\" | \"forced\"].update(v)\n }\n return this\n }\n\n all() {\n return this.setSlice({ start: 0, end: Infinity })\n }\n\n reload() {\n this.#reload.next()\n }\n\n getItem(ref: ModelRef): Observable<T | undefined> {\n const refn = this.provider.meta.normalizeRef(ref)\n return this.store.get(refn).pipe(\n take(1),\n switchMap(result => {\n if (result == null) {\n return this.provider.queryItem(refn).pipe(take(1))\n }\n return of(result)\n })\n )\n }\n\n watchItem(ref: ModelRef): Observable<T | undefined> {\n const refn = this.provider.meta.normalizeRef(ref)\n return this.#storeFirst(\n query => this.store.get(refn),\n query => this.provider.queryItem(refn, query)\n )\n }\n\n getItemPosition(ref: ModelRef): Observable<number | undefined> {\n return this.watchItemPosition(ref).pipe(take(1))\n }\n\n watchItemPosition(ref: ModelRef): Observable<number | undefined> {\n const refn = this.provider.meta.normalizeRef(ref)\n return this.#storeFirst(\n query => this.store.indexOf(refn).pipe(map(i => (i < 0 ? undefined : i))),\n query => this.provider.queryPosition(refn, query)\n )\n }\n\n realodItem(ref: ModelRef, insertPosition?: number): Observable<T | undefined> {\n const refn = this.provider.meta.normalizeRef(ref)\n return this.#query.pipe(\n take(1),\n switchMap(query => this.provider.queryItem(refn, query).pipe(take(1))),\n switchMap(item =>\n item != null ? this.store.updateOrInsert(refn, item, insertPosition).pipe(map(() => item)) : of(item)\n )\n )\n }\n\n #storeFirst<X>(\n storeFn: (query: QueryWithSlice<T>) => Observable<X>,\n selfFn: (query: QueryWithSlice<T>) => Observable<X>\n ): Observable<X> {\n return this.#query.pipe(\n take(1),\n switchMap(query => storeFn(query).pipe(switchMap(result => (result == null ? selfFn(query) : of(result)))))\n )\n }\n\n #setBusy(busy: boolean) {\n if (this.isBusy$.value !== busy) {\n // dont set true when not async provider, but false is also set\n if (busy && !this.provider.isAsync) {\n return\n }\n this.isBusy$.next(busy)\n }\n }\n\n #cvSubs = new Map<CollectionViewer, Subject<void>>()\n\n override connect(collectionViewer: CollectionViewer) {\n const until = new Subject<void>()\n\n this.#cvSubs.get(collectionViewer)?.next()\n this.#cvSubs.set(collectionViewer, until)\n\n return new Observable<PartialCollection<T>>(subscriber => {\n const sub1 = collectionViewer.viewChange.subscribe(this.#slice)\n const sub2 = this.items$.subscribe(subscriber)\n\n return () => {\n if (this.#cvSubs.get(collectionViewer) === until) {\n this.#cvSubs.delete(collectionViewer)\n }\n sub1.unsubscribe()\n sub2.unsubscribe()\n }\n }).pipe(takeUntil(until))\n }\n\n override disconnect(collectionViewer: CollectionViewer): void {\n this.#cvSubs.get(collectionViewer)?.next()\n this.#cvSubs.delete(collectionViewer)\n }\n}\n","import type { Observable } from \"rxjs\"\nimport { NEVER, of } from \"rxjs\"\n\nimport type { Model, ModelMeta, ModelRefNorm } from \"../model\"\nimport {\n filterMerge,\n filterNormalize,\n type FilterNormalized,\n type QueryResult,\n type QueryWithSlice,\n type Slice,\n sorterMerge,\n sorterNormalize,\n type SorterNormalized\n} from \"../query\"\nimport { grouperMerge, grouperNormalize, type GrouperNormalized } from \"../query/grouper\"\nimport { slimerMerge, slimerNormalize, type SlimerNormalized } from \"../query/slimer\"\nimport { DataSource } from \"../source\"\nimport type { CollectionStore } from \"../store\"\n\nexport abstract class DataProvider<T extends Model> {\n /**\n * `true` when the provider is making async requests\n */\n abstract readonly isAsync: boolean\n\n /**\n * Metadata of model\n */\n abstract readonly meta: ModelMeta<T>\n\n /**\n * Emit event when data is changed\n */\n get changed$(): Observable<any> {\n return this._changed\n }\n protected _changed: Observable<any> = NEVER\n\n /**\n * Query items by the given request\n */\n abstract queryList(request: QueryWithSlice<T>): Observable<QueryResult<T>>\n\n /**\n * Query exactly one item by the given request\n */\n abstract queryItem(ref: ModelRefNorm, request?: QueryWithSlice<T>): Observable<T | undefined>\n\n /**\n * Query item position in the list that matching by the given request\n */\n abstract queryPosition(ref: ModelRefNorm, request: QueryWithSlice<T>): Observable<number | undefined>\n\n /**\n * Froce Slice boundaries, useful in array, or obeservable providers\n */\n clampSlice(slice: Slice): Observable<Slice> {\n return of(slice)\n }\n\n filterNormalize(filter: any): FilterNormalized | undefined {\n return filterNormalize(filter)\n }\n\n filterMerge(...filters: any[]): FilterNormalized | undefined {\n return filterMerge(...filters)\n }\n\n sorterNormalize(sorter: any): SorterNormalized {\n return sorterNormalize(sorter)\n }\n\n sorterMerge(...sorters: any[]): SorterNormalized | undefined {\n return sorterMerge(...sorters)\n }\n\n grouperNormalize(grouper: any): GrouperNormalized {\n return grouperNormalize(grouper)\n }\n\n grouperMerge(...groupers: any[]): GrouperNormalized | undefined {\n return grouperMerge(...groupers)\n }\n\n slimerNormalize(slimer: any): SlimerNormalized {\n return slimerNormalize(slimer)\n }\n\n slimerMerge(...slimers: any[]): SlimerNormalized | undefined {\n return slimerMerge(...slimers)\n }\n\n /**\n * @returns New data source instance\n */\n toDataSource(store?: CollectionStore<T>): DataSource<T> {\n return new DataSource(this, store)\n }\n}\n","import { DataSource as CdkDataSource, CollectionViewer } from \"@angular/cdk/collections\"\nimport { Directive, inject, input, Input, OnDestroy } from \"@angular/core\"\nimport { takeUntilDestroyed, toObservable } from \"@angular/core/rxjs-interop\"\n\nimport {\n combineLatest,\n finalize,\n map,\n Observable,\n of,\n ReplaySubject,\n shareReplay,\n Subject,\n Subscription,\n switchMap,\n takeUntil,\n throwError\n} from \"rxjs\"\n\nimport { BusyDirective } from \"@ngutil/aria\"\nimport { ConnectProtocol } from \"@ngutil/common\"\n\nimport { Model } from \"../model\"\nimport { DataProvider } from \"../provider/provider\"\nimport { Filter, Grouper, Slimer, Sorter } from \"../query\"\nimport { DataSource } from \"./source\"\n\nexport type DataSourceProxyInput<T extends Model> = DataSourceProxy<T> | DataSource<T> | DataProvider<T>\n\n/**\n * @example\n * ```html\n * <table [nuDataSource]=\"...\" [filter]=\"{isActive: true}\" [sorter]=\"[{name: 'asc'}]\"></table>\n * ```\n *\n * ```ts\n * @Component({\n * template: `<table [nuDataSource]=\"users$\"></table>`\n * })\n * class UserTable {\n * readonly userService = inject(UserService)\n * readonly users$ = UserService.all()\n * }\n * ```\n *\n * ```ts\n * @Component({\n * selector: \"table.my-table\",\n * template: `\n * <cdk-virtual-scroll-viewport itemSize=\"50\" class=\"example-viewport\">\n * <div *cdkVirtualFor=\"let item of dataSource\" class=\"example-item\">{{item}}</div>\n * </cdk-virtual-scroll-viewport>\n * `\n * })\n * class TableComponent {\n * readonly dataSource = inject(DataSourceProxy)\n * }\n * ```\n */\n@Directive({\n selector: \"[nuDataSource]\",\n exportAs: \"nuDataSource\"\n})\nexport class DataSourceProxy<T extends Model>\n extends CdkDataSource<T | undefined>\n implements OnDestroy, ConnectProtocol\n{\n @Input({ required: true, alias: \"nuDataSource\" })\n set value(value: DataSourceProxyInput<T>) {\n this.#valueSub?.unsubscribe()\n this.#valueSub = coerceDataSource<T>(value).subscribe(this.#value)\n }\n\n #valueSub?: Subscription\n readonly #value = new ReplaySubject<DataSource<T>>(1)\n readonly value$ = this.#value.pipe(takeUntilDestroyed())\n readonly query$ = this.value$.pipe(\n map(value => value.query$),\n shareReplay(1)\n )\n\n readonly items$ = this.value$.pipe(\n switchMap(value => value.items$),\n shareReplay(1)\n )\n\n readonly isBusy$ = this.value$.pipe(\n switchMap(value => value.isBusy$),\n shareReplay(1)\n )\n\n readonly isEmpty$ = this.value$.pipe(\n switchMap(value => value.isEmpty$),\n shareReplay(1)\n )\n\n #cvSubs = new Map<CollectionViewer, Subject<void>>()\n\n override connect(collectionViewer: CollectionViewer): Observable<readonly (T | undefined)[]> {\n const until = new Subject<void>()\n\n this.#cvSubs.get(collectionViewer)?.next()\n this.#cvSubs.set(collectionViewer, until)\n\n return this.value$.pipe(\n switchMap(value => value.connect(collectionViewer)),\n takeUntil(until),\n finalize(() => this.#cvSubs.delete(collectionViewer))\n )\n }\n\n override disconnect(collectionViewer: CollectionViewer): void {\n this.#cvSubs.get(collectionViewer)?.next()\n this.#cvSubs.delete(collectionViewer)\n }\n\n ngOnDestroy(): void {\n this.#valueSub?.unsubscribe()\n this.#valueSub = undefined\n }\n}\n\n@Directive({\n selector: \"[nuDataSource][filter]\"\n})\nexport class DataSourceProxyFilter<T extends Model, F extends Filter<T>> {\n readonly #proxy = inject<DataSourceProxy<T>>(DataSourceProxy)\n readonly filter = input.required<F>()\n readonly filter$ = toObservable(this.filter)\n\n constructor() {\n combineLatest({ query: this.#proxy.query$, filter: this.filter$ })\n .pipe(takeUntilDestroyed())\n .subscribe(({ query, filter }) => query.filter.forced.set(filter))\n }\n}\n\n@Directive({\n selector: \"[nuDataSource][sorter]\"\n})\nexport class DataSourceProxySorter<T extends Model, S extends Sorter<T>> {\n readonly #proxy = inject<DataSourceProxy<T>>(DataSourceProxy)\n readonly sorter = input.required<S>()\n readonly sorter$ = toObservable(this.sorter)\n\n constructor() {\n combineLatest({ query: this.#proxy.query$, sorter: this.sorter$ })\n .pipe(takeUntilDestroyed())\n .subscribe(({ query, sorter }) => query.sorter.forced.set(sorter))\n }\n}\n\n@Directive({\n selector: \"[nuDataSource][slimer]\"\n})\nexport class DataSourceProxySlimer<T extends Model, S extends Slimer<T>> {\n readonly #proxy = inject<DataSourceProxy<T>>(DataSourceProxy)\n readonly slimer = input.required<S>()\n readonly slimer$ = toObservable(this.slimer)\n\n constructor() {\n combineLatest({ query: this.#proxy.query$, slimer: this.slimer$ })\n .pipe(takeUntilDestroyed())\n .subscribe(({ query, slimer }) => query.slimer.forced.set(slimer))\n }\n}\n\n@Directive({\n selector: \"[nuDataSource][grouper]\"\n})\nexport class DataSourceProxyGrouper<T extends Model, G extends Grouper<T>> {\n readonly #proxy = inject<DataSourceProxy<T>>(DataSourceProxy)\n readonly grouper = input.required<G>()\n readonly grouper$ = toObservable(this.grouper)\n\n constructor() {\n combineLatest({ query: this.#proxy.query$, grouper: this.grouper$ })\n .pipe(takeUntilDestroyed())\n .subscribe(({ query, grouper }) => query.grouper.forced.set(grouper))\n }\n}\n\n@Directive({\n selector: \"[nuDataSource][nuBusy]\"\n})\nexport class DataSourceProxyBusy {\n readonly #proxy = inject<DataSourceProxy<any>>(DataSourceProxy)\n readonly #busy = inject(BusyDirective)\n\n constructor() {\n this.#proxy.value$\n .pipe(\n takeUntilDestroyed(),\n switchMap(value => value.isBusy$)\n )\n .subscribe(isBusy => this.#busy.set(isBusy, \"data-source\"))\n }\n}\n\nfunction coerceDataSource<T extends Model>(value: DataSourceProxyInput<T>): Observable<DataSource<T>> {\n if (value instanceof DataSourceProxy) {\n return value.value$\n } else if (value instanceof DataSource) {\n return of(value)\n } else if (value instanceof DataProvider) {\n return of(value.toDataSource())\n } else {\n return throwError(() => new Error(\"Invalid DataSource value\"))\n }\n}\n","import { TrackByFunction } from \"@angular/core\"\n\nimport { isEqual } from \"es-toolkit\"\nimport { Primitive } from \"utility-types\"\n\nimport { filterBy, pathGetterCompile } from \"../query\"\n\nexport type Model = { [key: string]: any }\n\nexport type ModelRef = { key?: Primitive | Array<Primitive>; index?: number }\nexport type ModelRefFilter<T> = (item: T, index: number) => boolean\n\nexport interface ModelMetaProps<T extends Model> {\n readonly keys: readonly string[]\n readonly trackBy?: TrackByFunction<T>\n}\n\nexport type ModelMetaInput<T extends Model> = ModelMeta<T> | ModelMetaProps<T>\n\nexport type TrackedModel<T extends Model> = { index: number; model: T }\n\nexport class ModelMeta<T extends Model> implements ModelMetaProps<T> {\n static coerce<M extends Model>(value: ModelMetaInput<M>): ModelMeta<M> {\n if (value instanceof ModelMeta) {\n return value\n } else {\n return new ModelMeta(value)\n }\n }\n\n readonly keys: readonly string[]\n readonly trackBy: TrackByFunction<T>\n readonly #getKey?: (model: T) => string\n\n constructor(props: ModelMetaProps<T>) {\n this.keys = props.keys\n\n if (this.keys.length > 0) {\n const getters = this.keys.map(pathGetterCompile)\n if (props.trackBy == null) {\n this.trackBy = (index: number, item: T) => getters.map(p => p(item)).join(\"∀\")\n } else {\n this.trackBy = props.trackBy\n }\n this.#getKey = (item: T) => getters.map(p => p(item)).join(\"∀\")\n } else {\n if (props.trackBy == null) {\n throw new Error(\"Can't compile track by function without `keys` declaration\")\n } else {\n this.trackBy = props.trackBy\n }\n }\n }\n\n isEqual(a: T, b: T): boolean {\n return isEqual(a, b)\n }\n\n isEqualByTrack(a: TrackedModel<T>, b: TrackedModel<T>): boolean {\n if (a == null || b == null) {\n return a == null && b == null\n }\n\n if (a.index == null || b.index == null) {\n return a.index == null && b.index == null\n }\n\n if (a.model == null || b.model == null) {\n return a.model == null && b.model == null\n }\n\n return this.trackBy(a.index, a.model) === this.trackBy(b.index, b.model)\n }\n\n isEqualByKey(a: T, b: T): boolean {\n if (this.#getKey != null) {\n if (a == null || b == null) {\n return a == null && b == null\n }\n return this.#getKey(a) === this.#getKey(b)\n }\n console.warn(\"Primary keys is not defined for\", a, b)\n return false\n }\n\n normalizeRef(ref: ModelRef | ModelRefNorm): ModelRefNorm {\n if (ref instanceof ModelRefNorm) {\n return ref\n }\n\n if (ref.key != null && ref.index != null) {\n throw new Error(\"Only provide `pk` or `index` value not both\")\n }\n\n if (ref.key != null) {\n const keyValue = (Array.isArray(ref.key) ? ref.key : [ref.key]) as readonly Primitive[]\n\n if (keyValue.length > 0) {\n if (this.keys.length === 0) {\n throw new Error(\"Can't normalize ref without `keys`\")\n }\n\n if (keyValue.length !== this.keys.length) {\n throw new Error(`Wrong number of \\`key\\` values for this keys: [${this.keys.join(\",\")}]`)\n }\n return new ModelRefByKey(keyValue, this.keys)\n } else {\n console.warn(\"Empty key in ModelRef\", ref)\n }\n }\n\n if (ref.index != null) {\n return new ModelRefByIndex(ref.index)\n }\n\n throw new Error(\"Missing `key` or `index` value\")\n }\n}\n\nexport abstract class ModelRefNorm {\n readonly key?: readonly Primitive[]\n readonly index?: number\n\n #filter?: ModelRefFilter<any>\n toFilter() {\n if (this.#filter == null) {\n return (this.#filter = this._asFilter())\n }\n return this.#filter\n }\n\n protected abstract _asFilter(): ModelRefFilter<any>\n}\n\nexport class ModelRefByKey extends ModelRefNorm {\n override readonly key: readonly Primitive[]\n\n #keys: readonly string[]\n constructor(key: readonly Primitive[], keys: readonly string[]) {\n super()\n this.key = key\n this.#keys = keys\n }\n\n protected _asFilter(): ModelRefFilter<any> {\n const filter = {} as any\n for (let i = 0; i < this.#keys.length; i++) {\n filter[this.#keys[i]] = this.key[i]\n }\n return filterBy(filter)\n }\n}\n\nexport class ModelRefByIndex extends ModelRefNorm {\n override readonly index: number\n\n constructor(index: number) {\n super()\n this.index = index\n }\n\n protected _asFilter(): ModelRefFilter<any> {\n return (item: any, index: number) => this.index === index\n }\n}\n\nexport class UnknownMeta<T extends Model> extends ModelMeta<T> {\n constructor() {\n super({ keys: [], trackBy: (index: number) => index })\n }\n}\n","import { map, Observable, take } from \"rxjs\"\n\nimport { Model, ModelMeta, ModelMetaInput, ModelRefNorm } from \"../model\"\nimport { queryExecutor, QueryExecutor, QueryResult, QueryWithSlice, Slice, sliceClamp } from \"../query\"\nimport { DataProvider } from \"./provider\"\n\nexport abstract class LocalProvider<T extends Model> extends DataProvider<T> {\n override readonly isAsync = false\n override readonly meta: ModelMeta<T>\n abstract readonly items$: Observable<readonly T[]>\n\n #executor?: QueryExecutor<T>\n\n constructor(meta: ModelMetaInput<T>) {\n super()\n this.meta = ModelMeta.coerce(meta)\n }\n\n executor(request: QueryWithSlice<T>): QueryExecutor<T> {\n return (this.#executor = queryExecutor(request, this.#executor))\n }\n\n override queryList(request: QueryWithSlice<T>): Observable<QueryResult<T>> {\n const exec = this.executor(request)\n return this.items$.pipe(map(items => exec(items)))\n }\n\n override queryItem(ref: ModelRefNorm, request?: QueryWithSlice<T>): Observable<T | undefined> {\n const items = request ? this.queryList(request).pipe(map(list => list.items)) : this.items$\n return items.pipe(map(items => items.find(ref.toFilter())))\n }\n\n override queryPosition(ref: ModelRefNorm, request: QueryWithSlice<T>): Observable<number | undefined> {\n return this.queryList(request).pipe(map(list => list.items.findIndex(ref.toFilter())))\n }\n\n override clampSlice(slice: Slice): Observable<Slice> {\n return this.items$.pipe(\n take(1),\n map(items => sliceClamp(slice, { start: 0, end: items.length }))\n )\n }\n}\n","import { type Observable, of } from \"rxjs\"\n\nimport type { Model, ModelMetaInput } from \"../model\"\nimport { LocalProvider } from \"./local\"\n\nexport class ArrayProvider<T extends Model> extends LocalProvider<T> {\n override readonly items$: Observable<readonly T[]>\n\n constructor(meta: ModelMetaInput<T>, items: readonly T[]) {\n super(meta)\n this.items$ = of(items)\n }\n}\n","import { type Observable, shareReplay } from \"rxjs\"\n\nimport type { Model, ModelMetaInput } from \"../model\"\nimport { LocalProvider } from \"./local\"\n\nexport class ObservableProvider<T extends Model> extends LocalProvider<T> {\n readonly items$: Observable<readonly T[]>\n\n constructor(meta: ModelMetaInput<T>, src: Observable<readonly T[]>) {\n super(meta)\n const source = src.pipe(shareReplay({ bufferSize: 1, refCount: true }))\n this.items$ = source\n this._changed = source\n }\n}\n","import { NgModule } from \"@angular/core\"\n\nimport {\n DataSourceProxy,\n DataSourceProxyBusy,\n DataSourceProxyFilter,\n DataSourceProxyGrouper,\n DataSourceProxySlimer,\n DataSourceProxySorter\n} from \"./source/proxy.directive\"\n\nexport * from \"./model\"\nexport * from \"./provider\"\nexport * from \"./query\"\nexport * from \"./source\"\nexport * from \"./store\"\n\n@NgModule({\n imports: [\n DataSourceProxy,\n DataSourceProxyBusy,\n DataSourceProxyFilter,\n DataSourceProxyGrouper,\n DataSourceProxySlimer,\n DataSourceProxySorter\n ],\n exports: [\n DataSourceProxy,\n DataSourceProxyBusy,\n DataSourceProxyFilter,\n DataSourceProxyGrouper,\n DataSourceProxySlimer,\n DataSourceProxySorter\n ]\n})\nexport class DataSourceModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["CdkDataSource"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngutil-data.mjs","sources":["../../../../packages/data/src/query/path.ts","../../../../packages/data/src/query/common.ts","../../../../packages/data/src/query/query-property.ts","../../../../packages/data/src/query/filter.ts","../../../../packages/data/src/query/grouper.ts","../../../../packages/data/src/query/sorter.ts","../../../../packages/data/src/query/slimer.ts","../../../../packages/data/src/query/slice.ts","../../../../packages/data/src/query/query.ts","../../../../packages/data/src/query/executor.ts","../../../../packages/data/src/store/collection-store.ts","../../../../packages/data/src/store/memory-store.ts","../../../../packages/data/src/source/source.ts","../../../../packages/data/src/provider/provider.ts","../../../../packages/data/src/source/proxy.directive.ts","../../../../packages/data/src/model/meta.ts","../../../../packages/data/src/provider/local.ts","../../../../packages/data/src/provider/array.ts","../../../../packages/data/src/provider/observable.ts","../../../../packages/data/src/index.ts","../../../../packages/data/src/ngutil-data.ts"],"sourcesContent":["import { flatten } from \"es-toolkit\"\n\ntype GetterFn = (srcs: any[]) => any[]\nexport type PathGetter<T = any, R = any> = (obj: T) => R[]\n\nexport function pathGetterCompile(path: string): PathGetter {\n if (!path || path.length === 0) {\n throw new Error(\"Empty path\")\n }\n\n return path.split(\".\").reduce<GetterFn>(\n (parent, part) => makeGetter(part, parent),\n (obj: any) => (obj == null ? [] : [obj])\n )\n}\n\nconst IsNumber = /^\\d+$/\n\nfunction makeGetter(part: string, parent: GetterFn): GetterFn {\n if (part === \"*\") {\n return obj => flatten(parent(obj), 1)\n } else {\n const key = IsNumber.test(part) ? Number(part) : part\n return obj => parent(obj).map(v => (v != null ? v[key] : undefined))\n }\n}\n","export function readonlyProp(o: unknown, n: string | symbol, v: unknown) {\n Object.defineProperty(o, n, {\n value: v,\n configurable: false,\n enumerable: true,\n writable: false\n })\n}\n\nconst NORMALIZED = Symbol(\"NORMALIZED\")\nconst IS_NORMALIZED = Symbol(\"IS_NORMALIZED\")\n\nexport function normalize(obj: any, normalizer: (v: any) => any): any {\n if ((obj as any)[IS_NORMALIZED]) {\n return obj as any\n }\n\n if ((obj as any)[NORMALIZED] == null) {\n const normalized = normalizer(obj)\n Object.defineProperty(obj, NORMALIZED, {\n value: normalized,\n configurable: false,\n enumerable: false,\n writable: false\n })\n\n Object.defineProperty(normalize, IS_NORMALIZED, {\n value: true,\n configurable: false,\n enumerable: false,\n writable: false\n })\n\n return normalized\n }\n\n return (obj as any)[NORMALIZED]\n}\n","import { BehaviorSubject, combineLatest, map, Observable, shareReplay } from \"rxjs\"\n\nimport { isEqual } from \"es-toolkit\"\n\nimport { deepClone, deepFreeze } from \"@ngutil/common\"\n\nimport type { DataProvider } from \"../provider\"\nimport { readonlyProp } from \"./common\"\n\nexport abstract class QueryProperty<I, O> extends BehaviorSubject<O | undefined> {\n constructor(protected readonly provider: DataProvider<any>) {\n super(undefined)\n }\n\n set(value?: I | O) {\n this.#nextClone(value != null ? this.norm(value) : undefined)\n }\n\n update(value?: I | O): void {\n const norm = value != null ? this.norm(value) : undefined\n if (!isEqual(this.value, norm)) {\n this.#next(this.merge(this.value, norm))\n }\n }\n\n del(): void {\n this.set(undefined)\n }\n\n /**\n * Merge values and emit when changed (dont change original values)\n */\n protected abstract merge(a?: O, b?: O): O | undefined\n protected abstract norm(a: I | O): O | undefined\n\n #next(value?: O) {\n if (!isEqual(this.value, value)) {\n if (value == null) {\n this.next(undefined)\n } else {\n this.next(value)\n }\n }\n }\n\n #nextClone(value?: O) {\n if (!isEqual(this.value, value)) {\n if (value == null) {\n this.next(undefined)\n } else {\n this.next(deepClone<any>(value))\n }\n }\n }\n}\n\nexport abstract class QueryPropertySet<O> extends Observable<O> {\n readonly #combined: Observable<O>\n\n constructor(\n protected readonly provider: DataProvider<any>,\n ...names: string[]\n ) {\n super(dest => this.#combined.subscribe(dest))\n\n const observables: Array<Observable<any>> = []\n const props: { [key: string]: Observable<any> } = {}\n\n for (const name of names) {\n const o = this.newProperty()\n observables.push(o)\n props[name] = o\n }\n\n this.#combined = combineLatest(observables).pipe(\n map(values => deepFreeze(this.merge(...values))),\n shareReplay(1)\n )\n\n for (const [k, v] of Object.entries(props)) {\n readonlyProp(this, k, v)\n }\n }\n\n protected abstract newProperty(): QueryProperty<any, any>\n protected abstract merge(...args: any[]): any | undefined\n}\n\nexport type QueryPropertySetOf<T, P, N extends string[]> = T & { [K in N[number]]: P }\n","import { flattenDeep, intersection } from \"es-toolkit\"\n\nimport { AsPrimitive, deepClone, isFalsy, isPlainObject, isTruthy, MaxRecursion } from \"@ngutil/common\"\n\nimport { Model } from \"../model\"\nimport { PathGetter, pathGetterCompile } from \"./path\"\nimport { QueryProperty, QueryPropertySet } from \"./query-property\"\n\nexport enum FilterOp {\n Eq = \"==\",\n EqStrict = \"===\",\n EqInsesitive = \"==*\",\n Neq = \"!=\",\n NeqStrict = \"!==\",\n NeqInsesitive = \"!=*\",\n Gt = \">\",\n GtInsesitive = \">*\",\n Gte = \">=\",\n GteInsesitive = \">=*\",\n Lt = \"<\",\n LtInsesitive = \"<*\",\n Lte = \"<=\",\n LteInsesitive = \"<=*\",\n Contains = \"%\",\n ContainsInsesitive = \"%*\",\n StartsWith = \"^\",\n StartsWithInsesitive = \"^*\",\n EndsWith = \"$\",\n EndsWithInsesitive = \"$*\",\n Similarity = \"**\",\n Regexp = \"~\",\n RegexpInsesitive = \"~*\",\n Or = \"|\",\n And = \"&\",\n Not = \"!\"\n}\n\nexport const OPERATORS: Array<string> = [\n FilterOp.Eq,\n FilterOp.EqStrict,\n FilterOp.EqInsesitive,\n FilterOp.Neq,\n FilterOp.NeqStrict,\n FilterOp.NeqInsesitive,\n FilterOp.Gt,\n FilterOp.GtInsesitive,\n FilterOp.Gte,\n FilterOp.GteInsesitive,\n FilterOp.Lt,\n FilterOp.LtInsesitive,\n FilterOp.Lte,\n FilterOp.LteInsesitive,\n FilterOp.Contains,\n FilterOp.ContainsInsesitive,\n FilterOp.StartsWith,\n FilterOp.StartsWithInsesitive,\n FilterOp.EndsWith,\n FilterOp.EndsWithInsesitive,\n FilterOp.Similarity,\n FilterOp.Regexp,\n FilterOp.RegexpInsesitive,\n FilterOp.Or,\n FilterOp.And,\n FilterOp.Not\n]\n\nexport function asOperators(value: any): Array<{ op: FilterOp; value: any }> {\n const ops = intersection(Object.keys(value), OPERATORS) as FilterOp[]\n if (ops.length > 0) {\n return ops.map(op => {\n return { op, value: value[op] }\n })\n } else {\n return [{ op: FilterOp.Eq, value }]\n }\n}\n\n// export type Filter<T extends Model> = _Filter<Flatten<T>, [], MaxRecursion>\n// TODO: fix recursion\nexport type Filter<T extends Model> = { [key: string]: any }\n\ntype _Filter<F, P extends number[], D extends number> = P[\"length\"] extends D ? never : _ObjectFilter<F, P, D>\n\ntype _ObjectFilter<F, P extends number[], D extends number> = P[\"length\"] extends D\n ? never\n : { [K in keyof F]?: Operators<F[K], P, D> }\n\ntype RootOr<F, P extends number[], D extends number> = P[\"length\"] extends D\n ? never\n : { [FilterOp.Or]: Array<_Filter<F, [...P, 0], D>> | undefined }\n\ntype RootAnd<F, P extends number[], D extends number> = P[\"length\"] extends D\n ? never\n : { [FilterOp.And]: Array<_Filter<F, [...P, 0], D>> | undefined }\n\nexport type Operators<T, P extends number[], D extends number = MaxRecursion> = P[\"length\"] extends D\n ? never\n : SimpleOperators<T>\n\ntype LocalOr<T, P extends number[], D extends number> = P[\"length\"] extends D\n ? never\n : { [FilterOp.Or]: Array<Operators<T, [...P, 0], D>> | undefined }\n\ntype LocalAnd<T, P extends number[], D extends number> = P[\"length\"] extends D\n ? never\n : { [FilterOp.And]: Array<Operators<T, [...P, 0], D>> | undefined }\n\ntype SimpleOperators<T> =\n | EqStrict<T>\n | NeqStrict<T>\n | Eq<T>\n | Neq<T>\n | Gt<T>\n | Gte<T>\n | Lt<T>\n | Lte<T>\n | Contains<T>\n | StartsWith<T>\n | Similarity<T>\n | EndsWith<T>\n | Regexp<T>\n | T\n | undefined\n | null\n\ntype EqStrict<T> = Operator<T, T, FilterOp.EqStrict, never, null>\ntype NeqStrict<T> = Operator<T, T, FilterOp.NeqStrict, never, null>\ntype Eq<T> = Operator<T, T | AsPrimitive<T>, FilterOp.Eq, FilterOp.EqInsesitive, null>\ntype Neq<T> = Operator<T, T | AsPrimitive<T>, FilterOp.Neq, FilterOp.NeqInsesitive, null>\ntype Gt<T> = Operator<T, T | AsPrimitive<T>, FilterOp.Gt, FilterOp.GtInsesitive>\ntype Gte<T> = Operator<T, T | AsPrimitive<T>, FilterOp.Gte, FilterOp.GteInsesitive>\ntype Lt<T> = Operator<T, T | AsPrimitive<T>, FilterOp.Lt, FilterOp.LtInsesitive>\ntype Lte<T> = Operator<T, T | AsPrimitive<T>, FilterOp.Lte, FilterOp.LteInsesitive>\ntype Contains<T> = Operator<T, string, FilterOp.Contains, FilterOp.ContainsInsesitive>\ntype StartsWith<T> = Operator<T, string, FilterOp.StartsWith, FilterOp.StartsWithInsesitive>\ntype Similarity<T> = Operator<T, string, FilterOp.Similarity, never, null>\ntype EndsWith<T> = Operator<T, string, FilterOp.EndsWith, FilterOp.EndsWithInsesitive>\ntype Regexp<T> = Operator<T, string, FilterOp.Regexp, FilterOp.RegexpInsesitive, RegExp>\n\ntype Operator<T, R, OP extends string, OPI extends string = never, ET = never> =\n | (T extends R ? { [k in OP]: T | ET | R } : never)\n | (T extends string ? (OPI extends never ? never : { [k in OPI]: string }) : never)\n\nexport type FilterFn<T = any> = (item: T) => boolean\n\n/**\n * @example\n * ```ts\n * items.filter(filterBy({id: 42}))\n * ```\n */\nexport function filterBy<T extends Model>(filters: Filter<T>): FilterFn<T> {\n return _filterCompile<T>(filters)\n}\n\n// TODO: Normalize filter\n// type _Filter = { path: string; op: FilterOp; value: any }\n// type _Or = { \"|\": Array<_Filter> }\n// type _And = { \"&\": Array<_Filter> }\n// export type NormalizedFilter = _Or | _And\ntype NormPath = { path: string; op: Exclude<FilterOp, FilterOp.Or | FilterOp.And | FilterOp.Not>; value: any }\ntype NormOr = { op: FilterOp.Or; value: Array<NormEntry> }\ntype NormAnd = { op: FilterOp.And; value: Array<NormEntry> }\ntype NormNot = { op: FilterOp.Not; value: Array<NormEntry> }\ntype NormEntry = NormPath | NormOr | NormAnd | NormNot\nexport type FilterNormalized = NormEntry\n\n/**\n * @example\n * ```ts\n * filterNormalize({id: {\">\": 0, \"<\": 10}})\n * {op: \"&\", value: [{path: \"id\", op: \">\", value: 0}, {path: \"id\", op: \"<\", value: 10}]}\n * ```\n */\nexport function filterNormalize<T extends Model>(filters: Filter<T>): FilterNormalized | undefined {\n return _normalizeFilter(filters)\n}\n\nexport function filterIsNormnalized(filters: any): filters is FilterNormalized {\n if (isPlainObject(filters) && \"op\" in filters && OPERATORS.includes(filters[\"op\"])) {\n if (filters[\"op\"] === FilterOp.Or || filters[\"op\"] === FilterOp.And || filters[\"op\"] === FilterOp.Not) {\n return Array.isArray(filters[\"value\"])\n }\n return typeof filters[\"path\"] === \"string\" && \"value\" in filters\n }\n return false\n}\n\nfunction _normalizeFilter<T extends Model>(filters: Filter<T>, parent?: string): FilterNormalized | undefined {\n if (filters == null) {\n return undefined\n }\n\n if (filterIsNormnalized(filters)) {\n return filters\n }\n\n if (\"op\" in filters && \"value\" in filters) {\n if (filters[\"op\"] === FilterOp.Or || filters[\"op\"] === FilterOp.And || filters[\"op\"] === FilterOp.Not) {\n return { op: filters[\"op\"], value: filters[\"value\"].map((v: any) => _normalizeFilter(v, parent)) }\n }\n if (\"path\" in filters) {\n return filters as FilterNormalized\n }\n }\n\n const norm = flattenDeep(\n Object.entries(filters).map(([path, value]) => {\n switch (path) {\n case FilterOp.And:\n case FilterOp.Or:\n case FilterOp.Not:\n if (!Array.isArray(value)) {\n throw new Error(`Operator (${path}) must have array type`)\n }\n return {\n op: path,\n value: value\n .map(v => {\n if (isPlainObject(v)) {\n return _normalizeFilter(v, parent)\n } else {\n return parent ? { path: parent, op: FilterOp.EqStrict, value: v } : undefined\n }\n })\n .filter(v => v != null)\n }\n\n // TODO: check all filter, and if not found filter key, taht object maybne not a filter\n default:\n if (isPlainObject(value)) {\n return _normalizeFilter(value, path)\n }\n if (parent != null) {\n return { path: parent, op: path, value }\n } else {\n return { path, op: FilterOp.EqStrict, value }\n }\n }\n })\n )\n\n if (norm.length === 0) {\n return undefined\n } else if (norm.length === 1) {\n return norm[0] as FilterNormalized\n } else {\n return { op: FilterOp.And, value: norm } as FilterNormalized\n }\n}\n\ntype GetPathFn = (pth: string) => ReturnType<typeof pathGetterCompile>\n\nfunction _filterCompile<T extends Model>(filters: Filter<T>): FilterFn<T> {\n const pathCache: { [key: string]: PathGetter } = {}\n const getPath = (pth: string) => {\n if (pathCache[pth] != null) {\n return pathCache[pth]\n }\n return (pathCache[pth] = pathGetterCompile(pth))\n }\n const normalized = filterNormalize(filters)\n if (normalized == null) {\n return alwaysTrue\n }\n return _filterCompileNorm(normalized, getPath)\n}\n\nfunction alwaysTrue() {\n return true\n}\n\nfunction _filterCompileNorm(filter: FilterNormalized, getPath: GetPathFn): FilterFn<any> {\n switch (filter.op) {\n case FilterOp.And:\n return and_(filter.value.map(v => _filterCompileNorm(v, getPath)))\n\n case FilterOp.Or:\n return or_(filter.value.map(v => _filterCompileNorm(v, getPath)))\n\n case FilterOp.Not:\n return not_(filter.value.map(v => _filterCompileNorm(v, getPath)))\n\n default:\n return _filterComplileNormPath(getPath(filter.path), filter.op, filter.value, getPath)\n }\n}\n\nfunction _filterComplileNormPath(getter: PathGetter, op: FilterOp, value: any, getPath: GetPathFn): FilterFn<any> {\n let lower: string\n let regex: RegExp\n switch (op) {\n case FilterOp.And:\n return and_((value as NormEntry[]).map(v => _filterCompileNorm(v, getPath)))\n\n case FilterOp.Or:\n return or_((value as NormEntry[]).map(v => _filterCompileNorm(v, getPath)))\n\n case FilterOp.Not:\n return not_((value as NormEntry[]).map(v => _filterCompileNorm(v, getPath)))\n\n case FilterOp.Eq:\n // eslint-disable-next-line eqeqeq\n return matcher(getter, v => v == value)\n\n case FilterOp.EqStrict:\n return matcher(getter, v => v === value)\n\n case FilterOp.EqInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase() === lower)\n\n case FilterOp.Neq:\n // eslint-disable-next-line eqeqeq\n return matcher(getter, v => v != value)\n\n case FilterOp.NeqStrict:\n return matcher(getter, v => v !== value)\n\n case FilterOp.NeqInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase() !== lower)\n\n case FilterOp.Gt:\n return matcher(getter, v => v > value)\n\n case FilterOp.GtInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase() > lower)\n\n case FilterOp.Gte:\n return matcher(getter, v => v >= value)\n\n case FilterOp.GteInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase() >= lower)\n\n case FilterOp.Lt:\n return matcher(getter, v => v < value)\n\n case FilterOp.LtInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase() < lower)\n\n case FilterOp.Lte:\n return matcher(getter, v => v <= value)\n\n case FilterOp.LteInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase() <= lower)\n\n case FilterOp.Contains:\n lower = String(value)\n return matcher(getter, v => (Array.isArray(v) ? v.includes(value) : String(v).includes(lower)))\n\n case FilterOp.ContainsInsesitive:\n case FilterOp.Similarity:\n // TODO: proper similarity test\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase().includes(lower))\n\n case FilterOp.StartsWith:\n lower = String(value)\n return matcher(getter, v => String(v).startsWith(lower))\n\n case FilterOp.StartsWithInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase().startsWith(lower))\n\n case FilterOp.EndsWith:\n lower = String(value)\n return matcher(getter, v => String(v).endsWith(lower))\n\n case FilterOp.EndsWithInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase().endsWith(lower))\n\n case FilterOp.Regexp:\n regex = value instanceof RegExp ? value : new RegExp(value, \"msv\")\n return matcher(getter, v => regex.test(v))\n\n case FilterOp.RegexpInsesitive:\n regex = value instanceof RegExp ? value : new RegExp(value, \"msvi\")\n return matcher(getter, v => regex.test(v))\n }\n\n throw new Error(`Unexpected operator: ${op}`)\n}\n\nfunction matcher(getter: PathGetter, predict: (value: any) => boolean): FilterFn {\n return obj => getter(obj).some(predict)\n}\n\nfunction and_(fns: FilterFn[]): FilterFn {\n if (fns.length === 0) {\n return alwaysTrue\n }\n\n if (fns.length === 1) {\n return fns[0]\n }\n\n return item => {\n for (const fn of fns) {\n if (!fn(item)) {\n return false\n }\n }\n return true\n }\n}\n\nfunction or_(fns: FilterFn[]): FilterFn {\n if (fns.length === 0) {\n return alwaysTrue\n }\n\n if (fns.length === 1) {\n return fns[0]\n }\n\n return item => {\n for (const fn of fns) {\n if (fn(item)) {\n return true\n }\n }\n return false\n }\n}\n\nfunction not_(fns: FilterFn[]): FilterFn {\n if (fns.length === 0) {\n return alwaysTrue\n }\n\n return item => !and_(fns)(item)\n}\n\nexport function filterMerge(...filters: any[]): any | undefined {\n filters.reverse()\n const lastReset = filters.findIndex(v => v == null)\n filters.reverse()\n\n if (lastReset !== -1) {\n filters = filters.slice(lastReset + 1)\n }\n\n const value = filters\n .map(filterNormalize)\n .filter(v => v !== undefined)\n .filter(v => (Array.isArray(v) && v.length > 0) || (isPlainObject(v) && Object.keys(v).length > 0))\n .map(filter => deepClone(filter))\n\n if (value.length === 0) {\n return undefined\n }\n\n return compact({ op: FilterOp.And, value })\n}\n\nexport class FilterProperty<T extends Model> extends QueryProperty<Filter<T>, FilterNormalized> {\n protected override merge(\n a?: FilterNormalized | undefined,\n b?: FilterNormalized | undefined\n ): FilterNormalized | undefined {\n return this.provider.filterMerge(a, b)\n }\n protected override norm(a: FilterNormalized | Filter<T>): FilterNormalized | undefined {\n return this.provider.filterNormalize(a)\n }\n}\n\nexport class FilterPropertySet<T extends Model> extends QueryPropertySet<Filter<T>> {\n protected override newProperty() {\n return new FilterProperty(this.provider)\n }\n\n protected override merge(...args: any[]) {\n return this.provider.filterMerge(...args)\n }\n}\n\nexport function filterSimplify(filters: any): object | null {\n if (isTruthy(filters)) {\n filters = compact(filterNormalize(filters)!)\n const result: { [key: string]: any } = {}\n if (filters[\"op\"] === FilterOp.And) {\n filters = filters[\"value\"]\n if (filters == null) {\n return result\n }\n }\n if (!Array.isArray(filters)) {\n filters = [filters]\n }\n\n for (const f of filters) {\n if (\n f[\"value\"] != null &&\n (f[\"op\"] === FilterOp.Eq || f[\"op\"] === FilterOp.EqStrict || f[\"op\"] === FilterOp.EqInsesitive)\n ) {\n result[f[\"path\"] as string] = f[\"value\"]\n }\n }\n return result\n } else {\n return null\n }\n}\n\nfunction compact(filters: FilterNormalized): FilterNormalized | undefined {\n if (filters.op === FilterOp.And || filters.op === FilterOp.Or || filters.op === FilterOp.Not) {\n if (isFalsy(filters.value)) {\n return undefined\n }\n\n let value = filters.value.map(compact).filter(isTruthy)\n if (value.length === 0) {\n return undefined\n }\n\n // remove subfilters with the same operator\n value = value.reduce<NormEntry[]>((acc, value) => {\n if (value.op === filters.op) {\n return acc.concat(value.value)\n } else {\n acc.push(value)\n return acc\n }\n }, [])\n\n // deduplicate by path && op\n value = value\n .reverse()\n .filter(\n (v, i, a) =>\n a.findIndex(v2 => \"path\" in v && \"path\" in v2 && v.path === v2.path && v.op === v2.op) === i\n )\n // remove undefined values, keep null\n .filter(v => \"value\" in v && v.value !== undefined)\n .reverse()\n\n if (value.length === 0) {\n return undefined\n }\n\n if (value.length === 1) {\n return value[0]\n }\n\n return { op: filters.op, value }\n }\n return filters ?? undefined\n}\n","import { Flatten, Primitive } from \"@ngutil/common\"\n\nimport { Model } from \"../model\"\nimport { QueryProperty, QueryPropertySet } from \"./query-property\"\n\nexport type GrouperFn<T = any> = (item: any) => Primitive\n\nexport type Grouper<T extends Model, F = Flatten<T>> = any\nexport type GrouperNormalized = any\n\nexport function groupBy<T extends Model, F = Flatten<T>>(grouper: Grouper<T, F>): GrouperFn<T> {\n return grouperCompile<T, F>(grouper)\n}\n\nfunction grouperCompile<T extends Model, F = Flatten<T>>(grouper: Grouper<T, F>): GrouperFn<T> {\n return _ => undefined\n}\n\nexport function grouperMerge<T extends Model, F = Flatten<T>>(\n ...groupers: Array<Grouper<T, F> | undefined | null>\n): Grouper<T, F> | undefined {\n return undefined\n}\n\nexport function grouperNormalize<T extends Model>(grouper: Grouper<T>): GrouperNormalized {}\n\n// import { Primitive } from \"utility-types\"\n\n// import { Eval, Flatten } from \"@ngutil/common\"\n\n// import { type Model } from \"./query\"\n// import { SorterFn } from \"./sorter\"\n\n// export interface Grouped<T extends Model> {\n// items: T[]\n// groups: Group<T>\n// }\n\n// export type GrouperFn<T extends Model> = (items: T[]) => any\n\n// export type GroupKey<T extends Model> = (item: T, index: number) => Primitive[]\n\n// export type GroupItemIsMatch<T extends Model> = (item: T, index: number) => boolean\n\n// export interface GrouperX<T extends Model> {\n// name: string\n// title?: string\n// isMatch?: GroupKey<T>\n// [key: string]: any\n// }\n\n// export interface GrouperXNormalized<T extends Model> extends GrouperX<T> {\n// key: GroupKey<T>\n// }\n\n// type _Groupers<T extends Model, F> = keyof F | Grouper<T>\n// export type Grouper<T extends Model, F = Flatten<T>> = Eval<Array<_Groupers<T, F>>>\n\n// export type GrouperNormalized<T extends Model> = { [key: string]: GrouperXNormalized<T> }\n\n// export interface Group<T extends Model, G extends Grouper<T> = Grouper<T>> {\n// grouper: G\n// begin: number\n// end: number\n// }\n\n// /**\n// * @example\n// * ```ts\n// * const grouped = groupBy([\"status\"])(items)\n// * // expexted: {[status]: [...items]}\n// *\n// * const grouped = groupBy([\"name\", \"age\"])(items)\n// * // expected {[status]: {[age]: [...items]}}\n// *\n// * const STATUS_LABELS = {active: \"Active\", inactive: \"Inactive\"}\n// * const grouped = groupBy([(item) => (STATUS_LABELS[item.status] || \"Undefined\")])(items)\n// * // expected {[\"Active\" | \"Inactive\" | \"Undefined\"]: [...items]}\n// *\n// * const grouped = groupBy([(item) => (STATUS_LABELS[item.status] || \"Undefined\"), \"age\"])(items)\n// * // expected {[\"Active\" | \"Inactive\" | \"Undefined\"]: {[age]: [...items]}}\n// * ```\n// */\n// export function groupBy<T extends Model>(groupers: Grouper<T>): SorterFn<T> {\n// return (_a, _b) => 0\n// }\n\n// export function grouperNormalize() {}\n\n// export function grouperCompile<T extends Model>(groupers: Grouper<T>): GrouperFn<T> {\n// return _ => undefined\n// }\n\n// export function grouperMerge<T extends Model, F = Flatten<T>>(\n// ...groupers: Array<Grouper<T, F> | undefined | null>\n// ): Grouper<T, F> | undefined {\n// return undefined\n// }\n\nexport class GrouperProperty<T extends Model> extends QueryProperty<Grouper<T>, GrouperNormalized> {\n protected override norm(a: any) {\n return this.provider.grouperNormalize(a)\n }\n\n protected override merge(a?: any, b?: any) {\n return this.provider.grouperMerge(a, b)\n }\n}\n\nexport class GrouperPropertySet<T extends Model> extends QueryPropertySet<Grouper<T>> {\n protected override newProperty() {\n return new GrouperProperty(this.provider)\n }\n\n protected override merge(...args: any[]) {\n return this.provider.grouperMerge(...args)\n }\n}\n","import { map, Observable } from \"rxjs\"\n\nimport { flattenDeep, isEqual } from \"es-toolkit\"\n\nimport { deepClone, isPlainObject } from \"@ngutil/common\"\n\nimport { Model } from \"../model\"\nimport { pathGetterCompile } from \"./path\"\nimport { QueryProperty, QueryPropertySet } from \"./query-property\"\n\nexport type SorterFn<T = any> = (a: T, b: T) => number\n\nexport const enum SortDirection {\n Asc = \"asc\",\n Desc = \"desc\"\n}\n\nexport type SortDir = SortDirection.Asc | SortDirection.Desc | \"asc\" | \"desc\"\nexport type SortDirExtra = { dir: SortDir; emptyFirst: boolean }\n\ntype _Sorter<F> = { [K in keyof F]: { [key in K]: SortDir | SortDirExtra } }[keyof F]\n// TODO: fix recursion\n// export type Sorter<T extends Model> = Array<_Sorter<Flatten<T>>>\nexport type Sorter<T extends Model> = Array<{ [key: string]: SortDir | SortDirExtra | NormalizedEntry | undefined }>\n\ntype NormalizedEntry = { path: string; isAsc: boolean; emptyFirst: boolean; remove?: boolean }\nexport type SorterNormalized = Array<NormalizedEntry>\n\n/**\n * @example\n *```ts\n * items.toSorted(sortBy([{\"author.name\": \"asc\"}]))\n * ```\n */\nexport function sortBy<T extends Model>(sorters: Sorter<T> | SorterNormalized): SorterFn<T> {\n if (sorters.length === 0) {\n throw new Error(\"Empty sorter\")\n }\n return _sorterCompile<T>(sorters) as any\n}\n\n/**\n * Normalize sorter definition\n *\n * @example\n * ```ts\n * normalizeSorter([{id: \"asc\"}]) -> [{path: \"id\", isAsc: true, emptyFirst: true}]\n * normalizeSorter([{id: {dir: \"desc\", emptyFirst: false}}]) -> [{path: \"id\", isAsc: false, emptyFirst: false}]\n * ```\n */\nexport function sorterNormalize<T extends Model>(sorters: Sorter<T> | SorterNormalized): SorterNormalized {\n if (sorterIsNormalized(sorters)) {\n return sorters\n }\n return _sorterNormalize(sorters)\n}\n\nexport function sorterIsNormalized(sorter: any): sorter is SorterNormalized {\n return Array.isArray(sorter) && sorter.every(value => \"path\" in value && \"isAsc\" in value && \"emptyFirst\" in value)\n}\n\nfunction _sorterNormalize<T extends Model>(sorters: Sorter<T>): SorterNormalized {\n if (!Array.isArray(sorters)) {\n sorters = [sorters]\n }\n\n return flattenDeep(\n (sorters as any).map((s: any) => {\n if (isPlainObject(s)) {\n // entry is normalized\n if (s[\"path\"] != null && s[\"isAsc\"] != null && s[\"emptyFirst\"] != null) {\n return s\n }\n }\n\n return Object.entries(s).map(([k, v]) => {\n if (v == null) {\n return { path: k, remove: true }\n } else if (typeof v === \"string\") {\n const isAsc = v.toLowerCase() === \"asc\"\n return { path: k, isAsc, emptyFirst: isAsc ? false : true }\n } else if (isPlainObject(v)) {\n return {\n path: k,\n isAsc: ((v as SortDirExtra).dir || \"asc\").toLowerCase() === \"asc\",\n emptyFirst: (v as SortDirExtra).emptyFirst == null ? true : !!(v as SortDirExtra).emptyFirst\n }\n } else {\n throw new Error(`Invalid sorter: ${v}`)\n }\n })\n })\n )\n}\n\nfunction _sorterCompile<T extends Model>(sorters: Sorter<T> | SorterNormalized): SorterFn<T> {\n if (sorters.length === 0) {\n return (_a, _b) => 0\n }\n\n const norm = sorterNormalize<T>(sorters).map(createComparator)\n if (norm.length === 1) {\n return norm[0]\n }\n\n const initial = norm.pop()!\n return norm.reduceRight<SorterFn<T>>(\n (next, curr) => (a, b) => {\n const r = curr(a, b)\n return r === 0 ? next(a, b) : r\n },\n initial\n )\n}\n\nfunction createComparator({ path, isAsc, emptyFirst }: NormalizedEntry): SorterFn {\n const getter = pathGetterCompile(path)\n if (isAsc) {\n return (a, b) => compare(getter(a), getter(b), emptyFirst)\n } else {\n return (a, b) => compare(getter(a), getter(b), !emptyFirst) * -1\n }\n}\n\nexport function compare(a: any, b: any, emptyFirst: boolean): number {\n // console.log(\"COMPARE\", a, b)\n if (a == null && b != null) {\n return emptyFirst === true ? -1 : 1\n } else if (a != null && b == null) {\n return emptyFirst === true ? 1 : -1\n } else if (a == null && b == null) {\n return 0\n } else if (isEqual(a, b)) {\n return 0\n } else if (typeof a === \"number\" && typeof b === \"number\") {\n return a - b\n } else if (typeof a === \"string\" && typeof b === \"string\") {\n const al = a.length\n const bl = b.length\n // if both lengths is 0 the code execution not reach that point, because a === b\n if (emptyFirst === true) {\n if (al === 0) {\n return -1\n } else if (bl === 0) {\n return 1\n }\n } else {\n if (al === 0) {\n return 1\n } else if (bl === 0) {\n return -1\n }\n }\n return a.localeCompare(b)\n } else if (Array.isArray(a) && Array.isArray(b)) {\n const al = a.length\n const bl = b.length\n const l = Math.min(al, bl)\n\n for (let i = 0; i < l; i++) {\n const res = compare(a[i], b[i], emptyFirst)\n if (res !== 0) {\n return res\n }\n }\n\n if (al === bl) {\n return 0\n }\n\n if (emptyFirst === true) {\n if (al === 0) {\n return -1\n } else if (bl === 0) {\n return 1\n }\n } else {\n if (al === 0) {\n return 1\n } else if (bl === 0) {\n return -1\n }\n }\n\n return al - bl\n } else if (isPlainObject(a) && isPlainObject(b)) {\n return JSON.stringify(a).localeCompare(JSON.stringify(b))\n }\n\n return a > b ? -1 : 1\n}\n\nexport function sorterMerge(...sorters: (SorterNormalized | undefined | null)[]): SorterNormalized | undefined {\n let result: SorterNormalized | undefined\n\n for (const sorter of sorters) {\n if (sorter == null) {\n continue\n }\n\n if (result == null) {\n result = deepClone(sorter)\n continue\n }\n\n for (const sentry of sorter) {\n const existingIndex = result.findIndex(value => value.path === sentry.path)\n if (existingIndex > -1) {\n if (sentry.remove) {\n result.splice(existingIndex, 1)\n } else {\n result[existingIndex] = deepClone(sentry)\n }\n } else if (!sentry.remove) {\n result.push(deepClone(sentry))\n }\n }\n }\n\n if (result?.length === 0) {\n return undefined\n }\n\n return result\n}\n\nexport class SorterProperty<T extends Model> extends QueryProperty<Sorter<T>, SorterNormalized> {\n protected override norm(a: Sorter<T>): SorterNormalized | undefined {\n return this.provider.sorterNormalize(a)\n }\n protected override merge(a?: SorterNormalized, b?: SorterNormalized): SorterNormalized | undefined {\n return this.provider.sorterMerge(a, b)\n }\n}\n\nexport class SorterPropertySet extends QueryPropertySet<SorterNormalized> {\n of(name: string): Observable<NormalizedEntry | undefined> {\n return this.pipe(map(sorters => (sorters == null ? undefined : sorters.find(value => value.path === name))))\n }\n\n isAsc(name: string): Observable<boolean | undefined> {\n return this.of(name).pipe(map(v => (v != null ? v.isAsc : undefined)))\n }\n\n isDesc(name: string): Observable<boolean | undefined> {\n return this.of(name).pipe(map(v => (v != null ? !v.isAsc : undefined)))\n }\n\n protected override newProperty() {\n return new SorterProperty(this.provider)\n }\n protected override merge(...args: any[]) {\n return this.provider.sorterMerge(...args)\n }\n}\n","import { Model } from \"../model\"\nimport { QueryProperty, QueryPropertySet } from \"./query-property\"\n\n/**\n * @exmaple\n * ```ts\n * [\n * \"field_name\",\n * {\"child_name\": [\"child_field_name\"]},\n * {\"children\": [\"children_field_name\", {\"$type\": Article, slimer: [\"id\", \"title\"]}]},\n * {\"$type\": Employee, slimer: [\"name\"]}.\n * {\"$filter\": Filter<T, F>}\n * ]\n * ```\n */\nexport type Slimer<T extends Model> = any\nexport type SlimerNormalized = any\nexport type SlimerFn<T> = (item: T) => T\n\nexport function slimBy<T extends Model>(slimer: Slimer<T>): void {}\n\nexport function slimerNormalize<T extends Model>(slimer: Slimer<T>): SlimerNormalized {}\n\nfunction slimerCompile<T extends Model>(slimer: Slimer<T>): SlimerFn<T> {\n return item => item\n}\n\nexport function slimerMerge<T extends Model>(...slimers: Slimer<T>): any {}\n\nexport class SlimerProperty<T extends Model> extends QueryProperty<Slimer<T>, SlimerNormalized> {\n protected override norm(a: any) {\n return this.provider.slimerNormalize(a)\n }\n\n protected override merge(a?: any, b?: any) {\n return this.provider.slimerMerge(a, b)\n }\n}\n\nexport class SlimerPropertySet<T extends Model> extends QueryPropertySet<Slimer<T>> {\n protected override newProperty() {\n return new SlimerProperty(this.provider)\n }\n\n protected override merge(...args: any[]) {\n return this.provider.slimerMerge(...args)\n }\n}\n","import { ListRange } from \"@angular/cdk/collections\"\n\nimport { deepClone } from \"@ngutil/common\"\n\n// https://www.npmjs.com/package/array-view\n\n/**\n * @example\n * ```ts\n * {start: 0, end: 0} // empty range\n * {start: 0, end: 1} // range with one item.eg sliceApply([1, 2, 3], {start:0, end:1}) -> [1]\n * ```\n */\nexport interface Slice extends ListRange {\n /**\n * Start of slice, exact index of item in list\n */\n readonly start: number\n /**\n * End of slice, not include end index of item in list\n */\n readonly end: number\n readonly pageSize?: number\n}\n\nexport function sliceMerge(...slices: Slice[]) {\n let result: Slice | undefined = undefined\n\n for (const slice of slices) {\n if (slice == null) {\n continue\n }\n if (result == null) {\n result = deepClone(slice)\n } else {\n result = { ...(result as any), ...slice }\n }\n }\n\n return result\n}\n\n/**\n * Apply slice to array, and force the result length to equal with Slice length,\n * so fill array with undefined if not enought elements\n */\nexport function sliceApply(slice: Slice, array: readonly any[]): any[] {\n const result = array.slice(slice.start, slice.end)\n result.length = slice.end - slice.start\n return result\n}\n\n/**\n * @returns Page numbers, eg.: `[10, 11, 12, 13, ...]`\n */\nexport function sliceToPages(slice: Slice): number[] {\n if (slice.pageSize == null) {\n throw new Error(\"Missing `step` from slice\")\n }\n\n const start = Math.floor(slice.start / slice.pageSize)\n const end = Math.ceil(slice.end / slice.pageSize)\n return Array.from({ length: end - start }, (_, i) => start + i)\n}\n\nexport function sliceInsert(slice: Slice, array: readonly any[], newItems: readonly any[]): any[] {\n if (slice.start === slice.end) {\n return array as any\n }\n\n let result = array.slice(0, slice.start)\n result.length = slice.start\n\n result = result.concat(newItems)\n\n if (!isNaN(slice.end) && isFinite(slice.end)) {\n result.length = slice.end\n result = result.concat(array.slice(slice.end))\n }\n\n return result\n}\n\nexport function sliceClamp(slice: Slice, constraint: Slice): Slice {\n return {\n start: Math.max(slice.start, constraint.start),\n end: Math.min(slice.end, constraint.end),\n pageSize: slice.pageSize\n }\n}\n\nexport function sliceEq(a: Slice, b: Slice): boolean {\n return a.start === b.start && a.end === b.end && a.pageSize === b.pageSize\n}\n\n// TODO: sliceOverlap(other: Slice): Slice\n// TODO: sliceIncludes(other: Slice): boolean\n// TODO: sliceConcat(...slices: Slice[]): Slice[]\n// TODO: sliceDiff(slice: Slice): Slice[]\n","import { combineLatest, Observable, shareReplay } from \"rxjs\"\n\nimport { type DeepReadonly } from \"@ngutil/common\"\n\nimport { type Model } from \"../model\"\nimport type { DataProvider } from \"../provider\"\nimport { readonlyProp } from \"./common\"\nimport { type FilterNormalized, FilterProperty, FilterPropertySet } from \"./filter\"\nimport { type GrouperNormalized, GrouperProperty, GrouperPropertySet } from \"./grouper\"\nimport { type QueryPropertySetOf } from \"./query-property\"\nimport { type Slice } from \"./slice\"\nimport { type SlimerNormalized, SlimerProperty, SlimerPropertySet } from \"./slimer\"\nimport { type SorterNormalized, SorterProperty, SorterPropertySet } from \"./sorter\"\n\nexport interface Query {\n filter?: DeepReadonly<FilterNormalized>\n sorter?: DeepReadonly<SorterNormalized>\n slimer?: DeepReadonly<SlimerNormalized>\n grouper?: DeepReadonly<GrouperNormalized>\n}\n\nexport interface QueryWithSlice<T extends Model> extends Query {\n slice: DeepReadonly<Slice>\n}\n\nexport interface QueryResult<T extends Model> {\n items: readonly T[]\n total?: number\n groups?: any[]\n}\n\nexport interface QuerySubject<T extends Model, N extends string[]> extends Observable<Query> {\n readonly filter: QueryPropertySetOf<FilterPropertySet<T>, FilterProperty<T>, N>\n readonly sorter: QueryPropertySetOf<SorterPropertySet, SorterProperty<T>, N>\n readonly slimer: QueryPropertySetOf<SlimerPropertySet<T>, SlimerProperty<T>, N>\n readonly grouper: QueryPropertySetOf<GrouperPropertySet<T>, GrouperProperty<T>, N>\n}\n\nexport function querySubject<T extends Model, N extends string[]>(\n provider: DataProvider<T>,\n ...names: N\n): QuerySubject<T, N> {\n const filter = new FilterPropertySet(provider, ...names)\n const sorter = new SorterPropertySet(provider, ...names)\n const slimer = new SlimerPropertySet(provider, ...names)\n const grouper = new GrouperPropertySet(provider, ...names)\n\n const result = combineLatest({ filter, sorter, slimer, grouper }).pipe(shareReplay(1))\n readonlyProp(result, \"filter\", filter)\n readonlyProp(result, \"sorter\", sorter)\n readonlyProp(result, \"slimer\", slimer)\n readonlyProp(result, \"grouper\", grouper)\n\n return result as any\n}\n","import { isEqual } from \"es-toolkit\"\nimport { Primitive } from \"utility-types\"\n\nimport { DeepReadonly, toSorted } from \"@ngutil/common\"\n\nimport { Model } from \"../model\"\nimport { Filter, filterBy } from \"./filter\"\nimport { groupBy } from \"./grouper\"\nimport { QueryResult, QueryWithSlice } from \"./query\"\nimport { Slice } from \"./slice\"\nimport { sortBy, Sorter, type SorterNormalized } from \"./sorter\"\n\nconst INPUT = Symbol(\"INPUT\")\n\ninterface PartialExecutor {\n [INPUT]: any\n}\n\nexport interface QueryExecutors<T extends Model> {\n readonly filterFn?: FilterExecutor<T>\n readonly sorterFn?: SorterExecutor<T>\n readonly grouperFn?: GrouperExecutor<T>\n readonly slicerFn?: SliceExecutor<T>\n}\n\nexport interface QueryExecutor<T extends Model> extends QueryExecutors<T> {\n (items: readonly T[]): QueryResult<T>\n}\n\nexport function queryExecutor<T extends Model>(\n query: QueryWithSlice<T>,\n previous?: QueryExecutor<T>\n): QueryExecutor<T> {\n const executors: QueryExecutors<T> = {\n filterFn: filterExecutor(query.filter, previous?.filterFn),\n sorterFn: sorterExecutor(query.sorter, previous?.sorterFn),\n grouperFn: grouperExecutor(query.grouper, previous?.grouperFn),\n slicerFn: sliceExecutor(query.slice, previous?.slicerFn)\n }\n\n const changed = previous == null || Object.entries(executors).some(([k, v]) => (previous as any)[k] !== v)\n if (!changed) {\n return previous\n }\n\n const executor = (items: readonly T[]): QueryResult<T> => {\n if (items == null || items.length === 0) {\n return { items: [], total: 0 }\n }\n\n let result: readonly T[] = items\n\n if (executors.filterFn) {\n result = result.filter(executors.filterFn)\n }\n\n if (executors.sorterFn) {\n result = toSorted(result, executors.sorterFn)\n }\n\n const total = result.length\n\n // TODO: grouper\n\n if (executors.slicerFn) {\n result = executors.slicerFn(result)\n }\n\n return { items: result, total }\n }\n\n for (const [k, v] of Object.entries(executors)) {\n Object.defineProperty(executor, k, {\n value: v,\n enumerable: true,\n writable: false\n })\n }\n\n return executor\n}\n\ninterface FilterExecutor<T extends Model> extends PartialExecutor {\n (item: T): boolean\n}\n\nfunction filterExecutor<T extends Model>(\n filter?: DeepReadonly<Filter<T>>,\n prev?: FilterExecutor<T>\n): FilterExecutor<T> | undefined {\n return compileExec<T>(filter, prev, filterBy)\n}\n\ninterface SorterExecutor<T extends Model> extends PartialExecutor {\n (a: T, b: T): number\n}\n\nfunction sorterExecutor<T extends Model>(\n sorter?: DeepReadonly<Sorter<T>> | DeepReadonly<SorterNormalized>,\n prev?: SorterExecutor<T>\n): SorterExecutor<T> | undefined {\n return compileExec<T>(sorter, prev, sortBy)\n}\n\ninterface GrouperExecutor<T extends Model> extends PartialExecutor {\n (item: T): Primitive\n}\n\nfunction grouperExecutor<T extends Model>(\n sorter?: DeepReadonly<Sorter<T>>,\n prev?: GrouperExecutor<T>\n): GrouperExecutor<T> | undefined {\n return compileExec<T>(sorter, prev, groupBy)\n}\n\ninterface SliceExecutor<T extends Model> extends PartialExecutor {\n (items: readonly T[]): T[]\n}\n\nfunction sliceExecutor<T extends Model>(\n slice?: DeepReadonly<Slice>,\n prev?: SliceExecutor<T>\n): SliceExecutor<T> | undefined {\n return compileExec<T>(slice, prev, sliceBy)\n}\n\nfunction sliceBy<T extends Model>(slice: Slice) {\n return (items: T[]) => items.slice(slice.start, slice.end)\n}\n\nfunction compileExec<T extends Model>(input: any, prev: any, compiler: any): any {\n if (input == null) {\n return undefined\n }\n\n if (prev != null) {\n // thorically input is readonly\n if (prev[INPUT] === input || isEqual(prev[INPUT], input)) {\n return prev\n }\n }\n\n const exec = compiler(input) as any\n Object.defineProperty(exec, INPUT, {\n value: input,\n enumerable: true,\n writable: false\n })\n return exec\n}\n","import { Observable } from \"rxjs\"\n\nimport { DeepReadonly } from \"@ngutil/common\"\n\nimport { Model, ModelRefNorm } from \"../model\"\nimport { Slice } from \"../query\"\n\nexport type PartialCollection<T> = readonly (T | undefined)[]\n\nexport abstract class CollectionStore<T extends Model> {\n /**\n * Update the given slice, and return all items observable\n */\n abstract insertSlice(slice: DeepReadonly<Slice>, items: readonly T[]): Observable<PartialCollection<T>>\n\n /**\n * @returns `true` when the given slice is available in the cache\n */\n abstract hasSlice(slice: DeepReadonly<Slice>): Observable<boolean>\n\n /**\n * @returns items by the given slice\n */\n abstract getSlice(slice: DeepReadonly<Slice>): Observable<PartialCollection<T>>\n\n /**\n * Get item from collection\n */\n abstract get(ref: ModelRefNorm): Observable<T | undefined>\n\n /**\n * Get index of item in collection, -1 if not found\n */\n abstract indexOf(ref: ModelRefNorm): Observable<number>\n\n /**\n * Update item in collection\n *\n * @returns the updated index, or -1 if not found\n */\n abstract update(ref: ModelRefNorm, item: T): Observable<number>\n\n /**\n * Update item if exists in collection, or insert at the given position\n *\n * @param position If positon is negative, insert at the end of collection\n * @returns the updated index or index of where to insert\n */\n abstract updateOrInsert(ref: ModelRefNorm, item: T, position?: number): Observable<number>\n\n /**\n * Remove item from collection\n * @returns the index of deleted item, -1 if not found\n */\n abstract del(ref: ModelRefNorm): Observable<number>\n\n /**\n * Removes all items from collection\n */\n abstract clear(): Observable<void>\n}\n","import { BehaviorSubject, combineLatest, map, Observable, of, take } from \"rxjs\"\n\nimport { Model, ModelRefNorm } from \"../model\"\nimport { Slice, sliceApply, sliceClamp, sliceEq, sliceInsert } from \"../query\"\nimport { CollectionStore, PartialCollection } from \"./collection-store\"\n\nexport class MemoryStore<T extends Model> extends CollectionStore<T> {\n readonly #data = new BehaviorSubject<PartialCollection<T>>([])\n\n override insertSlice(slice: Slice, items: readonly T[]): Observable<PartialCollection<T>> {\n this.#data.next(sliceInsert(slice, this.#data.value, items))\n return this.#data\n }\n\n override hasSlice(slice: Slice): Observable<boolean> {\n return this.#data.pipe(\n map(data => {\n if (sliceEq(slice, sliceClamp(slice, { start: 0, end: data.length }))) {\n for (let i = slice.start; i < slice.end; i++) {\n if (data[i] == null) {\n return false\n }\n }\n return true\n } else {\n return false\n }\n })\n )\n }\n\n override getSlice(slice: Slice): Observable<PartialCollection<T>> {\n return this.#data.pipe(map(data => sliceApply(slice, data)))\n }\n\n override get(ref: ModelRefNorm): Observable<T | undefined> {\n return this.#data.pipe(map(data => data.find(ref.toFilter())))\n }\n\n override indexOf(ref: ModelRefNorm): Observable<number> {\n return this.#data.pipe(map(data => data.findIndex(ref.toFilter())))\n }\n\n override update(ref: ModelRefNorm, item: T): Observable<number> {\n return combineLatest({\n index: this.indexOf(ref),\n data: this.#data\n }).pipe(\n take(1),\n map(({ index, data }) => {\n if (index < 0) {\n return index\n }\n this.#data.next(sliceInsert({ start: index, end: index + 1 }, data, [item]))\n return index\n })\n )\n }\n\n override updateOrInsert(ref: ModelRefNorm, item: T, position?: number): Observable<number> {\n return combineLatest({\n index: this.indexOf(ref),\n data: this.#data\n }).pipe(\n take(1),\n map(({ index, data }) => {\n if (index < 0) {\n index = position == null ? data.length : position < 0 ? data.length : position\n }\n this.#data.next(sliceInsert({ start: index, end: index + 1 }, data, [item]))\n return index\n })\n )\n }\n\n override del(ref: ModelRefNorm): Observable<number> {\n return combineLatest({\n index: this.indexOf(ref),\n data: this.#data\n }).pipe(\n take(1),\n map(({ index, data }) => {\n if (index < 0) {\n return index\n }\n const result = data.slice(0)\n result.splice(index, 1)\n this.#data.next(result)\n return index\n })\n )\n }\n\n override clear(): Observable<void> {\n if (this.#data.value.length > 0) {\n this.#data.next([])\n }\n return of(undefined)\n }\n}\n","import { DataSource as CdkDataSource, CollectionViewer } from \"@angular/cdk/collections\"\n\nimport {\n BehaviorSubject,\n catchError,\n combineLatest,\n distinctUntilChanged,\n EMPTY,\n filter,\n map,\n merge,\n Observable,\n of,\n ReplaySubject,\n shareReplay,\n Subject,\n switchMap,\n take,\n takeUntil,\n tap,\n timer\n} from \"rxjs\"\n\nimport { isEqual } from \"es-toolkit\"\n\nimport { ConnectProtocol, deepClone, deepFreeze, isFalsy } from \"@ngutil/common\"\n\nimport type { Model, ModelRef } from \"../model\"\nimport type { DataProvider } from \"../provider/provider\"\nimport type { Filter, QueryResult, QueryWithSlice, Slice } from \"../query\"\nimport { querySubject } from \"../query\"\nimport { type CollectionStore, MemoryStore, type PartialCollection } from \"../store\"\n\nconst DEBOUNCE_TIME = 50\n\nexport class DataSource<T extends Model> extends CdkDataSource<T | undefined> implements ConnectProtocol {\n readonly isBusy$ = new BehaviorSubject<boolean>(false)\n readonly total$ = new BehaviorSubject<number | undefined>(undefined)\n\n readonly #slice = new ReplaySubject<Slice>(1)\n readonly slice$: Observable<Slice> = this.#slice.pipe(\n switchMap(slice => this.provider.clampSlice(slice)),\n distinctUntilChanged(isEqual),\n map(slice => deepFreeze(deepClone(slice))),\n shareReplay({ bufferSize: 1, refCount: true })\n )\n\n readonly #reload = new BehaviorSubject<void>(undefined)\n\n readonly #query: Observable<QueryWithSlice<T>> = combineLatest({\n query: this.query$,\n reload: merge(this.#reload, this.provider.changed$)\n }).pipe(\n // tap(() => this.#setBusy(true)),\n // TODO: maybe silent reset or prevent items$ chenges\n // TODO: alternative solution use cacheId, and query item from store with this cacheId\n switchMap(({ query }) =>\n this.store.clear().pipe(\n map(() => {\n this.total$.next(undefined)\n ;(this.reset$ as Subject<void>).next(void 0)\n return query\n })\n )\n ),\n switchMap(query =>\n this.slice$.pipe(\n map(slice => {\n // this.#setBusy(true)\n return { ...query, slice }\n })\n )\n ),\n shareReplay({ bufferSize: 1, refCount: true })\n )\n\n readonly reset$: Observable<void> = new Subject<void>()\n\n readonly items$: Observable<PartialCollection<T>> = this.#query.pipe(\n switchMap(v => (this.provider.isAsync ? timer(DEBOUNCE_TIME).pipe(map(() => v)) : of(v))),\n switchMap(query =>\n this.store.hasSlice(query.slice).pipe(\n take(1),\n switchMap(hasSlice => {\n if (!hasSlice) {\n this.#setBusy(true)\n return this.provider.queryList(query).pipe(\n take(1),\n catchError(() => {\n this.#setBusy(false)\n return of({ items: [], total: undefined } satisfies QueryResult<T>)\n }),\n tap(() => this.#setBusy(false)),\n switchMap(result => {\n if (result.total != null) {\n this.total$.next(result.total)\n } else if (result.items.length < query.slice.end - query.slice.start) {\n this.total$.next(query.slice.start + result.items.length)\n }\n return this.store.insertSlice(query.slice, result.items).pipe(take(1))\n })\n )\n } else {\n return EMPTY\n }\n }),\n switchMap(() => this.store.getSlice(query.slice).pipe(take(1)))\n )\n ),\n shareReplay({ bufferSize: 1, refCount: true })\n )\n\n readonly isEmpty$ = combineLatest({ busy: this.isBusy$, items: this.items$ }).pipe(\n filter(({ busy }) => !busy),\n map(({ items }) => items.every(isFalsy)),\n shareReplay({ bufferSize: 1, refCount: true })\n )\n\n constructor(\n public readonly provider: DataProvider<T>,\n public readonly store: CollectionStore<T> = new MemoryStore(),\n public readonly query$ = querySubject(provider, \"normal\", \"forced\")\n ) {\n super()\n }\n\n setSlice(slice: Slice) {\n this.#slice.next(slice)\n return this\n }\n\n setFilter(filter: Partial<Record<\"normal\" | \"forced\", Filter<T>>>) {\n for (const [k, v] of Object.entries(filter)) {\n this.query$.filter[k as \"normal\" | \"forced\"].set(v)\n }\n return this\n }\n\n updateFilter(filter: Partial<Record<\"normal\" | \"forced\", Filter<T>>>) {\n for (const [k, v] of Object.entries(filter)) {\n this.query$.filter[k as \"normal\" | \"forced\"].update(v)\n }\n return this\n }\n\n all() {\n return this.setSlice({ start: 0, end: Infinity })\n }\n\n reload() {\n this.#reload.next()\n }\n\n getItem(ref: ModelRef): Observable<T | undefined> {\n const refn = this.provider.meta.normalizeRef(ref)\n return this.store.get(refn).pipe(\n take(1),\n switchMap(result => {\n if (result == null) {\n return this.provider.queryItem(refn).pipe(take(1))\n }\n return of(result)\n })\n )\n }\n\n watchItem(ref: ModelRef): Observable<T | undefined> {\n const refn = this.provider.meta.normalizeRef(ref)\n return this.#storeFirst(\n query => this.store.get(refn),\n query => this.provider.queryItem(refn, query)\n )\n }\n\n getItemPosition(ref: ModelRef): Observable<number | undefined> {\n return this.watchItemPosition(ref).pipe(take(1))\n }\n\n watchItemPosition(ref: ModelRef): Observable<number | undefined> {\n const refn = this.provider.meta.normalizeRef(ref)\n return this.#storeFirst(\n query => this.store.indexOf(refn).pipe(map(i => (i < 0 ? undefined : i))),\n query => this.provider.queryPosition(refn, query)\n )\n }\n\n realodItem(ref: ModelRef, insertPosition?: number): Observable<T | undefined> {\n const refn = this.provider.meta.normalizeRef(ref)\n return this.#query.pipe(\n take(1),\n switchMap(query => this.provider.queryItem(refn, query).pipe(take(1))),\n switchMap(item =>\n item != null ? this.store.updateOrInsert(refn, item, insertPosition).pipe(map(() => item)) : of(item)\n )\n )\n }\n\n #storeFirst<X>(\n storeFn: (query: QueryWithSlice<T>) => Observable<X>,\n selfFn: (query: QueryWithSlice<T>) => Observable<X>\n ): Observable<X> {\n return this.#query.pipe(\n take(1),\n switchMap(query => storeFn(query).pipe(switchMap(result => (result == null ? selfFn(query) : of(result)))))\n )\n }\n\n #setBusy(busy: boolean) {\n if (this.isBusy$.value !== busy) {\n // dont set true when not async provider, but false is also set\n if (busy && !this.provider.isAsync) {\n return\n }\n this.isBusy$.next(busy)\n }\n }\n\n #cvSubs = new Map<CollectionViewer, Subject<void>>()\n\n override connect(collectionViewer: CollectionViewer) {\n const until = new Subject<void>()\n\n this.#cvSubs.get(collectionViewer)?.next()\n this.#cvSubs.set(collectionViewer, until)\n\n return new Observable<PartialCollection<T>>(subscriber => {\n const sub1 = collectionViewer.viewChange.subscribe(this.#slice)\n const sub2 = this.items$.subscribe(subscriber)\n\n return () => {\n if (this.#cvSubs.get(collectionViewer) === until) {\n this.#cvSubs.delete(collectionViewer)\n }\n sub1.unsubscribe()\n sub2.unsubscribe()\n }\n }).pipe(takeUntil(until))\n }\n\n override disconnect(collectionViewer: CollectionViewer): void {\n this.#cvSubs.get(collectionViewer)?.next()\n this.#cvSubs.delete(collectionViewer)\n }\n}\n","import type { Observable } from \"rxjs\"\nimport { NEVER, of } from \"rxjs\"\n\nimport type { Model, ModelMeta, ModelRefNorm } from \"../model\"\nimport {\n filterMerge,\n filterNormalize,\n type FilterNormalized,\n type QueryResult,\n type QueryWithSlice,\n type Slice,\n sorterMerge,\n sorterNormalize,\n type SorterNormalized\n} from \"../query\"\nimport { grouperMerge, grouperNormalize, type GrouperNormalized } from \"../query/grouper\"\nimport { slimerMerge, slimerNormalize, type SlimerNormalized } from \"../query/slimer\"\nimport { DataSource } from \"../source\"\nimport type { CollectionStore } from \"../store\"\n\nexport abstract class DataProvider<T extends Model> {\n /**\n * `true` when the provider is making async requests\n */\n abstract readonly isAsync: boolean\n\n /**\n * Metadata of model\n */\n abstract readonly meta: ModelMeta<T>\n\n /**\n * Emit event when data is changed\n */\n get changed$(): Observable<any> {\n return this._changed\n }\n protected _changed: Observable<any> = NEVER\n\n /**\n * Query items by the given request\n */\n abstract queryList(request: QueryWithSlice<T>): Observable<QueryResult<T>>\n\n /**\n * Query exactly one item by the given request\n */\n abstract queryItem(ref: ModelRefNorm, request?: QueryWithSlice<T>): Observable<T | undefined>\n\n /**\n * Query item position in the list that matching by the given request\n */\n abstract queryPosition(ref: ModelRefNorm, request: QueryWithSlice<T>): Observable<number | undefined>\n\n /**\n * Froce Slice boundaries, useful in array, or obeservable providers\n */\n clampSlice(slice: Slice): Observable<Slice> {\n return of(slice)\n }\n\n filterNormalize(filter: any): FilterNormalized | undefined {\n return filterNormalize(filter)\n }\n\n filterMerge(...filters: any[]): FilterNormalized | undefined {\n return filterMerge(...filters)\n }\n\n sorterNormalize(sorter: any): SorterNormalized {\n return sorterNormalize(sorter)\n }\n\n sorterMerge(...sorters: any[]): SorterNormalized | undefined {\n return sorterMerge(...sorters)\n }\n\n grouperNormalize(grouper: any): GrouperNormalized {\n return grouperNormalize(grouper)\n }\n\n grouperMerge(...groupers: any[]): GrouperNormalized | undefined {\n return grouperMerge(...groupers)\n }\n\n slimerNormalize(slimer: any): SlimerNormalized {\n return slimerNormalize(slimer)\n }\n\n slimerMerge(...slimers: any[]): SlimerNormalized | undefined {\n return slimerMerge(...slimers)\n }\n\n /**\n * @returns New data source instance\n */\n toDataSource(store?: CollectionStore<T>): DataSource<T> {\n return new DataSource(this, store)\n }\n}\n","import { DataSource as CdkDataSource, CollectionViewer } from \"@angular/cdk/collections\"\nimport { Directive, inject, input, Input, OnDestroy } from \"@angular/core\"\nimport { takeUntilDestroyed, toObservable } from \"@angular/core/rxjs-interop\"\n\nimport {\n combineLatest,\n finalize,\n map,\n Observable,\n of,\n ReplaySubject,\n shareReplay,\n Subject,\n Subscription,\n switchMap,\n takeUntil,\n throwError\n} from \"rxjs\"\n\nimport { BusyDirective } from \"@ngutil/aria\"\nimport { ConnectProtocol } from \"@ngutil/common\"\n\nimport { Model } from \"../model\"\nimport { DataProvider } from \"../provider/provider\"\nimport { Filter, Grouper, Slimer, Sorter } from \"../query\"\nimport { DataSource } from \"./source\"\n\nexport type DataSourceProxyInput<T extends Model> = DataSourceProxy<T> | DataSource<T> | DataProvider<T>\n\n/**\n * @example\n * ```html\n * <table [nuDataSource]=\"...\" [filter]=\"{isActive: true}\" [sorter]=\"[{name: 'asc'}]\"></table>\n * ```\n *\n * ```ts\n * @Component({\n * template: `<table [nuDataSource]=\"users$\"></table>`\n * })\n * class UserTable {\n * readonly userService = inject(UserService)\n * readonly users$ = UserService.all()\n * }\n * ```\n *\n * ```ts\n * @Component({\n * selector: \"table.my-table\",\n * template: `\n * <cdk-virtual-scroll-viewport itemSize=\"50\" class=\"example-viewport\">\n * <div *cdkVirtualFor=\"let item of dataSource\" class=\"example-item\">{{item}}</div>\n * </cdk-virtual-scroll-viewport>\n * `\n * })\n * class TableComponent {\n * readonly dataSource = inject(DataSourceProxy)\n * }\n * ```\n */\n@Directive({\n selector: \"[nuDataSource]\",\n exportAs: \"nuDataSource\"\n})\nexport class DataSourceProxy<T extends Model>\n extends CdkDataSource<T | undefined>\n implements OnDestroy, ConnectProtocol\n{\n @Input({ required: true, alias: \"nuDataSource\" })\n set value(value: DataSourceProxyInput<T>) {\n this.#valueSub?.unsubscribe()\n this.#valueSub = coerceDataSource<T>(value).subscribe(this.#value)\n }\n\n #valueSub?: Subscription\n readonly #value = new ReplaySubject<DataSource<T>>(1)\n readonly value$ = this.#value.pipe(takeUntilDestroyed())\n readonly query$ = this.value$.pipe(\n map(value => value.query$),\n shareReplay(1)\n )\n\n readonly items$ = this.value$.pipe(\n switchMap(value => value.items$),\n shareReplay(1)\n )\n\n readonly isBusy$ = this.value$.pipe(\n switchMap(value => value.isBusy$),\n shareReplay(1)\n )\n\n readonly isEmpty$ = this.value$.pipe(\n switchMap(value => value.isEmpty$),\n shareReplay(1)\n )\n\n #cvSubs = new Map<CollectionViewer, Subject<void>>()\n\n override connect(collectionViewer: CollectionViewer): Observable<readonly (T | undefined)[]> {\n const until = new Subject<void>()\n\n this.#cvSubs.get(collectionViewer)?.next()\n this.#cvSubs.set(collectionViewer, until)\n\n return this.value$.pipe(\n switchMap(value => value.connect(collectionViewer)),\n takeUntil(until),\n finalize(() => this.#cvSubs.delete(collectionViewer))\n )\n }\n\n override disconnect(collectionViewer: CollectionViewer): void {\n this.#cvSubs.get(collectionViewer)?.next()\n this.#cvSubs.delete(collectionViewer)\n }\n\n ngOnDestroy(): void {\n this.#valueSub?.unsubscribe()\n this.#valueSub = undefined\n }\n}\n\n@Directive({\n selector: \"[nuDataSource][filter]\"\n})\nexport class DataSourceProxyFilter<T extends Model, F extends Filter<T>> {\n readonly #proxy = inject<DataSourceProxy<T>>(DataSourceProxy)\n readonly filter = input.required<F>()\n readonly filter$ = toObservable(this.filter)\n\n constructor() {\n combineLatest({ query: this.#proxy.query$, filter: this.filter$ })\n .pipe(takeUntilDestroyed())\n .subscribe(({ query, filter }) => query.filter.forced.set(filter))\n }\n}\n\n@Directive({\n selector: \"[nuDataSource][sorter]\"\n})\nexport class DataSourceProxySorter<T extends Model, S extends Sorter<T>> {\n readonly #proxy = inject<DataSourceProxy<T>>(DataSourceProxy)\n readonly sorter = input.required<S>()\n readonly sorter$ = toObservable(this.sorter)\n\n constructor() {\n combineLatest({ query: this.#proxy.query$, sorter: this.sorter$ })\n .pipe(takeUntilDestroyed())\n .subscribe(({ query, sorter }) => query.sorter.forced.set(sorter))\n }\n}\n\n@Directive({\n selector: \"[nuDataSource][slimer]\"\n})\nexport class DataSourceProxySlimer<T extends Model, S extends Slimer<T>> {\n readonly #proxy = inject<DataSourceProxy<T>>(DataSourceProxy)\n readonly slimer = input.required<S>()\n readonly slimer$ = toObservable(this.slimer)\n\n constructor() {\n combineLatest({ query: this.#proxy.query$, slimer: this.slimer$ })\n .pipe(takeUntilDestroyed())\n .subscribe(({ query, slimer }) => query.slimer.forced.set(slimer))\n }\n}\n\n@Directive({\n selector: \"[nuDataSource][grouper]\"\n})\nexport class DataSourceProxyGrouper<T extends Model, G extends Grouper<T>> {\n readonly #proxy = inject<DataSourceProxy<T>>(DataSourceProxy)\n readonly grouper = input.required<G>()\n readonly grouper$ = toObservable(this.grouper)\n\n constructor() {\n combineLatest({ query: this.#proxy.query$, grouper: this.grouper$ })\n .pipe(takeUntilDestroyed())\n .subscribe(({ query, grouper }) => query.grouper.forced.set(grouper))\n }\n}\n\n@Directive({\n selector: \"[nuDataSource][nuBusy]\"\n})\nexport class DataSourceProxyBusy {\n readonly #proxy = inject<DataSourceProxy<any>>(DataSourceProxy)\n readonly #busy = inject(BusyDirective)\n\n constructor() {\n this.#proxy.value$\n .pipe(\n takeUntilDestroyed(),\n switchMap(value => value.isBusy$)\n )\n .subscribe(isBusy => this.#busy.set(isBusy, \"data-source\"))\n }\n}\n\nfunction coerceDataSource<T extends Model>(value: DataSourceProxyInput<T>): Observable<DataSource<T>> {\n if (value instanceof DataSourceProxy) {\n return value.value$\n } else if (value instanceof DataSource) {\n return of(value)\n } else if (value instanceof DataProvider) {\n return of(value.toDataSource())\n } else {\n return throwError(() => new Error(\"Invalid DataSource value\"))\n }\n}\n","import { TrackByFunction } from \"@angular/core\"\n\nimport { isEqual } from \"es-toolkit\"\nimport { Primitive } from \"utility-types\"\n\nimport { filterBy, pathGetterCompile } from \"../query\"\n\nexport type Model = { [key: string]: any }\n\nexport type ModelRef = { key?: Primitive | Array<Primitive>; index?: number }\nexport type ModelRefFilter<T> = (item: T, index: number) => boolean\n\nexport interface ModelMetaProps<T extends Model> {\n readonly keys: readonly string[]\n readonly trackBy?: TrackByFunction<T>\n}\n\nexport type ModelMetaInput<T extends Model> = ModelMeta<T> | ModelMetaProps<T>\n\nexport type TrackedModel<T extends Model> = { index: number; model: T }\n\nexport class ModelMeta<T extends Model> implements ModelMetaProps<T> {\n static coerce<M extends Model>(value: ModelMetaInput<M>): ModelMeta<M> {\n if (value instanceof ModelMeta) {\n return value\n } else {\n return new ModelMeta(value)\n }\n }\n\n readonly keys: readonly string[]\n readonly trackBy: TrackByFunction<T>\n readonly #getKey?: (model: T) => string\n\n constructor(props: ModelMetaProps<T>) {\n this.keys = props.keys\n\n if (this.keys.length > 0) {\n const getters = this.keys.map(pathGetterCompile)\n if (props.trackBy == null) {\n this.trackBy = (index: number, item: T) => getters.map(p => p(item)).join(\"∀\")\n } else {\n this.trackBy = props.trackBy\n }\n this.#getKey = (item: T) => getters.map(p => p(item)).join(\"∀\")\n } else {\n if (props.trackBy == null) {\n throw new Error(\"Can't compile track by function without `keys` declaration\")\n } else {\n this.trackBy = props.trackBy\n }\n }\n }\n\n isEqual(a: T, b: T): boolean {\n return isEqual(a, b)\n }\n\n isEqualByTrack(a: TrackedModel<T>, b: TrackedModel<T>): boolean {\n if (a == null || b == null) {\n return a == null && b == null\n }\n\n if (a.index == null || b.index == null) {\n return a.index == null && b.index == null\n }\n\n if (a.model == null || b.model == null) {\n return a.model == null && b.model == null\n }\n\n return this.trackBy(a.index, a.model) === this.trackBy(b.index, b.model)\n }\n\n isEqualByKey(a: T, b: T): boolean {\n if (this.#getKey != null) {\n if (a == null || b == null) {\n return a == null && b == null\n }\n return this.#getKey(a) === this.#getKey(b)\n }\n console.warn(\"Primary keys is not defined for\", a, b)\n return false\n }\n\n normalizeRef(ref: ModelRef | ModelRefNorm): ModelRefNorm {\n if (ref instanceof ModelRefNorm) {\n return ref\n }\n\n if (ref.key != null && ref.index != null) {\n throw new Error(\"Only provide `pk` or `index` value not both\")\n }\n\n if (ref.key != null) {\n const keyValue = (Array.isArray(ref.key) ? ref.key : [ref.key]) as readonly Primitive[]\n\n if (keyValue.length > 0) {\n if (this.keys.length === 0) {\n throw new Error(\"Can't normalize ref without `keys`\")\n }\n\n if (keyValue.length !== this.keys.length) {\n throw new Error(`Wrong number of \\`key\\` values for this keys: [${this.keys.join(\",\")}]`)\n }\n return new ModelRefByKey(keyValue, this.keys)\n } else {\n console.warn(\"Empty key in ModelRef\", ref)\n }\n }\n\n if (ref.index != null) {\n return new ModelRefByIndex(ref.index)\n }\n\n throw new Error(\"Missing `key` or `index` value\")\n }\n}\n\nexport abstract class ModelRefNorm {\n readonly key?: readonly Primitive[]\n readonly index?: number\n\n #filter?: ModelRefFilter<any>\n toFilter() {\n if (this.#filter == null) {\n return (this.#filter = this._asFilter())\n }\n return this.#filter\n }\n\n protected abstract _asFilter(): ModelRefFilter<any>\n}\n\nexport class ModelRefByKey extends ModelRefNorm {\n override readonly key: readonly Primitive[]\n\n #keys: readonly string[]\n constructor(key: readonly Primitive[], keys: readonly string[]) {\n super()\n this.key = key\n this.#keys = keys\n }\n\n protected _asFilter(): ModelRefFilter<any> {\n const filter = {} as any\n for (let i = 0; i < this.#keys.length; i++) {\n filter[this.#keys[i]] = this.key[i]\n }\n return filterBy(filter)\n }\n}\n\nexport class ModelRefByIndex extends ModelRefNorm {\n override readonly index: number\n\n constructor(index: number) {\n super()\n this.index = index\n }\n\n protected _asFilter(): ModelRefFilter<any> {\n return (item: any, index: number) => this.index === index\n }\n}\n\nexport class UnknownMeta<T extends Model> extends ModelMeta<T> {\n constructor() {\n super({ keys: [], trackBy: (index: number) => index })\n }\n}\n","import { map, Observable, take } from \"rxjs\"\n\nimport { Model, ModelMeta, ModelMetaInput, ModelRefNorm } from \"../model\"\nimport { queryExecutor, QueryExecutor, QueryResult, QueryWithSlice, Slice, sliceClamp } from \"../query\"\nimport { DataProvider } from \"./provider\"\n\nexport abstract class LocalProvider<T extends Model> extends DataProvider<T> {\n override readonly isAsync = false\n override readonly meta: ModelMeta<T>\n abstract readonly items$: Observable<readonly T[]>\n\n #executor?: QueryExecutor<T>\n\n constructor(meta: ModelMetaInput<T>) {\n super()\n this.meta = ModelMeta.coerce(meta)\n }\n\n executor(request: QueryWithSlice<T>): QueryExecutor<T> {\n return (this.#executor = queryExecutor(request, this.#executor))\n }\n\n override queryList(request: QueryWithSlice<T>): Observable<QueryResult<T>> {\n const exec = this.executor(request)\n return this.items$.pipe(map(items => exec(items)))\n }\n\n override queryItem(ref: ModelRefNorm, request?: QueryWithSlice<T>): Observable<T | undefined> {\n const items = request ? this.queryList(request).pipe(map(list => list.items)) : this.items$\n return items.pipe(map(items => items.find(ref.toFilter())))\n }\n\n override queryPosition(ref: ModelRefNorm, request: QueryWithSlice<T>): Observable<number | undefined> {\n return this.queryList(request).pipe(map(list => list.items.findIndex(ref.toFilter())))\n }\n\n override clampSlice(slice: Slice): Observable<Slice> {\n return this.items$.pipe(\n take(1),\n map(items => sliceClamp(slice, { start: 0, end: items.length }))\n )\n }\n}\n","import { type Observable, of } from \"rxjs\"\n\nimport type { Model, ModelMetaInput } from \"../model\"\nimport { LocalProvider } from \"./local\"\n\nexport class ArrayProvider<T extends Model> extends LocalProvider<T> {\n override readonly items$: Observable<readonly T[]>\n\n constructor(meta: ModelMetaInput<T>, items: readonly T[]) {\n super(meta)\n this.items$ = of(items)\n }\n}\n","import { type Observable, shareReplay } from \"rxjs\"\n\nimport type { Model, ModelMetaInput } from \"../model\"\nimport { LocalProvider } from \"./local\"\n\nexport class ObservableProvider<T extends Model> extends LocalProvider<T> {\n readonly items$: Observable<readonly T[]>\n\n constructor(meta: ModelMetaInput<T>, src: Observable<readonly T[]>) {\n super(meta)\n const source = src.pipe(shareReplay({ bufferSize: 1, refCount: true }))\n this.items$ = source\n this._changed = source\n }\n}\n","import { NgModule } from \"@angular/core\"\n\nimport {\n DataSourceProxy,\n DataSourceProxyBusy,\n DataSourceProxyFilter,\n DataSourceProxyGrouper,\n DataSourceProxySlimer,\n DataSourceProxySorter\n} from \"./source/proxy.directive\"\n\nexport * from \"./model\"\nexport * from \"./provider\"\nexport * from \"./query\"\nexport * from \"./source\"\nexport * from \"./store\"\n\n@NgModule({\n imports: [\n DataSourceProxy,\n DataSourceProxyBusy,\n DataSourceProxyFilter,\n DataSourceProxyGrouper,\n DataSourceProxySlimer,\n DataSourceProxySorter\n ],\n exports: [\n DataSourceProxy,\n DataSourceProxyBusy,\n DataSourceProxyFilter,\n DataSourceProxyGrouper,\n DataSourceProxySlimer,\n DataSourceProxySorter\n ]\n})\nexport class DataSourceModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["CdkDataSource"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ngutil/data",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.95",
|
|
4
4
|
"peerDependencies": {
|
|
5
5
|
"@angular/cdk": "19.2.11",
|
|
6
6
|
"@angular/core": "19.2.8",
|
|
7
7
|
"es-toolkit": "^1.35.0",
|
|
8
8
|
"rxjs": "^7.8.1",
|
|
9
9
|
"utility-types": "^3.11.0",
|
|
10
|
-
"@ngutil/aria": "0.0.
|
|
11
|
-
"@ngutil/common": "0.0.
|
|
10
|
+
"@ngutil/aria": "0.0.95",
|
|
11
|
+
"@ngutil/common": "0.0.95"
|
|
12
12
|
},
|
|
13
13
|
"publishConfig": {
|
|
14
14
|
"access": "public",
|
package/query/filter.d.ts
CHANGED
|
@@ -26,7 +26,8 @@ export declare enum FilterOp {
|
|
|
26
26
|
Regexp = "~",
|
|
27
27
|
RegexpInsesitive = "~*",
|
|
28
28
|
Or = "|",
|
|
29
|
-
And = "&"
|
|
29
|
+
And = "&",
|
|
30
|
+
Not = "!"
|
|
30
31
|
}
|
|
31
32
|
export declare const OPERATORS: Array<string>;
|
|
32
33
|
export declare function asOperators(value: any): Array<{
|
|
@@ -66,7 +67,7 @@ export type FilterFn<T = any> = (item: T) => boolean;
|
|
|
66
67
|
export declare function filterBy<T extends Model>(filters: Filter<T>): FilterFn<T>;
|
|
67
68
|
type NormPath = {
|
|
68
69
|
path: string;
|
|
69
|
-
op: Exclude<FilterOp, FilterOp.Or | FilterOp.And>;
|
|
70
|
+
op: Exclude<FilterOp, FilterOp.Or | FilterOp.And | FilterOp.Not>;
|
|
70
71
|
value: any;
|
|
71
72
|
};
|
|
72
73
|
type NormOr = {
|
|
@@ -77,7 +78,11 @@ type NormAnd = {
|
|
|
77
78
|
op: FilterOp.And;
|
|
78
79
|
value: Array<NormEntry>;
|
|
79
80
|
};
|
|
80
|
-
type
|
|
81
|
+
type NormNot = {
|
|
82
|
+
op: FilterOp.Not;
|
|
83
|
+
value: Array<NormEntry>;
|
|
84
|
+
};
|
|
85
|
+
type NormEntry = NormPath | NormOr | NormAnd | NormNot;
|
|
81
86
|
export type FilterNormalized = NormEntry;
|
|
82
87
|
/**
|
|
83
88
|
* @example
|