clear-react-router 1.9.8 → 2.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/README.md +2 -0
- package/dist/index.js +19 -17
- package/dist/types.d.ts +1 -0
- package/dist/utils/isCacheItemFresh.d.ts +2 -5
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -572,6 +572,8 @@ const UserProfile = () => {
|
|
|
572
572
|
staleTime: 60000, // 1 minute — cache is fresh for 60 seconds
|
|
573
573
|
}
|
|
574
574
|
```
|
|
575
|
+
- Stale cache entries are cleaned up incrementally on every navigation, keeping the loader cache from growing unbounded over long sessions.
|
|
576
|
+
|
|
575
577
|
|
|
576
578
|
### `useInvalidate()`
|
|
577
579
|
|
package/dist/index.js
CHANGED
|
@@ -113,13 +113,12 @@ var createCommitNavigation = (navigationExecutor, routeItemDataState) => (nextLo
|
|
|
113
113
|
};
|
|
114
114
|
//#endregion
|
|
115
115
|
//#region utils/isCacheItemFresh.ts
|
|
116
|
-
var createIsCacheItemFresh = (loaderMap) => (
|
|
117
|
-
|
|
118
|
-
const item = loaderMap.get(pathname);
|
|
116
|
+
var createIsCacheItemFresh = (loaderMap) => (pathname, search) => {
|
|
117
|
+
const item = loaderMap.get(`${pathname}${search}`);
|
|
119
118
|
if (item === void 0) return false;
|
|
120
|
-
const
|
|
121
|
-
if (
|
|
122
|
-
return Date.now() - item.timestamp <=
|
|
119
|
+
const resolvedStaleTime = item.staleTime ?? routerConfig.defaultStaleTime;
|
|
120
|
+
if (resolvedStaleTime === void 0) return true;
|
|
121
|
+
return Date.now() - item.timestamp <= resolvedStaleTime;
|
|
123
122
|
};
|
|
124
123
|
//#endregion
|
|
125
124
|
//#region ../../node_modules/react/cjs/react-jsx-runtime.production.js
|
|
@@ -281,10 +280,7 @@ var createNavigate = (routerState, revalidateCache) => {
|
|
|
281
280
|
const currentLoaderState = loaderMap.get(location.pathname)?.state;
|
|
282
281
|
if (currentLoaderState) loaderStateRef.set(currentLoaderState);
|
|
283
282
|
} else {
|
|
284
|
-
const pendingShouldExist = routeItem?.loader && !isCacheItemFresh(
|
|
285
|
-
routeItem,
|
|
286
|
-
pathname: location.pathname
|
|
287
|
-
});
|
|
283
|
+
const pendingShouldExist = routeItem?.loader && !isCacheItemFresh(location.pathname, location.search);
|
|
288
284
|
pendingState.setState(pendingShouldExist ? {
|
|
289
285
|
routeItem,
|
|
290
286
|
location
|
|
@@ -423,15 +419,20 @@ var getRetry = (routeItem) => {
|
|
|
423
419
|
var sleep = async (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
424
420
|
var createRevalidateCache = (routerState) => {
|
|
425
421
|
const { loaderStateRef, contextState, loaderMap } = routerState;
|
|
422
|
+
const removeFirstStaleItem = () => {
|
|
423
|
+
const deletedItem = [...loaderMap.entries()].find(([, item]) => {
|
|
424
|
+
const staleTime = item.staleTime ?? routerConfig.defaultStaleTime;
|
|
425
|
+
return staleTime && staleTime + item.timestamp < Date.now();
|
|
426
|
+
});
|
|
427
|
+
if (deletedItem) loaderMap.delete(deletedItem[0]);
|
|
428
|
+
};
|
|
426
429
|
const revalidateCache = async ({ routeItem, pathname, search = "" }, retried = 0) => {
|
|
427
430
|
if (!routeItem?.loader) return;
|
|
428
431
|
const isCacheItemFresh = createIsCacheItemFresh(loaderMap);
|
|
429
|
-
|
|
430
|
-
if (
|
|
431
|
-
|
|
432
|
-
pathname
|
|
433
|
-
})) {
|
|
434
|
-
const item = loaderMap.get(pathname);
|
|
432
|
+
removeFirstStaleItem();
|
|
433
|
+
if (loadingPromises.has(pathname)) return loadingPromises.get(`${pathname}${search}`);
|
|
434
|
+
if (isCacheItemFresh(pathname, search)) {
|
|
435
|
+
const item = loaderMap.get(`${pathname}${search}`);
|
|
435
436
|
if (item?.state) loaderStateRef.set(item.state);
|
|
436
437
|
return;
|
|
437
438
|
}
|
|
@@ -455,7 +456,8 @@ var createRevalidateCache = (routerState) => {
|
|
|
455
456
|
}));
|
|
456
457
|
loaderMap.set(`${pathname}${search}`, {
|
|
457
458
|
state: loaderStateRef.value,
|
|
458
|
-
timestamp: Date.now()
|
|
459
|
+
timestamp: Date.now(),
|
|
460
|
+
staleTime: routeItem.staleTime
|
|
459
461
|
});
|
|
460
462
|
return {
|
|
461
463
|
data: result,
|
package/dist/types.d.ts
CHANGED
|
@@ -1,5 +1,2 @@
|
|
|
1
|
-
import { LoaderStateItem
|
|
2
|
-
export declare const createIsCacheItemFresh: (loaderMap: Map<string, LoaderStateItem>) => (
|
|
3
|
-
routeItem?: RouteItem;
|
|
4
|
-
pathname: string;
|
|
5
|
-
}) => boolean;
|
|
1
|
+
import { LoaderStateItem } from '../types';
|
|
2
|
+
export declare const createIsCacheItemFresh: (loaderMap: Map<string, LoaderStateItem>) => (pathname: string, search?: string) => boolean;
|