@ngutil/data 0.0.53 → 0.0.55

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/index.mjs CHANGED
@@ -7,8 +7,8 @@ export * from "./query";
7
7
  export * from "./source";
8
8
  export * from "./store";
9
9
  export class DataSourceModule {
10
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DataSourceModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
11
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.6", ngImport: i0, type: DataSourceModule, imports: [DataSourceProxy,
10
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DataSourceModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
11
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.6", ngImport: i0, type: DataSourceModule, imports: [DataSourceProxy,
12
12
  DataSourceProxyBusy,
13
13
  DataSourceProxyFilter,
14
14
  DataSourceProxyGrouper,
@@ -19,9 +19,9 @@ export class DataSourceModule {
19
19
  DataSourceProxyGrouper,
20
20
  DataSourceProxySlimer,
21
21
  DataSourceProxySorter] }); }
22
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DataSourceModule }); }
22
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DataSourceModule }); }
23
23
  }
24
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DataSourceModule, decorators: [{
24
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DataSourceModule, decorators: [{
25
25
  type: NgModule,
26
26
  args: [{
27
27
  imports: [
@@ -2,7 +2,7 @@ import { DataSource as CdkDataSource } from "@angular/cdk/collections";
2
2
  import { Directive, inject, input, Input } from "@angular/core";
3
3
  import { takeUntilDestroyed, toObservable } from "@angular/core/rxjs-interop";
4
4
  import { combineLatest, finalize, map, of, ReplaySubject, shareReplay, Subject, switchMap, takeUntil, throwError } from "rxjs";
5
- import { Busy } from "@ngutil/common";
5
+ import { BusyDirective } from "@ngutil/aria";
6
6
  import { DataProvider } from "../provider/provider";
7
7
  import { DataSource } from "./source";
8
8
  import * as i0 from "@angular/core";
@@ -68,10 +68,10 @@ export class DataSourceProxy extends CdkDataSource {
68
68
  this.#valueSub?.unsubscribe();
69
69
  this.#valueSub = undefined;
70
70
  }
71
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DataSourceProxy, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
72
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.6", type: DataSourceProxy, isStandalone: true, selector: "[nuDataSource]", inputs: { value: ["nuDataSource", "value"] }, exportAs: ["nuDataSource"], usesInheritance: true, ngImport: i0 }); }
71
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DataSourceProxy, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
72
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.6", type: DataSourceProxy, isStandalone: true, selector: "[nuDataSource]", inputs: { value: ["nuDataSource", "value"] }, exportAs: ["nuDataSource"], usesInheritance: true, ngImport: i0 }); }
73
73
  }
74
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DataSourceProxy, decorators: [{
74
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DataSourceProxy, decorators: [{
75
75
  type: Directive,
76
76
  args: [{
77
77
  standalone: true,
@@ -92,10 +92,10 @@ export class DataSourceProxyFilter {
92
92
  .pipe(takeUntilDestroyed())
93
93
  .subscribe(({ query, filter }) => query.filter.forced.set(filter));
94
94
  }
95
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DataSourceProxyFilter, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
96
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "17.3.6", type: DataSourceProxyFilter, isStandalone: true, selector: "[nuDataSource][filter]", inputs: { filter: { classPropertyName: "filter", publicName: "filter", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 }); }
95
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DataSourceProxyFilter, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
96
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.6", type: DataSourceProxyFilter, isStandalone: true, selector: "[nuDataSource][filter]", inputs: { filter: { classPropertyName: "filter", publicName: "filter", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 }); }
97
97
  }
98
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DataSourceProxyFilter, decorators: [{
98
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DataSourceProxyFilter, decorators: [{
99
99
  type: Directive,
100
100
  args: [{
101
101
  standalone: true,
@@ -112,10 +112,10 @@ export class DataSourceProxySorter {
112
112
  .pipe(takeUntilDestroyed())
113
113
  .subscribe(({ query, sorter }) => query.sorter.forced.set(sorter));
114
114
  }
115
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DataSourceProxySorter, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
116
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "17.3.6", type: DataSourceProxySorter, isStandalone: true, selector: "[nuDataSource][sorter]", inputs: { sorter: { classPropertyName: "sorter", publicName: "sorter", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 }); }
115
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DataSourceProxySorter, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
116
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.6", type: DataSourceProxySorter, isStandalone: true, selector: "[nuDataSource][sorter]", inputs: { sorter: { classPropertyName: "sorter", publicName: "sorter", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 }); }
117
117
  }
118
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DataSourceProxySorter, decorators: [{
118
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DataSourceProxySorter, decorators: [{
119
119
  type: Directive,
120
120
  args: [{
121
121
  standalone: true,
@@ -132,10 +132,10 @@ export class DataSourceProxySlimer {
132
132
  .pipe(takeUntilDestroyed())
133
133
  .subscribe(({ query, slimer }) => query.slimer.forced.set(slimer));
134
134
  }
135
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DataSourceProxySlimer, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
136
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "17.3.6", type: DataSourceProxySlimer, isStandalone: true, selector: "[nuDataSource][slimer]", inputs: { slimer: { classPropertyName: "slimer", publicName: "slimer", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 }); }
135
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DataSourceProxySlimer, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
136
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.6", type: DataSourceProxySlimer, isStandalone: true, selector: "[nuDataSource][slimer]", inputs: { slimer: { classPropertyName: "slimer", publicName: "slimer", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 }); }
137
137
  }
138
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DataSourceProxySlimer, decorators: [{
138
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DataSourceProxySlimer, decorators: [{
139
139
  type: Directive,
140
140
  args: [{
141
141
  standalone: true,
@@ -152,10 +152,10 @@ export class DataSourceProxyGrouper {
152
152
  .pipe(takeUntilDestroyed())
153
153
  .subscribe(({ query, grouper }) => query.grouper.forced.set(grouper));
154
154
  }
155
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DataSourceProxyGrouper, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
156
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "17.3.6", type: DataSourceProxyGrouper, isStandalone: true, selector: "[nuDataSource][grouper]", inputs: { grouper: { classPropertyName: "grouper", publicName: "grouper", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 }); }
155
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DataSourceProxyGrouper, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
156
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.6", type: DataSourceProxyGrouper, isStandalone: true, selector: "[nuDataSource][grouper]", inputs: { grouper: { classPropertyName: "grouper", publicName: "grouper", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 }); }
157
157
  }
158
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DataSourceProxyGrouper, decorators: [{
158
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DataSourceProxyGrouper, decorators: [{
159
159
  type: Directive,
160
160
  args: [{
161
161
  standalone: true,
@@ -163,18 +163,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImpor
163
163
  }]
164
164
  }], ctorParameters: () => [] });
165
165
  export class DataSourceProxyBusy {
166
- #proxy;
167
- #busy;
166
+ #proxy = inject(DataSourceProxy);
167
+ #busy = inject(BusyDirective);
168
168
  constructor() {
169
- this.#proxy = inject(DataSourceProxy);
170
- this.#busy = inject(Busy);
171
- this.isBusy$ = this.#proxy.value$.pipe(switchMap(value => value.isBusy$), shareReplay(1));
172
- this.#busy.connect(this.isBusy$).pipe(takeUntilDestroyed()).subscribe();
169
+ this.#proxy.value$
170
+ .pipe(takeUntilDestroyed(), switchMap(value => value.isBusy$))
171
+ .subscribe(isBusy => this.#busy.set(isBusy, "data-source"));
173
172
  }
174
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DataSourceProxyBusy, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
175
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.6", type: DataSourceProxyBusy, isStandalone: true, selector: "[nuDataSource][nuBusy]", ngImport: i0 }); }
173
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DataSourceProxyBusy, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
174
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.6", type: DataSourceProxyBusy, isStandalone: true, selector: "[nuDataSource][nuBusy]", ngImport: i0 }); }
176
175
  }
177
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DataSourceProxyBusy, decorators: [{
176
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DataSourceProxyBusy, decorators: [{
178
177
  type: Directive,
179
178
  args: [{
180
179
  standalone: true,
@@ -195,4 +194,4 @@ function coerceDataSource(value) {
195
194
  return throwError(() => new Error("Invalid DataSource value"));
196
195
  }
197
196
  }
198
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJveHkuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGF0YS9zcmMvc291cmNlL3Byb3h5LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxJQUFJLGFBQWEsRUFBb0IsTUFBTSwwQkFBMEIsQ0FBQTtBQUN4RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFhLE1BQU0sZUFBZSxDQUFBO0FBQzFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTtBQUU3RSxPQUFPLEVBQ0gsYUFBYSxFQUNiLFFBQVEsRUFDUixHQUFHLEVBRUgsRUFBRSxFQUNGLGFBQWEsRUFDYixXQUFXLEVBQ1gsT0FBTyxFQUVQLFNBQVMsRUFDVCxTQUFTLEVBQ1QsVUFBVSxFQUNiLE1BQU0sTUFBTSxDQUFBO0FBRWIsT0FBTyxFQUFFLElBQUksRUFBbUIsTUFBTSxnQkFBZ0IsQ0FBQTtBQUd0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFFbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFVBQVUsQ0FBQTs7QUFJckM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkJHO0FBTUgsTUFBTSxPQUFPLGVBQ1QsU0FBUSxhQUE0QjtJQU54Qzs7UUFnQmEsV0FBTSxHQUFHLElBQUksYUFBYSxDQUFnQixDQUFDLENBQUMsQ0FBQTtRQUM1QyxXQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFBO1FBQy9DLFdBQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDOUIsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUMxQixXQUFXLENBQUMsQ0FB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QUFZLEVBQUUsQ0FBQztRQUN2QyxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQTtJQUNuQyxDQUFDO1NBQU0sQ0FBQztRQUNKLE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUMsQ0FBQTtJQUNsRSxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGFTb3VyY2UgYXMgQ2RrRGF0YVNvdXJjZSwgQ29sbGVjdGlvblZpZXdlciB9IGZyb20gXCJAYW5ndWxhci9jZGsvY29sbGVjdGlvbnNcIlxuaW1wb3J0IHsgRGlyZWN0aXZlLCBpbmplY3QsIGlucHV0LCBJbnB1dCwgT25EZXN0cm95IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIlxuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkLCB0b09ic2VydmFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3BcIlxuXG5pbXBvcnQge1xuICAgIGNvbWJpbmVMYXRlc3QsXG4gICAgZmluYWxpemUsXG4gICAgbWFwLFxuICAgIE9ic2VydmFibGUsXG4gICAgb2YsXG4gICAgUmVwbGF5U3ViamVjdCxcbiAgICBzaGFyZVJlcGxheSxcbiAgICBTdWJqZWN0LFxuICAgIFN1YnNjcmlwdGlvbixcbiAgICBzd2l0Y2hNYXAsXG4gICAgdGFrZVVudGlsLFxuICAgIHRocm93RXJyb3Jcbn0gZnJvbSBcInJ4anNcIlxuXG5pbXBvcnQgeyBCdXN5LCBDb25uZWN0UHJvdG9jb2wgfSBmcm9tIFwiQG5ndXRpbC9jb21tb25cIlxuXG5pbXBvcnQgeyBNb2RlbCB9IGZyb20gXCIuLi9tb2RlbFwiXG5pbXBvcnQgeyBEYXRhUHJvdmlkZXIgfSBmcm9tIFwiLi4vcHJvdmlkZXIvcHJvdmlkZXJcIlxuaW1wb3J0IHsgRmlsdGVyLCBHcm91cGVyLCBTbGltZXIsIFNvcnRlciB9IGZyb20gXCIuLi9xdWVyeVwiXG5pbXBvcnQgeyBEYXRhU291cmNlIH0gZnJvbSBcIi4vc291cmNlXCJcblxuZXhwb3J0IHR5cGUgRGF0YVNvdXJjZVByb3h5SW5wdXQ8VCBleHRlbmRzIE1vZGVsPiA9IERhdGFTb3VyY2VQcm94eTxUPiB8IERhdGFTb3VyY2U8VD4gfCBEYXRhUHJvdmlkZXI8VD5cblxuLyoqXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPHRhYmxlIFtudURhdGFTb3VyY2VdPVwiLi4uXCIgW2ZpbHRlcl09XCJ7aXNBY3RpdmU6IHRydWV9XCIgW3NvcnRlcl09XCJbe25hbWU6ICdhc2MnfV1cIj48L3RhYmxlPlxuICogYGBgXG4gKlxuICogYGBgdHNcbiAqIEBDb21wb25lbnQoe1xuICogICB0ZW1wbGF0ZTogYDx0YWJsZSBbbnVEYXRhU291cmNlXT1cInVzZXJzJFwiPjwvdGFibGU+YFxuICogfSlcbiAqIGNsYXNzIFVzZXJUYWJsZSB7XG4gKiAgIHJlYWRvbmx5IHVzZXJTZXJ2aWNlID0gaW5qZWN0KFVzZXJTZXJ2aWNlKVxuICogICByZWFkb25seSB1c2VycyQgPSBVc2VyU2VydmljZS5hbGwoKVxuICogfVxuICogYGBgXG4gKlxuICogYGBgdHNcbiAqIEBDb21wb25lbnQoe1xuICogICBzZWxlY3RvcjogXCJ0YWJsZS5teS10YWJsZVwiLFxuICogICB0ZW1wbGF0ZTogYFxuICogICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0IGl0ZW1TaXplPVwiNTBcIiBjbGFzcz1cImV4YW1wbGUtdmlld3BvcnRcIj5cbiAqICAgICAgIDxkaXYgKmNka1ZpcnR1YWxGb3I9XCJsZXQgaXRlbSBvZiBkYXRhU291cmNlXCIgY2xhc3M9XCJleGFtcGxlLWl0ZW1cIj57e2l0ZW19fTwvZGl2PlxuICogICA8L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cbiAqICAgYFxuICogfSlcbiAqIGNsYXNzIFRhYmxlQ29tcG9uZW50IHtcbiAqICAgcmVhZG9ubHkgZGF0YVNvdXJjZSA9IGluamVjdChEYXRhU291cmNlUHJveHkpXG4gKiB9XG4gKiBgYGBcbiAqL1xuQERpcmVjdGl2ZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogXCJbbnVEYXRhU291cmNlXVwiLFxuICAgIGV4cG9ydEFzOiBcIm51RGF0YVNvdXJjZVwiXG59KVxuZXhwb3J0IGNsYXNzIERhdGFTb3VyY2VQcm94eTxUIGV4dGVuZHMgTW9kZWw+XG4gICAgZXh0ZW5kcyBDZGtEYXRhU291cmNlPFQgfCB1bmRlZmluZWQ+XG4gICAgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIENvbm5lY3RQcm90b2NvbFxue1xuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlLCBhbGlhczogXCJudURhdGFTb3VyY2VcIiB9KVxuICAgIHNldCB2YWx1ZSh2YWx1ZTogRGF0YVNvdXJjZVByb3h5SW5wdXQ8VD4pIHtcbiAgICAgICAgdGhpcy4jdmFsdWVTdWI/LnVuc3Vic2NyaWJlKClcbiAgICAgICAgdGhpcy4jdmFsdWVTdWIgPSBjb2VyY2VEYXRhU291cmNlPFQ+KHZhbHVlKS5zdWJzY3JpYmUodGhpcy4jdmFsdWUpXG4gICAgfVxuXG4gICAgI3ZhbHVlU3ViPzogU3Vic2NyaXB0aW9uXG4gICAgcmVhZG9ubHkgI3ZhbHVlID0gbmV3IFJlcGxheVN1YmplY3Q8RGF0YVNvdXJjZTxUPj4oMSlcbiAgICByZWFkb25seSB2YWx1ZSQgPSB0aGlzLiN2YWx1ZS5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKVxuICAgIHJlYWRvbmx5IHF1ZXJ5JCA9IHRoaXMudmFsdWUkLnBpcGUoXG4gICAgICAgIG1hcCh2YWx1ZSA9PiB2YWx1ZS5xdWVyeSQpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgIClcblxuICAgIHJlYWRvbmx5IGl0ZW1zJCA9IHRoaXMudmFsdWUkLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCh2YWx1ZSA9PiB2YWx1ZS5pdGVtcyQpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgIClcblxuICAgIHJlYWRvbmx5IGlzQnVzeSQgPSB0aGlzLnZhbHVlJC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAodmFsdWUgPT4gdmFsdWUuaXNCdXN5JCksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKVxuXG4gICAgcmVhZG9ubHkgaXNFbXB0eSQgPSB0aGlzLnZhbHVlJC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAodmFsdWUgPT4gdmFsdWUuaXNFbXB0eSQpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgIClcblxuICAgICNjdlN1YnMgPSBuZXcgTWFwPENvbGxlY3Rpb25WaWV3ZXIsIFN1YmplY3Q8dm9pZD4+KClcblxuICAgIG92ZXJyaWRlIGNvbm5lY3QoY29sbGVjdGlvblZpZXdlcjogQ29sbGVjdGlvblZpZXdlcik6IE9ic2VydmFibGU8cmVhZG9ubHkgKFQgfCB1bmRlZmluZWQpW10+IHtcbiAgICAgICAgY29uc3QgdW50aWwgPSBuZXcgU3ViamVjdDx2b2lkPigpXG5cbiAgICAgICAgdGhpcy4jY3ZTdWJzLmdldChjb2xsZWN0aW9uVmlld2VyKT8ubmV4dCgpXG4gICAgICAgIHRoaXMuI2N2U3Vicy5zZXQoY29sbGVjdGlvblZpZXdlciwgdW50aWwpXG5cbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUkLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAodmFsdWUgPT4gdmFsdWUuY29ubmVjdChjb2xsZWN0aW9uVmlld2VyKSksXG4gICAgICAgICAgICB0YWtlVW50aWwodW50aWwpLFxuICAgICAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy4jY3ZTdWJzLmRlbGV0ZShjb2xsZWN0aW9uVmlld2VyKSlcbiAgICAgICAgKVxuICAgIH1cblxuICAgIG92ZXJyaWRlIGRpc2Nvbm5lY3QoY29sbGVjdGlvblZpZXdlcjogQ29sbGVjdGlvblZpZXdlcik6IHZvaWQge1xuICAgICAgICB0aGlzLiNjdlN1YnMuZ2V0KGNvbGxlY3Rpb25WaWV3ZXIpPy5uZXh0KClcbiAgICAgICAgdGhpcy4jY3ZTdWJzLmRlbGV0ZShjb2xsZWN0aW9uVmlld2VyKVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLiN2YWx1ZVN1Yj8udW5zdWJzY3JpYmUoKVxuICAgICAgICB0aGlzLiN2YWx1ZVN1YiA9IHVuZGVmaW5lZFxuICAgIH1cbn1cblxuQERpcmVjdGl2ZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogXCJbbnVEYXRhU291cmNlXVtmaWx0ZXJdXCJcbn0pXG5leHBvcnQgY2xhc3MgRGF0YVNvdXJjZVByb3h5RmlsdGVyPFQgZXh0ZW5kcyBNb2RlbCwgRiBleHRlbmRzIEZpbHRlcjxUPj4ge1xuICAgIHJlYWRvbmx5ICNwcm94eSA9IGluamVjdDxEYXRhU291cmNlUHJveHk8VD4+KERhdGFTb3VyY2VQcm94eSlcbiAgICByZWFkb25seSBmaWx0ZXIgPSBpbnB1dC5yZXF1aXJlZDxGPigpXG4gICAgcmVhZG9ubHkgZmlsdGVyJCA9IHRvT2JzZXJ2YWJsZSh0aGlzLmZpbHRlcilcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBjb21iaW5lTGF0ZXN0KHsgcXVlcnk6IHRoaXMuI3Byb3h5LnF1ZXJ5JCwgZmlsdGVyOiB0aGlzLmZpbHRlciQgfSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoeyBxdWVyeSwgZmlsdGVyIH0pID0+IHF1ZXJ5LmZpbHRlci5mb3JjZWQuc2V0KGZpbHRlcikpXG4gICAgfVxufVxuXG5ARGlyZWN0aXZlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiBcIltudURhdGFTb3VyY2VdW3NvcnRlcl1cIlxufSlcbmV4cG9ydCBjbGFzcyBEYXRhU291cmNlUHJveHlTb3J0ZXI8VCBleHRlbmRzIE1vZGVsLCBTIGV4dGVuZHMgU29ydGVyPFQ+PiB7XG4gICAgcmVhZG9ubHkgI3Byb3h5ID0gaW5qZWN0PERhdGFTb3VyY2VQcm94eTxUPj4oRGF0YVNvdXJjZVByb3h5KVxuICAgIHJlYWRvbmx5IHNvcnRlciA9IGlucHV0LnJlcXVpcmVkPFM+KClcbiAgICByZWFkb25seSBzb3J0ZXIkID0gdG9PYnNlcnZhYmxlKHRoaXMuc29ydGVyKVxuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGNvbWJpbmVMYXRlc3QoeyBxdWVyeTogdGhpcy4jcHJveHkucXVlcnkkLCBzb3J0ZXI6IHRoaXMuc29ydGVyJCB9KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh7IHF1ZXJ5LCBzb3J0ZXIgfSkgPT4gcXVlcnkuc29ydGVyLmZvcmNlZC5zZXQoc29ydGVyKSlcbiAgICB9XG59XG5cbkBEaXJlY3RpdmUoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6IFwiW251RGF0YVNvdXJjZV1bc2xpbWVyXVwiXG59KVxuZXhwb3J0IGNsYXNzIERhdGFTb3VyY2VQcm94eVNsaW1lcjxUIGV4dGVuZHMgTW9kZWwsIFMgZXh0ZW5kcyBTbGltZXI8VD4+IHtcbiAgICByZWFkb25seSAjcHJveHkgPSBpbmplY3Q8RGF0YVNvdXJjZVByb3h5PFQ+PihEYXRhU291cmNlUHJveHkpXG4gICAgcmVhZG9ubHkgc2xpbWVyID0gaW5wdXQucmVxdWlyZWQ8Uz4oKVxuICAgIHJlYWRvbmx5IHNsaW1lciQgPSB0b09ic2VydmFibGUodGhpcy5zbGltZXIpXG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgY29tYmluZUxhdGVzdCh7IHF1ZXJ5OiB0aGlzLiNwcm94eS5xdWVyeSQsIHNsaW1lcjogdGhpcy5zbGltZXIkIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHsgcXVlcnksIHNsaW1lciB9KSA9PiBxdWVyeS5zbGltZXIuZm9yY2VkLnNldChzbGltZXIpKVxuICAgIH1cbn1cblxuQERpcmVjdGl2ZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogXCJbbnVEYXRhU291cmNlXVtncm91cGVyXVwiXG59KVxuZXhwb3J0IGNsYXNzIERhdGFTb3VyY2VQcm94eUdyb3VwZXI8VCBleHRlbmRzIE1vZGVsLCBHIGV4dGVuZHMgR3JvdXBlcjxUPj4ge1xuICAgIHJlYWRvbmx5ICNwcm94eSA9IGluamVjdDxEYXRhU291cmNlUHJveHk8VD4+KERhdGFTb3VyY2VQcm94eSlcbiAgICByZWFkb25seSBncm91cGVyID0gaW5wdXQucmVxdWlyZWQ8Rz4oKVxuICAgIHJlYWRvbmx5IGdyb3VwZXIkID0gdG9PYnNlcnZhYmxlKHRoaXMuZ3JvdXBlcilcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBjb21iaW5lTGF0ZXN0KHsgcXVlcnk6IHRoaXMuI3Byb3h5LnF1ZXJ5JCwgZ3JvdXBlcjogdGhpcy5ncm91cGVyJCB9KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh7IHF1ZXJ5LCBncm91cGVyIH0pID0+IHF1ZXJ5Lmdyb3VwZXIuZm9yY2VkLnNldChncm91cGVyKSlcbiAgICB9XG59XG5cbkBEaXJlY3RpdmUoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6IFwiW251RGF0YVNvdXJjZV1bbnVCdXN5XVwiXG59KVxuZXhwb3J0IGNsYXNzIERhdGFTb3VyY2VQcm94eUJ1c3kge1xuICAgIHJlYWRvbmx5ICNwcm94eSA9IGluamVjdDxEYXRhU291cmNlUHJveHk8YW55Pj4oRGF0YVNvdXJjZVByb3h5KVxuICAgIHJlYWRvbmx5ICNidXN5ID0gaW5qZWN0PEJ1c3k8YW55Pj4oQnVzeSlcblxuICAgIHJlYWRvbmx5IGlzQnVzeSQgPSB0aGlzLiNwcm94eS52YWx1ZSQucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKHZhbHVlID0+IHZhbHVlLmlzQnVzeSQpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgIClcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLiNidXN5LmNvbm5lY3QodGhpcy5pc0J1c3kkKS5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoKVxuICAgIH1cbn1cblxuZnVuY3Rpb24gY29lcmNlRGF0YVNvdXJjZTxUIGV4dGVuZHMgTW9kZWw+KHZhbHVlOiBEYXRhU291cmNlUHJveHlJbnB1dDxUPik6IE9ic2VydmFibGU8RGF0YVNvdXJjZTxUPj4ge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGFTb3VyY2VQcm94eSkge1xuICAgICAgICByZXR1cm4gdmFsdWUudmFsdWUkXG4gICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGFTb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIG9mKHZhbHVlKVxuICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRhUHJvdmlkZXIpIHtcbiAgICAgICAgcmV0dXJuIG9mKHZhbHVlLnRvRGF0YVNvdXJjZSgpKVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcihcIkludmFsaWQgRGF0YVNvdXJjZSB2YWx1ZVwiKSlcbiAgICB9XG59XG4iXX0=
197
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJveHkuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGF0YS9zcmMvc291cmNlL3Byb3h5LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxJQUFJLGFBQWEsRUFBb0IsTUFBTSwwQkFBMEIsQ0FBQTtBQUN4RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFhLE1BQU0sZUFBZSxDQUFBO0FBQzFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTtBQUU3RSxPQUFPLEVBQ0gsYUFBYSxFQUNiLFFBQVEsRUFDUixHQUFHLEVBRUgsRUFBRSxFQUNGLGFBQWEsRUFDYixXQUFXLEVBQ1gsT0FBTyxFQUVQLFNBQVMsRUFDVCxTQUFTLEVBQ1QsVUFBVSxFQUNiLE1BQU0sTUFBTSxDQUFBO0FBRWIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUk1QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFFbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFVBQVUsQ0FBQTs7QUFJckM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkJHO0FBTUgsTUFBTSxPQUFPLGVBQ1QsU0FBUSxhQUE0QjtJQU54Qzs7UUFnQmEsV0FBTSxHQUFHLElBQUksYUFBYSxDQUFnQixDQUFDLENBQUMsQ0FBQTtRQUM1QyxXQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFBO1FBQy9DLFdBQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDOUIsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUMxQixXQUFXLENBQUMsQ0FBQyxD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QUM7U0FBTSxDQUFDO1FBQ0osT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFBO0lBQ2xFLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0YVNvdXJjZSBhcyBDZGtEYXRhU291cmNlLCBDb2xsZWN0aW9uVmlld2VyIH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9jb2xsZWN0aW9uc1wiXG5pbXBvcnQgeyBEaXJlY3RpdmUsIGluamVjdCwgaW5wdXQsIElucHV0LCBPbkRlc3Ryb3kgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiXG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQsIHRvT2JzZXJ2YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcFwiXG5cbmltcG9ydCB7XG4gICAgY29tYmluZUxhdGVzdCxcbiAgICBmaW5hbGl6ZSxcbiAgICBtYXAsXG4gICAgT2JzZXJ2YWJsZSxcbiAgICBvZixcbiAgICBSZXBsYXlTdWJqZWN0LFxuICAgIHNoYXJlUmVwbGF5LFxuICAgIFN1YmplY3QsXG4gICAgU3Vic2NyaXB0aW9uLFxuICAgIHN3aXRjaE1hcCxcbiAgICB0YWtlVW50aWwsXG4gICAgdGhyb3dFcnJvclxufSBmcm9tIFwicnhqc1wiXG5cbmltcG9ydCB7IEJ1c3lEaXJlY3RpdmUgfSBmcm9tIFwiQG5ndXRpbC9hcmlhXCJcbmltcG9ydCB7IENvbm5lY3RQcm90b2NvbCB9IGZyb20gXCJAbmd1dGlsL2NvbW1vblwiXG5cbmltcG9ydCB7IE1vZGVsIH0gZnJvbSBcIi4uL21vZGVsXCJcbmltcG9ydCB7IERhdGFQcm92aWRlciB9IGZyb20gXCIuLi9wcm92aWRlci9wcm92aWRlclwiXG5pbXBvcnQgeyBGaWx0ZXIsIEdyb3VwZXIsIFNsaW1lciwgU29ydGVyIH0gZnJvbSBcIi4uL3F1ZXJ5XCJcbmltcG9ydCB7IERhdGFTb3VyY2UgfSBmcm9tIFwiLi9zb3VyY2VcIlxuXG5leHBvcnQgdHlwZSBEYXRhU291cmNlUHJveHlJbnB1dDxUIGV4dGVuZHMgTW9kZWw+ID0gRGF0YVNvdXJjZVByb3h5PFQ+IHwgRGF0YVNvdXJjZTxUPiB8IERhdGFQcm92aWRlcjxUPlxuXG4vKipcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8dGFibGUgW251RGF0YVNvdXJjZV09XCIuLi5cIiBbZmlsdGVyXT1cIntpc0FjdGl2ZTogdHJ1ZX1cIiBbc29ydGVyXT1cIlt7bmFtZTogJ2FzYyd9XVwiPjwvdGFibGU+XG4gKiBgYGBcbiAqXG4gKiBgYGB0c1xuICogQENvbXBvbmVudCh7XG4gKiAgIHRlbXBsYXRlOiBgPHRhYmxlIFtudURhdGFTb3VyY2VdPVwidXNlcnMkXCI+PC90YWJsZT5gXG4gKiB9KVxuICogY2xhc3MgVXNlclRhYmxlIHtcbiAqICAgcmVhZG9ubHkgdXNlclNlcnZpY2UgPSBpbmplY3QoVXNlclNlcnZpY2UpXG4gKiAgIHJlYWRvbmx5IHVzZXJzJCA9IFVzZXJTZXJ2aWNlLmFsbCgpXG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBgYGB0c1xuICogQENvbXBvbmVudCh7XG4gKiAgIHNlbGVjdG9yOiBcInRhYmxlLm15LXRhYmxlXCIsXG4gKiAgIHRlbXBsYXRlOiBgXG4gKiAgIDxjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQgaXRlbVNpemU9XCI1MFwiIGNsYXNzPVwiZXhhbXBsZS12aWV3cG9ydFwiPlxuICogICAgICAgPGRpdiAqY2RrVmlydHVhbEZvcj1cImxldCBpdGVtIG9mIGRhdGFTb3VyY2VcIiBjbGFzcz1cImV4YW1wbGUtaXRlbVwiPnt7aXRlbX19PC9kaXY+XG4gKiAgIDwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuICogICBgXG4gKiB9KVxuICogY2xhc3MgVGFibGVDb21wb25lbnQge1xuICogICByZWFkb25seSBkYXRhU291cmNlID0gaW5qZWN0KERhdGFTb3VyY2VQcm94eSlcbiAqIH1cbiAqIGBgYFxuICovXG5ARGlyZWN0aXZlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiBcIltudURhdGFTb3VyY2VdXCIsXG4gICAgZXhwb3J0QXM6IFwibnVEYXRhU291cmNlXCJcbn0pXG5leHBvcnQgY2xhc3MgRGF0YVNvdXJjZVByb3h5PFQgZXh0ZW5kcyBNb2RlbD5cbiAgICBleHRlbmRzIENka0RhdGFTb3VyY2U8VCB8IHVuZGVmaW5lZD5cbiAgICBpbXBsZW1lbnRzIE9uRGVzdHJveSwgQ29ubmVjdFByb3RvY29sXG57XG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUsIGFsaWFzOiBcIm51RGF0YVNvdXJjZVwiIH0pXG4gICAgc2V0IHZhbHVlKHZhbHVlOiBEYXRhU291cmNlUHJveHlJbnB1dDxUPikge1xuICAgICAgICB0aGlzLiN2YWx1ZVN1Yj8udW5zdWJzY3JpYmUoKVxuICAgICAgICB0aGlzLiN2YWx1ZVN1YiA9IGNvZXJjZURhdGFTb3VyY2U8VD4odmFsdWUpLnN1YnNjcmliZSh0aGlzLiN2YWx1ZSlcbiAgICB9XG5cbiAgICAjdmFsdWVTdWI/OiBTdWJzY3JpcHRpb25cbiAgICByZWFkb25seSAjdmFsdWUgPSBuZXcgUmVwbGF5U3ViamVjdDxEYXRhU291cmNlPFQ+PigxKVxuICAgIHJlYWRvbmx5IHZhbHVlJCA9IHRoaXMuI3ZhbHVlLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgcmVhZG9ubHkgcXVlcnkkID0gdGhpcy52YWx1ZSQucGlwZShcbiAgICAgICAgbWFwKHZhbHVlID0+IHZhbHVlLnF1ZXJ5JCksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKVxuXG4gICAgcmVhZG9ubHkgaXRlbXMkID0gdGhpcy52YWx1ZSQucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKHZhbHVlID0+IHZhbHVlLml0ZW1zJCksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKVxuXG4gICAgcmVhZG9ubHkgaXNCdXN5JCA9IHRoaXMudmFsdWUkLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCh2YWx1ZSA9PiB2YWx1ZS5pc0J1c3kkKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApXG5cbiAgICByZWFkb25seSBpc0VtcHR5JCA9IHRoaXMudmFsdWUkLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCh2YWx1ZSA9PiB2YWx1ZS5pc0VtcHR5JCksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKVxuXG4gICAgI2N2U3VicyA9IG5ldyBNYXA8Q29sbGVjdGlvblZpZXdlciwgU3ViamVjdDx2b2lkPj4oKVxuXG4gICAgb3ZlcnJpZGUgY29ubmVjdChjb2xsZWN0aW9uVmlld2VyOiBDb2xsZWN0aW9uVmlld2VyKTogT2JzZXJ2YWJsZTxyZWFkb25seSAoVCB8IHVuZGVmaW5lZClbXT4ge1xuICAgICAgICBjb25zdCB1bnRpbCA9IG5ldyBTdWJqZWN0PHZvaWQ+KClcblxuICAgICAgICB0aGlzLiNjdlN1YnMuZ2V0KGNvbGxlY3Rpb25WaWV3ZXIpPy5uZXh0KClcbiAgICAgICAgdGhpcy4jY3ZTdWJzLnNldChjb2xsZWN0aW9uVmlld2VyLCB1bnRpbClcblxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSQucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcCh2YWx1ZSA9PiB2YWx1ZS5jb25uZWN0KGNvbGxlY3Rpb25WaWV3ZXIpKSxcbiAgICAgICAgICAgIHRha2VVbnRpbCh1bnRpbCksXG4gICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLiNjdlN1YnMuZGVsZXRlKGNvbGxlY3Rpb25WaWV3ZXIpKVxuICAgICAgICApXG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgZGlzY29ubmVjdChjb2xsZWN0aW9uVmlld2VyOiBDb2xsZWN0aW9uVmlld2VyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuI2N2U3Vicy5nZXQoY29sbGVjdGlvblZpZXdlcik/Lm5leHQoKVxuICAgICAgICB0aGlzLiNjdlN1YnMuZGVsZXRlKGNvbGxlY3Rpb25WaWV3ZXIpXG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuI3ZhbHVlU3ViPy51bnN1YnNjcmliZSgpXG4gICAgICAgIHRoaXMuI3ZhbHVlU3ViID0gdW5kZWZpbmVkXG4gICAgfVxufVxuXG5ARGlyZWN0aXZlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiBcIltudURhdGFTb3VyY2VdW2ZpbHRlcl1cIlxufSlcbmV4cG9ydCBjbGFzcyBEYXRhU291cmNlUHJveHlGaWx0ZXI8VCBleHRlbmRzIE1vZGVsLCBGIGV4dGVuZHMgRmlsdGVyPFQ+PiB7XG4gICAgcmVhZG9ubHkgI3Byb3h5ID0gaW5qZWN0PERhdGFTb3VyY2VQcm94eTxUPj4oRGF0YVNvdXJjZVByb3h5KVxuICAgIHJlYWRvbmx5IGZpbHRlciA9IGlucHV0LnJlcXVpcmVkPEY+KClcbiAgICByZWFkb25seSBmaWx0ZXIkID0gdG9PYnNlcnZhYmxlKHRoaXMuZmlsdGVyKVxuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGNvbWJpbmVMYXRlc3QoeyBxdWVyeTogdGhpcy4jcHJveHkucXVlcnkkLCBmaWx0ZXI6IHRoaXMuZmlsdGVyJCB9KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh7IHF1ZXJ5LCBmaWx0ZXIgfSkgPT4gcXVlcnkuZmlsdGVyLmZvcmNlZC5zZXQoZmlsdGVyKSlcbiAgICB9XG59XG5cbkBEaXJlY3RpdmUoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6IFwiW251RGF0YVNvdXJjZV1bc29ydGVyXVwiXG59KVxuZXhwb3J0IGNsYXNzIERhdGFTb3VyY2VQcm94eVNvcnRlcjxUIGV4dGVuZHMgTW9kZWwsIFMgZXh0ZW5kcyBTb3J0ZXI8VD4+IHtcbiAgICByZWFkb25seSAjcHJveHkgPSBpbmplY3Q8RGF0YVNvdXJjZVByb3h5PFQ+PihEYXRhU291cmNlUHJveHkpXG4gICAgcmVhZG9ubHkgc29ydGVyID0gaW5wdXQucmVxdWlyZWQ8Uz4oKVxuICAgIHJlYWRvbmx5IHNvcnRlciQgPSB0b09ic2VydmFibGUodGhpcy5zb3J0ZXIpXG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgY29tYmluZUxhdGVzdCh7IHF1ZXJ5OiB0aGlzLiNwcm94eS5xdWVyeSQsIHNvcnRlcjogdGhpcy5zb3J0ZXIkIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHsgcXVlcnksIHNvcnRlciB9KSA9PiBxdWVyeS5zb3J0ZXIuZm9yY2VkLnNldChzb3J0ZXIpKVxuICAgIH1cbn1cblxuQERpcmVjdGl2ZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogXCJbbnVEYXRhU291cmNlXVtzbGltZXJdXCJcbn0pXG5leHBvcnQgY2xhc3MgRGF0YVNvdXJjZVByb3h5U2xpbWVyPFQgZXh0ZW5kcyBNb2RlbCwgUyBleHRlbmRzIFNsaW1lcjxUPj4ge1xuICAgIHJlYWRvbmx5ICNwcm94eSA9IGluamVjdDxEYXRhU291cmNlUHJveHk8VD4+KERhdGFTb3VyY2VQcm94eSlcbiAgICByZWFkb25seSBzbGltZXIgPSBpbnB1dC5yZXF1aXJlZDxTPigpXG4gICAgcmVhZG9ubHkgc2xpbWVyJCA9IHRvT2JzZXJ2YWJsZSh0aGlzLnNsaW1lcilcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBjb21iaW5lTGF0ZXN0KHsgcXVlcnk6IHRoaXMuI3Byb3h5LnF1ZXJ5JCwgc2xpbWVyOiB0aGlzLnNsaW1lciQgfSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoeyBxdWVyeSwgc2xpbWVyIH0pID0+IHF1ZXJ5LnNsaW1lci5mb3JjZWQuc2V0KHNsaW1lcikpXG4gICAgfVxufVxuXG5ARGlyZWN0aXZlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiBcIltudURhdGFTb3VyY2VdW2dyb3VwZXJdXCJcbn0pXG5leHBvcnQgY2xhc3MgRGF0YVNvdXJjZVByb3h5R3JvdXBlcjxUIGV4dGVuZHMgTW9kZWwsIEcgZXh0ZW5kcyBHcm91cGVyPFQ+PiB7XG4gICAgcmVhZG9ubHkgI3Byb3h5ID0gaW5qZWN0PERhdGFTb3VyY2VQcm94eTxUPj4oRGF0YVNvdXJjZVByb3h5KVxuICAgIHJlYWRvbmx5IGdyb3VwZXIgPSBpbnB1dC5yZXF1aXJlZDxHPigpXG4gICAgcmVhZG9ubHkgZ3JvdXBlciQgPSB0b09ic2VydmFibGUodGhpcy5ncm91cGVyKVxuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGNvbWJpbmVMYXRlc3QoeyBxdWVyeTogdGhpcy4jcHJveHkucXVlcnkkLCBncm91cGVyOiB0aGlzLmdyb3VwZXIkIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHsgcXVlcnksIGdyb3VwZXIgfSkgPT4gcXVlcnkuZ3JvdXBlci5mb3JjZWQuc2V0KGdyb3VwZXIpKVxuICAgIH1cbn1cblxuQERpcmVjdGl2ZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogXCJbbnVEYXRhU291cmNlXVtudUJ1c3ldXCJcbn0pXG5leHBvcnQgY2xhc3MgRGF0YVNvdXJjZVByb3h5QnVzeSB7XG4gICAgcmVhZG9ubHkgI3Byb3h5ID0gaW5qZWN0PERhdGFTb3VyY2VQcm94eTxhbnk+PihEYXRhU291cmNlUHJveHkpXG4gICAgcmVhZG9ubHkgI2J1c3kgPSBpbmplY3QoQnVzeURpcmVjdGl2ZSlcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLiNwcm94eS52YWx1ZSRcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCh2YWx1ZSA9PiB2YWx1ZS5pc0J1c3kkKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZShpc0J1c3kgPT4gdGhpcy4jYnVzeS5zZXQoaXNCdXN5LCBcImRhdGEtc291cmNlXCIpKVxuICAgIH1cbn1cblxuZnVuY3Rpb24gY29lcmNlRGF0YVNvdXJjZTxUIGV4dGVuZHMgTW9kZWw+KHZhbHVlOiBEYXRhU291cmNlUHJveHlJbnB1dDxUPik6IE9ic2VydmFibGU8RGF0YVNvdXJjZTxUPj4ge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGFTb3VyY2VQcm94eSkge1xuICAgICAgICByZXR1cm4gdmFsdWUudmFsdWUkXG4gICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGFTb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIG9mKHZhbHVlKVxuICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRhUHJvdmlkZXIpIHtcbiAgICAgICAgcmV0dXJuIG9mKHZhbHVlLnRvRGF0YVNvdXJjZSgpKVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcihcIkludmFsaWQgRGF0YVNvdXJjZSB2YWx1ZVwiKSlcbiAgICB9XG59XG4iXX0=
@@ -3,8 +3,9 @@ import { Directive, Input, inject, input, NgModule } from '@angular/core';
3
3
  import { DataSource as DataSource$1 } from '@angular/cdk/collections';
4
4
  import { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';
5
5
  import { BehaviorSubject, Observable, combineLatest, map, shareReplay, take, of, ReplaySubject, switchMap, distinctUntilChanged, tap, debounceTime, Subject, takeUntil, finalize, throwError } from 'rxjs';
6
- import { deepClone, deepFreeze, isPlainObject, isTruthy, isFalsy, toSorted, Busy } from '@ngutil/common';
6
+ import { BusyDirective } from '@ngutil/aria';
7
7
  import { flattenDepth, isEqual, intersection, flattenDeep } from 'lodash';
8
+ import { deepClone, deepFreeze, isPlainObject, isTruthy, isFalsy, toSorted } from '@ngutil/common';
8
9
 
9
10
  function pathGetterCompile(path) {
10
11
  if (!path || path.length === 0) {
@@ -1142,10 +1143,10 @@ class DataSourceProxy extends DataSource$1 {
1142
1143
  this.#valueSub?.unsubscribe();
1143
1144
  this.#valueSub = undefined;
1144
1145
  }
1145
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DataSourceProxy, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
1146
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.6", type: DataSourceProxy, isStandalone: true, selector: "[nuDataSource]", inputs: { value: ["nuDataSource", "value"] }, exportAs: ["nuDataSource"], usesInheritance: true, ngImport: i0 }); }
1146
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DataSourceProxy, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
1147
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.6", type: DataSourceProxy, isStandalone: true, selector: "[nuDataSource]", inputs: { value: ["nuDataSource", "value"] }, exportAs: ["nuDataSource"], usesInheritance: true, ngImport: i0 }); }
1147
1148
  }
1148
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DataSourceProxy, decorators: [{
1149
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DataSourceProxy, decorators: [{
1149
1150
  type: Directive,
1150
1151
  args: [{
1151
1152
  standalone: true,
@@ -1166,10 +1167,10 @@ class DataSourceProxyFilter {
1166
1167
  .pipe(takeUntilDestroyed())
1167
1168
  .subscribe(({ query, filter }) => query.filter.forced.set(filter));
1168
1169
  }
1169
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DataSourceProxyFilter, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1170
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "17.3.6", type: DataSourceProxyFilter, isStandalone: true, selector: "[nuDataSource][filter]", inputs: { filter: { classPropertyName: "filter", publicName: "filter", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 }); }
1170
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DataSourceProxyFilter, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1171
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.6", type: DataSourceProxyFilter, isStandalone: true, selector: "[nuDataSource][filter]", inputs: { filter: { classPropertyName: "filter", publicName: "filter", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 }); }
1171
1172
  }
1172
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DataSourceProxyFilter, decorators: [{
1173
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DataSourceProxyFilter, decorators: [{
1173
1174
  type: Directive,
1174
1175
  args: [{
1175
1176
  standalone: true,
@@ -1186,10 +1187,10 @@ class DataSourceProxySorter {
1186
1187
  .pipe(takeUntilDestroyed())
1187
1188
  .subscribe(({ query, sorter }) => query.sorter.forced.set(sorter));
1188
1189
  }
1189
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DataSourceProxySorter, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1190
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "17.3.6", type: DataSourceProxySorter, isStandalone: true, selector: "[nuDataSource][sorter]", inputs: { sorter: { classPropertyName: "sorter", publicName: "sorter", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 }); }
1190
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DataSourceProxySorter, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1191
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.6", type: DataSourceProxySorter, isStandalone: true, selector: "[nuDataSource][sorter]", inputs: { sorter: { classPropertyName: "sorter", publicName: "sorter", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 }); }
1191
1192
  }
1192
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DataSourceProxySorter, decorators: [{
1193
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DataSourceProxySorter, decorators: [{
1193
1194
  type: Directive,
1194
1195
  args: [{
1195
1196
  standalone: true,
@@ -1206,10 +1207,10 @@ class DataSourceProxySlimer {
1206
1207
  .pipe(takeUntilDestroyed())
1207
1208
  .subscribe(({ query, slimer }) => query.slimer.forced.set(slimer));
1208
1209
  }
1209
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DataSourceProxySlimer, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1210
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "17.3.6", type: DataSourceProxySlimer, isStandalone: true, selector: "[nuDataSource][slimer]", inputs: { slimer: { classPropertyName: "slimer", publicName: "slimer", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 }); }
1210
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DataSourceProxySlimer, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1211
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.6", type: DataSourceProxySlimer, isStandalone: true, selector: "[nuDataSource][slimer]", inputs: { slimer: { classPropertyName: "slimer", publicName: "slimer", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 }); }
1211
1212
  }
1212
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DataSourceProxySlimer, decorators: [{
1213
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DataSourceProxySlimer, decorators: [{
1213
1214
  type: Directive,
1214
1215
  args: [{
1215
1216
  standalone: true,
@@ -1226,10 +1227,10 @@ class DataSourceProxyGrouper {
1226
1227
  .pipe(takeUntilDestroyed())
1227
1228
  .subscribe(({ query, grouper }) => query.grouper.forced.set(grouper));
1228
1229
  }
1229
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DataSourceProxyGrouper, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1230
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "17.3.6", type: DataSourceProxyGrouper, isStandalone: true, selector: "[nuDataSource][grouper]", inputs: { grouper: { classPropertyName: "grouper", publicName: "grouper", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 }); }
1230
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DataSourceProxyGrouper, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1231
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.6", type: DataSourceProxyGrouper, isStandalone: true, selector: "[nuDataSource][grouper]", inputs: { grouper: { classPropertyName: "grouper", publicName: "grouper", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 }); }
1231
1232
  }
1232
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DataSourceProxyGrouper, decorators: [{
1233
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DataSourceProxyGrouper, decorators: [{
1233
1234
  type: Directive,
1234
1235
  args: [{
1235
1236
  standalone: true,
@@ -1237,18 +1238,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImpor
1237
1238
  }]
1238
1239
  }], ctorParameters: () => [] });
1239
1240
  class DataSourceProxyBusy {
1240
- #proxy;
1241
- #busy;
1241
+ #proxy = inject(DataSourceProxy);
1242
+ #busy = inject(BusyDirective);
1242
1243
  constructor() {
1243
- this.#proxy = inject(DataSourceProxy);
1244
- this.#busy = inject(Busy);
1245
- this.isBusy$ = this.#proxy.value$.pipe(switchMap(value => value.isBusy$), shareReplay(1));
1246
- this.#busy.connect(this.isBusy$).pipe(takeUntilDestroyed()).subscribe();
1244
+ this.#proxy.value$
1245
+ .pipe(takeUntilDestroyed(), switchMap(value => value.isBusy$))
1246
+ .subscribe(isBusy => this.#busy.set(isBusy, "data-source"));
1247
1247
  }
1248
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DataSourceProxyBusy, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1249
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.6", type: DataSourceProxyBusy, isStandalone: true, selector: "[nuDataSource][nuBusy]", ngImport: i0 }); }
1248
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DataSourceProxyBusy, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1249
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.6", type: DataSourceProxyBusy, isStandalone: true, selector: "[nuDataSource][nuBusy]", ngImport: i0 }); }
1250
1250
  }
1251
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DataSourceProxyBusy, decorators: [{
1251
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DataSourceProxyBusy, decorators: [{
1252
1252
  type: Directive,
1253
1253
  args: [{
1254
1254
  standalone: true,
@@ -1433,8 +1433,8 @@ class ObservableProvider extends LocalProvider {
1433
1433
  }
1434
1434
 
1435
1435
  class DataSourceModule {
1436
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DataSourceModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
1437
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.6", ngImport: i0, type: DataSourceModule, imports: [DataSourceProxy,
1436
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DataSourceModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
1437
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.6", ngImport: i0, type: DataSourceModule, imports: [DataSourceProxy,
1438
1438
  DataSourceProxyBusy,
1439
1439
  DataSourceProxyFilter,
1440
1440
  DataSourceProxyGrouper,
@@ -1445,9 +1445,9 @@ class DataSourceModule {
1445
1445
  DataSourceProxyGrouper,
1446
1446
  DataSourceProxySlimer,
1447
1447
  DataSourceProxySorter] }); }
1448
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DataSourceModule }); }
1448
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DataSourceModule }); }
1449
1449
  }
1450
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DataSourceModule, decorators: [{
1450
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DataSourceModule, decorators: [{
1451
1451
  type: NgModule,
1452
1452
  args: [{
1453
1453
  imports: [
@@ -1 +1 @@
1
- {"version":3,"file":"ngutil-data.mjs","sources":["../../../../packages/data/src/query/path.ts","../../../../packages/data/src/query/common.ts","../../../../packages/data/src/query/query-property.ts","../../../../packages/data/src/query/filter.ts","../../../../packages/data/src/query/grouper.ts","../../../../packages/data/src/query/sorter.ts","../../../../packages/data/src/query/slimer.ts","../../../../packages/data/src/query/slice.ts","../../../../packages/data/src/query/query.ts","../../../../packages/data/src/query/executor.ts","../../../../packages/data/src/store/collection-store.ts","../../../../packages/data/src/store/memory-store.ts","../../../../packages/data/src/source/source.ts","../../../../packages/data/src/provider/provider.ts","../../../../packages/data/src/source/proxy.directive.ts","../../../../packages/data/src/model/meta.ts","../../../../packages/data/src/provider/local.ts","../../../../packages/data/src/provider/array.ts","../../../../packages/data/src/provider/observable.ts","../../../../packages/data/src/index.ts","../../../../packages/data/src/ngutil-data.ts"],"sourcesContent":["import { 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","export function readonlyProp(o: unknown, n: string | symbol, v: unknown) {\n Object.defineProperty(o, n, {\n value: v,\n configurable: false,\n enumerable: true,\n writable: false\n })\n}\n\nconst NORMALIZED = Symbol(\"NORMALIZED\")\nconst IS_NORMALIZED = Symbol(\"IS_NORMALIZED\")\n\nexport function normalize(obj: any, normalizer: (v: any) => any): any {\n if ((obj as any)[IS_NORMALIZED]) {\n return obj as any\n }\n\n if ((obj as any)[NORMALIZED] == null) {\n const normalized = normalizer(obj)\n Object.defineProperty(obj, NORMALIZED, {\n value: normalized,\n configurable: false,\n enumerable: false,\n writable: false\n })\n\n Object.defineProperty(normalize, IS_NORMALIZED, {\n value: true,\n configurable: false,\n enumerable: false,\n writable: false\n })\n\n return normalized\n }\n\n return (obj as any)[NORMALIZED]\n}\n","import { BehaviorSubject, combineLatest, map, Observable, shareReplay } from \"rxjs\"\n\nimport { isEqual } from \"lodash\"\n\nimport { deepClone, deepFreeze } from \"@ngutil/common\"\n\nimport { readonlyProp } from \"./common\"\n\nexport abstract class QueryProperty<I, O> extends BehaviorSubject<O | undefined> {\n set(value?: I | O) {\n this.#nextClone(value != null ? this.norm(value) : undefined)\n }\n\n update(value?: I | O): void {\n const norm = value != null ? this.norm(value) : undefined\n if (!isEqual(this.value, norm)) {\n this.#next(this.merge(this.value, norm))\n }\n }\n\n del(): void {\n this.set(undefined)\n }\n\n /**\n * Merge values and emit when changed (dont change original values)\n */\n protected abstract merge(a?: O, b?: O): O | undefined\n protected abstract norm(a: I | O): O | undefined\n\n #next(value?: O) {\n if (!isEqual(this.value, value)) {\n if (value == null) {\n this.next(undefined)\n } else {\n this.next(value)\n }\n }\n }\n\n #nextClone(value?: O) {\n if (!isEqual(this.value, value)) {\n if (value == null) {\n this.next(undefined)\n } else {\n this.next(deepClone<any>(value))\n }\n }\n }\n}\n\nexport abstract class QueryPropertySet<O> extends Observable<O> {\n readonly #combined: Observable<O>\n\n constructor(...names: string[]) {\n super(dest => this.#combined.subscribe(dest))\n\n const observables: Array<Observable<any>> = []\n const props: { [key: string]: Observable<any> } = {}\n\n for (const name of names) {\n const o = this.newProperty()\n observables.push(o)\n props[name] = o\n }\n\n this.#combined = combineLatest(observables).pipe(\n map(values => deepFreeze(this.merge(...values))),\n shareReplay(1)\n )\n\n for (const [k, v] of Object.entries(props)) {\n readonlyProp(this, k, v)\n }\n }\n\n protected abstract newProperty(): QueryProperty<any, any>\n protected abstract merge(...args: any[]): any | undefined\n}\n\nexport type QueryPropertySetOf<T, P, N extends string[]> = T & { [K in N[number]]: P }\n","import { flattenDeep, intersection } from \"lodash\"\n\nimport { AsPrimitive, deepClone, isFalsy, isPlainObject, isTruthy, MaxRecursion } from \"@ngutil/common\"\n\nimport { Model } from \"../model\"\nimport { PathGetter, pathGetterCompile } from \"./path\"\nimport { QueryProperty, QueryPropertySet } from \"./query-property\"\n\nexport 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\ntype NormPath = { path: string; op: Exclude<FilterOp, FilterOp.Or | FilterOp.And>; value: any }\ntype NormOr = { op: FilterOp.Or; value: Array<NormEntry> }\ntype NormAnd = { op: FilterOp.And; value: Array<NormEntry> }\ntype NormEntry = NormPath | NormOr | NormAnd\nexport type FilterNormalized = NormEntry\n\n/**\n * @example\n * ```ts\n * filterNormalize({id: {\">\": 0, \"<\": 10}})\n * {op: \"&\", value: [{path: \"id\", op: \">\", value: 0}, {path: \"id\", op: \"<\", value: 10}]}\n * ```\n */\nexport function filterNormalize<T extends Model>(filters: Filter<T>): FilterNormalized {\n return _normalizeFilter(filters)\n}\n\nfunction _normalizeFilter<T extends Model>(filters: Filter<T>, parent?: string): any {\n if (\"op\" in filters && \"value\" in filters) {\n if (filters[\"op\"] === FilterOp.Or || filters[\"op\"] === FilterOp.And) {\n return { op: filters[\"op\"], value: filters[\"value\"].map((v: any) => _normalizeFilter(v, parent)) }\n }\n if (\"path\" in filters) {\n return filters\n }\n }\n\n const norm = flattenDeep(\n Object.entries(filters).map(([path, value]) => {\n switch (path) {\n case FilterOp.And:\n if (!Array.isArray(value)) {\n throw new Error(`Operator AND (${FilterOp.And}) must have array type`)\n }\n return { op: FilterOp.And, value: value.map(v => _normalizeFilter(v, parent)) }\n\n case FilterOp.Or:\n if (!Array.isArray(value)) {\n throw new Error(`Operator OR (${FilterOp.Or}) must have array type`)\n }\n return { op: FilterOp.Or, value: value.map(v => _normalizeFilter(v, parent)) }\n\n // TODO: check all filter, and if not found filter key, taht object maybne not a filter\n default:\n if (isPlainObject(value)) {\n return _normalizeFilter(value, path)\n }\n if (parent != null) {\n return { path: parent, op: path, value }\n } else {\n return { path, op: FilterOp.EqStrict, value }\n }\n }\n })\n )\n\n if (norm.length === 0) {\n return norm\n } else if (norm.length === 1) {\n return norm[0]\n } else {\n return { op: FilterOp.And, value: norm }\n }\n}\n\ntype GetPathFn = (pth: string) => ReturnType<typeof pathGetterCompile>\n\nfunction _filterCompile<T extends Model>(filters: Filter<T>): FilterFn<T> {\n const pathCache: { [key: string]: PathGetter } = {}\n const getPath = (pth: string) => {\n if (pathCache[pth] != null) {\n return pathCache[pth]\n }\n return (pathCache[pth] = pathGetterCompile(pth))\n }\n const normalized = filterNormalize(filters)\n return _filterCompileNorm(normalized, getPath)\n}\n\nfunction _filterCompileNorm(filter: FilterNormalized, getPath: GetPathFn): FilterFn<any> {\n switch (filter.op) {\n case FilterOp.And:\n return and_(filter.value.map(v => _filterCompileNorm(v, getPath)))\n\n case FilterOp.Or:\n return or_(filter.value.map(v => _filterCompileNorm(v, getPath)))\n\n default:\n return _filterComplileNormPath(getPath(filter.path), filter.op, filter.value, getPath)\n }\n}\n\nfunction _filterComplileNormPath(getter: PathGetter, op: FilterOp, value: any, getPath: GetPathFn): FilterFn<any> {\n let lower: string\n let regex: RegExp\n switch (op) {\n case FilterOp.And:\n return and_((value as NormEntry[]).map(v => _filterCompileNorm(v, getPath)))\n\n case FilterOp.Or:\n return or_((value as NormEntry[]).map(v => _filterCompileNorm(v, getPath)))\n\n case FilterOp.Eq:\n // eslint-disable-next-line eqeqeq\n return matcher(getter, v => v == value)\n\n case FilterOp.EqStrict:\n return matcher(getter, v => v === value)\n\n case FilterOp.EqInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase() === lower)\n\n case FilterOp.Neq:\n // eslint-disable-next-line eqeqeq\n return matcher(getter, v => v != value)\n\n case FilterOp.NeqStrict:\n return matcher(getter, v => v !== value)\n\n case FilterOp.NeqInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase() !== lower)\n\n case FilterOp.Gt:\n return matcher(getter, v => v > value)\n\n case FilterOp.GtInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase() > lower)\n\n case FilterOp.Gte:\n return matcher(getter, v => v >= value)\n\n case FilterOp.GteInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase() >= lower)\n\n case FilterOp.Lt:\n return matcher(getter, v => v < value)\n\n case FilterOp.LtInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase() < lower)\n\n case FilterOp.Lte:\n return matcher(getter, v => v <= value)\n\n case FilterOp.LteInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase() <= lower)\n\n case FilterOp.Contains:\n lower = String(value)\n return matcher(getter, v => (Array.isArray(v) ? v.includes(value) : String(v).includes(lower)))\n\n case FilterOp.ContainsInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase().includes(lower))\n\n case FilterOp.StartsWith:\n lower = String(value)\n return matcher(getter, v => String(v).startsWith(lower))\n\n case FilterOp.StartsWithInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase().startsWith(lower))\n\n case FilterOp.EndsWith:\n lower = String(value)\n return matcher(getter, v => String(v).endsWith(lower))\n\n case FilterOp.EndsWithInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase().endsWith(lower))\n\n case FilterOp.Regexp:\n regex = value instanceof RegExp ? value : new RegExp(value, \"msv\")\n return matcher(getter, v => regex.test(v))\n\n case FilterOp.RegexpInsesitive:\n regex = value instanceof RegExp ? value : new RegExp(value, \"msvi\")\n return matcher(getter, v => regex.test(v))\n }\n\n throw new Error(`Unexpected operator: ${op}`)\n}\n\nfunction matcher(getter: PathGetter, predict: (value: any) => boolean): FilterFn {\n return obj => getter(obj).some(predict)\n}\n\nfunction and_(fns: FilterFn[]): FilterFn {\n if (fns.length === 0) {\n return _ => true\n }\n\n if (fns.length === 1) {\n return fns[0]\n }\n\n return item => {\n for (const fn of fns) {\n if (!fn(item)) {\n return false\n }\n }\n return true\n }\n}\n\nfunction or_(fns: FilterFn[]): FilterFn {\n if (fns.length === 0) {\n return _ => true\n }\n\n if (fns.length === 1) {\n return fns[0]\n }\n\n return item => {\n for (const fn of fns) {\n if (fn(item)) {\n return true\n }\n }\n return false\n }\n}\n\nexport function filterMerge(...filters: any[]): any | undefined {\n const value = filters\n .filter(v => v && ((Array.isArray(v) && v.length > 0) || (isPlainObject(v) && Object.keys(v).length > 0)))\n .map(filter => deepClone(filter))\n\n return compact({ op: FilterOp.And, value })\n}\n\nexport class FilterProperty<T extends Model> extends QueryProperty<Filter<T>, FilterNormalized> {\n protected override merge(\n a?: FilterNormalized | undefined,\n b?: FilterNormalized | undefined\n ): FilterNormalized | undefined {\n return filterMerge(a, b)\n }\n protected override norm(a: FilterNormalized | Filter<T>): FilterNormalized | undefined {\n return filterNormalize(a)\n }\n}\n\nexport class FilterPropertySet<T extends Model> extends QueryPropertySet<Filter<T>> {\n protected override newProperty() {\n return new FilterProperty(undefined)\n }\n\n protected override merge(...args: any[]) {\n return filterMerge(...args)\n }\n}\n\nexport function filterSimplify(filters: any): object | null {\n if (isTruthy(filters)) {\n filters = compact(filterNormalize(filters))\n const result: { [key: string]: any } = {}\n if (filters[\"op\"] === FilterOp.And) {\n filters = filters[\"value\"]\n if (filters == null) {\n return result\n }\n }\n if (!Array.isArray(filters)) {\n filters = [filters]\n }\n\n for (const f of filters) {\n if (\n f[\"value\"] != null &&\n (f[\"op\"] === FilterOp.Eq || f[\"op\"] === FilterOp.EqStrict || f[\"op\"] === FilterOp.EqInsesitive)\n ) {\n result[f[\"path\"] as string] = f[\"value\"]\n }\n }\n return result\n } else {\n return null\n }\n}\n\nfunction compact(filters: FilterNormalized): any {\n if (filters.op === FilterOp.And || filters.op === FilterOp.Or) {\n if (isFalsy(filters.value)) {\n return null\n }\n\n let value = filters.value.map(compact).filter(isTruthy)\n if (value.length === 0) {\n return null\n }\n\n // remove subfilters with the same operator\n value = value.reduce((acc, value) => {\n if (value.op === filters.op) {\n return acc.concat(value.value)\n } else {\n acc.push(value)\n return acc\n }\n }, [])\n\n // deduplicate, and latest filter is the most priority\n value = value\n .reverse()\n .filter((v, i, a) => a.findIndex(v2 => v.path === v2.path && v.op === v2.op) === i)\n .reverse()\n\n if (value.length === 1) {\n return value[0]\n }\n\n return { op: filters.op, value }\n } else if (filters.value == null) {\n return null\n }\n return filters\n}\n","import { Flatten, Primitive } from \"@ngutil/common\"\n\nimport { Model } from \"../model\"\nimport { QueryProperty, QueryPropertySet } from \"./query-property\"\n\nexport type GrouperFn<T = any> = (item: any) => Primitive\n\nexport type Grouper<T extends Model, F = Flatten<T>> = any\nexport type GrouperNormalized = any\n\nexport function groupBy<T extends Model, F = Flatten<T>>(grouper: Grouper<T, F>): GrouperFn<T> {\n return grouperCompile<T, F>(grouper)\n}\n\nfunction grouperCompile<T extends Model, F = Flatten<T>>(grouper: Grouper<T, F>): GrouperFn<T> {\n return _ => undefined\n}\n\nexport function grouperMerge<T extends Model, F = Flatten<T>>(\n ...groupers: Array<Grouper<T, F> | undefined | null>\n): Grouper<T, F> | undefined {\n return undefined\n}\n\nexport function grouperNormalize<T extends Model>(grouper: Grouper<T>): GrouperNormalized {}\n\n// import { Primitive } from \"utility-types\"\n\n// import { Eval, Flatten } from \"@ngutil/common\"\n\n// import { type Model } from \"./query\"\n// import { SorterFn } from \"./sorter\"\n\n// export interface Grouped<T extends Model> {\n// items: T[]\n// groups: Group<T>\n// }\n\n// export type GrouperFn<T extends Model> = (items: T[]) => any\n\n// export type GroupKey<T extends Model> = (item: T, index: number) => Primitive[]\n\n// export type GroupItemIsMatch<T extends Model> = (item: T, index: number) => boolean\n\n// export interface GrouperX<T extends Model> {\n// name: string\n// title?: string\n// isMatch?: GroupKey<T>\n// [key: string]: any\n// }\n\n// export interface GrouperXNormalized<T extends Model> extends GrouperX<T> {\n// key: GroupKey<T>\n// }\n\n// type _Groupers<T extends Model, F> = keyof F | Grouper<T>\n// export type Grouper<T extends Model, F = Flatten<T>> = Eval<Array<_Groupers<T, F>>>\n\n// export type GrouperNormalized<T extends Model> = { [key: string]: GrouperXNormalized<T> }\n\n// export interface Group<T extends Model, G extends Grouper<T> = Grouper<T>> {\n// grouper: G\n// begin: number\n// end: number\n// }\n\n// /**\n// * @example\n// * ```ts\n// * const grouped = groupBy([\"status\"])(items)\n// * // expexted: {[status]: [...items]}\n// *\n// * const grouped = groupBy([\"name\", \"age\"])(items)\n// * // expected {[status]: {[age]: [...items]}}\n// *\n// * const STATUS_LABELS = {active: \"Active\", inactive: \"Inactive\"}\n// * const grouped = groupBy([(item) => (STATUS_LABELS[item.status] || \"Undefined\")])(items)\n// * // expected {[\"Active\" | \"Inactive\" | \"Undefined\"]: [...items]}\n// *\n// * const grouped = groupBy([(item) => (STATUS_LABELS[item.status] || \"Undefined\"), \"age\"])(items)\n// * // expected {[\"Active\" | \"Inactive\" | \"Undefined\"]: {[age]: [...items]}}\n// * ```\n// */\n// export function groupBy<T extends Model>(groupers: Grouper<T>): SorterFn<T> {\n// return (_a, _b) => 0\n// }\n\n// export function grouperNormalize() {}\n\n// export function grouperCompile<T extends Model>(groupers: Grouper<T>): GrouperFn<T> {\n// return _ => undefined\n// }\n\n// export function grouperMerge<T extends Model, F = Flatten<T>>(\n// ...groupers: Array<Grouper<T, F> | undefined | null>\n// ): Grouper<T, F> | undefined {\n// return undefined\n// }\n\nexport class GrouperProperty<T extends Model> extends QueryProperty<Grouper<T>, GrouperNormalized> {\n protected override norm(a: any) {\n return grouperNormalize\n }\n\n protected override merge(a?: any, b?: any) {\n return grouperMerge(a, b)\n }\n}\n\nexport class GrouperPropertySet<T extends Model> extends QueryPropertySet<Grouper<T>> {\n protected override newProperty() {\n return new GrouperProperty(undefined)\n }\n\n protected override merge(...args: any[]) {\n return grouperMerge(...args)\n }\n}\n","import { map, Observable } from \"rxjs\"\n\nimport { flattenDeep, isEqual } from \"lodash\"\n\nimport { deepClone, isPlainObject } from \"@ngutil/common\"\n\nimport { Model } from \"../model\"\nimport { pathGetterCompile } from \"./path\"\nimport { QueryProperty, QueryPropertySet } from \"./query-property\"\n\nexport type SorterFn<T = any> = (a: T, b: T) => number\n\nexport const enum SortDirection {\n Asc = \"asc\",\n Desc = \"desc\"\n}\n\nexport type SortDir = SortDirection.Asc | SortDirection.Desc | \"asc\" | \"desc\"\nexport type SortDirExtra = { dir: SortDir; emptyFirst: boolean }\n\ntype _Sorter<F> = { [K in keyof F]: { [key in K]: SortDir | SortDirExtra } }[keyof F]\n// TODO: fix recursion\n// export type Sorter<T extends Model> = Array<_Sorter<Flatten<T>>>\nexport type Sorter<T extends Model> = Array<{ [key: string]: SortDir | SortDirExtra | NormalizedEntry | undefined }>\n\ntype NormalizedEntry = { path: string; isAsc: boolean; emptyFirst: boolean; remove?: boolean }\nexport type SorterNormalized = Array<NormalizedEntry>\n\n/**\n * @example\n *```ts\n * items.toSorted(sortBy([{\"author.name\": \"asc\"}]))\n * ```\n */\nexport function sortBy<T extends Model>(sorters: Sorter<T>): 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 _sorterNormalize(sorters)\n}\n\nfunction _sorterNormalize<T extends Model>(sorters: Sorter<T>): SorterNormalized {\n if (!Array.isArray(sorters)) {\n sorters = [sorters]\n }\n\n return flattenDeep(\n (sorters as any).map((s: any) => {\n if (isPlainObject(s)) {\n // entry is normalized\n if (s[\"path\"] != null && s[\"isAsc\"] != null && s[\"emptyFirst\"] != null) {\n return s\n }\n }\n\n return Object.entries(s).map(([k, v]) => {\n if (v == null) {\n return { path: k, remove: true }\n } else if (typeof v === \"string\") {\n const isAsc = v.toLowerCase() === \"asc\"\n return { path: k, isAsc, emptyFirst: isAsc ? false : true }\n } else if (isPlainObject(v)) {\n return {\n path: k,\n isAsc: ((v as SortDirExtra).dir || \"asc\").toLowerCase() === \"asc\",\n emptyFirst: (v as SortDirExtra).emptyFirst == null ? true : !!(v as SortDirExtra).emptyFirst\n }\n } else {\n throw new Error(`Invalid sorter: ${v}`)\n }\n })\n })\n )\n}\n\nfunction _sorterCompile<T extends Model>(sorters: Sorter<T>): SorterFn<T> {\n if (sorters.length === 0) {\n return (_a, _b) => 0\n }\n\n const norm = sorterNormalize<T>(sorters).map(createComparator)\n if (norm.length === 1) {\n return norm[0]\n }\n\n const initial = norm.pop()!\n return norm.reduceRight<SorterFn<T>>(\n (next, curr) => (a, b) => {\n const r = curr(a, b)\n return r === 0 ? next(a, b) : r\n },\n initial\n )\n}\n\nfunction createComparator({ path, isAsc, emptyFirst }: NormalizedEntry): SorterFn {\n const getter = pathGetterCompile(path)\n if (isAsc) {\n return (a, b) => compare(getter(a), getter(b), emptyFirst)\n } else {\n return (a, b) => compare(getter(a), getter(b), !emptyFirst) * -1\n }\n}\n\nexport function compare(a: any, b: any, emptyFirst: boolean): number {\n // console.log(\"COMPARE\", a, b)\n if (a == null && b != null) {\n return emptyFirst === true ? -1 : 1\n } else if (a != null && b == null) {\n return emptyFirst === true ? 1 : -1\n } else if (a == null && b == null) {\n return 0\n } else if (isEqual(a, b)) {\n return 0\n } else if (typeof a === \"number\" && typeof b === \"number\") {\n return a - b\n } else if (typeof a === \"string\" && typeof b === \"string\") {\n const al = a.length\n const bl = b.length\n // if both lengths is 0 the code execution not reach that point, because a === b\n if (emptyFirst === true) {\n if (al === 0) {\n return -1\n } else if (bl === 0) {\n return 1\n }\n } else {\n if (al === 0) {\n return 1\n } else if (bl === 0) {\n return -1\n }\n }\n return a.localeCompare(b)\n } else if (Array.isArray(a) && Array.isArray(b)) {\n const al = a.length\n const bl = b.length\n const l = Math.min(al, bl)\n\n for (let i = 0; i < l; i++) {\n const res = compare(a[i], b[i], emptyFirst)\n if (res !== 0) {\n return res\n }\n }\n\n if (al === bl) {\n return 0\n }\n\n if (emptyFirst === true) {\n if (al === 0) {\n return -1\n } else if (bl === 0) {\n return 1\n }\n } else {\n if (al === 0) {\n return 1\n } else if (bl === 0) {\n return -1\n }\n }\n\n return al - bl\n } else if (isPlainObject(a) && isPlainObject(b)) {\n return JSON.stringify(a).localeCompare(JSON.stringify(b))\n }\n\n return a > b ? -1 : 1\n}\n\nexport function sorterMerge(...sorters: (SorterNormalized | undefined | null)[]): SorterNormalized | undefined {\n let result: SorterNormalized | undefined\n\n for (const sorter of sorters) {\n if (sorter == null) {\n continue\n }\n\n if (result == null) {\n result = deepClone(sorter)\n continue\n }\n\n for (const sentry of sorter) {\n const existingIndex = result.findIndex(value => value.path === sentry.path)\n if (existingIndex > -1) {\n if (sentry.remove) {\n result.splice(existingIndex, 1)\n } else {\n result[existingIndex] = deepClone(sentry)\n }\n } else if (!sentry.remove) {\n result.push(deepClone(sentry))\n }\n }\n }\n\n if (result?.length === 0) {\n return undefined\n }\n\n return result\n}\n\nexport class SorterProperty<T extends Model> extends QueryProperty<Sorter<T>, SorterNormalized> {\n protected override norm(a: Sorter<T>): SorterNormalized | undefined {\n return sorterNormalize(a)\n }\n protected override merge(a?: SorterNormalized, b?: SorterNormalized): SorterNormalized | undefined {\n return sorterMerge(a, b)\n }\n}\n\nexport class SorterPropertySet extends QueryPropertySet<SorterNormalized> {\n of(name: string): Observable<NormalizedEntry | undefined> {\n return this.pipe(map(sorters => (sorters == null ? undefined : sorters.find(value => value.path === name))))\n }\n\n isAsc(name: string): Observable<boolean | undefined> {\n return this.of(name).pipe(map(v => (v != null ? v.isAsc : undefined)))\n }\n\n isDesc(name: string): Observable<boolean | undefined> {\n return this.of(name).pipe(map(v => (v != null ? !v.isAsc : undefined)))\n }\n\n protected override newProperty() {\n return new SorterProperty(undefined)\n }\n protected override merge(...args: any[]) {\n return sorterMerge(...args)\n }\n}\n","import { Model } from \"../model\"\nimport { QueryProperty, QueryPropertySet } from \"./query-property\"\n\n/**\n * @exmaple\n * ```ts\n * [\n * \"field_name\",\n * {\"child_name\": [\"child_field_name\"]},\n * {\"children\": [\"children_field_name\", {\"$type\": Article, slimer: [\"id\", \"title\"]}]},\n * {\"$type\": Employee, slimer: [\"name\"]}.\n * {\"$filter\": Filter<T, F>}\n * ]\n * ```\n */\nexport type Slimer<T extends Model> = any\nexport type SlimerNormalized = any\nexport type SlimerFn<T> = (item: T) => T\n\nexport function slimBy<T extends Model>(slimer: Slimer<T>): void {}\n\nexport function slimerNormalize<T extends Model>(slimer: Slimer<T>): SlimerNormalized {}\n\nfunction slimerCompile<T extends Model>(slimer: Slimer<T>): SlimerFn<T> {\n return item => item\n}\n\nexport function slimerMerge<T extends Model>(...slimers: Slimer<T>): any {}\n\nexport class SlimerProperty<T extends Model> extends QueryProperty<Slimer<T>, SlimerNormalized> {\n protected override norm(a: any) {\n return slimerNormalize(a)\n }\n\n protected override merge(a?: any, b?: any) {\n return slimerMerge(a, b)\n }\n}\n\nexport class SlimerPropertySet<T extends Model> extends QueryPropertySet<Slimer<T>> {\n protected override newProperty() {\n return new SlimerProperty(undefined)\n }\n\n protected override merge(...args: any[]) {\n return slimerMerge(...args)\n }\n}\n","import { ListRange } from \"@angular/cdk/collections\"\n\nimport { deepClone } from \"@ngutil/common\"\n\n// https://www.npmjs.com/package/array-view\n\n/**\n * @example\n * ```ts\n * {start: 0, end: 0} // empty range\n * {start: 0, end: 1} // range with one item.eg sliceApply([1, 2, 3], {start:0, end:1}) -> [1]\n * ```\n */\nexport interface Slice extends ListRange {\n /**\n * Start of slice, exact index of item in list\n */\n readonly start: number\n /**\n * End of slice, not include end index of item in list\n */\n readonly end: number\n readonly pageSize?: number\n}\n\nexport function sliceMerge(...slices: Slice[]) {\n let result: Slice | undefined = undefined\n\n for (const slice of slices) {\n if (slice == null) {\n continue\n }\n if (result == null) {\n result = deepClone(slice)\n } else {\n result = { ...(result as any), ...slice }\n }\n }\n\n return result\n}\n\n/**\n * Apply slice to array, and force the result length to equal with Slice length,\n * so fill array with undefined if not enought elements\n */\nexport function sliceApply(slice: Slice, array: readonly any[]): any[] {\n const result = array.slice(slice.start, slice.end)\n result.length = slice.end - slice.start\n return result\n}\n\n/**\n * @returns Page numbers, eg.: `[10, 11, 12, 13, ...]`\n */\nexport function sliceToPages(slice: Slice): number[] {\n if (slice.pageSize == null) {\n throw new Error(\"Missing `step` from slice\")\n }\n\n const start = Math.floor(slice.start / slice.pageSize)\n const end = Math.ceil(slice.end / slice.pageSize)\n return Array.from({ length: end - start }, (_, i) => start + i)\n}\n\nexport function sliceInsert(slice: Slice, array: readonly any[], newItems: readonly any[]): any[] {\n if (slice.start === slice.end) {\n return array as any\n }\n\n let result = array.slice(0, slice.start)\n result.length = slice.start\n\n result = result.concat(newItems)\n\n if (!isNaN(slice.end) && isFinite(slice.end)) {\n result.length = slice.end\n result = result.concat(array.slice(slice.end))\n }\n\n return result\n}\n\nexport function sliceClamp(slice: Slice, constraint: Slice): Slice {\n return {\n start: Math.max(slice.start, constraint.start),\n end: Math.min(slice.end, constraint.end),\n pageSize: slice.pageSize\n }\n}\n\nexport function sliceEq(a: Slice, b: Slice): boolean {\n return a.start === b.start && a.end === b.end && a.pageSize === b.pageSize\n}\n\n// TODO: sliceOverlap(other: Slice): Slice\n// TODO: sliceIncludes(other: Slice): boolean\n// TODO: sliceConcat(...slices: Slice[]): Slice[]\n// TODO: sliceDiff(slice: Slice): Slice[]\n","import { combineLatest, Observable, shareReplay } from \"rxjs\"\n\nimport { type DeepReadonly } from \"@ngutil/common\"\n\nimport { type Model } from \"../model\"\nimport { readonlyProp } from \"./common\"\nimport { type Filter, FilterProperty, FilterPropertySet } from \"./filter\"\nimport { type Grouper, GrouperProperty, GrouperPropertySet } from \"./grouper\"\nimport { type QueryPropertySetOf } from \"./query-property\"\nimport { type Slice } from \"./slice\"\nimport { type Slimer, SlimerProperty, SlimerPropertySet } from \"./slimer\"\nimport { type Sorter, SorterProperty, SorterPropertySet } from \"./sorter\"\n\nexport interface Query<T extends Model> {\n filter?: DeepReadonly<Filter<T>>\n sorter?: DeepReadonly<Sorter<T>>\n slimer?: DeepReadonly<Slimer<T>>\n grouper?: DeepReadonly<Grouper<T>>\n}\n\nexport interface QueryWithSlice<T extends Model> extends Query<T> {\n slice: DeepReadonly<Slice>\n}\n\nexport interface QueryResult<T extends Model> {\n items: readonly T[]\n total?: number\n groups?: any[]\n}\n\nexport interface QuerySubject<T extends Model, N extends string[]> extends Observable<Query<T>> {\n readonly filter: QueryPropertySetOf<FilterPropertySet<T>, FilterProperty<T>, N>\n readonly sorter: QueryPropertySetOf<SorterPropertySet, SorterProperty<T>, N>\n readonly slimer: QueryPropertySetOf<SlimerPropertySet<T>, SlimerProperty<T>, N>\n readonly grouper: QueryPropertySetOf<GrouperPropertySet<T>, GrouperProperty<T>, N>\n}\n\nexport function querySubject<T extends Model, N extends string[]>(...names: N): QuerySubject<T, N> {\n const filter = new FilterPropertySet(...names)\n const sorter = new SorterPropertySet(...names)\n const slimer = new SlimerPropertySet(...names)\n const grouper = new GrouperPropertySet(...names)\n\n const result = combineLatest({ filter, sorter, slimer, grouper }).pipe(shareReplay(1))\n readonlyProp(result, \"filter\", filter)\n readonlyProp(result, \"sorter\", sorter)\n readonlyProp(result, \"slimer\", slimer)\n readonlyProp(result, \"grouper\", grouper)\n\n return result as any\n}\n","import { isEqual } from \"lodash\"\nimport { Primitive } from \"utility-types\"\n\nimport { DeepReadonly, toSorted } from \"@ngutil/common\"\n\nimport { Model } from \"../model\"\nimport { Filter, filterBy } from \"./filter\"\nimport { groupBy } from \"./grouper\"\nimport { QueryResult, QueryWithSlice } from \"./query\"\nimport { Slice } from \"./slice\"\nimport { sortBy, Sorter } from \"./sorter\"\n\nconst INPUT = Symbol(\"INPUT\")\n\ninterface PartialExecutor {\n [INPUT]: any\n}\n\nexport interface QueryExecutors<T extends Model> {\n readonly filterFn?: FilterExecutor<T>\n readonly sorterFn?: SorterExecutor<T>\n readonly grouperFn?: GrouperExecutor<T>\n readonly slicerFn?: SliceExecutor<T>\n}\n\nexport interface QueryExecutor<T extends Model> extends QueryExecutors<T> {\n (items: readonly T[]): QueryResult<T>\n}\n\nexport function queryExecutor<T extends Model>(\n query: QueryWithSlice<T>,\n previous?: QueryExecutor<T>\n): QueryExecutor<T> {\n const executors: QueryExecutors<T> = {\n filterFn: filterExecutor(query.filter, previous?.filterFn),\n sorterFn: sorterExecutor(query.sorter, previous?.sorterFn),\n grouperFn: grouperExecutor(query.grouper, previous?.grouperFn),\n slicerFn: sliceExecutor(query.slice, previous?.slicerFn)\n }\n\n const changed = previous == null || Object.entries(executors).some(([k, v]) => (previous as any)[k] !== v)\n if (!changed) {\n return previous\n }\n\n const executor = (items: readonly T[]): QueryResult<T> => {\n if (items == null || items.length === 0) {\n return { items: [], total: 0 }\n }\n\n let result: readonly T[] = items\n\n if (executors.filterFn) {\n result = result.filter(executors.filterFn)\n }\n\n if (executors.sorterFn) {\n result = toSorted(result, executors.sorterFn)\n }\n\n const total = result.length\n\n // TODO: grouper\n\n if (executors.slicerFn) {\n result = executors.slicerFn(result)\n }\n\n return { items: result, total }\n }\n\n for (const [k, v] of Object.entries(executors)) {\n Object.defineProperty(executor, k, {\n value: v,\n enumerable: true,\n writable: false\n })\n }\n\n return executor\n}\n\ninterface FilterExecutor<T extends Model> extends PartialExecutor {\n (item: T): boolean\n}\n\nfunction filterExecutor<T extends Model>(\n filter?: DeepReadonly<Filter<T>>,\n prev?: FilterExecutor<T>\n): FilterExecutor<T> | undefined {\n return compileExec<T>(filter, prev, filterBy)\n}\n\ninterface SorterExecutor<T extends Model> extends PartialExecutor {\n (a: T, b: T): number\n}\n\nfunction sorterExecutor<T extends Model>(\n sorter?: DeepReadonly<Sorter<T>>,\n prev?: SorterExecutor<T>\n): SorterExecutor<T> | undefined {\n return compileExec<T>(sorter, prev, sortBy)\n}\n\ninterface GrouperExecutor<T extends Model> extends PartialExecutor {\n (item: T): Primitive\n}\n\nfunction grouperExecutor<T extends Model>(\n sorter?: DeepReadonly<Sorter<T>>,\n prev?: GrouperExecutor<T>\n): GrouperExecutor<T> | undefined {\n return compileExec<T>(sorter, prev, groupBy)\n}\n\ninterface SliceExecutor<T extends Model> extends PartialExecutor {\n (items: readonly T[]): T[]\n}\n\nfunction sliceExecutor<T extends Model>(\n slice?: DeepReadonly<Slice>,\n prev?: SliceExecutor<T>\n): SliceExecutor<T> | undefined {\n return compileExec<T>(slice, prev, sliceBy)\n}\n\nfunction sliceBy<T extends Model>(slice: Slice) {\n return (items: T[]) => items.slice(slice.start, slice.end)\n}\n\nfunction compileExec<T extends Model>(input: any, prev: any, compiler: any): any {\n if (input == null) {\n return undefined\n }\n\n if (prev != null) {\n // thorically input is readonly\n if (prev[INPUT] === input || isEqual(prev[INPUT], input)) {\n return prev\n }\n }\n\n const exec = compiler(input) as any\n Object.defineProperty(exec, INPUT, {\n value: input,\n enumerable: true,\n writable: false\n })\n return exec\n}\n","import { Observable } from \"rxjs\"\n\nimport { DeepReadonly } from \"@ngutil/common\"\n\nimport { Model, ModelRefNorm } from \"../model\"\nimport { Slice } from \"../query\"\n\nexport type PartialCollection<T> = readonly (T | undefined)[]\n\nexport abstract class CollectionStore<T extends Model> {\n /**\n * Update the given slice, and return all items observable\n */\n abstract insertSlice(slice: DeepReadonly<Slice>, items: readonly T[]): Observable<PartialCollection<T>>\n\n /**\n * @returns `true` when the given slice is available in the cache\n */\n abstract hasSlice(slice: DeepReadonly<Slice>): Observable<boolean>\n\n /**\n * @returns items by the given slice\n */\n abstract getSlice(slice: DeepReadonly<Slice>): Observable<PartialCollection<T>>\n\n /**\n * Get item from collection\n */\n abstract get(ref: ModelRefNorm): Observable<T | undefined>\n\n /**\n * Get index of item in collection, -1 if not found\n */\n abstract indexOf(ref: ModelRefNorm): Observable<number>\n\n /**\n * Update item in collection\n *\n * @returns the updated index, or -1 if not found\n */\n abstract update(ref: ModelRefNorm, item: T): Observable<number>\n\n /**\n * Update item if exists in collection, or insert at the given position\n *\n * @param position If positon is negative, insert at the end of collection\n * @returns the updated index or index of where to insert\n */\n abstract updateOrInsert(ref: ModelRefNorm, item: T, position?: number): Observable<number>\n\n /**\n * Remove item from collection\n * @returns the index of deleted item, -1 if not found\n */\n abstract del(ref: ModelRefNorm): Observable<number>\n\n /**\n * Removes all items from collection\n */\n abstract clear(): Observable<void>\n}\n","import { BehaviorSubject, combineLatest, map, Observable, of, take } from \"rxjs\"\n\nimport { Model, ModelRefNorm } from \"../model\"\nimport { Slice, sliceApply, sliceClamp, sliceEq, sliceInsert } from \"../query\"\nimport { CollectionStore, PartialCollection } from \"./collection-store\"\n\nexport class MemoryStore<T extends Model> extends CollectionStore<T> {\n readonly #data = new BehaviorSubject<PartialCollection<T>>([])\n\n override insertSlice(slice: Slice, items: readonly T[]): Observable<PartialCollection<T>> {\n this.#data.next(sliceInsert(slice, this.#data.value, items))\n return this.#data\n }\n\n override hasSlice(slice: Slice): Observable<boolean> {\n return this.#data.pipe(\n map(data => {\n if (sliceEq(slice, sliceClamp(slice, { start: 0, end: data.length }))) {\n for (let i = slice.start; i < slice.end; i++) {\n if (data[i] == null) {\n return false\n }\n }\n return true\n } else {\n return false\n }\n })\n )\n }\n\n override getSlice(slice: Slice): Observable<PartialCollection<T>> {\n return this.#data.pipe(map(data => sliceApply(slice, data)))\n }\n\n override get(ref: ModelRefNorm): Observable<T | undefined> {\n return this.#data.pipe(map(data => data.find(ref.toFilter())))\n }\n\n override indexOf(ref: ModelRefNorm): Observable<number> {\n return this.#data.pipe(map(data => data.findIndex(ref.toFilter())))\n }\n\n override update(ref: ModelRefNorm, item: T): Observable<number> {\n return combineLatest({\n index: this.indexOf(ref),\n data: this.#data\n }).pipe(\n take(1),\n map(({ index, data }) => {\n if (index < 0) {\n return index\n }\n this.#data.next(sliceInsert({ start: index, end: index + 1 }, data, [item]))\n return index\n })\n )\n }\n\n override updateOrInsert(ref: ModelRefNorm, item: T, position?: number): Observable<number> {\n return combineLatest({\n index: this.indexOf(ref),\n data: this.#data\n }).pipe(\n take(1),\n map(({ index, data }) => {\n if (index < 0) {\n index = position == null ? data.length : position < 0 ? data.length : position\n }\n this.#data.next(sliceInsert({ start: index, end: index + 1 }, data, [item]))\n return index\n })\n )\n }\n\n override del(ref: ModelRefNorm): Observable<number> {\n return combineLatest({\n index: this.indexOf(ref),\n data: this.#data\n }).pipe(\n take(1),\n map(({ index, data }) => {\n if (index < 0) {\n return index\n }\n const result = data.slice(0)\n result.splice(index, 1)\n this.#data.next(result)\n return index\n })\n )\n }\n\n override clear(): Observable<void> {\n if (this.#data.value.length > 0) {\n this.#data.next([])\n }\n return of(undefined)\n }\n}\n","import { DataSource as CdkDataSource, CollectionViewer } from \"@angular/cdk/collections\"\n\nimport {\n BehaviorSubject,\n combineLatest,\n debounceTime,\n distinctUntilChanged,\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 } from \"lodash\"\n\nimport { ConnectProtocol, deepClone, deepFreeze, isFalsy } from \"@ngutil/common\"\n\nimport type { Model, ModelRef } from \"../model\"\nimport type { DataProvider } from \"../provider/provider\"\nimport type { QueryWithSlice, Slice } from \"../query\"\nimport { querySubject } from \"../query\"\nimport { type CollectionStore, MemoryStore, type PartialCollection } from \"../store\"\n\nconst DEBOUNCE_TIME = 50\n\nexport class DataSource<T extends Model> extends CdkDataSource<T | undefined> implements ConnectProtocol {\n readonly isBusy$ = new BehaviorSubject<boolean>(false)\n readonly total$ = new BehaviorSubject<number | undefined>(undefined)\n\n readonly #slice = new ReplaySubject<Slice>(1)\n readonly slice$: Observable<Slice> = this.#slice.pipe(\n switchMap(slice => this.provider.clampSlice(slice)),\n distinctUntilChanged(isEqual),\n map(slice => deepFreeze(deepClone(slice))),\n shareReplay(1)\n )\n\n readonly #reload = new BehaviorSubject<void>(undefined)\n\n readonly #query: Observable<QueryWithSlice<T>> = combineLatest({\n query: this.query$,\n reload: this.#reload\n }).pipe(\n tap(() => this.#setBusy(true)),\n // TODO: maybe silent reset or prevent items$ chenges\n // TODO: alternative solution use cacheId, and query item from store with this cacheId\n switchMap(({ query }) => this.store.clear().pipe(map(() => query))),\n switchMap(query =>\n this.slice$.pipe(\n tap(() => this.#setBusy(true)),\n map(slice => {\n return { ...query, slice }\n })\n )\n ),\n shareReplay(1)\n )\n\n readonly items$: Observable<PartialCollection<T>> = this.#query.pipe(\n tap(() => this.#setBusy(true)),\n debounceTime(DEBOUNCE_TIME),\n // tap(query => console.log(query)),\n switchMap(query =>\n this.store.hasSlice(query.slice).pipe(\n take(1),\n switchMap(hasSlice => {\n if (hasSlice) {\n return this.store.getSlice(query.slice).pipe(take(1))\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 tap(() => this.#setBusy(false)),\n shareReplay(1)\n )\n\n readonly isEmpty$ = combineLatest({ busy: this.isBusy$, items: this.items$ }).pipe(\n map(({ busy, items }) => !busy && items.every(isFalsy)),\n shareReplay(1)\n )\n\n constructor(\n public readonly provider: DataProvider<T>,\n public readonly store: CollectionStore<T> = new MemoryStore(),\n public readonly query$ = querySubject(\"normal\", \"forced\")\n ) {\n super()\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 return this.watchItem(ref).pipe(take(1))\n }\n\n watchItem(ref: ModelRef): Observable<T | undefined> {\n const refn = this.provider.meta.normalizeRef(ref)\n return this.#storeFirst(\n query => this.store.get(refn),\n query => this.provider.queryItem(refn, query)\n )\n }\n\n getItemPosition(ref: ModelRef): Observable<number | undefined> {\n return this.watchItemPosition(ref).pipe(take(1))\n }\n\n watchItemPosition(ref: ModelRef): Observable<number | undefined> {\n const refn = this.provider.meta.normalizeRef(ref)\n return this.#storeFirst(\n query => this.store.indexOf(refn).pipe(map(i => (i < 0 ? undefined : i))),\n query => this.provider.queryPosition(refn, query)\n )\n }\n\n realodItem(ref: ModelRef, insertPosition?: number): Observable<T | undefined> {\n const refn = this.provider.meta.normalizeRef(ref)\n return this.#query.pipe(\n take(1),\n switchMap(query => this.provider.queryItem(refn, query).pipe(take(1))),\n switchMap(item =>\n item != null ? this.store.updateOrInsert(refn, item, insertPosition).pipe(map(() => item)) : of(item)\n )\n )\n }\n\n #storeFirst<X>(\n storeFn: (query: QueryWithSlice<T>) => Observable<X>,\n selfFn: (query: QueryWithSlice<T>) => Observable<X>\n ): Observable<X> {\n return this.#query.pipe(\n take(1),\n switchMap(query => storeFn(query).pipe(switchMap(result => (result == null ? selfFn(query) : of(result)))))\n )\n }\n\n #setBusy(busy: boolean) {\n if (this.provider.isAsync) {\n if (this.isBusy$.value !== busy) {\n this.isBusy$.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 type { Observable } from \"rxjs\"\nimport { of } from \"rxjs\"\n\nimport type { Model, ModelMeta, ModelRefNorm } from \"../model\"\nimport type { QueryResult, QueryWithSlice, 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: QueryWithSlice<T>): Observable<QueryResult<T>>\n\n /**\n * Query exactly one item by the given request\n */\n abstract queryItem(ref: ModelRefNorm, request: QueryWithSlice<T>): Observable<T | undefined>\n\n /**\n * Query item position in the list that matching by the given request\n */\n abstract queryPosition(ref: ModelRefNorm, request: QueryWithSlice<T>): Observable<number | undefined>\n\n /**\n * Froce Slice boundaries, useful in array, or obeservable providers\n */\n clampSlice(slice: Slice): Observable<Slice> {\n return of(slice)\n }\n\n /**\n * @returns New data source instance\n */\n toDataSource(store?: CollectionStore<T>): DataSource<T> {\n return new DataSource(this, store)\n }\n}\n","import { DataSource as CdkDataSource, CollectionViewer } from \"@angular/cdk/collections\"\nimport { Directive, inject, input, Input, OnDestroy } from \"@angular/core\"\nimport { takeUntilDestroyed, toObservable } from \"@angular/core/rxjs-interop\"\n\nimport {\n combineLatest,\n finalize,\n map,\n Observable,\n of,\n ReplaySubject,\n shareReplay,\n Subject,\n Subscription,\n switchMap,\n takeUntil,\n throwError\n} from \"rxjs\"\n\nimport { 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 DataSourceProxyInput<T extends Model> = DataSourceProxy<T> | DataSource<T> | DataProvider<T>\n\n/**\n * @example\n * ```html\n * <table [nuDataSource]=\"...\" [filter]=\"{isActive: true}\" [sorter]=\"[{name: 'asc'}]\"></table>\n * ```\n *\n * ```ts\n * @Component({\n * template: `<table [nuDataSource]=\"users$\"></table>`\n * })\n * class UserTable {\n * readonly userService = inject(UserService)\n * readonly users$ = UserService.all()\n * }\n * ```\n *\n * ```ts\n * @Component({\n * selector: \"table.my-table\",\n * template: `\n * <cdk-virtual-scroll-viewport itemSize=\"50\" class=\"example-viewport\">\n * <div *cdkVirtualFor=\"let item of dataSource\" class=\"example-item\">{{item}}</div>\n * </cdk-virtual-scroll-viewport>\n * `\n * })\n * class TableComponent {\n * readonly dataSource = inject(DataSourceProxy)\n * }\n * ```\n */\n@Directive({\n standalone: true,\n selector: \"[nuDataSource]\",\n exportAs: \"nuDataSource\"\n})\nexport class DataSourceProxy<T extends Model>\n extends CdkDataSource<T | undefined>\n implements OnDestroy, ConnectProtocol\n{\n @Input({ required: true, alias: \"nuDataSource\" })\n set value(value: DataSourceProxyInput<T>) {\n this.#valueSub?.unsubscribe()\n this.#valueSub = coerceDataSource<T>(value).subscribe(this.#value)\n }\n\n #valueSub?: Subscription\n readonly #value = new ReplaySubject<DataSource<T>>(1)\n readonly value$ = this.#value.pipe(takeUntilDestroyed())\n readonly query$ = this.value$.pipe(\n map(value => value.query$),\n shareReplay(1)\n )\n\n readonly items$ = this.value$.pipe(\n switchMap(value => value.items$),\n shareReplay(1)\n )\n\n readonly isBusy$ = this.value$.pipe(\n switchMap(value => value.isBusy$),\n shareReplay(1)\n )\n\n readonly isEmpty$ = this.value$.pipe(\n switchMap(value => value.isEmpty$),\n shareReplay(1)\n )\n\n #cvSubs = new Map<CollectionViewer, Subject<void>>()\n\n override connect(collectionViewer: CollectionViewer): Observable<readonly (T | undefined)[]> {\n const until = new Subject<void>()\n\n this.#cvSubs.get(collectionViewer)?.next()\n this.#cvSubs.set(collectionViewer, until)\n\n return this.value$.pipe(\n switchMap(value => value.connect(collectionViewer)),\n takeUntil(until),\n finalize(() => this.#cvSubs.delete(collectionViewer))\n )\n }\n\n override disconnect(collectionViewer: CollectionViewer): void {\n this.#cvSubs.get(collectionViewer)?.next()\n this.#cvSubs.delete(collectionViewer)\n }\n\n ngOnDestroy(): void {\n this.#valueSub?.unsubscribe()\n this.#valueSub = undefined\n }\n}\n\n@Directive({\n standalone: true,\n selector: \"[nuDataSource][filter]\"\n})\nexport class DataSourceProxyFilter<T extends Model, F extends Filter<T>> {\n readonly #proxy = inject<DataSourceProxy<T>>(DataSourceProxy)\n readonly filter = input.required<F>()\n readonly filter$ = toObservable(this.filter)\n\n constructor() {\n combineLatest({ query: this.#proxy.query$, filter: this.filter$ })\n .pipe(takeUntilDestroyed())\n .subscribe(({ query, filter }) => query.filter.forced.set(filter))\n }\n}\n\n@Directive({\n standalone: true,\n selector: \"[nuDataSource][sorter]\"\n})\nexport class DataSourceProxySorter<T extends Model, S extends Sorter<T>> {\n readonly #proxy = inject<DataSourceProxy<T>>(DataSourceProxy)\n readonly sorter = input.required<S>()\n readonly sorter$ = toObservable(this.sorter)\n\n constructor() {\n combineLatest({ query: this.#proxy.query$, sorter: this.sorter$ })\n .pipe(takeUntilDestroyed())\n .subscribe(({ query, sorter }) => query.sorter.forced.set(sorter))\n }\n}\n\n@Directive({\n standalone: true,\n selector: \"[nuDataSource][slimer]\"\n})\nexport class DataSourceProxySlimer<T extends Model, S extends Slimer<T>> {\n readonly #proxy = inject<DataSourceProxy<T>>(DataSourceProxy)\n readonly slimer = input.required<S>()\n readonly slimer$ = toObservable(this.slimer)\n\n constructor() {\n combineLatest({ query: this.#proxy.query$, slimer: this.slimer$ })\n .pipe(takeUntilDestroyed())\n .subscribe(({ query, slimer }) => query.slimer.forced.set(slimer))\n }\n}\n\n@Directive({\n standalone: true,\n selector: \"[nuDataSource][grouper]\"\n})\nexport class DataSourceProxyGrouper<T extends Model, G extends Grouper<T>> {\n readonly #proxy = inject<DataSourceProxy<T>>(DataSourceProxy)\n readonly grouper = input.required<G>()\n readonly grouper$ = toObservable(this.grouper)\n\n constructor() {\n combineLatest({ query: this.#proxy.query$, grouper: this.grouper$ })\n .pipe(takeUntilDestroyed())\n .subscribe(({ query, grouper }) => query.grouper.forced.set(grouper))\n }\n}\n\n@Directive({\n standalone: true,\n selector: \"[nuDataSource][nuBusy]\"\n})\nexport class DataSourceProxyBusy {\n readonly #proxy = inject<DataSourceProxy<any>>(DataSourceProxy)\n readonly #busy = inject<Busy<any>>(Busy)\n\n readonly isBusy$ = this.#proxy.value$.pipe(\n switchMap(value => value.isBusy$),\n shareReplay(1)\n )\n\n constructor() {\n this.#busy.connect(this.isBusy$).pipe(takeUntilDestroyed()).subscribe()\n }\n}\n\nfunction coerceDataSource<T extends Model>(value: DataSourceProxyInput<T>): Observable<DataSource<T>> {\n if (value instanceof DataSourceProxy) {\n return value.value$\n } else if (value instanceof DataSource) {\n return of(value)\n } else if (value instanceof DataProvider) {\n return of(value.toDataSource())\n } else {\n return throwError(() => new Error(\"Invalid DataSource value\"))\n }\n}\n","import { TrackByFunction } from \"@angular/core\"\n\nimport { isEqual } from \"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 { map, Observable, take } from \"rxjs\"\n\nimport { Model, ModelMeta, ModelMetaInput, ModelRefNorm } from \"../model\"\nimport { queryExecutor, QueryExecutor, QueryResult, QueryWithSlice, Slice, sliceClamp } from \"../query\"\nimport { DataProvider } from \"./provider\"\n\nexport abstract class LocalProvider<T extends Model> extends DataProvider<T> {\n override readonly isAsync = false\n override readonly meta: ModelMeta<T>\n abstract readonly items$: Observable<readonly T[]>\n\n #executor?: QueryExecutor<T>\n\n constructor(meta: ModelMetaInput<T>) {\n super()\n this.meta = ModelMeta.coerce(meta)\n }\n\n executor(request: QueryWithSlice<T>): QueryExecutor<T> {\n return (this.#executor = queryExecutor(request, this.#executor))\n }\n\n override queryList(request: QueryWithSlice<T>): Observable<QueryResult<T>> {\n const exec = this.executor(request)\n return this.items$.pipe(map(items => exec(items)))\n }\n\n override queryItem(ref: ModelRefNorm, request: QueryWithSlice<T>): Observable<T | undefined> {\n return this.queryList(request).pipe(map(list => list.items.find(ref.toFilter())))\n }\n\n override queryPosition(ref: ModelRefNorm, request: QueryWithSlice<T>): Observable<number | undefined> {\n return this.queryList(request).pipe(map(list => list.items.findIndex(ref.toFilter())))\n }\n\n override clampSlice(slice: Slice): Observable<Slice> {\n return this.items$.pipe(\n take(1),\n map(items => sliceClamp(slice, { start: 0, end: items.length }))\n )\n }\n}\n","import { type Observable, of } from \"rxjs\"\n\nimport type { Model, ModelMetaInput } from \"../model\"\nimport { LocalProvider } from \"./local\"\n\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","import { NgModule } from \"@angular/core\"\n\nimport {\n DataSourceProxy,\n DataSourceProxyBusy,\n DataSourceProxyFilter,\n DataSourceProxyGrouper,\n DataSourceProxySlimer,\n DataSourceProxySorter\n} from \"./source/proxy.directive\"\n\nexport * from \"./model\"\nexport * from \"./provider\"\nexport * from \"./query\"\nexport * from \"./source\"\nexport * from \"./store\"\n\n@NgModule({\n imports: [\n DataSourceProxy,\n DataSourceProxyBusy,\n DataSourceProxyFilter,\n DataSourceProxyGrouper,\n DataSourceProxySlimer,\n DataSourceProxySorter\n ],\n exports: [\n DataSourceProxy,\n DataSourceProxyBusy,\n DataSourceProxyFilter,\n DataSourceProxyGrouper,\n DataSourceProxySlimer,\n DataSourceProxySorter\n ]\n})\nexport class DataSourceModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["CdkDataSource"],"mappings":"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"}
1
+ {"version":3,"file":"ngutil-data.mjs","sources":["../../../../packages/data/src/query/path.ts","../../../../packages/data/src/query/common.ts","../../../../packages/data/src/query/query-property.ts","../../../../packages/data/src/query/filter.ts","../../../../packages/data/src/query/grouper.ts","../../../../packages/data/src/query/sorter.ts","../../../../packages/data/src/query/slimer.ts","../../../../packages/data/src/query/slice.ts","../../../../packages/data/src/query/query.ts","../../../../packages/data/src/query/executor.ts","../../../../packages/data/src/store/collection-store.ts","../../../../packages/data/src/store/memory-store.ts","../../../../packages/data/src/source/source.ts","../../../../packages/data/src/provider/provider.ts","../../../../packages/data/src/source/proxy.directive.ts","../../../../packages/data/src/model/meta.ts","../../../../packages/data/src/provider/local.ts","../../../../packages/data/src/provider/array.ts","../../../../packages/data/src/provider/observable.ts","../../../../packages/data/src/index.ts","../../../../packages/data/src/ngutil-data.ts"],"sourcesContent":["import { 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","export function readonlyProp(o: unknown, n: string | symbol, v: unknown) {\n Object.defineProperty(o, n, {\n value: v,\n configurable: false,\n enumerable: true,\n writable: false\n })\n}\n\nconst NORMALIZED = Symbol(\"NORMALIZED\")\nconst IS_NORMALIZED = Symbol(\"IS_NORMALIZED\")\n\nexport function normalize(obj: any, normalizer: (v: any) => any): any {\n if ((obj as any)[IS_NORMALIZED]) {\n return obj as any\n }\n\n if ((obj as any)[NORMALIZED] == null) {\n const normalized = normalizer(obj)\n Object.defineProperty(obj, NORMALIZED, {\n value: normalized,\n configurable: false,\n enumerable: false,\n writable: false\n })\n\n Object.defineProperty(normalize, IS_NORMALIZED, {\n value: true,\n configurable: false,\n enumerable: false,\n writable: false\n })\n\n return normalized\n }\n\n return (obj as any)[NORMALIZED]\n}\n","import { BehaviorSubject, combineLatest, map, Observable, shareReplay } from \"rxjs\"\n\nimport { isEqual } from \"lodash\"\n\nimport { deepClone, deepFreeze } from \"@ngutil/common\"\n\nimport { readonlyProp } from \"./common\"\n\nexport abstract class QueryProperty<I, O> extends BehaviorSubject<O | undefined> {\n set(value?: I | O) {\n this.#nextClone(value != null ? this.norm(value) : undefined)\n }\n\n update(value?: I | O): void {\n const norm = value != null ? this.norm(value) : undefined\n if (!isEqual(this.value, norm)) {\n this.#next(this.merge(this.value, norm))\n }\n }\n\n del(): void {\n this.set(undefined)\n }\n\n /**\n * Merge values and emit when changed (dont change original values)\n */\n protected abstract merge(a?: O, b?: O): O | undefined\n protected abstract norm(a: I | O): O | undefined\n\n #next(value?: O) {\n if (!isEqual(this.value, value)) {\n if (value == null) {\n this.next(undefined)\n } else {\n this.next(value)\n }\n }\n }\n\n #nextClone(value?: O) {\n if (!isEqual(this.value, value)) {\n if (value == null) {\n this.next(undefined)\n } else {\n this.next(deepClone<any>(value))\n }\n }\n }\n}\n\nexport abstract class QueryPropertySet<O> extends Observable<O> {\n readonly #combined: Observable<O>\n\n constructor(...names: string[]) {\n super(dest => this.#combined.subscribe(dest))\n\n const observables: Array<Observable<any>> = []\n const props: { [key: string]: Observable<any> } = {}\n\n for (const name of names) {\n const o = this.newProperty()\n observables.push(o)\n props[name] = o\n }\n\n this.#combined = combineLatest(observables).pipe(\n map(values => deepFreeze(this.merge(...values))),\n shareReplay(1)\n )\n\n for (const [k, v] of Object.entries(props)) {\n readonlyProp(this, k, v)\n }\n }\n\n protected abstract newProperty(): QueryProperty<any, any>\n protected abstract merge(...args: any[]): any | undefined\n}\n\nexport type QueryPropertySetOf<T, P, N extends string[]> = T & { [K in N[number]]: P }\n","import { flattenDeep, intersection } from \"lodash\"\n\nimport { AsPrimitive, deepClone, isFalsy, isPlainObject, isTruthy, MaxRecursion } from \"@ngutil/common\"\n\nimport { Model } from \"../model\"\nimport { PathGetter, pathGetterCompile } from \"./path\"\nimport { QueryProperty, QueryPropertySet } from \"./query-property\"\n\nexport 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\ntype NormPath = { path: string; op: Exclude<FilterOp, FilterOp.Or | FilterOp.And>; value: any }\ntype NormOr = { op: FilterOp.Or; value: Array<NormEntry> }\ntype NormAnd = { op: FilterOp.And; value: Array<NormEntry> }\ntype NormEntry = NormPath | NormOr | NormAnd\nexport type FilterNormalized = NormEntry\n\n/**\n * @example\n * ```ts\n * filterNormalize({id: {\">\": 0, \"<\": 10}})\n * {op: \"&\", value: [{path: \"id\", op: \">\", value: 0}, {path: \"id\", op: \"<\", value: 10}]}\n * ```\n */\nexport function filterNormalize<T extends Model>(filters: Filter<T>): FilterNormalized {\n return _normalizeFilter(filters)\n}\n\nfunction _normalizeFilter<T extends Model>(filters: Filter<T>, parent?: string): any {\n if (\"op\" in filters && \"value\" in filters) {\n if (filters[\"op\"] === FilterOp.Or || filters[\"op\"] === FilterOp.And) {\n return { op: filters[\"op\"], value: filters[\"value\"].map((v: any) => _normalizeFilter(v, parent)) }\n }\n if (\"path\" in filters) {\n return filters\n }\n }\n\n const norm = flattenDeep(\n Object.entries(filters).map(([path, value]) => {\n switch (path) {\n case FilterOp.And:\n if (!Array.isArray(value)) {\n throw new Error(`Operator AND (${FilterOp.And}) must have array type`)\n }\n return { op: FilterOp.And, value: value.map(v => _normalizeFilter(v, parent)) }\n\n case FilterOp.Or:\n if (!Array.isArray(value)) {\n throw new Error(`Operator OR (${FilterOp.Or}) must have array type`)\n }\n return { op: FilterOp.Or, value: value.map(v => _normalizeFilter(v, parent)) }\n\n // TODO: check all filter, and if not found filter key, taht object maybne not a filter\n default:\n if (isPlainObject(value)) {\n return _normalizeFilter(value, path)\n }\n if (parent != null) {\n return { path: parent, op: path, value }\n } else {\n return { path, op: FilterOp.EqStrict, value }\n }\n }\n })\n )\n\n if (norm.length === 0) {\n return norm\n } else if (norm.length === 1) {\n return norm[0]\n } else {\n return { op: FilterOp.And, value: norm }\n }\n}\n\ntype GetPathFn = (pth: string) => ReturnType<typeof pathGetterCompile>\n\nfunction _filterCompile<T extends Model>(filters: Filter<T>): FilterFn<T> {\n const pathCache: { [key: string]: PathGetter } = {}\n const getPath = (pth: string) => {\n if (pathCache[pth] != null) {\n return pathCache[pth]\n }\n return (pathCache[pth] = pathGetterCompile(pth))\n }\n const normalized = filterNormalize(filters)\n return _filterCompileNorm(normalized, getPath)\n}\n\nfunction _filterCompileNorm(filter: FilterNormalized, getPath: GetPathFn): FilterFn<any> {\n switch (filter.op) {\n case FilterOp.And:\n return and_(filter.value.map(v => _filterCompileNorm(v, getPath)))\n\n case FilterOp.Or:\n return or_(filter.value.map(v => _filterCompileNorm(v, getPath)))\n\n default:\n return _filterComplileNormPath(getPath(filter.path), filter.op, filter.value, getPath)\n }\n}\n\nfunction _filterComplileNormPath(getter: PathGetter, op: FilterOp, value: any, getPath: GetPathFn): FilterFn<any> {\n let lower: string\n let regex: RegExp\n switch (op) {\n case FilterOp.And:\n return and_((value as NormEntry[]).map(v => _filterCompileNorm(v, getPath)))\n\n case FilterOp.Or:\n return or_((value as NormEntry[]).map(v => _filterCompileNorm(v, getPath)))\n\n case FilterOp.Eq:\n // eslint-disable-next-line eqeqeq\n return matcher(getter, v => v == value)\n\n case FilterOp.EqStrict:\n return matcher(getter, v => v === value)\n\n case FilterOp.EqInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase() === lower)\n\n case FilterOp.Neq:\n // eslint-disable-next-line eqeqeq\n return matcher(getter, v => v != value)\n\n case FilterOp.NeqStrict:\n return matcher(getter, v => v !== value)\n\n case FilterOp.NeqInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase() !== lower)\n\n case FilterOp.Gt:\n return matcher(getter, v => v > value)\n\n case FilterOp.GtInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase() > lower)\n\n case FilterOp.Gte:\n return matcher(getter, v => v >= value)\n\n case FilterOp.GteInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase() >= lower)\n\n case FilterOp.Lt:\n return matcher(getter, v => v < value)\n\n case FilterOp.LtInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase() < lower)\n\n case FilterOp.Lte:\n return matcher(getter, v => v <= value)\n\n case FilterOp.LteInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase() <= lower)\n\n case FilterOp.Contains:\n lower = String(value)\n return matcher(getter, v => (Array.isArray(v) ? v.includes(value) : String(v).includes(lower)))\n\n case FilterOp.ContainsInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase().includes(lower))\n\n case FilterOp.StartsWith:\n lower = String(value)\n return matcher(getter, v => String(v).startsWith(lower))\n\n case FilterOp.StartsWithInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase().startsWith(lower))\n\n case FilterOp.EndsWith:\n lower = String(value)\n return matcher(getter, v => String(v).endsWith(lower))\n\n case FilterOp.EndsWithInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase().endsWith(lower))\n\n case FilterOp.Regexp:\n regex = value instanceof RegExp ? value : new RegExp(value, \"msv\")\n return matcher(getter, v => regex.test(v))\n\n case FilterOp.RegexpInsesitive:\n regex = value instanceof RegExp ? value : new RegExp(value, \"msvi\")\n return matcher(getter, v => regex.test(v))\n }\n\n throw new Error(`Unexpected operator: ${op}`)\n}\n\nfunction matcher(getter: PathGetter, predict: (value: any) => boolean): FilterFn {\n return obj => getter(obj).some(predict)\n}\n\nfunction and_(fns: FilterFn[]): FilterFn {\n if (fns.length === 0) {\n return _ => true\n }\n\n if (fns.length === 1) {\n return fns[0]\n }\n\n return item => {\n for (const fn of fns) {\n if (!fn(item)) {\n return false\n }\n }\n return true\n }\n}\n\nfunction or_(fns: FilterFn[]): FilterFn {\n if (fns.length === 0) {\n return _ => true\n }\n\n if (fns.length === 1) {\n return fns[0]\n }\n\n return item => {\n for (const fn of fns) {\n if (fn(item)) {\n return true\n }\n }\n return false\n }\n}\n\nexport function filterMerge(...filters: any[]): any | undefined {\n const value = filters\n .filter(v => v && ((Array.isArray(v) && v.length > 0) || (isPlainObject(v) && Object.keys(v).length > 0)))\n .map(filter => deepClone(filter))\n\n return compact({ op: FilterOp.And, value })\n}\n\nexport class FilterProperty<T extends Model> extends QueryProperty<Filter<T>, FilterNormalized> {\n protected override merge(\n a?: FilterNormalized | undefined,\n b?: FilterNormalized | undefined\n ): FilterNormalized | undefined {\n return filterMerge(a, b)\n }\n protected override norm(a: FilterNormalized | Filter<T>): FilterNormalized | undefined {\n return filterNormalize(a)\n }\n}\n\nexport class FilterPropertySet<T extends Model> extends QueryPropertySet<Filter<T>> {\n protected override newProperty() {\n return new FilterProperty(undefined)\n }\n\n protected override merge(...args: any[]) {\n return filterMerge(...args)\n }\n}\n\nexport function filterSimplify(filters: any): object | null {\n if (isTruthy(filters)) {\n filters = compact(filterNormalize(filters))\n const result: { [key: string]: any } = {}\n if (filters[\"op\"] === FilterOp.And) {\n filters = filters[\"value\"]\n if (filters == null) {\n return result\n }\n }\n if (!Array.isArray(filters)) {\n filters = [filters]\n }\n\n for (const f of filters) {\n if (\n f[\"value\"] != null &&\n (f[\"op\"] === FilterOp.Eq || f[\"op\"] === FilterOp.EqStrict || f[\"op\"] === FilterOp.EqInsesitive)\n ) {\n result[f[\"path\"] as string] = f[\"value\"]\n }\n }\n return result\n } else {\n return null\n }\n}\n\nfunction compact(filters: FilterNormalized): any {\n if (filters.op === FilterOp.And || filters.op === FilterOp.Or) {\n if (isFalsy(filters.value)) {\n return null\n }\n\n let value = filters.value.map(compact).filter(isTruthy)\n if (value.length === 0) {\n return null\n }\n\n // remove subfilters with the same operator\n value = value.reduce((acc, value) => {\n if (value.op === filters.op) {\n return acc.concat(value.value)\n } else {\n acc.push(value)\n return acc\n }\n }, [])\n\n // deduplicate, and latest filter is the most priority\n value = value\n .reverse()\n .filter((v, i, a) => a.findIndex(v2 => v.path === v2.path && v.op === v2.op) === i)\n .reverse()\n\n if (value.length === 1) {\n return value[0]\n }\n\n return { op: filters.op, value }\n } else if (filters.value == null) {\n return null\n }\n return filters\n}\n","import { Flatten, Primitive } from \"@ngutil/common\"\n\nimport { Model } from \"../model\"\nimport { QueryProperty, QueryPropertySet } from \"./query-property\"\n\nexport type GrouperFn<T = any> = (item: any) => Primitive\n\nexport type Grouper<T extends Model, F = Flatten<T>> = any\nexport type GrouperNormalized = any\n\nexport function groupBy<T extends Model, F = Flatten<T>>(grouper: Grouper<T, F>): GrouperFn<T> {\n return grouperCompile<T, F>(grouper)\n}\n\nfunction grouperCompile<T extends Model, F = Flatten<T>>(grouper: Grouper<T, F>): GrouperFn<T> {\n return _ => undefined\n}\n\nexport function grouperMerge<T extends Model, F = Flatten<T>>(\n ...groupers: Array<Grouper<T, F> | undefined | null>\n): Grouper<T, F> | undefined {\n return undefined\n}\n\nexport function grouperNormalize<T extends Model>(grouper: Grouper<T>): GrouperNormalized {}\n\n// import { Primitive } from \"utility-types\"\n\n// import { Eval, Flatten } from \"@ngutil/common\"\n\n// import { type Model } from \"./query\"\n// import { SorterFn } from \"./sorter\"\n\n// export interface Grouped<T extends Model> {\n// items: T[]\n// groups: Group<T>\n// }\n\n// export type GrouperFn<T extends Model> = (items: T[]) => any\n\n// export type GroupKey<T extends Model> = (item: T, index: number) => Primitive[]\n\n// export type GroupItemIsMatch<T extends Model> = (item: T, index: number) => boolean\n\n// export interface GrouperX<T extends Model> {\n// name: string\n// title?: string\n// isMatch?: GroupKey<T>\n// [key: string]: any\n// }\n\n// export interface GrouperXNormalized<T extends Model> extends GrouperX<T> {\n// key: GroupKey<T>\n// }\n\n// type _Groupers<T extends Model, F> = keyof F | Grouper<T>\n// export type Grouper<T extends Model, F = Flatten<T>> = Eval<Array<_Groupers<T, F>>>\n\n// export type GrouperNormalized<T extends Model> = { [key: string]: GrouperXNormalized<T> }\n\n// export interface Group<T extends Model, G extends Grouper<T> = Grouper<T>> {\n// grouper: G\n// begin: number\n// end: number\n// }\n\n// /**\n// * @example\n// * ```ts\n// * const grouped = groupBy([\"status\"])(items)\n// * // expexted: {[status]: [...items]}\n// *\n// * const grouped = groupBy([\"name\", \"age\"])(items)\n// * // expected {[status]: {[age]: [...items]}}\n// *\n// * const STATUS_LABELS = {active: \"Active\", inactive: \"Inactive\"}\n// * const grouped = groupBy([(item) => (STATUS_LABELS[item.status] || \"Undefined\")])(items)\n// * // expected {[\"Active\" | \"Inactive\" | \"Undefined\"]: [...items]}\n// *\n// * const grouped = groupBy([(item) => (STATUS_LABELS[item.status] || \"Undefined\"), \"age\"])(items)\n// * // expected {[\"Active\" | \"Inactive\" | \"Undefined\"]: {[age]: [...items]}}\n// * ```\n// */\n// export function groupBy<T extends Model>(groupers: Grouper<T>): SorterFn<T> {\n// return (_a, _b) => 0\n// }\n\n// export function grouperNormalize() {}\n\n// export function grouperCompile<T extends Model>(groupers: Grouper<T>): GrouperFn<T> {\n// return _ => undefined\n// }\n\n// export function grouperMerge<T extends Model, F = Flatten<T>>(\n// ...groupers: Array<Grouper<T, F> | undefined | null>\n// ): Grouper<T, F> | undefined {\n// return undefined\n// }\n\nexport class GrouperProperty<T extends Model> extends QueryProperty<Grouper<T>, GrouperNormalized> {\n protected override norm(a: any) {\n return grouperNormalize\n }\n\n protected override merge(a?: any, b?: any) {\n return grouperMerge(a, b)\n }\n}\n\nexport class GrouperPropertySet<T extends Model> extends QueryPropertySet<Grouper<T>> {\n protected override newProperty() {\n return new GrouperProperty(undefined)\n }\n\n protected override merge(...args: any[]) {\n return grouperMerge(...args)\n }\n}\n","import { map, Observable } from \"rxjs\"\n\nimport { flattenDeep, isEqual } from \"lodash\"\n\nimport { deepClone, isPlainObject } from \"@ngutil/common\"\n\nimport { Model } from \"../model\"\nimport { pathGetterCompile } from \"./path\"\nimport { QueryProperty, QueryPropertySet } from \"./query-property\"\n\nexport type SorterFn<T = any> = (a: T, b: T) => number\n\nexport const enum SortDirection {\n Asc = \"asc\",\n Desc = \"desc\"\n}\n\nexport type SortDir = SortDirection.Asc | SortDirection.Desc | \"asc\" | \"desc\"\nexport type SortDirExtra = { dir: SortDir; emptyFirst: boolean }\n\ntype _Sorter<F> = { [K in keyof F]: { [key in K]: SortDir | SortDirExtra } }[keyof F]\n// TODO: fix recursion\n// export type Sorter<T extends Model> = Array<_Sorter<Flatten<T>>>\nexport type Sorter<T extends Model> = Array<{ [key: string]: SortDir | SortDirExtra | NormalizedEntry | undefined }>\n\ntype NormalizedEntry = { path: string; isAsc: boolean; emptyFirst: boolean; remove?: boolean }\nexport type SorterNormalized = Array<NormalizedEntry>\n\n/**\n * @example\n *```ts\n * items.toSorted(sortBy([{\"author.name\": \"asc\"}]))\n * ```\n */\nexport function sortBy<T extends Model>(sorters: Sorter<T>): 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 _sorterNormalize(sorters)\n}\n\nfunction _sorterNormalize<T extends Model>(sorters: Sorter<T>): SorterNormalized {\n if (!Array.isArray(sorters)) {\n sorters = [sorters]\n }\n\n return flattenDeep(\n (sorters as any).map((s: any) => {\n if (isPlainObject(s)) {\n // entry is normalized\n if (s[\"path\"] != null && s[\"isAsc\"] != null && s[\"emptyFirst\"] != null) {\n return s\n }\n }\n\n return Object.entries(s).map(([k, v]) => {\n if (v == null) {\n return { path: k, remove: true }\n } else if (typeof v === \"string\") {\n const isAsc = v.toLowerCase() === \"asc\"\n return { path: k, isAsc, emptyFirst: isAsc ? false : true }\n } else if (isPlainObject(v)) {\n return {\n path: k,\n isAsc: ((v as SortDirExtra).dir || \"asc\").toLowerCase() === \"asc\",\n emptyFirst: (v as SortDirExtra).emptyFirst == null ? true : !!(v as SortDirExtra).emptyFirst\n }\n } else {\n throw new Error(`Invalid sorter: ${v}`)\n }\n })\n })\n )\n}\n\nfunction _sorterCompile<T extends Model>(sorters: Sorter<T>): SorterFn<T> {\n if (sorters.length === 0) {\n return (_a, _b) => 0\n }\n\n const norm = sorterNormalize<T>(sorters).map(createComparator)\n if (norm.length === 1) {\n return norm[0]\n }\n\n const initial = norm.pop()!\n return norm.reduceRight<SorterFn<T>>(\n (next, curr) => (a, b) => {\n const r = curr(a, b)\n return r === 0 ? next(a, b) : r\n },\n initial\n )\n}\n\nfunction createComparator({ path, isAsc, emptyFirst }: NormalizedEntry): SorterFn {\n const getter = pathGetterCompile(path)\n if (isAsc) {\n return (a, b) => compare(getter(a), getter(b), emptyFirst)\n } else {\n return (a, b) => compare(getter(a), getter(b), !emptyFirst) * -1\n }\n}\n\nexport function compare(a: any, b: any, emptyFirst: boolean): number {\n // console.log(\"COMPARE\", a, b)\n if (a == null && b != null) {\n return emptyFirst === true ? -1 : 1\n } else if (a != null && b == null) {\n return emptyFirst === true ? 1 : -1\n } else if (a == null && b == null) {\n return 0\n } else if (isEqual(a, b)) {\n return 0\n } else if (typeof a === \"number\" && typeof b === \"number\") {\n return a - b\n } else if (typeof a === \"string\" && typeof b === \"string\") {\n const al = a.length\n const bl = b.length\n // if both lengths is 0 the code execution not reach that point, because a === b\n if (emptyFirst === true) {\n if (al === 0) {\n return -1\n } else if (bl === 0) {\n return 1\n }\n } else {\n if (al === 0) {\n return 1\n } else if (bl === 0) {\n return -1\n }\n }\n return a.localeCompare(b)\n } else if (Array.isArray(a) && Array.isArray(b)) {\n const al = a.length\n const bl = b.length\n const l = Math.min(al, bl)\n\n for (let i = 0; i < l; i++) {\n const res = compare(a[i], b[i], emptyFirst)\n if (res !== 0) {\n return res\n }\n }\n\n if (al === bl) {\n return 0\n }\n\n if (emptyFirst === true) {\n if (al === 0) {\n return -1\n } else if (bl === 0) {\n return 1\n }\n } else {\n if (al === 0) {\n return 1\n } else if (bl === 0) {\n return -1\n }\n }\n\n return al - bl\n } else if (isPlainObject(a) && isPlainObject(b)) {\n return JSON.stringify(a).localeCompare(JSON.stringify(b))\n }\n\n return a > b ? -1 : 1\n}\n\nexport function sorterMerge(...sorters: (SorterNormalized | undefined | null)[]): SorterNormalized | undefined {\n let result: SorterNormalized | undefined\n\n for (const sorter of sorters) {\n if (sorter == null) {\n continue\n }\n\n if (result == null) {\n result = deepClone(sorter)\n continue\n }\n\n for (const sentry of sorter) {\n const existingIndex = result.findIndex(value => value.path === sentry.path)\n if (existingIndex > -1) {\n if (sentry.remove) {\n result.splice(existingIndex, 1)\n } else {\n result[existingIndex] = deepClone(sentry)\n }\n } else if (!sentry.remove) {\n result.push(deepClone(sentry))\n }\n }\n }\n\n if (result?.length === 0) {\n return undefined\n }\n\n return result\n}\n\nexport class SorterProperty<T extends Model> extends QueryProperty<Sorter<T>, SorterNormalized> {\n protected override norm(a: Sorter<T>): SorterNormalized | undefined {\n return sorterNormalize(a)\n }\n protected override merge(a?: SorterNormalized, b?: SorterNormalized): SorterNormalized | undefined {\n return sorterMerge(a, b)\n }\n}\n\nexport class SorterPropertySet extends QueryPropertySet<SorterNormalized> {\n of(name: string): Observable<NormalizedEntry | undefined> {\n return this.pipe(map(sorters => (sorters == null ? undefined : sorters.find(value => value.path === name))))\n }\n\n isAsc(name: string): Observable<boolean | undefined> {\n return this.of(name).pipe(map(v => (v != null ? v.isAsc : undefined)))\n }\n\n isDesc(name: string): Observable<boolean | undefined> {\n return this.of(name).pipe(map(v => (v != null ? !v.isAsc : undefined)))\n }\n\n protected override newProperty() {\n return new SorterProperty(undefined)\n }\n protected override merge(...args: any[]) {\n return sorterMerge(...args)\n }\n}\n","import { Model } from \"../model\"\nimport { QueryProperty, QueryPropertySet } from \"./query-property\"\n\n/**\n * @exmaple\n * ```ts\n * [\n * \"field_name\",\n * {\"child_name\": [\"child_field_name\"]},\n * {\"children\": [\"children_field_name\", {\"$type\": Article, slimer: [\"id\", \"title\"]}]},\n * {\"$type\": Employee, slimer: [\"name\"]}.\n * {\"$filter\": Filter<T, F>}\n * ]\n * ```\n */\nexport type Slimer<T extends Model> = any\nexport type SlimerNormalized = any\nexport type SlimerFn<T> = (item: T) => T\n\nexport function slimBy<T extends Model>(slimer: Slimer<T>): void {}\n\nexport function slimerNormalize<T extends Model>(slimer: Slimer<T>): SlimerNormalized {}\n\nfunction slimerCompile<T extends Model>(slimer: Slimer<T>): SlimerFn<T> {\n return item => item\n}\n\nexport function slimerMerge<T extends Model>(...slimers: Slimer<T>): any {}\n\nexport class SlimerProperty<T extends Model> extends QueryProperty<Slimer<T>, SlimerNormalized> {\n protected override norm(a: any) {\n return slimerNormalize(a)\n }\n\n protected override merge(a?: any, b?: any) {\n return slimerMerge(a, b)\n }\n}\n\nexport class SlimerPropertySet<T extends Model> extends QueryPropertySet<Slimer<T>> {\n protected override newProperty() {\n return new SlimerProperty(undefined)\n }\n\n protected override merge(...args: any[]) {\n return slimerMerge(...args)\n }\n}\n","import { ListRange } from \"@angular/cdk/collections\"\n\nimport { deepClone } from \"@ngutil/common\"\n\n// https://www.npmjs.com/package/array-view\n\n/**\n * @example\n * ```ts\n * {start: 0, end: 0} // empty range\n * {start: 0, end: 1} // range with one item.eg sliceApply([1, 2, 3], {start:0, end:1}) -> [1]\n * ```\n */\nexport interface Slice extends ListRange {\n /**\n * Start of slice, exact index of item in list\n */\n readonly start: number\n /**\n * End of slice, not include end index of item in list\n */\n readonly end: number\n readonly pageSize?: number\n}\n\nexport function sliceMerge(...slices: Slice[]) {\n let result: Slice | undefined = undefined\n\n for (const slice of slices) {\n if (slice == null) {\n continue\n }\n if (result == null) {\n result = deepClone(slice)\n } else {\n result = { ...(result as any), ...slice }\n }\n }\n\n return result\n}\n\n/**\n * Apply slice to array, and force the result length to equal with Slice length,\n * so fill array with undefined if not enought elements\n */\nexport function sliceApply(slice: Slice, array: readonly any[]): any[] {\n const result = array.slice(slice.start, slice.end)\n result.length = slice.end - slice.start\n return result\n}\n\n/**\n * @returns Page numbers, eg.: `[10, 11, 12, 13, ...]`\n */\nexport function sliceToPages(slice: Slice): number[] {\n if (slice.pageSize == null) {\n throw new Error(\"Missing `step` from slice\")\n }\n\n const start = Math.floor(slice.start / slice.pageSize)\n const end = Math.ceil(slice.end / slice.pageSize)\n return Array.from({ length: end - start }, (_, i) => start + i)\n}\n\nexport function sliceInsert(slice: Slice, array: readonly any[], newItems: readonly any[]): any[] {\n if (slice.start === slice.end) {\n return array as any\n }\n\n let result = array.slice(0, slice.start)\n result.length = slice.start\n\n result = result.concat(newItems)\n\n if (!isNaN(slice.end) && isFinite(slice.end)) {\n result.length = slice.end\n result = result.concat(array.slice(slice.end))\n }\n\n return result\n}\n\nexport function sliceClamp(slice: Slice, constraint: Slice): Slice {\n return {\n start: Math.max(slice.start, constraint.start),\n end: Math.min(slice.end, constraint.end),\n pageSize: slice.pageSize\n }\n}\n\nexport function sliceEq(a: Slice, b: Slice): boolean {\n return a.start === b.start && a.end === b.end && a.pageSize === b.pageSize\n}\n\n// TODO: sliceOverlap(other: Slice): Slice\n// TODO: sliceIncludes(other: Slice): boolean\n// TODO: sliceConcat(...slices: Slice[]): Slice[]\n// TODO: sliceDiff(slice: Slice): Slice[]\n","import { combineLatest, Observable, shareReplay } from \"rxjs\"\n\nimport { type DeepReadonly } from \"@ngutil/common\"\n\nimport { type Model } from \"../model\"\nimport { readonlyProp } from \"./common\"\nimport { type Filter, FilterProperty, FilterPropertySet } from \"./filter\"\nimport { type Grouper, GrouperProperty, GrouperPropertySet } from \"./grouper\"\nimport { type QueryPropertySetOf } from \"./query-property\"\nimport { type Slice } from \"./slice\"\nimport { type Slimer, SlimerProperty, SlimerPropertySet } from \"./slimer\"\nimport { type Sorter, SorterProperty, SorterPropertySet } from \"./sorter\"\n\nexport interface Query<T extends Model> {\n filter?: DeepReadonly<Filter<T>>\n sorter?: DeepReadonly<Sorter<T>>\n slimer?: DeepReadonly<Slimer<T>>\n grouper?: DeepReadonly<Grouper<T>>\n}\n\nexport interface QueryWithSlice<T extends Model> extends Query<T> {\n slice: DeepReadonly<Slice>\n}\n\nexport interface QueryResult<T extends Model> {\n items: readonly T[]\n total?: number\n groups?: any[]\n}\n\nexport interface QuerySubject<T extends Model, N extends string[]> extends Observable<Query<T>> {\n readonly filter: QueryPropertySetOf<FilterPropertySet<T>, FilterProperty<T>, N>\n readonly sorter: QueryPropertySetOf<SorterPropertySet, SorterProperty<T>, N>\n readonly slimer: QueryPropertySetOf<SlimerPropertySet<T>, SlimerProperty<T>, N>\n readonly grouper: QueryPropertySetOf<GrouperPropertySet<T>, GrouperProperty<T>, N>\n}\n\nexport function querySubject<T extends Model, N extends string[]>(...names: N): QuerySubject<T, N> {\n const filter = new FilterPropertySet(...names)\n const sorter = new SorterPropertySet(...names)\n const slimer = new SlimerPropertySet(...names)\n const grouper = new GrouperPropertySet(...names)\n\n const result = combineLatest({ filter, sorter, slimer, grouper }).pipe(shareReplay(1))\n readonlyProp(result, \"filter\", filter)\n readonlyProp(result, \"sorter\", sorter)\n readonlyProp(result, \"slimer\", slimer)\n readonlyProp(result, \"grouper\", grouper)\n\n return result as any\n}\n","import { isEqual } from \"lodash\"\nimport { Primitive } from \"utility-types\"\n\nimport { DeepReadonly, toSorted } from \"@ngutil/common\"\n\nimport { Model } from \"../model\"\nimport { Filter, filterBy } from \"./filter\"\nimport { groupBy } from \"./grouper\"\nimport { QueryResult, QueryWithSlice } from \"./query\"\nimport { Slice } from \"./slice\"\nimport { sortBy, Sorter } from \"./sorter\"\n\nconst INPUT = Symbol(\"INPUT\")\n\ninterface PartialExecutor {\n [INPUT]: any\n}\n\nexport interface QueryExecutors<T extends Model> {\n readonly filterFn?: FilterExecutor<T>\n readonly sorterFn?: SorterExecutor<T>\n readonly grouperFn?: GrouperExecutor<T>\n readonly slicerFn?: SliceExecutor<T>\n}\n\nexport interface QueryExecutor<T extends Model> extends QueryExecutors<T> {\n (items: readonly T[]): QueryResult<T>\n}\n\nexport function queryExecutor<T extends Model>(\n query: QueryWithSlice<T>,\n previous?: QueryExecutor<T>\n): QueryExecutor<T> {\n const executors: QueryExecutors<T> = {\n filterFn: filterExecutor(query.filter, previous?.filterFn),\n sorterFn: sorterExecutor(query.sorter, previous?.sorterFn),\n grouperFn: grouperExecutor(query.grouper, previous?.grouperFn),\n slicerFn: sliceExecutor(query.slice, previous?.slicerFn)\n }\n\n const changed = previous == null || Object.entries(executors).some(([k, v]) => (previous as any)[k] !== v)\n if (!changed) {\n return previous\n }\n\n const executor = (items: readonly T[]): QueryResult<T> => {\n if (items == null || items.length === 0) {\n return { items: [], total: 0 }\n }\n\n let result: readonly T[] = items\n\n if (executors.filterFn) {\n result = result.filter(executors.filterFn)\n }\n\n if (executors.sorterFn) {\n result = toSorted(result, executors.sorterFn)\n }\n\n const total = result.length\n\n // TODO: grouper\n\n if (executors.slicerFn) {\n result = executors.slicerFn(result)\n }\n\n return { items: result, total }\n }\n\n for (const [k, v] of Object.entries(executors)) {\n Object.defineProperty(executor, k, {\n value: v,\n enumerable: true,\n writable: false\n })\n }\n\n return executor\n}\n\ninterface FilterExecutor<T extends Model> extends PartialExecutor {\n (item: T): boolean\n}\n\nfunction filterExecutor<T extends Model>(\n filter?: DeepReadonly<Filter<T>>,\n prev?: FilterExecutor<T>\n): FilterExecutor<T> | undefined {\n return compileExec<T>(filter, prev, filterBy)\n}\n\ninterface SorterExecutor<T extends Model> extends PartialExecutor {\n (a: T, b: T): number\n}\n\nfunction sorterExecutor<T extends Model>(\n sorter?: DeepReadonly<Sorter<T>>,\n prev?: SorterExecutor<T>\n): SorterExecutor<T> | undefined {\n return compileExec<T>(sorter, prev, sortBy)\n}\n\ninterface GrouperExecutor<T extends Model> extends PartialExecutor {\n (item: T): Primitive\n}\n\nfunction grouperExecutor<T extends Model>(\n sorter?: DeepReadonly<Sorter<T>>,\n prev?: GrouperExecutor<T>\n): GrouperExecutor<T> | undefined {\n return compileExec<T>(sorter, prev, groupBy)\n}\n\ninterface SliceExecutor<T extends Model> extends PartialExecutor {\n (items: readonly T[]): T[]\n}\n\nfunction sliceExecutor<T extends Model>(\n slice?: DeepReadonly<Slice>,\n prev?: SliceExecutor<T>\n): SliceExecutor<T> | undefined {\n return compileExec<T>(slice, prev, sliceBy)\n}\n\nfunction sliceBy<T extends Model>(slice: Slice) {\n return (items: T[]) => items.slice(slice.start, slice.end)\n}\n\nfunction compileExec<T extends Model>(input: any, prev: any, compiler: any): any {\n if (input == null) {\n return undefined\n }\n\n if (prev != null) {\n // thorically input is readonly\n if (prev[INPUT] === input || isEqual(prev[INPUT], input)) {\n return prev\n }\n }\n\n const exec = compiler(input) as any\n Object.defineProperty(exec, INPUT, {\n value: input,\n enumerable: true,\n writable: false\n })\n return exec\n}\n","import { Observable } from \"rxjs\"\n\nimport { DeepReadonly } from \"@ngutil/common\"\n\nimport { Model, ModelRefNorm } from \"../model\"\nimport { Slice } from \"../query\"\n\nexport type PartialCollection<T> = readonly (T | undefined)[]\n\nexport abstract class CollectionStore<T extends Model> {\n /**\n * Update the given slice, and return all items observable\n */\n abstract insertSlice(slice: DeepReadonly<Slice>, items: readonly T[]): Observable<PartialCollection<T>>\n\n /**\n * @returns `true` when the given slice is available in the cache\n */\n abstract hasSlice(slice: DeepReadonly<Slice>): Observable<boolean>\n\n /**\n * @returns items by the given slice\n */\n abstract getSlice(slice: DeepReadonly<Slice>): Observable<PartialCollection<T>>\n\n /**\n * Get item from collection\n */\n abstract get(ref: ModelRefNorm): Observable<T | undefined>\n\n /**\n * Get index of item in collection, -1 if not found\n */\n abstract indexOf(ref: ModelRefNorm): Observable<number>\n\n /**\n * Update item in collection\n *\n * @returns the updated index, or -1 if not found\n */\n abstract update(ref: ModelRefNorm, item: T): Observable<number>\n\n /**\n * Update item if exists in collection, or insert at the given position\n *\n * @param position If positon is negative, insert at the end of collection\n * @returns the updated index or index of where to insert\n */\n abstract updateOrInsert(ref: ModelRefNorm, item: T, position?: number): Observable<number>\n\n /**\n * Remove item from collection\n * @returns the index of deleted item, -1 if not found\n */\n abstract del(ref: ModelRefNorm): Observable<number>\n\n /**\n * Removes all items from collection\n */\n abstract clear(): Observable<void>\n}\n","import { BehaviorSubject, combineLatest, map, Observable, of, take } from \"rxjs\"\n\nimport { Model, ModelRefNorm } from \"../model\"\nimport { Slice, sliceApply, sliceClamp, sliceEq, sliceInsert } from \"../query\"\nimport { CollectionStore, PartialCollection } from \"./collection-store\"\n\nexport class MemoryStore<T extends Model> extends CollectionStore<T> {\n readonly #data = new BehaviorSubject<PartialCollection<T>>([])\n\n override insertSlice(slice: Slice, items: readonly T[]): Observable<PartialCollection<T>> {\n this.#data.next(sliceInsert(slice, this.#data.value, items))\n return this.#data\n }\n\n override hasSlice(slice: Slice): Observable<boolean> {\n return this.#data.pipe(\n map(data => {\n if (sliceEq(slice, sliceClamp(slice, { start: 0, end: data.length }))) {\n for (let i = slice.start; i < slice.end; i++) {\n if (data[i] == null) {\n return false\n }\n }\n return true\n } else {\n return false\n }\n })\n )\n }\n\n override getSlice(slice: Slice): Observable<PartialCollection<T>> {\n return this.#data.pipe(map(data => sliceApply(slice, data)))\n }\n\n override get(ref: ModelRefNorm): Observable<T | undefined> {\n return this.#data.pipe(map(data => data.find(ref.toFilter())))\n }\n\n override indexOf(ref: ModelRefNorm): Observable<number> {\n return this.#data.pipe(map(data => data.findIndex(ref.toFilter())))\n }\n\n override update(ref: ModelRefNorm, item: T): Observable<number> {\n return combineLatest({\n index: this.indexOf(ref),\n data: this.#data\n }).pipe(\n take(1),\n map(({ index, data }) => {\n if (index < 0) {\n return index\n }\n this.#data.next(sliceInsert({ start: index, end: index + 1 }, data, [item]))\n return index\n })\n )\n }\n\n override updateOrInsert(ref: ModelRefNorm, item: T, position?: number): Observable<number> {\n return combineLatest({\n index: this.indexOf(ref),\n data: this.#data\n }).pipe(\n take(1),\n map(({ index, data }) => {\n if (index < 0) {\n index = position == null ? data.length : position < 0 ? data.length : position\n }\n this.#data.next(sliceInsert({ start: index, end: index + 1 }, data, [item]))\n return index\n })\n )\n }\n\n override del(ref: ModelRefNorm): Observable<number> {\n return combineLatest({\n index: this.indexOf(ref),\n data: this.#data\n }).pipe(\n take(1),\n map(({ index, data }) => {\n if (index < 0) {\n return index\n }\n const result = data.slice(0)\n result.splice(index, 1)\n this.#data.next(result)\n return index\n })\n )\n }\n\n override clear(): Observable<void> {\n if (this.#data.value.length > 0) {\n this.#data.next([])\n }\n return of(undefined)\n }\n}\n","import { DataSource as CdkDataSource, CollectionViewer } from \"@angular/cdk/collections\"\n\nimport {\n BehaviorSubject,\n combineLatest,\n debounceTime,\n distinctUntilChanged,\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 } from \"lodash\"\n\nimport { ConnectProtocol, deepClone, deepFreeze, isFalsy } from \"@ngutil/common\"\n\nimport type { Model, ModelRef } from \"../model\"\nimport type { DataProvider } from \"../provider/provider\"\nimport type { QueryWithSlice, Slice } from \"../query\"\nimport { querySubject } from \"../query\"\nimport { type CollectionStore, MemoryStore, type PartialCollection } from \"../store\"\n\nconst DEBOUNCE_TIME = 50\n\nexport class DataSource<T extends Model> extends CdkDataSource<T | undefined> implements ConnectProtocol {\n readonly isBusy$ = new BehaviorSubject<boolean>(false)\n readonly total$ = new BehaviorSubject<number | undefined>(undefined)\n\n readonly #slice = new ReplaySubject<Slice>(1)\n readonly slice$: Observable<Slice> = this.#slice.pipe(\n switchMap(slice => this.provider.clampSlice(slice)),\n distinctUntilChanged(isEqual),\n map(slice => deepFreeze(deepClone(slice))),\n shareReplay(1)\n )\n\n readonly #reload = new BehaviorSubject<void>(undefined)\n\n readonly #query: Observable<QueryWithSlice<T>> = combineLatest({\n query: this.query$,\n reload: this.#reload\n }).pipe(\n tap(() => this.#setBusy(true)),\n // TODO: maybe silent reset or prevent items$ chenges\n // TODO: alternative solution use cacheId, and query item from store with this cacheId\n switchMap(({ query }) => this.store.clear().pipe(map(() => query))),\n switchMap(query =>\n this.slice$.pipe(\n tap(() => this.#setBusy(true)),\n map(slice => {\n return { ...query, slice }\n })\n )\n ),\n shareReplay(1)\n )\n\n readonly items$: Observable<PartialCollection<T>> = this.#query.pipe(\n tap(() => this.#setBusy(true)),\n debounceTime(DEBOUNCE_TIME),\n // tap(query => console.log(query)),\n switchMap(query =>\n this.store.hasSlice(query.slice).pipe(\n take(1),\n switchMap(hasSlice => {\n if (hasSlice) {\n return this.store.getSlice(query.slice).pipe(take(1))\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 tap(() => this.#setBusy(false)),\n shareReplay(1)\n )\n\n readonly isEmpty$ = combineLatest({ busy: this.isBusy$, items: this.items$ }).pipe(\n map(({ busy, items }) => !busy && items.every(isFalsy)),\n shareReplay(1)\n )\n\n constructor(\n public readonly provider: DataProvider<T>,\n public readonly store: CollectionStore<T> = new MemoryStore(),\n public readonly query$ = querySubject(\"normal\", \"forced\")\n ) {\n super()\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 return this.watchItem(ref).pipe(take(1))\n }\n\n watchItem(ref: ModelRef): Observable<T | undefined> {\n const refn = this.provider.meta.normalizeRef(ref)\n return this.#storeFirst(\n query => this.store.get(refn),\n query => this.provider.queryItem(refn, query)\n )\n }\n\n getItemPosition(ref: ModelRef): Observable<number | undefined> {\n return this.watchItemPosition(ref).pipe(take(1))\n }\n\n watchItemPosition(ref: ModelRef): Observable<number | undefined> {\n const refn = this.provider.meta.normalizeRef(ref)\n return this.#storeFirst(\n query => this.store.indexOf(refn).pipe(map(i => (i < 0 ? undefined : i))),\n query => this.provider.queryPosition(refn, query)\n )\n }\n\n realodItem(ref: ModelRef, insertPosition?: number): Observable<T | undefined> {\n const refn = this.provider.meta.normalizeRef(ref)\n return this.#query.pipe(\n take(1),\n switchMap(query => this.provider.queryItem(refn, query).pipe(take(1))),\n switchMap(item =>\n item != null ? this.store.updateOrInsert(refn, item, insertPosition).pipe(map(() => item)) : of(item)\n )\n )\n }\n\n #storeFirst<X>(\n storeFn: (query: QueryWithSlice<T>) => Observable<X>,\n selfFn: (query: QueryWithSlice<T>) => Observable<X>\n ): Observable<X> {\n return this.#query.pipe(\n take(1),\n switchMap(query => storeFn(query).pipe(switchMap(result => (result == null ? selfFn(query) : of(result)))))\n )\n }\n\n #setBusy(busy: boolean) {\n if (this.provider.isAsync) {\n if (this.isBusy$.value !== busy) {\n this.isBusy$.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 type { Observable } from \"rxjs\"\nimport { of } from \"rxjs\"\n\nimport type { Model, ModelMeta, ModelRefNorm } from \"../model\"\nimport type { QueryResult, QueryWithSlice, 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: QueryWithSlice<T>): Observable<QueryResult<T>>\n\n /**\n * Query exactly one item by the given request\n */\n abstract queryItem(ref: ModelRefNorm, request: QueryWithSlice<T>): Observable<T | undefined>\n\n /**\n * Query item position in the list that matching by the given request\n */\n abstract queryPosition(ref: ModelRefNorm, request: QueryWithSlice<T>): Observable<number | undefined>\n\n /**\n * Froce Slice boundaries, useful in array, or obeservable providers\n */\n clampSlice(slice: Slice): Observable<Slice> {\n return of(slice)\n }\n\n /**\n * @returns New data source instance\n */\n toDataSource(store?: CollectionStore<T>): DataSource<T> {\n return new DataSource(this, store)\n }\n}\n","import { DataSource as CdkDataSource, CollectionViewer } from \"@angular/cdk/collections\"\nimport { Directive, inject, input, Input, OnDestroy } from \"@angular/core\"\nimport { takeUntilDestroyed, toObservable } from \"@angular/core/rxjs-interop\"\n\nimport {\n combineLatest,\n finalize,\n map,\n Observable,\n of,\n ReplaySubject,\n shareReplay,\n Subject,\n Subscription,\n switchMap,\n takeUntil,\n throwError\n} from \"rxjs\"\n\nimport { BusyDirective } from \"@ngutil/aria\"\nimport { ConnectProtocol } from \"@ngutil/common\"\n\nimport { Model } from \"../model\"\nimport { DataProvider } from \"../provider/provider\"\nimport { Filter, Grouper, Slimer, Sorter } from \"../query\"\nimport { DataSource } from \"./source\"\n\nexport type DataSourceProxyInput<T extends Model> = DataSourceProxy<T> | DataSource<T> | DataProvider<T>\n\n/**\n * @example\n * ```html\n * <table [nuDataSource]=\"...\" [filter]=\"{isActive: true}\" [sorter]=\"[{name: 'asc'}]\"></table>\n * ```\n *\n * ```ts\n * @Component({\n * template: `<table [nuDataSource]=\"users$\"></table>`\n * })\n * class UserTable {\n * readonly userService = inject(UserService)\n * readonly users$ = UserService.all()\n * }\n * ```\n *\n * ```ts\n * @Component({\n * selector: \"table.my-table\",\n * template: `\n * <cdk-virtual-scroll-viewport itemSize=\"50\" class=\"example-viewport\">\n * <div *cdkVirtualFor=\"let item of dataSource\" class=\"example-item\">{{item}}</div>\n * </cdk-virtual-scroll-viewport>\n * `\n * })\n * class TableComponent {\n * readonly dataSource = inject(DataSourceProxy)\n * }\n * ```\n */\n@Directive({\n standalone: true,\n selector: \"[nuDataSource]\",\n exportAs: \"nuDataSource\"\n})\nexport class DataSourceProxy<T extends Model>\n extends CdkDataSource<T | undefined>\n implements OnDestroy, ConnectProtocol\n{\n @Input({ required: true, alias: \"nuDataSource\" })\n set value(value: DataSourceProxyInput<T>) {\n this.#valueSub?.unsubscribe()\n this.#valueSub = coerceDataSource<T>(value).subscribe(this.#value)\n }\n\n #valueSub?: Subscription\n readonly #value = new ReplaySubject<DataSource<T>>(1)\n readonly value$ = this.#value.pipe(takeUntilDestroyed())\n readonly query$ = this.value$.pipe(\n map(value => value.query$),\n shareReplay(1)\n )\n\n readonly items$ = this.value$.pipe(\n switchMap(value => value.items$),\n shareReplay(1)\n )\n\n readonly isBusy$ = this.value$.pipe(\n switchMap(value => value.isBusy$),\n shareReplay(1)\n )\n\n readonly isEmpty$ = this.value$.pipe(\n switchMap(value => value.isEmpty$),\n shareReplay(1)\n )\n\n #cvSubs = new Map<CollectionViewer, Subject<void>>()\n\n override connect(collectionViewer: CollectionViewer): Observable<readonly (T | undefined)[]> {\n const until = new Subject<void>()\n\n this.#cvSubs.get(collectionViewer)?.next()\n this.#cvSubs.set(collectionViewer, until)\n\n return this.value$.pipe(\n switchMap(value => value.connect(collectionViewer)),\n takeUntil(until),\n finalize(() => this.#cvSubs.delete(collectionViewer))\n )\n }\n\n override disconnect(collectionViewer: CollectionViewer): void {\n this.#cvSubs.get(collectionViewer)?.next()\n this.#cvSubs.delete(collectionViewer)\n }\n\n ngOnDestroy(): void {\n this.#valueSub?.unsubscribe()\n this.#valueSub = undefined\n }\n}\n\n@Directive({\n standalone: true,\n selector: \"[nuDataSource][filter]\"\n})\nexport class DataSourceProxyFilter<T extends Model, F extends Filter<T>> {\n readonly #proxy = inject<DataSourceProxy<T>>(DataSourceProxy)\n readonly filter = input.required<F>()\n readonly filter$ = toObservable(this.filter)\n\n constructor() {\n combineLatest({ query: this.#proxy.query$, filter: this.filter$ })\n .pipe(takeUntilDestroyed())\n .subscribe(({ query, filter }) => query.filter.forced.set(filter))\n }\n}\n\n@Directive({\n standalone: true,\n selector: \"[nuDataSource][sorter]\"\n})\nexport class DataSourceProxySorter<T extends Model, S extends Sorter<T>> {\n readonly #proxy = inject<DataSourceProxy<T>>(DataSourceProxy)\n readonly sorter = input.required<S>()\n readonly sorter$ = toObservable(this.sorter)\n\n constructor() {\n combineLatest({ query: this.#proxy.query$, sorter: this.sorter$ })\n .pipe(takeUntilDestroyed())\n .subscribe(({ query, sorter }) => query.sorter.forced.set(sorter))\n }\n}\n\n@Directive({\n standalone: true,\n selector: \"[nuDataSource][slimer]\"\n})\nexport class DataSourceProxySlimer<T extends Model, S extends Slimer<T>> {\n readonly #proxy = inject<DataSourceProxy<T>>(DataSourceProxy)\n readonly slimer = input.required<S>()\n readonly slimer$ = toObservable(this.slimer)\n\n constructor() {\n combineLatest({ query: this.#proxy.query$, slimer: this.slimer$ })\n .pipe(takeUntilDestroyed())\n .subscribe(({ query, slimer }) => query.slimer.forced.set(slimer))\n }\n}\n\n@Directive({\n standalone: true,\n selector: \"[nuDataSource][grouper]\"\n})\nexport class DataSourceProxyGrouper<T extends Model, G extends Grouper<T>> {\n readonly #proxy = inject<DataSourceProxy<T>>(DataSourceProxy)\n readonly grouper = input.required<G>()\n readonly grouper$ = toObservable(this.grouper)\n\n constructor() {\n combineLatest({ query: this.#proxy.query$, grouper: this.grouper$ })\n .pipe(takeUntilDestroyed())\n .subscribe(({ query, grouper }) => query.grouper.forced.set(grouper))\n }\n}\n\n@Directive({\n standalone: true,\n selector: \"[nuDataSource][nuBusy]\"\n})\nexport class DataSourceProxyBusy {\n readonly #proxy = inject<DataSourceProxy<any>>(DataSourceProxy)\n readonly #busy = inject(BusyDirective)\n\n constructor() {\n this.#proxy.value$\n .pipe(\n takeUntilDestroyed(),\n switchMap(value => value.isBusy$)\n )\n .subscribe(isBusy => this.#busy.set(isBusy, \"data-source\"))\n }\n}\n\nfunction coerceDataSource<T extends Model>(value: DataSourceProxyInput<T>): Observable<DataSource<T>> {\n if (value instanceof DataSourceProxy) {\n return value.value$\n } else if (value instanceof DataSource) {\n return of(value)\n } else if (value instanceof DataProvider) {\n return of(value.toDataSource())\n } else {\n return throwError(() => new Error(\"Invalid DataSource value\"))\n }\n}\n","import { TrackByFunction } from \"@angular/core\"\n\nimport { isEqual } from \"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 { map, Observable, take } from \"rxjs\"\n\nimport { Model, ModelMeta, ModelMetaInput, ModelRefNorm } from \"../model\"\nimport { queryExecutor, QueryExecutor, QueryResult, QueryWithSlice, Slice, sliceClamp } from \"../query\"\nimport { DataProvider } from \"./provider\"\n\nexport abstract class LocalProvider<T extends Model> extends DataProvider<T> {\n override readonly isAsync = false\n override readonly meta: ModelMeta<T>\n abstract readonly items$: Observable<readonly T[]>\n\n #executor?: QueryExecutor<T>\n\n constructor(meta: ModelMetaInput<T>) {\n super()\n this.meta = ModelMeta.coerce(meta)\n }\n\n executor(request: QueryWithSlice<T>): QueryExecutor<T> {\n return (this.#executor = queryExecutor(request, this.#executor))\n }\n\n override queryList(request: QueryWithSlice<T>): Observable<QueryResult<T>> {\n const exec = this.executor(request)\n return this.items$.pipe(map(items => exec(items)))\n }\n\n override queryItem(ref: ModelRefNorm, request: QueryWithSlice<T>): Observable<T | undefined> {\n return this.queryList(request).pipe(map(list => list.items.find(ref.toFilter())))\n }\n\n override queryPosition(ref: ModelRefNorm, request: QueryWithSlice<T>): Observable<number | undefined> {\n return this.queryList(request).pipe(map(list => list.items.findIndex(ref.toFilter())))\n }\n\n override clampSlice(slice: Slice): Observable<Slice> {\n return this.items$.pipe(\n take(1),\n map(items => sliceClamp(slice, { start: 0, end: items.length }))\n )\n }\n}\n","import { type Observable, of } from \"rxjs\"\n\nimport type { Model, ModelMetaInput } from \"../model\"\nimport { LocalProvider } from \"./local\"\n\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","import { NgModule } from \"@angular/core\"\n\nimport {\n DataSourceProxy,\n DataSourceProxyBusy,\n DataSourceProxyFilter,\n DataSourceProxyGrouper,\n DataSourceProxySlimer,\n DataSourceProxySorter\n} from \"./source/proxy.directive\"\n\nexport * from \"./model\"\nexport * from \"./provider\"\nexport * from \"./query\"\nexport * from \"./source\"\nexport * from \"./store\"\n\n@NgModule({\n imports: [\n DataSourceProxy,\n DataSourceProxyBusy,\n DataSourceProxyFilter,\n DataSourceProxyGrouper,\n DataSourceProxySlimer,\n DataSourceProxySorter\n ],\n exports: [\n DataSourceProxy,\n DataSourceProxyBusy,\n DataSourceProxyFilter,\n DataSourceProxyGrouper,\n DataSourceProxySlimer,\n DataSourceProxySorter\n ]\n})\nexport class DataSourceModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["CdkDataSource"],"mappings":"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"}
package/package.json CHANGED
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "@ngutil/data",
3
- "version": "0.0.53",
3
+ "version": "0.0.55",
4
4
  "peerDependencies": {
5
- "@angular/cdk": "^17.3.6",
6
- "@angular/core": "^17.3.6",
5
+ "@angular/cdk": "18.2.6",
6
+ "@angular/core": "18.2.6",
7
7
  "lodash": "^4.17.21",
8
8
  "rxjs": "^7.8.1",
9
9
  "utility-types": "^3.11.0",
10
- "@ngutil/aria": "0.0.53",
11
- "@ngutil/common": "0.0.53"
10
+ "@ngutil/common": "0.0.55",
11
+ "@ngutil/aria": "0.0.55"
12
12
  },
13
13
  "publishConfig": {
14
14
  "access": "public",
@@ -86,7 +86,6 @@ export declare class DataSourceProxyGrouper<T extends Model, G extends Grouper<T
86
86
  }
87
87
  export declare class DataSourceProxyBusy {
88
88
  #private;
89
- readonly isBusy$: Observable<boolean>;
90
89
  constructor();
91
90
  static ɵfac: i0.ɵɵFactoryDeclaration<DataSourceProxyBusy, never>;
92
91
  static ɵdir: i0.ɵɵDirectiveDeclaration<DataSourceProxyBusy, "[nuDataSource][nuBusy]", never, {}, {}, never, never, true, never>;