@rangojs/router 0.18.0 → 0.19.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/dist/types/browser/event-controller.d.ts +3 -3
- package/dist/types/browser/history-state.d.ts +2 -0
- package/dist/types/browser/navigation-transaction.d.ts +20 -2
- package/dist/types/browser/partial-update.d.ts +16 -1
- package/dist/types/browser/prefetch/cache.d.ts +6 -6
- package/dist/types/browser/react/Link.d.ts +19 -9
- package/dist/types/browser/react/context.d.ts +2 -2
- package/dist/types/browser/react/location-state-shared.d.ts +95 -56
- package/dist/types/browser/react/location-state.d.ts +1 -1
- package/dist/types/browser/transition-when.d.ts +80 -0
- package/dist/types/browser/types.d.ts +104 -9
- package/dist/types/build/generate-manifest.d.ts +8 -0
- package/dist/types/cache/background-task.d.ts +24 -2
- package/dist/types/cache/cache-exec-scope.d.ts +31 -0
- package/dist/types/cache/cache-key-utils.d.ts +44 -13
- package/dist/types/cache/cache-policy.d.ts +1 -1
- package/dist/types/cache/cache-runtime.d.ts +7 -0
- package/dist/types/cache/cache-scope.d.ts +117 -35
- package/dist/types/cache/cache-tag.d.ts +24 -4
- package/dist/types/cache/cf/cf-cache-store.d.ts +55 -44
- package/dist/types/cache/cf/cf-shell-frame.d.ts +1 -1
- package/dist/types/cache/cf/cf-tag-marker-memo.d.ts +0 -15
- package/dist/types/cache/document-cache.d.ts +10 -0
- package/dist/types/cache/handle-snapshot.d.ts +40 -8
- package/dist/types/cache/invalidation-order.d.ts +23 -0
- package/dist/types/cache/request-tag-mask.d.ts +54 -0
- package/dist/types/cache/shell-snapshot.d.ts +88 -141
- package/dist/types/cache/tag-invalidation.d.ts +38 -14
- package/dist/types/cache/types.d.ts +68 -61
- package/dist/types/cache/vercel/vercel-cache-store.d.ts +23 -16
- package/dist/types/client-urls/navigation.d.ts +28 -2
- package/dist/types/client-urls/server-projection.d.ts +5 -2
- package/dist/types/client-urls/types.d.ts +5 -5
- package/dist/types/client.d.ts +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.rsc.d.ts +1 -1
- package/dist/types/route-definition/helpers-types.d.ts +11 -11
- package/dist/types/route-name.d.ts +7 -0
- package/dist/types/router/error-handling.d.ts +1 -1
- package/dist/types/router/intercept-resolution.d.ts +2 -0
- package/dist/types/router/match-context.d.ts +5 -0
- package/dist/types/router/match-middleware/background-revalidation.d.ts +0 -4
- package/dist/types/router/router-options.d.ts +4 -1
- package/dist/types/router/segment-resolution/loader-cache.d.ts +18 -1
- package/dist/types/router/segment-resolution/loader-mask.d.ts +3 -4
- package/dist/types/router/segment-resolution/loader-snapshot.d.ts +14 -40
- package/dist/types/router/segment-resolution/mask-nested.d.ts +11 -3
- package/dist/types/router/segment-resolution/view-transition-default.d.ts +7 -5
- package/dist/types/router/transition-when.d.ts +24 -10
- package/dist/types/rsc/attach-transition-when.d.ts +18 -0
- package/dist/types/rsc/full-payload.d.ts +14 -7
- package/dist/types/rsc/response-cache-serve.d.ts +15 -12
- package/dist/types/rsc/shell-build-manifest.d.ts +4 -3
- package/dist/types/rsc/shell-capture-constants.d.ts +77 -20
- package/dist/types/rsc/shell-capture.d.ts +78 -81
- package/dist/types/rsc/shell-serve.d.ts +19 -48
- package/dist/types/rsc/types.d.ts +2 -0
- package/dist/types/segment-system.d.ts +7 -0
- package/dist/types/server/context.d.ts +89 -61
- package/dist/types/server/cookie-store.d.ts +30 -18
- package/dist/types/server/handle-store.d.ts +52 -1
- package/dist/types/server/request-context.d.ts +66 -45
- package/dist/types/server/request-headers.d.ts +44 -0
- package/dist/types/server.d.ts +1 -0
- package/dist/types/testing/e2e/index.d.ts +1 -1
- package/dist/types/testing/index.d.ts +3 -2
- package/dist/types/testing/internal/action-id.d.ts +7 -0
- package/dist/types/testing/location-state-key.d.ts +24 -0
- package/dist/types/testing/render-route.d.ts +17 -1
- package/dist/types/testing/run-transition-when.d.ts +44 -69
- package/dist/types/testing/serve-shell-request.d.ts +7 -6
- package/dist/types/testing/shell-status.d.ts +34 -22
- package/dist/types/transition-when-ref.d.ts +79 -0
- package/dist/types/types/cache-types.d.ts +15 -3
- package/dist/types/types/index.d.ts +1 -1
- package/dist/types/types/segments.d.ts +86 -71
- package/dist/types/urls/path-helper-types.d.ts +3 -4
- package/dist/types/urls/pattern-types.d.ts +3 -4
- package/dist/types/vite/plugins/transition-when-hoist.d.ts +45 -0
- package/dist/vite/index.js +960 -97
- package/package.json +1 -1
- package/skills/cache-guide/SKILL.md +76 -49
- package/skills/caching/SKILL.md +167 -69
- package/skills/client-urls/SKILL.md +1 -1
- package/skills/comparison/references/framework-comparison.md +8 -5
- package/skills/document-cache/SKILL.md +24 -0
- package/skills/hooks/SKILL.md +3 -1
- package/skills/hooks/navigation.md +23 -2
- package/skills/hooks/state.md +98 -6
- package/skills/intercept/SKILL.md +29 -12
- package/skills/loader/SKILL.md +52 -21
- package/skills/middleware/SKILL.md +18 -0
- package/skills/migrate-nextjs/SKILL.md +3 -3
- package/skills/observability/SKILL.md +6 -5
- package/skills/parallel/SKILL.md +1 -1
- package/skills/ppr/SKILL.md +129 -77
- package/skills/prerender/SKILL.md +3 -3
- package/skills/rango/SKILL.md +25 -6
- package/skills/route/SKILL.md +2 -0
- package/skills/testing/SKILL.md +27 -25
- package/skills/testing/cache-prerender.md +9 -9
- package/skills/testing/client-components.md +45 -3
- package/skills/testing/loader.md +3 -2
- package/skills/testing/middleware.md +1 -0
- package/skills/testing/predicates.md +49 -49
- package/skills/testing/render-handler.md +1 -0
- package/skills/testing/serve-shell-request.md +14 -0
- package/skills/testing/server-actions.md +9 -3
- package/skills/theme/SKILL.md +8 -4
- package/skills/typesafety/env-and-bindings.md +8 -0
- package/skills/use-cache/SKILL.md +64 -19
- package/skills/view-transitions/SKILL.md +150 -29
- package/src/__augment-tests__/augmented.check.ts +23 -0
- package/src/browser/event-controller.ts +4 -4
- package/src/browser/history-state.ts +52 -1
- package/src/browser/link-interceptor.ts +4 -0
- package/src/browser/navigation-bridge.ts +77 -18
- package/src/browser/navigation-client.ts +4 -3
- package/src/browser/navigation-store.ts +43 -1
- package/src/browser/navigation-transaction.ts +31 -11
- package/src/browser/partial-update.ts +146 -35
- package/src/browser/prefetch/cache.ts +6 -6
- package/src/browser/prefetch/fetch.ts +2 -2
- package/src/browser/react/Link.tsx +38 -33
- package/src/browser/react/NavigationProvider.tsx +2 -2
- package/src/browser/react/context.ts +2 -2
- package/src/browser/react/location-state-shared.ts +241 -49
- package/src/browser/react/location-state.ts +5 -2
- package/src/browser/rsc-router.tsx +4 -0
- package/src/browser/server-action-bridge.ts +84 -15
- package/src/browser/transition-when.ts +205 -0
- package/src/browser/types.ts +124 -10
- package/src/build/generate-manifest.ts +77 -1
- package/src/cache/background-task.ts +55 -2
- package/src/cache/cache-exec-scope.ts +48 -1
- package/src/cache/cache-key-utils.ts +56 -16
- package/src/cache/cache-policy.ts +9 -4
- package/src/cache/cache-runtime.ts +197 -144
- package/src/cache/cache-scope.ts +304 -112
- package/src/cache/cache-tag.ts +105 -13
- package/src/cache/cf/cf-cache-store.ts +152 -76
- package/src/cache/cf/cf-shell-frame.ts +2 -2
- package/src/cache/cf/cf-tag-marker-memo.ts +11 -100
- package/src/cache/document-cache.ts +53 -7
- package/src/cache/handle-snapshot.ts +52 -9
- package/src/cache/invalidation-order.ts +84 -0
- package/src/cache/request-tag-mask.ts +147 -0
- package/src/cache/shell-snapshot.ts +130 -348
- package/src/cache/tag-invalidation.ts +57 -51
- package/src/cache/types.ts +71 -67
- package/src/cache/vercel/vercel-cache-store.ts +61 -58
- package/src/client-urls/client-root.tsx +8 -4
- package/src/client-urls/client-urls.ts +8 -6
- package/src/client-urls/navigation.ts +55 -4
- package/src/client-urls/server-projection.ts +31 -10
- package/src/client-urls/types.ts +12 -5
- package/src/client.tsx +2 -0
- package/src/host/cookie-handler.ts +2 -1
- package/src/index.rsc.ts +3 -0
- package/src/index.ts +3 -0
- package/src/loader-redirect.tsx +7 -3
- package/src/prerender/build-shell-capture.ts +155 -146
- package/src/route-definition/dsl-helpers.ts +2 -0
- package/src/route-definition/helpers-types.ts +11 -11
- package/src/route-name.ts +12 -0
- package/src/router/content-negotiation.ts +4 -1
- package/src/router/error-handling.ts +5 -2
- package/src/router/handler-context.ts +10 -7
- package/src/router/intercept-resolution.ts +11 -1
- package/src/router/loader-resolution.ts +28 -3
- package/src/router/logging.ts +5 -3
- package/src/router/match-api.ts +62 -34
- package/src/router/match-context.ts +5 -0
- package/src/router/match-handlers.ts +9 -29
- package/src/router/match-middleware/background-revalidation.ts +3 -5
- package/src/router/match-middleware/cache-lookup.ts +35 -19
- package/src/router/match-middleware/cache-store.ts +15 -9
- package/src/router/match-result.ts +1 -0
- package/src/router/middleware.ts +2 -5
- package/src/router/navigation-snapshot.ts +6 -5
- package/src/router/prerender-match.ts +4 -0
- package/src/router/request-classification.ts +7 -4
- package/src/router/router-options.ts +4 -1
- package/src/router/segment-resolution/fresh.ts +0 -4
- package/src/router/segment-resolution/loader-cache.ts +150 -25
- package/src/router/segment-resolution/loader-mask.ts +3 -4
- package/src/router/segment-resolution/loader-snapshot.ts +15 -78
- package/src/router/segment-resolution/mask-nested.ts +47 -22
- package/src/router/segment-resolution/revalidation.ts +0 -3
- package/src/router/segment-resolution/view-transition-default.ts +6 -21
- package/src/router/telemetry.ts +6 -3
- package/src/router/transition-when.ts +34 -52
- package/src/router.ts +2 -1
- package/src/rsc/attach-transition-when.ts +47 -0
- package/src/rsc/full-payload.ts +30 -10
- package/src/rsc/handler.ts +12 -10
- package/src/rsc/loader-fetch.ts +2 -1
- package/src/rsc/manifest-init.ts +4 -0
- package/src/rsc/origin-guard.ts +8 -5
- package/src/rsc/progressive-enhancement.ts +7 -30
- package/src/rsc/response-cache-serve.ts +68 -80
- package/src/rsc/response-route-handler.ts +2 -2
- package/src/rsc/rsc-rendering.ts +206 -252
- package/src/rsc/server-action.ts +8 -20
- package/src/rsc/shell-build-manifest.ts +22 -20
- package/src/rsc/shell-capture-constants.ts +136 -20
- package/src/rsc/shell-capture.ts +352 -589
- package/src/rsc/shell-serve.ts +73 -109
- package/src/rsc/ssr-setup.ts +3 -2
- package/src/rsc/types.ts +2 -0
- package/src/segment-system.tsx +40 -7
- package/src/server/context.ts +189 -124
- package/src/server/cookie-store.ts +153 -127
- package/src/server/handle-store.ts +245 -27
- package/src/server/request-context.ts +123 -84
- package/src/server/request-headers.ts +134 -0
- package/src/server.ts +4 -0
- package/src/testing/dispatch.ts +4 -7
- package/src/testing/e2e/index.ts +1 -0
- package/src/testing/index.ts +5 -0
- package/src/testing/internal/action-id.ts +25 -0
- package/src/testing/internal/context.ts +1 -1
- package/src/testing/location-state-key.ts +45 -0
- package/src/testing/render-handler.ts +1 -1
- package/src/testing/render-route.tsx +109 -16
- package/src/testing/run-client-revalidate.ts +3 -19
- package/src/testing/run-loader.ts +5 -1
- package/src/testing/run-transition-when.ts +109 -172
- package/src/testing/serve-shell-request.ts +10 -7
- package/src/testing/shell-status.ts +60 -56
- package/src/transition-when-ref.ts +220 -0
- package/src/types/cache-types.ts +15 -3
- package/src/types/index.ts +3 -0
- package/src/types/segments.ts +94 -91
- package/src/urls/path-helper-types.ts +3 -4
- package/src/urls/pattern-types.ts +3 -4
- package/src/vite/discovery/discover-routers.ts +3 -0
- package/src/vite/discovery/shell-prerender-phase.ts +0 -2
- package/src/vite/discovery/virtual-module-codegen.ts +16 -6
- package/src/vite/plugins/transition-when-hoist.ts +1064 -0
- package/src/vite/rango.ts +2 -0
- package/src/vite/router-discovery.ts +75 -5
- package/dist/types/rsc/transition-gate.d.ts +0 -23
- package/src/rsc/transition-gate.ts +0 -86
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { ReactNode } from "react";
|
|
2
2
|
import type { ErrorInfo, NotFoundInfo } from "./boundaries.js";
|
|
3
|
-
import type {
|
|
3
|
+
import type { IsActionFn } from "./handler-context.js";
|
|
4
|
+
import type { DefaultRouteName } from "./global-namespace.js";
|
|
4
5
|
/**
|
|
5
6
|
* CSS class(es) for a ViewTransition phase.
|
|
6
7
|
* Can be a simple string or an object mapping transition types to class names
|
|
@@ -8,75 +9,88 @@ import type { RevalidateParams, HandlerContext } from "./handler-context.js";
|
|
|
8
9
|
*/
|
|
9
10
|
export type ViewTransitionClass = Record<string, string> | string;
|
|
10
11
|
/**
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* It mirrors the {@link ShouldRevalidateFn} args a `revalidate()` predicate
|
|
14
|
-
* gets — the same navigation/action metadata — so the two read the same shape,
|
|
15
|
-
* plus `get`/`env` for request-context reads. There is no full `HandlerContext`
|
|
16
|
-
* here: the gate runs at the RSC-payload layer with the request context, not a
|
|
17
|
-
* handler context, so handler-only sugar (`search`/`build`/`dev`/`headers`) is
|
|
18
|
-
* absent by design. On ordinary routes, `get` can read what handlers or
|
|
19
|
-
* middleware set via `ctx.set(...)`. On `ppr` routes the gate runs before route
|
|
20
|
-
* handlers, so only middleware-established values are available.
|
|
21
|
-
*
|
|
22
|
-
* Field availability (all source fields are optional — never fabricated):
|
|
23
|
-
* - `currentUrl` / `currentParams` / `fromRouteName` (the navigation SOURCE) are
|
|
24
|
-
* populated on soft navigations and action-success revalidations. They are
|
|
25
|
-
* undefined on an initial full document load and on action-error / no-JS error
|
|
26
|
-
* paths that skip the navigation snapshot — there is no prior page to name.
|
|
27
|
-
* - `nextUrl` / `nextParams` / `get` / `env` / `method` are always present;
|
|
28
|
-
* `toRouteName` is present only when the target route is named (undefined for
|
|
29
|
-
* unnamed/auto-generated routes, like `fromRouteName`).
|
|
30
|
-
* - `actionId` / `actionUrl` / `actionResult` / `formData` are populated only
|
|
31
|
-
* when a server action triggered the render; `method` is "POST" then, "GET"
|
|
32
|
-
* otherwise. On no-JS (progressive-enhancement) action paths `actionId` may be
|
|
33
|
-
* undefined when React cannot surface the action's stable id: the success
|
|
34
|
-
* re-render still sets `actionUrl`/`formData` for a recognized action, but the
|
|
35
|
-
* error-boundary re-render exposes `actionUrl` only when `actionId` resolved.
|
|
36
|
-
* Malformed form bodies that fail before action detection expose no action
|
|
37
|
-
* fields. Treat `actionId` as "the action, if known", not as "was this an
|
|
38
|
-
* action".
|
|
39
|
-
*
|
|
40
|
-
* PREFETCH / CACHE CAVEAT (read this before gating on the source): the gate runs
|
|
41
|
-
* server-side during resolution. A PREFETCHED navigation renders at prefetch
|
|
42
|
-
* time, so `currentUrl`/`currentParams`/`fromRouteName` reflect the page the
|
|
43
|
-
* prefetch fired from, NOT necessarily the page the user actually navigates from
|
|
44
|
-
* — the decision is baked into the stored Flight payload and replayed verbatim.
|
|
45
|
-
* A non-PPR `cache()`/prerender hit replays the stored transition with the
|
|
46
|
-
* predicate NOT re-run. A `ppr` route instead evaluates the predicate before
|
|
47
|
-
* handlers on every match, including cache, prerender, and PPR replay. Prefetch
|
|
48
|
-
* still freezes the server decision into its Flight payload. If the gate must
|
|
49
|
-
* reflect the exact click-time source, source-scope the prefetch
|
|
50
|
-
* (`<Link prefetchKey=":source">`).
|
|
12
|
+
* One side of a navigation as the browser knows it when a
|
|
13
|
+
* `transition({ when })` predicate runs.
|
|
51
14
|
*/
|
|
52
|
-
export
|
|
15
|
+
export interface RouteLocation {
|
|
16
|
+
readonly url: URL;
|
|
17
|
+
/** Merged route params of the location. */
|
|
18
|
+
readonly params: Readonly<Record<string, string>>;
|
|
19
|
+
/**
|
|
20
|
+
* The matched route's name (include prefixes applied), typed from the
|
|
21
|
+
* generated route map; undefined for an unnamed route or when unknown.
|
|
22
|
+
* Internal names never appear here.
|
|
23
|
+
*/
|
|
24
|
+
readonly routeName: DefaultRouteName | undefined;
|
|
25
|
+
/**
|
|
26
|
+
* `history.state` of this entry at decision time. Read a typed slot with
|
|
27
|
+
* `Def.read(location)` (a `createLocationState()` definition).
|
|
28
|
+
*/
|
|
29
|
+
readonly state: unknown;
|
|
30
|
+
}
|
|
53
31
|
/**
|
|
54
|
-
*
|
|
32
|
+
* A navigation side as the server sees it, for intercept's `when` selector:
|
|
33
|
+
* a {@link RouteLocation} without `state` (history state never reaches the
|
|
34
|
+
* server).
|
|
35
|
+
*/
|
|
36
|
+
export type ServerRouteLocation = Omit<RouteLocation, "state">;
|
|
37
|
+
/**
|
|
38
|
+
* How the navigation being decided was started.
|
|
55
39
|
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
|
|
65
|
-
|
|
40
|
+
* - `"push"` / `"replace"`: a Link click, `router.push()` / `router.replace()`
|
|
41
|
+
* or `navigate()`.
|
|
42
|
+
* - `"pop"`: browser back/forward (restored from the history cache or
|
|
43
|
+
* refetched).
|
|
44
|
+
* - `"action"`: the commit that applies a server action's revalidation,
|
|
45
|
+
* including the error-boundary commit of a failed action.
|
|
46
|
+
* - `"revalidate"`: a re-render of the current URL: `router.refresh()`,
|
|
47
|
+
* cross-tab invalidation, or the background revalidation of a stale entry.
|
|
48
|
+
*/
|
|
49
|
+
export type TransitionWhenKind = "push" | "replace" | "pop" | "action" | "revalidate";
|
|
50
|
+
/**
|
|
51
|
+
* The context a `transition({ when })` predicate receives. The predicate runs
|
|
52
|
+
* in the BROWSER, once per navigation, at the first commit that presents the
|
|
53
|
+
* destination. The server never calls it.
|
|
66
54
|
*
|
|
67
|
-
*
|
|
68
|
-
*
|
|
55
|
+
* - `from`: the committed location being left.
|
|
56
|
+
* - `to`: the destination. The same object as `from` for `"action"` and
|
|
57
|
+
* `"revalidate"`.
|
|
58
|
+
* - `isAction`: the matcher `revalidate()` predicates get; `false` off an
|
|
59
|
+
* action.
|
|
60
|
+
* - `action`: present only for `kind: "action"`.
|
|
61
|
+
*/
|
|
62
|
+
export interface TransitionWhenContext {
|
|
63
|
+
readonly kind: TransitionWhenKind;
|
|
64
|
+
readonly from: RouteLocation;
|
|
65
|
+
readonly to: RouteLocation;
|
|
66
|
+
readonly isAction: IsActionFn;
|
|
67
|
+
/** Present only for `kind: "action"`. */
|
|
68
|
+
readonly action?: {
|
|
69
|
+
/** The action's hashed `$$id` in the browser; match with `isAction(fn)` instead. */
|
|
70
|
+
readonly id: string | undefined;
|
|
71
|
+
/** The FormData argument the action received (the 2nd argument under `useActionState`). */
|
|
72
|
+
readonly formData: FormData | undefined;
|
|
73
|
+
/** The action's return value on success. */
|
|
74
|
+
readonly result: unknown;
|
|
75
|
+
/** What a failed action threw (its error-boundary commit); `result` is undefined then. */
|
|
76
|
+
readonly error: unknown;
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Browser-run predicate that gates whether a navigation holds and animates.
|
|
69
81
|
*
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
*
|
|
82
|
+
* In `urls()` write it inline (`transition({ when: (ctx) => ... })`, which
|
|
83
|
+
* the build hoists into a client module; it may reference only its own
|
|
84
|
+
* bindings, globals and client-safe imports) or export it from a
|
|
85
|
+
* `"use client"` module and import it; in `clientUrls()` it is an inline
|
|
86
|
+
* function. Anything else (a server function, a non-function) fails route
|
|
87
|
+
* discovery.
|
|
75
88
|
*
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
-
*
|
|
89
|
+
* `false` makes the navigation an urgent commit: no hold, no view transition,
|
|
90
|
+
* and a same-route navigation streams its `loading()` fallback. The segment
|
|
91
|
+
* keeps its key and its `<ViewTransition>` element (every class "none"), so
|
|
92
|
+
* nothing remounts. One predicate returning false decides for the whole
|
|
93
|
+
* navigation. A throw is logged with `console.error` and counts as `false`.
|
|
80
94
|
*/
|
|
81
95
|
export type TransitionWhenFn = (ctx: TransitionWhenContext) => boolean;
|
|
82
96
|
/**
|
|
@@ -108,13 +122,8 @@ export interface TransitionConfig {
|
|
|
108
122
|
*/
|
|
109
123
|
viewTransition?: "auto" | false;
|
|
110
124
|
/**
|
|
111
|
-
* Optional
|
|
112
|
-
*
|
|
113
|
-
* the request, so the navigation streams its loading fallback instead of
|
|
114
|
-
* holding. PPR routes evaluate it before route handlers and on every replay;
|
|
115
|
-
* other routes evaluate it after handlers on fresh resolution. The predicate
|
|
116
|
-
* is server-only and never serialized to the client; only its resolved effect
|
|
117
|
-
* crosses. See {@link TransitionWhenFn}.
|
|
125
|
+
* Optional browser-run predicate that gates this transition per
|
|
126
|
+
* navigation. See {@link TransitionWhenFn}.
|
|
118
127
|
*/
|
|
119
128
|
when?: TransitionWhenFn;
|
|
120
129
|
}
|
|
@@ -248,6 +257,12 @@ export interface MatchResult {
|
|
|
248
257
|
* decline its optimistic presentation for targets an intercept would claim.
|
|
249
258
|
*/
|
|
250
259
|
interceptTargets?: string[];
|
|
260
|
+
/**
|
|
261
|
+
* Set on a partial match when an intercept targets the matched route,
|
|
262
|
+
* whether or not it applied from this source. The response depends on the
|
|
263
|
+
* source, so the RSC handler scopes its prefetch entry to it (#1007).
|
|
264
|
+
*/
|
|
265
|
+
interceptTargeted?: true;
|
|
251
266
|
/**
|
|
252
267
|
* Redirect URL for trailing slash normalization.
|
|
253
268
|
* When set, the RSC handler should return a 308 redirect to this URL
|
|
@@ -194,10 +194,9 @@ export type PathHelpers<TEnv> = {
|
|
|
194
194
|
* transition cannot fire without a startTransition. See
|
|
195
195
|
* skills/view-transitions for the startTransition x ViewTransition matrix.
|
|
196
196
|
*
|
|
197
|
-
* Pass `when
|
|
198
|
-
*
|
|
199
|
-
*
|
|
200
|
-
* not handler-set values.
|
|
197
|
+
* Pass `when` (inline, hoisted into a client module by the build, or a
|
|
198
|
+
* "use client" export) to gate the navigation's hold and view transition in
|
|
199
|
+
* the browser (never on the server); see TransitionWhenFn.
|
|
201
200
|
*/
|
|
202
201
|
transition: {
|
|
203
202
|
(): TransitionItem;
|
|
@@ -59,10 +59,9 @@ export interface PartialPrerenderProps {
|
|
|
59
59
|
tags?: string[];
|
|
60
60
|
/**
|
|
61
61
|
* Upper bound (serialized UTF-8 bytes) on the loader pins in the capture
|
|
62
|
-
* data snapshot: the loader records
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
* still stored and every HIT still replays the handler layer, but the
|
|
62
|
+
* data snapshot: the bake-lane loader records. The doc record (the handler
|
|
63
|
+
* layer every HIT replays) is exempt. Over the cap the pins are dropped: the
|
|
64
|
+
* shell is still stored and every HIT still replays the handler layer, but the
|
|
66
65
|
* pinned loaders read the live store, so drifted cached content can
|
|
67
66
|
* hydration-mismatch and be repaired client-side. Reported once per key.
|
|
68
67
|
* Defaults to 8 MiB. The whole entry is bounded separately by the store's
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { Plugin } from "vite";
|
|
2
|
+
import MagicString from "magic-string";
|
|
3
|
+
/** Specifiers that can never load in the browser. */
|
|
4
|
+
export declare function isServerOnlySpecifier(source: string): boolean;
|
|
5
|
+
export interface HoistTransitionWhenDeps {
|
|
6
|
+
/**
|
|
7
|
+
* Whether an import the literal re-emits is server-only beyond its
|
|
8
|
+
* specifier (the plugin resolves it and looks for `import "server-only"`).
|
|
9
|
+
*/
|
|
10
|
+
isServerOnlyImport?(source: string): Promise<boolean> | boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface HoistTransitionWhenResult {
|
|
13
|
+
readonly code: string;
|
|
14
|
+
readonly map: ReturnType<MagicString["generateMap"]>;
|
|
15
|
+
/** Virtual module source per hoisted literal, by index. */
|
|
16
|
+
readonly modules: readonly string[];
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Hoist every inline `transition({ when: <function literal> })` of a urls
|
|
20
|
+
* module. Returns null when there is nothing to hoist. Throws a
|
|
21
|
+
* TransitionWhenError for a capture, a server-only import or module-loading
|
|
22
|
+
* expression, an accessor `when`, or a local identifier value.
|
|
23
|
+
*/
|
|
24
|
+
export declare function hoistTransitionWhens(code: string, id: string, deps?: HoistTransitionWhenDeps): Promise<HoistTransitionWhenResult | null>;
|
|
25
|
+
/** The hoisted module index a `?rango-when=N` id names, or null. */
|
|
26
|
+
export declare function parseHoistedWhenId(id: string): {
|
|
27
|
+
file: string;
|
|
28
|
+
index: number;
|
|
29
|
+
} | null;
|
|
30
|
+
/**
|
|
31
|
+
* The plugin: hoists in the RSC environment (where urls() modules are
|
|
32
|
+
* evaluated) and serves the `?rango-when=N` modules in every environment
|
|
33
|
+
* (RSC, SSR and client all load them).
|
|
34
|
+
*
|
|
35
|
+
* `load` serves the modules the transform emitted, not a re-hoist of the file
|
|
36
|
+
* on disk: the transform hoists the pipeline code, which an earlier plugin
|
|
37
|
+
* may have changed, so re-hoisting the disk source can number the literals
|
|
38
|
+
* differently and serve the wrong one for index N. The disk source is the
|
|
39
|
+
* fallback only when the transform has not seen the current file: an
|
|
40
|
+
* environment loading before the RSC transform ran (the order environments
|
|
41
|
+
* ask in is not fixed), or an edit the RSC environment has not re-transformed
|
|
42
|
+
* yet (serving the last transform would then be stale). The map is per
|
|
43
|
+
* plugin instance, so every environment of one dev server or build shares it.
|
|
44
|
+
*/
|
|
45
|
+
export declare function transitionWhenHoistPlugin(): Plugin;
|