@timber-js/app 0.1.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 (310) hide show
  1. package/bin/timber.mjs +5 -0
  2. package/dist/_chunks/error-boundary-dj-WO5uq.js +121 -0
  3. package/dist/_chunks/error-boundary-dj-WO5uq.js.map +1 -0
  4. package/dist/_chunks/format-DNt20Kt8.js +163 -0
  5. package/dist/_chunks/format-DNt20Kt8.js.map +1 -0
  6. package/dist/_chunks/interception-DIaZN1bF.js +669 -0
  7. package/dist/_chunks/interception-DIaZN1bF.js.map +1 -0
  8. package/dist/_chunks/metadata-routes-BDnswgRO.js +141 -0
  9. package/dist/_chunks/metadata-routes-BDnswgRO.js.map +1 -0
  10. package/dist/_chunks/registry-DUIpYD_x.js +20 -0
  11. package/dist/_chunks/registry-DUIpYD_x.js.map +1 -0
  12. package/dist/_chunks/request-context-D6XHINkR.js +330 -0
  13. package/dist/_chunks/request-context-D6XHINkR.js.map +1 -0
  14. package/dist/_chunks/tracing-BtOwb8O6.js +174 -0
  15. package/dist/_chunks/tracing-BtOwb8O6.js.map +1 -0
  16. package/dist/_chunks/use-cookie-8ZlA0rr3.js +125 -0
  17. package/dist/_chunks/use-cookie-8ZlA0rr3.js.map +1 -0
  18. package/dist/adapters/cloudflare.d.ts +92 -0
  19. package/dist/adapters/cloudflare.d.ts.map +1 -0
  20. package/dist/adapters/cloudflare.js +188 -0
  21. package/dist/adapters/cloudflare.js.map +1 -0
  22. package/dist/adapters/nitro.d.ts +72 -0
  23. package/dist/adapters/nitro.d.ts.map +1 -0
  24. package/dist/adapters/nitro.js +217 -0
  25. package/dist/adapters/nitro.js.map +1 -0
  26. package/dist/adapters/types.d.ts +53 -0
  27. package/dist/adapters/types.d.ts.map +1 -0
  28. package/dist/cache/index.d.ts +52 -0
  29. package/dist/cache/index.d.ts.map +1 -0
  30. package/dist/cache/index.js +283 -0
  31. package/dist/cache/index.js.map +1 -0
  32. package/dist/cache/redis-handler.d.ts +45 -0
  33. package/dist/cache/redis-handler.d.ts.map +1 -0
  34. package/dist/cache/register-cached-function.d.ts +17 -0
  35. package/dist/cache/register-cached-function.d.ts.map +1 -0
  36. package/dist/cache/singleflight.d.ts +11 -0
  37. package/dist/cache/singleflight.d.ts.map +1 -0
  38. package/dist/cache/stable-stringify.d.ts +7 -0
  39. package/dist/cache/stable-stringify.d.ts.map +1 -0
  40. package/dist/cache/timber-cache.d.ts +21 -0
  41. package/dist/cache/timber-cache.d.ts.map +1 -0
  42. package/dist/cli.d.ts +44 -0
  43. package/dist/cli.d.ts.map +1 -0
  44. package/dist/cli.js +135 -0
  45. package/dist/cli.js.map +1 -0
  46. package/dist/client/browser-entry.d.ts +22 -0
  47. package/dist/client/browser-entry.d.ts.map +1 -0
  48. package/dist/client/error-boundary.d.ts +42 -0
  49. package/dist/client/error-boundary.d.ts.map +1 -0
  50. package/dist/client/form.d.ts +115 -0
  51. package/dist/client/form.d.ts.map +1 -0
  52. package/dist/client/head.d.ts +16 -0
  53. package/dist/client/head.d.ts.map +1 -0
  54. package/dist/client/history.d.ts +29 -0
  55. package/dist/client/history.d.ts.map +1 -0
  56. package/dist/client/index.d.ts +32 -0
  57. package/dist/client/index.d.ts.map +1 -0
  58. package/dist/client/index.js +1218 -0
  59. package/dist/client/index.js.map +1 -0
  60. package/dist/client/link-navigate-interceptor.d.ts +28 -0
  61. package/dist/client/link-navigate-interceptor.d.ts.map +1 -0
  62. package/dist/client/link-status-provider.d.ts +11 -0
  63. package/dist/client/link-status-provider.d.ts.map +1 -0
  64. package/dist/client/link.d.ts +119 -0
  65. package/dist/client/link.d.ts.map +1 -0
  66. package/dist/client/nuqs-adapter.d.ts +11 -0
  67. package/dist/client/nuqs-adapter.d.ts.map +1 -0
  68. package/dist/client/router-ref.d.ts +11 -0
  69. package/dist/client/router-ref.d.ts.map +1 -0
  70. package/dist/client/router.d.ts +85 -0
  71. package/dist/client/router.d.ts.map +1 -0
  72. package/dist/client/segment-cache.d.ts +88 -0
  73. package/dist/client/segment-cache.d.ts.map +1 -0
  74. package/dist/client/segment-context.d.ts +32 -0
  75. package/dist/client/segment-context.d.ts.map +1 -0
  76. package/dist/client/ssr-data.d.ts +64 -0
  77. package/dist/client/ssr-data.d.ts.map +1 -0
  78. package/dist/client/types.d.ts +5 -0
  79. package/dist/client/types.d.ts.map +1 -0
  80. package/dist/client/unload-guard.d.ts +18 -0
  81. package/dist/client/unload-guard.d.ts.map +1 -0
  82. package/dist/client/use-cookie.d.ts +37 -0
  83. package/dist/client/use-cookie.d.ts.map +1 -0
  84. package/dist/client/use-link-status.d.ts +35 -0
  85. package/dist/client/use-link-status.d.ts.map +1 -0
  86. package/dist/client/use-navigation-pending.d.ts +26 -0
  87. package/dist/client/use-navigation-pending.d.ts.map +1 -0
  88. package/dist/client/use-params.d.ts +50 -0
  89. package/dist/client/use-params.d.ts.map +1 -0
  90. package/dist/client/use-pathname.d.ts +20 -0
  91. package/dist/client/use-pathname.d.ts.map +1 -0
  92. package/dist/client/use-query-states.d.ts +36 -0
  93. package/dist/client/use-query-states.d.ts.map +1 -0
  94. package/dist/client/use-router.d.ts +39 -0
  95. package/dist/client/use-router.d.ts.map +1 -0
  96. package/dist/client/use-search-params.d.ts +24 -0
  97. package/dist/client/use-search-params.d.ts.map +1 -0
  98. package/dist/client/use-selected-layout-segment.d.ts +68 -0
  99. package/dist/client/use-selected-layout-segment.d.ts.map +1 -0
  100. package/dist/content/index.d.ts +11 -0
  101. package/dist/content/index.d.ts.map +1 -0
  102. package/dist/content/index.js +2 -0
  103. package/dist/cookies/define-cookie.d.ts +61 -0
  104. package/dist/cookies/define-cookie.d.ts.map +1 -0
  105. package/dist/cookies/index.d.ts +3 -0
  106. package/dist/cookies/index.d.ts.map +1 -0
  107. package/dist/cookies/index.js +82 -0
  108. package/dist/cookies/index.js.map +1 -0
  109. package/dist/fonts/ast.d.ts +38 -0
  110. package/dist/fonts/ast.d.ts.map +1 -0
  111. package/dist/fonts/css.d.ts +43 -0
  112. package/dist/fonts/css.d.ts.map +1 -0
  113. package/dist/fonts/fallbacks.d.ts +36 -0
  114. package/dist/fonts/fallbacks.d.ts.map +1 -0
  115. package/dist/fonts/google.d.ts +122 -0
  116. package/dist/fonts/google.d.ts.map +1 -0
  117. package/dist/fonts/local.d.ts +76 -0
  118. package/dist/fonts/local.d.ts.map +1 -0
  119. package/dist/fonts/types.d.ts +85 -0
  120. package/dist/fonts/types.d.ts.map +1 -0
  121. package/dist/index.d.ts +150 -0
  122. package/dist/index.d.ts.map +1 -0
  123. package/dist/index.js +14701 -0
  124. package/dist/index.js.map +1 -0
  125. package/dist/plugins/adapter-build.d.ts +18 -0
  126. package/dist/plugins/adapter-build.d.ts.map +1 -0
  127. package/dist/plugins/build-manifest.d.ts +79 -0
  128. package/dist/plugins/build-manifest.d.ts.map +1 -0
  129. package/dist/plugins/build-report.d.ts +63 -0
  130. package/dist/plugins/build-report.d.ts.map +1 -0
  131. package/dist/plugins/cache-transform.d.ts +36 -0
  132. package/dist/plugins/cache-transform.d.ts.map +1 -0
  133. package/dist/plugins/chunks.d.ts +45 -0
  134. package/dist/plugins/chunks.d.ts.map +1 -0
  135. package/dist/plugins/content.d.ts +19 -0
  136. package/dist/plugins/content.d.ts.map +1 -0
  137. package/dist/plugins/dev-error-overlay.d.ts +60 -0
  138. package/dist/plugins/dev-error-overlay.d.ts.map +1 -0
  139. package/dist/plugins/dev-logs.d.ts +46 -0
  140. package/dist/plugins/dev-logs.d.ts.map +1 -0
  141. package/dist/plugins/dev-server.d.ts +22 -0
  142. package/dist/plugins/dev-server.d.ts.map +1 -0
  143. package/dist/plugins/dynamic-transform.d.ts +72 -0
  144. package/dist/plugins/dynamic-transform.d.ts.map +1 -0
  145. package/dist/plugins/entries.d.ts +21 -0
  146. package/dist/plugins/entries.d.ts.map +1 -0
  147. package/dist/plugins/fonts.d.ts +77 -0
  148. package/dist/plugins/fonts.d.ts.map +1 -0
  149. package/dist/plugins/mdx.d.ts +21 -0
  150. package/dist/plugins/mdx.d.ts.map +1 -0
  151. package/dist/plugins/react-prod.d.ts +18 -0
  152. package/dist/plugins/react-prod.d.ts.map +1 -0
  153. package/dist/plugins/routing.d.ts +13 -0
  154. package/dist/plugins/routing.d.ts.map +1 -0
  155. package/dist/plugins/server-action-exports.d.ts +26 -0
  156. package/dist/plugins/server-action-exports.d.ts.map +1 -0
  157. package/dist/plugins/server-bundle.d.ts +15 -0
  158. package/dist/plugins/server-bundle.d.ts.map +1 -0
  159. package/dist/plugins/shims.d.ts +18 -0
  160. package/dist/plugins/shims.d.ts.map +1 -0
  161. package/dist/plugins/static-build.d.ts +55 -0
  162. package/dist/plugins/static-build.d.ts.map +1 -0
  163. package/dist/routing/codegen.d.ts +29 -0
  164. package/dist/routing/codegen.d.ts.map +1 -0
  165. package/dist/routing/index.d.ts +8 -0
  166. package/dist/routing/index.d.ts.map +1 -0
  167. package/dist/routing/index.js +2 -0
  168. package/dist/routing/interception.d.ts +46 -0
  169. package/dist/routing/interception.d.ts.map +1 -0
  170. package/dist/routing/scanner.d.ts +28 -0
  171. package/dist/routing/scanner.d.ts.map +1 -0
  172. package/dist/routing/status-file-lint.d.ts +33 -0
  173. package/dist/routing/status-file-lint.d.ts.map +1 -0
  174. package/dist/routing/types.d.ts +81 -0
  175. package/dist/routing/types.d.ts.map +1 -0
  176. package/dist/search-params/analyze.d.ts +54 -0
  177. package/dist/search-params/analyze.d.ts.map +1 -0
  178. package/dist/search-params/codecs.d.ts +53 -0
  179. package/dist/search-params/codecs.d.ts.map +1 -0
  180. package/dist/search-params/create.d.ts +106 -0
  181. package/dist/search-params/create.d.ts.map +1 -0
  182. package/dist/search-params/index.d.ts +7 -0
  183. package/dist/search-params/index.d.ts.map +1 -0
  184. package/dist/search-params/index.js +300 -0
  185. package/dist/search-params/index.js.map +1 -0
  186. package/dist/search-params/registry.d.ts +20 -0
  187. package/dist/search-params/registry.d.ts.map +1 -0
  188. package/dist/server/access-gate.d.ts +42 -0
  189. package/dist/server/access-gate.d.ts.map +1 -0
  190. package/dist/server/action-client.d.ts +190 -0
  191. package/dist/server/action-client.d.ts.map +1 -0
  192. package/dist/server/action-handler.d.ts +48 -0
  193. package/dist/server/action-handler.d.ts.map +1 -0
  194. package/dist/server/actions.d.ts +108 -0
  195. package/dist/server/actions.d.ts.map +1 -0
  196. package/dist/server/asset-headers.d.ts +42 -0
  197. package/dist/server/asset-headers.d.ts.map +1 -0
  198. package/dist/server/body-limits.d.ts +30 -0
  199. package/dist/server/body-limits.d.ts.map +1 -0
  200. package/dist/server/build-manifest.d.ts +120 -0
  201. package/dist/server/build-manifest.d.ts.map +1 -0
  202. package/dist/server/canonicalize.d.ts +30 -0
  203. package/dist/server/canonicalize.d.ts.map +1 -0
  204. package/dist/server/client-module-map.d.ts +47 -0
  205. package/dist/server/client-module-map.d.ts.map +1 -0
  206. package/dist/server/csrf.d.ts +34 -0
  207. package/dist/server/csrf.d.ts.map +1 -0
  208. package/dist/server/deny-renderer.d.ts +49 -0
  209. package/dist/server/deny-renderer.d.ts.map +1 -0
  210. package/dist/server/dev-logger.d.ts +44 -0
  211. package/dist/server/dev-logger.d.ts.map +1 -0
  212. package/dist/server/dev-span-processor.d.ts +29 -0
  213. package/dist/server/dev-span-processor.d.ts.map +1 -0
  214. package/dist/server/dev-warnings.d.ts +129 -0
  215. package/dist/server/dev-warnings.d.ts.map +1 -0
  216. package/dist/server/early-hints-sender.d.ts +38 -0
  217. package/dist/server/early-hints-sender.d.ts.map +1 -0
  218. package/dist/server/early-hints.d.ts +83 -0
  219. package/dist/server/early-hints.d.ts.map +1 -0
  220. package/dist/server/error-boundary-wrapper.d.ts +17 -0
  221. package/dist/server/error-boundary-wrapper.d.ts.map +1 -0
  222. package/dist/server/error-formatter.d.ts +17 -0
  223. package/dist/server/error-formatter.d.ts.map +1 -0
  224. package/dist/server/flush.d.ts +74 -0
  225. package/dist/server/flush.d.ts.map +1 -0
  226. package/dist/server/form-data.d.ts +60 -0
  227. package/dist/server/form-data.d.ts.map +1 -0
  228. package/dist/server/form-flash.d.ts +78 -0
  229. package/dist/server/form-flash.d.ts.map +1 -0
  230. package/dist/server/html-injectors.d.ts +101 -0
  231. package/dist/server/html-injectors.d.ts.map +1 -0
  232. package/dist/server/index.d.ts +54 -0
  233. package/dist/server/index.d.ts.map +1 -0
  234. package/dist/server/index.js +2925 -0
  235. package/dist/server/index.js.map +1 -0
  236. package/dist/server/instrumentation.d.ts +61 -0
  237. package/dist/server/instrumentation.d.ts.map +1 -0
  238. package/dist/server/logger.d.ts +83 -0
  239. package/dist/server/logger.d.ts.map +1 -0
  240. package/dist/server/manifest-status-resolver.d.ts +58 -0
  241. package/dist/server/manifest-status-resolver.d.ts.map +1 -0
  242. package/dist/server/metadata-render.d.ts +20 -0
  243. package/dist/server/metadata-render.d.ts.map +1 -0
  244. package/dist/server/metadata-routes.d.ts +67 -0
  245. package/dist/server/metadata-routes.d.ts.map +1 -0
  246. package/dist/server/metadata.d.ts +67 -0
  247. package/dist/server/metadata.d.ts.map +1 -0
  248. package/dist/server/middleware-runner.d.ts +21 -0
  249. package/dist/server/middleware-runner.d.ts.map +1 -0
  250. package/dist/server/nuqs-ssr-provider.d.ts +28 -0
  251. package/dist/server/nuqs-ssr-provider.d.ts.map +1 -0
  252. package/dist/server/pipeline.d.ts +81 -0
  253. package/dist/server/pipeline.d.ts.map +1 -0
  254. package/dist/server/prerender.d.ts +77 -0
  255. package/dist/server/prerender.d.ts.map +1 -0
  256. package/dist/server/primitives.d.ts +131 -0
  257. package/dist/server/primitives.d.ts.map +1 -0
  258. package/dist/server/proxy.d.ts +23 -0
  259. package/dist/server/proxy.d.ts.map +1 -0
  260. package/dist/server/request-context.d.ts +175 -0
  261. package/dist/server/request-context.d.ts.map +1 -0
  262. package/dist/server/route-element-builder.d.ts +66 -0
  263. package/dist/server/route-element-builder.d.ts.map +1 -0
  264. package/dist/server/route-handler.d.ts +35 -0
  265. package/dist/server/route-handler.d.ts.map +1 -0
  266. package/dist/server/route-matcher.d.ts +78 -0
  267. package/dist/server/route-matcher.d.ts.map +1 -0
  268. package/dist/server/rsc-entry/api-handler.d.ts +11 -0
  269. package/dist/server/rsc-entry/api-handler.d.ts.map +1 -0
  270. package/dist/server/rsc-entry/error-renderer.d.ts +30 -0
  271. package/dist/server/rsc-entry/error-renderer.d.ts.map +1 -0
  272. package/dist/server/rsc-entry/helpers.d.ts +73 -0
  273. package/dist/server/rsc-entry/helpers.d.ts.map +1 -0
  274. package/dist/server/rsc-entry/index.d.ts +11 -0
  275. package/dist/server/rsc-entry/index.d.ts.map +1 -0
  276. package/dist/server/rsc-entry/ssr-bridge.d.ts +6 -0
  277. package/dist/server/rsc-entry/ssr-bridge.d.ts.map +1 -0
  278. package/dist/server/slot-resolver.d.ts +34 -0
  279. package/dist/server/slot-resolver.d.ts.map +1 -0
  280. package/dist/server/ssr-entry.d.ts +73 -0
  281. package/dist/server/ssr-entry.d.ts.map +1 -0
  282. package/dist/server/ssr-render.d.ts +67 -0
  283. package/dist/server/ssr-render.d.ts.map +1 -0
  284. package/dist/server/status-code-resolver.d.ts +77 -0
  285. package/dist/server/status-code-resolver.d.ts.map +1 -0
  286. package/dist/server/tracing.d.ts +99 -0
  287. package/dist/server/tracing.d.ts.map +1 -0
  288. package/dist/server/tree-builder.d.ts +116 -0
  289. package/dist/server/tree-builder.d.ts.map +1 -0
  290. package/dist/server/types.d.ts +231 -0
  291. package/dist/server/types.d.ts.map +1 -0
  292. package/dist/shims/font-google.d.ts +41 -0
  293. package/dist/shims/font-google.d.ts.map +1 -0
  294. package/dist/shims/headers.d.ts +11 -0
  295. package/dist/shims/headers.d.ts.map +1 -0
  296. package/dist/shims/image.d.ts +328 -0
  297. package/dist/shims/image.d.ts.map +1 -0
  298. package/dist/shims/link.d.ts +9 -0
  299. package/dist/shims/link.d.ts.map +1 -0
  300. package/dist/shims/navigation-client.d.ts +25 -0
  301. package/dist/shims/navigation-client.d.ts.map +1 -0
  302. package/dist/shims/navigation.d.ts +25 -0
  303. package/dist/shims/navigation.d.ts.map +1 -0
  304. package/dist/utils/directive-parser.d.ts +70 -0
  305. package/dist/utils/directive-parser.d.ts.map +1 -0
  306. package/dist/utils/format.d.ts +6 -0
  307. package/dist/utils/format.d.ts.map +1 -0
  308. package/dist/utils/startup-timer.d.ts +34 -0
  309. package/dist/utils/startup-timer.d.ts.map +1 -0
  310. package/package.json +140 -0
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Render-phase signal thrown by `deny()`. Caught by the framework to produce
3
+ * the correct HTTP status code (segment context) or graceful degradation (slot context).
4
+ */
5
+ export declare class DenySignal extends Error {
6
+ readonly status: number;
7
+ readonly data: unknown;
8
+ constructor(status: number, data?: unknown);
9
+ /**
10
+ * Extract the file that called deny() from the stack trace.
11
+ * Returns a short path (e.g. "app/auth/access.ts") or undefined if
12
+ * the stack can't be parsed. Dev-only — used for dev log output.
13
+ */
14
+ get sourceFile(): string | undefined;
15
+ }
16
+ /**
17
+ * Universal denial primitive. Throws a `DenySignal` that the framework catches.
18
+ *
19
+ * - In segment context (outside Suspense): produces HTTP status code
20
+ * - In slot context: graceful degradation → denied.tsx → default.tsx → null
21
+ * - Inside Suspense (hold window): promoted to pre-flush behavior
22
+ * - Inside Suspense (after flush): error boundary + noindex meta
23
+ *
24
+ * @param status - Any 4xx HTTP status code. Defaults to 403.
25
+ * @param data - Optional data passed as `dangerouslyPassData` prop to status-code files.
26
+ */
27
+ export declare function deny(status?: number, data?: unknown): never;
28
+ /**
29
+ * Convenience alias for `deny(404)`.
30
+ *
31
+ * Provided for Next.js API compatibility — libraries and user code that
32
+ * call `notFound()` from `next/navigation` get the same behavior as
33
+ * `deny(404)` in timber.
34
+ */
35
+ export declare function notFound(): never;
36
+ /**
37
+ * Next.js redirect type discriminator.
38
+ *
39
+ * Provided for API compatibility with libraries that import `RedirectType`
40
+ * from `next/navigation`. In timber, `redirect()` always uses `replace`
41
+ * semantics (no history entry for the redirect itself).
42
+ */
43
+ export declare const RedirectType: {
44
+ readonly push: "push";
45
+ readonly replace: "replace";
46
+ };
47
+ /**
48
+ * Render-phase signal thrown by `redirect()` and `redirectExternal()`.
49
+ * Caught by the framework to produce a 3xx response or client-side navigation.
50
+ */
51
+ export declare class RedirectSignal extends Error {
52
+ readonly location: string;
53
+ readonly status: number;
54
+ constructor(location: string, status: number);
55
+ }
56
+ /**
57
+ * Redirect to a relative path. Rejects absolute and protocol-relative URLs.
58
+ * Use `redirectExternal()` for external redirects with an allow-list.
59
+ *
60
+ * @param path - Relative path (e.g. '/login', 'settings', '/login?returnTo=/dash')
61
+ * @param status - HTTP redirect status code (3xx). Defaults to 302.
62
+ */
63
+ export declare function redirect(path: string, status?: number): never;
64
+ /**
65
+ * Permanent redirect to a relative path. Shorthand for `redirect(path, 308)`.
66
+ *
67
+ * Uses 308 (Permanent Redirect) which preserves the HTTP method — the browser
68
+ * will replay POST requests to the new location. This matches Next.js behavior.
69
+ *
70
+ * @param path - Relative path (e.g. '/new-page', '/dashboard')
71
+ */
72
+ export declare function permanentRedirect(path: string): never;
73
+ /**
74
+ * Redirect to an external URL. The hostname must be in the provided allow-list.
75
+ *
76
+ * @param url - Absolute URL to redirect to.
77
+ * @param allowList - Array of allowed hostnames (e.g. ['example.com', 'auth.example.com']).
78
+ * @param status - HTTP redirect status code (3xx). Defaults to 302.
79
+ */
80
+ export declare function redirectExternal(url: string, allowList: string[], status?: number): never;
81
+ /**
82
+ * Typed digest that crosses the RSC → client boundary.
83
+ * The `code` identifies the error class; `data` carries JSON-serializable context.
84
+ */
85
+ export interface RenderErrorDigest<TCode extends string = string, TData = unknown> {
86
+ code: TCode;
87
+ data: TData;
88
+ }
89
+ /**
90
+ * Typed throw for render-phase errors that carry structured context to error boundaries.
91
+ *
92
+ * The `digest` (code + data) is serialized into the RSC stream separately from the
93
+ * Error instance — only the digest crosses the RSC → client boundary.
94
+ *
95
+ * @example
96
+ * ```ts
97
+ * throw new RenderError('PRODUCT_NOT_FOUND', {
98
+ * title: 'Product not found',
99
+ * resourceId: params.id,
100
+ * })
101
+ * ```
102
+ */
103
+ export declare class RenderError<TCode extends string = string, TData = unknown> extends Error {
104
+ readonly code: TCode;
105
+ readonly digest: RenderErrorDigest<TCode, TData>;
106
+ readonly status: number;
107
+ constructor(code: TCode, data: TData, options?: {
108
+ status?: number;
109
+ });
110
+ }
111
+ /** Minimal interface for adapters that support background work. */
112
+ export interface WaitUntilAdapter {
113
+ waitUntil?(promise: Promise<unknown>): void;
114
+ }
115
+ /**
116
+ * Register a promise to be kept alive after the response is sent.
117
+ * Maps to `ctx.waitUntil()` on Cloudflare Workers and similar platforms.
118
+ *
119
+ * If the adapter does not support `waitUntil`, a warning is logged once
120
+ * and the promise is left to resolve (or reject) without being tracked.
121
+ *
122
+ * @param promise - The background work to keep alive.
123
+ * @param adapter - The platform adapter (injected by the framework at runtime).
124
+ */
125
+ export declare function waitUntil(promise: Promise<unknown>, adapter: WaitUntilAdapter): void;
126
+ /**
127
+ * Reset the waitUntil warning state. Exported for testing only.
128
+ * @internal
129
+ */
130
+ export declare function _resetWaitUntilWarning(): void;
131
+ //# sourceMappingURL=primitives.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../../src/server/primitives.ts"],"names":[],"mappings":"AAOA;;;GAGG;AACH,qBAAa,UAAW,SAAQ,KAAK;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;gBAEX,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO;IAO1C;;;;OAIG;IACH,IAAI,UAAU,IAAI,MAAM,GAAG,SAAS,CAqBnC;CACF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,IAAI,CAAC,MAAM,GAAE,MAAY,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,KAAK,CAQhE;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,IAAI,KAAK,CAEhC;AAED;;;;;;GAMG;AACH,eAAO,MAAM,YAAY;;;CAGf,CAAC;AAIX;;;GAGG;AACH,qBAAa,cAAe,SAAQ,KAAK;IACvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEZ,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAM7C;AAKD;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,MAAY,GAAG,KAAK,CAWlE;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAErD;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,MAAM,GAAE,MAAY,GAAG,KAAK,CAoB9F;AAID;;;GAGG;AACH,MAAM,WAAW,iBAAiB,CAAC,KAAK,SAAS,MAAM,GAAG,MAAM,EAAE,KAAK,GAAG,OAAO;IAC/E,IAAI,EAAE,KAAK,CAAC;IACZ,IAAI,EAAE,KAAK,CAAC;CACb;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,WAAW,CAAC,KAAK,SAAS,MAAM,GAAG,MAAM,EAAE,KAAK,GAAG,OAAO,CAAE,SAAQ,KAAK;IACpF,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACjD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEZ,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;CAYpE;AAID,mEAAmE;AACnE,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;CAC7C;AAMD;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAapF;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Proxy runner — executes app/proxy.ts before route matching.
3
+ *
4
+ * Supports two forms:
5
+ * - Function: (req, next) => Promise<Response>
6
+ * - Array: middleware functions composed left-to-right
7
+ *
8
+ * See design/07-routing.md §"proxy.ts — Global Middleware"
9
+ */
10
+ /** Signature for a single proxy middleware function. */
11
+ export type ProxyFn = (req: Request, next: () => Promise<Response>) => Response | Promise<Response>;
12
+ /** The proxy.ts default export — either a function or an array of functions. */
13
+ export type ProxyExport = ProxyFn | ProxyFn[];
14
+ /**
15
+ * Run the proxy pipeline.
16
+ *
17
+ * @param proxyExport - The default export from proxy.ts (function or array)
18
+ * @param req - The incoming request
19
+ * @param next - The continuation that proceeds to route matching and rendering
20
+ * @returns The final response
21
+ */
22
+ export declare function runProxy(proxyExport: ProxyExport, req: Request, next: () => Promise<Response>): Promise<Response>;
23
+ //# sourceMappingURL=proxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../src/server/proxy.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,wDAAwD;AACxD,MAAM,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,QAAQ,CAAC,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAEpG,gFAAgF;AAChF,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,OAAO,EAAE,CAAC;AAE9C;;;;;;;GAOG;AACH,wBAAsB,QAAQ,CAC5B,WAAW,EAAE,WAAW,EACxB,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,MAAM,OAAO,CAAC,QAAQ,CAAC,GAC5B,OAAO,CAAC,QAAQ,CAAC,CAcnB"}
@@ -0,0 +1,175 @@
1
+ /**
2
+ * Request Context — per-request ALS store for headers() and cookies().
3
+ *
4
+ * Follows the same pattern as tracing.ts: a module-level AsyncLocalStorage
5
+ * instance, public accessor functions that throw outside request scope,
6
+ * and a framework-internal `runWithRequestContext()` to establish scope.
7
+ *
8
+ * See design/04-authorization.md §"AccessContext does not include cookies or headers"
9
+ * and design/11-platform.md §"AsyncLocalStorage".
10
+ * See design/29-cookies.md for cookie mutation semantics.
11
+ */
12
+ import type { Routes } from '#/index.js';
13
+ /**
14
+ * Configure the cookie signing secrets.
15
+ *
16
+ * Called by the framework during server initialization with values from
17
+ * `cookies.secret` or `cookies.secrets` in timber.config.ts.
18
+ *
19
+ * The first secret (index 0) is used for signing new cookies.
20
+ * All secrets are tried for verification (supports key rotation).
21
+ */
22
+ export declare function setCookieSecrets(secrets: string[]): void;
23
+ /**
24
+ * Returns a read-only view of the current request's headers.
25
+ *
26
+ * Available in middleware, access checks, server components, and server actions.
27
+ * Throws if called outside a request context (security principle #2: no global fallback).
28
+ */
29
+ export declare function headers(): ReadonlyHeaders;
30
+ /**
31
+ * Returns a cookie accessor for the current request.
32
+ *
33
+ * Available in middleware, access checks, server components, and server actions.
34
+ * Throws if called outside a request context (security principle #2: no global fallback).
35
+ *
36
+ * Read methods (.get, .has, .getAll) are always available and reflect
37
+ * read-your-own-writes from .set() calls in the same request.
38
+ *
39
+ * Mutation methods (.set, .delete, .clear) are only available in mutable
40
+ * contexts (middleware.ts, server actions, route.ts handlers). Calling them
41
+ * in read-only contexts (access.ts, server components) throws.
42
+ *
43
+ * See design/29-cookies.md
44
+ */
45
+ export declare function cookies(): RequestCookies;
46
+ /**
47
+ * Returns a Promise resolving to the current request's search params.
48
+ *
49
+ * In `page.tsx`, `middleware.ts`, and `access.ts` the framework pre-parses the
50
+ * route's `search-params.ts` definition and the Promise resolves to the typed
51
+ * object. In all other server component contexts it resolves to raw
52
+ * `URLSearchParams`.
53
+ *
54
+ * Returned as a Promise to match the `params` prop convention and to allow
55
+ * future partial pre-rendering support where param resolution may be deferred.
56
+ *
57
+ * Throws if called outside a request context.
58
+ */
59
+ export declare function searchParams<R extends keyof Routes>(): Promise<Routes[R]['searchParams']>;
60
+ export declare function searchParams(): Promise<URLSearchParams | Record<string, unknown>>;
61
+ /**
62
+ * Replace the search params Promise for the current request with one that
63
+ * resolves to the typed parsed result from the route's search-params.ts.
64
+ * Called by the framework before rendering the page — not for app code.
65
+ */
66
+ export declare function setParsedSearchParams(parsed: Record<string, unknown>): void;
67
+ /**
68
+ * Read-only Headers interface. The standard Headers class is mutable;
69
+ * this type narrows it to read-only methods. The underlying object is
70
+ * still a Headers instance, but user code should not mutate it.
71
+ */
72
+ export type ReadonlyHeaders = Pick<Headers, 'get' | 'has' | 'entries' | 'keys' | 'values' | 'forEach' | typeof Symbol.iterator>;
73
+ /** Options for setting a cookie. See design/29-cookies.md. */
74
+ export interface CookieOptions {
75
+ /** Domain scope. Default: omitted (current domain only). */
76
+ domain?: string;
77
+ /** URL path scope. Default: '/'. */
78
+ path?: string;
79
+ /** Expiration date. Mutually exclusive with maxAge. */
80
+ expires?: Date;
81
+ /** Max age in seconds. Mutually exclusive with expires. */
82
+ maxAge?: number;
83
+ /** Prevent client-side JS access. Default: true. */
84
+ httpOnly?: boolean;
85
+ /** Only send over HTTPS. Default: true. */
86
+ secure?: boolean;
87
+ /** Cross-site request policy. Default: 'lax'. */
88
+ sameSite?: 'strict' | 'lax' | 'none';
89
+ /** Partitioned (CHIPS) — isolate cookie per top-level site. Default: false. */
90
+ partitioned?: boolean;
91
+ /**
92
+ * Sign the cookie value with HMAC-SHA256 for integrity verification.
93
+ * Requires `cookies.secret` or `cookies.secrets` in timber.config.ts.
94
+ * See design/29-cookies.md §"Signed Cookies".
95
+ */
96
+ signed?: boolean;
97
+ }
98
+ /**
99
+ * Cookie accessor returned by `cookies()`.
100
+ *
101
+ * Read methods are always available. Mutation methods throw in read-only
102
+ * contexts (access.ts, server components).
103
+ */
104
+ export interface RequestCookies {
105
+ /** Get a cookie value by name. Returns undefined if not present. */
106
+ get(name: string): string | undefined;
107
+ /** Check if a cookie exists. */
108
+ has(name: string): boolean;
109
+ /** Get all cookies as an array of { name, value } pairs. */
110
+ getAll(): Array<{
111
+ name: string;
112
+ value: string;
113
+ }>;
114
+ /** Number of cookies. */
115
+ readonly size: number;
116
+ /**
117
+ * Get a signed cookie value, verifying its HMAC-SHA256 signature.
118
+ * Returns undefined if the cookie is missing, the signature is invalid,
119
+ * or no secrets are configured. Never throws.
120
+ *
121
+ * See design/29-cookies.md §"Signed Cookies"
122
+ */
123
+ getSigned(name: string): string | undefined;
124
+ /** Set a cookie. Only available in mutable contexts (middleware, actions, route handlers). */
125
+ set(name: string, value: string, options?: CookieOptions): void;
126
+ /** Delete a cookie. Only available in mutable contexts. */
127
+ delete(name: string, options?: Pick<CookieOptions, 'path' | 'domain'>): void;
128
+ /** Delete all cookies. Only available in mutable contexts. */
129
+ clear(): void;
130
+ /** Serialize cookies as a Cookie header string. */
131
+ toString(): string;
132
+ }
133
+ /**
134
+ * Run a callback within a request context. Used by the pipeline to establish
135
+ * per-request ALS scope so that `headers()` and `cookies()` work.
136
+ *
137
+ * @param req - The incoming Request object.
138
+ * @param fn - The function to run within the request context.
139
+ */
140
+ export declare function runWithRequestContext<T>(req: Request, fn: () => T): T;
141
+ /**
142
+ * Enable cookie mutation for the current context. Called by the framework
143
+ * when entering middleware.ts, server actions, or route.ts handlers.
144
+ *
145
+ * See design/29-cookies.md §"Context Tracking"
146
+ */
147
+ export declare function setMutableCookieContext(mutable: boolean): void;
148
+ /**
149
+ * Mark the response as flushed (headers committed). After this point,
150
+ * cookie mutations log a warning instead of throwing.
151
+ *
152
+ * See design/29-cookies.md §"Streaming Constraint: Post-Flush Cookie Warning"
153
+ */
154
+ export declare function markResponseFlushed(): void;
155
+ /**
156
+ * Collect all Set-Cookie headers from the cookie jar.
157
+ * Called by the framework at flush time to apply cookies to the response.
158
+ *
159
+ * Returns an array of serialized Set-Cookie header values.
160
+ */
161
+ export declare function getSetCookieHeaders(): string[];
162
+ /**
163
+ * Apply middleware-injected request headers to the current request context.
164
+ *
165
+ * Called by the pipeline after middleware.ts runs. Merges overlay headers
166
+ * on top of the original request headers so downstream code (access.ts,
167
+ * server components, server actions) sees them via `headers()`.
168
+ *
169
+ * The original request headers are never mutated — a new frozen Headers
170
+ * object is created with the overlay applied on top.
171
+ *
172
+ * See design/07-routing.md §"Request Header Injection"
173
+ */
174
+ export declare function applyRequestHeaderOverlay(overlay: Headers): void;
175
+ //# sourceMappingURL=request-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-context.d.ts","sourceRoot":"","sources":["../../src/server/request-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AA+CzC;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAExD;AAID;;;;;GAKG;AACH,wBAAgB,OAAO,IAAI,eAAe,CASzC;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,OAAO,IAAI,cAAc,CA2GxC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;AAC3F,wBAAgB,YAAY,IAAI,OAAO,CAAC,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAYnF;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAK3E;AAID;;;;GAIG;AACH,MAAM,MAAM,eAAe,GAAG,IAAI,CAChC,OAAO,EACP,KAAK,GAAG,KAAK,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,MAAM,CAAC,QAAQ,CACnF,CAAC;AAEF,8DAA8D;AAC9D,MAAM,WAAW,aAAa;IAC5B,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oCAAoC;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uDAAuD;IACvD,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,2DAA2D;IAC3D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,2CAA2C;IAC3C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,iDAAiD;IACjD,QAAQ,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;IACrC,+EAA+E;IAC/E,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AASD;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,oEAAoE;IACpE,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACtC,gCAAgC;IAChC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3B,4DAA4D;IAC5D,MAAM,IAAI,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjD,yBAAyB;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;;;;OAMG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAC5C,8FAA8F;IAC9F,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IAChE,2DAA2D;IAC3D,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,MAAM,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC;IAC7E,8DAA8D;IAC9D,KAAK,IAAI,IAAI,CAAC;IACd,mDAAmD;IACnD,QAAQ,IAAI,MAAM,CAAC;CACpB;AAID;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAYrE;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAK9D;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAK1C;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAI9C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmBhE"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Route Element Builder — constructs a React element tree from a matched route.
3
+ *
4
+ * Extracted from rsc-entry.ts to enable reuse by the revalidation renderer
5
+ * (which needs the element tree without RSC serialization) and to keep
6
+ * rsc-entry.ts under the 500-line limit.
7
+ *
8
+ * This module handles:
9
+ * 1. Loading page/layout components from the segment chain
10
+ * 2. Running access.ts checks (DenySignal/RedirectSignal propagate to caller)
11
+ * 3. Resolving metadata (static object or async function, both exported as `metadata`)
12
+ * 4. Building the React element tree (page → error boundaries → access gates → layouts)
13
+ * 5. Resolving parallel slots
14
+ *
15
+ * See design/02-rendering-pipeline.md, design/04-authorization.md
16
+ */
17
+ import type { RouteMatch } from './pipeline.js';
18
+ import type { ManifestSegmentNode } from './route-matcher.js';
19
+ import { DenySignal, RedirectSignal } from './primitives.js';
20
+ import type { InterceptionContext } from './pipeline.js';
21
+ /** Head element for client-side metadata updates. */
22
+ export interface HeadElement {
23
+ tag: string;
24
+ content?: string;
25
+ attrs?: Record<string, string | null>;
26
+ }
27
+ /** Layout entry with component and segment. */
28
+ export interface LayoutComponentEntry {
29
+ component: (...args: unknown[]) => unknown;
30
+ segment: ManifestSegmentNode;
31
+ }
32
+ /** Result of building a route element tree. */
33
+ export interface RouteElementResult {
34
+ /** The React element tree (page wrapped in layouts, access gates, error boundaries). */
35
+ element: React.ReactElement;
36
+ /** Resolved head elements for metadata. */
37
+ headElements: HeadElement[];
38
+ /** Layout components loaded along the segment chain. */
39
+ layoutComponents: LayoutComponentEntry[];
40
+ /** Segments from the route match. */
41
+ segments: ManifestSegmentNode[];
42
+ /** Max deferSuspenseFor hold window across all segments. */
43
+ deferSuspenseFor: number;
44
+ }
45
+ /**
46
+ * Wraps a DenySignal or RedirectSignal with the layout components loaded
47
+ * so far, enabling the caller to render deny pages inside the layout shell.
48
+ */
49
+ export declare class RouteSignalWithContext extends Error {
50
+ readonly signal: DenySignal | RedirectSignal;
51
+ readonly layoutComponents: LayoutComponentEntry[];
52
+ readonly segments: ManifestSegmentNode[];
53
+ constructor(signal: DenySignal | RedirectSignal, layoutComponents: LayoutComponentEntry[], segments: ManifestSegmentNode[]);
54
+ }
55
+ /**
56
+ * Build a React element tree from a matched route.
57
+ *
58
+ * Loads modules, runs access checks, resolves metadata, and constructs
59
+ * the element tree. DenySignal and RedirectSignal propagate to the caller
60
+ * for HTTP-level handling.
61
+ *
62
+ * Does NOT serialize to RSC Flight — the caller decides whether to render
63
+ * to a stream or use the element directly (e.g., for action revalidation).
64
+ */
65
+ export declare function buildRouteElement(req: Request, match: RouteMatch, interception?: InterceptionContext): Promise<RouteElementResult>;
66
+ //# sourceMappingURL=route-element-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-element-builder.d.ts","sourceRoot":"","sources":["../../src/server/route-element-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAQ9D,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAO7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAIzD,qDAAqD;AACrD,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;CACvC;AAED,+CAA+C;AAC/C,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC;IAC3C,OAAO,EAAE,mBAAmB,CAAC;CAC9B;AAED,+CAA+C;AAC/C,MAAM,WAAW,kBAAkB;IACjC,wFAAwF;IACxF,OAAO,EAAE,KAAK,CAAC,YAAY,CAAC;IAC5B,2CAA2C;IAC3C,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,wDAAwD;IACxD,gBAAgB,EAAE,oBAAoB,EAAE,CAAC;IACzC,qCAAqC;IACrC,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAChC,4DAA4D;IAC5D,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED;;;GAGG;AACH,qBAAa,sBAAuB,SAAQ,KAAK;aAE7B,MAAM,EAAE,UAAU,GAAG,cAAc;aACnC,gBAAgB,EAAE,oBAAoB,EAAE;aACxC,QAAQ,EAAE,mBAAmB,EAAE;gBAF/B,MAAM,EAAE,UAAU,GAAG,cAAc,EACnC,gBAAgB,EAAE,oBAAoB,EAAE,EACxC,QAAQ,EAAE,mBAAmB,EAAE;CAIlD;AAID;;;;;;;;;GASG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,UAAU,EACjB,YAAY,CAAC,EAAE,mBAAmB,GACjC,OAAO,CAAC,kBAAkB,CAAC,CAyS7B"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Route handler for route.ts API endpoints.
3
+ *
4
+ * route.ts files export named HTTP method handlers (GET, POST, etc.).
5
+ * They share the same pipeline (proxy → match → middleware → access → handler)
6
+ * but don't render React trees.
7
+ *
8
+ * See design/07-routing.md §"route.ts — API Endpoints"
9
+ */
10
+ import type { RouteContext } from './types.js';
11
+ /** HTTP methods that route.ts can export as named handlers. */
12
+ export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'HEAD' | 'OPTIONS';
13
+ /** A single route handler function — one-arg signature. */
14
+ export type RouteHandler = (ctx: RouteContext) => Response | Promise<Response>;
15
+ /** A route.ts module — named exports for each supported HTTP method. */
16
+ export type RouteModule = {
17
+ [K in HttpMethod]?: RouteHandler;
18
+ };
19
+ /**
20
+ * Resolve the full list of allowed methods for a route module.
21
+ *
22
+ * Includes:
23
+ * - All explicitly exported methods
24
+ * - HEAD (implicit when GET is exported)
25
+ * - OPTIONS (always implicit)
26
+ */
27
+ export declare function resolveAllowedMethods(mod: RouteModule): HttpMethod[];
28
+ /**
29
+ * Handle an incoming request against a route.ts module.
30
+ *
31
+ * Dispatches to the named method handler, auto-generates 405/OPTIONS,
32
+ * and merges response headers from ctx.headers.
33
+ */
34
+ export declare function handleRouteRequest(mod: RouteModule, ctx: RouteContext): Promise<Response>;
35
+ //# sourceMappingURL=route-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-handler.d.ts","sourceRoot":"","sources":["../../src/server/route-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAI/C,+DAA+D;AAC/D,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;AAE1F,2DAA2D;AAC3D,MAAM,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,YAAY,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAE/E,wEAAwE;AACxE,MAAM,MAAM,WAAW,GAAG;KACvB,CAAC,IAAI,UAAU,CAAC,CAAC,EAAE,YAAY;CACjC,CAAC;AAOF;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,WAAW,GAAG,UAAU,EAAE,CAyBpE;AAID;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,CAyC/F"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Route matcher — resolves a canonical pathname to a RouteMatch.
3
+ *
4
+ * Walks the manifest segment tree to find the best matching route.
5
+ * Priority: static > dynamic > catch-all > optional-catch-all.
6
+ * Groups are transparent (don't add URL depth).
7
+ *
8
+ * See design/07-routing.md §"Request Lifecycle"
9
+ */
10
+ import type { RouteMatch } from './pipeline.js';
11
+ import { type MetadataRouteType } from './metadata-routes.js';
12
+ /** A file reference in the manifest (lazy import + path). */
13
+ interface ManifestFile {
14
+ load: () => Promise<unknown>;
15
+ filePath: string;
16
+ }
17
+ /** A segment node as it appears in the virtual:timber-route-manifest module. */
18
+ export interface ManifestSegmentNode {
19
+ segmentName: string;
20
+ segmentType: 'static' | 'dynamic' | 'catch-all' | 'optional-catch-all' | 'group' | 'slot' | 'intercepting';
21
+ urlPath: string;
22
+ paramName?: string;
23
+ /** For intercepting segments: the marker used, e.g. "(.)". */
24
+ interceptionMarker?: '(.)' | '(..)' | '(...)' | '(..)(..)';
25
+ /** For intercepting segments: the segment name after stripping the marker. */
26
+ interceptedSegmentName?: string;
27
+ page?: ManifestFile;
28
+ layout?: ManifestFile;
29
+ middleware?: ManifestFile;
30
+ access?: ManifestFile;
31
+ route?: ManifestFile;
32
+ error?: ManifestFile;
33
+ default?: ManifestFile;
34
+ denied?: ManifestFile;
35
+ searchParams?: ManifestFile;
36
+ statusFiles?: Record<string, ManifestFile>;
37
+ jsonStatusFiles?: Record<string, ManifestFile>;
38
+ legacyStatusFiles?: Record<string, ManifestFile>;
39
+ prerender?: ManifestFile;
40
+ /** Metadata route files (sitemap.ts, robots.ts, icon.tsx, etc.) keyed by base name */
41
+ metadataRoutes?: Record<string, ManifestFile>;
42
+ children: ManifestSegmentNode[];
43
+ slots: Record<string, ManifestSegmentNode>;
44
+ }
45
+ /** The manifest shape from virtual:timber-route-manifest. */
46
+ export interface ManifestRoot {
47
+ root: ManifestSegmentNode;
48
+ proxy?: ManifestFile;
49
+ }
50
+ /**
51
+ * Create a route matcher function from a manifest.
52
+ *
53
+ * The returned function takes a canonical pathname and returns a RouteMatch
54
+ * or null if no route matches.
55
+ */
56
+ export declare function createRouteMatcher(manifest: ManifestRoot): (pathname: string) => RouteMatch | null;
57
+ /** Result of matching a metadata route. */
58
+ export interface MetadataRouteMatch {
59
+ /** The metadata route type (sitemap, robots, icon, etc.) */
60
+ type: MetadataRouteType;
61
+ /** Content-Type header for the response. */
62
+ contentType: string;
63
+ /** The manifest file reference for the handler module. */
64
+ file: ManifestFile;
65
+ /** The matched segment (for context/params if needed). */
66
+ segment: ManifestSegmentNode;
67
+ }
68
+ /**
69
+ * Create a metadata route matcher from a manifest.
70
+ *
71
+ * Walks the segment tree and builds a map from serve paths to handler modules.
72
+ * Metadata routes are matched by exact pathname (e.g., /sitemap.xml, /blog/sitemap.xml).
73
+ *
74
+ * See design/16-metadata.md §"Metadata Routes"
75
+ */
76
+ export declare function createMetadataRouteMatcher(manifest: ManifestRoot): (pathname: string) => MetadataRouteMatch | null;
77
+ export {};
78
+ //# sourceMappingURL=route-matcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-matcher.d.ts","sourceRoot":"","sources":["../../src/server/route-matcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,sBAAsB,CAAC;AAM9B,6DAA6D;AAC7D,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,gFAAgF;AAChF,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EACP,QAAQ,GACR,SAAS,GACT,WAAW,GACX,oBAAoB,GACpB,OAAO,GACP,MAAM,GACN,cAAc,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8DAA8D;IAC9D,kBAAkB,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC;IAC3D,8EAA8E;IAC9E,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAEhC,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,UAAU,CAAC,EAAE,YAAY,CAAC;IAC1B,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC3C,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC/C,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACjD,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,sFAAsF;IACtF,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAE9C,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAChC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;CAC5C;AAED,6DAA6D;AAC7D,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,mBAAmB,CAAC;IAC1B,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AAID;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,YAAY,GACrB,CAAC,QAAQ,EAAE,MAAM,KAAK,UAAU,GAAG,IAAI,CAEzC;AAsKD,2CAA2C;AAC3C,MAAM,WAAW,kBAAkB;IACjC,4DAA4D;IAC5D,IAAI,EAAE,iBAAiB,CAAC;IACxB,4CAA4C;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,IAAI,EAAE,YAAY,CAAC;IACnB,0DAA0D;IAC1D,OAAO,EAAE,mBAAmB,CAAC;CAC9B;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,YAAY,GACrB,CAAC,QAAQ,EAAE,MAAM,KAAK,kBAAkB,GAAG,IAAI,CAMjD"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * RSC API Route Handler — handles route.ts requests (non-React).
3
+ *
4
+ * Runs access.ts standalone for all segments in the chain (no React render
5
+ * pass, no AccessGate component). Then dispatches to the route handler.
6
+ * See design/04-authorization.md §"Auth in API Routes".
7
+ */
8
+ import type { ManifestSegmentNode } from '#/server/route-matcher.js';
9
+ import type { RouteMatch } from '#/server/pipeline.js';
10
+ export declare function handleApiRoute(req: Request, match: RouteMatch, segments: ManifestSegmentNode[], responseHeaders: Headers): Promise<Response>;
11
+ //# sourceMappingURL=api-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-handler.d.ts","sourceRoot":"","sources":["../../../src/server/rsc-entry/api-handler.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAMvD,wBAAsB,cAAc,CAClC,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,mBAAmB,EAAE,EAC/B,eAAe,EAAE,OAAO,GACvB,OAAO,CAAC,QAAQ,CAAC,CAyDnB"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * RSC Error & No-Match Renderers — handles error pages and 404s.
3
+ *
4
+ * Renders error.tsx / status files and 404 pages through the RSC → SSR pipeline.
5
+ */
6
+ import type { RouteMatch } from '#/server/pipeline.js';
7
+ import type { ManifestSegmentNode } from '#/server/route-matcher.js';
8
+ import type { ClientBootstrapConfig } from '#/server/html-injectors.js';
9
+ import type { LayoutEntry } from '#/server/deny-renderer.js';
10
+ /**
11
+ * Render an error page for unhandled throws or RenderError outside Suspense.
12
+ *
13
+ * Walks the segment chain from leaf to root looking for:
14
+ * 1. Specific status file (e.g. 503.tsx) matching the error's status
15
+ * 2. 5xx.tsx category catch-all
16
+ * 3. error.tsx
17
+ *
18
+ * Renders the found component with { error, digest, reset } props
19
+ * wrapped in layouts, with the correct HTTP status code.
20
+ */
21
+ export declare function renderErrorPage(error: unknown, status: number, segments: ManifestSegmentNode[], layoutComponents: LayoutEntry[], req: Request, match: RouteMatch, responseHeaders: Headers, clientBootstrap: ClientBootstrapConfig): Promise<Response>;
22
+ /**
23
+ * Render a 404 page for URLs that don't match any route.
24
+ *
25
+ * Uses the root segment's 404.tsx (or 4xx.tsx / error.tsx fallback)
26
+ * wrapped in the root layout, via the same renderDenyPage path
27
+ * used for in-route deny() calls.
28
+ */
29
+ export declare function renderNoMatchPage(req: Request, rootSegment: ManifestSegmentNode, responseHeaders: Headers, clientBootstrap: ClientBootstrapConfig): Promise<Response>;
30
+ //# sourceMappingURL=error-renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-renderer.d.ts","sourceRoot":"","sources":["../../../src/server/rsc-entry/error-renderer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAErE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAExE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAK7D;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,mBAAmB,EAAE,EAC/B,gBAAgB,EAAE,WAAW,EAAE,EAC/B,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,UAAU,EACjB,eAAe,EAAE,OAAO,EACxB,eAAe,EAAE,qBAAqB,GACrC,OAAO,CAAC,QAAQ,CAAC,CA6FnB;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,OAAO,EACZ,WAAW,EAAE,mBAAmB,EAChC,eAAe,EAAE,OAAO,EACxB,eAAe,EAAE,qBAAqB,GACrC,OAAO,CAAC,QAAQ,CAAC,CA6BnB"}