@kitbag/router 0.20.12 → 0.22.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.
Files changed (72) hide show
  1. package/README.md +38 -87
  2. package/dist/components/routerLink.d.ts +5 -5
  3. package/dist/compositions/useLink.d.ts +2 -2
  4. package/dist/devtools/createRouterDevtools.d.ts +13 -0
  5. package/dist/devtools/filters.d.ts +12 -0
  6. package/dist/devtools/getDevtoolsLabel.d.ts +13 -0
  7. package/dist/devtools/types.d.ts +10 -0
  8. package/dist/errors/contextAbortError.d.ts +2 -2
  9. package/dist/errors/contextPushError.d.ts +2 -2
  10. package/dist/errors/contextRejectionError.d.ts +2 -2
  11. package/dist/errors/invalidRouteRedirectError.d.ts +11 -0
  12. package/dist/errors/multipleRouteRedirectsError.d.ts +13 -0
  13. package/dist/keys.d.ts +1 -3
  14. package/dist/kitbag-router.js +4927 -1741
  15. package/dist/kitbag-router.umd.cjs +3 -3
  16. package/dist/main.d.ts +1 -17
  17. package/dist/models/hooks.d.ts +12 -0
  18. package/dist/services/createComponentHooks.d.ts +7 -7
  19. package/dist/services/createExternalRoute.d.ts +4 -2
  20. package/dist/services/createPropStore.d.ts +2 -2
  21. package/dist/services/createRoute.d.ts +3 -1
  22. package/dist/services/createRouteHooks.d.ts +12 -10
  23. package/dist/services/createRouteRedirects.d.ts +10 -0
  24. package/dist/services/createRouterAssets.d.ts +5 -5
  25. package/dist/services/createRouterCallbackContext.d.ts +8 -6
  26. package/dist/services/createRouterHooks.d.ts +13 -14
  27. package/dist/services/createRouterPlugin.d.ts +2 -2
  28. package/dist/services/getGlobalHooksForRouter.d.ts +2 -3
  29. package/dist/services/getGlobalRouteHooks.d.ts +3 -3
  30. package/dist/services/getRouteHooks.d.ts +3 -3
  31. package/dist/services/hooks.d.ts +2 -2
  32. package/dist/services/insertBaseRoute.d.ts +2 -2
  33. package/dist/services/routeMatchRules.d.ts +0 -1
  34. package/dist/services/routeMatchScore.d.ts +1 -1
  35. package/dist/services/routeRegex.d.ts +1 -0
  36. package/dist/services/urlAssembly.d.ts +2 -2
  37. package/dist/services/urlCombine.d.ts +2 -2
  38. package/dist/services/urlCreator.d.ts +2 -2
  39. package/dist/services/urlParser.d.ts +1 -1
  40. package/dist/types/callbackContext.d.ts +15 -0
  41. package/dist/types/createRouteOptions.d.ts +6 -13
  42. package/dist/types/hooks.d.ts +85 -137
  43. package/dist/types/props.d.ts +8 -8
  44. package/dist/types/redirects.d.ts +40 -0
  45. package/dist/types/register.d.ts +1 -41
  46. package/dist/types/rejection.d.ts +6 -2
  47. package/dist/types/resolved.d.ts +14 -4
  48. package/dist/types/route.d.ts +3 -4
  49. package/dist/types/routeContext.d.ts +11 -5
  50. package/dist/types/router.d.ts +16 -11
  51. package/dist/types/routerAbort.d.ts +1 -0
  52. package/dist/types/routerLink.d.ts +3 -3
  53. package/dist/types/routerPlugin.d.ts +17 -41
  54. package/dist/types/routerPush.d.ts +2 -2
  55. package/dist/types/routerReject.d.ts +2 -2
  56. package/dist/types/routerReplace.d.ts +2 -2
  57. package/dist/types/{url.d.ts → urlString.d.ts} +3 -3
  58. package/dist/types/useLink.d.ts +2 -2
  59. package/dist/utilities/checkDuplicateParams.spec.d.ts +1 -0
  60. package/dist/utilities/index.d.ts +1 -1
  61. package/dist/utilities/isNamedRoute.d.ts +4 -0
  62. package/dist/utilities/testHelpers.d.ts +722 -22
  63. package/package.json +10 -8
  64. package/dist/errors/missingRouteContextError.d.ts +0 -10
  65. package/dist/models/RouteHooks.d.ts +0 -12
  66. package/dist/models/RouterRouteHooks.d.ts +0 -10
  67. package/dist/services/createCallbackContext.d.ts +0 -44
  68. package/dist/services/getRouteHooksDeprecated.d.ts +0 -10
  69. package/dist/utilities/checkMissingContext.d.ts +0 -2
  70. /package/dist/{utilities/checkDuplicateKeys.spec.d.ts → services/createRouteRedirects.spec.d.ts} +0 -0
  71. /package/dist/{utilities/checkMissingContext.spec copy.d.ts → types/redirects.spec-d.d.ts} +0 -0
  72. /package/dist/utilities/{checkDuplicateKeys.d.ts → checkDuplicateParams.d.ts} +0 -0
@@ -1,201 +1,149 @@
1
- import { RouterRouteHooks } from '../models/RouterRouteHooks';
2
- import { CallbackAbortResponse, CallbackContext, CallbackContextAbort, CallbackPushResponse, CallbackRejectResponse, CallbackSuccessResponse } from '../services/createCallbackContext';
3
- import { ResolvedRoute, RouterResolvedRouteUnion } from './resolved';
4
- import { MaybeArray, MaybePromise } from './utilities';
5
- import { Routes } from './route';
1
+ import { Hooks } from '../models/hooks';
2
+ import { ResolvedRoute, RouterResolvedRouteUnion, ResolvedRouteUnion } from './resolved';
3
+ import { MaybePromise } from './utilities';
4
+ import { Route, Routes } from './route';
6
5
  import { RouterReject } from './routerReject';
7
6
  import { RouterPush } from './routerPush';
8
7
  import { RouterReplace } from './routerReplace';
9
- import { Rejection } from './rejection';
8
+ import { Rejections } from './rejection';
10
9
  import { RouteContext, RouteContextToRejection, RouteContextToRoute } from './routeContext';
11
- /**
12
- * Defines route hooks that can be applied before entering, updating, or leaving a route, as well as after these events.
13
- */
14
- export type WithHooks = {
15
- /**
16
- * @deprecated Use router.onBeforeRouteEnter instead
17
- */
18
- onBeforeRouteEnter?: MaybeArray<BeforeRouteHook>;
19
- /**
20
- * @deprecated Use router.onBeforeRouteUpdate instead
21
- */
22
- onBeforeRouteUpdate?: MaybeArray<BeforeRouteHook>;
23
- /**
24
- * @deprecated Use router.onBeforeRouteLeave instead
25
- */
26
- onBeforeRouteLeave?: MaybeArray<BeforeRouteHook>;
27
- /**
28
- * @deprecated Use router.onAfterRouteEnter instead
29
- */
30
- onAfterRouteEnter?: MaybeArray<AfterRouteHook>;
31
- /**
32
- * @deprecated Use router.onAfterRouteUpdate instead
33
- */
34
- onAfterRouteUpdate?: MaybeArray<AfterRouteHook>;
35
- /**
36
- * @deprecated Use router.onAfterRouteLeave instead
37
- */
38
- onAfterRouteLeave?: MaybeArray<AfterRouteHook>;
39
- };
40
- export type InternalRouteHooks<TContext extends RouteContext[] | undefined = undefined> = {
10
+ import { RouterAbort } from './routerAbort';
11
+ import { CallbackContextAbort, CallbackContextPush, CallbackContextReject, CallbackContextSuccess } from './callbackContext';
12
+ import { RouteUpdate } from './routeUpdate';
13
+ export type InternalRouteHooks<TRoute extends Route = Route, TContext extends RouteContext[] = []> = {
41
14
  /**
42
15
  * Registers a route hook to be called before the route is entered.
43
16
  */
44
- onBeforeRouteEnter: AddRouterBeforeRouteHook<RouteContextToRoute<TContext>, RouteContextToRejection<TContext>>;
17
+ onBeforeRouteEnter: AddBeforeEnterHook<[TRoute] | RouteContextToRoute<TContext>, RouteContextToRejection<TContext>, TRoute, Route>;
45
18
  /**
46
19
  * Registers a route hook to be called before the route is left.
47
20
  */
48
- onBeforeRouteLeave: AddRouterBeforeRouteHook<RouteContextToRoute<TContext>, RouteContextToRejection<TContext>>;
21
+ onBeforeRouteLeave: AddBeforeLeaveHook<[TRoute] | RouteContextToRoute<TContext>, RouteContextToRejection<TContext>, Route, TRoute>;
49
22
  /**
50
23
  * Registers a route hook to be called before the route is updated.
51
24
  */
52
- onBeforeRouteUpdate: AddRouterBeforeRouteHook<RouteContextToRoute<TContext>, RouteContextToRejection<TContext>>;
25
+ onBeforeRouteUpdate: AddBeforeUpdateHook<[TRoute] | RouteContextToRoute<TContext>, RouteContextToRejection<TContext>, TRoute, Route>;
53
26
  /**
54
27
  * Registers a route hook to be called after the route is entered.
55
28
  */
56
- onAfterRouteEnter: AddRouterAfterRouteHook<RouteContextToRoute<TContext>, RouteContextToRejection<TContext>>;
29
+ onAfterRouteEnter: AddAfterEnterHook<[TRoute] | RouteContextToRoute<TContext>, RouteContextToRejection<TContext>, TRoute, Route>;
57
30
  /**
58
31
  * Registers a route hook to be called after the route is left.
59
32
  */
60
- onAfterRouteLeave: AddRouterAfterRouteHook<RouteContextToRoute<TContext>, RouteContextToRejection<TContext>>;
33
+ onAfterRouteLeave: AddAfterLeaveHook<[TRoute] | RouteContextToRoute<TContext>, RouteContextToRejection<TContext>, Route, TRoute>;
61
34
  /**
62
35
  * Registers a route hook to be called after the route is updated.
63
36
  */
64
- onAfterRouteUpdate: AddRouterAfterRouteHook<RouteContextToRoute<TContext>, RouteContextToRejection<TContext>>;
37
+ onAfterRouteUpdate: AddAfterUpdateHook<[TRoute] | RouteContextToRoute<TContext>, RouteContextToRejection<TContext>, TRoute, Route>;
65
38
  };
66
- export type ExternalRouteHooks<TContext extends RouteContext[] | undefined = undefined> = {
39
+ export type ExternalRouteHooks<TRoute extends Route = Route, TContext extends RouteContext[] | undefined = undefined> = {
67
40
  /**
68
41
  * Registers a route hook to be called before the route is entered.
69
42
  */
70
- onBeforeRouteEnter: AddRouterBeforeRouteHook<RouteContextToRoute<TContext>, RouteContextToRejection<TContext>>;
71
- };
72
- export type BeforeHookContext = {
73
- to: ResolvedRoute;
74
- from: ResolvedRoute | null;
75
- };
76
- export type RouteHookBeforeRunner = (context: BeforeHookContext) => Promise<BeforeRouteHookResponse>;
77
- export type AfterHookContext = {
78
- to: ResolvedRoute;
79
- from: ResolvedRoute | null;
80
- };
81
- export type RouteHookAfterRunner = (context: AfterHookContext) => Promise<AfterRouteHookResponse>;
82
- export type RouteHookTiming = 'global' | 'component';
83
- type BeforeRouteHookRegistration<TRoutes extends Routes, TRejections extends Rejection[]> = {
84
- lifecycle: 'onBeforeRouteEnter' | 'onBeforeRouteUpdate' | 'onBeforeRouteLeave';
85
- hook: RouterBeforeRouteHook<TRoutes, TRejections>;
86
- depth: number;
87
- };
88
- export type AddComponentBeforeRouteHook<TRoutes extends Routes = Routes, TRejections extends Rejection[] = Rejection[]> = (hook: BeforeRouteHookRegistration<TRoutes, TRejections>) => RouteHookRemove;
89
- type AfterRouteHookRegistration<TRoutes extends Routes = Routes, TRejections extends Rejection[] = Rejection[]> = {
90
- lifecycle: 'onAfterRouteEnter' | 'onAfterRouteUpdate' | 'onAfterRouteLeave';
91
- hook: RouterAfterRouteHook<TRoutes, TRejections>;
92
- depth: number;
43
+ onBeforeRouteEnter: AddBeforeEnterHook<[TRoute] | RouteContextToRoute<TContext>, RouteContextToRejection<TContext>, TRoute, Route>;
93
44
  };
94
- export type AddComponentAfterRouteHook<TRoutes extends Routes = Routes, TRejections extends Rejection[] = Rejection[]> = (hook: AfterRouteHookRegistration<TRoutes, TRejections>) => RouteHookRemove;
95
- export type AddGlobalRouteHooks = (hooks: RouterRouteHooks) => void;
45
+ export type HookTiming = 'global' | 'component';
96
46
  /**
97
- * Context provided to route hooks, containing context of previous route and functions for triggering rejections and push/replace to another route.
47
+ * Union type for all component route hooks.
98
48
  */
99
- type RouteHookContext = {
100
- from: ResolvedRoute | null;
101
- reject: CallbackContext['reject'];
102
- push: CallbackContext['push'];
103
- replace: CallbackContext['replace'];
104
- };
49
+ export type ComponentHook = BeforeEnterHook | BeforeUpdateHook | BeforeLeaveHook | AfterEnterHook | AfterUpdateHook | AfterLeaveHook;
105
50
  /**
106
- * Context provided to route hooks, containing context of previous route and functions for triggering rejections, push/replace to another route,
107
- * as well as aborting current route change.
51
+ * Registration object for adding a component route hook.
108
52
  */
109
- export type BeforeRouteHookContext = RouteHookContext & {
110
- abort: CallbackContextAbort;
53
+ export type ComponentHookRegistration = {
54
+ lifecycle: HookLifecycle;
55
+ hook: ComponentHook;
56
+ depth: number;
111
57
  };
112
58
  /**
113
- * Context provided to route hooks, containing context of previous route and functions for triggering rejections and push/replace to another route.
114
- */
115
- export type AfterRouteHookContext = RouteHookContext;
116
- /**
117
- * Represents a function called before a route change, potentially altering the routing operation.
118
- * @param to - {@link ResolvedRoute} The resolved route the router is navigating to.
119
- * @param context - {@link BeforeRouteHookContext} The context providing functions and state for the routing operation.
120
- * @returns Possibly a promise that resolves when the hook's logic has completed.
121
- */
122
- export type BeforeRouteHook = (to: ResolvedRoute, context: BeforeRouteHookContext) => MaybePromise<void>;
123
- /**
124
- * Represents a function called after a route change has occurred.
125
- * @param to - {@link ResolvedRoute} The resolved route the router has navigated to.
126
- * @param context - {@link AfterRouteHookContext} The context providing functions and state for the routing operation.
127
- * @returns Possibly a promise that resolves when the hook's logic has completed.
59
+ * Function to add a component route hook with depth-based condition checking.
128
60
  */
129
- export type AfterRouteHook = (to: ResolvedRoute, context: AfterRouteHookContext) => MaybePromise<void>;
61
+ export type AddComponentHook = (registration: ComponentHookRegistration) => HookRemove;
62
+ export type AddGlobalHooks = (hooks: Hooks) => void;
130
63
  /**
131
- * Generic type representing a route hook, which can be either before or after a route change.
64
+ * A function to remove a previously added route hook.
132
65
  */
133
- export type RouteHook = BeforeRouteHook | AfterRouteHook;
134
- /**
135
- * A function to remove a previously registered route hook.
136
- */
137
- export type RouteHookRemove = () => void;
66
+ export type HookRemove = () => void;
138
67
  /**
139
68
  * Enumerates the lifecycle events for before route hooks.
140
69
  */
141
- export type BeforeRouteHookLifecycle = 'onBeforeRouteEnter' | 'onBeforeRouteUpdate' | 'onBeforeRouteLeave';
70
+ export type BeforeHookLifecycle = 'onBeforeRouteEnter' | 'onBeforeRouteUpdate' | 'onBeforeRouteLeave';
142
71
  /**
143
72
  * Enumerates the lifecycle events for after route hooks.
144
73
  */
145
- export type AfterRouteHookLifecycle = 'onAfterRouteEnter' | 'onAfterRouteUpdate' | 'onAfterRouteLeave';
74
+ export type AfterHookLifecycle = 'onAfterRouteEnter' | 'onAfterRouteUpdate' | 'onAfterRouteLeave';
146
75
  /**
147
76
  * Union type for all route hook lifecycle events.
148
77
  */
149
- export type RouteHookLifecycle = BeforeRouteHookLifecycle | AfterRouteHookLifecycle;
150
- /**
151
- * Type for responses from a before route hook, which may indicate different outcomes such as success, push, reject, or abort.
152
- * @template TRoutes - The type of the routes configuration.
153
- */
154
- export type BeforeRouteHookResponse = CallbackSuccessResponse | CallbackPushResponse | CallbackRejectResponse | CallbackAbortResponse;
155
- /**
156
- * Type for responses from an after route hook, which may indicate different outcomes such as success, push, or reject.
157
- * @template TRoutes - The type of the routes configuration.
158
- */
159
- export type AfterRouteHookResponse = CallbackSuccessResponse | CallbackPushResponse | CallbackRejectResponse;
160
- /**
161
- * Union type for all possible route hook responses, covering both before and after scenarios.
162
- * @template TRoutes - The type of the routes configuration.
163
- */
164
- export type RouteHookResponse = BeforeRouteHookResponse | AfterRouteHookResponse;
165
- type RouterHookContext<TRoutes extends Routes, TRejections extends Rejection[]> = {
166
- from: RouterResolvedRouteUnion<TRoutes> | null;
78
+ export type HookLifecycle = BeforeHookLifecycle | AfterHookLifecycle;
79
+ type AfterHookContext<TRoute extends Route, TRoutes extends Routes, TRejections extends Rejections> = {
167
80
  reject: RouterReject<TRejections>;
168
81
  push: RouterPush<TRoutes>;
169
82
  replace: RouterReplace<TRoutes>;
83
+ update: RouteUpdate<ResolvedRouteUnion<TRoute>>;
170
84
  };
171
- type RouterBeforeRouteHookContext<TRoutes extends Routes, TRejections extends Rejection[]> = RouterHookContext<TRoutes, TRejections> & {
172
- abort: CallbackContextAbort;
85
+ type BeforeHookContext<TRouteTo extends Route, TRoutes extends Routes, TRejections extends Rejections> = {
86
+ reject: RouterReject<TRejections>;
87
+ push: RouterPush<TRoutes>;
88
+ replace: RouterReplace<TRoutes>;
89
+ update: RouteUpdate<ResolvedRouteUnion<TRouteTo>>;
90
+ abort: RouterAbort;
91
+ };
92
+ export type BeforeEnterHookContext<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> = BeforeHookContext<TRouteTo, TRoutes, TRejections> & {
93
+ from: ResolvedRouteUnion<TRouteFrom> | null;
94
+ };
95
+ 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>;
96
+ export type AddBeforeEnterHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> = (hook: BeforeEnterHook<TRoutes, TRejections, TRouteTo, TRouteFrom>) => HookRemove;
97
+ 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> & {
98
+ from: ResolvedRouteUnion<TRouteFrom> | null;
99
+ };
100
+ 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>;
101
+ export type AddBeforeUpdateHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> = (hook: BeforeUpdateHook<TRoutes, TRejections, TRouteTo, TRouteFrom>) => HookRemove;
102
+ export type BeforeLeaveHookContext<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> = BeforeHookContext<TRouteTo, TRoutes, TRejections> & {
103
+ from: ResolvedRouteUnion<TRouteFrom>;
173
104
  };
174
- export type HookContext<TRoutes extends Routes = Routes> = {
105
+ export type BeforeLeaveHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> = (to: ResolvedRouteUnion<TRouteTo>, context: BeforeLeaveHookContext<TRoutes, TRejections, TRouteTo, TRouteFrom>) => MaybePromise<void>;
106
+ export type AddBeforeLeaveHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> = (hook: BeforeLeaveHook<TRoutes, TRejections, TRouteTo, TRouteFrom>) => HookRemove;
107
+ 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> & {
108
+ from: ResolvedRouteUnion<TRouteFrom> | null;
109
+ };
110
+ 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>;
111
+ export type AddAfterEnterHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> = (hook: AfterEnterHook<TRoutes, TRejections, TRouteTo, TRouteFrom>) => HookRemove;
112
+ 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> & {
113
+ from: ResolvedRouteUnion<TRouteFrom> | null;
114
+ };
115
+ 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>;
116
+ export type AddAfterUpdateHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> = (hook: AfterUpdateHook<TRoutes, TRejections, TRouteTo, TRouteFrom>) => HookRemove;
117
+ export type AfterLeaveHookContext<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> = AfterHookContext<TRouteTo, TRoutes, TRejections> & {
118
+ from: ResolvedRouteUnion<TRouteFrom>;
119
+ };
120
+ export type AfterLeaveHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> = (to: ResolvedRouteUnion<TRouteTo>, context: AfterLeaveHookContext<TRoutes, TRejections, TRouteTo, TRouteFrom>) => MaybePromise<void>;
121
+ export type AddAfterLeaveHook<TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections, TRouteTo extends Route = TRoutes[number], TRouteFrom extends Route = TRoutes[number]> = (hook: AfterLeaveHook<TRoutes, TRejections, TRouteTo, TRouteFrom>) => HookRemove;
122
+ export type BeforeHookResponse = CallbackContextSuccess | CallbackContextPush | CallbackContextReject | CallbackContextAbort;
123
+ export type AfterHookResponse = CallbackContextSuccess | CallbackContextPush | CallbackContextReject;
124
+ export type BeforeHookRunner = <TRoutes extends Routes>(context: {
175
125
  to: RouterResolvedRouteUnion<TRoutes>;
176
126
  from: RouterResolvedRouteUnion<TRoutes> | null;
177
- };
178
- export type RouterBeforeRouteHook<TRoutes extends Routes = Routes, TRejections extends Rejection[] = Rejection[]> = (to: RouterResolvedRouteUnion<TRoutes>, context: RouterBeforeRouteHookContext<TRoutes, TRejections>) => MaybePromise<void>;
179
- export type AddRouterBeforeRouteHook<TRoutes extends Routes = Routes, TRejections extends Rejection[] = Rejection[]> = (hook: RouterBeforeRouteHook<TRoutes, TRejections>) => RouteHookRemove;
180
- type RouterAfterRouteHookContext<TRoutes extends Routes = Routes, TRejections extends Rejection[] = Rejection[]> = RouterHookContext<TRoutes, TRejections>;
181
- export type RouterAfterRouteHook<TRoutes extends Routes = Routes, TRejections extends Rejection[] = Rejection[]> = (to: RouterResolvedRouteUnion<TRoutes>, context: RouterAfterRouteHookContext<TRoutes, TRejections>) => MaybePromise<void>;
182
- export type AddRouterAfterRouteHook<TRoutes extends Routes = Routes, TRejections extends Rejection[] = Rejection[]> = (hook: RouterAfterRouteHook<TRoutes, TRejections>) => RouteHookRemove;
183
- export type RouterRouteHookBeforeRunner = (context: HookContext) => Promise<BeforeRouteHookResponse>;
184
- export type RouterRouteHookAfterRunner = (context: HookContext) => Promise<AfterRouteHookResponse>;
185
- export type RouterErrorHookContext<TRoutes extends Routes = Routes, TRejections extends Rejection[] = Rejection[]> = {
127
+ }) => Promise<BeforeHookResponse>;
128
+ export type AfterHookRunner = <TRoutes extends Routes>(context: {
129
+ to: RouterResolvedRouteUnion<TRoutes>;
130
+ from: RouterResolvedRouteUnion<TRoutes> | null;
131
+ }) => Promise<AfterHookResponse>;
132
+ export type ErrorHookContext<TRoute extends Route = Route, TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections> = {
186
133
  to: RouterResolvedRouteUnion<TRoutes>;
187
134
  from: RouterResolvedRouteUnion<TRoutes> | null;
188
135
  source: 'props' | 'hook' | 'component';
189
136
  reject: RouterReject<TRejections>;
190
137
  push: RouterPush<TRoutes>;
191
138
  replace: RouterReplace<TRoutes>;
139
+ update: RouteUpdate<ResolvedRoute<TRoute>>;
192
140
  };
193
- export type RouterErrorHook<TRoutes extends Routes = Routes, TRejections extends Rejection[] = Rejection[]> = (error: unknown, context: RouterErrorHookContext<TRoutes, TRejections>) => void;
194
- export type AddRouterErrorHook<TRoutes extends Routes = Routes, TRejections extends Rejection[] = Rejection[]> = (hook: RouterErrorHook<TRoutes, TRejections>) => RouteHookRemove;
195
- export type RouterRouteHookErrorRunnerContext<TRoutes extends Routes = Routes> = {
141
+ export type ErrorHook<TRoute extends Route = Route, TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections> = (error: unknown, context: ErrorHookContext<TRoute, TRoutes, TRejections>) => void;
142
+ export type AddErrorHook<TRoute extends Route = Route, TRoutes extends Routes = Routes, TRejections extends Rejections = Rejections> = (hook: ErrorHook<TRoute, TRoutes, TRejections>) => HookRemove;
143
+ export type ErrorHookRunnerContext<TRoutes extends Routes = Routes> = {
196
144
  to: RouterResolvedRouteUnion<TRoutes>;
197
145
  from: RouterResolvedRouteUnion<TRoutes> | null;
198
146
  source: 'props' | 'hook';
199
147
  };
200
- export type RouterRouteHookErrorRunner = (error: unknown, context: RouterRouteHookErrorRunnerContext) => void;
148
+ export type ErrorHookRunner = (error: unknown, context: ErrorHookRunnerContext) => void;
201
149
  export {};
@@ -3,19 +3,19 @@ import { Route } from './route';
3
3
  import { RouterReject } from './routerReject';
4
4
  import { RouterPush } from './routerPush';
5
5
  import { RouterReplace } from './routerReplace';
6
- import { RouteContext, RouteContextToRejection, RouteContextToRoute } from './routeContext';
6
+ import { ExtractRouteContextRejections, ExtractRouteContextRoutes } from './routeContext';
7
+ import { ResolvedRoute } from './resolved';
8
+ import { RouteUpdate } from './routeUpdate';
7
9
  /**
8
10
  * Context provided to props callback functions
9
11
  */
10
- export type PropsCallbackContext<TOptions extends CreateRouteOptions = CreateRouteOptions> = {
11
- reject: RouterReject<RouteContextToRejection<ExtractRouteContext<TOptions>>>;
12
- push: RouterPush<RouteContextToRoute<ExtractRouteContext<TOptions>>>;
13
- replace: RouterReplace<RouteContextToRoute<ExtractRouteContext<TOptions>>>;
12
+ export type PropsCallbackContext<TRoute extends Route = Route, TOptions extends CreateRouteOptions = CreateRouteOptions> = {
13
+ reject: RouterReject<ExtractRouteContextRejections<TOptions>>;
14
+ push: RouterPush<[TRoute] | ExtractRouteContextRoutes<TOptions>>;
15
+ replace: RouterReplace<[TRoute] | ExtractRouteContextRoutes<TOptions>>;
16
+ update: RouteUpdate<ResolvedRoute<TRoute>>;
14
17
  parent: PropsCallbackParent<TOptions['parent']>;
15
18
  };
16
- type ExtractRouteContext<TOptions extends CreateRouteOptions> = TOptions extends {
17
- context: infer TContext extends RouteContext[];
18
- } ? TContext : [];
19
19
  export type PropsCallbackParent<TParent extends Route | undefined = Route | undefined> = Route | undefined extends TParent ? undefined | {
20
20
  name: string;
21
21
  props: unknown;
@@ -0,0 +1,40 @@
1
+ import { ExtractRouteParamTypesReading, ExtractRouteParamTypesWriting } from './params';
2
+ import { ResolvedRouteUnion } from './resolved';
3
+ import { Route, Routes } from './route';
4
+ import { RouterReplace } from './routerReplace';
5
+ import { AllPropertiesAreOptional, MaybePromise } from './utilities';
6
+ /**
7
+ * redirect is returned by createRouteHooks but is not part of the Route type, so we use this type to assert that it exists.
8
+ */
9
+ type RouteWithRedirect<TRoute extends Route = Route> = TRoute & {
10
+ redirect: RouteRedirect;
11
+ };
12
+ /**
13
+ * Type guard to assert that a route has a redirect hook.
14
+ * @internal
15
+ */
16
+ export declare function isRouteWithRedirect(route: Route): route is RouteWithRedirect;
17
+ export type RouteRedirects<TRoute extends Route = Route> = {
18
+ /**
19
+ * Creates a redirect to redirect the current route to another route.
20
+ */
21
+ redirectTo: RouteRedirectTo<TRoute>;
22
+ /**
23
+ * Creates a redirect to redirect to the current route from another route.
24
+ */
25
+ redirectFrom: RouteRedirectFrom<TRoute>;
26
+ };
27
+ type RedirectHookContext<TRoutes extends Routes> = {
28
+ replace: RouterReplace<TRoutes>;
29
+ };
30
+ export type RedirectHook<TRoutes extends Routes = Routes, TRouteTo extends Route = TRoutes[number]> = (to: ResolvedRouteUnion<TRouteTo>, context: RedirectHookContext<TRoutes>) => MaybePromise<void>;
31
+ export type RouteRedirectCallback<TRouteTo extends Route = Route, TRouteFrom extends Route = Route> = (params: ExtractRouteParamTypesReading<TRouteFrom>) => ExtractRouteParamTypesWriting<TRouteTo>;
32
+ /**
33
+ * This type is purposely wide to prevent type errors in RouteRedirectFrom where the TRouteTo generic cannot be inferred.
34
+ */
35
+ export type RouteRedirect = (to: Route, callback?: (params: any) => any) => void;
36
+ export type RedirectToArgs<TRouteTo extends Route = Route, TRouteFrom extends Route = Route> = AllPropertiesAreOptional<ExtractRouteParamTypesWriting<TRouteTo>> extends true ? [to: TRouteTo, params?: RouteRedirectCallback<TRouteTo, TRouteFrom>] : [to: TRouteTo, params: RouteRedirectCallback<TRouteTo, TRouteFrom>];
37
+ export type RouteRedirectTo<TRouteFrom extends Route = Route> = <TRouteTo extends Route>(...args: RedirectToArgs<TRouteTo, TRouteFrom>) => void;
38
+ export type RedirectFromArgs<TRouteTo extends Route = Route, TRouteFrom extends Route = Route> = AllPropertiesAreOptional<ExtractRouteParamTypesWriting<TRouteTo>> extends true ? [from: TRouteFrom, params?: RouteRedirectCallback<TRouteTo, TRouteFrom>] : [from: TRouteFrom, params: RouteRedirectCallback<TRouteTo, TRouteFrom>];
39
+ export type RouteRedirectFrom<TRouteTo extends Route = Route> = <TRouteFrom extends Route>(...args: RedirectFromArgs<TRouteTo, TRouteFrom>) => void;
40
+ export {};
@@ -1,10 +1,4 @@
1
- import { BuiltInRejectionType } from '../services/createRouterReject';
2
- import { Route, Routes } from './route';
3
- import { Router, RouterOptions } from './router';
4
- import { RouterPush } from './routerPush';
5
- import { RouterReplace } from './routerReplace';
6
- import { RoutesName } from './routesMap';
7
- import { RejectionType } from './rejection';
1
+ import { Router } from './router';
8
2
  /**
9
3
  * Represents the state of currently registered router, and route meta. Used to provide correct type context for
10
4
  * components like `RouterLink`, as well as for composables like `useRouter`, `useRoute`, and hooks.
@@ -27,43 +21,9 @@ export interface Register {
27
21
  export type RegisteredRouter<T = Register> = T extends {
28
22
  router: infer TRouter;
29
23
  } ? TRouter : Router;
30
- /**
31
- * Represents the Router routes property within {@link Register}
32
- * @deprecated will be removed in a future version
33
- */
34
- export type RegisteredRoutes<T = Register> = T extends {
35
- router: Router<infer TRoutes extends Routes>;
36
- } ? TRoutes : Route[];
37
- /**
38
- * Represents the possible Rejections registered within {@link Register}
39
- * @deprecated use `createRouter(..., { rejections: {}}) instead
40
- */
41
- export type RegisteredRejectionType<T = Register> = T extends {
42
- router: Router<any, infer TOptions extends RouterOptions>;
43
- } ? RejectionType<TOptions['rejections']> | BuiltInRejectionType : BuiltInRejectionType;
44
24
  /**
45
25
  * Represents additional metadata associated with a route, customizable via declaration merging.
46
26
  */
47
27
  export type RouteMeta<T = Register> = T extends {
48
28
  routeMeta: infer RouteMeta extends Record<string, unknown>;
49
29
  } ? RouteMeta : Record<string, unknown>;
50
- /**
51
- * Represents the type for router `push`, with types for routes registered within {@link Register}
52
- * @deprecated will be removed in a future version
53
- */
54
- export type RegisteredRouterPush = RouterPush<RegisteredRoutes>;
55
- /**
56
- * Represents the type for router `replace`, with types for routes registered within {@link Register}
57
- * @deprecated will be removed in a future version
58
- */
59
- export type RegisteredRouterReplace = RouterReplace<RegisteredRoutes>;
60
- /**
61
- * Type for Router Reject method. Triggers rejections registered within {@link Register}
62
- * @deprecated will be removed in a future version
63
- */
64
- export type RegisteredRouterReject = (type: RegisteredRejectionType) => void;
65
- /**
66
- * Represents the union of all possible route names registered within {@link Register}
67
- * @deprecated will be removed in a future version
68
- */
69
- export type RegisteredRoutesName = RoutesName<RegisteredRoutes>;
@@ -1,4 +1,8 @@
1
1
  import { Component } from 'vue';
2
+ /**
3
+ * Represents an immutable array of Rejection instances.
4
+ */
5
+ export type Rejections = readonly Rejection[];
2
6
  export type Rejection<TType extends string = string> = {
3
7
  /**
4
8
  * The type of rejection.
@@ -9,7 +13,7 @@ export type Rejection<TType extends string = string> = {
9
13
  */
10
14
  component: Component;
11
15
  };
12
- export type RejectionType<TRejections extends Rejection[] | undefined> = unknown extends TRejections ? never : Rejection[] extends TRejections ? string : undefined extends TRejections ? string : TRejections extends Rejection[] ? TRejections[number]['type'] : never;
16
+ export type RejectionType<TRejections extends Rejections | undefined> = unknown extends TRejections ? never : Rejections extends TRejections ? string : undefined extends TRejections ? string : TRejections extends Rejections ? TRejections[number]['type'] : never;
13
17
  export type ExtractRejections<T> = T extends {
14
- rejections: infer TRejections extends Rejection[];
18
+ rejections: infer TRejections extends Rejections;
15
19
  } ? TRejections : [];
@@ -1,8 +1,8 @@
1
- import { RouterRouteHooks } from '../models/RouterRouteHooks';
1
+ import { Hooks } from '../models/hooks';
2
2
  import { ExtractRouteParamTypesReading } from './params';
3
3
  import { Route, Routes } from './route';
4
4
  import { ExtractRouteStateParamsAsOptional } from './state';
5
- import { Url } from './url';
5
+ import { UrlString } from './urlString';
6
6
  /**
7
7
  * Represents a route that the router has matched to current browser location.
8
8
  * @template TRoute - Underlying Route that has been resolved.
@@ -44,13 +44,13 @@ export type ResolvedRoute<TRoute extends Route = Route> = Readonly<{
44
44
  /**
45
45
  * String value of the resolved URL.
46
46
  */
47
- href: Url;
47
+ href: UrlString;
48
48
  /**
49
49
  * The stores for routes including ancestors.
50
50
  * Order of routes will be from greatest ancestor to narrowest matched.
51
51
  * @internal
52
52
  */
53
- hooks: RouterRouteHooks[];
53
+ hooks: Hooks[];
54
54
  }>;
55
55
  /**
56
56
  * This type is the same as `ResolvedRoute<TRoutes[number]>` while remaining distributive
@@ -58,3 +58,13 @@ export type ResolvedRoute<TRoute extends Route = Route> = Readonly<{
58
58
  export type RouterResolvedRouteUnion<TRoutes extends Routes> = {
59
59
  [K in keyof TRoutes]: ResolvedRoute<TRoutes[K]>;
60
60
  }[number];
61
+ /**
62
+ * Converts a union of Route types to a union of ResolvedRoute types while preserving the discriminated union structure for narrowing.
63
+ * This is useful when you have a Route union (like `TRoutes[number]`) and need it to narrow properly.
64
+ * Uses a distributive conditional type to ensure unions are properly distributed.
65
+ *
66
+ * @example
67
+ * type RouteUnion = RouteA | RouteB
68
+ * type ResolvedUnion = ResolvedRouteUnion<RouteUnion> // ResolvedRoute<RouteA> | ResolvedRoute<RouteB>
69
+ */
70
+ export type ResolvedRouteUnion<TRoute extends Route> = TRoute extends Route ? ResolvedRoute<TRoute> : never;
@@ -4,9 +4,8 @@ import { PrefetchConfig } from './prefetch';
4
4
  import { RouteMeta } from './register';
5
5
  import { LastInArray } from './utilities';
6
6
  import { CreateRouteOptions } from './createRouteOptions';
7
- import { WithHooks } from './hooks';
8
7
  import { RouteContext } from './routeContext';
9
- import { RouterRouteHooks } from '../models/RouterRouteHooks';
8
+ import { Hooks } from '../models/hooks';
10
9
  /**
11
10
  * Represents an immutable array of Route instances. Return value of `createRoute`, expected param for `createRouter`.
12
11
  */
@@ -14,7 +13,7 @@ export type Routes = readonly Route[];
14
13
  /**
15
14
  * The Route properties originally provided to `createRoute`. The only change is normalizing meta to always default to an empty object.
16
15
  */
17
- export type CreatedRouteOptions = Omit<CreateRouteOptions, 'props'> & WithHooks & {
16
+ export type CreatedRouteOptions = Omit<CreateRouteOptions, 'props'> & {
18
17
  id: string;
19
18
  props?: unknown;
20
19
  };
@@ -79,7 +78,7 @@ export type Route<TName extends string = string, THost extends WithParams = With
79
78
  * Order of routes will be from greatest ancestor to narrowest matched.
80
79
  * @internal
81
80
  */
82
- hooks: RouterRouteHooks[];
81
+ hooks: Hooks[];
83
82
  /**
84
83
  * A value that represents how many parents a route has. Used for route matching
85
84
  * @internal
@@ -1,9 +1,15 @@
1
- import { Rejection } from './rejection';
2
- import { GenericRoute, Route } from './route';
1
+ import { CreateRouteOptions } from './createRouteOptions';
2
+ import { Rejection, Rejections } from './rejection';
3
+ import { GenericRoute, Routes } from './route';
3
4
  export type RouteContext = GenericRoute | Rejection;
4
- export type ToRouteContext<TContext extends RouteContext[] | undefined> = TContext extends RouteContext[] ? TContext : [];
5
- export type RouteContextToRoute<TContext extends RouteContext[] | undefined> = RouteContext[] extends TContext ? Route[] : undefined extends TContext ? Route[] : FilterRouteContextRoutes<TContext>;
5
+ export type ToRouteContext<TContext extends RouteContext[] | readonly RouteContext[] | undefined> = TContext extends RouteContext[] ? TContext : [];
6
+ export type ExtractRouteContext<TOptions extends CreateRouteOptions> = TOptions extends {
7
+ context: infer TContext extends RouteContext[];
8
+ } ? TContext : [];
9
+ export type ExtractRouteContextRoutes<TOptions extends CreateRouteOptions> = RouteContextToRoute<ExtractRouteContext<TOptions>>;
10
+ export type ExtractRouteContextRejections<TOptions extends CreateRouteOptions> = RouteContextToRejection<ExtractRouteContext<TOptions>>;
11
+ export type RouteContextToRoute<TContext extends RouteContext[] | undefined> = RouteContext[] extends TContext ? Routes : undefined extends TContext ? Routes : FilterRouteContextRoutes<TContext>;
6
12
  type FilterRouteContextRoutes<TContext extends RouteContext[] | undefined> = TContext extends [infer First, ...infer Rest extends RouteContext[]] ? First extends GenericRoute ? [First, ...FilterRouteContextRoutes<Rest>] : FilterRouteContextRoutes<Rest> : [];
7
- export type RouteContextToRejection<TContext extends RouteContext[] | undefined> = RouteContext[] extends TContext ? Rejection[] : undefined extends TContext ? Rejection[] : FilterRouteContextRejections<TContext>;
13
+ export type RouteContextToRejection<TContext extends RouteContext[] | undefined> = RouteContext[] extends TContext ? Rejections : undefined extends TContext ? Rejections : FilterRouteContextRejections<TContext>;
8
14
  type FilterRouteContextRejections<TContext extends RouteContext[] | undefined> = TContext extends [infer First, ...infer Rest extends RouteContext[]] ? First extends Rejection ? [First, ...FilterRouteContextRejections<Rest>] : FilterRouteContextRejections<Rest> : [];
9
15
  export {};
@@ -1,7 +1,7 @@
1
1
  import { App, InjectionKey, Ref } from 'vue';
2
2
  import { RouterHistoryMode } from '../services/createRouterHistory';
3
3
  import { RouterRoute } from './routerRoute';
4
- import { AddRouterAfterRouteHook, AddRouterBeforeRouteHook, AddRouterErrorHook, WithHooks } from './hooks';
4
+ import { AddBeforeEnterHook, AddBeforeUpdateHook, AddBeforeLeaveHook, AddAfterEnterHook, AddAfterUpdateHook, AddAfterLeaveHook, AddErrorHook } from './hooks';
5
5
  import { PrefetchConfig } from './prefetch';
6
6
  import { ResolvedRoute } from './resolved';
7
7
  import { Route, Routes } from './route';
@@ -12,11 +12,11 @@ import { RouterReject } from './routerReject';
12
12
  import { RouterPlugin } from './routerPlugin';
13
13
  import { RoutesName } from './routesMap';
14
14
  import { ToRouteContext } from './routeContext';
15
- import { ExtractRejections, Rejection } from './rejection';
15
+ import { ExtractRejections, Rejections } from './rejection';
16
16
  /**
17
17
  * Options to initialize a {@link Router} instance.
18
18
  */
19
- export type RouterOptions = WithHooks & {
19
+ export type RouterOptions = {
20
20
  /**
21
21
  * Initial URL for the router to use. Required if using Node environment. Defaults to window.location when using browser.
22
22
  *
@@ -41,7 +41,7 @@ export type RouterOptions = WithHooks & {
41
41
  /**
42
42
  * Components assigned to each type of rejection your router supports.
43
43
  */
44
- rejections?: Rejection[];
44
+ rejections?: Rejections;
45
45
  /**
46
46
  * When false, createRouterAssets must be used for component and hooks. Assets exported by the library
47
47
  * will not work with the created router instance.
@@ -99,32 +99,32 @@ export type Router<TRoutes extends Routes = any, TOptions extends RouterOptions
99
99
  /**
100
100
  * Registers a hook to be called before a route is entered.
101
101
  */
102
- onBeforeRouteEnter: AddRouterBeforeRouteHook<TRoutes | TPlugin['routes'], ToRouteContext<TOptions['rejections']> | ToRouteContext<TPlugin['rejections']>>;
102
+ onBeforeRouteEnter: AddBeforeEnterHook<TRoutes | TPlugin['routes'], ToRouteContext<TOptions['rejections']> | ToRouteContext<TPlugin['rejections']>>;
103
103
  /**
104
104
  * Registers a hook to be called before a route is left.
105
105
  */
106
- onBeforeRouteLeave: AddRouterBeforeRouteHook<TRoutes | TPlugin['routes'], ToRouteContext<TOptions['rejections']> | ToRouteContext<TPlugin['rejections']>>;
106
+ onBeforeRouteLeave: AddBeforeLeaveHook<TRoutes | TPlugin['routes'], ToRouteContext<TOptions['rejections']> | ToRouteContext<TPlugin['rejections']>>;
107
107
  /**
108
108
  * Registers a hook to be called before a route is updated.
109
109
  */
110
- onBeforeRouteUpdate: AddRouterBeforeRouteHook<TRoutes | TPlugin['routes'], ToRouteContext<TOptions['rejections']> | ToRouteContext<TPlugin['rejections']>>;
110
+ onBeforeRouteUpdate: AddBeforeUpdateHook<TRoutes | TPlugin['routes'], ToRouteContext<TOptions['rejections']> | ToRouteContext<TPlugin['rejections']>>;
111
111
  /**
112
112
  * Registers a hook to be called after a route is entered.
113
113
  */
114
- onAfterRouteEnter: AddRouterAfterRouteHook<TRoutes | TPlugin['routes'], ToRouteContext<TOptions['rejections']> | ToRouteContext<TPlugin['rejections']>>;
114
+ onAfterRouteEnter: AddAfterEnterHook<TRoutes | TPlugin['routes'], ToRouteContext<TOptions['rejections']> | ToRouteContext<TPlugin['rejections']>>;
115
115
  /**
116
116
  * Registers a hook to be called after a route is left.
117
117
  */
118
- onAfterRouteLeave: AddRouterAfterRouteHook<TRoutes | TPlugin['routes'], ToRouteContext<TOptions['rejections']> | ToRouteContext<TPlugin['rejections']>>;
118
+ onAfterRouteLeave: AddAfterLeaveHook<TRoutes | TPlugin['routes'], ToRouteContext<TOptions['rejections']> | ToRouteContext<TPlugin['rejections']>>;
119
119
  /**
120
120
  * Registers a hook to be called after a route is updated.
121
121
  */
122
- onAfterRouteUpdate: AddRouterAfterRouteHook<TRoutes | TPlugin['routes'], ToRouteContext<TOptions['rejections']> | ToRouteContext<TPlugin['rejections']>>;
122
+ onAfterRouteUpdate: AddAfterUpdateHook<TRoutes | TPlugin['routes'], ToRouteContext<TOptions['rejections']> | ToRouteContext<TPlugin['rejections']>>;
123
123
  /**
124
124
  * Registers a hook to be called when an error occurs.
125
125
  * If the hook returns true, the error is considered handled and the other hooks are not run. If all hooks return false the error is rethrown
126
126
  */
127
- onError: AddRouterErrorHook<TRoutes | TPlugin['routes'], ToRouteContext<TOptions['rejections']> | ToRouteContext<TPlugin['rejections']>>;
127
+ onError: AddErrorHook<TRoutes[number] | TPlugin['routes'][number], TRoutes | TPlugin['routes'], ToRouteContext<TOptions['rejections']> | ToRouteContext<TPlugin['rejections']>>;
128
128
  /**
129
129
  * Given a URL, returns true if host does not match host stored on router instance
130
130
  */
@@ -151,6 +151,11 @@ export type Router<TRoutes extends Routes = any, TOptions extends RouterOptions
151
151
  * @private
152
152
  */
153
153
  key: InjectionKey<Router<TRoutes, TOptions, TPlugin>>;
154
+ /**
155
+ * Returns true if the router's devtools plugin has been installed
156
+ * @private
157
+ */
158
+ hasDevtools: boolean;
154
159
  };
155
160
  /**
156
161
  * This type is the same as `RouterRoute<ResolvedRoute<TRoutes[number]>>` while remaining distributive
@@ -0,0 +1 @@
1
+ export type RouterAbort = () => void;