@signalium/query 1.0.9 → 1.0.11

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 (88) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/dist/cjs/EntityMap.js +63 -6
  3. package/dist/cjs/EntityMap.js.map +1 -1
  4. package/dist/cjs/QueryClient.js +71 -6
  5. package/dist/cjs/QueryClient.js.map +1 -1
  6. package/dist/cjs/QueryResult.js +506 -86
  7. package/dist/cjs/QueryResult.js.map +1 -1
  8. package/dist/cjs/QueryStore.js +0 -500
  9. package/dist/cjs/QueryStore.js.map +1 -1
  10. package/dist/cjs/errors.js +23 -0
  11. package/dist/cjs/errors.js.map +1 -1
  12. package/dist/cjs/index.js +3 -1
  13. package/dist/cjs/index.js.map +1 -1
  14. package/dist/cjs/parseEntities.js +14 -2
  15. package/dist/cjs/parseEntities.js.map +1 -1
  16. package/dist/cjs/proxy.js +76 -19
  17. package/dist/cjs/proxy.js.map +1 -1
  18. package/dist/cjs/query.js +65 -1
  19. package/dist/cjs/query.js.map +1 -1
  20. package/dist/cjs/react/use-query.js.map +1 -1
  21. package/dist/cjs/stores/async.js +38 -3
  22. package/dist/cjs/stores/async.js.map +1 -1
  23. package/dist/cjs/stores/shared.js +5 -1
  24. package/dist/cjs/stores/shared.js.map +1 -1
  25. package/dist/cjs/stores/sync.js +46 -10
  26. package/dist/cjs/stores/sync.js.map +1 -1
  27. package/dist/cjs/typeDefs.js +228 -5
  28. package/dist/cjs/typeDefs.js.map +1 -1
  29. package/dist/cjs/types.js.map +1 -1
  30. package/dist/esm/EntityMap.d.ts +12 -4
  31. package/dist/esm/EntityMap.d.ts.map +1 -1
  32. package/dist/esm/EntityMap.js +64 -7
  33. package/dist/esm/EntityMap.js.map +1 -1
  34. package/dist/esm/QueryClient.d.ts +66 -13
  35. package/dist/esm/QueryClient.d.ts.map +1 -1
  36. package/dist/esm/QueryClient.js +68 -6
  37. package/dist/esm/QueryClient.js.map +1 -1
  38. package/dist/esm/QueryResult.d.ts +42 -8
  39. package/dist/esm/QueryResult.d.ts.map +1 -1
  40. package/dist/esm/QueryResult.js +510 -90
  41. package/dist/esm/QueryResult.js.map +1 -1
  42. package/dist/esm/QueryStore.d.ts +8 -104
  43. package/dist/esm/QueryStore.d.ts.map +1 -1
  44. package/dist/esm/QueryStore.js +1 -491
  45. package/dist/esm/QueryStore.js.map +1 -1
  46. package/dist/esm/errors.d.ts.map +1 -1
  47. package/dist/esm/errors.js +23 -0
  48. package/dist/esm/errors.js.map +1 -1
  49. package/dist/esm/index.d.ts +1 -1
  50. package/dist/esm/index.d.ts.map +1 -1
  51. package/dist/esm/index.js +1 -1
  52. package/dist/esm/index.js.map +1 -1
  53. package/dist/esm/parseEntities.d.ts.map +1 -1
  54. package/dist/esm/parseEntities.js +14 -2
  55. package/dist/esm/parseEntities.js.map +1 -1
  56. package/dist/esm/proxy.d.ts +2 -1
  57. package/dist/esm/proxy.d.ts.map +1 -1
  58. package/dist/esm/proxy.js +76 -20
  59. package/dist/esm/proxy.js.map +1 -1
  60. package/dist/esm/query.d.ts +29 -11
  61. package/dist/esm/query.d.ts.map +1 -1
  62. package/dist/esm/query.js +65 -1
  63. package/dist/esm/query.js.map +1 -1
  64. package/dist/esm/react/use-query.d.ts +2 -2
  65. package/dist/esm/react/use-query.d.ts.map +1 -1
  66. package/dist/esm/react/use-query.js.map +1 -1
  67. package/dist/esm/stores/async.d.ts +5 -3
  68. package/dist/esm/stores/async.d.ts.map +1 -1
  69. package/dist/esm/stores/async.js +39 -4
  70. package/dist/esm/stores/async.js.map +1 -1
  71. package/dist/esm/stores/shared.d.ts +2 -0
  72. package/dist/esm/stores/shared.d.ts.map +1 -1
  73. package/dist/esm/stores/shared.js +2 -0
  74. package/dist/esm/stores/shared.js.map +1 -1
  75. package/dist/esm/stores/sync.d.ts +6 -4
  76. package/dist/esm/stores/sync.d.ts.map +1 -1
  77. package/dist/esm/stores/sync.js +40 -5
  78. package/dist/esm/stores/sync.js.map +1 -1
  79. package/dist/esm/type-utils.d.ts +4 -0
  80. package/dist/esm/type-utils.d.ts.map +1 -1
  81. package/dist/esm/typeDefs.d.ts +81 -3
  82. package/dist/esm/typeDefs.d.ts.map +1 -1
  83. package/dist/esm/typeDefs.js +224 -4
  84. package/dist/esm/typeDefs.js.map +1 -1
  85. package/dist/esm/types.d.ts +99 -28
  86. package/dist/esm/types.d.ts.map +1 -1
  87. package/dist/esm/types.js.map +1 -1
  88. package/package.json +3 -3
package/CHANGELOG.md CHANGED
@@ -1,5 +1,26 @@
1
1
  # @signalium/query
2
2
 
3
+ ## 1.0.11
4
+
5
+ ### Patch Changes
6
+
7
+ - 7f94377: Fixup format registry and add global format type registry
8
+ - d1f9def: Add ability to defined cached methods to entities
9
+ - e0a4844: Add ability for Entities to subscribe to streams when in use
10
+ - 6b961f0: Add support for Signal query parameters and debounced updates
11
+ - Updated dependencies [2cf6766]
12
+ - signalium@2.1.4
13
+
14
+ ## 1.0.10
15
+
16
+ ### Patch Changes
17
+
18
+ - 24495ac: Add t.enum.caseInsensitive()
19
+ - 047d4dc: Allow all primitive types in search params
20
+ - 9b2c2f3: Add extend to Entity and Object typedefs
21
+ - c8fc4b8: Allow typenames to be optional on entities
22
+ - 0245106: Add streamOrphans and optimisticInserts
23
+
3
24
  ## 1.0.9
4
25
 
5
26
  ### Patch Changes
@@ -5,42 +5,99 @@ const signalium_1 = require("signalium");
5
5
  const proxy_js_1 = require("./proxy.js");
6
6
  class EntityStore {
7
7
  map = new Map();
8
+ queryClient;
9
+ constructor(queryClient) {
10
+ this.queryClient = queryClient;
11
+ }
8
12
  hasEntity(key) {
9
13
  return this.map.has(key);
10
14
  }
11
15
  getEntity(key) {
12
16
  return this.map.get(key);
13
17
  }
18
+ getNestedEntityRefIds(key, refIds) {
19
+ const record = this.getEntity(key);
20
+ if (record === undefined) {
21
+ throw new Error(`Entity ${key} not found when getting nested entity ref ids`);
22
+ }
23
+ refIds.add(key);
24
+ // Entangle the signal value. Whenever the signal value is updated, refIds
25
+ // will also be updated, so no need for a second signal.
26
+ record.notifier.consume();
27
+ if (record.entityRefs !== undefined) {
28
+ for (const ref of record.entityRefs) {
29
+ this.getNestedEntityRefIds(ref, refIds);
30
+ }
31
+ }
32
+ return refIds;
33
+ }
14
34
  hydratePreloadedEntity(key, shape) {
15
35
  const record = this.getEntity(key);
16
36
  if (record === undefined) {
17
37
  throw new Error(`Entity ${key} not found`);
18
38
  }
19
- record.proxy = (0, proxy_js_1.createEntityProxy)(key, record, shape);
39
+ record.proxy = this.createEntityProxy(record, shape);
20
40
  return record;
21
41
  }
22
- setPreloadedEntity(key, obj) {
42
+ setPreloadedEntity(key, data) {
23
43
  const record = {
24
44
  key,
25
- signal: (0, signalium_1.signal)(obj, { equals: false }),
45
+ data,
46
+ notifier: (0, signalium_1.notifier)(),
26
47
  cache: new Map(),
48
+ id: undefined,
27
49
  proxy: undefined,
50
+ entityRefs: undefined,
28
51
  };
29
52
  this.map.set(key, record);
30
53
  return record;
31
54
  }
32
- setEntity(key, obj, shape) {
55
+ setEntity(key, obj, shape, entityRefs) {
33
56
  let record = this.map.get(key);
34
57
  if (record === undefined) {
35
58
  record = this.setPreloadedEntity(key, obj);
36
- record.proxy = (0, proxy_js_1.createEntityProxy)(key, record, shape);
59
+ record.proxy = this.createEntityProxy(record, shape);
37
60
  }
38
61
  else {
39
- record.signal.update(value => (0, proxy_js_1.mergeValues)(value, obj));
62
+ record.data = (0, proxy_js_1.mergeValues)(record.data, obj);
63
+ record.notifier.notify();
40
64
  record.cache.clear();
41
65
  }
66
+ record.entityRefs = entityRefs;
42
67
  return record;
43
68
  }
69
+ createEntityProxy(record, shape) {
70
+ const idField = shape.idField;
71
+ if (idField === undefined) {
72
+ throw new Error(`Entity id field is required ${shape.typenameValue}`);
73
+ }
74
+ const id = record.data[idField];
75
+ if (typeof id !== 'string' && typeof id !== 'number') {
76
+ console.log(record.data);
77
+ throw new Error(`Entity id must be string or number: ${shape.typenameValue}`);
78
+ }
79
+ record.id = id;
80
+ let entityRelay;
81
+ const entityConfig = shape._entityConfig;
82
+ if (entityConfig?.stream) {
83
+ entityRelay = (0, signalium_1.relay)(state => {
84
+ const context = this.queryClient.getContext();
85
+ const onUpdate = (update) => {
86
+ const currentValue = record.data;
87
+ const merged = (0, proxy_js_1.mergeValues)(currentValue, update);
88
+ record.data = merged;
89
+ record.notifier.notify();
90
+ record.cache.clear();
91
+ };
92
+ const unsubscribe = entityConfig.stream.subscribe(context, id, onUpdate);
93
+ // Set initial value to the proxy - this resolves the relay promise
94
+ // Proxy should always exist at this point since it's created before relay access
95
+ state.value = record.proxy;
96
+ return unsubscribe;
97
+ });
98
+ }
99
+ return (0, proxy_js_1.createEntityProxy)(record.key, record, shape, entityRelay, this.queryClient);
100
+ }
44
101
  }
45
102
  exports.EntityStore = EntityStore;
46
103
  //# sourceMappingURL=EntityMap.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"EntityMap.js","sourceRoot":"","sources":["../../src/EntityMap.ts"],"names":[],"mappings":";;;AAAA,yCAA2C;AAE3C,yCAA4D;AAW5D,MAAa,WAAW;IACd,GAAG,GAAG,IAAI,GAAG,EAAgD,CAAC;IAEtE,SAAS,CAAC,GAAW;QACnB,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,SAAS,CAAC,GAAW;QACnB,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,sBAAsB,CAAC,GAAW,EAAE,KAAgB;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,UAAU,GAAG,YAAY,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,CAAC,KAAK,GAAG,IAAA,4BAAiB,EAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QAErD,OAAO,MAAsB,CAAC;IAChC,CAAC;IAED,kBAAkB,CAAC,GAAW,EAAE,GAA4B;QAC1D,MAAM,MAAM,GAA0B;YACpC,GAAG;YACH,MAAM,EAAE,IAAA,kBAAM,EAAC,GAAG,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;YACtC,KAAK,EAAE,IAAI,GAAG,EAAE;YAChB,KAAK,EAAE,SAAS;SACjB,CAAC;QAEF,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAE1B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,SAAS,CAAC,GAAW,EAAE,GAA4B,EAAE,KAAgB;QACnE,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAE/B,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAE3C,MAAM,CAAC,KAAK,GAAG,IAAA,4BAAiB,EAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,IAAA,sBAAW,EAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;YACvD,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;QAED,OAAO,MAAsB,CAAC;IAChC,CAAC;CACF;AAjDD,kCAiDC"}
1
+ {"version":3,"file":"EntityMap.js","sourceRoot":"","sources":["../../src/EntityMap.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,9 @@
13
13
  */
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.QueryClientContext = exports.QueryClient = exports.queryKeyFor = void 0;
16
+ exports.extractParamsForKey = extractParamsForKey;
17
+ exports.addOptimisticInsert = addOptimisticInsert;
18
+ exports.removeOptimisticInsert = removeOptimisticInsert;
16
19
  const signalium_1 = require("signalium");
17
20
  const utils_1 = require("signalium/utils");
18
21
  const EntityMap_js_1 = require("./EntityMap.js");
@@ -20,6 +23,41 @@ const NetworkManager_js_1 = require("./NetworkManager.js");
20
23
  const QueryResult_js_1 = require("./QueryResult.js");
21
24
  const RefetchManager_js_1 = require("./RefetchManager.js");
22
25
  const MemoryEvictionManager_js_1 = require("./MemoryEvictionManager.js");
26
+ /**
27
+ * Checks if a value is a Signal instance
28
+ */
29
+ function isSignal(value) {
30
+ return typeof value === 'object' && value !== null;
31
+ }
32
+ /**
33
+ * Extracts actual values from params that may contain Signals.
34
+ */
35
+ function extractParamsForKey(params) {
36
+ if (params === undefined) {
37
+ return undefined;
38
+ }
39
+ const extracted = {};
40
+ for (const [key, value] of Object.entries(params)) {
41
+ if (isSignal(value)) {
42
+ extracted[key] = value.value;
43
+ }
44
+ else {
45
+ extracted[key] = value;
46
+ }
47
+ }
48
+ return extracted;
49
+ }
50
+ /**
51
+ * Computes the query key for instance lookup. This is used for two different keys:
52
+ *
53
+ * - Query instance key
54
+ * - Query storage key
55
+ *
56
+ * Instance keys are created by passing in the query definition and parameters WITHOUT
57
+ * extracting the Signal values, whereas storage keys are created by extracting the Signal values.
58
+ * This way, we can reuse the same instance for given Signals, but different underlying values
59
+ * will be stored and put into the LRU cache separately.
60
+ */
23
61
  const queryKeyFor = (queryDef, params) => {
24
62
  return (0, utils_1.hashValue)([queryDef.id, queryDef.shapeKey, params]);
25
63
  };
@@ -27,7 +65,7 @@ exports.queryKeyFor = queryKeyFor;
27
65
  class QueryClient {
28
66
  store;
29
67
  context;
30
- entityMap = new EntityMap_js_1.EntityStore();
68
+ entityMap;
31
69
  queryInstances = new Map();
32
70
  memoryEvictionManager;
33
71
  refetchManager;
@@ -41,21 +79,26 @@ class QueryClient {
41
79
  this.refetchManager = refetchManager ?? new RefetchManager_js_1.RefetchManager(this.context.refetchMultiplier);
42
80
  this.networkManager = networkManager ?? new NetworkManager_js_1.NetworkManager();
43
81
  this.isServer = typeof window === 'undefined';
82
+ this.entityMap = new EntityMap_js_1.EntityStore(this);
44
83
  }
45
84
  getContext() {
46
85
  return this.context;
47
86
  }
48
- saveQueryData(queryDef, queryKey, data, updatedAt, entityRefs) {
87
+ saveQueryData(queryDef, queryKey, data, updatedAt, entityRefs, extra) {
88
+ // Clone entityRefs to avoid mutation in setValue
89
+ const clonedRefs = entityRefs !== undefined ? new Set(entityRefs) : undefined;
49
90
  // QueryStore expects the base definition structure
50
- this.store.saveQuery(queryDef, queryKey, data, updatedAt, entityRefs);
91
+ this.store.saveQuery(queryDef, queryKey, data, updatedAt, clonedRefs, extra);
51
92
  }
52
93
  activateQuery(queryInstance) {
53
- const { def, queryKey } = queryInstance;
54
- this.store.activateQuery(def, queryKey);
94
+ const { def, queryKey, storageKey } = queryInstance;
95
+ // Use storageKey for cache operations (store.activateQuery)
96
+ this.store.activateQuery(def, storageKey);
55
97
  // Only add to refetch manager if it's not a stream
56
98
  if (def.type !== "stream" /* QueryType.Stream */ && def.cache?.refetchInterval) {
57
99
  this.refetchManager.addQuery(queryInstance);
58
100
  }
101
+ // Use queryKey for instance eviction (memoryEvictionManager)
59
102
  this.memoryEvictionManager.cancelEviction(queryKey);
60
103
  }
61
104
  loadCachedQuery(queryDef, queryKey) {
@@ -80,10 +123,15 @@ class QueryClient {
80
123
  return this.entityMap.hydratePreloadedEntity(key, shape);
81
124
  }
82
125
  saveEntity(key, obj, shape, entityRefs) {
83
- const record = this.entityMap.setEntity(key, obj, shape);
126
+ // console.log('saveEntity', key, JSON.stringify(obj, null, 2), shape, entityRefs, new Error().stack);
127
+ const record = this.entityMap.setEntity(key, obj, shape, entityRefs);
128
+ // console.log('saveEntity record', JSON.stringify(obj, null, 2), new Error().stack);
84
129
  this.store.saveEntity(key, obj, entityRefs);
85
130
  return record;
86
131
  }
132
+ getNestedEntityRefIds(key, refIds) {
133
+ return this.entityMap.getNestedEntityRefIds(key, refIds);
134
+ }
87
135
  destroy() {
88
136
  this.refetchManager.destroy();
89
137
  this.memoryEvictionManager.destroy();
@@ -91,4 +139,21 @@ class QueryClient {
91
139
  }
92
140
  exports.QueryClient = QueryClient;
93
141
  exports.QueryClientContext = (0, signalium_1.context)(undefined);
142
+ /**
143
+ * Add an optimistic insert to a query result.
144
+ * The insert will be automatically removed when:
145
+ * - The entity appears in a refetched response
146
+ * - The entity appears as a stream orphan
147
+ * - refetch() is called
148
+ */
149
+ function addOptimisticInsert(query, insert) {
150
+ query.addOptimisticInsert(insert);
151
+ }
152
+ /**
153
+ * Remove an optimistic insert from a query result.
154
+ * This is a no-op if the insert has already been removed.
155
+ */
156
+ function removeOptimisticInsert(query, insert) {
157
+ query.removeOptimisticInsert(insert);
158
+ }
94
159
  //# sourceMappingURL=QueryClient.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"QueryClient.js","sourceRoot":"","sources":["../../src/QueryClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"QueryClient.js","sourceRoot":"","sources":["../../src/QueryClient.ts"],"names":[],"mappings":"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"}