@rangojs/router 0.26.6 → 0.28.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/bin/rango.js +1 -1
- package/dist/types/__internal.d.ts +7 -1
- package/dist/types/browser/action-coordinator.d.ts +0 -4
- package/dist/types/browser/action-fence.d.ts +11 -3
- package/dist/types/browser/event-controller.d.ts +20 -1
- package/dist/types/browser/history-state.d.ts +7 -9
- package/dist/types/browser/intercept-utils.d.ts +23 -0
- package/dist/types/browser/navigation-store.d.ts +8 -6
- package/dist/types/browser/react/filter-segment-order.d.ts +2 -2
- package/dist/types/browser/rsc-router.d.ts +1 -1
- package/dist/types/browser/segment-reconciler.d.ts +6 -4
- package/dist/types/browser/types.d.ts +2 -1
- package/dist/types/browser/wire-protocol.d.ts +25 -0
- package/dist/types/cache/cache-key-utils.d.ts +11 -5
- package/dist/types/cache/cache-scope.d.ts +34 -22
- package/dist/types/cache/cf/cf-cache-constants.d.ts +2 -2
- package/dist/types/cache/cf/cf-cache-store.d.ts +47 -65
- package/dist/types/cache/cf/cf-kv-utils.d.ts +1 -1
- package/dist/types/cache/handle-snapshot.d.ts +9 -4
- package/dist/types/cache/segment-codec.d.ts +14 -0
- package/dist/types/cache/shell-snapshot.d.ts +1 -1
- package/dist/types/cache/tag-invalidation.d.ts +10 -0
- package/dist/types/cache/taint.d.ts +5 -3
- package/dist/types/cache/types.d.ts +7 -3
- package/dist/types/cache/vercel/vercel-cache-store.d.ts +8 -6
- package/dist/types/prefetch-markers.d.ts +4 -6
- package/dist/types/prerender/store.d.ts +31 -0
- package/dist/types/prerender/warm-request.d.ts +3 -3
- package/dist/types/prerender.d.ts +2 -2
- package/dist/types/route-name.d.ts +5 -0
- package/dist/types/router/error-handling.d.ts +4 -4
- package/dist/types/router/instrument.d.ts +4 -3
- package/dist/types/router/intercept-resolution.d.ts +25 -9
- package/dist/types/router/match-context.d.ts +12 -11
- package/dist/types/router/match-handlers.d.ts +2 -6
- package/dist/types/router/match-middleware/background-revalidation.d.ts +10 -20
- package/dist/types/router/match-middleware/cache-lookup.d.ts +35 -87
- package/dist/types/router/match-middleware/cache-store.d.ts +2 -2
- package/dist/types/router/match-middleware/segment-resolution.d.ts +8 -6
- package/dist/types/router/prerender-match.d.ts +21 -6
- package/dist/types/router/preview-match.d.ts +2 -7
- package/dist/types/router/request-classification.d.ts +5 -0
- package/dist/types/router/revalidation.d.ts +6 -1
- package/dist/types/router/router-context.d.ts +9 -63
- package/dist/types/router/router-interfaces.d.ts +8 -14
- package/dist/types/router/segment-resolution/loader-cache.d.ts +3 -3
- package/dist/types/router/segment-resolution/loader-mask.d.ts +4 -4
- package/dist/types/router/segment-resolution/prefetch-deferral.d.ts +20 -18
- package/dist/types/router/segment-resolution/resolution-pass.d.ts +93 -0
- package/dist/types/router/segment-resolution/revalidation.d.ts +82 -31
- package/dist/types/router/segment-resolution.d.ts +1 -2
- package/dist/types/router/segment-wrappers.d.ts +11 -48
- package/dist/types/router/telemetry.d.ts +2 -0
- package/dist/types/router/types.d.ts +10 -0
- package/dist/types/rsc/full-payload.d.ts +2 -2
- package/dist/types/rsc/handler-context.d.ts +6 -6
- package/dist/types/rsc/json-route-result.d.ts +5 -9
- package/dist/types/rsc/request-stages.d.ts +203 -0
- package/dist/types/rsc/response-cache-serve.d.ts +7 -12
- package/dist/types/rsc/response-route-handler.d.ts +2 -2
- package/dist/types/rsc/routine-plan.d.ts +1 -1
- package/dist/types/rsc/server-action.d.ts +2 -2
- package/dist/types/rsc/shell-capture-constants.d.ts +2 -2
- package/dist/types/rsc/shell-capture.d.ts +132 -15
- package/dist/types/rsc/shell-serve.d.ts +37 -12
- package/dist/types/server/context.d.ts +9 -8
- package/dist/types/server/handle-store.d.ts +16 -0
- package/dist/types/server/render-pass.d.ts +72 -0
- package/dist/types/server/request-context.d.ts +24 -104
- package/dist/types/server/rewrite-trail.d.ts +2 -2
- package/dist/types/testing/dispatch.d.ts +35 -18
- package/dist/types/testing/serve-shell-request.d.ts +7 -0
- package/dist/types/types/cache-types.d.ts +6 -3
- package/dist/types/types/error-types.d.ts +9 -1
- package/dist/types/types/handler-context.d.ts +18 -7
- package/dist/types/types/segments.d.ts +1 -1
- package/dist/types/vite/discovery/build-discovery-phase.d.ts +40 -0
- package/dist/types/vite/discovery/build-env.d.ts +22 -0
- package/dist/types/vite/discovery/bundle-scan-phase.d.ts +12 -0
- package/dist/types/vite/discovery/dev-prerender-cache.d.ts +3 -2
- package/dist/types/vite/discovery/dev-server-phase.d.ts +26 -0
- package/dist/types/vite/discovery/discovery-errors.d.ts +1 -1
- package/dist/types/vite/discovery/state.d.ts +12 -0
- package/dist/types/vite/plugins/version-plugin.d.ts +1 -1
- package/dist/types/vite/plugins/virtual-entries.d.ts +1 -1
- package/dist/types/vite/router-discovery.d.ts +8 -47
- package/dist/types/vite/temp-rsc-server.d.ts +39 -0
- package/dist/types/vite/utils/prerender-utils.d.ts +9 -0
- package/dist/types/wire-params.d.ts +34 -0
- package/dist/vite/index.js +3809 -3710
- package/package.json +1 -1
- package/skills/cache-guide/SKILL.md +8 -5
- package/skills/caching/SKILL.md +37 -18
- package/skills/client-urls/SKILL.md +2 -1
- package/skills/document-cache/SKILL.md +18 -1
- package/skills/handler-use/SKILL.md +1 -1
- package/skills/intercept/SKILL.md +53 -13
- package/skills/layout/SKILL.md +11 -7
- package/skills/loader/SKILL.md +30 -13
- package/skills/middleware/SKILL.md +19 -1
- package/skills/migrate-nextjs/SKILL.md +5 -4
- package/skills/parallel/SKILL.md +5 -4
- package/skills/ppr/SKILL.md +19 -3
- package/skills/prerender/SKILL.md +39 -15
- package/skills/rango/SKILL.md +23 -11
- package/skills/server-actions/SKILL.md +51 -6
- package/skills/testing/predicates.md +1 -1
- package/skills/testing/response-routes.md +6 -4
- package/skills/testing/serve-shell-request.md +7 -7
- package/skills/use-cache/SKILL.md +46 -8
- package/skills/ux-architecture/SKILL.md +3 -2
- package/src/__internal.ts +7 -1
- package/src/browser/action-coordinator.ts +2 -13
- package/src/browser/action-fence.ts +11 -3
- package/src/browser/connection-warmup.ts +3 -1
- package/src/browser/event-controller.ts +42 -3
- package/src/browser/history-state.ts +15 -13
- package/src/browser/intercept-utils.ts +51 -0
- package/src/browser/navigation-bridge.ts +34 -30
- package/src/browser/navigation-client.ts +21 -33
- package/src/browser/navigation-store.ts +25 -27
- package/src/browser/navigation-transaction.ts +7 -11
- package/src/browser/partial-update.ts +8 -0
- package/src/browser/prefetch/cache.ts +2 -1
- package/src/browser/prefetch/fetch.ts +8 -16
- package/src/browser/prefetch/queue.ts +4 -4
- package/src/browser/react/NavigationProvider.tsx +2 -1
- package/src/browser/react/filter-segment-order.ts +2 -2
- package/src/browser/rsc-router.tsx +17 -2
- package/src/browser/segment-reconciler.ts +66 -53
- package/src/browser/server-action-bridge.ts +265 -127
- package/src/browser/types.ts +2 -1
- package/src/browser/wire-protocol.ts +41 -0
- package/src/cache/cache-key-utils.ts +11 -5
- package/src/cache/cache-runtime.ts +110 -50
- package/src/cache/cache-scope.ts +110 -64
- package/src/cache/cf/cf-cache-constants.ts +2 -2
- package/src/cache/cf/cf-cache-store.ts +486 -874
- package/src/cache/cf/cf-kv-utils.ts +1 -1
- package/src/cache/document-cache.ts +42 -15
- package/src/cache/handle-snapshot.ts +19 -7
- package/src/cache/segment-codec.ts +55 -0
- package/src/cache/shell-snapshot.ts +2 -2
- package/src/cache/tag-invalidation.ts +21 -2
- package/src/cache/taint.ts +5 -3
- package/src/cache/types.ts +7 -3
- package/src/cache/vercel/vercel-cache-store.ts +243 -310
- package/src/handles/pushed-by.ts +1 -1
- package/src/prefetch-markers.ts +4 -7
- package/src/prerender/store.ts +76 -0
- package/src/prerender/warm-request.ts +8 -4
- package/src/prerender.ts +2 -2
- package/src/route-name.ts +8 -0
- package/src/router/error-handling.ts +4 -4
- package/src/router/instrument.ts +4 -3
- package/src/router/intercept-resolution.ts +77 -75
- package/src/router/loader-resolution.ts +5 -4
- package/src/router/match-api.ts +4 -5
- package/src/router/match-context.ts +33 -12
- package/src/router/match-handlers.ts +8 -20
- package/src/router/match-middleware/background-revalidation.ts +41 -53
- package/src/router/match-middleware/cache-lookup.ts +680 -720
- package/src/router/match-middleware/cache-store.ts +14 -12
- package/src/router/match-middleware/intercept-resolution.ts +3 -23
- package/src/router/match-middleware/segment-resolution.ts +34 -61
- package/src/router/match-result.ts +1 -20
- package/src/router/middleware.ts +69 -11
- package/src/router/navigation-snapshot.ts +4 -3
- package/src/router/prerender-match.ts +100 -44
- package/src/router/preview-match.ts +6 -41
- package/src/router/request-classification.ts +13 -7
- package/src/router/revalidation.ts +33 -7
- package/src/router/route-snapshot.ts +2 -5
- package/src/router/router-context.ts +14 -117
- package/src/router/router-interfaces.ts +8 -14
- package/src/router/segment-resolution/loader-cache.ts +14 -9
- package/src/router/segment-resolution/loader-mask.ts +5 -5
- package/src/router/segment-resolution/prefetch-deferral.ts +30 -27
- package/src/router/segment-resolution/resolution-pass.ts +137 -0
- package/src/router/segment-resolution/revalidation.ts +897 -776
- package/src/router/segment-resolution.ts +4 -13
- package/src/router/segment-wrappers.ts +51 -269
- package/src/router/telemetry.ts +5 -0
- package/src/router/types.ts +10 -0
- package/src/router.ts +12 -13
- package/src/rsc/full-payload.ts +6 -5
- package/src/rsc/handler-context.ts +8 -14
- package/src/rsc/handler.ts +126 -507
- package/src/rsc/json-route-result.ts +5 -9
- package/src/rsc/loader-fetch.ts +6 -5
- package/src/rsc/progressive-enhancement.ts +5 -0
- package/src/rsc/request-stages.ts +757 -0
- package/src/rsc/response-cache-serve.ts +10 -14
- package/src/rsc/response-route-handler.ts +13 -5
- package/src/rsc/rewrite-passes.ts +2 -1
- package/src/rsc/routine-plan.ts +1 -1
- package/src/rsc/rsc-rendering.ts +172 -349
- package/src/rsc/server-action.ts +87 -113
- package/src/rsc/shell-capture-constants.ts +3 -1
- package/src/rsc/shell-capture.ts +212 -169
- package/src/rsc/shell-serve.ts +121 -18
- package/src/rsc/ssr-setup.ts +5 -4
- package/src/segment-system.tsx +3 -3
- package/src/server/context.ts +22 -25
- package/src/server/handle-store.ts +55 -0
- package/src/server/render-pass.ts +291 -0
- package/src/server/request-context.ts +26 -115
- package/src/server/rewrite-trail.ts +6 -4
- package/src/ssr/index.tsx +1 -1
- package/src/ssr/ssr-root.tsx +1 -0
- package/src/testing/dispatch.ts +223 -710
- package/src/testing/e2e/page-helpers.ts +2 -2
- package/src/testing/serve-shell-request.ts +37 -32
- package/src/types/cache-types.ts +6 -3
- package/src/types/error-types.ts +9 -1
- package/src/types/handler-context.ts +21 -7
- package/src/types/segments.ts +1 -1
- package/src/vite/discovery/build-discovery-phase.ts +204 -0
- package/src/vite/discovery/build-env.ts +148 -0
- package/src/vite/discovery/bundle-scan-phase.ts +128 -0
- package/src/vite/discovery/dev-prerender-cache.ts +8 -3
- package/src/vite/discovery/dev-server-phase.ts +1776 -0
- package/src/vite/discovery/discover-routers.ts +1 -1
- package/src/vite/discovery/discovery-errors.ts +1 -1
- package/src/vite/discovery/prerender-collection.ts +24 -39
- package/src/vite/discovery/state.ts +15 -0
- package/src/vite/plugins/version-plugin.ts +1 -1
- package/src/vite/plugins/virtual-entries.ts +1 -1
- package/src/vite/router-discovery.ts +29 -2428
- package/src/vite/temp-rsc-server.ts +223 -0
- package/src/vite/utils/prerender-utils.ts +47 -0
- package/src/wire-params.ts +35 -0
- package/dist/types/router/segment-resolution/fresh.d.ts +0 -72
- package/src/router/segment-resolution/fresh.ts +0 -945
|
@@ -5,18 +5,13 @@
|
|
|
5
5
|
* matched entry tree, condition eval, key resolution (route key() > store
|
|
6
6
|
* keyGenerator > default, CacheScope.resolveKeyFrom), tag resolution,
|
|
7
7
|
* pre-handler-callback timing, and the fresh-hit / SWR-revalidate /
|
|
8
|
-
* miss-write branches — for
|
|
9
|
-
*
|
|
10
|
-
*
|
|
8
|
+
* miss-write branches — for the response-route handler
|
|
9
|
+
* (rsc/response-route-handler.ts), which the production handler and the
|
|
10
|
+
* dispatch testing primitive both run (rsc/request-stages.ts
|
|
11
|
+
* serveResponseRoute), so the two can never drift.
|
|
11
12
|
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
* testing barrel's EAGER graph (dispatch imports it). So `createCacheScope` is
|
|
15
|
-
* NOT imported here at runtime — it is INJECTED by the caller (production
|
|
16
|
-
* imports it statically; dispatch lazy-imports it only once a response route
|
|
17
|
-
* matches). The only runtime imports here are plugin-rsc-free
|
|
18
|
-
* (helpers' isCacheableStatus/finalizeResponse, traverseBack); cache-scope is a
|
|
19
|
-
* type-only import (erased at build).
|
|
13
|
+
* `createCacheScope` is injected by the caller: the response-route handler
|
|
14
|
+
* passes the real one, unit tests a stub.
|
|
20
15
|
*/
|
|
21
16
|
|
|
22
17
|
import { isRewrite } from "../route-definition/rewrite.js";
|
|
@@ -44,7 +39,7 @@ import {
|
|
|
44
39
|
} from "../cache/tag-invalidation.js";
|
|
45
40
|
import { hasPerClientSignal } from "../browser/cookie-name.js";
|
|
46
41
|
|
|
47
|
-
/** Injected cache-scope builder
|
|
42
|
+
/** Injected cache-scope builder. */
|
|
48
43
|
export interface CacheScopeDeps {
|
|
49
44
|
createCacheScope: (
|
|
50
45
|
config: EntryCacheConfig | undefined,
|
|
@@ -110,8 +105,9 @@ export async function serveResponseRouteWithCache(
|
|
|
110
105
|
let cacheKey = `response:${responseType}:${requestKeyBase(reqCtx, url.host, url.pathname, url.searchParams, undefined, reqCtx._searchParamsFilter)}`;
|
|
111
106
|
|
|
112
107
|
// Keyed like the segment record (CacheScope.resolveKeyFrom): with key()
|
|
113
|
-
// results on the cache() chain (
|
|
114
|
-
//
|
|
108
|
+
// results on the cache() chain (they replace the URL part, namespaced,
|
|
109
|
+
// #975; a response entry has no request kind to keep) or an enclosing
|
|
110
|
+
// scope on another store whose keyGenerator partitions (#974),
|
|
115
111
|
// `response:` plus the composed key, so a nested cache() never shares an
|
|
116
112
|
// entry across the enclosing partitions (#970); otherwise the store's
|
|
117
113
|
// keyGenerator result (it modifies the default key), else the default key.
|
|
@@ -24,7 +24,7 @@ import {
|
|
|
24
24
|
assertNonCacheableReadAllowed,
|
|
25
25
|
type EntryData,
|
|
26
26
|
} from "../server/context.js";
|
|
27
|
-
import type {
|
|
27
|
+
import type { RequestStageContext } from "./request-stages.js";
|
|
28
28
|
import { createProblemDetails } from "./response-error.js";
|
|
29
29
|
import {
|
|
30
30
|
createReloadResponse,
|
|
@@ -36,6 +36,7 @@ import {
|
|
|
36
36
|
} from "./helpers.js";
|
|
37
37
|
import { isWebSocketUpgradeResponse } from "../response-utils.js";
|
|
38
38
|
import { stringifyJsonRouteResult } from "./json-route-result.js";
|
|
39
|
+
import { WIRE } from "../wire-params.js";
|
|
39
40
|
|
|
40
41
|
export interface ResponseRouteMatch {
|
|
41
42
|
responseType: string;
|
|
@@ -57,14 +58,17 @@ export interface ResponseRouteMatch {
|
|
|
57
58
|
* so the browser triggers a hard navigation to the response route URL.
|
|
58
59
|
*/
|
|
59
60
|
export async function handleResponseRoute<TEnv>(
|
|
60
|
-
handlerCtx:
|
|
61
|
+
handlerCtx: Pick<
|
|
62
|
+
RequestStageContext<TEnv>,
|
|
63
|
+
"callOnError" | "getRequiredRouteMap" | "reportResponseRouteError"
|
|
64
|
+
>,
|
|
61
65
|
preview: ResponseRouteMatch,
|
|
62
66
|
request: Request,
|
|
63
67
|
env: TEnv,
|
|
64
68
|
url: URL,
|
|
65
69
|
variables: Record<string, any>,
|
|
66
70
|
): Promise<Response> {
|
|
67
|
-
const isPartial = url.searchParams.has(
|
|
71
|
+
const isPartial = url.searchParams.has(WIRE.partial);
|
|
68
72
|
|
|
69
73
|
// Partial requests (client-side navigation) to response routes
|
|
70
74
|
// get X-RSC-Reload to trigger hard navigation in the browser
|
|
@@ -122,7 +126,7 @@ export async function handleResponseRoute<TEnv>(
|
|
|
122
126
|
// Runtime guard: the json() return type rejects nested Promises at
|
|
123
127
|
// compile time, but an `as`-cast or untyped (JS) handler can still slip
|
|
124
128
|
// one through. stringifyJsonRouteResult throws a clear error instead of
|
|
125
|
-
// shipping empty data
|
|
129
|
+
// shipping empty data.
|
|
126
130
|
const body = stringifyJsonRouteResult(result);
|
|
127
131
|
return createResponseWithMergedHeaders(body, {
|
|
128
132
|
status: 200,
|
|
@@ -145,7 +149,11 @@ export async function handleResponseRoute<TEnv>(
|
|
|
145
149
|
`Response route handler for "${preview.responseType}" must return a Response object, got ${typeof result}`,
|
|
146
150
|
);
|
|
147
151
|
} catch (error) {
|
|
148
|
-
handlerCtx.
|
|
152
|
+
if (handlerCtx.reportResponseRouteError) {
|
|
153
|
+
handlerCtx.reportResponseRouteError(error, errorCtx);
|
|
154
|
+
} else {
|
|
155
|
+
handlerCtx.callOnError(error, "handler", errorCtx);
|
|
156
|
+
}
|
|
149
157
|
const isDev = process.env.NODE_ENV !== "production";
|
|
150
158
|
const derivedStatus = error instanceof RouterError ? error.status : 500;
|
|
151
159
|
// Resolve the effective status the same way createResponseWithMergedHeaders
|
|
@@ -26,6 +26,7 @@ import {
|
|
|
26
26
|
recordRewriteHop,
|
|
27
27
|
recordRewriteShell,
|
|
28
28
|
} from "../server/rewrite-trail.js";
|
|
29
|
+
import { WIRE } from "../wire-params.js";
|
|
29
30
|
|
|
30
31
|
/** Response header naming the route path a rewritten request rendered. */
|
|
31
32
|
export const REWRITE_HEADER = "x-rango-rewrite";
|
|
@@ -138,7 +139,7 @@ export function applyRewrite(
|
|
|
138
139
|
): RewritePass {
|
|
139
140
|
// A loader fetch first: `load()` with a body is a POST, and its refusal
|
|
140
141
|
// is the loader fetch's.
|
|
141
|
-
if (reqCtx.originalUrl.searchParams.has(
|
|
142
|
+
if (reqCtx.originalUrl.searchParams.has(WIRE.loader)) {
|
|
142
143
|
throw rewriteNotSupported(rewrite, "loader-fetch");
|
|
143
144
|
}
|
|
144
145
|
if (passRequest.method !== "GET" && passRequest.method !== "HEAD") {
|
package/src/rsc/routine-plan.ts
CHANGED
|
@@ -74,7 +74,7 @@ export function* step<T>(
|
|
|
74
74
|
*
|
|
75
75
|
* Settlement tracking follows the RETURNED value: a returned promise is
|
|
76
76
|
* observed until it settles; a scheduler that fires-and-forgets internally
|
|
77
|
-
* (e.g.
|
|
77
|
+
* (e.g. planShellCapture via runBackground) returns void, so its trace
|
|
78
78
|
* entry settles at the scheduling call, not at background completion. That is
|
|
79
79
|
* deliberate — the plan's contract ends at the handoff.
|
|
80
80
|
*/
|