@unitflow/router 0.1.2 → 0.2.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 +71 -22
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/public.d.ts +8 -4
- package/dist/public.d.ts.map +1 -1
- package/dist/public.js +7 -5
- package/dist/public.js.map +1 -1
- package/dist/react.d.ts +16 -4
- package/dist/react.d.ts.map +1 -1
- package/dist/react.js +42 -14
- package/dist/react.js.map +1 -1
- package/dist/route.d.ts +12 -0
- package/dist/route.d.ts.map +1 -0
- package/dist/route.js +12 -0
- package/dist/route.js.map +1 -0
- package/dist/router.d.ts +115 -11
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +124 -18
- package/dist/router.js.map +1 -1
- package/package.json +9 -9
- package/dist/router-group.d.ts +0 -2
- package/dist/router-group.d.ts.map +0 -1
- package/dist/router-group.js +0 -2
- package/dist/router-group.js.map +0 -1
package/README.md
CHANGED
|
@@ -3,10 +3,11 @@
|
|
|
3
3
|
Effect-native, model-first typed router for Unitflow.
|
|
4
4
|
|
|
5
5
|
Routes declare paths and codecs — never components, loaders, or data.
|
|
6
|
-
`Router.make` births
|
|
7
|
-
|
|
8
|
-
decoded params/search)
|
|
9
|
-
route ports; React meets the
|
|
6
|
+
`Router.make` births one `AppRouter`: `model` (the engine — navigation,
|
|
7
|
+
current location), `routeModel` (a keyed per-route model: occupancy and
|
|
8
|
+
decoded params/search), and `layer` (the two, already composed). Page data
|
|
9
|
+
lives in ordinary Unitflow models gated on route ports; React meets the
|
|
10
|
+
router in exactly one place.
|
|
10
11
|
|
|
11
12
|
## Install
|
|
12
13
|
|
|
@@ -18,36 +19,64 @@ pnpm add @unitflow/router @unitflow/react @unitflow/core effect@4.0.0-beta.88
|
|
|
18
19
|
|
|
19
20
|
```ts
|
|
20
21
|
import * as Schema from "effect/Schema";
|
|
21
|
-
import { Router } from "@unitflow/router";
|
|
22
|
+
import { Route, Router } from "@unitflow/router";
|
|
22
23
|
|
|
23
24
|
const userParams = Schema.Struct({ id: Schema.NumberFromString });
|
|
24
25
|
const userSearch = Schema.Struct({ page: Schema.NumberFromString });
|
|
25
26
|
|
|
26
|
-
export const HomeRoute =
|
|
27
|
-
export const UserRoute =
|
|
27
|
+
export const HomeRoute = Route.make("home", { path: "/" });
|
|
28
|
+
export const UserRoute = Route.make("user", {
|
|
28
29
|
path: "/users/:id",
|
|
29
30
|
params: userParams,
|
|
30
31
|
search: userSearch,
|
|
31
32
|
});
|
|
32
33
|
|
|
33
|
-
export const
|
|
34
|
-
"app/router",
|
|
35
|
-
Router.group(HomeRoute, UserRoute),
|
|
36
|
-
);
|
|
34
|
+
export const AppRouter = Router.make("app/router", Route.group(HomeRoute, UserRoute));
|
|
37
35
|
|
|
38
36
|
// Registering the router types Link/redirect targets everywhere.
|
|
39
37
|
declare module "@unitflow/router" {
|
|
40
38
|
interface Register {
|
|
41
|
-
readonly router: typeof
|
|
39
|
+
readonly router: typeof AppRouter.model;
|
|
42
40
|
}
|
|
43
41
|
}
|
|
44
42
|
```
|
|
45
43
|
|
|
46
|
-
- `
|
|
44
|
+
- `AppRouter.model` — the engine: `inputs.navigate` (an event, like any
|
|
47
45
|
model input), `outputs.state`/`location`, `buildHref`/`buildLocation`.
|
|
48
|
-
- `
|
|
49
|
-
that route's unit with
|
|
50
|
-
`Option` ports, narrowed
|
|
46
|
+
- `AppRouter.routeModel` — keyed by route id:
|
|
47
|
+
`Model.get(AppRouter.routeModel, "user")` returns that route's unit with
|
|
48
|
+
`outputs.opened`/`params`/`search`/`provided` as `Option` ports, narrowed
|
|
49
|
+
to THAT route's schemas.
|
|
50
|
+
- `AppRouter.layer` — `routeModel.layer` and `model.layer`, already merged;
|
|
51
|
+
still requires a history layer (`Router.browserHistoryLayer` or
|
|
52
|
+
`memoryHistoryLayer` in tests), and, for page models reading route ports,
|
|
53
|
+
their own layers.
|
|
54
|
+
|
|
55
|
+
## Nesting: `Route.addChild`
|
|
56
|
+
|
|
57
|
+
Nesting is declared, never inferred from a shared path prefix — a route only
|
|
58
|
+
becomes an ancestor of another via `Route.addChild`. The child's `path` is
|
|
59
|
+
relative to the parent's own path, joined on attach:
|
|
60
|
+
|
|
61
|
+
```ts
|
|
62
|
+
const EditRoute = Route.make("edit", { path: "/edit" });
|
|
63
|
+
|
|
64
|
+
export const ProjectRoute = Route.make("project", {
|
|
65
|
+
path: "/projects/:projectId",
|
|
66
|
+
params: Schema.Struct({ projectId: Schema.NumberFromString }),
|
|
67
|
+
}).pipe(Route.addChild(EditRoute));
|
|
68
|
+
// EditRoute's declared table path is "/projects/:projectId/edit".
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
A route with no `addChild` calls has no children — including a route at
|
|
72
|
+
`/`: two routes that happen to share a literal path prefix never nest unless
|
|
73
|
+
this was called explicitly. `Route.layout(id)` covers the other case —
|
|
74
|
+
wrapping *independent* siblings (not one route's own child content) under a
|
|
75
|
+
shared, pathless parent that contributes no URL segment of its own:
|
|
76
|
+
|
|
77
|
+
```ts
|
|
78
|
+
const dashboard = Route.group(SettingsRoute, ReportsRoute).pipe(Route.layout("dashboard"));
|
|
79
|
+
```
|
|
51
80
|
|
|
52
81
|
## Page data: a model gated on route ports
|
|
53
82
|
|
|
@@ -55,7 +84,7 @@ declare module "@unitflow/router" {
|
|
|
55
84
|
class UserPageModel extends Model.Service<UserPageModel>()("app/UserPage")({
|
|
56
85
|
make: () =>
|
|
57
86
|
Effect.gen(function* () {
|
|
58
|
-
const unit = yield* Model.get(
|
|
87
|
+
const unit = yield* Model.get(AppRouter.routeModel, "user");
|
|
59
88
|
const user = yield* Query.make({
|
|
60
89
|
stores: { params: unit.outputs.params },
|
|
61
90
|
handler: ({ params }) =>
|
|
@@ -78,7 +107,7 @@ import { Link, RouterView } from "@unitflow/router/react";
|
|
|
78
107
|
|
|
79
108
|
const UserPage = View.make(UserPageModel, ({ user }) => /* AsyncResult → JSX */);
|
|
80
109
|
|
|
81
|
-
export const AppView = RouterView.make(
|
|
110
|
+
export const AppView = RouterView.make(AppRouter.model, {
|
|
82
111
|
routes: {
|
|
83
112
|
home: ({ children }) => (
|
|
84
113
|
<main>
|
|
@@ -97,8 +126,7 @@ export const AppView = RouterView.make(NavigationModel, {
|
|
|
97
126
|
// main.tsx — the view carries its root model
|
|
98
127
|
const layer = AppView.model.layer.pipe(
|
|
99
128
|
Layer.provideMerge(UserPageModel.layer),
|
|
100
|
-
Layer.provideMerge(
|
|
101
|
-
Layer.provideMerge(NavigationModel.layer),
|
|
129
|
+
Layer.provideMerge(AppRouter.layer),
|
|
102
130
|
Layer.provideMerge(Router.browserHistoryLayer), // or memoryHistoryLayer in tests
|
|
103
131
|
);
|
|
104
132
|
|
|
@@ -107,6 +135,24 @@ const layer = AppView.model.layer.pipe(
|
|
|
107
135
|
</Unitflow>;
|
|
108
136
|
```
|
|
109
137
|
|
|
138
|
+
A route with declared children (via `Route.addChild`/`Route.layout`) nests
|
|
139
|
+
its view the same way in the map — `{ view, routes: { ... } }` — mirroring
|
|
140
|
+
the route table instead of being inferred separately:
|
|
141
|
+
|
|
142
|
+
```tsx
|
|
143
|
+
routes: {
|
|
144
|
+
project: { view: ProjectPage, routes: { edit: ProjectEditView } },
|
|
145
|
+
},
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
`ProjectPage` receives `ProjectEditView`'s rendered output as `children`
|
|
149
|
+
only while `/projects/:id/edit` is actually matched — `null` otherwise, so
|
|
150
|
+
`children ?? <ProjectOverview />` picks between the two. Give the edit view
|
|
151
|
+
its own model that leases `ProjectPageModel` (`Model.get`, a shared
|
|
152
|
+
singleton) for data already loaded by the parent, rather than routing logic
|
|
153
|
+
living inside either model — the two stay sibling page models, and the
|
|
154
|
+
nesting is purely a rendering/URL concern.
|
|
155
|
+
|
|
110
156
|
## Middleware: guards as services
|
|
111
157
|
|
|
112
158
|
```ts
|
|
@@ -124,13 +170,16 @@ const AuthGuardLive = AuthGuard.layer((ctx) =>
|
|
|
124
170
|
}),
|
|
125
171
|
);
|
|
126
172
|
|
|
127
|
-
const adminRoutes =
|
|
173
|
+
const adminRoutes = Route.group(Dashboard, Users).middleware(AuthGuard);
|
|
128
174
|
```
|
|
129
175
|
|
|
130
176
|
Guards run BEFORE a navigation commits: a blocked URL never flashes. The
|
|
131
177
|
returned value lands typed in the route unit's `provided` port —
|
|
132
178
|
`Option.some` whenever the route is open, because the guard passing is what
|
|
133
|
-
let it open.
|
|
179
|
+
let it open. Attaching a guard to a route with declared children guards the
|
|
180
|
+
whole branch: `resolveMatches` walks the explicit ancestor chain, so the
|
|
181
|
+
guard runs once per navigation into that route OR any of its descendants —
|
|
182
|
+
never for an unrelated route that merely shares a path prefix.
|
|
134
183
|
|
|
135
184
|
## Complex search params
|
|
136
185
|
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AAQpC,mBAAmB,aAAa,CAAC;AAEjC;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,QAAQ;CAAG"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC"}
|
package/dist/public.d.ts
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The curated public surface re-exported as the `Router` namespace
|
|
3
|
-
*
|
|
2
|
+
* The curated public surface re-exported as the `Router` namespace: only
|
|
3
|
+
* what's genuinely about the whole app-level router. Route declaration and
|
|
4
|
+
* composition (`Route.make`, `Route.group`, `Route.addChild`, ...) lives
|
|
5
|
+
* under the `Route` namespace instead (`route.ts`) — a route is its own
|
|
6
|
+
* primitive, the same standing as a `Query` or a `Store`, not a verb inside
|
|
7
|
+
* `Router`. EXCEPT the controller plumbing
|
|
4
8
|
* (`RouterController`/`AnyRouterController`/`RouterControllerOf`): that is
|
|
5
9
|
* the synchronous read surface behind `outputs.api` — `react.tsx` and the
|
|
6
10
|
* `buildLocation`/`buildHref`/`matchRoute` helpers use it internally, but
|
|
7
11
|
* application code should never need to name it.
|
|
8
12
|
*/
|
|
9
|
-
export {
|
|
10
|
-
export type { SearchPrimitive, SearchValue, RawSearch, SearchRecord, PathParams, JoinPath, SearchCodec, AnySearchCodec, AnySchemaCodec, RouteContext, RouteOptions, Route, MiddlewareContext, MiddlewareHandler, MiddlewareClass, AnyMiddleware, ProvidesOf, RouteGroup, AnyRouteGroup, RoutesOf, ParsedLocation, RouterHistory, HistoryFactory, RouteMatch, RouterState, RouterOptions, ActiveOptions, Blocker, NavigatePayload, RouterShape, RouterModel, RouterTargets, RouteModel, PagesModel, AnyPagesModel, PagesShape, PageMap, RouteUnitShape, RouteShapes, RouteIds, AnyRouter, RegisteredRouter, RouterGroupOf, RouterIdOf, RouterRoutes, RoutePath, RouteByPath, MatchByPath, MatchUnion, ToOptions, NavigateOptions, } from "./router.js";
|
|
13
|
+
export { RedirectError, NotFoundError, isRedirectError, isNotFoundError, Middleware, make, History, browserHistoryLayer, hashHistoryLayer, memoryHistoryLayer, createMemoryHistory, createBrowserHistory, createHashHistory, defaultParseSearch, defaultStringifySearch, } from "./router.js";
|
|
14
|
+
export type { SearchPrimitive, SearchValue, RawSearch, SearchRecord, PathParams, JoinPath, SearchCodec, AnySearchCodec, AnySchemaCodec, RouteContext, RouteOptions, Route, MiddlewareContext, MiddlewareHandler, MiddlewareClass, AnyMiddleware, ProvidesOf, RouteGroup, AnyRouteGroup, RoutesOf, ParsedLocation, RouterHistory, HistoryFactory, RouteMatch, RouterState, RouterOptions, ActiveOptions, Blocker, NavigatePayload, RouterShape, RouterModel, RouterTargets, RouteModel, PagesModel, AnyPagesModel, PagesShape, PageMap, RouteUnitShape, RouteShapes, RouteIds, AnyRouter, RegisteredRouter, RouterGroupOf, RouterIdOf, RouterRoutes, RoutePath, RouteByPath, MatchByPath, MatchUnion, ToOptions, RawToOptions, NavigateOptions, AppRouter, } from "./router.js";
|
|
11
15
|
//# sourceMappingURL=public.d.ts.map
|
package/dist/public.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../src/public.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../src/public.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAEL,aAAa,EACb,aAAa,EACb,eAAe,EACf,eAAe,EAEf,UAAU,EAEV,IAAI,EAGJ,OAAO,EACP,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,eAAe,EACf,WAAW,EACX,SAAS,EACT,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,WAAW,EACX,cAAc,EACd,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,KAAK,EACL,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,UAAU,EACV,UAAU,EACV,aAAa,EACb,QAAQ,EACR,cAAc,EACd,aAAa,EACb,cAAc,EACd,UAAU,EACV,WAAW,EACX,aAAa,EACb,aAAa,EACb,OAAO,EACP,eAAe,EACf,WAAW,EACX,WAAW,EACX,aAAa,EACb,UAAU,EACV,UAAU,EACV,aAAa,EACb,UAAU,EACV,OAAO,EACP,cAAc,EACd,WAAW,EACX,QAAQ,EACR,SAAS,EACT,gBAAgB,EAChB,aAAa,EACb,UAAU,EACV,YAAY,EACZ,SAAS,EACT,WAAW,EACX,WAAW,EACX,UAAU,EACV,SAAS,EACT,YAAY,EACZ,eAAe,EACf,SAAS,GACV,MAAM,aAAa,CAAC"}
|
package/dist/public.js
CHANGED
|
@@ -1,19 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The curated public surface re-exported as the `Router` namespace
|
|
3
|
-
*
|
|
2
|
+
* The curated public surface re-exported as the `Router` namespace: only
|
|
3
|
+
* what's genuinely about the whole app-level router. Route declaration and
|
|
4
|
+
* composition (`Route.make`, `Route.group`, `Route.addChild`, ...) lives
|
|
5
|
+
* under the `Route` namespace instead (`route.ts`) — a route is its own
|
|
6
|
+
* primitive, the same standing as a `Query` or a `Store`, not a verb inside
|
|
7
|
+
* `Router`. EXCEPT the controller plumbing
|
|
4
8
|
* (`RouterController`/`AnyRouterController`/`RouterControllerOf`): that is
|
|
5
9
|
* the synchronous read surface behind `outputs.api` — `react.tsx` and the
|
|
6
10
|
* `buildLocation`/`buildHref`/`matchRoute` helpers use it internally, but
|
|
7
11
|
* application code should never need to name it.
|
|
8
12
|
*/
|
|
9
13
|
export {
|
|
10
|
-
// route + group construction
|
|
11
|
-
search, schemaSearch, isRoute, route, group, makeGroup, add, merge, prefix, routes,
|
|
12
14
|
// redirect / not-found
|
|
13
15
|
RedirectError, NotFoundError, isRedirectError, isNotFoundError,
|
|
14
16
|
// middleware
|
|
15
17
|
Middleware,
|
|
16
|
-
//
|
|
18
|
+
// the AppRouter constructor
|
|
17
19
|
make,
|
|
18
20
|
// histories — provided as layers; the create* factories stay exported for
|
|
19
21
|
// custom History implementations
|
package/dist/public.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public.js","sourceRoot":"","sources":["../src/public.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"public.js","sourceRoot":"","sources":["../src/public.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO;AACL,uBAAuB;AACvB,aAAa,EACb,aAAa,EACb,eAAe,EACf,eAAe;AACf,aAAa;AACb,UAAU;AACV,4BAA4B;AAC5B,IAAI;AACJ,0EAA0E;AAC1E,iCAAiC;AACjC,OAAO,EACP,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,aAAa,CAAC"}
|
package/dist/react.d.ts
CHANGED
|
@@ -42,18 +42,30 @@ type BoundaryComponent<M extends Router.AnyRouter = Router.RegisteredRouter> = (
|
|
|
42
42
|
type RouteById<M extends Router.AnyRouter, Id> = Extract<Router.RouterRoutes<M>, {
|
|
43
43
|
readonly id: Id;
|
|
44
44
|
}>;
|
|
45
|
+
/** What a route id may bind to: a plain component, a model-bound view (see
|
|
46
|
+
* {@link ModelViewEntry}), or — when that route has declared children via
|
|
47
|
+
* `Route.addChild`/`Route.layout` — a `{ view, routes }` node whose nested
|
|
48
|
+
* `routes` mirrors those children one-to-one. `view` still renders the
|
|
49
|
+
* matched descendant as `children`, exactly like the flat shorthand does. */
|
|
50
|
+
export type RouteNode<M extends Router.AnyRouter, Id extends Router.RouteIds<Router.RouterGroupOf<M>>, Units> = RouteComponent<M, Router.RouteMatch<RouteById<M, Id>>, Units> | ModelViewEntry | {
|
|
51
|
+
readonly view: RouteComponent<M, Router.RouteMatch<RouteById<M, Id>>, Units> | ModelViewEntry;
|
|
52
|
+
readonly routes?: RoutesConfig<M, Units>;
|
|
53
|
+
};
|
|
54
|
+
export type RoutesConfig<M extends Router.AnyRouter = Router.RegisteredRouter, Units = void> = {
|
|
55
|
+
readonly [Id in Router.RouteIds<Router.RouterGroupOf<M>>]?: RouteNode<M, Id, Units>;
|
|
56
|
+
};
|
|
45
57
|
/**
|
|
46
58
|
* The one place a router meets rendering: a route only declares `model` (or
|
|
47
59
|
* nothing) — never a component. This map supplies the actual view for each
|
|
48
60
|
* route id, plus the pending/error/not-found boundaries, entirely outside
|
|
49
61
|
* `@unitflow/router` itself. Keys are constrained to the router's actual
|
|
50
62
|
* route ids (a typo will not compile), and each view's `match` is narrowed
|
|
51
|
-
* to ITS route's params/search types.
|
|
63
|
+
* to ITS route's params/search types. Nesting a `{ view, routes }` node
|
|
64
|
+
* under a route mirrors that route's declared `Route.addChild`/`Route.layout`
|
|
65
|
+
* children — a plain entry (no `routes`) leaves any deeper match unwrapped.
|
|
52
66
|
*/
|
|
53
67
|
export interface RouterViews<M extends Router.AnyRouter = Router.RegisteredRouter, Units = void> {
|
|
54
|
-
readonly routes:
|
|
55
|
-
readonly [Id in Router.RouteIds<Router.RouterGroupOf<M>>]?: RouteComponent<M, Router.RouteMatch<RouteById<M, Id>>, Units> | ModelViewEntry;
|
|
56
|
-
};
|
|
68
|
+
readonly routes: RoutesConfig<M, Units>;
|
|
57
69
|
readonly pending?: BoundaryComponent<M>;
|
|
58
70
|
readonly error?: BoundaryComponent<M>;
|
|
59
71
|
readonly notFound?: BoundaryComponent<M>;
|
package/dist/react.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../src/react.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,KAAK,EAAoB,MAAM,iBAAiB,CAAC;AAC/D,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAEtC,KAAK,UAAU,CAAC,CAAC,SAAS,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;AAE3E,MAAM,WAAW,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,gBAAgB;IAC/E;;;;kBAIc;IACd,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3D,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,cAAc,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,CACjB,OAAO,EAAE,MAAM,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,KAC5E,IAAI,CAAC;CACX;AAED,MAAM,MAAM,cAAc,CACxB,CAAC,SAAS,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,gBAAgB,EACpD,KAAK,SAAS,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EACtD,KAAK,GAAG,IAAI,IACV,CAAC,KAAK,EAAE;IACV,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB;+DAC2D;IAC3D,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CACpC,KAAK,KAAK,CAAC,SAAS,CAAC;AAEtB;;;;;;;uCAOuC;AACvC,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;CACjC;AAED,KAAK,iBAAiB,CAAC,CAAC,SAAS,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,gBAAgB,IAAI,CAAC,KAAK,EAAE;IACrF,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACnC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B,KAAK,KAAK,CAAC,SAAS,CAAC;AAEtB,KAAK,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,SAAS,EAAE,EAAE,IAAI,OAAO,CACtD,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,EACtB;IAAE,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAA;CAAE,CACpB,CAAC;
|
|
1
|
+
{"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../src/react.tsx"],"names":[],"mappings":"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"}
|
package/dist/react.js
CHANGED
|
@@ -19,17 +19,34 @@ export function Matches({ router, views, units, pages, }) {
|
|
|
19
19
|
if (state.status === "pending" && state.matches.length === 0) {
|
|
20
20
|
return views.pending === undefined ? null : _jsx(_Fragment, { children: views.pending({ router }) });
|
|
21
21
|
}
|
|
22
|
-
return (_jsx(MatchRenderer, { router: router,
|
|
22
|
+
return (_jsx(MatchRenderer, { router: router, nodes: views.routes, units: units, pages: pages, state: state, index: 0 }));
|
|
23
23
|
}
|
|
24
|
+
/** Walks the (possibly nested) routes config collecting every route id's
|
|
25
|
+
* page model, wherever in the tree it's declared — a `{ view, routes }`
|
|
26
|
+
* node's own `view` counts just like a top-level shorthand entry does. */
|
|
27
|
+
const collectPageModels = (nodes, into) => {
|
|
28
|
+
for (const [routeId, entry] of Object.entries(nodes)) {
|
|
29
|
+
if (entry === undefined)
|
|
30
|
+
continue;
|
|
31
|
+
if (typeof entry === "function" && "model" in entry) {
|
|
32
|
+
into[routeId] = entry.model;
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
if (typeof entry === "object" && entry !== null && "view" in entry) {
|
|
36
|
+
const node = entry;
|
|
37
|
+
if (typeof node.view === "function" && "model" in node.view) {
|
|
38
|
+
into[routeId] = node.view.model;
|
|
39
|
+
}
|
|
40
|
+
if (node.routes !== undefined)
|
|
41
|
+
collectPageModels(node.routes, into);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
};
|
|
24
45
|
const makeRouterView = (router, views) => {
|
|
25
46
|
// Stitch: pull the models out of the views map and let the router build
|
|
26
47
|
// its pages model around them.
|
|
27
48
|
const pageModels = {};
|
|
28
|
-
|
|
29
|
-
if (typeof entry === "function" && "model" in entry) {
|
|
30
|
-
pageModels[routeId] = entry.model;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
49
|
+
collectPageModels(views.routes, pageModels);
|
|
33
50
|
const pagesModel = Router.makePages(router, pageModels);
|
|
34
51
|
const Bound = UnitView.make(
|
|
35
52
|
// The pages model carries its router value (typed opaquely — cycle
|
|
@@ -45,25 +62,36 @@ const makeRouterView = (router, views) => {
|
|
|
45
62
|
};
|
|
46
63
|
export const RouterView = { make: makeRouterView };
|
|
47
64
|
export const View = RouterView;
|
|
48
|
-
|
|
65
|
+
/** True for a `{ view, routes }` tree node — distinguished from a bare
|
|
66
|
+
* `RouteComponent`/`ModelViewEntry` entry by NOT being callable: both of
|
|
67
|
+
* those are always functions (a `ModelViewEntry` is `View.make`'s callable
|
|
68
|
+
* result with a `.model` static, same shape `RouterViewComponent` itself
|
|
69
|
+
* has), while a nesting node is a plain object literal. */
|
|
70
|
+
const isRouteTreeNode = (value) => typeof value === "object" && value !== null && "view" in value;
|
|
71
|
+
const MatchRenderer = ({ router, nodes, units, pages, state, index, }) => {
|
|
49
72
|
const match = state.matches[index];
|
|
50
73
|
if (match === undefined)
|
|
51
74
|
return null;
|
|
52
75
|
// The runtime id is erased to `string`; the map itself is keyed strictly.
|
|
53
|
-
|
|
54
|
-
const
|
|
76
|
+
const entry = nodes[match.route.id];
|
|
77
|
+
const isNode = isRouteTreeNode(entry);
|
|
78
|
+
const view = entry === undefined ? undefined : isNode ? entry.view : entry;
|
|
79
|
+
// A node without a declared `routes` sub-tree (or no entry at all) has
|
|
80
|
+
// nothing to look up a deeper match against — descendants beyond that
|
|
81
|
+
// point render unwrapped, mirroring the flat map's old "no entry" case.
|
|
82
|
+
const nextNodes = isNode && entry.routes !== undefined ? entry.routes : {};
|
|
55
83
|
// `null` (not an empty renderer element) when no deeper match exists, so
|
|
56
84
|
// a layout's `children ?? fallback` — and a parent page deciding between
|
|
57
85
|
// its own content and a child's — actually work.
|
|
58
|
-
const child = index + 1 < state.matches.length ? (_jsx(MatchRenderer, { router: router,
|
|
59
|
-
if (
|
|
86
|
+
const child = index + 1 < state.matches.length ? (_jsx(MatchRenderer, { router: router, nodes: nextNodes, units: units, pages: pages, state: state, index: index + 1 })) : null;
|
|
87
|
+
if (view === undefined)
|
|
60
88
|
return child;
|
|
61
|
-
if ("model" in
|
|
89
|
+
if ("model" in view) {
|
|
62
90
|
// A model-bound view: its unit was leased by the pages model.
|
|
63
|
-
const PageView =
|
|
91
|
+
const PageView = view;
|
|
64
92
|
return (_jsx(PageView, { unit: pages[match.route.id], children: child }));
|
|
65
93
|
}
|
|
66
|
-
const RouteView =
|
|
94
|
+
const RouteView = view;
|
|
67
95
|
return (_jsx(RouteView, { router: router, match: match, units: units, children: child }));
|
|
68
96
|
};
|
|
69
97
|
/** The bound router `RouterView` provides to everything it renders, so
|
package/dist/react.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react.js","sourceRoot":"","sources":["../src/react.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAc,IAAI,IAAI,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"react.js","sourceRoot":"","sources":["../src/react.tsx"],"names":[],"mappings":"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"}
|
package/dist/route.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `Route` namespace: everything for declaring and composing routes —
|
|
3
|
+
* `Route.make` (was `Router.route`), `Route.group` (was `Router.group`),
|
|
4
|
+
* plus the pipeable combinators (`addChild`, `layout`, `middleware`,
|
|
5
|
+
* `prefix`) that build up a route's hierarchy and cross-cutting concerns.
|
|
6
|
+
* `Router` (see `public.ts`) keeps only what's genuinely about the whole
|
|
7
|
+
* app-level router: `Router.make` (the `AppRouter` constructor),
|
|
8
|
+
* `Router.Middleware`, `Router.RedirectError`/`NotFoundError`, and the
|
|
9
|
+
* history layers.
|
|
10
|
+
*/
|
|
11
|
+
export { type AnyRouteGroup, type Route, type RouteGroup, type AnySearchCodec, type SearchCodec, addChild, route as make, add, group, isRoute, layout, merge, middleware, prefix, routes, schemaSearch, search, } from "./router.js";
|
|
12
|
+
//# sourceMappingURL=route.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../src/route.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,KAAK,EACV,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,QAAQ,EACR,KAAK,IAAI,IAAI,EACb,GAAG,EACH,KAAK,EACL,OAAO,EACP,MAAM,EACN,KAAK,EACL,UAAU,EACV,MAAM,EACN,MAAM,EACN,YAAY,EACZ,MAAM,GACP,MAAM,aAAa,CAAC"}
|
package/dist/route.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `Route` namespace: everything for declaring and composing routes —
|
|
3
|
+
* `Route.make` (was `Router.route`), `Route.group` (was `Router.group`),
|
|
4
|
+
* plus the pipeable combinators (`addChild`, `layout`, `middleware`,
|
|
5
|
+
* `prefix`) that build up a route's hierarchy and cross-cutting concerns.
|
|
6
|
+
* `Router` (see `public.ts`) keeps only what's genuinely about the whole
|
|
7
|
+
* app-level router: `Router.make` (the `AppRouter` constructor),
|
|
8
|
+
* `Router.Middleware`, `Router.RedirectError`/`NotFoundError`, and the
|
|
9
|
+
* history layers.
|
|
10
|
+
*/
|
|
11
|
+
export { addChild, route as make, add, group, isRoute, layout, merge, middleware, prefix, routes, schemaSearch, search, } from "./router.js";
|
|
12
|
+
//# sourceMappingURL=route.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route.js","sourceRoot":"","sources":["../src/route.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAML,QAAQ,EACR,KAAK,IAAI,IAAI,EACb,GAAG,EACH,KAAK,EACL,OAAO,EACP,MAAM,EACN,KAAK,EACL,UAAU,EACV,MAAM,EACN,MAAM,EACN,YAAY,EACZ,MAAM,GACP,MAAM,aAAa,CAAC"}
|