@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
|
@@ -437,7 +437,7 @@ async function discoverRoutersPass(
|
|
|
437
437
|
// while runtime (trie-ranked: wildcard last) matches the real route and
|
|
438
438
|
// misses the manifest — wrong-content bake for plain Prerender routes, a
|
|
439
439
|
// guaranteed 404 once handler eviction runs. Dev never hits this because
|
|
440
|
-
// propagateDiscoveryState (
|
|
440
|
+
// propagateDiscoveryState (dev-server-phase.ts) pushes the same setters on
|
|
441
441
|
// every discovery/HMR pass; configureServer early-returns in build mode, so
|
|
442
442
|
// collection was the one findMatch consumer running trieless. Mirrors the
|
|
443
443
|
// dev perRouterSetters loop; deliberately does NOT markRouterTrieAuthoritative
|
|
@@ -209,7 +209,7 @@ export interface DiscoveryFailureReport {
|
|
|
209
209
|
* - a transient artifact of a Vite dependency re-optimization racing with boot
|
|
210
210
|
* discovery (a module read before the entry import resolves to the
|
|
211
211
|
* pre-optimize copy of the runner graph while createRouter() populated the
|
|
212
|
-
* post-optimize copy — see
|
|
212
|
+
* post-optimize copy — see dev-server-phase.ts).
|
|
213
213
|
*
|
|
214
214
|
* We can only tell them apart when the caller observed the dep optimizer's
|
|
215
215
|
* `browserHash` change across the discovery attempt (`reoptimizeObserved`): a
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
import { contextSet, hasContextVars } from "../../context-var.js";
|
|
10
|
+
import { prerenderManifestEntries } from "../../prerender/store.js";
|
|
10
11
|
import { sha256 } from "./build-versions.js";
|
|
11
12
|
import {
|
|
12
13
|
createGetParamsReverse,
|
|
@@ -17,6 +18,7 @@ import {
|
|
|
17
18
|
notifyOnError,
|
|
18
19
|
resolvePrerenderError,
|
|
19
20
|
stageBuildAssetModule,
|
|
21
|
+
warnLiveIntercepts,
|
|
20
22
|
} from "../utils/prerender-utils.js";
|
|
21
23
|
import type { DiscoveryState } from "./state.js";
|
|
22
24
|
import { createRangoDebugger, NS } from "../debug.js";
|
|
@@ -250,6 +252,7 @@ export async function expandPrerenderRoutes(
|
|
|
250
252
|
const manifestEntries: Record<string, string> = {};
|
|
251
253
|
let doneCount = 0;
|
|
252
254
|
let skipCount = 0;
|
|
255
|
+
const warnedLiveIntercepts = new Set<string>();
|
|
253
256
|
// #587: a render error reaches here (matchForPrerender now re-throws it rather
|
|
254
257
|
// than baking the error boundary). Default "fail" fails the build; "warn" logs
|
|
255
258
|
// and skips baking the URL.
|
|
@@ -288,20 +291,20 @@ export async function expandPrerenderRoutes(
|
|
|
288
291
|
break;
|
|
289
292
|
}
|
|
290
293
|
|
|
294
|
+
const stage = ([key, value]: [string, string]): void => {
|
|
295
|
+
manifestEntries[key] = stageBuildAssetModule(
|
|
296
|
+
state.projectRoot,
|
|
297
|
+
"__pr",
|
|
298
|
+
value,
|
|
299
|
+
);
|
|
300
|
+
recordBuildData(state, "prerender", key, value, { routerId });
|
|
301
|
+
};
|
|
291
302
|
const paramHash = hashParams(result.params || {});
|
|
292
|
-
const
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
handles: result.handles,
|
|
296
|
-
});
|
|
297
|
-
manifestEntries[mainKey] = stageBuildAssetModule(
|
|
298
|
-
state.projectRoot,
|
|
299
|
-
"__pr",
|
|
300
|
-
mainValue,
|
|
303
|
+
const [main, intercept] = prerenderManifestEntries(
|
|
304
|
+
result,
|
|
305
|
+
paramHash,
|
|
301
306
|
);
|
|
302
|
-
|
|
303
|
-
routerId,
|
|
304
|
-
});
|
|
307
|
+
stage(main);
|
|
305
308
|
// Prerender + ppr composition: flag the URL as a build-time shell
|
|
306
309
|
// candidate for the post-build capture phase (producer B, #699).
|
|
307
310
|
// The payload JSON is retained in memory so that phase can seed an
|
|
@@ -313,38 +316,20 @@ export async function expandPrerenderRoutes(
|
|
|
313
316
|
paramHash,
|
|
314
317
|
ppr: result.ppr === true ? true : result.ppr,
|
|
315
318
|
});
|
|
316
|
-
(state.prerenderPayloadValues ??= new Map()).set(
|
|
317
|
-
mainKey,
|
|
318
|
-
mainValue,
|
|
319
|
-
);
|
|
320
|
-
}
|
|
321
|
-
if (result.interceptSegments?.length) {
|
|
322
|
-
const interceptKey = `${result.routeName}/${paramHash}/i`;
|
|
323
|
-
const interceptValue = JSON.stringify({
|
|
324
|
-
segments: [...result.segments, ...result.interceptSegments],
|
|
325
|
-
// interceptHandles is the pre-encoded MERGED (main + intercept)
|
|
326
|
-
// handle string (the producer merged before encoding).
|
|
327
|
-
handles: result.interceptHandles ?? "",
|
|
328
|
-
});
|
|
329
|
-
manifestEntries[interceptKey] = stageBuildAssetModule(
|
|
330
|
-
state.projectRoot,
|
|
331
|
-
"__pr",
|
|
332
|
-
interceptValue,
|
|
333
|
-
);
|
|
334
|
-
recordBuildData(
|
|
335
|
-
state,
|
|
336
|
-
"prerender",
|
|
337
|
-
interceptKey,
|
|
338
|
-
interceptValue,
|
|
339
|
-
{
|
|
340
|
-
routerId,
|
|
341
|
-
},
|
|
342
|
-
);
|
|
319
|
+
(state.prerenderPayloadValues ??= new Map()).set(...main);
|
|
343
320
|
}
|
|
321
|
+
if (intercept) stage(intercept);
|
|
344
322
|
const elapsed = (performance.now() - startUrl).toFixed(0);
|
|
345
323
|
console.log(
|
|
346
324
|
`[rango] OK ${entry.urlPath.padEnd(40)} (${elapsed}ms)`,
|
|
347
325
|
);
|
|
326
|
+
warnLiveIntercepts(
|
|
327
|
+
warnedLiveIntercepts,
|
|
328
|
+
routerId,
|
|
329
|
+
result.routeName,
|
|
330
|
+
entry.urlPath,
|
|
331
|
+
result.liveIntercepts,
|
|
332
|
+
);
|
|
348
333
|
doneCount++;
|
|
349
334
|
break;
|
|
350
335
|
} catch (err: any) {
|
|
@@ -124,6 +124,9 @@ export interface DiscoveryState {
|
|
|
124
124
|
resolvedEntryPath: string | undefined;
|
|
125
125
|
projectRoot: string;
|
|
126
126
|
isBuildMode: boolean;
|
|
127
|
+
/** Vite's resolved command and mode (configResolved), for resolveBuildEnv. */
|
|
128
|
+
viteCommand: "serve" | "build";
|
|
129
|
+
viteMode: string;
|
|
127
130
|
userResolveAlias: any;
|
|
128
131
|
/**
|
|
129
132
|
* Data-only slice of the user's resolved config (resolve.* incl. native
|
|
@@ -212,6 +215,15 @@ export interface DiscoveryState {
|
|
|
212
215
|
devDiscoveryEpoch?: number;
|
|
213
216
|
devServerOrigin: string | null;
|
|
214
217
|
devServer: any;
|
|
218
|
+
/**
|
|
219
|
+
* Dev: the pending transition({ when }) definition error, re-sent as the
|
|
220
|
+
* Vite error overlay until a discovery succeeds (dev-server-phase.ts).
|
|
221
|
+
*/
|
|
222
|
+
transitionWhenOverlay: {
|
|
223
|
+
message: string;
|
|
224
|
+
stack: string;
|
|
225
|
+
plugin: string;
|
|
226
|
+
} | null;
|
|
215
227
|
selfWrittenGenFiles: Map<string, { at: number; hash: string }>;
|
|
216
228
|
SELF_WRITE_WINDOW_MS: number;
|
|
217
229
|
|
|
@@ -261,6 +273,8 @@ export function createDiscoveryState(
|
|
|
261
273
|
resolvedEntryPath: entryPath,
|
|
262
274
|
projectRoot: "",
|
|
263
275
|
isBuildMode: false,
|
|
276
|
+
viteCommand: "build",
|
|
277
|
+
viteMode: "production",
|
|
264
278
|
userResolveAlias: undefined,
|
|
265
279
|
userRunnerConfig: undefined,
|
|
266
280
|
userResolvePlugins: [],
|
|
@@ -300,6 +314,7 @@ export function createDiscoveryState(
|
|
|
300
314
|
devDiscoveryEpoch: opts?.preset === "cloudflare" ? Date.now() : undefined,
|
|
301
315
|
devServerOrigin: null,
|
|
302
316
|
devServer: null,
|
|
317
|
+
transitionWhenOverlay: null,
|
|
303
318
|
selfWrittenGenFiles: new Map(),
|
|
304
319
|
SELF_WRITE_WINDOW_MS: 5_000,
|
|
305
320
|
lastDiscoveryError: null,
|
|
@@ -115,7 +115,7 @@ function getClientModuleSignature(
|
|
|
115
115
|
* Build: exports a placeholder for the per-router versions table. The module
|
|
116
116
|
* holds nothing that varies between builds; the table is written into the
|
|
117
117
|
* built chunk after the server output is hashed (the buildApp post hook in
|
|
118
|
-
*
|
|
118
|
+
* discovery/build-discovery-phase.ts). See docs/design/per-app-cache-version.md.
|
|
119
119
|
* @internal
|
|
120
120
|
*/
|
|
121
121
|
export function createVersionPlugin(): Plugin {
|
|
@@ -354,7 +354,7 @@ export function getVirtualVersionContent(version: string): string {
|
|
|
354
354
|
/**
|
|
355
355
|
* Free identifier the production version module ships in place of the table.
|
|
356
356
|
* The versions are hashes of the built server code, so they cannot be part of
|
|
357
|
-
* it: the buildApp post hook (
|
|
357
|
+
* it: the buildApp post hook (discovery/build-discovery-phase.ts) replaces this token in the
|
|
358
358
|
* written chunk once the hashes are final (runRouterVersionsPhase,
|
|
359
359
|
* discovery/router-versions-phase.ts). An unreplaced token throws a ReferenceError
|
|
360
360
|
* when the module evaluates, so a build that skipped the step cannot serve
|