@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.
Files changed (234) hide show
  1. package/dist/bin/rango.js +1 -1
  2. package/dist/types/__internal.d.ts +7 -1
  3. package/dist/types/browser/action-coordinator.d.ts +0 -4
  4. package/dist/types/browser/action-fence.d.ts +11 -3
  5. package/dist/types/browser/event-controller.d.ts +20 -1
  6. package/dist/types/browser/history-state.d.ts +7 -9
  7. package/dist/types/browser/intercept-utils.d.ts +23 -0
  8. package/dist/types/browser/navigation-store.d.ts +8 -6
  9. package/dist/types/browser/react/filter-segment-order.d.ts +2 -2
  10. package/dist/types/browser/rsc-router.d.ts +1 -1
  11. package/dist/types/browser/segment-reconciler.d.ts +6 -4
  12. package/dist/types/browser/types.d.ts +2 -1
  13. package/dist/types/browser/wire-protocol.d.ts +25 -0
  14. package/dist/types/cache/cache-key-utils.d.ts +11 -5
  15. package/dist/types/cache/cache-scope.d.ts +34 -22
  16. package/dist/types/cache/cf/cf-cache-constants.d.ts +2 -2
  17. package/dist/types/cache/cf/cf-cache-store.d.ts +47 -65
  18. package/dist/types/cache/cf/cf-kv-utils.d.ts +1 -1
  19. package/dist/types/cache/handle-snapshot.d.ts +9 -4
  20. package/dist/types/cache/segment-codec.d.ts +14 -0
  21. package/dist/types/cache/shell-snapshot.d.ts +1 -1
  22. package/dist/types/cache/tag-invalidation.d.ts +10 -0
  23. package/dist/types/cache/taint.d.ts +5 -3
  24. package/dist/types/cache/types.d.ts +7 -3
  25. package/dist/types/cache/vercel/vercel-cache-store.d.ts +8 -6
  26. package/dist/types/prefetch-markers.d.ts +4 -6
  27. package/dist/types/prerender/store.d.ts +31 -0
  28. package/dist/types/prerender/warm-request.d.ts +3 -3
  29. package/dist/types/prerender.d.ts +2 -2
  30. package/dist/types/route-name.d.ts +5 -0
  31. package/dist/types/router/error-handling.d.ts +4 -4
  32. package/dist/types/router/instrument.d.ts +4 -3
  33. package/dist/types/router/intercept-resolution.d.ts +25 -9
  34. package/dist/types/router/match-context.d.ts +12 -11
  35. package/dist/types/router/match-handlers.d.ts +2 -6
  36. package/dist/types/router/match-middleware/background-revalidation.d.ts +10 -20
  37. package/dist/types/router/match-middleware/cache-lookup.d.ts +35 -87
  38. package/dist/types/router/match-middleware/cache-store.d.ts +2 -2
  39. package/dist/types/router/match-middleware/segment-resolution.d.ts +8 -6
  40. package/dist/types/router/prerender-match.d.ts +21 -6
  41. package/dist/types/router/preview-match.d.ts +2 -7
  42. package/dist/types/router/request-classification.d.ts +5 -0
  43. package/dist/types/router/revalidation.d.ts +6 -1
  44. package/dist/types/router/router-context.d.ts +9 -63
  45. package/dist/types/router/router-interfaces.d.ts +8 -14
  46. package/dist/types/router/segment-resolution/loader-cache.d.ts +3 -3
  47. package/dist/types/router/segment-resolution/loader-mask.d.ts +4 -4
  48. package/dist/types/router/segment-resolution/prefetch-deferral.d.ts +20 -18
  49. package/dist/types/router/segment-resolution/resolution-pass.d.ts +93 -0
  50. package/dist/types/router/segment-resolution/revalidation.d.ts +82 -31
  51. package/dist/types/router/segment-resolution.d.ts +1 -2
  52. package/dist/types/router/segment-wrappers.d.ts +11 -48
  53. package/dist/types/router/telemetry.d.ts +2 -0
  54. package/dist/types/router/types.d.ts +10 -0
  55. package/dist/types/rsc/full-payload.d.ts +2 -2
  56. package/dist/types/rsc/handler-context.d.ts +6 -6
  57. package/dist/types/rsc/json-route-result.d.ts +5 -9
  58. package/dist/types/rsc/request-stages.d.ts +203 -0
  59. package/dist/types/rsc/response-cache-serve.d.ts +7 -12
  60. package/dist/types/rsc/response-route-handler.d.ts +2 -2
  61. package/dist/types/rsc/routine-plan.d.ts +1 -1
  62. package/dist/types/rsc/server-action.d.ts +2 -2
  63. package/dist/types/rsc/shell-capture-constants.d.ts +2 -2
  64. package/dist/types/rsc/shell-capture.d.ts +132 -15
  65. package/dist/types/rsc/shell-serve.d.ts +37 -12
  66. package/dist/types/server/context.d.ts +9 -8
  67. package/dist/types/server/handle-store.d.ts +16 -0
  68. package/dist/types/server/render-pass.d.ts +72 -0
  69. package/dist/types/server/request-context.d.ts +24 -104
  70. package/dist/types/server/rewrite-trail.d.ts +2 -2
  71. package/dist/types/testing/dispatch.d.ts +35 -18
  72. package/dist/types/testing/serve-shell-request.d.ts +7 -0
  73. package/dist/types/types/cache-types.d.ts +6 -3
  74. package/dist/types/types/error-types.d.ts +9 -1
  75. package/dist/types/types/handler-context.d.ts +18 -7
  76. package/dist/types/types/segments.d.ts +1 -1
  77. package/dist/types/vite/discovery/build-discovery-phase.d.ts +40 -0
  78. package/dist/types/vite/discovery/build-env.d.ts +22 -0
  79. package/dist/types/vite/discovery/bundle-scan-phase.d.ts +12 -0
  80. package/dist/types/vite/discovery/dev-prerender-cache.d.ts +3 -2
  81. package/dist/types/vite/discovery/dev-server-phase.d.ts +26 -0
  82. package/dist/types/vite/discovery/discovery-errors.d.ts +1 -1
  83. package/dist/types/vite/discovery/state.d.ts +12 -0
  84. package/dist/types/vite/plugins/version-plugin.d.ts +1 -1
  85. package/dist/types/vite/plugins/virtual-entries.d.ts +1 -1
  86. package/dist/types/vite/router-discovery.d.ts +8 -47
  87. package/dist/types/vite/temp-rsc-server.d.ts +39 -0
  88. package/dist/types/vite/utils/prerender-utils.d.ts +9 -0
  89. package/dist/types/wire-params.d.ts +34 -0
  90. package/dist/vite/index.js +3809 -3710
  91. package/package.json +1 -1
  92. package/skills/cache-guide/SKILL.md +8 -5
  93. package/skills/caching/SKILL.md +37 -18
  94. package/skills/client-urls/SKILL.md +2 -1
  95. package/skills/document-cache/SKILL.md +18 -1
  96. package/skills/handler-use/SKILL.md +1 -1
  97. package/skills/intercept/SKILL.md +53 -13
  98. package/skills/layout/SKILL.md +11 -7
  99. package/skills/loader/SKILL.md +30 -13
  100. package/skills/middleware/SKILL.md +19 -1
  101. package/skills/migrate-nextjs/SKILL.md +5 -4
  102. package/skills/parallel/SKILL.md +5 -4
  103. package/skills/ppr/SKILL.md +19 -3
  104. package/skills/prerender/SKILL.md +39 -15
  105. package/skills/rango/SKILL.md +23 -11
  106. package/skills/server-actions/SKILL.md +51 -6
  107. package/skills/testing/predicates.md +1 -1
  108. package/skills/testing/response-routes.md +6 -4
  109. package/skills/testing/serve-shell-request.md +7 -7
  110. package/skills/use-cache/SKILL.md +46 -8
  111. package/skills/ux-architecture/SKILL.md +3 -2
  112. package/src/__internal.ts +7 -1
  113. package/src/browser/action-coordinator.ts +2 -13
  114. package/src/browser/action-fence.ts +11 -3
  115. package/src/browser/connection-warmup.ts +3 -1
  116. package/src/browser/event-controller.ts +42 -3
  117. package/src/browser/history-state.ts +15 -13
  118. package/src/browser/intercept-utils.ts +51 -0
  119. package/src/browser/navigation-bridge.ts +34 -30
  120. package/src/browser/navigation-client.ts +21 -33
  121. package/src/browser/navigation-store.ts +25 -27
  122. package/src/browser/navigation-transaction.ts +7 -11
  123. package/src/browser/partial-update.ts +8 -0
  124. package/src/browser/prefetch/cache.ts +2 -1
  125. package/src/browser/prefetch/fetch.ts +8 -16
  126. package/src/browser/prefetch/queue.ts +4 -4
  127. package/src/browser/react/NavigationProvider.tsx +2 -1
  128. package/src/browser/react/filter-segment-order.ts +2 -2
  129. package/src/browser/rsc-router.tsx +17 -2
  130. package/src/browser/segment-reconciler.ts +66 -53
  131. package/src/browser/server-action-bridge.ts +265 -127
  132. package/src/browser/types.ts +2 -1
  133. package/src/browser/wire-protocol.ts +41 -0
  134. package/src/cache/cache-key-utils.ts +11 -5
  135. package/src/cache/cache-runtime.ts +110 -50
  136. package/src/cache/cache-scope.ts +110 -64
  137. package/src/cache/cf/cf-cache-constants.ts +2 -2
  138. package/src/cache/cf/cf-cache-store.ts +486 -874
  139. package/src/cache/cf/cf-kv-utils.ts +1 -1
  140. package/src/cache/document-cache.ts +42 -15
  141. package/src/cache/handle-snapshot.ts +19 -7
  142. package/src/cache/segment-codec.ts +55 -0
  143. package/src/cache/shell-snapshot.ts +2 -2
  144. package/src/cache/tag-invalidation.ts +21 -2
  145. package/src/cache/taint.ts +5 -3
  146. package/src/cache/types.ts +7 -3
  147. package/src/cache/vercel/vercel-cache-store.ts +243 -310
  148. package/src/handles/pushed-by.ts +1 -1
  149. package/src/prefetch-markers.ts +4 -7
  150. package/src/prerender/store.ts +76 -0
  151. package/src/prerender/warm-request.ts +8 -4
  152. package/src/prerender.ts +2 -2
  153. package/src/route-name.ts +8 -0
  154. package/src/router/error-handling.ts +4 -4
  155. package/src/router/instrument.ts +4 -3
  156. package/src/router/intercept-resolution.ts +77 -75
  157. package/src/router/loader-resolution.ts +5 -4
  158. package/src/router/match-api.ts +4 -5
  159. package/src/router/match-context.ts +33 -12
  160. package/src/router/match-handlers.ts +8 -20
  161. package/src/router/match-middleware/background-revalidation.ts +41 -53
  162. package/src/router/match-middleware/cache-lookup.ts +680 -720
  163. package/src/router/match-middleware/cache-store.ts +14 -12
  164. package/src/router/match-middleware/intercept-resolution.ts +3 -23
  165. package/src/router/match-middleware/segment-resolution.ts +34 -61
  166. package/src/router/match-result.ts +1 -20
  167. package/src/router/middleware.ts +69 -11
  168. package/src/router/navigation-snapshot.ts +4 -3
  169. package/src/router/prerender-match.ts +100 -44
  170. package/src/router/preview-match.ts +6 -41
  171. package/src/router/request-classification.ts +13 -7
  172. package/src/router/revalidation.ts +33 -7
  173. package/src/router/route-snapshot.ts +2 -5
  174. package/src/router/router-context.ts +14 -117
  175. package/src/router/router-interfaces.ts +8 -14
  176. package/src/router/segment-resolution/loader-cache.ts +14 -9
  177. package/src/router/segment-resolution/loader-mask.ts +5 -5
  178. package/src/router/segment-resolution/prefetch-deferral.ts +30 -27
  179. package/src/router/segment-resolution/resolution-pass.ts +137 -0
  180. package/src/router/segment-resolution/revalidation.ts +897 -776
  181. package/src/router/segment-resolution.ts +4 -13
  182. package/src/router/segment-wrappers.ts +51 -269
  183. package/src/router/telemetry.ts +5 -0
  184. package/src/router/types.ts +10 -0
  185. package/src/router.ts +12 -13
  186. package/src/rsc/full-payload.ts +6 -5
  187. package/src/rsc/handler-context.ts +8 -14
  188. package/src/rsc/handler.ts +126 -507
  189. package/src/rsc/json-route-result.ts +5 -9
  190. package/src/rsc/loader-fetch.ts +6 -5
  191. package/src/rsc/progressive-enhancement.ts +5 -0
  192. package/src/rsc/request-stages.ts +757 -0
  193. package/src/rsc/response-cache-serve.ts +10 -14
  194. package/src/rsc/response-route-handler.ts +13 -5
  195. package/src/rsc/rewrite-passes.ts +2 -1
  196. package/src/rsc/routine-plan.ts +1 -1
  197. package/src/rsc/rsc-rendering.ts +172 -349
  198. package/src/rsc/server-action.ts +87 -113
  199. package/src/rsc/shell-capture-constants.ts +3 -1
  200. package/src/rsc/shell-capture.ts +212 -169
  201. package/src/rsc/shell-serve.ts +121 -18
  202. package/src/rsc/ssr-setup.ts +5 -4
  203. package/src/segment-system.tsx +3 -3
  204. package/src/server/context.ts +22 -25
  205. package/src/server/handle-store.ts +55 -0
  206. package/src/server/render-pass.ts +291 -0
  207. package/src/server/request-context.ts +26 -115
  208. package/src/server/rewrite-trail.ts +6 -4
  209. package/src/ssr/index.tsx +1 -1
  210. package/src/ssr/ssr-root.tsx +1 -0
  211. package/src/testing/dispatch.ts +223 -710
  212. package/src/testing/e2e/page-helpers.ts +2 -2
  213. package/src/testing/serve-shell-request.ts +37 -32
  214. package/src/types/cache-types.ts +6 -3
  215. package/src/types/error-types.ts +9 -1
  216. package/src/types/handler-context.ts +21 -7
  217. package/src/types/segments.ts +1 -1
  218. package/src/vite/discovery/build-discovery-phase.ts +204 -0
  219. package/src/vite/discovery/build-env.ts +148 -0
  220. package/src/vite/discovery/bundle-scan-phase.ts +128 -0
  221. package/src/vite/discovery/dev-prerender-cache.ts +8 -3
  222. package/src/vite/discovery/dev-server-phase.ts +1776 -0
  223. package/src/vite/discovery/discover-routers.ts +1 -1
  224. package/src/vite/discovery/discovery-errors.ts +1 -1
  225. package/src/vite/discovery/prerender-collection.ts +24 -39
  226. package/src/vite/discovery/state.ts +15 -0
  227. package/src/vite/plugins/version-plugin.ts +1 -1
  228. package/src/vite/plugins/virtual-entries.ts +1 -1
  229. package/src/vite/router-discovery.ts +29 -2428
  230. package/src/vite/temp-rsc-server.ts +223 -0
  231. package/src/vite/utils/prerender-utils.ts +47 -0
  232. package/src/wire-params.ts +35 -0
  233. package/dist/types/router/segment-resolution/fresh.d.ts +0 -72
  234. package/src/router/segment-resolution/fresh.ts +0 -945
@@ -2,55 +2,16 @@
2
2
  * Router Discovery Plugin
3
3
  *
4
4
  * Vite plugin that discovers router instances at dev/build time via the RSC
5
- * environment. Delegates to extracted modules for discovery, route types
6
- * generation, virtual module codegen, and bundle post-processing.
5
+ * environment. Its hooks call the phase modules over one DiscoveryState:
6
+ * discovery/dev-server-phase.ts (configureServer),
7
+ * discovery/build-discovery-phase.ts (buildStart, buildApp post, buildEnd) and
8
+ * discovery/bundle-scan-phase.ts (generateBundle). Route types generation,
9
+ * virtual module codegen and bundle post-processing live in their own
10
+ * discovery/ modules.
7
11
  */
8
- import type { Plugin, ViteDevServer } from "vite";
9
- import { VIRTUAL_ROUTES_MANIFEST_ID, type DiscoveryState, type PluginOptions } from "./discovery/state.js";
12
+ import type { Plugin } from "vite";
13
+ import { VIRTUAL_ROUTES_MANIFEST_ID, type PluginOptions } from "./discovery/state.js";
10
14
  export { VIRTUAL_ROUTES_MANIFEST_ID };
11
- /** The slice of a Vite environment module graph the route-file watcher reads. */
12
- interface ModulesByFileGraph {
13
- getModulesByFile(file: string): ReadonlySet<unknown> | undefined;
14
- }
15
- /**
16
- * Whether the dev route-file watcher ignores `file`: it sits in a directory
17
- * every discovery scan skips (isInSkippedScanDir) and the RSC graph has not
18
- * loaded it. See docs/manifests.md, "A reload no file of the app asked for".
19
- */
20
- export declare function isFileOutsideApp(root: string, file: string, rscGraph: ModulesByFileGraph | undefined): boolean;
21
- /**
22
- * Create a minimal Vite server for router discovery.
23
- *
24
- * Both dev-mode prerender and build-mode discovery need a temp RSC server
25
- * to import user router files via module runner. This factory centralizes
26
- * the shared config and the mode-specific differences:
27
- * - Dev: path-based IDs (no forceBuild), separate cacheDir
28
- * - Build: hashed IDs (forceBuild), hashClientRefs for production bundles
29
- *
30
- * Returns the ViteDevServer instance. Callers access .environments.rsc as needed.
31
- * @internal Exported for tests.
32
- */
33
- export declare function createTempRscServer(state: DiscoveryState, options?: {
34
- forceBuild?: boolean;
35
- cacheDir?: string;
36
- /**
37
- * Serve the REAL rango SSR entry (getVirtualEntrySSR) for
38
- * "virtual:entry-ssr" instead of the discovery stub, so the dev
39
- * /__rsc_shell endpoint can drive captureShellHTML in this server's SSR
40
- * realm. Dev-correct by construction: the entry's bootstrap resolves to
41
- * plugin-rsc's stable virtual browser-entry URL, which the MAIN dev
42
- * server serves to the browser. Loaded lazily — discovery never imports
43
- * the SSR entry, so the temp server stays as light as before until a
44
- * shell capture actually runs.
45
- */
46
- realSsrEntry?: boolean;
47
- }): Promise<ViteDevServer>;
48
- import type { BuildEnvOption, BuildEnvFactoryContext, BuildEnvResult } from "./plugin-types.js";
49
- /**
50
- * Resolve the buildEnv option into a concrete { env, dispose? } result.
51
- * Handles all four input shapes: false, "auto", factory, plain object.
52
- */
53
- export declare function resolveBuildEnv(option: BuildEnvOption | undefined, factoryCtx: BuildEnvFactoryContext): Promise<BuildEnvResult | null>;
54
15
  /**
55
16
  * Plugin that discovers router instances at dev/build time via the RSC environment.
56
17
  *
@@ -0,0 +1,39 @@
1
+ /**
2
+ * The discovery temp RSC server: a minimal Vite server whose module runner
3
+ * imports the user's router files. Shared by dev discovery
4
+ * (discovery/dev-server-phase.ts) and build discovery
5
+ * (discovery/build-discovery-phase.ts).
6
+ *
7
+ * Sits in src/vite/, not src/vite/discovery/: the loader hook URL below
8
+ * resolves against this module's import.meta.url, and the published bundle
9
+ * (dist/vite/index.js) ships the hook at the same relative path.
10
+ */
11
+ import type { ViteDevServer } from "vite";
12
+ import type { DiscoveryState } from "./discovery/state.js";
13
+ /**
14
+ * Create a minimal Vite server for router discovery.
15
+ *
16
+ * Both dev-mode prerender and build-mode discovery need a temp RSC server
17
+ * to import user router files via module runner. This factory centralizes
18
+ * the shared config and the mode-specific differences:
19
+ * - Dev: path-based IDs (no forceBuild), separate cacheDir
20
+ * - Build: hashed IDs (forceBuild), hashClientRefs for production bundles
21
+ *
22
+ * Returns the ViteDevServer instance. Callers access .environments.rsc as needed.
23
+ * @internal Exported for tests.
24
+ */
25
+ export declare function createTempRscServer(state: DiscoveryState, options?: {
26
+ forceBuild?: boolean;
27
+ cacheDir?: string;
28
+ /**
29
+ * Serve the REAL rango SSR entry (getVirtualEntrySSR) for
30
+ * "virtual:entry-ssr" instead of the discovery stub, so the dev
31
+ * /__rsc_shell endpoint can drive captureShellHTML in this server's SSR
32
+ * realm. Dev-correct by construction: the entry's bootstrap resolves to
33
+ * plugin-rsc's stable virtual browser-entry URL, which the MAIN dev
34
+ * server serves to the browser. Loaded lazily — discovery never imports
35
+ * the SSR entry, so the temp server stays as light as before until a
36
+ * shell capture actually runs.
37
+ */
38
+ realSsrEntry?: boolean;
39
+ }): Promise<ViteDevServer>;
@@ -1,3 +1,4 @@
1
+ import type { LiveIntercept } from "../../router/prerender-match.js";
1
2
  export declare function encodePathParam(value: unknown): string;
2
3
  /**
3
4
  * `ctx.reverse` of a build-time `getParams()`. Substitutes like the dev-mode
@@ -25,6 +26,14 @@ export declare function notifyOnError(registry: Map<string, any>, error: unknown
25
26
  * URL / handler name for the log line; `elapsed` is the per-entry duration string.
26
27
  */
27
28
  export declare function resolvePrerenderError(registry: Map<string, any>, error: any, onError: "fail" | "warn", label: string, elapsed: string, phase: "prerender" | "static", routeKey?: string, pathname?: string): void;
29
+ /**
30
+ * Warn once per router, route and slot (`warned` holds the keys already
31
+ * warned) that an intercept over a Prerender() route renders live: the build
32
+ * did not bake it (matchForPrerender `liveIntercepts`), so its handler runs
33
+ * per request and one that needs BuildContext fails there. A route in an
34
+ * unnamed include() has an internal key; the warning names its URL instead.
35
+ */
36
+ export declare function warnLiveIntercepts(warned: Set<string>, routerId: string, routeName: string, urlPath: string, liveIntercepts: readonly LiveIntercept[] | undefined): void;
28
37
  /** Build scratch space, relative to the project root. Never shipped. */
29
38
  export declare const RANGO_BUILD_DIR = "node_modules/.rangojs-router-build";
30
39
  export declare function resetStagedBuildAssets(projectRoot: string): void;
@@ -0,0 +1,34 @@
1
+ /**
2
+ * The router's `_rsc_*` query parameter names, shared by the browser and the
3
+ * server graph (dependency free): the one module that spells them
4
+ * (tools/check-internals.mjs rule rsc-param-literal). The browser writes the
5
+ * partial-request set through browser/wire-protocol.ts writePartialParams.
6
+ */
7
+ export declare const WIRE: {
8
+ /** A navigation or prefetch: `true`. */
9
+ readonly partial: "_rsc_partial";
10
+ /** The mounted segment ids, comma-joined. */
11
+ readonly segments: "_rsc_segments";
12
+ /** A JS server action's id, in place of `partial`. */
13
+ readonly action: "_rsc_action";
14
+ /** The client's build version (version-mismatch reload). */
15
+ readonly version: "_rsc_v";
16
+ /** The client's router id (app-switch reload). */
17
+ readonly routerId: "_rsc_rid";
18
+ /** The rewrite target of the page on screen (#1144). */
19
+ readonly rewriteTarget: "_rsc_rt";
20
+ /** A stale request: `true` (router/navigation-snapshot.ts). */
21
+ readonly stale: "_rsc_stale";
22
+ /** A fill request (docs/design/prefetch-false.md): `1`. */
23
+ readonly fill: "_rsc_fill";
24
+ /** A loader fetch's loader id (rsc/loader-fetch.ts). */
25
+ readonly loader: "_rsc_loader";
26
+ /** A loader fetch's params, JSON: a query param, or a form field on a POST. */
27
+ readonly loaderParams: "_rsc_loader_params";
28
+ /** The forced-MISS marker of a degraded PPR shell reload (rsc/shell-serve.ts). */
29
+ readonly shellMiss: "_rsc_shell";
30
+ /** A connection warmup HEAD request (browser/connection-warmup.ts). */
31
+ readonly warmup: "_rsc_warmup";
32
+ };
33
+ /** The prefix every name in WIRE starts with. */
34
+ export declare const WIRE_PREFIX = "_rsc_";