heliumts 0.2.6 → 0.3.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/README.md
CHANGED
|
@@ -312,6 +312,7 @@ See [SSG Documentation](./docs/ssg.md) for detailed information including limita
|
|
|
312
312
|
- [Manual Installation](./docs/manual-installation.md) - Step-by-step guide to setting up a HeliumTS project manually
|
|
313
313
|
|
|
314
314
|
### Core Features
|
|
315
|
+
- [Data Fetching](./docs/data-fetching.md) - useFetch and useCall hooks for data fetching and mutations
|
|
315
316
|
- [Routing & useRouter](./docs/routing.md) - File-based routing, dynamic routes, navigation, and the useRouter hook
|
|
316
317
|
- [Configuration](./docs/helium-config.md) - Configure RPC encoding, compression, security, and proxy settings
|
|
317
318
|
- [Static Site Generation](./docs/ssg.md) - Pre-render pages at build time for better performance
|
|
@@ -321,7 +322,9 @@ See [SSG Documentation](./docs/ssg.md) for detailed information including limita
|
|
|
321
322
|
- [Context API](./docs/context-api.md) - Access request metadata including client IPs and headers
|
|
322
323
|
- [Proxy Configuration](./docs/proxy-configuration.md) - Configure IP detection for rate limiting behind proxies
|
|
323
324
|
- [HTTP Handlers & Webhooks](./docs/http-handlers.md) - Create custom HTTP endpoints for webhooks and REST APIs
|
|
324
|
-
- [Production Deployment](./docs/production-deployment.md) - Deploy to production platforms
|
|
325
|
+
- [Production Deployment](./docs/production-deployment.md) - Deploy to production platforms and platform compatibility
|
|
326
|
+
|
|
327
|
+
> ⚠️ **Hosting Note:** Helium requires a platform that supports persistent Node.js servers (e.g., Digital Ocean, Railway, Render). Serverless platforms like **Vercel and Netlify are not fully compatible** due to WebSocket limitations. See [Production Deployment](./docs/production-deployment.md) for details.
|
|
325
328
|
|
|
326
329
|
## 6. Contributing
|
|
327
330
|
|
|
@@ -6,12 +6,15 @@ import type { MethodStub } from "./types.js";
|
|
|
6
6
|
* - ttl: optional time-to-live for the cached response (milliseconds).
|
|
7
7
|
* - refetchOnWindowFocus: when true the hook will invalidate cache on
|
|
8
8
|
* window focus/visibility change and re-run the fetch.
|
|
9
|
+
* - showLoaderOnRefocus: when false (default), refetches triggered by window
|
|
10
|
+
* focus/visibility will update data silently without showing the loading state.
|
|
9
11
|
* - enabled: disable automatic fetching (defaults to true) — useful when
|
|
10
12
|
* you only want to fetch when a required value (e.g. id) is present.
|
|
11
13
|
*/
|
|
12
14
|
export interface UseFetchOptions {
|
|
13
15
|
ttl?: number;
|
|
14
16
|
refetchOnWindowFocus?: boolean;
|
|
17
|
+
showLoaderOnRefocus?: boolean;
|
|
15
18
|
enabled?: boolean;
|
|
16
19
|
}
|
|
17
20
|
/**
|
|
@@ -29,6 +32,6 @@ export declare function useFetch<TArgs, TResult>(method: MethodStub<TArgs, TResu
|
|
|
29
32
|
isLoading: boolean;
|
|
30
33
|
error: string | null;
|
|
31
34
|
stats: RpcStats | null;
|
|
32
|
-
refetch: () => Promise<TResult | undefined>;
|
|
35
|
+
refetch: (showLoader?: boolean) => Promise<TResult | undefined>;
|
|
33
36
|
};
|
|
34
37
|
//# sourceMappingURL=useFetch.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFetch.d.ts","sourceRoot":"","sources":["../../src/client/useFetch.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAGvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C
|
|
1
|
+
{"version":3,"file":"useFetch.d.ts","sourceRoot":"","sources":["../../src/client/useFetch.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAGvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C;;;;;;;;;;GAUG;AACH,MAAM,WAAW,eAAe;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAqCD;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,eAAe;;;;;2BA2GzF,OAAO;EAqCjC"}
|
package/dist/client/useFetch.js
CHANGED
|
@@ -3,6 +3,8 @@ import { cacheKey, get, has, invalidateAll, set, subscribeInvalidations } from "
|
|
|
3
3
|
import { rpcCall } from "./rpcClient.js";
|
|
4
4
|
// Global flag to track if visibility listener is registered
|
|
5
5
|
let visibilityListenerRegistered = false;
|
|
6
|
+
// Global flag to indicate refetch is due to focus/visibility (for silent updates)
|
|
7
|
+
let isRefocusRefetch = false;
|
|
6
8
|
function registerVisibilityListener() {
|
|
7
9
|
if (visibilityListenerRegistered || typeof document === "undefined") {
|
|
8
10
|
return;
|
|
@@ -10,11 +12,21 @@ function registerVisibilityListener() {
|
|
|
10
12
|
visibilityListenerRegistered = true;
|
|
11
13
|
const handleVisibilityChange = () => {
|
|
12
14
|
if (!document.hidden) {
|
|
15
|
+
isRefocusRefetch = true;
|
|
13
16
|
invalidateAll();
|
|
17
|
+
// Reset flag after a microtask to allow all listeners to see it
|
|
18
|
+
queueMicrotask(() => {
|
|
19
|
+
isRefocusRefetch = false;
|
|
20
|
+
});
|
|
14
21
|
}
|
|
15
22
|
};
|
|
16
23
|
const handleFocus = () => {
|
|
24
|
+
isRefocusRefetch = true;
|
|
17
25
|
invalidateAll();
|
|
26
|
+
// Reset flag after a microtask to allow all listeners to see it
|
|
27
|
+
queueMicrotask(() => {
|
|
28
|
+
isRefocusRefetch = false;
|
|
29
|
+
});
|
|
18
30
|
};
|
|
19
31
|
document.addEventListener("visibilitychange", handleVisibilityChange, { passive: true });
|
|
20
32
|
window.addEventListener("focus", handleFocus, { passive: true });
|
|
@@ -31,7 +43,7 @@ function registerVisibilityListener() {
|
|
|
31
43
|
*/
|
|
32
44
|
export function useFetch(method, args, options) {
|
|
33
45
|
const key = cacheKey(method.__id, args);
|
|
34
|
-
const { ttl, refetchOnWindowFocus = true, enabled = true } = options ?? {};
|
|
46
|
+
const { ttl, refetchOnWindowFocus = true, showLoaderOnRefocus = false, enabled = true } = options ?? {};
|
|
35
47
|
// Register visibility listener if enabled
|
|
36
48
|
useEffect(() => {
|
|
37
49
|
if (refetchOnWindowFocus) {
|
|
@@ -120,8 +132,11 @@ export function useFetch(method, args, options) {
|
|
|
120
132
|
};
|
|
121
133
|
}, [key, method.__id, args, ttl, enabled]);
|
|
122
134
|
// This is used to manually refetch data
|
|
123
|
-
|
|
124
|
-
|
|
135
|
+
// When showLoader is false, data updates silently without triggering loading state
|
|
136
|
+
const refetch = useCallback(async (showLoader = true) => {
|
|
137
|
+
if (showLoader) {
|
|
138
|
+
setLoading(true);
|
|
139
|
+
}
|
|
125
140
|
setError(null);
|
|
126
141
|
try {
|
|
127
142
|
const result = await rpcCall(method.__id, args);
|
|
@@ -136,17 +151,22 @@ export function useFetch(method, args, options) {
|
|
|
136
151
|
return undefined;
|
|
137
152
|
}
|
|
138
153
|
finally {
|
|
139
|
-
|
|
154
|
+
if (showLoader) {
|
|
155
|
+
setLoading(false);
|
|
156
|
+
}
|
|
140
157
|
}
|
|
141
158
|
}, [args, key, method.__id, ttl]);
|
|
142
159
|
// This is used to automatically refetch data when this method is invalidated
|
|
143
160
|
useEffect(() => {
|
|
144
161
|
return subscribeInvalidations((methodId) => {
|
|
145
162
|
if (methodId === method.__id) {
|
|
146
|
-
|
|
163
|
+
// Check if this invalidation is from focus/visibility change
|
|
164
|
+
// If so, only show loader if showLoaderOnRefocus is true
|
|
165
|
+
const shouldShowLoader = isRefocusRefetch ? showLoaderOnRefocus : true;
|
|
166
|
+
refetch(shouldShowLoader);
|
|
147
167
|
}
|
|
148
168
|
});
|
|
149
|
-
}, [method.__id, refetch]);
|
|
169
|
+
}, [method.__id, refetch, showLoaderOnRefocus]);
|
|
150
170
|
return { data, isLoading, error, stats, refetch };
|
|
151
171
|
}
|
|
152
172
|
//# sourceMappingURL=useFetch.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFetch.js","sourceRoot":"","sources":["../../src/client/useFetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAGzD,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAC5F,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"useFetch.js","sourceRoot":"","sources":["../../src/client/useFetch.ts"],"names":[],"mappings":"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"}
|