@devisfuture/mega-collection 2.4.7 → 2.5.0

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 (66) hide show
  1. package/README.md +93 -75
  2. package/dist/{State.d.ts → State-CYIe-3He.d.ts} +5 -3
  3. package/dist/chunks/constants-DK9S0Db0.mjs +1 -0
  4. package/dist/chunks/merge-C6intZSe.mjs +1 -0
  5. package/dist/filter/index.d.ts +114 -4
  6. package/dist/filter/index.mjs +1 -2
  7. package/dist/index.d.ts +2 -4
  8. package/dist/index.mjs +1 -2
  9. package/dist/merge/index.d.ts +131 -4
  10. package/dist/merge/index.mjs +1 -2
  11. package/dist/search/index.d.ts +191 -4
  12. package/dist/search/index.mjs +1 -2
  13. package/dist/sort/index.d.ts +57 -4
  14. package/dist/sort/index.mjs +1 -2
  15. package/dist/types-DONld7xY.d.ts +74 -0
  16. package/package.json +6 -2
  17. package/dist/State.mjs +0 -183
  18. package/dist/constants.d.ts +0 -5
  19. package/dist/constants.mjs +0 -4
  20. package/dist/filter/chain.d.ts +0 -9
  21. package/dist/filter/chain.mjs +0 -22
  22. package/dist/filter/constants.d.ts +0 -2
  23. package/dist/filter/criterion.d.ts +0 -6
  24. package/dist/filter/criterion.mjs +0 -64
  25. package/dist/filter/errors.d.ts +0 -7
  26. package/dist/filter/errors.mjs +0 -17
  27. package/dist/filter/filter.d.ts +0 -89
  28. package/dist/filter/filter.mjs +0 -439
  29. package/dist/filter/nested.d.ts +0 -32
  30. package/dist/filter/nested.mjs +0 -246
  31. package/dist/filter/types.d.ts +0 -74
  32. package/dist/filter/utils.d.ts +0 -4
  33. package/dist/filter/utils.mjs +0 -29
  34. package/dist/indexer.d.ts +0 -41
  35. package/dist/indexer.mjs +0 -101
  36. package/dist/internal.d.ts +0 -6
  37. package/dist/internal.mjs +0 -18
  38. package/dist/merge/chain.d.ts +0 -9
  39. package/dist/merge/chain.mjs +0 -23
  40. package/dist/merge/constants.d.ts +0 -6
  41. package/dist/merge/constants.mjs +0 -8
  42. package/dist/merge/errors.d.ts +0 -8
  43. package/dist/merge/errors.mjs +0 -19
  44. package/dist/merge/merge-engines.d.ts +0 -75
  45. package/dist/merge/merge-engines.mjs +0 -432
  46. package/dist/merge/module-adapters.d.ts +0 -7
  47. package/dist/merge/module-adapters.mjs +0 -41
  48. package/dist/merge/types.d.ts +0 -125
  49. package/dist/search/constants.d.ts +0 -5
  50. package/dist/search/nested.d.ts +0 -41
  51. package/dist/search/nested.mjs +0 -210
  52. package/dist/search/ngram.d.ts +0 -23
  53. package/dist/search/ngram.mjs +0 -96
  54. package/dist/search/text-search.d.ts +0 -146
  55. package/dist/search/text-search.mjs +0 -696
  56. package/dist/search/types.d.ts +0 -93
  57. package/dist/search/utils.d.ts +0 -4
  58. package/dist/search/utils.mjs +0 -22
  59. package/dist/sort/errors.d.ts +0 -5
  60. package/dist/sort/errors.mjs +0 -11
  61. package/dist/sort/sorter.d.ts +0 -47
  62. package/dist/sort/sorter.mjs +0 -375
  63. package/dist/sort/types.d.ts +0 -18
  64. package/dist/sort/utils.d.ts +0 -17
  65. package/dist/sort/utils.mjs +0 -38
  66. package/dist/types.d.ts +0 -73
@@ -1,246 +0,0 @@
1
- import { createNestedFieldDescriptor as e } from "../internal.mjs";
2
- import { resolveCriteria as t } from "./criterion.mjs";
3
- //#region src/filter/nested.ts
4
- var n = class {
5
- constructor(e = {
6
- indexes: /* @__PURE__ */ new Map(),
7
- itemPositions: /* @__PURE__ */ new Map()
8
- }) {
9
- this.storage = e, this.registeredFields = /* @__PURE__ */ new Set(), this.fieldDescriptors = /* @__PURE__ */ new Map();
10
- }
11
- registerFields(e) {
12
- if (e?.length) for (let t = 0; t < e.length; t++) this.registerField(e[t]);
13
- }
14
- hasRegisteredFields() {
15
- return this.registeredFields.size > 0;
16
- }
17
- hasField(e) {
18
- return this.registeredFields.has(e);
19
- }
20
- clearIndexes() {
21
- this.storage.indexes.clear(), this.storage.itemPositions.clear();
22
- }
23
- buildIndexes(e) {
24
- this.storage.indexes.clear(), this.storage.itemPositions.clear();
25
- for (let t of this.registeredFields) this.buildIndex(e, t);
26
- }
27
- addItems(e) {
28
- if (!(e.length === 0 || this.storage.indexes.size === 0)) for (let t = 0; t < e.length; t++) this.addItem(e[t]);
29
- }
30
- removeItem(e) {
31
- for (let t of this.storage.indexes.keys()) this.removeItemFromIndex(t, e);
32
- }
33
- updateItem(e, t) {
34
- for (let n of this.storage.indexes.keys()) this.updateItemInIndex(n, e, t);
35
- }
36
- filter(e, t, n) {
37
- let r = this.resolveCriteria(t);
38
- if (e.length === 0 || r.length === 0) return e;
39
- let i = [], a = [];
40
- for (let e = 0; e < r.length; e++) {
41
- let t = r[e];
42
- if (this.storage.indexes.has(t.field)) {
43
- i.push(t);
44
- continue;
45
- }
46
- a.push(t);
47
- }
48
- let o = e;
49
- if (i.length > 0 && (o = this.filterByIndexes(i, e, n), o.length === 0)) return o;
50
- for (let e = 0; e < a.length; e++) if (o = this.filterLinearly(o, a[e]), o.length === 0) return o;
51
- return o;
52
- }
53
- resolveCriteria(e) {
54
- if (e.length === 0) return [];
55
- let n = e[0];
56
- return "hasValues" in n && "hasExclude" in n && "includedValues" in n ? e : t(e);
57
- }
58
- registerField(t) {
59
- let n = e(t);
60
- n && (this.registeredFields.add(t), this.fieldDescriptors.set(t, n));
61
- }
62
- buildIndex(e, t) {
63
- let n = this.fieldDescriptors.get(t);
64
- if (!n) return;
65
- let { collectionKey: r, nestedKey: i } = n, a = /* @__PURE__ */ new Map(), o = /* @__PURE__ */ new Map();
66
- for (let t = 0, n = e.length; t < n; t++) {
67
- let n = e[t], s = n[r];
68
- if (Array.isArray(s)) for (let e = 0; e < s.length; e++) {
69
- let t = s[e][i];
70
- if (t == null) continue;
71
- let r = a.get(t);
72
- if (r) {
73
- r[r.length - 1] !== n && (r.push(n), o.get(t).set(n, r.length - 1));
74
- continue;
75
- }
76
- a.set(t, [n]);
77
- let c = /* @__PURE__ */ new WeakMap();
78
- c.set(n, 0), o.set(t, c);
79
- }
80
- }
81
- this.storage.indexes.set(t, a), this.storage.itemPositions.set(t, o);
82
- }
83
- removeItemFromIndex(e, t) {
84
- let n = this.fieldDescriptors.get(e), r = this.storage.indexes.get(e), i = this.storage.itemPositions.get(e);
85
- if (!n || !r || !i) return;
86
- let { collectionKey: a, nestedKey: o } = n, s = t[a];
87
- if (!Array.isArray(s) || s.length === 0) return;
88
- let c = /* @__PURE__ */ new Set();
89
- for (let e = 0; e < s.length; e++) {
90
- let t = s[e][o];
91
- t != null && c.add(t);
92
- }
93
- for (let e of c) {
94
- let n = r.get(e), a = i.get(e), o = a?.get(t);
95
- if (!n || !a || o === void 0) continue;
96
- let s = n.length - 1, c = n[s];
97
- o !== s && (n[o] = c, a.set(c, o)), n.pop(), a.delete(t), n.length === 0 && (r.delete(e), i.delete(e));
98
- }
99
- }
100
- addItem(e) {
101
- for (let t of this.storage.indexes.keys()) this.addItemToIndex(t, e);
102
- }
103
- addItemToIndex(e, t) {
104
- let n = this.fieldDescriptors.get(e), r = this.storage.indexes.get(e), i = this.storage.itemPositions.get(e);
105
- if (!n || !r || !i) return;
106
- let { collectionKey: a, nestedKey: o } = n, s = t[a];
107
- if (!Array.isArray(s) || s.length === 0) return;
108
- let c = /* @__PURE__ */ new Set();
109
- for (let e = 0; e < s.length; e++) {
110
- let t = s[e][o];
111
- t != null && c.add(t);
112
- }
113
- for (let e of c) {
114
- let n = r.get(e), a = i.get(e);
115
- if (n && a) {
116
- n.push(t), a.set(t, n.length - 1);
117
- continue;
118
- }
119
- r.set(e, [t]);
120
- let o = /* @__PURE__ */ new WeakMap();
121
- o.set(t, 0), i.set(e, o);
122
- }
123
- }
124
- updateItemInIndex(e, t, n) {
125
- let r = this.fieldDescriptors.get(e), i = this.storage.indexes.get(e), a = this.storage.itemPositions.get(e);
126
- if (!r || !i || !a) return;
127
- let o = this.collectUniqueValues(n, r), s = this.collectUniqueValues(t, r);
128
- if (this.areValueSetsEqual(o, s)) {
129
- for (let e of o) {
130
- let r = i.get(e), o = a.get(e), s = o?.get(n);
131
- !r || !o || s === void 0 || (r[s] = t, o.delete(n), o.set(t, s));
132
- }
133
- return;
134
- }
135
- this.removeItemFromIndex(e, n), this.addItemToIndex(e, t);
136
- }
137
- collectUniqueValues(e, t) {
138
- let { collectionKey: n, nestedKey: r } = t, i = e[n], a = /* @__PURE__ */ new Set();
139
- if (!Array.isArray(i) || i.length === 0) return a;
140
- for (let e = 0; e < i.length; e++) {
141
- let t = i[e][r];
142
- t != null && a.add(t);
143
- }
144
- return a;
145
- }
146
- areValueSetsEqual(e, t) {
147
- if (e.size !== t.size) return !1;
148
- for (let n of e) if (!t.has(n)) return !1;
149
- return !0;
150
- }
151
- filterByIndexes(e, t, n) {
152
- let r = e.filter((e) => e.hasValues), i = e.filter((e) => e.hasExclude), a = t === n ? null : new Set(t);
153
- if (r.length === 0) return this.applyIndexedExclusions(t, i);
154
- if (r.length === 1) {
155
- let e = this.storage.indexes.get(r[0].field);
156
- if (!e) return [];
157
- let t = this.getItemsByValues(e, r[0].values);
158
- if (t.length === 0) return [];
159
- let n = [];
160
- for (let e = 0; e < t.length; e++) {
161
- let r = t[e];
162
- a && !a.has(r) || n.push(r);
163
- }
164
- return this.applyIndexedExclusions(n, i);
165
- }
166
- let o = r.map((e) => ({
167
- criterion: e,
168
- size: this.estimateIndexSize(e)
169
- })).sort((e, t) => e.size - t.size), s = a, c = [];
170
- for (let e = 0; e < o.length; e++) {
171
- let { criterion: t } = o[e], n = this.storage.indexes.get(t.field);
172
- if (!n) return [];
173
- let r = this.getItemsByValues(n, t.values);
174
- if (r.length === 0) return [];
175
- if (s === null) c = r;
176
- else {
177
- c = [];
178
- for (let e = 0; e < r.length; e++) {
179
- let t = r[e];
180
- s.has(t) && c.push(t);
181
- }
182
- }
183
- if (c.length === 0) return [];
184
- s = new Set(c);
185
- }
186
- return this.applyIndexedExclusions(c, i);
187
- }
188
- getItemsByValues(e, t) {
189
- if (t.length === 1) return e.get(t[0]) ?? [];
190
- let n = /* @__PURE__ */ new Set(), r = [];
191
- for (let i = 0; i < t.length; i++) {
192
- let a = e.get(t[i]);
193
- if (a) for (let e = 0; e < a.length; e++) {
194
- let t = a[e];
195
- n.has(t) || (n.add(t), r.push(t));
196
- }
197
- }
198
- return r;
199
- }
200
- estimateIndexSize(e) {
201
- let t = this.storage.indexes.get(e.field);
202
- return t ? e.values.reduce((e, n) => {
203
- let r = t.get(n);
204
- return r ? e + r.length : e;
205
- }, 0) : Infinity;
206
- }
207
- filterLinearly(e, t) {
208
- let n = this.fieldDescriptors.get(t.field);
209
- if (!n) return e;
210
- let { collectionKey: r, nestedKey: i } = n, a = [];
211
- for (let n = 0; n < e.length; n++) {
212
- let o = e[n], s = o[r];
213
- if (!Array.isArray(s)) continue;
214
- let c = !t.hasValues, l = !1;
215
- for (let e = 0; e < s.length; e++) {
216
- let n = s[e][i];
217
- if (t.hasExclude && t.excludedValues.has(n)) {
218
- l = !0;
219
- break;
220
- }
221
- t.hasValues && t.includedValues.has(n) && (c = !0);
222
- }
223
- !l && c && a.push(o);
224
- }
225
- return a;
226
- }
227
- applyIndexedExclusions(e, t) {
228
- if (t.length === 0 || e.length === 0) return e;
229
- let n = /* @__PURE__ */ new Set();
230
- for (let e = 0; e < t.length; e++) {
231
- let r = t[e], i = this.storage.indexes.get(r.field);
232
- if (!i) continue;
233
- let a = this.getItemsByValues(i, r.exclude);
234
- for (let e = 0; e < a.length; e++) n.add(a[e]);
235
- }
236
- if (n.size === 0) return e;
237
- let r = [];
238
- for (let t = 0; t < e.length; t++) {
239
- let i = e[t];
240
- n.has(i) || r.push(i);
241
- }
242
- return r;
243
- }
244
- };
245
- //#endregion
246
- export { n as FilterNestedCollection };
@@ -1,74 +0,0 @@
1
- import type { IndexerStorage } from "../indexer";
2
- import type { CollectionItem, FilterCriterion } from "../types";
3
- import type { FilterEngine } from "./filter";
4
- export type FilterNestedCollectionStorage<T extends CollectionItem> = IndexerStorage<T>;
5
- export interface FilterEngineChain<T extends CollectionItem> {
6
- filter(criteria: FilterCriterion<T>[]): T[] & FilterEngineChain<T>;
7
- filter(data: T[], criteria: FilterCriterion<T>[]): T[] & FilterEngineChain<T>;
8
- getOriginData(): T[];
9
- add(items: T[]): FilterEngine<T>;
10
- update(descriptor: import("../types").UpdateDescriptor<T>): FilterEngine<T>;
11
- data(data: T[]): FilterEngine<T>;
12
- clearIndexes(): FilterEngine<T>;
13
- clearData(): FilterEngine<T>;
14
- resetFilterState(): FilterEngine<T>;
15
- }
16
- export interface FilterEngineOptions<T extends CollectionItem = CollectionItem> {
17
- data?: T[];
18
- mutableExcludeField?: keyof T & string;
19
- fields?: (keyof T & string)[];
20
- nestedFields?: string[];
21
- filterByPreviousResult?: boolean;
22
- }
23
- export type NestedFieldDescriptor = {
24
- collectionKey: string;
25
- nestedKey: string;
26
- };
27
- export type ResolvedFilterCriterion<T extends CollectionItem> = {
28
- field: FilterCriterion<T>["field"];
29
- values: any[];
30
- exclude: any[];
31
- hasValues: boolean;
32
- hasExclude: boolean;
33
- includedValues: Set<any> | null;
34
- excludedValues: Set<any> | null;
35
- cacheKeySegment: string;
36
- };
37
- export type FilterSequentialCacheEntry<T extends CollectionItem> = {
38
- result: T[];
39
- resultSet: Set<T> | null;
40
- };
41
- export type FilterEngineChainCallbacks<T extends CollectionItem> = {
42
- filter: (dataOrCriteria: T[] | FilterCriterion<T>[], criteria?: FilterCriterion<T>[]) => T[] & FilterEngineChain<T>;
43
- getOriginData: () => T[];
44
- add: (items: T[]) => FilterEngine<T>;
45
- update: (descriptor: import("../types").UpdateDescriptor<T>) => FilterEngine<T>;
46
- data: (data: T[]) => FilterEngine<T>;
47
- clearIndexes: () => FilterEngine<T>;
48
- clearData: () => FilterEngine<T>;
49
- resetFilterState: () => FilterEngine<T>;
50
- };
51
- export type FilterSequentialCache<T extends CollectionItem> = {
52
- previousResult: T[] | null;
53
- previousCriteria: ResolvedFilterCriterion<T>[] | null;
54
- previousCriteriaKey: string | null;
55
- previousBaseData: T[] | null;
56
- previousResultsByCriteria: Map<string, FilterSequentialCacheEntry<T>>;
57
- /** Cached Set of previousResult items — avoids O(m) Set construction on each filterViaIndex narrowing call. */
58
- previousResultSet: Set<T> | null;
59
- };
60
- export type MutableExcludeRuntime = {
61
- datasetPositions: Map<any, number>;
62
- valueCounts: Map<any, number>;
63
- duplicateValueCount: number;
64
- hasDuplicateValues: boolean;
65
- };
66
- export type FilterRuntime<T extends CollectionItem> = {
67
- indexedFields: Set<keyof T & string>;
68
- indexerStorage: IndexerStorage<T>;
69
- nestedStorage: FilterNestedCollectionStorage<T>;
70
- deferredMutationVersion: number | null;
71
- mutableExclude: MutableExcludeRuntime;
72
- sequentialCache: FilterSequentialCache<T>;
73
- };
74
- //# sourceMappingURL=types.d.ts.map
@@ -1,4 +0,0 @@
1
- import type { CollectionItem } from "../types";
2
- import type { FilterRuntime } from "./types";
3
- export declare const createFilterRuntime: <T extends CollectionItem>() => FilterRuntime<T>;
4
- //# sourceMappingURL=utils.d.ts.map
@@ -1,29 +0,0 @@
1
- //#region src/filter/utils.ts
2
- var e = () => ({
3
- indexedFields: /* @__PURE__ */ new Set(),
4
- indexerStorage: {
5
- indexes: /* @__PURE__ */ new Map(),
6
- itemPositions: /* @__PURE__ */ new Map()
7
- },
8
- nestedStorage: {
9
- indexes: /* @__PURE__ */ new Map(),
10
- itemPositions: /* @__PURE__ */ new Map()
11
- },
12
- deferredMutationVersion: null,
13
- mutableExclude: {
14
- datasetPositions: /* @__PURE__ */ new Map(),
15
- valueCounts: /* @__PURE__ */ new Map(),
16
- duplicateValueCount: 0,
17
- hasDuplicateValues: !1
18
- },
19
- sequentialCache: {
20
- previousResult: null,
21
- previousCriteria: null,
22
- previousCriteriaKey: null,
23
- previousBaseData: null,
24
- previousResultsByCriteria: /* @__PURE__ */ new Map(),
25
- previousResultSet: null
26
- }
27
- });
28
- //#endregion
29
- export { e as createFilterRuntime };
package/dist/indexer.d.ts DELETED
@@ -1,41 +0,0 @@
1
- /**
2
- * Indexer class that builds hash-map indexes for exact-value lookups
3
- * on collection fields, enabling O(1) queries.
4
- */
5
- import { CollectionItem } from "./types";
6
- export interface IndexerStorage<T extends CollectionItem> {
7
- indexes: Map<string, Map<any, T[]>>;
8
- itemPositions: Map<string, Map<any, WeakMap<T, number>>>;
9
- }
10
- export declare class Indexer<T extends CollectionItem> {
11
- private readonly storage;
12
- constructor(storage?: IndexerStorage<T>);
13
- addItems(items: T[]): void;
14
- /**
15
- * Builds an index for the given field and data.
16
- */
17
- buildIndex(data: T[], field: keyof T & string): void;
18
- /**
19
- * Gets items that match the given value for the field.
20
- */
21
- getByValue(field: keyof T & string, value: any): T[];
22
- /**
23
- * Gets items that match any of the given values for the field.
24
- *
25
- * Note: buildIndex indexes scalar field values, so buckets are always
26
- * disjoint — deduplication via Set is not needed. If multi-value field
27
- * indexing is ever added, re-introduce dedup here.
28
- */
29
- getByValues(field: keyof T & string, values: any[]): T[];
30
- hasIndex(field: string): boolean;
31
- addItem(item: T): void;
32
- updateItem(previousItem: T, nextItem: T): void;
33
- removeItem(item: T): void;
34
- clear(): void;
35
- getIndexMap(field: string): Map<any, T[]> | undefined;
36
- private removeItemFromField;
37
- private updateItemInField;
38
- private replaceItemReferenceInField;
39
- private addItemToField;
40
- }
41
- //# sourceMappingURL=indexer.d.ts.map
package/dist/indexer.mjs DELETED
@@ -1,101 +0,0 @@
1
- //#region src/indexer.ts
2
- var e = class {
3
- constructor(e = {
4
- indexes: /* @__PURE__ */ new Map(),
5
- itemPositions: /* @__PURE__ */ new Map()
6
- }) {
7
- this.storage = e;
8
- }
9
- addItems(e) {
10
- if (!(e.length === 0 || this.storage.indexes.size === 0)) for (let t = 0; t < e.length; t++) this.addItem(e[t]);
11
- }
12
- buildIndex(e, t) {
13
- let n = /* @__PURE__ */ new Map(), r = /* @__PURE__ */ new Map();
14
- for (let i = 0, a = e.length; i < a; i++) {
15
- let a = e[i], o = a[t];
16
- if (o == null) continue;
17
- let s = n.get(o);
18
- if (s) s.push(a), r.get(o).set(a, s.length - 1);
19
- else {
20
- n.set(o, [a]);
21
- let e = /* @__PURE__ */ new WeakMap();
22
- e.set(a, 0), r.set(o, e);
23
- }
24
- }
25
- this.storage.indexes.set(t, n), this.storage.itemPositions.set(t, r);
26
- }
27
- getByValue(e, t) {
28
- let n = this.storage.indexes.get(e);
29
- return n ? n.get(t) ?? [] : [];
30
- }
31
- getByValues(e, t) {
32
- let n = this.storage.indexes.get(e);
33
- if (!n) return [];
34
- if (t.length === 1) return n.get(t[0]) ?? [];
35
- if (t.length === 2) {
36
- let e = n.get(t[0]), r = n.get(t[1]);
37
- return e ? r ? e.concat(r) : e : r ?? [];
38
- }
39
- let r = [];
40
- for (let e = 0; e < t.length; e++) {
41
- let i = n.get(t[e]);
42
- if (i !== void 0) for (let e = 0; e < i.length; e++) r.push(i[e]);
43
- }
44
- return r;
45
- }
46
- hasIndex(e) {
47
- return this.storage.indexes.has(e);
48
- }
49
- addItem(e) {
50
- for (let t of this.storage.indexes.keys()) this.addItemToField(t, e);
51
- }
52
- updateItem(e, t) {
53
- for (let n of this.storage.indexes.keys()) this.updateItemInField(n, e, t);
54
- }
55
- removeItem(e) {
56
- for (let t of this.storage.indexes.keys()) this.removeItemFromField(t, e);
57
- }
58
- clear() {
59
- this.storage.indexes.clear(), this.storage.itemPositions.clear();
60
- }
61
- getIndexMap(e) {
62
- return this.storage.indexes.get(e);
63
- }
64
- removeItemFromField(e, t) {
65
- let n = t[e];
66
- if (n == null) return;
67
- let r = this.storage.indexes.get(e), i = this.storage.itemPositions.get(e), a = r?.get(n), o = i?.get(n), s = o?.get(t);
68
- if (!r || !i || !a || !o || s === void 0) return;
69
- let c = a.length - 1, l = a[c];
70
- s !== c && (a[s] = l, o.set(l, s)), a.pop(), o.delete(t), a.length === 0 && (r.delete(n), i.delete(n));
71
- }
72
- updateItemInField(e, t, n) {
73
- let r = t[e];
74
- if (r === n[e]) {
75
- if (r == null) return;
76
- this.replaceItemReferenceInField(e, r, t, n);
77
- return;
78
- }
79
- this.removeItemFromField(e, t), this.addItemToField(e, n);
80
- }
81
- replaceItemReferenceInField(e, t, n, r) {
82
- let i = this.storage.indexes.get(e), a = this.storage.itemPositions.get(e), o = i?.get(t), s = a?.get(t), c = s?.get(n);
83
- !o || !s || c === void 0 || (o[c] = r, s.delete(n), s.set(r, c));
84
- }
85
- addItemToField(e, t) {
86
- let n = t[e];
87
- if (n == null) return;
88
- let r = this.storage.indexes.get(e), i = this.storage.itemPositions.get(e);
89
- if (!r || !i) return;
90
- let a = r.get(n), o = i.get(n);
91
- if (a && o) {
92
- a.push(t), o.set(t, a.length - 1);
93
- return;
94
- }
95
- r.set(n, [t]);
96
- let s = /* @__PURE__ */ new WeakMap();
97
- s.set(t, 0), i.set(n, s);
98
- }
99
- };
100
- //#endregion
101
- export { e as Indexer };
@@ -1,6 +0,0 @@
1
- export declare function createChainMethodDescriptor<TValue>(value: TValue): PropertyDescriptor;
2
- export declare function createNestedFieldDescriptor(fieldPath: string): {
3
- collectionKey: string;
4
- nestedKey: string;
5
- } | null;
6
- //# sourceMappingURL=internal.d.ts.map
package/dist/internal.mjs DELETED
@@ -1,18 +0,0 @@
1
- //#region src/internal.ts
2
- function e(e) {
3
- return {
4
- value: e,
5
- enumerable: !1,
6
- configurable: !0,
7
- writable: !0
8
- };
9
- }
10
- function t(e) {
11
- let t = e.indexOf(".");
12
- return t === -1 ? null : {
13
- collectionKey: e.substring(0, t),
14
- nestedKey: e.substring(t + 1)
15
- };
16
- }
17
- //#endregion
18
- export { e as createChainMethodDescriptor, t as createNestedFieldDescriptor };
@@ -1,9 +0,0 @@
1
- import type { CollectionItem } from "../types";
2
- import type { MergeEnginesChain, MergeEnginesChainCallbacks } from "./types";
3
- export type { MergeEnginesChain, MergeModuleName } from "./types";
4
- export declare class MergeEnginesChainBuilder<T extends CollectionItem> {
5
- private readonly callbacks;
6
- constructor(callbacks: MergeEnginesChainCallbacks<T>);
7
- create(result: T[]): T[] & MergeEnginesChain<T>;
8
- }
9
- //# sourceMappingURL=chain.d.ts.map
@@ -1,23 +0,0 @@
1
- import { createChainMethodDescriptor as e } from "../internal.mjs";
2
- //#region src/merge/chain.ts
3
- var t = class {
4
- constructor(e) {
5
- this.callbacks = e;
6
- }
7
- create(t) {
8
- let n = t;
9
- return Object.defineProperties(n, {
10
- search: e((e, t) => t === void 0 ? this.callbacks.search(e) : this.callbacks.search(e, t)),
11
- sort: e((e, n, r) => n === void 0 ? this.callbacks.sort(t, e, r) : this.callbacks.sort(e, n, r)),
12
- filter: e((e, n) => n === void 0 ? this.callbacks.filter(t, e) : this.callbacks.filter(e, n)),
13
- add: e((e) => this.callbacks.add(e)),
14
- update: e((e) => this.callbacks.update(e)),
15
- clearIndexes: e((e) => (this.callbacks.clearIndexes(e), this.create(t))),
16
- clearData: e((e) => (this.callbacks.clearData(e), this.create(t))),
17
- data: e((e) => this.callbacks.data(e)),
18
- getOriginData: e(() => this.callbacks.getOriginData())
19
- }), n;
20
- }
21
- };
22
- //#endregion
23
- export { t as MergeEnginesChainBuilder };
@@ -1,6 +0,0 @@
1
- export declare const MODULE_TO_ENGINE: {
2
- readonly search: "TextSearchEngine";
3
- readonly sort: "SortEngine";
4
- readonly filter: "FilterEngine";
5
- };
6
- //# sourceMappingURL=constants.d.ts.map
@@ -1,8 +0,0 @@
1
- //#region src/merge/constants.ts
2
- var e = {
3
- search: "TextSearchEngine",
4
- sort: "SortEngine",
5
- filter: "FilterEngine"
6
- };
7
- //#endregion
8
- export { e as MODULE_TO_ENGINE };
@@ -1,8 +0,0 @@
1
- import type { MergeModuleName } from "./types";
2
- export declare class MergeEnginesError extends Error {
3
- constructor(message: string);
4
- static unavailableEngine(module: MergeModuleName): MergeEnginesError;
5
- static unavailableGetOriginData(): MergeEnginesError;
6
- static invalidFilterByPreviousResultOption(): MergeEnginesError;
7
- }
8
- //# sourceMappingURL=errors.d.ts.map
@@ -1,19 +0,0 @@
1
- import { MODULE_TO_ENGINE as e } from "./constants.mjs";
2
- //#region src/merge/errors.ts
3
- var t = class t extends Error {
4
- constructor(e) {
5
- super(e), this.name = "MergeEnginesError";
6
- }
7
- static unavailableEngine(n) {
8
- let r = e[n];
9
- return new t(`MergeEngines: ${r} is not available.`);
10
- }
11
- static unavailableGetOriginData() {
12
- return new t("MergeEngines: getOriginData is not available.");
13
- }
14
- static invalidFilterByPreviousResultOption() {
15
- return new t("MergeEngines: \"filter.filterByPreviousResult\" is not supported. Configure \"filterByPreviousResult\" on the MergeEngines root options.");
16
- }
17
- };
18
- //#endregion
19
- export { t as MergeEnginesError };
@@ -1,75 +0,0 @@
1
- /**
2
- * MergeEngines class that provides a unified interface for text search,
3
- * sorting, and filtering operations on collections.
4
- */
5
- import type { CollectionItem, FilterCriterion, SortDescriptor, UpdateDescriptor } from "../types";
6
- import { MergeEnginesChain } from "./chain";
7
- import type { MergeEnginesOptions, MergeModuleName } from "./types";
8
- export declare class MergeEngines<T extends CollectionItem> {
9
- private readonly state;
10
- private previousSearchState;
11
- private previousFilterState;
12
- private previousSortState;
13
- private readonly searchModule;
14
- private readonly sortModule;
15
- private readonly filterModule;
16
- private readonly chainBuilder;
17
- /**
18
- * Creates a new MergeEngines instance with the given options.
19
- * Collects all modules from imports.
20
- */
21
- constructor(options: MergeEnginesOptions<T>);
22
- private getAdapter;
23
- /**
24
- * Gets the initialization options for a module.
25
- */
26
- private getModuleInitOptions;
27
- private validateFilterByPreviousResultOptions;
28
- private isPreviousResultEnabled;
29
- private getPreviousResultInput;
30
- private trackPreviousResult;
31
- private clearOperationState;
32
- private createSearchCacheKey;
33
- private createSortCacheKey;
34
- private createFilterCacheKey;
35
- private handleStateMutation;
36
- private queueSearchCacheMutation;
37
- private queueFilterCacheMutation;
38
- private queueSortCacheMutation;
39
- private resolvePendingSortCache;
40
- private resolvePendingSearchCache;
41
- private resolvePendingFilterCache;
42
- private applySortCacheMutation;
43
- private applySearchCacheMutation;
44
- private applyFilterCacheMutation;
45
- private canPatchStoredDatasetSearch;
46
- private canPatchStoredDatasetFilter;
47
- private canPatchStoredDatasetSort;
48
- private compareItemsByDescriptors;
49
- private findSortInsertPosition;
50
- private findDatasetInsertPosition;
51
- private doesItemMatchSearchCache;
52
- private patchSearchCacheForAddedItems;
53
- private patchSearchCacheForUpdatedItem;
54
- private isPatchableFilterCriterion;
55
- private doesItemMatchFilterCache;
56
- private patchFilterCacheForAddedItems;
57
- private patchFilterCacheForUpdatedItem;
58
- private patchSortCacheForAddedItems;
59
- private patchSortCacheForUpdatedItem;
60
- private patchSortCacheForRemovedItems;
61
- search(query: string): T[] & MergeEnginesChain<T>;
62
- search(field: (keyof T & string) | (string & {}), query: string): T[] & MergeEnginesChain<T>;
63
- sort(descriptors: SortDescriptor<T>[]): T[] & MergeEnginesChain<T>;
64
- sort(data: T[], descriptors: SortDescriptor<T>[], inPlace?: boolean): T[] & MergeEnginesChain<T>;
65
- filter(criteria: FilterCriterion<T>[]): T[] & MergeEnginesChain<T>;
66
- filter(data: T[], criteria: FilterCriterion<T>[]): T[] & MergeEnginesChain<T>;
67
- private withChain;
68
- getOriginData(): T[];
69
- add(items: T[]): this;
70
- update(descriptor: UpdateDescriptor<T>): this;
71
- clearIndexes(module: MergeModuleName): this;
72
- data(data: T[]): this;
73
- clearData(module: MergeModuleName): this;
74
- }
75
- //# sourceMappingURL=merge-engines.d.ts.map