@ngutil/data 0.0.11 → 0.0.12
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/esm2022/provider/array.mjs +1 -1
- package/esm2022/provider/local.mjs +6 -3
- package/esm2022/provider/provider.mjs +8 -1
- package/esm2022/query/index.mjs +1 -1
- package/esm2022/query/sorter.mjs +1 -1
- package/esm2022/source/proxy.directive.mjs +3 -3
- package/esm2022/source/source.mjs +20 -19
- package/fesm2022/ngutil-data.mjs +32 -22
- package/fesm2022/ngutil-data.mjs.map +1 -1
- package/package.json +2 -2
- package/provider/local.d.ts +2 -1
- package/provider/provider.d.ts +5 -1
- package/query/index.d.ts +1 -1
- package/query/sorter.d.ts +4 -4
- package/source/source.d.ts +1 -0
|
@@ -6,4 +6,4 @@ export class ArrayProvider extends LocalProvider {
|
|
|
6
6
|
this.items$ = of(items);
|
|
7
7
|
}
|
|
8
8
|
}
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYXRhL3NyYy9wcm92aWRlci9hcnJheS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW1CLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUcxQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sU0FBUyxDQUFBO0FBR3ZDLE1BQU0sT0FBTyxhQUErQixTQUFRLGFBQWdCO0lBR2hFLFlBQVksSUFBdUIsRUFBRSxLQUFtQjtRQUNwRCxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDWCxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUMzQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIE9ic2VydmFibGUsIG9mIH0gZnJvbSBcInJ4anNcIlxuXG5pbXBvcnQgdHlwZSB7IE1vZGVsLCBNb2RlbE1ldGFJbnB1dCB9IGZyb20gXCIuLi9tb2RlbFwiXG5pbXBvcnQgeyBMb2NhbFByb3ZpZGVyIH0gZnJvbSBcIi4vbG9jYWxcIlxuXG5cbmV4cG9ydCBjbGFzcyBBcnJheVByb3ZpZGVyPFQgZXh0ZW5kcyBNb2RlbD4gZXh0ZW5kcyBMb2NhbFByb3ZpZGVyPFQ+IHtcbiAgICBvdmVycmlkZSByZWFkb25seSBpdGVtcyQ6IE9ic2VydmFibGU8cmVhZG9ubHkgVFtdPlxuXG4gICAgY29uc3RydWN0b3IobWV0YTogTW9kZWxNZXRhSW5wdXQ8VD4sIGl0ZW1zOiByZWFkb25seSBUW10pIHtcbiAgICAgICAgc3VwZXIobWV0YSlcbiAgICAgICAgdGhpcy5pdGVtcyQgPSBvZihpdGVtcylcbiAgICB9XG59XG4iXX0=
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { map } from "rxjs";
|
|
1
|
+
import { map, take } from "rxjs";
|
|
2
2
|
import { ModelMeta } from "../model";
|
|
3
|
-
import { queryExecutor } from "../query";
|
|
3
|
+
import { queryExecutor, sliceClamp } from "../query";
|
|
4
4
|
import { DataProvider } from "./provider";
|
|
5
5
|
export class LocalProvider extends DataProvider {
|
|
6
6
|
#executor;
|
|
@@ -22,5 +22,8 @@ export class LocalProvider extends DataProvider {
|
|
|
22
22
|
queryPosition(ref, request) {
|
|
23
23
|
return this.queryList(request).pipe(map(list => list.items.findIndex(ref.toFilter())));
|
|
24
24
|
}
|
|
25
|
+
clampSlice(slice) {
|
|
26
|
+
return this.items$.pipe(take(1), map(items => sliceClamp(slice, { start: 0, end: items.length })));
|
|
27
|
+
}
|
|
25
28
|
}
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYXRhL3NyYy9wcm92aWRlci9sb2NhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsR0FBRyxFQUFjLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUU1QyxPQUFPLEVBQVMsU0FBUyxFQUFnQyxNQUFNLFVBQVUsQ0FBQTtBQUN6RSxPQUFPLEVBQVMsYUFBYSxFQUFxQyxVQUFVLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFDOUYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUV6QyxNQUFNLE9BQWdCLGFBQStCLFNBQVEsWUFBZTtJQUt4RSxTQUFTLENBQW1CO0lBRTVCLFlBQVksSUFBdUI7UUFDL0IsS0FBSyxFQUFFLENBQUE7UUFQTyxZQUFPLEdBQUcsS0FBSyxDQUFBO1FBUTdCLElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUN0QyxDQUFDO0lBRUQsUUFBUSxDQUFDLE9BQWlCO1FBQ3RCLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLGFBQWEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUE7SUFDcEUsQ0FBQztJQUVRLFNBQVMsQ0FBQyxPQUFpQjtRQUNoQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQ25DLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUN0RCxDQUFDO0lBRVEsU0FBUyxDQUFDLEdBQWlCLEVBQUUsT0FBaUI7UUFDbkQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDckYsQ0FBQztJQUVRLGFBQWEsQ0FBQyxHQUFpQixFQUFFLE9BQWlCO1FBQ3ZELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzFGLENBQUM7SUFFUSxVQUFVLENBQUMsS0FBWTtRQUM1QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLEVBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3BHLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG1hcCwgT2JzZXJ2YWJsZSwgdGFrZSB9IGZyb20gXCJyeGpzXCJcblxuaW1wb3J0IHsgTW9kZWwsIE1vZGVsTWV0YSwgTW9kZWxNZXRhSW5wdXQsIE1vZGVsUmVmTm9ybSB9IGZyb20gXCIuLi9tb2RlbFwiXG5pbXBvcnQgeyBRdWVyeSwgcXVlcnlFeGVjdXRvciwgUXVlcnlFeGVjdXRvciwgUXVlcnlSZXN1bHQsIFNsaWNlLCBzbGljZUNsYW1wIH0gZnJvbSBcIi4uL3F1ZXJ5XCJcbmltcG9ydCB7IERhdGFQcm92aWRlciB9IGZyb20gXCIuL3Byb3ZpZGVyXCJcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIExvY2FsUHJvdmlkZXI8VCBleHRlbmRzIE1vZGVsPiBleHRlbmRzIERhdGFQcm92aWRlcjxUPiB7XG4gICAgb3ZlcnJpZGUgcmVhZG9ubHkgaXNBc3luYyA9IGZhbHNlXG4gICAgb3ZlcnJpZGUgcmVhZG9ubHkgbWV0YTogTW9kZWxNZXRhPFQ+XG4gICAgYWJzdHJhY3QgcmVhZG9ubHkgaXRlbXMkOiBPYnNlcnZhYmxlPHJlYWRvbmx5IFRbXT5cblxuICAgICNleGVjdXRvcj86IFF1ZXJ5RXhlY3V0b3I8VD5cblxuICAgIGNvbnN0cnVjdG9yKG1ldGE6IE1vZGVsTWV0YUlucHV0PFQ+KSB7XG4gICAgICAgIHN1cGVyKClcbiAgICAgICAgdGhpcy5tZXRhID0gTW9kZWxNZXRhLmNvZXJjZShtZXRhKVxuICAgIH1cblxuICAgIGV4ZWN1dG9yKHJlcXVlc3Q6IFF1ZXJ5PFQ+KTogUXVlcnlFeGVjdXRvcjxUPiB7XG4gICAgICAgIHJldHVybiAodGhpcy4jZXhlY3V0b3IgPSBxdWVyeUV4ZWN1dG9yKHJlcXVlc3QsIHRoaXMuI2V4ZWN1dG9yKSlcbiAgICB9XG5cbiAgICBvdmVycmlkZSBxdWVyeUxpc3QocmVxdWVzdDogUXVlcnk8VD4pOiBPYnNlcnZhYmxlPFF1ZXJ5UmVzdWx0PFQ+PiB7XG4gICAgICAgIGNvbnN0IGV4ZWMgPSB0aGlzLmV4ZWN1dG9yKHJlcXVlc3QpXG4gICAgICAgIHJldHVybiB0aGlzLml0ZW1zJC5waXBlKG1hcChpdGVtcyA9PiBleGVjKGl0ZW1zKSkpXG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgcXVlcnlJdGVtKHJlZjogTW9kZWxSZWZOb3JtLCByZXF1ZXN0OiBRdWVyeTxUPik6IE9ic2VydmFibGU8VCB8IHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5xdWVyeUxpc3QocmVxdWVzdCkucGlwZShtYXAobGlzdCA9PiBsaXN0Lml0ZW1zLmZpbmQocmVmLnRvRmlsdGVyKCkpKSlcbiAgICB9XG5cbiAgICBvdmVycmlkZSBxdWVyeVBvc2l0aW9uKHJlZjogTW9kZWxSZWZOb3JtLCByZXF1ZXN0OiBRdWVyeTxUPik6IE9ic2VydmFibGU8bnVtYmVyIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXJ5TGlzdChyZXF1ZXN0KS5waXBlKG1hcChsaXN0ID0+IGxpc3QuaXRlbXMuZmluZEluZGV4KHJlZi50b0ZpbHRlcigpKSkpXG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgY2xhbXBTbGljZShzbGljZTogU2xpY2UpOiBPYnNlcnZhYmxlPFNsaWNlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLml0ZW1zJC5waXBlKHRha2UoMSksIG1hcChpdGVtcyA9PiBzbGljZUNsYW1wKHNsaWNlLCB7c3RhcnQ6IDAsIGVuZDogaXRlbXMubGVuZ3RofSkpKVxuICAgIH1cbn1cbiJdfQ==
|
|
@@ -1,5 +1,12 @@
|
|
|
1
|
+
import { of } from "rxjs";
|
|
1
2
|
import { DataSource } from "../source";
|
|
2
3
|
export class DataProvider {
|
|
4
|
+
/**
|
|
5
|
+
* Froce Slice boundaries, useful in array, or obeservable providers
|
|
6
|
+
*/
|
|
7
|
+
clampSlice(slice) {
|
|
8
|
+
return of(slice);
|
|
9
|
+
}
|
|
3
10
|
/**
|
|
4
11
|
* @returns New data source instance
|
|
5
12
|
*/
|
|
@@ -7,4 +14,4 @@ export class DataProvider {
|
|
|
7
14
|
return new DataSource(this, store);
|
|
8
15
|
}
|
|
9
16
|
}
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYXRhL3NyYy9wcm92aWRlci9wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBSXpCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFHdEMsTUFBTSxPQUFnQixZQUFZO0lBMEI5Qjs7T0FFRztJQUNILFVBQVUsQ0FBQyxLQUFZO1FBQ25CLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3BCLENBQUM7SUFFRDs7T0FFRztJQUNILFlBQVksQ0FBQyxLQUEwQjtRQUNuQyxPQUFPLElBQUksVUFBVSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQTtJQUN0QyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiXG5pbXBvcnQgeyBvZiB9IGZyb20gXCJyeGpzXCJcblxuaW1wb3J0IHR5cGUgeyBNb2RlbCwgTW9kZWxNZXRhLCBNb2RlbFJlZk5vcm0gfSBmcm9tIFwiLi4vbW9kZWxcIlxuaW1wb3J0IHR5cGUgeyBRdWVyeSwgUXVlcnlSZXN1bHQsIFNsaWNlIH0gZnJvbSBcIi4uL3F1ZXJ5XCJcbmltcG9ydCB7IERhdGFTb3VyY2UgfSBmcm9tIFwiLi4vc291cmNlXCJcbmltcG9ydCB0eXBlIHsgQ29sbGVjdGlvblN0b3JlIH0gZnJvbSBcIi4uL3N0b3JlXCJcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIERhdGFQcm92aWRlcjxUIGV4dGVuZHMgTW9kZWw+IHtcbiAgICAvKipcbiAgICAgKiBgdHJ1ZWAgd2hlbiB0aGUgcHJvdmlkZXIgaXMgbWFraW5nIGFzeW5jIHJlcXVlc3RzXG4gICAgICovXG4gICAgYWJzdHJhY3QgcmVhZG9ubHkgaXNBc3luYzogYm9vbGVhblxuXG4gICAgLyoqXG4gICAgICogTWV0YWRhdGEgb2YgbW9kZWxcbiAgICAgKi9cbiAgICBhYnN0cmFjdCByZWFkb25seSBtZXRhOiBNb2RlbE1ldGE8VD5cblxuICAgIC8qKlxuICAgICAqIFF1ZXJ5IGl0ZW1zIGJ5IHRoZSBnaXZlbiByZXF1ZXN0XG4gICAgICovXG4gICAgYWJzdHJhY3QgcXVlcnlMaXN0KHJlcXVlc3Q6IFF1ZXJ5PFQ+KTogT2JzZXJ2YWJsZTxRdWVyeVJlc3VsdDxUPj5cblxuICAgIC8qKlxuICAgICAqIFF1ZXJ5IGV4YWN0bHkgb25lIGl0ZW0gYnkgdGhlIGdpdmVuIHJlcXVlc3RcbiAgICAgKi9cbiAgICBhYnN0cmFjdCBxdWVyeUl0ZW0ocmVmOiBNb2RlbFJlZk5vcm0sIHJlcXVlc3Q6IFF1ZXJ5PFQ+KTogT2JzZXJ2YWJsZTxUIHwgdW5kZWZpbmVkPlxuXG4gICAgLyoqXG4gICAgICogUXVlcnkgaXRlbSBwb3NpdGlvbiBpbiB0aGUgbGlzdCB0aGF0IG1hdGNoaW5nIGJ5IHRoZSBnaXZlbiByZXF1ZXN0XG4gICAgICovXG4gICAgYWJzdHJhY3QgcXVlcnlQb3NpdGlvbihyZWY6IE1vZGVsUmVmTm9ybSwgcmVxdWVzdDogUXVlcnk8VD4pOiBPYnNlcnZhYmxlPG51bWJlciB8IHVuZGVmaW5lZD5cblxuICAgIC8qKlxuICAgICAqIEZyb2NlIFNsaWNlIGJvdW5kYXJpZXMsIHVzZWZ1bCBpbiBhcnJheSwgb3Igb2Jlc2VydmFibGUgcHJvdmlkZXJzXG4gICAgICovXG4gICAgY2xhbXBTbGljZShzbGljZTogU2xpY2UpOiBPYnNlcnZhYmxlPFNsaWNlPiB7XG4gICAgICAgIHJldHVybiBvZihzbGljZSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyBOZXcgZGF0YSBzb3VyY2UgaW5zdGFuY2VcbiAgICAgKi9cbiAgICB0b0RhdGFTb3VyY2Uoc3RvcmU/OiBDb2xsZWN0aW9uU3RvcmU8VD4pOiBEYXRhU291cmNlPFQ+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRhU291cmNlKHRoaXMsIHN0b3JlKVxuICAgIH1cbn1cbiJdfQ==
|
package/esm2022/query/index.mjs
CHANGED
|
@@ -5,4 +5,4 @@ export { slimBy, slimerMerge } from "./slimer";
|
|
|
5
5
|
export { sliceMerge, sliceApply, sliceInsert, sliceToPages, sliceClamp, sliceEq } from "./slice";
|
|
6
6
|
export { pathGetterCompile } from "./path";
|
|
7
7
|
export { queryExecutor } from "./executor";
|
|
8
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYXRhL3NyYy9xdWVyeS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVUsUUFBUSxFQUFFLFdBQVcsRUFBWSxNQUFNLFVBQVUsQ0FBQTtBQUNsRSxPQUFPLEVBQVcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUMxRCxPQUFPLEVBQVUsTUFBTSxFQUFFLFdBQVcsRUFBd0MsTUFBTSxVQUFVLENBQUE7QUFDNUYsT0FBTyxFQUFVLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFDdEQsT0FBTyxFQUFTLFVBQVUsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sU0FBUyxDQUFBO0FBQ3ZHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUUxQyxPQUFPLEVBQUUsYUFBYSxFQUFpQixNQUFNLFlBQVksQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IEZpbHRlciwgZmlsdGVyQnksIGZpbHRlck1lcmdlLCBGaWx0ZXJPcCB9IGZyb20gXCIuL2ZpbHRlclwiXG5leHBvcnQgeyBHcm91cGVyLCBncm91cEJ5LCBncm91cGVyTWVyZ2UgfSBmcm9tIFwiLi9ncm91cGVyXCJcbmV4cG9ydCB7IFNvcnRlciwgc29ydEJ5LCBzb3J0ZXJNZXJnZSwgU29ydERpciwgU29ydERpcmVjdGlvbiwgU29ydERpckV4dHJhIH0gZnJvbSBcIi4vc29ydGVyXCJcbmV4cG9ydCB7IFNsaW1lciwgc2xpbUJ5LCBzbGltZXJNZXJnZSB9IGZyb20gXCIuL3NsaW1lclwiXG5leHBvcnQgeyBTbGljZSwgc2xpY2VNZXJnZSwgc2xpY2VBcHBseSwgc2xpY2VJbnNlcnQsIHNsaWNlVG9QYWdlcywgc2xpY2VDbGFtcCwgc2xpY2VFcSB9IGZyb20gXCIuL3NsaWNlXCJcbmV4cG9ydCB7IHBhdGhHZXR0ZXJDb21waWxlIH0gZnJvbSBcIi4vcGF0aFwiXG5leHBvcnQgeyBRdWVyeSwgUXVlcnlSZXN1bHQgfSBmcm9tIFwiLi9xdWVyeVwiXG5leHBvcnQgeyBxdWVyeUV4ZWN1dG9yLCBRdWVyeUV4ZWN1dG9yIH0gZnJvbSBcIi4vZXhlY3V0b3JcIlxuIl19
|
package/esm2022/query/sorter.mjs
CHANGED
|
@@ -163,4 +163,4 @@ export function sorterMerge(...sorters) {
|
|
|
163
163
|
}
|
|
164
164
|
return result;
|
|
165
165
|
}
|
|
166
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGF0YS9zcmMvcXVlcnkvc29ydGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBRTdDLE9BQU8sRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFHekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sUUFBUSxDQUFBO0FBb0IxQzs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxNQUFNLENBQWtCLE9BQWtCO0lBQ3RELElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFBO0lBQ25DLENBQUM7SUFDRCxPQUFPLGNBQWMsQ0FBSSxPQUFPLENBQVEsQ0FBQTtBQUM1QyxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFrQixPQUFrQjtJQUMvRCxPQUFPLFdBQVcsQ0FDYixPQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FDNUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQzdCLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDeEIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxLQUFLLEtBQUssQ0FBQTtZQUN2QyxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUMvRCxDQUFDO2FBQU0sSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMxQixPQUFPO2dCQUNILElBQUksRUFBRSxDQUFDO2dCQUNQLEtBQUssRUFBRSxDQUFFLENBQW9CLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLFdBQVcsRUFBRSxLQUFLLEtBQUs7Z0JBQ25FLFVBQVUsRUFBRyxDQUFvQixDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFFLENBQW9CLENBQUMsVUFBVTthQUNuRyxDQUFBO1FBQ0wsQ0FBQzthQUFNLENBQUM7WUFDSixNQUFNLElBQUksS0FBSyxDQUFDLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQzNDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FDTCxDQUNKLENBQUE7QUFDTCxDQUFDO0FBRUQsU0FBUyxjQUFjLENBQWtCLE9BQWtCO0lBQ3ZELElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN2QixPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQ3hCLENBQUM7SUFFRCxNQUFNLElBQUksR0FBRyxlQUFlLENBQUksT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUE7SUFDOUQsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2xCLENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFHLENBQUE7SUFDM0IsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUNuQixDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3JCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFDcEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDbkMsQ0FBQyxFQUNELE9BQU8sQ0FDVixDQUFBO0FBQ0wsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBbUI7SUFDbEUsTUFBTSxNQUFNLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDdEMsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUNSLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQTtJQUM5RCxDQUFDO1NBQU0sQ0FBQztRQUNKLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO0lBQ3BFLENBQUM7QUFDTCxDQUFDO0FBRUQsTUFBTSxVQUFVLE9BQU8sQ0FBQyxDQUFNLEVBQUUsQ0FBTSxFQUFFLFVBQW1CO0lBQ3ZELCtCQUErQjtJQUMvQixJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3pCLE9BQU8sVUFBVSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUN2QyxDQUFDO1NBQU0sSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNoQyxPQUFPLFVBQVUsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDdkMsQ0FBQztTQUFNLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7UUFDaEMsT0FBTyxDQUFDLENBQUE7SUFDWixDQUFDO1NBQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDdkIsT0FBTyxDQUFDLENBQUE7SUFDWixDQUFDO1NBQU0sSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDeEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ2hCLENBQUM7U0FBTSxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUN4RCxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFBO1FBQ25CLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUE7UUFDbkIsZ0ZBQWdGO1FBQ2hGLElBQUksVUFBVSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3RCLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNYLE9BQU8sQ0FBQyxDQUFDLENBQUE7WUFDYixDQUFDO2lCQUFNLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNsQixPQUFPLENBQUMsQ0FBQTtZQUNaLENBQUM7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNYLE9BQU8sQ0FBQyxDQUFBO1lBQ1osQ0FBQztpQkFBTSxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDbEIsT0FBTyxDQUFDLENBQUMsQ0FBQTtZQUNiLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzdCLENBQUM7U0FBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzlDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUE7UUFDbkIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQTtRQUNuQixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUUxQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDekIsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUE7WUFDM0MsSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ1osT0FBTyxHQUFHLENBQUE7WUFDZCxDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQ1osT0FBTyxDQUFDLENBQUE7UUFDWixDQUFDO1FBRUQsSUFBSSxVQUFVLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDdEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ1gsT0FBTyxDQUFDLENBQUMsQ0FBQTtZQUNiLENBQUM7aUJBQU0sSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ2xCLE9BQU8sQ0FBQyxDQUFBO1lBQ1osQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ1gsT0FBTyxDQUFDLENBQUE7WUFDWixDQUFDO2lCQUFNLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNsQixPQUFPLENBQUMsQ0FBQyxDQUFBO1lBQ2IsQ0FBQztRQUNMLENBQUM7UUFFRCxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUE7SUFDbEIsQ0FBQztTQUFNLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzlDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzdELENBQUM7SUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDekIsQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQWtCLEdBQUcsT0FBNEM7SUFDeEYsSUFBSSxNQUE2QixDQUFBO0lBRWpDLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFLENBQUM7UUFDM0IsSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFLENBQUM7WUFDakIsU0FBUTtRQUNaLENBQUM7UUFDRCxJQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNqQixNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQzFCLFNBQVE7UUFDWixDQUFDO1FBRUQsS0FBSyxNQUFNLE1BQU0sSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUMxQixLQUFLLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUMxQyxNQUFNLFFBQVEsR0FBSSxNQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUE7Z0JBQ3ZFLElBQUksUUFBUSxFQUFFLENBQUM7b0JBQ1gsQ0FBQztvQkFBQyxRQUFnQixDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtnQkFDeEMsQ0FBQztxQkFBTSxDQUFDO29CQUNKLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBUyxDQUFDLENBQUE7Z0JBQzdDLENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQTtBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZmxhdHRlbkRlZXAsIGlzRXF1YWwgfSBmcm9tIFwibG9kYXNoXCJcblxuaW1wb3J0IHsgZGVlcENsb25lLCBpc1BsYWluT2JqZWN0IH0gZnJvbSBcIkBuZ3V0aWwvY29tbW9uXCJcblxuaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWxcIlxuaW1wb3J0IHsgcGF0aEdldHRlckNvbXBpbGUgfSBmcm9tIFwiLi9wYXRoXCJcblxuZXhwb3J0IHR5cGUgU29ydGVyRm48VCA9IGFueT4gPSAoYTogVCwgYjogVCkgPT4gbnVtYmVyXG5cbmV4cG9ydCBjb25zdCBlbnVtIFNvcnREaXJlY3Rpb24ge1xuICAgIEFzYyA9IFwiYXNjXCIsXG4gICAgRGVzYyA9IFwiZGVzY1wiXG59XG5cbnR5cGUgRGlyZWN0aW9uID0gU29ydERpcmVjdGlvbi5Bc2MgfCBTb3J0RGlyZWN0aW9uLkRlc2MgfCBcImFzY1wiIHwgXCJkZXNjXCJcbnR5cGUgRGlyZWN0aW9uRXh0cmEgPSB7IGRpcjogRGlyZWN0aW9uOyBlbXB0eUZpcnN0OiBib29sZWFuIH1cblxudHlwZSBfU29ydGVyPEY+ID0geyBbSyBpbiBrZXlvZiBGXTogeyBba2V5IGluIEtdOiBEaXJlY3Rpb24gfCBEaXJlY3Rpb25FeHRyYSB9IH1ba2V5b2YgRl1cbi8vIFRPRE86IGZpeCByZWN1cnNpb25cbi8vIGV4cG9ydCB0eXBlIFNvcnRlcjxUIGV4dGVuZHMgTW9kZWw+ID0gQXJyYXk8X1NvcnRlcjxGbGF0dGVuPFQ+Pj5cbmV4cG9ydCB0eXBlIFNvcnRlcjxUIGV4dGVuZHMgTW9kZWw+ID0gQXJyYXk8eyBba2V5OiBzdHJpbmddOiBEaXJlY3Rpb24gfCBEaXJlY3Rpb25FeHRyYSB9PlxuXG50eXBlIE5vcm1hbGl6ZWRFbnRyeSA9IHsgcGF0aDogc3RyaW5nOyBpc0FzYzogYm9vbGVhbjsgZW1wdHlGaXJzdDogYm9vbGVhbiB9XG5leHBvcnQgdHlwZSBTb3J0ZXJOb3JtYWxpemVkID0gQXJyYXk8Tm9ybWFsaXplZEVudHJ5PlxuXG4vKipcbiAqIEBleGFtcGxlXG4gKmBgYHRzXG4gKiBpdGVtcy50b1NvcnRlZChzb3J0QnkoW3tcImF1dGhvci5uYW1lXCI6IFwiYXNjXCJ9XSkpXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNvcnRCeTxUIGV4dGVuZHMgTW9kZWw+KHNvcnRlcnM6IFNvcnRlcjxUPik6IFNvcnRlckZuPFQ+IHtcbiAgICBpZiAoc29ydGVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRW1wdHkgc29ydGVyXCIpXG4gICAgfVxuICAgIHJldHVybiBfc29ydGVyQ29tcGlsZTxUPihzb3J0ZXJzKSBhcyBhbnlcbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgc29ydGVyIGRlZmluaXRpb25cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIG5vcm1hbGl6ZVNvcnRlcihbe2lkOiBcImFzY1wifV0pIC0+IFt7cGF0aDogXCJpZFwiLCBpc0FzYzogdHJ1ZSwgZW1wdHlGaXJzdDogdHJ1ZX1dXG4gKiBub3JtYWxpemVTb3J0ZXIoW3tpZDoge2RpcjogXCJkZXNjXCIsIGVtcHR5Rmlyc3Q6IGZhbHNlfX1dKSAtPiBbe3BhdGg6IFwiaWRcIiwgaXNBc2M6IGZhbHNlLCBlbXB0eUZpcnN0OiBmYWxzZX1dXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNvcnRlck5vcm1hbGl6ZTxUIGV4dGVuZHMgTW9kZWw+KHNvcnRlcnM6IFNvcnRlcjxUPik6IFNvcnRlck5vcm1hbGl6ZWQge1xuICAgIHJldHVybiBmbGF0dGVuRGVlcChcbiAgICAgICAgKHNvcnRlcnMgYXMgYW55KS5tYXAoKHM6IGFueSkgPT5cbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHMpLm1hcCgoW2ssIHZdKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzQXNjID0gdi50b0xvd2VyQ2FzZSgpID09PSBcImFzY1wiXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHBhdGg6IGssIGlzQXNjLCBlbXB0eUZpcnN0OiBpc0FzYyA/IGZhbHNlIDogdHJ1ZSB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHYpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBrLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNBc2M6ICgodiBhcyBEaXJlY3Rpb25FeHRyYSkuZGlyIHx8IFwiYXNjXCIpLnRvTG93ZXJDYXNlKCkgPT09IFwiYXNjXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbXB0eUZpcnN0OiAodiBhcyBEaXJlY3Rpb25FeHRyYSkuZW1wdHlGaXJzdCA9PSBudWxsID8gdHJ1ZSA6ICEhKHYgYXMgRGlyZWN0aW9uRXh0cmEpLmVtcHR5Rmlyc3RcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBzb3J0ZXI6ICR7dn1gKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICApXG59XG5cbmZ1bmN0aW9uIF9zb3J0ZXJDb21waWxlPFQgZXh0ZW5kcyBNb2RlbD4oc29ydGVyczogU29ydGVyPFQ+KTogU29ydGVyRm48VD4ge1xuICAgIGlmIChzb3J0ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gKF9hLCBfYikgPT4gMFxuICAgIH1cblxuICAgIGNvbnN0IG5vcm0gPSBzb3J0ZXJOb3JtYWxpemU8VD4oc29ydGVycykubWFwKGNyZWF0ZUNvbXBhcmF0b3IpXG4gICAgaWYgKG5vcm0ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiBub3JtWzBdXG4gICAgfVxuXG4gICAgY29uc3QgaW5pdGlhbCA9IG5vcm0ucG9wKCkhXG4gICAgcmV0dXJuIG5vcm0ucmVkdWNlUmlnaHQ8U29ydGVyRm48VD4+KFxuICAgICAgICAobmV4dCwgY3VycikgPT4gKGEsIGIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHIgPSBjdXJyKGEsIGIpXG4gICAgICAgICAgICByZXR1cm4gciA9PT0gMCA/IG5leHQoYSwgYikgOiByXG4gICAgICAgIH0sXG4gICAgICAgIGluaXRpYWxcbiAgICApXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbXBhcmF0b3IoeyBwYXRoLCBpc0FzYywgZW1wdHlGaXJzdCB9OiBOb3JtYWxpemVkRW50cnkpOiBTb3J0ZXJGbiB7XG4gICAgY29uc3QgZ2V0dGVyID0gcGF0aEdldHRlckNvbXBpbGUocGF0aClcbiAgICBpZiAoaXNBc2MpIHtcbiAgICAgICAgcmV0dXJuIChhLCBiKSA9PiBjb21wYXJlKGdldHRlcihhKSwgZ2V0dGVyKGIpLCBlbXB0eUZpcnN0KVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAoYSwgYikgPT4gY29tcGFyZShnZXR0ZXIoYSksIGdldHRlcihiKSwgIWVtcHR5Rmlyc3QpICogLTFcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wYXJlKGE6IGFueSwgYjogYW55LCBlbXB0eUZpcnN0OiBib29sZWFuKTogbnVtYmVyIHtcbiAgICAvLyBjb25zb2xlLmxvZyhcIkNPTVBBUkVcIiwgYSwgYilcbiAgICBpZiAoYSA9PSBudWxsICYmIGIgIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZW1wdHlGaXJzdCA9PT0gdHJ1ZSA/IC0xIDogMVxuICAgIH0gZWxzZSBpZiAoYSAhPSBudWxsICYmIGIgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZW1wdHlGaXJzdCA9PT0gdHJ1ZSA/IDEgOiAtMVxuICAgIH0gZWxzZSBpZiAoYSA9PSBudWxsICYmIGIgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gMFxuICAgIH0gZWxzZSBpZiAoaXNFcXVhbChhLCBiKSkge1xuICAgICAgICByZXR1cm4gMFxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGEgPT09IFwibnVtYmVyXCIgJiYgdHlwZW9mIGIgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgcmV0dXJuIGEgLSBiXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYSA9PT0gXCJzdHJpbmdcIiAmJiB0eXBlb2YgYiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBjb25zdCBhbCA9IGEubGVuZ3RoXG4gICAgICAgIGNvbnN0IGJsID0gYi5sZW5ndGhcbiAgICAgICAgLy8gaWYgYm90aCBsZW5ndGhzIGlzIDAgdGhlIGNvZGUgZXhlY3V0aW9uIG5vdCByZWFjaCB0aGF0IHBvaW50LCBiZWNhdXNlIGEgPT09IGJcbiAgICAgICAgaWYgKGVtcHR5Rmlyc3QgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChhbCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAtMVxuICAgICAgICAgICAgfSBlbHNlIGlmIChibCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAxXG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoYWwgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMVxuICAgICAgICAgICAgfSBlbHNlIGlmIChibCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAtMVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhLmxvY2FsZUNvbXBhcmUoYilcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYSkgJiYgQXJyYXkuaXNBcnJheShiKSkge1xuICAgICAgICBjb25zdCBhbCA9IGEubGVuZ3RoXG4gICAgICAgIGNvbnN0IGJsID0gYi5sZW5ndGhcbiAgICAgICAgY29uc3QgbCA9IE1hdGgubWluKGFsLCBibClcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcmVzID0gY29tcGFyZShhW2ldLCBiW2ldLCBlbXB0eUZpcnN0KVxuICAgICAgICAgICAgaWYgKHJlcyAhPT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhbCA9PT0gYmwpIHtcbiAgICAgICAgICAgIHJldHVybiAwXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW1wdHlGaXJzdCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgaWYgKGFsID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGJsID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChhbCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAxXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGJsID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYWwgLSBibFxuICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChhKSAmJiBpc1BsYWluT2JqZWN0KGIpKSB7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShhKS5sb2NhbGVDb21wYXJlKEpTT04uc3RyaW5naWZ5KGIpKVxuICAgIH1cblxuICAgIHJldHVybiBhID4gYiA/IC0xIDogMVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc29ydGVyTWVyZ2U8VCBleHRlbmRzIE1vZGVsPiguLi5zb3J0ZXJzOiBBcnJheTxTb3J0ZXI8VD4gfCB1bmRlZmluZWQgfCBudWxsPik6IFNvcnRlcjxUPiB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IHJlc3VsdDogU29ydGVyPFQ+IHwgdW5kZWZpbmVkXG5cbiAgICBmb3IgKGNvbnN0IHNvcnRlciBvZiBzb3J0ZXJzKSB7XG4gICAgICAgIGlmIChzb3J0ZXIgPT0gbnVsbCkge1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGRlZXBDbG9uZShzb3J0ZXIpXG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBzZW50cnkgb2Ygc29ydGVyKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhzZW50cnkpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmcgPSAocmVzdWx0IGFzIGFueSkuZmluZCgodmFsdWU6IGFueSkgPT4gdmFsdWVba10gIT0gbnVsbClcbiAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgOyhleGlzdGluZyBhcyBhbnkpW2tdID0gZGVlcENsb25lKHYpXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goeyBba106IGRlZXBDbG9uZSh2KSB9IGFzIGFueSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0XG59XG4iXX0=
|
|
166
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGF0YS9zcmMvcXVlcnkvc29ydGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBRTdDLE9BQU8sRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFHekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sUUFBUSxDQUFBO0FBb0IxQzs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxNQUFNLENBQWtCLE9BQWtCO0lBQ3RELElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFBO0lBQ25DLENBQUM7SUFDRCxPQUFPLGNBQWMsQ0FBSSxPQUFPLENBQVEsQ0FBQTtBQUM1QyxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFrQixPQUFrQjtJQUMvRCxPQUFPLFdBQVcsQ0FDYixPQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FDNUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQzdCLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDeEIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxLQUFLLEtBQUssQ0FBQTtZQUN2QyxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUMvRCxDQUFDO2FBQU0sSUFB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QUMsRUFBUyxDQUFDLENBQUE7Z0JBQzdDLENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQTtBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZmxhdHRlbkRlZXAsIGlzRXF1YWwgfSBmcm9tIFwibG9kYXNoXCJcblxuaW1wb3J0IHsgZGVlcENsb25lLCBpc1BsYWluT2JqZWN0IH0gZnJvbSBcIkBuZ3V0aWwvY29tbW9uXCJcblxuaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWxcIlxuaW1wb3J0IHsgcGF0aEdldHRlckNvbXBpbGUgfSBmcm9tIFwiLi9wYXRoXCJcblxuZXhwb3J0IHR5cGUgU29ydGVyRm48VCA9IGFueT4gPSAoYTogVCwgYjogVCkgPT4gbnVtYmVyXG5cbmV4cG9ydCBjb25zdCBlbnVtIFNvcnREaXJlY3Rpb24ge1xuICAgIEFzYyA9IFwiYXNjXCIsXG4gICAgRGVzYyA9IFwiZGVzY1wiXG59XG5cbmV4cG9ydCB0eXBlIFNvcnREaXIgPSBTb3J0RGlyZWN0aW9uLkFzYyB8IFNvcnREaXJlY3Rpb24uRGVzYyB8IFwiYXNjXCIgfCBcImRlc2NcIlxuZXhwb3J0IHR5cGUgU29ydERpckV4dHJhID0geyBkaXI6IFNvcnREaXI7IGVtcHR5Rmlyc3Q6IGJvb2xlYW4gfVxuXG50eXBlIF9Tb3J0ZXI8Rj4gPSB7IFtLIGluIGtleW9mIEZdOiB7IFtrZXkgaW4gS106IFNvcnREaXIgfCBTb3J0RGlyRXh0cmEgfSB9W2tleW9mIEZdXG4vLyBUT0RPOiBmaXggcmVjdXJzaW9uXG4vLyBleHBvcnQgdHlwZSBTb3J0ZXI8VCBleHRlbmRzIE1vZGVsPiA9IEFycmF5PF9Tb3J0ZXI8RmxhdHRlbjxUPj4+XG5leHBvcnQgdHlwZSBTb3J0ZXI8VCBleHRlbmRzIE1vZGVsPiA9IEFycmF5PHsgW2tleTogc3RyaW5nXTogU29ydERpciB8IFNvcnREaXJFeHRyYSB9PlxuXG50eXBlIE5vcm1hbGl6ZWRFbnRyeSA9IHsgcGF0aDogc3RyaW5nOyBpc0FzYzogYm9vbGVhbjsgZW1wdHlGaXJzdDogYm9vbGVhbiB9XG5leHBvcnQgdHlwZSBTb3J0ZXJOb3JtYWxpemVkID0gQXJyYXk8Tm9ybWFsaXplZEVudHJ5PlxuXG4vKipcbiAqIEBleGFtcGxlXG4gKmBgYHRzXG4gKiBpdGVtcy50b1NvcnRlZChzb3J0QnkoW3tcImF1dGhvci5uYW1lXCI6IFwiYXNjXCJ9XSkpXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNvcnRCeTxUIGV4dGVuZHMgTW9kZWw+KHNvcnRlcnM6IFNvcnRlcjxUPik6IFNvcnRlckZuPFQ+IHtcbiAgICBpZiAoc29ydGVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRW1wdHkgc29ydGVyXCIpXG4gICAgfVxuICAgIHJldHVybiBfc29ydGVyQ29tcGlsZTxUPihzb3J0ZXJzKSBhcyBhbnlcbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgc29ydGVyIGRlZmluaXRpb25cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIG5vcm1hbGl6ZVNvcnRlcihbe2lkOiBcImFzY1wifV0pIC0+IFt7cGF0aDogXCJpZFwiLCBpc0FzYzogdHJ1ZSwgZW1wdHlGaXJzdDogdHJ1ZX1dXG4gKiBub3JtYWxpemVTb3J0ZXIoW3tpZDoge2RpcjogXCJkZXNjXCIsIGVtcHR5Rmlyc3Q6IGZhbHNlfX1dKSAtPiBbe3BhdGg6IFwiaWRcIiwgaXNBc2M6IGZhbHNlLCBlbXB0eUZpcnN0OiBmYWxzZX1dXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNvcnRlck5vcm1hbGl6ZTxUIGV4dGVuZHMgTW9kZWw+KHNvcnRlcnM6IFNvcnRlcjxUPik6IFNvcnRlck5vcm1hbGl6ZWQge1xuICAgIHJldHVybiBmbGF0dGVuRGVlcChcbiAgICAgICAgKHNvcnRlcnMgYXMgYW55KS5tYXAoKHM6IGFueSkgPT5cbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHMpLm1hcCgoW2ssIHZdKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzQXNjID0gdi50b0xvd2VyQ2FzZSgpID09PSBcImFzY1wiXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHBhdGg6IGssIGlzQXNjLCBlbXB0eUZpcnN0OiBpc0FzYyA/IGZhbHNlIDogdHJ1ZSB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHYpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBrLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNBc2M6ICgodiBhcyBTb3J0RGlyRXh0cmEpLmRpciB8fCBcImFzY1wiKS50b0xvd2VyQ2FzZSgpID09PSBcImFzY1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgZW1wdHlGaXJzdDogKHYgYXMgU29ydERpckV4dHJhKS5lbXB0eUZpcnN0ID09IG51bGwgPyB0cnVlIDogISEodiBhcyBTb3J0RGlyRXh0cmEpLmVtcHR5Rmlyc3RcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBzb3J0ZXI6ICR7dn1gKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICApXG59XG5cbmZ1bmN0aW9uIF9zb3J0ZXJDb21waWxlPFQgZXh0ZW5kcyBNb2RlbD4oc29ydGVyczogU29ydGVyPFQ+KTogU29ydGVyRm48VD4ge1xuICAgIGlmIChzb3J0ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gKF9hLCBfYikgPT4gMFxuICAgIH1cblxuICAgIGNvbnN0IG5vcm0gPSBzb3J0ZXJOb3JtYWxpemU8VD4oc29ydGVycykubWFwKGNyZWF0ZUNvbXBhcmF0b3IpXG4gICAgaWYgKG5vcm0ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiBub3JtWzBdXG4gICAgfVxuXG4gICAgY29uc3QgaW5pdGlhbCA9IG5vcm0ucG9wKCkhXG4gICAgcmV0dXJuIG5vcm0ucmVkdWNlUmlnaHQ8U29ydGVyRm48VD4+KFxuICAgICAgICAobmV4dCwgY3VycikgPT4gKGEsIGIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHIgPSBjdXJyKGEsIGIpXG4gICAgICAgICAgICByZXR1cm4gciA9PT0gMCA/IG5leHQoYSwgYikgOiByXG4gICAgICAgIH0sXG4gICAgICAgIGluaXRpYWxcbiAgICApXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbXBhcmF0b3IoeyBwYXRoLCBpc0FzYywgZW1wdHlGaXJzdCB9OiBOb3JtYWxpemVkRW50cnkpOiBTb3J0ZXJGbiB7XG4gICAgY29uc3QgZ2V0dGVyID0gcGF0aEdldHRlckNvbXBpbGUocGF0aClcbiAgICBpZiAoaXNBc2MpIHtcbiAgICAgICAgcmV0dXJuIChhLCBiKSA9PiBjb21wYXJlKGdldHRlcihhKSwgZ2V0dGVyKGIpLCBlbXB0eUZpcnN0KVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAoYSwgYikgPT4gY29tcGFyZShnZXR0ZXIoYSksIGdldHRlcihiKSwgIWVtcHR5Rmlyc3QpICogLTFcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wYXJlKGE6IGFueSwgYjogYW55LCBlbXB0eUZpcnN0OiBib29sZWFuKTogbnVtYmVyIHtcbiAgICAvLyBjb25zb2xlLmxvZyhcIkNPTVBBUkVcIiwgYSwgYilcbiAgICBpZiAoYSA9PSBudWxsICYmIGIgIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZW1wdHlGaXJzdCA9PT0gdHJ1ZSA/IC0xIDogMVxuICAgIH0gZWxzZSBpZiAoYSAhPSBudWxsICYmIGIgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZW1wdHlGaXJzdCA9PT0gdHJ1ZSA/IDEgOiAtMVxuICAgIH0gZWxzZSBpZiAoYSA9PSBudWxsICYmIGIgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gMFxuICAgIH0gZWxzZSBpZiAoaXNFcXVhbChhLCBiKSkge1xuICAgICAgICByZXR1cm4gMFxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGEgPT09IFwibnVtYmVyXCIgJiYgdHlwZW9mIGIgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgcmV0dXJuIGEgLSBiXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYSA9PT0gXCJzdHJpbmdcIiAmJiB0eXBlb2YgYiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBjb25zdCBhbCA9IGEubGVuZ3RoXG4gICAgICAgIGNvbnN0IGJsID0gYi5sZW5ndGhcbiAgICAgICAgLy8gaWYgYm90aCBsZW5ndGhzIGlzIDAgdGhlIGNvZGUgZXhlY3V0aW9uIG5vdCByZWFjaCB0aGF0IHBvaW50LCBiZWNhdXNlIGEgPT09IGJcbiAgICAgICAgaWYgKGVtcHR5Rmlyc3QgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChhbCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAtMVxuICAgICAgICAgICAgfSBlbHNlIGlmIChibCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAxXG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoYWwgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMVxuICAgICAgICAgICAgfSBlbHNlIGlmIChibCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAtMVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhLmxvY2FsZUNvbXBhcmUoYilcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYSkgJiYgQXJyYXkuaXNBcnJheShiKSkge1xuICAgICAgICBjb25zdCBhbCA9IGEubGVuZ3RoXG4gICAgICAgIGNvbnN0IGJsID0gYi5sZW5ndGhcbiAgICAgICAgY29uc3QgbCA9IE1hdGgubWluKGFsLCBibClcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcmVzID0gY29tcGFyZShhW2ldLCBiW2ldLCBlbXB0eUZpcnN0KVxuICAgICAgICAgICAgaWYgKHJlcyAhPT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhbCA9PT0gYmwpIHtcbiAgICAgICAgICAgIHJldHVybiAwXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW1wdHlGaXJzdCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgaWYgKGFsID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGJsID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChhbCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAxXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGJsID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYWwgLSBibFxuICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChhKSAmJiBpc1BsYWluT2JqZWN0KGIpKSB7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShhKS5sb2NhbGVDb21wYXJlKEpTT04uc3RyaW5naWZ5KGIpKVxuICAgIH1cblxuICAgIHJldHVybiBhID4gYiA/IC0xIDogMVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc29ydGVyTWVyZ2U8VCBleHRlbmRzIE1vZGVsPiguLi5zb3J0ZXJzOiBBcnJheTxTb3J0ZXI8VD4gfCB1bmRlZmluZWQgfCBudWxsPik6IFNvcnRlcjxUPiB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IHJlc3VsdDogU29ydGVyPFQ+IHwgdW5kZWZpbmVkXG5cbiAgICBmb3IgKGNvbnN0IHNvcnRlciBvZiBzb3J0ZXJzKSB7XG4gICAgICAgIGlmIChzb3J0ZXIgPT0gbnVsbCkge1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGRlZXBDbG9uZShzb3J0ZXIpXG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBzZW50cnkgb2Ygc29ydGVyKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhzZW50cnkpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmcgPSAocmVzdWx0IGFzIGFueSkuZmluZCgodmFsdWU6IGFueSkgPT4gdmFsdWVba10gIT0gbnVsbClcbiAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgOyhleGlzdGluZyBhcyBhbnkpW2tdID0gZGVlcENsb25lKHYpXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goeyBba106IGRlZXBDbG9uZSh2KSB9IGFzIGFueSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0XG59XG4iXX0=
|
|
@@ -111,10 +111,10 @@ export class DataSourceProxy extends CdkDataSource {
|
|
|
111
111
|
this.#valueSub = undefined;
|
|
112
112
|
this.#subs.unsubscribe();
|
|
113
113
|
}
|
|
114
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.
|
|
115
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.
|
|
114
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DataSourceProxy, deps: [{ token: i1.Busy, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
115
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.6", type: DataSourceProxy, isStandalone: true, selector: "[nuDataSource]", inputs: { source: ["nuDataSource", "source"], filter: "filter", sorter: "sorter", grouper: "grouper", slimer: "slimer" }, exportAs: ["nuDataSource"], usesInheritance: true, ngImport: i0 }); }
|
|
116
116
|
}
|
|
117
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.
|
|
117
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DataSourceProxy, decorators: [{
|
|
118
118
|
type: Directive,
|
|
119
119
|
args: [{
|
|
120
120
|
standalone: true,
|
|
@@ -25,29 +25,27 @@ export class DataSource extends CdkDataSource {
|
|
|
25
25
|
grouper: this.grouper.merged$
|
|
26
26
|
}).pipe(shareReplay(1));
|
|
27
27
|
this.#slice = new ReplaySubject(1);
|
|
28
|
-
this.slice$ = this.#slice.pipe(distinctUntilChanged(isEqual), map(slice => deepFreeze(deepClone(slice))), shareReplay(1));
|
|
28
|
+
this.slice$ = this.#slice.pipe(switchMap(slice => this.provider.clampSlice(slice)), distinctUntilChanged(isEqual), map(slice => deepFreeze(deepClone(slice))), shareReplay(1));
|
|
29
29
|
this.#reload = new Subject();
|
|
30
30
|
this.reset$ = merge(this.#queryBase, this.#reload).pipe(tap(() => this.#setBusy(true)), switchMap(() => this.store.clear()), shareReplay(1));
|
|
31
31
|
this.query$ = combineLatest({ base: this.#queryBase, slice: this.slice$ }).pipe(map(({ base, slice }) => {
|
|
32
32
|
return { ...base, slice };
|
|
33
33
|
}), shareReplay(1));
|
|
34
|
-
this.items$ = combineLatest({ query: this.query$, reset: this.reset$ }).pipe(tap(() => this.#setBusy(true)), debounceTime(DEBOUNCE_TIME), switchMap(({ query }) =>
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
}
|
|
50
|
-
}))), finalize(() => this.#setBusy(false)), shareReplay(1));
|
|
34
|
+
this.items$ = combineLatest({ query: this.query$, reset: this.reset$ }).pipe(tap(() => this.#setBusy(true)), debounceTime(DEBOUNCE_TIME), switchMap(({ query }) => {
|
|
35
|
+
return this.store.hasSlice(query.slice).pipe(switchMap(hasSlice => {
|
|
36
|
+
if (hasSlice) {
|
|
37
|
+
return this.store.getSlice(query.slice);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
return this.provider.queryList(query).pipe(switchMap(result => {
|
|
41
|
+
if (result.total != null) {
|
|
42
|
+
this.total$.next(result.total);
|
|
43
|
+
}
|
|
44
|
+
return this.store.insertSlice(query.slice, result.items);
|
|
45
|
+
}), take(1));
|
|
46
|
+
}
|
|
47
|
+
}));
|
|
48
|
+
}), finalize(() => this.#setBusy(false)), shareReplay(1));
|
|
51
49
|
this.#cvSubs = new Map();
|
|
52
50
|
if (store == null) {
|
|
53
51
|
store = new MemoryStore();
|
|
@@ -58,6 +56,9 @@ export class DataSource extends CdkDataSource {
|
|
|
58
56
|
this.#slice.next(slice);
|
|
59
57
|
return this;
|
|
60
58
|
}
|
|
59
|
+
all() {
|
|
60
|
+
return this.setSlice({ start: 0, end: Infinity });
|
|
61
|
+
}
|
|
61
62
|
realod() {
|
|
62
63
|
this.#reload.next();
|
|
63
64
|
}
|
|
@@ -105,4 +106,4 @@ export class DataSource extends CdkDataSource {
|
|
|
105
106
|
this.#cvSubs.delete(collectionViewer);
|
|
106
107
|
}
|
|
107
108
|
}
|
|
108
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGF0YS9zcmMvc291cmNlL3NvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxJQUFJLGFBQWEsRUFBb0IsTUFBTSwwQkFBMEIsQ0FBQTtBQUV4RixPQUFPLEVBQ0gsZUFBZSxFQUNmLGFBQWEsRUFDYixZQUFZLEVBQ1osb0JBQW9CLEVBQ3BCLFFBQVEsRUFDUixHQUFHLEVBQ0gsVUFBVSxFQUNWLEVBQUUsRUFDRixhQUFhLEVBQ2IsV0FBVyxFQUNYLE9BQU8sRUFFUCxTQUFTLEVBQ1QsSUFBSSxFQUNKLFNBQVMsRUFDVCxHQUFHLEVBQ04sTUFBTSxNQUFNLENBQUE7QUFFYixPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUV2QyxPQUFPLEVBQW1CLFNBQVMsRUFBRSxVQUFVLEVBQWdCLE1BQU0sZ0JBQWdCLENBQUE7QUFLckYsT0FBTyxFQUF3QixXQUFXLEVBQTBCLE1BQU0sVUFBVSxDQUFBO0FBQ3BGLE9BQU8sRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFFOUYsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFBO0FBSXhCLE1BQU0sT0FBTyxVQUE0QixTQUFRLGFBQTRCO0lBU2hFLFVBQVUsQ0FLSTtJQUVkLE1BQU0sQ0FBOEI7SUFPcEMsT0FBTyxDQUFzQjtJQTJDdEMsWUFDb0IsUUFBeUIsRUFDekMsS0FBMEI7UUFFMUIsS0FBSyxFQUFFLENBQUE7UUFIUyxhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQWxFcEMsVUFBSyxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFBO1FBQzNDLFdBQU0sR0FBRyxJQUFJLGVBQWUsQ0FBcUIsU0FBUyxDQUFDLENBQUE7UUFFM0QsV0FBTSxHQUFHLElBQUksY0FB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LENBQUMsTUFBTSxDQUFDLENBQUE7WUFDL0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUE7WUFFOUMsT0FBTyxHQUFHLEVBQUU7Z0JBQ1IsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDO29CQUMvQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO2dCQUN6QyxDQUFDO2dCQUNELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQTtnQkFDbEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFBO1lBQ3RCLENBQUMsQ0FBQTtRQUNMLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtJQUM3QixDQUFDO0lBRVEsVUFBVSxDQUFDLGdCQUFrQztRQUNsRCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFBO1FBQzFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUE7SUFDekMsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0YVNvdXJjZSBhcyBDZGtEYXRhU291cmNlLCBDb2xsZWN0aW9uVmlld2VyIH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9jb2xsZWN0aW9uc1wiXG5cbmltcG9ydCB7XG4gICAgQmVoYXZpb3JTdWJqZWN0LFxuICAgIGNvbWJpbmVMYXRlc3QsXG4gICAgZGVib3VuY2VUaW1lLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICAgIGZpbmFsaXplLFxuICAgIG1hcCxcbiAgICBPYnNlcnZhYmxlLFxuICAgIG9mLFxuICAgIFJlcGxheVN1YmplY3QsXG4gICAgc2hhcmVSZXBsYXksXG4gICAgU3ViamVjdCxcbiAgICBTdWJzY3JpYmVyLFxuICAgIHN3aXRjaE1hcCxcbiAgICB0YWtlLFxuICAgIHRha2VVbnRpbCxcbiAgICB0YXBcbn0gZnJvbSBcInJ4anNcIlxuXG5pbXBvcnQgeyBpc0VxdWFsLCBtZXJnZSB9IGZyb20gXCJsb2Rhc2hcIlxuXG5pbXBvcnQgeyBDb25uZWN0UHJvdG9jb2wsIGRlZXBDbG9uZSwgZGVlcEZyZWV6ZSwgRGVlcFJlYWRvbmx5IH0gZnJvbSBcIkBuZ3V0aWwvY29tbW9uXCJcblxuaW1wb3J0IHR5cGUgeyBNb2RlbCwgTW9kZWxSZWYgfSBmcm9tIFwiLi4vbW9kZWxcIlxuaW1wb3J0IHR5cGUgeyBEYXRhUHJvdmlkZXIgfSBmcm9tIFwiLi4vcHJvdmlkZXIvcHJvdmlkZXJcIlxuaW1wb3J0IHR5cGUgeyBGaWx0ZXIsIEdyb3VwZXIsIFF1ZXJ5LCBTbGljZSwgU2xpbWVyLCBTb3J0ZXIgfSBmcm9tIFwiLi4vcXVlcnlcIlxuaW1wb3J0IHsgdHlwZSBDb2xsZWN0aW9uU3RvcmUsIE1lbW9yeVN0b3JlLCB0eXBlIFBhcnRpYWxDb2xsZWN0aW9uIH0gZnJvbSBcIi4uL3N0b3JlXCJcbmltcG9ydCB7IEZpbHRlckNvbWJpbmVkLCBHcm91cGVyQ29tYmluZWQsIFNsaW1lckNvbWJpbmVkLCBTb3J0ZXJDb21iaW5lZCB9IGZyb20gXCIuL3Byb3BlcnRpZXNcIlxuXG5jb25zdCBERUJPVU5DRV9USU1FID0gNTBcblxudHlwZSBEU1F1ZXJ5PFQgZXh0ZW5kcyBNb2RlbD4gPSBRdWVyeTxUPiAmIHsgc2xpY2U6IERlZXBSZWFkb25seTxTbGljZT4gfVxuXG5leHBvcnQgY2xhc3MgRGF0YVNvdXJjZTxUIGV4dGVuZHMgTW9kZWw+IGV4dGVuZHMgQ2RrRGF0YVNvdXJjZTxUIHwgdW5kZWZpbmVkPiBpbXBsZW1lbnRzIENvbm5lY3RQcm90b2NvbCB7XG4gICAgcmVhZG9ubHkgYnVzeSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKVxuICAgIHJlYWRvbmx5IHRvdGFsJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG5cbiAgICByZWFkb25seSBmaWx0ZXIgPSBuZXcgRmlsdGVyQ29tYmluZWQ8RmlsdGVyPFQ+PigpXG4gICAgcmVhZG9ubHkgc29ydGVyID0gbmV3IFNvcnRlckNvbWJpbmVkPFNvcnRlcjxUPj4oKVxuICAgIHJlYWRvbmx5IHNsaW1lciA9IG5ldyBTbGltZXJDb21iaW5lZDxTbGltZXI8VD4+KClcbiAgICByZWFkb25seSBncm91cGVyID0gbmV3IEdyb3VwZXJDb21iaW5lZDxHcm91cGVyPFQ+PigpXG5cbiAgICByZWFkb25seSAjcXVlcnlCYXNlID0gY29tYmluZUxhdGVzdCh7XG4gICAgICAgIGZpbHRlcjogdGhpcy5maWx0ZXIubWVyZ2VkJCxcbiAgICAgICAgc29ydGVyOiB0aGlzLnNvcnRlci5tZXJnZWQkLFxuICAgICAgICBzbGltZXI6IHRoaXMuc2xpbWVyLm1lcmdlZCQsXG4gICAgICAgIGdyb3VwZXI6IHRoaXMuZ3JvdXBlci5tZXJnZWQkXG4gICAgfSkucGlwZShzaGFyZVJlcGxheSgxKSlcblxuICAgIHJlYWRvbmx5ICNzbGljZSA9IG5ldyBSZXBsYXlTdWJqZWN0PFNsaWNlPigxKVxuICAgIHJlYWRvbmx5IHNsaWNlJDogT2JzZXJ2YWJsZTxTbGljZT4gPSB0aGlzLiNzbGljZS5waXBlKFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc0VxdWFsKSxcbiAgICAgICAgbWFwKHNsaWNlID0+IGRlZXBGcmVlemUoZGVlcENsb25lKHNsaWNlKSkpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgIClcblxuICAgIHJlYWRvbmx5ICNyZWxvYWQgPSBuZXcgU3ViamVjdDx2b2lkPigpXG4gICAgcmVhZG9ubHkgcmVzZXQkOiBPYnNlcnZhYmxlPHVua25vd24+ID0gbWVyZ2UodGhpcy4jcXVlcnlCYXNlLCB0aGlzLiNyZWxvYWQpLnBpcGUoXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLiNzZXRCdXN5KHRydWUpKSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuc3RvcmUuY2xlYXIoKSksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKVxuXG4gICAgcmVhZG9ubHkgcXVlcnkkOiBPYnNlcnZhYmxlPERTUXVlcnk8VD4+ID0gY29tYmluZUxhdGVzdCh7IGJhc2U6IHRoaXMuI3F1ZXJ5QmFzZSwgc2xpY2U6IHRoaXMuc2xpY2UkIH0pLnBpcGUoXG4gICAgICAgIG1hcCgoeyBiYXNlLCBzbGljZSB9KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4geyAuLi5iYXNlLCBzbGljZSB9XG4gICAgICAgIH0pLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgIClcblxuICAgIHJlYWRvbmx5IGl0ZW1zJDogT2JzZXJ2YWJsZTxQYXJ0aWFsQ29sbGVjdGlvbjxUPj4gPSBjb21iaW5lTGF0ZXN0KHsgcXVlcnk6IHRoaXMucXVlcnkkLCByZXNldDogdGhpcy5yZXNldCQgfSkucGlwZShcbiAgICAgICAgdGFwKCgpID0+IHRoaXMuI3NldEJ1c3kodHJ1ZSkpLFxuICAgICAgICBkZWJvdW5jZVRpbWUoREVCT1VOQ0VfVElNRSksXG4gICAgICAgIHN3aXRjaE1hcCgoeyBxdWVyeSB9KSA9PlxuICAgICAgICAgICAgLy8gVE9ETzogbWF5YmUgaGFzU2xpY2UgKyBnZXRTbGljZVxuICAgICAgICAgICAgdGhpcy5zdG9yZS5nZXRTbGljZShxdWVyeS5zbGljZSkucGlwZShcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoaXRlbXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBlbmRSZWFjaGVkXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhc01pc3NpbmcgPSBpdGVtcy5zb21lKHYgPT4gdiA9PSBudWxsKVxuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzTWlzc2luZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvdmlkZXIucXVlcnlMaXN0KHF1ZXJ5KS5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcChyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnRvdGFsICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG90YWwkLm5leHQocmVzdWx0LnRvdGFsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN0b3JlLmluc2VydFNsaWNlKHF1ZXJ5LnNsaWNlLCByZXN1bHQuaXRlbXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihpdGVtcylcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIGZpbmFsaXplKCgpID0+IHRoaXMuI3NldEJ1c3koZmFsc2UpKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApXG5cbiAgICByZWFkb25seSBzdG9yZTogQ29sbGVjdGlvblN0b3JlPFQ+XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBwcm92aWRlcjogRGF0YVByb3ZpZGVyPFQ+LFxuICAgICAgICBzdG9yZT86IENvbGxlY3Rpb25TdG9yZTxUPlxuICAgICkge1xuICAgICAgICBzdXBlcigpXG4gICAgICAgIGlmIChzdG9yZSA9PSBudWxsKSB7XG4gICAgICAgICAgICBzdG9yZSA9IG5ldyBNZW1vcnlTdG9yZSgpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdG9yZSA9IHN0b3JlXG4gICAgfVxuXG4gICAgc2V0U2xpY2Uoc2xpY2U6IFNsaWNlKSB7XG4gICAgICAgIHRoaXMuI3NsaWNlLm5leHQoc2xpY2UpXG4gICAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgcmVhbG9kKCkge1xuICAgICAgICB0aGlzLiNyZWxvYWQubmV4dCgpXG4gICAgfVxuXG4gICAgZ2V0SXRlbShyZWY6IE1vZGVsUmVmKTogT2JzZXJ2YWJsZTxUIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IHJlZm4gPSB0aGlzLnByb3ZpZGVyLm1ldGEubm9ybWFsaXplUmVmKHJlZilcbiAgICAgICAgcmV0dXJuIHRoaXMuI3N0b3JlRmlyc3QoXG4gICAgICAgICAgICBxdWVyeSA9PiB0aGlzLnN0b3JlLmdldChyZWZuKSxcbiAgICAgICAgICAgIHF1ZXJ5ID0+IHRoaXMucHJvdmlkZXIucXVlcnlJdGVtKHJlZm4sIHF1ZXJ5KVxuICAgICAgICApXG4gICAgfVxuXG4gICAgZ2V0SXRlbVBvc2l0aW9uKHJlZjogTW9kZWxSZWYpOiBPYnNlcnZhYmxlPG51bWJlciB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCByZWZuID0gdGhpcy5wcm92aWRlci5tZXRhLm5vcm1hbGl6ZVJlZihyZWYpXG4gICAgICAgIHJldHVybiB0aGlzLiNzdG9yZUZpcnN0KFxuICAgICAgICAgICAgcXVlcnkgPT4gdGhpcy5zdG9yZS5pbmRleE9mKHJlZm4pLnBpcGUobWFwKGkgPT4gKGkgPCAwID8gdW5kZWZpbmVkIDogaSkpKSxcbiAgICAgICAgICAgIHF1ZXJ5ID0+IHRoaXMucHJvdmlkZXIucXVlcnlQb3NpdGlvbihyZWZuLCBxdWVyeSlcbiAgICAgICAgKVxuICAgIH1cblxuICAgIHJlYWxvZEl0ZW0ocmVmOiBNb2RlbFJlZiwgaW5zZXJ0UG9zaXRpb24/OiBudW1iZXIpOiBPYnNlcnZhYmxlPFQgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgcmVmbiA9IHRoaXMucHJvdmlkZXIubWV0YS5ub3JtYWxpemVSZWYocmVmKVxuICAgICAgICByZXR1cm4gdGhpcy5xdWVyeSQucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcChxdWVyeSA9PiB0aGlzLnByb3ZpZGVyLnF1ZXJ5SXRlbShyZWZuLCBxdWVyeSkpLFxuICAgICAgICAgICAgc3dpdGNoTWFwKGl0ZW0gPT5cbiAgICAgICAgICAgICAgICBpdGVtICE9IG51bGwgPyB0aGlzLnN0b3JlLnVwZGF0ZU9ySW5zZXJ0KHJlZm4sIGl0ZW0sIGluc2VydFBvc2l0aW9uKS5waXBlKG1hcCgoKSA9PiBpdGVtKSkgOiBvZihpdGVtKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHRha2UoMSlcbiAgICAgICAgKVxuICAgIH1cblxuICAgICNzdG9yZUZpcnN0PFg+KFxuICAgICAgICBzdG9yZUZuOiAocXVlcnk6IFF1ZXJ5PFQ+KSA9PiBPYnNlcnZhYmxlPFg+LFxuICAgICAgICBzZWxmRm46IChxdWVyeTogUXVlcnk8VD4pID0+IE9ic2VydmFibGU8WD5cbiAgICApOiBPYnNlcnZhYmxlPFg+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucXVlcnkkLnBpcGUoXG4gICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgc3dpdGNoTWFwKHF1ZXJ5ID0+IHN0b3JlRm4ocXVlcnkpLnBpcGUoc3dpdGNoTWFwKHJlc3VsdCA9PiAocmVzdWx0ID09IG51bGwgPyBzZWxmRm4ocXVlcnkpIDogb2YocmVzdWx0KSkpKSlcbiAgICAgICAgKVxuICAgIH1cblxuICAgICNzZXRCdXN5KGJ1c3k6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHRoaXMucHJvdmlkZXIuaXNBc3luYykge1xuICAgICAgICAgICAgaWYgKHRoaXMuYnVzeSQudmFsdWUgIT09IGJ1c3kpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJ1c3kkLm5leHQoYnVzeSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgICNjdlN1YnMgPSBuZXcgTWFwPENvbGxlY3Rpb25WaWV3ZXIsIFN1YmplY3Q8dm9pZD4+KClcblxuICAgIG92ZXJyaWRlIGNvbm5lY3QoY29sbGVjdGlvblZpZXdlcjogQ29sbGVjdGlvblZpZXdlcik6IE9ic2VydmFibGU8cmVhZG9ubHkgKFQgfCB1bmRlZmluZWQpW10+IHtcbiAgICAgICAgY29uc3QgdW50aWwgPSBuZXcgU3ViamVjdDx2b2lkPigpXG5cbiAgICAgICAgdGhpcy4jY3ZTdWJzLmdldChjb2xsZWN0aW9uVmlld2VyKT8ubmV4dCgpXG4gICAgICAgIHRoaXMuI2N2U3Vicy5zZXQoY29sbGVjdGlvblZpZXdlciwgdW50aWwpXG5cbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChzdWJzY3JpYmVyOiBTdWJzY3JpYmVyPHJlYWRvbmx5IChUIHwgdW5kZWZpbmVkKVtdPikgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3ViMSA9IGNvbGxlY3Rpb25WaWV3ZXIudmlld0NoYW5nZS5zdWJzY3JpYmUodGhpcy4jc2xpY2UpXG4gICAgICAgICAgICBjb25zdCBzdWIyID0gdGhpcy5pdGVtcyQuc3Vic2NyaWJlKHN1YnNjcmliZXIpXG5cbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuI2N2U3Vicy5nZXQoY29sbGVjdGlvblZpZXdlcikgPT09IHVudGlsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2N2U3Vicy5kZWxldGUoY29sbGVjdGlvblZpZXdlcilcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3ViMS51bnN1YnNjcmliZSgpXG4gICAgICAgICAgICAgICAgc3ViMi51bnN1YnNjcmliZSgpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLnBpcGUodGFrZVVudGlsKHVudGlsKSlcbiAgICB9XG5cbiAgICBvdmVycmlkZSBkaXNjb25uZWN0KGNvbGxlY3Rpb25WaWV3ZXI6IENvbGxlY3Rpb25WaWV3ZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy4jY3ZTdWJzLmdldChjb2xsZWN0aW9uVmlld2VyKT8ubmV4dCgpXG4gICAgICAgIHRoaXMuI2N2U3Vicy5kZWxldGUoY29sbGVjdGlvblZpZXdlcilcbiAgICB9XG59XG4iXX0=
|
|
109
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGF0YS9zcmMvc291cmNlL3NvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxJQUFJLGFBQWEsRUFBb0IsTUFBTSwwQkFBMEIsQ0FBQTtBQUV4RixPQUFPLEVBQ0gsZUFBZSxFQUNmLGFBQWEsRUFFYixZQUFZLEVBQ1osb0JBQW9CLEVBQ3BCLFFBQVEsRUFDUixHQUFHLEVBQ0gsVUFBVSxFQUNWLEVBQUUsRUFDRixhQUFhLEVBQ2IsV0FBVyxFQUNYLE9BQU8sRUFFUCxTQUFTLEVBQ1QsSUFBSSxFQUNKLFNBQVMsRUFDVCxHQUFHLEVBQ04sTUFBTSxNQUFNLENBQUE7QUFFYixPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUV2QyxPQUFPLEVBQW1CLFNBQVMsRUFBRSxVQUFVLEVBQWdCLE1BQU0sZ0JBQWdCLENBQUE7QUFLckYsT0FBTyxFQUF3QixXQUFXLEVBQTBCLE1BQU0sVUFBVSxDQUFBO0FBQ3BGLE9BQU8sRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFFOUYsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFBO0FBSXhCLE1BQU0sT0FBTyxVQUE0QixTQUFRLGFBQTRCO0lBU2hFLFVBQVUsQ0FLSTtJQUVkLE1BQU0sQ0FBOEI7SUFRcEMsT0FBTyxDQUFzQjtJQXlDdEMsWUFDb0IsUUFBeUIsRUFDekMsS0FBMEI7UUFFMUIsS0FBSyxFQUFFLENBQUE7UUFIUyxhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQWpFcEMsVUFBSyxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFBO1FBQzNDLFdBQU0sR0FBRyxJQUFJLGVBQWUsQ0FBcUIsU0FBUyxDQUFDLENBQUE7UUFFM0QsV0FBTSxHQUFHLElBQUksY0FB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QUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUV6QyxPQUFPLElBQUksVUFBVSxDQUFDLENBQUMsVUFBa0QsRUFBRSxFQUFFO1lBQ3pFLE1BQU0sSUFBSSxHQUFHLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQy9ELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFBO1lBRTlDLE9BQU8sR0FBRyxFQUFFO2dCQUNSLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQztvQkFDL0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtnQkFDekMsQ0FBQztnQkFDRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUE7Z0JBQ2xCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQTtZQUN0QixDQUFDLENBQUE7UUFDTCxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7SUFDN0IsQ0FBQztJQUVRLFVBQVUsQ0FBQyxnQkFBa0M7UUFDbEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQTtRQUMxQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO0lBQ3pDLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGFTb3VyY2UgYXMgQ2RrRGF0YVNvdXJjZSwgQ29sbGVjdGlvblZpZXdlciB9IGZyb20gXCJAYW5ndWxhci9jZGsvY29sbGVjdGlvbnNcIlxuXG5pbXBvcnQge1xuICAgIEJlaGF2aW9yU3ViamVjdCxcbiAgICBjb21iaW5lTGF0ZXN0LFxuICAgIGNvbmNhdE1hcCxcbiAgICBkZWJvdW5jZVRpbWUsXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gICAgZmluYWxpemUsXG4gICAgbWFwLFxuICAgIE9ic2VydmFibGUsXG4gICAgb2YsXG4gICAgUmVwbGF5U3ViamVjdCxcbiAgICBzaGFyZVJlcGxheSxcbiAgICBTdWJqZWN0LFxuICAgIFN1YnNjcmliZXIsXG4gICAgc3dpdGNoTWFwLFxuICAgIHRha2UsXG4gICAgdGFrZVVudGlsLFxuICAgIHRhcFxufSBmcm9tIFwicnhqc1wiXG5cbmltcG9ydCB7IGlzRXF1YWwsIG1lcmdlIH0gZnJvbSBcImxvZGFzaFwiXG5cbmltcG9ydCB7IENvbm5lY3RQcm90b2NvbCwgZGVlcENsb25lLCBkZWVwRnJlZXplLCBEZWVwUmVhZG9ubHkgfSBmcm9tIFwiQG5ndXRpbC9jb21tb25cIlxuXG5pbXBvcnQgdHlwZSB7IE1vZGVsLCBNb2RlbFJlZiB9IGZyb20gXCIuLi9tb2RlbFwiXG5pbXBvcnQgdHlwZSB7IERhdGFQcm92aWRlciB9IGZyb20gXCIuLi9wcm92aWRlci9wcm92aWRlclwiXG5pbXBvcnQgdHlwZSB7IEZpbHRlciwgR3JvdXBlciwgUXVlcnksIFNsaWNlLCBTbGltZXIsIFNvcnRlciB9IGZyb20gXCIuLi9xdWVyeVwiXG5pbXBvcnQgeyB0eXBlIENvbGxlY3Rpb25TdG9yZSwgTWVtb3J5U3RvcmUsIHR5cGUgUGFydGlhbENvbGxlY3Rpb24gfSBmcm9tIFwiLi4vc3RvcmVcIlxuaW1wb3J0IHsgRmlsdGVyQ29tYmluZWQsIEdyb3VwZXJDb21iaW5lZCwgU2xpbWVyQ29tYmluZWQsIFNvcnRlckNvbWJpbmVkIH0gZnJvbSBcIi4vcHJvcGVydGllc1wiXG5cbmNvbnN0IERFQk9VTkNFX1RJTUUgPSA1MFxuXG50eXBlIERTUXVlcnk8VCBleHRlbmRzIE1vZGVsPiA9IFF1ZXJ5PFQ+ICYgeyBzbGljZTogRGVlcFJlYWRvbmx5PFNsaWNlPiB9XG5cbmV4cG9ydCBjbGFzcyBEYXRhU291cmNlPFQgZXh0ZW5kcyBNb2RlbD4gZXh0ZW5kcyBDZGtEYXRhU291cmNlPFQgfCB1bmRlZmluZWQ+IGltcGxlbWVudHMgQ29ubmVjdFByb3RvY29sIHtcbiAgICByZWFkb25seSBidXN5JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpXG4gICAgcmVhZG9ubHkgdG90YWwkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXIgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcblxuICAgIHJlYWRvbmx5IGZpbHRlciA9IG5ldyBGaWx0ZXJDb21iaW5lZDxGaWx0ZXI8VD4+KClcbiAgICByZWFkb25seSBzb3J0ZXIgPSBuZXcgU29ydGVyQ29tYmluZWQ8U29ydGVyPFQ+PigpXG4gICAgcmVhZG9ubHkgc2xpbWVyID0gbmV3IFNsaW1lckNvbWJpbmVkPFNsaW1lcjxUPj4oKVxuICAgIHJlYWRvbmx5IGdyb3VwZXIgPSBuZXcgR3JvdXBlckNvbWJpbmVkPEdyb3VwZXI8VD4+KClcblxuICAgIHJlYWRvbmx5ICNxdWVyeUJhc2UgPSBjb21iaW5lTGF0ZXN0KHtcbiAgICAgICAgZmlsdGVyOiB0aGlzLmZpbHRlci5tZXJnZWQkLFxuICAgICAgICBzb3J0ZXI6IHRoaXMuc29ydGVyLm1lcmdlZCQsXG4gICAgICAgIHNsaW1lcjogdGhpcy5zbGltZXIubWVyZ2VkJCxcbiAgICAgICAgZ3JvdXBlcjogdGhpcy5ncm91cGVyLm1lcmdlZCRcbiAgICB9KS5waXBlKHNoYXJlUmVwbGF5KDEpKVxuXG4gICAgcmVhZG9ubHkgI3NsaWNlID0gbmV3IFJlcGxheVN1YmplY3Q8U2xpY2U+KDEpXG4gICAgcmVhZG9ubHkgc2xpY2UkOiBPYnNlcnZhYmxlPFNsaWNlPiA9IHRoaXMuI3NsaWNlLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcChzbGljZSA9PiB0aGlzLnByb3ZpZGVyLmNsYW1wU2xpY2Uoc2xpY2UpKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoaXNFcXVhbCksXG4gICAgICAgIG1hcChzbGljZSA9PiBkZWVwRnJlZXplKGRlZXBDbG9uZShzbGljZSkpKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApXG5cbiAgICByZWFkb25seSAjcmVsb2FkID0gbmV3IFN1YmplY3Q8dm9pZD4oKVxuICAgIHJlYWRvbmx5IHJlc2V0JDogT2JzZXJ2YWJsZTx1bmtub3duPiA9IG1lcmdlKHRoaXMuI3F1ZXJ5QmFzZSwgdGhpcy4jcmVsb2FkKS5waXBlKFxuICAgICAgICB0YXAoKCkgPT4gdGhpcy4jc2V0QnVzeSh0cnVlKSksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLnN0b3JlLmNsZWFyKCkpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgIClcblxuICAgIHJlYWRvbmx5IHF1ZXJ5JDogT2JzZXJ2YWJsZTxEU1F1ZXJ5PFQ+PiA9IGNvbWJpbmVMYXRlc3QoeyBiYXNlOiB0aGlzLiNxdWVyeUJhc2UsIHNsaWNlOiB0aGlzLnNsaWNlJCB9KS5waXBlKFxuICAgICAgICBtYXAoKHsgYmFzZSwgc2xpY2UgfSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgc2xpY2UgfVxuICAgICAgICB9KSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApXG5cbiAgICByZWFkb25seSBpdGVtcyQ6IE9ic2VydmFibGU8UGFydGlhbENvbGxlY3Rpb248VD4+ID0gY29tYmluZUxhdGVzdCh7IHF1ZXJ5OiB0aGlzLnF1ZXJ5JCwgcmVzZXQ6IHRoaXMucmVzZXQkIH0pLnBpcGUoXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLiNzZXRCdXN5KHRydWUpKSxcbiAgICAgICAgZGVib3VuY2VUaW1lKERFQk9VTkNFX1RJTUUpLFxuICAgICAgICBzd2l0Y2hNYXAoKHsgcXVlcnkgfSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmUuaGFzU2xpY2UocXVlcnkuc2xpY2UpLnBpcGUoXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKGhhc1NsaWNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1NsaWNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdG9yZS5nZXRTbGljZShxdWVyeS5zbGljZSlcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3ZpZGVyLnF1ZXJ5TGlzdChxdWVyeSkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2hNYXAocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC50b3RhbCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvdGFsJC5uZXh0KHJlc3VsdC50b3RhbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdG9yZS5pbnNlcnRTbGljZShxdWVyeS5zbGljZSwgcmVzdWx0Lml0ZW1zKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRha2UoMSlcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgIH0pLFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLiNzZXRCdXN5KGZhbHNlKSksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKVxuXG4gICAgcmVhZG9ubHkgc3RvcmU6IENvbGxlY3Rpb25TdG9yZTxUPlxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgcHJvdmlkZXI6IERhdGFQcm92aWRlcjxUPixcbiAgICAgICAgc3RvcmU/OiBDb2xsZWN0aW9uU3RvcmU8VD5cbiAgICApIHtcbiAgICAgICAgc3VwZXIoKVxuICAgICAgICBpZiAoc3RvcmUgPT0gbnVsbCkge1xuICAgICAgICAgICAgc3RvcmUgPSBuZXcgTWVtb3J5U3RvcmUoKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RvcmUgPSBzdG9yZVxuICAgIH1cblxuICAgIHNldFNsaWNlKHNsaWNlOiBTbGljZSkge1xuICAgICAgICB0aGlzLiNzbGljZS5uZXh0KHNsaWNlKVxuICAgICAgICByZXR1cm4gdGhpc1xuICAgIH1cblxuICAgIGFsbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0U2xpY2Uoe3N0YXJ0OiAwLCBlbmQ6IEluZmluaXR5fSlcbiAgICB9XG5cbiAgICByZWFsb2QoKSB7XG4gICAgICAgIHRoaXMuI3JlbG9hZC5uZXh0KClcbiAgICB9XG5cbiAgICBnZXRJdGVtKHJlZjogTW9kZWxSZWYpOiBPYnNlcnZhYmxlPFQgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgcmVmbiA9IHRoaXMucHJvdmlkZXIubWV0YS5ub3JtYWxpemVSZWYocmVmKVxuICAgICAgICByZXR1cm4gdGhpcy4jc3RvcmVGaXJzdChcbiAgICAgICAgICAgIHF1ZXJ5ID0+IHRoaXMuc3RvcmUuZ2V0KHJlZm4pLFxuICAgICAgICAgICAgcXVlcnkgPT4gdGhpcy5wcm92aWRlci5xdWVyeUl0ZW0ocmVmbiwgcXVlcnkpXG4gICAgICAgIClcbiAgICB9XG5cbiAgICBnZXRJdGVtUG9zaXRpb24ocmVmOiBNb2RlbFJlZik6IE9ic2VydmFibGU8bnVtYmVyIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IHJlZm4gPSB0aGlzLnByb3ZpZGVyLm1ldGEubm9ybWFsaXplUmVmKHJlZilcbiAgICAgICAgcmV0dXJuIHRoaXMuI3N0b3JlRmlyc3QoXG4gICAgICAgICAgICBxdWVyeSA9PiB0aGlzLnN0b3JlLmluZGV4T2YocmVmbikucGlwZShtYXAoaSA9PiAoaSA8IDAgPyB1bmRlZmluZWQgOiBpKSkpLFxuICAgICAgICAgICAgcXVlcnkgPT4gdGhpcy5wcm92aWRlci5xdWVyeVBvc2l0aW9uKHJlZm4sIHF1ZXJ5KVxuICAgICAgICApXG4gICAgfVxuXG4gICAgcmVhbG9kSXRlbShyZWY6IE1vZGVsUmVmLCBpbnNlcnRQb3NpdGlvbj86IG51bWJlcik6IE9ic2VydmFibGU8VCB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCByZWZuID0gdGhpcy5wcm92aWRlci5tZXRhLm5vcm1hbGl6ZVJlZihyZWYpXG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXJ5JC5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKHF1ZXJ5ID0+IHRoaXMucHJvdmlkZXIucXVlcnlJdGVtKHJlZm4sIHF1ZXJ5KSksXG4gICAgICAgICAgICBzd2l0Y2hNYXAoaXRlbSA9PlxuICAgICAgICAgICAgICAgIGl0ZW0gIT0gbnVsbCA/IHRoaXMuc3RvcmUudXBkYXRlT3JJbnNlcnQocmVmbiwgaXRlbSwgaW5zZXJ0UG9zaXRpb24pLnBpcGUobWFwKCgpID0+IGl0ZW0pKSA6IG9mKGl0ZW0pXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgdGFrZSgxKVxuICAgICAgICApXG4gICAgfVxuXG4gICAgI3N0b3JlRmlyc3Q8WD4oXG4gICAgICAgIHN0b3JlRm46IChxdWVyeTogUXVlcnk8VD4pID0+IE9ic2VydmFibGU8WD4sXG4gICAgICAgIHNlbGZGbjogKHF1ZXJ5OiBRdWVyeTxUPikgPT4gT2JzZXJ2YWJsZTxYPlxuICAgICk6IE9ic2VydmFibGU8WD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5xdWVyeSQucGlwZShcbiAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICBzd2l0Y2hNYXAocXVlcnkgPT4gc3RvcmVGbihxdWVyeSkucGlwZShzd2l0Y2hNYXAocmVzdWx0ID0+IChyZXN1bHQgPT0gbnVsbCA/IHNlbGZGbihxdWVyeSkgOiBvZihyZXN1bHQpKSkpKVxuICAgICAgICApXG4gICAgfVxuXG4gICAgI3NldEJ1c3koYnVzeTogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5wcm92aWRlci5pc0FzeW5jKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5idXN5JC52YWx1ZSAhPT0gYnVzeSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYnVzeSQubmV4dChidXN5KVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgI2N2U3VicyA9IG5ldyBNYXA8Q29sbGVjdGlvblZpZXdlciwgU3ViamVjdDx2b2lkPj4oKVxuXG4gICAgb3ZlcnJpZGUgY29ubmVjdChjb2xsZWN0aW9uVmlld2VyOiBDb2xsZWN0aW9uVmlld2VyKTogT2JzZXJ2YWJsZTxyZWFkb25seSAoVCB8IHVuZGVmaW5lZClbXT4ge1xuICAgICAgICBjb25zdCB1bnRpbCA9IG5ldyBTdWJqZWN0PHZvaWQ+KClcblxuICAgICAgICB0aGlzLiNjdlN1YnMuZ2V0KGNvbGxlY3Rpb25WaWV3ZXIpPy5uZXh0KClcbiAgICAgICAgdGhpcy4jY3ZTdWJzLnNldChjb2xsZWN0aW9uVmlld2VyLCB1bnRpbClcblxuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKHN1YnNjcmliZXI6IFN1YnNjcmliZXI8cmVhZG9ubHkgKFQgfCB1bmRlZmluZWQpW10+KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdWIxID0gY29sbGVjdGlvblZpZXdlci52aWV3Q2hhbmdlLnN1YnNjcmliZSh0aGlzLiNzbGljZSlcbiAgICAgICAgICAgIGNvbnN0IHN1YjIgPSB0aGlzLml0ZW1zJC5zdWJzY3JpYmUoc3Vic2NyaWJlcilcblxuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy4jY3ZTdWJzLmdldChjb2xsZWN0aW9uVmlld2VyKSA9PT0gdW50aWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jY3ZTdWJzLmRlbGV0ZShjb2xsZWN0aW9uVmlld2VyKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdWIxLnVuc3Vic2NyaWJlKClcbiAgICAgICAgICAgICAgICBzdWIyLnVuc3Vic2NyaWJlKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkucGlwZSh0YWtlVW50aWwodW50aWwpKVxuICAgIH1cblxuICAgIG92ZXJyaWRlIGRpc2Nvbm5lY3QoY29sbGVjdGlvblZpZXdlcjogQ29sbGVjdGlvblZpZXdlcik6IHZvaWQge1xuICAgICAgICB0aGlzLiNjdlN1YnMuZ2V0KGNvbGxlY3Rpb25WaWV3ZXIpPy5uZXh0KClcbiAgICAgICAgdGhpcy4jY3ZTdWJzLmRlbGV0ZShjb2xsZWN0aW9uVmlld2VyKVxuICAgIH1cbn1cbiJdfQ==
|
package/fesm2022/ngutil-data.mjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { flattenDepth, intersection, flattenDeep, isEqual, sortBy as sortBy$1, groupBy as groupBy$1, merge } from 'lodash';
|
|
2
2
|
import * as i1 from '@ngutil/common';
|
|
3
3
|
import { isPlainObject, deepClone, toSorted, deepFreeze } from '@ngutil/common';
|
|
4
|
+
import { BehaviorSubject, map, combineLatest, take, of, shareReplay, ReplaySubject, switchMap, distinctUntilChanged, Subject, tap, debounceTime, finalize, Observable, takeUntil, share, Subscription, throwError } from 'rxjs';
|
|
4
5
|
import { DataSource as DataSource$1 } from '@angular/cdk/collections';
|
|
5
|
-
import { BehaviorSubject, map, combineLatest, take, of, shareReplay, ReplaySubject, distinctUntilChanged, Subject, tap, switchMap, debounceTime, finalize, Observable, takeUntil, share, Subscription, throwError } from 'rxjs';
|
|
6
6
|
import * as i0 from '@angular/core';
|
|
7
7
|
import { Directive, Optional, Input } from '@angular/core';
|
|
8
8
|
import { toSignal } from '@angular/core/rxjs-interop';
|
|
@@ -988,29 +988,27 @@ class DataSource extends DataSource$1 {
|
|
|
988
988
|
grouper: this.grouper.merged$
|
|
989
989
|
}).pipe(shareReplay(1));
|
|
990
990
|
this.#slice = new ReplaySubject(1);
|
|
991
|
-
this.slice$ = this.#slice.pipe(distinctUntilChanged(isEqual), map(slice => deepFreeze(deepClone(slice))), shareReplay(1));
|
|
991
|
+
this.slice$ = this.#slice.pipe(switchMap(slice => this.provider.clampSlice(slice)), distinctUntilChanged(isEqual), map(slice => deepFreeze(deepClone(slice))), shareReplay(1));
|
|
992
992
|
this.#reload = new Subject();
|
|
993
993
|
this.reset$ = merge(this.#queryBase, this.#reload).pipe(tap(() => this.#setBusy(true)), switchMap(() => this.store.clear()), shareReplay(1));
|
|
994
994
|
this.query$ = combineLatest({ base: this.#queryBase, slice: this.slice$ }).pipe(map(({ base, slice }) => {
|
|
995
995
|
return { ...base, slice };
|
|
996
996
|
}), shareReplay(1));
|
|
997
|
-
this.items$ = combineLatest({ query: this.query$, reset: this.reset$ }).pipe(tap(() => this.#setBusy(true)), debounceTime(DEBOUNCE_TIME), switchMap(({ query }) =>
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
}
|
|
1013
|
-
}))), finalize(() => this.#setBusy(false)), shareReplay(1));
|
|
997
|
+
this.items$ = combineLatest({ query: this.query$, reset: this.reset$ }).pipe(tap(() => this.#setBusy(true)), debounceTime(DEBOUNCE_TIME), switchMap(({ query }) => {
|
|
998
|
+
return this.store.hasSlice(query.slice).pipe(switchMap(hasSlice => {
|
|
999
|
+
if (hasSlice) {
|
|
1000
|
+
return this.store.getSlice(query.slice);
|
|
1001
|
+
}
|
|
1002
|
+
else {
|
|
1003
|
+
return this.provider.queryList(query).pipe(switchMap(result => {
|
|
1004
|
+
if (result.total != null) {
|
|
1005
|
+
this.total$.next(result.total);
|
|
1006
|
+
}
|
|
1007
|
+
return this.store.insertSlice(query.slice, result.items);
|
|
1008
|
+
}), take(1));
|
|
1009
|
+
}
|
|
1010
|
+
}));
|
|
1011
|
+
}), finalize(() => this.#setBusy(false)), shareReplay(1));
|
|
1014
1012
|
this.#cvSubs = new Map();
|
|
1015
1013
|
if (store == null) {
|
|
1016
1014
|
store = new MemoryStore();
|
|
@@ -1021,6 +1019,9 @@ class DataSource extends DataSource$1 {
|
|
|
1021
1019
|
this.#slice.next(slice);
|
|
1022
1020
|
return this;
|
|
1023
1021
|
}
|
|
1022
|
+
all() {
|
|
1023
|
+
return this.setSlice({ start: 0, end: Infinity });
|
|
1024
|
+
}
|
|
1024
1025
|
realod() {
|
|
1025
1026
|
this.#reload.next();
|
|
1026
1027
|
}
|
|
@@ -1173,10 +1174,10 @@ class DataSourceProxy extends DataSource$1 {
|
|
|
1173
1174
|
this.#valueSub = undefined;
|
|
1174
1175
|
this.#subs.unsubscribe();
|
|
1175
1176
|
}
|
|
1176
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.
|
|
1177
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.
|
|
1177
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DataSourceProxy, deps: [{ token: i1.Busy, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
1178
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.6", type: DataSourceProxy, isStandalone: true, selector: "[nuDataSource]", inputs: { source: ["nuDataSource", "source"], filter: "filter", sorter: "sorter", grouper: "grouper", slimer: "slimer" }, exportAs: ["nuDataSource"], usesInheritance: true, ngImport: i0 }); }
|
|
1178
1179
|
}
|
|
1179
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.
|
|
1180
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DataSourceProxy, decorators: [{
|
|
1180
1181
|
type: Directive,
|
|
1181
1182
|
args: [{
|
|
1182
1183
|
standalone: true,
|
|
@@ -1213,6 +1214,12 @@ function coerceDataSource(value) {
|
|
|
1213
1214
|
}
|
|
1214
1215
|
|
|
1215
1216
|
class DataProvider {
|
|
1217
|
+
/**
|
|
1218
|
+
* Froce Slice boundaries, useful in array, or obeservable providers
|
|
1219
|
+
*/
|
|
1220
|
+
clampSlice(slice) {
|
|
1221
|
+
return of(slice);
|
|
1222
|
+
}
|
|
1216
1223
|
/**
|
|
1217
1224
|
* @returns New data source instance
|
|
1218
1225
|
*/
|
|
@@ -1241,6 +1248,9 @@ class LocalProvider extends DataProvider {
|
|
|
1241
1248
|
queryPosition(ref, request) {
|
|
1242
1249
|
return this.queryList(request).pipe(map(list => list.items.findIndex(ref.toFilter())));
|
|
1243
1250
|
}
|
|
1251
|
+
clampSlice(slice) {
|
|
1252
|
+
return this.items$.pipe(take(1), map(items => sliceClamp(slice, { start: 0, end: items.length })));
|
|
1253
|
+
}
|
|
1244
1254
|
}
|
|
1245
1255
|
|
|
1246
1256
|
class ArrayProvider extends LocalProvider {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngutil-data.mjs","sources":["../../../../packages/data/src/query/path.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/executor.ts","../../../../packages/data/src/model/meta.ts","../../../../packages/data/src/store/collection-store.ts","../../../../packages/data/src/store/memory-store.ts","../../../../packages/data/src/source/properties/abstract.ts","../../../../packages/data/src/source/properties/filter.ts","../../../../packages/data/src/source/properties/sorter.ts","../../../../packages/data/src/source/properties/slimer.ts","../../../../packages/data/src/source/properties/grouper.ts","../../../../packages/data/src/source/source.ts","../../../../packages/data/src/source/proxy.directive.ts","../../../../packages/data/src/provider/provider.ts","../../../../packages/data/src/provider/local.ts","../../../../packages/data/src/provider/array.ts","../../../../packages/data/src/provider/observable.ts","../../../../packages/data/src/ngutil-data.ts"],"sourcesContent":["import { flattenDepth } from \"lodash\"\n\ntype GetterFn = (srcs: any[]) => any[]\nexport type PathGetter<T = any, R = any> = (obj: T) => R[]\n\nexport function pathGetterCompile(path: string): PathGetter {\n if (!path || path.length === 0) {\n throw new Error(\"Empty path\")\n }\n\n return path.split(\".\").reduce<GetterFn>(\n (parent, part) => makeGetter(part, parent),\n (obj: any) => (obj == null ? [] : [obj])\n )\n}\n\nconst IsNumber = /^\\d+$/\n\nfunction makeGetter(part: string, parent: GetterFn): GetterFn {\n if (part === \"*\") {\n return obj => flattenDepth(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","import { flattenDeep, intersection } from \"lodash\"\n\nimport { AsPrimitive, deepClone, isPlainObject, MaxRecursion } from \"@ngutil/common\"\n\nimport { Model } from \"../model\"\nimport { PathGetter, pathGetterCompile } from \"./path\"\n\nexport const 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 Regexp = \"~\",\n RegexpInsesitive = \"~*\",\n Or = \"|\",\n And = \"&\"\n}\n\nexport const OPERATORS: Array<string> = [\n FilterOp.Eq,\n FilterOp.EqStrict,\n FilterOp.EqInsesitive,\n FilterOp.Neq,\n FilterOp.NeqStrict,\n FilterOp.NeqInsesitive,\n FilterOp.Gt,\n FilterOp.GtInsesitive,\n FilterOp.Gte,\n FilterOp.GteInsesitive,\n FilterOp.Lt,\n FilterOp.LtInsesitive,\n FilterOp.Lte,\n FilterOp.LteInsesitive,\n FilterOp.Contains,\n FilterOp.ContainsInsesitive,\n FilterOp.StartsWith,\n FilterOp.StartsWithInsesitive,\n FilterOp.EndsWith,\n FilterOp.EndsWithInsesitive,\n FilterOp.Regexp,\n FilterOp.RegexpInsesitive,\n FilterOp.Or,\n FilterOp.And\n]\n\nexport function asOperators(value: any): Array<{ op: FilterOp; value: any }> {\n const ops = intersection(Object.keys(value), OPERATORS) as FilterOp[]\n if (ops.length > 0) {\n return ops.map(op => {\n return { op, value: value[op] }\n })\n } else {\n return [{ op: FilterOp.Eq, value }]\n }\n}\n\n// export type Filter<T extends Model> = _Filter<Flatten<T>, [], MaxRecursion>\n// TODO: fix recursion\nexport type Filter<T extends Model> = { [key: string]: any }\n\ntype _Filter<F, P extends number[], D extends number> = P[\"length\"] extends D ? never : _ObjectFilter<F, P, D>\n\ntype _ObjectFilter<F, P extends number[], D extends number> = P[\"length\"] extends D\n ? never\n : { [K in keyof F]?: Operators<F[K], P, D> }\n\ntype RootOr<F, P extends number[], D extends number> = P[\"length\"] extends D\n ? never\n : { [FilterOp.Or]: Array<_Filter<F, [...P, 0], D>> | undefined }\n\ntype RootAnd<F, P extends number[], D extends number> = P[\"length\"] extends D\n ? never\n : { [FilterOp.And]: Array<_Filter<F, [...P, 0], D>> | undefined }\n\nexport type Operators<T, P extends number[], D extends number = MaxRecursion> = P[\"length\"] extends D\n ? never\n : SimpleOperators<T>\n\ntype LocalOr<T, P extends number[], D extends number> = P[\"length\"] extends D\n ? never\n : { [FilterOp.Or]: Array<Operators<T, [...P, 0], D>> | undefined }\n\ntype LocalAnd<T, P extends number[], D extends number> = P[\"length\"] extends D\n ? never\n : { [FilterOp.And]: Array<Operators<T, [...P, 0], D>> | undefined }\n\ntype SimpleOperators<T> =\n | EqStrict<T>\n | NeqStrict<T>\n | Eq<T>\n | Neq<T>\n | Gt<T>\n | Gte<T>\n | Lt<T>\n | Lte<T>\n | Contains<T>\n | StartsWith<T>\n | 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 EndsWith<T> = Operator<T, string, FilterOp.EndsWith, FilterOp.EndsWithInsesitive>\ntype Regexp<T> = Operator<T, string, FilterOp.Regexp, FilterOp.RegexpInsesitive, RegExp>\n\ntype Operator<T, R, OP extends string, OPI extends string = never, ET = never> =\n | (T extends R ? { [k in OP]: T | ET | R } : never)\n | (T extends string ? (OPI extends never ? never : { [k in OPI]: string }) : never)\n\nexport type FilterFn<T = any> = (item: T) => boolean\n\n/**\n * @example\n * ```ts\n * items.filter(filterBy({id: 42}))\n * ```\n */\nexport function filterBy<T extends Model>(filters: Filter<T>): FilterFn<T> {\n return _filterCompile<T>(filters)\n}\n\n// TODO: Normalize filter\n// type _Filter = { path: string; op: FilterOp; value: any }\n// type _Or = { \"|\": Array<_Filter> }\n// type _And = { \"&\": Array<_Filter> }\n// export type NormalizedFilter = _Or | _And\n\n// /**\n// * @example\n// * ```ts\n// * normalizeFilter({id: 2, name: {\"=*\": \"AnyName\"}}) -> {id: {\"==\": 2}, name: {\"=*\": \"AnyName\"}}}\n// * normalizeFilter({id: {\">\": 0, \"<\": 10}}) -> {\"&\": [{id: {\">\": 0}}, {id: {\"<\": 10}}]}\n// * ```\n// */\n// export function normalizeFilter<T extends Model>(filters: Filters<T>): Filters<T> {\n// return _normalizeFilter(filters)\n// }\n\n// function _normalizeFilter(filters: any, path?: string): any {\n// const result = {} as any\n\n// for (const [path, v] of Object.entries(filters)) {\n// switch (path) {\n// case FilterOp.And:\n// if (!Array.isArray(v)) {\n// throw new Error(\"The '&' (AND) operator must have array type\")\n// }\n\n// if (!result[FilterOp.And]) {\n// result[FilterOp.And] = []\n// }\n\n// result[FilterOp.And] = result[FilterOp.And].concat(v.map(f => _normalizeFilter(f)))\n// break\n\n// case FilterOp.Or:\n// if (!Array.isArray(v)) {\n// throw new Error(\"The '|' (OR) operator must have array type\")\n// }\n\n// if (!result[FilterOp.Or]) {\n// result[FilterOp.Or] = []\n// }\n\n// result[FilterOp.Or] = result[FilterOp.Or].concat(v.map(f => _normalizeFilter(f)))\n// break\n\n// default:\n// for (const entry of asOperators(v)) {\n// switch (entry.op) {\n// case FilterOp.And:\n// if (!result[FilterOp.And]) {\n// result[FilterOp.And] = []\n// }\n\n// result[FilterOp.And] = result[FilterOp.And].concat(\n// entry.value.map((v: any) => _normalizeFilter(v, path))\n// )\n// break\n\n// case FilterOp.Or:\n// if (!result[FilterOp.Or]) {\n// result[FilterOp.Or] = []\n// }\n\n// result[FilterOp.Or] = result[FilterOp.Or].concat(\n// entry.value.map((v: any) => _normalizeFilter(v, path))\n// )\n// break\n\n// default:\n// if (!result[FilterOp.And]) {\n// result[FilterOp.And] = []\n// }\n\n// result[FilterOp.And].push({ path, ...entry })\n// }\n// }\n// }\n// }\n\n// return result\n// }\n\nfunction _filterCompile<T extends Model>(filters: Filter<T>): FilterFn<T> {\n let getter: PathGetter\n const result: FilterFn<T>[] = []\n for (const [pth, value] of Object.entries(filters)) {\n switch (pth) {\n case FilterOp.And:\n if (!Array.isArray(value)) {\n throw new Error(\"Root '&' (AND) operator must have array type\")\n }\n result.splice(result.length, 0, ...value.map(_filterCompile<T>))\n break\n\n case FilterOp.Or:\n if (!Array.isArray(value)) {\n throw new Error(\"Root '|' (OR) operator must have array type\")\n }\n result.push(or_(value.map(_filterCompile<T>)))\n break\n\n default:\n getter = pathGetterCompile(pth)\n if (isPlainObject(value)) {\n result.push(and_(Object.entries(value).map(([op, opv]) => filterCompileOp(getter, op as any, opv))))\n } else {\n result.push(filterCompileOp(getter, FilterOp.Eq, value))\n }\n\n break\n }\n }\n return and_(result)\n}\n\nfunction filterCompileOp(getter: PathGetter, op: FilterOp, value: any): FilterFn {\n let lower: string\n let regex: RegExp\n switch (op) {\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 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 case FilterOp.And:\n if (!Array.isArray(value)) {\n throw new Error(\"Root '&' (AND) operator must have array type\")\n }\n return and_(\n flattenDeep(\n value.map(v => {\n if (isPlainObject(v)) {\n return Object.entries(v).map(([op, opv]) => filterCompileOp(getter, op as any, opv))\n } else {\n return filterCompileOp(getter, FilterOp.Eq, v)\n }\n })\n )\n )\n\n case FilterOp.Or:\n if (!Array.isArray(value)) {\n throw new Error(\"Root '|' (OR) operator must have array type\")\n }\n return or_(\n flattenDeep(\n value.map(v => {\n if (isPlainObject(v)) {\n return Object.entries(v).map(([op, opv]) => filterCompileOp(getter, op as any, opv))\n } else {\n return filterCompileOp(getter, FilterOp.Eq, v)\n }\n })\n )\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 _ => true\n }\n\n return item => {\n for (const fn of fns) {\n if (!fn(item)) {\n return false\n }\n }\n return true\n }\n}\n\nfunction or_(fns: FilterFn[]): FilterFn {\n if (fns.length === 0) {\n return _ => true\n }\n\n return item => {\n for (const fn of fns) {\n if (fn(item)) {\n return true\n }\n }\n return false\n }\n}\n\nexport function filterMerge(...filters: any[]): any | undefined {\n let result: { [key: string]: any } | undefined = undefined\n\n for (const filter of filters) {\n if (filter == null) {\n continue\n }\n if (result == null) {\n result = deepClone(filter)\n } else {\n for (const [k, v] of Object.entries(filter)) {\n if (v === undefined) {\n delete result[k]\n continue\n }\n\n result[k] = deepClone(v)\n }\n }\n }\n\n return result as any\n}\n","import { Flatten, Primitive } from \"@ngutil/common\"\n\nimport { Model } from \"../model\"\n\nexport type GrouperFn<T = any> = (item: any) => Primitive\n\nexport type Grouper<T extends Model, F = Flatten<T>> = 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\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","import { flattenDeep, isEqual } from \"lodash\"\n\nimport { deepClone, isPlainObject } from \"@ngutil/common\"\n\nimport { Model } from \"../model\"\nimport { pathGetterCompile } from \"./path\"\n\nexport type SorterFn<T = any> = (a: T, b: T) => number\n\nexport const enum SortDirection {\n Asc = \"asc\",\n Desc = \"desc\"\n}\n\ntype Direction = SortDirection.Asc | SortDirection.Desc | \"asc\" | \"desc\"\ntype DirectionExtra = { dir: Direction; emptyFirst: boolean }\n\ntype _Sorter<F> = { [K in keyof F]: { [key in K]: Direction | DirectionExtra } }[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]: Direction | DirectionExtra }>\n\ntype NormalizedEntry = { path: string; isAsc: boolean; emptyFirst: 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>): 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 {\n return flattenDeep(\n (sorters as any).map((s: any) =>\n Object.entries(s).map(([k, v]) => {\n 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 DirectionExtra).dir || \"asc\").toLowerCase() === \"asc\",\n emptyFirst: (v as DirectionExtra).emptyFirst == null ? true : !!(v as DirectionExtra).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>): 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<T extends Model>(...sorters: Array<Sorter<T> | undefined | null>): Sorter<T> | undefined {\n let result: Sorter<T> | undefined\n\n for (const sorter of sorters) {\n if (sorter == null) {\n continue\n }\n if (result == null) {\n result = deepClone(sorter)\n continue\n }\n\n for (const sentry of sorter) {\n for (const [k, v] of Object.entries(sentry)) {\n const existing = (result as any).find((value: any) => value[k] != null)\n if (existing) {\n ;(existing as any)[k] = deepClone(v)\n } else {\n result.push({ [k]: deepClone(v) } as any)\n }\n }\n }\n }\n\n return result\n}\n","import { Model } from \"../model\"\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 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>): void {}\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>): void {}\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 result.length = slice.end\n\n return result.concat(array.slice(slice.end))\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 { groupBy, isEqual, sortBy } from \"lodash\"\nimport { Primitive } from \"utility-types\"\n\nimport { DeepReadonly, toSorted } from \"@ngutil/common\"\n\nimport { Model } from \"../model\"\nimport { Filter, filterBy } from \"./filter\"\nimport { Query, QueryResult } from \"./query\"\nimport { Slice } from \"./slice\"\nimport { Sorter } 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>(query: Query<T>, previous?: QueryExecutor<T>): 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>>,\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 { TrackByFunction } from \"@angular/core\"\n\nimport { isEqual } from \"lodash\"\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 { 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 { BehaviorSubject, combineLatest, map, Observable } from \"rxjs\"\n\nimport { isEqual } from \"lodash\"\n\nimport { deepClone, deepFreeze, DeepReadonly } from \"@ngutil/common\"\n\nexport abstract class Property<T> extends BehaviorSubject<DeepReadonly<T> | undefined> {\n // readonly #signal: Signal<DeepReadonly<T> | undefined> = toSignal(this, { requireSync: true })\n\n set(value: T | undefined, clone: boolean = true) {\n if (!isEqual(this.value, value)) {\n if (value != null) {\n this.next(deepFreeze<T>(clone ? deepClone<T>(value) : value) as any)\n } else {\n this.next(undefined)\n }\n }\n }\n\n get() {\n return this.value\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 abstract update(other: T): void\n}\n\nexport abstract class PropertyCombined<T> {\n abstract readonly normal: Property<T>\n abstract readonly forced: Property<T>\n abstract readonly merged$: Observable<DeepReadonly<T> | undefined>\n}\n\nexport function mergedProperty(merger: (...items: any[]) => any, ...props: Observable<any>[]): Observable<any> {\n if (props.length > 1) {\n return combineLatest(props).pipe(map(values => deepFreeze(merger(...values))))\n } else {\n return props[0] as any\n }\n}\n","import { Observable } from \"rxjs\"\n\nimport { DeepReadonly } from \"@ngutil/common\"\n\nimport { filterMerge } from \"../../query\"\nimport { mergedProperty, Property, PropertyCombined } from \"./abstract\"\n\nexport class FilterProperty<T> extends Property<T> {\n override update(other: T): void {\n this.set(filterMerge((this as { value: any }).value, other) as any, false)\n }\n}\n\nexport class FilterCombined<T> extends PropertyCombined<T> {\n override normal = new FilterProperty<T>(undefined)\n override forced = new FilterProperty<T>(undefined)\n override merged$: Observable<DeepReadonly<T> | undefined> = mergedProperty(filterMerge, this.normal, this.forced)\n}\n","import { Observable } from \"rxjs\"\n\nimport { DeepReadonly } from \"@ngutil/common\"\n\nimport { sorterMerge } from \"../../query\"\nimport { mergedProperty, Property, PropertyCombined } from \"./abstract\"\n\nexport class SorterProperty<T> extends Property<T> {\n override update(other: T): void {\n this.set(sorterMerge((this as { value: any }).value, other as any) as any, false)\n }\n}\n\nexport class SorterCombined<T> extends PropertyCombined<T> {\n override normal = new SorterProperty<T>(undefined)\n override forced = new SorterProperty<T>(undefined)\n override merged$: Observable<DeepReadonly<T> | undefined> = mergedProperty(sorterMerge, this.normal, this.forced)\n}\n","import { Observable } from \"rxjs\"\n\nimport { DeepReadonly } from \"@ngutil/common\"\n\nimport { slimerMerge } from \"../../query\"\nimport { mergedProperty, Property, PropertyCombined } from \"./abstract\"\n\nexport class SlimerProperty<T> extends Property<T> {\n override update(other: T): void {\n this.set(slimerMerge((this as { value: any }).value, other) as any, false)\n }\n}\n\nexport class SlimerCombined<T> extends PropertyCombined<T> {\n override normal = new SlimerProperty<T>(undefined)\n override forced = new SlimerProperty<T>(undefined)\n override merged$: Observable<DeepReadonly<T> | undefined> = mergedProperty(slimerMerge, this.normal, this.forced)\n}\n","import { Observable } from \"rxjs\"\n\nimport { DeepReadonly } from \"@ngutil/common\"\n\nimport { grouperMerge } from \"../../query\"\nimport { mergedProperty, Property, PropertyCombined } from \"./abstract\"\n\nexport class GrouperProperty<T> extends Property<T> {\n override update(other: T): void {\n this.set(grouperMerge((this as { value: any }).value, other) as any, false)\n }\n}\n\nexport class GrouperCombined<T> extends PropertyCombined<T> {\n override normal = new GrouperProperty<T>(undefined)\n override forced = new GrouperProperty<T>(undefined)\n override merged$: Observable<DeepReadonly<T> | undefined> = mergedProperty(grouperMerge, this.normal, this.forced)\n}\n","import { DataSource as CdkDataSource, CollectionViewer } from \"@angular/cdk/collections\"\n\nimport {\n BehaviorSubject,\n combineLatest,\n debounceTime,\n distinctUntilChanged,\n finalize,\n map,\n Observable,\n of,\n ReplaySubject,\n shareReplay,\n Subject,\n Subscriber,\n switchMap,\n take,\n takeUntil,\n tap\n} from \"rxjs\"\n\nimport { isEqual, merge } from \"lodash\"\n\nimport { ConnectProtocol, deepClone, deepFreeze, DeepReadonly } from \"@ngutil/common\"\n\nimport type { Model, ModelRef } from \"../model\"\nimport type { DataProvider } from \"../provider/provider\"\nimport type { Filter, Grouper, Query, Slice, Slimer, Sorter } from \"../query\"\nimport { type CollectionStore, MemoryStore, type PartialCollection } from \"../store\"\nimport { FilterCombined, GrouperCombined, SlimerCombined, SorterCombined } from \"./properties\"\n\nconst DEBOUNCE_TIME = 50\n\ntype DSQuery<T extends Model> = Query<T> & { slice: DeepReadonly<Slice> }\n\nexport class DataSource<T extends Model> extends CdkDataSource<T | undefined> implements ConnectProtocol {\n readonly busy$ = new BehaviorSubject<boolean>(false)\n readonly total$ = new BehaviorSubject<number | undefined>(undefined)\n\n readonly filter = new FilterCombined<Filter<T>>()\n readonly sorter = new SorterCombined<Sorter<T>>()\n readonly slimer = new SlimerCombined<Slimer<T>>()\n readonly grouper = new GrouperCombined<Grouper<T>>()\n\n readonly #queryBase = combineLatest({\n filter: this.filter.merged$,\n sorter: this.sorter.merged$,\n slimer: this.slimer.merged$,\n grouper: this.grouper.merged$\n }).pipe(shareReplay(1))\n\n readonly #slice = new ReplaySubject<Slice>(1)\n readonly slice$: Observable<Slice> = this.#slice.pipe(\n distinctUntilChanged(isEqual),\n map(slice => deepFreeze(deepClone(slice))),\n shareReplay(1)\n )\n\n readonly #reload = new Subject<void>()\n readonly reset$: Observable<unknown> = merge(this.#queryBase, this.#reload).pipe(\n tap(() => this.#setBusy(true)),\n switchMap(() => this.store.clear()),\n shareReplay(1)\n )\n\n readonly query$: Observable<DSQuery<T>> = combineLatest({ base: this.#queryBase, slice: this.slice$ }).pipe(\n map(({ base, slice }) => {\n return { ...base, slice }\n }),\n shareReplay(1)\n )\n\n readonly items$: Observable<PartialCollection<T>> = combineLatest({ query: this.query$, reset: this.reset$ }).pipe(\n tap(() => this.#setBusy(true)),\n debounceTime(DEBOUNCE_TIME),\n switchMap(({ query }) =>\n // TODO: maybe hasSlice + getSlice\n this.store.getSlice(query.slice).pipe(\n switchMap(items => {\n // TODO: endReached\n const hasMissing = items.some(v => v == null)\n if (hasMissing) {\n return this.provider.queryList(query).pipe(\n switchMap(result => {\n if (result.total != null) {\n this.total$.next(result.total)\n }\n return this.store.insertSlice(query.slice, result.items)\n })\n )\n } else {\n return of(items)\n }\n })\n )\n ),\n finalize(() => this.#setBusy(false)),\n shareReplay(1)\n )\n\n readonly store: CollectionStore<T>\n constructor(\n public readonly provider: DataProvider<T>,\n store?: CollectionStore<T>\n ) {\n super()\n if (store == null) {\n store = new MemoryStore()\n }\n this.store = store\n }\n\n setSlice(slice: Slice) {\n this.#slice.next(slice)\n return this\n }\n\n realod() {\n this.#reload.next()\n }\n\n getItem(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 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 switchMap(query => this.provider.queryItem(refn, query)),\n switchMap(item =>\n item != null ? this.store.updateOrInsert(refn, item, insertPosition).pipe(map(() => item)) : of(item)\n ),\n take(1)\n )\n }\n\n #storeFirst<X>(\n storeFn: (query: Query<T>) => Observable<X>,\n selfFn: (query: Query<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.provider.isAsync) {\n if (this.busy$.value !== busy) {\n this.busy$.next(busy)\n }\n }\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 new Observable((subscriber: Subscriber<readonly (T | undefined)[]>) => {\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 { DataSource as CdkDataSource, CollectionViewer } from \"@angular/cdk/collections\"\nimport { Directive, Input, OnDestroy, Optional } from \"@angular/core\"\nimport { toSignal } from \"@angular/core/rxjs-interop\"\n\nimport {\n combineLatest,\n finalize,\n Observable,\n of,\n ReplaySubject,\n share,\n Subject,\n Subscription,\n switchMap,\n takeUntil,\n tap,\n throwError\n} from \"rxjs\"\n\nimport { Busy, 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 DataSourceInput<T extends Model> = any\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 standalone: true,\n selector: \"[nuDataSource]\",\n exportAs: \"nuDataSource\"\n})\nexport class DataSourceProxy<T extends Model = Model>\n extends CdkDataSource<T | undefined>\n implements OnDestroy, ConnectProtocol\n{\n @Input({ required: true, alias: \"nuDataSource\" })\n set source(value: DataSourceInput<T>) {\n this.#valueSub?.unsubscribe()\n this.#valueSub = coerceDataSource<T>(value)\n .pipe(\n tap(v => {\n if (v == null) {\n throw new Error(\"Missing DataSource\")\n }\n })\n )\n .subscribe(this.source$)\n }\n #valueSub?: Subscription\n readonly source$ = new ReplaySubject<DataSource<T>>(1)\n\n readonly items$ = this.source$.pipe(\n switchMap(value => value.items$),\n share()\n )\n\n readonly busy$ = this.source$.pipe(\n switchMap(value => value.busy$),\n share()\n )\n readonly isBusy = toSignal(this.busy$, { rejectErrors: true, initialValue: false })\n\n @Input()\n set filter(value: Filter<T>) {\n this.#filter.next(value)\n }\n readonly #filter = new ReplaySubject<Filter<T>>(1)\n // TODO: maybe mergedFilter$ = this.value$.pipe(switchMap(value => value.filter.merged$))\n\n @Input()\n set sorter(value: Sorter<T>) {\n this.#sorter.next(value)\n }\n readonly #sorter = new ReplaySubject<Sorter<T>>(1)\n\n @Input()\n set grouper(value: Grouper<T>) {\n this.#grouper.next(value)\n }\n readonly #grouper = new ReplaySubject<Grouper<T>>(1)\n\n @Input()\n set slimer(value: Slimer<T>) {\n this.#slimer.next(value)\n }\n readonly #slimer = new ReplaySubject<Slimer<T>>(1)\n\n readonly #subs = new Subscription()\n\n constructor(@Optional() busy?: Busy<any>) {\n super()\n\n if (busy != null) {\n this.#subs.add(busy.connect(this.busy$).subscribe())\n }\n\n this.#subs.add(\n combineLatest({ src: this.source$, filter: this.#filter }).subscribe(({ src, filter }) => {\n src.filter.forced.set(filter)\n })\n )\n\n this.#subs.add(\n combineLatest({ src: this.source$, sorter: this.#sorter }).subscribe(({ src, sorter }) => {\n src.sorter.forced.set(sorter)\n })\n )\n\n this.#subs.add(\n combineLatest({ src: this.source$, grouper: this.#grouper }).subscribe(({ src, grouper }) => {\n src.grouper.forced.set(grouper)\n })\n )\n\n this.#subs.add(\n combineLatest({ src: this.source$, slimer: this.#slimer }).subscribe(({ src, slimer }) => {\n src.slimer.forced.set(slimer)\n })\n )\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.source$.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 this.#subs.unsubscribe()\n }\n}\n\nfunction coerceDataSource<T extends Model>(value: DataSourceInput<T>): Observable<DataSource<T>> {\n if (value instanceof DataSourceProxy) {\n return value.source$\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 type { Observable } from \"rxjs\"\n\nimport type { Model, ModelMeta, ModelRefNorm } from \"../model\"\nimport type { Query, QueryResult } from \"../query\"\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 * Query items by the given request\n */\n abstract queryList(request: Query<T>): Observable<QueryResult<T>>\n\n /**\n * Query exactly one item by the given request\n */\n abstract queryItem(ref: ModelRefNorm, request: Query<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: Query<T>): Observable<number | undefined>\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 { map, Observable } from \"rxjs\"\n\nimport { Model, ModelMeta, ModelMetaInput, ModelRefNorm } from \"../model\"\nimport { Query, queryExecutor, QueryExecutor, QueryResult } 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: Query<T>): QueryExecutor<T> {\n return (this.#executor = queryExecutor(request, this.#executor))\n }\n\n override queryList(request: Query<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: Query<T>): Observable<T | undefined> {\n return this.queryList(request).pipe(map(list => list.items.find(ref.toFilter())))\n }\n\n override queryPosition(ref: ModelRefNorm, request: Query<T>): Observable<number | undefined> {\n return this.queryList(request).pipe(map(list => list.items.findIndex(ref.toFilter())))\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 } 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 this.items$ = src\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["sortBy","groupBy","CdkDataSource"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngutil-data.mjs","sources":["../../../../packages/data/src/query/path.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/executor.ts","../../../../packages/data/src/model/meta.ts","../../../../packages/data/src/store/collection-store.ts","../../../../packages/data/src/store/memory-store.ts","../../../../packages/data/src/source/properties/abstract.ts","../../../../packages/data/src/source/properties/filter.ts","../../../../packages/data/src/source/properties/sorter.ts","../../../../packages/data/src/source/properties/slimer.ts","../../../../packages/data/src/source/properties/grouper.ts","../../../../packages/data/src/source/source.ts","../../../../packages/data/src/source/proxy.directive.ts","../../../../packages/data/src/provider/provider.ts","../../../../packages/data/src/provider/local.ts","../../../../packages/data/src/provider/array.ts","../../../../packages/data/src/provider/observable.ts","../../../../packages/data/src/ngutil-data.ts"],"sourcesContent":["import { flattenDepth } from \"lodash\"\n\ntype GetterFn = (srcs: any[]) => any[]\nexport type PathGetter<T = any, R = any> = (obj: T) => R[]\n\nexport function pathGetterCompile(path: string): PathGetter {\n if (!path || path.length === 0) {\n throw new Error(\"Empty path\")\n }\n\n return path.split(\".\").reduce<GetterFn>(\n (parent, part) => makeGetter(part, parent),\n (obj: any) => (obj == null ? [] : [obj])\n )\n}\n\nconst IsNumber = /^\\d+$/\n\nfunction makeGetter(part: string, parent: GetterFn): GetterFn {\n if (part === \"*\") {\n return obj => flattenDepth(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","import { flattenDeep, intersection } from \"lodash\"\n\nimport { AsPrimitive, deepClone, isPlainObject, MaxRecursion } from \"@ngutil/common\"\n\nimport { Model } from \"../model\"\nimport { PathGetter, pathGetterCompile } from \"./path\"\n\nexport const 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 Regexp = \"~\",\n RegexpInsesitive = \"~*\",\n Or = \"|\",\n And = \"&\"\n}\n\nexport const OPERATORS: Array<string> = [\n FilterOp.Eq,\n FilterOp.EqStrict,\n FilterOp.EqInsesitive,\n FilterOp.Neq,\n FilterOp.NeqStrict,\n FilterOp.NeqInsesitive,\n FilterOp.Gt,\n FilterOp.GtInsesitive,\n FilterOp.Gte,\n FilterOp.GteInsesitive,\n FilterOp.Lt,\n FilterOp.LtInsesitive,\n FilterOp.Lte,\n FilterOp.LteInsesitive,\n FilterOp.Contains,\n FilterOp.ContainsInsesitive,\n FilterOp.StartsWith,\n FilterOp.StartsWithInsesitive,\n FilterOp.EndsWith,\n FilterOp.EndsWithInsesitive,\n FilterOp.Regexp,\n FilterOp.RegexpInsesitive,\n FilterOp.Or,\n FilterOp.And\n]\n\nexport function asOperators(value: any): Array<{ op: FilterOp; value: any }> {\n const ops = intersection(Object.keys(value), OPERATORS) as FilterOp[]\n if (ops.length > 0) {\n return ops.map(op => {\n return { op, value: value[op] }\n })\n } else {\n return [{ op: FilterOp.Eq, value }]\n }\n}\n\n// export type Filter<T extends Model> = _Filter<Flatten<T>, [], MaxRecursion>\n// TODO: fix recursion\nexport type Filter<T extends Model> = { [key: string]: any }\n\ntype _Filter<F, P extends number[], D extends number> = P[\"length\"] extends D ? never : _ObjectFilter<F, P, D>\n\ntype _ObjectFilter<F, P extends number[], D extends number> = P[\"length\"] extends D\n ? never\n : { [K in keyof F]?: Operators<F[K], P, D> }\n\ntype RootOr<F, P extends number[], D extends number> = P[\"length\"] extends D\n ? never\n : { [FilterOp.Or]: Array<_Filter<F, [...P, 0], D>> | undefined }\n\ntype RootAnd<F, P extends number[], D extends number> = P[\"length\"] extends D\n ? never\n : { [FilterOp.And]: Array<_Filter<F, [...P, 0], D>> | undefined }\n\nexport type Operators<T, P extends number[], D extends number = MaxRecursion> = P[\"length\"] extends D\n ? never\n : SimpleOperators<T>\n\ntype LocalOr<T, P extends number[], D extends number> = P[\"length\"] extends D\n ? never\n : { [FilterOp.Or]: Array<Operators<T, [...P, 0], D>> | undefined }\n\ntype LocalAnd<T, P extends number[], D extends number> = P[\"length\"] extends D\n ? never\n : { [FilterOp.And]: Array<Operators<T, [...P, 0], D>> | undefined }\n\ntype SimpleOperators<T> =\n | EqStrict<T>\n | NeqStrict<T>\n | Eq<T>\n | Neq<T>\n | Gt<T>\n | Gte<T>\n | Lt<T>\n | Lte<T>\n | Contains<T>\n | StartsWith<T>\n | 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 EndsWith<T> = Operator<T, string, FilterOp.EndsWith, FilterOp.EndsWithInsesitive>\ntype Regexp<T> = Operator<T, string, FilterOp.Regexp, FilterOp.RegexpInsesitive, RegExp>\n\ntype Operator<T, R, OP extends string, OPI extends string = never, ET = never> =\n | (T extends R ? { [k in OP]: T | ET | R } : never)\n | (T extends string ? (OPI extends never ? never : { [k in OPI]: string }) : never)\n\nexport type FilterFn<T = any> = (item: T) => boolean\n\n/**\n * @example\n * ```ts\n * items.filter(filterBy({id: 42}))\n * ```\n */\nexport function filterBy<T extends Model>(filters: Filter<T>): FilterFn<T> {\n return _filterCompile<T>(filters)\n}\n\n// TODO: Normalize filter\n// type _Filter = { path: string; op: FilterOp; value: any }\n// type _Or = { \"|\": Array<_Filter> }\n// type _And = { \"&\": Array<_Filter> }\n// export type NormalizedFilter = _Or | _And\n\n// /**\n// * @example\n// * ```ts\n// * normalizeFilter({id: 2, name: {\"=*\": \"AnyName\"}}) -> {id: {\"==\": 2}, name: {\"=*\": \"AnyName\"}}}\n// * normalizeFilter({id: {\">\": 0, \"<\": 10}}) -> {\"&\": [{id: {\">\": 0}}, {id: {\"<\": 10}}]}\n// * ```\n// */\n// export function normalizeFilter<T extends Model>(filters: Filters<T>): Filters<T> {\n// return _normalizeFilter(filters)\n// }\n\n// function _normalizeFilter(filters: any, path?: string): any {\n// const result = {} as any\n\n// for (const [path, v] of Object.entries(filters)) {\n// switch (path) {\n// case FilterOp.And:\n// if (!Array.isArray(v)) {\n// throw new Error(\"The '&' (AND) operator must have array type\")\n// }\n\n// if (!result[FilterOp.And]) {\n// result[FilterOp.And] = []\n// }\n\n// result[FilterOp.And] = result[FilterOp.And].concat(v.map(f => _normalizeFilter(f)))\n// break\n\n// case FilterOp.Or:\n// if (!Array.isArray(v)) {\n// throw new Error(\"The '|' (OR) operator must have array type\")\n// }\n\n// if (!result[FilterOp.Or]) {\n// result[FilterOp.Or] = []\n// }\n\n// result[FilterOp.Or] = result[FilterOp.Or].concat(v.map(f => _normalizeFilter(f)))\n// break\n\n// default:\n// for (const entry of asOperators(v)) {\n// switch (entry.op) {\n// case FilterOp.And:\n// if (!result[FilterOp.And]) {\n// result[FilterOp.And] = []\n// }\n\n// result[FilterOp.And] = result[FilterOp.And].concat(\n// entry.value.map((v: any) => _normalizeFilter(v, path))\n// )\n// break\n\n// case FilterOp.Or:\n// if (!result[FilterOp.Or]) {\n// result[FilterOp.Or] = []\n// }\n\n// result[FilterOp.Or] = result[FilterOp.Or].concat(\n// entry.value.map((v: any) => _normalizeFilter(v, path))\n// )\n// break\n\n// default:\n// if (!result[FilterOp.And]) {\n// result[FilterOp.And] = []\n// }\n\n// result[FilterOp.And].push({ path, ...entry })\n// }\n// }\n// }\n// }\n\n// return result\n// }\n\nfunction _filterCompile<T extends Model>(filters: Filter<T>): FilterFn<T> {\n let getter: PathGetter\n const result: FilterFn<T>[] = []\n for (const [pth, value] of Object.entries(filters)) {\n switch (pth) {\n case FilterOp.And:\n if (!Array.isArray(value)) {\n throw new Error(\"Root '&' (AND) operator must have array type\")\n }\n result.splice(result.length, 0, ...value.map(_filterCompile<T>))\n break\n\n case FilterOp.Or:\n if (!Array.isArray(value)) {\n throw new Error(\"Root '|' (OR) operator must have array type\")\n }\n result.push(or_(value.map(_filterCompile<T>)))\n break\n\n default:\n getter = pathGetterCompile(pth)\n if (isPlainObject(value)) {\n result.push(and_(Object.entries(value).map(([op, opv]) => filterCompileOp(getter, op as any, opv))))\n } else {\n result.push(filterCompileOp(getter, FilterOp.Eq, value))\n }\n\n break\n }\n }\n return and_(result)\n}\n\nfunction filterCompileOp(getter: PathGetter, op: FilterOp, value: any): FilterFn {\n let lower: string\n let regex: RegExp\n switch (op) {\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 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 case FilterOp.And:\n if (!Array.isArray(value)) {\n throw new Error(\"Root '&' (AND) operator must have array type\")\n }\n return and_(\n flattenDeep(\n value.map(v => {\n if (isPlainObject(v)) {\n return Object.entries(v).map(([op, opv]) => filterCompileOp(getter, op as any, opv))\n } else {\n return filterCompileOp(getter, FilterOp.Eq, v)\n }\n })\n )\n )\n\n case FilterOp.Or:\n if (!Array.isArray(value)) {\n throw new Error(\"Root '|' (OR) operator must have array type\")\n }\n return or_(\n flattenDeep(\n value.map(v => {\n if (isPlainObject(v)) {\n return Object.entries(v).map(([op, opv]) => filterCompileOp(getter, op as any, opv))\n } else {\n return filterCompileOp(getter, FilterOp.Eq, v)\n }\n })\n )\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 _ => true\n }\n\n return item => {\n for (const fn of fns) {\n if (!fn(item)) {\n return false\n }\n }\n return true\n }\n}\n\nfunction or_(fns: FilterFn[]): FilterFn {\n if (fns.length === 0) {\n return _ => true\n }\n\n return item => {\n for (const fn of fns) {\n if (fn(item)) {\n return true\n }\n }\n return false\n }\n}\n\nexport function filterMerge(...filters: any[]): any | undefined {\n let result: { [key: string]: any } | undefined = undefined\n\n for (const filter of filters) {\n if (filter == null) {\n continue\n }\n if (result == null) {\n result = deepClone(filter)\n } else {\n for (const [k, v] of Object.entries(filter)) {\n if (v === undefined) {\n delete result[k]\n continue\n }\n\n result[k] = deepClone(v)\n }\n }\n }\n\n return result as any\n}\n","import { Flatten, Primitive } from \"@ngutil/common\"\n\nimport { Model } from \"../model\"\n\nexport type GrouperFn<T = any> = (item: any) => Primitive\n\nexport type Grouper<T extends Model, F = Flatten<T>> = 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\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","import { flattenDeep, isEqual } from \"lodash\"\n\nimport { deepClone, isPlainObject } from \"@ngutil/common\"\n\nimport { Model } from \"../model\"\nimport { pathGetterCompile } from \"./path\"\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 }>\n\ntype NormalizedEntry = { path: string; isAsc: boolean; emptyFirst: 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>): 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 {\n return flattenDeep(\n (sorters as any).map((s: any) =>\n Object.entries(s).map(([k, v]) => {\n 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>): 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<T extends Model>(...sorters: Array<Sorter<T> | undefined | null>): Sorter<T> | undefined {\n let result: Sorter<T> | undefined\n\n for (const sorter of sorters) {\n if (sorter == null) {\n continue\n }\n if (result == null) {\n result = deepClone(sorter)\n continue\n }\n\n for (const sentry of sorter) {\n for (const [k, v] of Object.entries(sentry)) {\n const existing = (result as any).find((value: any) => value[k] != null)\n if (existing) {\n ;(existing as any)[k] = deepClone(v)\n } else {\n result.push({ [k]: deepClone(v) } as any)\n }\n }\n }\n }\n\n return result\n}\n","import { Model } from \"../model\"\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 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>): void {}\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>): void {}\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 result.length = slice.end\n\n return result.concat(array.slice(slice.end))\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 { groupBy, isEqual, sortBy } from \"lodash\"\nimport { Primitive } from \"utility-types\"\n\nimport { DeepReadonly, toSorted } from \"@ngutil/common\"\n\nimport { Model } from \"../model\"\nimport { Filter, filterBy } from \"./filter\"\nimport { Query, QueryResult } from \"./query\"\nimport { Slice } from \"./slice\"\nimport { Sorter } 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>(query: Query<T>, previous?: QueryExecutor<T>): 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>>,\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 { TrackByFunction } from \"@angular/core\"\n\nimport { isEqual } from \"lodash\"\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 { 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 { BehaviorSubject, combineLatest, map, Observable } from \"rxjs\"\n\nimport { isEqual } from \"lodash\"\n\nimport { deepClone, deepFreeze, DeepReadonly } from \"@ngutil/common\"\n\nexport abstract class Property<T> extends BehaviorSubject<DeepReadonly<T> | undefined> {\n // readonly #signal: Signal<DeepReadonly<T> | undefined> = toSignal(this, { requireSync: true })\n\n set(value: T | undefined, clone: boolean = true) {\n if (!isEqual(this.value, value)) {\n if (value != null) {\n this.next(deepFreeze<T>(clone ? deepClone<T>(value) : value) as any)\n } else {\n this.next(undefined)\n }\n }\n }\n\n get() {\n return this.value\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 abstract update(other: T): void\n}\n\nexport abstract class PropertyCombined<T> {\n abstract readonly normal: Property<T>\n abstract readonly forced: Property<T>\n abstract readonly merged$: Observable<DeepReadonly<T> | undefined>\n}\n\nexport function mergedProperty(merger: (...items: any[]) => any, ...props: Observable<any>[]): Observable<any> {\n if (props.length > 1) {\n return combineLatest(props).pipe(map(values => deepFreeze(merger(...values))))\n } else {\n return props[0] as any\n }\n}\n","import { Observable } from \"rxjs\"\n\nimport { DeepReadonly } from \"@ngutil/common\"\n\nimport { filterMerge } from \"../../query\"\nimport { mergedProperty, Property, PropertyCombined } from \"./abstract\"\n\nexport class FilterProperty<T> extends Property<T> {\n override update(other: T): void {\n this.set(filterMerge((this as { value: any }).value, other) as any, false)\n }\n}\n\nexport class FilterCombined<T> extends PropertyCombined<T> {\n override normal = new FilterProperty<T>(undefined)\n override forced = new FilterProperty<T>(undefined)\n override merged$: Observable<DeepReadonly<T> | undefined> = mergedProperty(filterMerge, this.normal, this.forced)\n}\n","import { Observable } from \"rxjs\"\n\nimport { DeepReadonly } from \"@ngutil/common\"\n\nimport { sorterMerge } from \"../../query\"\nimport { mergedProperty, Property, PropertyCombined } from \"./abstract\"\n\nexport class SorterProperty<T> extends Property<T> {\n override update(other: T): void {\n this.set(sorterMerge((this as { value: any }).value, other as any) as any, false)\n }\n}\n\nexport class SorterCombined<T> extends PropertyCombined<T> {\n override normal = new SorterProperty<T>(undefined)\n override forced = new SorterProperty<T>(undefined)\n override merged$: Observable<DeepReadonly<T> | undefined> = mergedProperty(sorterMerge, this.normal, this.forced)\n}\n","import { Observable } from \"rxjs\"\n\nimport { DeepReadonly } from \"@ngutil/common\"\n\nimport { slimerMerge } from \"../../query\"\nimport { mergedProperty, Property, PropertyCombined } from \"./abstract\"\n\nexport class SlimerProperty<T> extends Property<T> {\n override update(other: T): void {\n this.set(slimerMerge((this as { value: any }).value, other) as any, false)\n }\n}\n\nexport class SlimerCombined<T> extends PropertyCombined<T> {\n override normal = new SlimerProperty<T>(undefined)\n override forced = new SlimerProperty<T>(undefined)\n override merged$: Observable<DeepReadonly<T> | undefined> = mergedProperty(slimerMerge, this.normal, this.forced)\n}\n","import { Observable } from \"rxjs\"\n\nimport { DeepReadonly } from \"@ngutil/common\"\n\nimport { grouperMerge } from \"../../query\"\nimport { mergedProperty, Property, PropertyCombined } from \"./abstract\"\n\nexport class GrouperProperty<T> extends Property<T> {\n override update(other: T): void {\n this.set(grouperMerge((this as { value: any }).value, other) as any, false)\n }\n}\n\nexport class GrouperCombined<T> extends PropertyCombined<T> {\n override normal = new GrouperProperty<T>(undefined)\n override forced = new GrouperProperty<T>(undefined)\n override merged$: Observable<DeepReadonly<T> | undefined> = mergedProperty(grouperMerge, this.normal, this.forced)\n}\n","import { DataSource as CdkDataSource, CollectionViewer } from \"@angular/cdk/collections\"\n\nimport {\n BehaviorSubject,\n combineLatest,\n concatMap,\n debounceTime,\n distinctUntilChanged,\n finalize,\n map,\n Observable,\n of,\n ReplaySubject,\n shareReplay,\n Subject,\n Subscriber,\n switchMap,\n take,\n takeUntil,\n tap\n} from \"rxjs\"\n\nimport { isEqual, merge } from \"lodash\"\n\nimport { ConnectProtocol, deepClone, deepFreeze, DeepReadonly } from \"@ngutil/common\"\n\nimport type { Model, ModelRef } from \"../model\"\nimport type { DataProvider } from \"../provider/provider\"\nimport type { Filter, Grouper, Query, Slice, Slimer, Sorter } from \"../query\"\nimport { type CollectionStore, MemoryStore, type PartialCollection } from \"../store\"\nimport { FilterCombined, GrouperCombined, SlimerCombined, SorterCombined } from \"./properties\"\n\nconst DEBOUNCE_TIME = 50\n\ntype DSQuery<T extends Model> = Query<T> & { slice: DeepReadonly<Slice> }\n\nexport class DataSource<T extends Model> extends CdkDataSource<T | undefined> implements ConnectProtocol {\n readonly busy$ = new BehaviorSubject<boolean>(false)\n readonly total$ = new BehaviorSubject<number | undefined>(undefined)\n\n readonly filter = new FilterCombined<Filter<T>>()\n readonly sorter = new SorterCombined<Sorter<T>>()\n readonly slimer = new SlimerCombined<Slimer<T>>()\n readonly grouper = new GrouperCombined<Grouper<T>>()\n\n readonly #queryBase = combineLatest({\n filter: this.filter.merged$,\n sorter: this.sorter.merged$,\n slimer: this.slimer.merged$,\n grouper: this.grouper.merged$\n }).pipe(shareReplay(1))\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(1)\n )\n\n readonly #reload = new Subject<void>()\n readonly reset$: Observable<unknown> = merge(this.#queryBase, this.#reload).pipe(\n tap(() => this.#setBusy(true)),\n switchMap(() => this.store.clear()),\n shareReplay(1)\n )\n\n readonly query$: Observable<DSQuery<T>> = combineLatest({ base: this.#queryBase, slice: this.slice$ }).pipe(\n map(({ base, slice }) => {\n return { ...base, slice }\n }),\n shareReplay(1)\n )\n\n readonly items$: Observable<PartialCollection<T>> = combineLatest({ query: this.query$, reset: this.reset$ }).pipe(\n tap(() => this.#setBusy(true)),\n debounceTime(DEBOUNCE_TIME),\n switchMap(({ query }) => {\n return this.store.hasSlice(query.slice).pipe(\n switchMap(hasSlice => {\n if (hasSlice) {\n return this.store.getSlice(query.slice)\n } else {\n return this.provider.queryList(query).pipe(\n switchMap(result => {\n if (result.total != null) {\n this.total$.next(result.total)\n }\n return this.store.insertSlice(query.slice, result.items)\n }),\n take(1)\n )\n }\n })\n )\n }),\n finalize(() => this.#setBusy(false)),\n shareReplay(1)\n )\n\n readonly store: CollectionStore<T>\n constructor(\n public readonly provider: DataProvider<T>,\n store?: CollectionStore<T>\n ) {\n super()\n if (store == null) {\n store = new MemoryStore()\n }\n this.store = store\n }\n\n setSlice(slice: Slice) {\n this.#slice.next(slice)\n return this\n }\n\n all() {\n return this.setSlice({start: 0, end: Infinity})\n }\n\n realod() {\n this.#reload.next()\n }\n\n getItem(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 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 switchMap(query => this.provider.queryItem(refn, query)),\n switchMap(item =>\n item != null ? this.store.updateOrInsert(refn, item, insertPosition).pipe(map(() => item)) : of(item)\n ),\n take(1)\n )\n }\n\n #storeFirst<X>(\n storeFn: (query: Query<T>) => Observable<X>,\n selfFn: (query: Query<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.provider.isAsync) {\n if (this.busy$.value !== busy) {\n this.busy$.next(busy)\n }\n }\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 new Observable((subscriber: Subscriber<readonly (T | undefined)[]>) => {\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 { DataSource as CdkDataSource, CollectionViewer } from \"@angular/cdk/collections\"\nimport { Directive, Input, OnDestroy, Optional } from \"@angular/core\"\nimport { toSignal } from \"@angular/core/rxjs-interop\"\n\nimport {\n combineLatest,\n finalize,\n Observable,\n of,\n ReplaySubject,\n share,\n Subject,\n Subscription,\n switchMap,\n takeUntil,\n tap,\n throwError\n} from \"rxjs\"\n\nimport { Busy, 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 DataSourceInput<T extends Model> = any\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 standalone: true,\n selector: \"[nuDataSource]\",\n exportAs: \"nuDataSource\"\n})\nexport class DataSourceProxy<T extends Model = Model>\n extends CdkDataSource<T | undefined>\n implements OnDestroy, ConnectProtocol\n{\n @Input({ required: true, alias: \"nuDataSource\" })\n set source(value: DataSourceInput<T>) {\n this.#valueSub?.unsubscribe()\n this.#valueSub = coerceDataSource<T>(value)\n .pipe(\n tap(v => {\n if (v == null) {\n throw new Error(\"Missing DataSource\")\n }\n })\n )\n .subscribe(this.source$)\n }\n #valueSub?: Subscription\n readonly source$ = new ReplaySubject<DataSource<T>>(1)\n\n readonly items$ = this.source$.pipe(\n switchMap(value => value.items$),\n share()\n )\n\n readonly busy$ = this.source$.pipe(\n switchMap(value => value.busy$),\n share()\n )\n readonly isBusy = toSignal(this.busy$, { rejectErrors: true, initialValue: false })\n\n @Input()\n set filter(value: Filter<T>) {\n this.#filter.next(value)\n }\n readonly #filter = new ReplaySubject<Filter<T>>(1)\n // TODO: maybe mergedFilter$ = this.value$.pipe(switchMap(value => value.filter.merged$))\n\n @Input()\n set sorter(value: Sorter<T>) {\n this.#sorter.next(value)\n }\n readonly #sorter = new ReplaySubject<Sorter<T>>(1)\n\n @Input()\n set grouper(value: Grouper<T>) {\n this.#grouper.next(value)\n }\n readonly #grouper = new ReplaySubject<Grouper<T>>(1)\n\n @Input()\n set slimer(value: Slimer<T>) {\n this.#slimer.next(value)\n }\n readonly #slimer = new ReplaySubject<Slimer<T>>(1)\n\n readonly #subs = new Subscription()\n\n constructor(@Optional() busy?: Busy<any>) {\n super()\n\n if (busy != null) {\n this.#subs.add(busy.connect(this.busy$).subscribe())\n }\n\n this.#subs.add(\n combineLatest({ src: this.source$, filter: this.#filter }).subscribe(({ src, filter }) => {\n src.filter.forced.set(filter)\n })\n )\n\n this.#subs.add(\n combineLatest({ src: this.source$, sorter: this.#sorter }).subscribe(({ src, sorter }) => {\n src.sorter.forced.set(sorter)\n })\n )\n\n this.#subs.add(\n combineLatest({ src: this.source$, grouper: this.#grouper }).subscribe(({ src, grouper }) => {\n src.grouper.forced.set(grouper)\n })\n )\n\n this.#subs.add(\n combineLatest({ src: this.source$, slimer: this.#slimer }).subscribe(({ src, slimer }) => {\n src.slimer.forced.set(slimer)\n })\n )\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.source$.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 this.#subs.unsubscribe()\n }\n}\n\nfunction coerceDataSource<T extends Model>(value: DataSourceInput<T>): Observable<DataSource<T>> {\n if (value instanceof DataSourceProxy) {\n return value.source$\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 type { Observable } from \"rxjs\"\nimport { of } from \"rxjs\"\n\nimport type { Model, ModelMeta, ModelRefNorm } from \"../model\"\nimport type { Query, QueryResult, Slice } from \"../query\"\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 * Query items by the given request\n */\n abstract queryList(request: Query<T>): Observable<QueryResult<T>>\n\n /**\n * Query exactly one item by the given request\n */\n abstract queryItem(ref: ModelRefNorm, request: Query<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: Query<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 /**\n * @returns New data source instance\n */\n toDataSource(store?: CollectionStore<T>): DataSource<T> {\n return new DataSource(this, store)\n }\n}\n","import { map, Observable, take } from \"rxjs\"\n\nimport { Model, ModelMeta, ModelMetaInput, ModelRefNorm } from \"../model\"\nimport { Query, queryExecutor, QueryExecutor, QueryResult, 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: Query<T>): QueryExecutor<T> {\n return (this.#executor = queryExecutor(request, this.#executor))\n }\n\n override queryList(request: Query<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: Query<T>): Observable<T | undefined> {\n return this.queryList(request).pipe(map(list => list.items.find(ref.toFilter())))\n }\n\n override queryPosition(ref: ModelRefNorm, request: Query<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(take(1), map(items => sliceClamp(slice, {start: 0, end: items.length})))\n }\n}\n","import { type Observable, of } from \"rxjs\"\n\nimport type { Model, ModelMetaInput } from \"../model\"\nimport { LocalProvider } from \"./local\"\n\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 } 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 this.items$ = src\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["sortBy","groupBy","CdkDataSource"],"mappings":";;;;;;;;;AAKM,SAAU,iBAAiB,CAAC,IAAY,EAAA;IAC1C,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AAC5B,QAAA,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAA;KAChC;IAED,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CACzB,CAAC,MAAM,EAAE,IAAI,KAAK,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,EAC1C,CAAC,GAAQ,MAAM,GAAG,IAAI,IAAI,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAC3C,CAAA;AACL,CAAC;AAED,MAAM,QAAQ,GAAG,OAAO,CAAA;AAExB,SAAS,UAAU,CAAC,IAAY,EAAE,MAAgB,EAAA;AAC9C,IAAA,IAAI,IAAI,KAAK,GAAG,EAAE;AACd,QAAA,OAAO,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;KAC7C;SAAM;AACH,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;AACrD,QAAA,OAAO,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAA;KACvE;AACL;;ACSO,MAAM,SAAS,GAAkB;;;;;;;;;;;;;;;;;;;;;;;;;CAyBvC,CAAA;AAEK,SAAU,WAAW,CAAC,KAAU,EAAA;AAClC,IAAA,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,SAAS,CAAe,CAAA;AACrE,IAAA,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;AAChB,QAAA,OAAO,GAAG,CAAC,GAAG,CAAC,EAAE,IAAG;YAChB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,CAAA;AACnC,SAAC,CAAC,CAAA;KACL;SAAM;QACH,OAAO,CAAC,EAAE,EAAE,EAAA,IAAA,oBAAe,KAAK,EAAE,CAAC,CAAA;KACtC;AACL,CAAC;AAoED;;;;;AAKG;AACG,SAAU,QAAQ,CAAkB,OAAkB,EAAA;AACxD,IAAA,OAAO,cAAc,CAAI,OAAO,CAAC,CAAA;AACrC,CAAC;AAED;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA,SAAS,cAAc,CAAkB,OAAkB,EAAA;AACvD,IAAA,IAAI,MAAkB,CAAA;IACtB,MAAM,MAAM,GAAkB,EAAE,CAAA;AAChC,IAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;QAChD,QAAQ,GAAG;AACP,YAAA,KAAA,GAAA;gBACI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACvB,oBAAA,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;iBAClE;AACD,gBAAA,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,GAAG,EAAC,cAAiB,EAAC,CAAC,CAAA;gBAChE,MAAK;AAET,YAAA,KAAA,GAAA;gBACI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACvB,oBAAA,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAA;iBACjE;AACD,gBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAC,cAAiB,EAAC,CAAC,CAAC,CAAA;gBAC9C,MAAK;AAET,YAAA;AACI,gBAAA,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAA;AAC/B,gBAAA,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE;AACtB,oBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,KAAK,eAAe,CAAC,MAAM,EAAE,EAAS,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;iBACvG;qBAAM;oBACH,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAe,IAAA,oBAAA,KAAK,CAAC,CAAC,CAAA;iBAC3D;gBAED,MAAK;SACZ;KACJ;AACD,IAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAA;AACvB,CAAC;AAED,SAAS,eAAe,CAAC,MAAkB,EAAE,EAAY,EAAE,KAAU,EAAA;AACjE,IAAA,IAAI,KAAa,CAAA;AACjB,IAAA,IAAI,KAAa,CAAA;IACjB,QAAQ,EAAE;AACN,QAAA,KAAA,IAAA;;AAEI,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAA;AAE3C,QAAA,KAAA,KAAA;AACI,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,CAAA;AAE5C,QAAA,KAAA,KAAA;YACI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,CAAA;AACzC,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE,KAAK,KAAK,CAAC,CAAA;AAExE,QAAA,KAAA,IAAA;;AAEI,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAA;AAE3C,QAAA,KAAA,KAAA;AACI,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,CAAA;AAE5C,QAAA,KAAA,KAAA;YACI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,CAAA;AACzC,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE,KAAK,KAAK,CAAC,CAAA;AAExE,QAAA,KAAA,GAAA;AACI,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAA;AAE1C,QAAA,KAAA,IAAA;YACI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,CAAA;AACzC,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE,GAAG,KAAK,CAAC,CAAA;AAEtE,QAAA,KAAA,IAAA;AACI,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAA;AAE3C,QAAA,KAAA,KAAA;YACI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,CAAA;AACzC,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE,IAAI,KAAK,CAAC,CAAA;AAEvE,QAAA,KAAA,GAAA;AACI,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAA;AAE1C,QAAA,KAAA,IAAA;YACI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,CAAA;AACzC,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE,GAAG,KAAK,CAAC,CAAA;AAEtE,QAAA,KAAA,IAAA;AACI,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAA;AAE3C,QAAA,KAAA,KAAA;YACI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,CAAA;AACzC,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE,IAAI,KAAK,CAAC,CAAA;AAEvE,QAAA,KAAA,GAAA;AACI,YAAA,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;AACrB,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAEnG,QAAA,KAAA,IAAA;YACI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,CAAA;YACzC,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;AAE9E,QAAA,KAAA,GAAA;AACI,YAAA,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;AACrB,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAA;AAE5D,QAAA,KAAA,IAAA;YACI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,CAAA;YACzC,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAA;AAEhF,QAAA,KAAA,GAAA;AACI,YAAA,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;AACrB,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;AAE1D,QAAA,KAAA,IAAA;YACI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,CAAA;YACzC,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;AAE9E,QAAA,KAAA,GAAA;AACI,YAAA,KAAK,GAAG,KAAK,YAAY,MAAM,GAAG,KAAK,GAAG,IAAI,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;AAClE,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;AAE9C,QAAA,KAAA,IAAA;AACI,YAAA,KAAK,GAAG,KAAK,YAAY,MAAM,GAAG,KAAK,GAAG,IAAI,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;AACnE,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;AAE9C,QAAA,KAAA,GAAA;YACI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACvB,gBAAA,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;aAClE;YACD,OAAO,IAAI,CACP,WAAW,CACP,KAAK,CAAC,GAAG,CAAC,CAAC,IAAG;AACV,gBAAA,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE;oBAClB,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,KAAK,eAAe,CAAC,MAAM,EAAE,EAAS,EAAE,GAAG,CAAC,CAAC,CAAA;iBACvF;qBAAM;AACH,oBAAA,OAAO,eAAe,CAAC,MAAM,EAAe,IAAA,oBAAA,CAAC,CAAC,CAAA;iBACjD;aACJ,CAAC,CACL,CACJ,CAAA;AAEL,QAAA,KAAA,GAAA;YACI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACvB,gBAAA,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAA;aACjE;YACD,OAAO,GAAG,CACN,WAAW,CACP,KAAK,CAAC,GAAG,CAAC,CAAC,IAAG;AACV,gBAAA,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE;oBAClB,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,KAAK,eAAe,CAAC,MAAM,EAAE,EAAS,EAAE,GAAG,CAAC,CAAC,CAAA;iBACvF;qBAAM;AACH,oBAAA,OAAO,eAAe,CAAC,MAAM,EAAe,IAAA,oBAAA,CAAC,CAAC,CAAA;iBACjD;aACJ,CAAC,CACL,CACJ,CAAA;KACR;AAED,IAAA,MAAM,IAAI,KAAK,CAAC,wBAAwB,EAAE,CAAA,CAAE,CAAC,CAAA;AACjD,CAAC;AAED,SAAS,OAAO,CAAC,MAAkB,EAAE,OAAgC,EAAA;AACjE,IAAA,OAAO,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AAC3C,CAAC;AAED,SAAS,IAAI,CAAC,GAAe,EAAA;AACzB,IAAA,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;AAClB,QAAA,OAAO,CAAC,IAAI,IAAI,CAAA;KACnB;IAED,OAAO,IAAI,IAAG;AACV,QAAA,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE;AAClB,YAAA,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;AACX,gBAAA,OAAO,KAAK,CAAA;aACf;SACJ;AACD,QAAA,OAAO,IAAI,CAAA;AACf,KAAC,CAAA;AACL,CAAC;AAED,SAAS,GAAG,CAAC,GAAe,EAAA;AACxB,IAAA,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;AAClB,QAAA,OAAO,CAAC,IAAI,IAAI,CAAA;KACnB;IAED,OAAO,IAAI,IAAG;AACV,QAAA,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE;AAClB,YAAA,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE;AACV,gBAAA,OAAO,IAAI,CAAA;aACd;SACJ;AACD,QAAA,OAAO,KAAK,CAAA;AAChB,KAAC,CAAA;AACL,CAAC;AAEe,SAAA,WAAW,CAAC,GAAG,OAAc,EAAA;IACzC,IAAI,MAAM,GAAuC,SAAS,CAAA;AAE1D,IAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;AAC1B,QAAA,IAAI,MAAM,IAAI,IAAI,EAAE;YAChB,SAAQ;SACX;AACD,QAAA,IAAI,MAAM,IAAI,IAAI,EAAE;AAChB,YAAA,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAA;SAC7B;aAAM;AACH,YAAA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AACzC,gBAAA,IAAI,CAAC,KAAK,SAAS,EAAE;AACjB,oBAAA,OAAO,MAAM,CAAC,CAAC,CAAC,CAAA;oBAChB,SAAQ;iBACX;gBAED,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAA;aAC3B;SACJ;KACJ;AAED,IAAA,OAAO,MAAa,CAAA;AACxB;;AClbM,SAAU,OAAO,CAAkC,OAAsB,EAAA;AAC3E,IAAA,OAAO,cAAc,CAAO,OAAO,CAAC,CAAA;AACxC,CAAC;AAED,SAAS,cAAc,CAAkC,OAAsB,EAAA;AAC3E,IAAA,OAAO,CAAC,IAAI,SAAS,CAAA;AACzB,CAAC;AAEe,SAAA,YAAY,CACxB,GAAG,QAAiD,EAAA;AAEpD,IAAA,OAAO,SAAS,CAAA;AACpB,CAAC;AAED;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;ACpEA;;;;;AAKG;AACG,SAAU,MAAM,CAAkB,OAAkB,EAAA;AACtD,IAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AACtB,QAAA,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAA;KAClC;AACD,IAAA,OAAO,cAAc,CAAI,OAAO,CAAQ,CAAA;AAC5C,CAAC;AAED;;;;;;;;AAQG;AACG,SAAU,eAAe,CAAkB,OAAkB,EAAA;IAC/D,OAAO,WAAW,CACb,OAAe,CAAC,GAAG,CAAC,CAAC,CAAM,KACxB,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAI;AAC7B,QAAA,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;YACvB,MAAM,KAAK,GAAG,CAAC,CAAC,WAAW,EAAE,KAAK,KAAK,CAAA;AACvC,YAAA,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,GAAG,KAAK,GAAG,IAAI,EAAE,CAAA;SAC9D;AAAM,aAAA,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE;YACzB,OAAO;AACH,gBAAA,IAAI,EAAE,CAAC;AACP,gBAAA,KAAK,EAAE,CAAE,CAAkB,CAAC,GAAG,IAAI,KAAK,EAAE,WAAW,EAAE,KAAK,KAAK;AACjE,gBAAA,UAAU,EAAG,CAAkB,CAAC,UAAU,IAAI,IAAI,GAAG,IAAI,GAAG,CAAC,CAAE,CAAkB,CAAC,UAAU;aAC/F,CAAA;SACJ;aAAM;AACH,YAAA,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAA,CAAE,CAAC,CAAA;SAC1C;KACJ,CAAC,CACL,CACJ,CAAA;AACL,CAAC;AAED,SAAS,cAAc,CAAkB,OAAkB,EAAA;AACvD,IAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;QACtB,OAAO,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,CAAA;KACvB;IAED,MAAM,IAAI,GAAG,eAAe,CAAI,OAAO,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;AAC9D,IAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACnB,QAAA,OAAO,IAAI,CAAC,CAAC,CAAC,CAAA;KACjB;AAED,IAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAG,CAAA;AAC3B,IAAA,OAAO,IAAI,CAAC,WAAW,CACnB,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,KAAI;QACrB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AACpB,QAAA,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAA;KAClC,EACD,OAAO,CACV,CAAA;AACL,CAAC;AAED,SAAS,gBAAgB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAmB,EAAA;AAClE,IAAA,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAA;IACtC,IAAI,KAAK,EAAE;QACP,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAA;KAC7D;SAAM;QACH,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAA;KACnE;AACL,CAAC;SAEe,OAAO,CAAC,CAAM,EAAE,CAAM,EAAE,UAAmB,EAAA;;IAEvD,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE;AACxB,QAAA,OAAO,UAAU,KAAK,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;KACtC;SAAM,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE;AAC/B,QAAA,OAAO,UAAU,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;KACtC;SAAM,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE;AAC/B,QAAA,OAAO,CAAC,CAAA;KACX;AAAM,SAAA,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;AACtB,QAAA,OAAO,CAAC,CAAA;KACX;SAAM,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;QACvD,OAAO,CAAC,GAAG,CAAC,CAAA;KACf;SAAM,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;AACvD,QAAA,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,CAAA;AACnB,QAAA,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,CAAA;;AAEnB,QAAA,IAAI,UAAU,KAAK,IAAI,EAAE;AACrB,YAAA,IAAI,EAAE,KAAK,CAAC,EAAE;gBACV,OAAO,CAAC,CAAC,CAAA;aACZ;AAAM,iBAAA,IAAI,EAAE,KAAK,CAAC,EAAE;AACjB,gBAAA,OAAO,CAAC,CAAA;aACX;SACJ;aAAM;AACH,YAAA,IAAI,EAAE,KAAK,CAAC,EAAE;AACV,gBAAA,OAAO,CAAC,CAAA;aACX;AAAM,iBAAA,IAAI,EAAE,KAAK,CAAC,EAAE;gBACjB,OAAO,CAAC,CAAC,CAAA;aACZ;SACJ;AACD,QAAA,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAA;KAC5B;AAAM,SAAA,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;AAC7C,QAAA,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,CAAA;AACnB,QAAA,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,CAAA;QACnB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;AAE1B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACxB,YAAA,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAA;AAC3C,YAAA,IAAI,GAAG,KAAK,CAAC,EAAE;AACX,gBAAA,OAAO,GAAG,CAAA;aACb;SACJ;AAED,QAAA,IAAI,EAAE,KAAK,EAAE,EAAE;AACX,YAAA,OAAO,CAAC,CAAA;SACX;AAED,QAAA,IAAI,UAAU,KAAK,IAAI,EAAE;AACrB,YAAA,IAAI,EAAE,KAAK,CAAC,EAAE;gBACV,OAAO,CAAC,CAAC,CAAA;aACZ;AAAM,iBAAA,IAAI,EAAE,KAAK,CAAC,EAAE;AACjB,gBAAA,OAAO,CAAC,CAAA;aACX;SACJ;aAAM;AACH,YAAA,IAAI,EAAE,KAAK,CAAC,EAAE;AACV,gBAAA,OAAO,CAAC,CAAA;aACX;AAAM,iBAAA,IAAI,EAAE,KAAK,CAAC,EAAE;gBACjB,OAAO,CAAC,CAAC,CAAA;aACZ;SACJ;QAED,OAAO,EAAE,GAAG,EAAE,CAAA;KACjB;SAAM,IAAI,aAAa,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE;AAC7C,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;KAC5D;AAED,IAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;AACzB,CAAC;AAEe,SAAA,WAAW,CAAkB,GAAG,OAA4C,EAAA;AACxF,IAAA,IAAI,MAA6B,CAAA;AAEjC,IAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;AAC1B,QAAA,IAAI,MAAM,IAAI,IAAI,EAAE;YAChB,SAAQ;SACX;AACD,QAAA,IAAI,MAAM,IAAI,IAAI,EAAE;AAChB,YAAA,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAA;YAC1B,SAAQ;SACX;AAED,QAAA,KAAK,MAAM,MAAM,IAAI,MAAM,EAAE;AACzB,YAAA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AACzC,gBAAA,MAAM,QAAQ,GAAI,MAAc,CAAC,IAAI,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAA;gBACvE,IAAI,QAAQ,EAAE;oBACV,CAAC;oBAAC,QAAgB,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAA;iBACvC;qBAAM;AACH,oBAAA,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,EAAS,CAAC,CAAA;iBAC5C;aACJ;SACJ;KACJ;AAED,IAAA,OAAO,MAAM,CAAA;AACjB;;AC7KgB,SAAA,MAAM,CAAkB,MAAiB,KAAU;AAEnD,SAAA,eAAe,CAAkB,MAAiB,KAAU;AAE5E,SAAS,aAAa,CAAkB,MAAiB,EAAA;AACrD,IAAA,OAAO,IAAI,IAAI,IAAI,CAAA;AACvB,CAAC;SAEe,WAAW,CAAkB,GAAG,OAAkB;;ACAlD,SAAA,UAAU,CAAC,GAAG,MAAe,EAAA;IACzC,IAAI,MAAM,GAAsB,SAAS,CAAA;AAEzC,IAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;AACxB,QAAA,IAAI,KAAK,IAAI,IAAI,EAAE;YACf,SAAQ;SACX;AACD,QAAA,IAAI,MAAM,IAAI,IAAI,EAAE;AAChB,YAAA,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAA;SAC5B;aAAM;YACH,MAAM,GAAG,EAAE,GAAI,MAAc,EAAE,GAAG,KAAK,EAAE,CAAA;SAC5C;KACJ;AAED,IAAA,OAAO,MAAM,CAAA;AACjB,CAAC;AAED;;;AAGG;AACa,SAAA,UAAU,CAAC,KAAY,EAAE,KAAqB,EAAA;AAC1D,IAAA,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAA;IAClD,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,CAAA;AACvC,IAAA,OAAO,MAAM,CAAA;AACjB,CAAC;AAED;;AAEG;AACG,SAAU,YAAY,CAAC,KAAY,EAAA;AACrC,IAAA,IAAI,KAAK,CAAC,QAAQ,IAAI,IAAI,EAAE;AACxB,QAAA,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAA;KAC/C;AAED,IAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAA;AACtD,IAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAA;IACjD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,GAAG,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC,CAAA;AACnE,CAAC;SAEe,WAAW,CAAC,KAAY,EAAE,KAAqB,EAAE,QAAwB,EAAA;IACrF,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,GAAG,EAAE;AAC3B,QAAA,OAAO,KAAY,CAAA;KACtB;AAED,IAAA,IAAI,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;AACxC,IAAA,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAA;AAE3B,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;AAChC,IAAA,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,CAAA;AAEzB,IAAA,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;AAChD,CAAC;AAEe,SAAA,UAAU,CAAC,KAAY,EAAE,UAAiB,EAAA;IACtD,OAAO;AACH,QAAA,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC;AAC9C,QAAA,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC;QACxC,QAAQ,EAAE,KAAK,CAAC,QAAQ;KAC3B,CAAA;AACL,CAAC;AAEe,SAAA,OAAO,CAAC,CAAQ,EAAE,CAAQ,EAAA;IACtC,OAAO,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ,CAAA;AAC9E,CAAC;AAED;AACA;AACA;AACA;;ACnFA,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;AAiBb,SAAA,aAAa,CAAkB,KAAe,EAAE,QAA2B,EAAA;AACvF,IAAA,MAAM,SAAS,GAAsB;QACjC,QAAQ,EAAE,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC;QAC1D,QAAQ,EAAE,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC;QAC1D,SAAS,EAAE,eAAe,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC;QAC9D,QAAQ,EAAE,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC;KAC3D,CAAA;AAED,IAAA,MAAM,OAAO,GAAG,QAAQ,IAAI,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAM,QAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;IAC1G,IAAI,CAAC,OAAO,EAAE;AACV,QAAA,OAAO,QAAQ,CAAA;KAClB;AAED,IAAA,MAAM,QAAQ,GAAG,CAAC,KAAmB,KAAoB;QACrD,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YACrC,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAA;SACjC;QAED,IAAI,MAAM,GAAiB,KAAK,CAAA;AAEhC,QAAA,IAAI,SAAS,CAAC,QAAQ,EAAE;YACpB,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;SAC7C;AAED,QAAA,IAAI,SAAS,CAAC,QAAQ,EAAE;YACpB,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAA;SAChD;AAED,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAA;;AAI3B,QAAA,IAAI,SAAS,CAAC,QAAQ,EAAE;AACpB,YAAA,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;SACtC;AAED,QAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;AACnC,KAAC,CAAA;AAED,IAAA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;AAC5C,QAAA,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,EAAE;AAC/B,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,QAAQ,EAAE,KAAK;AAClB,SAAA,CAAC,CAAA;KACL;AAED,IAAA,OAAO,QAAQ,CAAA;AACnB,CAAC;AAMD,SAAS,cAAc,CACnB,MAAgC,EAChC,IAAwB,EAAA;IAExB,OAAO,WAAW,CAAI,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAA;AACjD,CAAC;AAMD,SAAS,cAAc,CACnB,MAAgC,EAChC,IAAwB,EAAA;IAExB,OAAO,WAAW,CAAI,MAAM,EAAE,IAAI,EAAEA,QAAM,CAAC,CAAA;AAC/C,CAAC;AAMD,SAAS,eAAe,CACpB,MAAgC,EAChC,IAAyB,EAAA;IAEzB,OAAO,WAAW,CAAI,MAAM,EAAE,IAAI,EAAEC,SAAO,CAAC,CAAA;AAChD,CAAC;AAMD,SAAS,aAAa,CAClB,KAA2B,EAC3B,IAAuB,EAAA;IAEvB,OAAO,WAAW,CAAI,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;AAC/C,CAAC;AAED,SAAS,OAAO,CAAkB,KAAY,EAAA;AAC1C,IAAA,OAAO,CAAC,KAAU,KAAK,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAA;AAC9D,CAAC;AAED,SAAS,WAAW,CAAkB,KAAU,EAAE,IAAS,EAAE,QAAa,EAAA;AACtE,IAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACf,QAAA,OAAO,SAAS,CAAA;KACnB;AAED,IAAA,IAAI,IAAI,IAAI,IAAI,EAAE;;AAEd,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE;AACtD,YAAA,OAAO,IAAI,CAAA;SACd;KACJ;AAED,IAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAQ,CAAA;AACnC,IAAA,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE;AAC/B,QAAA,KAAK,EAAE,KAAK;AACZ,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,QAAQ,EAAE,KAAK;AAClB,KAAA,CAAC,CAAA;AACF,IAAA,OAAO,IAAI,CAAA;AACf;;MC5Ha,SAAS,CAAA;IAClB,OAAO,MAAM,CAAkB,KAAwB,EAAA;AACnD,QAAA,IAAI,KAAK,YAAY,SAAS,EAAE;AAC5B,YAAA,OAAO,KAAK,CAAA;SACf;aAAM;AACH,YAAA,OAAO,IAAI,SAAS,CAAC,KAAK,CAAC,CAAA;SAC9B;KACJ;AAIQ,IAAA,OAAO,CAAuB;AAEvC,IAAA,WAAA,CAAY,KAAwB,EAAA;AAChC,QAAA,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAA;QAEtB,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;YACtB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA;AAChD,YAAA,IAAI,KAAK,CAAC,OAAO,IAAI,IAAI,EAAE;AACvB,gBAAA,IAAI,CAAC,OAAO,GAAG,CAAC,KAAa,EAAE,IAAO,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;aACjF;iBAAM;AACH,gBAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAA;aAC/B;YACD,IAAI,CAAC,OAAO,GAAG,CAAC,IAAO,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;SAClE;aAAM;AACH,YAAA,IAAI,KAAK,CAAC,OAAO,IAAI,IAAI,EAAE;AACvB,gBAAA,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAA;aAChF;iBAAM;AACH,gBAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAA;aAC/B;SACJ;KACJ;IAED,OAAO,CAAC,CAAI,EAAE,CAAI,EAAA;AACd,QAAA,OAAO,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;KACvB;IAED,cAAc,CAAC,CAAkB,EAAE,CAAkB,EAAA;QACjD,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE;AACxB,YAAA,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,CAAA;SAChC;AAED,QAAA,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,EAAE;YACpC,OAAO,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,CAAA;SAC5C;AAED,QAAA,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,EAAE;YACpC,OAAO,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,CAAA;SAC5C;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAA;KAC3E;IAED,YAAY,CAAC,CAAI,EAAE,CAAI,EAAA;AACnB,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,EAAE;YACtB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE;AACxB,gBAAA,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,CAAA;aAChC;AACD,YAAA,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;SAC7C;QACD,OAAO,CAAC,IAAI,CAAC,iCAAiC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;AACrD,QAAA,OAAO,KAAK,CAAA;KACf;AAED,IAAA,YAAY,CAAC,GAA4B,EAAA;AACrC,QAAA,IAAI,GAAG,YAAY,YAAY,EAAE;AAC7B,YAAA,OAAO,GAAG,CAAA;SACb;AAED,QAAA,IAAI,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,GAAG,CAAC,KAAK,IAAI,IAAI,EAAE;AACtC,YAAA,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAA;SACjE;AAED,QAAA,IAAI,GAAG,CAAC,GAAG,IAAI,IAAI,EAAE;YACjB,MAAM,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAyB,CAAA;AAEvF,YAAA,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;gBACrB,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACxB,oBAAA,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAA;iBACxD;gBAED,IAAI,QAAQ,CAAC,MAAM,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACtC,oBAAA,MAAM,IAAI,KAAK,CAAC,CAAA,+CAAA,EAAkD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAA,CAAG,CAAC,CAAA;iBAC5F;gBACD,OAAO,IAAI,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;aAChD;iBAAM;AACH,gBAAA,OAAO,CAAC,IAAI,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAA;aAC7C;SACJ;AAED,QAAA,IAAI,GAAG,CAAC,KAAK,IAAI,IAAI,EAAE;AACnB,YAAA,OAAO,IAAI,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;SACxC;AAED,QAAA,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;KACpD;AACJ,CAAA;MAEqB,YAAY,CAAA;AAI9B,IAAA,OAAO,CAAsB;IAC7B,QAAQ,GAAA;AACJ,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,EAAE;YACtB,QAAQ,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,EAAC;SAC3C;QACD,OAAO,IAAI,CAAC,OAAO,CAAA;KACtB;AAGJ,CAAA;AAEK,MAAO,aAAc,SAAQ,YAAY,CAAA;AAG3C,IAAA,KAAK,CAAmB;IACxB,WAAY,CAAA,GAAyB,EAAE,IAAuB,EAAA;AAC1D,QAAA,KAAK,EAAE,CAAA;AACP,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;AACd,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;KACpB;IAES,SAAS,GAAA;QACf,MAAM,MAAM,GAAG,EAAS,CAAA;AACxB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACxC,YAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;SACtC;AACD,QAAA,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAA;KAC1B;AACJ,CAAA;AAEK,MAAO,eAAgB,SAAQ,YAAY,CAAA;AAG7C,IAAA,WAAA,CAAY,KAAa,EAAA;AACrB,QAAA,KAAK,EAAE,CAAA;AACP,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;KACrB;IAES,SAAS,GAAA;AACf,QAAA,OAAO,CAAC,IAAS,EAAE,KAAa,KAAK,IAAI,CAAC,KAAK,KAAK,KAAK,CAAA;KAC5D;AACJ,CAAA;AAEK,MAAO,WAA6B,SAAQ,SAAY,CAAA;AAC1D,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,KAAa,KAAK,KAAK,EAAE,CAAC,CAAA;KACzD;AACJ;;MCjKqB,eAAe,CAAA;AAmDpC;;ACtDK,MAAO,WAA6B,SAAQ,eAAkB,CAAA;AACvD,IAAA,KAAK,GAAG,IAAI,eAAe,CAAuB,EAAE,CAAC,CAAA;IAErD,WAAW,CAAC,KAAY,EAAE,KAAmB,EAAA;AAClD,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAA;QAC5D,OAAO,IAAI,CAAC,KAAK,CAAA;KACpB;AAEQ,IAAA,QAAQ,CAAC,KAAY,EAAA;QAC1B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAClB,GAAG,CAAC,IAAI,IAAG;YACP,IAAI,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE;AACnE,gBAAA,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;AAC1C,oBAAA,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE;AACjB,wBAAA,OAAO,KAAK,CAAA;qBACf;iBACJ;AACD,gBAAA,OAAO,IAAI,CAAA;aACd;iBAAM;AACH,gBAAA,OAAO,KAAK,CAAA;aACf;SACJ,CAAC,CACL,CAAA;KACJ;AAEQ,IAAA,QAAQ,CAAC,KAAY,EAAA;QAC1B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;KAC/D;AAEQ,IAAA,GAAG,CAAC,GAAiB,EAAA;QAC1B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAA;KACjE;AAEQ,IAAA,OAAO,CAAC,GAAiB,EAAA;QAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAA;KACtE;IAEQ,MAAM,CAAC,GAAiB,EAAE,IAAO,EAAA;AACtC,QAAA,OAAO,aAAa,CAAC;AACjB,YAAA,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;YACxB,IAAI,EAAE,IAAI,CAAC,KAAK;AACnB,SAAA,CAAC,CAAC,IAAI,CACH,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAI;AACpB,YAAA,IAAI,KAAK,GAAG,CAAC,EAAE;AACX,gBAAA,OAAO,KAAK,CAAA;aACf;YACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AAC5E,YAAA,OAAO,KAAK,CAAA;SACf,CAAC,CACL,CAAA;KACJ;AAEQ,IAAA,cAAc,CAAC,GAAiB,EAAE,IAAO,EAAE,QAAiB,EAAA;AACjE,QAAA,OAAO,aAAa,CAAC;AACjB,YAAA,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;YACxB,IAAI,EAAE,IAAI,CAAC,KAAK;AACnB,SAAA,CAAC,CAAC,IAAI,CACH,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAI;AACpB,YAAA,IAAI,KAAK,GAAG,CAAC,EAAE;gBACX,KAAK,GAAG,QAAQ,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAA;aACjF;YACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AAC5E,YAAA,OAAO,KAAK,CAAA;SACf,CAAC,CACL,CAAA;KACJ;AAEQ,IAAA,GAAG,CAAC,GAAiB,EAAA;AAC1B,QAAA,OAAO,aAAa,CAAC;AACjB,YAAA,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;YACxB,IAAI,EAAE,IAAI,CAAC,KAAK;AACnB,SAAA,CAAC,CAAC,IAAI,CACH,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAI;AACpB,YAAA,IAAI,KAAK,GAAG,CAAC,EAAE;AACX,gBAAA,OAAO,KAAK,CAAA;aACf;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAC5B,YAAA,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;AACvB,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AACvB,YAAA,OAAO,KAAK,CAAA;SACf,CAAC,CACL,CAAA;KACJ;IAEQ,KAAK,GAAA;QACV,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7B,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;SACtB;AACD,QAAA,OAAO,EAAE,CAAC,SAAS,CAAC,CAAA;KACvB;AACJ;;AC7FK,MAAgB,QAAY,SAAQ,eAA4C,CAAA;;AAGlF,IAAA,GAAG,CAAC,KAAoB,EAAE,KAAA,GAAiB,IAAI,EAAA;QAC3C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;AAC7B,YAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACf,gBAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAI,KAAK,GAAG,SAAS,CAAI,KAAK,CAAC,GAAG,KAAK,CAAQ,CAAC,CAAA;aACvE;iBAAM;AACH,gBAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;aACvB;SACJ;KACJ;IAED,GAAG,GAAA;QACC,OAAO,IAAI,CAAC,KAAK,CAAA;KACpB;IAED,GAAG,GAAA;AACC,QAAA,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;KACtB;AAMJ,CAAA;MAEqB,gBAAgB,CAAA;AAIrC,CAAA;SAEe,cAAc,CAAC,MAAgC,EAAE,GAAG,KAAwB,EAAA;AACxF,IAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;QAClB,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;KACjF;SAAM;AACH,QAAA,OAAO,KAAK,CAAC,CAAC,CAAQ,CAAA;KACzB;AACL;;ACtCM,MAAO,cAAkB,SAAQ,QAAW,CAAA;AACrC,IAAA,MAAM,CAAC,KAAQ,EAAA;AACpB,QAAA,IAAI,CAAC,GAAG,CAAC,WAAW,CAAE,IAAuB,CAAC,KAAK,EAAE,KAAK,CAAQ,EAAE,KAAK,CAAC,CAAA;KAC7E;AACJ,CAAA;AAEK,MAAO,cAAkB,SAAQ,gBAAmB,CAAA;AAA1D,IAAA,WAAA,GAAA;;AACa,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,cAAc,CAAI,SAAS,CAAC,CAAA;AACzC,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,cAAc,CAAI,SAAS,CAAC,CAAA;AACzC,QAAA,IAAA,CAAA,OAAO,GAA4C,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;KACpH;AAAA;;ACVK,MAAO,cAAkB,SAAQ,QAAW,CAAA;AACrC,IAAA,MAAM,CAAC,KAAQ,EAAA;AACpB,QAAA,IAAI,CAAC,GAAG,CAAC,WAAW,CAAE,IAAuB,CAAC,KAAK,EAAE,KAAY,CAAQ,EAAE,KAAK,CAAC,CAAA;KACpF;AACJ,CAAA;AAEK,MAAO,cAAkB,SAAQ,gBAAmB,CAAA;AAA1D,IAAA,WAAA,GAAA;;AACa,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,cAAc,CAAI,SAAS,CAAC,CAAA;AACzC,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,cAAc,CAAI,SAAS,CAAC,CAAA;AACzC,QAAA,IAAA,CAAA,OAAO,GAA4C,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;KACpH;AAAA;;ACVK,MAAO,cAAkB,SAAQ,QAAW,CAAA;AACrC,IAAA,MAAM,CAAC,KAAQ,EAAA;AACpB,QAAA,IAAI,CAAC,GAAG,CAAC,WAAW,CAAE,IAAuB,CAAC,KAAK,EAAE,KAAK,CAAQ,EAAE,KAAK,CAAC,CAAA;KAC7E;AACJ,CAAA;AAEK,MAAO,cAAkB,SAAQ,gBAAmB,CAAA;AAA1D,IAAA,WAAA,GAAA;;AACa,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,cAAc,CAAI,SAAS,CAAC,CAAA;AACzC,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,cAAc,CAAI,SAAS,CAAC,CAAA;AACzC,QAAA,IAAA,CAAA,OAAO,GAA4C,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;KACpH;AAAA;;ACVK,MAAO,eAAmB,SAAQ,QAAW,CAAA;AACtC,IAAA,MAAM,CAAC,KAAQ,EAAA;AACpB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,CAAE,IAAuB,CAAC,KAAK,EAAE,KAAK,CAAQ,EAAE,KAAK,CAAC,CAAA;KAC9E;AACJ,CAAA;AAEK,MAAO,eAAmB,SAAQ,gBAAmB,CAAA;AAA3D,IAAA,WAAA,GAAA;;AACa,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,eAAe,CAAI,SAAS,CAAC,CAAA;AAC1C,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,eAAe,CAAI,SAAS,CAAC,CAAA;AAC1C,QAAA,IAAA,CAAA,OAAO,GAA4C,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;KACrH;AAAA;;ACeD,MAAM,aAAa,GAAG,EAAE,CAAA;AAIlB,MAAO,UAA4B,SAAQC,YAA4B,CAAA;AAShE,IAAA,UAAU,CAKI;AAEd,IAAA,MAAM,CAA8B;AAQpC,IAAA,OAAO,CAAsB;IAyCtC,WACoB,CAAA,QAAyB,EACzC,KAA0B,EAAA;AAE1B,QAAA,KAAK,EAAE,CAAA;QAHS,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAiB;AAjEpC,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAA;AAC3C,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,eAAe,CAAqB,SAAS,CAAC,CAAA;AAE3D,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,cAAc,EAAa,CAAA;AACxC,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,cAAc,EAAa,CAAA;AACxC,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,cAAc,EAAa,CAAA;AACxC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,eAAe,EAAc,CAAA;QAE3C,IAAU,CAAA,UAAA,GAAG,aAAa,CAAC;AAChC,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;AAC3B,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;AAC3B,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;AAC3B,YAAA,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;SAChC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;AAEd,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,aAAa,CAAQ,CAAC,CAAC,CAAA;QACpC,IAAM,CAAA,MAAA,GAAsB,IAAI,CAAC,MAAM,CAAC,IAAI,CACjD,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EACnD,oBAAoB,CAAC,OAAO,CAAC,EAC7B,GAAG,CAAC,KAAK,IAAI,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAC1C,WAAW,CAAC,CAAC,CAAC,CACjB,CAAA;AAEQ,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,OAAO,EAAQ,CAAA;QAC7B,IAAM,CAAA,MAAA,GAAwB,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAC5E,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAC9B,SAAS,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,EACnC,WAAW,CAAC,CAAC,CAAC,CACjB,CAAA;AAEQ,QAAA,IAAA,CAAA,MAAM,GAA2B,aAAa,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CACvG,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAI;AACpB,YAAA,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,CAAA;AAC7B,SAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACjB,CAAA;QAEQ,IAAM,CAAA,MAAA,GAAqC,aAAa,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAC9G,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAC9B,YAAY,CAAC,aAAa,CAAC,EAC3B,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,KAAI;AACpB,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CACxC,SAAS,CAAC,QAAQ,IAAG;gBACjB,IAAI,QAAQ,EAAE;oBACV,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;iBAC1C;qBAAM;AACH,oBAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CACtC,SAAS,CAAC,MAAM,IAAG;AACf,wBAAA,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI,EAAE;4BACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;yBACjC;AACD,wBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;AAC5D,qBAAC,CAAC,EACF,IAAI,CAAC,CAAC,CAAC,CACV,CAAA;iBACJ;aACJ,CAAC,CACL,CAAA;SACJ,CAAC,EACF,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EACpC,WAAW,CAAC,CAAC,CAAC,CACjB,CAAA;AAwED,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,GAAG,EAAmC,CAAA;AAhEhD,QAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACf,YAAA,KAAK,GAAG,IAAI,WAAW,EAAE,CAAA;SAC5B;AACD,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;KACrB;AAED,IAAA,QAAQ,CAAC,KAAY,EAAA;AACjB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AACvB,QAAA,OAAO,IAAI,CAAA;KACd;IAED,GAAG,GAAA;AACC,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAC,CAAC,CAAA;KAClD;IAED,MAAM,GAAA;AACF,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;KACtB;AAED,IAAA,OAAO,CAAC,GAAa,EAAA;AACjB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;AACjD,QAAA,OAAO,IAAI,CAAC,WAAW,CACnB,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAC7B,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAChD,CAAA;KACJ;AAED,IAAA,eAAe,CAAC,GAAa,EAAA;AACzB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;QACjD,OAAO,IAAI,CAAC,WAAW,CACnB,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,EACzE,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CACpD,CAAA;KACJ;IAED,UAAU,CAAC,GAAa,EAAE,cAAuB,EAAA;AAC7C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;AACjD,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CACnB,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,EACxD,SAAS,CAAC,IAAI,IACV,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CACxG,EACD,IAAI,CAAC,CAAC,CAAC,CACV,CAAA;KACJ;IAED,WAAW,CACP,OAA2C,EAC3C,MAA0C,EAAA;QAE1C,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CACnB,IAAI,CAAC,CAAC,CAAC,EACP,SAAS,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,MAAM,IAAI,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAC9G,CAAA;KACJ;AAED,IAAA,QAAQ,CAAC,IAAa,EAAA;AAClB,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;YACvB,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,EAAE;AAC3B,gBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;aACxB;SACJ;KACJ;AAED,IAAA,OAAO,CAA6C;AAE3C,IAAA,OAAO,CAAC,gBAAkC,EAAA;AAC/C,QAAA,MAAM,KAAK,GAAG,IAAI,OAAO,EAAQ,CAAA;QAEjC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,CAAA;QAC1C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAA;AAEzC,QAAA,OAAO,IAAI,UAAU,CAAC,CAAC,UAAkD,KAAI;AACzE,YAAA,MAAM,IAAI,GAAG,gBAAgB,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YAC/D,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;AAE9C,YAAA,OAAO,MAAK;gBACR,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,KAAK,KAAK,EAAE;AAC9C,oBAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;iBACxC;gBACD,IAAI,CAAC,WAAW,EAAE,CAAA;gBAClB,IAAI,CAAC,WAAW,EAAE,CAAA;AACtB,aAAC,CAAA;SACJ,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA;KAC5B;AAEQ,IAAA,UAAU,CAAC,gBAAkC,EAAA;QAClD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,CAAA;AAC1C,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;KACxC;AACJ;;ACxKD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BG;AAMG,MAAO,eACT,SAAQA,YAA4B,CAAA;IAGpC,IACI,MAAM,CAAC,KAAyB,EAAA;AAChC,QAAA,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,CAAA;AAC7B,QAAA,IAAI,CAAC,SAAS,GAAG,gBAAgB,CAAI,KAAK,CAAC;AACtC,aAAA,IAAI,CACD,GAAG,CAAC,CAAC,IAAG;AACJ,YAAA,IAAI,CAAC,IAAI,IAAI,EAAE;AACX,gBAAA,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAA;aACxC;AACL,SAAC,CAAC,CACL;AACA,aAAA,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;KAC/B;AACD,IAAA,SAAS,CAAe;IAcxB,IACI,MAAM,CAAC,KAAgB,EAAA;AACvB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;KAC3B;AACQ,IAAA,OAAO,CAAkC;;IAGlD,IACI,MAAM,CAAC,KAAgB,EAAA;AACvB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;KAC3B;AACQ,IAAA,OAAO,CAAkC;IAElD,IACI,OAAO,CAAC,KAAiB,EAAA;AACzB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;KAC5B;AACQ,IAAA,QAAQ,CAAmC;IAEpD,IACI,MAAM,CAAC,KAAgB,EAAA;AACvB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;KAC3B;AACQ,IAAA,OAAO,CAAkC;AAEzC,IAAA,KAAK,CAAqB;AAEnC,IAAA,WAAA,CAAwB,IAAgB,EAAA;AACpC,QAAA,KAAK,EAAE,CAAA;AAzCF,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,aAAa,CAAgB,CAAC,CAAC,CAAA;QAE7C,IAAM,CAAA,MAAA,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAC/B,SAAS,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,EAChC,KAAK,EAAE,CACV,CAAA;QAEQ,IAAK,CAAA,KAAA,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAC9B,SAAS,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,EAC/B,KAAK,EAAE,CACV,CAAA;AACQ,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAA;AAM1E,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,aAAa,CAAY,CAAC,CAAC,CAAA;AAOzC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,aAAa,CAAY,CAAC,CAAC,CAAA;AAMzC,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,aAAa,CAAa,CAAC,CAAC,CAAA;AAM3C,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,aAAa,CAAY,CAAC,CAAC,CAAA;AAEzC,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,YAAY,EAAE,CAAA;AAkCnC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,GAAG,EAAmC,CAAA;AA7BhD,QAAA,IAAI,IAAI,IAAI,IAAI,EAAE;AACd,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,CAAC,CAAA;SACvD;AAED,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CACV,aAAa,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAI;YACrF,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;SAChC,CAAC,CACL,CAAA;AAED,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CACV,aAAa,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAI;YACrF,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;SAChC,CAAC,CACL,CAAA;AAED,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CACV,aAAa,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAI;YACxF,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;SAClC,CAAC,CACL,CAAA;AAED,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CACV,aAAa,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAI;YACrF,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;SAChC,CAAC,CACL,CAAA;KACJ;AAED,IAAA,OAAO,CAA6C;AAE3C,IAAA,OAAO,CAAC,gBAAkC,EAAA;AAC/C,QAAA,MAAM,KAAK,GAAG,IAAI,OAAO,EAAQ,CAAA;QAEjC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,CAAA;QAC1C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAA;AAEzC,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CACpB,SAAS,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,EACnD,SAAS,CAAC,KAAK,CAAC,EAChB,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CACxD,CAAA;KACJ;AAEQ,IAAA,UAAU,CAAC,gBAAkC,EAAA;QAClD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,CAAA;AAC1C,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;KACxC;IAED,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,CAAA;AAC7B,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;AAC1B,QAAA,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAA;KAC3B;8GAlHQ,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,QAAA,CAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAL3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,QAAQ,EAAE,cAAc;AAC3B,iBAAA,CAAA;;0BA2DgB,QAAQ;yCArDjB,MAAM,EAAA,CAAA;sBADT,KAAK;AAAC,gBAAA,IAAA,EAAA,CAAA,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,CAAA;gBA4B5C,MAAM,EAAA,CAAA;sBADT,KAAK;gBAQF,MAAM,EAAA,CAAA;sBADT,KAAK;gBAOF,OAAO,EAAA,CAAA;sBADV,KAAK;gBAOF,MAAM,EAAA,CAAA;sBADT,KAAK;;AAmEV,SAAS,gBAAgB,CAAkB,KAAyB,EAAA;AAChE,IAAA,IAAI,KAAK,YAAY,eAAe,EAAE;QAClC,OAAO,KAAK,CAAC,OAAO,CAAA;KACvB;AAAM,SAAA,IAAI,KAAK,YAAY,UAAU,EAAE;AACpC,QAAA,OAAO,EAAE,CAAC,KAAK,CAAC,CAAA;KACnB;AAAM,SAAA,IAAI,KAAK,YAAY,YAAY,EAAE;AACtC,QAAA,OAAO,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAA;KAClC;SAAM;QACH,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAA;KACjE;AACL;;MCtLsB,YAAY,CAAA;AA0B9B;;AAEG;AACH,IAAA,UAAU,CAAC,KAAY,EAAA;AACnB,QAAA,OAAO,EAAE,CAAC,KAAK,CAAC,CAAA;KACnB;AAED;;AAEG;AACH,IAAA,YAAY,CAAC,KAA0B,EAAA;AACnC,QAAA,OAAO,IAAI,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;KACrC;AACJ;;ACzCK,MAAgB,aAA+B,SAAQ,YAAe,CAAA;AAKxE,IAAA,SAAS,CAAmB;AAE5B,IAAA,WAAA,CAAY,IAAuB,EAAA;AAC/B,QAAA,KAAK,EAAE,CAAA;QAPO,IAAO,CAAA,OAAA,GAAG,KAAK,CAAA;QAQ7B,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;KACrC;AAED,IAAA,QAAQ,CAAC,OAAiB,EAAA;AACtB,QAAA,QAAQ,IAAI,CAAC,SAAS,GAAG,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAC;KACnE;AAEQ,IAAA,SAAS,CAAC,OAAiB,EAAA;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;AACnC,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;KACrD;IAEQ,SAAS,CAAC,GAAiB,EAAE,OAAiB,EAAA;AACnD,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAA;KACpF;IAEQ,aAAa,CAAC,GAAiB,EAAE,OAAiB,EAAA;AACvD,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAA;KACzF;AAEQ,IAAA,UAAU,CAAC,KAAY,EAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,EAAE,EAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,MAAM,EAAC,CAAC,CAAC,CAAC,CAAA;KACnG;AACJ;;AChCK,MAAO,aAA+B,SAAQ,aAAgB,CAAA;IAGhE,WAAY,CAAA,IAAuB,EAAE,KAAmB,EAAA;QACpD,KAAK,CAAC,IAAI,CAAC,CAAA;AACX,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,CAAA;KAC1B;AACJ;;ACRK,MAAO,kBAAoC,SAAQ,aAAgB,CAAA;IAGrE,WAAY,CAAA,IAAuB,EAAE,GAA6B,EAAA;QAC9D,KAAK,CAAC,IAAI,CAAC,CAAA;AACX,QAAA,IAAI,CAAC,MAAM,GAAG,GAAG,CAAA;KACpB;AACJ;;ACZD;;AAEG;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ngutil/data",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.12",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public",
|
|
6
6
|
"directory": "../../dist/packages/data/"
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"lodash": "^4.17.21",
|
|
12
12
|
"utility-types": "^3.11.0",
|
|
13
13
|
"rxjs": "^7.8.1",
|
|
14
|
-
"@ngutil/common": "0.0.
|
|
14
|
+
"@ngutil/common": "0.0.12"
|
|
15
15
|
},
|
|
16
16
|
"sideEffects": false,
|
|
17
17
|
"module": "fesm2022/ngutil-data.mjs",
|
package/provider/local.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Observable } from "rxjs";
|
|
2
2
|
import { Model, ModelMeta, ModelMetaInput, ModelRefNorm } from "../model";
|
|
3
|
-
import { Query, QueryExecutor, QueryResult } from "../query";
|
|
3
|
+
import { Query, QueryExecutor, QueryResult, Slice } from "../query";
|
|
4
4
|
import { DataProvider } from "./provider";
|
|
5
5
|
export declare abstract class LocalProvider<T extends Model> extends DataProvider<T> {
|
|
6
6
|
#private;
|
|
@@ -12,4 +12,5 @@ export declare abstract class LocalProvider<T extends Model> extends DataProvide
|
|
|
12
12
|
queryList(request: Query<T>): Observable<QueryResult<T>>;
|
|
13
13
|
queryItem(ref: ModelRefNorm, request: Query<T>): Observable<T | undefined>;
|
|
14
14
|
queryPosition(ref: ModelRefNorm, request: Query<T>): Observable<number | undefined>;
|
|
15
|
+
clampSlice(slice: Slice): Observable<Slice>;
|
|
15
16
|
}
|
package/provider/provider.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Observable } from "rxjs";
|
|
2
2
|
import type { Model, ModelMeta, ModelRefNorm } from "../model";
|
|
3
|
-
import type { Query, QueryResult } from "../query";
|
|
3
|
+
import type { Query, QueryResult, Slice } from "../query";
|
|
4
4
|
import { DataSource } from "../source";
|
|
5
5
|
import type { CollectionStore } from "../store";
|
|
6
6
|
export declare abstract class DataProvider<T extends Model> {
|
|
@@ -24,6 +24,10 @@ export declare abstract class DataProvider<T extends Model> {
|
|
|
24
24
|
* Query item position in the list that matching by the given request
|
|
25
25
|
*/
|
|
26
26
|
abstract queryPosition(ref: ModelRefNorm, request: Query<T>): Observable<number | undefined>;
|
|
27
|
+
/**
|
|
28
|
+
* Froce Slice boundaries, useful in array, or obeservable providers
|
|
29
|
+
*/
|
|
30
|
+
clampSlice(slice: Slice): Observable<Slice>;
|
|
27
31
|
/**
|
|
28
32
|
* @returns New data source instance
|
|
29
33
|
*/
|
package/query/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { Filter, filterBy, filterMerge, FilterOp } from "./filter";
|
|
2
2
|
export { Grouper, groupBy, grouperMerge } from "./grouper";
|
|
3
|
-
export { Sorter, sortBy, sorterMerge } from "./sorter";
|
|
3
|
+
export { Sorter, sortBy, sorterMerge, SortDir, SortDirection, SortDirExtra } from "./sorter";
|
|
4
4
|
export { Slimer, slimBy, slimerMerge } from "./slimer";
|
|
5
5
|
export { Slice, sliceMerge, sliceApply, sliceInsert, sliceToPages, sliceClamp, sliceEq } from "./slice";
|
|
6
6
|
export { pathGetterCompile } from "./path";
|
package/query/sorter.d.ts
CHANGED
|
@@ -4,13 +4,13 @@ export declare const enum SortDirection {
|
|
|
4
4
|
Asc = "asc",
|
|
5
5
|
Desc = "desc"
|
|
6
6
|
}
|
|
7
|
-
type
|
|
8
|
-
type
|
|
9
|
-
dir:
|
|
7
|
+
export type SortDir = SortDirection.Asc | SortDirection.Desc | "asc" | "desc";
|
|
8
|
+
export type SortDirExtra = {
|
|
9
|
+
dir: SortDir;
|
|
10
10
|
emptyFirst: boolean;
|
|
11
11
|
};
|
|
12
12
|
export type Sorter<T extends Model> = Array<{
|
|
13
|
-
[key: string]:
|
|
13
|
+
[key: string]: SortDir | SortDirExtra;
|
|
14
14
|
}>;
|
|
15
15
|
type NormalizedEntry = {
|
|
16
16
|
path: string;
|
package/source/source.d.ts
CHANGED
|
@@ -25,6 +25,7 @@ export declare class DataSource<T extends Model> extends CdkDataSource<T | undef
|
|
|
25
25
|
readonly store: CollectionStore<T>;
|
|
26
26
|
constructor(provider: DataProvider<T>, store?: CollectionStore<T>);
|
|
27
27
|
setSlice(slice: Slice): this;
|
|
28
|
+
all(): this;
|
|
28
29
|
realod(): void;
|
|
29
30
|
getItem(ref: ModelRef): Observable<T | undefined>;
|
|
30
31
|
getItemPosition(ref: ModelRef): Observable<number | undefined>;
|