@kitbag/router 0.28.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/kitbag-router.js +1692 -1561
- package/dist/kitbag-router.umd.cjs +2 -2
- package/dist/main.d.ts +15 -0
- 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/addView.d.ts +7 -4
- 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/createRouterAssets.d.ts +15 -0
- package/dist/services/createRouterAssets.spec-d.d.ts +1 -0
- 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/getRouteContext.d.ts +6 -0
- package/dist/services/getRoutesForRouter.d.ts +6 -1
- package/dist/services/registerHookContext.spec.d.ts +1 -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/types/addLoader.d.ts +7 -4
- package/dist/types/addView.d.ts +8 -3
- package/dist/types/createRouteOptions.d.ts +3 -7
- 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/register.d.ts +2 -2
- package/dist/types/resolved.d.ts +4 -0
- package/dist/types/routeContext.d.ts +8 -0
- package/dist/types/routeWithParams.d.ts +1 -1
- package/dist/types/router.d.ts +5 -4
- package/dist/types/routerPlugin.d.ts +7 -5
- package/dist/types/url.d.ts +1 -0
- package/dist/types/view.d.ts +58 -0
- package/dist/utilities/testHelpers.d.ts +4 -4
- package/package.json +1 -1
- package/dist/services/createRouteRedirects.d.ts +0 -10
- /package/dist/services/{createRouteRedirects.spec.d.ts → addRedirect.spec.d.ts} +0 -0
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 {};
|
|
@@ -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 {
|
|
@@ -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
|
@@ -6,7 +6,7 @@ import { RouterRoute } from './routerRoute';
|
|
|
6
6
|
import { AddBeforeEnterHook, AddBeforeUpdateHook, AddBeforeLeaveHook, AddAfterEnterHook, AddAfterUpdateHook, AddAfterLeaveHook, AddErrorHook, AddRejectionHook } from './hooks';
|
|
7
7
|
import { PrefetchConfig } from './prefetch';
|
|
8
8
|
import { ResolvedRoute } from './resolved';
|
|
9
|
-
import {
|
|
9
|
+
import { Routes } from './route';
|
|
10
10
|
import { RouterPush } from './routerPush';
|
|
11
11
|
import { RouterReplace } from './routerReplace';
|
|
12
12
|
import { RouterResolve, RouterResolveOptions } from './routerResolve';
|
|
@@ -256,7 +256,8 @@ export type Router<TRoutes extends Routes = any, TOptions extends RouterOptions
|
|
|
256
256
|
*/
|
|
257
257
|
render: () => Promise<ServerRenderResponse>;
|
|
258
258
|
/**
|
|
259
|
-
* 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.
|
|
260
261
|
*/
|
|
261
262
|
stop: () => void;
|
|
262
263
|
/**
|
|
@@ -278,6 +279,6 @@ export type Router<TRoutes extends Routes = any, TOptions extends RouterOptions
|
|
|
278
279
|
export type RouterRouteUnion<TRoutes extends Routes> = {
|
|
279
280
|
[K in keyof TRoutes]: TRoutes[K]['name'] extends '' ? never : RouterRoute<ResolvedRoute<TRoutes[K]>>;
|
|
280
281
|
}[number];
|
|
281
|
-
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;
|
|
282
283
|
export type RouterRejections<TRouter extends Router> = TRouter extends Router<any, infer TOptions extends RouterOptions, infer TPlugins extends RouterPlugin> ? ExtractRejections<TOptions> | ExtractRejections<TPlugins> : [];
|
|
283
|
-
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;
|
package/dist/types/url.d.ts
CHANGED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { Component } from 'vue';
|
|
2
|
+
import { ComponentProps } from '../services/component';
|
|
3
|
+
import { TransformerOptions } from '../services/payload';
|
|
4
|
+
import { PrefetchConfig } from './prefetch';
|
|
5
|
+
import { RouteContext, RouteContextToRejection, RouteContextToRoute } from './routeContext';
|
|
6
|
+
import { ResolvedRouteWithDataUnion } from './resolved';
|
|
7
|
+
import { Routes } from './route';
|
|
8
|
+
import { RouterPush } from './routerPush';
|
|
9
|
+
import { RouterReplace } from './routerReplace';
|
|
10
|
+
import { RouterReject } from './routerReject';
|
|
11
|
+
import { AnyFunction, MaybePromise } from './utilities';
|
|
12
|
+
export declare const IS_VIEW_SYMBOL: unique symbol;
|
|
13
|
+
export type ViewInternal = {
|
|
14
|
+
[IS_VIEW_SYMBOL]: true;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Navigation helpers available to a reusable view from its declared context.
|
|
18
|
+
*/
|
|
19
|
+
export type ViewCallbackContext<TContext extends readonly RouteContext[] = []> = {
|
|
20
|
+
push: RouterPush<RouteContextToRoute<[...TContext]>>;
|
|
21
|
+
replace: RouterReplace<RouteContextToRoute<[...TContext]>>;
|
|
22
|
+
reject: RouterReject<RouteContextToRejection<[...TContext]>>;
|
|
23
|
+
signal: AbortSignal;
|
|
24
|
+
};
|
|
25
|
+
export type ViewPropsGetter<TContext extends readonly RouteContext[], TProps, TRoutes extends Routes = Routes> = (route: ResolvedRouteWithDataUnion<TRoutes[number]>, context: ViewCallbackContext<TContext>) => TProps;
|
|
26
|
+
/**
|
|
27
|
+
* Options for a reusable component and its props getter.
|
|
28
|
+
*/
|
|
29
|
+
export type CreateViewOptions<TComponent extends Component = Component, TContext extends readonly RouteContext[] = [], TProps extends MaybePromise<ComponentProps<TComponent>> | undefined = undefined, TRoutes extends Routes = Routes> = TransformerOptions<NoInfer<Awaited<TProps>>> & {
|
|
30
|
+
component: TComponent;
|
|
31
|
+
/**
|
|
32
|
+
* See [Context](https://kitbag-router.netlify.app/advanced-concepts/context).
|
|
33
|
+
*/
|
|
34
|
+
context?: TContext;
|
|
35
|
+
prefetch?: PrefetchConfig;
|
|
36
|
+
} & (Partial<ComponentProps<TComponent>> extends ComponentProps<TComponent> ? {
|
|
37
|
+
props?: ViewPropsGetter<TContext, TProps extends undefined ? MaybePromise<ComponentProps<TComponent>> : TProps, TRoutes>;
|
|
38
|
+
} : {
|
|
39
|
+
props: ViewPropsGetter<TContext, TProps extends undefined ? MaybePromise<ComponentProps<TComponent>> : TProps, TRoutes>;
|
|
40
|
+
});
|
|
41
|
+
/**
|
|
42
|
+
* Creates views with props callbacks typed to the router's resolved routes and loader data.
|
|
43
|
+
*/
|
|
44
|
+
export type CreateView<TRoutes extends Routes = Routes> = <TComponent extends Component, const TContext extends readonly RouteContext[] = [], TProps extends MaybePromise<ComponentProps<TComponent>> | undefined = undefined>(options: CreateViewOptions<TComponent, TContext, TProps, TRoutes>) => View<TProps, TContext>;
|
|
45
|
+
/**
|
|
46
|
+
* A reusable view definition with its props getter's result and declared context.
|
|
47
|
+
*/
|
|
48
|
+
export type View<TProps = unknown, TContext extends readonly RouteContext[] = []> = TransformerOptions<Awaited<TProps>> & {
|
|
49
|
+
component: Component;
|
|
50
|
+
props?: AnyFunction<TProps>;
|
|
51
|
+
context: TContext;
|
|
52
|
+
prefetch?: PrefetchConfig;
|
|
53
|
+
};
|
|
54
|
+
export type AnyView = View<any, readonly RouteContext[]>;
|
|
55
|
+
/**
|
|
56
|
+
* Determines whether a value is a reusable view.
|
|
57
|
+
*/
|
|
58
|
+
export declare function isView(value: unknown): value is AnyView & ViewInternal;
|
|
@@ -86,8 +86,8 @@ export declare const routes: readonly [import('../types/routeWithMethods').Route
|
|
|
86
86
|
meta: Readonly<{}>;
|
|
87
87
|
id: string;
|
|
88
88
|
name: "parentA.childB";
|
|
89
|
-
loaders: {};
|
|
90
89
|
readonly path: "/childB/[paramD]";
|
|
90
|
+
loaders: {};
|
|
91
91
|
views: {
|
|
92
92
|
default: import('../types/routeViews').RouteView;
|
|
93
93
|
};
|
|
@@ -142,8 +142,8 @@ export declare const routes: readonly [import('../types/routeWithMethods').Route
|
|
|
142
142
|
meta: Readonly<{}>;
|
|
143
143
|
id: string;
|
|
144
144
|
name: "parentA.childA.grandChildA";
|
|
145
|
-
loaders: {};
|
|
146
145
|
readonly path: "/[paramC]";
|
|
146
|
+
loaders: {};
|
|
147
147
|
views: {
|
|
148
148
|
default: import('../types/routeViews').RouteView;
|
|
149
149
|
};
|
|
@@ -154,8 +154,8 @@ export declare const routes: readonly [import('../types/routeWithMethods').Route
|
|
|
154
154
|
meta: Readonly<{}>;
|
|
155
155
|
id: string;
|
|
156
156
|
name: "parentB";
|
|
157
|
-
loaders: {};
|
|
158
157
|
readonly path: "/parentB";
|
|
158
|
+
loaders: {};
|
|
159
159
|
views: {
|
|
160
160
|
default: import('../types/routeViews').RouteView;
|
|
161
161
|
};
|
|
@@ -166,8 +166,8 @@ export declare const routes: readonly [import('../types/routeWithMethods').Route
|
|
|
166
166
|
meta: Readonly<{}>;
|
|
167
167
|
id: string;
|
|
168
168
|
name: "parentC";
|
|
169
|
-
loaders: {};
|
|
170
169
|
readonly path: "/";
|
|
170
|
+
loaders: {};
|
|
171
171
|
views: {
|
|
172
172
|
default: import('../types/routeViews').RouteView;
|
|
173
173
|
};
|
package/package.json
CHANGED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { RouteRedirects } from '../types/redirects';
|
|
2
|
-
import { Route } from '../types/route';
|
|
3
|
-
type CreateRouteRedirectsContext = {
|
|
4
|
-
/**
|
|
5
|
-
* The to route for the redirectFrom callback and the from route for the redirectTo callback.
|
|
6
|
-
*/
|
|
7
|
-
getRoute: () => Route;
|
|
8
|
-
};
|
|
9
|
-
export declare function createRouteRedirects({ getRoute }: CreateRouteRedirectsContext): RouteRedirects;
|
|
10
|
-
export {};
|
|
File without changes
|