@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
package/dist/cjs/types.js DELETED
@@ -1,33 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RECORD_KEY = exports.ARRAY_KEY = exports.NetworkMode = exports.RefetchInterval = void 0;
4
- // ================================
5
- // Type Definitions
6
- // ================================
7
- var RefetchInterval;
8
- (function (RefetchInterval) {
9
- RefetchInterval[RefetchInterval["Every1Second"] = 1000] = "Every1Second";
10
- RefetchInterval[RefetchInterval["Every5Seconds"] = 5000] = "Every5Seconds";
11
- RefetchInterval[RefetchInterval["Every10Seconds"] = 10000] = "Every10Seconds";
12
- RefetchInterval[RefetchInterval["Every30Seconds"] = 30000] = "Every30Seconds";
13
- RefetchInterval[RefetchInterval["Every1Minute"] = 60000] = "Every1Minute";
14
- RefetchInterval[RefetchInterval["Every5Minutes"] = 300000] = "Every5Minutes";
15
- })(RefetchInterval || (exports.RefetchInterval = RefetchInterval = {}));
16
- var NetworkMode;
17
- (function (NetworkMode) {
18
- /**
19
- * Always fetch regardless of network status
20
- */
21
- NetworkMode["Always"] = "always";
22
- /**
23
- * Only fetch when online (default)
24
- */
25
- NetworkMode["Online"] = "online";
26
- /**
27
- * Fetch if cached data exists, even when offline
28
- */
29
- NetworkMode["OfflineFirst"] = "offlineFirst";
30
- })(NetworkMode || (exports.NetworkMode = NetworkMode = {}));
31
- exports.ARRAY_KEY = Symbol('array');
32
- exports.RECORD_KEY = Symbol('record');
33
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";;;AAIA,mCAAmC;AACnC,mBAAmB;AACnB,mCAAmC;AAEnC,IAAY,eAOX;AAPD,WAAY,eAAe;IACzB,wEAAmB,CAAA;IACnB,0EAAoB,CAAA;IACpB,6EAAsB,CAAA;IACtB,6EAAsB,CAAA;IACtB,yEAAoB,CAAA;IACpB,4EAAsB,CAAA;AACxB,CAAC,EAPW,eAAe,+BAAf,eAAe,QAO1B;AAED,IAAY,WAaX;AAbD,WAAY,WAAW;IACrB;;OAEG;IACH,gCAAiB,CAAA;IACjB;;OAEG;IACH,gCAAiB,CAAA;IACjB;;OAEG;IACH,4CAA6B,CAAA;AAC/B,CAAC,EAbW,WAAW,2BAAX,WAAW,QAatB;AAwFY,QAAA,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;AAC5B,QAAA,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC"}
package/dist/cjs/utils.js DELETED
@@ -1,23 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.typeMaskOf = typeMaskOf;
4
- const isArray = Array.isArray;
5
- function typeMaskOf(value) {
6
- if (value === null)
7
- return 2 /* Mask.NULL */;
8
- switch (typeof value) {
9
- case 'number':
10
- return 4 /* Mask.NUMBER */;
11
- case 'string':
12
- return 8 /* Mask.STRING */;
13
- case 'boolean':
14
- return 16 /* Mask.BOOLEAN */;
15
- case 'undefined':
16
- return 1 /* Mask.UNDEFINED */;
17
- case 'object':
18
- return isArray(value) ? 64 /* Mask.ARRAY */ : 32 /* Mask.OBJECT */;
19
- default:
20
- throw new Error(`Invalid type: ${typeof value}`);
21
- }
22
- }
23
- //# sourceMappingURL=utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":";;AAIA,gCAiBC;AAnBD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;AAE9B,SAAgB,UAAU,CAAC,KAAc;IACvC,IAAI,KAAK,KAAK,IAAI;QAAE,yBAAiB;IAErC,QAAQ,OAAO,KAAK,EAAE,CAAC;QACrB,KAAK,QAAQ;YACX,2BAAmB;QACrB,KAAK,QAAQ;YACX,2BAAmB;QACrB,KAAK,SAAS;YACZ,6BAAoB;QACtB,KAAK,WAAW;YACd,8BAAsB;QACxB,KAAK,QAAQ;YACX,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,qBAAY,CAAC,qBAAY,CAAC;QACnD;YACE,MAAM,IAAI,KAAK,CAAC,iBAAiB,OAAO,KAAK,EAAE,CAAC,CAAC;IACrD,CAAC;AACH,CAAC"}
@@ -1,99 +0,0 @@
1
- import { relay, notifier } from 'signalium';
2
- import { createEntityProxy, mergeValues } from './proxy.js';
3
- export class EntityStore {
4
- map = new Map();
5
- queryClient;
6
- constructor(queryClient) {
7
- this.queryClient = queryClient;
8
- }
9
- hasEntity(key) {
10
- return this.map.has(key);
11
- }
12
- getEntity(key) {
13
- return this.map.get(key);
14
- }
15
- getNestedEntityRefIds(key, refIds) {
16
- const record = this.getEntity(key);
17
- if (record === undefined) {
18
- throw new Error(`Entity ${key} not found when getting nested entity ref ids`);
19
- }
20
- refIds.add(key);
21
- // Entangle the signal value. Whenever the signal value is updated, refIds
22
- // will also be updated, so no need for a second signal.
23
- record.notifier.consume();
24
- if (record.entityRefs !== undefined) {
25
- for (const ref of record.entityRefs) {
26
- this.getNestedEntityRefIds(ref, refIds);
27
- }
28
- }
29
- return refIds;
30
- }
31
- hydratePreloadedEntity(key, shape) {
32
- const record = this.getEntity(key);
33
- if (record === undefined) {
34
- throw new Error(`Entity ${key} not found`);
35
- }
36
- record.proxy = this.createEntityProxy(record, shape);
37
- return record;
38
- }
39
- setPreloadedEntity(key, data) {
40
- const record = {
41
- key,
42
- data,
43
- notifier: notifier(),
44
- cache: new Map(),
45
- id: undefined,
46
- proxy: undefined,
47
- entityRefs: undefined,
48
- };
49
- this.map.set(key, record);
50
- return record;
51
- }
52
- setEntity(key, obj, shape, entityRefs) {
53
- let record = this.map.get(key);
54
- if (record === undefined) {
55
- record = this.setPreloadedEntity(key, obj);
56
- record.proxy = this.createEntityProxy(record, shape);
57
- }
58
- else {
59
- record.data = mergeValues(record.data, obj);
60
- record.notifier.notify();
61
- record.cache.clear();
62
- }
63
- record.entityRefs = entityRefs;
64
- return record;
65
- }
66
- createEntityProxy(record, shape) {
67
- const idField = shape.idField;
68
- if (idField === undefined) {
69
- throw new Error(`Entity id field is required ${shape.typenameValue}`);
70
- }
71
- const id = record.data[idField];
72
- if (typeof id !== 'string' && typeof id !== 'number') {
73
- console.log(record.data);
74
- throw new Error(`Entity id must be string or number: ${shape.typenameValue}`);
75
- }
76
- record.id = id;
77
- let entityRelay;
78
- const entityConfig = shape._entityConfig;
79
- if (entityConfig?.stream) {
80
- entityRelay = relay(state => {
81
- const context = this.queryClient.getContext();
82
- const onUpdate = (update) => {
83
- const currentValue = record.data;
84
- const merged = mergeValues(currentValue, update);
85
- record.data = merged;
86
- record.notifier.notify();
87
- record.cache.clear();
88
- };
89
- const unsubscribe = entityConfig.stream.subscribe(context, id, onUpdate);
90
- // Set initial value to the proxy - this resolves the relay promise
91
- // Proxy should always exist at this point since it's created before relay access
92
- state.value = record.proxy;
93
- return unsubscribe;
94
- });
95
- }
96
- return createEntityProxy(record.key, record, shape, entityRelay, this.queryClient);
97
- }
98
- }
99
- //# 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,51 +0,0 @@
1
- const EVICTION_INTERVAL = 60 * 1000; // 1 minute
2
- // Memory eviction manager - uses a single interval with rotating sets to avoid timeout overhead
3
- export class MemoryEvictionManager {
4
- queryClient;
5
- multiplier;
6
- intervalId;
7
- currentFlush = new Set(); // Queries to evict on next tick
8
- nextFlush = new Set(); // Queries to evict on tick after next
9
- constructor(queryClient, multiplier = 1) {
10
- this.queryClient = queryClient;
11
- this.multiplier = multiplier;
12
- this.intervalId = setInterval(this.tick, EVICTION_INTERVAL * this.multiplier);
13
- }
14
- scheduleEviction(queryKey) {
15
- // Add to nextFlush so it waits at least one full interval
16
- // This prevents immediate eviction if scheduled right before a tick
17
- this.nextFlush.add(queryKey);
18
- }
19
- cancelEviction(queryKey) {
20
- // Remove from both sets to handle reactivation
21
- this.currentFlush.delete(queryKey);
22
- this.nextFlush.delete(queryKey);
23
- }
24
- tick = () => {
25
- if (!this.queryClient)
26
- return;
27
- // Evict all queries in currentFlush
28
- for (const queryKey of this.currentFlush) {
29
- this.queryClient.queryInstances.delete(queryKey);
30
- }
31
- // Rotate: currentFlush becomes nextFlush, nextFlush becomes empty
32
- this.currentFlush = this.nextFlush;
33
- this.nextFlush = new Set();
34
- };
35
- destroy() {
36
- clearInterval(this.intervalId);
37
- }
38
- }
39
- // No-op implementation for SSR environments where timers are not needed
40
- export class NoOpMemoryEvictionManager {
41
- scheduleEviction(_queryKey) {
42
- // No-op: do nothing
43
- }
44
- cancelEviction(_queryKey) {
45
- // No-op: do nothing
46
- }
47
- destroy() {
48
- // No-op: do nothing
49
- }
50
- }
51
- //# 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,MAAM,OAAO,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;AAED,wEAAwE;AACxE,MAAM,OAAO,yBAAyB;IACpC,gBAAgB,CAAC,SAAiB;QAChC,oBAAoB;IACtB,CAAC;IAED,cAAc,CAAC,SAAiB;QAC9B,oBAAoB;IACtB,CAAC;IAED,OAAO;QACL,oBAAoB;IACtB,CAAC;CACF"}
@@ -1,120 +0,0 @@
1
- /**
2
- * NetworkManager - Tracks network connectivity status
3
- *
4
- * Features:
5
- * - Signal-based reactivity for online/offline status
6
- * - Automatic detection using navigator.onLine and events
7
- * - Manual override capability for testing and custom scenarios
8
- * - Platform-agnostic (works in browser and React Native)
9
- */
10
- import { signal, context } from 'signalium';
11
- export class NetworkManager {
12
- onlineSignal;
13
- manualOverride = undefined;
14
- eventListenersAttached = false;
15
- constructor(initialStatus) {
16
- // Initialize with manual status if provided, otherwise detect from environment
17
- const initialOnlineStatus = initialStatus ?? this.detectOnlineStatus();
18
- this.onlineSignal = signal(initialOnlineStatus);
19
- // Automatically attach event listeners if in browser/React Native environment
20
- if (this.canAttachListeners()) {
21
- this.attachEventListeners();
22
- }
23
- }
24
- /**
25
- * Returns true if the network is currently online
26
- */
27
- get isOnline() {
28
- // Manual override takes precedence
29
- if (this.manualOverride !== undefined) {
30
- return this.manualOverride;
31
- }
32
- return this.onlineSignal.value;
33
- }
34
- /**
35
- * Manually set the network status (useful for testing)
36
- */
37
- setNetworkStatus(online) {
38
- this.manualOverride = online;
39
- this.onlineSignal.value = online;
40
- }
41
- /**
42
- * Clear manual override and return to automatic detection
43
- */
44
- clearManualOverride() {
45
- this.manualOverride = undefined;
46
- this.onlineSignal.value = this.detectOnlineStatus();
47
- }
48
- /**
49
- * Get the reactive signal for online status
50
- * This allows reactive functions to depend on network status
51
- */
52
- getOnlineSignal() {
53
- return this.onlineSignal;
54
- }
55
- /**
56
- * Detect current online status from the environment
57
- */
58
- detectOnlineStatus() {
59
- // Check if we're in a browser or React Native environment
60
- if (typeof navigator !== 'undefined' && 'onLine' in navigator) {
61
- return navigator.onLine;
62
- }
63
- // Default to online if we can't detect (e.g., Node.js/SSR)
64
- return true;
65
- }
66
- /**
67
- * Check if we can attach event listeners (browser or React Native)
68
- */
69
- canAttachListeners() {
70
- return typeof window !== 'undefined' && typeof window.addEventListener === 'function';
71
- }
72
- /**
73
- * Attach event listeners for online/offline events
74
- */
75
- attachEventListeners() {
76
- if (this.eventListenersAttached) {
77
- return;
78
- }
79
- const handleOnline = () => {
80
- if (this.manualOverride === undefined) {
81
- this.onlineSignal.value = true;
82
- }
83
- };
84
- const handleOffline = () => {
85
- if (this.manualOverride === undefined) {
86
- this.onlineSignal.value = false;
87
- }
88
- };
89
- window.addEventListener('online', handleOnline);
90
- window.addEventListener('offline', handleOffline);
91
- this.eventListenersAttached = true;
92
- // Note: In a real production app, you might want to provide a cleanup method
93
- // to remove these listeners, but for a singleton that lives for the app lifetime,
94
- // it's not critical
95
- }
96
- }
97
- // No-op implementation for SSR environments where network status tracking is not needed
98
- export class NoOpNetworkManager {
99
- static onlineSignal = signal(true);
100
- get isOnline() {
101
- return true;
102
- }
103
- setNetworkStatus(_online) {
104
- // No-op: do nothing
105
- }
106
- clearManualOverride() {
107
- // No-op: do nothing
108
- }
109
- getOnlineSignal() {
110
- return NoOpNetworkManager.onlineSignal;
111
- }
112
- destroy() {
113
- // No-op: do nothing
114
- }
115
- }
116
- // Default singleton instance for convenience
117
- export const defaultNetworkManager = new NetworkManager();
118
- // Context for dependency injection
119
- export const NetworkManagerContext = context(defaultNetworkManager);
120
- //# 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,154 +0,0 @@
1
- /**
2
- * Query Client with Entity Caching and Deduplication
3
- *
4
- * Features:
5
- * - Global entity map for deduplication
6
- * - Entity definitions with cached sub-entity paths
7
- * - Eager entity discovery and caching
8
- * - Permanent proxy cache for entities
9
- * - Response caching for offline access
10
- * - Signalium-based reactivity for entity updates
11
- * - Self-contained validator (no external dependencies except Signalium)
12
- */
13
- import { context } from 'signalium';
14
- import { hashValue } from 'signalium/utils';
15
- import { EntityStore } from './EntityMap.js';
16
- import { NetworkManager } from './NetworkManager.js';
17
- import { QueryResultImpl } from './QueryResult.js';
18
- import { RefetchManager } from './RefetchManager.js';
19
- import { MemoryEvictionManager } from './MemoryEvictionManager.js';
20
- /**
21
- * Checks if a value is a Signal instance
22
- */
23
- function isSignal(value) {
24
- return typeof value === 'object' && value !== null;
25
- }
26
- /**
27
- * Extracts actual values from params that may contain Signals.
28
- */
29
- export function extractParamsForKey(params) {
30
- if (params === undefined) {
31
- return undefined;
32
- }
33
- const extracted = {};
34
- for (const [key, value] of Object.entries(params)) {
35
- if (isSignal(value)) {
36
- extracted[key] = value.value;
37
- }
38
- else {
39
- extracted[key] = value;
40
- }
41
- }
42
- return extracted;
43
- }
44
- /**
45
- * Computes the query key for instance lookup. This is used for two different keys:
46
- *
47
- * - Query instance key
48
- * - Query storage key
49
- *
50
- * Instance keys are created by passing in the query definition and parameters WITHOUT
51
- * extracting the Signal values, whereas storage keys are created by extracting the Signal values.
52
- * This way, we can reuse the same instance for given Signals, but different underlying values
53
- * will be stored and put into the LRU cache separately.
54
- */
55
- export const queryKeyFor = (queryDef, params) => {
56
- return hashValue([queryDef.id, queryDef.shapeKey, params]);
57
- };
58
- export class QueryClient {
59
- store;
60
- context;
61
- entityMap;
62
- queryInstances = new Map();
63
- memoryEvictionManager;
64
- refetchManager;
65
- networkManager;
66
- isServer;
67
- constructor(store, context = { fetch, log: console }, networkManager, memoryEvictionManager, refetchManager) {
68
- this.store = store;
69
- this.context = context;
70
- this.memoryEvictionManager =
71
- memoryEvictionManager ?? new MemoryEvictionManager(this, this.context.evictionMultiplier);
72
- this.refetchManager = refetchManager ?? new RefetchManager(this.context.refetchMultiplier);
73
- this.networkManager = networkManager ?? new NetworkManager();
74
- this.isServer = typeof window === 'undefined';
75
- this.entityMap = new EntityStore(this);
76
- }
77
- getContext() {
78
- return this.context;
79
- }
80
- saveQueryData(queryDef, queryKey, data, updatedAt, entityRefs, extra) {
81
- // Clone entityRefs to avoid mutation in setValue
82
- const clonedRefs = entityRefs !== undefined ? new Set(entityRefs) : undefined;
83
- // QueryStore expects the base definition structure
84
- this.store.saveQuery(queryDef, queryKey, data, updatedAt, clonedRefs, extra);
85
- }
86
- activateQuery(queryInstance) {
87
- const { def, queryKey, storageKey } = queryInstance;
88
- // Use storageKey for cache operations (store.activateQuery)
89
- this.store.activateQuery(def, storageKey);
90
- // Only add to refetch manager if it's not a stream
91
- if (def.type !== "stream" /* QueryType.Stream */ && def.cache?.refetchInterval) {
92
- this.refetchManager.addQuery(queryInstance);
93
- }
94
- // Use queryKey for instance eviction (memoryEvictionManager)
95
- this.memoryEvictionManager.cancelEviction(queryKey);
96
- }
97
- loadCachedQuery(queryDef, queryKey) {
98
- return this.store.loadQuery(queryDef, queryKey, this.entityMap);
99
- }
100
- deleteCachedQuery(queryKey) {
101
- this.store.deleteQuery(queryKey);
102
- }
103
- /**
104
- * Loads a query from the document store and returns a QueryResult
105
- * that triggers fetches and prepopulates with cached data
106
- */
107
- getQuery(queryDef, params) {
108
- const queryKey = queryKeyFor(queryDef, params);
109
- let queryInstance = this.queryInstances.get(queryKey);
110
- // Create a new instance if it doesn't exist
111
- if (queryInstance === undefined) {
112
- queryInstance = new QueryResultImpl(queryDef, this, queryKey, params);
113
- // Store for future use
114
- this.queryInstances.set(queryKey, queryInstance);
115
- }
116
- return queryInstance;
117
- }
118
- hydrateEntity(key, shape) {
119
- return this.entityMap.hydratePreloadedEntity(key, shape);
120
- }
121
- saveEntity(key, obj, shape, entityRefs) {
122
- // console.log('saveEntity', key, JSON.stringify(obj, null, 2), shape, entityRefs, new Error().stack);
123
- const record = this.entityMap.setEntity(key, obj, shape, entityRefs);
124
- // console.log('saveEntity record', JSON.stringify(obj, null, 2), new Error().stack);
125
- this.store.saveEntity(key, obj, entityRefs);
126
- return record;
127
- }
128
- getNestedEntityRefIds(key, refIds) {
129
- return this.entityMap.getNestedEntityRefIds(key, refIds);
130
- }
131
- destroy() {
132
- this.refetchManager.destroy();
133
- this.memoryEvictionManager.destroy();
134
- }
135
- }
136
- export const QueryClientContext = context(undefined);
137
- /**
138
- * Add an optimistic insert to a query result.
139
- * The insert will be automatically removed when:
140
- * - The entity appears in a refetched response
141
- * - The entity appears as a stream orphan
142
- * - refetch() is called
143
- */
144
- export function addOptimisticInsert(query, insert) {
145
- query.addOptimisticInsert(insert);
146
- }
147
- /**
148
- * Remove an optimistic insert from a query result.
149
- * This is a no-op if the insert has already been removed.
150
- */
151
- export function removeOptimisticInsert(query, insert) {
152
- query.removeOptimisticInsert(insert);
153
- }
154
- //# sourceMappingURL=QueryClient.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"QueryClient.js","sourceRoot":"","sources":["../../src/QueryClient.ts"],"names":[],"mappings":"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"}