@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
|
@@ -13,14 +13,10 @@ import {
|
|
|
13
13
|
type InterceptEntry,
|
|
14
14
|
type InterceptSelectorContext,
|
|
15
15
|
} from "../server/context.js";
|
|
16
|
-
import type { MatchApiDeps } from "./types.js";
|
|
16
|
+
import type { ActionContext, MatchApiDeps } from "./types.js";
|
|
17
17
|
import type { RouterContext } from "./router-context.js";
|
|
18
18
|
import { runWithRouterContext } from "./router-context.js";
|
|
19
|
-
import {
|
|
20
|
-
type ActionContext,
|
|
21
|
-
type MatchContext,
|
|
22
|
-
createPipelineState,
|
|
23
|
-
} from "./match-context.js";
|
|
19
|
+
import { type MatchContext, createPipelineState } from "./match-context.js";
|
|
24
20
|
import { createMatchPartialPipeline } from "./match-pipelines.js";
|
|
25
21
|
import { collectMatchResult } from "./match-result.js";
|
|
26
22
|
import {
|
|
@@ -194,11 +190,8 @@ export interface MatchHandlers<TEnv = any> {
|
|
|
194
190
|
handler: MiddlewareFn;
|
|
195
191
|
params: Record<string, string>;
|
|
196
192
|
}>;
|
|
197
|
-
responseType?: string;
|
|
198
|
-
handler?: Function;
|
|
199
193
|
params?: Record<string, string>;
|
|
200
|
-
|
|
201
|
-
manifestEntry?: EntryData;
|
|
194
|
+
routeKey?: string;
|
|
202
195
|
} | null>;
|
|
203
196
|
}
|
|
204
197
|
|
|
@@ -259,12 +252,7 @@ export function createMatchHandlers<TEnv = any>(
|
|
|
259
252
|
async function createMatchContextForPartial(
|
|
260
253
|
request: Request,
|
|
261
254
|
env: TEnv,
|
|
262
|
-
actionContext?:
|
|
263
|
-
actionId?: string;
|
|
264
|
-
actionUrl?: URL;
|
|
265
|
-
actionResult?: any;
|
|
266
|
-
formData?: FormData;
|
|
267
|
-
},
|
|
255
|
+
actionContext?: ActionContext,
|
|
268
256
|
): Promise<MatchContext<TEnv> | null> {
|
|
269
257
|
return _createMatchContextForPartial(
|
|
270
258
|
request,
|
|
@@ -277,13 +265,13 @@ export function createMatchHandlers<TEnv = any>(
|
|
|
277
265
|
|
|
278
266
|
async function match(request: Request, env: TEnv): Promise<MatchResult> {
|
|
279
267
|
// Silence telemetry for the PPR background shell capture: it re-runs match()
|
|
280
|
-
// under a derived request context
|
|
268
|
+
// under a derived request context with _shellCaptureState (shell-capture.ts
|
|
281
269
|
// attemptCapture), re-using the foreground Request — a second request.start/
|
|
282
270
|
// cache.decision/request.end stamped with the same WeakMap-keyed requestId
|
|
283
271
|
// would double-count dashboards. Derived here (inside the capture's active
|
|
284
272
|
// request-context ALS) so the read sees the derived context, not module state.
|
|
285
273
|
const emitTelemetry =
|
|
286
|
-
hasTelemetry && !_getRequestContext()?.
|
|
274
|
+
hasTelemetry && !_getRequestContext()?._shellCaptureState?.run;
|
|
287
275
|
const requestId = emitTelemetry ? getRequestId(request) : undefined;
|
|
288
276
|
return runWithRouterLogContext({ request, transaction: "match" }, () => {
|
|
289
277
|
const routerCtx = buildRouterContext();
|
|
@@ -409,9 +397,9 @@ export function createMatchHandlers<TEnv = any>(
|
|
|
409
397
|
actionContext?: ActionContext,
|
|
410
398
|
): Promise<MatchResult | null> {
|
|
411
399
|
// See match() above: the PPR shell capture re-runs matchPartial() under a
|
|
412
|
-
//
|
|
400
|
+
// _shellCaptureState context and must stay invisible to the sink.
|
|
413
401
|
const emitTelemetry =
|
|
414
|
-
hasTelemetry && !_getRequestContext()?.
|
|
402
|
+
hasTelemetry && !_getRequestContext()?._shellCaptureState?.run;
|
|
415
403
|
const partialRequestId = emitTelemetry ? getRequestId(request) : undefined;
|
|
416
404
|
return runWithRouterLogContext(
|
|
417
405
|
{ request, transaction: "matchPartial" },
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
* |
|
|
37
37
|
* v
|
|
38
38
|
* +---------------------------+
|
|
39
|
-
* |
|
|
39
|
+
* | FRESH segment pass | Fresh resolution (no revalidation)
|
|
40
40
|
* | + resolveIntercepts() | Ensures complete components
|
|
41
41
|
* +---------------------------+
|
|
42
42
|
* |
|
|
@@ -94,14 +94,17 @@
|
|
|
94
94
|
* FRESH RESOLUTION (NO REVALIDATION)
|
|
95
95
|
* ===================================
|
|
96
96
|
*
|
|
97
|
-
* Both full and partial requests
|
|
97
|
+
* Both full and partial requests resolve with a FRESH pass (without
|
|
98
98
|
* revalidation logic) to ensure all segments have complete components.
|
|
99
99
|
* Using revalidation-aware resolution would produce null components
|
|
100
|
-
* for skipped segments, which would corrupt the cache entry.
|
|
100
|
+
* for skipped segments, which would corrupt the cache entry. Under an
|
|
101
|
+
* intercept the walk still skips the intercepted route's entry, as the MISS
|
|
102
|
+
* does: an intercept: record never holds the route's page.
|
|
101
103
|
*/
|
|
102
104
|
import type { ResolvedSegment } from "../../types.js";
|
|
103
105
|
import type { MatchContext, MatchPipelineState } from "../match-context.js";
|
|
104
106
|
import { getRouterContext, type RouterContext } from "../router-context.js";
|
|
107
|
+
import { interceptRecordKey } from "../intercept-resolution.js";
|
|
105
108
|
import type { CacheScope } from "../../cache/cache-scope.js";
|
|
106
109
|
import type { GeneratorMiddleware } from "./cache-lookup.js";
|
|
107
110
|
import { debugLog, debugWarn, getOrCreateRequestId } from "../logging.js";
|
|
@@ -109,12 +112,16 @@ import { INTERNAL_RANGO_DEBUG } from "../../internal-debug.js";
|
|
|
109
112
|
import { getContext } from "../../server/context.js";
|
|
110
113
|
import { executionStart } from "../../cache/tag-invalidation.js";
|
|
111
114
|
import {
|
|
112
|
-
bindRes,
|
|
113
115
|
createRequestContext,
|
|
114
116
|
runWithRequestContext,
|
|
115
117
|
type RequestContext,
|
|
116
118
|
} from "../../server/request-context.js";
|
|
119
|
+
import { deriveRenderPass } from "../../server/render-pass.js";
|
|
117
120
|
import { recordUse } from "../segment-resolution/prefetch-deferral.js";
|
|
121
|
+
import {
|
|
122
|
+
freshPassInput,
|
|
123
|
+
heldNothingPassInput,
|
|
124
|
+
} from "../segment-resolution/resolution-pass.js";
|
|
118
125
|
|
|
119
126
|
/**
|
|
120
127
|
* Re-render a cached route in the background and write it with
|
|
@@ -129,23 +136,11 @@ import { recordUse } from "../segment-resolution/prefetch-deferral.js";
|
|
|
129
136
|
* MAX_REVALIDATION_INTERVAL, as after a refresh that throws.
|
|
130
137
|
*
|
|
131
138
|
* Runs on a DERIVED request context that owns the per-render state the
|
|
132
|
-
* foreground reads while it is still producing the page
|
|
133
|
-
*
|
|
134
|
-
*
|
|
135
|
-
*
|
|
136
|
-
*
|
|
137
|
-
* cache-scope.ts), so a swap sent live pushes into this render.
|
|
138
|
-
* setupLoaderAccess binds the store at setup, so it runs inside the
|
|
139
|
-
* derived context too.
|
|
140
|
-
* - _metricsStore: undefined, and the DSL store below has `metrics` unset
|
|
141
|
-
* (track() reads that one), so nothing lands on the foreground's perf
|
|
142
|
-
* timeline. ctx.Store.run closes over ctx.Store, so the derived store
|
|
143
|
-
* needs its own run.
|
|
144
|
-
* - response writes (headers, cookies, status, onResponse callbacks) go to
|
|
145
|
-
* a throwaway context (whose status gates the write, above) and are
|
|
146
|
-
* dropped: a layout above the cache() boundary is outside the header
|
|
147
|
-
* guard and an error boundary sets a status, so they would otherwise
|
|
148
|
-
* reach the live response.
|
|
139
|
+
* foreground reads while it is still producing the page:
|
|
140
|
+
* RENDER_PASS_FIELDS["background-revalidation"] (server/render-pass.ts) lists
|
|
141
|
+
* each field and why. The DSL store below has `metrics` unset too (track()
|
|
142
|
+
* reads that one), so nothing lands on the foreground's perf timeline;
|
|
143
|
+
* ctx.Store.run closes over ctx.Store, so the derived store needs its own run.
|
|
149
144
|
* runWithRequestContext also re-establishes the request ALS, which a waitUntil
|
|
150
145
|
* task on workerd loses; the DSL store is a different ALS (build context).
|
|
151
146
|
*/
|
|
@@ -157,8 +152,7 @@ export async function rerenderAndCacheRoute<TEnv>(
|
|
|
157
152
|
): Promise<number> {
|
|
158
153
|
const start = executionStart();
|
|
159
154
|
const handleStore = routerCtx.createHandleStore();
|
|
160
|
-
// Response writes land in a throwaway context nothing merges or drains.
|
|
161
|
-
// mutators are closures over its own stub, and they keep the same guards.
|
|
155
|
+
// Response writes land in a throwaway context nothing merges or drains.
|
|
162
156
|
const sink = createRequestContext({
|
|
163
157
|
env: ctx.env,
|
|
164
158
|
request: ctx.request,
|
|
@@ -166,26 +160,10 @@ export async function rerenderAndCacheRoute<TEnv>(
|
|
|
166
160
|
variables: {},
|
|
167
161
|
themeConfig: requestCtx._themeConfig,
|
|
168
162
|
});
|
|
169
|
-
const renderCtx
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
_metricsStore: undefined,
|
|
174
|
-
_renderErrors: [],
|
|
175
|
-
_recoveredHandlerErrors: undefined,
|
|
176
|
-
_onResponseCallbacks: [],
|
|
177
|
-
header: sink.header,
|
|
178
|
-
setCookie: sink.setCookie,
|
|
179
|
-
deleteCookie: sink.deleteCookie,
|
|
180
|
-
setStatus: sink.setStatus,
|
|
181
|
-
_setStatus: sink._setStatus,
|
|
182
|
-
setTheme: sink.setTheme,
|
|
183
|
-
_rotateStateCookie: sink._rotateStateCookie,
|
|
184
|
-
_setKeepCacheDirective: sink._setKeepCacheDirective,
|
|
185
|
-
},
|
|
186
|
-
);
|
|
187
|
-
// ctx.res reads the sink's stub, not the live request's.
|
|
188
|
-
bindRes(renderCtx, () => sink.res);
|
|
163
|
+
const renderCtx = deriveRenderPass(requestCtx, "background-revalidation", {
|
|
164
|
+
handleStore,
|
|
165
|
+
sink,
|
|
166
|
+
});
|
|
189
167
|
const store = Object.assign(Object.create(ctx.Store), { metrics: undefined });
|
|
190
168
|
const runInStore = <T>(fn: () => T): T =>
|
|
191
169
|
getContext().runWithStore(
|
|
@@ -210,26 +188,36 @@ export async function rerenderAndCacheRoute<TEnv>(
|
|
|
210
188
|
const loaderPromises = new Map<string, Promise<any>>();
|
|
211
189
|
routerCtx.setupLoaderAccess(handlerContext, loaderPromises);
|
|
212
190
|
|
|
213
|
-
const segments = await runInStore(() =>
|
|
191
|
+
const { segments } = await runInStore(() =>
|
|
214
192
|
routerCtx.resolveAllSegments(
|
|
193
|
+
freshPassInput(handlerContext, ctx.routeKey, ctx.matched.params, {
|
|
194
|
+
skipLoaders: true,
|
|
195
|
+
partialRequest: !ctx.isFullMatch,
|
|
196
|
+
}),
|
|
215
197
|
ctx.entries,
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
198
|
+
// Under an intercept the route's own entry is skipped, as on a MISS.
|
|
199
|
+
{
|
|
200
|
+
interceptResult: ctx.interceptResult,
|
|
201
|
+
localRouteName: ctx.localRouteName,
|
|
202
|
+
pathname: handlerContext.pathname,
|
|
203
|
+
},
|
|
221
204
|
),
|
|
222
205
|
);
|
|
223
206
|
if (ctx.interceptResult) {
|
|
224
207
|
segments.push(
|
|
225
208
|
...(await runInStore(() =>
|
|
226
209
|
routerCtx.resolveInterceptEntry(
|
|
210
|
+
// Nothing held: render fresh. Its loaders are skipped as the
|
|
211
|
+
// route's are: the record drops them.
|
|
212
|
+
heldNothingPassInput(
|
|
213
|
+
handlerContext,
|
|
214
|
+
ctx.interceptResult!.intercept.routeName,
|
|
215
|
+
ctx.matched.params,
|
|
216
|
+
{ skipLoaders: true },
|
|
217
|
+
),
|
|
227
218
|
ctx.interceptResult!.intercept,
|
|
228
219
|
ctx.interceptResult!.entry,
|
|
229
|
-
ctx.matched.params,
|
|
230
|
-
handlerContext,
|
|
231
220
|
true, // belongsToRoute
|
|
232
|
-
undefined, // no revalidationContext: render fresh
|
|
233
221
|
// A handler error rejects, so the failure is never cached.
|
|
234
222
|
{ background: true },
|
|
235
223
|
),
|
|
@@ -251,7 +239,7 @@ export async function rerenderAndCacheRoute<TEnv>(
|
|
|
251
239
|
ctx.pathname,
|
|
252
240
|
ctx.matched.params,
|
|
253
241
|
segments,
|
|
254
|
-
ctx.
|
|
242
|
+
interceptRecordKey(ctx.interceptResult),
|
|
255
243
|
start,
|
|
256
244
|
);
|
|
257
245
|
return segments.length;
|