@ngutil/data 0.0.81 → 0.0.82
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/ngutil-data.mjs +25 -31
- package/fesm2022/ngutil-data.mjs.map +1 -1
- package/package.json +6 -8
- package/esm2022/index.mjs +0 -45
- package/esm2022/model/index.mjs +0 -2
- package/esm2022/model/meta.mjs +0 -125
- package/esm2022/ngutil-data.mjs +0 -5
- package/esm2022/provider/array.mjs +0 -9
- package/esm2022/provider/index.mjs +0 -5
- package/esm2022/provider/local.mjs +0 -30
- package/esm2022/provider/observable.mjs +0 -11
- package/esm2022/provider/provider.mjs +0 -26
- package/esm2022/query/common.mjs +0 -33
- package/esm2022/query/executor.mjs +0 -78
- package/esm2022/query/filter.mjs +0 -313
- package/esm2022/query/grouper.mjs +0 -85
- package/esm2022/query/index.mjs +0 -9
- package/esm2022/query/path.mjs +0 -18
- package/esm2022/query/query-property.mjs +0 -56
- package/esm2022/query/query.mjs +0 -19
- package/esm2022/query/slice.mjs +0 -64
- package/esm2022/query/slimer.mjs +0 -24
- package/esm2022/query/sorter.mjs +0 -215
- package/esm2022/source/index.mjs +0 -3
- package/esm2022/source/proxy.directive.mjs +0 -197
- package/esm2022/source/source.mjs +0 -121
- package/esm2022/store/collection-store.mjs +0 -3
- package/esm2022/store/index.mjs +0 -3
- package/esm2022/store/memory-store.mjs +0 -79
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
import { DataSource as CdkDataSource } from "@angular/cdk/collections";
|
|
2
|
-
import { BehaviorSubject, catchError, combineLatest, distinctUntilChanged, filter, map, merge, Observable, of, ReplaySubject, shareReplay, Subject, switchMap, take, takeUntil, tap, timer } from "rxjs";
|
|
3
|
-
import { isEqual } from "lodash-es";
|
|
4
|
-
import { deepClone, deepFreeze, isFalsy } from "@ngutil/common";
|
|
5
|
-
import { querySubject } from "../query";
|
|
6
|
-
import { MemoryStore } from "../store";
|
|
7
|
-
const DEBOUNCE_TIME = 50;
|
|
8
|
-
export class DataSource extends CdkDataSource {
|
|
9
|
-
#slice;
|
|
10
|
-
#reload;
|
|
11
|
-
#query;
|
|
12
|
-
constructor(provider, store = new MemoryStore(), query$ = querySubject("normal", "forced")) {
|
|
13
|
-
super();
|
|
14
|
-
this.provider = provider;
|
|
15
|
-
this.store = store;
|
|
16
|
-
this.query$ = query$;
|
|
17
|
-
this.isBusy$ = new BehaviorSubject(false);
|
|
18
|
-
this.total$ = new BehaviorSubject(undefined);
|
|
19
|
-
this.#slice = new ReplaySubject(1);
|
|
20
|
-
this.slice$ = this.#slice.pipe(switchMap(slice => this.provider.clampSlice(slice)), distinctUntilChanged(isEqual), map(slice => deepFreeze(deepClone(slice))), shareReplay({ bufferSize: 1, refCount: true }));
|
|
21
|
-
this.#reload = new BehaviorSubject(undefined);
|
|
22
|
-
this.#query = combineLatest({
|
|
23
|
-
query: this.query$,
|
|
24
|
-
reload: merge(this.#reload, this.provider.changed$)
|
|
25
|
-
}).pipe(
|
|
26
|
-
// tap(() => this.#setBusy(true)),
|
|
27
|
-
// TODO: maybe silent reset or prevent items$ chenges
|
|
28
|
-
// TODO: alternative solution use cacheId, and query item from store with this cacheId
|
|
29
|
-
switchMap(({ query }) => this.store.clear().pipe(map(() => query))), switchMap(query => this.slice$.pipe(map(slice => {
|
|
30
|
-
// this.#setBusy(true)
|
|
31
|
-
return { ...query, slice };
|
|
32
|
-
}))), shareReplay({ bufferSize: 1, refCount: true }));
|
|
33
|
-
this.items$ = this.#query.pipe(switchMap(v => (this.provider.isAsync ? timer(DEBOUNCE_TIME).pipe(map(() => v)) : of(v))), switchMap(query => this.store.hasSlice(query.slice).pipe(take(1), switchMap(hasSlice => {
|
|
34
|
-
if (hasSlice) {
|
|
35
|
-
return this.store.getSlice(query.slice).pipe(take(1));
|
|
36
|
-
}
|
|
37
|
-
else {
|
|
38
|
-
this.#setBusy(true);
|
|
39
|
-
return this.provider.queryList(query).pipe(take(1), catchError(() => {
|
|
40
|
-
this.#setBusy(false);
|
|
41
|
-
return of({ items: [], total: undefined });
|
|
42
|
-
}), tap(() => this.#setBusy(false)), switchMap(result => {
|
|
43
|
-
if (result.total != null) {
|
|
44
|
-
this.total$.next(result.total);
|
|
45
|
-
}
|
|
46
|
-
return this.store.insertSlice(query.slice, result.items);
|
|
47
|
-
}), take(1));
|
|
48
|
-
}
|
|
49
|
-
}))), shareReplay({ bufferSize: 1, refCount: true }));
|
|
50
|
-
this.isEmpty$ = combineLatest({ busy: this.isBusy$, items: this.items$ }).pipe(filter(({ busy }) => !busy), map(({ items }) => items.every(isFalsy)), shareReplay({ bufferSize: 1, refCount: true }));
|
|
51
|
-
this.#cvSubs = new Map();
|
|
52
|
-
}
|
|
53
|
-
setSlice(slice) {
|
|
54
|
-
this.#slice.next(slice);
|
|
55
|
-
return this;
|
|
56
|
-
}
|
|
57
|
-
all() {
|
|
58
|
-
return this.setSlice({ start: 0, end: Infinity });
|
|
59
|
-
}
|
|
60
|
-
reload() {
|
|
61
|
-
this.#reload.next();
|
|
62
|
-
}
|
|
63
|
-
getItem(ref) {
|
|
64
|
-
const refn = this.provider.meta.normalizeRef(ref);
|
|
65
|
-
return this.store.get(refn).pipe(take(1), switchMap(result => {
|
|
66
|
-
if (result == null) {
|
|
67
|
-
return this.provider.queryItem(refn).pipe(take(1));
|
|
68
|
-
}
|
|
69
|
-
return of(result);
|
|
70
|
-
}));
|
|
71
|
-
}
|
|
72
|
-
watchItem(ref) {
|
|
73
|
-
const refn = this.provider.meta.normalizeRef(ref);
|
|
74
|
-
return this.#storeFirst(query => this.store.get(refn), query => this.provider.queryItem(refn, query));
|
|
75
|
-
}
|
|
76
|
-
getItemPosition(ref) {
|
|
77
|
-
return this.watchItemPosition(ref).pipe(take(1));
|
|
78
|
-
}
|
|
79
|
-
watchItemPosition(ref) {
|
|
80
|
-
const refn = this.provider.meta.normalizeRef(ref);
|
|
81
|
-
return this.#storeFirst(query => this.store.indexOf(refn).pipe(map(i => (i < 0 ? undefined : i))), query => this.provider.queryPosition(refn, query));
|
|
82
|
-
}
|
|
83
|
-
realodItem(ref, insertPosition) {
|
|
84
|
-
const refn = this.provider.meta.normalizeRef(ref);
|
|
85
|
-
return this.#query.pipe(take(1), switchMap(query => this.provider.queryItem(refn, query).pipe(take(1))), switchMap(item => item != null ? this.store.updateOrInsert(refn, item, insertPosition).pipe(map(() => item)) : of(item)));
|
|
86
|
-
}
|
|
87
|
-
#storeFirst(storeFn, selfFn) {
|
|
88
|
-
return this.#query.pipe(take(1), switchMap(query => storeFn(query).pipe(switchMap(result => (result == null ? selfFn(query) : of(result))))));
|
|
89
|
-
}
|
|
90
|
-
#setBusy(busy) {
|
|
91
|
-
if (this.isBusy$.value !== busy) {
|
|
92
|
-
// dont set true when not async provider, but false is also set
|
|
93
|
-
if (busy && !this.provider.isAsync) {
|
|
94
|
-
return;
|
|
95
|
-
}
|
|
96
|
-
this.isBusy$.next(busy);
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
#cvSubs;
|
|
100
|
-
connect(collectionViewer) {
|
|
101
|
-
const until = new Subject();
|
|
102
|
-
this.#cvSubs.get(collectionViewer)?.next();
|
|
103
|
-
this.#cvSubs.set(collectionViewer, until);
|
|
104
|
-
return new Observable((subscriber) => {
|
|
105
|
-
const sub1 = collectionViewer.viewChange.subscribe(this.#slice);
|
|
106
|
-
const sub2 = this.items$.subscribe(subscriber);
|
|
107
|
-
return () => {
|
|
108
|
-
if (this.#cvSubs.get(collectionViewer) === until) {
|
|
109
|
-
this.#cvSubs.delete(collectionViewer);
|
|
110
|
-
}
|
|
111
|
-
sub1.unsubscribe();
|
|
112
|
-
sub2.unsubscribe();
|
|
113
|
-
};
|
|
114
|
-
}).pipe(takeUntil(until));
|
|
115
|
-
}
|
|
116
|
-
disconnect(collectionViewer) {
|
|
117
|
-
this.#cvSubs.get(collectionViewer)?.next();
|
|
118
|
-
this.#cvSubs.delete(collectionViewer);
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGF0YS9zcmMvc291cmNlL3NvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxJQUFJLGFBQWEsRUFBb0IsTUFBTSwwQkFBMEIsQ0FBQTtBQUV4RixPQUFPLEVBQ0gsZUFBZSxFQUNmLFVBQVUsRUFDVixhQUFhLEVBQ2Isb0JBQW9CLEVBQ3BCLE1BQU0sRUFDTixHQUFHLEVBQ0gsS0FBSyxFQUNMLFVBQVUsRUFDVixFQUFFLEVBQ0YsYUFBYSxFQUNiLFdBQVcsRUFDWCxPQUFPLEVBRVAsU0FBUyxFQUNULElBQUksRUFDSixTQUFTLEVBQ1QsR0FBRyxFQUNILEtBQUssRUFDUixNQUFNLE1BQU0sQ0FBQTtBQUViLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFFbkMsT0FBTyxFQUFtQixTQUFTLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBS2hGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFDdkMsT0FBTyxFQUF3QixXQUFXLEVBQTBCLE1BQU0sVUFBVSxDQUFBO0FBRXBGLE1BQU0sYUFBYSxHQUFHLEVBQUUsQ0FBQTtBQUV4QixNQUFNLE9BQU8sVUFBNEIsU0FBUSxhQUE0QjtJQUloRSxNQUFNLENBQThCO0lBUXBDLE9BQU8sQ0FBdUM7SUFFOUMsTUFBTSxDQWlCZDtJQXdDRCxZQUNvQixRQUF5QixFQUN6QixRQUE0QixJQUFJLFdBQVcsRUFBRSxFQUM3QyxTQUFTLFlBQVksQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDO1FBRXpELEtBQUssRUFBRSxDQUFBO1FBSlMsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDekIsVUFBSyxHQUFMLEtBQUssQ0FBd0M7UUFDN0MsV0FBTSxHQUFOLE1BQU0sQ0FBbUM7UUF6RXBELFlBQU8sR0FBRyxJ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Qy9DLE1BQU0sS0FBSyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUE7UUFFakMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQTtRQUMxQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUV6QyxPQUFPLElBQUksVUFBVSxDQUFDLENBQUMsVUFBa0QsRUFBRSxFQUFFO1lBQ3pFLE1BQU0sSUFBSSxHQUFHLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQy9ELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFBO1lBRTlDLE9BQU8sR0FBRyxFQUFFO2dCQUNSLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQztvQkFDL0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtnQkFDekMsQ0FBQztnQkFDRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUE7Z0JBQ2xCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQTtZQUN0QixDQUFDLENBQUE7UUFDTCxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7SUFDN0IsQ0FBQztJQUVRLFVBQVUsQ0FBQyxnQkFBa0M7UUFDbEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQTtRQUMxQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO0lBQ3pDLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGFTb3VyY2UgYXMgQ2RrRGF0YVNvdXJjZSwgQ29sbGVjdGlvblZpZXdlciB9IGZyb20gXCJAYW5ndWxhci9jZGsvY29sbGVjdGlvbnNcIlxuXG5pbXBvcnQge1xuICAgIEJlaGF2aW9yU3ViamVjdCxcbiAgICBjYXRjaEVycm9yLFxuICAgIGNvbWJpbmVMYXRlc3QsXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gICAgZmlsdGVyLFxuICAgIG1hcCxcbiAgICBtZXJnZSxcbiAgICBPYnNlcnZhYmxlLFxuICAgIG9mLFxuICAgIFJlcGxheVN1YmplY3QsXG4gICAgc2hhcmVSZXBsYXksXG4gICAgU3ViamVjdCxcbiAgICBTdWJzY3JpYmVyLFxuICAgIHN3aXRjaE1hcCxcbiAgICB0YWtlLFxuICAgIHRha2VVbnRpbCxcbiAgICB0YXAsXG4gICAgdGltZXJcbn0gZnJvbSBcInJ4anNcIlxuXG5pbXBvcnQgeyBpc0VxdWFsIH0gZnJvbSBcImxvZGFzaC1lc1wiXG5cbmltcG9ydCB7IENvbm5lY3RQcm90b2NvbCwgZGVlcENsb25lLCBkZWVwRnJlZXplLCBpc0ZhbHN5IH0gZnJvbSBcIkBuZ3V0aWwvY29tbW9uXCJcblxuaW1wb3J0IHR5cGUgeyBNb2RlbCwgTW9kZWxSZWYgfSBmcm9tIFwiLi4vbW9kZWxcIlxuaW1wb3J0IHR5cGUgeyBEYXRhUHJvdmlkZXIgfSBmcm9tIFwiLi4vcHJvdmlkZXIvcHJvdmlkZXJcIlxuaW1wb3J0IHR5cGUgeyBRdWVyeVJlc3VsdCwgUXVlcnlXaXRoU2xpY2UsIFNsaWNlIH0gZnJvbSBcIi4uL3F1ZXJ5XCJcbmltcG9ydCB7IHF1ZXJ5U3ViamVjdCB9IGZyb20gXCIuLi9xdWVyeVwiXG5pbXBvcnQgeyB0eXBlIENvbGxlY3Rpb25TdG9yZSwgTWVtb3J5U3RvcmUsIHR5cGUgUGFydGlhbENvbGxlY3Rpb24gfSBmcm9tIFwiLi4vc3RvcmVcIlxuXG5jb25zdCBERUJPVU5DRV9USU1FID0gNTBcblxuZXhwb3J0IGNsYXNzIERhdGFTb3VyY2U8VCBleHRlbmRzIE1vZGVsPiBleHRlbmRzIENka0RhdGFTb3VyY2U8VCB8IHVuZGVmaW5lZD4gaW1wbGVtZW50cyBDb25uZWN0UHJvdG9jb2wge1xuICAgIHJlYWRvbmx5IGlzQnVzeSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKVxuICAgIHJlYWRvbmx5IHRvdGFsJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG5cbiAgICByZWFkb25seSAjc2xpY2UgPSBuZXcgUmVwbGF5U3ViamVjdDxTbGljZT4oMSlcbiAgICByZWFkb25seSBzbGljZSQ6IE9ic2VydmFibGU8U2xpY2U+ID0gdGhpcy4jc2xpY2UucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKHNsaWNlID0+IHRoaXMucHJvdmlkZXIuY2xhbXBTbGljZShzbGljZSkpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc0VxdWFsKSxcbiAgICAgICAgbWFwKHNsaWNlID0+IGRlZXBGcmVlemUoZGVlcENsb25lKHNsaWNlKSkpLFxuICAgICAgICBzaGFyZVJlcGxheSh7IGJ1ZmZlclNpemU6IDEsIHJlZkNvdW50OiB0cnVlIH0pXG4gICAgKVxuXG4gICAgcmVhZG9ubHkgI3JlbG9hZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8dm9pZD4odW5kZWZpbmVkKVxuXG4gICAgcmVhZG9ubHkgI3F1ZXJ5OiBPYnNlcnZhYmxlPFF1ZXJ5V2l0aFNsaWNlPFQ+PiA9IGNvbWJpbmVMYXRlc3Qoe1xuICAgICAgICBxdWVyeTogdGhpcy5xdWVyeSQsXG4gICAgICAgIHJlbG9hZDogbWVyZ2UodGhpcy4jcmVsb2FkLCB0aGlzLnByb3ZpZGVyLmNoYW5nZWQkKVxuICAgIH0pLnBpcGUoXG4gICAgICAgIC8vIHRhcCgoKSA9PiB0aGlzLiNzZXRCdXN5KHRydWUpKSxcbiAgICAgICAgLy8gVE9ETzogbWF5YmUgc2lsZW50IHJlc2V0IG9yIHByZXZlbnQgaXRlbXMkIGNoZW5nZXNcbiAgICAgICAgLy8gVE9ETzogYWx0ZXJuYXRpdmUgc29sdXRpb24gdXNlIGNhY2hlSWQsIGFuZCBxdWVyeSBpdGVtIGZyb20gc3RvcmUgd2l0aCB0aGlzIGNhY2hlSWRcbiAgICAgICAgc3dpdGNoTWFwKCh7IHF1ZXJ5IH0pID0+IHRoaXMuc3RvcmUuY2xlYXIoKS5waXBlKG1hcCgoKSA9PiBxdWVyeSkpKSxcbiAgICAgICAgc3dpdGNoTWFwKHF1ZXJ5ID0+XG4gICAgICAgICAgICB0aGlzLnNsaWNlJC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcChzbGljZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuI3NldEJ1c3kodHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4ucXVlcnksIHNsaWNlIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICApLFxuICAgICAgICBzaGFyZVJlcGxheSh7IGJ1ZmZlclNpemU6IDEsIHJlZkNvdW50OiB0cnVlIH0pXG4gICAgKVxuXG4gICAgcmVhZG9ubHkgaXRlbXMkOiBPYnNlcnZhYmxlPFBhcnRpYWxDb2xsZWN0aW9uPFQ+PiA9IHRoaXMuI3F1ZXJ5LnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCh2ID0+ICh0aGlzLnByb3ZpZGVyLmlzQXN5bmMgPyB0aW1lcihERUJPVU5DRV9USU1FKS5waXBlKG1hcCgoKSA9PiB2KSkgOiBvZih2KSkpLFxuICAgICAgICBzd2l0Y2hNYXAocXVlcnkgPT5cbiAgICAgICAgICAgIHRoaXMuc3RvcmUuaGFzU2xpY2UocXVlcnkuc2xpY2UpLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoaGFzU2xpY2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzU2xpY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN0b3JlLmdldFNsaWNlKHF1ZXJ5LnNsaWNlKS5waXBlKHRha2UoMSkpXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiNzZXRCdXN5KHRydWUpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm92aWRlci5xdWVyeUxpc3QocXVlcnkpLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jc2V0QnVzeShmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKHsgaXRlbXM6IFtdLCB0b3RhbDogdW5kZWZpbmVkIH0gc2F0aXNmaWVzIFF1ZXJ5UmVzdWx0PFQ+KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB0aGlzLiNzZXRCdXN5KGZhbHNlKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoTWFwKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQudG90YWwgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b3RhbCQubmV4dChyZXN1bHQudG90YWwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmUuaW5zZXJ0U2xpY2UocXVlcnkuc2xpY2UsIHJlc3VsdC5pdGVtcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWtlKDEpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICApLFxuICAgICAgICBzaGFyZVJlcGxheSh7IGJ1ZmZlclNpemU6IDEsIHJlZkNvdW50OiB0cnVlIH0pXG4gICAgKVxuXG4gICAgcmVhZG9ubHkgaXNFbXB0eSQgPSBjb21iaW5lTGF0ZXN0KHsgYnVzeTogdGhpcy5pc0J1c3kkLCBpdGVtczogdGhpcy5pdGVtcyQgfSkucGlwZShcbiAgICAgICAgZmlsdGVyKCh7IGJ1c3kgfSkgPT4gIWJ1c3kpLFxuICAgICAgICBtYXAoKHsgaXRlbXMgfSkgPT4gaXRlbXMuZXZlcnkoaXNGYWxzeSkpLFxuICAgICAgICBzaGFyZVJlcGxheSh7IGJ1ZmZlclNpemU6IDEsIHJlZkNvdW50OiB0cnVlIH0pXG4gICAgKVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBwcm92aWRlcjogRGF0YVByb3ZpZGVyPFQ+LFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgc3RvcmU6IENvbGxlY3Rpb25TdG9yZTxUPiA9IG5ldyBNZW1vcnlTdG9yZSgpLFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgcXVlcnkkID0gcXVlcnlTdWJqZWN0KFwibm9ybWFsXCIsIFwiZm9yY2VkXCIpXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKClcbiAgICB9XG5cbiAgICBzZXRTbGljZShzbGljZTogU2xpY2UpIHtcbiAgICAgICAgdGhpcy4jc2xpY2UubmV4dChzbGljZSlcbiAgICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG5cbiAgICBhbGwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNldFNsaWNlKHsgc3RhcnQ6IDAsIGVuZDogSW5maW5pdHkgfSlcbiAgICB9XG5cbiAgICByZWxvYWQoKSB7XG4gICAgICAgIHRoaXMuI3JlbG9hZC5uZXh0KClcbiAgICB9XG5cbiAgICBnZXRJdGVtKHJlZjogTW9kZWxSZWYpOiBPYnNlcnZhYmxlPFQgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgcmVmbiA9IHRoaXMucHJvdmlkZXIubWV0YS5ub3JtYWxpemVSZWYocmVmKVxuICAgICAgICByZXR1cm4gdGhpcy5zdG9yZS5nZXQocmVmbikucGlwZShcbiAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICBzd2l0Y2hNYXAocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvdmlkZXIucXVlcnlJdGVtKHJlZm4pLnBpcGUodGFrZSgxKSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKHJlc3VsdClcbiAgICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICB9XG5cbiAgICB3YXRjaEl0ZW0ocmVmOiBNb2RlbFJlZik6IE9ic2VydmFibGU8VCB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCByZWZuID0gdGhpcy5wcm92aWRlci5tZXRhLm5vcm1hbGl6ZVJlZihyZWYpXG4gICAgICAgIHJldHVybiB0aGlzLiNzdG9yZUZpcnN0KFxuICAgICAgICAgICAgcXVlcnkgPT4gdGhpcy5zdG9yZS5nZXQocmVmbiksXG4gICAgICAgICAgICBxdWVyeSA9PiB0aGlzLnByb3ZpZGVyLnF1ZXJ5SXRlbShyZWZuLCBxdWVyeSlcbiAgICAgICAgKVxuICAgIH1cblxuICAgIGdldEl0ZW1Qb3NpdGlvbihyZWY6IE1vZGVsUmVmKTogT2JzZXJ2YWJsZTxudW1iZXIgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2F0Y2hJdGVtUG9zaXRpb24ocmVmKS5waXBlKHRha2UoMSkpXG4gICAgfVxuXG4gICAgd2F0Y2hJdGVtUG9zaXRpb24ocmVmOiBNb2RlbFJlZik6IE9ic2VydmFibGU8bnVtYmVyIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IHJlZm4gPSB0aGlzLnByb3ZpZGVyLm1ldGEubm9ybWFsaXplUmVmKHJlZilcbiAgICAgICAgcmV0dXJuIHRoaXMuI3N0b3JlRmlyc3QoXG4gICAgICAgICAgICBxdWVyeSA9PiB0aGlzLnN0b3JlLmluZGV4T2YocmVmbikucGlwZShtYXAoaSA9PiAoaSA8IDAgPyB1bmRlZmluZWQgOiBpKSkpLFxuICAgICAgICAgICAgcXVlcnkgPT4gdGhpcy5wcm92aWRlci5xdWVyeVBvc2l0aW9uKHJlZm4sIHF1ZXJ5KVxuICAgICAgICApXG4gICAgfVxuXG4gICAgcmVhbG9kSXRlbShyZWY6IE1vZGVsUmVmLCBpbnNlcnRQb3NpdGlvbj86IG51bWJlcik6IE9ic2VydmFibGU8VCB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCByZWZuID0gdGhpcy5wcm92aWRlci5tZXRhLm5vcm1hbGl6ZVJlZihyZWYpXG4gICAgICAgIHJldHVybiB0aGlzLiNxdWVyeS5waXBlKFxuICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgIHN3aXRjaE1hcChxdWVyeSA9PiB0aGlzLnByb3ZpZGVyLnF1ZXJ5SXRlbShyZWZuLCBxdWVyeSkucGlwZSh0YWtlKDEpKSksXG4gICAgICAgICAgICBzd2l0Y2hNYXAoaXRlbSA9PlxuICAgICAgICAgICAgICAgIGl0ZW0gIT0gbnVsbCA/IHRoaXMuc3RvcmUudXBkYXRlT3JJbnNlcnQocmVmbiwgaXRlbSwgaW5zZXJ0UG9zaXRpb24pLnBpcGUobWFwKCgpID0+IGl0ZW0pKSA6IG9mKGl0ZW0pXG4gICAgICAgICAgICApXG4gICAgICAgIClcbiAgICB9XG5cbiAgICAjc3RvcmVGaXJzdDxYPihcbiAgICAgICAgc3RvcmVGbjogKHF1ZXJ5OiBRdWVyeVdpdGhTbGljZTxUPikgPT4gT2JzZXJ2YWJsZTxYPixcbiAgICAgICAgc2VsZkZuOiAocXVlcnk6IFF1ZXJ5V2l0aFNsaWNlPFQ+KSA9PiBPYnNlcnZhYmxlPFg+XG4gICAgKTogT2JzZXJ2YWJsZTxYPiB7XG4gICAgICAgIHJldHVybiB0aGlzLiNxdWVyeS5waXBlKFxuICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgIHN3aXRjaE1hcChxdWVyeSA9PiBzdG9yZUZuKHF1ZXJ5KS5waXBlKHN3aXRjaE1hcChyZXN1bHQgPT4gKHJlc3VsdCA9PSBudWxsID8gc2VsZkZuKHF1ZXJ5KSA6IG9mKHJlc3VsdCkpKSkpXG4gICAgICAgIClcbiAgICB9XG5cbiAgICAjc2V0QnVzeShidXN5OiBib29sZWFuKSB7XG4gICAgICAgIGlmICh0aGlzLmlzQnVzeSQudmFsdWUgIT09IGJ1c3kpIHtcbiAgICAgICAgICAgIC8vIGRvbnQgc2V0IHRydWUgd2hlbiBub3QgYXN5bmMgcHJvdmlkZXIsIGJ1dCBmYWxzZSBpcyBhbHNvIHNldFxuICAgICAgICAgICAgaWYgKGJ1c3kgJiYgIXRoaXMucHJvdmlkZXIuaXNBc3luYykge1xuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5pc0J1c3kkLm5leHQoYnVzeSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgICNjdlN1YnMgPSBuZXcgTWFwPENvbGxlY3Rpb25WaWV3ZXIsIFN1YmplY3Q8dm9pZD4+KClcblxuICAgIG92ZXJyaWRlIGNvbm5lY3QoY29sbGVjdGlvblZpZXdlcjogQ29sbGVjdGlvblZpZXdlcik6IE9ic2VydmFibGU8cmVhZG9ubHkgKFQgfCB1bmRlZmluZWQpW10+IHtcbiAgICAgICAgY29uc3QgdW50aWwgPSBuZXcgU3ViamVjdDx2b2lkPigpXG5cbiAgICAgICAgdGhpcy4jY3ZTdWJzLmdldChjb2xsZWN0aW9uVmlld2VyKT8ubmV4dCgpXG4gICAgICAgIHRoaXMuI2N2U3Vicy5zZXQoY29sbGVjdGlvblZpZXdlciwgdW50aWwpXG5cbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChzdWJzY3JpYmVyOiBTdWJzY3JpYmVyPHJlYWRvbmx5IChUIHwgdW5kZWZpbmVkKVtdPikgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3ViMSA9IGNvbGxlY3Rpb25WaWV3ZXIudmlld0NoYW5nZS5zdWJzY3JpYmUodGhpcy4jc2xpY2UpXG4gICAgICAgICAgICBjb25zdCBzdWIyID0gdGhpcy5pdGVtcyQuc3Vic2NyaWJlKHN1YnNjcmliZXIpXG5cbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuI2N2U3Vicy5nZXQoY29sbGVjdGlvblZpZXdlcikgPT09IHVudGlsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2N2U3Vicy5kZWxldGUoY29sbGVjdGlvblZpZXdlcilcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3ViMS51bnN1YnNjcmliZSgpXG4gICAgICAgICAgICAgICAgc3ViMi51bnN1YnNjcmliZSgpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLnBpcGUodGFrZVVudGlsKHVudGlsKSlcbiAgICB9XG5cbiAgICBvdmVycmlkZSBkaXNjb25uZWN0KGNvbGxlY3Rpb25WaWV3ZXI6IENvbGxlY3Rpb25WaWV3ZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy4jY3ZTdWJzLmdldChjb2xsZWN0aW9uVmlld2VyKT8ubmV4dCgpXG4gICAgICAgIHRoaXMuI2N2U3Vicy5kZWxldGUoY29sbGVjdGlvblZpZXdlcilcbiAgICB9XG59XG4iXX0=
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
export class CollectionStore {
|
|
2
|
-
}
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi1zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RhdGEvc3JjL3N0b3JlL2NvbGxlY3Rpb24tc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBU0EsTUFBTSxPQUFnQixlQUFlO0NBbURwQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiXG5cbmltcG9ydCB7IERlZXBSZWFkb25seSB9IGZyb20gXCJAbmd1dGlsL2NvbW1vblwiXG5cbmltcG9ydCB7IE1vZGVsLCBNb2RlbFJlZk5vcm0gfSBmcm9tIFwiLi4vbW9kZWxcIlxuaW1wb3J0IHsgU2xpY2UgfSBmcm9tIFwiLi4vcXVlcnlcIlxuXG5leHBvcnQgdHlwZSBQYXJ0aWFsQ29sbGVjdGlvbjxUPiA9IHJlYWRvbmx5IChUIHwgdW5kZWZpbmVkKVtdXG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDb2xsZWN0aW9uU3RvcmU8VCBleHRlbmRzIE1vZGVsPiB7XG4gICAgLyoqXG4gICAgICogVXBkYXRlIHRoZSBnaXZlbiBzbGljZSwgYW5kIHJldHVybiBhbGwgaXRlbXMgb2JzZXJ2YWJsZVxuICAgICAqL1xuICAgIGFic3RyYWN0IGluc2VydFNsaWNlKHNsaWNlOiBEZWVwUmVhZG9ubHk8U2xpY2U+LCBpdGVtczogcmVhZG9ubHkgVFtdKTogT2JzZXJ2YWJsZTxQYXJ0aWFsQ29sbGVjdGlvbjxUPj5cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIGB0cnVlYCB3aGVuIHRoZSBnaXZlbiBzbGljZSBpcyBhdmFpbGFibGUgaW4gdGhlIGNhY2hlXG4gICAgICovXG4gICAgYWJzdHJhY3QgaGFzU2xpY2Uoc2xpY2U6IERlZXBSZWFkb25seTxTbGljZT4pOiBPYnNlcnZhYmxlPGJvb2xlYW4+XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyBpdGVtcyBieSB0aGUgZ2l2ZW4gc2xpY2VcbiAgICAgKi9cbiAgICBhYnN0cmFjdCBnZXRTbGljZShzbGljZTogRGVlcFJlYWRvbmx5PFNsaWNlPik6IE9ic2VydmFibGU8UGFydGlhbENvbGxlY3Rpb248VD4+XG5cbiAgICAvKipcbiAgICAgKiBHZXQgaXRlbSBmcm9tIGNvbGxlY3Rpb25cbiAgICAgKi9cbiAgICBhYnN0cmFjdCBnZXQocmVmOiBNb2RlbFJlZk5vcm0pOiBPYnNlcnZhYmxlPFQgfCB1bmRlZmluZWQ+XG5cbiAgICAvKipcbiAgICAgKiBHZXQgaW5kZXggb2YgaXRlbSBpbiBjb2xsZWN0aW9uLCAtMSBpZiBub3QgZm91bmRcbiAgICAgKi9cbiAgICBhYnN0cmFjdCBpbmRleE9mKHJlZjogTW9kZWxSZWZOb3JtKTogT2JzZXJ2YWJsZTxudW1iZXI+XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGUgaXRlbSBpbiBjb2xsZWN0aW9uXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB0aGUgdXBkYXRlZCBpbmRleCwgb3IgLTEgaWYgbm90IGZvdW5kXG4gICAgICovXG4gICAgYWJzdHJhY3QgdXBkYXRlKHJlZjogTW9kZWxSZWZOb3JtLCBpdGVtOiBUKTogT2JzZXJ2YWJsZTxudW1iZXI+XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGUgaXRlbSBpZiBleGlzdHMgaW4gY29sbGVjdGlvbiwgb3IgaW5zZXJ0IGF0IHRoZSBnaXZlbiBwb3NpdGlvblxuICAgICAqXG4gICAgICogQHBhcmFtIHBvc2l0aW9uIElmIHBvc2l0b24gaXMgbmVnYXRpdmUsIGluc2VydCBhdCB0aGUgZW5kIG9mIGNvbGxlY3Rpb25cbiAgICAgKiBAcmV0dXJucyB0aGUgdXBkYXRlZCBpbmRleCBvciBpbmRleCBvZiB3aGVyZSB0byBpbnNlcnRcbiAgICAgKi9cbiAgICBhYnN0cmFjdCB1cGRhdGVPckluc2VydChyZWY6IE1vZGVsUmVmTm9ybSwgaXRlbTogVCwgcG9zaXRpb24/OiBudW1iZXIpOiBPYnNlcnZhYmxlPG51bWJlcj5cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBpdGVtIGZyb20gY29sbGVjdGlvblxuICAgICAqIEByZXR1cm5zIHRoZSBpbmRleCBvZiBkZWxldGVkIGl0ZW0sIC0xIGlmIG5vdCBmb3VuZFxuICAgICAqL1xuICAgIGFic3RyYWN0IGRlbChyZWY6IE1vZGVsUmVmTm9ybSk6IE9ic2VydmFibGU8bnVtYmVyPlxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhbGwgaXRlbXMgZnJvbSBjb2xsZWN0aW9uXG4gICAgICovXG4gICAgYWJzdHJhY3QgY2xlYXIoKTogT2JzZXJ2YWJsZTx2b2lkPlxufVxuIl19
|
package/esm2022/store/index.mjs
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
export { CollectionStore } from "./collection-store";
|
|
2
|
-
export { MemoryStore } from "./memory-store";
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYXRhL3NyYy9zdG9yZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFxQixNQUFNLG9CQUFvQixDQUFBO0FBQ3ZFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IENvbGxlY3Rpb25TdG9yZSwgUGFydGlhbENvbGxlY3Rpb24gfSBmcm9tIFwiLi9jb2xsZWN0aW9uLXN0b3JlXCJcbmV4cG9ydCB7IE1lbW9yeVN0b3JlIH0gZnJvbSBcIi4vbWVtb3J5LXN0b3JlXCJcbiJdfQ==
|
|
@@ -1,79 +0,0 @@
|
|
|
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=
|