@hyeonqyu/typed-router-next 0.2.6 → 0.2.7
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 +14 -17
- package/dist/index.d.ts +14 -17
- package/dist/index.js +24 -46
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +26 -48
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -1,13 +1,10 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import * as _hyeonqyu_typed_router_core from '@hyeonqyu/typed-router-core';
|
|
3
|
+
import { BaseMetadata, PartialRouteTree, RouteTree, RoutePathname } from '@hyeonqyu/typed-router-core';
|
|
4
|
+
export * from '@hyeonqyu/typed-router-core';
|
|
2
5
|
import * as react from 'react';
|
|
3
6
|
import { ComponentProps } from 'react';
|
|
4
7
|
import Link from 'next/link';
|
|
5
|
-
import * as _hyeonqyu_typed_router_core from '@hyeonqyu/typed-router-core';
|
|
6
|
-
import { BaseMetadata, PartialRouteTree, RouteTree } from '@hyeonqyu/typed-router-core';
|
|
7
|
-
export * from '@hyeonqyu/typed-router-core';
|
|
8
|
-
|
|
9
|
-
type QueryValue = string | number | boolean | readonly (string | number | boolean)[];
|
|
10
|
-
type QueryParams = Record<string, QueryValue>;
|
|
11
8
|
|
|
12
9
|
type NextLinkProps = ComponentProps<typeof Link>;
|
|
13
10
|
type TypedLinkProps<TPathname extends string = string> = Omit<NextLinkProps, 'href'> & {
|
|
@@ -19,34 +16,34 @@ type TypedLinkProps<TPathname extends string = string> = Omit<NextLinkProps, 'hr
|
|
|
19
16
|
};
|
|
20
17
|
|
|
21
18
|
declare const createAppRoutes: <TMetadata extends BaseMetadata, TContext>() => <TRouteTree extends PartialRouteTree<TMetadata, TContext>>(appRoutes: TRouteTree & RouteTree<TMetadata, TContext, TRouteTree>) => {
|
|
22
|
-
TypedLink: react.ForwardRefExoticComponent<Omit<TypedLinkProps<
|
|
19
|
+
TypedLink: react.ForwardRefExoticComponent<Omit<TypedLinkProps<RoutePathname<TMetadata, TContext, TRouteTree>>, "ref"> & react.RefAttributes<HTMLAnchorElement>>;
|
|
23
20
|
useTypedRouter: () => {
|
|
24
21
|
back: () => void;
|
|
25
22
|
forward: () => void;
|
|
26
23
|
refresh: () => void;
|
|
27
|
-
push: (href:
|
|
24
|
+
push: (href: RoutePathname<TMetadata, TContext, TRouteTree>, options?: {
|
|
28
25
|
scroll?: boolean;
|
|
29
|
-
query?: QueryParams;
|
|
26
|
+
query?: _hyeonqyu_typed_router_core.QueryParams;
|
|
30
27
|
}) => void;
|
|
31
|
-
replace: (href:
|
|
28
|
+
replace: (href: RoutePathname<TMetadata, TContext, TRouteTree>, options?: {
|
|
32
29
|
scroll?: boolean;
|
|
33
|
-
query?: QueryParams;
|
|
30
|
+
query?: _hyeonqyu_typed_router_core.QueryParams;
|
|
34
31
|
}) => void;
|
|
35
|
-
prefetch: (href:
|
|
36
|
-
query?: QueryParams | undefined;
|
|
32
|
+
prefetch: (href: RoutePathname<TMetadata, TContext, TRouteTree>, options?: {
|
|
33
|
+
query?: _hyeonqyu_typed_router_core.QueryParams | undefined;
|
|
37
34
|
}) => void;
|
|
38
35
|
};
|
|
39
|
-
useTypedPathname: () =>
|
|
36
|
+
useTypedPathname: () => RoutePathname<TMetadata, TContext, TRouteTree>;
|
|
40
37
|
_types: {
|
|
41
38
|
AppRoutesMetadata: TMetadata;
|
|
42
39
|
AppRoutesContext: TContext;
|
|
43
|
-
AppRoutesPathname:
|
|
40
|
+
AppRoutesPathname: RoutePathname<TMetadata, TContext, TRouteTree>;
|
|
44
41
|
};
|
|
45
42
|
AppRoutesProvider: ({ children }: {
|
|
46
43
|
children: react.ReactNode;
|
|
47
44
|
}) => react_jsx_runtime.JSX.Element;
|
|
48
|
-
useAppRoutes: () =>
|
|
49
|
-
useCurrentRouteNode: <TPath extends
|
|
45
|
+
useAppRoutes: () => _hyeonqyu_typed_router_core.ResolvedRouteTree<TMetadata, TContext, TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>>;
|
|
46
|
+
useCurrentRouteNode: <TPath extends RoutePathname<TMetadata, TContext, TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>>>(pathname: TPath) => TPath extends "/" ? TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, 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 & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K] : T extends `/${infer Rest}` ? Rest extends `${infer K}/${infer R}` ? K extends keyof (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K] ? `/${R}` extends infer T_1 ? T_1 extends `/${R}` ? T_1 extends "/" ? (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K] : T_1 extends `/${infer Rest}` ? Rest extends `${infer K}/${infer R}` ? K extends keyof (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K] ? `/${R}` extends infer T_2 ? T_2 extends `/${R}` ? T_2 extends "/" ? (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K] : T_2 extends `/${infer Rest}` ? Rest extends `${infer K}/${infer R}` ? K extends keyof (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K] ? `/${R}` extends infer T_3 ? T_3 extends `/${R}` ? T_3 extends "/" ? (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K][K] : T_3 extends `/${infer Rest}` ? Rest extends `${infer K}/${infer R}` ? K extends keyof (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K][K] ? `/${R}` extends infer T_4 ? T_4 extends `/${R}` ? T_4 extends "/" ? (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K][K][K] : T_4 extends `/${infer Rest}` ? Rest extends `${infer K}/${infer R}` ? K extends keyof (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K][K][K] ? `/${R}` extends infer T_5 ? T_5 extends `/${R}` ? T_5 extends "/" ? (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K][K][K][K] : T_5 extends `/${infer Rest}` ? Rest extends `${infer K}/${infer R}` ? K extends keyof (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K][K][K][K] ? `/${R}` extends infer T_6 ? T_6 extends `/${R}` ? T_6 extends "/" ? (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K][K][K][K][K] : T_6 extends `/${infer Rest}` ? Rest extends `${infer K}/${infer R}` ? K extends keyof (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K][K][K][K][K] ? `/${R}` extends infer T_7 ? T_7 extends `/${R}` ? T_7 extends "/" ? (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K][K][K][K][K][K] : T_7 extends `/${infer Rest}` ? Rest extends `${infer K}/${infer R}` ? K extends keyof (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K][K][K][K][K][K] ? `/${R}` extends infer T_8 ? T_8 extends `/${R}` ? T_8 extends "/" ? (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, 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 & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K][K][K][K][K][K][K] ? never : never : Rest extends keyof (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K][K][K][K][K][K][K] ? (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K][K][K][K][K][K][K][Rest] : never : never : never : never : never : Rest extends keyof (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K][K][K][K][K][K] ? (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K][K][K][K][K][K][Rest] : never : never : never : never : never : Rest extends keyof (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K][K][K][K][K] ? (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K][K][K][K][K][Rest] : never : never : never : never : never : Rest extends keyof (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K][K][K][K] ? (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K][K][K][K][Rest] : never : never : never : never : never : Rest extends keyof (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K][K][K] ? (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K][K][K][Rest] : never : never : never : never : never : Rest extends keyof (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K][K] ? (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K][K][Rest] : never : never : never : never : never : Rest extends keyof (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K] ? (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K][Rest] : never : never : never : never : never : Rest extends keyof (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K] ? (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][Rest] : never : never : never : never : never : Rest extends keyof (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K] ? (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][Rest] : never : never : never : never : never : Rest extends keyof TRouteTree ? (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[Rest] : never : never;
|
|
50
47
|
};
|
|
51
48
|
|
|
52
49
|
export { type TypedLinkProps, createAppRoutes };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,13 +1,10 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import * as _hyeonqyu_typed_router_core from '@hyeonqyu/typed-router-core';
|
|
3
|
+
import { BaseMetadata, PartialRouteTree, RouteTree, RoutePathname } from '@hyeonqyu/typed-router-core';
|
|
4
|
+
export * from '@hyeonqyu/typed-router-core';
|
|
2
5
|
import * as react from 'react';
|
|
3
6
|
import { ComponentProps } from 'react';
|
|
4
7
|
import Link from 'next/link';
|
|
5
|
-
import * as _hyeonqyu_typed_router_core from '@hyeonqyu/typed-router-core';
|
|
6
|
-
import { BaseMetadata, PartialRouteTree, RouteTree } from '@hyeonqyu/typed-router-core';
|
|
7
|
-
export * from '@hyeonqyu/typed-router-core';
|
|
8
|
-
|
|
9
|
-
type QueryValue = string | number | boolean | readonly (string | number | boolean)[];
|
|
10
|
-
type QueryParams = Record<string, QueryValue>;
|
|
11
8
|
|
|
12
9
|
type NextLinkProps = ComponentProps<typeof Link>;
|
|
13
10
|
type TypedLinkProps<TPathname extends string = string> = Omit<NextLinkProps, 'href'> & {
|
|
@@ -19,34 +16,34 @@ type TypedLinkProps<TPathname extends string = string> = Omit<NextLinkProps, 'hr
|
|
|
19
16
|
};
|
|
20
17
|
|
|
21
18
|
declare const createAppRoutes: <TMetadata extends BaseMetadata, TContext>() => <TRouteTree extends PartialRouteTree<TMetadata, TContext>>(appRoutes: TRouteTree & RouteTree<TMetadata, TContext, TRouteTree>) => {
|
|
22
|
-
TypedLink: react.ForwardRefExoticComponent<Omit<TypedLinkProps<
|
|
19
|
+
TypedLink: react.ForwardRefExoticComponent<Omit<TypedLinkProps<RoutePathname<TMetadata, TContext, TRouteTree>>, "ref"> & react.RefAttributes<HTMLAnchorElement>>;
|
|
23
20
|
useTypedRouter: () => {
|
|
24
21
|
back: () => void;
|
|
25
22
|
forward: () => void;
|
|
26
23
|
refresh: () => void;
|
|
27
|
-
push: (href:
|
|
24
|
+
push: (href: RoutePathname<TMetadata, TContext, TRouteTree>, options?: {
|
|
28
25
|
scroll?: boolean;
|
|
29
|
-
query?: QueryParams;
|
|
26
|
+
query?: _hyeonqyu_typed_router_core.QueryParams;
|
|
30
27
|
}) => void;
|
|
31
|
-
replace: (href:
|
|
28
|
+
replace: (href: RoutePathname<TMetadata, TContext, TRouteTree>, options?: {
|
|
32
29
|
scroll?: boolean;
|
|
33
|
-
query?: QueryParams;
|
|
30
|
+
query?: _hyeonqyu_typed_router_core.QueryParams;
|
|
34
31
|
}) => void;
|
|
35
|
-
prefetch: (href:
|
|
36
|
-
query?: QueryParams | undefined;
|
|
32
|
+
prefetch: (href: RoutePathname<TMetadata, TContext, TRouteTree>, options?: {
|
|
33
|
+
query?: _hyeonqyu_typed_router_core.QueryParams | undefined;
|
|
37
34
|
}) => void;
|
|
38
35
|
};
|
|
39
|
-
useTypedPathname: () =>
|
|
36
|
+
useTypedPathname: () => RoutePathname<TMetadata, TContext, TRouteTree>;
|
|
40
37
|
_types: {
|
|
41
38
|
AppRoutesMetadata: TMetadata;
|
|
42
39
|
AppRoutesContext: TContext;
|
|
43
|
-
AppRoutesPathname:
|
|
40
|
+
AppRoutesPathname: RoutePathname<TMetadata, TContext, TRouteTree>;
|
|
44
41
|
};
|
|
45
42
|
AppRoutesProvider: ({ children }: {
|
|
46
43
|
children: react.ReactNode;
|
|
47
44
|
}) => react_jsx_runtime.JSX.Element;
|
|
48
|
-
useAppRoutes: () =>
|
|
49
|
-
useCurrentRouteNode: <TPath extends
|
|
45
|
+
useAppRoutes: () => _hyeonqyu_typed_router_core.ResolvedRouteTree<TMetadata, TContext, TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>>;
|
|
46
|
+
useCurrentRouteNode: <TPath extends RoutePathname<TMetadata, TContext, TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>>>(pathname: TPath) => TPath extends "/" ? TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, 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 & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K] : T extends `/${infer Rest}` ? Rest extends `${infer K}/${infer R}` ? K extends keyof (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K] ? `/${R}` extends infer T_1 ? T_1 extends `/${R}` ? T_1 extends "/" ? (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K] : T_1 extends `/${infer Rest}` ? Rest extends `${infer K}/${infer R}` ? K extends keyof (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K] ? `/${R}` extends infer T_2 ? T_2 extends `/${R}` ? T_2 extends "/" ? (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K] : T_2 extends `/${infer Rest}` ? Rest extends `${infer K}/${infer R}` ? K extends keyof (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K] ? `/${R}` extends infer T_3 ? T_3 extends `/${R}` ? T_3 extends "/" ? (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K][K] : T_3 extends `/${infer Rest}` ? Rest extends `${infer K}/${infer R}` ? K extends keyof (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K][K] ? `/${R}` extends infer T_4 ? T_4 extends `/${R}` ? T_4 extends "/" ? (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K][K][K] : T_4 extends `/${infer Rest}` ? Rest extends `${infer K}/${infer R}` ? K extends keyof (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K][K][K] ? `/${R}` extends infer T_5 ? T_5 extends `/${R}` ? T_5 extends "/" ? (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K][K][K][K] : T_5 extends `/${infer Rest}` ? Rest extends `${infer K}/${infer R}` ? K extends keyof (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K][K][K][K] ? `/${R}` extends infer T_6 ? T_6 extends `/${R}` ? T_6 extends "/" ? (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K][K][K][K][K] : T_6 extends `/${infer Rest}` ? Rest extends `${infer K}/${infer R}` ? K extends keyof (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K][K][K][K][K] ? `/${R}` extends infer T_7 ? T_7 extends `/${R}` ? T_7 extends "/" ? (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K][K][K][K][K][K] : T_7 extends `/${infer Rest}` ? Rest extends `${infer K}/${infer R}` ? K extends keyof (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K][K][K][K][K][K] ? `/${R}` extends infer T_8 ? T_8 extends `/${R}` ? T_8 extends "/" ? (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, 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 & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K][K][K][K][K][K][K] ? never : never : Rest extends keyof (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K][K][K][K][K][K][K] ? (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K][K][K][K][K][K][K][Rest] : never : never : never : never : never : Rest extends keyof (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K][K][K][K][K][K] ? (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K][K][K][K][K][K][Rest] : never : never : never : never : never : Rest extends keyof (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K][K][K][K][K] ? (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K][K][K][K][K][Rest] : never : never : never : never : never : Rest extends keyof (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K][K][K][K] ? (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K][K][K][K][Rest] : never : never : never : never : never : Rest extends keyof (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K][K][K] ? (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K][K][K][Rest] : never : never : never : never : never : Rest extends keyof (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K][K] ? (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K][K][Rest] : never : never : never : never : never : Rest extends keyof (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K] ? (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][K][Rest] : never : never : never : never : never : Rest extends keyof (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K] ? (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][K][Rest] : never : never : never : never : never : Rest extends keyof (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K] ? (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[K][Rest] : never : never : never : never : never : Rest extends keyof TRouteTree ? (TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>)[Rest] : never : never;
|
|
50
47
|
};
|
|
51
48
|
|
|
52
49
|
export { type TypedLinkProps, createAppRoutes };
|
package/dist/index.js
CHANGED
|
@@ -10,70 +10,44 @@ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
|
10
10
|
|
|
11
11
|
var Link__default = /*#__PURE__*/_interopDefault(Link);
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
var
|
|
13
|
+
var __defProp = Object.defineProperty;
|
|
14
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
15
|
+
var createTypedPathname = /* @__PURE__ */ __name(() => {
|
|
15
16
|
return () => {
|
|
16
17
|
const pathname = navigation.usePathname();
|
|
17
18
|
return pathname;
|
|
18
19
|
};
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
Object.entries(query).forEach(([key, value]) => {
|
|
25
|
-
if (value === void 0 || value === null) {
|
|
26
|
-
return;
|
|
27
|
-
}
|
|
28
|
-
const encodedKey = encodeURIComponent(key);
|
|
29
|
-
if (Array.isArray(value)) {
|
|
30
|
-
value.forEach((item) => {
|
|
31
|
-
if (item !== void 0 && item !== null) {
|
|
32
|
-
params.push(`${encodedKey}=${encodeURIComponent(String(item))}`);
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
} else {
|
|
36
|
-
params.push(`${encodedKey}=${encodeURIComponent(String(value))}`);
|
|
37
|
-
}
|
|
38
|
-
});
|
|
39
|
-
if (params.length === 0) {
|
|
40
|
-
return "";
|
|
41
|
-
}
|
|
42
|
-
const queryString = params.join("&");
|
|
43
|
-
return options.includeQuestionMark ? `?${queryString}` : queryString;
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
// src/router.hooks.ts
|
|
47
|
-
var createTypedRouter = () => {
|
|
48
|
-
const getHrefWithQuery = (href, query) => {
|
|
49
|
-
return href + toQueryString(query || {}, { includeQuestionMark: true });
|
|
50
|
-
};
|
|
20
|
+
}, "createTypedPathname");
|
|
21
|
+
var createTypedRouter = /* @__PURE__ */ __name(() => {
|
|
22
|
+
const getHrefWithQuery = /* @__PURE__ */ __name((href, query) => {
|
|
23
|
+
return `${href}${typedRouterCore.toQueryString(query ?? {}, { includeQuestionMark: true })}`;
|
|
24
|
+
}, "getHrefWithQuery");
|
|
51
25
|
return () => {
|
|
52
26
|
const router = navigation.useRouter();
|
|
53
27
|
return {
|
|
54
28
|
back: router.back,
|
|
55
29
|
forward: router.forward,
|
|
56
30
|
refresh: router.refresh,
|
|
57
|
-
push: (href, options) => {
|
|
31
|
+
push: /* @__PURE__ */ __name((href, options) => {
|
|
58
32
|
return router.push(getHrefWithQuery(href, options?.query), options);
|
|
59
|
-
},
|
|
60
|
-
replace: (href, options) => {
|
|
33
|
+
}, "push"),
|
|
34
|
+
replace: /* @__PURE__ */ __name((href, options) => {
|
|
61
35
|
return router.replace(getHrefWithQuery(href, options?.query), options);
|
|
62
|
-
},
|
|
63
|
-
prefetch: (href, options) => {
|
|
36
|
+
}, "replace"),
|
|
37
|
+
prefetch: /* @__PURE__ */ __name((href, options) => {
|
|
64
38
|
return router.prefetch(getHrefWithQuery(href, options?.query));
|
|
65
|
-
}
|
|
39
|
+
}, "prefetch")
|
|
66
40
|
};
|
|
67
41
|
};
|
|
68
|
-
};
|
|
69
|
-
var createTypedLink = () => {
|
|
42
|
+
}, "createTypedRouter");
|
|
43
|
+
var createTypedLink = /* @__PURE__ */ __name(() => {
|
|
70
44
|
const TypedLink = react.forwardRef((props, ref) => {
|
|
71
45
|
return /* @__PURE__ */ jsxRuntime.jsx(Link__default.default, { ref, ...props });
|
|
72
46
|
});
|
|
73
47
|
TypedLink.displayName = "TypedLink";
|
|
74
48
|
return TypedLink;
|
|
75
|
-
};
|
|
76
|
-
var createAppRoutes = () => {
|
|
49
|
+
}, "createTypedLink");
|
|
50
|
+
var createAppRoutes = /* @__PURE__ */ __name(() => {
|
|
77
51
|
return (appRoutes) => {
|
|
78
52
|
const { _types, ...rest } = typedRouterCore.createAppRoutes()(appRoutes);
|
|
79
53
|
const TypedLink = createTypedLink();
|
|
@@ -84,10 +58,14 @@ var createAppRoutes = () => {
|
|
|
84
58
|
TypedLink,
|
|
85
59
|
useTypedRouter,
|
|
86
60
|
useTypedPathname,
|
|
87
|
-
_types
|
|
61
|
+
_types: {
|
|
62
|
+
AppRoutesMetadata: {},
|
|
63
|
+
AppRoutesContext: {},
|
|
64
|
+
AppRoutesPathname: {}
|
|
65
|
+
}
|
|
88
66
|
};
|
|
89
67
|
};
|
|
90
|
-
};
|
|
68
|
+
}, "createAppRoutes");
|
|
91
69
|
|
|
92
70
|
exports.createAppRoutes = createAppRoutes;
|
|
93
71
|
Object.keys(typedRouterCore).forEach(function (k) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/pathname.hooks.ts","
|
|
1
|
+
{"version":3,"sources":["../src/pathname.hooks.ts","../src/router.hooks.ts","../src/TypedLink.tsx","../src/index.tsx"],"names":["usePathname","toQueryString","useRouter","forwardRef","jsx","Link","createAppRoutesCore"],"mappings":";;;;;;;;;;;;;;AAEO,IAAM,sCAAsB,MAAA,CAAA,MAAyC;AAC1E,EAAA,OAAO,MAAM;AACX,IAAA,MAAM,WAAWA,sBAAA,EAAY;AAC7B,IAAA,OAAO,QAAA;AAAA,EACT,CAAA;AACF,CAAA,EALmC,qBAAA,CAAA;ACQ5B,IAAM,oCAAoB,MAAA,CAAA,MAAyC;AACxE,EAAA,MAAM,gBAAA,mBAAmB,MAAA,CAAA,CAAC,IAAA,EAAiB,KAAA,KAAwB;AACjE,IAAA,OAAO,CAAA,EAAG,IAAI,CAAA,EAAGC,6BAAA,CAAc,KAAA,IAAS,EAAC,EAAG,EAAE,mBAAA,EAAqB,IAAA,EAAM,CAAC,CAAA,CAAA;AAAA,EAC5E,CAAA,EAFyB,kBAAA,CAAA;AAIzB,EAAA,OAAO,MAAM;AACX,IAAA,MAAM,SAASC,oBAAA,EAAU;AAEzB,IAAA,OAAO;AAAA,MACL,MAAM,MAAA,CAAO,IAAA;AAAA,MACb,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,IAAA,kBAAM,MAAA,CAAA,CAAC,IAAA,EAAiB,OAAA,KAA8B;AACpD,QAAA,OAAO,OAAO,IAAA,CAAK,gBAAA,CAAiB,MAAM,OAAA,EAAS,KAAK,GAAG,OAAO,CAAA;AAAA,MACpE,CAAA,EAFM,MAAA,CAAA;AAAA,MAGN,OAAA,kBAAS,MAAA,CAAA,CAAC,IAAA,EAAiB,OAAA,KAA8B;AACvD,QAAA,OAAO,OAAO,OAAA,CAAQ,gBAAA,CAAiB,MAAM,OAAA,EAAS,KAAK,GAAG,OAAO,CAAA;AAAA,MACvE,CAAA,EAFS,SAAA,CAAA;AAAA,MAGT,QAAA,kBAAU,MAAA,CAAA,CAAC,IAAA,EAAiB,OAAA,KAA8B;AACxD,QAAA,OAAO,OAAO,QAAA,CAAS,gBAAA,CAAiB,IAAA,EAAM,OAAA,EAAS,KAAK,CAAC,CAAA;AAAA,MAC/D,CAAA,EAFU,UAAA;AAAA,KAGZ;AAAA,EACF,CAAA;AACF,CAAA,EAvBiC,mBAAA,CAAA;ACM1B,IAAM,kCAAkB,MAAA,CAAA,MAAyC;AACtE,EAAA,MAAM,SAAA,GAAYC,gBAAA,CAAiE,CAAC,KAAA,EAAO,GAAA,KAAQ;AACjG,IAAA,uBAAOC,cAAA,CAACC,qBAAA,EAAA,EAAK,GAAA,EAAW,GAAI,KAAA,EAAyB,CAAA;AAAA,EACvD,CAAC,CAAA;AAED,EAAA,SAAA,CAAU,WAAA,GAAc,WAAA;AAExB,EAAA,OAAO,SAAA;AACT,CAAA,EAR+B,iBAAA,CAAA;ACLxB,IAAM,kCAAkB,MAAA,CAAA,MAAgD;AAC7E,EAAA,OAAO,CAA2D,SAAA,KAAuE;AACvI,IAAA,MAAM,EAAE,MAAA,EAAQ,GAAG,MAAK,GAAIC,+BAAA,GAA2C,SAAS,CAAA;AAIhF,IAAA,MAAM,YAAY,eAAA,EAA0B;AAC5C,IAAA,MAAM,iBAAiB,iBAAA,EAA4B;AACnD,IAAA,MAAM,mBAAmB,mBAAA,EAA8B;AAEvD,IAAA,OAAO;AAAA,MACL,GAAG,IAAA;AAAA,MACH,SAAA;AAAA,MACA,cAAA;AAAA,MACA,gBAAA;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,mBAAmB,EAAC;AAAA,QACpB,kBAAkB,EAAC;AAAA,QACnB,mBAAmB;AAAC;AACtB,KACF;AAAA,EACF,CAAA;AACF,CAAA,EAtB+B,iBAAA","file":"index.js","sourcesContent":["import { usePathname } from 'next/navigation';\n\nexport const createTypedPathname = <TPathname extends string = string>() => {\n return () => {\n const pathname = usePathname();\n return pathname as TPathname;\n };\n};\n","import { QueryParams, toQueryString } from '@hyeonqyu/typed-router-core';\nimport { useRouter } from 'next/navigation';\n\ntype NavigateOptions = {\n scroll?: boolean;\n query?: QueryParams;\n};\n\ntype PrefetchOptions = Pick<NavigateOptions, 'query'>;\n\nexport const createTypedRouter = <TPathname extends string = string>() => {\n const getHrefWithQuery = (href: TPathname, query?: QueryParams) => {\n return `${href}${toQueryString(query ?? {}, { includeQuestionMark: true })}`;\n };\n\n return () => {\n const router = useRouter();\n\n return {\n back: router.back,\n forward: router.forward,\n refresh: router.refresh,\n push: (href: TPathname, options?: NavigateOptions) => {\n return router.push(getHrefWithQuery(href, options?.query), options);\n },\n replace: (href: TPathname, options?: NavigateOptions) => {\n return router.replace(getHrefWithQuery(href, options?.query), options);\n },\n prefetch: (href: TPathname, options?: PrefetchOptions) => {\n return router.prefetch(getHrefWithQuery(href, options?.query));\n },\n };\n };\n};\n","import Link from 'next/link';\nimport type { ComponentProps, ComponentRef } from 'react';\nimport { forwardRef } from 'react';\n\ntype NextLinkProps = ComponentProps<typeof Link>;\n\nexport type TypedLinkProps<TPathname extends string = string> = Omit<NextLinkProps, 'href'> & {\n href:\n | TPathname\n | {\n pathname: TPathname;\n query?: Record<string, string | number | boolean | readonly (string | number | boolean)[]>;\n hash?: string;\n };\n};\n\nexport const createTypedLink = <TPathname extends string = string>() => {\n const TypedLink = forwardRef<ComponentRef<typeof Link>, TypedLinkProps<TPathname>>((props, ref) => {\n return <Link ref={ref} {...(props as NextLinkProps)} />;\n });\n\n TypedLink.displayName = 'TypedLink';\n\n return TypedLink;\n};\n","import {\n createAppRoutes as createAppRoutesCore,\n type BaseMetadata,\n type PartialRouteTree,\n type RoutePathname,\n type RouteTree,\n} from '@hyeonqyu/typed-router-core';\nimport { createTypedPathname } from 'packages/next/src/pathname.hooks';\nimport { createTypedRouter } from 'packages/next/src/router.hooks';\nimport { createTypedLink } from './TypedLink';\n\nexport const createAppRoutes = <TMetadata extends BaseMetadata, TContext>() => {\n return <TRouteTree extends PartialRouteTree<TMetadata, TContext>>(appRoutes: TRouteTree & RouteTree<TMetadata, TContext, TRouteTree>) => {\n const { _types, ...rest } = createAppRoutesCore<TMetadata, TContext>()(appRoutes);\n\n type Pathname = RoutePathname<TMetadata, TContext, TRouteTree>;\n\n const TypedLink = createTypedLink<Pathname>();\n const useTypedRouter = createTypedRouter<Pathname>();\n const useTypedPathname = createTypedPathname<Pathname>();\n\n return {\n ...rest,\n TypedLink,\n useTypedRouter,\n useTypedPathname,\n _types: {\n AppRoutesMetadata: {} as TMetadata,\n AppRoutesContext: {} as TContext,\n AppRoutesPathname: {} as Pathname,\n },\n };\n };\n};\n\nexport * from '@hyeonqyu/typed-router-core';\nexport type { TypedLinkProps } from './TypedLink';\n"]}
|
package/dist/index.mjs
CHANGED
|
@@ -1,74 +1,48 @@
|
|
|
1
|
-
import { createAppRoutes as createAppRoutes$1 } from '@hyeonqyu/typed-router-core';
|
|
1
|
+
import { createAppRoutes as createAppRoutes$1, toQueryString } from '@hyeonqyu/typed-router-core';
|
|
2
2
|
export * from '@hyeonqyu/typed-router-core';
|
|
3
|
-
import {
|
|
3
|
+
import { useRouter, usePathname } from 'next/navigation';
|
|
4
4
|
import Link from 'next/link';
|
|
5
5
|
import { forwardRef } from 'react';
|
|
6
6
|
import { jsx } from 'react/jsx-runtime';
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
var
|
|
8
|
+
var __defProp = Object.defineProperty;
|
|
9
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
10
|
+
var createTypedPathname = /* @__PURE__ */ __name(() => {
|
|
10
11
|
return () => {
|
|
11
12
|
const pathname = usePathname();
|
|
12
13
|
return pathname;
|
|
13
14
|
};
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
Object.entries(query).forEach(([key, value]) => {
|
|
20
|
-
if (value === void 0 || value === null) {
|
|
21
|
-
return;
|
|
22
|
-
}
|
|
23
|
-
const encodedKey = encodeURIComponent(key);
|
|
24
|
-
if (Array.isArray(value)) {
|
|
25
|
-
value.forEach((item) => {
|
|
26
|
-
if (item !== void 0 && item !== null) {
|
|
27
|
-
params.push(`${encodedKey}=${encodeURIComponent(String(item))}`);
|
|
28
|
-
}
|
|
29
|
-
});
|
|
30
|
-
} else {
|
|
31
|
-
params.push(`${encodedKey}=${encodeURIComponent(String(value))}`);
|
|
32
|
-
}
|
|
33
|
-
});
|
|
34
|
-
if (params.length === 0) {
|
|
35
|
-
return "";
|
|
36
|
-
}
|
|
37
|
-
const queryString = params.join("&");
|
|
38
|
-
return options.includeQuestionMark ? `?${queryString}` : queryString;
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
// src/router.hooks.ts
|
|
42
|
-
var createTypedRouter = () => {
|
|
43
|
-
const getHrefWithQuery = (href, query) => {
|
|
44
|
-
return href + toQueryString(query || {}, { includeQuestionMark: true });
|
|
45
|
-
};
|
|
15
|
+
}, "createTypedPathname");
|
|
16
|
+
var createTypedRouter = /* @__PURE__ */ __name(() => {
|
|
17
|
+
const getHrefWithQuery = /* @__PURE__ */ __name((href, query) => {
|
|
18
|
+
return `${href}${toQueryString(query ?? {}, { includeQuestionMark: true })}`;
|
|
19
|
+
}, "getHrefWithQuery");
|
|
46
20
|
return () => {
|
|
47
21
|
const router = useRouter();
|
|
48
22
|
return {
|
|
49
23
|
back: router.back,
|
|
50
24
|
forward: router.forward,
|
|
51
25
|
refresh: router.refresh,
|
|
52
|
-
push: (href, options) => {
|
|
26
|
+
push: /* @__PURE__ */ __name((href, options) => {
|
|
53
27
|
return router.push(getHrefWithQuery(href, options?.query), options);
|
|
54
|
-
},
|
|
55
|
-
replace: (href, options) => {
|
|
28
|
+
}, "push"),
|
|
29
|
+
replace: /* @__PURE__ */ __name((href, options) => {
|
|
56
30
|
return router.replace(getHrefWithQuery(href, options?.query), options);
|
|
57
|
-
},
|
|
58
|
-
prefetch: (href, options) => {
|
|
31
|
+
}, "replace"),
|
|
32
|
+
prefetch: /* @__PURE__ */ __name((href, options) => {
|
|
59
33
|
return router.prefetch(getHrefWithQuery(href, options?.query));
|
|
60
|
-
}
|
|
34
|
+
}, "prefetch")
|
|
61
35
|
};
|
|
62
36
|
};
|
|
63
|
-
};
|
|
64
|
-
var createTypedLink = () => {
|
|
37
|
+
}, "createTypedRouter");
|
|
38
|
+
var createTypedLink = /* @__PURE__ */ __name(() => {
|
|
65
39
|
const TypedLink = forwardRef((props, ref) => {
|
|
66
40
|
return /* @__PURE__ */ jsx(Link, { ref, ...props });
|
|
67
41
|
});
|
|
68
42
|
TypedLink.displayName = "TypedLink";
|
|
69
43
|
return TypedLink;
|
|
70
|
-
};
|
|
71
|
-
var createAppRoutes = () => {
|
|
44
|
+
}, "createTypedLink");
|
|
45
|
+
var createAppRoutes = /* @__PURE__ */ __name(() => {
|
|
72
46
|
return (appRoutes) => {
|
|
73
47
|
const { _types, ...rest } = createAppRoutes$1()(appRoutes);
|
|
74
48
|
const TypedLink = createTypedLink();
|
|
@@ -79,10 +53,14 @@ var createAppRoutes = () => {
|
|
|
79
53
|
TypedLink,
|
|
80
54
|
useTypedRouter,
|
|
81
55
|
useTypedPathname,
|
|
82
|
-
_types
|
|
56
|
+
_types: {
|
|
57
|
+
AppRoutesMetadata: {},
|
|
58
|
+
AppRoutesContext: {},
|
|
59
|
+
AppRoutesPathname: {}
|
|
60
|
+
}
|
|
83
61
|
};
|
|
84
62
|
};
|
|
85
|
-
};
|
|
63
|
+
}, "createAppRoutes");
|
|
86
64
|
|
|
87
65
|
export { createAppRoutes };
|
|
88
66
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/pathname.hooks.ts","
|
|
1
|
+
{"version":3,"sources":["../src/pathname.hooks.ts","../src/router.hooks.ts","../src/TypedLink.tsx","../src/index.tsx"],"names":["createAppRoutesCore"],"mappings":";;;;;;;;;AAEO,IAAM,sCAAsB,MAAA,CAAA,MAAyC;AAC1E,EAAA,OAAO,MAAM;AACX,IAAA,MAAM,WAAW,WAAA,EAAY;AAC7B,IAAA,OAAO,QAAA;AAAA,EACT,CAAA;AACF,CAAA,EALmC,qBAAA,CAAA;ACQ5B,IAAM,oCAAoB,MAAA,CAAA,MAAyC;AACxE,EAAA,MAAM,gBAAA,mBAAmB,MAAA,CAAA,CAAC,IAAA,EAAiB,KAAA,KAAwB;AACjE,IAAA,OAAO,CAAA,EAAG,IAAI,CAAA,EAAG,aAAA,CAAc,KAAA,IAAS,EAAC,EAAG,EAAE,mBAAA,EAAqB,IAAA,EAAM,CAAC,CAAA,CAAA;AAAA,EAC5E,CAAA,EAFyB,kBAAA,CAAA;AAIzB,EAAA,OAAO,MAAM;AACX,IAAA,MAAM,SAAS,SAAA,EAAU;AAEzB,IAAA,OAAO;AAAA,MACL,MAAM,MAAA,CAAO,IAAA;AAAA,MACb,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,IAAA,kBAAM,MAAA,CAAA,CAAC,IAAA,EAAiB,OAAA,KAA8B;AACpD,QAAA,OAAO,OAAO,IAAA,CAAK,gBAAA,CAAiB,MAAM,OAAA,EAAS,KAAK,GAAG,OAAO,CAAA;AAAA,MACpE,CAAA,EAFM,MAAA,CAAA;AAAA,MAGN,OAAA,kBAAS,MAAA,CAAA,CAAC,IAAA,EAAiB,OAAA,KAA8B;AACvD,QAAA,OAAO,OAAO,OAAA,CAAQ,gBAAA,CAAiB,MAAM,OAAA,EAAS,KAAK,GAAG,OAAO,CAAA;AAAA,MACvE,CAAA,EAFS,SAAA,CAAA;AAAA,MAGT,QAAA,kBAAU,MAAA,CAAA,CAAC,IAAA,EAAiB,OAAA,KAA8B;AACxD,QAAA,OAAO,OAAO,QAAA,CAAS,gBAAA,CAAiB,IAAA,EAAM,OAAA,EAAS,KAAK,CAAC,CAAA;AAAA,MAC/D,CAAA,EAFU,UAAA;AAAA,KAGZ;AAAA,EACF,CAAA;AACF,CAAA,EAvBiC,mBAAA,CAAA;ACM1B,IAAM,kCAAkB,MAAA,CAAA,MAAyC;AACtE,EAAA,MAAM,SAAA,GAAY,UAAA,CAAiE,CAAC,KAAA,EAAO,GAAA,KAAQ;AACjG,IAAA,uBAAO,GAAA,CAAC,IAAA,EAAA,EAAK,GAAA,EAAW,GAAI,KAAA,EAAyB,CAAA;AAAA,EACvD,CAAC,CAAA;AAED,EAAA,SAAA,CAAU,WAAA,GAAc,WAAA;AAExB,EAAA,OAAO,SAAA;AACT,CAAA,EAR+B,iBAAA,CAAA;ACLxB,IAAM,kCAAkB,MAAA,CAAA,MAAgD;AAC7E,EAAA,OAAO,CAA2D,SAAA,KAAuE;AACvI,IAAA,MAAM,EAAE,MAAA,EAAQ,GAAG,MAAK,GAAIA,iBAAA,GAA2C,SAAS,CAAA;AAIhF,IAAA,MAAM,YAAY,eAAA,EAA0B;AAC5C,IAAA,MAAM,iBAAiB,iBAAA,EAA4B;AACnD,IAAA,MAAM,mBAAmB,mBAAA,EAA8B;AAEvD,IAAA,OAAO;AAAA,MACL,GAAG,IAAA;AAAA,MACH,SAAA;AAAA,MACA,cAAA;AAAA,MACA,gBAAA;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,mBAAmB,EAAC;AAAA,QACpB,kBAAkB,EAAC;AAAA,QACnB,mBAAmB;AAAC;AACtB,KACF;AAAA,EACF,CAAA;AACF,CAAA,EAtB+B,iBAAA","file":"index.mjs","sourcesContent":["import { usePathname } from 'next/navigation';\n\nexport const createTypedPathname = <TPathname extends string = string>() => {\n return () => {\n const pathname = usePathname();\n return pathname as TPathname;\n };\n};\n","import { QueryParams, toQueryString } from '@hyeonqyu/typed-router-core';\nimport { useRouter } from 'next/navigation';\n\ntype NavigateOptions = {\n scroll?: boolean;\n query?: QueryParams;\n};\n\ntype PrefetchOptions = Pick<NavigateOptions, 'query'>;\n\nexport const createTypedRouter = <TPathname extends string = string>() => {\n const getHrefWithQuery = (href: TPathname, query?: QueryParams) => {\n return `${href}${toQueryString(query ?? {}, { includeQuestionMark: true })}`;\n };\n\n return () => {\n const router = useRouter();\n\n return {\n back: router.back,\n forward: router.forward,\n refresh: router.refresh,\n push: (href: TPathname, options?: NavigateOptions) => {\n return router.push(getHrefWithQuery(href, options?.query), options);\n },\n replace: (href: TPathname, options?: NavigateOptions) => {\n return router.replace(getHrefWithQuery(href, options?.query), options);\n },\n prefetch: (href: TPathname, options?: PrefetchOptions) => {\n return router.prefetch(getHrefWithQuery(href, options?.query));\n },\n };\n };\n};\n","import Link from 'next/link';\nimport type { ComponentProps, ComponentRef } from 'react';\nimport { forwardRef } from 'react';\n\ntype NextLinkProps = ComponentProps<typeof Link>;\n\nexport type TypedLinkProps<TPathname extends string = string> = Omit<NextLinkProps, 'href'> & {\n href:\n | TPathname\n | {\n pathname: TPathname;\n query?: Record<string, string | number | boolean | readonly (string | number | boolean)[]>;\n hash?: string;\n };\n};\n\nexport const createTypedLink = <TPathname extends string = string>() => {\n const TypedLink = forwardRef<ComponentRef<typeof Link>, TypedLinkProps<TPathname>>((props, ref) => {\n return <Link ref={ref} {...(props as NextLinkProps)} />;\n });\n\n TypedLink.displayName = 'TypedLink';\n\n return TypedLink;\n};\n","import {\n createAppRoutes as createAppRoutesCore,\n type BaseMetadata,\n type PartialRouteTree,\n type RoutePathname,\n type RouteTree,\n} from '@hyeonqyu/typed-router-core';\nimport { createTypedPathname } from 'packages/next/src/pathname.hooks';\nimport { createTypedRouter } from 'packages/next/src/router.hooks';\nimport { createTypedLink } from './TypedLink';\n\nexport const createAppRoutes = <TMetadata extends BaseMetadata, TContext>() => {\n return <TRouteTree extends PartialRouteTree<TMetadata, TContext>>(appRoutes: TRouteTree & RouteTree<TMetadata, TContext, TRouteTree>) => {\n const { _types, ...rest } = createAppRoutesCore<TMetadata, TContext>()(appRoutes);\n\n type Pathname = RoutePathname<TMetadata, TContext, TRouteTree>;\n\n const TypedLink = createTypedLink<Pathname>();\n const useTypedRouter = createTypedRouter<Pathname>();\n const useTypedPathname = createTypedPathname<Pathname>();\n\n return {\n ...rest,\n TypedLink,\n useTypedRouter,\n useTypedPathname,\n _types: {\n AppRoutesMetadata: {} as TMetadata,\n AppRoutesContext: {} as TContext,\n AppRoutesPathname: {} as Pathname,\n },\n };\n };\n};\n\nexport * from '@hyeonqyu/typed-router-core';\nexport type { TypedLinkProps } from './TypedLink';\n"]}
|