@signaldb/core 1.8.0 → 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 (89) hide show
  1. package/dist/.vite/manifest.json +88 -60
  2. package/dist/ReplicatedCollection.d.ts +1 -1
  3. package/dist/index.cjs.js +26 -27
  4. package/dist/index.mjs +14 -28
  5. package/dist/index10.cjs.js +265 -0
  6. package/dist/index10.mjs +263 -28
  7. package/dist/index11.cjs.js +125 -0
  8. package/dist/index11.mjs +124 -12
  9. package/dist/index12.cjs.js +15 -0
  10. package/dist/index12.mjs +14 -5
  11. package/dist/index13.cjs.js +23 -0
  12. package/dist/index13.mjs +22 -133
  13. package/dist/index14.cjs.js +12 -0
  14. package/dist/index14.mjs +11 -73
  15. package/dist/index15.cjs.js +22 -0
  16. package/dist/index15.mjs +21 -10
  17. package/dist/index16.cjs.js +33 -0
  18. package/dist/index16.mjs +32 -27
  19. package/dist/index17.cjs.js +15 -0
  20. package/dist/index17.mjs +14 -41
  21. package/dist/index18.cjs.js +98 -0
  22. package/dist/index18.mjs +97 -142
  23. package/dist/index19.cjs.js +11 -0
  24. package/dist/index19.mjs +10 -7
  25. package/dist/index2.cjs.js +23 -0
  26. package/dist/index2.mjs +22 -266
  27. package/dist/index20.cjs.js +45 -0
  28. package/dist/index20.mjs +44 -15
  29. package/dist/index21.cjs.js +45 -0
  30. package/dist/index21.mjs +44 -26
  31. package/dist/index22.cjs.js +69 -0
  32. package/dist/index22.mjs +66 -77
  33. package/dist/index23.cjs.js +778 -0
  34. package/dist/index23.mjs +775 -81
  35. package/dist/index24.cjs.js +11 -0
  36. package/dist/index24.mjs +10 -18
  37. package/dist/index25.cjs.js +81 -0
  38. package/dist/index25.mjs +80 -29
  39. package/dist/index26.cjs.js +98 -0
  40. package/dist/index26.mjs +96 -8
  41. package/dist/index27.cjs.js +154 -0
  42. package/dist/index27.mjs +153 -7
  43. package/dist/index28.cjs.js +11 -0
  44. package/dist/index28.mjs +10 -29
  45. package/dist/index29.cjs.js +11 -0
  46. package/dist/index29.mjs +10 -42
  47. package/dist/index3.cjs.js +19 -0
  48. package/dist/index3.mjs +18 -814
  49. package/dist/index4.cjs.js +37 -0
  50. package/dist/index4.mjs +36 -167
  51. package/dist/index5.cjs.js +35 -0
  52. package/dist/index5.mjs +34 -67
  53. package/dist/index6.cjs.js +47 -0
  54. package/dist/index6.mjs +46 -5
  55. package/dist/index7.cjs.js +33 -0
  56. package/dist/index7.mjs +32 -5
  57. package/dist/index8.cjs.js +19 -0
  58. package/dist/index8.mjs +18 -5
  59. package/dist/index9.cjs.js +139 -0
  60. package/dist/index9.mjs +138 -5
  61. package/package.json +1 -1
  62. package/dist/index.cjs10.js +0 -29
  63. package/dist/index.cjs11.js +0 -12
  64. package/dist/index.cjs12.js +0 -5
  65. package/dist/index.cjs13.js +0 -133
  66. package/dist/index.cjs14.js +0 -74
  67. package/dist/index.cjs15.js +0 -10
  68. package/dist/index.cjs16.js +0 -27
  69. package/dist/index.cjs17.js +0 -42
  70. package/dist/index.cjs18.js +0 -142
  71. package/dist/index.cjs19.js +0 -7
  72. package/dist/index.cjs2.js +0 -267
  73. package/dist/index.cjs20.js +0 -15
  74. package/dist/index.cjs21.js +0 -26
  75. package/dist/index.cjs22.js +0 -79
  76. package/dist/index.cjs23.js +0 -84
  77. package/dist/index.cjs24.js +0 -18
  78. package/dist/index.cjs25.js +0 -29
  79. package/dist/index.cjs26.js +0 -9
  80. package/dist/index.cjs27.js +0 -7
  81. package/dist/index.cjs28.js +0 -29
  82. package/dist/index.cjs29.js +0 -42
  83. package/dist/index.cjs3.js +0 -814
  84. package/dist/index.cjs4.js +0 -167
  85. package/dist/index.cjs5.js +0 -68
  86. package/dist/index.cjs6.js +0 -5
  87. package/dist/index.cjs7.js +0 -5
  88. package/dist/index.cjs8.js +0 -5
  89. 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 };