fibrae 0.3.0 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/atom-utils.d.ts +52 -0
- package/dist/atom-utils.js +64 -0
- package/dist/atom-utils.js.map +1 -0
- package/dist/cli/build.js +2 -2
- package/dist/cli/build.js.map +1 -1
- package/dist/cli/html.d.ts +6 -0
- package/dist/cli/html.js +20 -26
- package/dist/cli/html.js.map +1 -1
- package/dist/cli/vite-plugin.js +41 -2
- package/dist/cli/vite-plugin.js.map +1 -1
- package/dist/components.d.ts +3 -3
- package/dist/components.js +3 -1
- package/dist/components.js.map +1 -1
- package/dist/core.js +37 -10
- package/dist/core.js.map +1 -1
- package/dist/dom.d.ts +22 -3
- package/dist/dom.js +100 -5
- package/dist/dom.js.map +1 -1
- package/dist/fiber-commit.d.ts +2 -0
- package/dist/fiber-commit.js +179 -40
- package/dist/fiber-commit.js.map +1 -1
- package/dist/fiber-render.js +13 -27
- package/dist/fiber-render.js.map +1 -1
- package/dist/fiber-update.d.ts +1 -1
- package/dist/fiber-update.js +33 -12
- package/dist/fiber-update.js.map +1 -1
- package/dist/h.d.ts +65 -10
- package/dist/h.js +98 -22
- package/dist/h.js.map +1 -1
- package/dist/head.d.ts +64 -0
- package/dist/head.js +257 -0
- package/dist/head.js.map +1 -0
- package/dist/hydration-dev.d.ts +24 -0
- package/dist/hydration-dev.js +138 -0
- package/dist/hydration-dev.js.map +1 -0
- package/dist/index.d.ts +6 -2
- package/dist/index.js +5 -2
- package/dist/index.js.map +1 -1
- package/dist/jsx-runtime/index.d.ts +288 -8
- package/dist/jsx-runtime/index.js +2 -0
- package/dist/jsx-runtime/index.js.map +1 -1
- package/dist/live/client.js +4 -4
- package/dist/live/client.js.map +1 -1
- package/dist/live/server.js.map +1 -1
- package/dist/live/sse-stream.js +2 -2
- package/dist/live/sse-stream.js.map +1 -1
- package/dist/mdx/index.d.ts +125 -0
- package/dist/mdx/index.js +137 -0
- package/dist/mdx/index.js.map +1 -0
- package/dist/mdx/parse.d.ts +42 -0
- package/dist/mdx/parse.js +147 -0
- package/dist/mdx/parse.js.map +1 -0
- package/dist/mdx/render.d.ts +24 -0
- package/dist/mdx/render.js +261 -0
- package/dist/mdx/render.js.map +1 -0
- package/dist/router/Form.d.ts +90 -0
- package/dist/router/Form.js +166 -0
- package/dist/router/Form.js.map +1 -0
- package/dist/router/History.d.ts +2 -2
- package/dist/router/History.js.map +1 -1
- package/dist/router/Link.d.ts +27 -32
- package/dist/router/Link.js +56 -98
- package/dist/router/Link.js.map +1 -1
- package/dist/router/Navigator.d.ts +49 -44
- package/dist/router/Navigator.js +57 -104
- package/dist/router/Navigator.js.map +1 -1
- package/dist/router/Route.d.ts +8 -4
- package/dist/router/Route.js +10 -2
- package/dist/router/Route.js.map +1 -1
- package/dist/router/Router.d.ts +10 -10
- package/dist/router/Router.js +38 -23
- package/dist/router/Router.js.map +1 -1
- package/dist/router/RouterBuilder.d.ts +69 -6
- package/dist/router/RouterBuilder.js +23 -0
- package/dist/router/RouterBuilder.js.map +1 -1
- package/dist/router/RouterOutlet.js +63 -45
- package/dist/router/RouterOutlet.js.map +1 -1
- package/dist/router/index.d.ts +10 -3
- package/dist/router/index.js +5 -2
- package/dist/router/index.js.map +1 -1
- package/dist/router/register.d.ts +37 -0
- package/dist/router/register.js +18 -0
- package/dist/router/register.js.map +1 -0
- package/dist/router/utils.d.ts +2 -2
- package/dist/runtime.d.ts +1 -1
- package/dist/server.js +7 -3
- package/dist/server.js.map +1 -1
- package/dist/shared.d.ts +36 -6
- package/dist/shared.js +12 -2
- package/dist/shared.js.map +1 -1
- package/dist/tracking.d.ts +3 -2
- package/dist/tracking.js +4 -1
- package/dist/tracking.js.map +1 -1
- package/dist/transition.d.ts +51 -0
- package/dist/transition.js +46 -0
- package/dist/transition.js.map +1 -0
- package/package.json +16 -3
|
@@ -1,22 +1,47 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Navigator service -
|
|
2
|
+
* Navigator service - path-based navigation.
|
|
3
3
|
*
|
|
4
|
-
* Provides
|
|
5
|
-
* - nav.go("
|
|
4
|
+
* Provides navigation on top of History:
|
|
5
|
+
* - nav.go("/posts/42") — push to history
|
|
6
|
+
* - nav.go("/posts/42", { replace: true, search: { sort: "date" } })
|
|
6
7
|
* - nav.back, nav.forward
|
|
7
|
-
* - nav.isActive("routeName", params) for active link detection
|
|
8
8
|
* - currentRoute Atom reflects matched route info
|
|
9
|
+
* - currentPathname for active link detection
|
|
9
10
|
*
|
|
10
|
-
* Design: Navigator uses History internally but provides
|
|
11
|
-
*
|
|
11
|
+
* Design: Navigator uses History internally but provides a higher-level API.
|
|
12
|
+
* Route matching is reactive via History location subscription.
|
|
12
13
|
*/
|
|
13
14
|
import * as Effect from "effect/Effect";
|
|
14
15
|
import * as Context from "effect/Context";
|
|
15
16
|
import * as Layer from "effect/Layer";
|
|
16
17
|
import * as Option from "effect/Option";
|
|
18
|
+
import * as Schema from "effect/Schema";
|
|
17
19
|
import { Atom, Registry as AtomRegistry } from "@effect-atom/atom";
|
|
18
20
|
import { History } from "./History.js";
|
|
19
21
|
import type { Router } from "./Router.js";
|
|
22
|
+
declare const Redirect_base: Schema.TaggedErrorClass<Redirect, "Redirect", {
|
|
23
|
+
readonly _tag: Schema.tag<"Redirect">;
|
|
24
|
+
} & {
|
|
25
|
+
to: typeof Schema.String;
|
|
26
|
+
replace: Schema.optional<typeof Schema.Boolean>;
|
|
27
|
+
}>;
|
|
28
|
+
/**
|
|
29
|
+
* Tagged error for redirecting from loaders, actions, or middleware.
|
|
30
|
+
*
|
|
31
|
+
* Throw this from a loader to redirect before the component renders:
|
|
32
|
+
* ```typescript
|
|
33
|
+
* loader: () => Effect.gen(function* () {
|
|
34
|
+
* const session = yield* getSession()
|
|
35
|
+
* if (!session) return yield* new Redirect({ to: "/login" })
|
|
36
|
+
* return yield* fetchData()
|
|
37
|
+
* })
|
|
38
|
+
* ```
|
|
39
|
+
*
|
|
40
|
+
* The router catches Redirect before the error reaches ErrorBoundary
|
|
41
|
+
* and navigates to the target path.
|
|
42
|
+
*/
|
|
43
|
+
export declare class Redirect extends Redirect_base {
|
|
44
|
+
}
|
|
20
45
|
/**
|
|
21
46
|
* Current route info - what route is currently matched.
|
|
22
47
|
*/
|
|
@@ -30,29 +55,38 @@ export interface CurrentRoute {
|
|
|
30
55
|
/**
|
|
31
56
|
* Navigation options for go().
|
|
32
57
|
*/
|
|
33
|
-
export interface NavigateOptions
|
|
34
|
-
readonly
|
|
35
|
-
readonly searchParams?: SearchParams;
|
|
58
|
+
export interface NavigateOptions {
|
|
59
|
+
readonly search?: Record<string, unknown>;
|
|
36
60
|
readonly replace?: boolean;
|
|
61
|
+
/** Enable View Transitions API for this navigation (CSS-driven animations) */
|
|
62
|
+
readonly viewTransition?: boolean;
|
|
37
63
|
}
|
|
38
64
|
/**
|
|
39
65
|
* Navigator service interface.
|
|
40
|
-
* Provides
|
|
66
|
+
* Provides path-based navigation.
|
|
41
67
|
*/
|
|
42
68
|
export interface NavigatorService {
|
|
69
|
+
/**
|
|
70
|
+
* The router instance used for route matching.
|
|
71
|
+
*/
|
|
72
|
+
readonly router: Router;
|
|
43
73
|
/**
|
|
44
74
|
* Base path prefix for all routes (e.g., "/ssr/router").
|
|
45
75
|
* Used for apps mounted at non-root paths.
|
|
46
76
|
*/
|
|
47
77
|
readonly basePath: string;
|
|
78
|
+
/**
|
|
79
|
+
* Current pathname (without basePath). Updated on navigation.
|
|
80
|
+
*/
|
|
81
|
+
readonly currentPathname: string;
|
|
48
82
|
/**
|
|
49
83
|
* Current matched route info - updates on navigation.
|
|
50
84
|
*/
|
|
51
85
|
readonly currentRoute: Atom.Writable<Option.Option<CurrentRoute>, Option.Option<CurrentRoute>>;
|
|
52
86
|
/**
|
|
53
|
-
* Navigate to a
|
|
87
|
+
* Navigate to a path.
|
|
54
88
|
*/
|
|
55
|
-
readonly go: (
|
|
89
|
+
readonly go: (href: string, options?: NavigateOptions) => Effect.Effect<void, never, AtomRegistry.AtomRegistry>;
|
|
56
90
|
/**
|
|
57
91
|
* Go back in history.
|
|
58
92
|
*/
|
|
@@ -62,10 +96,9 @@ export interface NavigatorService {
|
|
|
62
96
|
*/
|
|
63
97
|
readonly forward: Effect.Effect<void, never, AtomRegistry.AtomRegistry>;
|
|
64
98
|
/**
|
|
65
|
-
* Check if a
|
|
66
|
-
* Optionally match specific params.
|
|
99
|
+
* Check if a path is currently active.
|
|
67
100
|
*/
|
|
68
|
-
readonly isActive: (
|
|
101
|
+
readonly isActive: (href: string) => Effect.Effect<boolean, never, AtomRegistry.AtomRegistry>;
|
|
69
102
|
}
|
|
70
103
|
declare const Navigator_base: Context.TagClass<Navigator, "fibrae/Navigator", NavigatorService>;
|
|
71
104
|
/**
|
|
@@ -84,38 +117,10 @@ export interface NavigatorOptions {
|
|
|
84
117
|
* Create a Navigator layer for the given router.
|
|
85
118
|
*
|
|
86
119
|
* Features:
|
|
87
|
-
* -
|
|
88
|
-
* - Automatic URL building via route.interpolate
|
|
120
|
+
* - Path-based navigation
|
|
89
121
|
* - Tracks current matched route in an Atom
|
|
90
122
|
* - Delegates to History for actual navigation
|
|
91
123
|
* - Supports basePath for apps mounted at non-root paths
|
|
92
124
|
*/
|
|
93
125
|
export declare function NavigatorLive(router: Router, navigatorOptions?: NavigatorOptions): Layer.Layer<Navigator, never, History | AtomRegistry.AtomRegistry>;
|
|
94
|
-
/**
|
|
95
|
-
* Create a typed go() function constrained to valid route names.
|
|
96
|
-
*
|
|
97
|
-
* Usage:
|
|
98
|
-
* ```typescript
|
|
99
|
-
* const go = createGo(AppRouter);
|
|
100
|
-
* yield* go("posts"); // OK
|
|
101
|
-
* yield* go("typo"); // compile-time error!
|
|
102
|
-
* ```
|
|
103
|
-
*/
|
|
104
|
-
export declare function createGo<RouteNames extends string>(_router: Router<string, RouteNames>): (routeName: RouteNames, options?: NavigateOptions) => Effect.Effect<void, never, Navigator | AtomRegistry.AtomRegistry>;
|
|
105
|
-
/**
|
|
106
|
-
* Navigate to a route by name.
|
|
107
|
-
*/
|
|
108
|
-
export declare const go: (routeName: string, options?: NavigateOptions<Record<string, unknown>, Record<string, unknown>> | undefined) => Effect.Effect<void, never, AtomRegistry.AtomRegistry | Navigator>;
|
|
109
|
-
/**
|
|
110
|
-
* Go back in history.
|
|
111
|
-
*/
|
|
112
|
-
export declare const back: Effect.Effect<void, never, Navigator | AtomRegistry.AtomRegistry>;
|
|
113
|
-
/**
|
|
114
|
-
* Go forward in history.
|
|
115
|
-
*/
|
|
116
|
-
export declare const forward: Effect.Effect<void, never, Navigator | AtomRegistry.AtomRegistry>;
|
|
117
|
-
/**
|
|
118
|
-
* Get current route info.
|
|
119
|
-
*/
|
|
120
|
-
export declare const getCurrentRoute: Effect.Effect<Option.Option<CurrentRoute>, never, Navigator | AtomRegistry.AtomRegistry>;
|
|
121
126
|
export {};
|
package/dist/router/Navigator.js
CHANGED
|
@@ -1,22 +1,47 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Navigator service -
|
|
2
|
+
* Navigator service - path-based navigation.
|
|
3
3
|
*
|
|
4
|
-
* Provides
|
|
5
|
-
* - nav.go("
|
|
4
|
+
* Provides navigation on top of History:
|
|
5
|
+
* - nav.go("/posts/42") — push to history
|
|
6
|
+
* - nav.go("/posts/42", { replace: true, search: { sort: "date" } })
|
|
6
7
|
* - nav.back, nav.forward
|
|
7
|
-
* - nav.isActive("routeName", params) for active link detection
|
|
8
8
|
* - currentRoute Atom reflects matched route info
|
|
9
|
+
* - currentPathname for active link detection
|
|
9
10
|
*
|
|
10
|
-
* Design: Navigator uses History internally but provides
|
|
11
|
-
*
|
|
11
|
+
* Design: Navigator uses History internally but provides a higher-level API.
|
|
12
|
+
* Route matching is reactive via History location subscription.
|
|
12
13
|
*/
|
|
13
14
|
import * as Effect from "effect/Effect";
|
|
14
15
|
import * as Context from "effect/Context";
|
|
15
16
|
import * as Layer from "effect/Layer";
|
|
16
17
|
import * as Option from "effect/Option";
|
|
18
|
+
import * as Schema from "effect/Schema";
|
|
17
19
|
import { Atom, Registry as AtomRegistry } from "@effect-atom/atom";
|
|
18
20
|
import { History } from "./History.js";
|
|
19
|
-
import { parseSearchParams, buildSearchString, stripBasePath
|
|
21
|
+
import { parseSearchParams, buildSearchString, stripBasePath } from "./utils.js";
|
|
22
|
+
// =============================================================================
|
|
23
|
+
// Redirect
|
|
24
|
+
// =============================================================================
|
|
25
|
+
/**
|
|
26
|
+
* Tagged error for redirecting from loaders, actions, or middleware.
|
|
27
|
+
*
|
|
28
|
+
* Throw this from a loader to redirect before the component renders:
|
|
29
|
+
* ```typescript
|
|
30
|
+
* loader: () => Effect.gen(function* () {
|
|
31
|
+
* const session = yield* getSession()
|
|
32
|
+
* if (!session) return yield* new Redirect({ to: "/login" })
|
|
33
|
+
* return yield* fetchData()
|
|
34
|
+
* })
|
|
35
|
+
* ```
|
|
36
|
+
*
|
|
37
|
+
* The router catches Redirect before the error reaches ErrorBoundary
|
|
38
|
+
* and navigates to the target path.
|
|
39
|
+
*/
|
|
40
|
+
export class Redirect extends Schema.TaggedError()("Redirect", {
|
|
41
|
+
to: Schema.String,
|
|
42
|
+
replace: Schema.optional(Schema.Boolean),
|
|
43
|
+
}) {
|
|
44
|
+
}
|
|
20
45
|
// =============================================================================
|
|
21
46
|
// Service Tag
|
|
22
47
|
// =============================================================================
|
|
@@ -28,10 +53,6 @@ export class Navigator extends Context.Tag("fibrae/Navigator")() {
|
|
|
28
53
|
// =============================================================================
|
|
29
54
|
// Helpers
|
|
30
55
|
// =============================================================================
|
|
31
|
-
/**
|
|
32
|
-
* Parse search params from URL search string.
|
|
33
|
-
*/
|
|
34
|
-
// parseSearchParams, buildSearchString, stripBasePath imported from ./utils.js
|
|
35
56
|
/**
|
|
36
57
|
* Match current location against router and return CurrentRoute.
|
|
37
58
|
* Returns Effect since route matching uses Schema.decodeUnknown.
|
|
@@ -48,8 +69,7 @@ function matchLocation(router, location, basePath = "") {
|
|
|
48
69
|
* Create a Navigator layer for the given router.
|
|
49
70
|
*
|
|
50
71
|
* Features:
|
|
51
|
-
* -
|
|
52
|
-
* - Automatic URL building via route.interpolate
|
|
72
|
+
* - Path-based navigation
|
|
53
73
|
* - Tracks current matched route in an Atom
|
|
54
74
|
* - Delegates to History for actual navigation
|
|
55
75
|
* - Supports basePath for apps mounted at non-root paths
|
|
@@ -63,117 +83,50 @@ export function NavigatorLive(router, navigatorOptions = {}) {
|
|
|
63
83
|
const initialLocation = registry.get(history.location);
|
|
64
84
|
const initialRoute = yield* matchLocation(router, initialLocation, basePath);
|
|
65
85
|
const currentRouteAtom = Atom.make(initialRoute);
|
|
86
|
+
// Track current pathname (mutable for synchronous access from Link)
|
|
87
|
+
let currentPathname = stripBasePath(initialLocation.pathname, basePath);
|
|
66
88
|
// Subscribe to location changes to update currentRoute.
|
|
67
|
-
// This handles popstate events (browser back/forward) automatically.
|
|
68
89
|
// Effect.runSync is safe here: matchPath is pure computation with no requirements.
|
|
69
90
|
const unsubscribe = registry.subscribe(history.location, (location) => {
|
|
70
91
|
const matched = Effect.runSync(matchLocation(router, location, basePath));
|
|
71
92
|
registry.set(currentRouteAtom, matched);
|
|
93
|
+
currentPathname = stripBasePath(location.pathname, basePath);
|
|
72
94
|
});
|
|
73
95
|
// Cleanup subscription when scope closes
|
|
74
96
|
yield* Effect.addFinalizer(() => Effect.sync(unsubscribe));
|
|
75
97
|
const service = {
|
|
98
|
+
router,
|
|
76
99
|
basePath,
|
|
100
|
+
get currentPathname() {
|
|
101
|
+
return currentPathname;
|
|
102
|
+
},
|
|
77
103
|
currentRoute: currentRouteAtom,
|
|
78
|
-
go: (
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
104
|
+
go: (href, options = {}) => Effect.gen(function* () {
|
|
105
|
+
// Validate route exists before navigating
|
|
106
|
+
const matched = yield* router.matchRoute(href);
|
|
107
|
+
if (Option.isNone(matched)) {
|
|
108
|
+
yield* Effect.logWarning(`No route matches path: ${href}`);
|
|
83
109
|
}
|
|
84
|
-
const
|
|
85
|
-
const
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
? buildSearchString(navigateOptions.searchParams)
|
|
93
|
-
: "";
|
|
94
|
-
const url = `${pathname}${search}`;
|
|
95
|
-
// Navigate - currentRoute updates automatically via derived atom
|
|
96
|
-
if (navigateOptions.replace) {
|
|
97
|
-
yield* history.replace(url);
|
|
110
|
+
const searchString = options.search ? buildSearchString(options.search) : "";
|
|
111
|
+
const url = `${basePath}${href}${searchString}`;
|
|
112
|
+
const nav = options.replace ? history.replace(url) : history.push(url);
|
|
113
|
+
if (options.viewTransition && typeof document.startViewTransition === "function") {
|
|
114
|
+
yield* nav;
|
|
115
|
+
document.startViewTransition(async () => {
|
|
116
|
+
await new Promise((r) => requestAnimationFrame(() => requestAnimationFrame(() => r())));
|
|
117
|
+
});
|
|
98
118
|
}
|
|
99
119
|
else {
|
|
100
|
-
yield*
|
|
120
|
+
yield* nav;
|
|
101
121
|
}
|
|
102
|
-
})
|
|
122
|
+
}),
|
|
103
123
|
// Back/forward - currentRoute updates automatically when history.location
|
|
104
|
-
// changes (popstate handler updates locationAtom,
|
|
124
|
+
// changes (popstate handler updates locationAtom, subscription recomputes)
|
|
105
125
|
back: history.back,
|
|
106
126
|
forward: history.forward,
|
|
107
|
-
isActive: (
|
|
108
|
-
const current = yield* Atom.get(currentRouteAtom);
|
|
109
|
-
if (Option.isNone(current)) {
|
|
110
|
-
return false;
|
|
111
|
-
}
|
|
112
|
-
if (current.value.routeName !== routeName) {
|
|
113
|
-
return false;
|
|
114
|
-
}
|
|
115
|
-
// If params provided, check they match
|
|
116
|
-
if (params) {
|
|
117
|
-
for (const [key, value] of Object.entries(params)) {
|
|
118
|
-
if (current.value.params[key] !== value) {
|
|
119
|
-
return false;
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
return true;
|
|
124
|
-
}),
|
|
127
|
+
isActive: (href) => Effect.succeed(currentPathname === href),
|
|
125
128
|
};
|
|
126
129
|
return service;
|
|
127
130
|
}));
|
|
128
131
|
}
|
|
129
|
-
// =============================================================================
|
|
130
|
-
// Convenience Accessors
|
|
131
|
-
// =============================================================================
|
|
132
|
-
/**
|
|
133
|
-
* Create a typed go() function constrained to valid route names.
|
|
134
|
-
*
|
|
135
|
-
* Usage:
|
|
136
|
-
* ```typescript
|
|
137
|
-
* const go = createGo(AppRouter);
|
|
138
|
-
* yield* go("posts"); // OK
|
|
139
|
-
* yield* go("typo"); // compile-time error!
|
|
140
|
-
* ```
|
|
141
|
-
*/
|
|
142
|
-
export function createGo(_router) {
|
|
143
|
-
return (routeName, options) => Effect.gen(function* () {
|
|
144
|
-
const nav = yield* Navigator;
|
|
145
|
-
yield* nav.go(routeName, options);
|
|
146
|
-
});
|
|
147
|
-
}
|
|
148
|
-
/**
|
|
149
|
-
* Navigate to a route by name.
|
|
150
|
-
*/
|
|
151
|
-
export const go = (routeName, options) => Effect.gen(function* () {
|
|
152
|
-
const nav = yield* Navigator;
|
|
153
|
-
yield* nav.go(routeName, options);
|
|
154
|
-
});
|
|
155
|
-
/**
|
|
156
|
-
* Go back in history.
|
|
157
|
-
*/
|
|
158
|
-
/* is-tree-shakable-suppress */
|
|
159
|
-
export const back = Effect.gen(function* () {
|
|
160
|
-
const nav = yield* Navigator;
|
|
161
|
-
yield* nav.back;
|
|
162
|
-
});
|
|
163
|
-
/**
|
|
164
|
-
* Go forward in history.
|
|
165
|
-
*/
|
|
166
|
-
/* is-tree-shakable-suppress */
|
|
167
|
-
export const forward = Effect.gen(function* () {
|
|
168
|
-
const nav = yield* Navigator;
|
|
169
|
-
yield* nav.forward;
|
|
170
|
-
});
|
|
171
|
-
/**
|
|
172
|
-
* Get current route info.
|
|
173
|
-
*/
|
|
174
|
-
/* is-tree-shakable-suppress */
|
|
175
|
-
export const getCurrentRoute = Effect.gen(function* () {
|
|
176
|
-
const nav = yield* Navigator;
|
|
177
|
-
return yield* Atom.get(nav.currentRoute);
|
|
178
|
-
});
|
|
179
132
|
//# sourceMappingURL=Navigator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Navigator.js","sourceRoot":"","sources":["../../src/router/Navigator.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"Navigator.js","sourceRoot":"","sources":["../../src/router/Navigator.ts"],"names":[],"mappings":"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"}
|
package/dist/router/Route.d.ts
CHANGED
|
@@ -29,7 +29,7 @@ export declare class RouteError extends RouteError_base {
|
|
|
29
29
|
* Represents a single route with path and optional search params validation.
|
|
30
30
|
* This is immutable data that describes a route.
|
|
31
31
|
*/
|
|
32
|
-
export interface Route<Name extends string = string, PathParams extends Record<string, unknown> = Record<string, unknown>, SearchParams extends Record<string, unknown> = Record<string, unknown>> {
|
|
32
|
+
export interface Route<Name extends string = string, Path extends string = never, PathParams extends Record<string, unknown> = Record<string, unknown>, SearchParams extends Record<string, unknown> = Record<string, unknown>> {
|
|
33
33
|
readonly name: Name;
|
|
34
34
|
readonly path: string;
|
|
35
35
|
readonly pathSchema: Option.Option<Schema.Schema<PathParams>>;
|
|
@@ -48,15 +48,19 @@ export interface Route<Name extends string = string, PathParams extends Record<s
|
|
|
48
48
|
/**
|
|
49
49
|
* Set search parameter schema for this route.
|
|
50
50
|
*/
|
|
51
|
-
readonly setSearchParams: <NewSearch extends Record<string, unknown>>(schema: Schema.Schema<NewSearch>) => Route<Name, PathParams, NewSearch>;
|
|
51
|
+
readonly setSearchParams: <NewSearch extends Record<string, unknown>>(schema: Schema.Schema<NewSearch>) => Route<Name, Path, PathParams, NewSearch>;
|
|
52
52
|
}
|
|
53
53
|
/**
|
|
54
54
|
* Constructor for building routes with different method types.
|
|
55
55
|
* Supports both static paths and template literal syntax.
|
|
56
56
|
*/
|
|
57
57
|
export interface RouteConstructor {
|
|
58
|
-
|
|
59
|
-
<const Name extends string
|
|
58
|
+
/** Static path — captures Path as literal type. */
|
|
59
|
+
<const Name extends string, const Path extends string>(name: Name, path: Path): Route<Name, Path, {}, {}>;
|
|
60
|
+
/** Static path with param schemas — captures Path + validates params. */
|
|
61
|
+
<const Name extends string, const Path extends string>(name: Name, path: Path, params: Record<string, Schema.Schema.Any>): Route<Name, Path, Record<string, unknown>, {}>;
|
|
62
|
+
/** Template literal syntax — Path is not tracked at the type level. */
|
|
63
|
+
<const Name extends string>(name: Name): <const T extends readonly any[]>(segments: TemplateStringsArray, ...params: T) => Route<Name, never, Record<string, unknown>, {}>;
|
|
60
64
|
}
|
|
61
65
|
/**
|
|
62
66
|
* Route.get("name", "/path") creates a GET route
|
package/dist/router/Route.js
CHANGED
|
@@ -113,8 +113,16 @@ function makeRoute(_name, path, pathSchema = Option.none(), searchSchema = Optio
|
|
|
113
113
|
* Create a route getter function supporting both static and template literal syntax.
|
|
114
114
|
*/
|
|
115
115
|
function makeGetter() {
|
|
116
|
-
return ((name, path) => {
|
|
117
|
-
// Static path
|
|
116
|
+
return ((name, path, params) => {
|
|
117
|
+
// Static path with param schemas
|
|
118
|
+
if (typeof path === "string" && params) {
|
|
119
|
+
const paramNames = Object.keys(params);
|
|
120
|
+
const pathSchema = paramNames.length > 0
|
|
121
|
+
? Option.some(Schema.Struct(params))
|
|
122
|
+
: Option.none();
|
|
123
|
+
return makeRoute(name, path, pathSchema);
|
|
124
|
+
}
|
|
125
|
+
// Static path case (no params)
|
|
118
126
|
if (typeof path === "string") {
|
|
119
127
|
return makeRoute(name, path);
|
|
120
128
|
}
|
package/dist/router/Route.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Route.js","sourceRoot":"","sources":["../../src/router/Route.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAkB,MAAM,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;AAEzF;;GAEG;AACH,MAAM,OAAO,UAAW,SAAQ,MAAM,CAAC,WAAW,EAAc,CAAC,YAAY,EAAE;IAC7E,OAAO,EAAE,MAAM,CAAC,MAAM;CACvB,CAAC;CAAG;
|
|
1
|
+
{"version":3,"file":"Route.js","sourceRoot":"","sources":["../../src/router/Route.ts"],"names":[],"mappings":"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"}
|
package/dist/router/Router.d.ts
CHANGED
|
@@ -38,28 +38,28 @@ export declare class RouterError extends RouterError_base {
|
|
|
38
38
|
* Groups provide namespacing for handler implementation.
|
|
39
39
|
* RouteNames accumulates route name literal types via .add() for type-safe navigation.
|
|
40
40
|
*/
|
|
41
|
-
export interface RouteGroup<Name extends string = string, RouteNames extends string = never> {
|
|
41
|
+
export interface RouteGroup<Name extends string = string, RouteNames extends string = never, RoutePaths extends string = never> {
|
|
42
42
|
readonly _tag: "RouteGroup";
|
|
43
43
|
readonly name: Name;
|
|
44
44
|
readonly routes: readonly Route[];
|
|
45
|
-
readonly add: <RName extends string>(route: Route<RName>) => RouteGroup<Name, RouteNames | RName>;
|
|
45
|
+
readonly add: <RName extends string, RPath extends string>(route: Route<RName, RPath>) => RouteGroup<Name, RouteNames | RName, RoutePaths | RPath>;
|
|
46
46
|
}
|
|
47
47
|
/**
|
|
48
48
|
* A layout group wraps routes with a layout component.
|
|
49
49
|
* The layout component should render <RouterOutlet /> for children.
|
|
50
50
|
* RouteNames accumulates route name literal types via .add() for type-safe navigation.
|
|
51
51
|
*/
|
|
52
|
-
export interface LayoutGroup<Name extends string = string, RouteNames extends string = never> {
|
|
52
|
+
export interface LayoutGroup<Name extends string = string, RouteNames extends string = never, RoutePaths extends string = never> {
|
|
53
53
|
readonly _tag: "LayoutGroup";
|
|
54
54
|
readonly name: Name;
|
|
55
55
|
readonly basePath: string;
|
|
56
56
|
readonly routes: readonly Route[];
|
|
57
|
-
readonly add: <RName extends string>(route: Route<RName>) => LayoutGroup<Name, RouteNames | RName>;
|
|
57
|
+
readonly add: <RName extends string, RPath extends string>(route: Route<RName, RPath>) => LayoutGroup<Name, RouteNames | RName, RoutePaths | RPath>;
|
|
58
58
|
}
|
|
59
59
|
/**
|
|
60
60
|
* Union of group types that can be added to a router.
|
|
61
61
|
*/
|
|
62
|
-
export type AnyGroup<Name extends string = string, RouteNames extends string = never> = RouteGroup<Name, RouteNames> | LayoutGroup<Name, RouteNames>;
|
|
62
|
+
export type AnyGroup<Name extends string = string, RouteNames extends string = never, RoutePaths extends string = never> = RouteGroup<Name, RouteNames, RoutePaths> | LayoutGroup<Name, RouteNames, RoutePaths>;
|
|
63
63
|
/**
|
|
64
64
|
* Result of matching a route, including any layout wrappers.
|
|
65
65
|
*/
|
|
@@ -74,10 +74,10 @@ export interface RouteMatch {
|
|
|
74
74
|
* The complete router holding all route groups and enabling route matching.
|
|
75
75
|
* RouteNames accumulates all route names from added groups for type-safe navigation.
|
|
76
76
|
*/
|
|
77
|
-
export interface Router<Name extends string = string, RouteNames extends string = never> {
|
|
77
|
+
export interface Router<Name extends string = string, RouteNames extends string = never, RoutePaths extends string = never> {
|
|
78
78
|
readonly name: Name;
|
|
79
79
|
readonly groups: readonly AnyGroup[];
|
|
80
|
-
readonly add: <GName extends string, GRouteNames extends string>(group: AnyGroup<GName, GRouteNames>) => Router<Name, RouteNames | GRouteNames>;
|
|
80
|
+
readonly add: <GName extends string, GRouteNames extends string, GRoutePaths extends string>(group: AnyGroup<GName, GRouteNames, GRoutePaths>) => Router<Name, RouteNames | GRouteNames, RoutePaths | GRoutePaths>;
|
|
81
81
|
/**
|
|
82
82
|
* Match a pathname against all routes in the router.
|
|
83
83
|
* Returns the matched route, group name, decoded path parameters,
|
|
@@ -90,7 +90,7 @@ export interface Router<Name extends string = string, RouteNames extends string
|
|
|
90
90
|
* Routes are added via group.add(route).
|
|
91
91
|
* Route names accumulate as literal types through the builder chain.
|
|
92
92
|
*/
|
|
93
|
-
export declare function group<const Name extends string>(name: Name): RouteGroup<Name, never>;
|
|
93
|
+
export declare function group<const Name extends string>(name: Name): RouteGroup<Name, never, never>;
|
|
94
94
|
/**
|
|
95
95
|
* Create a layout group with the given name, base path, and layout component.
|
|
96
96
|
*
|
|
@@ -113,13 +113,13 @@ export declare function group<const Name extends string>(name: Name): RouteGroup
|
|
|
113
113
|
* .add(Route.get("settings", "/settings")); // matches /dashboard/settings
|
|
114
114
|
* ```
|
|
115
115
|
*/
|
|
116
|
-
export declare function layout<const Name extends string>(name: Name, basePath: string): LayoutGroup<Name, never>;
|
|
116
|
+
export declare function layout<const Name extends string>(name: Name, basePath: string): LayoutGroup<Name, never, never>;
|
|
117
117
|
/**
|
|
118
118
|
* Create a router with the given name.
|
|
119
119
|
* Groups are added via router.add(group).
|
|
120
120
|
* Route names accumulate from groups for type-safe navigation.
|
|
121
121
|
*/
|
|
122
|
-
export declare function make<const Name extends string>(name: Name): Router<Name, never>;
|
|
122
|
+
export declare function make<const Name extends string>(name: Name): Router<Name, never, never>;
|
|
123
123
|
/**
|
|
124
124
|
* Options for server-side rendering layer.
|
|
125
125
|
*/
|