@ngutil/data 0.0.10 → 0.0.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/esm2022/index.mjs +6 -3
  2. package/esm2022/provider/array.mjs +9 -0
  3. package/esm2022/provider/index.mjs +5 -0
  4. package/esm2022/provider/local.mjs +29 -0
  5. package/esm2022/provider/observable.mjs +8 -0
  6. package/esm2022/provider/provider.mjs +17 -0
  7. package/esm2022/query/index.mjs +1 -1
  8. package/esm2022/query/sorter.mjs +1 -1
  9. package/esm2022/source/index.mjs +3 -0
  10. package/esm2022/source/properties/abstract.mjs +33 -0
  11. package/esm2022/source/properties/filter.mjs +16 -0
  12. package/esm2022/source/properties/grouper.mjs +16 -0
  13. package/esm2022/source/properties/index.mjs +5 -0
  14. package/esm2022/source/properties/slimer.mjs +16 -0
  15. package/esm2022/source/properties/sorter.mjs +16 -0
  16. package/esm2022/source/proxy.directive.mjs +152 -0
  17. package/esm2022/source/source.mjs +109 -0
  18. package/esm2022/store/collection-store.mjs +3 -0
  19. package/esm2022/store/index.mjs +3 -0
  20. package/esm2022/store/memory-store.mjs +79 -0
  21. package/fesm2022/ngutil-data.mjs +967 -166
  22. package/fesm2022/ngutil-data.mjs.map +1 -1
  23. package/index.d.ts +5 -2
  24. package/package.json +2 -2
  25. package/provider/array.d.ts +7 -0
  26. package/provider/index.d.ts +4 -0
  27. package/provider/local.d.ts +16 -0
  28. package/provider/observable.d.ts +7 -0
  29. package/provider/provider.d.ts +35 -0
  30. package/query/index.d.ts +1 -1
  31. package/query/sorter.d.ts +4 -4
  32. package/source/index.d.ts +2 -0
  33. package/source/properties/abstract.d.ts +17 -0
  34. package/source/properties/filter.d.ts +11 -0
  35. package/source/properties/grouper.d.ts +11 -0
  36. package/source/properties/index.d.ts +4 -0
  37. package/source/properties/slimer.d.ts +11 -0
  38. package/source/properties/sorter.d.ts +11 -0
  39. package/source/proxy.directive.d.ts +57 -0
  40. package/source/source.d.ts +36 -0
  41. package/store/collection-store.d.ts +49 -0
  42. package/store/index.d.ts +2 -0
  43. package/store/memory-store.d.ts +16 -0
@@ -0,0 +1,109 @@
1
+ import { DataSource as CdkDataSource } from "@angular/cdk/collections";
2
+ import { BehaviorSubject, combineLatest, debounceTime, distinctUntilChanged, finalize, map, Observable, of, ReplaySubject, shareReplay, Subject, switchMap, take, takeUntil, tap } from "rxjs";
3
+ import { isEqual, merge } from "lodash";
4
+ import { deepClone, deepFreeze } from "@ngutil/common";
5
+ import { MemoryStore } from "../store";
6
+ import { FilterCombined, GrouperCombined, SlimerCombined, SorterCombined } from "./properties";
7
+ const DEBOUNCE_TIME = 50;
8
+ export class DataSource extends CdkDataSource {
9
+ #queryBase;
10
+ #slice;
11
+ #reload;
12
+ constructor(provider, store) {
13
+ super();
14
+ this.provider = provider;
15
+ this.busy$ = new BehaviorSubject(false);
16
+ this.total$ = new BehaviorSubject(undefined);
17
+ this.filter = new FilterCombined();
18
+ this.sorter = new SorterCombined();
19
+ this.slimer = new SlimerCombined();
20
+ this.grouper = new GrouperCombined();
21
+ this.#queryBase = combineLatest({
22
+ filter: this.filter.merged$,
23
+ sorter: this.sorter.merged$,
24
+ slimer: this.slimer.merged$,
25
+ grouper: this.grouper.merged$
26
+ }).pipe(shareReplay(1));
27
+ this.#slice = new ReplaySubject(1);
28
+ this.slice$ = this.#slice.pipe(switchMap(slice => this.provider.clampSlice(slice)), distinctUntilChanged(isEqual), map(slice => deepFreeze(deepClone(slice))), shareReplay(1));
29
+ this.#reload = new Subject();
30
+ this.reset$ = merge(this.#queryBase, this.#reload).pipe(tap(() => this.#setBusy(true)), switchMap(() => this.store.clear()), shareReplay(1));
31
+ this.query$ = combineLatest({ base: this.#queryBase, slice: this.slice$ }).pipe(map(({ base, slice }) => {
32
+ return { ...base, slice };
33
+ }), shareReplay(1));
34
+ this.items$ = combineLatest({ query: this.query$, reset: this.reset$ }).pipe(tap(() => this.#setBusy(true)), debounceTime(DEBOUNCE_TIME), switchMap(({ query }) => {
35
+ return this.store.hasSlice(query.slice).pipe(switchMap(hasSlice => {
36
+ if (hasSlice) {
37
+ return this.store.getSlice(query.slice);
38
+ }
39
+ else {
40
+ return this.provider.queryList(query).pipe(switchMap(result => {
41
+ if (result.total != null) {
42
+ this.total$.next(result.total);
43
+ }
44
+ return this.store.insertSlice(query.slice, result.items);
45
+ }), take(1));
46
+ }
47
+ }));
48
+ }), finalize(() => this.#setBusy(false)), shareReplay(1));
49
+ this.#cvSubs = new Map();
50
+ if (store == null) {
51
+ store = new MemoryStore();
52
+ }
53
+ this.store = store;
54
+ }
55
+ setSlice(slice) {
56
+ this.#slice.next(slice);
57
+ return this;
58
+ }
59
+ all() {
60
+ return this.setSlice({ start: 0, end: Infinity });
61
+ }
62
+ realod() {
63
+ this.#reload.next();
64
+ }
65
+ getItem(ref) {
66
+ const refn = this.provider.meta.normalizeRef(ref);
67
+ return this.#storeFirst(query => this.store.get(refn), query => this.provider.queryItem(refn, query));
68
+ }
69
+ getItemPosition(ref) {
70
+ const refn = this.provider.meta.normalizeRef(ref);
71
+ return this.#storeFirst(query => this.store.indexOf(refn).pipe(map(i => (i < 0 ? undefined : i))), query => this.provider.queryPosition(refn, query));
72
+ }
73
+ realodItem(ref, insertPosition) {
74
+ const refn = this.provider.meta.normalizeRef(ref);
75
+ return this.query$.pipe(switchMap(query => this.provider.queryItem(refn, query)), switchMap(item => item != null ? this.store.updateOrInsert(refn, item, insertPosition).pipe(map(() => item)) : of(item)), take(1));
76
+ }
77
+ #storeFirst(storeFn, selfFn) {
78
+ return this.query$.pipe(take(1), switchMap(query => storeFn(query).pipe(switchMap(result => (result == null ? selfFn(query) : of(result))))));
79
+ }
80
+ #setBusy(busy) {
81
+ if (this.provider.isAsync) {
82
+ if (this.busy$.value !== busy) {
83
+ this.busy$.next(busy);
84
+ }
85
+ }
86
+ }
87
+ #cvSubs;
88
+ connect(collectionViewer) {
89
+ const until = new Subject();
90
+ this.#cvSubs.get(collectionViewer)?.next();
91
+ this.#cvSubs.set(collectionViewer, until);
92
+ return new Observable((subscriber) => {
93
+ const sub1 = collectionViewer.viewChange.subscribe(this.#slice);
94
+ const sub2 = this.items$.subscribe(subscriber);
95
+ return () => {
96
+ if (this.#cvSubs.get(collectionViewer) === until) {
97
+ this.#cvSubs.delete(collectionViewer);
98
+ }
99
+ sub1.unsubscribe();
100
+ sub2.unsubscribe();
101
+ };
102
+ }).pipe(takeUntil(until));
103
+ }
104
+ disconnect(collectionViewer) {
105
+ this.#cvSubs.get(collectionViewer)?.next();
106
+ this.#cvSubs.delete(collectionViewer);
107
+ }
108
+ }
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGF0YS9zcmMvc291cmNlL3NvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxJQUFJLGFBQWEsRUFBb0IsTUFBTSwwQkFBMEIsQ0FBQTtBQUV4RixPQUFPLEVBQ0gsZUFBZSxFQUNmLGFBQWEsRUFFYixZQUFZLEVBQ1osb0JBQW9CLEVBQ3BCLFFBQVEsRUFDUixHQUFHLEVBQ0gsVUFBVSxFQUNWLEVBQUUsRUFDRixhQUFhLEVBQ2IsV0FBVyxFQUNYLE9BQU8sRUFFUCxTQUFTLEVBQ1QsSUFBSSxFQUNKLFNBQVMsRUFDVCxHQUFHLEVBQ04sTUFBTSxNQUFNLENBQUE7QUFFYixPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUV2QyxPQUFPLEVBQW1CLFNBQVMsRUFBRSxVQUFVLEVBQWdCLE1BQU0sZ0JBQWdCLENBQUE7QUFLckYsT0FBTyxFQUF3QixXQUFXLEVBQTBCLE1BQU0sVUFBVSxDQUFBO0FBQ3BGLE9BQU8sRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFFOUYsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFBO0FBSXhCLE1BQU0sT0FBTyxVQUE0QixTQUFRLGFBQTRCO0lBU2hFLFVBQVUsQ0FLSTtJQUVkLE1BQU0sQ0FBOEI7SUFRcEMsT0FBTyxDQUFzQjtJQXlDdEMsWUFDb0IsUUFBeUIsRUFDekMsS0FBMEI7UUFFMUIsS0FBSyxFQUFFLENBQUE7UUFIUyxhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQWpFcEMsVUFBSyxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFBO1FBQzNDLFdBQU0sR0FBRyxJQUFJLGVBQWUsQ0FBcUIsU0FBUyxDQUFDLENBQUE7UUFFM0QsV0FBTSxHQUFHLElBQUksY0FB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QUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUV6QyxPQUFPLElBQUksVUFBVSxDQUFDLENBQUMsVUFBa0QsRUFBRSxFQUFFO1lBQ3pFLE1BQU0sSUFBSSxHQUFHLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQy9ELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFBO1lBRTlDLE9BQU8sR0FBRyxFQUFFO2dCQUNSLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQztvQkFDL0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtnQkFDekMsQ0FBQztnQkFDRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUE7Z0JBQ2xCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQTtZQUN0QixDQUFDLENBQUE7UUFDTCxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7SUFDN0IsQ0FBQztJQUVRLFVBQVUsQ0FBQyxnQkFBa0M7UUFDbEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQTtRQUMxQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO0lBQ3pDLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGFTb3VyY2UgYXMgQ2RrRGF0YVNvdXJjZSwgQ29sbGVjdGlvblZpZXdlciB9IGZyb20gXCJAYW5ndWxhci9jZGsvY29sbGVjdGlvbnNcIlxuXG5pbXBvcnQge1xuICAgIEJlaGF2aW9yU3ViamVjdCxcbiAgICBjb21iaW5lTGF0ZXN0LFxuICAgIGNvbmNhdE1hcCxcbiAgICBkZWJvdW5jZVRpbWUsXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gICAgZmluYWxpemUsXG4gICAgbWFwLFxuICAgIE9ic2VydmFibGUsXG4gICAgb2YsXG4gICAgUmVwbGF5U3ViamVjdCxcbiAgICBzaGFyZVJlcGxheSxcbiAgICBTdWJqZWN0LFxuICAgIFN1YnNjcmliZXIsXG4gICAgc3dpdGNoTWFwLFxuICAgIHRha2UsXG4gICAgdGFrZVVudGlsLFxuICAgIHRhcFxufSBmcm9tIFwicnhqc1wiXG5cbmltcG9ydCB7IGlzRXF1YWwsIG1lcmdlIH0gZnJvbSBcImxvZGFzaFwiXG5cbmltcG9ydCB7IENvbm5lY3RQcm90b2NvbCwgZGVlcENsb25lLCBkZWVwRnJlZXplLCBEZWVwUmVhZG9ubHkgfSBmcm9tIFwiQG5ndXRpbC9jb21tb25cIlxuXG5pbXBvcnQgdHlwZSB7IE1vZGVsLCBNb2RlbFJlZiB9IGZyb20gXCIuLi9tb2RlbFwiXG5pbXBvcnQgdHlwZSB7IERhdGFQcm92aWRlciB9IGZyb20gXCIuLi9wcm92aWRlci9wcm92aWRlclwiXG5pbXBvcnQgdHlwZSB7IEZpbHRlciwgR3JvdXBlciwgUXVlcnksIFNsaWNlLCBTbGltZXIsIFNvcnRlciB9IGZyb20gXCIuLi9xdWVyeVwiXG5pbXBvcnQgeyB0eXBlIENvbGxlY3Rpb25TdG9yZSwgTWVtb3J5U3RvcmUsIHR5cGUgUGFydGlhbENvbGxlY3Rpb24gfSBmcm9tIFwiLi4vc3RvcmVcIlxuaW1wb3J0IHsgRmlsdGVyQ29tYmluZWQsIEdyb3VwZXJDb21iaW5lZCwgU2xpbWVyQ29tYmluZWQsIFNvcnRlckNvbWJpbmVkIH0gZnJvbSBcIi4vcHJvcGVydGllc1wiXG5cbmNvbnN0IERFQk9VTkNFX1RJTUUgPSA1MFxuXG50eXBlIERTUXVlcnk8VCBleHRlbmRzIE1vZGVsPiA9IFF1ZXJ5PFQ+ICYgeyBzbGljZTogRGVlcFJlYWRvbmx5PFNsaWNlPiB9XG5cbmV4cG9ydCBjbGFzcyBEYXRhU291cmNlPFQgZXh0ZW5kcyBNb2RlbD4gZXh0ZW5kcyBDZGtEYXRhU291cmNlPFQgfCB1bmRlZmluZWQ+IGltcGxlbWVudHMgQ29ubmVjdFByb3RvY29sIHtcbiAgICByZWFkb25seSBidXN5JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpXG4gICAgcmVhZG9ubHkgdG90YWwkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXIgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcblxuICAgIHJlYWRvbmx5IGZpbHRlciA9IG5ldyBGaWx0ZXJDb21iaW5lZDxGaWx0ZXI8VD4+KClcbiAgICByZWFkb25seSBzb3J0ZXIgPSBuZXcgU29ydGVyQ29tYmluZWQ8U29ydGVyPFQ+PigpXG4gICAgcmVhZG9ubHkgc2xpbWVyID0gbmV3IFNsaW1lckNvbWJpbmVkPFNsaW1lcjxUPj4oKVxuICAgIHJlYWRvbmx5IGdyb3VwZXIgPSBuZXcgR3JvdXBlckNvbWJpbmVkPEdyb3VwZXI8VD4+KClcblxuICAgIHJlYWRvbmx5ICNxdWVyeUJhc2UgPSBjb21iaW5lTGF0ZXN0KHtcbiAgICAgICAgZmlsdGVyOiB0aGlzLmZpbHRlci5tZXJnZWQkLFxuICAgICAgICBzb3J0ZXI6IHRoaXMuc29ydGVyLm1lcmdlZCQsXG4gICAgICAgIHNsaW1lcjogdGhpcy5zbGltZXIubWVyZ2VkJCxcbiAgICAgICAgZ3JvdXBlcjogdGhpcy5ncm91cGVyLm1lcmdlZCRcbiAgICB9KS5waXBlKHNoYXJlUmVwbGF5KDEpKVxuXG4gICAgcmVhZG9ubHkgI3NsaWNlID0gbmV3IFJlcGxheVN1YmplY3Q8U2xpY2U+KDEpXG4gICAgcmVhZG9ubHkgc2xpY2UkOiBPYnNlcnZhYmxlPFNsaWNlPiA9IHRoaXMuI3NsaWNlLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcChzbGljZSA9PiB0aGlzLnByb3ZpZGVyLmNsYW1wU2xpY2Uoc2xpY2UpKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoaXNFcXVhbCksXG4gICAgICAgIG1hcChzbGljZSA9PiBkZWVwRnJlZXplKGRlZXBDbG9uZShzbGljZSkpKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApXG5cbiAgICByZWFkb25seSAjcmVsb2FkID0gbmV3IFN1YmplY3Q8dm9pZD4oKVxuICAgIHJlYWRvbmx5IHJlc2V0JDogT2JzZXJ2YWJsZTx1bmtub3duPiA9IG1lcmdlKHRoaXMuI3F1ZXJ5QmFzZSwgdGhpcy4jcmVsb2FkKS5waXBlKFxuICAgICAgICB0YXAoKCkgPT4gdGhpcy4jc2V0QnVzeSh0cnVlKSksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLnN0b3JlLmNsZWFyKCkpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgIClcblxuICAgIHJlYWRvbmx5IHF1ZXJ5JDogT2JzZXJ2YWJsZTxEU1F1ZXJ5PFQ+PiA9IGNvbWJpbmVMYXRlc3QoeyBiYXNlOiB0aGlzLiNxdWVyeUJhc2UsIHNsaWNlOiB0aGlzLnNsaWNlJCB9KS5waXBlKFxuICAgICAgICBtYXAoKHsgYmFzZSwgc2xpY2UgfSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgc2xpY2UgfVxuICAgICAgICB9KSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApXG5cbiAgICByZWFkb25seSBpdGVtcyQ6IE9ic2VydmFibGU8UGFydGlhbENvbGxlY3Rpb248VD4+ID0gY29tYmluZUxhdGVzdCh7IHF1ZXJ5OiB0aGlzLnF1ZXJ5JCwgcmVzZXQ6IHRoaXMucmVzZXQkIH0pLnBpcGUoXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLiNzZXRCdXN5KHRydWUpKSxcbiAgICAgICAgZGVib3VuY2VUaW1lKERFQk9VTkNFX1RJTUUpLFxuICAgICAgICBzd2l0Y2hNYXAoKHsgcXVlcnkgfSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmUuaGFzU2xpY2UocXVlcnkuc2xpY2UpLnBpcGUoXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKGhhc1NsaWNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1NsaWNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdG9yZS5nZXRTbGljZShxdWVyeS5zbGljZSlcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3ZpZGVyLnF1ZXJ5TGlzdChxdWVyeSkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2hNYXAocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC50b3RhbCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvdGFsJC5uZXh0KHJlc3VsdC50b3RhbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdG9yZS5pbnNlcnRTbGljZShxdWVyeS5zbGljZSwgcmVzdWx0Lml0ZW1zKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRha2UoMSlcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgIH0pLFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLiNzZXRCdXN5KGZhbHNlKSksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKVxuXG4gICAgcmVhZG9ubHkgc3RvcmU6IENvbGxlY3Rpb25TdG9yZTxUPlxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgcHJvdmlkZXI6IERhdGFQcm92aWRlcjxUPixcbiAgICAgICAgc3RvcmU/OiBDb2xsZWN0aW9uU3RvcmU8VD5cbiAgICApIHtcbiAgICAgICAgc3VwZXIoKVxuICAgICAgICBpZiAoc3RvcmUgPT0gbnVsbCkge1xuICAgICAgICAgICAgc3RvcmUgPSBuZXcgTWVtb3J5U3RvcmUoKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RvcmUgPSBzdG9yZVxuICAgIH1cblxuICAgIHNldFNsaWNlKHNsaWNlOiBTbGljZSkge1xuICAgICAgICB0aGlzLiNzbGljZS5uZXh0KHNsaWNlKVxuICAgICAgICByZXR1cm4gdGhpc1xuICAgIH1cblxuICAgIGFsbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0U2xpY2Uoe3N0YXJ0OiAwLCBlbmQ6IEluZmluaXR5fSlcbiAgICB9XG5cbiAgICByZWFsb2QoKSB7XG4gICAgICAgIHRoaXMuI3JlbG9hZC5uZXh0KClcbiAgICB9XG5cbiAgICBnZXRJdGVtKHJlZjogTW9kZWxSZWYpOiBPYnNlcnZhYmxlPFQgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgcmVmbiA9IHRoaXMucHJvdmlkZXIubWV0YS5ub3JtYWxpemVSZWYocmVmKVxuICAgICAgICByZXR1cm4gdGhpcy4jc3RvcmVGaXJzdChcbiAgICAgICAgICAgIHF1ZXJ5ID0+IHRoaXMuc3RvcmUuZ2V0KHJlZm4pLFxuICAgICAgICAgICAgcXVlcnkgPT4gdGhpcy5wcm92aWRlci5xdWVyeUl0ZW0ocmVmbiwgcXVlcnkpXG4gICAgICAgIClcbiAgICB9XG5cbiAgICBnZXRJdGVtUG9zaXRpb24ocmVmOiBNb2RlbFJlZik6IE9ic2VydmFibGU8bnVtYmVyIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IHJlZm4gPSB0aGlzLnByb3ZpZGVyLm1ldGEubm9ybWFsaXplUmVmKHJlZilcbiAgICAgICAgcmV0dXJuIHRoaXMuI3N0b3JlRmlyc3QoXG4gICAgICAgICAgICBxdWVyeSA9PiB0aGlzLnN0b3JlLmluZGV4T2YocmVmbikucGlwZShtYXAoaSA9PiAoaSA8IDAgPyB1bmRlZmluZWQgOiBpKSkpLFxuICAgICAgICAgICAgcXVlcnkgPT4gdGhpcy5wcm92aWRlci5xdWVyeVBvc2l0aW9uKHJlZm4sIHF1ZXJ5KVxuICAgICAgICApXG4gICAgfVxuXG4gICAgcmVhbG9kSXRlbShyZWY6IE1vZGVsUmVmLCBpbnNlcnRQb3NpdGlvbj86IG51bWJlcik6IE9ic2VydmFibGU8VCB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCByZWZuID0gdGhpcy5wcm92aWRlci5tZXRhLm5vcm1hbGl6ZVJlZihyZWYpXG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXJ5JC5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKHF1ZXJ5ID0+IHRoaXMucHJvdmlkZXIucXVlcnlJdGVtKHJlZm4sIHF1ZXJ5KSksXG4gICAgICAgICAgICBzd2l0Y2hNYXAoaXRlbSA9PlxuICAgICAgICAgICAgICAgIGl0ZW0gIT0gbnVsbCA/IHRoaXMuc3RvcmUudXBkYXRlT3JJbnNlcnQocmVmbiwgaXRlbSwgaW5zZXJ0UG9zaXRpb24pLnBpcGUobWFwKCgpID0+IGl0ZW0pKSA6IG9mKGl0ZW0pXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgdGFrZSgxKVxuICAgICAgICApXG4gICAgfVxuXG4gICAgI3N0b3JlRmlyc3Q8WD4oXG4gICAgICAgIHN0b3JlRm46IChxdWVyeTogUXVlcnk8VD4pID0+IE9ic2VydmFibGU8WD4sXG4gICAgICAgIHNlbGZGbjogKHF1ZXJ5OiBRdWVyeTxUPikgPT4gT2JzZXJ2YWJsZTxYPlxuICAgICk6IE9ic2VydmFibGU8WD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5xdWVyeSQucGlwZShcbiAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICBzd2l0Y2hNYXAocXVlcnkgPT4gc3RvcmVGbihxdWVyeSkucGlwZShzd2l0Y2hNYXAocmVzdWx0ID0+IChyZXN1bHQgPT0gbnVsbCA/IHNlbGZGbihxdWVyeSkgOiBvZihyZXN1bHQpKSkpKVxuICAgICAgICApXG4gICAgfVxuXG4gICAgI3NldEJ1c3koYnVzeTogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5wcm92aWRlci5pc0FzeW5jKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5idXN5JC52YWx1ZSAhPT0gYnVzeSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYnVzeSQubmV4dChidXN5KVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgI2N2U3VicyA9IG5ldyBNYXA8Q29sbGVjdGlvblZpZXdlciwgU3ViamVjdDx2b2lkPj4oKVxuXG4gICAgb3ZlcnJpZGUgY29ubmVjdChjb2xsZWN0aW9uVmlld2VyOiBDb2xsZWN0aW9uVmlld2VyKTogT2JzZXJ2YWJsZTxyZWFkb25seSAoVCB8IHVuZGVmaW5lZClbXT4ge1xuICAgICAgICBjb25zdCB1bnRpbCA9IG5ldyBTdWJqZWN0PHZvaWQ+KClcblxuICAgICAgICB0aGlzLiNjdlN1YnMuZ2V0KGNvbGxlY3Rpb25WaWV3ZXIpPy5uZXh0KClcbiAgICAgICAgdGhpcy4jY3ZTdWJzLnNldChjb2xsZWN0aW9uVmlld2VyLCB1bnRpbClcblxuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKHN1YnNjcmliZXI6IFN1YnNjcmliZXI8cmVhZG9ubHkgKFQgfCB1bmRlZmluZWQpW10+KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdWIxID0gY29sbGVjdGlvblZpZXdlci52aWV3Q2hhbmdlLnN1YnNjcmliZSh0aGlzLiNzbGljZSlcbiAgICAgICAgICAgIGNvbnN0IHN1YjIgPSB0aGlzLml0ZW1zJC5zdWJzY3JpYmUoc3Vic2NyaWJlcilcblxuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy4jY3ZTdWJzLmdldChjb2xsZWN0aW9uVmlld2VyKSA9PT0gdW50aWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jY3ZTdWJzLmRlbGV0ZShjb2xsZWN0aW9uVmlld2VyKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdWIxLnVuc3Vic2NyaWJlKClcbiAgICAgICAgICAgICAgICBzdWIyLnVuc3Vic2NyaWJlKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkucGlwZSh0YWtlVW50aWwodW50aWwpKVxuICAgIH1cblxuICAgIG92ZXJyaWRlIGRpc2Nvbm5lY3QoY29sbGVjdGlvblZpZXdlcjogQ29sbGVjdGlvblZpZXdlcik6IHZvaWQge1xuICAgICAgICB0aGlzLiNjdlN1YnMuZ2V0KGNvbGxlY3Rpb25WaWV3ZXIpPy5uZXh0KClcbiAgICAgICAgdGhpcy4jY3ZTdWJzLmRlbGV0ZShjb2xsZWN0aW9uVmlld2VyKVxuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,3 @@
1
+ export class CollectionStore {
2
+ }
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi1zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RhdGEvc3JjL3N0b3JlL2NvbGxlY3Rpb24tc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBU0EsTUFBTSxPQUFnQixlQUFlO0NBbURwQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiXG5cbmltcG9ydCB7IERlZXBSZWFkb25seSB9IGZyb20gXCJAbmd1dGlsL2NvbW1vblwiXG5cbmltcG9ydCB7IE1vZGVsLCBNb2RlbFJlZk5vcm0gfSBmcm9tIFwiLi4vbW9kZWxcIlxuaW1wb3J0IHsgU2xpY2UgfSBmcm9tIFwiLi4vcXVlcnlcIlxuXG5leHBvcnQgdHlwZSBQYXJ0aWFsQ29sbGVjdGlvbjxUPiA9IHJlYWRvbmx5IChUIHwgdW5kZWZpbmVkKVtdXG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDb2xsZWN0aW9uU3RvcmU8VCBleHRlbmRzIE1vZGVsPiB7XG4gICAgLyoqXG4gICAgICogVXBkYXRlIHRoZSBnaXZlbiBzbGljZSwgYW5kIHJldHVybiBhbGwgaXRlbXMgb2JzZXJ2YWJsZVxuICAgICAqL1xuICAgIGFic3RyYWN0IGluc2VydFNsaWNlKHNsaWNlOiBEZWVwUmVhZG9ubHk8U2xpY2U+LCBpdGVtczogcmVhZG9ubHkgVFtdKTogT2JzZXJ2YWJsZTxQYXJ0aWFsQ29sbGVjdGlvbjxUPj5cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIGB0cnVlYCB3aGVuIHRoZSBnaXZlbiBzbGljZSBpcyBhdmFpbGFibGUgaW4gdGhlIGNhY2hlXG4gICAgICovXG4gICAgYWJzdHJhY3QgaGFzU2xpY2Uoc2xpY2U6IERlZXBSZWFkb25seTxTbGljZT4pOiBPYnNlcnZhYmxlPGJvb2xlYW4+XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyBpdGVtcyBieSB0aGUgZ2l2ZW4gc2xpY2VcbiAgICAgKi9cbiAgICBhYnN0cmFjdCBnZXRTbGljZShzbGljZTogRGVlcFJlYWRvbmx5PFNsaWNlPik6IE9ic2VydmFibGU8UGFydGlhbENvbGxlY3Rpb248VD4+XG5cbiAgICAvKipcbiAgICAgKiBHZXQgaXRlbSBmcm9tIGNvbGxlY3Rpb25cbiAgICAgKi9cbiAgICBhYnN0cmFjdCBnZXQocmVmOiBNb2RlbFJlZk5vcm0pOiBPYnNlcnZhYmxlPFQgfCB1bmRlZmluZWQ+XG5cbiAgICAvKipcbiAgICAgKiBHZXQgaW5kZXggb2YgaXRlbSBpbiBjb2xsZWN0aW9uLCAtMSBpZiBub3QgZm91bmRcbiAgICAgKi9cbiAgICBhYnN0cmFjdCBpbmRleE9mKHJlZjogTW9kZWxSZWZOb3JtKTogT2JzZXJ2YWJsZTxudW1iZXI+XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGUgaXRlbSBpbiBjb2xsZWN0aW9uXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB0aGUgdXBkYXRlZCBpbmRleCwgb3IgLTEgaWYgbm90IGZvdW5kXG4gICAgICovXG4gICAgYWJzdHJhY3QgdXBkYXRlKHJlZjogTW9kZWxSZWZOb3JtLCBpdGVtOiBUKTogT2JzZXJ2YWJsZTxudW1iZXI+XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGUgaXRlbSBpZiBleGlzdHMgaW4gY29sbGVjdGlvbiwgb3IgaW5zZXJ0IGF0IHRoZSBnaXZlbiBwb3NpdGlvblxuICAgICAqXG4gICAgICogQHBhcmFtIHBvc2l0aW9uIElmIHBvc2l0b24gaXMgbmVnYXRpdmUsIGluc2VydCBhdCB0aGUgZW5kIG9mIGNvbGxlY3Rpb25cbiAgICAgKiBAcmV0dXJucyB0aGUgdXBkYXRlZCBpbmRleCBvciBpbmRleCBvZiB3aGVyZSB0byBpbnNlcnRcbiAgICAgKi9cbiAgICBhYnN0cmFjdCB1cGRhdGVPckluc2VydChyZWY6IE1vZGVsUmVmTm9ybSwgaXRlbTogVCwgcG9zaXRpb24/OiBudW1iZXIpOiBPYnNlcnZhYmxlPG51bWJlcj5cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBpdGVtIGZyb20gY29sbGVjdGlvblxuICAgICAqIEByZXR1cm5zIHRoZSBpbmRleCBvZiBkZWxldGVkIGl0ZW0sIC0xIGlmIG5vdCBmb3VuZFxuICAgICAqL1xuICAgIGFic3RyYWN0IGRlbChyZWY6IE1vZGVsUmVmTm9ybSk6IE9ic2VydmFibGU8bnVtYmVyPlxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhbGwgaXRlbXMgZnJvbSBjb2xsZWN0aW9uXG4gICAgICovXG4gICAgYWJzdHJhY3QgY2xlYXIoKTogT2JzZXJ2YWJsZTx2b2lkPlxufVxuIl19
@@ -0,0 +1,3 @@
1
+ export { CollectionStore } from "./collection-store";
2
+ export { MemoryStore } from "./memory-store";
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYXRhL3NyYy9zdG9yZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFxQixNQUFNLG9CQUFvQixDQUFBO0FBQ3ZFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IENvbGxlY3Rpb25TdG9yZSwgUGFydGlhbENvbGxlY3Rpb24gfSBmcm9tIFwiLi9jb2xsZWN0aW9uLXN0b3JlXCJcbmV4cG9ydCB7IE1lbW9yeVN0b3JlIH0gZnJvbSBcIi4vbWVtb3J5LXN0b3JlXCJcbiJdfQ==
@@ -0,0 +1,79 @@
1
+ import { BehaviorSubject, combineLatest, map, of, take } from "rxjs";
2
+ import { sliceApply, sliceClamp, sliceEq, sliceInsert } from "../query";
3
+ import { CollectionStore } from "./collection-store";
4
+ export class MemoryStore extends CollectionStore {
5
+ #data = new BehaviorSubject([]);
6
+ insertSlice(slice, items) {
7
+ this.#data.next(sliceInsert(slice, this.#data.value, items));
8
+ return this.#data;
9
+ }
10
+ hasSlice(slice) {
11
+ return this.#data.pipe(map(data => {
12
+ if (sliceEq(slice, sliceClamp(slice, { start: 0, end: data.length }))) {
13
+ for (let i = slice.start; i < slice.end; i++) {
14
+ if (data[i] == null) {
15
+ return false;
16
+ }
17
+ }
18
+ return true;
19
+ }
20
+ else {
21
+ return false;
22
+ }
23
+ }));
24
+ }
25
+ getSlice(slice) {
26
+ return this.#data.pipe(map(data => sliceApply(slice, data)));
27
+ }
28
+ get(ref) {
29
+ return this.#data.pipe(map(data => data.find(ref.toFilter())));
30
+ }
31
+ indexOf(ref) {
32
+ return this.#data.pipe(map(data => data.findIndex(ref.toFilter())));
33
+ }
34
+ update(ref, item) {
35
+ return combineLatest({
36
+ index: this.indexOf(ref),
37
+ data: this.#data
38
+ }).pipe(take(1), map(({ index, data }) => {
39
+ if (index < 0) {
40
+ return index;
41
+ }
42
+ this.#data.next(sliceInsert({ start: index, end: index + 1 }, data, [item]));
43
+ return index;
44
+ }));
45
+ }
46
+ updateOrInsert(ref, item, position) {
47
+ return combineLatest({
48
+ index: this.indexOf(ref),
49
+ data: this.#data
50
+ }).pipe(take(1), map(({ index, data }) => {
51
+ if (index < 0) {
52
+ index = position == null ? data.length : position < 0 ? data.length : position;
53
+ }
54
+ this.#data.next(sliceInsert({ start: index, end: index + 1 }, data, [item]));
55
+ return index;
56
+ }));
57
+ }
58
+ del(ref) {
59
+ return combineLatest({
60
+ index: this.indexOf(ref),
61
+ data: this.#data
62
+ }).pipe(take(1), map(({ index, data }) => {
63
+ if (index < 0) {
64
+ return index;
65
+ }
66
+ const result = data.slice(0);
67
+ result.splice(index, 1);
68
+ this.#data.next(result);
69
+ return index;
70
+ }));
71
+ }
72
+ clear() {
73
+ if (this.#data.value.length > 0) {
74
+ this.#data.next([]);
75
+ }
76
+ return of(undefined);
77
+ }
78
+ }
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5LXN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGF0YS9zcmMvc3RvcmUvbWVtb3J5LXN0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBR2hGLE9BQU8sRUFBUyxVQUFVLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFDOUUsT0FBTyxFQUFFLGVBQWUsRUFBcUIsTUFBTSxvQkFBb0IsQ0FBQTtBQUV2RSxNQUFNLE9BQU8sV0FBNkIsU0FBUSxlQUFrQjtJQUN2RCxLQUFLLEdBQUcsSUFBSSxlQUFlLENBQXVCLEVBQUUsQ0FBQyxDQUFBO0lBRXJELFdBQVcsQ0FBQyxLQUFZLEVBQUUsS0FBbUI7UUFDbEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFBO1FBQzVELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQTtJQUNyQixDQUFDO0lBRVEsUUFBUSxDQUFDLEtBQVk7UUFDMUIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FDbEIsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ1AsSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BFLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUs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Q0FBQyxDQUNMLENBQUE7SUFDTCxDQUFDO0lBRVEsR0FBRyxDQUFDLEdBQWlCO1FBQzFCLE9BQU8sYUFBYSxDQUFDO1lBQ2pCLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUN4QixJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUs7U0FDbkIsQ0FBQyxDQUFDLElBQUksQ0FDSCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRTtZQUNwQixJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDWixPQUFPLEtBQUssQ0FBQTtZQUNoQixDQUFDO1lBQ0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUM1QixNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQTtZQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUN2QixPQUFPLEtBQUssQ0FBQTtRQUNoQixDQUFDLENBQUMsQ0FDTCxDQUFBO0lBQ0wsQ0FBQztJQUVRLEtBQUs7UUFDVixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUN2QixDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUE7SUFDeEIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBtYXAsIE9ic2VydmFibGUsIG9mLCB0YWtlIH0gZnJvbSBcInJ4anNcIlxuXG5pbXBvcnQgeyBNb2RlbCwgTW9kZWxSZWZOb3JtIH0gZnJvbSBcIi4uL21vZGVsXCJcbmltcG9ydCB7IFNsaWNlLCBzbGljZUFwcGx5LCBzbGljZUNsYW1wLCBzbGljZUVxLCBzbGljZUluc2VydCB9IGZyb20gXCIuLi9xdWVyeVwiXG5pbXBvcnQgeyBDb2xsZWN0aW9uU3RvcmUsIFBhcnRpYWxDb2xsZWN0aW9uIH0gZnJvbSBcIi4vY29sbGVjdGlvbi1zdG9yZVwiXG5cbmV4cG9ydCBjbGFzcyBNZW1vcnlTdG9yZTxUIGV4dGVuZHMgTW9kZWw+IGV4dGVuZHMgQ29sbGVjdGlvblN0b3JlPFQ+IHtcbiAgICByZWFkb25seSAjZGF0YSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UGFydGlhbENvbGxlY3Rpb248VD4+KFtdKVxuXG4gICAgb3ZlcnJpZGUgaW5zZXJ0U2xpY2Uoc2xpY2U6IFNsaWNlLCBpdGVtczogcmVhZG9ubHkgVFtdKTogT2JzZXJ2YWJsZTxQYXJ0aWFsQ29sbGVjdGlvbjxUPj4ge1xuICAgICAgICB0aGlzLiNkYXRhLm5leHQoc2xpY2VJbnNlcnQoc2xpY2UsIHRoaXMuI2RhdGEudmFsdWUsIGl0ZW1zKSlcbiAgICAgICAgcmV0dXJuIHRoaXMuI2RhdGFcbiAgICB9XG5cbiAgICBvdmVycmlkZSBoYXNTbGljZShzbGljZTogU2xpY2UpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2RhdGEucGlwZShcbiAgICAgICAgICAgIG1hcChkYXRhID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoc2xpY2VFcShzbGljZSwgc2xpY2VDbGFtcChzbGljZSwgeyBzdGFydDogMCwgZW5kOiBkYXRhLmxlbmd0aCB9KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IHNsaWNlLnN0YXJ0OyBpIDwgc2xpY2UuZW5kOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhW2ldID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICB9XG5cbiAgICBvdmVycmlkZSBnZXRTbGljZShzbGljZTogU2xpY2UpOiBPYnNlcnZhYmxlPFBhcnRpYWxDb2xsZWN0aW9uPFQ+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLiNkYXRhLnBpcGUobWFwKGRhdGEgPT4gc2xpY2VBcHBseShzbGljZSwgZGF0YSkpKVxuICAgIH1cblxuICAgIG92ZXJyaWRlIGdldChyZWY6IE1vZGVsUmVmTm9ybSk6IE9ic2VydmFibGU8VCB8IHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy4jZGF0YS5waXBlKG1hcChkYXRhID0+IGRhdGEuZmluZChyZWYudG9GaWx0ZXIoKSkpKVxuICAgIH1cblxuICAgIG92ZXJyaWRlIGluZGV4T2YocmVmOiBNb2RlbFJlZk5vcm0pOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICAgICAgICByZXR1cm4gdGhpcy4jZGF0YS5waXBlKG1hcChkYXRhID0+IGRhdGEuZmluZEluZGV4KHJlZi50b0ZpbHRlcigpKSkpXG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgdXBkYXRlKHJlZjogTW9kZWxSZWZOb3JtLCBpdGVtOiBUKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3Qoe1xuICAgICAgICAgICAgaW5kZXg6IHRoaXMuaW5kZXhPZihyZWYpLFxuICAgICAgICAgICAgZGF0YTogdGhpcy4jZGF0YVxuICAgICAgICB9KS5waXBlKFxuICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgIG1hcCgoeyBpbmRleCwgZGF0YSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXhcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy4jZGF0YS5uZXh0KHNsaWNlSW5zZXJ0KHsgc3RhcnQ6IGluZGV4LCBlbmQ6IGluZGV4ICsgMSB9LCBkYXRhLCBbaXRlbV0pKVxuICAgICAgICAgICAgICAgIHJldHVybiBpbmRleFxuICAgICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgIH1cblxuICAgIG92ZXJyaWRlIHVwZGF0ZU9ySW5zZXJ0KHJlZjogTW9kZWxSZWZOb3JtLCBpdGVtOiBULCBwb3NpdGlvbj86IG51bWJlcik6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KHtcbiAgICAgICAgICAgIGluZGV4OiB0aGlzLmluZGV4T2YocmVmKSxcbiAgICAgICAgICAgIGRhdGE6IHRoaXMuI2RhdGFcbiAgICAgICAgfSkucGlwZShcbiAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICBtYXAoKHsgaW5kZXgsIGRhdGEgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBwb3NpdGlvbiA9PSBudWxsID8gZGF0YS5sZW5ndGggOiBwb3NpdGlvbiA8IDAgPyBkYXRhLmxlbmd0aCA6IHBvc2l0aW9uXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuI2RhdGEubmV4dChzbGljZUluc2VydCh7IHN0YXJ0OiBpbmRleCwgZW5kOiBpbmRleCArIDEgfSwgZGF0YSwgW2l0ZW1dKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXhcbiAgICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICB9XG5cbiAgICBvdmVycmlkZSBkZWwocmVmOiBNb2RlbFJlZk5vcm0pOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICAgICAgICByZXR1cm4gY29tYmluZUxhdGVzdCh7XG4gICAgICAgICAgICBpbmRleDogdGhpcy5pbmRleE9mKHJlZiksXG4gICAgICAgICAgICBkYXRhOiB0aGlzLiNkYXRhXG4gICAgICAgIH0pLnBpcGUoXG4gICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgbWFwKCh7IGluZGV4LCBkYXRhIH0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBkYXRhLnNsaWNlKDApXG4gICAgICAgICAgICAgICAgcmVzdWx0LnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgICAgICAgICB0aGlzLiNkYXRhLm5leHQocmVzdWx0KVxuICAgICAgICAgICAgICAgIHJldHVybiBpbmRleFxuICAgICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgIH1cblxuICAgIG92ZXJyaWRlIGNsZWFyKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy4jZGF0YS52YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLiNkYXRhLm5leHQoW10pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZClcbiAgICB9XG59XG4iXX0=