@signaldb/core 1.7.2 → 1.8.1

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 (95) hide show
  1. package/dist/.vite/manifest.json +88 -59
  2. package/dist/AutoFetchCollection.d.ts +3 -3
  3. package/dist/Collection/Cursor.d.ts +10 -7
  4. package/dist/Collection/index.d.ts +27 -11
  5. package/dist/Collection/types.d.ts +1 -0
  6. package/dist/ReplicatedCollection.d.ts +4 -4
  7. package/dist/index.cjs.js +26 -27
  8. package/dist/index.d.ts +1 -1
  9. package/dist/index.mjs +14 -28
  10. package/dist/index10.cjs.js +265 -0
  11. package/dist/index10.mjs +263 -28
  12. package/dist/index11.cjs.js +125 -0
  13. package/dist/index11.mjs +124 -12
  14. package/dist/index12.cjs.js +15 -0
  15. package/dist/index12.mjs +14 -5
  16. package/dist/index13.cjs.js +23 -0
  17. package/dist/index13.mjs +22 -133
  18. package/dist/index14.cjs.js +12 -0
  19. package/dist/index14.mjs +11 -73
  20. package/dist/index15.cjs.js +22 -0
  21. package/dist/index15.mjs +21 -10
  22. package/dist/index16.cjs.js +33 -0
  23. package/dist/index16.mjs +32 -27
  24. package/dist/index17.cjs.js +15 -0
  25. package/dist/index17.mjs +14 -142
  26. package/dist/index18.cjs.js +98 -0
  27. package/dist/index18.mjs +97 -7
  28. package/dist/index19.cjs.js +11 -0
  29. package/dist/index19.mjs +10 -41
  30. package/dist/index2.cjs.js +23 -0
  31. package/dist/index2.mjs +22 -260
  32. package/dist/index20.cjs.js +45 -0
  33. package/dist/index20.mjs +44 -15
  34. package/dist/index21.cjs.js +45 -0
  35. package/dist/index21.mjs +44 -26
  36. package/dist/index22.cjs.js +69 -0
  37. package/dist/index22.mjs +66 -77
  38. package/dist/index23.cjs.js +778 -0
  39. package/dist/index23.mjs +775 -81
  40. package/dist/index24.cjs.js +11 -0
  41. package/dist/index24.mjs +10 -18
  42. package/dist/index25.cjs.js +81 -0
  43. package/dist/index25.mjs +80 -29
  44. package/dist/index26.cjs.js +98 -0
  45. package/dist/index26.mjs +96 -8
  46. package/dist/index27.cjs.js +154 -0
  47. package/dist/index27.mjs +153 -7
  48. package/dist/index28.cjs.js +11 -0
  49. package/dist/index28.mjs +10 -29
  50. package/dist/index29.cjs.js +11 -0
  51. package/dist/index29.mjs +10 -42
  52. package/dist/index3.cjs.js +19 -0
  53. package/dist/index3.mjs +18 -788
  54. package/dist/index4.cjs.js +37 -0
  55. package/dist/index4.mjs +36 -167
  56. package/dist/index5.cjs.js +35 -0
  57. package/dist/index5.mjs +34 -67
  58. package/dist/index6.cjs.js +47 -0
  59. package/dist/index6.mjs +46 -5
  60. package/dist/index7.cjs.js +33 -0
  61. package/dist/index7.mjs +32 -5
  62. package/dist/index8.cjs.js +19 -0
  63. package/dist/index8.mjs +18 -5
  64. package/dist/index9.cjs.js +139 -0
  65. package/dist/index9.mjs +138 -5
  66. package/dist/utils/deepClone.d.ts +1 -1
  67. package/package.json +3 -3
  68. package/dist/index.cjs10.js +0 -29
  69. package/dist/index.cjs11.js +0 -12
  70. package/dist/index.cjs12.js +0 -5
  71. package/dist/index.cjs13.js +0 -133
  72. package/dist/index.cjs14.js +0 -74
  73. package/dist/index.cjs15.js +0 -10
  74. package/dist/index.cjs16.js +0 -27
  75. package/dist/index.cjs17.js +0 -142
  76. package/dist/index.cjs18.js +0 -7
  77. package/dist/index.cjs19.js +0 -42
  78. package/dist/index.cjs2.js +0 -261
  79. package/dist/index.cjs20.js +0 -15
  80. package/dist/index.cjs21.js +0 -26
  81. package/dist/index.cjs22.js +0 -79
  82. package/dist/index.cjs23.js +0 -84
  83. package/dist/index.cjs24.js +0 -18
  84. package/dist/index.cjs25.js +0 -29
  85. package/dist/index.cjs26.js +0 -9
  86. package/dist/index.cjs27.js +0 -7
  87. package/dist/index.cjs28.js +0 -29
  88. package/dist/index.cjs29.js +0 -42
  89. package/dist/index.cjs3.js +0 -788
  90. package/dist/index.cjs4.js +0 -167
  91. package/dist/index.cjs5.js +0 -68
  92. package/dist/index.cjs6.js +0 -5
  93. package/dist/index.cjs7.js +0 -5
  94. package/dist/index.cjs8.js +0 -5
  95. package/dist/index.cjs9.js +0 -5
package/dist/index22.mjs CHANGED
@@ -1,79 +1,68 @@
1
- import intersection from "./index27.mjs";
2
- function getMergedIndexInfo(indexProviders, selector) {
3
- return indexProviders.reduce((memo, indexProvider) => {
4
- const info = indexProvider.query(selector);
5
- if (!info.matched)
6
- return memo;
7
- const optimizedSelector = info.keepSelector ? memo.optimizedSelector : Object.fromEntries(Object.entries(memo.optimizedSelector).filter(([key]) => !info.fields.includes(key)));
8
- return {
9
- matched: true,
10
- positions: [...new Set(memo.matched ? intersection(memo.positions, info.positions) : info.positions)],
11
- optimizedSelector
12
- };
13
- }, {
14
- matched: false,
15
- positions: [],
16
- optimizedSelector: { ...selector }
17
- });
1
+ import get from "./index2.mjs";
2
+ import serializeValue from "./index15.mjs";
3
+ import createIndexProvider from "./index19.mjs";
4
+ import getMatchingKeys from "./index21.mjs";
5
+ //#region src/Collection/createIndex.ts
6
+ /**
7
+ * creates an index for a specific field but uses an external map to store the index
8
+ * @param field name of the field
9
+ * @param index the external map to use for the index
10
+ * @returns an index provider to pass to the `indices` option of the collection constructor
11
+ */
12
+ function createExternalIndex(field, index) {
13
+ return createIndexProvider({
14
+ query(selector) {
15
+ if (!Object.hasOwnProperty.call(selector, field)) return { matched: false };
16
+ const fieldSelector = selector[field];
17
+ const filteresForNull = fieldSelector == null || fieldSelector.$exists === false;
18
+ const keys = filteresForNull ? {
19
+ include: null,
20
+ exclude: [...index.keys()].filter((key) => key != null)
21
+ } : getMatchingKeys(field, selector);
22
+ if (keys.include == null && keys.exclude == null) return { matched: false };
23
+ let includedPositions = [];
24
+ if (keys.include == null) for (const set of index.values()) for (const pos of set) includedPositions.push(pos);
25
+ else for (const key of keys.include) {
26
+ const posSet = index.get(key);
27
+ if (posSet) for (const pos of posSet) includedPositions.push(pos);
28
+ }
29
+ if (keys.exclude != null) {
30
+ const excludeSet = /* @__PURE__ */ new Set();
31
+ for (const key of keys.exclude) {
32
+ const posSet = index.get(key);
33
+ if (posSet) for (const pos of posSet) excludeSet.add(pos);
34
+ }
35
+ includedPositions = includedPositions.filter((pos) => !excludeSet.has(pos));
36
+ }
37
+ return {
38
+ matched: true,
39
+ positions: includedPositions,
40
+ fields: [field],
41
+ keepSelector: filteresForNull
42
+ };
43
+ },
44
+ rebuild() {}
45
+ });
18
46
  }
19
- function getIndexInfo(indexProviders, selector) {
20
- if (selector == null || Object.keys(selector).length <= 0) {
21
- return { matched: false, positions: [], optimizedSelector: selector };
22
- }
23
- const { $and, $or, ...rest } = selector;
24
- const flatInfo = getMergedIndexInfo(indexProviders, rest);
25
- let { matched, positions } = flatInfo;
26
- const newSelector = flatInfo.optimizedSelector;
27
- if (Array.isArray($and)) {
28
- const $andNew = [];
29
- for (const sel of $and) {
30
- const { matched: selMatched, positions: selPositions, optimizedSelector } = getIndexInfo(indexProviders, sel);
31
- if (selMatched) {
32
- positions = matched ? intersection(positions, selPositions) : selPositions;
33
- matched = true;
34
- if (Object.keys(optimizedSelector).length > 0) {
35
- $andNew.push(optimizedSelector);
36
- }
37
- } else {
38
- $andNew.push(sel);
39
- }
40
- }
41
- if ($andNew.length > 0)
42
- newSelector.$and = $andNew;
43
- }
44
- if (Array.isArray($or)) {
45
- const $orNew = [];
46
- const matchedBefore = matched;
47
- const positionsBefore = positions;
48
- let hasNonIndexField = false;
49
- for (const sel of $or) {
50
- const { matched: selMatched, positions: selPositions, optimizedSelector } = getIndexInfo(indexProviders, sel);
51
- if (selMatched) {
52
- positions = [.../* @__PURE__ */ new Set([...positions, ...selPositions])];
53
- matched = true;
54
- if (Object.keys(optimizedSelector).length > 0) {
55
- $orNew.push(optimizedSelector);
56
- }
57
- } else {
58
- $orNew.push(sel);
59
- hasNonIndexField = true;
60
- }
61
- }
62
- if ($orNew.length > 0)
63
- newSelector.$or = $orNew;
64
- if (hasNonIndexField) {
65
- newSelector.$or = $or;
66
- matched = matchedBefore;
67
- positions = positionsBefore;
68
- }
69
- }
70
- return {
71
- matched,
72
- positions: positions || [],
73
- optimizedSelector: newSelector
74
- };
47
+ /**
48
+ * creates an index for a specific field
49
+ * @param field name of the field
50
+ * @returns an index provider to pass to the `indices` option of the collection constructor
51
+ */
52
+ function createIndex(field) {
53
+ const index = /* @__PURE__ */ new Map();
54
+ return {
55
+ ...createExternalIndex(field, index),
56
+ rebuild(items) {
57
+ index.clear();
58
+ items.forEach((item, i) => {
59
+ const value = serializeValue(get(item, field));
60
+ const current = index.get(value) || /* @__PURE__ */ new Set();
61
+ current.add(i);
62
+ index.set(value, current);
63
+ });
64
+ }
65
+ };
75
66
  }
76
- export {
77
- getIndexInfo as default,
78
- getMergedIndexInfo
79
- };
67
+ //#endregion
68
+ export { createExternalIndex, createIndex as default };