@nifrajs/web 2.1.0 → 2.3.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 +3 -3
- package/dist/build-vite.d.ts +68 -0
- package/dist/build-vite.d.ts.map +1 -0
- package/dist/build-vite.js +433 -0
- package/dist/build-vite.js.map +1 -0
- package/dist/build.d.ts +174 -65
- package/dist/build.d.ts.map +1 -1
- package/dist/build.js +376 -135
- package/dist/build.js.map +1 -1
- package/dist/bun-dev-entry.d.ts +83 -0
- package/dist/bun-dev-entry.d.ts.map +1 -0
- package/dist/bun-dev-entry.js +136 -0
- package/dist/bun-dev-entry.js.map +1 -0
- package/dist/chunk-names.js +1 -1
- package/dist/client.d.ts +3 -9
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +209 -27
- package/dist/client.js.map +1 -1
- package/dist/conformance.d.ts +2 -2
- package/dist/conformance.js +3 -3
- package/dist/deferred.d.ts +11 -11
- package/dist/deferred.d.ts.map +1 -1
- package/dist/deferred.js +16 -16
- package/dist/dev-error.d.ts +2 -2
- package/dist/dev-error.js +3 -3
- package/dist/dev-port.d.ts +36 -0
- package/dist/dev-port.d.ts.map +1 -0
- package/dist/dev-port.js +48 -0
- package/dist/dev-port.js.map +1 -0
- package/dist/dev.d.ts +62 -5
- package/dist/dev.d.ts.map +1 -1
- package/dist/dev.js +419 -60
- package/dist/dev.js.map +1 -1
- package/dist/draft.d.ts +44 -7
- package/dist/draft.d.ts.map +1 -1
- package/dist/draft.js +92 -9
- package/dist/draft.js.map +1 -1
- package/dist/fn-state.d.ts +56 -0
- package/dist/fn-state.d.ts.map +1 -0
- package/dist/fn-state.js +77 -0
- package/dist/fn-state.js.map +1 -0
- package/dist/fn.d.ts +111 -0
- package/dist/fn.d.ts.map +1 -0
- package/dist/fn.js +125 -0
- package/dist/fn.js.map +1 -0
- package/dist/fonts-google.d.ts +9 -9
- package/dist/fonts-google.js +10 -10
- package/dist/fonts.d.ts +7 -7
- package/dist/fonts.js +1 -1
- package/dist/forms.d.ts +8 -8
- package/dist/fs.d.ts +15 -2
- package/dist/fs.d.ts.map +1 -1
- package/dist/fs.js +8 -2
- package/dist/fs.js.map +1 -1
- package/dist/index.d.ts +266 -74
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +869 -179
- package/dist/index.js.map +1 -1
- package/dist/internal/head-attributes.d.ts +15 -0
- package/dist/internal/head-attributes.d.ts.map +1 -0
- package/dist/internal/head-attributes.js +99 -0
- package/dist/internal/head-attributes.js.map +1 -0
- package/dist/internal/script-types.d.ts +14 -0
- package/dist/internal/script-types.d.ts.map +1 -0
- package/dist/internal/script-types.js +17 -0
- package/dist/internal/script-types.js.map +1 -0
- package/dist/internal/server-boundary.d.ts +60 -0
- package/dist/internal/server-boundary.d.ts.map +1 -0
- package/dist/internal/server-boundary.js +174 -0
- package/dist/internal/server-boundary.js.map +1 -0
- package/dist/internal/timing-safe-equal.d.ts +16 -0
- package/dist/internal/timing-safe-equal.d.ts.map +1 -0
- package/dist/internal/timing-safe-equal.js +26 -0
- package/dist/internal/timing-safe-equal.js.map +1 -0
- package/dist/internal/vite-import.d.ts +63 -0
- package/dist/internal/vite-import.d.ts.map +1 -0
- package/dist/internal/vite-import.js +94 -0
- package/dist/internal/vite-import.js.map +1 -0
- package/dist/islands.d.ts +5 -5
- package/dist/islands.js +5 -5
- package/dist/isr.d.ts +15 -15
- package/dist/isr.d.ts.map +1 -1
- package/dist/isr.js +8 -21
- package/dist/isr.js.map +1 -1
- package/dist/llms-txt.d.ts.map +1 -1
- package/dist/llms-txt.js +12 -6
- package/dist/llms-txt.js.map +1 -1
- package/dist/manifest.d.ts +121 -40
- package/dist/manifest.d.ts.map +1 -1
- package/dist/manifest.js +136 -26
- package/dist/manifest.js.map +1 -1
- package/dist/module-graph.d.ts +91 -0
- package/dist/module-graph.d.ts.map +1 -0
- package/dist/module-graph.js +92 -0
- package/dist/module-graph.js.map +1 -0
- package/dist/navigation.d.ts +120 -5
- package/dist/navigation.d.ts.map +1 -1
- package/dist/navigation.js +37 -5
- package/dist/navigation.js.map +1 -1
- package/dist/plugins/css-modules.d.ts +3 -3
- package/dist/plugins/css-modules.d.ts.map +1 -1
- package/dist/plugins/css-modules.js +0 -0
- package/dist/plugins/css-modules.js.map +1 -1
- package/dist/plugins/kit.d.ts +8 -8
- package/dist/plugins/kit.js +9 -9
- package/dist/plugins/scss.js +3 -3
- package/dist/plugins/vite-leak-guard.d.ts +45 -0
- package/dist/plugins/vite-leak-guard.d.ts.map +1 -0
- package/dist/plugins/vite-leak-guard.js +67 -0
- package/dist/plugins/vite-leak-guard.js.map +1 -0
- package/dist/plugins/vite-server-fn.d.ts +23 -0
- package/dist/plugins/vite-server-fn.d.ts.map +1 -0
- package/dist/plugins/vite-server-fn.js +51 -0
- package/dist/plugins/vite-server-fn.js.map +1 -0
- package/dist/plugins/vite-server-only.d.ts +49 -0
- package/dist/plugins/vite-server-only.d.ts.map +1 -0
- package/dist/plugins/vite-server-only.js +57 -0
- package/dist/plugins/vite-server-only.js.map +1 -0
- package/dist/prerender.d.ts +5 -5
- package/dist/prerender.js +7 -7
- package/dist/public-dir.d.ts +36 -0
- package/dist/public-dir.d.ts.map +1 -0
- package/dist/public-dir.js +89 -0
- package/dist/public-dir.js.map +1 -0
- package/dist/query.d.ts +10 -10
- package/dist/query.js +15 -15
- package/dist/route-manifest.d.ts +91 -0
- package/dist/route-manifest.d.ts.map +1 -0
- package/dist/route-manifest.js +128 -0
- package/dist/route-manifest.js.map +1 -0
- package/dist/router.d.ts +94 -22
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +170 -58
- package/dist/router.js.map +1 -1
- package/dist/search.d.ts +94 -0
- package/dist/search.d.ts.map +1 -0
- package/dist/search.js +232 -0
- package/dist/search.js.map +1 -0
- package/dist/server-only.d.ts +6 -6
- package/dist/server-only.js +7 -7
- package/dist/service-worker.d.ts +56 -0
- package/dist/service-worker.d.ts.map +1 -0
- package/dist/service-worker.js +127 -0
- package/dist/service-worker.js.map +1 -0
- package/dist/vite.d.ts +25 -17
- package/dist/vite.d.ts.map +1 -1
- package/dist/vite.js +75 -33
- package/dist/vite.js.map +1 -1
- package/package.json +48 -4
- package/server-manifest.d.ts +31 -0
- package/src/build-vite.ts +553 -0
- package/src/build.ts +563 -172
- package/src/bun-dev-entry.ts +184 -0
- package/src/chunk-names.ts +1 -1
- package/src/client.ts +221 -30
- package/src/conformance.ts +3 -3
- package/src/deferred.ts +17 -17
- package/src/dev-error.ts +3 -3
- package/src/dev-port.ts +63 -0
- package/src/dev.ts +468 -66
- package/src/draft.ts +124 -12
- package/src/fn-state.ts +107 -0
- package/src/fn.ts +199 -0
- package/src/fonts-google.ts +13 -13
- package/src/fonts.ts +7 -7
- package/src/forms.ts +8 -8
- package/src/fs.ts +24 -6
- package/src/index.ts +1174 -225
- package/src/internal/head-attributes.ts +109 -0
- package/src/internal/script-types.ts +18 -0
- package/src/internal/server-boundary.ts +187 -0
- package/src/internal/timing-safe-equal.ts +24 -0
- package/src/internal/vite-import.ts +92 -0
- package/src/islands.ts +7 -7
- package/src/isr.ts +18 -30
- package/src/llms-txt.ts +13 -5
- package/src/manifest.ts +264 -48
- package/src/module-graph.ts +146 -0
- package/src/navigation.ts +151 -5
- package/src/plugins/css-modules.ts +0 -0
- package/src/plugins/kit.ts +11 -11
- package/src/plugins/scss.ts +3 -3
- package/src/plugins/vite-leak-guard.ts +110 -0
- package/src/plugins/vite-server-fn.ts +67 -0
- package/src/plugins/vite-server-only.ts +75 -0
- package/src/prerender.ts +10 -10
- package/src/public-dir.ts +108 -0
- package/src/query.ts +22 -22
- package/src/route-manifest.ts +240 -0
- package/src/router.ts +288 -74
- package/src/search.ts +297 -0
- package/src/server-only.ts +7 -7
- package/src/service-worker.ts +165 -0
- package/src/vite.ts +103 -49
package/dist/router.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { StandardSchemaV1 } from "@nifrajs/core/server";
|
|
1
2
|
/**
|
|
2
3
|
* Request header that asks a nifra route's GET to return just the loader data as JSON (instead of
|
|
3
4
|
* the full HTML document). Set by client-side navigation; read by `createWebApp`'s GET handler.
|
|
@@ -6,28 +7,82 @@ export declare const DATA_HEADER = "x-nifra-data";
|
|
|
6
7
|
/**
|
|
7
8
|
* Global the server injects (`createWebApp({ prerenderedPaths })`) listing the SSG-prerendered paths.
|
|
8
9
|
* The client's default data fetch reads it: a soft-nav INTO a prerendered route fetches its static
|
|
9
|
-
* `<path>/_data.json` (a CDN file
|
|
10
|
+
* `<path>/_data.json` (a CDN file - no worker round-trip) instead of the dynamic header-GET.
|
|
10
11
|
*/
|
|
11
12
|
export declare const PRERENDERED_GLOBAL = "__NIFRA_PRERENDERED__";
|
|
12
13
|
/**
|
|
13
14
|
* Response header a data-mode action POST uses to convey a redirect (`redirect(...)`) to the
|
|
14
|
-
* client
|
|
15
|
+
* client - fetch would otherwise silently follow a 3xx to its HTML, losing the target. The
|
|
15
16
|
* client reads this and performs a client-side navigation instead.
|
|
16
17
|
*/
|
|
17
18
|
export declare const REDIRECT_HEADER = "x-nifra-redirect";
|
|
18
19
|
/**
|
|
19
20
|
* Response header an action sets (via the `revalidate(paths, data)` helper) to tell the client which
|
|
20
|
-
* routes the mutation changed
|
|
21
|
+
* routes the mutation changed - a comma-separated list of paths. After the submit, the client marks
|
|
21
22
|
* those cached routes stale (refetching any that are mounted) so a mutation can refresh views beyond
|
|
22
23
|
* the active one. The client validates each path against the manifest matcher before acting on it.
|
|
23
24
|
*/
|
|
24
25
|
export declare const REVALIDATE_HEADER = "x-nifra-revalidate";
|
|
26
|
+
/**
|
|
27
|
+
* Response header carrying a **terminal status** a loader signalled with `notFound()` / `gone()` /
|
|
28
|
+
* `statusPage(n)` during a client-side navigation's data fetch.
|
|
29
|
+
*
|
|
30
|
+
* A soft-nav fetches data, not a document, so the server cannot answer by rendering the `_404` page -
|
|
31
|
+
* it has only JSON to return. Without this channel the two halves disagree: a crawler doing a hard
|
|
32
|
+
* navigation gets a correct 404 page while a user who clicked a link gets an error or a blank screen.
|
|
33
|
+
* The client reads it and renders the same boundary the server would have.
|
|
34
|
+
*
|
|
35
|
+
* Carried in a header rather than the body so it survives the NDJSON deferred-data path unchanged,
|
|
36
|
+
* exactly like {@link REDIRECT_HEADER}.
|
|
37
|
+
*/
|
|
38
|
+
export declare const STATUS_HEADER = "x-nifra-status";
|
|
39
|
+
/**
|
|
40
|
+
* Layout indices a client navigation is asking the server NOT to re-run, comma separated.
|
|
41
|
+
*
|
|
42
|
+
* The client owns the decision because it holds both the old and new match plus each layout's scoped
|
|
43
|
+
* params. The server treats it as a hint and refuses to skip a `gate` regardless - a guard that runs
|
|
44
|
+
* only when the client says so is not a guard.
|
|
45
|
+
*/
|
|
46
|
+
export declare const RETAIN_HEADER = "x-nifra-retain";
|
|
47
|
+
/**
|
|
48
|
+
* The path a client navigation is coming FROM, sent on the data-mode GET.
|
|
49
|
+
*
|
|
50
|
+
* Lets the SERVER decide which layout loaders to skip: it already knows each layout's scoped params
|
|
51
|
+
* (derived at build time), so given both paths it can tell whether a layout's own prefix changed.
|
|
52
|
+
* Doing it server-side means the client never needs the scope table, and the decision lives next to
|
|
53
|
+
* the data it is about.
|
|
54
|
+
*
|
|
55
|
+
* Sent only when the client actually holds layout data to retain, so a request without it is simply
|
|
56
|
+
* the full-chain case.
|
|
57
|
+
*/
|
|
58
|
+
export declare const NAV_FROM_HEADER = "x-nifra-from";
|
|
59
|
+
/**
|
|
60
|
+
* The data-mode payload once a chain can carry layout data.
|
|
61
|
+
*
|
|
62
|
+
* Versioned because a prerendered `_data.json` is a static file on a CDN and outlives the deploy that
|
|
63
|
+
* wrote it: a browser running new client code can be handed an envelope written by the previous
|
|
64
|
+
* build. The reader therefore accepts BOTH the bare pre-envelope value and this shape, and decides by
|
|
65
|
+
* structure rather than by assuming the deploy was atomic.
|
|
66
|
+
*/
|
|
67
|
+
export interface RouteDataEnvelope {
|
|
68
|
+
readonly v: 1;
|
|
69
|
+
readonly data: unknown;
|
|
70
|
+
readonly layoutData?: readonly unknown[];
|
|
71
|
+
/** Indices whose loader was SKIPPED because the layout's own params did not change. The client
|
|
72
|
+
* keeps its existing value at each of these, so an unchanged layout is neither refetched nor lost. */
|
|
73
|
+
readonly retained?: readonly number[];
|
|
74
|
+
/** Terminal status signalled by a loader. Added by the browser transport after reading
|
|
75
|
+
* `X-Nifra-Status`; old servers and static data files simply omit it. */
|
|
76
|
+
readonly status?: number;
|
|
77
|
+
}
|
|
78
|
+
/** Recognise the envelope without mistaking a plain loader object that happens to have a `data` key. */
|
|
79
|
+
export declare function isRouteDataEnvelope(value: unknown): value is RouteDataEnvelope;
|
|
25
80
|
/** A URL matched against the manifest patterns: which route + its extracted params. */
|
|
26
81
|
export interface RouteMatch {
|
|
27
82
|
readonly routeId: string;
|
|
28
83
|
readonly params: Record<string, string>;
|
|
29
84
|
}
|
|
30
|
-
/** An in-flight client submit
|
|
85
|
+
/** An in-flight client submit - the action it targets + the `FormData` being sent. Set while the
|
|
31
86
|
* submit is pending, cleared when it settles. A component reads `submission.formData` to render an
|
|
32
87
|
* **optimistic** view (the expected result) before the server responds. */
|
|
33
88
|
export interface Submission {
|
|
@@ -41,6 +96,9 @@ export interface RouterState {
|
|
|
41
96
|
/** The current URL path (used to revalidate the active loader after an action). */
|
|
42
97
|
readonly path: string;
|
|
43
98
|
readonly data: unknown;
|
|
99
|
+
/** Per-layout loader data, aligned with the matched chain's leading layout prefix. Absent when no
|
|
100
|
+
* layout in that chain has a loader. */
|
|
101
|
+
readonly layoutData?: readonly unknown[] | undefined;
|
|
44
102
|
/** An action's data return after a client-side submit (cleared on navigation). */
|
|
45
103
|
readonly actionData?: unknown;
|
|
46
104
|
/** True while a navigation or submit is in flight (drives loading UI). */
|
|
@@ -48,10 +106,10 @@ export interface RouterState {
|
|
|
48
106
|
/** The path a navigation is transitioning TO while `pending` (cleared when it settles). Lets a
|
|
49
107
|
* `NavLink` know whether its own `to` is the one loading; `undefined` when idle. */
|
|
50
108
|
readonly pendingPath?: string | undefined;
|
|
51
|
-
/** The in-flight submit (set during a `submit`, cleared when it settles)
|
|
109
|
+
/** The in-flight submit (set during a `submit`, cleared when it settles) - for optimistic UI. */
|
|
52
110
|
readonly submission?: Submission;
|
|
53
111
|
}
|
|
54
|
-
/** A route id paired with its nifra pattern (e.g. `":id"` segments)
|
|
112
|
+
/** A route id paired with its nifra pattern (e.g. `":id"` segments) - the matcher input. */
|
|
55
113
|
export interface RoutePattern {
|
|
56
114
|
readonly routeId: string;
|
|
57
115
|
readonly pattern: string;
|
|
@@ -64,14 +122,17 @@ export interface RoutePattern {
|
|
|
64
122
|
export declare function createMatcher(patterns: readonly RoutePattern[]): (path: string) => RouteMatch | null;
|
|
65
123
|
/** How a router fetches a route's loader data on navigation. `signal` aborts a superseded fetch
|
|
66
124
|
* (and its deferred stream). */
|
|
67
|
-
export type FetchRouteData = (path: string, match: RouteMatch, signal?: AbortSignal
|
|
125
|
+
export type FetchRouteData = (path: string, match: RouteMatch, signal?: AbortSignal, navigation?: {
|
|
126
|
+
readonly from: string;
|
|
127
|
+
readonly retain: readonly number[];
|
|
128
|
+
}) => Promise<unknown>;
|
|
68
129
|
/** Per-submit options. `revalidate: false` opts out of the post-action loader re-fetch. */
|
|
69
130
|
export interface SubmitOptions {
|
|
70
131
|
/** Re-run the active route's loader after the action settles (default `true`). Set `false` to
|
|
71
132
|
* keep the current `data` and rely on the action's `actionData` alone. */
|
|
72
133
|
readonly revalidate?: boolean;
|
|
73
134
|
}
|
|
74
|
-
/** A fetcher's observable state
|
|
135
|
+
/** A fetcher's observable state - independent of the main router. `pending` covers its in-flight
|
|
75
136
|
* load/submit; `data` is its last `load()` result; `actionData` its last `submit()` result;
|
|
76
137
|
* `submission` the in-flight submit (for optimistic UI). Client-only (never SSR'd). */
|
|
77
138
|
export interface FetcherState {
|
|
@@ -82,7 +143,7 @@ export interface FetcherState {
|
|
|
82
143
|
}
|
|
83
144
|
/**
|
|
84
145
|
* An independent load/submit state machine, retrieved by `router.fetcher(key)`. Runs **concurrently**
|
|
85
|
-
* with the main router and with other fetchers
|
|
146
|
+
* with the main router and with other fetchers - each is single-flight against *itself* (its own
|
|
86
147
|
* monotonic token), so N row-level mutations / side-channel loads can be in flight at once without
|
|
87
148
|
* disturbing the active view. Loads/submits write the shared cache and honor `X-Nifra-Revalidate`.
|
|
88
149
|
*/
|
|
@@ -96,7 +157,7 @@ export interface Fetcher {
|
|
|
96
157
|
load: (path: string) => Promise<void>;
|
|
97
158
|
/** Submit an action into this fetcher's own state; honors `X-Nifra-Revalidate` by refreshing the
|
|
98
159
|
* active route + any mounted fetcher showing a changed path. Rejects on failure (caller falls back).
|
|
99
|
-
* (No `revalidate` opt-out
|
|
160
|
+
* (No `revalidate` opt-out - a fetcher has no active loader of its own to skip.) */
|
|
100
161
|
submit: (action: string, body: NonNullable<RequestInit["body"]>) => Promise<void>;
|
|
101
162
|
}
|
|
102
163
|
/** The agnostic router store consumed by per-adapter Router bindings. */
|
|
@@ -111,7 +172,7 @@ export interface ClientRouter {
|
|
|
111
172
|
* Submit an action (POST `body` to `action` in data mode): a redirect becomes a client
|
|
112
173
|
* navigation; otherwise the data return is published as `actionData` and the active route's
|
|
113
174
|
* loader is revalidated so the mutation is reflected. Pass `{ revalidate: false }` to SKIP that
|
|
114
|
-
* revalidation
|
|
175
|
+
* revalidation - keep the current `data` and just publish the action's `actionData` (useful when
|
|
115
176
|
* the action already returned everything that changed, saving the extra round-trip). A redirect
|
|
116
177
|
* always loads its target regardless. Rejects on failure (caller falls back).
|
|
117
178
|
*/
|
|
@@ -119,28 +180,28 @@ export interface ClientRouter {
|
|
|
119
180
|
/**
|
|
120
181
|
* Mark cached route data stale and refresh the active view. With `paths`, target exactly those
|
|
121
182
|
* (e.g. the routes a mutation changed); without, invalidate the whole cache. The active route
|
|
122
|
-
* refreshes immediately
|
|
183
|
+
* refreshes immediately - refetched + republished - whenever it's in scope (an explicit list that
|
|
123
184
|
* includes it, or an invalidate-all); other stale entries refetch lazily when next read (a
|
|
124
185
|
* fetcher, or the next navigation/access). Rejects if the active refetch fails (like `navigate`).
|
|
125
186
|
* The keyed substrate for targeted revalidation (the `X-Nifra-Revalidate` header) and fetchers.
|
|
126
187
|
*/
|
|
127
188
|
invalidate: (paths?: readonly string[]) => Promise<void>;
|
|
128
189
|
/**
|
|
129
|
-
* Warm a path's chunk + loader data into a bounded one-shot cache without publishing state
|
|
190
|
+
* Warm a path's chunk + loader data into a bounded one-shot cache without publishing state -
|
|
130
191
|
* a later `navigate` to it transitions with no network round-trip. Best-effort: failures and
|
|
131
192
|
* unmatched paths are no-ops. Wired to link hover/focus by `installHistory`.
|
|
132
193
|
*/
|
|
133
194
|
prefetch: (path: string) => Promise<void>;
|
|
134
195
|
/**
|
|
135
|
-
* Get (lazily creating) the stable {@link Fetcher} for `key`
|
|
196
|
+
* Get (lazily creating) the stable {@link Fetcher} for `key` - an independent, concurrent
|
|
136
197
|
* load/submit state machine for row-level mutations or side-channel loads that must not disturb
|
|
137
198
|
* the active view. The same `key` always returns the same fetcher (so a binding can subscribe to a
|
|
138
199
|
* stable store). Keys are app-chosen and typically stable (e.g. a row id).
|
|
139
200
|
*/
|
|
140
201
|
fetcher: (key: string) => Fetcher;
|
|
141
|
-
/** All live fetchers
|
|
202
|
+
/** All live fetchers - for a global busy view (e.g. a `useFetchers` binding). */
|
|
142
203
|
fetchers: () => readonly Fetcher[];
|
|
143
|
-
/** Subscribe to any-fetcher-changed (a transition on any fetcher, or a new one created)
|
|
204
|
+
/** Subscribe to any-fetcher-changed (a transition on any fetcher, or a new one created) - backs a
|
|
144
205
|
* `useFetchers` binding; returns an unsubscribe fn. */
|
|
145
206
|
subscribeFetchers: (listener: () => void) => () => void;
|
|
146
207
|
/** Match a path against the manifest patterns (exposed for history/link wiring). */
|
|
@@ -154,19 +215,30 @@ export interface ClientRouterOptions {
|
|
|
154
215
|
/** Ensure a route's code chunk is loaded before rendering (code-splitting). Awaited in parallel
|
|
155
216
|
* with the loader data, so `pending` covers both. Omit when the bundle isn't split. */
|
|
156
217
|
readonly loadModule?: (routeId: string) => Promise<void>;
|
|
218
|
+
/** Terminal status → client route id. Generated entries populate this from `_404` and
|
|
219
|
+
* `_<status>` files so soft navigation renders the same boundary as a hard request. */
|
|
220
|
+
readonly statusRoutes?: Readonly<Record<number, string>>;
|
|
221
|
+
/** routeId → the route's client-only search keys (its `searchClientKeys` export). When a soft
|
|
222
|
+
* navigation stays on the same route + pathname and changes ONLY these keys, `navigate` publishes the
|
|
223
|
+
* new URL WITHOUT re-running the loader (re-render, not revalidate). Populated lazily by the generated
|
|
224
|
+
* entry's `loadModule` (so a route's keys are present once it has been visited, which is exactly when a
|
|
225
|
+
* same-route nav can consult them). Omit ⇒ every search change revalidates (the safe default). */
|
|
226
|
+
readonly searchClientKeys?: Readonly<Record<string, readonly string[]>>;
|
|
157
227
|
}
|
|
158
228
|
/** Options for a per-adapter `mountRouter` (the Router binding that hydrates + re-renders). */
|
|
159
229
|
export interface MountRouterOptions {
|
|
160
230
|
readonly router: ClientRouter;
|
|
161
231
|
/** routeId → layout chain (outermost layout → page); built by `generateClientEntry`. */
|
|
162
232
|
readonly routes: Record<string, readonly unknown[]>;
|
|
163
|
-
/**
|
|
233
|
+
/** routeId → the route's search-schema CHAIN (its layout chain's `searchSchema` exports, outermost
|
|
234
|
+
* first, then the page's; each entry `undefined` when that module declares none); built by
|
|
235
|
+
* `generateClientEntry`. The mount derives each route's typed `search` from this chain plus the URL via
|
|
236
|
+
* `searchOfChain` (layout keys merged with page keys, page-wins), matching the server's
|
|
237
|
+
* `ctx.search`/`RenderProps.search`. Omitted by callers with no typed search (tests, a hand-built mount)
|
|
238
|
+
* ⇒ every route sees the raw parsed query. */
|
|
239
|
+
readonly searchSchemas?: Readonly<Record<string, readonly (StandardSchemaV1 | undefined)[]>>;
|
|
240
|
+
/** Hydration container (opaque - the adapter casts it to its DOM element type). */
|
|
164
241
|
readonly container: unknown;
|
|
165
242
|
}
|
|
166
|
-
/**
|
|
167
|
-
* Create the agnostic router store. `navigate` is guarded by a monotonic token so that when
|
|
168
|
-
* navigations overlap, only the latest result is applied (rapid clicks don't flash stale data).
|
|
169
|
-
* A failed fetch clears `pending` and rethrows so the caller can fall back to a full-page load.
|
|
170
|
-
*/
|
|
171
243
|
export declare function createClientRouter(options: ClientRouterOptions): ClientRouter;
|
|
172
244
|
//# sourceMappingURL=router.d.ts.map
|
package/dist/router.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"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"}
|