clear-react-router 2.0.6 → 2.0.7
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/dist/hooks/useLoaderState.d.ts +1 -2
- package/dist/index.js +43 -55
- package/dist/runtime/invalidate.d.ts +1 -1
- package/dist/types.d.ts +2 -3
- package/dist/utils/revalidateCache.d.ts +2 -8
- package/package.json +1 -1
- package/dist/cell.d.ts +0 -6
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export declare const useLoaderState: <T>() => LoaderState<T>;
|
|
1
|
+
export declare const useLoaderState: <T>() => import("../types").LoaderState<T>;
|
package/dist/index.js
CHANGED
|
@@ -226,7 +226,7 @@ var createNavigate = (routerState, revalidateCache) => {
|
|
|
226
226
|
let navigationSeq = 0;
|
|
227
227
|
let interval = 0;
|
|
228
228
|
let abortController = null;
|
|
229
|
-
const {
|
|
229
|
+
const { loaderState, scrollMapState, pendingState, contextState, loaderMap, routeItemDataState, isOptimisticLoading } = routerState;
|
|
230
230
|
const navigationExecutor = createCommitState(routerState);
|
|
231
231
|
const isCacheItemFresh = createIsCacheItemFresh(loaderMap);
|
|
232
232
|
const createSignal = () => {
|
|
@@ -240,7 +240,7 @@ var createNavigate = (routerState, revalidateCache) => {
|
|
|
240
240
|
setContext: contextState.setState
|
|
241
241
|
});
|
|
242
242
|
const routeResolve = (location) => {
|
|
243
|
-
|
|
243
|
+
loaderState.setState(emptyLoaderState);
|
|
244
244
|
const nextItem = findRoute(location.pathname, true);
|
|
245
245
|
return {
|
|
246
246
|
nextItem,
|
|
@@ -257,12 +257,12 @@ var createNavigate = (routerState, revalidateCache) => {
|
|
|
257
257
|
redirect,
|
|
258
258
|
params
|
|
259
259
|
});
|
|
260
|
-
|
|
260
|
+
loaderState.setState((prev) => ({
|
|
261
261
|
...prev,
|
|
262
262
|
beforeLoadError: null
|
|
263
263
|
}));
|
|
264
264
|
} catch (error) {
|
|
265
|
-
|
|
265
|
+
loaderState.setState((prev) => ({
|
|
266
266
|
...prev,
|
|
267
267
|
beforeLoadError: error
|
|
268
268
|
}));
|
|
@@ -289,7 +289,7 @@ var createNavigate = (routerState, revalidateCache) => {
|
|
|
289
289
|
});
|
|
290
290
|
isOptimisticLoading.setState(true);
|
|
291
291
|
const currentLoaderState = loaderMap.get(path)?.state;
|
|
292
|
-
if (currentLoaderState)
|
|
292
|
+
if (currentLoaderState) loaderState.setState(currentLoaderState);
|
|
293
293
|
} else if (routeItem?.loader && !isCacheItemFresh(path)) commitNavigation(() => pendingState.setState({
|
|
294
294
|
routeItem,
|
|
295
295
|
location
|
|
@@ -314,12 +314,16 @@ var createNavigate = (routerState, revalidateCache) => {
|
|
|
314
314
|
if (!routeItem?.loader) return;
|
|
315
315
|
window.clearInterval(interval);
|
|
316
316
|
const signal = createSignal();
|
|
317
|
-
await Promise.all([revalidateCache({
|
|
317
|
+
const [result] = await Promise.all([revalidateCache({
|
|
318
318
|
routeItem,
|
|
319
319
|
pathname: nextLocation.pathname,
|
|
320
320
|
search: nextLocation.search,
|
|
321
321
|
signal
|
|
322
322
|
}), getLoaderDurationPromise(routeItem, nextLocation)]);
|
|
323
|
+
if (result) loaderState.setState((prev) => ({
|
|
324
|
+
...prev,
|
|
325
|
+
...result
|
|
326
|
+
}));
|
|
323
327
|
if (seq !== navigationSeq) return;
|
|
324
328
|
polling(routeItem, nextLocation);
|
|
325
329
|
};
|
|
@@ -351,7 +355,7 @@ var createNavigate = (routerState, revalidateCache) => {
|
|
|
351
355
|
//#endregion
|
|
352
356
|
//#region runtime/invalidate.ts
|
|
353
357
|
var redirect = Promise.resolve;
|
|
354
|
-
var createInvalidate = ({ routeItemDataState,
|
|
358
|
+
var createInvalidate = ({ routeItemDataState, loaderState, loaderMap, contextState }, revalidateCache) => {
|
|
355
359
|
const invalidatePath = async (routeItem, pathname, options) => {
|
|
356
360
|
const routePathname = routeItemDataState.getState().location.pathname;
|
|
357
361
|
loaderMap.delete(pathname);
|
|
@@ -367,12 +371,12 @@ var createInvalidate = ({ routeItemDataState, loaderStateRef, loaderMap, current
|
|
|
367
371
|
setContext
|
|
368
372
|
});
|
|
369
373
|
}
|
|
370
|
-
|
|
374
|
+
loaderState.setState((prev) => ({
|
|
371
375
|
...prev,
|
|
372
376
|
beforeLoadError: null
|
|
373
377
|
}));
|
|
374
378
|
} catch (error) {
|
|
375
|
-
|
|
379
|
+
loaderState.setState((prev) => ({
|
|
376
380
|
...prev,
|
|
377
381
|
beforeLoadError: error
|
|
378
382
|
}));
|
|
@@ -381,7 +385,11 @@ var createInvalidate = ({ routeItemDataState, loaderStateRef, loaderMap, current
|
|
|
381
385
|
routeItem,
|
|
382
386
|
pathname
|
|
383
387
|
});
|
|
384
|
-
if (pathname === routePathname)
|
|
388
|
+
if (result && pathname === routePathname) loaderState.setState({
|
|
389
|
+
data: result.data,
|
|
390
|
+
loaderError: result.error,
|
|
391
|
+
beforeLoadError: null
|
|
392
|
+
});
|
|
385
393
|
return {
|
|
386
394
|
path: pathname,
|
|
387
395
|
...result
|
|
@@ -436,7 +444,7 @@ var getRetry = (routeItem) => {
|
|
|
436
444
|
};
|
|
437
445
|
};
|
|
438
446
|
var createRevalidateCache = (routerState) => {
|
|
439
|
-
const {
|
|
447
|
+
const { contextState, loaderMap, loadingPromises } = routerState;
|
|
440
448
|
const evict = () => {
|
|
441
449
|
if (loaderMap.size <= routerConfig.maxCacheSize) return;
|
|
442
450
|
const oldestKey = loaderMap.keys().next().value;
|
|
@@ -460,8 +468,14 @@ var createRevalidateCache = (routerState) => {
|
|
|
460
468
|
}
|
|
461
469
|
if (isCacheItemFresh(path)) {
|
|
462
470
|
const item = moveItemToLastPosition(path);
|
|
463
|
-
if (item?.state)
|
|
464
|
-
return
|
|
471
|
+
if (!item?.state) return void 0;
|
|
472
|
+
return item.state.loaderError ? {
|
|
473
|
+
data: null,
|
|
474
|
+
error: item.state.loaderError
|
|
475
|
+
} : {
|
|
476
|
+
data: item.state.data,
|
|
477
|
+
error: null
|
|
478
|
+
};
|
|
465
479
|
}
|
|
466
480
|
const promise = (async () => {
|
|
467
481
|
if (!routeItem?.loader) return;
|
|
@@ -478,13 +492,12 @@ var createRevalidateCache = (routerState) => {
|
|
|
478
492
|
searchParams,
|
|
479
493
|
signal: effectiveSignal
|
|
480
494
|
});
|
|
481
|
-
loaderStateRef.set((prev) => ({
|
|
482
|
-
...prev,
|
|
483
|
-
data: result,
|
|
484
|
-
loaderError: null
|
|
485
|
-
}));
|
|
486
495
|
loaderMap.set(path, {
|
|
487
|
-
state:
|
|
496
|
+
state: {
|
|
497
|
+
data: result,
|
|
498
|
+
beforeLoadError: null,
|
|
499
|
+
loaderError: null
|
|
500
|
+
},
|
|
488
501
|
timestamp: Date.now(),
|
|
489
502
|
staleTime: routeItem.staleTime
|
|
490
503
|
});
|
|
@@ -502,27 +515,16 @@ var createRevalidateCache = (routerState) => {
|
|
|
502
515
|
if (retry && retry.count > retried) {
|
|
503
516
|
loadingPromises.delete(path);
|
|
504
517
|
if (retry.delay) await sleep(retry.delay);
|
|
505
|
-
|
|
518
|
+
return revalidateCache({
|
|
506
519
|
routeItem,
|
|
507
520
|
pathname,
|
|
508
521
|
search,
|
|
509
522
|
signal
|
|
510
523
|
}, retried + 1);
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
} else {
|
|
516
|
-
loaderStateRef.set((prev) => ({
|
|
517
|
-
...prev,
|
|
518
|
-
data: null,
|
|
519
|
-
loaderError: error
|
|
520
|
-
}));
|
|
521
|
-
return {
|
|
522
|
-
data: null,
|
|
523
|
-
error
|
|
524
|
-
};
|
|
525
|
-
}
|
|
524
|
+
} else return {
|
|
525
|
+
data: null,
|
|
526
|
+
error
|
|
527
|
+
};
|
|
526
528
|
} finally {
|
|
527
529
|
loadingPromises.delete(path);
|
|
528
530
|
}
|
|
@@ -533,20 +535,6 @@ var createRevalidateCache = (routerState) => {
|
|
|
533
535
|
return revalidateCache;
|
|
534
536
|
};
|
|
535
537
|
//#endregion
|
|
536
|
-
//#region cell.ts
|
|
537
|
-
var Cell = class {
|
|
538
|
-
constructor(_value) {
|
|
539
|
-
_defineProperty(this, "_value", void 0);
|
|
540
|
-
this._value = _value;
|
|
541
|
-
}
|
|
542
|
-
get value() {
|
|
543
|
-
return this._value;
|
|
544
|
-
}
|
|
545
|
-
set(action) {
|
|
546
|
-
this._value = typeof action === "function" ? action(this._value) : action;
|
|
547
|
-
}
|
|
548
|
-
};
|
|
549
|
-
//#endregion
|
|
550
538
|
//#region utils/createRouterInstance.ts
|
|
551
539
|
var createRouterInstance = () => {
|
|
552
540
|
const routerState = {
|
|
@@ -555,7 +543,6 @@ var createRouterInstance = () => {
|
|
|
555
543
|
location: {}
|
|
556
544
|
}),
|
|
557
545
|
pendingState: create(void 0),
|
|
558
|
-
currentLoaderState: create(emptyLoaderState),
|
|
559
546
|
scrollMapState: create({}),
|
|
560
547
|
contextState: create({}),
|
|
561
548
|
blockedRouteState: create({
|
|
@@ -563,7 +550,7 @@ var createRouterInstance = () => {
|
|
|
563
550
|
to: ""
|
|
564
551
|
}),
|
|
565
552
|
isOptimisticLoading: create(false),
|
|
566
|
-
|
|
553
|
+
loaderState: create(emptyLoaderState),
|
|
567
554
|
loaderMap: /* @__PURE__ */ new Map(),
|
|
568
555
|
loadingPromises: /* @__PURE__ */ new Map()
|
|
569
556
|
};
|
|
@@ -604,6 +591,7 @@ var createRouterInstance = () => {
|
|
|
604
591
|
usePendingState: () => useGlobalState(routerState.pendingState),
|
|
605
592
|
useContextState: () => useGlobalState(routerState.contextState),
|
|
606
593
|
useOptimisticLoading: () => useGlobalState(routerState.isOptimisticLoading),
|
|
594
|
+
useLoaderState: () => useGlobalState(routerState.loaderState)[0],
|
|
607
595
|
useParams: () => getParamsObject(),
|
|
608
596
|
useNavigate: () => {
|
|
609
597
|
const { blockedRouteState } = routerState;
|
|
@@ -679,6 +667,9 @@ var useNavigation = () => {
|
|
|
679
667
|
}, [navigate]);
|
|
680
668
|
};
|
|
681
669
|
//#endregion
|
|
670
|
+
//#region hooks/useLoaderState.ts
|
|
671
|
+
var useLoaderState = router.hooks.useLoaderState;
|
|
672
|
+
//#endregion
|
|
682
673
|
//#region hooks/useApplyCustomAnimation.ts
|
|
683
674
|
var useApplyCustomAnimation = (animationDuration) => {
|
|
684
675
|
useEffect(() => {
|
|
@@ -761,7 +752,7 @@ var Router = ({ routes, defaultBeforeLoad, defaultAfterLoad, animationDuration,
|
|
|
761
752
|
const [routeItemData] = useRouteItemData();
|
|
762
753
|
const [pendingRouteData] = usePendingState();
|
|
763
754
|
const [isOptimisticLoading] = useOptimisticLoading();
|
|
764
|
-
const loaderState =
|
|
755
|
+
const loaderState = useLoaderState();
|
|
765
756
|
const isLoading = Boolean(pendingRouteData);
|
|
766
757
|
useNavigation();
|
|
767
758
|
useSetRouterConfig({
|
|
@@ -929,9 +920,6 @@ var Form = ({ children, action, onSuccess, onError, autoReset = true }) => {
|
|
|
929
920
|
//#region hooks/useParams.ts
|
|
930
921
|
var useParams = router.hooks.useParams;
|
|
931
922
|
//#endregion
|
|
932
|
-
//#region hooks/useLoaderState.ts
|
|
933
|
-
var useLoaderState = () => router.state.loaderStateRef.value;
|
|
934
|
-
//#endregion
|
|
935
923
|
//#region hooks/useInvalidate.ts
|
|
936
924
|
var useInvalidate = () => router.runtime.invalidate;
|
|
937
925
|
//#endregion
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { type InvalidateOptions, InvalidateResult, RevalidateCache, RouterState } from '../types';
|
|
2
|
-
export declare const createInvalidate: ({ routeItemDataState,
|
|
2
|
+
export declare const createInvalidate: ({ routeItemDataState, loaderState, loaderMap, contextState }: RouterState, revalidateCache: RevalidateCache) => (pathList?: string | string[], options?: InvalidateOptions) => Promise<InvalidateResult[]>;
|
package/dist/types.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { ComponentType, type CSSProperties, Dispatch, MouseEvent, ReactElement, ReactNode, Ref, SetStateAction } from 'react';
|
|
2
2
|
import { Store, useGlobalState } from './create';
|
|
3
|
-
import { Cell } from './cell';
|
|
4
3
|
export declare const LAZY_MARKER: unique symbol;
|
|
5
4
|
export type LazyComponent = {
|
|
6
5
|
readonly [LAZY_MARKER]: true;
|
|
@@ -118,7 +117,6 @@ export type LoadingPromise = Promise<{
|
|
|
118
117
|
export type RouterState = {
|
|
119
118
|
routeItemDataState: Store<RouteItemData>;
|
|
120
119
|
pendingState: Store<RouteItemData | undefined>;
|
|
121
|
-
currentLoaderState: Store<LoaderState>;
|
|
122
120
|
scrollMapState: Store<Record<string, number>>;
|
|
123
121
|
contextState: Store<Record<string, unknown>>;
|
|
124
122
|
blockedRouteState: Store<{
|
|
@@ -126,7 +124,7 @@ export type RouterState = {
|
|
|
126
124
|
to: string;
|
|
127
125
|
}>;
|
|
128
126
|
isOptimisticLoading: Store<boolean>;
|
|
129
|
-
|
|
127
|
+
loaderState: Store<LoaderState>;
|
|
130
128
|
loaderMap: Map<string, LoaderStateItem>;
|
|
131
129
|
loadingPromises: Map<string, LoadingPromise>;
|
|
132
130
|
};
|
|
@@ -147,6 +145,7 @@ export type RouterType = {
|
|
|
147
145
|
usePendingState: () => ReturnType<typeof useGlobalState<RouteItemData | undefined>>;
|
|
148
146
|
useContextState: () => ReturnType<typeof useGlobalState<Record<string, unknown>>>;
|
|
149
147
|
useOptimisticLoading: () => ReturnType<typeof useGlobalState<boolean>>;
|
|
148
|
+
useLoaderState: <T>() => LoaderState<T>;
|
|
150
149
|
useParams: <T>() => T;
|
|
151
150
|
useNavigate: () => (arg: Location | string | -1) => Promise<void>;
|
|
152
151
|
useGetAction: (actionKey: string) => {
|
|
@@ -1,8 +1,2 @@
|
|
|
1
|
-
import { RevalidateCacheArgs, RouterState } from '../types';
|
|
2
|
-
export declare const createRevalidateCache: (routerState: RouterState) => ({ routeItem, pathname, search, signal }: RevalidateCacheArgs, retried?: number) =>
|
|
3
|
-
data: unknown;
|
|
4
|
-
error: null;
|
|
5
|
-
} | {
|
|
6
|
-
data: null;
|
|
7
|
-
error: unknown;
|
|
8
|
-
} | undefined>;
|
|
1
|
+
import { LoadingPromise, RevalidateCacheArgs, RouterState } from '../types';
|
|
2
|
+
export declare const createRevalidateCache: (routerState: RouterState) => ({ routeItem, pathname, search, signal }: RevalidateCacheArgs, retried?: number) => LoadingPromise;
|
package/package.json
CHANGED