react-iten 0.4.2 → 0.5.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/README.md CHANGED
@@ -16,10 +16,8 @@ npm install react-iten react
16
16
 
17
17
  ```tsx
18
18
  import {
19
- createRoute,
20
19
  createRouter,
21
20
  defineRoutes,
22
- type InferRoutes,
23
21
  route,
24
22
  } from 'react-iten'
25
23
 
@@ -29,12 +27,9 @@ const routes = defineRoutes({
29
27
  settings: route(),
30
28
  })
31
29
 
32
- type Routes = InferRoutes<typeof routes>
33
-
34
- const toRoute = createRoute(routes)
35
-
36
- const router = createRouter<Routes>({
37
- initial: toRoute({ name: 'home' }),
30
+ const router = createRouter({
31
+ routes,
32
+ initial: { name: 'home' },
38
33
  })
39
34
 
40
35
  export const { Link, Navigate, Route, Switch, useNavigate, useRoute } = router
@@ -45,7 +40,7 @@ export const { Link, Navigate, Route, Switch, useNavigate, useRoute } = router
45
40
  <Route name="home">{() => <Home />}</Route>
46
41
  <Route name="project">{({ id }) => <Project id={id} />}</Route>
47
42
  <Route name="settings">{() => <Settings />}</Route>
48
- <Navigate to={toRoute({ name: 'home' })} />
43
+ <Navigate to={router.to({ name: 'home' })} />
49
44
  </Switch>
50
45
  ```
51
46
 
@@ -54,12 +49,13 @@ export const { Link, Navigate, Route, Switch, useNavigate, useRoute } = router
54
49
  ```ts
55
50
  import { createHeadlessRouter } from 'react-iten/headless'
56
51
 
57
- const router = createHeadlessRouter<Routes>({
58
- initial: toRoute({ name: 'home' }),
52
+ const router = createHeadlessRouter({
53
+ routes,
54
+ initial: { name: 'home' },
59
55
  })
60
56
 
61
57
  router.store.getState()
62
- await router.store.navigate({ target: toRoute({ name: 'settings' }) })
58
+ await router.store.navigate({ target: router.to({ name: 'settings' }) })
63
59
  ```
64
60
 
65
61
  The store is scoped to the router instance and uses `useSyncExternalStore` for React subscriptions.
@@ -4,7 +4,7 @@ import { LinkComponent } from "./components/Link.cjs";
4
4
  import { NavigateComponent } from "./components/Navigate.cjs";
5
5
  import { RouteComponent } from "./components/Route.cjs";
6
6
  import { SwitchComponent } from "./components/Switch.cjs";
7
- import { RouteMapDef } from "iten-core";
7
+ import { InferRoutes, RouteDefinitions, RouteMapDef } from "iten-core";
8
8
 
9
9
  //#region src/create-router.d.ts
10
10
  type ReactRouter<M extends RouteMapDef, _Ctx = unknown> = HeadlessReactRouter<M> & {
@@ -13,6 +13,9 @@ type ReactRouter<M extends RouteMapDef, _Ctx = unknown> = HeadlessReactRouter<M>
13
13
  Link: LinkComponent<M>;
14
14
  Navigate: NavigateComponent<M>;
15
15
  };
16
+ declare function createRouter<const Defs extends RouteDefinitions, Ctx = unknown>(config: ReactRouterConfig<InferRoutes<Defs>, Ctx> & {
17
+ routes: Defs;
18
+ }): ReactRouter<InferRoutes<Defs>, Ctx>;
16
19
  declare function createRouter<M extends RouteMapDef, Ctx = unknown>(config: ReactRouterConfig<M, Ctx>): ReactRouter<M, Ctx>;
17
20
  //#endregion
18
21
  export { ReactRouter, createRouter };
@@ -4,7 +4,7 @@ import { LinkComponent } from "./components/Link.js";
4
4
  import { NavigateComponent } from "./components/Navigate.js";
5
5
  import { RouteComponent } from "./components/Route.js";
6
6
  import { SwitchComponent } from "./components/Switch.js";
7
- import { RouteMapDef } from "iten-core";
7
+ import { InferRoutes, RouteDefinitions, RouteMapDef } from "iten-core";
8
8
 
9
9
  //#region src/create-router.d.ts
10
10
  type ReactRouter<M extends RouteMapDef, _Ctx = unknown> = HeadlessReactRouter<M> & {
@@ -13,6 +13,9 @@ type ReactRouter<M extends RouteMapDef, _Ctx = unknown> = HeadlessReactRouter<M>
13
13
  Link: LinkComponent<M>;
14
14
  Navigate: NavigateComponent<M>;
15
15
  };
16
+ declare function createRouter<const Defs extends RouteDefinitions, Ctx = unknown>(config: ReactRouterConfig<InferRoutes<Defs>, Ctx> & {
17
+ routes: Defs;
18
+ }): ReactRouter<InferRoutes<Defs>, Ctx>;
16
19
  declare function createRouter<M extends RouteMapDef, Ctx = unknown>(config: ReactRouterConfig<M, Ctx>): ReactRouter<M, Ctx>;
17
20
  //#endregion
18
21
  export { ReactRouter, createRouter };
package/dist/headless.cjs CHANGED
@@ -9,6 +9,7 @@ function createHeadlessRouter(config) {
9
9
  };
10
10
  const core = (0, iten_core.createItenCore)({
11
11
  initial: config.initial,
12
+ routes: config.routes,
12
13
  routeConfig: config.routeConfig,
13
14
  maxHistoryLength: config.maxHistoryLength,
14
15
  queryClient: config.queryClient,
@@ -34,6 +35,7 @@ function createHeadlessRouter(config) {
34
35
  return {
35
36
  store,
36
37
  core,
38
+ to: core.to,
37
39
  ...require_hooks.makeHooks(store)
38
40
  };
39
41
  }
@@ -1,6 +1,6 @@
1
1
  import { InferRoutes, NoParams, QueryClientLike, ReactRouterConfig, RouteConfigMap, RouteMap, RouteMapDef, RouteMatcher, RouteName, RouteOf, RouteParams, RouteUnion, RouterError, RouterState, UseRouteResult } from "./types.cjs";
2
2
  import { HookBundle } from "./hooks.cjs";
3
- import { ItenCore, NavigateInput, RouteMapDef as RouteMapDef$1, RouterState as RouterState$1, createRoute, defineRouteConfig, defineRoutes, isRoute, isRouteName, matchRoute, route } from "iten-core";
3
+ import { InferRoutes as InferRoutes$1, ItenCore, NavigateInput, RouteDefinitions, RouteFactory, RouteMapDef as RouteMapDef$1, RouterState as RouterState$1, createRoute, defineRouteConfig, defineRoutes, isRoute, isRouteName, matchRoute, route } from "iten-core";
4
4
 
5
5
  //#region src/headless.d.ts
6
6
  type ReactRouterStore<M extends RouteMapDef$1> = {
@@ -15,7 +15,11 @@ type ReactRouterStore<M extends RouteMapDef$1> = {
15
15
  type HeadlessReactRouter<M extends RouteMapDef$1> = HookBundle<M> & {
16
16
  store: ReactRouterStore<M>;
17
17
  core: ItenCore<M>;
18
+ to: RouteFactory<M>;
18
19
  };
20
+ declare function createHeadlessRouter<const Defs extends RouteDefinitions, Ctx = unknown>(config: ReactRouterConfig<InferRoutes$1<Defs>, Ctx> & {
21
+ routes: Defs;
22
+ }): HeadlessReactRouter<InferRoutes$1<Defs>>;
19
23
  declare function createHeadlessRouter<M extends RouteMapDef$1, Ctx = unknown>(config: ReactRouterConfig<M, Ctx>): HeadlessReactRouter<M>;
20
24
  //#endregion
21
25
  export { HeadlessReactRouter, type InferRoutes, type NoParams, type QueryClientLike, ReactRouterStore, type RouteConfigMap, type RouteMap, type RouteMapDef, type RouteMatcher, type RouteName, type RouteOf, type RouteParams, type RouteUnion, type RouterError, type RouterState, type UseRouteResult, createHeadlessRouter, createRoute, defineRouteConfig, defineRoutes, isRoute, isRouteName, matchRoute, route };
@@ -1,6 +1,6 @@
1
1
  import { InferRoutes, NoParams, QueryClientLike, ReactRouterConfig, RouteConfigMap, RouteMap, RouteMapDef, RouteMatcher, RouteName, RouteOf, RouteParams, RouteUnion, RouterError, RouterState, UseRouteResult } from "./types.js";
2
2
  import { HookBundle } from "./hooks.js";
3
- import { ItenCore, NavigateInput, RouteMapDef as RouteMapDef$1, RouterState as RouterState$1, createRoute, defineRouteConfig, defineRoutes, isRoute, isRouteName, matchRoute, route } from "iten-core";
3
+ import { InferRoutes as InferRoutes$1, ItenCore, NavigateInput, RouteDefinitions, RouteFactory, RouteMapDef as RouteMapDef$1, RouterState as RouterState$1, createRoute, defineRouteConfig, defineRoutes, isRoute, isRouteName, matchRoute, route } from "iten-core";
4
4
 
5
5
  //#region src/headless.d.ts
6
6
  type ReactRouterStore<M extends RouteMapDef$1> = {
@@ -15,7 +15,11 @@ type ReactRouterStore<M extends RouteMapDef$1> = {
15
15
  type HeadlessReactRouter<M extends RouteMapDef$1> = HookBundle<M> & {
16
16
  store: ReactRouterStore<M>;
17
17
  core: ItenCore<M>;
18
+ to: RouteFactory<M>;
18
19
  };
20
+ declare function createHeadlessRouter<const Defs extends RouteDefinitions, Ctx = unknown>(config: ReactRouterConfig<InferRoutes$1<Defs>, Ctx> & {
21
+ routes: Defs;
22
+ }): HeadlessReactRouter<InferRoutes$1<Defs>>;
19
23
  declare function createHeadlessRouter<M extends RouteMapDef$1, Ctx = unknown>(config: ReactRouterConfig<M, Ctx>): HeadlessReactRouter<M>;
20
24
  //#endregion
21
25
  export { HeadlessReactRouter, type InferRoutes, type NoParams, type QueryClientLike, ReactRouterStore, type RouteConfigMap, type RouteMap, type RouteMapDef, type RouteMatcher, type RouteName, type RouteOf, type RouteParams, type RouteUnion, type RouterError, type RouterState, type UseRouteResult, createHeadlessRouter, createRoute, defineRouteConfig, defineRoutes, isRoute, isRouteName, matchRoute, route };
package/dist/headless.mjs CHANGED
@@ -8,6 +8,7 @@ function createHeadlessRouter(config) {
8
8
  };
9
9
  const core = createItenCore({
10
10
  initial: config.initial,
11
+ routes: config.routes,
11
12
  routeConfig: config.routeConfig,
12
13
  maxHistoryLength: config.maxHistoryLength,
13
14
  queryClient: config.queryClient,
@@ -33,6 +34,7 @@ function createHeadlessRouter(config) {
33
34
  return {
34
35
  store,
35
36
  core,
37
+ to: core.to,
36
38
  ...makeHooks(store)
37
39
  };
38
40
  }
package/dist/types.d.cts CHANGED
@@ -1,8 +1,9 @@
1
- import { InferRoutes, NoParams, QueryClientLike, RouteConfigMap, RouteDefinition, RouteDefinitions, RouteMap as RouteMap$1, RouteMapDef as RouteMapDef$1, RouteMatcher, RouteName, RouteOf, RouteParams, RouteUnion as RouteUnion$1, RouterError as RouterError$1, RouterState as RouterState$1 } from "iten-core";
1
+ import { InferRoutes as InferRoutes$1, NoParams, QueryClientLike, RouteConfigMap, RouteDefinition, RouteDefinitions as RouteDefinitions$1, RouteMap as RouteMap$1, RouteMapDef as RouteMapDef$1, RouteMatcher, RouteName, RouteOf, RouteParams, RouteUnion as RouteUnion$1, RouterError as RouterError$1, RouterState as RouterState$1 } from "iten-core";
2
2
 
3
3
  //#region src/types.d.ts
4
4
  type ReactRouterConfig<M extends RouteMapDef$1, Ctx = unknown> = {
5
5
  initial: RouteUnion$1<M> | null;
6
+ routes?: RouteDefinitions$1 | undefined;
6
7
  routeConfig?: RouteConfigMap<M, Ctx> | undefined;
7
8
  maxHistoryLength?: number | undefined;
8
9
  context?: Ctx | (() => Ctx) | undefined;
@@ -16,4 +17,4 @@ type UseRouteResult<M extends RouteMapDef$1, K extends keyof M> = {
16
17
  params: null;
17
18
  };
18
19
  //#endregion
19
- export { type InferRoutes, type NoParams, type QueryClientLike, ReactRouterConfig, type RouteConfigMap, type RouteDefinition, type RouteDefinitions, type RouteMap$1 as RouteMap, type RouteMapDef$1 as RouteMapDef, type RouteMatcher, type RouteName, type RouteOf, type RouteParams, type RouteUnion$1 as RouteUnion, type RouterError$1 as RouterError, type RouterState$1 as RouterState, UseRouteResult };
20
+ export { type InferRoutes$1 as InferRoutes, type NoParams, type QueryClientLike, ReactRouterConfig, type RouteConfigMap, type RouteDefinition, type RouteDefinitions$1 as RouteDefinitions, type RouteMap$1 as RouteMap, type RouteMapDef$1 as RouteMapDef, type RouteMatcher, type RouteName, type RouteOf, type RouteParams, type RouteUnion$1 as RouteUnion, type RouterError$1 as RouterError, type RouterState$1 as RouterState, UseRouteResult };
package/dist/types.d.ts CHANGED
@@ -1,8 +1,9 @@
1
- import { InferRoutes, NoParams, QueryClientLike, RouteConfigMap, RouteDefinition, RouteDefinitions, RouteMap as RouteMap$1, RouteMapDef as RouteMapDef$1, RouteMatcher, RouteName, RouteOf, RouteParams, RouteUnion as RouteUnion$1, RouterError as RouterError$1, RouterState as RouterState$1 } from "iten-core";
1
+ import { InferRoutes as InferRoutes$1, NoParams, QueryClientLike, RouteConfigMap, RouteDefinition, RouteDefinitions as RouteDefinitions$1, RouteMap as RouteMap$1, RouteMapDef as RouteMapDef$1, RouteMatcher, RouteName, RouteOf, RouteParams, RouteUnion as RouteUnion$1, RouterError as RouterError$1, RouterState as RouterState$1 } from "iten-core";
2
2
 
3
3
  //#region src/types.d.ts
4
4
  type ReactRouterConfig<M extends RouteMapDef$1, Ctx = unknown> = {
5
5
  initial: RouteUnion$1<M> | null;
6
+ routes?: RouteDefinitions$1 | undefined;
6
7
  routeConfig?: RouteConfigMap<M, Ctx> | undefined;
7
8
  maxHistoryLength?: number | undefined;
8
9
  context?: Ctx | (() => Ctx) | undefined;
@@ -16,4 +17,4 @@ type UseRouteResult<M extends RouteMapDef$1, K extends keyof M> = {
16
17
  params: null;
17
18
  };
18
19
  //#endregion
19
- export { type InferRoutes, type NoParams, type QueryClientLike, ReactRouterConfig, type RouteConfigMap, type RouteDefinition, type RouteDefinitions, type RouteMap$1 as RouteMap, type RouteMapDef$1 as RouteMapDef, type RouteMatcher, type RouteName, type RouteOf, type RouteParams, type RouteUnion$1 as RouteUnion, type RouterError$1 as RouterError, type RouterState$1 as RouterState, UseRouteResult };
20
+ export { type InferRoutes$1 as InferRoutes, type NoParams, type QueryClientLike, ReactRouterConfig, type RouteConfigMap, type RouteDefinition, type RouteDefinitions$1 as RouteDefinitions, type RouteMap$1 as RouteMap, type RouteMapDef$1 as RouteMapDef, type RouteMatcher, type RouteName, type RouteOf, type RouteParams, type RouteUnion$1 as RouteUnion, type RouterError$1 as RouterError, type RouterState$1 as RouterState, UseRouteResult };
package/dist/url.cjs CHANGED
@@ -4,6 +4,7 @@ let iten_core_url = require("iten-core/url");
4
4
  function createUrlSync({ router, ...input }) {
5
5
  const coreLike = {
6
6
  getState: () => router.store.getState(),
7
+ to: router.to,
7
8
  navigate: (navigateInput) => router.store.navigate(navigateInput),
8
9
  goBack: () => router.store.goBack(),
9
10
  subscribe: ({ listener }) => router.store.subscribe({ listener: () => {
package/dist/url.mjs CHANGED
@@ -3,6 +3,7 @@ import { createUrlSync as createUrlSync$1 } from "iten-core/url";
3
3
  function createUrlSync({ router, ...input }) {
4
4
  const coreLike = {
5
5
  getState: () => router.store.getState(),
6
+ to: router.to,
6
7
  navigate: (navigateInput) => router.store.navigate(navigateInput),
7
8
  goBack: () => router.store.goBack(),
8
9
  subscribe: ({ listener }) => router.store.subscribe({ listener: () => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-iten",
3
- "version": "0.4.2",
3
+ "version": "0.5.0",
4
4
  "description": "React adapter for iten — ultralight in-memory router for embedded JS apps",
5
5
  "keywords": [
6
6
  "react",
@@ -104,7 +104,7 @@
104
104
  }
105
105
  },
106
106
  "dependencies": {
107
- "iten-core": "^0.4.2"
107
+ "iten-core": "^0.5.0"
108
108
  },
109
109
  "publishConfig": {
110
110
  "access": "public",
@@ -1,4 +1,4 @@
1
- import type { RouteMapDef } from 'iten-core'
1
+ import type { InferRoutes, RouteDefinitions, RouteMapDef } from 'iten-core'
2
2
  import type { LinkComponent } from './components/Link.tsx'
3
3
  import { makeLink } from './components/Link.tsx'
4
4
  import type { NavigateComponent } from './components/Navigate.tsx'
@@ -18,6 +18,12 @@ export type ReactRouter<M extends RouteMapDef, _Ctx = unknown> = HeadlessReactRo
18
18
  Navigate: NavigateComponent<M>
19
19
  }
20
20
 
21
+ export function createRouter<const Defs extends RouteDefinitions, Ctx = unknown>(
22
+ config: ReactRouterConfig<InferRoutes<Defs>, Ctx> & { routes: Defs },
23
+ ): ReactRouter<InferRoutes<Defs>, Ctx>
24
+ export function createRouter<M extends RouteMapDef, Ctx = unknown>(
25
+ config: ReactRouterConfig<M, Ctx>,
26
+ ): ReactRouter<M, Ctx>
21
27
  export function createRouter<M extends RouteMapDef, Ctx = unknown>(
22
28
  config: ReactRouterConfig<M, Ctx>,
23
29
  ): ReactRouter<M, Ctx> {
package/src/headless.ts CHANGED
@@ -1,4 +1,12 @@
1
- import type { ItenCore, NavigateInput, RouteMapDef, RouterState } from 'iten-core'
1
+ import type {
2
+ InferRoutes,
3
+ ItenCore,
4
+ NavigateInput,
5
+ RouteDefinitions,
6
+ RouteFactory,
7
+ RouteMapDef,
8
+ RouterState,
9
+ } from 'iten-core'
2
10
  import { createItenCore } from 'iten-core'
3
11
  import type { HookBundle } from './hooks.ts'
4
12
  import { makeHooks } from './hooks.ts'
@@ -41,8 +49,15 @@ export type ReactRouterStore<M extends RouteMapDef> = {
41
49
  export type HeadlessReactRouter<M extends RouteMapDef> = HookBundle<M> & {
42
50
  store: ReactRouterStore<M>
43
51
  core: ItenCore<M>
52
+ to: RouteFactory<M>
44
53
  }
45
54
 
55
+ export function createHeadlessRouter<const Defs extends RouteDefinitions, Ctx = unknown>(
56
+ config: ReactRouterConfig<InferRoutes<Defs>, Ctx> & { routes: Defs },
57
+ ): HeadlessReactRouter<InferRoutes<Defs>>
58
+ export function createHeadlessRouter<M extends RouteMapDef, Ctx = unknown>(
59
+ config: ReactRouterConfig<M, Ctx>,
60
+ ): HeadlessReactRouter<M>
46
61
  export function createHeadlessRouter<M extends RouteMapDef, Ctx = unknown>(
47
62
  config: ReactRouterConfig<M, Ctx>,
48
63
  ): HeadlessReactRouter<M> {
@@ -55,6 +70,7 @@ export function createHeadlessRouter<M extends RouteMapDef, Ctx = unknown>(
55
70
 
56
71
  const core = createItenCore<M, Ctx>({
57
72
  initial: config.initial,
73
+ routes: config.routes,
58
74
  routeConfig: config.routeConfig,
59
75
  maxHistoryLength: config.maxHistoryLength,
60
76
  queryClient: config.queryClient,
@@ -86,6 +102,7 @@ export function createHeadlessRouter<M extends RouteMapDef, Ctx = unknown>(
86
102
  return {
87
103
  store,
88
104
  core,
105
+ to: core.to,
89
106
  ...makeHooks<M>(store),
90
107
  }
91
108
  }
package/src/types.ts CHANGED
@@ -5,6 +5,7 @@ import type {
5
5
  RouteConfigMap,
6
6
  RouteDefinition,
7
7
  RouteDefinitions,
8
+ RouteFactory,
8
9
  RouteMap,
9
10
  RouteMapDef,
10
11
  RouteMatcher,
@@ -23,6 +24,7 @@ export type {
23
24
  RouteConfigMap,
24
25
  RouteDefinition,
25
26
  RouteDefinitions,
27
+ RouteFactory,
26
28
  RouteMap,
27
29
  RouteMapDef,
28
30
  RouteMatcher,
@@ -36,6 +38,7 @@ export type {
36
38
 
37
39
  export type ReactRouterConfig<M extends RouteMapDef, Ctx = unknown> = {
38
40
  initial: RouteUnion<M> | null
41
+ routes?: RouteDefinitions | undefined
39
42
  routeConfig?: RouteConfigMap<M, Ctx> | undefined
40
43
  maxHistoryLength?: number | undefined
41
44
  context?: Ctx | (() => Ctx) | undefined
package/src/url.ts CHANGED
@@ -31,6 +31,7 @@ export function createUrlSync<M extends RouteMapDef>({
31
31
  }: CreateUrlSyncInput<M>): UrlSync<M> {
32
32
  const coreLike: ItenCore<M> = {
33
33
  getState: () => router.store.getState() as RouterState<M>,
34
+ to: router.to,
34
35
  navigate: (navigateInput: NavigateInput<M>) => router.store.navigate(navigateInput),
35
36
  goBack: () => router.store.goBack(),
36
37
  subscribe: ({ listener }) =>