@rangojs/router 0.0.0-experimental.5 → 0.0.0-experimental.51

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 (302) hide show
  1. package/AGENTS.md +9 -0
  2. package/README.md +884 -4
  3. package/dist/bin/rango.js +1606 -0
  4. package/dist/vite/index.js +4567 -769
  5. package/package.json +77 -58
  6. package/skills/breadcrumbs/SKILL.md +250 -0
  7. package/skills/cache-guide/SKILL.md +294 -0
  8. package/skills/caching/SKILL.md +93 -23
  9. package/skills/composability/SKILL.md +172 -0
  10. package/skills/debug-manifest/SKILL.md +12 -8
  11. package/skills/document-cache/SKILL.md +18 -16
  12. package/skills/fonts/SKILL.md +167 -0
  13. package/skills/hooks/SKILL.md +334 -72
  14. package/skills/host-router/SKILL.md +218 -0
  15. package/skills/intercept/SKILL.md +131 -8
  16. package/skills/layout/SKILL.md +100 -3
  17. package/skills/links/SKILL.md +89 -30
  18. package/skills/loader/SKILL.md +403 -43
  19. package/skills/middleware/SKILL.md +171 -34
  20. package/skills/mime-routes/SKILL.md +128 -0
  21. package/skills/parallel/SKILL.md +204 -1
  22. package/skills/prerender/SKILL.md +643 -0
  23. package/skills/rango/SKILL.md +85 -16
  24. package/skills/response-routes/SKILL.md +411 -0
  25. package/skills/route/SKILL.md +257 -14
  26. package/skills/router-setup/SKILL.md +123 -30
  27. package/skills/tailwind/SKILL.md +129 -0
  28. package/skills/theme/SKILL.md +9 -8
  29. package/skills/typesafety/SKILL.md +328 -89
  30. package/skills/use-cache/SKILL.md +324 -0
  31. package/src/__internal.ts +102 -4
  32. package/src/bin/rango.ts +321 -0
  33. package/src/browser/action-coordinator.ts +97 -0
  34. package/src/browser/action-response-classifier.ts +99 -0
  35. package/src/browser/event-controller.ts +92 -64
  36. package/src/browser/history-state.ts +80 -0
  37. package/src/browser/intercept-utils.ts +52 -0
  38. package/src/browser/link-interceptor.ts +24 -4
  39. package/src/browser/logging.ts +55 -0
  40. package/src/browser/merge-segment-loaders.ts +20 -12
  41. package/src/browser/navigation-bridge.ts +282 -557
  42. package/src/browser/navigation-client.ts +157 -71
  43. package/src/browser/navigation-store.ts +33 -50
  44. package/src/browser/navigation-transaction.ts +297 -0
  45. package/src/browser/network-error-handler.ts +61 -0
  46. package/src/browser/partial-update.ts +303 -310
  47. package/src/browser/prefetch/cache.ts +206 -0
  48. package/src/browser/prefetch/fetch.ts +144 -0
  49. package/src/browser/prefetch/observer.ts +65 -0
  50. package/src/browser/prefetch/policy.ts +48 -0
  51. package/src/browser/prefetch/queue.ts +144 -0
  52. package/src/browser/prefetch/resource-ready.ts +77 -0
  53. package/src/browser/rango-state.ts +112 -0
  54. package/src/browser/react/Link.tsx +193 -73
  55. package/src/browser/react/NavigationProvider.tsx +160 -13
  56. package/src/browser/react/context.ts +6 -0
  57. package/src/browser/react/filter-segment-order.ts +11 -0
  58. package/src/browser/react/index.ts +12 -12
  59. package/src/browser/react/location-state-shared.ts +95 -53
  60. package/src/browser/react/location-state.ts +60 -15
  61. package/src/browser/react/mount-context.ts +24 -1
  62. package/src/browser/react/nonce-context.ts +23 -0
  63. package/src/browser/react/shallow-equal.ts +27 -0
  64. package/src/browser/react/use-action.ts +29 -51
  65. package/src/browser/react/use-client-cache.ts +5 -3
  66. package/src/browser/react/use-handle.ts +32 -79
  67. package/src/browser/react/use-href.tsx +2 -2
  68. package/src/browser/react/use-link-status.ts +6 -5
  69. package/src/browser/react/use-navigation.ts +22 -63
  70. package/src/browser/react/use-params.ts +65 -0
  71. package/src/browser/react/use-pathname.ts +47 -0
  72. package/src/browser/react/use-router.ts +63 -0
  73. package/src/browser/react/use-search-params.ts +56 -0
  74. package/src/browser/react/use-segments.ts +80 -97
  75. package/src/browser/response-adapter.ts +73 -0
  76. package/src/browser/rsc-router.tsx +188 -55
  77. package/src/browser/scroll-restoration.ts +117 -44
  78. package/src/browser/segment-reconciler.ts +221 -0
  79. package/src/browser/segment-structure-assert.ts +16 -0
  80. package/src/browser/server-action-bridge.ts +504 -599
  81. package/src/browser/shallow.ts +6 -1
  82. package/src/browser/types.ts +118 -47
  83. package/src/browser/validate-redirect-origin.ts +29 -0
  84. package/src/build/generate-manifest.ts +235 -24
  85. package/src/build/generate-route-types.ts +36 -0
  86. package/src/build/index.ts +13 -0
  87. package/src/build/route-trie.ts +265 -0
  88. package/src/build/route-types/ast-helpers.ts +25 -0
  89. package/src/build/route-types/ast-route-extraction.ts +98 -0
  90. package/src/build/route-types/codegen.ts +102 -0
  91. package/src/build/route-types/include-resolution.ts +411 -0
  92. package/src/build/route-types/param-extraction.ts +48 -0
  93. package/src/build/route-types/per-module-writer.ts +128 -0
  94. package/src/build/route-types/router-processing.ts +479 -0
  95. package/src/build/route-types/scan-filter.ts +78 -0
  96. package/src/build/runtime-discovery.ts +231 -0
  97. package/src/cache/background-task.ts +34 -0
  98. package/src/cache/cache-key-utils.ts +44 -0
  99. package/src/cache/cache-policy.ts +125 -0
  100. package/src/cache/cache-runtime.ts +342 -0
  101. package/src/cache/cache-scope.ts +167 -309
  102. package/src/cache/cf/cf-cache-store.ts +571 -17
  103. package/src/cache/cf/index.ts +13 -3
  104. package/src/cache/document-cache.ts +116 -77
  105. package/src/cache/handle-capture.ts +81 -0
  106. package/src/cache/handle-snapshot.ts +41 -0
  107. package/src/cache/index.ts +1 -15
  108. package/src/cache/memory-segment-store.ts +191 -13
  109. package/src/cache/profile-registry.ts +73 -0
  110. package/src/cache/read-through-swr.ts +134 -0
  111. package/src/cache/segment-codec.ts +256 -0
  112. package/src/cache/taint.ts +153 -0
  113. package/src/cache/types.ts +72 -122
  114. package/src/client.rsc.tsx +3 -1
  115. package/src/client.tsx +106 -126
  116. package/src/component-utils.ts +4 -4
  117. package/src/components/DefaultDocument.tsx +5 -1
  118. package/src/context-var.ts +86 -0
  119. package/src/debug.ts +19 -9
  120. package/src/errors.ts +108 -2
  121. package/src/handle.ts +15 -29
  122. package/src/handles/MetaTags.tsx +73 -20
  123. package/src/handles/breadcrumbs.ts +66 -0
  124. package/src/handles/index.ts +1 -0
  125. package/src/handles/meta.ts +30 -13
  126. package/src/host/cookie-handler.ts +165 -0
  127. package/src/host/errors.ts +97 -0
  128. package/src/host/index.ts +53 -0
  129. package/src/host/pattern-matcher.ts +214 -0
  130. package/src/host/router.ts +352 -0
  131. package/src/host/testing.ts +79 -0
  132. package/src/host/types.ts +146 -0
  133. package/src/host/utils.ts +25 -0
  134. package/src/href-client.ts +119 -29
  135. package/src/index.rsc.ts +153 -19
  136. package/src/index.ts +211 -30
  137. package/src/internal-debug.ts +11 -0
  138. package/src/loader.rsc.ts +26 -147
  139. package/src/loader.ts +27 -10
  140. package/src/network-error-thrower.tsx +3 -1
  141. package/src/outlet-provider.tsx +45 -0
  142. package/src/prerender/param-hash.ts +37 -0
  143. package/src/prerender/store.ts +185 -0
  144. package/src/prerender.ts +463 -0
  145. package/src/reverse.ts +330 -0
  146. package/src/root-error-boundary.tsx +41 -29
  147. package/src/route-content-wrapper.tsx +7 -4
  148. package/src/route-definition/dsl-helpers.ts +959 -0
  149. package/src/route-definition/helper-factories.ts +200 -0
  150. package/src/route-definition/helpers-types.ts +431 -0
  151. package/src/route-definition/index.ts +52 -0
  152. package/src/route-definition/redirect.ts +93 -0
  153. package/src/route-definition.ts +1 -1428
  154. package/src/route-map-builder.ts +217 -123
  155. package/src/route-name.ts +53 -0
  156. package/src/route-types.ts +59 -8
  157. package/src/router/content-negotiation.ts +116 -0
  158. package/src/router/debug-manifest.ts +72 -0
  159. package/src/router/error-handling.ts +9 -9
  160. package/src/router/find-match.ts +160 -0
  161. package/src/router/handler-context.ts +400 -84
  162. package/src/router/intercept-resolution.ts +397 -0
  163. package/src/router/lazy-includes.ts +237 -0
  164. package/src/router/loader-resolution.ts +222 -123
  165. package/src/router/logging.ts +251 -0
  166. package/src/router/manifest.ts +154 -35
  167. package/src/router/match-api.ts +620 -0
  168. package/src/router/match-context.ts +5 -3
  169. package/src/router/match-handlers.ts +440 -0
  170. package/src/router/match-middleware/background-revalidation.ts +108 -93
  171. package/src/router/match-middleware/cache-lookup.ts +440 -10
  172. package/src/router/match-middleware/cache-store.ts +98 -26
  173. package/src/router/match-middleware/intercept-resolution.ts +57 -17
  174. package/src/router/match-middleware/segment-resolution.ts +27 -6
  175. package/src/router/match-pipelines.ts +10 -45
  176. package/src/router/match-result.ts +55 -33
  177. package/src/router/metrics.ts +240 -15
  178. package/src/router/middleware-cookies.ts +55 -0
  179. package/src/router/middleware-types.ts +226 -0
  180. package/src/router/middleware.ts +327 -369
  181. package/src/router/pattern-matching.ts +211 -43
  182. package/src/router/prerender-match.ts +402 -0
  183. package/src/router/preview-match.ts +170 -0
  184. package/src/router/revalidation.ts +137 -38
  185. package/src/router/router-context.ts +41 -21
  186. package/src/router/router-interfaces.ts +452 -0
  187. package/src/router/router-options.ts +592 -0
  188. package/src/router/router-registry.ts +24 -0
  189. package/src/router/segment-resolution/fresh.ts +683 -0
  190. package/src/router/segment-resolution/helpers.ts +263 -0
  191. package/src/router/segment-resolution/loader-cache.ts +199 -0
  192. package/src/router/segment-resolution/revalidation.ts +1301 -0
  193. package/src/router/segment-resolution/static-store.ts +67 -0
  194. package/src/router/segment-resolution.ts +21 -0
  195. package/src/router/segment-wrappers.ts +291 -0
  196. package/src/router/telemetry-otel.ts +299 -0
  197. package/src/router/telemetry.ts +300 -0
  198. package/src/router/timeout.ts +148 -0
  199. package/src/router/trie-matching.ts +239 -0
  200. package/src/router/types.ts +77 -3
  201. package/src/router.ts +665 -4182
  202. package/src/rsc/handler-context.ts +45 -0
  203. package/src/rsc/handler.ts +764 -754
  204. package/src/rsc/helpers.ts +140 -6
  205. package/src/rsc/index.ts +0 -20
  206. package/src/rsc/loader-fetch.ts +209 -0
  207. package/src/rsc/manifest-init.ts +86 -0
  208. package/src/rsc/nonce.ts +14 -0
  209. package/src/rsc/origin-guard.ts +141 -0
  210. package/src/rsc/progressive-enhancement.ts +379 -0
  211. package/src/rsc/response-error.ts +37 -0
  212. package/src/rsc/response-route-handler.ts +347 -0
  213. package/src/rsc/rsc-rendering.ts +237 -0
  214. package/src/rsc/runtime-warnings.ts +42 -0
  215. package/src/rsc/server-action.ts +348 -0
  216. package/src/rsc/ssr-setup.ts +128 -0
  217. package/src/rsc/types.ts +38 -11
  218. package/src/search-params.ts +230 -0
  219. package/src/segment-system.tsx +172 -21
  220. package/src/server/context.ts +278 -58
  221. package/src/server/cookie-store.ts +190 -0
  222. package/src/server/fetchable-loader-store.ts +37 -0
  223. package/src/server/handle-store.ts +94 -15
  224. package/src/server/loader-registry.ts +15 -56
  225. package/src/server/request-context.ts +474 -74
  226. package/src/server.ts +35 -128
  227. package/src/ssr/index.tsx +101 -31
  228. package/src/static-handler.ts +114 -0
  229. package/src/theme/ThemeProvider.tsx +21 -15
  230. package/src/theme/ThemeScript.tsx +5 -5
  231. package/src/theme/constants.ts +5 -2
  232. package/src/theme/index.ts +4 -14
  233. package/src/theme/theme-context.ts +4 -30
  234. package/src/theme/theme-script.ts +21 -18
  235. package/src/types/boundaries.ts +158 -0
  236. package/src/types/cache-types.ts +198 -0
  237. package/src/types/error-types.ts +192 -0
  238. package/src/types/global-namespace.ts +100 -0
  239. package/src/types/handler-context.ts +777 -0
  240. package/src/types/index.ts +88 -0
  241. package/src/types/loader-types.ts +183 -0
  242. package/src/types/route-config.ts +170 -0
  243. package/src/types/route-entry.ts +109 -0
  244. package/src/types/segments.ts +150 -0
  245. package/src/types.ts +1 -1623
  246. package/src/urls/include-helper.ts +197 -0
  247. package/src/urls/index.ts +53 -0
  248. package/src/urls/path-helper-types.ts +339 -0
  249. package/src/urls/path-helper.ts +329 -0
  250. package/src/urls/pattern-types.ts +95 -0
  251. package/src/urls/response-types.ts +106 -0
  252. package/src/urls/type-extraction.ts +372 -0
  253. package/src/urls/urls-function.ts +98 -0
  254. package/src/urls.ts +1 -802
  255. package/src/use-loader.tsx +85 -77
  256. package/src/vite/discovery/bundle-postprocess.ts +184 -0
  257. package/src/vite/discovery/discover-routers.ts +344 -0
  258. package/src/vite/discovery/prerender-collection.ts +385 -0
  259. package/src/vite/discovery/route-types-writer.ts +258 -0
  260. package/src/vite/discovery/self-gen-tracking.ts +47 -0
  261. package/src/vite/discovery/state.ts +108 -0
  262. package/src/vite/discovery/virtual-module-codegen.ts +203 -0
  263. package/src/vite/index.ts +11 -782
  264. package/src/vite/plugin-types.ts +48 -0
  265. package/src/vite/plugins/cjs-to-esm.ts +93 -0
  266. package/src/vite/plugins/client-ref-dedup.ts +115 -0
  267. package/src/vite/plugins/client-ref-hashing.ts +105 -0
  268. package/src/vite/{expose-action-id.ts → plugins/expose-action-id.ts} +72 -53
  269. package/src/vite/plugins/expose-id-utils.ts +287 -0
  270. package/src/vite/plugins/expose-ids/export-analysis.ts +296 -0
  271. package/src/vite/plugins/expose-ids/handler-transform.ts +179 -0
  272. package/src/vite/plugins/expose-ids/loader-transform.ts +74 -0
  273. package/src/vite/plugins/expose-ids/router-transform.ts +110 -0
  274. package/src/vite/plugins/expose-ids/types.ts +45 -0
  275. package/src/vite/plugins/expose-internal-ids.ts +569 -0
  276. package/src/vite/plugins/refresh-cmd.ts +65 -0
  277. package/src/vite/plugins/use-cache-transform.ts +323 -0
  278. package/src/vite/plugins/version-injector.ts +83 -0
  279. package/src/vite/plugins/version-plugin.ts +266 -0
  280. package/src/vite/{virtual-entries.ts → plugins/virtual-entries.ts} +27 -16
  281. package/src/vite/plugins/virtual-stub-plugin.ts +29 -0
  282. package/src/vite/rango.ts +445 -0
  283. package/src/vite/router-discovery.ts +777 -0
  284. package/src/vite/utils/ast-handler-extract.ts +517 -0
  285. package/src/vite/utils/banner.ts +36 -0
  286. package/src/vite/utils/bundle-analysis.ts +137 -0
  287. package/src/vite/utils/manifest-utils.ts +70 -0
  288. package/src/vite/{package-resolution.ts → utils/package-resolution.ts} +25 -29
  289. package/src/vite/utils/prerender-utils.ts +189 -0
  290. package/src/vite/utils/shared-utils.ts +169 -0
  291. package/CLAUDE.md +0 -43
  292. package/src/browser/lru-cache.ts +0 -69
  293. package/src/browser/request-controller.ts +0 -164
  294. package/src/cache/memory-store.ts +0 -253
  295. package/src/href-context.ts +0 -33
  296. package/src/href.ts +0 -255
  297. package/src/server/route-manifest-cache.ts +0 -173
  298. package/src/vite/expose-handle-id.ts +0 -209
  299. package/src/vite/expose-loader-id.ts +0 -426
  300. package/src/vite/expose-location-state-id.ts +0 -177
  301. package/src/warmup/connection-warmup.tsx +0 -94
  302. /package/src/vite/{version.d.ts → plugins/version.d.ts} +0 -0
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Global namespace for module augmentation
3
+ *
4
+ * Users augment these interfaces for type-safe context:
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * // In env.ts or env.d.ts
9
+ * declare global {
10
+ * namespace RSCRouter {
11
+ * interface Env extends AppBindings {}
12
+ * interface Vars extends AppVariables {}
13
+ * }
14
+ * }
15
+ *
16
+ * // Now all handlers have type-safe context without imports!
17
+ * // ctx.env.DB, ctx.get("user"), etc.
18
+ * ```
19
+ */
20
+ declare global {
21
+ namespace RSCRouter {
22
+ // eslint-disable-next-line @typescript-eslint/no-empty-interface
23
+ interface Env {
24
+ // Empty by default - users augment with their bindings (e.g., { DB: D1Database })
25
+ }
26
+
27
+ // eslint-disable-next-line @typescript-eslint/no-empty-interface
28
+ interface Vars {
29
+ // Empty by default - users augment with their variables (e.g., { user?: User })
30
+ }
31
+
32
+ // eslint-disable-next-line @typescript-eslint/no-empty-interface
33
+ interface RegisteredRoutes {
34
+ // Empty by default - users augment with their merged route maps for type-safe href()
35
+ // Values are string (pattern) for RSC routes, or { path: string; response: T } for response routes
36
+ }
37
+
38
+ // eslint-disable-next-line @typescript-eslint/no-empty-interface
39
+ interface GeneratedRouteMap {
40
+ // Empty by default - populated by generated named-routes.gen.ts
41
+ // Maps route names to URL pattern strings for Handler<"routeName"> support
42
+ }
43
+ }
44
+ }
45
+
46
+ /**
47
+ * Get registered routes or fallback to generic Record<string, string>
48
+ * When RSCRouter.RegisteredRoutes is augmented, provides autocomplete for route names
49
+ * When not augmented, allows any string (no autocomplete)
50
+ */
51
+ export type GetRegisteredRoutes = keyof RSCRouter.RegisteredRoutes extends never
52
+ ? Record<string, string>
53
+ : RSCRouter.RegisteredRoutes;
54
+
55
+ /**
56
+ * Default route map for reverse() surfaces.
57
+ * Prefers GeneratedRouteMap to avoid router.tsx -> urls.tsx -> types -> router.tsx
58
+ * cycles, but falls back to RegisteredRoutes for manual augmentation and then to
59
+ * a permissive record when no route types are available.
60
+ */
61
+ export type DefaultReverseRouteMap =
62
+ keyof RSCRouter.GeneratedRouteMap extends never
63
+ ? keyof RSCRouter.RegisteredRoutes extends never
64
+ ? Record<string, string>
65
+ : RSCRouter.RegisteredRoutes
66
+ : RSCRouter.GeneratedRouteMap;
67
+
68
+ /**
69
+ * Default route map for Handler type.
70
+ * Uses GeneratedRouteMap (from gen file) instead of RegisteredRoutes to avoid
71
+ * circular dependencies: router.tsx -> urls.tsx -> handler.tsx -> RegisteredRoutes -> router.tsx.
72
+ * GeneratedRouteMap is declared in a standalone gen file with no imports.
73
+ */
74
+ export type DefaultHandlerRouteMap =
75
+ keyof RSCRouter.GeneratedRouteMap extends never
76
+ ? {}
77
+ : RSCRouter.GeneratedRouteMap;
78
+
79
+ /**
80
+ * Default environment type - uses global augmentation if available, any otherwise
81
+ */
82
+ export type DefaultEnv = keyof RSCRouter.Env extends never
83
+ ? any
84
+ : RSCRouter.Env;
85
+
86
+ /**
87
+ * Default variables type - uses global augmentation if available, Record<string, any> otherwise
88
+ */
89
+ export type DefaultVars = keyof RSCRouter.Vars extends never
90
+ ? Record<string, any>
91
+ : RSCRouter.Vars;
92
+
93
+ /**
94
+ * Default route name type for public `routeName` on contexts.
95
+ * When GeneratedRouteMap is augmented, narrows to the known route names.
96
+ * Otherwise falls back to `string` for untyped usage.
97
+ */
98
+ export type DefaultRouteName = keyof RSCRouter.GeneratedRouteMap extends never
99
+ ? string
100
+ : keyof RSCRouter.GeneratedRouteMap & string;