@hyeonqyu/typed-router-react 1.0.1 → 1.0.2
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/index.d.mts +40 -5
- package/dist/index.d.ts +40 -5
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -1,20 +1,55 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
-
import * as packages_core_dist_routes_types_C4Wr8tbE from 'packages/core/dist/routes.types-C4Wr8tbE';
|
|
3
2
|
import { ReactNode } from 'react';
|
|
4
3
|
export * from '@hyeonqyu/typed-router-core';
|
|
5
4
|
|
|
5
|
+
type Paths<TObject, TSplitter extends string, TPrev extends string = '', TMaxDepth extends number = 10, TDepth extends unknown[] = []> = TDepth['length'] extends TMaxDepth ? never : TSplitter | {
|
|
6
|
+
[K in keyof TObject & string]: TObject[K] extends object ? `${TSplitter}${TPrev extends '' ? K : `${TPrev}${TSplitter}${K}`}` | Paths<TObject[K], TSplitter, TPrev extends '' ? K : `${TPrev}${TSplitter}${K}`, TMaxDepth, [...TDepth, 1]> : `${TSplitter}${TPrev extends '' ? K : `${TPrev}${TSplitter}${K}`}`;
|
|
7
|
+
}[keyof TObject & string];
|
|
8
|
+
|
|
9
|
+
type BaseMetadata = NonNullable<unknown>;
|
|
10
|
+
type AnyZodSchema = {
|
|
11
|
+
_input: any;
|
|
12
|
+
_output: any;
|
|
13
|
+
parse: (data: any) => any;
|
|
14
|
+
};
|
|
15
|
+
type RouteNode<TMetadata extends BaseMetadata, TContext> = {
|
|
16
|
+
_metadata: RouteNodeMetadata<TMetadata, TContext>;
|
|
17
|
+
};
|
|
18
|
+
type RouteNodeMetadata<TMetadata extends BaseMetadata, TContext> = {
|
|
19
|
+
title?: string;
|
|
20
|
+
label?: string;
|
|
21
|
+
description?: string;
|
|
22
|
+
href?: (context: TContext) => string;
|
|
23
|
+
accessible?: (context: TContext) => boolean;
|
|
24
|
+
searchParamsSchema?: AnyZodSchema;
|
|
25
|
+
} & TMetadata;
|
|
26
|
+
type PartialRouteTree<TMetadata extends BaseMetadata, TContext> = {
|
|
27
|
+
[key: string]: RouteNode<TMetadata, TContext> | PartialRouteTree<TMetadata, TContext>;
|
|
28
|
+
};
|
|
29
|
+
type ExtractChildRoutes<TMetadata extends BaseMetadata, TContext, TSubRouteTree, TRouteTree> = {
|
|
30
|
+
[K in '_metadata' | keyof TSubRouteTree]: K extends '_metadata' ? RouteNodeMetadata<TMetadata, TContext> : K extends keyof TSubRouteTree ? TSubRouteTree[K] extends RouteNode<TMetadata, TContext> ? TSubRouteTree[K] : TSubRouteTree[K] extends Record<string, unknown> ? ExtractChildRoutes<TMetadata, TContext, TSubRouteTree[K], TRouteTree> : never : never;
|
|
31
|
+
};
|
|
32
|
+
type RouteTree<TMetadata extends BaseMetadata, TContext, TSubRouteTree extends PartialRouteTree<TMetadata, TContext>, TRouteTree = TSubRouteTree> = {
|
|
33
|
+
[K in keyof TSubRouteTree]: TSubRouteTree[K] extends RouteNode<TMetadata, TContext> ? TSubRouteTree[K] : TSubRouteTree[K] extends Record<string, unknown> ? ExtractChildRoutes<TMetadata, TContext, TSubRouteTree[K], TRouteTree> : never;
|
|
34
|
+
};
|
|
35
|
+
type RouteTreeWithoutMetadata<T> = {
|
|
36
|
+
[K in keyof T as K extends '_metadata' ? never : K]: T[K] extends object ? RouteTreeWithoutMetadata<T[K]> : T[K];
|
|
37
|
+
};
|
|
38
|
+
type RoutePathname<TMetadata extends BaseMetadata, TContext, TRouteTree extends PartialRouteTree<TMetadata, TContext>> = Paths<RouteTreeWithoutMetadata<TRouteTree>, '/', ''>;
|
|
39
|
+
type ResolvedRouteTree<TMetadata extends BaseMetadata, TContext, TRouteTree extends PartialRouteTree<TMetadata, TContext>> = TRouteTree & RouteTree<TMetadata, TContext, TRouteTree>;
|
|
40
|
+
|
|
6
41
|
declare const createAppRoutes: <TMetadata extends {
|
|
7
42
|
component: ReactNode;
|
|
8
|
-
}, TContext>() => <TRouteTree extends
|
|
43
|
+
}, TContext>() => <TRouteTree extends PartialRouteTree<TMetadata, TContext>>(appRoutes: TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>) => {
|
|
9
44
|
AppRoutesProvider: ({ children }: {
|
|
10
45
|
children: ReactNode;
|
|
11
46
|
}) => react_jsx_runtime.JSX.Element;
|
|
12
|
-
useAppRoutes: () =>
|
|
13
|
-
useCurrentRouteNode: <TPath extends
|
|
47
|
+
useAppRoutes: () => ResolvedRouteTree<TMetadata, TContext, TRouteTree>;
|
|
48
|
+
useCurrentRouteNode: <TPath extends RoutePathname<TMetadata, TContext, TRouteTree>>(pathname: TPath) => TPath extends "/" ? TRouteTree : TPath extends `/${infer Rest}` ? Rest extends `${infer K}/${infer R}` ? K extends keyof TRouteTree ? `/${R}` extends infer T ? T extends `/${R}` ? T extends "/" ? TRouteTree[K] : T extends `/${infer Rest}` ? Rest extends `${infer K}/${infer R}` ? K extends keyof TRouteTree[K] ? `/${R}` extends infer T_1 ? T_1 extends `/${R}` ? T_1 extends "/" ? TRouteTree[K][K] : T_1 extends `/${infer Rest}` ? Rest extends `${infer K}/${infer R}` ? K extends keyof TRouteTree[K][K] ? `/${R}` extends infer T_2 ? T_2 extends `/${R}` ? T_2 extends "/" ? TRouteTree[K][K][K] : T_2 extends `/${infer Rest}` ? Rest extends `${infer K}/${infer R}` ? K extends keyof TRouteTree[K][K][K] ? `/${R}` extends infer T_3 ? T_3 extends `/${R}` ? T_3 extends "/" ? TRouteTree[K][K][K][K] : T_3 extends `/${infer Rest}` ? Rest extends `${infer K}/${infer R}` ? K extends keyof TRouteTree[K][K][K][K] ? `/${R}` extends infer T_4 ? T_4 extends `/${R}` ? T_4 extends "/" ? TRouteTree[K][K][K][K][K] : T_4 extends `/${infer Rest}` ? Rest extends `${infer K}/${infer R}` ? K extends keyof TRouteTree[K][K][K][K][K] ? `/${R}` extends infer T_5 ? T_5 extends `/${R}` ? T_5 extends "/" ? TRouteTree[K][K][K][K][K][K] : T_5 extends `/${infer Rest}` ? Rest extends `${infer K}/${infer R}` ? K extends keyof TRouteTree[K][K][K][K][K][K] ? `/${R}` extends infer T_6 ? T_6 extends `/${R}` ? T_6 extends "/" ? TRouteTree[K][K][K][K][K][K][K] : T_6 extends `/${infer Rest}` ? Rest extends `${infer K}/${infer R}` ? K extends keyof TRouteTree[K][K][K][K][K][K][K] ? `/${R}` extends infer T_7 ? T_7 extends `/${R}` ? T_7 extends "/" ? TRouteTree[K][K][K][K][K][K][K][K] : T_7 extends `/${infer Rest}` ? Rest extends `${infer K}/${infer R}` ? K extends keyof TRouteTree[K][K][K][K][K][K][K][K] ? `/${R}` extends infer T_8 ? T_8 extends `/${R}` ? T_8 extends "/" ? TRouteTree[K][K][K][K][K][K][K][K][K] : T_8 extends `/${infer Rest}` ? Rest extends `${infer K}/${infer R}` ? K extends keyof TRouteTree[K][K][K][K][K][K][K][K][K] ? never : never : Rest extends keyof TRouteTree[K][K][K][K][K][K][K][K][K] ? TRouteTree[K][K][K][K][K][K][K][K][K][Rest] : never : never : never : never : never : Rest extends keyof TRouteTree[K][K][K][K][K][K][K][K] ? TRouteTree[K][K][K][K][K][K][K][K][Rest] : never : never : never : never : never : Rest extends keyof TRouteTree[K][K][K][K][K][K][K] ? TRouteTree[K][K][K][K][K][K][K][Rest] : never : never : never : never : never : Rest extends keyof TRouteTree[K][K][K][K][K][K] ? TRouteTree[K][K][K][K][K][K][Rest] : never : never : never : never : never : Rest extends keyof TRouteTree[K][K][K][K][K] ? TRouteTree[K][K][K][K][K][Rest] : never : never : never : never : never : Rest extends keyof TRouteTree[K][K][K][K] ? TRouteTree[K][K][K][K][Rest] : never : never : never : never : never : Rest extends keyof TRouteTree[K][K][K] ? TRouteTree[K][K][K][Rest] : never : never : never : never : never : Rest extends keyof TRouteTree[K][K] ? TRouteTree[K][K][Rest] : never : never : never : never : never : Rest extends keyof TRouteTree[K] ? TRouteTree[K][Rest] : never : never : never : never : never : Rest extends keyof TRouteTree ? TRouteTree[Rest] : never : never;
|
|
14
49
|
_types: {
|
|
15
50
|
AppRoutesMetadata: TMetadata;
|
|
16
51
|
AppRoutesContext: TContext;
|
|
17
|
-
AppRoutesPathname:
|
|
52
|
+
AppRoutesPathname: RoutePathname<TMetadata, TContext, TRouteTree>;
|
|
18
53
|
};
|
|
19
54
|
};
|
|
20
55
|
|
package/dist/index.d.ts
CHANGED
|
@@ -1,20 +1,55 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
-
import * as packages_core_dist_routes_types_C4Wr8tbE from 'packages/core/dist/routes.types-C4Wr8tbE';
|
|
3
2
|
import { ReactNode } from 'react';
|
|
4
3
|
export * from '@hyeonqyu/typed-router-core';
|
|
5
4
|
|
|
5
|
+
type Paths<TObject, TSplitter extends string, TPrev extends string = '', TMaxDepth extends number = 10, TDepth extends unknown[] = []> = TDepth['length'] extends TMaxDepth ? never : TSplitter | {
|
|
6
|
+
[K in keyof TObject & string]: TObject[K] extends object ? `${TSplitter}${TPrev extends '' ? K : `${TPrev}${TSplitter}${K}`}` | Paths<TObject[K], TSplitter, TPrev extends '' ? K : `${TPrev}${TSplitter}${K}`, TMaxDepth, [...TDepth, 1]> : `${TSplitter}${TPrev extends '' ? K : `${TPrev}${TSplitter}${K}`}`;
|
|
7
|
+
}[keyof TObject & string];
|
|
8
|
+
|
|
9
|
+
type BaseMetadata = NonNullable<unknown>;
|
|
10
|
+
type AnyZodSchema = {
|
|
11
|
+
_input: any;
|
|
12
|
+
_output: any;
|
|
13
|
+
parse: (data: any) => any;
|
|
14
|
+
};
|
|
15
|
+
type RouteNode<TMetadata extends BaseMetadata, TContext> = {
|
|
16
|
+
_metadata: RouteNodeMetadata<TMetadata, TContext>;
|
|
17
|
+
};
|
|
18
|
+
type RouteNodeMetadata<TMetadata extends BaseMetadata, TContext> = {
|
|
19
|
+
title?: string;
|
|
20
|
+
label?: string;
|
|
21
|
+
description?: string;
|
|
22
|
+
href?: (context: TContext) => string;
|
|
23
|
+
accessible?: (context: TContext) => boolean;
|
|
24
|
+
searchParamsSchema?: AnyZodSchema;
|
|
25
|
+
} & TMetadata;
|
|
26
|
+
type PartialRouteTree<TMetadata extends BaseMetadata, TContext> = {
|
|
27
|
+
[key: string]: RouteNode<TMetadata, TContext> | PartialRouteTree<TMetadata, TContext>;
|
|
28
|
+
};
|
|
29
|
+
type ExtractChildRoutes<TMetadata extends BaseMetadata, TContext, TSubRouteTree, TRouteTree> = {
|
|
30
|
+
[K in '_metadata' | keyof TSubRouteTree]: K extends '_metadata' ? RouteNodeMetadata<TMetadata, TContext> : K extends keyof TSubRouteTree ? TSubRouteTree[K] extends RouteNode<TMetadata, TContext> ? TSubRouteTree[K] : TSubRouteTree[K] extends Record<string, unknown> ? ExtractChildRoutes<TMetadata, TContext, TSubRouteTree[K], TRouteTree> : never : never;
|
|
31
|
+
};
|
|
32
|
+
type RouteTree<TMetadata extends BaseMetadata, TContext, TSubRouteTree extends PartialRouteTree<TMetadata, TContext>, TRouteTree = TSubRouteTree> = {
|
|
33
|
+
[K in keyof TSubRouteTree]: TSubRouteTree[K] extends RouteNode<TMetadata, TContext> ? TSubRouteTree[K] : TSubRouteTree[K] extends Record<string, unknown> ? ExtractChildRoutes<TMetadata, TContext, TSubRouteTree[K], TRouteTree> : never;
|
|
34
|
+
};
|
|
35
|
+
type RouteTreeWithoutMetadata<T> = {
|
|
36
|
+
[K in keyof T as K extends '_metadata' ? never : K]: T[K] extends object ? RouteTreeWithoutMetadata<T[K]> : T[K];
|
|
37
|
+
};
|
|
38
|
+
type RoutePathname<TMetadata extends BaseMetadata, TContext, TRouteTree extends PartialRouteTree<TMetadata, TContext>> = Paths<RouteTreeWithoutMetadata<TRouteTree>, '/', ''>;
|
|
39
|
+
type ResolvedRouteTree<TMetadata extends BaseMetadata, TContext, TRouteTree extends PartialRouteTree<TMetadata, TContext>> = TRouteTree & RouteTree<TMetadata, TContext, TRouteTree>;
|
|
40
|
+
|
|
6
41
|
declare const createAppRoutes: <TMetadata extends {
|
|
7
42
|
component: ReactNode;
|
|
8
|
-
}, TContext>() => <TRouteTree extends
|
|
43
|
+
}, TContext>() => <TRouteTree extends PartialRouteTree<TMetadata, TContext>>(appRoutes: TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>) => {
|
|
9
44
|
AppRoutesProvider: ({ children }: {
|
|
10
45
|
children: ReactNode;
|
|
11
46
|
}) => react_jsx_runtime.JSX.Element;
|
|
12
|
-
useAppRoutes: () =>
|
|
13
|
-
useCurrentRouteNode: <TPath extends
|
|
47
|
+
useAppRoutes: () => ResolvedRouteTree<TMetadata, TContext, TRouteTree>;
|
|
48
|
+
useCurrentRouteNode: <TPath extends RoutePathname<TMetadata, TContext, TRouteTree>>(pathname: TPath) => TPath extends "/" ? TRouteTree : TPath extends `/${infer Rest}` ? Rest extends `${infer K}/${infer R}` ? K extends keyof TRouteTree ? `/${R}` extends infer T ? T extends `/${R}` ? T extends "/" ? TRouteTree[K] : T extends `/${infer Rest}` ? Rest extends `${infer K}/${infer R}` ? K extends keyof TRouteTree[K] ? `/${R}` extends infer T_1 ? T_1 extends `/${R}` ? T_1 extends "/" ? TRouteTree[K][K] : T_1 extends `/${infer Rest}` ? Rest extends `${infer K}/${infer R}` ? K extends keyof TRouteTree[K][K] ? `/${R}` extends infer T_2 ? T_2 extends `/${R}` ? T_2 extends "/" ? TRouteTree[K][K][K] : T_2 extends `/${infer Rest}` ? Rest extends `${infer K}/${infer R}` ? K extends keyof TRouteTree[K][K][K] ? `/${R}` extends infer T_3 ? T_3 extends `/${R}` ? T_3 extends "/" ? TRouteTree[K][K][K][K] : T_3 extends `/${infer Rest}` ? Rest extends `${infer K}/${infer R}` ? K extends keyof TRouteTree[K][K][K][K] ? `/${R}` extends infer T_4 ? T_4 extends `/${R}` ? T_4 extends "/" ? TRouteTree[K][K][K][K][K] : T_4 extends `/${infer Rest}` ? Rest extends `${infer K}/${infer R}` ? K extends keyof TRouteTree[K][K][K][K][K] ? `/${R}` extends infer T_5 ? T_5 extends `/${R}` ? T_5 extends "/" ? TRouteTree[K][K][K][K][K][K] : T_5 extends `/${infer Rest}` ? Rest extends `${infer K}/${infer R}` ? K extends keyof TRouteTree[K][K][K][K][K][K] ? `/${R}` extends infer T_6 ? T_6 extends `/${R}` ? T_6 extends "/" ? TRouteTree[K][K][K][K][K][K][K] : T_6 extends `/${infer Rest}` ? Rest extends `${infer K}/${infer R}` ? K extends keyof TRouteTree[K][K][K][K][K][K][K] ? `/${R}` extends infer T_7 ? T_7 extends `/${R}` ? T_7 extends "/" ? TRouteTree[K][K][K][K][K][K][K][K] : T_7 extends `/${infer Rest}` ? Rest extends `${infer K}/${infer R}` ? K extends keyof TRouteTree[K][K][K][K][K][K][K][K] ? `/${R}` extends infer T_8 ? T_8 extends `/${R}` ? T_8 extends "/" ? TRouteTree[K][K][K][K][K][K][K][K][K] : T_8 extends `/${infer Rest}` ? Rest extends `${infer K}/${infer R}` ? K extends keyof TRouteTree[K][K][K][K][K][K][K][K][K] ? never : never : Rest extends keyof TRouteTree[K][K][K][K][K][K][K][K][K] ? TRouteTree[K][K][K][K][K][K][K][K][K][Rest] : never : never : never : never : never : Rest extends keyof TRouteTree[K][K][K][K][K][K][K][K] ? TRouteTree[K][K][K][K][K][K][K][K][Rest] : never : never : never : never : never : Rest extends keyof TRouteTree[K][K][K][K][K][K][K] ? TRouteTree[K][K][K][K][K][K][K][Rest] : never : never : never : never : never : Rest extends keyof TRouteTree[K][K][K][K][K][K] ? TRouteTree[K][K][K][K][K][K][Rest] : never : never : never : never : never : Rest extends keyof TRouteTree[K][K][K][K][K] ? TRouteTree[K][K][K][K][K][Rest] : never : never : never : never : never : Rest extends keyof TRouteTree[K][K][K][K] ? TRouteTree[K][K][K][K][Rest] : never : never : never : never : never : Rest extends keyof TRouteTree[K][K][K] ? TRouteTree[K][K][K][Rest] : never : never : never : never : never : Rest extends keyof TRouteTree[K][K] ? TRouteTree[K][K][Rest] : never : never : never : never : never : Rest extends keyof TRouteTree[K] ? TRouteTree[K][Rest] : never : never : never : never : never : Rest extends keyof TRouteTree ? TRouteTree[Rest] : never : never;
|
|
14
49
|
_types: {
|
|
15
50
|
AppRoutesMetadata: TMetadata;
|
|
16
51
|
AppRoutesContext: TContext;
|
|
17
|
-
AppRoutesPathname:
|
|
52
|
+
AppRoutesPathname: RoutePathname<TMetadata, TContext, TRouteTree>;
|
|
18
53
|
};
|
|
19
54
|
};
|
|
20
55
|
|