@rangojs/router 0.21.0 → 0.22.1
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 +13 -1
- package/dist/types/browser/event-controller.d.ts +30 -13
- package/dist/types/browser/navigation-store.d.ts +9 -0
- package/dist/types/browser/partial-update.d.ts +2 -1
- package/dist/types/browser/prefetch/default-strategy.d.ts +16 -20
- package/dist/types/browser/react/NavigationProvider.d.ts +14 -1
- package/dist/types/browser/react/context.d.ts +14 -0
- package/dist/types/browser/rsc-router.d.ts +13 -2
- package/dist/types/browser/types.d.ts +10 -0
- package/dist/types/build/generate-manifest.d.ts +2 -0
- package/dist/types/cache/background-task.d.ts +22 -0
- package/dist/types/cache/cache-key-utils.d.ts +50 -5
- package/dist/types/cache/cache-policy.d.ts +17 -0
- package/dist/types/cache/cache-scope.d.ts +1 -1
- package/dist/types/cache/cf/cf-cache-store.d.ts +7 -1
- package/dist/types/cache/document-cache.d.ts +8 -5
- package/dist/types/cache/handle-snapshot.d.ts +23 -0
- package/dist/types/cache/index.d.ts +1 -1
- package/dist/types/cache/invalidation-order.d.ts +14 -0
- package/dist/types/cache/memory-segment-store.d.ts +33 -1
- package/dist/types/cache/shell-snapshot.d.ts +10 -1
- package/dist/types/cache/store-scope.d.ts +22 -0
- package/dist/types/cache/tag-invalidation.d.ts +7 -6
- package/dist/types/cache/types.d.ts +63 -14
- package/dist/types/cache/vercel/vercel-cache-store.d.ts +7 -1
- package/dist/types/errors.d.ts +6 -0
- package/dist/types/handles/deferred-resolution.d.ts +7 -0
- package/dist/types/internal-suspense-audit.d.ts +1 -0
- package/dist/types/loader-store.d.ts +4 -8
- package/dist/types/outlet-provider.d.ts +2 -1
- package/dist/types/prerender/cloudflare.d.ts +49 -0
- package/dist/types/prerender/create-prerender-trigger.d.ts +121 -0
- package/dist/types/prerender/index.d.ts +12 -0
- package/dist/types/prerender/memory-prerender-store.d.ts +29 -0
- package/dist/types/prerender/on-demand.d.ts +272 -0
- package/dist/types/prerender/producer-guard.d.ts +33 -0
- package/dist/types/prerender/shell-manifest-key.d.ts +1 -18
- package/dist/types/prerender/warm-request.d.ts +65 -0
- package/dist/types/prerender/warm.d.ts +65 -0
- package/dist/types/prerender/writable-store.d.ts +170 -0
- package/dist/types/prerender.d.ts +27 -0
- package/dist/types/reverse.d.ts +1 -1
- package/dist/types/route-content-wrapper.d.ts +3 -1
- package/dist/types/router/error-handling.d.ts +2 -0
- package/dist/types/router/handler-context.d.ts +1 -1
- package/dist/types/router/match-middleware/cache-lookup.d.ts +14 -0
- package/dist/types/router/pattern-matching.d.ts +2 -0
- package/dist/types/router/prefetch-default.d.ts +4 -4
- package/dist/types/router/prerender-match.d.ts +23 -1
- package/dist/types/router/route-trie-builder.d.ts +8 -1
- package/dist/types/router/router-context.d.ts +1 -0
- package/dist/types/router/router-interfaces.d.ts +30 -0
- package/dist/types/router/router-options.d.ts +24 -0
- package/dist/types/router/segment-resolution/fresh.d.ts +7 -0
- package/dist/types/router/segment-resolution/loader-cache.d.ts +2 -1
- package/dist/types/router/segment-resolution/revalidation.d.ts +5 -1
- package/dist/types/router/segment-resolution/streamed-handler-boundary.d.ts +43 -0
- package/dist/types/router/trie-matching.d.ts +2 -0
- package/dist/types/rsc/shell-build-manifest.d.ts +6 -4
- package/dist/types/rsc/shell-capture-constants.d.ts +20 -5
- package/dist/types/rsc/shell-capture.d.ts +14 -1
- package/dist/types/rsc/shell-serve.d.ts +2 -2
- package/dist/types/rsc/ssr-module-loader.d.ts +15 -0
- package/dist/types/rsc/types.d.ts +8 -0
- package/dist/types/segment-boundary-content.d.ts +17 -0
- package/dist/types/segment-loader-promise.d.ts +2 -6
- package/dist/types/server/build-version-table.d.ts +9 -0
- package/dist/types/server/context.d.ts +12 -4
- package/dist/types/server/handle-store.d.ts +2 -0
- package/dist/types/server/request-context.d.ts +63 -2
- package/dist/types/suspense-audit-react.d.ts +26 -0
- package/dist/types/suspense-audit.d.ts +157 -0
- package/dist/types/testing/action-form.d.ts +34 -0
- package/dist/types/testing/flight.entry.d.ts +2 -0
- package/dist/types/testing/index.d.ts +4 -0
- package/dist/types/testing/internal/server-modules.d.ts +8 -0
- package/dist/types/testing/serve-shell-request.d.ts +34 -4
- package/dist/types/testing/shell-status.d.ts +14 -6
- package/dist/types/testing/vitest-stubs/plugin-rsc.d.ts +9 -6
- package/dist/types/thenable-status.d.ts +6 -0
- package/dist/types/types/handler-context.d.ts +7 -0
- package/dist/types/types/route-entry.d.ts +5 -0
- package/dist/types/urls/path-helper.d.ts +18 -0
- package/dist/types/vite/discovery/state.d.ts +11 -0
- package/dist/types/vite/inject-client-debug.d.ts +6 -25
- package/dist/types/vite/utils/bundle-analysis.d.ts +6 -2
- package/dist/vite/index.js +180 -497
- package/package.json +13 -3
- package/skills/cache-guide/SKILL.md +18 -17
- package/skills/caching/SKILL.md +40 -4
- package/skills/catalog.json +1 -1
- package/skills/cloudflare/SKILL.md +131 -0
- package/skills/comparison/references/framework-comparison.md +1 -1
- package/skills/deployment-caching/SKILL.md +33 -12
- package/skills/document-cache/SKILL.md +16 -14
- package/skills/hooks/SKILL.md +22 -0
- package/skills/hooks/handle-and-actions.md +3 -4
- package/skills/hooks/navigation.md +10 -0
- package/skills/hooks/state.md +5 -4
- package/skills/host-router/SKILL.md +18 -0
- package/skills/loader/SKILL.md +6 -4
- package/skills/middleware/SKILL.md +1 -1
- package/skills/migrate-nextjs/SKILL.md +82 -9
- package/skills/ppr/SKILL.md +31 -8
- package/skills/prerender/SKILL.md +645 -8
- package/skills/rango/SKILL.md +1 -0
- package/skills/response-routes/SKILL.md +5 -5
- package/skills/route/SKILL.md +29 -0
- package/skills/testing/SKILL.md +2 -1
- package/skills/testing/cache-prerender.md +18 -17
- package/skills/testing/serve-shell-request.md +104 -8
- package/skills/use-cache/SKILL.md +9 -5
- package/skills/vercel/SKILL.md +2 -0
- package/skills/view-transitions/SKILL.md +9 -4
- package/src/browser/event-controller.ts +69 -25
- package/src/browser/link-interceptor.ts +2 -2
- package/src/browser/navigation-bridge.ts +75 -35
- package/src/browser/navigation-store.ts +26 -0
- package/src/browser/navigation-transaction.ts +9 -2
- package/src/browser/network-error-handler.ts +2 -0
- package/src/browser/partial-update.ts +48 -12
- package/src/browser/prefetch/default-strategy.ts +22 -42
- package/src/browser/react/Link.tsx +37 -42
- package/src/browser/react/NavigationProvider.tsx +63 -3
- package/src/browser/react/context.ts +17 -0
- package/src/browser/react/location-state.ts +5 -19
- package/src/browser/react/use-action.ts +4 -1
- package/src/browser/react/use-handle.ts +4 -20
- package/src/browser/react/use-link-status.ts +4 -3
- package/src/browser/react/use-navigation.ts +4 -1
- package/src/browser/react/use-params.ts +4 -1
- package/src/browser/react/use-pathname.ts +4 -1
- package/src/browser/react/use-search-params.ts +5 -3
- package/src/browser/react/use-segments.ts +36 -54
- package/src/browser/rsc-router.tsx +79 -39
- package/src/browser/segment-reconciler.ts +3 -3
- package/src/browser/server-action-bridge.ts +26 -6
- package/src/browser/types.ts +11 -0
- package/src/build/generate-manifest.ts +17 -0
- package/src/build/merge-full-manifests.ts +5 -0
- package/src/build/route-trie.ts +1 -0
- package/src/cache/background-task.ts +61 -0
- package/src/cache/cache-key-utils.ts +91 -12
- package/src/cache/cache-policy.ts +11 -2
- package/src/cache/cache-runtime.ts +23 -23
- package/src/cache/cache-scope.ts +38 -36
- package/src/cache/cf/cf-cache-store.ts +16 -11
- package/src/cache/document-cache.ts +35 -14
- package/src/cache/handle-snapshot.ts +50 -0
- package/src/cache/index.ts +1 -0
- package/src/cache/invalidation-order.ts +53 -0
- package/src/cache/memory-segment-store.ts +52 -1
- package/src/cache/shell-snapshot.ts +17 -0
- package/src/cache/store-scope.ts +36 -0
- package/src/cache/tag-invalidation.ts +7 -5
- package/src/cache/types.ts +69 -14
- package/src/cache/vercel/vercel-cache-store.ts +20 -6
- package/src/client.tsx +40 -3
- package/src/errors.ts +13 -6
- package/src/handles/deferred-resolution.ts +7 -2
- package/src/internal-suspense-audit.ts +12 -0
- package/src/loader-store.ts +4 -9
- package/src/outlet-provider.tsx +25 -1
- package/src/prerender/cloudflare.ts +130 -0
- package/src/prerender/create-prerender-trigger.ts +780 -0
- package/src/prerender/index.ts +39 -0
- package/src/prerender/memory-prerender-store.ts +115 -0
- package/src/prerender/on-demand.ts +339 -0
- package/src/prerender/producer-guard.ts +66 -0
- package/src/prerender/shell-manifest-key.ts +12 -17
- package/src/prerender/warm-request.ts +154 -0
- package/src/prerender/warm.ts +193 -0
- package/src/prerender/writable-store.ts +278 -0
- package/src/prerender.ts +29 -0
- package/src/reverse.ts +1 -1
- package/src/route-content-wrapper.tsx +107 -13
- package/src/router/error-handling.ts +12 -12
- package/src/router/find-match.ts +1 -0
- package/src/router/handler-context.ts +2 -0
- package/src/router/intercept-resolution.ts +15 -8
- package/src/router/loader-resolution.ts +2 -10
- package/src/router/match-middleware/background-revalidation.ts +2 -0
- package/src/router/match-middleware/cache-lookup.ts +230 -38
- package/src/router/pattern-matching.ts +14 -0
- package/src/router/prefetch-default.ts +4 -4
- package/src/router/prerender-match.ts +460 -352
- package/src/router/route-trie-builder.ts +9 -0
- package/src/router/router-context.ts +1 -0
- package/src/router/router-interfaces.ts +33 -0
- package/src/router/router-options.ts +30 -0
- package/src/router/segment-resolution/fresh.ts +20 -19
- package/src/router/segment-resolution/loader-cache.ts +15 -17
- package/src/router/segment-resolution/revalidation.ts +34 -24
- package/src/router/segment-resolution/streamed-handler-boundary.ts +133 -0
- package/src/router/trie-matching.ts +3 -0
- package/src/router.ts +107 -1
- package/src/rsc/handler.ts +51 -4
- package/src/rsc/progressive-enhancement.ts +5 -1
- package/src/rsc/response-cache-serve.ts +10 -4
- package/src/rsc/rsc-rendering.ts +53 -11
- package/src/rsc/shell-build-manifest.ts +10 -8
- package/src/rsc/shell-capture-constants.ts +39 -7
- package/src/rsc/shell-capture.ts +108 -19
- package/src/rsc/shell-serve.ts +12 -6
- package/src/rsc/ssr-module-loader.ts +26 -0
- package/src/rsc/types.ts +8 -0
- package/src/segment-boundary-content.ts +25 -0
- package/src/segment-loader-promise.ts +28 -38
- package/src/segment-system.tsx +117 -57
- package/src/server/build-version-table.ts +15 -0
- package/src/server/context.ts +40 -17
- package/src/server/cookie-store.ts +5 -0
- package/src/server/handle-store.ts +13 -0
- package/src/server/loader-registry.ts +6 -1
- package/src/server/request-context.ts +87 -1
- package/src/ssr/ssr-root.tsx +20 -13
- package/src/suspense-audit-react.tsx +98 -0
- package/src/suspense-audit.ts +1030 -0
- package/src/testing/action-form.ts +66 -0
- package/src/testing/flight-runtime.d.ts +27 -0
- package/src/testing/flight.entry.ts +3 -0
- package/src/testing/index.ts +19 -0
- package/src/testing/internal/server-modules.ts +32 -0
- package/src/testing/render-route.tsx +25 -12
- package/src/testing/serve-shell-request.ts +190 -34
- package/src/testing/shell-status.ts +17 -6
- package/src/testing/vitest-stubs/plugin-rsc.ts +37 -11
- package/src/thenable-status.ts +10 -0
- package/src/types/handler-context.ts +7 -0
- package/src/types/route-entry.ts +6 -0
- package/src/urls/path-helper.ts +69 -9
- package/src/use-loader.tsx +57 -30
- package/src/vite/discovery/bundle-postprocess.ts +4 -0
- package/src/vite/discovery/discover-routers.ts +15 -0
- package/src/vite/discovery/shell-prerender-phase.ts +5 -5
- package/src/vite/discovery/state.ts +17 -1
- package/src/vite/inject-client-debug.ts +42 -20
- package/src/vite/plugins/virtual-entries.ts +8 -1
- package/src/vite/router-discovery.ts +14 -0
- package/src/vite/utils/bundle-analysis.ts +39 -7
- package/dist/types/browser/react/subscribe-to-nothing.d.ts +0 -7
- package/dist/types/segment-content-promise.d.ts +0 -13
- package/src/browser/react/subscribe-to-nothing.ts +0 -7
- package/src/segment-content-promise.ts +0 -67
|
@@ -1,4 +1,22 @@
|
|
|
1
|
+
import type { Handler } from "../types.js";
|
|
1
2
|
import type { PathFn, ResponsePathFn, JsonResponsePathFn, TextResponsePathFn } from "./path-helper-types.js";
|
|
3
|
+
/**
|
|
4
|
+
* A retained on-demand producer must never render on a live production
|
|
5
|
+
* request: bundle eviction is skipped for onDemand routes (the producer body
|
|
6
|
+
* stays available for router.prerender()), so without this gate an
|
|
7
|
+
* overlay+manifest miss on a plain Prerender(..., { onDemand }) route would
|
|
8
|
+
* execute the producer in-request — uncached per-request renders with the
|
|
9
|
+
* personalization guard unarmed. Keep the pre-retention miss contract instead
|
|
10
|
+
* (DataNotFoundError -> 404). Producer runs (build-time bake and
|
|
11
|
+
* router.prerender()) arrive with ctx.build true (createPrerenderContext);
|
|
12
|
+
* Vite dev keeps the documented live fall-through on a dev-store miss, except
|
|
13
|
+
* for a page the overlay marks removed (`_prerenderRemoved`): a live render
|
|
14
|
+
* would show in dev a page production answers with a 404.
|
|
15
|
+
* Pass-through when the route is not onDemand.
|
|
16
|
+
*
|
|
17
|
+
* @internal Exported for the unit test.
|
|
18
|
+
*/
|
|
19
|
+
export declare function gateOnDemandProducer<TEnv>(producer: Handler<any, any, TEnv>, isOnDemand: boolean): Handler<any, any, TEnv>;
|
|
2
20
|
export declare function createPathHelper<TEnv>(): PathFn<TEnv>;
|
|
3
21
|
export declare function attachPathResponseTags<TEnv>(pathFn: PathFn<TEnv>): PathFn<TEnv> & {
|
|
4
22
|
json: JsonResponsePathFn<TEnv>;
|
|
@@ -63,6 +63,7 @@ export interface ChunkInfo {
|
|
|
63
63
|
name: string;
|
|
64
64
|
handlerId: string;
|
|
65
65
|
passthrough: boolean;
|
|
66
|
+
onDemand: boolean;
|
|
66
67
|
}>;
|
|
67
68
|
}
|
|
68
69
|
export interface PerRouterManifestEntry {
|
|
@@ -159,6 +160,16 @@ export interface DiscoveryState {
|
|
|
159
160
|
buildData: import("./build-versions.js").BuildDataRecord[];
|
|
160
161
|
handlerChunkInfoMap: Map<string, ChunkInfo>;
|
|
161
162
|
staticHandlerChunkInfoMap: Map<string, ChunkInfo>;
|
|
163
|
+
/**
|
|
164
|
+
* handlerId ($$id) -> route name for every route the evaluated source marks
|
|
165
|
+
* onDemand. Written during discovery (buildStart), consumed by the
|
|
166
|
+
* generateBundle chunk scan (extractHandlerExportsFromChunk) as the
|
|
167
|
+
* authoritative onDemand set driving producer retention — the same source
|
|
168
|
+
* that sets the runtime od trie flag, so any truthy onDemand spelling
|
|
169
|
+
* (literal, spread, imported const) both marks the route and retains its
|
|
170
|
+
* producer.
|
|
171
|
+
*/
|
|
172
|
+
onDemandHandlerIds: Map<string, string>;
|
|
162
173
|
rscEntryFileName: string | null;
|
|
163
174
|
resolvedPrerenderModules: Map<string, string[]> | undefined;
|
|
164
175
|
resolvedStaticModules: Map<string, string[]> | undefined;
|
|
@@ -1,28 +1,9 @@
|
|
|
1
1
|
import type { Connect } from "vite";
|
|
2
|
-
/**
|
|
3
|
-
* Bake the resolved INTERNAL_RANGO_DEBUG value into the router's `internal-debug`
|
|
4
|
-
* module so the flag reaches the CLIENT debug logs by just setting the env var.
|
|
5
|
-
*
|
|
6
|
-
* internal-debug.ts normally reads the flag via `typeof __RANGO_DEBUG__`, a Vite
|
|
7
|
-
* define. That delivery is unreliable on the client: in dev Vite ships the define
|
|
8
|
-
* only as an injected global whose presence varies across consumer setups, so the
|
|
9
|
-
* module can fall through to `process.env` (undefined in the browser) and the FE
|
|
10
|
-
* debug flag silently stays false while the server logs work. A Vite `transform`
|
|
11
|
-
* runs on the module regardless of how (or whether) the define is delivered, in
|
|
12
|
-
* both dev and build and for every environment, so the discovery plugin uses this
|
|
13
|
-
* to replace the module with the resolved literal.
|
|
14
|
-
*/
|
|
15
|
-
/**
|
|
16
|
-
* Scope to the router's own internal-debug module: the published package
|
|
17
|
-
* (`/@rangojs/router/`, incl. pnpm's nested layout) or the monorepo workspace
|
|
18
|
-
* (`/packages/rangojs-router/`). The package-anchored path avoids matching a
|
|
19
|
-
* consumer file that merely sits under a directory named `rangojs-router`.
|
|
20
|
-
* Accepts module ids and dev-server URLs (`/@fs/...internal-debug.ts?v=abc`).
|
|
21
|
-
*/
|
|
2
|
+
/** A router flag module: internal-debug.ts or internal-suspense-audit.ts. */
|
|
22
3
|
export declare function isRouterInternalDebugId(id: string): boolean;
|
|
23
4
|
/**
|
|
24
|
-
* Transform: replace
|
|
25
|
-
* Returns null for any
|
|
5
|
+
* Transform: replace a router flag module with the resolved literal.
|
|
6
|
+
* Returns null for any other module.
|
|
26
7
|
*/
|
|
27
8
|
export declare function injectClientDebugFlag(id: string): {
|
|
28
9
|
code: string;
|
|
@@ -44,9 +25,9 @@ export declare function injectClientDebugFlag(id: string): {
|
|
|
44
25
|
* immune -- workspace source is outside node_modules and served no-cache --
|
|
45
26
|
* which is why this bit only npm consumers.
|
|
46
27
|
*
|
|
47
|
-
*
|
|
48
|
-
* are byte-identical across flag states), so forcing revalidation for
|
|
49
|
-
*
|
|
28
|
+
* The two flag modules are the only flag-varying modules in the graph (their
|
|
29
|
+
* importers are byte-identical across flag states), so forcing revalidation for
|
|
30
|
+
* them is sufficient and costs a conditional request each per session. The
|
|
50
31
|
* middleware is unconditional (not gated on the flag) so an already-poisoned
|
|
51
32
|
* cache heals in both directions. Alternatives that do not work: a plugin
|
|
52
33
|
* `resolveId` appending a flag query never fires in Vite 8 dev for
|
|
@@ -6,12 +6,15 @@
|
|
|
6
6
|
export declare function findMatchingParenInBundle(code: string, openParenPos: number): number;
|
|
7
7
|
/**
|
|
8
8
|
* Scan a bundled chunk for handler exports and extract their names + $$id values.
|
|
9
|
-
* Optionally detects passthrough flag
|
|
9
|
+
* Optionally detects the passthrough flag by parsing the call body, and marks
|
|
10
|
+
* onDemand from the authoritative discovery-derived handlerId set.
|
|
11
|
+
* @internal Exported for testing only.
|
|
10
12
|
*/
|
|
11
|
-
export declare function extractHandlerExportsFromChunk(chunkCode: string, handlerModules: Map<string, string[]>, fnName: string, detectPassthrough: boolean): Array<{
|
|
13
|
+
export declare function extractHandlerExportsFromChunk(chunkCode: string, handlerModules: Map<string, string[]>, fnName: string, detectPassthrough: boolean, onDemandHandlerIds?: ReadonlyMap<string, string>): Array<{
|
|
12
14
|
name: string;
|
|
13
15
|
handlerId: string;
|
|
14
16
|
passthrough: boolean;
|
|
17
|
+
onDemand: boolean;
|
|
15
18
|
}>;
|
|
16
19
|
/**
|
|
17
20
|
* Evict handler code from a bundled chunk, replacing full call expressions with stubs.
|
|
@@ -22,6 +25,7 @@ export declare function evictHandlerCode(code: string, exports: Array<{
|
|
|
22
25
|
name: string;
|
|
23
26
|
handlerId: string;
|
|
24
27
|
passthrough?: boolean;
|
|
28
|
+
onDemand?: boolean;
|
|
25
29
|
}>, fnName: string, brand: string): {
|
|
26
30
|
code: string;
|
|
27
31
|
savedBytes: number;
|