@kitbag/router 0.27.0 → 0.29.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/dist/components/routerLink.d.ts +1 -0
- package/dist/components/viewTransition.d.ts +16 -0
- package/dist/components/viewTransition.spec-d.d.ts +1 -0
- package/dist/compositions/useViewTransition.d.ts +5 -0
- package/dist/kitbag-router.js +2073 -1708
- package/dist/kitbag-router.umd.cjs +2 -2
- package/dist/main.d.ts +27 -1
- package/dist/models/hooks.d.ts +9 -7
- package/dist/services/addLoader.d.ts +6 -3
- package/dist/services/addRedirect.d.ts +3 -0
- package/dist/services/addRedirect.spec.d.ts +1 -0
- package/dist/services/addView.d.ts +9 -6
- package/dist/services/combineContext.d.ts +2 -0
- package/dist/services/createHook.d.ts +7 -0
- package/dist/services/createHook.spec-d.d.ts +1 -0
- package/dist/services/createHook.spec.d.ts +1 -0
- package/dist/services/createLoader.d.ts +7 -0
- package/dist/services/createLoader.spec-d.d.ts +1 -0
- package/dist/services/createLoader.spec.d.ts +1 -0
- package/dist/services/createRoute.d.ts +2 -4
- package/dist/services/createRouter.d.ts +2 -2
- package/dist/services/createRouterAssets.d.ts +26 -0
- package/dist/services/createRouterAssets.spec-d.d.ts +1 -0
- package/dist/services/createRouterHistory.d.ts +10 -2
- package/dist/services/createRouterHooks.d.ts +4 -2
- package/dist/services/createView.d.ts +10 -0
- package/dist/services/createView.spec-d.d.ts +1 -0
- package/dist/services/createView.spec.d.ts +1 -0
- package/dist/services/createViewTransitions.browser.spec.d.ts +1 -0
- package/dist/services/createViewTransitions.d.ts +38 -0
- package/dist/services/getRouteContext.d.ts +6 -0
- package/dist/services/getRoutesForRouter.d.ts +6 -1
- package/dist/services/history.d.ts +1 -0
- package/dist/services/registerHookContext.spec.d.ts +1 -0
- package/dist/services/routeViews.d.ts +7 -0
- package/dist/services/toHook.d.ts +3 -0
- package/dist/services/urlParser.d.ts +1 -1
- package/dist/services/withRouteMethods.d.ts +2 -3
- package/dist/tests/navigationBehavior.browser.spec.d.ts +1 -0
- package/dist/tests/viewTransitions.browser.spec.d.ts +1 -0
- package/dist/types/addLoader.d.ts +7 -4
- package/dist/types/addView.d.ts +11 -7
- package/dist/types/createRouteOptions.d.ts +17 -65
- package/dist/types/hook.d.ts +43 -0
- package/dist/types/hooks.d.ts +17 -11
- package/dist/types/loader.d.ts +59 -0
- package/dist/types/navigation.d.ts +2 -0
- package/dist/types/props.d.ts +0 -18
- package/dist/types/register.d.ts +2 -2
- package/dist/types/resolved.d.ts +4 -0
- package/dist/types/route.d.ts +2 -3
- package/dist/types/routeContext.d.ts +8 -0
- package/dist/types/routeViews.d.ts +5 -7
- package/dist/types/routeWithParams.d.ts +1 -1
- package/dist/types/router.d.ts +18 -4
- package/dist/types/routerPlugin.d.ts +7 -5
- package/dist/types/routerPush.d.ts +8 -0
- package/dist/types/routerReplace.d.ts +3 -0
- package/dist/types/url.d.ts +1 -0
- package/dist/types/useLink.d.ts +5 -0
- package/dist/types/view.d.ts +58 -0
- package/dist/types/viewTransition.d.ts +49 -0
- package/dist/utilities/navigation.d.ts +15 -0
- package/dist/utilities/promises.d.ts +4 -0
- package/dist/utilities/promises.spec.d.ts +1 -0
- package/dist/utilities/testHelpers.d.ts +32 -100
- package/dist/utilities/viewTransition.d.ts +11 -0
- package/dist/utilities/viewTransition.spec.d.ts +1 -0
- package/package.json +7 -6
- package/dist/services/createRouteRedirects.d.ts +0 -10
- package/dist/services/createRouteViews.d.ts +0 -16
- /package/dist/{services/createRouteRedirects.spec.d.ts → components/viewTransition.browser.spec.d.ts} +0 -0
|
@@ -1,20 +1,15 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { NavigationBehavior } from './navigation';
|
|
2
2
|
import { Param } from './paramTypes';
|
|
3
3
|
import { PrefetchConfig } from './prefetch';
|
|
4
|
+
import { ViewTransitionConfig } from './viewTransition';
|
|
4
5
|
import { RouteMeta } from './register';
|
|
5
6
|
import { Route, RouteInternal } from './route';
|
|
6
|
-
import { ResolvedRoute, WithData } from './resolved';
|
|
7
|
-
import { ComponentProps } from '../services/component';
|
|
8
|
-
import { PropsCallbackContext } from './props';
|
|
9
|
-
import { AnyFunction, Identity, MaybePromise } from './utilities';
|
|
10
7
|
import { ToMeta } from './meta';
|
|
11
8
|
import { ToName } from './name';
|
|
12
9
|
import { UrlPart, UrlQueryPart } from '../services/withParams';
|
|
13
10
|
import { RouteContext } from './routeContext';
|
|
14
|
-
import { RouterViewProps } from '../components/routerView';
|
|
15
11
|
import { ToUrl } from './url';
|
|
16
12
|
import { CombineUrl } from '../services/combineUrl';
|
|
17
|
-
import { RouteView } from './routeViews';
|
|
18
13
|
export type WithHost<THost extends string | UrlPart = string | UrlPart> = {
|
|
19
14
|
/**
|
|
20
15
|
* Host part of URL.
|
|
@@ -31,20 +26,6 @@ export declare function isWithParent<T extends Record<string, unknown>>(options:
|
|
|
31
26
|
export type WithoutParent = {
|
|
32
27
|
parent?: never;
|
|
33
28
|
};
|
|
34
|
-
/**
|
|
35
|
-
* This type is used to strip the component and components properties from the options object
|
|
36
|
-
* when creating a Route to simplify and minimize the output type.
|
|
37
|
-
*/
|
|
38
|
-
type WithoutComponents = {
|
|
39
|
-
component: never;
|
|
40
|
-
components: never;
|
|
41
|
-
};
|
|
42
|
-
export declare function isWithComponent<T extends Record<string, unknown>>(options: T): options is T & {
|
|
43
|
-
component: Component;
|
|
44
|
-
};
|
|
45
|
-
export declare function isWithComponents<T extends Record<string, unknown>>(options: T): options is T & {
|
|
46
|
-
components: Record<string, Component>;
|
|
47
|
-
};
|
|
48
29
|
export type CreateRouteOptions<TName extends string | undefined = string | undefined, TMeta extends RouteMeta = RouteMeta> = {
|
|
49
30
|
/**
|
|
50
31
|
* Name for route, used to create route keys and in navigation.
|
|
@@ -70,6 +51,12 @@ export type CreateRouteOptions<TName extends string | undefined = string | undef
|
|
|
70
51
|
* Determines what assets are prefetched when router-link is rendered for this route. Overrides router level prefetch.
|
|
71
52
|
*/
|
|
72
53
|
prefetch?: PrefetchConfig;
|
|
54
|
+
/** Overrides the parent route and router navigation behavior. */
|
|
55
|
+
navigation?: NavigationBehavior;
|
|
56
|
+
/**
|
|
57
|
+
* Animates navigations to this route with the View Transitions API. Overrides router level viewTransition.
|
|
58
|
+
*/
|
|
59
|
+
viewTransition?: ViewTransitionConfig;
|
|
73
60
|
/**
|
|
74
61
|
* Type params for additional data intended to be stored in history state, all keys will be optional unless a default is provided.
|
|
75
62
|
*/
|
|
@@ -79,20 +66,7 @@ export type CreateRouteOptions<TName extends string | undefined = string | undef
|
|
|
79
66
|
*/
|
|
80
67
|
parent?: Route;
|
|
81
68
|
/**
|
|
82
|
-
*
|
|
83
|
-
*
|
|
84
|
-
* @default RouterView
|
|
85
|
-
* @deprecated Use the chainable `addView` method on the route instead: `createRoute({ ... }).addView(component, { props })`.
|
|
86
|
-
*/
|
|
87
|
-
component?: Component;
|
|
88
|
-
/**
|
|
89
|
-
* An object of named components to render using named views
|
|
90
|
-
*
|
|
91
|
-
* @deprecated Use the chainable `addView` method on the route instead: `createRoute({ ... }).addView(component, { name, props })`.
|
|
92
|
-
*/
|
|
93
|
-
components?: Record<string, Component>;
|
|
94
|
-
/**
|
|
95
|
-
* Related routes and rejections for the route. The context is exposed to the hooks and props callback functions for this route.
|
|
69
|
+
* See [Context](https://kitbag-router.netlify.app/advanced-concepts/context).
|
|
96
70
|
*/
|
|
97
71
|
context?: RouteContext[];
|
|
98
72
|
/**
|
|
@@ -100,16 +74,7 @@ export type CreateRouteOptions<TName extends string | undefined = string | undef
|
|
|
100
74
|
*/
|
|
101
75
|
hoist?: boolean;
|
|
102
76
|
};
|
|
103
|
-
|
|
104
|
-
export type RouterViewPropsGetter<TOptions extends CreateRouteOptions = CreateRouteOptions> = (route: ResolvedRoute<ToRoute<TOptions>> & WithData<ToRoute<TOptions>>, context: PropsCallbackContext<ToRoute<TOptions>, TOptions>) => MaybePromise<RouterViewProps & Record<string, unknown>>;
|
|
105
|
-
export type ComponentPropsAreOptional<TComponent extends Component> = Partial<ComponentProps<TComponent>> extends ComponentProps<TComponent> ? true : false;
|
|
106
|
-
type RoutePropsRecord<TOptions extends CreateRouteOptions = CreateRouteOptions, TComponents extends Record<string, Component> = Record<string, Component>> = {
|
|
107
|
-
[K in keyof TComponents as ComponentPropsAreOptional<TComponents[K]> extends true ? K : never]?: PropsGetter<TOptions, TComponents[K]>;
|
|
108
|
-
} & {
|
|
109
|
-
[K in keyof TComponents as ComponentPropsAreOptional<TComponents[K]> extends false ? K : never]: PropsGetter<TOptions, TComponents[K]>;
|
|
110
|
-
};
|
|
111
|
-
export type CreateRouteProps<TOptions extends CreateRouteOptions = CreateRouteOptions> = TOptions['component'] extends Component ? PropsGetter<TOptions, TOptions['component']> : TOptions['components'] extends Record<string, Component> ? RoutePropsRecord<TOptions, TOptions['components']> : RouterViewPropsGetter<TOptions>;
|
|
112
|
-
type ToMatch<TOptions extends CreateRouteOptions, TProps = undefined> = Omit<TOptions, 'meta' | 'name' | 'component' | 'components' | 'parent'> & {
|
|
77
|
+
type ToMatch<TOptions extends CreateRouteOptions> = Omit<TOptions, 'meta' | 'name' | 'parent'> & {
|
|
113
78
|
id: string;
|
|
114
79
|
name: ToName<TOptions['name']>;
|
|
115
80
|
/**
|
|
@@ -117,9 +82,9 @@ type ToMatch<TOptions extends CreateRouteOptions, TProps = undefined> = Omit<TOp
|
|
|
117
82
|
*/
|
|
118
83
|
meta: ToMeta<TOptions['meta']>;
|
|
119
84
|
/**
|
|
120
|
-
* The views this route renders, keyed by view name.
|
|
85
|
+
* The views this route renders, keyed by view name. Added by `addView`.
|
|
121
86
|
*/
|
|
122
|
-
views:
|
|
87
|
+
views: {};
|
|
123
88
|
/**
|
|
124
89
|
* The loaders this route runs, keyed by loader name. Always empty here — loaders are only added via
|
|
125
90
|
* the route's `addLoader`.
|
|
@@ -130,29 +95,16 @@ type ToMatch<TOptions extends CreateRouteOptions, TProps = undefined> = Omit<TOp
|
|
|
130
95
|
* The matches for a route, from greatest ancestor to the route itself. Each carries its own views, so
|
|
131
96
|
* there is no second tuple to keep aligned with this one.
|
|
132
97
|
*/
|
|
133
|
-
type ToMatches<TOptions extends CreateRouteOptions
|
|
134
|
-
parent: infer TParent extends Route;
|
|
135
|
-
} ? [...TParent['matches'], ToMatch<TOptions, TProps>] : [ToMatch<TOptions, TProps>];
|
|
136
|
-
/**
|
|
137
|
-
* Builds a views record from the props argument, which is either a single getter for the unnamed view or
|
|
138
|
-
* a record of getters keyed by view name.
|
|
139
|
-
*/
|
|
140
|
-
type PropsToViews<TProps> = [TProps] extends [AnyFunction] ? {
|
|
141
|
-
default: RouteView<ReturnType<TProps>>;
|
|
142
|
-
} : [TProps] extends [Record<string, AnyFunction>] ? {
|
|
143
|
-
[K in keyof TProps]: RouteView<ReturnType<TProps[K]>>;
|
|
144
|
-
} : {};
|
|
98
|
+
type ToMatches<TOptions extends CreateRouteOptions> = TOptions extends WithParent ? [...TOptions['parent']['matches'], ToMatch<TOptions>] : [ToMatch<TOptions>];
|
|
145
99
|
/**
|
|
146
100
|
* The url a route resolves to, combined with its parent's unless the route is hoisted.
|
|
147
101
|
*/
|
|
148
|
-
export type ToRouteUrl<TOptions extends CreateRouteOptions> = TOptions extends
|
|
149
|
-
parent: infer TParent extends Route;
|
|
150
|
-
} ? TOptions['hoist'] extends true ? ToUrl<TOptions & WithoutComponents> : CombineUrl<TParent, ToUrl<TOptions & WithoutComponents>> : ToUrl<Identity<TOptions & WithoutComponents>>;
|
|
102
|
+
export type ToRouteUrl<TOptions extends CreateRouteOptions> = TOptions extends WithParent ? TOptions['hoist'] extends true ? ToUrl<TOptions> : CombineUrl<TOptions['parent'], ToUrl<TOptions>> : ToUrl<TOptions>;
|
|
151
103
|
/**
|
|
152
|
-
* The matches for a route,
|
|
104
|
+
* The matches for a route, before any views or loaders are added.
|
|
153
105
|
*/
|
|
154
|
-
export type ToRouteMatches<TOptions extends CreateRouteOptions
|
|
155
|
-
export type ToRoute<TOptions extends CreateRouteOptions
|
|
106
|
+
export type ToRouteMatches<TOptions extends CreateRouteOptions> = ToMatches<TOptions>;
|
|
107
|
+
export type ToRoute<TOptions extends CreateRouteOptions> = CreateRouteOptions extends TOptions ? Route : Route<ToRouteUrl<TOptions>, ToRouteMatches<TOptions>>;
|
|
156
108
|
/**
|
|
157
109
|
* Nests a route under its parent. A hoisted route keeps everything of its parent's except the url: its own
|
|
158
110
|
* url stands alone and it inherits none of the parent's aliases.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { RouteContext, RouteContextToRejection, RouteContextToRoute } from './routeContext';
|
|
2
|
+
import { ResolvedRouteUnion } from './resolved';
|
|
3
|
+
import { Route, Routes } from './route';
|
|
4
|
+
import { BeforeHookContext, AfterHookContext } from './hooks';
|
|
5
|
+
import { RouteUpdate } from './routeUpdate';
|
|
6
|
+
import { AnyFunction, MaybePromise } from './utilities';
|
|
7
|
+
export declare const IS_HOOK_SYMBOL: unique symbol;
|
|
8
|
+
export type HookInternal = {
|
|
9
|
+
[IS_HOOK_SYMBOL]: true;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Context provided to a reusable hook, narrowed by whether it runs before or after navigation.
|
|
13
|
+
*/
|
|
14
|
+
export type HookCallbackContext<TContext extends readonly RouteContext[] = [], TRoutes extends Routes = Routes> = {
|
|
15
|
+
from: ResolvedRouteUnion<TRoutes[number]> | null;
|
|
16
|
+
update?: RouteUpdate;
|
|
17
|
+
} & (Omit<BeforeHookContext<Route, RouteContextToRoute<[...TContext]>, RouteContextToRejection<[...TContext]>>, 'update'> | Omit<AfterHookContext<Route, RouteContextToRoute<[...TContext]>, RouteContextToRejection<[...TContext]>>, 'update'>);
|
|
18
|
+
/**
|
|
19
|
+
* Options for a reusable route hook.
|
|
20
|
+
*/
|
|
21
|
+
export type CreateHookOptions<TContext extends readonly RouteContext[] = [], TRoutes extends Routes = Routes> = {
|
|
22
|
+
hook: (route: ResolvedRouteUnion<TRoutes[number]> | null, context: HookCallbackContext<TContext, TRoutes>) => MaybePromise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* See [Context](https://kitbag-router.netlify.app/advanced-concepts/context).
|
|
25
|
+
*/
|
|
26
|
+
context?: TContext;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Creates hooks with callbacks typed to the router's resolved routes.
|
|
30
|
+
*/
|
|
31
|
+
export type CreateHook<TRoutes extends Routes = Routes> = <const TContext extends readonly RouteContext[] = []>(options: CreateHookOptions<TContext, TRoutes>) => Hook<TContext>;
|
|
32
|
+
/**
|
|
33
|
+
* A reusable hook that can be attached before or after a route enters, updates, or leaves.
|
|
34
|
+
*/
|
|
35
|
+
export type Hook<TContext extends readonly RouteContext[] = []> = {
|
|
36
|
+
hook: AnyFunction<MaybePromise<void>>;
|
|
37
|
+
context: TContext;
|
|
38
|
+
};
|
|
39
|
+
export type AnyHook = Hook<readonly RouteContext[]>;
|
|
40
|
+
/**
|
|
41
|
+
* Determines whether a value is a reusable hook.
|
|
42
|
+
*/
|
|
43
|
+
export declare function isHook(value: unknown): value is AnyHook & HookInternal;
|
package/dist/types/hooks.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { AnyHook } from './hook';
|
|
1
2
|
import { Hooks } from '../models/hooks';
|
|
2
3
|
import { RouterResolvedRouteUnion, ResolvedRouteUnion } from './resolved';
|
|
3
|
-
import { MaybePromise } from './utilities';
|
|
4
|
+
import { AnyFunction, MaybePromise } from './utilities';
|
|
4
5
|
import { Route, Routes } from './route';
|
|
5
6
|
import { RouterReject } from './routerReject';
|
|
6
7
|
import { RouterPush } from './routerPush';
|
|
@@ -61,7 +62,7 @@ export type ComponentHook = BeforeEnterHook | BeforeUpdateHook | BeforeLeaveHook
|
|
|
61
62
|
*/
|
|
62
63
|
export type ComponentHookRegistration = {
|
|
63
64
|
lifecycle: HookLifecycle;
|
|
64
|
-
hook: ComponentHook;
|
|
65
|
+
hook: ComponentHook | AnyHook;
|
|
65
66
|
depth: number;
|
|
66
67
|
};
|
|
67
68
|
/**
|
|
@@ -73,6 +74,10 @@ export type AddGlobalHooks = (hooks: Hooks) => void;
|
|
|
73
74
|
* A function to remove a previously added route hook.
|
|
74
75
|
*/
|
|
75
76
|
export type HookRemove = () => void;
|
|
77
|
+
/**
|
|
78
|
+
* Registers an inline callback or a reusable hook definition.
|
|
79
|
+
*/
|
|
80
|
+
export type AddHook<THook extends AnyFunction> = (hook: THook | AnyHook) => HookRemove;
|
|
76
81
|
/**
|
|
77
82
|
* Enumerates the lifecycle events for before route hooks.
|
|
78
83
|
*/
|
|
@@ -85,14 +90,16 @@ export type AfterHookLifecycle = 'onAfterRouteEnter' | 'onAfterRouteUpdate' | 'o
|
|
|
85
90
|
* Union type for all route hook lifecycle events.
|
|
86
91
|
*/
|
|
87
92
|
export type HookLifecycle = BeforeHookLifecycle | AfterHookLifecycle;
|
|
88
|
-
type AfterHookContext<TRoute extends Route, TRoutes extends Routes, TRejections extends Rejections> = {
|
|
93
|
+
export type AfterHookContext<TRoute extends Route, TRoutes extends Routes, TRejections extends Rejections> = {
|
|
94
|
+
lifecycle: 'after';
|
|
89
95
|
reject: RouterReject<TRejections>;
|
|
90
96
|
push: RouterPush<TRoutes>;
|
|
91
97
|
replace: RouterReplace<TRoutes>;
|
|
92
98
|
update: RouteUpdate<ResolvedRouteUnion<TRoute>>;
|
|
93
99
|
signal: AbortSignal;
|
|
94
100
|
};
|
|
95
|
-
type BeforeHookContext<TRouteTo extends Route, TRoutes extends Routes, TRejections extends Rejections> = {
|
|
101
|
+
export type BeforeHookContext<TRouteTo extends Route, TRoutes extends Routes, TRejections extends Rejections> = {
|
|
102
|
+
lifecycle: 'before';
|
|
96
103
|
reject: RouterReject<TRejections>;
|
|
97
104
|
push: RouterPush<TRoutes>;
|
|
98
105
|
replace: RouterReplace<TRoutes>;
|
|
@@ -104,32 +111,32 @@ export type BeforeEnterHookContext<TRoutes extends Routes = Routes, TRejections
|
|
|
104
111
|
from: ResolvedRouteUnion<TRouteFrom> | null;
|
|
105
112
|
};
|
|
106
113
|
export type BeforeEnterHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> = (to: ResolvedRouteUnion<TRouteTo>, context: BeforeEnterHookContext<TRoutes, TRejections, TRouteTo, TRouteFrom>) => MaybePromise<void>;
|
|
107
|
-
export type AddBeforeEnterHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> =
|
|
114
|
+
export type AddBeforeEnterHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> = AddHook<BeforeEnterHook<TRoutes, TRejections, TRouteTo, TRouteFrom>>;
|
|
108
115
|
export type BeforeUpdateHookContext<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> = BeforeHookContext<TRouteTo, TRoutes, TRejections> & {
|
|
109
116
|
from: ResolvedRouteUnion<TRouteFrom> | null;
|
|
110
117
|
};
|
|
111
118
|
export type BeforeUpdateHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> = (to: ResolvedRouteUnion<TRouteTo>, context: BeforeUpdateHookContext<TRoutes, TRejections, TRouteTo, TRouteFrom>) => MaybePromise<void>;
|
|
112
|
-
export type AddBeforeUpdateHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> =
|
|
119
|
+
export type AddBeforeUpdateHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> = AddHook<BeforeUpdateHook<TRoutes, TRejections, TRouteTo, TRouteFrom>>;
|
|
113
120
|
export type BeforeLeaveHookContext<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> = Omit<BeforeHookContext<TRouteTo, TRoutes, TRejections>, 'update'> & {
|
|
114
121
|
from: ResolvedRouteUnion<TRouteFrom>;
|
|
115
122
|
};
|
|
116
123
|
export type BeforeLeaveHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> = (to: ResolvedRouteUnion<TRouteTo> | null, context: BeforeLeaveHookContext<TRoutes, TRejections, TRouteTo, TRouteFrom>) => MaybePromise<void>;
|
|
117
|
-
export type AddBeforeLeaveHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> =
|
|
124
|
+
export type AddBeforeLeaveHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> = AddHook<BeforeLeaveHook<TRoutes, TRejections, TRouteTo, TRouteFrom>>;
|
|
118
125
|
export type AfterEnterHookContext<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> = AfterHookContext<TRouteTo, TRoutes, TRejections> & {
|
|
119
126
|
from: ResolvedRouteUnion<TRouteFrom> | null;
|
|
120
127
|
};
|
|
121
128
|
export type AfterEnterHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> = (to: ResolvedRouteUnion<TRouteTo>, context: AfterEnterHookContext<TRoutes, TRejections, TRouteTo, TRouteFrom>) => MaybePromise<void>;
|
|
122
|
-
export type AddAfterEnterHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> =
|
|
129
|
+
export type AddAfterEnterHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> = AddHook<AfterEnterHook<TRoutes, TRejections, TRouteTo, TRouteFrom>>;
|
|
123
130
|
export type AfterUpdateHookContext<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> = AfterHookContext<TRouteTo, TRoutes, TRejections> & {
|
|
124
131
|
from: ResolvedRouteUnion<TRouteFrom> | null;
|
|
125
132
|
};
|
|
126
133
|
export type AfterUpdateHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> = (to: ResolvedRouteUnion<TRouteTo>, context: AfterUpdateHookContext<TRoutes, TRejections, TRouteTo, TRouteFrom>) => MaybePromise<void>;
|
|
127
|
-
export type AddAfterUpdateHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> =
|
|
134
|
+
export type AddAfterUpdateHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> = AddHook<AfterUpdateHook<TRoutes, TRejections, TRouteTo, TRouteFrom>>;
|
|
128
135
|
export type AfterLeaveHookContext<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> = Omit<AfterHookContext<TRouteTo, TRoutes, TRejections>, 'update'> & {
|
|
129
136
|
from: ResolvedRouteUnion<TRouteFrom>;
|
|
130
137
|
};
|
|
131
138
|
export type AfterLeaveHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> = (to: ResolvedRouteUnion<TRouteTo> | null, context: AfterLeaveHookContext<TRoutes, TRejections, TRouteTo, TRouteFrom>) => MaybePromise<void>;
|
|
132
|
-
export type AddAfterLeaveHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> =
|
|
139
|
+
export type AddAfterLeaveHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> = AddHook<AfterLeaveHook<TRoutes, TRejections, TRouteTo, TRouteFrom>>;
|
|
133
140
|
export type BeforeHookResponse = CallbackContextSuccess | CallbackContextPush | CallbackContextRedirect | CallbackContextReject | CallbackContextAbort;
|
|
134
141
|
export type AfterHookResponse = CallbackContextSuccess | CallbackContextPush | CallbackContextReject;
|
|
135
142
|
export type HookRunnerContext<TRoutes extends Routes = Routes> = {
|
|
@@ -167,4 +174,3 @@ export type ErrorHookRunnerContext<TRoutes extends Routes = Routes> = {
|
|
|
167
174
|
source: 'props' | 'loader' | 'hook';
|
|
168
175
|
};
|
|
169
176
|
export type ErrorHookRunner = (error: unknown, context: ErrorHookRunnerContext) => void;
|
|
170
|
-
export {};
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { TransformerOptions } from '../services/payload';
|
|
2
|
+
import { PrefetchConfig } from './prefetch';
|
|
3
|
+
import { RouteContext, RouteContextToRejection, RouteContextToRoute } from './routeContext';
|
|
4
|
+
import { RouterPush } from './routerPush';
|
|
5
|
+
import { RouterReject } from './routerReject';
|
|
6
|
+
import { RouterReplace } from './routerReplace';
|
|
7
|
+
import { AnyFunction } from './utilities';
|
|
8
|
+
import { ResolvedRouteUnion } from './resolved';
|
|
9
|
+
import { Routes } from './route';
|
|
10
|
+
export declare const IS_LOADER_SYMBOL: unique symbol;
|
|
11
|
+
export type LoaderInternal = {
|
|
12
|
+
[IS_LOADER_SYMBOL]: true;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Navigation helpers available to a reusable loader, typed from its declared context.
|
|
16
|
+
*/
|
|
17
|
+
export type LoaderCallbackContext<TContext extends readonly RouteContext[] = []> = {
|
|
18
|
+
push: RouterPush<RouteContextToRoute<[...TContext]>>;
|
|
19
|
+
replace: RouterReplace<RouteContextToRoute<[...TContext]>>;
|
|
20
|
+
reject: RouterReject<RouteContextToRejection<[...TContext]>>;
|
|
21
|
+
signal: AbortSignal;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Options for a reusable loader that receives the resolved route and its declared context helpers.
|
|
25
|
+
*/
|
|
26
|
+
export type CreateLoaderOptions<TContext extends readonly RouteContext[] = [], TData = unknown, TRoutes extends Routes = Routes> = TransformerOptions<NoInfer<Awaited<TData>>> & {
|
|
27
|
+
/**
|
|
28
|
+
* Loads a value or promise from the resolved route.
|
|
29
|
+
*/
|
|
30
|
+
load: (route: ResolvedRouteUnion<TRoutes[number]>, context: LoaderCallbackContext<TContext>) => TData;
|
|
31
|
+
/**
|
|
32
|
+
* See [Context](https://kitbag-router.netlify.app/advanced-concepts/context).
|
|
33
|
+
*/
|
|
34
|
+
context?: TContext;
|
|
35
|
+
/**
|
|
36
|
+
* Default prefetch behavior, overridable when attaching the loader.
|
|
37
|
+
*/
|
|
38
|
+
prefetch?: PrefetchConfig;
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Creates loaders with callbacks typed to the router's resolved routes.
|
|
42
|
+
*/
|
|
43
|
+
export type CreateLoader<TRoutes extends Routes = Routes> = <const TContext extends readonly RouteContext[] = [], TData = unknown>(options: CreateLoaderOptions<TContext, TData, TRoutes>) => Loader<TData, TContext>;
|
|
44
|
+
/**
|
|
45
|
+
* A reusable loader definition, with its context normalized to an array.
|
|
46
|
+
*/
|
|
47
|
+
export type Loader<TData = unknown, TContext extends readonly RouteContext[] = []> = TransformerOptions<Awaited<TData>> & {
|
|
48
|
+
load: AnyFunction<TData>;
|
|
49
|
+
context: TContext;
|
|
50
|
+
prefetch?: PrefetchConfig;
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* The runtime shape after a loader's route, context, and return types have been erased.
|
|
54
|
+
*/
|
|
55
|
+
export type AnyLoader = Loader<any, readonly RouteContext[]>;
|
|
56
|
+
/**
|
|
57
|
+
* Determines whether a value is a reusable loader created by `createLoader`.
|
|
58
|
+
*/
|
|
59
|
+
export declare function isLoader(value: unknown): value is AnyLoader & LoaderInternal;
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { ComputedRef } from 'vue';
|
|
2
2
|
import { ResolvedRoute } from './resolved';
|
|
3
|
+
/** Whether navigation commits immediately or waits for its props, loaders, and components. */
|
|
4
|
+
export type NavigationBehavior = 'progressive' | 'blocking';
|
|
3
5
|
/**
|
|
4
6
|
* The navigation under way, if any, and how far it has come. A navigation is under way from the moment it
|
|
5
7
|
* is asked for until the route it leads to has everything it renders with, or it is rejected, aborted, or
|
package/dist/types/props.d.ts
CHANGED
|
@@ -1,25 +1,7 @@
|
|
|
1
|
-
import { CreateRouteOptions } from './createRouteOptions';
|
|
2
1
|
import { Route } from './route';
|
|
3
|
-
import { RouterReject } from './routerReject';
|
|
4
|
-
import { RouterPush } from './routerPush';
|
|
5
|
-
import { RouterReplace } from './routerReplace';
|
|
6
|
-
import { ExtractRouteContextRejections, ExtractRouteContextRoutes } from './routeContext';
|
|
7
|
-
import { ResolvedRoute } from './resolved';
|
|
8
|
-
import { RouteUpdate } from './routeUpdate';
|
|
9
2
|
import { LoadersDataReturnType } from './routeLoaders';
|
|
10
3
|
import { ViewsPropsReturnType } from './routeViews';
|
|
11
4
|
import { LastInArray } from './utilities';
|
|
12
|
-
/**
|
|
13
|
-
* Context provided to props callback functions
|
|
14
|
-
*/
|
|
15
|
-
export type PropsCallbackContext<TRoute extends Route = Route, TOptions extends CreateRouteOptions = CreateRouteOptions> = {
|
|
16
|
-
reject: RouterReject<ExtractRouteContextRejections<TOptions>>;
|
|
17
|
-
push: RouterPush<[TRoute] | ExtractRouteContextRoutes<TOptions>>;
|
|
18
|
-
replace: RouterReplace<[TRoute] | ExtractRouteContextRoutes<TOptions>>;
|
|
19
|
-
update: RouteUpdate<ResolvedRoute<TRoute>>;
|
|
20
|
-
signal: AbortSignal;
|
|
21
|
-
parent: PropsCallbackParent<TOptions['parent']>;
|
|
22
|
-
};
|
|
23
5
|
export type PropsCallbackParent<TParent extends Route | undefined = Route | undefined> = Route | undefined extends TParent ? undefined | {
|
|
24
6
|
name: string;
|
|
25
7
|
props: unknown;
|
package/dist/types/register.d.ts
CHANGED
|
@@ -19,8 +19,8 @@ export interface Register {
|
|
|
19
19
|
* Represents the Router property within {@link Register}
|
|
20
20
|
*/
|
|
21
21
|
export type RegisteredRouter<T = Register> = T extends {
|
|
22
|
-
router:
|
|
23
|
-
} ?
|
|
22
|
+
router: unknown;
|
|
23
|
+
} ? T['router'] : Router;
|
|
24
24
|
/**
|
|
25
25
|
* Represents additional metadata associated with a route, customizable via declaration merging.
|
|
26
26
|
*/
|
package/dist/types/resolved.d.ts
CHANGED
|
@@ -105,4 +105,8 @@ export type RouterResolvedRouteUnion<TRoutes extends Routes> = {
|
|
|
105
105
|
* type ResolvedUnion = ResolvedRouteUnion<RouteUnion> // ResolvedRoute<RouteA> | ResolvedRoute<RouteB>
|
|
106
106
|
*/
|
|
107
107
|
export type ResolvedRouteUnion<TRoute extends Route> = TRoute extends Route ? ResolvedRoute<TRoute> : never;
|
|
108
|
+
/**
|
|
109
|
+
* Converts a route union to resolved routes with their corresponding loader data.
|
|
110
|
+
*/
|
|
111
|
+
export type ResolvedRouteWithDataUnion<TRoute extends Route> = TRoute extends Route ? ResolvedRoute<TRoute> & WithData<TRoute> : never;
|
|
108
112
|
export {};
|
package/dist/types/route.d.ts
CHANGED
|
@@ -29,10 +29,9 @@ export type RouteInternal = {
|
|
|
29
29
|
export type Routes = readonly Route[];
|
|
30
30
|
/**
|
|
31
31
|
* The Route properties originally provided to `createRoute`, plus the views that route renders and the
|
|
32
|
-
* loaders it runs.
|
|
33
|
-
* {@link RouteViews}).
|
|
32
|
+
* loaders it runs.
|
|
34
33
|
*/
|
|
35
|
-
export type CreatedRouteOptions =
|
|
34
|
+
export type CreatedRouteOptions = CreateRouteOptions & {
|
|
36
35
|
id: string;
|
|
37
36
|
views: RouteViews;
|
|
38
37
|
loaders: RouteLoaders;
|
|
@@ -3,6 +3,14 @@ import { Rejection, Rejections } from './rejection';
|
|
|
3
3
|
import { GenericRoute, Route, Routes } from './route';
|
|
4
4
|
export type RouteContext = GenericRoute | Rejection;
|
|
5
5
|
export type ToRouteContext<TContext extends RouteContext[] | readonly RouteContext[] | undefined> = TContext extends RouteContext[] ? TContext : [];
|
|
6
|
+
/**
|
|
7
|
+
* Adds context to an options type while preserving its existing properties and context.
|
|
8
|
+
*/
|
|
9
|
+
export type WithRouteContext<TOptions extends {
|
|
10
|
+
context?: RouteContext[];
|
|
11
|
+
}, TContext extends RouteContext[]> = TContext extends [] ? TOptions : Omit<TOptions, 'context'> & {
|
|
12
|
+
context: [...ToRouteContext<TOptions['context']>, ...TContext];
|
|
13
|
+
};
|
|
6
14
|
export type ExtractRouteContext<TOptions extends CreateRouteOptions> = TOptions extends {
|
|
7
15
|
context: infer TContext extends RouteContext[];
|
|
8
16
|
} ? TOptions extends {
|
|
@@ -3,26 +3,24 @@ import { Component } from 'vue';
|
|
|
3
3
|
import { PrefetchConfig } from './prefetch';
|
|
4
4
|
import { AnyFunction } from './utilities';
|
|
5
5
|
/**
|
|
6
|
-
* A single view: what to render, how to get its props, and how to prefetch it.
|
|
7
|
-
* because a route can bind props to the nested RouterView it renders without declaring a component.
|
|
6
|
+
* A single view: what to render, how to get its props, and how to prefetch it.
|
|
8
7
|
*
|
|
9
8
|
* @template TProps - What this view's props getter returns, carried so parent props can be typed from it.
|
|
10
9
|
*/
|
|
11
10
|
export type RouteView<TProps = undefined> = {
|
|
12
|
-
component
|
|
11
|
+
component: Component;
|
|
13
12
|
props?: AnyFunction<TProps>;
|
|
14
13
|
prefetch?: PrefetchConfig;
|
|
15
14
|
transformer?: AnyPayloadTransformer;
|
|
16
15
|
};
|
|
17
16
|
/**
|
|
18
|
-
* The views for a single
|
|
19
|
-
* `route.
|
|
20
|
-
* comes from at a given depth.
|
|
17
|
+
* The views for a single match, keyed by view name (the unnamed view under 'default'). Each match in
|
|
18
|
+
* `route.matches` carries its own views.
|
|
21
19
|
*/
|
|
22
20
|
export type RouteViews = Record<string, RouteView<unknown>>;
|
|
23
21
|
/**
|
|
24
22
|
* The props a child sees for a parent's views. A lone unnamed view is given directly rather than under a
|
|
25
|
-
* 'default' key
|
|
23
|
+
* 'default' key. Each view's props are always a promise,
|
|
26
24
|
* since the parent's props may not have been computed when the child's getter runs.
|
|
27
25
|
*/
|
|
28
26
|
export type ViewsPropsReturnType<TViews> = keyof ViewsWithProps<TViews> extends never ? undefined : keyof ViewsWithProps<TViews> extends 'default' ? ParentViewProps<Extract<ViewsWithProps<TViews>, {
|
|
@@ -2,4 +2,4 @@ import { Route, Routes } from './route';
|
|
|
2
2
|
import { RoutesName, RoutesMap } from './routesMap';
|
|
3
3
|
import { UrlParamsWriting } from './url';
|
|
4
4
|
export type RouteGetByKey<TRoutes extends Routes, TKey extends RoutesName<TRoutes>> = RoutesMap<TRoutes>[TKey];
|
|
5
|
-
export type RouteParamsByKey<TRoutes extends Routes, TKey extends string> = RouteGetByKey<TRoutes, TKey> extends Route ? UrlParamsWriting<RouteGetByKey<TRoutes, TKey>> : Record<string, unknown
|
|
5
|
+
export type RouteParamsByKey<TRoutes extends Routes, TKey extends string> = TKey extends string ? RouteGetByKey<TRoutes, TKey> extends Route ? UrlParamsWriting<RouteGetByKey<TRoutes, TKey>> : Record<string, unknown> : never;
|
package/dist/types/router.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { NavigationBehavior } from './navigation';
|
|
1
2
|
import { App, InjectionKey, Ref } from 'vue';
|
|
2
3
|
import { RouterHistoryMode } from '../services/createRouterHistory';
|
|
3
4
|
import { TransformerOptions } from '../services/payload';
|
|
@@ -5,7 +6,7 @@ import { RouterRoute } from './routerRoute';
|
|
|
5
6
|
import { AddBeforeEnterHook, AddBeforeUpdateHook, AddBeforeLeaveHook, AddAfterEnterHook, AddAfterUpdateHook, AddAfterLeaveHook, AddErrorHook, AddRejectionHook } from './hooks';
|
|
6
7
|
import { PrefetchConfig } from './prefetch';
|
|
7
8
|
import { ResolvedRoute } from './resolved';
|
|
8
|
-
import {
|
|
9
|
+
import { Routes } from './route';
|
|
9
10
|
import { RouterPush } from './routerPush';
|
|
10
11
|
import { RouterReplace } from './routerReplace';
|
|
11
12
|
import { RouterResolve, RouterResolveOptions } from './routerResolve';
|
|
@@ -14,6 +15,7 @@ import { RouterPlugin } from './routerPlugin';
|
|
|
14
15
|
import { RoutesName } from './routesMap';
|
|
15
16
|
import { ExtractRejections, ExtractRejectionTypes, Rejections, BuiltInRejectionType } from './rejection';
|
|
16
17
|
import { PayloadValueError } from '../errors/payloadValueError';
|
|
18
|
+
import { ViewTransitionConfig } from './viewTransition';
|
|
17
19
|
/**
|
|
18
20
|
* Options to initialize a {@link Router} instance.
|
|
19
21
|
*/
|
|
@@ -44,6 +46,17 @@ export type RouterOptions = TransformerOptions & {
|
|
|
44
46
|
* Determines what assets are prefetched when router-link is rendered for a specific route
|
|
45
47
|
*/
|
|
46
48
|
prefetch?: PrefetchConfig;
|
|
49
|
+
/**
|
|
50
|
+
* Whether navigation waits for props, loaders, and components before committing.
|
|
51
|
+
* @default 'progressive'
|
|
52
|
+
*/
|
|
53
|
+
navigation?: NavigationBehavior;
|
|
54
|
+
/**
|
|
55
|
+
* Animates navigations with the View Transitions API. Overridden per route and per navigation.
|
|
56
|
+
*
|
|
57
|
+
* @default false
|
|
58
|
+
*/
|
|
59
|
+
viewTransition?: ViewTransitionConfig;
|
|
47
60
|
/**
|
|
48
61
|
* Components assigned to each type of rejection your router supports.
|
|
49
62
|
*/
|
|
@@ -243,7 +256,8 @@ export type Router<TRoutes extends Routes = any, TOptions extends RouterOptions
|
|
|
243
256
|
*/
|
|
244
257
|
render: () => Promise<ServerRenderResponse>;
|
|
245
258
|
/**
|
|
246
|
-
* Stops the router.
|
|
259
|
+
* Stops the router. Releases history listeners and context subscriptions and ignores any navigation
|
|
260
|
+
* still in flight or started afterwards. Called automatically when the Vue app unmounts.
|
|
247
261
|
*/
|
|
248
262
|
stop: () => void;
|
|
249
263
|
/**
|
|
@@ -265,6 +279,6 @@ export type Router<TRoutes extends Routes = any, TOptions extends RouterOptions
|
|
|
265
279
|
export type RouterRouteUnion<TRoutes extends Routes> = {
|
|
266
280
|
[K in keyof TRoutes]: TRoutes[K]['name'] extends '' ? never : RouterRoute<ResolvedRoute<TRoutes[K]>>;
|
|
267
281
|
}[number];
|
|
268
|
-
export type RouterRoutes<TRouter extends Router> = TRouter extends Router<infer TRoutes extends Routes> ? TRoutes : Routes;
|
|
282
|
+
export type RouterRoutes<TRouter extends Router> = TRouter extends Router<infer TRoutes extends Routes, any, infer TPlugin extends RouterPlugin> ? Routes extends TRoutes | TPlugin['routes'] ? Routes : TRoutes | TPlugin['routes'] : Routes;
|
|
269
283
|
export type RouterRejections<TRouter extends Router> = TRouter extends Router<any, infer TOptions extends RouterOptions, infer TPlugins extends RouterPlugin> ? ExtractRejections<TOptions> | ExtractRejections<TPlugins> : [];
|
|
270
|
-
export type RouterRouteName<TRouter extends Router> =
|
|
284
|
+
export type RouterRouteName<TRouter extends Router> = RoutesName<RouterRoutes<TRouter>>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { HookRemove } from './hooks';
|
|
1
|
+
import { AddHook, HookRemove } from './hooks';
|
|
2
2
|
import { Routes } from './route';
|
|
3
3
|
import { Rejections } from './rejection';
|
|
4
4
|
import { Hooks } from '../models/hooks';
|
|
@@ -30,6 +30,7 @@ export type RouterPlugin<TRoutes extends Routes = Routes, TRejections extends Re
|
|
|
30
30
|
rejections: TRejections;
|
|
31
31
|
};
|
|
32
32
|
type PluginBeforeRouteHookContext<TRoutes extends Routes, TRejections extends Rejections> = {
|
|
33
|
+
lifecycle: 'before';
|
|
33
34
|
from: ResolvedRoute | null;
|
|
34
35
|
reject: RouterReject<TRejections>;
|
|
35
36
|
push: RouterPush<TRoutes>;
|
|
@@ -37,6 +38,7 @@ type PluginBeforeRouteHookContext<TRoutes extends Routes, TRejections extends Re
|
|
|
37
38
|
abort: CallbackContextAbort;
|
|
38
39
|
};
|
|
39
40
|
type PluginAfterRouteHookContext<TRoutes extends Routes, TRejections extends Rejections> = {
|
|
41
|
+
lifecycle: 'after';
|
|
40
42
|
from: ResolvedRoute | null;
|
|
41
43
|
reject: RouterReject<TRejections>;
|
|
42
44
|
push: RouterPush<TRoutes>;
|
|
@@ -44,12 +46,12 @@ type PluginAfterRouteHookContext<TRoutes extends Routes, TRejections extends Rej
|
|
|
44
46
|
};
|
|
45
47
|
export type PluginBeforeRouteHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections> = (to: ResolvedRoute, context: PluginBeforeRouteHookContext<TRoutes, TRejections>) => MaybePromise<void>;
|
|
46
48
|
export type PluginBeforeRouteLeaveHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections> = (to: ResolvedRoute | null, context: PluginBeforeRouteHookContext<TRoutes, TRejections>) => MaybePromise<void>;
|
|
47
|
-
type AddPluginBeforeRouteLeaveHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections> =
|
|
49
|
+
type AddPluginBeforeRouteLeaveHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections> = AddHook<PluginBeforeRouteLeaveHook<TRoutes, TRejections>>;
|
|
48
50
|
export type PluginAfterRouteLeaveHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections> = (to: ResolvedRoute | null, context: PluginAfterRouteHookContext<TRoutes, TRejections>) => MaybePromise<void>;
|
|
49
|
-
type AddPluginAfterRouteLeaveHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections> =
|
|
51
|
+
type AddPluginAfterRouteLeaveHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections> = AddHook<PluginAfterRouteLeaveHook<TRoutes, TRejections>>;
|
|
50
52
|
export type PluginAfterRouteHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections> = (to: ResolvedRoute, context: PluginAfterRouteHookContext<TRoutes, TRejections>) => MaybePromise<void>;
|
|
51
|
-
type AddPluginBeforeRouteHook<TRoutes extends Routes, TRejections extends Rejections> =
|
|
52
|
-
type AddPluginAfterRouteHook<TRoutes extends Routes, TRejections extends Rejections> =
|
|
53
|
+
type AddPluginBeforeRouteHook<TRoutes extends Routes, TRejections extends Rejections> = AddHook<PluginBeforeRouteHook<TRoutes, TRejections>>;
|
|
54
|
+
type AddPluginAfterRouteHook<TRoutes extends Routes, TRejections extends Rejections> = AddHook<PluginAfterRouteHook<TRoutes, TRejections>>;
|
|
53
55
|
export type PluginErrorHookContext<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections> = {
|
|
54
56
|
to: ResolvedRoute | null;
|
|
55
57
|
from: ResolvedRoute | null;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { NavigationBehavior } from './navigation';
|
|
1
2
|
import { Routes } from './route';
|
|
2
3
|
import { RoutesName } from './routesMap';
|
|
3
4
|
import { RouteParamsByKey } from './routeWithParams';
|
|
@@ -6,6 +7,7 @@ import { UrlString } from './urlString';
|
|
|
6
7
|
import { AllPropertiesAreOptional } from './utilities';
|
|
7
8
|
import { QuerySource } from './querySource';
|
|
8
9
|
import { ResolvedRoute } from './resolved';
|
|
10
|
+
import { ViewTransitionConfig } from './viewTransition';
|
|
9
11
|
export type RouterPushOptions<TState = unknown> = {
|
|
10
12
|
/**
|
|
11
13
|
* The query string to add to the url.
|
|
@@ -19,10 +21,16 @@ export type RouterPushOptions<TState = unknown> = {
|
|
|
19
21
|
* Whether to replace the current history entry.
|
|
20
22
|
*/
|
|
21
23
|
replace?: boolean;
|
|
24
|
+
/** Overrides the route and router navigation behavior. */
|
|
25
|
+
navigation?: NavigationBehavior;
|
|
22
26
|
/**
|
|
23
27
|
* State values to pass to the route.
|
|
24
28
|
*/
|
|
25
29
|
state?: Partial<TState>;
|
|
30
|
+
/**
|
|
31
|
+
* Animates the navigation with the View Transitions API. Overrides route and router level viewTransition.
|
|
32
|
+
*/
|
|
33
|
+
viewTransition?: ViewTransitionConfig;
|
|
26
34
|
};
|
|
27
35
|
type RouterPushArgs<TRoutes extends Routes, TSource extends RoutesName<TRoutes>> = AllPropertiesAreOptional<RouteParamsByKey<TRoutes, TSource>> extends true ? [params?: RouteParamsByKey<TRoutes, TSource>, options?: RouterPushOptions<RouteStateByName<TRoutes, TSource>>] : [params: RouteParamsByKey<TRoutes, TSource>, options?: RouterPushOptions<RouteStateByName<TRoutes, TSource>>];
|
|
28
36
|
export type RouterPush<TRoutes extends Routes = any> = {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { NavigationBehavior } from './navigation';
|
|
1
2
|
import { Routes } from './route';
|
|
2
3
|
import { RoutesName } from './routesMap';
|
|
3
4
|
import { RouteParamsByKey } from './routeWithParams';
|
|
@@ -8,6 +9,8 @@ import { QuerySource } from './querySource';
|
|
|
8
9
|
import { ResolvedRoute } from './resolved';
|
|
9
10
|
export type RouterReplaceOptions<TState = unknown> = {
|
|
10
11
|
query?: QuerySource;
|
|
12
|
+
/** Overrides the route and router navigation behavior. */
|
|
13
|
+
navigation?: NavigationBehavior;
|
|
11
14
|
hash?: string;
|
|
12
15
|
state?: Partial<TState>;
|
|
13
16
|
};
|
package/dist/types/url.d.ts
CHANGED