@signalium/query 0.0.2 → 1.0.0
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.
- package/CHANGELOG.md +21 -0
- package/dist/cjs/EntityMap.js +2 -2
- package/dist/cjs/EntityMap.js.map +1 -1
- package/dist/cjs/NetworkManager.js +105 -0
- package/dist/cjs/NetworkManager.js.map +1 -0
- package/dist/cjs/QueryClient.js +390 -76
- package/dist/cjs/QueryClient.js.map +1 -1
- package/dist/cjs/QueryStore.js +295 -3
- package/dist/cjs/QueryStore.js.map +1 -1
- package/dist/cjs/index.js +16 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/parseEntities.js +3 -0
- package/dist/cjs/parseEntities.js.map +1 -1
- package/dist/cjs/proxy.js +19 -0
- package/dist/cjs/proxy.js.map +1 -1
- package/dist/cjs/query.js +40 -2
- package/dist/cjs/query.js.map +1 -1
- package/dist/cjs/stores/async.js +6 -0
- package/dist/cjs/stores/async.js.map +1 -0
- package/dist/cjs/stores/sync.js +7 -0
- package/dist/cjs/stores/sync.js.map +1 -0
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/cjs/type-utils.js +3 -0
- package/dist/cjs/type-utils.js.map +1 -0
- package/dist/cjs/types.js +19 -1
- package/dist/cjs/types.js.map +1 -1
- package/dist/esm/EntityMap.js +3 -3
- package/dist/esm/EntityMap.js.map +1 -1
- package/dist/esm/NetworkManager.d.ts +48 -0
- package/dist/esm/NetworkManager.d.ts.map +1 -0
- package/dist/esm/NetworkManager.js +101 -0
- package/dist/esm/NetworkManager.js.map +1 -0
- package/dist/esm/QueryClient.d.ts +81 -25
- package/dist/esm/QueryClient.d.ts.map +1 -1
- package/dist/esm/QueryClient.js +390 -76
- package/dist/esm/QueryClient.js.map +1 -1
- package/dist/esm/QueryStore.d.ts +64 -2
- package/dist/esm/QueryStore.d.ts.map +1 -1
- package/dist/esm/QueryStore.js +293 -2
- package/dist/esm/QueryStore.js.map +1 -1
- package/dist/esm/index.d.ts +5 -3
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +3 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/parseEntities.d.ts.map +1 -1
- package/dist/esm/parseEntities.js +3 -0
- package/dist/esm/parseEntities.js.map +1 -1
- package/dist/esm/proxy.d.ts +6 -0
- package/dist/esm/proxy.d.ts.map +1 -1
- package/dist/esm/proxy.js +18 -0
- package/dist/esm/proxy.js.map +1 -1
- package/dist/esm/query.d.ts +30 -29
- package/dist/esm/query.d.ts.map +1 -1
- package/dist/esm/query.js +39 -3
- package/dist/esm/query.js.map +1 -1
- package/dist/esm/stores/async.d.ts +2 -0
- package/dist/esm/stores/async.d.ts.map +1 -0
- package/dist/esm/stores/async.js +2 -0
- package/dist/esm/stores/async.js.map +1 -0
- package/dist/esm/stores/sync.d.ts +2 -0
- package/dist/esm/stores/sync.d.ts.map +1 -0
- package/dist/esm/stores/sync.js +2 -0
- package/dist/esm/stores/sync.js.map +1 -0
- package/dist/esm/type-utils.d.ts +12 -0
- package/dist/esm/type-utils.d.ts.map +1 -0
- package/dist/esm/type-utils.js +2 -0
- package/dist/esm/type-utils.js.map +1 -0
- package/dist/esm/types.d.ts +62 -5
- package/dist/esm/types.d.ts.map +1 -1
- package/dist/esm/types.js +18 -0
- package/dist/esm/types.js.map +1 -1
- package/index.d.ts +1 -0
- package/package.json +25 -7
- package/stores/async.d.ts +1 -0
- package/stores/async.js +15 -0
- package/stores/sync.d.ts +1 -0
- package/stores/sync.js +15 -0
- package/.turbo/turbo-build.log +0 -12
- package/ENTITY_STORE_DESIGN.md +0 -386
- package/dist/tsconfig.esm.tsbuildinfo +0 -1
- package/src/EntityMap.ts +0 -63
- package/src/QueryClient.ts +0 -482
- package/src/QueryStore.ts +0 -322
- package/src/__tests__/caching-persistence.test.ts +0 -983
- package/src/__tests__/entity-system.test.ts +0 -556
- package/src/__tests__/gc-time.test.ts +0 -327
- package/src/__tests__/mock-fetch.test.ts +0 -186
- package/src/__tests__/parse-entities.test.ts +0 -425
- package/src/__tests__/path-interpolation.test.ts +0 -225
- package/src/__tests__/reactivity.test.ts +0 -424
- package/src/__tests__/refetch-interval.test.ts +0 -262
- package/src/__tests__/rest-query-api.test.ts +0 -568
- package/src/__tests__/stale-time.test.ts +0 -357
- package/src/__tests__/type-to-string.test.ts +0 -129
- package/src/__tests__/utils.ts +0 -258
- package/src/__tests__/validation-edge-cases.test.ts +0 -821
- package/src/errors.ts +0 -124
- package/src/index.ts +0 -7
- package/src/parseEntities.ts +0 -213
- package/src/pathInterpolator.ts +0 -74
- package/src/proxy.ts +0 -257
- package/src/query.ts +0 -164
- package/src/react/__tests__/basic.test.tsx +0 -926
- package/src/react/__tests__/component.test.tsx +0 -984
- package/src/react/__tests__/utils.tsx +0 -71
- package/src/typeDefs.ts +0 -351
- package/src/types.ts +0 -132
- package/src/utils.ts +0 -66
- package/tsconfig.cjs.json +0 -14
- package/tsconfig.esm.json +0 -13
- package/tsconfig.json +0 -20
- package/vitest.config.ts +0 -65
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-utils.js","sourceRoot":"","sources":["../../src/type-utils.ts"],"names":[],"mappings":""}
|
package/dist/cjs/types.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.RECORD_KEY = exports.ARRAY_KEY = exports.RefetchInterval = void 0;
|
|
3
|
+
exports.RECORD_KEY = exports.ARRAY_KEY = exports.NetworkMode = exports.RefetchInterval = void 0;
|
|
4
|
+
// ================================
|
|
5
|
+
// Type Definitions
|
|
6
|
+
// ================================
|
|
4
7
|
var RefetchInterval;
|
|
5
8
|
(function (RefetchInterval) {
|
|
6
9
|
RefetchInterval[RefetchInterval["Every1Second"] = 1000] = "Every1Second";
|
|
@@ -10,6 +13,21 @@ var RefetchInterval;
|
|
|
10
13
|
RefetchInterval[RefetchInterval["Every1Minute"] = 60000] = "Every1Minute";
|
|
11
14
|
RefetchInterval[RefetchInterval["Every5Minutes"] = 300000] = "Every5Minutes";
|
|
12
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 = {}));
|
|
13
31
|
exports.ARRAY_KEY = Symbol('array');
|
|
14
32
|
exports.RECORD_KEY = Symbol('record');
|
|
15
33
|
//# sourceMappingURL=types.js.map
|
package/dist/cjs/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";;;
|
|
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;AAqDY,QAAA,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;AAC5B,QAAA,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC"}
|
package/dist/esm/EntityMap.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { signal } from 'signalium';
|
|
2
|
-
import { createEntityProxy } from './proxy.js';
|
|
2
|
+
import { createEntityProxy, mergeValues } from './proxy.js';
|
|
3
3
|
export class EntityStore {
|
|
4
4
|
map = new Map();
|
|
5
5
|
hasEntity(key) {
|
|
@@ -19,7 +19,7 @@ export class EntityStore {
|
|
|
19
19
|
setPreloadedEntity(key, obj) {
|
|
20
20
|
const record = {
|
|
21
21
|
key,
|
|
22
|
-
signal: signal(obj),
|
|
22
|
+
signal: signal(obj, { equals: false }),
|
|
23
23
|
cache: new Map(),
|
|
24
24
|
proxy: undefined,
|
|
25
25
|
};
|
|
@@ -33,7 +33,7 @@ export class EntityStore {
|
|
|
33
33
|
record.proxy = createEntityProxy(key, record, shape);
|
|
34
34
|
}
|
|
35
35
|
else {
|
|
36
|
-
record.signal.value
|
|
36
|
+
record.signal.update(value => mergeValues(value, obj));
|
|
37
37
|
record.cache.clear();
|
|
38
38
|
}
|
|
39
39
|
return record;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityMap.js","sourceRoot":"","sources":["../../src/EntityMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,MAAM,EAAE,MAAM,WAAW,CAAC;AAE3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"EntityMap.js","sourceRoot":"","sources":["../../src/EntityMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,MAAM,EAAE,MAAM,WAAW,CAAC;AAE3C,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAW5D,MAAM,OAAO,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,iBAAiB,CAAC,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,MAAM,CAAC,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,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;YACvD,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;QAED,OAAO,MAAsB,CAAC;IAChC,CAAC;CACF"}
|
|
@@ -0,0 +1,48 @@
|
|
|
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 declare class NetworkManager {
|
|
12
|
+
private onlineSignal;
|
|
13
|
+
private manualOverride;
|
|
14
|
+
private eventListenersAttached;
|
|
15
|
+
constructor(initialStatus?: boolean);
|
|
16
|
+
/**
|
|
17
|
+
* Returns true if the network is currently online
|
|
18
|
+
*/
|
|
19
|
+
get isOnline(): boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Manually set the network status (useful for testing)
|
|
22
|
+
*/
|
|
23
|
+
setNetworkStatus(online: boolean): void;
|
|
24
|
+
/**
|
|
25
|
+
* Clear manual override and return to automatic detection
|
|
26
|
+
*/
|
|
27
|
+
clearManualOverride(): void;
|
|
28
|
+
/**
|
|
29
|
+
* Get the reactive signal for online status
|
|
30
|
+
* This allows reactive functions to depend on network status
|
|
31
|
+
*/
|
|
32
|
+
getOnlineSignal(): Signal<boolean>;
|
|
33
|
+
/**
|
|
34
|
+
* Detect current online status from the environment
|
|
35
|
+
*/
|
|
36
|
+
private detectOnlineStatus;
|
|
37
|
+
/**
|
|
38
|
+
* Check if we can attach event listeners (browser or React Native)
|
|
39
|
+
*/
|
|
40
|
+
private canAttachListeners;
|
|
41
|
+
/**
|
|
42
|
+
* Attach event listeners for online/offline events
|
|
43
|
+
*/
|
|
44
|
+
private attachEventListeners;
|
|
45
|
+
}
|
|
46
|
+
export declare const defaultNetworkManager: NetworkManager;
|
|
47
|
+
export declare const NetworkManagerContext: Context<NetworkManager>;
|
|
48
|
+
//# sourceMappingURL=NetworkManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NetworkManager.d.ts","sourceRoot":"","sources":["../../src/NetworkManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAU,MAAM,EAAW,OAAO,EAAE,MAAM,WAAW,CAAC;AAE7D,qBAAa,cAAc;IACzB,OAAO,CAAC,YAAY,CAAkB;IACtC,OAAO,CAAC,cAAc,CAAkC;IACxD,OAAO,CAAC,sBAAsB,CAAS;gBAE3B,aAAa,CAAC,EAAE,OAAO;IAWnC;;OAEG;IACH,IAAI,QAAQ,IAAI,OAAO,CAOtB;IAED;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAKvC;;OAEG;IACH,mBAAmB,IAAI,IAAI;IAK3B;;;OAGG;IACH,eAAe,IAAI,MAAM,CAAC,OAAO,CAAC;IAIlC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAU1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAI1B;;OAEG;IACH,OAAO,CAAC,oBAAoB;CA0B7B;AAGD,eAAO,MAAM,qBAAqB,gBAAuB,CAAC;AAG1D,eAAO,MAAM,qBAAqB,EAAE,OAAO,CAAC,cAAc,CAAkD,CAAC"}
|
|
@@ -0,0 +1,101 @@
|
|
|
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
|
+
// Default singleton instance for convenience
|
|
98
|
+
export const defaultNetworkManager = new NetworkManager();
|
|
99
|
+
// Context for dependency injection
|
|
100
|
+
export const NetworkManagerContext = context(defaultNetworkManager);
|
|
101
|
+
//# sourceMappingURL=NetworkManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NetworkManager.js","sourceRoot":"","sources":["../../src/NetworkManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,EAAU,OAAO,EAAW,MAAM,WAAW,CAAC;AAE7D,MAAM,OAAO,cAAc;IACjB,YAAY,CAAkB;IAC9B,cAAc,GAAwB,SAAS,CAAC;IAChD,sBAAsB,GAAG,KAAK,CAAC;IAEvC,YAAY,aAAuB;QACjC,+EAA+E;QAC/E,MAAM,mBAAmB,GAAG,aAAa,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACvE,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAEhD,8EAA8E;QAC9E,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC;YAC9B,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC9B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,IAAI,QAAQ;QACV,mCAAmC;QACnC,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC,cAAc,CAAC;QAC7B,CAAC;QAED,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,MAAe;QAC9B,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;QAC7B,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,MAAM,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,mBAAmB;QACjB,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;QAChC,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;IACtD,CAAC;IAED;;;OAGG;IACH,eAAe;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED;;OAEG;IACK,kBAAkB;QACxB,0DAA0D;QAC1D,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,QAAQ,IAAI,SAAS,EAAE,CAAC;YAC9D,OAAO,SAAS,CAAC,MAAM,CAAC;QAC1B,CAAC;QAED,2DAA2D;QAC3D,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACK,kBAAkB;QACxB,OAAO,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,gBAAgB,KAAK,UAAU,CAAC;IACxF,CAAC;IAED;;OAEG;IACK,oBAAoB;QAC1B,IAAI,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAChC,OAAO;QACT,CAAC;QAED,MAAM,YAAY,GAAG,GAAG,EAAE;YACxB,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;gBACtC,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC;YACjC,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,aAAa,GAAG,GAAG,EAAE;YACzB,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;gBACtC,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,KAAK,CAAC;YAClC,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAChD,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QAElD,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;QAEnC,6EAA6E;QAC7E,kFAAkF;QAClF,oBAAoB;IACtB,CAAC;CACF;AAED,6CAA6C;AAC7C,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,cAAc,EAAE,CAAC;AAE1D,mCAAmC;AACnC,MAAM,CAAC,MAAM,qBAAqB,GAA4B,OAAO,CAAiB,qBAAqB,CAAC,CAAC"}
|
|
@@ -10,10 +10,11 @@
|
|
|
10
10
|
* - Signalium-based reactivity for entity updates
|
|
11
11
|
* - Self-contained validator (no external dependencies except Signalium)
|
|
12
12
|
*/
|
|
13
|
-
import { type Context
|
|
14
|
-
import {
|
|
13
|
+
import { type Context } from 'signalium';
|
|
14
|
+
import { QueryResult, EntityDef, BaseQueryResult, ObjectFieldTypeDef, RefetchInterval, NetworkMode, RetryConfig } from './types.js';
|
|
15
15
|
import { EntityRecord } from './EntityMap.js';
|
|
16
16
|
import { QueryStore } from './QueryStore.js';
|
|
17
|
+
import { NetworkManager } from './NetworkManager.js';
|
|
17
18
|
export interface QueryContext {
|
|
18
19
|
fetch: typeof fetch;
|
|
19
20
|
evictionMultiplier?: number;
|
|
@@ -24,13 +25,46 @@ export interface QueryCacheOptions {
|
|
|
24
25
|
gcTime?: number;
|
|
25
26
|
staleTime?: number;
|
|
26
27
|
refetchInterval?: RefetchInterval;
|
|
28
|
+
networkMode?: NetworkMode;
|
|
29
|
+
retry?: RetryConfig | number | false;
|
|
30
|
+
refreshStaleOnReconnect?: boolean;
|
|
27
31
|
}
|
|
28
|
-
export interface
|
|
32
|
+
export interface StreamCacheOptions {
|
|
33
|
+
maxCount?: number;
|
|
34
|
+
gcTime?: number;
|
|
35
|
+
}
|
|
36
|
+
export interface QueryPaginationOptions<Result> {
|
|
37
|
+
getNextPageParams?(lastPage: Result, params?: QueryParams | undefined): QueryParams | undefined;
|
|
38
|
+
}
|
|
39
|
+
export type QueryParams = Record<string, string | number | boolean | undefined | null>;
|
|
40
|
+
export declare const enum QueryType {
|
|
41
|
+
Query = "query",
|
|
42
|
+
InfiniteQuery = "infiniteQuery",
|
|
43
|
+
Stream = "stream"
|
|
44
|
+
}
|
|
45
|
+
export interface QueryDefinition<Params extends QueryParams | undefined, Result> {
|
|
46
|
+
type: QueryType.Query;
|
|
29
47
|
id: string;
|
|
30
48
|
shape: ObjectFieldTypeDef;
|
|
31
|
-
fetchFn: (context: QueryContext, params: Params) => Promise<Result>;
|
|
49
|
+
fetchFn: (context: QueryContext, params: Params, prevResult?: Result) => Promise<Result>;
|
|
32
50
|
cache?: QueryCacheOptions;
|
|
33
51
|
}
|
|
52
|
+
export interface InfiniteQueryDefinition<Params extends QueryParams | undefined, Result> {
|
|
53
|
+
type: QueryType.InfiniteQuery;
|
|
54
|
+
id: string;
|
|
55
|
+
shape: ObjectFieldTypeDef;
|
|
56
|
+
fetchFn: (context: QueryContext, params: Params, prevResult?: Result) => Promise<Result>;
|
|
57
|
+
pagination: QueryPaginationOptions<Result>;
|
|
58
|
+
cache?: QueryCacheOptions;
|
|
59
|
+
}
|
|
60
|
+
export interface StreamQueryDefinition<Params extends QueryParams | undefined, Result> {
|
|
61
|
+
type: QueryType.Stream;
|
|
62
|
+
id: string;
|
|
63
|
+
shape: EntityDef;
|
|
64
|
+
subscribeFn: (context: QueryContext, params: Params, onUpdate: (update: Partial<Result>) => void) => () => void;
|
|
65
|
+
cache?: StreamCacheOptions;
|
|
66
|
+
}
|
|
67
|
+
export type AnyQueryDefinition<Params extends QueryParams | undefined, Result> = QueryDefinition<Params, Result> | InfiniteQueryDefinition<Params, Result> | StreamQueryDefinition<Params, Result>;
|
|
34
68
|
declare class RefetchManager {
|
|
35
69
|
private multiplier;
|
|
36
70
|
private intervalId;
|
|
@@ -59,17 +93,27 @@ declare class MemoryEvictionManager {
|
|
|
59
93
|
* like refetch, while forwarding all the base relay properties.
|
|
60
94
|
* This class combines the old QueryInstance and QueryResultImpl into a single entity.
|
|
61
95
|
*/
|
|
62
|
-
export declare class QueryResultImpl<T> implements
|
|
63
|
-
def:
|
|
64
|
-
initialized: boolean;
|
|
65
|
-
isRefetchingSignal: Signal<boolean>;
|
|
66
|
-
updatedAt: number | undefined;
|
|
67
|
-
private queryClient;
|
|
96
|
+
export declare class QueryResultImpl<T> implements BaseQueryResult<T> {
|
|
97
|
+
def: AnyQueryDefinition<any, any>;
|
|
68
98
|
queryKey: number;
|
|
99
|
+
private queryClient;
|
|
100
|
+
private initialized;
|
|
101
|
+
private isRefetchingSignal;
|
|
102
|
+
private isFetchingMoreSignal;
|
|
103
|
+
private updatedAt;
|
|
69
104
|
private params;
|
|
105
|
+
private refIds;
|
|
106
|
+
private refetchPromise;
|
|
107
|
+
private fetchMorePromise;
|
|
108
|
+
private attemptCount;
|
|
109
|
+
private unsubscribe?;
|
|
70
110
|
private relay;
|
|
71
|
-
private
|
|
72
|
-
|
|
111
|
+
private _relayState;
|
|
112
|
+
private wasOffline;
|
|
113
|
+
private get relayState();
|
|
114
|
+
private _nextPageParams;
|
|
115
|
+
private get nextPageParams();
|
|
116
|
+
constructor(def: AnyQueryDefinition<any, any>, queryClient: QueryClient, queryKey: number, params: QueryParams | undefined);
|
|
73
117
|
get value(): T | undefined;
|
|
74
118
|
get error(): unknown;
|
|
75
119
|
get isPending(): boolean;
|
|
@@ -77,25 +121,35 @@ export declare class QueryResultImpl<T> implements QueryResult<T> {
|
|
|
77
121
|
get isResolved(): boolean;
|
|
78
122
|
get isSettled(): boolean;
|
|
79
123
|
get isReady(): boolean;
|
|
80
|
-
get isRefetching(): boolean;
|
|
81
|
-
get isFetching(): boolean;
|
|
82
124
|
private get _version();
|
|
83
125
|
private get _signal();
|
|
84
126
|
private get _flags();
|
|
85
127
|
then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null | undefined, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null | undefined): Promise<TResult1 | TResult2>;
|
|
86
128
|
catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | null | undefined): Promise<T | TResult>;
|
|
87
129
|
finally(onfinally?: (() => void) | null | undefined): Promise<T>;
|
|
88
|
-
|
|
89
|
-
/**
|
|
90
|
-
* Fetches fresh data, updates the cache, and updates updatedAt timestamp
|
|
91
|
-
*/
|
|
92
|
-
runQuery(): Promise<T>;
|
|
93
|
-
isStale(): boolean;
|
|
130
|
+
get [Symbol.toStringTag](): string;
|
|
94
131
|
/**
|
|
95
132
|
* Initialize the query by loading from cache and fetching if stale
|
|
96
133
|
*/
|
|
97
134
|
private initialize;
|
|
98
|
-
|
|
135
|
+
/**
|
|
136
|
+
* Handle stream updates by merging with existing entity.
|
|
137
|
+
* Deep merging is handled automatically by parseEntities/setEntity.
|
|
138
|
+
*/
|
|
139
|
+
private setupSubscription;
|
|
140
|
+
/**
|
|
141
|
+
* Fetches fresh data, updates the cache, and updates updatedAt timestamp
|
|
142
|
+
*/
|
|
143
|
+
private runQuery;
|
|
144
|
+
refetch(): Promise<T>;
|
|
145
|
+
fetchNextPage(): Promise<T>;
|
|
146
|
+
get isRefetching(): boolean;
|
|
147
|
+
get isFetchingMore(): boolean;
|
|
148
|
+
get isFetching(): boolean;
|
|
149
|
+
get hasNextPage(): boolean;
|
|
150
|
+
get isStale(): boolean;
|
|
151
|
+
get isPaused(): boolean;
|
|
152
|
+
private getRetryConfig;
|
|
99
153
|
}
|
|
100
154
|
export declare class QueryClient {
|
|
101
155
|
private store;
|
|
@@ -104,16 +158,18 @@ export declare class QueryClient {
|
|
|
104
158
|
queryInstances: Map<number, QueryResultImpl<unknown>>;
|
|
105
159
|
memoryEvictionManager: MemoryEvictionManager;
|
|
106
160
|
refetchManager: RefetchManager;
|
|
107
|
-
|
|
161
|
+
networkManager: NetworkManager;
|
|
162
|
+
isServer: boolean;
|
|
163
|
+
constructor(store: QueryStore, context?: QueryContext, networkManager?: NetworkManager);
|
|
108
164
|
getContext(): QueryContext;
|
|
109
|
-
saveQueryData(queryDef:
|
|
165
|
+
saveQueryData(queryDef: AnyQueryDefinition<QueryParams | undefined, unknown>, queryKey: number, data: unknown, updatedAt: number, entityRefs: Set<number>): void;
|
|
110
166
|
activateQuery(queryInstance: QueryResultImpl<unknown>): void;
|
|
111
|
-
loadCachedQuery(queryDef:
|
|
167
|
+
loadCachedQuery(queryDef: AnyQueryDefinition<QueryParams | undefined, unknown>, queryKey: number): import("./QueryStore.js").MaybePromise<import("./QueryStore.js").CachedQuery | undefined>;
|
|
112
168
|
/**
|
|
113
169
|
* Loads a query from the document store and returns a QueryResult
|
|
114
170
|
* that triggers fetches and prepopulates with cached data
|
|
115
171
|
*/
|
|
116
|
-
getQuery<
|
|
172
|
+
getQuery<T>(queryDef: AnyQueryDefinition<any, any>, params: QueryParams | undefined): QueryResult<T>;
|
|
117
173
|
hydrateEntity(key: number, shape: EntityDef): EntityRecord;
|
|
118
174
|
saveEntity(key: number, obj: Record<string, unknown>, shape: EntityDef, entityRefs?: Set<number>): EntityRecord;
|
|
119
175
|
destroy(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryClient.d.ts","sourceRoot":"","sources":["../../src/QueryClient.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAiE,KAAK,OAAO,
|
|
1
|
+
{"version":3,"file":"QueryClient.d.ts","sourceRoot":"","sources":["../../src/QueryClient.ts"],"names":[],"mappings":"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"}
|