@signalium/query 1.0.12 → 1.0.14

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 (151) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/cjs/development/index.js +2985 -0
  3. package/dist/cjs/development/index.js.map +1 -0
  4. package/dist/cjs/development/react/index.js +52 -0
  5. package/dist/cjs/development/react/index.js.map +1 -0
  6. package/dist/cjs/{stores/shared.js → development/shared-5acOO-tS.js} +11 -14
  7. package/dist/cjs/development/shared-5acOO-tS.js.map +1 -0
  8. package/dist/cjs/development/stores/async.js +304 -0
  9. package/dist/cjs/development/stores/async.js.map +1 -0
  10. package/dist/cjs/development/stores/sync.js +214 -0
  11. package/dist/cjs/development/stores/sync.js.map +1 -0
  12. package/dist/cjs/production/index.js +2985 -0
  13. package/dist/cjs/production/index.js.map +1 -0
  14. package/dist/cjs/production/package.json +3 -0
  15. package/dist/cjs/production/react/index.js +52 -0
  16. package/dist/cjs/production/react/index.js.map +1 -0
  17. package/dist/cjs/production/shared-5acOO-tS.js +20 -0
  18. package/dist/cjs/production/shared-5acOO-tS.js.map +1 -0
  19. package/dist/cjs/production/stores/async.js +304 -0
  20. package/dist/cjs/production/stores/async.js.map +1 -0
  21. package/dist/cjs/production/stores/sync.js +214 -0
  22. package/dist/cjs/production/stores/sync.js.map +1 -0
  23. package/dist/esm/EntityMap.d.ts +22 -0
  24. package/dist/esm/EntityMap.d.ts.map +1 -1
  25. package/dist/esm/MutationResult.d.ts +43 -0
  26. package/dist/esm/MutationResult.d.ts.map +1 -0
  27. package/dist/esm/QueryClient.d.ts +31 -2
  28. package/dist/esm/QueryClient.d.ts.map +1 -1
  29. package/dist/esm/development/index.js +2985 -0
  30. package/dist/esm/development/index.js.map +1 -0
  31. package/dist/esm/development/react/index.js +52 -0
  32. package/dist/esm/development/react/index.js.map +1 -0
  33. package/dist/esm/development/shared-Br5plsKm.js +21 -0
  34. package/dist/esm/development/shared-Br5plsKm.js.map +1 -0
  35. package/dist/esm/development/stores/async.js +304 -0
  36. package/dist/esm/development/stores/async.js.map +1 -0
  37. package/dist/esm/development/stores/sync.js +214 -0
  38. package/dist/esm/development/stores/sync.js.map +1 -0
  39. package/dist/esm/index.d.ts +4 -0
  40. package/dist/esm/index.d.ts.map +1 -1
  41. package/dist/esm/mutation.d.ts +82 -0
  42. package/dist/esm/mutation.d.ts.map +1 -0
  43. package/dist/esm/parseEntities.d.ts.map +1 -1
  44. package/dist/esm/production/index.js +2985 -0
  45. package/dist/esm/production/index.js.map +1 -0
  46. package/dist/esm/production/react/index.js +52 -0
  47. package/dist/esm/production/react/index.js.map +1 -0
  48. package/dist/esm/production/shared-Br5plsKm.js +21 -0
  49. package/dist/esm/production/shared-Br5plsKm.js.map +1 -0
  50. package/dist/esm/production/stores/async.js +304 -0
  51. package/dist/esm/production/stores/async.js.map +1 -0
  52. package/dist/esm/production/stores/sync.js +214 -0
  53. package/dist/esm/production/stores/sync.js.map +1 -0
  54. package/dist/esm/proxy.d.ts +6 -5
  55. package/dist/esm/proxy.d.ts.map +1 -1
  56. package/dist/esm/query.d.ts +3 -1
  57. package/dist/esm/query.d.ts.map +1 -1
  58. package/dist/esm/typeDefs.d.ts +5 -3
  59. package/dist/esm/typeDefs.d.ts.map +1 -1
  60. package/dist/esm/types.d.ts +72 -5
  61. package/dist/esm/types.d.ts.map +1 -1
  62. package/dist/esm/utils.d.ts +35 -0
  63. package/dist/esm/utils.d.ts.map +1 -1
  64. package/package.json +55 -21
  65. package/stores/async.js +1 -1
  66. package/stores/sync.js +1 -1
  67. package/dist/cjs/EntityMap.js +0 -103
  68. package/dist/cjs/EntityMap.js.map +0 -1
  69. package/dist/cjs/MemoryEvictionManager.js +0 -56
  70. package/dist/cjs/MemoryEvictionManager.js.map +0 -1
  71. package/dist/cjs/NetworkManager.js +0 -125
  72. package/dist/cjs/NetworkManager.js.map +0 -1
  73. package/dist/cjs/QueryClient.js +0 -162
  74. package/dist/cjs/QueryClient.js.map +0 -1
  75. package/dist/cjs/QueryResult.js +0 -920
  76. package/dist/cjs/QueryResult.js.map +0 -1
  77. package/dist/cjs/RefetchManager.js +0 -88
  78. package/dist/cjs/RefetchManager.js.map +0 -1
  79. package/dist/cjs/errors.js +0 -129
  80. package/dist/cjs/errors.js.map +0 -1
  81. package/dist/cjs/index.js +0 -43
  82. package/dist/cjs/index.js.map +0 -1
  83. package/dist/cjs/parseEntities.js +0 -142
  84. package/dist/cjs/parseEntities.js.map +0 -1
  85. package/dist/cjs/pathInterpolator.js +0 -69
  86. package/dist/cjs/pathInterpolator.js.map +0 -1
  87. package/dist/cjs/proxy.js +0 -263
  88. package/dist/cjs/proxy.js.map +0 -1
  89. package/dist/cjs/query.js +0 -184
  90. package/dist/cjs/query.js.map +0 -1
  91. package/dist/cjs/react/index.js +0 -6
  92. package/dist/cjs/react/index.js.map +0 -1
  93. package/dist/cjs/react/use-query.js +0 -56
  94. package/dist/cjs/react/use-query.js.map +0 -1
  95. package/dist/cjs/stores/async.js +0 -344
  96. package/dist/cjs/stores/async.js.map +0 -1
  97. package/dist/cjs/stores/shared.js.map +0 -1
  98. package/dist/cjs/stores/sync.js +0 -240
  99. package/dist/cjs/stores/sync.js.map +0 -1
  100. package/dist/cjs/tsconfig.cjs.tsbuildinfo +0 -1
  101. package/dist/cjs/type-utils.js +0 -3
  102. package/dist/cjs/type-utils.js.map +0 -1
  103. package/dist/cjs/typeDefs.js +0 -620
  104. package/dist/cjs/typeDefs.js.map +0 -1
  105. package/dist/cjs/types.js +0 -33
  106. package/dist/cjs/types.js.map +0 -1
  107. package/dist/cjs/utils.js +0 -23
  108. package/dist/cjs/utils.js.map +0 -1
  109. package/dist/esm/EntityMap.js +0 -99
  110. package/dist/esm/EntityMap.js.map +0 -1
  111. package/dist/esm/MemoryEvictionManager.js +0 -51
  112. package/dist/esm/MemoryEvictionManager.js.map +0 -1
  113. package/dist/esm/NetworkManager.js +0 -120
  114. package/dist/esm/NetworkManager.js.map +0 -1
  115. package/dist/esm/QueryClient.js +0 -154
  116. package/dist/esm/QueryClient.js.map +0 -1
  117. package/dist/esm/QueryResult.js +0 -916
  118. package/dist/esm/QueryResult.js.map +0 -1
  119. package/dist/esm/RefetchManager.js +0 -83
  120. package/dist/esm/RefetchManager.js.map +0 -1
  121. package/dist/esm/errors.js +0 -125
  122. package/dist/esm/errors.js.map +0 -1
  123. package/dist/esm/index.js +0 -8
  124. package/dist/esm/index.js.map +0 -1
  125. package/dist/esm/parseEntities.js +0 -135
  126. package/dist/esm/parseEntities.js.map +0 -1
  127. package/dist/esm/pathInterpolator.js +0 -66
  128. package/dist/esm/pathInterpolator.js.map +0 -1
  129. package/dist/esm/proxy.js +0 -254
  130. package/dist/esm/proxy.js.map +0 -1
  131. package/dist/esm/query.js +0 -177
  132. package/dist/esm/query.js.map +0 -1
  133. package/dist/esm/react/index.js +0 -2
  134. package/dist/esm/react/index.js.map +0 -1
  135. package/dist/esm/react/use-query.js +0 -53
  136. package/dist/esm/react/use-query.js.map +0 -1
  137. package/dist/esm/stores/async.js +0 -340
  138. package/dist/esm/stores/async.js.map +0 -1
  139. package/dist/esm/stores/shared.js +0 -13
  140. package/dist/esm/stores/shared.js.map +0 -1
  141. package/dist/esm/stores/sync.js +0 -234
  142. package/dist/esm/stores/sync.js.map +0 -1
  143. package/dist/esm/type-utils.js +0 -2
  144. package/dist/esm/type-utils.js.map +0 -1
  145. package/dist/esm/typeDefs.js +0 -606
  146. package/dist/esm/typeDefs.js.map +0 -1
  147. package/dist/esm/types.js +0 -30
  148. package/dist/esm/types.js.map +0 -1
  149. package/dist/esm/utils.js +0 -20
  150. package/dist/esm/utils.js.map +0 -1
  151. /package/dist/cjs/{package.json → development/package.json} +0 -0
@@ -1,103 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.EntityStore = void 0;
4
- const signalium_1 = require("signalium");
5
- const proxy_js_1 = require("./proxy.js");
6
- class EntityStore {
7
- map = new Map();
8
- queryClient;
9
- constructor(queryClient) {
10
- this.queryClient = queryClient;
11
- }
12
- hasEntity(key) {
13
- return this.map.has(key);
14
- }
15
- getEntity(key) {
16
- return this.map.get(key);
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
- }
34
- hydratePreloadedEntity(key, shape) {
35
- const record = this.getEntity(key);
36
- if (record === undefined) {
37
- throw new Error(`Entity ${key} not found`);
38
- }
39
- record.proxy = this.createEntityProxy(record, shape);
40
- return record;
41
- }
42
- setPreloadedEntity(key, data) {
43
- const record = {
44
- key,
45
- data,
46
- notifier: (0, signalium_1.notifier)(),
47
- cache: new Map(),
48
- id: undefined,
49
- proxy: undefined,
50
- entityRefs: undefined,
51
- };
52
- this.map.set(key, record);
53
- return record;
54
- }
55
- setEntity(key, obj, shape, entityRefs) {
56
- let record = this.map.get(key);
57
- if (record === undefined) {
58
- record = this.setPreloadedEntity(key, obj);
59
- record.proxy = this.createEntityProxy(record, shape);
60
- }
61
- else {
62
- record.data = (0, proxy_js_1.mergeValues)(record.data, obj);
63
- record.notifier.notify();
64
- record.cache.clear();
65
- }
66
- record.entityRefs = entityRefs;
67
- return record;
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
- }
101
- }
102
- exports.EntityStore = EntityStore;
103
- //# sourceMappingURL=EntityMap.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EntityMap.js","sourceRoot":"","sources":["../../src/EntityMap.ts"],"names":[],"mappings":"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"}
@@ -1,56 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.NoOpMemoryEvictionManager = exports.MemoryEvictionManager = void 0;
4
- const EVICTION_INTERVAL = 60 * 1000; // 1 minute
5
- // Memory eviction manager - uses a single interval with rotating sets to avoid timeout overhead
6
- class MemoryEvictionManager {
7
- queryClient;
8
- multiplier;
9
- intervalId;
10
- currentFlush = new Set(); // Queries to evict on next tick
11
- nextFlush = new Set(); // Queries to evict on tick after next
12
- constructor(queryClient, multiplier = 1) {
13
- this.queryClient = queryClient;
14
- this.multiplier = multiplier;
15
- this.intervalId = setInterval(this.tick, EVICTION_INTERVAL * this.multiplier);
16
- }
17
- scheduleEviction(queryKey) {
18
- // Add to nextFlush so it waits at least one full interval
19
- // This prevents immediate eviction if scheduled right before a tick
20
- this.nextFlush.add(queryKey);
21
- }
22
- cancelEviction(queryKey) {
23
- // Remove from both sets to handle reactivation
24
- this.currentFlush.delete(queryKey);
25
- this.nextFlush.delete(queryKey);
26
- }
27
- tick = () => {
28
- if (!this.queryClient)
29
- return;
30
- // Evict all queries in currentFlush
31
- for (const queryKey of this.currentFlush) {
32
- this.queryClient.queryInstances.delete(queryKey);
33
- }
34
- // Rotate: currentFlush becomes nextFlush, nextFlush becomes empty
35
- this.currentFlush = this.nextFlush;
36
- this.nextFlush = new Set();
37
- };
38
- destroy() {
39
- clearInterval(this.intervalId);
40
- }
41
- }
42
- exports.MemoryEvictionManager = MemoryEvictionManager;
43
- // No-op implementation for SSR environments where timers are not needed
44
- class NoOpMemoryEvictionManager {
45
- scheduleEviction(_queryKey) {
46
- // No-op: do nothing
47
- }
48
- cancelEviction(_queryKey) {
49
- // No-op: do nothing
50
- }
51
- destroy() {
52
- // No-op: do nothing
53
- }
54
- }
55
- exports.NoOpMemoryEvictionManager = NoOpMemoryEvictionManager;
56
- //# sourceMappingURL=MemoryEvictionManager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MemoryEvictionManager.js","sourceRoot":"","sources":["../../src/MemoryEvictionManager.ts"],"names":[],"mappings":";;;AAEA,MAAM,iBAAiB,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW;AAEhD,gGAAgG;AAChG,MAAa,qBAAqB;IAMtB;IACA;IANF,UAAU,CAAiB;IAC3B,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC,CAAC,gCAAgC;IAClE,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC,CAAC,sCAAsC;IAE7E,YACU,WAAwB,EACxB,aAAqB,CAAC;QADtB,gBAAW,GAAX,WAAW,CAAa;QACxB,eAAU,GAAV,UAAU,CAAY;QAE9B,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;IAChF,CAAC;IAED,gBAAgB,CAAC,QAAgB;QAC/B,0DAA0D;QAC1D,oEAAoE;QACpE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAED,cAAc,CAAC,QAAgB;QAC7B,+CAA+C;QAC/C,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACnC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC;IAEO,IAAI,GAAG,GAAG,EAAE;QAClB,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO;QAE9B,oCAAoC;QACpC,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACzC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACnD,CAAC;QAED,kEAAkE;QAClE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC;QACnC,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;IAC7B,CAAC,CAAC;IAEF,OAAO;QACL,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACjC,CAAC;CACF;AAxCD,sDAwCC;AAED,wEAAwE;AACxE,MAAa,yBAAyB;IACpC,gBAAgB,CAAC,SAAiB;QAChC,oBAAoB;IACtB,CAAC;IAED,cAAc,CAAC,SAAiB;QAC9B,oBAAoB;IACtB,CAAC;IAED,OAAO;QACL,oBAAoB;IACtB,CAAC;CACF;AAZD,8DAYC"}
@@ -1,125 +0,0 @@
1
- "use strict";
2
- /**
3
- * NetworkManager - Tracks network connectivity status
4
- *
5
- * Features:
6
- * - Signal-based reactivity for online/offline status
7
- * - Automatic detection using navigator.onLine and events
8
- * - Manual override capability for testing and custom scenarios
9
- * - Platform-agnostic (works in browser and React Native)
10
- */
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.NetworkManagerContext = exports.defaultNetworkManager = exports.NoOpNetworkManager = exports.NetworkManager = void 0;
13
- const signalium_1 = require("signalium");
14
- class NetworkManager {
15
- onlineSignal;
16
- manualOverride = undefined;
17
- eventListenersAttached = false;
18
- constructor(initialStatus) {
19
- // Initialize with manual status if provided, otherwise detect from environment
20
- const initialOnlineStatus = initialStatus ?? this.detectOnlineStatus();
21
- this.onlineSignal = (0, signalium_1.signal)(initialOnlineStatus);
22
- // Automatically attach event listeners if in browser/React Native environment
23
- if (this.canAttachListeners()) {
24
- this.attachEventListeners();
25
- }
26
- }
27
- /**
28
- * Returns true if the network is currently online
29
- */
30
- get isOnline() {
31
- // Manual override takes precedence
32
- if (this.manualOverride !== undefined) {
33
- return this.manualOverride;
34
- }
35
- return this.onlineSignal.value;
36
- }
37
- /**
38
- * Manually set the network status (useful for testing)
39
- */
40
- setNetworkStatus(online) {
41
- this.manualOverride = online;
42
- this.onlineSignal.value = online;
43
- }
44
- /**
45
- * Clear manual override and return to automatic detection
46
- */
47
- clearManualOverride() {
48
- this.manualOverride = undefined;
49
- this.onlineSignal.value = this.detectOnlineStatus();
50
- }
51
- /**
52
- * Get the reactive signal for online status
53
- * This allows reactive functions to depend on network status
54
- */
55
- getOnlineSignal() {
56
- return this.onlineSignal;
57
- }
58
- /**
59
- * Detect current online status from the environment
60
- */
61
- detectOnlineStatus() {
62
- // Check if we're in a browser or React Native environment
63
- if (typeof navigator !== 'undefined' && 'onLine' in navigator) {
64
- return navigator.onLine;
65
- }
66
- // Default to online if we can't detect (e.g., Node.js/SSR)
67
- return true;
68
- }
69
- /**
70
- * Check if we can attach event listeners (browser or React Native)
71
- */
72
- canAttachListeners() {
73
- return typeof window !== 'undefined' && typeof window.addEventListener === 'function';
74
- }
75
- /**
76
- * Attach event listeners for online/offline events
77
- */
78
- attachEventListeners() {
79
- if (this.eventListenersAttached) {
80
- return;
81
- }
82
- const handleOnline = () => {
83
- if (this.manualOverride === undefined) {
84
- this.onlineSignal.value = true;
85
- }
86
- };
87
- const handleOffline = () => {
88
- if (this.manualOverride === undefined) {
89
- this.onlineSignal.value = false;
90
- }
91
- };
92
- window.addEventListener('online', handleOnline);
93
- window.addEventListener('offline', handleOffline);
94
- this.eventListenersAttached = true;
95
- // Note: In a real production app, you might want to provide a cleanup method
96
- // to remove these listeners, but for a singleton that lives for the app lifetime,
97
- // it's not critical
98
- }
99
- }
100
- exports.NetworkManager = NetworkManager;
101
- // No-op implementation for SSR environments where network status tracking is not needed
102
- class NoOpNetworkManager {
103
- static onlineSignal = (0, signalium_1.signal)(true);
104
- get isOnline() {
105
- return true;
106
- }
107
- setNetworkStatus(_online) {
108
- // No-op: do nothing
109
- }
110
- clearManualOverride() {
111
- // No-op: do nothing
112
- }
113
- getOnlineSignal() {
114
- return NoOpNetworkManager.onlineSignal;
115
- }
116
- destroy() {
117
- // No-op: do nothing
118
- }
119
- }
120
- exports.NoOpNetworkManager = NoOpNetworkManager;
121
- // Default singleton instance for convenience
122
- exports.defaultNetworkManager = new NetworkManager();
123
- // Context for dependency injection
124
- exports.NetworkManagerContext = (0, signalium_1.context)(exports.defaultNetworkManager);
125
- //# sourceMappingURL=NetworkManager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"NetworkManager.js","sourceRoot":"","sources":["../../src/NetworkManager.ts"],"names":[],"mappings":"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"}
@@ -1,162 +0,0 @@
1
- "use strict";
2
- /**
3
- * Query Client with Entity Caching and Deduplication
4
- *
5
- * Features:
6
- * - Global entity map for deduplication
7
- * - Entity definitions with cached sub-entity paths
8
- * - Eager entity discovery and caching
9
- * - Permanent proxy cache for entities
10
- * - Response caching for offline access
11
- * - Signalium-based reactivity for entity updates
12
- * - Self-contained validator (no external dependencies except Signalium)
13
- */
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.QueryClientContext = exports.QueryClient = exports.queryKeyFor = void 0;
16
- exports.extractParamsForKey = extractParamsForKey;
17
- exports.addOptimisticInsert = addOptimisticInsert;
18
- exports.removeOptimisticInsert = removeOptimisticInsert;
19
- const signalium_1 = require("signalium");
20
- const utils_1 = require("signalium/utils");
21
- const EntityMap_js_1 = require("./EntityMap.js");
22
- const NetworkManager_js_1 = require("./NetworkManager.js");
23
- const QueryResult_js_1 = require("./QueryResult.js");
24
- const RefetchManager_js_1 = require("./RefetchManager.js");
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
- */
61
- const queryKeyFor = (queryDef, params) => {
62
- return (0, utils_1.hashValue)([queryDef.id, queryDef.shapeKey, params]);
63
- };
64
- exports.queryKeyFor = queryKeyFor;
65
- class QueryClient {
66
- store;
67
- context;
68
- entityMap;
69
- queryInstances = new Map();
70
- memoryEvictionManager;
71
- refetchManager;
72
- networkManager;
73
- isServer;
74
- constructor(store, context = { fetch, log: console }, networkManager, memoryEvictionManager, refetchManager) {
75
- this.store = store;
76
- this.context = context;
77
- this.memoryEvictionManager =
78
- memoryEvictionManager ?? new MemoryEvictionManager_js_1.MemoryEvictionManager(this, this.context.evictionMultiplier);
79
- this.refetchManager = refetchManager ?? new RefetchManager_js_1.RefetchManager(this.context.refetchMultiplier);
80
- this.networkManager = networkManager ?? new NetworkManager_js_1.NetworkManager();
81
- this.isServer = typeof window === 'undefined';
82
- this.entityMap = new EntityMap_js_1.EntityStore(this);
83
- }
84
- getContext() {
85
- return this.context;
86
- }
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;
90
- // QueryStore expects the base definition structure
91
- this.store.saveQuery(queryDef, queryKey, data, updatedAt, clonedRefs, extra);
92
- }
93
- activateQuery(queryInstance) {
94
- const { def, queryKey, storageKey } = queryInstance;
95
- // Use storageKey for cache operations (store.activateQuery)
96
- this.store.activateQuery(def, storageKey);
97
- // Only add to refetch manager if it's not a stream
98
- if (def.type !== "stream" /* QueryType.Stream */ && def.cache?.refetchInterval) {
99
- this.refetchManager.addQuery(queryInstance);
100
- }
101
- // Use queryKey for instance eviction (memoryEvictionManager)
102
- this.memoryEvictionManager.cancelEviction(queryKey);
103
- }
104
- loadCachedQuery(queryDef, queryKey) {
105
- return this.store.loadQuery(queryDef, queryKey, this.entityMap);
106
- }
107
- deleteCachedQuery(queryKey) {
108
- this.store.deleteQuery(queryKey);
109
- }
110
- /**
111
- * Loads a query from the document store and returns a QueryResult
112
- * that triggers fetches and prepopulates with cached data
113
- */
114
- getQuery(queryDef, params) {
115
- const queryKey = (0, exports.queryKeyFor)(queryDef, params);
116
- let queryInstance = this.queryInstances.get(queryKey);
117
- // Create a new instance if it doesn't exist
118
- if (queryInstance === undefined) {
119
- queryInstance = new QueryResult_js_1.QueryResultImpl(queryDef, this, queryKey, params);
120
- // Store for future use
121
- this.queryInstances.set(queryKey, queryInstance);
122
- }
123
- return queryInstance;
124
- }
125
- hydrateEntity(key, shape) {
126
- return this.entityMap.hydratePreloadedEntity(key, shape);
127
- }
128
- saveEntity(key, obj, shape, entityRefs) {
129
- // console.log('saveEntity', key, JSON.stringify(obj, null, 2), shape, entityRefs, new Error().stack);
130
- const record = this.entityMap.setEntity(key, obj, shape, entityRefs);
131
- // console.log('saveEntity record', JSON.stringify(obj, null, 2), new Error().stack);
132
- this.store.saveEntity(key, obj, entityRefs);
133
- return record;
134
- }
135
- getNestedEntityRefIds(key, refIds) {
136
- return this.entityMap.getNestedEntityRefIds(key, refIds);
137
- }
138
- destroy() {
139
- this.refetchManager.destroy();
140
- this.memoryEvictionManager.destroy();
141
- }
142
- }
143
- exports.QueryClient = QueryClient;
144
- exports.QueryClientContext = (0, signalium_1.context)(undefined);
145
- /**
146
- * Add an optimistic insert to a query result.
147
- * The insert will be automatically removed when:
148
- * - The entity appears in a refetched response
149
- * - The entity appears as a stream orphan
150
- * - refetch() is called
151
- */
152
- function addOptimisticInsert(query, insert) {
153
- query.addOptimisticInsert(insert);
154
- }
155
- /**
156
- * Remove an optimistic insert from a query result.
157
- * This is a no-op if the insert has already been removed.
158
- */
159
- function removeOptimisticInsert(query, insert) {
160
- query.removeOptimisticInsert(insert);
161
- }
162
- //# sourceMappingURL=QueryClient.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"QueryClient.js","sourceRoot":"","sources":["../../src/QueryClient.ts"],"names":[],"mappings":"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"}