@kitbag/router 0.20.7 → 0.20.9

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.
@@ -0,0 +1,45 @@
1
+ import { Router, RouterRejections, RouterRoutes } from '../types/router';
2
+ import { RouterPush } from '../types/routerPush';
3
+ import { RouterReject } from '../types/routerReject';
4
+ import { RouterReplace } from '../types/routerReplace';
5
+ import { InjectionKey } from 'vue';
6
+ import { BuiltInRejectionType } from './createRouterReject';
7
+ import { AsString } from '../types/utilities';
8
+ import { Routes } from '../types/route';
9
+ /**
10
+ * Defines the structure of a successful callback response.
11
+ */
12
+ export type RouterCallbackSuccessResponse = {
13
+ status: 'SUCCESS';
14
+ };
15
+ /**
16
+ * Defines the structure of an aborted callback response.
17
+ */
18
+ export type RouterCallbackAbortResponse = {
19
+ status: 'ABORT';
20
+ };
21
+ /**
22
+ * Defines the structure of a callback response that results in a push to a new route.
23
+ */
24
+ export type RouterCallbackPushResponse<TRoutes extends Routes> = {
25
+ status: 'PUSH';
26
+ to: Parameters<RouterPush<TRoutes>>;
27
+ };
28
+ /**
29
+ * Defines the structure of a callback response that results in the rejection of a route transition.
30
+ */
31
+ export type RouterCallbackRejectResponse<TRejections extends PropertyKey> = {
32
+ status: 'REJECT';
33
+ type: AsString<TRejections> | BuiltInRejectionType;
34
+ };
35
+ /**
36
+ * A function that can be called to abort a routing operation.
37
+ */
38
+ export type CallbackContextAbort = () => void;
39
+ export type RouterCallbackContext<TRouter extends Router> = {
40
+ reject: RouterReject<RouterRejections<TRouter>>;
41
+ push: RouterPush<RouterRoutes<TRouter>>;
42
+ replace: RouterReplace<RouterRoutes<TRouter>>;
43
+ abort: CallbackContextAbort;
44
+ };
45
+ export declare function createRouterCallbackContext<TRouter extends Router>(_routerKey: InjectionKey<TRouter>): RouterCallbackContext<TRouter>;
@@ -1,20 +1,20 @@
1
1
  import { AddGlobalRouteHooks, AddComponentAfterRouteHook, AddComponentBeforeRouteHook } from '../types/hooks';
2
2
  import { HasVueAppStore } from './createVueAppStore';
3
- import { AddRouterAfterRouteHook, AddRouterBeforeRouteHook, Router, RouterRoutes, RouterRouteHookBeforeRunner, RouterRouteHookAfterRunner } from '../types/router';
3
+ import { AddRouterAfterRouteHook, AddRouterBeforeRouteHook, Router, RouterRoutes, RouterRouteHookBeforeRunner, RouterRouteHookAfterRunner, RouterRejections } from '../types/router';
4
4
  import { Routes } from '../types/route';
5
5
  import { InjectionKey } from 'vue';
6
- export declare const getRouterHooksKey: (routerKey: InjectionKey<Router>) => InjectionKey<RouterHooks<any>>;
7
- export type RouterHooks<TRoutes extends Routes> = HasVueAppStore & {
6
+ export declare const getRouterHooksKey: (routerKey: InjectionKey<Router>) => InjectionKey<RouterHooks<any, any>>;
7
+ export type RouterHooks<TRoutes extends Routes, TRejections extends PropertyKey> = HasVueAppStore & {
8
8
  runBeforeRouteHooks: RouterRouteHookBeforeRunner<TRoutes>;
9
9
  runAfterRouteHooks: RouterRouteHookAfterRunner<TRoutes>;
10
- addComponentBeforeRouteHook: AddComponentBeforeRouteHook<TRoutes>;
11
- addComponentAfterRouteHook: AddComponentAfterRouteHook<TRoutes>;
12
- addGlobalRouteHooks: AddGlobalRouteHooks<TRoutes>;
13
- onBeforeRouteEnter: AddRouterBeforeRouteHook<TRoutes>;
14
- onBeforeRouteUpdate: AddRouterBeforeRouteHook<TRoutes>;
15
- onBeforeRouteLeave: AddRouterBeforeRouteHook<TRoutes>;
16
- onAfterRouteEnter: AddRouterAfterRouteHook<TRoutes>;
17
- onAfterRouteUpdate: AddRouterAfterRouteHook<TRoutes>;
18
- onAfterRouteLeave: AddRouterAfterRouteHook<TRoutes>;
10
+ addComponentBeforeRouteHook: AddComponentBeforeRouteHook<TRoutes, TRejections>;
11
+ addComponentAfterRouteHook: AddComponentAfterRouteHook<TRoutes, TRejections>;
12
+ addGlobalRouteHooks: AddGlobalRouteHooks<TRoutes, TRejections>;
13
+ onBeforeRouteEnter: AddRouterBeforeRouteHook<TRoutes, TRejections>;
14
+ onBeforeRouteUpdate: AddRouterBeforeRouteHook<TRoutes, TRejections>;
15
+ onBeforeRouteLeave: AddRouterBeforeRouteHook<TRoutes, TRejections>;
16
+ onAfterRouteEnter: AddRouterAfterRouteHook<TRoutes, TRejections>;
17
+ onAfterRouteUpdate: AddRouterAfterRouteHook<TRoutes, TRejections>;
18
+ onAfterRouteLeave: AddRouterAfterRouteHook<TRoutes, TRejections>;
19
19
  };
20
- export declare function createRouterHooks<TRouter extends Router>(_routerKey: InjectionKey<TRouter>): RouterHooks<RouterRoutes<TRouter>>;
20
+ export declare function createRouterHooks<TRouter extends Router>(_routerKey: InjectionKey<TRouter>): RouterHooks<RouterRoutes<TRouter>, RouterRejections<TRouter>>;
@@ -1,5 +1,5 @@
1
1
  import { ResolvedRoute } from '../types/resolved';
2
2
  import { RouterRouteHooks } from '../models/RouterRouteHooks';
3
3
  import { Routes } from '../main';
4
- export declare function getGlobalBeforeRouteHooks<TRoutes extends Routes>(to: ResolvedRoute, from: ResolvedRoute | null, globalHooks: RouterRouteHooks<TRoutes>): RouterRouteHooks<TRoutes>;
5
- export declare function getGlobalAfterRouteHooks<TRoutes extends Routes>(to: ResolvedRoute, from: ResolvedRoute | null, globalHooks: RouterRouteHooks<TRoutes>): RouterRouteHooks<TRoutes>;
4
+ export declare function getGlobalBeforeRouteHooks<TRoutes extends Routes, TRejections extends PropertyKey>(to: ResolvedRoute, from: ResolvedRoute | null, globalHooks: RouterRouteHooks<TRoutes, TRejections>): RouterRouteHooks<TRoutes, TRejections>;
5
+ export declare function getGlobalAfterRouteHooks<TRoutes extends Routes, TRejections extends PropertyKey>(to: ResolvedRoute, from: ResolvedRoute | null, globalHooks: RouterRouteHooks<TRoutes, TRejections>): RouterRouteHooks<TRoutes, TRejections>;
@@ -1,4 +1,10 @@
1
1
  import { RouteHooks } from '../models/RouteHooks';
2
2
  import { ResolvedRoute } from '../types/resolved';
3
+ /**
4
+ * @deprecated will be removed in a future version
5
+ */
3
6
  export declare function getBeforeRouteHooksFromRoutes(to: ResolvedRoute, from: ResolvedRoute | null): RouteHooks;
7
+ /**
8
+ * @deprecated will be removed in a future version
9
+ */
4
10
  export declare function getAfterRouteHooksFromRoutes(to: ResolvedRoute, from: ResolvedRoute | null): RouteHooks;
@@ -8,11 +8,29 @@ import { RouterAfterRouteHook, RouterBeforeRouteHook } from './router';
8
8
  * Defines route hooks that can be applied before entering, updating, or leaving a route, as well as after these events.
9
9
  */
10
10
  export type WithHooks = {
11
+ /**
12
+ * @deprecated Use router.onBeforeRouteEnter instead
13
+ */
11
14
  onBeforeRouteEnter?: MaybeArray<BeforeRouteHook>;
15
+ /**
16
+ * @deprecated Use router.onBeforeRouteUpdate instead
17
+ */
12
18
  onBeforeRouteUpdate?: MaybeArray<BeforeRouteHook>;
19
+ /**
20
+ * @deprecated Use router.onBeforeRouteLeave instead
21
+ */
13
22
  onBeforeRouteLeave?: MaybeArray<BeforeRouteHook>;
23
+ /**
24
+ * @deprecated Use router.onAfterRouteEnter instead
25
+ */
14
26
  onAfterRouteEnter?: MaybeArray<AfterRouteHook>;
27
+ /**
28
+ * @deprecated Use router.onAfterRouteUpdate instead
29
+ */
15
30
  onAfterRouteUpdate?: MaybeArray<AfterRouteHook>;
31
+ /**
32
+ * @deprecated Use router.onAfterRouteLeave instead
33
+ */
16
34
  onAfterRouteLeave?: MaybeArray<AfterRouteHook>;
17
35
  };
18
36
  export type BeforeHookContext = {
@@ -26,19 +44,19 @@ export type AfterHookContext = {
26
44
  };
27
45
  export type RouteHookAfterRunner = (context: AfterHookContext) => Promise<AfterRouteHookResponse>;
28
46
  export type RouteHookTiming = 'global' | 'component';
29
- export type BeforeRouteHookRegistration<TRoutes extends Routes> = {
47
+ type BeforeRouteHookRegistration<TRoutes extends Routes, TRejections extends PropertyKey> = {
30
48
  lifecycle: 'onBeforeRouteEnter' | 'onBeforeRouteUpdate' | 'onBeforeRouteLeave';
31
- hook: RouterBeforeRouteHook<TRoutes>;
49
+ hook: RouterBeforeRouteHook<TRoutes, TRejections>;
32
50
  depth: number;
33
51
  };
34
- export type AddComponentBeforeRouteHook<TRoutes extends Routes> = (hook: BeforeRouteHookRegistration<TRoutes>) => RouteHookRemove;
35
- export type AfterRouteHookRegistration<TRoutes extends Routes> = {
52
+ export type AddComponentBeforeRouteHook<TRoutes extends Routes, TRejections extends PropertyKey> = (hook: BeforeRouteHookRegistration<TRoutes, TRejections>) => RouteHookRemove;
53
+ type AfterRouteHookRegistration<TRoutes extends Routes, TRejections extends PropertyKey> = {
36
54
  lifecycle: 'onAfterRouteEnter' | 'onAfterRouteUpdate' | 'onAfterRouteLeave';
37
- hook: RouterAfterRouteHook<TRoutes>;
55
+ hook: RouterAfterRouteHook<TRoutes, TRejections>;
38
56
  depth: number;
39
57
  };
40
- export type AddComponentAfterRouteHook<TRoutes extends Routes> = (hook: AfterRouteHookRegistration<TRoutes>) => RouteHookRemove;
41
- export type AddGlobalRouteHooks<TRoutes extends Routes> = (hooks: RouterRouteHooks<TRoutes>) => void;
58
+ export type AddComponentAfterRouteHook<TRoutes extends Routes, TRejections extends PropertyKey> = (hook: AfterRouteHookRegistration<TRoutes, TRejections>) => RouteHookRemove;
59
+ export type AddGlobalRouteHooks<TRoutes extends Routes, TRejections extends PropertyKey> = (hooks: RouterRouteHooks<TRoutes, TRejections>) => void;
42
60
  /**
43
61
  * Context provided to route hooks, containing context of previous route and functions for triggering rejections and push/replace to another route.
44
62
  */
@@ -3,6 +3,7 @@ import { Route, Routes } from './route';
3
3
  import { Router, RouterOptions } from './router';
4
4
  import { RouterPush } from './routerPush';
5
5
  import { RouterReplace } from './routerReplace';
6
+ import { RoutesName } from './routesMap';
6
7
  /**
7
8
  * Represents the state of currently registered router, and route meta. Used to provide correct type context for
8
9
  * components like `RouterLink`, as well as for composables like `useRouter`, `useRoute`, and hooks.
@@ -27,12 +28,14 @@ export type RegisteredRouter<T = Register> = T extends {
27
28
  } ? TRouter : Router;
28
29
  /**
29
30
  * Represents the Router routes property within {@link Register}
31
+ * @deprecated will be removed in a future version
30
32
  */
31
33
  export type RegisteredRoutes<T = Register> = T extends {
32
34
  router: Router<infer TRoutes extends Routes>;
33
35
  } ? TRoutes : Route[];
34
36
  /**
35
37
  * Represents the possible Rejections registered within {@link Register}
38
+ * @deprecated use `createRouter(..., { rejections: {}}) instead
36
39
  */
37
40
  export type RegisteredRejectionType<T = Register> = T extends {
38
41
  router: Router<any, infer TOptions extends RouterOptions>;
@@ -45,13 +48,21 @@ export type RouteMeta<T = Register> = T extends {
45
48
  } ? RouteMeta : Record<string, unknown>;
46
49
  /**
47
50
  * Represents the type for router `push`, with types for routes registered within {@link Register}
51
+ * @deprecated will be removed in a future version
48
52
  */
49
53
  export type RegisteredRouterPush = RouterPush<RegisteredRoutes>;
50
54
  /**
51
55
  * Represents the type for router `replace`, with types for routes registered within {@link Register}
56
+ * @deprecated will be removed in a future version
52
57
  */
53
58
  export type RegisteredRouterReplace = RouterReplace<RegisteredRoutes>;
54
59
  /**
55
60
  * Type for Router Reject method. Triggers rejections registered within {@link Register}
61
+ * @deprecated will be removed in a future version
56
62
  */
57
63
  export type RegisteredRouterReject = (type: RegisteredRejectionType) => void;
64
+ /**
65
+ * Represents the union of all possible route names registered within {@link Register}
66
+ * @deprecated will be removed in a future version
67
+ */
68
+ export type RegisteredRoutesName = RoutesName<RegisteredRoutes>;
@@ -12,7 +12,7 @@ import { RouterReject } from './routerReject';
12
12
  import { RouterPlugin } from './routerPlugin';
13
13
  import { KeysOfUnion, MaybePromise } from './utilities';
14
14
  import { RoutesName } from './routesMap';
15
- import { AfterRouteHookResponse, BeforeRouteHookResponse, RegisteredRouterReject } from '../main';
15
+ import { AfterRouteHookResponse, BeforeRouteHookResponse } from '../main';
16
16
  import { CallbackContextAbort } from '../services/createCallbackContext';
17
17
  /**
18
18
  * Options to initialize a {@link Router} instance.
@@ -100,27 +100,27 @@ export type Router<TRoutes extends Routes = any, TOptions extends RouterOptions
100
100
  /**
101
101
  * Registers a hook to be called before a route is entered.
102
102
  */
103
- onBeforeRouteEnter: AddRouterBeforeRouteHook<TRoutes | TPlugin['routes']>;
103
+ onBeforeRouteEnter: AddRouterBeforeRouteHook<TRoutes | TPlugin['routes'], keyof TOptions['rejections'] | KeysOfUnion<TPlugin['rejections']>>;
104
104
  /**
105
105
  * Registers a hook to be called before a route is left.
106
106
  */
107
- onBeforeRouteLeave: AddRouterBeforeRouteHook<TRoutes | TPlugin['routes']>;
107
+ onBeforeRouteLeave: AddRouterBeforeRouteHook<TRoutes | TPlugin['routes'], keyof TOptions['rejections'] | KeysOfUnion<TPlugin['rejections']>>;
108
108
  /**
109
109
  * Registers a hook to be called before a route is updated.
110
110
  */
111
- onBeforeRouteUpdate: AddRouterBeforeRouteHook<TRoutes | TPlugin['routes']>;
111
+ onBeforeRouteUpdate: AddRouterBeforeRouteHook<TRoutes | TPlugin['routes'], keyof TOptions['rejections'] | KeysOfUnion<TPlugin['rejections']>>;
112
112
  /**
113
113
  * Registers a hook to be called after a route is entered.
114
114
  */
115
- onAfterRouteEnter: AddRouterAfterRouteHook<TRoutes | TPlugin['routes']>;
115
+ onAfterRouteEnter: AddRouterAfterRouteHook<TRoutes | TPlugin['routes'], keyof TOptions['rejections'] | KeysOfUnion<TPlugin['rejections']>>;
116
116
  /**
117
117
  * Registers a hook to be called after a route is left.
118
118
  */
119
- onAfterRouteLeave: AddRouterAfterRouteHook<TRoutes | TPlugin['routes']>;
119
+ onAfterRouteLeave: AddRouterAfterRouteHook<TRoutes | TPlugin['routes'], keyof TOptions['rejections'] | KeysOfUnion<TPlugin['rejections']>>;
120
120
  /**
121
121
  * Registers a hook to be called after a route is updated.
122
122
  */
123
- onAfterRouteUpdate: AddRouterAfterRouteHook<TRoutes | TPlugin['routes']>;
123
+ onAfterRouteUpdate: AddRouterAfterRouteHook<TRoutes | TPlugin['routes'], keyof TOptions['rejections'] | KeysOfUnion<TPlugin['rejections']>>;
124
124
  /**
125
125
  * Given a URL, returns true if host does not match host stored on router instance
126
126
  */
@@ -148,24 +148,24 @@ export type Router<TRoutes extends Routes = any, TOptions extends RouterOptions
148
148
  */
149
149
  key: InjectionKey<Router<TRoutes, TOptions, TPlugin>>;
150
150
  };
151
- type RouterHookContext<TRoutes extends Routes> = {
151
+ type RouterHookContext<TRoutes extends Routes, TRejections extends PropertyKey> = {
152
152
  from: RouterResolvedRouteUnion<TRoutes> | null;
153
- reject: RegisteredRouterReject;
153
+ reject: RouterReject<TRejections>;
154
154
  push: RouterPush<TRoutes>;
155
155
  replace: RouterReplace<TRoutes>;
156
156
  };
157
- type RouterBeforeRouteHookContext<TRoutes extends Routes> = RouterHookContext<TRoutes> & {
157
+ type RouterBeforeRouteHookContext<TRoutes extends Routes, TRejections extends PropertyKey> = RouterHookContext<TRoutes, TRejections> & {
158
158
  abort: CallbackContextAbort;
159
159
  };
160
160
  export type HookContext<TRoutes extends Routes> = {
161
161
  to: RouterResolvedRouteUnion<TRoutes>;
162
162
  from: RouterResolvedRouteUnion<TRoutes> | null;
163
163
  };
164
- export type RouterBeforeRouteHook<TRoutes extends Routes> = (to: RouterResolvedRouteUnion<TRoutes>, context: RouterBeforeRouteHookContext<TRoutes>) => MaybePromise<void>;
165
- export type AddRouterBeforeRouteHook<TRoutes extends Routes> = (hook: RouterBeforeRouteHook<TRoutes>) => RouteHookRemove;
166
- type RouterAfterRouteHookContext<TRoutes extends Routes> = RouterHookContext<TRoutes>;
167
- export type RouterAfterRouteHook<TRoutes extends Routes> = (to: RouterResolvedRouteUnion<TRoutes>, context: RouterAfterRouteHookContext<TRoutes>) => MaybePromise<void>;
168
- export type AddRouterAfterRouteHook<TRoutes extends Routes> = (hook: RouterAfterRouteHook<TRoutes>) => RouteHookRemove;
164
+ export type RouterBeforeRouteHook<TRoutes extends Routes, TRejections extends PropertyKey> = (to: RouterResolvedRouteUnion<TRoutes>, context: RouterBeforeRouteHookContext<TRoutes, TRejections>) => MaybePromise<void>;
165
+ export type AddRouterBeforeRouteHook<TRoutes extends Routes, TRejections extends PropertyKey> = (hook: RouterBeforeRouteHook<TRoutes, TRejections>) => RouteHookRemove;
166
+ type RouterAfterRouteHookContext<TRoutes extends Routes, TRejections extends PropertyKey> = RouterHookContext<TRoutes, TRejections>;
167
+ export type RouterAfterRouteHook<TRoutes extends Routes, TRejections extends PropertyKey> = (to: RouterResolvedRouteUnion<TRoutes>, context: RouterAfterRouteHookContext<TRoutes, TRejections>) => MaybePromise<void>;
168
+ export type AddRouterAfterRouteHook<TRoutes extends Routes, TRejections extends PropertyKey> = (hook: RouterAfterRouteHook<TRoutes, TRejections>) => RouteHookRemove;
169
169
  export type RouterRouteHookBeforeRunner<TRoutes extends Routes> = (context: HookContext<TRoutes>) => Promise<BeforeRouteHookResponse>;
170
170
  export type RouterRouteHookAfterRunner<TRoutes extends Routes> = (context: HookContext<TRoutes>) => Promise<AfterRouteHookResponse>;
171
171
  /**
@@ -181,5 +181,6 @@ type RouterResolvedRouteUnion<TRoutes extends Routes> = {
181
181
  [K in keyof TRoutes]: ResolvedRoute<TRoutes[K]>;
182
182
  }[number];
183
183
  export type RouterRoutes<TRouter extends Router> = TRouter extends Router<infer TRoutes extends Routes> ? TRoutes : Routes;
184
+ export type RouterRejections<TRouter extends Router> = TRouter extends Router<any, infer TOptions extends RouterOptions, infer TPlugins extends RouterPlugin> ? keyof TOptions['rejections'] | KeysOfUnion<TPlugins['rejections']> : PropertyKey;
184
185
  export type RouterRouteName<TRouter extends Router> = TRouter extends Router<infer TRoutes extends Routes> ? RoutesName<TRoutes> : RoutesName<Route[]>;
185
186
  export {};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kitbag/router",
3
3
  "private": false,
4
- "version": "0.20.7",
4
+ "version": "0.20.9",
5
5
  "bugs": {
6
6
  "url": "https://github.com/kitbagjs/router/issues"
7
7
  },
@@ -17,7 +17,7 @@
17
17
  "scripts": {
18
18
  "build": "vite build",
19
19
  "build:watch": "vite build --watch --minify=false",
20
- "test": "vitest --typecheck",
20
+ "test": "vitest",
21
21
  "lint": "eslint ./src",
22
22
  "lint:fix": "eslint ./src --fix",
23
23
  "types": "vue-tsc --noEmit",
@@ -43,9 +43,9 @@
43
43
  "@kitbag/eslint-config": "1.0.2",
44
44
  "@vitejs/plugin-vue": "^6.0.1",
45
45
  "@vue/test-utils": "^2.4.6",
46
- "eslint": "^9.38.0",
47
- "globals": "^16.4.0",
48
- "happy-dom": "^20.0.7",
46
+ "eslint": "^9.39.1",
47
+ "globals": "^16.5.0",
48
+ "happy-dom": "^20.0.8",
49
49
  "typedoc": "^0.28.14",
50
50
  "typedoc-plugin-markdown": "^4.9.0",
51
51
  "typedoc-vitepress-theme": "^1.1.2",
@@ -54,7 +54,7 @@
54
54
  "vite": "^7.1.12",
55
55
  "vite-plugin-dts": "^4.5.4",
56
56
  "vitepress": "^1.6.4",
57
- "vitest": "^3.2.4",
57
+ "vitest": "^4.0.4",
58
58
  "vue-tsc": "^3.1.2"
59
59
  },
60
60
  "peerDependencies": {