@timber-js/app 0.2.0-alpha.13 → 0.2.0-alpha.131

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 (785) hide show
  1. package/LICENSE +8 -0
  2. package/dist/_chunks/actions-BNhpxrnV.js +1104 -0
  3. package/dist/_chunks/actions-BNhpxrnV.js.map +1 -0
  4. package/dist/_chunks/build-output-helper-K7oUCRqU.js +102 -0
  5. package/dist/_chunks/build-output-helper-K7oUCRqU.js.map +1 -0
  6. package/dist/_chunks/cli-schema-sync-CObqjGWF.js +2 -0
  7. package/dist/_chunks/cli-schema-sync-q-Ce6-iG.js +785 -0
  8. package/dist/_chunks/cli-schema-sync-q-Ce6-iG.js.map +1 -0
  9. package/dist/_chunks/codec-registry-DqkeAydt.js +21 -0
  10. package/dist/_chunks/codec-registry-DqkeAydt.js.map +1 -0
  11. package/dist/_chunks/define-DMq-Yjp7.js +112 -0
  12. package/dist/_chunks/define-DMq-Yjp7.js.map +1 -0
  13. package/dist/_chunks/define-jeHDXZGq.js +195 -0
  14. package/dist/_chunks/define-jeHDXZGq.js.map +1 -0
  15. package/dist/_chunks/format-BjN9HLu9.js +14 -0
  16. package/dist/_chunks/format-BjN9HLu9.js.map +1 -0
  17. package/dist/_chunks/handler-store-bIAstrxQ.js +54 -0
  18. package/dist/_chunks/handler-store-bIAstrxQ.js.map +1 -0
  19. package/dist/_chunks/logger-CMd9P1xQ.js +291 -0
  20. package/dist/_chunks/logger-CMd9P1xQ.js.map +1 -0
  21. package/dist/_chunks/merge-search-params-Cm1j99HC.js +41 -0
  22. package/dist/_chunks/merge-search-params-Cm1j99HC.js.map +1 -0
  23. package/dist/_chunks/{metadata-routes-Cjmvi3rQ.js → metadata-routes-DESG8uk5.js} +32 -19
  24. package/dist/_chunks/metadata-routes-DESG8uk5.js.map +1 -0
  25. package/dist/_chunks/navigation-root-B5-RmsPi.js +103 -0
  26. package/dist/_chunks/navigation-root-B5-RmsPi.js.map +1 -0
  27. package/dist/_chunks/registry-BI9cgCt7.js +20 -0
  28. package/dist/_chunks/registry-BI9cgCt7.js.map +1 -0
  29. package/dist/_chunks/resolve-schema-DU2nbVOi.js +77 -0
  30. package/dist/_chunks/resolve-schema-DU2nbVOi.js.map +1 -0
  31. package/dist/_chunks/router-ref-B2-2kIIC.js +28 -0
  32. package/dist/_chunks/router-ref-B2-2kIIC.js.map +1 -0
  33. package/dist/_chunks/schema-bridge-o0SwFtXW.js +86 -0
  34. package/dist/_chunks/schema-bridge-o0SwFtXW.js.map +1 -0
  35. package/dist/_chunks/segment-classify-BjfuctV2.js +137 -0
  36. package/dist/_chunks/segment-classify-BjfuctV2.js.map +1 -0
  37. package/dist/_chunks/segment-context-Bg0pFbLT.js +34 -0
  38. package/dist/_chunks/segment-context-Bg0pFbLT.js.map +1 -0
  39. package/dist/_chunks/{ssr-data-MjmprTmO.js → ssr-data-DVX8S7vj.js} +1 -1
  40. package/dist/_chunks/ssr-data-DVX8S7vj.js.map +1 -0
  41. package/dist/_chunks/stale-reload-CCqb62Z3.js +84 -0
  42. package/dist/_chunks/stale-reload-CCqb62Z3.js.map +1 -0
  43. package/dist/_chunks/tracing-DP5djRq5.js +358 -0
  44. package/dist/_chunks/tracing-DP5djRq5.js.map +1 -0
  45. package/dist/_chunks/{use-query-states-D5KaffOK.js → use-query-states-C9G6LP0F.js} +7 -20
  46. package/dist/_chunks/use-query-states-C9G6LP0F.js.map +1 -0
  47. package/dist/_chunks/use-segment-params-CIeinIx2.js +151 -0
  48. package/dist/_chunks/use-segment-params-CIeinIx2.js.map +1 -0
  49. package/dist/_chunks/validation-AfEFM5ze.js +84 -0
  50. package/dist/_chunks/validation-AfEFM5ze.js.map +1 -0
  51. package/dist/_chunks/walkers-BbEu2_Pp.js +724 -0
  52. package/dist/_chunks/walkers-BbEu2_Pp.js.map +1 -0
  53. package/dist/_chunks/{format-DviM89f0.js → warnings-CAzunaGo.js} +6 -45
  54. package/dist/_chunks/warnings-CAzunaGo.js.map +1 -0
  55. package/dist/adapters/build-output-helper.d.ts +28 -0
  56. package/dist/adapters/build-output-helper.d.ts.map +1 -0
  57. package/dist/adapters/cloudflare-dev.d.ts +109 -0
  58. package/dist/adapters/cloudflare-dev.d.ts.map +1 -0
  59. package/dist/adapters/cloudflare-dev.js +73 -0
  60. package/dist/adapters/cloudflare-dev.js.map +1 -0
  61. package/dist/adapters/cloudflare-kv-cache.d.ts +64 -0
  62. package/dist/adapters/cloudflare-kv-cache.d.ts.map +1 -0
  63. package/dist/adapters/cloudflare-kv-cache.js +95 -0
  64. package/dist/adapters/cloudflare-kv-cache.js.map +1 -0
  65. package/dist/adapters/cloudflare.d.ts +148 -12
  66. package/dist/adapters/cloudflare.d.ts.map +1 -1
  67. package/dist/adapters/cloudflare.js +142 -38
  68. package/dist/adapters/cloudflare.js.map +1 -1
  69. package/dist/adapters/compress-module.d.ts.map +1 -1
  70. package/dist/adapters/nitro.d.ts +17 -1
  71. package/dist/adapters/nitro.d.ts.map +1 -1
  72. package/dist/adapters/nitro.js +143 -45
  73. package/dist/adapters/nitro.js.map +1 -1
  74. package/dist/adapters/shared.d.ts +16 -0
  75. package/dist/adapters/shared.d.ts.map +1 -0
  76. package/dist/cache/cache-api.d.ts +24 -0
  77. package/dist/cache/cache-api.d.ts.map +1 -0
  78. package/dist/cache/handler-store.d.ts +31 -0
  79. package/dist/cache/handler-store.d.ts.map +1 -0
  80. package/dist/cache/index.d.ts +23 -7
  81. package/dist/cache/index.d.ts.map +1 -1
  82. package/dist/cache/index.js +151 -81
  83. package/dist/cache/index.js.map +1 -1
  84. package/dist/cache/singleflight.d.ts +18 -1
  85. package/dist/cache/singleflight.d.ts.map +1 -1
  86. package/dist/cache/sizeof.d.ts +22 -0
  87. package/dist/cache/sizeof.d.ts.map +1 -0
  88. package/dist/cache/timber-cache.d.ts +1 -1
  89. package/dist/cache/timber-cache.d.ts.map +1 -1
  90. package/dist/cli-schema-sync.d.ts +39 -0
  91. package/dist/cli-schema-sync.d.ts.map +1 -0
  92. package/dist/cli.d.ts +14 -2
  93. package/dist/cli.d.ts.map +1 -1
  94. package/dist/cli.js +48 -6
  95. package/dist/cli.js.map +1 -1
  96. package/dist/client/browser-dev.d.ts +34 -1
  97. package/dist/client/browser-dev.d.ts.map +1 -1
  98. package/dist/client/browser-entry/action-dispatch.d.ts +17 -0
  99. package/dist/client/browser-entry/action-dispatch.d.ts.map +1 -0
  100. package/dist/client/browser-entry/hmr.d.ts +21 -0
  101. package/dist/client/browser-entry/hmr.d.ts.map +1 -0
  102. package/dist/client/browser-entry/hydrate.d.ts +46 -0
  103. package/dist/client/browser-entry/hydrate.d.ts.map +1 -0
  104. package/dist/client/browser-entry/index.d.ts +30 -0
  105. package/dist/client/browser-entry/index.d.ts.map +1 -0
  106. package/dist/client/browser-entry/post-hydration.d.ts +26 -0
  107. package/dist/client/browser-entry/post-hydration.d.ts.map +1 -0
  108. package/dist/client/browser-entry/router-init.d.ts +26 -0
  109. package/dist/client/browser-entry/router-init.d.ts.map +1 -0
  110. package/dist/client/browser-entry/rsc-stream.d.ts +24 -0
  111. package/dist/client/browser-entry/rsc-stream.d.ts.map +1 -0
  112. package/dist/client/browser-entry/scroll.d.ts +19 -0
  113. package/dist/client/browser-entry/scroll.d.ts.map +1 -0
  114. package/dist/client/error-boundary.d.ts +12 -5
  115. package/dist/client/error-boundary.d.ts.map +1 -1
  116. package/dist/client/error-boundary.js +29 -6
  117. package/dist/client/error-boundary.js.map +1 -1
  118. package/dist/client/error-reconstituter.d.ts +54 -0
  119. package/dist/client/error-reconstituter.d.ts.map +1 -0
  120. package/dist/client/form.d.ts +16 -27
  121. package/dist/client/form.d.ts.map +1 -1
  122. package/dist/client/history.d.ts +19 -4
  123. package/dist/client/history.d.ts.map +1 -1
  124. package/dist/client/index.d.ts +10 -24
  125. package/dist/client/index.d.ts.map +1 -1
  126. package/dist/client/index.js +180 -1119
  127. package/dist/client/index.js.map +1 -1
  128. package/dist/client/internal.d.ts +19 -0
  129. package/dist/client/internal.d.ts.map +1 -0
  130. package/dist/client/internal.js +845 -0
  131. package/dist/client/internal.js.map +1 -0
  132. package/dist/client/link-pending-store.d.ts +65 -0
  133. package/dist/client/link-pending-store.d.ts.map +1 -0
  134. package/dist/client/link.d.ts +67 -56
  135. package/dist/client/link.d.ts.map +1 -1
  136. package/dist/client/nav-link-store.d.ts +27 -0
  137. package/dist/client/nav-link-store.d.ts.map +1 -0
  138. package/dist/client/navigation-api-types.d.ts +90 -0
  139. package/dist/client/navigation-api-types.d.ts.map +1 -0
  140. package/dist/client/navigation-api.d.ts +115 -0
  141. package/dist/client/navigation-api.d.ts.map +1 -0
  142. package/dist/client/navigation-context.d.ts +14 -2
  143. package/dist/client/navigation-context.d.ts.map +1 -1
  144. package/dist/client/{transition-root.d.ts → navigation-root.d.ts} +46 -9
  145. package/dist/client/navigation-root.d.ts.map +1 -0
  146. package/dist/client/nuqs-adapter.d.ts.map +1 -1
  147. package/dist/client/router-ref.d.ts +1 -1
  148. package/dist/client/router.d.ts +79 -10
  149. package/dist/client/router.d.ts.map +1 -1
  150. package/dist/client/rsc-fetch.d.ts +46 -3
  151. package/dist/client/rsc-fetch.d.ts.map +1 -1
  152. package/dist/client/segment-cache.d.ts +3 -1
  153. package/dist/client/segment-cache.d.ts.map +1 -1
  154. package/dist/client/segment-outlet.d.ts +49 -0
  155. package/dist/client/segment-outlet.d.ts.map +1 -0
  156. package/dist/client/segment-update-context.d.ts +21 -0
  157. package/dist/client/segment-update-context.d.ts.map +1 -0
  158. package/dist/client/shallow-url.d.ts +10 -0
  159. package/dist/client/shallow-url.d.ts.map +1 -0
  160. package/dist/client/ssr-data.d.ts +13 -4
  161. package/dist/client/ssr-data.d.ts.map +1 -1
  162. package/dist/client/stale-reload.d.ts +15 -0
  163. package/dist/client/stale-reload.d.ts.map +1 -1
  164. package/dist/client/state.d.ts +1 -1
  165. package/dist/client/top-loader.d.ts +5 -5
  166. package/dist/client/top-loader.d.ts.map +1 -1
  167. package/dist/client/use-cookie.d.ts +12 -0
  168. package/dist/client/use-cookie.d.ts.map +1 -1
  169. package/dist/client/use-link-status.d.ts +5 -5
  170. package/dist/client/use-link-status.d.ts.map +1 -1
  171. package/dist/client/use-pending-navigation.d.ts +23 -0
  172. package/dist/client/use-pending-navigation.d.ts.map +1 -0
  173. package/dist/client/use-query-states.d.ts +1 -1
  174. package/dist/client/use-query-states.d.ts.map +1 -1
  175. package/dist/client/use-router.d.ts +1 -1
  176. package/dist/client/use-search-params.d.ts +7 -5
  177. package/dist/client/use-search-params.d.ts.map +1 -1
  178. package/dist/client/{use-params.d.ts → use-segment-params.d.ts} +8 -6
  179. package/dist/client/use-segment-params.d.ts.map +1 -0
  180. package/dist/codec.d.ts +69 -0
  181. package/dist/codec.d.ts.map +1 -0
  182. package/dist/codec.js +75 -0
  183. package/dist/codec.js.map +1 -0
  184. package/dist/config-types.d.ts +294 -0
  185. package/dist/config-types.d.ts.map +1 -0
  186. package/dist/config-validation.d.ts +51 -0
  187. package/dist/config-validation.d.ts.map +1 -0
  188. package/dist/content/index.d.ts +1 -10
  189. package/dist/content/index.d.ts.map +1 -1
  190. package/dist/content/index.js +0 -2
  191. package/dist/cookies/define-cookie.d.ts +58 -25
  192. package/dist/cookies/define-cookie.d.ts.map +1 -1
  193. package/dist/cookies/index.d.ts +2 -1
  194. package/dist/cookies/index.d.ts.map +1 -1
  195. package/dist/cookies/index.js +251 -36
  196. package/dist/cookies/index.js.map +1 -1
  197. package/dist/cookies/json-cookie.d.ts +64 -0
  198. package/dist/cookies/json-cookie.d.ts.map +1 -0
  199. package/dist/cookies/validation.d.ts +46 -0
  200. package/dist/cookies/validation.d.ts.map +1 -0
  201. package/dist/dev-tools/404-page.d.ts +46 -0
  202. package/dist/dev-tools/404-page.d.ts.map +1 -0
  203. package/dist/dev-tools/browser-logs.d.ts +84 -0
  204. package/dist/dev-tools/browser-logs.d.ts.map +1 -0
  205. package/dist/dev-tools/error-page.d.ts +58 -0
  206. package/dist/dev-tools/error-page.d.ts.map +1 -0
  207. package/dist/dev-tools/holding-server.d.ts +54 -0
  208. package/dist/dev-tools/holding-server.d.ts.map +1 -0
  209. package/dist/dev-tools/index.d.ts +31 -0
  210. package/dist/dev-tools/index.d.ts.map +1 -0
  211. package/dist/{server/dev-span-processor.d.ts → dev-tools/instrumentation.d.ts} +26 -6
  212. package/dist/dev-tools/instrumentation.d.ts.map +1 -0
  213. package/dist/{server/dev-logger.d.ts → dev-tools/logger.d.ts} +1 -1
  214. package/dist/dev-tools/logger.d.ts.map +1 -0
  215. package/dist/{plugins/dev-logs.d.ts → dev-tools/logs.d.ts} +2 -2
  216. package/dist/dev-tools/logs.d.ts.map +1 -0
  217. package/dist/dev-tools/overlay.d.ts +91 -0
  218. package/dist/dev-tools/overlay.d.ts.map +1 -0
  219. package/dist/dev-tools/stack-classifier.d.ts +34 -0
  220. package/dist/dev-tools/stack-classifier.d.ts.map +1 -0
  221. package/dist/dev-tools/terminal.d.ts +28 -0
  222. package/dist/dev-tools/terminal.d.ts.map +1 -0
  223. package/dist/{server/dev-warnings.d.ts → dev-tools/warnings.d.ts} +2 -22
  224. package/dist/dev-tools/warnings.d.ts.map +1 -0
  225. package/dist/fonts/ast.d.ts +98 -6
  226. package/dist/fonts/ast.d.ts.map +1 -1
  227. package/dist/fonts/bundle.d.ts +48 -0
  228. package/dist/fonts/bundle.d.ts.map +1 -0
  229. package/dist/fonts/dev-middleware.d.ts +22 -0
  230. package/dist/fonts/dev-middleware.d.ts.map +1 -0
  231. package/dist/fonts/local.d.ts +1 -1
  232. package/dist/fonts/pipeline.d.ts +167 -0
  233. package/dist/fonts/pipeline.d.ts.map +1 -0
  234. package/dist/fonts/transform.d.ts +78 -0
  235. package/dist/fonts/transform.d.ts.map +1 -0
  236. package/dist/fonts/types.d.ts +45 -1
  237. package/dist/fonts/types.d.ts.map +1 -1
  238. package/dist/fonts/virtual-modules.d.ts +94 -0
  239. package/dist/fonts/virtual-modules.d.ts.map +1 -0
  240. package/dist/index.d.ts +46 -164
  241. package/dist/index.d.ts.map +1 -1
  242. package/dist/index.js +5584 -13386
  243. package/dist/index.js.map +1 -1
  244. package/dist/params/codec-registry.d.ts +26 -0
  245. package/dist/params/codec-registry.d.ts.map +1 -0
  246. package/dist/params/define-schema.d.ts +81 -0
  247. package/dist/params/define-schema.d.ts.map +1 -0
  248. package/dist/params/index.d.ts +5 -0
  249. package/dist/params/index.d.ts.map +1 -0
  250. package/dist/params/index.js +34 -0
  251. package/dist/params/index.js.map +1 -0
  252. package/dist/params/resolve-schema.d.ts +34 -0
  253. package/dist/params/resolve-schema.d.ts.map +1 -0
  254. package/dist/plugin-context.d.ts +107 -0
  255. package/dist/plugin-context.d.ts.map +1 -0
  256. package/dist/plugins/adapter-build.d.ts +1 -1
  257. package/dist/plugins/adapter-build.d.ts.map +1 -1
  258. package/dist/plugins/build-manifest.d.ts +2 -2
  259. package/dist/plugins/build-manifest.d.ts.map +1 -1
  260. package/dist/plugins/build-report.d.ts +9 -7
  261. package/dist/plugins/build-report.d.ts.map +1 -1
  262. package/dist/plugins/client-chunks.d.ts +32 -0
  263. package/dist/plugins/client-chunks.d.ts.map +1 -0
  264. package/dist/plugins/cloudflare-wasm.d.ts +18 -0
  265. package/dist/plugins/cloudflare-wasm.d.ts.map +1 -0
  266. package/dist/plugins/content.d.ts +1 -1
  267. package/dist/plugins/content.d.ts.map +1 -1
  268. package/dist/plugins/dev-server.d.ts +1 -1
  269. package/dist/plugins/dev-server.d.ts.map +1 -1
  270. package/dist/plugins/entries.d.ts +1 -1
  271. package/dist/plugins/entries.d.ts.map +1 -1
  272. package/dist/plugins/fonts.d.ts +17 -73
  273. package/dist/plugins/fonts.d.ts.map +1 -1
  274. package/dist/plugins/mdx.d.ts +1 -1
  275. package/dist/plugins/mdx.d.ts.map +1 -1
  276. package/dist/plugins/routing.d.ts +1 -1
  277. package/dist/plugins/routing.d.ts.map +1 -1
  278. package/dist/plugins/server-bundle.d.ts.map +1 -1
  279. package/dist/plugins/shims.d.ts +6 -5
  280. package/dist/plugins/shims.d.ts.map +1 -1
  281. package/dist/plugins/static-build.d.ts +5 -26
  282. package/dist/plugins/static-build.d.ts.map +1 -1
  283. package/dist/routing/codegen-shared.d.ts +67 -0
  284. package/dist/routing/codegen-shared.d.ts.map +1 -0
  285. package/dist/routing/codegen-types.d.ts +60 -0
  286. package/dist/routing/codegen-types.d.ts.map +1 -0
  287. package/dist/routing/codegen.d.ts +7 -2
  288. package/dist/routing/codegen.d.ts.map +1 -1
  289. package/dist/routing/convention-lint.d.ts +41 -0
  290. package/dist/routing/convention-lint.d.ts.map +1 -0
  291. package/dist/routing/index.d.ts +7 -1
  292. package/dist/routing/index.d.ts.map +1 -1
  293. package/dist/routing/index.js +4 -2
  294. package/dist/routing/link-codegen.d.ts +90 -0
  295. package/dist/routing/link-codegen.d.ts.map +1 -0
  296. package/dist/routing/scanner.d.ts +1 -10
  297. package/dist/routing/scanner.d.ts.map +1 -1
  298. package/dist/routing/schema-validation.d.ts +35 -0
  299. package/dist/routing/schema-validation.d.ts.map +1 -0
  300. package/dist/routing/segment-classify.d.ts +75 -0
  301. package/dist/routing/segment-classify.d.ts.map +1 -0
  302. package/dist/routing/segment-codegen.d.ts +38 -0
  303. package/dist/routing/segment-codegen.d.ts.map +1 -0
  304. package/dist/routing/types.d.ts +77 -25
  305. package/dist/routing/types.d.ts.map +1 -1
  306. package/dist/routing/walkers.d.ts +51 -0
  307. package/dist/routing/walkers.d.ts.map +1 -0
  308. package/dist/rsc-runtime/rsc.d.ts +1 -1
  309. package/dist/rsc-runtime/rsc.d.ts.map +1 -1
  310. package/dist/rsc-runtime/ssr.d.ts +12 -0
  311. package/dist/rsc-runtime/ssr.d.ts.map +1 -1
  312. package/dist/schema-bridge.d.ts +76 -0
  313. package/dist/schema-bridge.d.ts.map +1 -0
  314. package/dist/search-params/define.d.ts +157 -0
  315. package/dist/search-params/define.d.ts.map +1 -0
  316. package/dist/search-params/index.d.ts +4 -7
  317. package/dist/search-params/index.d.ts.map +1 -1
  318. package/dist/search-params/index.js +34 -441
  319. package/dist/search-params/index.js.map +1 -1
  320. package/dist/search-params/registry.d.ts +2 -2
  321. package/dist/search-params/registry.d.ts.map +1 -1
  322. package/dist/search-params/wrappers.d.ts +53 -0
  323. package/dist/search-params/wrappers.d.ts.map +1 -0
  324. package/dist/segment-params/define.d.ts +89 -0
  325. package/dist/segment-params/define.d.ts.map +1 -0
  326. package/dist/segment-params/index.d.ts +3 -0
  327. package/dist/segment-params/index.d.ts.map +1 -0
  328. package/dist/segment-params/index.js +2 -0
  329. package/dist/server/access-gate.d.ts +8 -3
  330. package/dist/server/access-gate.d.ts.map +1 -1
  331. package/dist/server/action-client.d.ts +41 -6
  332. package/dist/server/action-client.d.ts.map +1 -1
  333. package/dist/server/action-encryption.d.ts +76 -0
  334. package/dist/server/action-encryption.d.ts.map +1 -0
  335. package/dist/server/action-handler.d.ts +35 -1
  336. package/dist/server/action-handler.d.ts.map +1 -1
  337. package/dist/server/actions.d.ts +6 -14
  338. package/dist/server/actions.d.ts.map +1 -1
  339. package/dist/server/als-registry.d.ts +70 -11
  340. package/dist/server/als-registry.d.ts.map +1 -1
  341. package/dist/server/asset-headers.d.ts +1 -15
  342. package/dist/server/asset-headers.d.ts.map +1 -1
  343. package/dist/server/build-manifest.d.ts +8 -2
  344. package/dist/server/build-manifest.d.ts.map +1 -1
  345. package/dist/server/coalesce-tick.d.ts +40 -0
  346. package/dist/server/coalesce-tick.d.ts.map +1 -0
  347. package/dist/server/cookie-context.d.ts +170 -0
  348. package/dist/server/cookie-context.d.ts.map +1 -0
  349. package/dist/server/cookie-parsing.d.ts +51 -0
  350. package/dist/server/cookie-parsing.d.ts.map +1 -0
  351. package/dist/server/debug.d.ts +1 -1
  352. package/dist/server/default-logger.d.ts +22 -0
  353. package/dist/server/default-logger.d.ts.map +1 -0
  354. package/dist/server/deny-boundary.d.ts +90 -0
  355. package/dist/server/deny-boundary.d.ts.map +1 -0
  356. package/dist/server/deny-renderer.d.ts +1 -1
  357. package/dist/server/deny-renderer.d.ts.map +1 -1
  358. package/dist/server/dev-source-map.d.ts +22 -0
  359. package/dist/server/dev-source-map.d.ts.map +1 -0
  360. package/dist/server/early-hints-sender.d.ts.map +1 -1
  361. package/dist/server/early-hints.d.ts +13 -5
  362. package/dist/server/early-hints.d.ts.map +1 -1
  363. package/dist/server/error-boundary-wrapper.d.ts +7 -1
  364. package/dist/server/error-boundary-wrapper.d.ts.map +1 -1
  365. package/dist/server/fallback-error.d.ts +12 -7
  366. package/dist/server/fallback-error.d.ts.map +1 -1
  367. package/dist/server/flight-injection-state.d.ts +66 -0
  368. package/dist/server/flight-injection-state.d.ts.map +1 -0
  369. package/dist/server/flight-scripts.d.ts +42 -0
  370. package/dist/server/flight-scripts.d.ts.map +1 -0
  371. package/dist/server/flush.d.ts.map +1 -1
  372. package/dist/server/form-data.d.ts +29 -0
  373. package/dist/server/form-data.d.ts.map +1 -1
  374. package/dist/server/html-injector-core.d.ts +213 -0
  375. package/dist/server/html-injector-core.d.ts.map +1 -0
  376. package/dist/server/html-injectors.d.ts +81 -41
  377. package/dist/server/html-injectors.d.ts.map +1 -1
  378. package/dist/server/index.d.ts +10 -46
  379. package/dist/server/index.d.ts.map +1 -1
  380. package/dist/server/index.js +155 -2905
  381. package/dist/server/index.js.map +1 -1
  382. package/dist/server/internal.d.ts +48 -0
  383. package/dist/server/internal.d.ts.map +1 -0
  384. package/dist/server/internal.js +3027 -0
  385. package/dist/server/internal.js.map +1 -0
  386. package/dist/server/logger.d.ts +39 -7
  387. package/dist/server/logger.d.ts.map +1 -1
  388. package/dist/server/metadata-routes.d.ts +23 -7
  389. package/dist/server/metadata-routes.d.ts.map +1 -1
  390. package/dist/server/middleware-runner.d.ts +36 -4
  391. package/dist/server/middleware-runner.d.ts.map +1 -1
  392. package/dist/server/node-stream-transforms.d.ts +112 -0
  393. package/dist/server/node-stream-transforms.d.ts.map +1 -0
  394. package/dist/server/param-coercion.d.ts +54 -0
  395. package/dist/server/param-coercion.d.ts.map +1 -0
  396. package/dist/server/pipeline-helpers.d.ts +95 -0
  397. package/dist/server/pipeline-helpers.d.ts.map +1 -0
  398. package/dist/server/pipeline-interception.d.ts +1 -1
  399. package/dist/server/pipeline-interception.d.ts.map +1 -1
  400. package/dist/server/pipeline-metadata.d.ts +6 -0
  401. package/dist/server/pipeline-metadata.d.ts.map +1 -1
  402. package/dist/server/pipeline-outcome.d.ts +49 -0
  403. package/dist/server/pipeline-outcome.d.ts.map +1 -0
  404. package/dist/server/pipeline-phases.d.ts +52 -0
  405. package/dist/server/pipeline-phases.d.ts.map +1 -0
  406. package/dist/server/pipeline.d.ts +118 -23
  407. package/dist/server/pipeline.d.ts.map +1 -1
  408. package/dist/server/port-resolution.d.ts +117 -0
  409. package/dist/server/port-resolution.d.ts.map +1 -0
  410. package/dist/server/primitives.d.ts +69 -18
  411. package/dist/server/primitives.d.ts.map +1 -1
  412. package/dist/server/render-timeout.d.ts +51 -0
  413. package/dist/server/render-timeout.d.ts.map +1 -0
  414. package/dist/server/request-context.d.ts +62 -107
  415. package/dist/server/request-context.d.ts.map +1 -1
  416. package/dist/server/route-element-builder.d.ts +28 -2
  417. package/dist/server/route-element-builder.d.ts.map +1 -1
  418. package/dist/server/route-handler.d.ts.map +1 -1
  419. package/dist/server/route-matcher.d.ts +25 -36
  420. package/dist/server/route-matcher.d.ts.map +1 -1
  421. package/dist/server/rsc-entry/action-middleware-runner.d.ts +66 -0
  422. package/dist/server/rsc-entry/action-middleware-runner.d.ts.map +1 -0
  423. package/dist/server/rsc-entry/api-handler.d.ts +2 -2
  424. package/dist/server/rsc-entry/api-handler.d.ts.map +1 -1
  425. package/dist/server/rsc-entry/error-renderer.d.ts +26 -13
  426. package/dist/server/rsc-entry/error-renderer.d.ts.map +1 -1
  427. package/dist/server/rsc-entry/helpers.d.ts +50 -6
  428. package/dist/server/rsc-entry/helpers.d.ts.map +1 -1
  429. package/dist/server/rsc-entry/index.d.ts +19 -8
  430. package/dist/server/rsc-entry/index.d.ts.map +1 -1
  431. package/dist/server/rsc-entry/render-route.d.ts +50 -0
  432. package/dist/server/rsc-entry/render-route.d.ts.map +1 -0
  433. package/dist/server/rsc-entry/rsc-payload.d.ts +3 -3
  434. package/dist/server/rsc-entry/rsc-payload.d.ts.map +1 -1
  435. package/dist/server/rsc-entry/rsc-stream.d.ts +17 -1
  436. package/dist/server/rsc-entry/rsc-stream.d.ts.map +1 -1
  437. package/dist/server/rsc-entry/ssr-bridge.d.ts +5 -1
  438. package/dist/server/rsc-entry/ssr-bridge.d.ts.map +1 -1
  439. package/dist/server/rsc-entry/ssr-renderer.d.ts +19 -4
  440. package/dist/server/rsc-entry/ssr-renderer.d.ts.map +1 -1
  441. package/dist/server/rsc-entry/wrap-action-dispatch.d.ts +119 -0
  442. package/dist/server/rsc-entry/wrap-action-dispatch.d.ts.map +1 -0
  443. package/dist/server/safe-load.d.ts +46 -0
  444. package/dist/server/safe-load.d.ts.map +1 -0
  445. package/dist/server/sensitive-fields.d.ts +74 -0
  446. package/dist/server/sensitive-fields.d.ts.map +1 -0
  447. package/dist/server/sitemap-generator.d.ts +129 -0
  448. package/dist/server/sitemap-generator.d.ts.map +1 -0
  449. package/dist/server/sitemap-handler.d.ts +22 -0
  450. package/dist/server/sitemap-handler.d.ts.map +1 -0
  451. package/dist/server/slot-resolver.d.ts +1 -1
  452. package/dist/server/slot-resolver.d.ts.map +1 -1
  453. package/dist/server/ssr-bridge-types.d.ts +121 -0
  454. package/dist/server/ssr-bridge-types.d.ts.map +1 -0
  455. package/dist/server/ssr-entry.d.ts +2 -43
  456. package/dist/server/ssr-entry.d.ts.map +1 -1
  457. package/dist/server/ssr-render.d.ts +64 -21
  458. package/dist/server/ssr-render.d.ts.map +1 -1
  459. package/dist/server/ssr-wrappers.d.ts +50 -0
  460. package/dist/server/ssr-wrappers.d.ts.map +1 -0
  461. package/dist/server/state-tree-diff.d.ts +12 -5
  462. package/dist/server/state-tree-diff.d.ts.map +1 -1
  463. package/dist/server/status-code-resolver.d.ts +16 -11
  464. package/dist/server/status-code-resolver.d.ts.map +1 -1
  465. package/dist/server/stream-utils.d.ts +36 -0
  466. package/dist/server/stream-utils.d.ts.map +1 -0
  467. package/dist/server/tracing.d.ts +5 -5
  468. package/dist/server/tracing.d.ts.map +1 -1
  469. package/dist/server/tree-builder.d.ts +62 -30
  470. package/dist/server/tree-builder.d.ts.map +1 -1
  471. package/dist/server/tree-match.d.ts +49 -0
  472. package/dist/server/tree-match.d.ts.map +1 -0
  473. package/dist/server/types.d.ts +49 -4
  474. package/dist/server/types.d.ts.map +1 -1
  475. package/dist/server/utils/escape-html.d.ts +14 -0
  476. package/dist/server/utils/escape-html.d.ts.map +1 -0
  477. package/dist/server/version-skew.d.ts +61 -0
  478. package/dist/server/version-skew.d.ts.map +1 -0
  479. package/dist/shared/merge-search-params.d.ts +22 -0
  480. package/dist/shared/merge-search-params.d.ts.map +1 -0
  481. package/dist/shims/font-google.d.ts +1 -1
  482. package/dist/shims/font-google.d.ts.map +1 -1
  483. package/dist/shims/font-google.js +42 -0
  484. package/dist/shims/font-google.js.map +1 -0
  485. package/dist/shims/font-local.d.ts +26 -0
  486. package/dist/shims/font-local.d.ts.map +1 -0
  487. package/dist/shims/font-local.js +20 -0
  488. package/dist/shims/font-local.js.map +1 -0
  489. package/dist/shims/headers.d.ts +2 -1
  490. package/dist/shims/headers.d.ts.map +1 -1
  491. package/dist/shims/navigation-client.d.ts +3 -1
  492. package/dist/shims/navigation-client.d.ts.map +1 -1
  493. package/dist/shims/navigation.d.ts +11 -5
  494. package/dist/shims/navigation.d.ts.map +1 -1
  495. package/dist/utils/state-machine.d.ts +80 -0
  496. package/dist/utils/state-machine.d.ts.map +1 -0
  497. package/package.json +61 -22
  498. package/src/adapters/build-output-helper.ts +139 -0
  499. package/src/adapters/cloudflare-dev.ts +177 -0
  500. package/src/adapters/cloudflare-kv-cache.ts +142 -0
  501. package/src/adapters/cloudflare.ts +350 -76
  502. package/src/adapters/compress-module.ts +24 -4
  503. package/src/adapters/nitro.ts +142 -59
  504. package/src/adapters/shared.ts +40 -0
  505. package/src/adapters/wrangler.d.ts +7 -0
  506. package/src/cache/cache-api.ts +38 -0
  507. package/src/cache/handler-store.ts +68 -0
  508. package/src/cache/index.ts +81 -18
  509. package/src/cache/singleflight.ts +62 -4
  510. package/src/cache/sizeof.ts +33 -0
  511. package/src/cache/timber-cache.ts +25 -20
  512. package/src/cli-schema-sync.ts +295 -0
  513. package/src/cli.ts +76 -8
  514. package/src/client/browser-dev.ts +153 -1
  515. package/src/client/browser-entry/action-dispatch.ts +125 -0
  516. package/src/client/browser-entry/hmr.ts +81 -0
  517. package/src/client/browser-entry/hydrate.ts +153 -0
  518. package/src/client/browser-entry/index.ts +151 -0
  519. package/src/client/browser-entry/post-hydration.ts +113 -0
  520. package/src/client/browser-entry/router-init.ts +219 -0
  521. package/src/client/browser-entry/rsc-stream.ts +157 -0
  522. package/src/client/browser-entry/scroll.ts +27 -0
  523. package/src/client/error-boundary.tsx +99 -22
  524. package/src/client/error-reconstituter.tsx +65 -0
  525. package/src/client/form.tsx +31 -32
  526. package/src/client/history.ts +26 -4
  527. package/src/client/index.ts +66 -45
  528. package/src/client/internal.ts +58 -0
  529. package/src/client/link-pending-store.ts +116 -0
  530. package/src/client/link.tsx +336 -119
  531. package/src/client/nav-link-store.ts +37 -0
  532. package/src/client/navigation-api-types.ts +112 -0
  533. package/src/client/navigation-api.ts +332 -0
  534. package/src/client/navigation-context.ts +33 -7
  535. package/src/client/navigation-root.tsx +347 -0
  536. package/src/client/nuqs-adapter.tsx +16 -3
  537. package/src/client/router-ref.ts +1 -1
  538. package/src/client/router.ts +418 -128
  539. package/src/client/rsc-fetch.ts +208 -10
  540. package/src/client/segment-cache.ts +6 -3
  541. package/src/client/segment-outlet.tsx +77 -0
  542. package/src/client/segment-update-context.ts +42 -0
  543. package/src/client/shallow-url.ts +22 -0
  544. package/src/client/ssr-data.ts +13 -5
  545. package/src/client/stale-reload.ts +72 -3
  546. package/src/client/state.ts +2 -2
  547. package/src/client/top-loader.tsx +11 -9
  548. package/src/client/use-cookie.ts +31 -2
  549. package/src/client/use-link-status.ts +7 -7
  550. package/src/client/use-pending-navigation.ts +40 -0
  551. package/src/client/use-query-states.ts +9 -3
  552. package/src/client/use-router.ts +1 -1
  553. package/src/client/use-search-params.ts +25 -44
  554. package/src/client/{use-params.ts → use-segment-params.ts} +8 -6
  555. package/src/codec.ts +147 -0
  556. package/src/config-types.ts +292 -0
  557. package/src/config-validation.ts +303 -0
  558. package/src/content/index.ts +5 -13
  559. package/src/cookies/define-cookie.ts +233 -53
  560. package/src/cookies/index.ts +12 -1
  561. package/src/cookies/json-cookie.ts +105 -0
  562. package/src/cookies/validation.ts +134 -0
  563. package/src/dev-tools/404-page.ts +387 -0
  564. package/src/dev-tools/browser-logs.ts +291 -0
  565. package/src/dev-tools/error-page.ts +506 -0
  566. package/src/dev-tools/holding-server.ts +187 -0
  567. package/src/dev-tools/index.ts +90 -0
  568. package/src/dev-tools/instrumentation.ts +176 -0
  569. package/src/{plugins/dev-logs.ts → dev-tools/logs.ts} +9 -5
  570. package/src/dev-tools/overlay.ts +469 -0
  571. package/src/dev-tools/stack-classifier.ts +75 -0
  572. package/src/dev-tools/terminal.ts +183 -0
  573. package/src/{server/dev-warnings.ts → dev-tools/warnings.ts} +5 -50
  574. package/src/fonts/ast.ts +525 -16
  575. package/src/fonts/bundle.ts +142 -0
  576. package/src/fonts/dev-middleware.ts +74 -0
  577. package/src/fonts/local.ts +1 -1
  578. package/src/fonts/pipeline.ts +314 -0
  579. package/src/fonts/transform.ts +317 -0
  580. package/src/fonts/types.ts +50 -1
  581. package/src/fonts/virtual-modules.ts +233 -0
  582. package/src/index.ts +411 -329
  583. package/src/params/codec-registry.ts +34 -0
  584. package/src/params/define-schema.ts +114 -0
  585. package/src/params/index.ts +17 -0
  586. package/src/params/resolve-schema.ts +116 -0
  587. package/src/plugin-context.ts +240 -0
  588. package/src/plugins/adapter-build.ts +12 -4
  589. package/src/plugins/build-manifest.ts +69 -6
  590. package/src/plugins/build-report.ts +16 -25
  591. package/src/plugins/client-chunks.ts +65 -0
  592. package/src/plugins/cloudflare-wasm.ts +103 -0
  593. package/src/plugins/content.ts +1 -1
  594. package/src/plugins/dev-server.ts +179 -37
  595. package/src/plugins/entries.ts +111 -8
  596. package/src/plugins/fonts.ts +165 -654
  597. package/src/plugins/mdx.ts +47 -10
  598. package/src/plugins/routing.ts +386 -47
  599. package/src/plugins/server-bundle.ts +59 -3
  600. package/src/plugins/shims.ts +136 -35
  601. package/src/plugins/static-build.ts +15 -89
  602. package/src/routing/codegen-shared.ts +115 -0
  603. package/src/routing/codegen-types.ts +61 -0
  604. package/src/routing/codegen.ts +321 -177
  605. package/src/routing/convention-lint.ts +357 -0
  606. package/src/routing/index.ts +10 -1
  607. package/src/routing/interception.ts +1 -1
  608. package/src/routing/link-codegen.ts +308 -0
  609. package/src/routing/scanner.ts +165 -110
  610. package/src/routing/schema-validation.ts +149 -0
  611. package/src/routing/segment-classify.ts +188 -0
  612. package/src/routing/segment-codegen.ts +98 -0
  613. package/src/routing/types.ts +78 -25
  614. package/src/routing/walkers.ts +90 -0
  615. package/src/rsc-runtime/rsc.ts +2 -0
  616. package/src/rsc-runtime/ssr.ts +50 -0
  617. package/src/rsc-runtime/vendor-types.d.ts +7 -0
  618. package/src/{search-params/codecs.ts → schema-bridge.ts} +57 -20
  619. package/src/search-params/define.ts +538 -0
  620. package/src/search-params/index.ts +14 -20
  621. package/src/search-params/registry.ts +2 -2
  622. package/src/search-params/wrappers.ts +92 -0
  623. package/src/segment-params/define.ts +309 -0
  624. package/src/segment-params/index.ts +9 -0
  625. package/src/server/access-gate.tsx +76 -34
  626. package/src/server/action-client.ts +88 -15
  627. package/src/server/action-encryption.ts +144 -0
  628. package/src/server/action-handler.ts +112 -14
  629. package/src/server/actions.ts +14 -23
  630. package/src/server/als-registry.ts +108 -20
  631. package/src/server/asset-headers.ts +8 -34
  632. package/src/server/build-manifest.ts +17 -4
  633. package/src/server/coalesce-tick.ts +75 -0
  634. package/src/server/compress.ts +25 -7
  635. package/src/server/cookie-context.ts +468 -0
  636. package/src/server/cookie-parsing.ts +135 -0
  637. package/src/server/debug.ts +1 -1
  638. package/src/server/default-logger.ts +99 -0
  639. package/src/server/deny-boundary.ts +218 -0
  640. package/src/server/deny-renderer.ts +32 -51
  641. package/src/server/dev-source-map.ts +31 -0
  642. package/src/server/early-hints-sender.ts +3 -2
  643. package/src/server/early-hints.ts +36 -15
  644. package/src/server/error-boundary-wrapper.ts +74 -22
  645. package/src/server/fallback-error.ts +74 -102
  646. package/src/server/flight-injection-state.ts +113 -0
  647. package/src/server/flight-scripts.ts +62 -0
  648. package/src/server/flush.ts +2 -1
  649. package/src/server/form-data.ts +101 -5
  650. package/src/server/html-injector-core.ts +417 -0
  651. package/src/server/html-injectors.ts +235 -223
  652. package/src/server/index.ts +29 -183
  653. package/src/server/internal.ts +182 -0
  654. package/src/server/logger.ts +67 -36
  655. package/src/server/metadata-routes.ts +44 -19
  656. package/src/server/middleware-runner.ts +75 -4
  657. package/src/server/node-stream-transforms.ts +361 -0
  658. package/src/server/param-coercion.ts +206 -0
  659. package/src/server/pipeline-helpers.ts +204 -0
  660. package/src/server/pipeline-interception.ts +17 -16
  661. package/src/server/pipeline-metadata.ts +13 -0
  662. package/src/server/pipeline-outcome.ts +197 -0
  663. package/src/server/pipeline-phases.ts +468 -0
  664. package/src/server/pipeline.ts +154 -394
  665. package/src/server/port-resolution.ts +215 -0
  666. package/src/server/primitives.ts +111 -28
  667. package/src/server/render-timeout.ts +108 -0
  668. package/src/server/request-context.ts +168 -337
  669. package/src/server/route-element-builder.ts +435 -208
  670. package/src/server/route-handler.ts +24 -4
  671. package/src/server/route-matcher.ts +128 -277
  672. package/src/server/rsc-entry/action-middleware-runner.ts +167 -0
  673. package/src/server/rsc-entry/api-handler.ts +16 -17
  674. package/src/server/rsc-entry/error-renderer.ts +315 -89
  675. package/src/server/rsc-entry/helpers.ts +155 -26
  676. package/src/server/rsc-entry/index.ts +316 -327
  677. package/src/server/rsc-entry/render-route.ts +313 -0
  678. package/src/server/rsc-entry/rsc-payload.ts +65 -18
  679. package/src/server/rsc-entry/rsc-stream.ts +85 -13
  680. package/src/server/rsc-entry/ssr-bridge.ts +18 -5
  681. package/src/server/rsc-entry/ssr-renderer.ts +193 -40
  682. package/src/server/rsc-entry/wrap-action-dispatch.ts +449 -0
  683. package/src/server/safe-load.ts +60 -0
  684. package/src/server/sensitive-fields.ts +230 -0
  685. package/src/server/sitemap-generator.ts +338 -0
  686. package/src/server/sitemap-handler.ts +126 -0
  687. package/src/server/slot-resolver.ts +228 -246
  688. package/src/server/ssr-bridge-types.ts +124 -0
  689. package/src/server/ssr-entry.ts +217 -78
  690. package/src/server/ssr-render.ts +344 -71
  691. package/src/server/ssr-wrappers.tsx +139 -0
  692. package/src/server/state-tree-diff.ts +30 -23
  693. package/src/server/status-code-resolver.ts +112 -128
  694. package/src/server/stream-utils.ts +213 -0
  695. package/src/server/tracing.ts +21 -10
  696. package/src/server/tree-builder.ts +202 -90
  697. package/src/server/tree-match.ts +210 -0
  698. package/src/server/types.ts +55 -6
  699. package/src/server/utils/escape-html.ts +20 -0
  700. package/src/server/version-skew.ts +104 -0
  701. package/src/shared/merge-search-params.ts +55 -0
  702. package/src/shims/font-google.ts +1 -1
  703. package/src/shims/font-local.ts +34 -0
  704. package/src/shims/headers.ts +5 -1
  705. package/src/shims/navigation-client.ts +4 -3
  706. package/src/shims/navigation.ts +14 -7
  707. package/src/utils/state-machine.ts +111 -0
  708. package/dist/_chunks/als-registry-B7DbZ2hS.js +0 -41
  709. package/dist/_chunks/als-registry-B7DbZ2hS.js.map +0 -1
  710. package/dist/_chunks/debug-gwlJkDuf.js +0 -108
  711. package/dist/_chunks/debug-gwlJkDuf.js.map +0 -1
  712. package/dist/_chunks/format-DviM89f0.js.map +0 -1
  713. package/dist/_chunks/interception-BOoWmLUA.js +0 -676
  714. package/dist/_chunks/interception-BOoWmLUA.js.map +0 -1
  715. package/dist/_chunks/metadata-routes-Cjmvi3rQ.js.map +0 -1
  716. package/dist/_chunks/request-context-DIkVh_jG.js +0 -330
  717. package/dist/_chunks/request-context-DIkVh_jG.js.map +0 -1
  718. package/dist/_chunks/ssr-data-MjmprTmO.js.map +0 -1
  719. package/dist/_chunks/tracing-CemImE6h.js +0 -187
  720. package/dist/_chunks/tracing-CemImE6h.js.map +0 -1
  721. package/dist/_chunks/use-cookie-DX-l1_5E.js +0 -91
  722. package/dist/_chunks/use-cookie-DX-l1_5E.js.map +0 -1
  723. package/dist/_chunks/use-query-states-D5KaffOK.js.map +0 -1
  724. package/dist/cache/register-cached-function.d.ts +0 -17
  725. package/dist/cache/register-cached-function.d.ts.map +0 -1
  726. package/dist/client/browser-entry.d.ts +0 -21
  727. package/dist/client/browser-entry.d.ts.map +0 -1
  728. package/dist/client/link-status-provider.d.ts +0 -11
  729. package/dist/client/link-status-provider.d.ts.map +0 -1
  730. package/dist/client/segment-merger.d.ts +0 -119
  731. package/dist/client/segment-merger.d.ts.map +0 -1
  732. package/dist/client/transition-root.d.ts.map +0 -1
  733. package/dist/client/use-navigation-pending.d.ts +0 -26
  734. package/dist/client/use-navigation-pending.d.ts.map +0 -1
  735. package/dist/client/use-params.d.ts.map +0 -1
  736. package/dist/plugins/cache-transform.d.ts +0 -36
  737. package/dist/plugins/cache-transform.d.ts.map +0 -1
  738. package/dist/plugins/dev-error-overlay.d.ts +0 -60
  739. package/dist/plugins/dev-error-overlay.d.ts.map +0 -1
  740. package/dist/plugins/dev-logs.d.ts.map +0 -1
  741. package/dist/plugins/dynamic-transform.d.ts +0 -72
  742. package/dist/plugins/dynamic-transform.d.ts.map +0 -1
  743. package/dist/plugins/server-action-exports.d.ts +0 -26
  744. package/dist/plugins/server-action-exports.d.ts.map +0 -1
  745. package/dist/routing/status-file-lint.d.ts +0 -33
  746. package/dist/routing/status-file-lint.d.ts.map +0 -1
  747. package/dist/search-params/analyze.d.ts +0 -54
  748. package/dist/search-params/analyze.d.ts.map +0 -1
  749. package/dist/search-params/builtin-codecs.d.ts +0 -105
  750. package/dist/search-params/builtin-codecs.d.ts.map +0 -1
  751. package/dist/search-params/codecs.d.ts +0 -53
  752. package/dist/search-params/codecs.d.ts.map +0 -1
  753. package/dist/search-params/create.d.ts +0 -106
  754. package/dist/search-params/create.d.ts.map +0 -1
  755. package/dist/server/dev-fetch-instrumentation.d.ts +0 -22
  756. package/dist/server/dev-fetch-instrumentation.d.ts.map +0 -1
  757. package/dist/server/dev-logger.d.ts.map +0 -1
  758. package/dist/server/dev-span-processor.d.ts.map +0 -1
  759. package/dist/server/dev-warnings.d.ts.map +0 -1
  760. package/dist/server/manifest-status-resolver.d.ts +0 -58
  761. package/dist/server/manifest-status-resolver.d.ts.map +0 -1
  762. package/dist/server/prerender.d.ts +0 -77
  763. package/dist/server/prerender.d.ts.map +0 -1
  764. package/dist/utils/directive-parser.d.ts +0 -70
  765. package/dist/utils/directive-parser.d.ts.map +0 -1
  766. package/src/cache/register-cached-function.ts +0 -103
  767. package/src/client/browser-entry.ts +0 -678
  768. package/src/client/link-status-provider.tsx +0 -30
  769. package/src/client/segment-merger.ts +0 -339
  770. package/src/client/transition-root.tsx +0 -166
  771. package/src/client/use-navigation-pending.ts +0 -38
  772. package/src/plugins/cache-transform.ts +0 -199
  773. package/src/plugins/dev-error-overlay.ts +0 -230
  774. package/src/plugins/dynamic-transform.ts +0 -161
  775. package/src/plugins/server-action-exports.ts +0 -220
  776. package/src/routing/status-file-lint.ts +0 -112
  777. package/src/search-params/analyze.ts +0 -192
  778. package/src/search-params/builtin-codecs.ts +0 -228
  779. package/src/search-params/create.ts +0 -321
  780. package/src/server/dev-fetch-instrumentation.ts +0 -96
  781. package/src/server/dev-span-processor.ts +0 -78
  782. package/src/server/manifest-status-resolver.ts +0 -215
  783. package/src/server/prerender.ts +0 -139
  784. package/src/utils/directive-parser.ts +0 -529
  785. /package/src/{server/dev-logger.ts → dev-tools/logger.ts} +0 -0
@@ -0,0 +1,506 @@
1
+ /**
2
+ * Dev error page — self-contained HTML error page for dev server 500s.
3
+ *
4
+ * Generates a styled, self-contained HTML page when the RSC pipeline fails
5
+ * and the Vite error overlay can't fire (e.g., first page load before HMR
6
+ * WebSocket connects, RSC entry module crash, early pipeline errors).
7
+ *
8
+ * This is NOT a replacement for Vite's error overlay — it's the fallback
9
+ * for when the overlay's transport (WebSocket) isn't available yet.
10
+ *
11
+ * Dev-only: this module is only imported by dev-server.ts (apply: 'serve').
12
+ * It is never included in production builds.
13
+ *
14
+ * Design doc: 21-dev-server.md §"Error Overlay"
15
+ */
16
+
17
+ import { extractComponentStack, parseFirstAppFrame, type ErrorPhase } from './overlay.js';
18
+ import { classifyStack } from './stack-classifier.js';
19
+ import { escapeHtml } from '../server/utils/escape-html.js';
20
+
21
+ // ─── Phase Labels ───────────────────────────────────────────────────────────
22
+
23
+ const PHASE_LABELS: Record<ErrorPhase, string> = {
24
+ 'module-transform': 'Module Transform',
25
+ 'proxy': 'Proxy',
26
+ 'middleware': 'Middleware',
27
+ 'access': 'Access Check',
28
+ 'render': 'RSC Render',
29
+ 'handler': 'Route Handler',
30
+ };
31
+
32
+ const PHASE_HINTS: Record<ErrorPhase, string> = {
33
+ 'module-transform':
34
+ 'This error occurred while Vite was transforming a module. Check for syntax errors or missing imports.',
35
+ 'proxy': 'This error occurred in proxy.ts. Check your proxy configuration.',
36
+ 'middleware':
37
+ 'This error occurred in a middleware.ts file. Check the middleware function for unhandled exceptions.',
38
+ 'access': 'This error occurred in an access.ts file. Check your access control logic.',
39
+ 'render':
40
+ 'This error occurred while rendering a server component. Check the component for runtime errors.',
41
+ 'handler': 'This error occurred in a route handler (route.ts). Check the handler function.',
42
+ };
43
+
44
+ // ─── Source Context ─────────────────────────────────────────────────────────
45
+
46
+ /**
47
+ * Try to read a few lines of source code around the error location.
48
+ * Returns null if the file can't be read (e.g., virtual modules).
49
+ */
50
+ function readSourceContext(
51
+ filePath: string,
52
+ line: number,
53
+ contextLines = 3
54
+ ): { lines: Array<{ num: number; text: string; highlight: boolean }>; startLine: number } | null {
55
+ try {
56
+ const { readFileSync } = require('node:fs');
57
+ const content = readFileSync(filePath, 'utf-8');
58
+ const allLines = content.split('\n');
59
+
60
+ const start = Math.max(0, line - 1 - contextLines);
61
+ const end = Math.min(allLines.length, line + contextLines);
62
+
63
+ return {
64
+ startLine: start + 1,
65
+ lines: allLines.slice(start, end).map((text: string, i: number) => ({
66
+ num: start + 1 + i,
67
+ text,
68
+ highlight: start + 1 + i === line,
69
+ })),
70
+ };
71
+ } catch (e) {
72
+ console.debug('[timber] source context extraction failed:', e instanceof Error ? e.message : e);
73
+ return null;
74
+ }
75
+ }
76
+
77
+ // HTML escaping provided by server/utils/escape-html.ts
78
+ const esc = escapeHtml;
79
+
80
+ /**
81
+ * Escape a JSON string for safe embedding in an HTML `<script>` block.
82
+ *
83
+ * `JSON.stringify` does not escape `</script>`, so error text containing
84
+ * that sequence breaks out of the script block — an XSS vector.
85
+ * We replace all `<` with `\u003c` which is valid in JSON strings and
86
+ * prevents the HTML parser from seeing a closing `</script>` tag.
87
+ *
88
+ * Security: TIM-788
89
+ */
90
+ function escJsonForScript(json: string): string {
91
+ return json.replace(/</g, '\\u003c');
92
+ }
93
+
94
+ // ─── HMR Options ────────────────────────────────────────────────────────────
95
+
96
+ /**
97
+ * HMR connection options for the dev error page auto-reload WebSocket.
98
+ * Derived from Vite's resolved server config so the error page can
99
+ * connect to the correct HMR endpoint (TIM-789).
100
+ */
101
+ export interface DevErrorHmrOptions {
102
+ protocol?: string;
103
+ host?: string;
104
+ port?: number;
105
+ path?: string;
106
+ token?: string;
107
+ }
108
+
109
+ /**
110
+ * Build a WebSocket URL from Vite HMR options.
111
+ * Mirrors the logic in Vite's client.mjs for constructing the WS connection URL.
112
+ */
113
+ function buildWsUrl(opts: DevErrorHmrOptions): string {
114
+ const protocol = opts.protocol ?? 'ws';
115
+ const host = opts.host ?? 'localhost';
116
+ const port = opts.port ? `:${opts.port}` : '';
117
+ const path = opts.path ?? '';
118
+ const token = opts.token ? `?token=${opts.token}` : '';
119
+ return `${protocol}://${host}${port}${path}${token}`;
120
+ }
121
+
122
+ /**
123
+ * Extract HMR connection options from a Vite resolved config.
124
+ * Used by the dev server to pass HMR config to the error page generator
125
+ * so the auto-reload WebSocket connects to the correct endpoint.
126
+ */
127
+ export function extractHmrOptions(config: {
128
+ server?: { hmr?: { protocol?: string; host?: string; port?: number; path?: string } | boolean };
129
+ webSocketToken?: string;
130
+ }): DevErrorHmrOptions | undefined {
131
+ const hmr = config.server?.hmr;
132
+ if (hmr === false) return undefined;
133
+ const hmrOpts = typeof hmr === 'object' ? hmr : {};
134
+ const opts: DevErrorHmrOptions = {
135
+ protocol: hmrOpts.protocol,
136
+ host: hmrOpts.host,
137
+ port: hmrOpts.port,
138
+ path: hmrOpts.path,
139
+ token: config.webSocketToken,
140
+ };
141
+ // If no HMR fields were explicitly configured, return undefined so the
142
+ // error page falls back to `'ws://' + location.host` which correctly
143
+ // includes the browser's current port (TIM-805).
144
+ if (!opts.protocol && !opts.host && !opts.port && !opts.path && !opts.token) {
145
+ return undefined;
146
+ }
147
+ return opts;
148
+ }
149
+
150
+ // ─── HTML Generation ────────────────────────────────────────────────────────
151
+
152
+ /**
153
+ * Generate a self-contained HTML error page for dev server 500 responses.
154
+ *
155
+ * The page includes:
156
+ * - Error message and phase label
157
+ * - Source code context around the first app frame (if readable)
158
+ * - Component stack (for React render errors)
159
+ * - Classified stack trace (app frames highlighted, internals collapsed)
160
+ * - Copy button for the full error
161
+ * - Dark/light mode via prefers-color-scheme
162
+ * - Auto-reconnect script that watches for Vite HMR and reloads
163
+ */
164
+ export function generateDevErrorPage(
165
+ error: Error,
166
+ phase: ErrorPhase,
167
+ projectRoot: string,
168
+ hmrOptions?: DevErrorHmrOptions
169
+ ): string {
170
+ const message = error.message || 'Unknown error';
171
+ const phaseLabel = PHASE_LABELS[phase];
172
+ const phaseHint = PHASE_HINTS[phase];
173
+ const componentStack = extractComponentStack(error);
174
+ const loc = parseFirstAppFrame(error.stack ?? '', projectRoot);
175
+ const frames = error.stack ? classifyStack(error.stack, projectRoot) : [];
176
+ const appFrames = frames.filter((f) => f.type === 'app');
177
+ const internalFrameCount = frames.filter((f) => f.type !== 'app').length;
178
+
179
+ // Try to read source code context
180
+ let sourceContext: ReturnType<typeof readSourceContext> = null;
181
+ if (loc) {
182
+ sourceContext = readSourceContext(loc.file, loc.line);
183
+ }
184
+
185
+ // Relative path for display
186
+ const relPath = loc?.file.startsWith(projectRoot)
187
+ ? loc.file.slice(projectRoot.length + 1)
188
+ : loc?.file;
189
+
190
+ return `<!DOCTYPE html>
191
+ <html lang="en">
192
+ <head>
193
+ <meta charset="utf-8">
194
+ <meta name="viewport" content="width=device-width, initial-scale=1">
195
+ <title>Error — ${esc(phaseLabel)} | timber.js</title>
196
+ <style>${CSS}</style>
197
+ </head>
198
+ <body>
199
+ <div class="container">
200
+ <header class="header">
201
+ <div class="badge">${esc(phaseLabel)} Error</div>
202
+ <h1 class="message">${esc(message)}</h1>
203
+ ${phaseHint ? `<p class="hint">${esc(phaseHint)}</p>` : ''}
204
+ </header>
205
+
206
+ ${relPath ? `<div class="location">${esc(relPath)}${loc ? `:${loc.line}:${loc.column}` : ''}</div>` : ''}
207
+
208
+ ${
209
+ sourceContext
210
+ ? `<div class="source-context">
211
+ <div class="source-header">Source</div>
212
+ <pre class="source-code"><code>${sourceContext.lines
213
+ .map(
214
+ (l) =>
215
+ `<span class="source-line${l.highlight ? ' source-line-highlight' : ''}"` +
216
+ `><span class="line-num">${l.num}</span>${esc(l.text)}</span>`
217
+ )
218
+ .join('\n')}</code></pre>
219
+ </div>`
220
+ : ''
221
+ }
222
+
223
+ ${
224
+ componentStack
225
+ ? `<div class="section">
226
+ <div class="section-header">Component Stack</div>
227
+ <pre class="component-stack">${esc(componentStack.trim())}</pre>
228
+ </div>`
229
+ : ''
230
+ }
231
+
232
+ ${
233
+ appFrames.length > 0
234
+ ? `<div class="section">
235
+ <div class="section-header">Application Frames</div>
236
+ <pre class="stack">${appFrames.map((f) => esc(f.raw)).join('\n')}</pre>
237
+ </div>`
238
+ : ''
239
+ }
240
+
241
+ ${
242
+ internalFrameCount > 0
243
+ ? `<details class="section internal-frames">
244
+ <summary class="section-header clickable">${internalFrameCount} internal frame${internalFrameCount !== 1 ? 's' : ''}</summary>
245
+ <pre class="stack dimmed">${frames
246
+ .filter((f) => f.type !== 'app')
247
+ .map((f) => esc(f.raw))
248
+ .join('\n')}</pre>
249
+ </details>`
250
+ : ''
251
+ }
252
+
253
+ <div class="actions">
254
+ <button class="btn" onclick="copyError()">Copy Error</button>
255
+ </div>
256
+
257
+ <footer class="footer">
258
+ <span class="timber-logo">🪵 timber.js</span>
259
+ <span class="footer-hint">Fix the error and save — the page will reload automatically via HMR.</span>
260
+ </footer>
261
+ </div>
262
+
263
+ <script>
264
+ function copyError() {
265
+ var text = ${escJsonForScript(
266
+ JSON.stringify(
267
+ `${phaseLabel} Error: ${message}\n\n` +
268
+ (relPath ? `File: ${relPath}${loc ? `:${loc.line}:${loc.column}` : ''}\n\n` : '') +
269
+ (componentStack ? `Component Stack:\n${componentStack.trim()}\n\n` : '') +
270
+ `Stack Trace:\n${error.stack ?? ''}`
271
+ )
272
+ )};
273
+ navigator.clipboard.writeText(text).then(function() {
274
+ var btn = document.querySelector('.btn');
275
+ if (btn) { btn.textContent = 'Copied!'; setTimeout(function() { btn.textContent = 'Copy Error'; }, 1500); }
276
+ });
277
+ }
278
+
279
+ // Auto-reload when Vite HMR reconnects.
280
+ // When the developer fixes the error and saves, Vite's module graph
281
+ // invalidates. We can't rely on the normal HMR update flow (the page
282
+ // is a static error page, not a Vite-managed module), so we connect
283
+ // to Vite's WebSocket and reload on any update event.
284
+ (function() {
285
+ try {
286
+ var wsUrl = ${hmrOptions ? escJsonForScript(JSON.stringify(buildWsUrl(hmrOptions))) : "'ws://' + location.host"};
287
+ var ws = new WebSocket(wsUrl, 'vite-hmr');
288
+ ws.addEventListener('message', function(e) {
289
+ try {
290
+ var data = JSON.parse(e.data);
291
+ if (data.type === 'full-reload' || data.type === 'update' || data.type === 'connected') {
292
+ if (data.type !== 'connected') location.reload();
293
+ }
294
+ } catch(ex) {}
295
+ });
296
+ } catch(ex) {}
297
+ })();
298
+ </script>
299
+ </body>
300
+ </html>`;
301
+ }
302
+
303
+ // ─── CSS ────────────────────────────────────────────────────────────────────
304
+
305
+ const CSS = `
306
+ :root {
307
+ --bg: #fff;
308
+ --fg: #1a1a1a;
309
+ --fg-dim: #6b7280;
310
+ --border: #e5e7eb;
311
+ --badge-bg: #fef2f2;
312
+ --badge-fg: #991b1b;
313
+ --badge-border: #fecaca;
314
+ --source-bg: #fafafa;
315
+ --highlight-bg: #fef2f2;
316
+ --highlight-border: #ef4444;
317
+ --line-num: #9ca3af;
318
+ --btn-bg: #f3f4f6;
319
+ --btn-fg: #374151;
320
+ --btn-border: #d1d5db;
321
+ --link: #2563eb;
322
+ --code-font: ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, 'Liberation Mono', monospace;
323
+ }
324
+
325
+ @media (prefers-color-scheme: dark) {
326
+ :root {
327
+ --bg: #0a0a0a;
328
+ --fg: #f5f5f5;
329
+ --fg-dim: #9ca3af;
330
+ --border: #27272a;
331
+ --badge-bg: #450a0a;
332
+ --badge-fg: #fca5a5;
333
+ --badge-border: #7f1d1d;
334
+ --source-bg: #18181b;
335
+ --highlight-bg: #450a0a;
336
+ --highlight-border: #dc2626;
337
+ --line-num: #6b7280;
338
+ --btn-bg: #27272a;
339
+ --btn-fg: #e5e7eb;
340
+ --btn-border: #3f3f46;
341
+ --link: #60a5fa;
342
+ }
343
+ }
344
+
345
+ * { margin: 0; padding: 0; box-sizing: border-box; }
346
+
347
+ body {
348
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
349
+ background: var(--bg);
350
+ color: var(--fg);
351
+ line-height: 1.6;
352
+ padding: 2rem;
353
+ }
354
+
355
+ .container {
356
+ max-width: 56rem;
357
+ margin: 0 auto;
358
+ }
359
+
360
+ .header { margin-bottom: 1.5rem; }
361
+
362
+ .badge {
363
+ display: inline-block;
364
+ font-size: 0.75rem;
365
+ font-weight: 600;
366
+ text-transform: uppercase;
367
+ letter-spacing: 0.05em;
368
+ padding: 0.25rem 0.625rem;
369
+ border-radius: 0.375rem;
370
+ background: var(--badge-bg);
371
+ color: var(--badge-fg);
372
+ border: 1px solid var(--badge-border);
373
+ margin-bottom: 0.75rem;
374
+ }
375
+
376
+ .message {
377
+ font-size: 1.375rem;
378
+ font-weight: 600;
379
+ line-height: 1.3;
380
+ word-break: break-word;
381
+ }
382
+
383
+ .hint {
384
+ margin-top: 0.5rem;
385
+ color: var(--fg-dim);
386
+ font-size: 0.875rem;
387
+ }
388
+
389
+ .location {
390
+ font-family: var(--code-font);
391
+ font-size: 0.8125rem;
392
+ color: var(--link);
393
+ margin-bottom: 1rem;
394
+ padding: 0.5rem 0.75rem;
395
+ background: var(--source-bg);
396
+ border-radius: 0.375rem;
397
+ border: 1px solid var(--border);
398
+ }
399
+
400
+ .source-context {
401
+ margin-bottom: 1rem;
402
+ border: 1px solid var(--border);
403
+ border-radius: 0.5rem;
404
+ overflow: hidden;
405
+ }
406
+
407
+ .source-header, .section-header {
408
+ font-size: 0.75rem;
409
+ font-weight: 600;
410
+ text-transform: uppercase;
411
+ letter-spacing: 0.05em;
412
+ padding: 0.5rem 0.75rem;
413
+ background: var(--source-bg);
414
+ border-bottom: 1px solid var(--border);
415
+ color: var(--fg-dim);
416
+ }
417
+
418
+ .source-code {
419
+ overflow-x: auto;
420
+ font-family: var(--code-font);
421
+ font-size: 0.8125rem;
422
+ line-height: 1.7;
423
+ padding: 0;
424
+ margin: 0;
425
+ }
426
+
427
+ .source-code code {
428
+ display: block;
429
+ }
430
+
431
+ .source-line {
432
+ display: block;
433
+ padding: 0 0.75rem;
434
+ border-left: 3px solid transparent;
435
+ }
436
+
437
+ .source-line-highlight {
438
+ background: var(--highlight-bg);
439
+ border-left-color: var(--highlight-border);
440
+ }
441
+
442
+ .line-num {
443
+ display: inline-block;
444
+ width: 3rem;
445
+ text-align: right;
446
+ margin-right: 1rem;
447
+ color: var(--line-num);
448
+ user-select: none;
449
+ }
450
+
451
+ .section {
452
+ margin-bottom: 1rem;
453
+ border: 1px solid var(--border);
454
+ border-radius: 0.5rem;
455
+ overflow: hidden;
456
+ }
457
+
458
+ .clickable { cursor: pointer; }
459
+ .clickable:hover { background: var(--btn-bg); }
460
+
461
+ .component-stack, .stack {
462
+ font-family: var(--code-font);
463
+ font-size: 0.8125rem;
464
+ line-height: 1.7;
465
+ padding: 0.75rem;
466
+ overflow-x: auto;
467
+ white-space: pre;
468
+ margin: 0;
469
+ }
470
+
471
+ .dimmed { color: var(--fg-dim); }
472
+
473
+ .actions {
474
+ margin: 1.5rem 0;
475
+ }
476
+
477
+ .btn {
478
+ font-family: inherit;
479
+ font-size: 0.8125rem;
480
+ font-weight: 500;
481
+ padding: 0.5rem 1rem;
482
+ border-radius: 0.375rem;
483
+ border: 1px solid var(--btn-border);
484
+ background: var(--btn-bg);
485
+ color: var(--btn-fg);
486
+ cursor: pointer;
487
+ transition: background 0.15s;
488
+ }
489
+
490
+ .btn:hover { opacity: 0.85; }
491
+
492
+ .footer {
493
+ display: flex;
494
+ align-items: center;
495
+ gap: 0.75rem;
496
+ padding-top: 1rem;
497
+ border-top: 1px solid var(--border);
498
+ font-size: 0.75rem;
499
+ color: var(--fg-dim);
500
+ }
501
+
502
+ .timber-logo {
503
+ font-weight: 600;
504
+ white-space: nowrap;
505
+ }
506
+ `;
@@ -0,0 +1,187 @@
1
+ /**
2
+ * Dev holding server — serves a loading page while Vite initializes.
3
+ *
4
+ * When `timber dev` (or `vite dev`) starts, Vite takes several seconds
5
+ * to initialize all plugins, scan routes, and boot the RSC environment.
6
+ * During this window, the port is unbound and browsers get
7
+ * ERR_CONNECTION_REFUSED.
8
+ *
9
+ * This module creates a lightweight HTTP server that binds the port
10
+ * immediately and serves a branded holding page with auto-refresh.
11
+ * Once Vite is ready, the holding server is closed and Vite's server
12
+ * takes over the port.
13
+ *
14
+ * The holding server is started in rootSync's config() hook (the
15
+ * earliest Vite plugin lifecycle point where we know the port) and
16
+ * closed in timber-dev-server's configureServer() hook (the last
17
+ * plugin, right before Vite calls server.listen()).
18
+ *
19
+ * Browser requests (Accept: text/html) get the HTML holding page.
20
+ * API requests (Accept: application/json) get a 503 JSON response.
21
+ * All responses include Retry-After: 1.
22
+ *
23
+ * See design/21-dev-server.md, TIM-665.
24
+ */
25
+
26
+ import http from 'node:http';
27
+
28
+ // ─── Types ────────────────────────────────────────────────────────────────
29
+
30
+ export interface HoldingServer {
31
+ /**
32
+ * Start listening on the given port.
33
+ * Returns the actual bound port (useful when port is 0 for OS assignment).
34
+ */
35
+ listen(port: number): Promise<number>;
36
+
37
+ /** Gracefully close the server and stop accepting connections. */
38
+ close(): Promise<void>;
39
+ }
40
+
41
+ // ─── Holding Page HTML ────────────────────────────────────────────────────
42
+
43
+ /**
44
+ * Minimal self-contained HTML holding page.
45
+ *
46
+ * Matches the timber.js docs site theme:
47
+ * - Light mode: warm stone/grain background, timber/bark text
48
+ * - Dark mode: stone-900 background, stone-200 text
49
+ * - 🪵 timber.js branding
50
+ *
51
+ * Uses meta-refresh (1s) for auto-reload — works without JavaScript.
52
+ * Inline CSS only, no external dependencies.
53
+ */
54
+ const HOLDING_PAGE_HTML = [
55
+ '<!DOCTYPE html>',
56
+ '<html lang="en">',
57
+ '<head>',
58
+ ' <meta charset="utf-8">',
59
+ ' <meta name="viewport" content="width=device-width, initial-scale=1">',
60
+ ' <meta http-equiv="refresh" content="2">',
61
+ ' <title>timber — starting...</title>',
62
+ ' <style>',
63
+ ' *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }',
64
+ ' body {',
65
+ ' font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;',
66
+ ' background: #fafaf9;',
67
+ ' color: #44403c;',
68
+ ' display: flex;',
69
+ ' align-items: center;',
70
+ ' justify-content: center;',
71
+ ' min-height: 100vh;',
72
+ ' -webkit-font-smoothing: antialiased;',
73
+ ' }',
74
+ ' @media (prefers-color-scheme: dark) {',
75
+ ' body { background: #1c1917; color: #e7e5e4; }',
76
+ ' .message { color: #a8a29e; }',
77
+ ' .spinner { border-color: #57534e; border-top-color: #a1887f; }',
78
+ ' .logo { color: #e7e5e4; }',
79
+ ' }',
80
+ ' .container { text-align: center; padding: 2rem; }',
81
+ ' .logo {',
82
+ ' font-size: 1.5rem;',
83
+ ' font-weight: 700;',
84
+ ' letter-spacing: -0.02em;',
85
+ ' color: #5c3d2e;',
86
+ ' margin-bottom: 1.5rem;',
87
+ ' }',
88
+ ' .message {',
89
+ ' font-size: 0.95rem;',
90
+ ' color: #78716c;',
91
+ ' margin-bottom: 2rem;',
92
+ ' }',
93
+ ' .spinner {',
94
+ ' width: 24px;',
95
+ ' height: 24px;',
96
+ ' border: 2.5px solid #d7ccc8;',
97
+ ' border-top-color: #6d4c41;',
98
+ ' border-radius: 50%;',
99
+ ' animation: spin 0.8s linear infinite;',
100
+ ' margin: 0 auto;',
101
+ ' }',
102
+ ' @keyframes spin { to { transform: rotate(360deg); } }',
103
+ ' </style>',
104
+ '</head>',
105
+ '<body>',
106
+ ' <div class="container">',
107
+ ' <div class="logo">\u{1FAB5} timber.js</div>',
108
+ ' <p class="message">Dev server starting&hellip;</p>',
109
+ ' <div class="spinner"></div>',
110
+ ' </div>',
111
+ '</body>',
112
+ '</html>',
113
+ ].join('\n');
114
+
115
+ // ─── Factory ──────────────────────────────────────────────────────────────
116
+
117
+ /**
118
+ * Create a holding HTTP server that serves a loading page during startup.
119
+ *
120
+ * Usage (inside Vite plugin):
121
+ * ```ts
122
+ * // In config() hook — earliest point where port is known.
123
+ * // Use bindWithBump() to honor the default-3000 + auto-bump policy
124
+ * // (see ../server/port-resolution.ts and TIM-842).
125
+ * const holding = createHoldingServer();
126
+ * await bindWithBump((p) => holding.listen(p), { startPort: 3000, autoBump: true });
127
+ *
128
+ * // In last plugin's configureServer() — wrap listen for seamless handoff
129
+ * const originalListen = server.listen.bind(server);
130
+ * server.listen = async (...args) => {
131
+ * await holding.close();
132
+ * return originalListen(...args);
133
+ * };
134
+ * ```
135
+ */
136
+ export function createHoldingServer(): HoldingServer {
137
+ const server = http.createServer((req, res) => {
138
+ const accept = req.headers.accept ?? '';
139
+
140
+ // API requests: JSON 503
141
+ if (accept.includes('application/json') && !accept.includes('text/html')) {
142
+ res.writeHead(503, {
143
+ 'Content-Type': 'application/json; charset=utf-8',
144
+ 'Retry-After': '1',
145
+ 'Cache-Control': 'no-store',
146
+ });
147
+ res.end(
148
+ JSON.stringify({
149
+ error: 'Service Unavailable',
150
+ message: 'timber dev server is starting — please retry shortly',
151
+ })
152
+ );
153
+ return;
154
+ }
155
+
156
+ // Browser and other requests: HTML holding page
157
+ res.writeHead(503, {
158
+ 'Content-Type': 'text/html; charset=utf-8',
159
+ 'Retry-After': '1',
160
+ 'Cache-Control': 'no-store',
161
+ });
162
+ res.end(HOLDING_PAGE_HTML);
163
+ });
164
+
165
+ return {
166
+ listen(port: number): Promise<number> {
167
+ return new Promise((resolve, reject) => {
168
+ server.once('error', reject);
169
+ server.listen(port, () => {
170
+ server.removeListener('error', reject);
171
+ const addr = server.address();
172
+ const boundPort = typeof addr === 'object' && addr ? addr.port : port;
173
+ resolve(boundPort);
174
+ });
175
+ });
176
+ },
177
+
178
+ close(): Promise<void> {
179
+ return new Promise((resolve, reject) => {
180
+ server.close((err) => {
181
+ if (err) reject(err);
182
+ else resolve();
183
+ });
184
+ });
185
+ },
186
+ };
187
+ }