@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.
- package/README.md +93 -75
- package/dist/{State.d.ts → State-CYIe-3He.d.ts} +5 -3
- package/dist/chunks/constants-DK9S0Db0.mjs +1 -0
- package/dist/chunks/merge-C6intZSe.mjs +1 -0
- package/dist/filter/index.d.ts +114 -4
- package/dist/filter/index.mjs +1 -2
- package/dist/index.d.ts +2 -4
- package/dist/index.mjs +1 -2
- package/dist/merge/index.d.ts +131 -4
- package/dist/merge/index.mjs +1 -2
- package/dist/search/index.d.ts +191 -4
- package/dist/search/index.mjs +1 -2
- package/dist/sort/index.d.ts +57 -4
- package/dist/sort/index.mjs +1 -2
- package/dist/types-DONld7xY.d.ts +74 -0
- package/package.json +6 -2
- package/dist/State.mjs +0 -183
- package/dist/constants.d.ts +0 -5
- package/dist/constants.mjs +0 -4
- package/dist/filter/chain.d.ts +0 -9
- package/dist/filter/chain.mjs +0 -22
- package/dist/filter/constants.d.ts +0 -2
- package/dist/filter/criterion.d.ts +0 -6
- package/dist/filter/criterion.mjs +0 -64
- package/dist/filter/errors.d.ts +0 -7
- package/dist/filter/errors.mjs +0 -17
- package/dist/filter/filter.d.ts +0 -89
- package/dist/filter/filter.mjs +0 -439
- package/dist/filter/nested.d.ts +0 -32
- package/dist/filter/nested.mjs +0 -246
- package/dist/filter/types.d.ts +0 -74
- package/dist/filter/utils.d.ts +0 -4
- package/dist/filter/utils.mjs +0 -29
- package/dist/indexer.d.ts +0 -41
- package/dist/indexer.mjs +0 -101
- package/dist/internal.d.ts +0 -6
- package/dist/internal.mjs +0 -18
- package/dist/merge/chain.d.ts +0 -9
- package/dist/merge/chain.mjs +0 -23
- package/dist/merge/constants.d.ts +0 -6
- package/dist/merge/constants.mjs +0 -8
- package/dist/merge/errors.d.ts +0 -8
- package/dist/merge/errors.mjs +0 -19
- package/dist/merge/merge-engines.d.ts +0 -75
- package/dist/merge/merge-engines.mjs +0 -432
- package/dist/merge/module-adapters.d.ts +0 -7
- package/dist/merge/module-adapters.mjs +0 -41
- package/dist/merge/types.d.ts +0 -125
- package/dist/search/constants.d.ts +0 -5
- package/dist/search/nested.d.ts +0 -41
- package/dist/search/nested.mjs +0 -210
- package/dist/search/ngram.d.ts +0 -23
- package/dist/search/ngram.mjs +0 -96
- package/dist/search/text-search.d.ts +0 -146
- package/dist/search/text-search.mjs +0 -696
- package/dist/search/types.d.ts +0 -93
- package/dist/search/utils.d.ts +0 -4
- package/dist/search/utils.mjs +0 -22
- package/dist/sort/errors.d.ts +0 -5
- package/dist/sort/errors.mjs +0 -11
- package/dist/sort/sorter.d.ts +0 -47
- package/dist/sort/sorter.mjs +0 -375
- package/dist/sort/types.d.ts +0 -18
- package/dist/sort/utils.d.ts +0 -17
- package/dist/sort/utils.mjs +0 -38
- package/dist/types.d.ts +0 -73
package/dist/filter/nested.mjs
DELETED
|
@@ -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 };
|
package/dist/filter/types.d.ts
DELETED
|
@@ -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
|
package/dist/filter/utils.d.ts
DELETED
package/dist/filter/utils.mjs
DELETED
|
@@ -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 };
|
package/dist/internal.d.ts
DELETED
|
@@ -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 };
|
package/dist/merge/chain.d.ts
DELETED
|
@@ -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
|
package/dist/merge/chain.mjs
DELETED
|
@@ -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 };
|
package/dist/merge/constants.mjs
DELETED
package/dist/merge/errors.d.ts
DELETED
|
@@ -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
|
package/dist/merge/errors.mjs
DELETED
|
@@ -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
|