@signaldb/core 1.0.0 → 1.2.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 (76) hide show
  1. package/README.md +2 -2
  2. package/dist/.vite/manifest.json +78 -64
  3. package/dist/Collection/index.d.ts +39 -16
  4. package/dist/Collection/types.d.ts +1 -1
  5. package/dist/devtools.d.ts +4 -0
  6. package/dist/index.cjs.js +19 -11
  7. package/dist/index.cjs10.js +27 -6
  8. package/dist/index.cjs11.js +6 -3
  9. package/dist/index.cjs12.js +3 -35
  10. package/dist/index.cjs13.js +141 -16
  11. package/dist/index.cjs14.js +38 -5
  12. package/dist/index.cjs15.js +2 -42
  13. package/dist/index.cjs16.js +5 -11
  14. package/dist/index.cjs17.js +40 -17
  15. package/dist/index.cjs18.js +11 -245
  16. package/dist/index.cjs19.js +16 -67
  17. package/dist/index.cjs2.js +104 -615
  18. package/dist/index.cjs20.js +251 -67
  19. package/dist/index.cjs21.js +68 -8
  20. package/dist/index.cjs22.js +83 -22
  21. package/dist/index.cjs23.js +8 -135
  22. package/dist/index.cjs24.js +25 -16
  23. package/dist/index.cjs25.js +144 -5
  24. package/dist/index.cjs26.js +5 -17
  25. package/dist/index.cjs27.js +15 -21
  26. package/dist/index.cjs28.js +21 -39
  27. package/dist/index.cjs29.js +40 -27
  28. package/dist/index.cjs3.js +669 -136
  29. package/dist/index.cjs30.js +27 -7
  30. package/dist/index.cjs31.js +9 -0
  31. package/dist/index.cjs4.js +166 -63
  32. package/dist/index.cjs5.js +66 -3
  33. package/dist/index.cjs6.js +2 -2
  34. package/dist/index.cjs7.js +2 -2
  35. package/dist/index.cjs8.js +2 -2
  36. package/dist/index.cjs9.js +3 -28
  37. package/dist/index.d.ts +2 -0
  38. package/dist/index.mjs +20 -12
  39. package/dist/index10.mjs +27 -6
  40. package/dist/index11.mjs +6 -3
  41. package/dist/index12.mjs +3 -34
  42. package/dist/index13.mjs +141 -16
  43. package/dist/index14.mjs +37 -5
  44. package/dist/index15.mjs +2 -41
  45. package/dist/index16.mjs +5 -11
  46. package/dist/index17.mjs +39 -17
  47. package/dist/index18.mjs +11 -244
  48. package/dist/index19.mjs +16 -66
  49. package/dist/index2.mjs +80 -615
  50. package/dist/index20.mjs +251 -67
  51. package/dist/index21.mjs +67 -8
  52. package/dist/index22.mjs +82 -22
  53. package/dist/index23.mjs +8 -135
  54. package/dist/index24.mjs +25 -15
  55. package/dist/index25.mjs +144 -5
  56. package/dist/index26.mjs +5 -17
  57. package/dist/index27.mjs +15 -21
  58. package/dist/index28.mjs +21 -39
  59. package/dist/index29.mjs +40 -27
  60. package/dist/index3.mjs +669 -136
  61. package/dist/index30.mjs +27 -7
  62. package/dist/index31.mjs +10 -0
  63. package/dist/index4.mjs +166 -62
  64. package/dist/index5.mjs +65 -3
  65. package/dist/index6.mjs +2 -2
  66. package/dist/index7.mjs +2 -2
  67. package/dist/index8.mjs +2 -2
  68. package/dist/index9.mjs +3 -28
  69. package/dist/persistence/combinePersistenceAdapters.d.ts +7 -7
  70. package/dist/types/MemoryAdapter.d.ts +2 -2
  71. package/dist/utils/EventEmitter.d.ts +75 -0
  72. package/dist/utils/deepClone.d.ts +2 -2
  73. package/dist/utils/set.d.ts +2 -2
  74. package/dist/utils/uniqueBy.d.ts +2 -2
  75. package/package.json +1 -1
  76. package/dist/types/EventEmitter.d.ts +0 -25
@@ -1,9 +1,29 @@
1
1
  "use strict";
2
- function uniqueBy(arr, fn) {
3
- const set = /* @__PURE__ */ new Set();
4
- return arr.filter((el) => {
5
- const value = typeof fn === "function" ? fn(el) : el[fn];
6
- return !set.has(value) && set.add(value);
7
- });
2
+ function set(object, path, value, deleteIfUndefined = false) {
3
+ if (object == null)
4
+ return object;
5
+ const segments = path.split(/[.[\]]/g);
6
+ if (segments[0] === "")
7
+ segments.shift();
8
+ if (segments.at(-1) === "")
9
+ segments.pop();
10
+ const apply = (node) => {
11
+ if (segments.length > 1) {
12
+ const key = segments.shift();
13
+ const nextIsNumber = !Number.isNaN(Number.parseInt(segments[0], 10));
14
+ if (node[key] === void 0) {
15
+ node[key] = nextIsNumber ? [] : {};
16
+ }
17
+ apply(node[key]);
18
+ } else {
19
+ if (deleteIfUndefined && value === void 0) {
20
+ delete node[segments[0]];
21
+ return;
22
+ }
23
+ node[segments[0]] = value;
24
+ }
25
+ };
26
+ apply(object);
27
+ return object;
8
28
  }
9
- module.exports = uniqueBy;
29
+ module.exports = set;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ function uniqueBy(array, fn) {
3
+ const set = /* @__PURE__ */ new Set();
4
+ return array.filter((element) => {
5
+ const value = typeof fn === "function" ? fn(element) : element[fn];
6
+ return !set.has(value) && set.add(value);
7
+ });
8
+ }
9
+ module.exports = uniqueBy;
@@ -1,70 +1,173 @@
1
1
  "use strict";
2
- Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
- const createPersistenceAdapter = require("./index.cjs7.js");
4
- function createTemporaryFallbackExecutor(firstResolvingPromiseFn, secondResolvingPromiseFn, options) {
5
- var _a;
6
- const cacheTimeout = (_a = options === null || options === void 0 ? void 0 : options.cacheTimeout) !== null && _a !== void 0 ? _a : 0;
7
- let isResolved = false;
8
- let resolvedValue = null;
9
- let timeout = null;
10
- let secondaryPromise = null;
11
- return (...args) => {
12
- if (secondaryPromise == null) {
13
- if (timeout) {
14
- clearTimeout(timeout);
15
- timeout = null;
2
+ var __defProp = Object.defineProperty;
3
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
4
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
5
+ const ReplicatedCollection = require("./index.cjs22.js");
6
+ const createSignal = require("./index.cjs19.js");
7
+ class AutoFetchCollection extends ReplicatedCollection.default {
8
+ /**
9
+ * @param options {Object} - Options for the collection.
10
+ * @param options.fetchQueryItems {Function} - A function that fetches items from the server. It takes the selector as an argument and returns a promise that resolves to an object with an `items` property.
11
+ * @param options.purgeDelay {Number} - The delay in milliseconds before purging an item from the cache.
12
+ */
13
+ constructor(options) {
14
+ var _a;
15
+ let triggerRemoteChange;
16
+ super({
17
+ ...options,
18
+ pull: () => Promise.resolve({
19
+ items: [...this.itemsCache.values()].reduce((memo, items) => {
20
+ const newItems = [...memo];
21
+ items.forEach((item) => {
22
+ const index = newItems.findIndex((i) => i.id === item.id);
23
+ if (index === -1) {
24
+ newItems.push(item);
25
+ return;
26
+ }
27
+ newItems[index] = this.mergeItems(newItems[index], item);
28
+ });
29
+ return newItems;
30
+ }, [])
31
+ }),
32
+ registerRemoteChange: async (onChange) => {
33
+ triggerRemoteChange = onChange;
16
34
  }
17
- secondaryPromise = secondResolvingPromiseFn(...args).then((result) => {
18
- if (cacheTimeout > 0) {
19
- timeout = setTimeout(() => {
20
- isResolved = false;
21
- resolvedValue = null;
22
- secondaryPromise = null;
23
- }, cacheTimeout);
24
- }
25
- isResolved = true;
26
- resolvedValue = result;
27
- if (options === null || options === void 0 ? void 0 : options.onResolve)
28
- options.onResolve(resolvedValue);
29
- return result;
30
- });
31
- } else if (isResolved) {
32
- return secondaryPromise;
35
+ });
36
+ __publicField(this, "activeObservers", /* @__PURE__ */ new Map());
37
+ __publicField(this, "observerTimeouts", /* @__PURE__ */ new Map());
38
+ __publicField(this, "purgeDelay");
39
+ __publicField(this, "idQueryCache", /* @__PURE__ */ new Map());
40
+ __publicField(this, "itemsCache", /* @__PURE__ */ new Map());
41
+ __publicField(this, "fetchQueryItems");
42
+ __publicField(this, "triggerReload", null);
43
+ __publicField(this, "reactivityAdapter", null);
44
+ __publicField(this, "loadingSignals", /* @__PURE__ */ new Map());
45
+ __publicField(this, "isFetchingSignal");
46
+ __publicField(this, "mergeItems");
47
+ this.mergeItems = options.mergeItems ?? ((itemA, itemB) => ({ ...itemA, ...itemB }));
48
+ this.purgeDelay = options.purgeDelay ?? 1e4;
49
+ this.isFetchingSignal = createSignal((_a = options.reactivity) == null ? void 0 : _a.create(), false);
50
+ if (!triggerRemoteChange)
51
+ throw new Error("No triggerRemoteChange method found. Looks like your persistence adapter was not registered");
52
+ this.triggerReload = triggerRemoteChange;
53
+ this.reactivityAdapter = options.reactivity ?? null;
54
+ this.fetchQueryItems = options.fetchQueryItems;
55
+ this.on("observer.created", (selector) => this.handleObserverCreation(selector ?? {}));
56
+ this.on("observer.disposed", (selector) => setTimeout(() => this.handleObserverDisposal(selector ?? {}), 100));
57
+ if (options.registerRemoteChange) {
58
+ void options.registerRemoteChange(() => this.forceRefetch());
33
59
  }
34
- return firstResolvingPromiseFn(...args);
35
- };
36
- }
37
- function combinePersistenceAdapters(slowAdapter, fastAdapter) {
38
- let handleChange = null;
39
- const readExecutor = createTemporaryFallbackExecutor(() => fastAdapter.load(), () => slowAdapter.load(), {
40
- cacheTimeout: 100,
41
- onResolve: (result) => {
42
- var _a, _b, _c;
43
- if (handleChange)
44
- void handleChange();
45
- void fastAdapter.save(result.items || [], {
46
- added: ((_a = result.changes) === null || _a === void 0 ? void 0 : _a.added) || [],
47
- modified: ((_b = result.changes) === null || _b === void 0 ? void 0 : _b.modified) || [],
48
- removed: ((_c = result.changes) === null || _c === void 0 ? void 0 : _c.removed) || []
60
+ }
61
+ /**
62
+ * Registers a query manually that items should be fetched for it
63
+ * @param selector {Object} Selector of the query
64
+ */
65
+ registerQuery(selector) {
66
+ this.handleObserverCreation(selector);
67
+ }
68
+ /**
69
+ * Unregisters a query manually that items are not fetched anymore for it
70
+ * @param selector {Object} Selector of the query
71
+ */
72
+ unregisterQuery(selector) {
73
+ this.handleObserverDisposal(selector);
74
+ }
75
+ getKeyForSelector(selector) {
76
+ return JSON.stringify(selector);
77
+ }
78
+ async forceRefetch() {
79
+ return Promise.all([...this.activeObservers.values()].map(({ selector }) => this.fetchSelector(selector))).then(() => {
80
+ });
81
+ }
82
+ fetchSelector(selector) {
83
+ this.isFetchingSignal.set(true);
84
+ return this.fetchQueryItems(selector).then((response) => {
85
+ if (!response.items)
86
+ throw new Error("AutoFetchCollection currently only works with a full item response");
87
+ this.itemsCache.set(this.getKeyForSelector(selector), response.items);
88
+ response.items.forEach((item) => {
89
+ const queries = this.idQueryCache.get(item.id) ?? [];
90
+ queries.push(selector);
91
+ this.idQueryCache.set(item.id, queries);
92
+ });
93
+ this.setLoading(selector, true);
94
+ this.once("persistence.received", () => {
95
+ this.setLoading(selector, false);
49
96
  });
97
+ if (!this.triggerReload)
98
+ throw new Error("No triggerReload method found. Looks like your persistence adapter was not registered");
99
+ void this.triggerReload();
100
+ }).catch((error) => {
101
+ this.emit("persistence.error", error);
102
+ }).finally(() => {
103
+ this.isFetchingSignal.set(false);
104
+ });
105
+ }
106
+ handleObserverCreation(selector) {
107
+ var _a;
108
+ const activeObservers = ((_a = this.activeObservers.get(this.getKeyForSelector(selector))) == null ? void 0 : _a.count) ?? 0;
109
+ this.activeObservers.set(this.getKeyForSelector(selector), {
110
+ selector,
111
+ count: activeObservers + 1
112
+ });
113
+ const timeout = this.observerTimeouts.get(this.getKeyForSelector(selector));
114
+ if (timeout)
115
+ clearTimeout(timeout);
116
+ if (activeObservers === 0)
117
+ void this.fetchSelector(selector);
118
+ }
119
+ handleObserverDisposal(selector) {
120
+ var _a;
121
+ const currentObservers = ((_a = this.activeObservers.get(this.getKeyForSelector(selector))) == null ? void 0 : _a.count) ?? 0;
122
+ const activeObservers = currentObservers - 1;
123
+ if (activeObservers > 0) {
124
+ this.activeObservers.set(this.getKeyForSelector(selector), {
125
+ selector,
126
+ count: activeObservers
127
+ });
128
+ return;
129
+ }
130
+ const timeout = this.observerTimeouts.get(this.getKeyForSelector(selector));
131
+ if (timeout)
132
+ clearTimeout(timeout);
133
+ const removeObserver = () => {
134
+ this.activeObservers.delete(this.getKeyForSelector(selector));
135
+ this.itemsCache.delete(this.getKeyForSelector(selector));
136
+ if (!this.triggerReload)
137
+ throw new Error("No triggerReload method found. Looks like your persistence adapter was not registered");
138
+ void this.triggerReload();
139
+ };
140
+ if (this.purgeDelay === 0) {
141
+ removeObserver();
142
+ return;
143
+ }
144
+ this.observerTimeouts.set(this.getKeyForSelector(selector), setTimeout(removeObserver, this.purgeDelay));
145
+ }
146
+ ensureSignal(selector) {
147
+ if (!this.reactivityAdapter)
148
+ throw new Error("No reactivity adapter found");
149
+ if (!this.loadingSignals.has(this.getKeyForSelector(selector))) {
150
+ this.loadingSignals.set(this.getKeyForSelector(selector), createSignal(this.reactivityAdapter.create(), false));
50
151
  }
51
- });
52
- return createPersistenceAdapter({
53
- async register(onChange) {
54
- handleChange = onChange;
55
- await Promise.all([slowAdapter.register(onChange), fastAdapter.register(onChange)]);
56
- },
57
- async load() {
58
- const promise = readExecutor();
59
- return promise;
60
- },
61
- async save(items, changes) {
62
- await Promise.all([
63
- fastAdapter.save(items, changes),
64
- slowAdapter.save(items, changes)
65
- ]);
152
+ return this.loadingSignals.get(this.getKeyForSelector(selector));
153
+ }
154
+ setLoading(selector, value) {
155
+ const signal = this.ensureSignal(selector);
156
+ signal.set(value);
157
+ }
158
+ /**
159
+ * Indicates wether a query is currently been loaded
160
+ * ⚡️ this function is reactive!
161
+ * @param selector {Object} Selector of the query
162
+ * @returns The loading state
163
+ */
164
+ isLoading(selector) {
165
+ const isPushing = this.isPushing();
166
+ if (!selector) {
167
+ return this.isFetchingSignal.get() || isPushing;
66
168
  }
67
- });
169
+ const signal = this.ensureSignal(selector);
170
+ return signal.get() || isPushing;
171
+ }
68
172
  }
69
- exports.createTemporaryFallbackExecutor = createTemporaryFallbackExecutor;
70
- exports.default = combinePersistenceAdapters;
173
+ module.exports = AutoFetchCollection;
@@ -1,5 +1,68 @@
1
1
  "use strict";
2
- function createIndexProvider(definition) {
3
- return definition;
2
+ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
+ const createPersistenceAdapter = require("./index.cjs8.js");
4
+ function createTemporaryFallbackExecutor(firstResolvingPromiseFunction, secondResolvingPromiseFunction, options) {
5
+ const cacheTimeout = options == null ? void 0 : options.cacheTimeout;
6
+ let isResolved = false;
7
+ let resolvedValue = null;
8
+ let timeout = null;
9
+ let secondaryPromise = null;
10
+ return (...args) => {
11
+ if (secondaryPromise == null) {
12
+ if (timeout) {
13
+ clearTimeout(timeout);
14
+ timeout = null;
15
+ }
16
+ secondaryPromise = secondResolvingPromiseFunction(...args).then((result) => {
17
+ {
18
+ timeout = setTimeout(() => {
19
+ isResolved = false;
20
+ resolvedValue = null;
21
+ secondaryPromise = null;
22
+ }, cacheTimeout);
23
+ }
24
+ isResolved = true;
25
+ resolvedValue = result;
26
+ options.onResolve(resolvedValue);
27
+ return result;
28
+ });
29
+ } else if (isResolved) {
30
+ return secondaryPromise;
31
+ }
32
+ return firstResolvingPromiseFunction(...args);
33
+ };
4
34
  }
5
- module.exports = createIndexProvider;
35
+ function combinePersistenceAdapters(slowAdapter, fastAdapter) {
36
+ let handleChange = null;
37
+ const readExecutor = createTemporaryFallbackExecutor(() => fastAdapter.load(), () => slowAdapter.load(), {
38
+ cacheTimeout: 100,
39
+ onResolve: (result) => {
40
+ var _a, _b, _c;
41
+ if (handleChange)
42
+ void handleChange();
43
+ void fastAdapter.save(result.items || [], {
44
+ added: ((_a = result.changes) == null ? void 0 : _a.added) || [],
45
+ modified: ((_b = result.changes) == null ? void 0 : _b.modified) || [],
46
+ removed: ((_c = result.changes) == null ? void 0 : _c.removed) || []
47
+ });
48
+ }
49
+ });
50
+ return createPersistenceAdapter({
51
+ async register(onChange) {
52
+ handleChange = onChange;
53
+ await Promise.all([slowAdapter.register(onChange), fastAdapter.register(onChange)]);
54
+ },
55
+ async load() {
56
+ const promise = readExecutor();
57
+ return promise;
58
+ },
59
+ async save(items, changes) {
60
+ await Promise.all([
61
+ fastAdapter.save(items, changes),
62
+ slowAdapter.save(items, changes)
63
+ ]);
64
+ }
65
+ });
66
+ }
67
+ exports.createTemporaryFallbackExecutor = createTemporaryFallbackExecutor;
68
+ exports.default = combinePersistenceAdapters;
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- function createMemoryAdapter(definition) {
2
+ function createIndexProvider(definition) {
3
3
  return definition;
4
4
  }
5
- module.exports = createMemoryAdapter;
5
+ module.exports = createIndexProvider;
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- function createPersistenceAdapter(definition) {
2
+ function createMemoryAdapter(definition) {
3
3
  return definition;
4
4
  }
5
- module.exports = createPersistenceAdapter;
5
+ module.exports = createMemoryAdapter;
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- function createReactivityAdapter(definition) {
2
+ function createPersistenceAdapter(definition) {
3
3
  return definition;
4
4
  }
5
- module.exports = createReactivityAdapter;
5
+ module.exports = createPersistenceAdapter;
@@ -1,30 +1,5 @@
1
1
  "use strict";
2
- function isEqual(a, b) {
3
- if (Object.is(a, b))
4
- return true;
5
- if (a instanceof RegExp && b instanceof RegExp)
6
- return a.toString() === b.toString();
7
- if (a instanceof Date && b instanceof Date)
8
- return a.getTime() === b.getTime();
9
- if (typeof a !== "object")
10
- return false;
11
- if (typeof b !== "object")
12
- return false;
13
- if (a === null)
14
- return false;
15
- if (b === null)
16
- return false;
17
- const aKeys = Object.keys(a);
18
- const bKeys = Object.keys(b);
19
- if (aKeys.length !== bKeys.length)
20
- return false;
21
- for (let i = 0; i < aKeys.length; i += 1) {
22
- const key = aKeys[i];
23
- if (!bKeys.includes(key))
24
- return false;
25
- if (!isEqual(a[key], b[key]))
26
- return false;
27
- }
28
- return true;
2
+ function createReactivityAdapter(definition) {
3
+ return definition;
29
4
  }
30
- module.exports = isEqual;
5
+ module.exports = createReactivityAdapter;
package/dist/index.d.ts CHANGED
@@ -14,3 +14,5 @@ export { default as createReactivityAdapter } from './createReactivityAdapter';
14
14
  export { default as isEqual } from './utils/isEqual';
15
15
  export { default as modify } from './utils/modify';
16
16
  export { default as randomId } from './utils/randomId';
17
+ export { default as EventEmitter } from './utils/EventEmitter';
18
+ export { default as loadDeveloperTools } from './devtools';
package/dist/index.mjs CHANGED
@@ -1,24 +1,32 @@
1
- import { default as default2 } from "./index2.mjs";
2
- import { default as default3 } from "./index3.mjs";
3
- import { default as default4 } from "./index4.mjs";
4
- import { default as default5 } from "./index5.mjs";
5
- import { default as default6 } from "./index6.mjs";
6
- import { default as default7 } from "./index7.mjs";
7
- import { default as default8 } from "./index8.mjs";
8
- import { default as default9 } from "./index9.mjs";
9
- import { default as default10 } from "./index10.mjs";
10
- import { default as default11 } from "./index11.mjs";
11
- import { default as default12 } from "./index12.mjs";
1
+ import loadDeveloperTools from "./index2.mjs";
2
+ import { default as default2 } from "./index3.mjs";
3
+ import { default as default3 } from "./index4.mjs";
4
+ import { default as default4 } from "./index5.mjs";
5
+ import { default as default5 } from "./index6.mjs";
6
+ import { default as default6 } from "./index7.mjs";
7
+ import { default as default7 } from "./index8.mjs";
8
+ import { default as default8 } from "./index9.mjs";
9
+ import { default as default9 } from "./index10.mjs";
10
+ import { default as default10 } from "./index11.mjs";
11
+ import { default as default11 } from "./index12.mjs";
12
+ import { default as default12 } from "./index13.mjs";
13
+ import { default as default13 } from "./index14.mjs";
14
+ /* istanbul ignore if -- @preserve */
15
+ if (process.env.NODE_ENV !== "production") {
16
+ loadDeveloperTools();
17
+ }
12
18
  export {
13
19
  default3 as AutoFetchCollection,
14
20
  default2 as Collection,
21
+ default12 as EventEmitter,
15
22
  default4 as combinePersistenceAdapters,
16
- default12 as createIndex,
23
+ default13 as createIndex,
17
24
  default5 as createIndexProvider,
18
25
  default6 as createMemoryAdapter,
19
26
  default7 as createPersistenceAdapter,
20
27
  default8 as createReactivityAdapter,
21
28
  default9 as isEqual,
29
+ loadDeveloperTools,
22
30
  default10 as modify,
23
31
  default11 as randomId
24
32
  };
package/dist/index10.mjs CHANGED
@@ -1,9 +1,30 @@
1
- import { updateObject } from "mingo/updater";
2
- function modify(item, modifier) {
3
- const clonedItem = Object.assign({}, item);
4
- updateObject(clonedItem, modifier);
5
- return clonedItem;
1
+ function isEqual(a, b) {
2
+ if (Object.is(a, b))
3
+ return true;
4
+ if (a instanceof RegExp && b instanceof RegExp)
5
+ return a.toString() === b.toString();
6
+ if (a instanceof Date && b instanceof Date)
7
+ return a.getTime() === b.getTime();
8
+ if (typeof a !== "object")
9
+ return false;
10
+ if (typeof b !== "object")
11
+ return false;
12
+ if (a === null)
13
+ return false;
14
+ if (b === null)
15
+ return false;
16
+ const aKeys = Object.keys(a);
17
+ const bKeys = Object.keys(b);
18
+ if (aKeys.length !== bKeys.length)
19
+ return false;
20
+ for (const key of aKeys) {
21
+ if (!bKeys.includes(key))
22
+ return false;
23
+ if (!isEqual(a[key], b[key]))
24
+ return false;
25
+ }
26
+ return true;
6
27
  }
7
28
  export {
8
- modify as default
29
+ isEqual as default
9
30
  };
package/dist/index11.mjs CHANGED
@@ -1,6 +1,9 @@
1
- function randomId() {
2
- return Math.floor(Math.random() * 1e17).toString(16);
1
+ import { update } from "mingo";
2
+ function modify(item, modifier) {
3
+ const clonedItem = { ...item };
4
+ update(clonedItem, modifier);
5
+ return clonedItem;
3
6
  }
4
7
  export {
5
- randomId as default
8
+ modify as default
6
9
  };
package/dist/index12.mjs CHANGED
@@ -1,37 +1,6 @@
1
- import createIndexProvider from "./index5.mjs";
2
- import get from "./index26.mjs";
3
- import getMatchingKeys from "./index27.mjs";
4
- import serializeValue from "./index16.mjs";
5
- function createExternalIndex(field, index) {
6
- return createIndexProvider({
7
- query(selector) {
8
- const keys = getMatchingKeys(field, selector);
9
- if (keys == null)
10
- return { matched: false };
11
- const itemPositions = keys.reduce((memo, key) => [...memo, ...index.get(key) || []], []);
12
- return {
13
- matched: true,
14
- positions: itemPositions,
15
- fields: [field]
16
- };
17
- },
18
- rebuild() {
19
- }
20
- });
21
- }
22
- function createIndex(field) {
23
- const index = /* @__PURE__ */ new Map();
24
- return Object.assign(Object.assign({}, createExternalIndex(field, index)), { rebuild(items) {
25
- index.clear();
26
- items.forEach((item, i) => {
27
- const value = serializeValue(get(item, field));
28
- const current = index.get(value) || /* @__PURE__ */ new Set();
29
- current.add(i);
30
- index.set(value, current);
31
- });
32
- } });
1
+ function randomId() {
2
+ return Math.floor(Math.random() * 1e17).toString(16);
33
3
  }
34
4
  export {
35
- createExternalIndex,
36
- createIndex as default
5
+ randomId as default
37
6
  };