@ngutil/data 0.0.10 → 0.0.11

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 (39) 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 +26 -0
  5. package/esm2022/provider/observable.mjs +8 -0
  6. package/esm2022/provider/provider.mjs +10 -0
  7. package/esm2022/source/index.mjs +3 -0
  8. package/esm2022/source/properties/abstract.mjs +33 -0
  9. package/esm2022/source/properties/filter.mjs +16 -0
  10. package/esm2022/source/properties/grouper.mjs +16 -0
  11. package/esm2022/source/properties/index.mjs +5 -0
  12. package/esm2022/source/properties/slimer.mjs +16 -0
  13. package/esm2022/source/properties/sorter.mjs +16 -0
  14. package/esm2022/source/proxy.directive.mjs +152 -0
  15. package/esm2022/source/source.mjs +108 -0
  16. package/esm2022/store/collection-store.mjs +3 -0
  17. package/esm2022/store/index.mjs +3 -0
  18. package/esm2022/store/memory-store.mjs +79 -0
  19. package/fesm2022/ngutil-data.mjs +957 -166
  20. package/fesm2022/ngutil-data.mjs.map +1 -1
  21. package/index.d.ts +5 -2
  22. package/package.json +2 -2
  23. package/provider/array.d.ts +7 -0
  24. package/provider/index.d.ts +4 -0
  25. package/provider/local.d.ts +15 -0
  26. package/provider/observable.d.ts +7 -0
  27. package/provider/provider.d.ts +31 -0
  28. package/source/index.d.ts +2 -0
  29. package/source/properties/abstract.d.ts +17 -0
  30. package/source/properties/filter.d.ts +11 -0
  31. package/source/properties/grouper.d.ts +11 -0
  32. package/source/properties/index.d.ts +4 -0
  33. package/source/properties/slimer.d.ts +11 -0
  34. package/source/properties/sorter.d.ts +11 -0
  35. package/source/proxy.directive.d.ts +57 -0
  36. package/source/source.d.ts +35 -0
  37. package/store/collection-store.d.ts +49 -0
  38. package/store/index.d.ts +2 -0
  39. package/store/memory-store.d.ts +16 -0
@@ -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=