@hyeonqyu/typed-router-next 0.1.1 → 0.2.1

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 CHANGED
@@ -1 +1,44 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as react from 'react';
3
+ import { ComponentProps } from 'react';
4
+ import Link from 'next/link';
5
+ import { BaseMetadata, PartialRouteTree, RouteTree, RoutePathname } from '@hyeonqyu/typed-router-core';
1
6
  export * from '@hyeonqyu/typed-router-core';
7
+
8
+ type NextLinkProps = ComponentProps<typeof Link>;
9
+ type TypedLinkProps<TPathname extends string = string> = Omit<NextLinkProps, 'href'> & {
10
+ href: TPathname | {
11
+ pathname: TPathname;
12
+ query?: Record<string, string | number | boolean | readonly (string | number | boolean)[]>;
13
+ hash?: string;
14
+ };
15
+ };
16
+
17
+ declare const createAppRoutes: <TMetadata extends BaseMetadata, TContext>() => <TRouteTree extends PartialRouteTree<TMetadata, TContext>>(appRoutes: TRouteTree & RouteTree<TMetadata, TContext, TRouteTree>) => {
18
+ TypedLink: react.ForwardRefExoticComponent<Omit<TypedLinkProps<RoutePathname<TMetadata, TContext, TRouteTree>>, "ref"> & react.RefAttributes<HTMLAnchorElement>>;
19
+ useTypedRouter: () => {
20
+ back: () => void;
21
+ forward: () => void;
22
+ refresh: () => void;
23
+ push: (href: RoutePathname<TMetadata, TContext, TRouteTree>, options?: {
24
+ scroll?: boolean;
25
+ } | undefined) => void;
26
+ replace: (href: RoutePathname<TMetadata, TContext, TRouteTree>, options?: {
27
+ scroll?: boolean;
28
+ } | undefined) => void;
29
+ prefetch: (href: RoutePathname<TMetadata, TContext, TRouteTree>) => void;
30
+ };
31
+ useTypedPathname: () => RoutePathname<TMetadata, TContext, TRouteTree>;
32
+ _types: {
33
+ AppRoutesMetadata: TMetadata;
34
+ AppRoutesContext: TContext;
35
+ AppRoutesPathname: RoutePathname<TMetadata, TContext, TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>>;
36
+ };
37
+ AppRoutesProvider: ({ children }: {
38
+ children: react.ReactNode;
39
+ }) => react_jsx_runtime.JSX.Element;
40
+ useAppRoutes: () => TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree> & RouteTree<TMetadata, TContext, TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>, TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>>;
41
+ 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;
42
+ };
43
+
44
+ export { type TypedLinkProps, createAppRoutes };
package/dist/index.d.ts CHANGED
@@ -1 +1,44 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as react from 'react';
3
+ import { ComponentProps } from 'react';
4
+ import Link from 'next/link';
5
+ import { BaseMetadata, PartialRouteTree, RouteTree, RoutePathname } from '@hyeonqyu/typed-router-core';
1
6
  export * from '@hyeonqyu/typed-router-core';
7
+
8
+ type NextLinkProps = ComponentProps<typeof Link>;
9
+ type TypedLinkProps<TPathname extends string = string> = Omit<NextLinkProps, 'href'> & {
10
+ href: TPathname | {
11
+ pathname: TPathname;
12
+ query?: Record<string, string | number | boolean | readonly (string | number | boolean)[]>;
13
+ hash?: string;
14
+ };
15
+ };
16
+
17
+ declare const createAppRoutes: <TMetadata extends BaseMetadata, TContext>() => <TRouteTree extends PartialRouteTree<TMetadata, TContext>>(appRoutes: TRouteTree & RouteTree<TMetadata, TContext, TRouteTree>) => {
18
+ TypedLink: react.ForwardRefExoticComponent<Omit<TypedLinkProps<RoutePathname<TMetadata, TContext, TRouteTree>>, "ref"> & react.RefAttributes<HTMLAnchorElement>>;
19
+ useTypedRouter: () => {
20
+ back: () => void;
21
+ forward: () => void;
22
+ refresh: () => void;
23
+ push: (href: RoutePathname<TMetadata, TContext, TRouteTree>, options?: {
24
+ scroll?: boolean;
25
+ } | undefined) => void;
26
+ replace: (href: RoutePathname<TMetadata, TContext, TRouteTree>, options?: {
27
+ scroll?: boolean;
28
+ } | undefined) => void;
29
+ prefetch: (href: RoutePathname<TMetadata, TContext, TRouteTree>) => void;
30
+ };
31
+ useTypedPathname: () => RoutePathname<TMetadata, TContext, TRouteTree>;
32
+ _types: {
33
+ AppRoutesMetadata: TMetadata;
34
+ AppRoutesContext: TContext;
35
+ AppRoutesPathname: RoutePathname<TMetadata, TContext, TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>>;
36
+ };
37
+ AppRoutesProvider: ({ children }: {
38
+ children: react.ReactNode;
39
+ }) => react_jsx_runtime.JSX.Element;
40
+ useAppRoutes: () => TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree> & RouteTree<TMetadata, TContext, TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>, TRouteTree & RouteTree<TMetadata, TContext, TRouteTree, TRouteTree>>;
41
+ 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;
42
+ };
43
+
44
+ export { type TypedLinkProps, createAppRoutes };
package/dist/index.js CHANGED
@@ -1,14 +1,70 @@
1
1
  'use strict';
2
2
 
3
3
  var typedRouterCore = require('@hyeonqyu/typed-router-core');
4
+ var navigation = require('next/navigation');
5
+ var Link = require('next/link');
6
+ var react = require('react');
7
+ var jsxRuntime = require('react/jsx-runtime');
4
8
 
9
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
5
10
 
11
+ var Link__default = /*#__PURE__*/_interopDefault(Link);
6
12
 
13
+ // src/index.tsx
14
+ var createTypedPathname = () => {
15
+ return () => {
16
+ const pathname = navigation.usePathname();
17
+ return pathname;
18
+ };
19
+ };
20
+ var createTypedRouter = () => {
21
+ return () => {
22
+ const router = navigation.useRouter();
23
+ return {
24
+ back: router.back,
25
+ forward: router.forward,
26
+ refresh: router.refresh,
27
+ push: (href, options) => {
28
+ return router.push(href, options);
29
+ },
30
+ replace: (href, options) => {
31
+ return router.replace(href, options);
32
+ },
33
+ prefetch: (href) => {
34
+ return router.prefetch(href);
35
+ }
36
+ };
37
+ };
38
+ };
39
+ var createTypedLink = () => {
40
+ const TypedLink = react.forwardRef((props, ref) => {
41
+ return /* @__PURE__ */ jsxRuntime.jsx(Link__default.default, { ref, ...props });
42
+ });
43
+ TypedLink.displayName = "TypedLink";
44
+ return TypedLink;
45
+ };
46
+ var createAppRoutes = () => {
47
+ return (appRoutes) => {
48
+ const { _types, ...rest } = typedRouterCore.createAppRoutes()(appRoutes);
49
+ const TypedLink = createTypedLink();
50
+ const useTypedRouter = createTypedRouter();
51
+ const useTypedPathname = createTypedPathname();
52
+ return {
53
+ ...rest,
54
+ TypedLink,
55
+ useTypedRouter,
56
+ useTypedPathname,
57
+ _types
58
+ };
59
+ };
60
+ };
61
+
62
+ exports.createAppRoutes = createAppRoutes;
7
63
  Object.keys(typedRouterCore).forEach(function (k) {
8
- if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
9
- enumerable: true,
10
- get: function () { return typedRouterCore[k]; }
11
- });
64
+ if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
65
+ enumerable: true,
66
+ get: function () { return typedRouterCore[k]; }
67
+ });
12
68
  });
13
69
  //# sourceMappingURL=index.js.map
14
70
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js","sourcesContent":[]}
1
+ {"version":3,"sources":["../src/pathname.hooks.ts","../src/router.hooks.ts","../src/TypedLink.tsx","../src/index.tsx"],"names":["usePathname","useRouter","forwardRef","jsx","Link","createAppRoutesCore"],"mappings":";;;;;;;;;;;;;AAEO,IAAM,sBAAsB,MAAyC;AAC1E,EAAA,OAAO,MAAM;AACX,IAAA,MAAM,WAAWA,sBAAA,EAAY;AAC7B,IAAA,OAAO,QAAA;AAAA,EACT,CAAA;AACF,CAAA;ACLO,IAAM,oBAAoB,MAAyC;AACxE,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,EAAM,CAAC,IAAA,EAAiB,OAAA,KAAmC;AACzD,QAAA,OAAO,MAAA,CAAO,IAAA,CAAK,IAAA,EAAM,OAAO,CAAA;AAAA,MAClC,CAAA;AAAA,MACA,OAAA,EAAS,CAAC,IAAA,EAAiB,OAAA,KAAmC;AAC5D,QAAA,OAAO,MAAA,CAAO,OAAA,CAAQ,IAAA,EAAM,OAAO,CAAA;AAAA,MACrC,CAAA;AAAA,MACA,QAAA,EAAU,CAAC,IAAA,KAAoB;AAC7B,QAAA,OAAO,MAAA,CAAO,SAAS,IAAI,CAAA;AAAA,MAC7B;AAAA,KACF;AAAA,EACF,CAAA;AACF,CAAA;ACLO,IAAM,kBAAkB,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;ACbO,IAAM,kBAAkB,MAAgD;AAC7E,EAAA,OAAO,CAA2D,SAAA,KAAuE;AACvI,IAAA,MAAM,EAAE,MAAA,EAAQ,GAAG,MAAK,GAAIC,+BAAA,GAA2C,SAAS,CAAA;AAGhF,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;AAAA,KACF;AAAA,EACF,CAAA;AACF","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 { useRouter } from 'next/navigation';\n\nexport const createTypedRouter = <TPathname extends string = string>() => {\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?: { scroll?: boolean }) => {\n return router.push(href, options);\n },\n replace: (href: TPathname, options?: { scroll?: boolean }) => {\n return router.replace(href, options);\n },\n prefetch: (href: TPathname) => {\n return router.prefetch(href);\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 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 };\n };\n};\n\nexport * from '@hyeonqyu/typed-router-core';\nexport type { TypedLinkProps } from './TypedLink';\n"]}
package/dist/index.mjs CHANGED
@@ -1,3 +1,59 @@
1
+ import { createAppRoutes as createAppRoutes$1 } from '@hyeonqyu/typed-router-core';
1
2
  export * from '@hyeonqyu/typed-router-core';
3
+ import { usePathname, useRouter } from 'next/navigation';
4
+ import Link from 'next/link';
5
+ import { forwardRef } from 'react';
6
+ import { jsx } from 'react/jsx-runtime';
7
+
8
+ // src/index.tsx
9
+ var createTypedPathname = () => {
10
+ return () => {
11
+ const pathname = usePathname();
12
+ return pathname;
13
+ };
14
+ };
15
+ var createTypedRouter = () => {
16
+ return () => {
17
+ const router = useRouter();
18
+ return {
19
+ back: router.back,
20
+ forward: router.forward,
21
+ refresh: router.refresh,
22
+ push: (href, options) => {
23
+ return router.push(href, options);
24
+ },
25
+ replace: (href, options) => {
26
+ return router.replace(href, options);
27
+ },
28
+ prefetch: (href) => {
29
+ return router.prefetch(href);
30
+ }
31
+ };
32
+ };
33
+ };
34
+ var createTypedLink = () => {
35
+ const TypedLink = forwardRef((props, ref) => {
36
+ return /* @__PURE__ */ jsx(Link, { ref, ...props });
37
+ });
38
+ TypedLink.displayName = "TypedLink";
39
+ return TypedLink;
40
+ };
41
+ var createAppRoutes = () => {
42
+ return (appRoutes) => {
43
+ const { _types, ...rest } = createAppRoutes$1()(appRoutes);
44
+ const TypedLink = createTypedLink();
45
+ const useTypedRouter = createTypedRouter();
46
+ const useTypedPathname = createTypedPathname();
47
+ return {
48
+ ...rest,
49
+ TypedLink,
50
+ useTypedRouter,
51
+ useTypedPathname,
52
+ _types
53
+ };
54
+ };
55
+ };
56
+
57
+ export { createAppRoutes };
2
58
  //# sourceMappingURL=index.mjs.map
3
59
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"index.mjs","sourcesContent":[]}
1
+ {"version":3,"sources":["../src/pathname.hooks.ts","../src/router.hooks.ts","../src/TypedLink.tsx","../src/index.tsx"],"names":["createAppRoutesCore"],"mappings":";;;;;;;;AAEO,IAAM,sBAAsB,MAAyC;AAC1E,EAAA,OAAO,MAAM;AACX,IAAA,MAAM,WAAW,WAAA,EAAY;AAC7B,IAAA,OAAO,QAAA;AAAA,EACT,CAAA;AACF,CAAA;ACLO,IAAM,oBAAoB,MAAyC;AACxE,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,EAAM,CAAC,IAAA,EAAiB,OAAA,KAAmC;AACzD,QAAA,OAAO,MAAA,CAAO,IAAA,CAAK,IAAA,EAAM,OAAO,CAAA;AAAA,MAClC,CAAA;AAAA,MACA,OAAA,EAAS,CAAC,IAAA,EAAiB,OAAA,KAAmC;AAC5D,QAAA,OAAO,MAAA,CAAO,OAAA,CAAQ,IAAA,EAAM,OAAO,CAAA;AAAA,MACrC,CAAA;AAAA,MACA,QAAA,EAAU,CAAC,IAAA,KAAoB;AAC7B,QAAA,OAAO,MAAA,CAAO,SAAS,IAAI,CAAA;AAAA,MAC7B;AAAA,KACF;AAAA,EACF,CAAA;AACF,CAAA;ACLO,IAAM,kBAAkB,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;ACbO,IAAM,kBAAkB,MAAgD;AAC7E,EAAA,OAAO,CAA2D,SAAA,KAAuE;AACvI,IAAA,MAAM,EAAE,MAAA,EAAQ,GAAG,MAAK,GAAIA,iBAAA,GAA2C,SAAS,CAAA;AAGhF,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;AAAA,KACF;AAAA,EACF,CAAA;AACF","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 { useRouter } from 'next/navigation';\n\nexport const createTypedRouter = <TPathname extends string = string>() => {\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?: { scroll?: boolean }) => {\n return router.push(href, options);\n },\n replace: (href: TPathname, options?: { scroll?: boolean }) => {\n return router.replace(href, options);\n },\n prefetch: (href: TPathname) => {\n return router.prefetch(href);\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 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 };\n };\n};\n\nexport * from '@hyeonqyu/typed-router-core';\nexport type { TypedLinkProps } from './TypedLink';\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hyeonqyu/typed-router-next",
3
- "version": "0.1.1",
3
+ "version": "0.2.1",
4
4
  "description": "Type-safe IA-first routing for Next.js",
5
5
  "author": "hyeonQyu <dhk0561@naver.com>",
6
6
  "license": "MIT",
@@ -54,6 +54,7 @@
54
54
  },
55
55
  "devDependencies": {
56
56
  "@types/react": "^19.2.5",
57
+ "next": "^15.1.6",
57
58
  "react": "^19.2.0",
58
59
  "typescript": "^5.9.3"
59
60
  },