@ngutil/data 0.0.98 → 0.0.100
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
CHANGED
|
@@ -5,7 +5,7 @@ import { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';
|
|
|
5
5
|
import { BehaviorSubject, Observable, combineLatest, map, shareReplay, take, of, ReplaySubject, switchMap, distinctUntilChanged, merge, Subject, timer, catchError, tap, EMPTY, filter, takeUntil, NEVER, finalize, throwError } from 'rxjs';
|
|
6
6
|
import { BusyDirective } from '@ngutil/aria';
|
|
7
7
|
import { flatten, isEqual, intersection, flattenDeep } from 'es-toolkit';
|
|
8
|
-
import {
|
|
8
|
+
import { deepFreeze, isPlainObject, isTruthy, isFalsy, deepClone, toSorted } from '@ngutil/common';
|
|
9
9
|
|
|
10
10
|
const CACHE = {};
|
|
11
11
|
function pathGetterCompile(path) {
|
|
@@ -67,7 +67,7 @@ class QueryProperty extends BehaviorSubject {
|
|
|
67
67
|
this.provider = provider;
|
|
68
68
|
}
|
|
69
69
|
set(value) {
|
|
70
|
-
this.#
|
|
70
|
+
this.#next(value != null ? this.norm(value) : undefined);
|
|
71
71
|
}
|
|
72
72
|
update(value) {
|
|
73
73
|
const norm = value != null ? this.norm(value) : undefined;
|
|
@@ -88,16 +88,6 @@ class QueryProperty extends BehaviorSubject {
|
|
|
88
88
|
}
|
|
89
89
|
}
|
|
90
90
|
}
|
|
91
|
-
#nextClone(value) {
|
|
92
|
-
if (!isEqual(this.value, value)) {
|
|
93
|
-
if (value == null) {
|
|
94
|
-
this.next(undefined);
|
|
95
|
-
}
|
|
96
|
-
else {
|
|
97
|
-
this.next(deepClone(value));
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
91
|
}
|
|
102
92
|
class QueryPropertySet extends Observable {
|
|
103
93
|
#combined;
|
|
@@ -509,14 +499,14 @@ function compact(filters) {
|
|
|
509
499
|
// deduplicate by path && op
|
|
510
500
|
value = value
|
|
511
501
|
.reverse()
|
|
512
|
-
.filter((v, i, a) => a.findIndex(v2 =>
|
|
502
|
+
.filter((v, i, a) => a.findIndex(v2 => v.path === v2.path && isEqual(v.op, v2.op)) === i)
|
|
513
503
|
// remove undefined values, keep null
|
|
514
504
|
.filter(v => "value" in v && v.value !== undefined)
|
|
515
505
|
.reverse();
|
|
516
506
|
if (value.length === 0) {
|
|
517
507
|
return undefined;
|
|
518
508
|
}
|
|
519
|
-
if (value.length === 1) {
|
|
509
|
+
if (value.length === 1 && (filters.op === FilterOp.And || filters.op === FilterOp.Or)) {
|
|
520
510
|
return value[0];
|
|
521
511
|
}
|
|
522
512
|
return { op: filters.op, value };
|
|
@@ -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\nconst CACHE: Record<string, PathGetter> = {}\n\nexport function pathGetterCompile(path: string): PathGetter {\n return CACHE[path] || (CACHE[path] = _pathGetterCompile(path))\n}\n\nfunction _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, isEqual } from \"es-toolkit\"\n\nimport { AsPrimitive, type DeepReadonly, 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 type FilterCustom<T = any> = { custom: string; matcher?: FilterCustomMatcher<T> }\n\nexport type FilterCustomMatcher<T = any> = (item: T | null | undefined, value: any) => boolean\n\nexport type FilterOpMap = Record<string, FilterOp | FilterCustom>\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>, opmap?: FilterOpMap): FilterFn<T> {\n return _filterCompile<T>(filters, opmap)\n}\n\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 NormCustom = { path: string; op: FilterCustom; value: any }\ntype NormEmpty = Record<string, never>\ntype NormEntry = NormPath | NormOr | NormAnd | NormNot | NormCustom | NormEmpty\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>(\n filters: Filter<T> | null | undefined,\n opmap?: FilterOpMap\n): FilterNormalized | undefined {\n return _normalizeFilter(filters, undefined, opmap)\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>(\n filters: Filter<T> | null | undefined,\n parent?: string,\n opmap?: FilterOpMap\n): 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, opmap)) }\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 const op = _remapOp(path, opmap)\n switch (op) {\n case FilterOp.And:\n case FilterOp.Or:\n case FilterOp.Not:\n if (!Array.isArray(value)) {\n throw new Error(`Operator (${op}) must have array type`)\n }\n return {\n op: op,\n value: value\n .map(v => {\n if (isPlainObject(v)) {\n return _normalizeFilter(v, parent, opmap)\n } else {\n return parent ? { path: parent, op: FilterOp.EqStrict, value: v } : undefined\n }\n })\n .filter(v => v != null)\n }\n\n default:\n if (isPlainObject(value)) {\n return _normalizeFilter(value, parent ? `${parent}.${path}` : path, opmap)\n }\n if (parent != null) {\n if (op == null) {\n return { path: `${parent}.${path}`, op: FilterOp.EqStrict, value }\n } else {\n return { path: parent, op: op, value }\n }\n } else {\n return { path, op: FilterOp.EqStrict, value }\n }\n }\n })\n )\n\n if (norm.length === 0) {\n return {}\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\nfunction _remapOp(op: string, opmap?: FilterOpMap) {\n const mapped = opmap == null ? op : opmap[op] ?? op\n if (typeof mapped === \"string\" && OPERATORS.includes(mapped)) {\n return mapped\n } else if (isPlainObject(mapped) && \"custom\" in mapped) {\n return mapped\n }\n return null\n}\n\ntype GetPathFn = (pth: string) => ReturnType<typeof pathGetterCompile>\n\nfunction _filterCompile<T extends Model>(filters: Filter<T>, opmap?: FilterOpMap): FilterFn<T> {\n const normalized = filterNormalize(filters, opmap)\n if (normalized == null) {\n return alwaysTrue\n }\n return _filterCompileNorm(normalized, pathGetterCompile)\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(\n getter: PathGetter,\n op: FilterOp | FilterCustom,\n value: any,\n getPath: GetPathFn\n): FilterFn<any> {\n let lower: string\n let regex: RegExp\n\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 default:\n if (isPlainObject(op) && op.matcher) {\n return matcher(getter, v => op.matcher!(v, value))\n }\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: Array<FilterNormalized | null | undefined>): any | undefined {\n filters.reverse()\n const lastReset = filters.findIndex(v => v == null)\n filters.reverse()\n\n if (lastReset !== -1) {\n const index = filters.length - lastReset\n filters = filters.slice(index)\n }\n\n const value = filters\n .filter(v => v != null)\n .filter(v => (Array.isArray(v) && v.length > 0) || (isPlainObject(v) && Object.keys(v).length > 0))\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: DeepReadonly<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 && isEqual(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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"}
|
|
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\nconst CACHE: Record<string, PathGetter> = {}\n\nexport function pathGetterCompile(path: string): PathGetter {\n return CACHE[path] || (CACHE[path] = _pathGetterCompile(path))\n}\n\nfunction _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 { 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.#next(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\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, isEqual } from \"es-toolkit\"\n\nimport { AsPrimitive, type DeepReadonly, 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 type FilterCustom<T = any> = { custom: string; matcher?: FilterCustomMatcher<T> }\n\nexport type FilterCustomMatcher<T = any> = (item: T | null | undefined, value: any) => boolean\n\nexport type FilterOpMap = Record<string, FilterOp | FilterCustom>\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>, opmap?: FilterOpMap): FilterFn<T> {\n return _filterCompile<T>(filters, opmap)\n}\n\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 NormCustom = { path: string; op: FilterCustom; value: any }\ntype NormEmpty = Record<string, never>\ntype NormEntry = NormPath | NormOr | NormAnd | NormNot | NormCustom | NormEmpty\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>(\n filters: Filter<T> | null | undefined,\n opmap?: FilterOpMap\n): FilterNormalized | undefined {\n return _normalizeFilter(filters, undefined, opmap)\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>(\n filters: Filter<T> | null | undefined,\n parent?: string,\n opmap?: FilterOpMap\n): 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, opmap)) }\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 const op = _remapOp(path, opmap)\n switch (op) {\n case FilterOp.And:\n case FilterOp.Or:\n case FilterOp.Not:\n if (!Array.isArray(value)) {\n throw new Error(`Operator (${op}) must have array type`)\n }\n return {\n op: op,\n value: value\n .map(v => {\n if (isPlainObject(v)) {\n return _normalizeFilter(v, parent, opmap)\n } else {\n return parent ? { path: parent, op: FilterOp.EqStrict, value: v } : undefined\n }\n })\n .filter(v => v != null)\n }\n\n default:\n if (isPlainObject(value)) {\n return _normalizeFilter(value, parent ? `${parent}.${path}` : path, opmap)\n }\n if (parent != null) {\n if (op == null) {\n return { path: `${parent}.${path}`, op: FilterOp.EqStrict, value }\n } else {\n return { path: parent, op: op, value }\n }\n } else {\n return { path, op: FilterOp.EqStrict, value }\n }\n }\n })\n )\n\n if (norm.length === 0) {\n return {}\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\nfunction _remapOp(op: string, opmap?: FilterOpMap) {\n const mapped = opmap == null ? op : opmap[op] ?? op\n if (typeof mapped === \"string\" && OPERATORS.includes(mapped)) {\n return mapped\n } else if (isPlainObject(mapped) && \"custom\" in mapped) {\n return mapped\n }\n return null\n}\n\ntype GetPathFn = (pth: string) => ReturnType<typeof pathGetterCompile>\n\nfunction _filterCompile<T extends Model>(filters: Filter<T>, opmap?: FilterOpMap): FilterFn<T> {\n const normalized = filterNormalize(filters, opmap)\n if (normalized == null) {\n return alwaysTrue\n }\n return _filterCompileNorm(normalized, pathGetterCompile)\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(\n getter: PathGetter,\n op: FilterOp | FilterCustom,\n value: any,\n getPath: GetPathFn\n): FilterFn<any> {\n let lower: string\n let regex: RegExp\n\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 default:\n if (isPlainObject(op) && op.matcher) {\n return matcher(getter, v => op.matcher!(v, value))\n }\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: Array<FilterNormalized | null | undefined>): any | undefined {\n filters.reverse()\n const lastReset = filters.findIndex(v => v == null)\n filters.reverse()\n\n if (lastReset !== -1) {\n const index = filters.length - lastReset\n filters = filters.slice(index)\n }\n\n const value = filters\n .filter(v => v != null)\n .filter(v => (Array.isArray(v) && v.length > 0) || (isPlainObject(v) && Object.keys(v).length > 0))\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: DeepReadonly<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((v, i, a) => a.findIndex(v2 => (v as any).path === (v2 as any).path && isEqual(v.op, v2.op)) === i)\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 && (filters.op === FilterOp.And || filters.op === FilterOp.Or)) {\n return value[0]\n }\n\n return { op: filters.op, value }\n }\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.100",
|
|
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/
|
|
11
|
-
"@ngutil/
|
|
10
|
+
"@ngutil/common": "0.0.100",
|
|
11
|
+
"@ngutil/aria": "0.0.100"
|
|
12
12
|
},
|
|
13
13
|
"publishConfig": {
|
|
14
14
|
"access": "public",
|