@timber-js/app 0.2.0-alpha.12 → 0.2.0-alpha.120

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 (758) hide show
  1. package/dist/_chunks/actions-Cw-7NfJJ.js +1101 -0
  2. package/dist/_chunks/actions-Cw-7NfJJ.js.map +1 -0
  3. package/dist/_chunks/build-output-helper-DhxiT18k.js +61 -0
  4. package/dist/_chunks/build-output-helper-DhxiT18k.js.map +1 -0
  5. package/dist/_chunks/cli-schema-sync-XV0I47Gj.js +2 -0
  6. package/dist/_chunks/cli-schema-sync-q2wB0DyJ.js +358 -0
  7. package/dist/_chunks/cli-schema-sync-q2wB0DyJ.js.map +1 -0
  8. package/dist/_chunks/codec-registry-V7ARyeLN.js +21 -0
  9. package/dist/_chunks/codec-registry-V7ARyeLN.js.map +1 -0
  10. package/dist/_chunks/define-8zQ8Vm7x.js +195 -0
  11. package/dist/_chunks/define-8zQ8Vm7x.js.map +1 -0
  12. package/dist/_chunks/define-zQX6e1tN.js +124 -0
  13. package/dist/_chunks/define-zQX6e1tN.js.map +1 -0
  14. package/dist/_chunks/format-CR6v1pWE.js +14 -0
  15. package/dist/_chunks/format-CR6v1pWE.js.map +1 -0
  16. package/dist/_chunks/handler-store-iqnt2ghN.js +54 -0
  17. package/dist/_chunks/handler-store-iqnt2ghN.js.map +1 -0
  18. package/dist/_chunks/logger-DDmK5skc.js +291 -0
  19. package/dist/_chunks/logger-DDmK5skc.js.map +1 -0
  20. package/dist/_chunks/merge-search-params-CwxJzBLS.js +41 -0
  21. package/dist/_chunks/merge-search-params-CwxJzBLS.js.map +1 -0
  22. package/dist/_chunks/navigation-root-DKsJ5Di7.js +96 -0
  23. package/dist/_chunks/navigation-root-DKsJ5Di7.js.map +1 -0
  24. package/dist/_chunks/registry-Dp_hJL4s.js +20 -0
  25. package/dist/_chunks/registry-Dp_hJL4s.js.map +1 -0
  26. package/dist/_chunks/resolve-schema-23Mc8aLi.js +65 -0
  27. package/dist/_chunks/resolve-schema-23Mc8aLi.js.map +1 -0
  28. package/dist/_chunks/router-ref-sektkr-t.js +28 -0
  29. package/dist/_chunks/router-ref-sektkr-t.js.map +1 -0
  30. package/dist/_chunks/scanner-DmfoB7iK.js +336 -0
  31. package/dist/_chunks/scanner-DmfoB7iK.js.map +1 -0
  32. package/dist/_chunks/schema-bridge-eL5vQDSA.js +86 -0
  33. package/dist/_chunks/schema-bridge-eL5vQDSA.js.map +1 -0
  34. package/dist/_chunks/segment-classify-CnfLLvir.js +137 -0
  35. package/dist/_chunks/segment-classify-CnfLLvir.js.map +1 -0
  36. package/dist/_chunks/segment-context-Bg0pFbLT.js +34 -0
  37. package/dist/_chunks/segment-context-Bg0pFbLT.js.map +1 -0
  38. package/dist/_chunks/{ssr-data-MjmprTmO.js → ssr-data-BO5OvEvg.js} +1 -1
  39. package/dist/_chunks/ssr-data-BO5OvEvg.js.map +1 -0
  40. package/dist/_chunks/stale-reload-BCPRG0Cv.js +64 -0
  41. package/dist/_chunks/stale-reload-BCPRG0Cv.js.map +1 -0
  42. package/dist/_chunks/tracing-DvKLzCFa.js +329 -0
  43. package/dist/_chunks/tracing-DvKLzCFa.js.map +1 -0
  44. package/dist/_chunks/{use-query-states-D5KaffOK.js → use-query-states-D9SBlAfp.js} +7 -20
  45. package/dist/_chunks/use-query-states-D9SBlAfp.js.map +1 -0
  46. package/dist/_chunks/use-segment-params-CskiK-59.js +185 -0
  47. package/dist/_chunks/use-segment-params-CskiK-59.js.map +1 -0
  48. package/dist/_chunks/validation-Bm3Je-09.js +84 -0
  49. package/dist/_chunks/validation-Bm3Je-09.js.map +1 -0
  50. package/dist/_chunks/walkers-DgOXkTts.js +609 -0
  51. package/dist/_chunks/walkers-DgOXkTts.js.map +1 -0
  52. package/dist/_chunks/{format-DviM89f0.js → warnings-B30wpfaS.js} +6 -45
  53. package/dist/_chunks/warnings-B30wpfaS.js.map +1 -0
  54. package/dist/adapters/build-output-helper.d.ts +28 -0
  55. package/dist/adapters/build-output-helper.d.ts.map +1 -0
  56. package/dist/adapters/cloudflare-dev.d.ts +109 -0
  57. package/dist/adapters/cloudflare-dev.d.ts.map +1 -0
  58. package/dist/adapters/cloudflare-dev.js +73 -0
  59. package/dist/adapters/cloudflare-dev.js.map +1 -0
  60. package/dist/adapters/cloudflare-kv-cache.d.ts +64 -0
  61. package/dist/adapters/cloudflare-kv-cache.d.ts.map +1 -0
  62. package/dist/adapters/cloudflare-kv-cache.js +95 -0
  63. package/dist/adapters/cloudflare-kv-cache.js.map +1 -0
  64. package/dist/adapters/cloudflare.d.ts +148 -12
  65. package/dist/adapters/cloudflare.d.ts.map +1 -1
  66. package/dist/adapters/cloudflare.js +142 -38
  67. package/dist/adapters/cloudflare.js.map +1 -1
  68. package/dist/adapters/compress-module.d.ts.map +1 -1
  69. package/dist/adapters/nitro.d.ts +17 -1
  70. package/dist/adapters/nitro.d.ts.map +1 -1
  71. package/dist/adapters/nitro.js +143 -45
  72. package/dist/adapters/nitro.js.map +1 -1
  73. package/dist/adapters/shared.d.ts +16 -0
  74. package/dist/adapters/shared.d.ts.map +1 -0
  75. package/dist/cache/cache-api.d.ts +24 -0
  76. package/dist/cache/cache-api.d.ts.map +1 -0
  77. package/dist/cache/handler-store.d.ts +31 -0
  78. package/dist/cache/handler-store.d.ts.map +1 -0
  79. package/dist/cache/index.d.ts +23 -7
  80. package/dist/cache/index.d.ts.map +1 -1
  81. package/dist/cache/index.js +151 -81
  82. package/dist/cache/index.js.map +1 -1
  83. package/dist/cache/singleflight.d.ts +18 -1
  84. package/dist/cache/singleflight.d.ts.map +1 -1
  85. package/dist/cache/sizeof.d.ts +22 -0
  86. package/dist/cache/sizeof.d.ts.map +1 -0
  87. package/dist/cache/timber-cache.d.ts +1 -1
  88. package/dist/cache/timber-cache.d.ts.map +1 -1
  89. package/dist/cli-schema-sync.d.ts +37 -0
  90. package/dist/cli-schema-sync.d.ts.map +1 -0
  91. package/dist/cli.d.ts +14 -2
  92. package/dist/cli.d.ts.map +1 -1
  93. package/dist/cli.js +42 -6
  94. package/dist/cli.js.map +1 -1
  95. package/dist/client/browser-dev.d.ts +34 -1
  96. package/dist/client/browser-dev.d.ts.map +1 -1
  97. package/dist/client/browser-entry/action-dispatch.d.ts +17 -0
  98. package/dist/client/browser-entry/action-dispatch.d.ts.map +1 -0
  99. package/dist/client/browser-entry/hmr.d.ts +21 -0
  100. package/dist/client/browser-entry/hmr.d.ts.map +1 -0
  101. package/dist/client/browser-entry/hydrate.d.ts +46 -0
  102. package/dist/client/browser-entry/hydrate.d.ts.map +1 -0
  103. package/dist/client/browser-entry/index.d.ts +30 -0
  104. package/dist/client/browser-entry/index.d.ts.map +1 -0
  105. package/dist/client/browser-entry/post-hydration.d.ts +26 -0
  106. package/dist/client/browser-entry/post-hydration.d.ts.map +1 -0
  107. package/dist/client/browser-entry/router-init.d.ts +23 -0
  108. package/dist/client/browser-entry/router-init.d.ts.map +1 -0
  109. package/dist/client/browser-entry/rsc-stream.d.ts +24 -0
  110. package/dist/client/browser-entry/rsc-stream.d.ts.map +1 -0
  111. package/dist/client/browser-entry/scroll.d.ts +19 -0
  112. package/dist/client/browser-entry/scroll.d.ts.map +1 -0
  113. package/dist/client/error-boundary.d.ts +12 -5
  114. package/dist/client/error-boundary.d.ts.map +1 -1
  115. package/dist/client/error-boundary.js +29 -6
  116. package/dist/client/error-boundary.js.map +1 -1
  117. package/dist/client/error-reconstituter.d.ts +54 -0
  118. package/dist/client/error-reconstituter.d.ts.map +1 -0
  119. package/dist/client/form.d.ts +16 -27
  120. package/dist/client/form.d.ts.map +1 -1
  121. package/dist/client/history.d.ts +19 -4
  122. package/dist/client/history.d.ts.map +1 -1
  123. package/dist/client/index.d.ts +9 -24
  124. package/dist/client/index.d.ts.map +1 -1
  125. package/dist/client/index.js +172 -1100
  126. package/dist/client/index.js.map +1 -1
  127. package/dist/client/internal.d.ts +19 -0
  128. package/dist/client/internal.d.ts.map +1 -0
  129. package/dist/client/internal.js +964 -0
  130. package/dist/client/internal.js.map +1 -0
  131. package/dist/client/link-pending-store.d.ts +63 -0
  132. package/dist/client/link-pending-store.d.ts.map +1 -0
  133. package/dist/client/link.d.ts +62 -55
  134. package/dist/client/link.d.ts.map +1 -1
  135. package/dist/client/nav-link-store.d.ts +36 -0
  136. package/dist/client/nav-link-store.d.ts.map +1 -0
  137. package/dist/client/navigation-api-types.d.ts +90 -0
  138. package/dist/client/navigation-api-types.d.ts.map +1 -0
  139. package/dist/client/navigation-api.d.ts +115 -0
  140. package/dist/client/navigation-api.d.ts.map +1 -0
  141. package/dist/client/navigation-context.d.ts +13 -2
  142. package/dist/client/navigation-context.d.ts.map +1 -1
  143. package/dist/client/{transition-root.d.ts → navigation-root.d.ts} +42 -8
  144. package/dist/client/navigation-root.d.ts.map +1 -0
  145. package/dist/client/nuqs-adapter.d.ts.map +1 -1
  146. package/dist/client/router-ref.d.ts +1 -1
  147. package/dist/client/router.d.ts +70 -4
  148. package/dist/client/router.d.ts.map +1 -1
  149. package/dist/client/rsc-fetch.d.ts +38 -3
  150. package/dist/client/rsc-fetch.d.ts.map +1 -1
  151. package/dist/client/segment-cache.d.ts +1 -1
  152. package/dist/client/segment-cache.d.ts.map +1 -1
  153. package/dist/client/segment-outlet.d.ts +63 -0
  154. package/dist/client/segment-outlet.d.ts.map +1 -0
  155. package/dist/client/ssr-data.d.ts +13 -4
  156. package/dist/client/ssr-data.d.ts.map +1 -1
  157. package/dist/client/stale-reload.d.ts +15 -0
  158. package/dist/client/stale-reload.d.ts.map +1 -1
  159. package/dist/client/state.d.ts +1 -1
  160. package/dist/client/top-loader.d.ts +5 -5
  161. package/dist/client/top-loader.d.ts.map +1 -1
  162. package/dist/client/use-cookie.d.ts +12 -0
  163. package/dist/client/use-cookie.d.ts.map +1 -1
  164. package/dist/client/use-link-status.d.ts +5 -5
  165. package/dist/client/use-link-status.d.ts.map +1 -1
  166. package/dist/client/{use-navigation-pending.d.ts → use-pending-navigation.d.ts} +4 -4
  167. package/dist/client/use-pending-navigation.d.ts.map +1 -0
  168. package/dist/client/use-query-states.d.ts +1 -1
  169. package/dist/client/use-query-states.d.ts.map +1 -1
  170. package/dist/client/use-router.d.ts +1 -1
  171. package/dist/client/{use-params.d.ts → use-segment-params.d.ts} +8 -6
  172. package/dist/client/use-segment-params.d.ts.map +1 -0
  173. package/dist/codec.d.ts +51 -0
  174. package/dist/codec.d.ts.map +1 -0
  175. package/dist/codec.js +46 -0
  176. package/dist/codec.js.map +1 -0
  177. package/dist/config-types.d.ts +294 -0
  178. package/dist/config-types.d.ts.map +1 -0
  179. package/dist/config-validation.d.ts +51 -0
  180. package/dist/config-validation.d.ts.map +1 -0
  181. package/dist/content/index.d.ts +1 -10
  182. package/dist/content/index.d.ts.map +1 -1
  183. package/dist/content/index.js +0 -2
  184. package/dist/cookies/define-cookie.d.ts +58 -25
  185. package/dist/cookies/define-cookie.d.ts.map +1 -1
  186. package/dist/cookies/index.d.ts +2 -1
  187. package/dist/cookies/index.d.ts.map +1 -1
  188. package/dist/cookies/index.js +251 -36
  189. package/dist/cookies/index.js.map +1 -1
  190. package/dist/cookies/json-cookie.d.ts +64 -0
  191. package/dist/cookies/json-cookie.d.ts.map +1 -0
  192. package/dist/cookies/validation.d.ts +46 -0
  193. package/dist/cookies/validation.d.ts.map +1 -0
  194. package/dist/dev-tools/404-page.d.ts +46 -0
  195. package/dist/dev-tools/404-page.d.ts.map +1 -0
  196. package/dist/dev-tools/browser-logs.d.ts +84 -0
  197. package/dist/dev-tools/browser-logs.d.ts.map +1 -0
  198. package/dist/dev-tools/error-page.d.ts +58 -0
  199. package/dist/dev-tools/error-page.d.ts.map +1 -0
  200. package/dist/dev-tools/holding-server.d.ts +54 -0
  201. package/dist/dev-tools/holding-server.d.ts.map +1 -0
  202. package/dist/dev-tools/index.d.ts +31 -0
  203. package/dist/dev-tools/index.d.ts.map +1 -0
  204. package/dist/{server/dev-span-processor.d.ts → dev-tools/instrumentation.d.ts} +26 -6
  205. package/dist/dev-tools/instrumentation.d.ts.map +1 -0
  206. package/dist/{server/dev-logger.d.ts → dev-tools/logger.d.ts} +1 -1
  207. package/dist/dev-tools/logger.d.ts.map +1 -0
  208. package/dist/{plugins/dev-logs.d.ts → dev-tools/logs.d.ts} +2 -2
  209. package/dist/dev-tools/logs.d.ts.map +1 -0
  210. package/dist/dev-tools/overlay.d.ts +91 -0
  211. package/dist/dev-tools/overlay.d.ts.map +1 -0
  212. package/dist/dev-tools/stack-classifier.d.ts +34 -0
  213. package/dist/dev-tools/stack-classifier.d.ts.map +1 -0
  214. package/dist/dev-tools/terminal.d.ts +28 -0
  215. package/dist/dev-tools/terminal.d.ts.map +1 -0
  216. package/dist/{server/dev-warnings.d.ts → dev-tools/warnings.d.ts} +2 -22
  217. package/dist/dev-tools/warnings.d.ts.map +1 -0
  218. package/dist/fonts/ast.d.ts +98 -6
  219. package/dist/fonts/ast.d.ts.map +1 -1
  220. package/dist/fonts/bundle.d.ts +48 -0
  221. package/dist/fonts/bundle.d.ts.map +1 -0
  222. package/dist/fonts/dev-middleware.d.ts +22 -0
  223. package/dist/fonts/dev-middleware.d.ts.map +1 -0
  224. package/dist/fonts/local.d.ts +1 -1
  225. package/dist/fonts/pipeline.d.ts +167 -0
  226. package/dist/fonts/pipeline.d.ts.map +1 -0
  227. package/dist/fonts/transform.d.ts +78 -0
  228. package/dist/fonts/transform.d.ts.map +1 -0
  229. package/dist/fonts/types.d.ts +45 -1
  230. package/dist/fonts/types.d.ts.map +1 -1
  231. package/dist/fonts/virtual-modules.d.ts +94 -0
  232. package/dist/fonts/virtual-modules.d.ts.map +1 -0
  233. package/dist/index.d.ts +46 -190
  234. package/dist/index.d.ts.map +1 -1
  235. package/dist/index.js +4799 -12730
  236. package/dist/index.js.map +1 -1
  237. package/dist/params/codec-registry.d.ts +26 -0
  238. package/dist/params/codec-registry.d.ts.map +1 -0
  239. package/dist/params/define-schema.d.ts +53 -0
  240. package/dist/params/define-schema.d.ts.map +1 -0
  241. package/dist/params/index.d.ts +5 -0
  242. package/dist/params/index.d.ts.map +1 -0
  243. package/dist/params/index.js +34 -0
  244. package/dist/params/index.js.map +1 -0
  245. package/dist/params/resolve-schema.d.ts +34 -0
  246. package/dist/params/resolve-schema.d.ts.map +1 -0
  247. package/dist/plugin-context.d.ts +107 -0
  248. package/dist/plugin-context.d.ts.map +1 -0
  249. package/dist/plugins/adapter-build.d.ts +1 -1
  250. package/dist/plugins/adapter-build.d.ts.map +1 -1
  251. package/dist/plugins/build-manifest.d.ts +2 -2
  252. package/dist/plugins/build-manifest.d.ts.map +1 -1
  253. package/dist/plugins/build-report.d.ts +9 -7
  254. package/dist/plugins/build-report.d.ts.map +1 -1
  255. package/dist/plugins/client-chunks.d.ts +32 -0
  256. package/dist/plugins/client-chunks.d.ts.map +1 -0
  257. package/dist/plugins/content.d.ts +1 -1
  258. package/dist/plugins/content.d.ts.map +1 -1
  259. package/dist/plugins/dev-server.d.ts +1 -1
  260. package/dist/plugins/dev-server.d.ts.map +1 -1
  261. package/dist/plugins/entries.d.ts +1 -1
  262. package/dist/plugins/entries.d.ts.map +1 -1
  263. package/dist/plugins/fonts.d.ts +17 -73
  264. package/dist/plugins/fonts.d.ts.map +1 -1
  265. package/dist/plugins/mdx.d.ts +1 -1
  266. package/dist/plugins/mdx.d.ts.map +1 -1
  267. package/dist/plugins/routing.d.ts +1 -1
  268. package/dist/plugins/routing.d.ts.map +1 -1
  269. package/dist/plugins/server-bundle.d.ts.map +1 -1
  270. package/dist/plugins/shims.d.ts +6 -5
  271. package/dist/plugins/shims.d.ts.map +1 -1
  272. package/dist/plugins/static-build.d.ts +5 -26
  273. package/dist/plugins/static-build.d.ts.map +1 -1
  274. package/dist/routing/codegen-shared.d.ts +63 -0
  275. package/dist/routing/codegen-shared.d.ts.map +1 -0
  276. package/dist/routing/codegen-types.d.ts +60 -0
  277. package/dist/routing/codegen-types.d.ts.map +1 -0
  278. package/dist/routing/codegen.d.ts +7 -2
  279. package/dist/routing/codegen.d.ts.map +1 -1
  280. package/dist/routing/convention-lint.d.ts +41 -0
  281. package/dist/routing/convention-lint.d.ts.map +1 -0
  282. package/dist/routing/index.d.ts +5 -1
  283. package/dist/routing/index.d.ts.map +1 -1
  284. package/dist/routing/index.js +4 -2
  285. package/dist/routing/link-codegen.d.ts +90 -0
  286. package/dist/routing/link-codegen.d.ts.map +1 -0
  287. package/dist/routing/scanner.d.ts +1 -10
  288. package/dist/routing/scanner.d.ts.map +1 -1
  289. package/dist/routing/segment-classify.d.ts +75 -0
  290. package/dist/routing/segment-classify.d.ts.map +1 -0
  291. package/dist/routing/segment-codegen.d.ts +38 -0
  292. package/dist/routing/segment-codegen.d.ts.map +1 -0
  293. package/dist/routing/types.d.ts +77 -25
  294. package/dist/routing/types.d.ts.map +1 -1
  295. package/dist/routing/walkers.d.ts +51 -0
  296. package/dist/routing/walkers.d.ts.map +1 -0
  297. package/dist/rsc-runtime/rsc.d.ts +1 -1
  298. package/dist/rsc-runtime/rsc.d.ts.map +1 -1
  299. package/dist/rsc-runtime/ssr.d.ts +12 -0
  300. package/dist/rsc-runtime/ssr.d.ts.map +1 -1
  301. package/dist/schema-bridge.d.ts +76 -0
  302. package/dist/schema-bridge.d.ts.map +1 -0
  303. package/dist/search-params/define.d.ts +157 -0
  304. package/dist/search-params/define.d.ts.map +1 -0
  305. package/dist/search-params/index.d.ts +4 -7
  306. package/dist/search-params/index.d.ts.map +1 -1
  307. package/dist/search-params/index.js +34 -441
  308. package/dist/search-params/index.js.map +1 -1
  309. package/dist/search-params/registry.d.ts +2 -2
  310. package/dist/search-params/registry.d.ts.map +1 -1
  311. package/dist/search-params/wrappers.d.ts +53 -0
  312. package/dist/search-params/wrappers.d.ts.map +1 -0
  313. package/dist/segment-params/define.d.ts +95 -0
  314. package/dist/segment-params/define.d.ts.map +1 -0
  315. package/dist/segment-params/index.d.ts +3 -0
  316. package/dist/segment-params/index.d.ts.map +1 -0
  317. package/dist/segment-params/index.js +2 -0
  318. package/dist/server/access-gate.d.ts +8 -3
  319. package/dist/server/access-gate.d.ts.map +1 -1
  320. package/dist/server/action-client.d.ts +41 -6
  321. package/dist/server/action-client.d.ts.map +1 -1
  322. package/dist/server/action-encryption.d.ts +76 -0
  323. package/dist/server/action-encryption.d.ts.map +1 -0
  324. package/dist/server/action-handler.d.ts +35 -1
  325. package/dist/server/action-handler.d.ts.map +1 -1
  326. package/dist/server/actions.d.ts +3 -6
  327. package/dist/server/actions.d.ts.map +1 -1
  328. package/dist/server/als-registry.d.ts +53 -5
  329. package/dist/server/als-registry.d.ts.map +1 -1
  330. package/dist/server/asset-headers.d.ts +1 -15
  331. package/dist/server/asset-headers.d.ts.map +1 -1
  332. package/dist/server/build-manifest.d.ts +2 -2
  333. package/dist/server/build-manifest.d.ts.map +1 -1
  334. package/dist/server/coalesce-tick.d.ts +40 -0
  335. package/dist/server/coalesce-tick.d.ts.map +1 -0
  336. package/dist/server/cookie-context.d.ts +170 -0
  337. package/dist/server/cookie-context.d.ts.map +1 -0
  338. package/dist/server/cookie-parsing.d.ts +51 -0
  339. package/dist/server/cookie-parsing.d.ts.map +1 -0
  340. package/dist/server/debug.d.ts +1 -1
  341. package/dist/server/default-logger.d.ts +22 -0
  342. package/dist/server/default-logger.d.ts.map +1 -0
  343. package/dist/server/deny-boundary.d.ts +90 -0
  344. package/dist/server/deny-boundary.d.ts.map +1 -0
  345. package/dist/server/deny-renderer.d.ts.map +1 -1
  346. package/dist/server/dev-source-map.d.ts +22 -0
  347. package/dist/server/dev-source-map.d.ts.map +1 -0
  348. package/dist/server/early-hints-sender.d.ts.map +1 -1
  349. package/dist/server/early-hints.d.ts +13 -5
  350. package/dist/server/early-hints.d.ts.map +1 -1
  351. package/dist/server/error-boundary-wrapper.d.ts +7 -1
  352. package/dist/server/error-boundary-wrapper.d.ts.map +1 -1
  353. package/dist/server/fallback-error.d.ts +12 -7
  354. package/dist/server/fallback-error.d.ts.map +1 -1
  355. package/dist/server/flight-injection-state.d.ts +66 -0
  356. package/dist/server/flight-injection-state.d.ts.map +1 -0
  357. package/dist/server/flight-scripts.d.ts +42 -0
  358. package/dist/server/flight-scripts.d.ts.map +1 -0
  359. package/dist/server/flush.d.ts.map +1 -1
  360. package/dist/server/form-data.d.ts +29 -0
  361. package/dist/server/form-data.d.ts.map +1 -1
  362. package/dist/server/html-injector-core.d.ts +213 -0
  363. package/dist/server/html-injector-core.d.ts.map +1 -0
  364. package/dist/server/html-injectors.d.ts +81 -41
  365. package/dist/server/html-injectors.d.ts.map +1 -1
  366. package/dist/server/index.d.ts +10 -46
  367. package/dist/server/index.d.ts.map +1 -1
  368. package/dist/server/index.js +155 -2905
  369. package/dist/server/index.js.map +1 -1
  370. package/dist/server/internal.d.ts +48 -0
  371. package/dist/server/internal.d.ts.map +1 -0
  372. package/dist/server/internal.js +2947 -0
  373. package/dist/server/internal.js.map +1 -0
  374. package/dist/server/logger.d.ts +39 -7
  375. package/dist/server/logger.d.ts.map +1 -1
  376. package/dist/server/middleware-runner.d.ts +36 -4
  377. package/dist/server/middleware-runner.d.ts.map +1 -1
  378. package/dist/server/node-stream-transforms.d.ts +112 -0
  379. package/dist/server/node-stream-transforms.d.ts.map +1 -0
  380. package/dist/server/param-coercion.d.ts +54 -0
  381. package/dist/server/param-coercion.d.ts.map +1 -0
  382. package/dist/server/pipeline-helpers.d.ts +95 -0
  383. package/dist/server/pipeline-helpers.d.ts.map +1 -0
  384. package/dist/server/pipeline-interception.d.ts +1 -1
  385. package/dist/server/pipeline-interception.d.ts.map +1 -1
  386. package/dist/server/pipeline-metadata.d.ts +6 -0
  387. package/dist/server/pipeline-metadata.d.ts.map +1 -1
  388. package/dist/server/pipeline-outcome.d.ts +49 -0
  389. package/dist/server/pipeline-outcome.d.ts.map +1 -0
  390. package/dist/server/pipeline-phases.d.ts +52 -0
  391. package/dist/server/pipeline-phases.d.ts.map +1 -0
  392. package/dist/server/pipeline.d.ts +118 -23
  393. package/dist/server/pipeline.d.ts.map +1 -1
  394. package/dist/server/port-resolution.d.ts +117 -0
  395. package/dist/server/port-resolution.d.ts.map +1 -0
  396. package/dist/server/primitives.d.ts +69 -18
  397. package/dist/server/primitives.d.ts.map +1 -1
  398. package/dist/server/render-timeout.d.ts +51 -0
  399. package/dist/server/render-timeout.d.ts.map +1 -0
  400. package/dist/server/request-context.d.ts +62 -107
  401. package/dist/server/request-context.d.ts.map +1 -1
  402. package/dist/server/route-element-builder.d.ts +27 -1
  403. package/dist/server/route-element-builder.d.ts.map +1 -1
  404. package/dist/server/route-handler.d.ts.map +1 -1
  405. package/dist/server/route-matcher.d.ts +21 -34
  406. package/dist/server/route-matcher.d.ts.map +1 -1
  407. package/dist/server/rsc-entry/action-middleware-runner.d.ts +66 -0
  408. package/dist/server/rsc-entry/action-middleware-runner.d.ts.map +1 -0
  409. package/dist/server/rsc-entry/api-handler.d.ts +2 -2
  410. package/dist/server/rsc-entry/api-handler.d.ts.map +1 -1
  411. package/dist/server/rsc-entry/error-renderer.d.ts +26 -13
  412. package/dist/server/rsc-entry/error-renderer.d.ts.map +1 -1
  413. package/dist/server/rsc-entry/helpers.d.ts +49 -6
  414. package/dist/server/rsc-entry/helpers.d.ts.map +1 -1
  415. package/dist/server/rsc-entry/index.d.ts +19 -8
  416. package/dist/server/rsc-entry/index.d.ts.map +1 -1
  417. package/dist/server/rsc-entry/render-route.d.ts +50 -0
  418. package/dist/server/rsc-entry/render-route.d.ts.map +1 -0
  419. package/dist/server/rsc-entry/rsc-payload.d.ts +3 -3
  420. package/dist/server/rsc-entry/rsc-payload.d.ts.map +1 -1
  421. package/dist/server/rsc-entry/rsc-stream.d.ts +17 -1
  422. package/dist/server/rsc-entry/rsc-stream.d.ts.map +1 -1
  423. package/dist/server/rsc-entry/ssr-bridge.d.ts +1 -1
  424. package/dist/server/rsc-entry/ssr-bridge.d.ts.map +1 -1
  425. package/dist/server/rsc-entry/ssr-renderer.d.ts +19 -4
  426. package/dist/server/rsc-entry/ssr-renderer.d.ts.map +1 -1
  427. package/dist/server/rsc-entry/wrap-action-dispatch.d.ts +119 -0
  428. package/dist/server/rsc-entry/wrap-action-dispatch.d.ts.map +1 -0
  429. package/dist/server/safe-load.d.ts +46 -0
  430. package/dist/server/safe-load.d.ts.map +1 -0
  431. package/dist/server/sensitive-fields.d.ts +74 -0
  432. package/dist/server/sensitive-fields.d.ts.map +1 -0
  433. package/dist/server/sitemap-generator.d.ts +129 -0
  434. package/dist/server/sitemap-generator.d.ts.map +1 -0
  435. package/dist/server/sitemap-handler.d.ts +22 -0
  436. package/dist/server/sitemap-handler.d.ts.map +1 -0
  437. package/dist/server/slot-resolver.d.ts +1 -1
  438. package/dist/server/slot-resolver.d.ts.map +1 -1
  439. package/dist/server/ssr-entry.d.ts +30 -0
  440. package/dist/server/ssr-entry.d.ts.map +1 -1
  441. package/dist/server/ssr-render.d.ts +39 -21
  442. package/dist/server/ssr-render.d.ts.map +1 -1
  443. package/dist/server/ssr-wrappers.d.ts +50 -0
  444. package/dist/server/ssr-wrappers.d.ts.map +1 -0
  445. package/dist/server/state-tree-diff.d.ts.map +1 -1
  446. package/dist/server/status-code-resolver.d.ts +16 -11
  447. package/dist/server/status-code-resolver.d.ts.map +1 -1
  448. package/dist/server/stream-utils.d.ts +36 -0
  449. package/dist/server/stream-utils.d.ts.map +1 -0
  450. package/dist/server/tracing.d.ts +5 -5
  451. package/dist/server/tracing.d.ts.map +1 -1
  452. package/dist/server/tree-builder.d.ts +62 -30
  453. package/dist/server/tree-builder.d.ts.map +1 -1
  454. package/dist/server/tree-match.d.ts +41 -0
  455. package/dist/server/tree-match.d.ts.map +1 -0
  456. package/dist/server/types.d.ts +49 -4
  457. package/dist/server/types.d.ts.map +1 -1
  458. package/dist/server/utils/escape-html.d.ts +14 -0
  459. package/dist/server/utils/escape-html.d.ts.map +1 -0
  460. package/dist/server/version-skew.d.ts +61 -0
  461. package/dist/server/version-skew.d.ts.map +1 -0
  462. package/dist/shared/merge-search-params.d.ts +22 -0
  463. package/dist/shared/merge-search-params.d.ts.map +1 -0
  464. package/dist/shims/font-google.d.ts +1 -1
  465. package/dist/shims/font-google.d.ts.map +1 -1
  466. package/dist/shims/font-google.js +42 -0
  467. package/dist/shims/font-google.js.map +1 -0
  468. package/dist/shims/font-local.d.ts +26 -0
  469. package/dist/shims/font-local.d.ts.map +1 -0
  470. package/dist/shims/font-local.js +20 -0
  471. package/dist/shims/font-local.js.map +1 -0
  472. package/dist/shims/headers.d.ts +2 -1
  473. package/dist/shims/headers.d.ts.map +1 -1
  474. package/dist/shims/navigation-client.d.ts +3 -1
  475. package/dist/shims/navigation-client.d.ts.map +1 -1
  476. package/dist/shims/navigation.d.ts +11 -5
  477. package/dist/shims/navigation.d.ts.map +1 -1
  478. package/dist/utils/state-machine.d.ts +80 -0
  479. package/dist/utils/state-machine.d.ts.map +1 -0
  480. package/package.json +56 -16
  481. package/src/adapters/build-output-helper.ts +77 -0
  482. package/src/adapters/cloudflare-dev.ts +177 -0
  483. package/src/adapters/cloudflare-kv-cache.ts +142 -0
  484. package/src/adapters/cloudflare.ts +350 -76
  485. package/src/adapters/compress-module.ts +24 -4
  486. package/src/adapters/nitro.ts +142 -59
  487. package/src/adapters/shared.ts +40 -0
  488. package/src/adapters/wrangler.d.ts +7 -0
  489. package/src/cache/cache-api.ts +38 -0
  490. package/src/cache/handler-store.ts +68 -0
  491. package/src/cache/index.ts +81 -18
  492. package/src/cache/singleflight.ts +62 -4
  493. package/src/cache/sizeof.ts +33 -0
  494. package/src/cache/timber-cache.ts +25 -20
  495. package/src/cli-schema-sync.ts +207 -0
  496. package/src/cli.ts +65 -8
  497. package/src/client/browser-dev.ts +153 -1
  498. package/src/client/browser-entry/action-dispatch.ts +126 -0
  499. package/src/client/browser-entry/hmr.ts +81 -0
  500. package/src/client/browser-entry/hydrate.ts +145 -0
  501. package/src/client/browser-entry/index.ts +149 -0
  502. package/src/client/browser-entry/post-hydration.ts +119 -0
  503. package/src/client/browser-entry/router-init.ts +193 -0
  504. package/src/client/browser-entry/rsc-stream.ts +157 -0
  505. package/src/client/browser-entry/scroll.ts +27 -0
  506. package/src/client/error-boundary.tsx +99 -22
  507. package/src/client/error-reconstituter.tsx +65 -0
  508. package/src/client/form.tsx +31 -32
  509. package/src/client/history.ts +26 -4
  510. package/src/client/index.ts +69 -44
  511. package/src/client/internal.ts +58 -0
  512. package/src/client/link-pending-store.ts +111 -0
  513. package/src/client/link.tsx +366 -113
  514. package/src/client/nav-link-store.ts +47 -0
  515. package/src/client/navigation-api-types.ts +112 -0
  516. package/src/client/navigation-api.ts +332 -0
  517. package/src/client/navigation-context.ts +31 -6
  518. package/src/client/navigation-root.tsx +342 -0
  519. package/src/client/nuqs-adapter.tsx +16 -3
  520. package/src/client/router-ref.ts +1 -1
  521. package/src/client/router.ts +300 -73
  522. package/src/client/rsc-fetch.ts +112 -8
  523. package/src/client/segment-cache.ts +1 -1
  524. package/src/client/segment-outlet.tsx +86 -0
  525. package/src/client/ssr-data.ts +13 -5
  526. package/src/client/stale-reload.ts +72 -3
  527. package/src/client/state.ts +2 -2
  528. package/src/client/top-loader.tsx +18 -6
  529. package/src/client/use-cookie.ts +31 -2
  530. package/src/client/use-link-status.ts +7 -7
  531. package/src/client/{use-navigation-pending.ts → use-pending-navigation.ts} +6 -6
  532. package/src/client/use-query-states.ts +9 -3
  533. package/src/client/use-router.ts +1 -1
  534. package/src/client/{use-params.ts → use-segment-params.ts} +8 -6
  535. package/src/codec.ts +97 -0
  536. package/src/config-types.ts +292 -0
  537. package/src/config-validation.ts +303 -0
  538. package/src/content/index.ts +5 -13
  539. package/src/cookies/define-cookie.ts +233 -53
  540. package/src/cookies/index.ts +12 -1
  541. package/src/cookies/json-cookie.ts +105 -0
  542. package/src/cookies/validation.ts +134 -0
  543. package/src/dev-tools/404-page.ts +387 -0
  544. package/src/dev-tools/browser-logs.ts +291 -0
  545. package/src/dev-tools/error-page.ts +506 -0
  546. package/src/dev-tools/holding-server.ts +187 -0
  547. package/src/dev-tools/index.ts +90 -0
  548. package/src/dev-tools/instrumentation.ts +176 -0
  549. package/src/{plugins/dev-logs.ts → dev-tools/logs.ts} +9 -5
  550. package/src/dev-tools/overlay.ts +469 -0
  551. package/src/dev-tools/stack-classifier.ts +75 -0
  552. package/src/dev-tools/terminal.ts +183 -0
  553. package/src/{server/dev-warnings.ts → dev-tools/warnings.ts} +5 -50
  554. package/src/fonts/ast.ts +525 -16
  555. package/src/fonts/bundle.ts +142 -0
  556. package/src/fonts/dev-middleware.ts +74 -0
  557. package/src/fonts/local.ts +1 -1
  558. package/src/fonts/pipeline.ts +314 -0
  559. package/src/fonts/transform.ts +317 -0
  560. package/src/fonts/types.ts +50 -1
  561. package/src/fonts/virtual-modules.ts +233 -0
  562. package/src/index.ts +409 -357
  563. package/src/params/codec-registry.ts +34 -0
  564. package/src/params/define-schema.ts +73 -0
  565. package/src/params/index.ts +11 -0
  566. package/src/params/resolve-schema.ts +88 -0
  567. package/src/plugin-context.ts +240 -0
  568. package/src/plugins/adapter-build.ts +12 -4
  569. package/src/plugins/build-manifest.ts +13 -2
  570. package/src/plugins/build-report.ts +16 -25
  571. package/src/plugins/client-chunks.ts +65 -0
  572. package/src/plugins/content.ts +1 -1
  573. package/src/plugins/dev-server.ts +175 -35
  574. package/src/plugins/entries.ts +111 -9
  575. package/src/plugins/fonts.ts +157 -654
  576. package/src/plugins/mdx.ts +47 -10
  577. package/src/plugins/routing.ts +374 -45
  578. package/src/plugins/server-bundle.ts +32 -1
  579. package/src/plugins/shims.ts +136 -35
  580. package/src/plugins/static-build.ts +15 -89
  581. package/src/routing/codegen-shared.ts +109 -0
  582. package/src/routing/codegen-types.ts +61 -0
  583. package/src/routing/codegen.ts +269 -179
  584. package/src/routing/convention-lint.ts +357 -0
  585. package/src/routing/index.ts +5 -1
  586. package/src/routing/interception.ts +1 -1
  587. package/src/routing/link-codegen.ts +308 -0
  588. package/src/routing/scanner.ts +107 -110
  589. package/src/routing/segment-classify.ts +188 -0
  590. package/src/routing/segment-codegen.ts +98 -0
  591. package/src/routing/types.ts +78 -25
  592. package/src/routing/walkers.ts +90 -0
  593. package/src/rsc-runtime/rsc.ts +2 -0
  594. package/src/rsc-runtime/ssr.ts +50 -0
  595. package/src/rsc-runtime/vendor-types.d.ts +7 -0
  596. package/src/{search-params/codecs.ts → schema-bridge.ts} +57 -20
  597. package/src/search-params/define.ts +538 -0
  598. package/src/search-params/index.ts +14 -20
  599. package/src/search-params/registry.ts +2 -2
  600. package/src/search-params/wrappers.ts +92 -0
  601. package/src/segment-params/define.ts +336 -0
  602. package/src/segment-params/index.ts +9 -0
  603. package/src/server/access-gate.tsx +76 -34
  604. package/src/server/action-client.ts +88 -15
  605. package/src/server/action-encryption.ts +144 -0
  606. package/src/server/action-handler.ts +112 -14
  607. package/src/server/actions.ts +10 -9
  608. package/src/server/als-registry.ts +55 -7
  609. package/src/server/asset-headers.ts +8 -34
  610. package/src/server/build-manifest.ts +10 -4
  611. package/src/server/coalesce-tick.ts +75 -0
  612. package/src/server/compress.ts +25 -7
  613. package/src/server/cookie-context.ts +468 -0
  614. package/src/server/cookie-parsing.ts +135 -0
  615. package/src/server/debug.ts +1 -1
  616. package/src/server/default-logger.ts +99 -0
  617. package/src/server/deny-boundary.ts +218 -0
  618. package/src/server/deny-renderer.ts +31 -50
  619. package/src/server/dev-source-map.ts +31 -0
  620. package/src/server/early-hints-sender.ts +3 -2
  621. package/src/server/early-hints.ts +36 -15
  622. package/src/server/error-boundary-wrapper.ts +74 -22
  623. package/src/server/fallback-error.ts +74 -102
  624. package/src/server/flight-injection-state.ts +113 -0
  625. package/src/server/flight-scripts.ts +62 -0
  626. package/src/server/flush.ts +2 -1
  627. package/src/server/form-data.ts +76 -0
  628. package/src/server/html-injector-core.ts +417 -0
  629. package/src/server/html-injectors.ts +235 -223
  630. package/src/server/index.ts +29 -183
  631. package/src/server/internal.ts +176 -0
  632. package/src/server/logger.ts +67 -36
  633. package/src/server/middleware-runner.ts +75 -4
  634. package/src/server/node-stream-transforms.ts +361 -0
  635. package/src/server/param-coercion.ts +206 -0
  636. package/src/server/pipeline-helpers.ts +204 -0
  637. package/src/server/pipeline-interception.ts +17 -16
  638. package/src/server/pipeline-metadata.ts +13 -0
  639. package/src/server/pipeline-outcome.ts +176 -0
  640. package/src/server/pipeline-phases.ts +460 -0
  641. package/src/server/pipeline.ts +154 -394
  642. package/src/server/port-resolution.ts +215 -0
  643. package/src/server/primitives.ts +111 -28
  644. package/src/server/render-timeout.ts +108 -0
  645. package/src/server/request-context.ts +168 -333
  646. package/src/server/route-element-builder.ts +309 -195
  647. package/src/server/route-handler.ts +24 -4
  648. package/src/server/route-matcher.ts +50 -231
  649. package/src/server/rsc-entry/action-middleware-runner.ts +167 -0
  650. package/src/server/rsc-entry/api-handler.ts +16 -17
  651. package/src/server/rsc-entry/error-renderer.ts +305 -89
  652. package/src/server/rsc-entry/helpers.ts +137 -12
  653. package/src/server/rsc-entry/index.ts +316 -352
  654. package/src/server/rsc-entry/render-route.ts +307 -0
  655. package/src/server/rsc-entry/rsc-payload.ts +65 -18
  656. package/src/server/rsc-entry/rsc-stream.ts +85 -13
  657. package/src/server/rsc-entry/ssr-bridge.ts +14 -5
  658. package/src/server/rsc-entry/ssr-renderer.ts +187 -38
  659. package/src/server/rsc-entry/wrap-action-dispatch.ts +449 -0
  660. package/src/server/safe-load.ts +60 -0
  661. package/src/server/sensitive-fields.ts +230 -0
  662. package/src/server/sitemap-generator.ts +338 -0
  663. package/src/server/sitemap-handler.ts +126 -0
  664. package/src/server/slot-resolver.ts +228 -246
  665. package/src/server/ssr-entry.ts +229 -32
  666. package/src/server/ssr-render.ts +289 -67
  667. package/src/server/ssr-wrappers.tsx +139 -0
  668. package/src/server/state-tree-diff.ts +4 -1
  669. package/src/server/status-code-resolver.ts +112 -128
  670. package/src/server/stream-utils.ts +213 -0
  671. package/src/server/tracing.ts +21 -10
  672. package/src/server/tree-builder.ts +202 -90
  673. package/src/server/tree-match.ts +198 -0
  674. package/src/server/types.ts +55 -6
  675. package/src/server/utils/escape-html.ts +20 -0
  676. package/src/server/version-skew.ts +104 -0
  677. package/src/shared/merge-search-params.ts +55 -0
  678. package/src/shims/font-google.ts +1 -1
  679. package/src/shims/font-local.ts +34 -0
  680. package/src/shims/headers.ts +5 -1
  681. package/src/shims/navigation-client.ts +4 -3
  682. package/src/shims/navigation.ts +14 -7
  683. package/src/utils/state-machine.ts +111 -0
  684. package/dist/_chunks/als-registry-B7DbZ2hS.js +0 -41
  685. package/dist/_chunks/als-registry-B7DbZ2hS.js.map +0 -1
  686. package/dist/_chunks/debug-gwlJkDuf.js +0 -108
  687. package/dist/_chunks/debug-gwlJkDuf.js.map +0 -1
  688. package/dist/_chunks/format-DviM89f0.js.map +0 -1
  689. package/dist/_chunks/interception-BOoWmLUA.js +0 -676
  690. package/dist/_chunks/interception-BOoWmLUA.js.map +0 -1
  691. package/dist/_chunks/request-context-DIkVh_jG.js +0 -330
  692. package/dist/_chunks/request-context-DIkVh_jG.js.map +0 -1
  693. package/dist/_chunks/ssr-data-MjmprTmO.js.map +0 -1
  694. package/dist/_chunks/tracing-CemImE6h.js +0 -187
  695. package/dist/_chunks/tracing-CemImE6h.js.map +0 -1
  696. package/dist/_chunks/use-cookie-DX-l1_5E.js +0 -91
  697. package/dist/_chunks/use-cookie-DX-l1_5E.js.map +0 -1
  698. package/dist/_chunks/use-query-states-D5KaffOK.js.map +0 -1
  699. package/dist/cache/register-cached-function.d.ts +0 -17
  700. package/dist/cache/register-cached-function.d.ts.map +0 -1
  701. package/dist/client/browser-entry.d.ts +0 -21
  702. package/dist/client/browser-entry.d.ts.map +0 -1
  703. package/dist/client/link-status-provider.d.ts +0 -11
  704. package/dist/client/link-status-provider.d.ts.map +0 -1
  705. package/dist/client/transition-root.d.ts.map +0 -1
  706. package/dist/client/use-navigation-pending.d.ts.map +0 -1
  707. package/dist/client/use-params.d.ts.map +0 -1
  708. package/dist/plugins/cache-transform.d.ts +0 -36
  709. package/dist/plugins/cache-transform.d.ts.map +0 -1
  710. package/dist/plugins/dev-error-overlay.d.ts +0 -60
  711. package/dist/plugins/dev-error-overlay.d.ts.map +0 -1
  712. package/dist/plugins/dev-logs.d.ts.map +0 -1
  713. package/dist/plugins/dynamic-transform.d.ts +0 -72
  714. package/dist/plugins/dynamic-transform.d.ts.map +0 -1
  715. package/dist/plugins/server-action-exports.d.ts +0 -26
  716. package/dist/plugins/server-action-exports.d.ts.map +0 -1
  717. package/dist/routing/status-file-lint.d.ts +0 -33
  718. package/dist/routing/status-file-lint.d.ts.map +0 -1
  719. package/dist/search-params/analyze.d.ts +0 -54
  720. package/dist/search-params/analyze.d.ts.map +0 -1
  721. package/dist/search-params/builtin-codecs.d.ts +0 -105
  722. package/dist/search-params/builtin-codecs.d.ts.map +0 -1
  723. package/dist/search-params/codecs.d.ts +0 -53
  724. package/dist/search-params/codecs.d.ts.map +0 -1
  725. package/dist/search-params/create.d.ts +0 -106
  726. package/dist/search-params/create.d.ts.map +0 -1
  727. package/dist/server/dev-fetch-instrumentation.d.ts +0 -22
  728. package/dist/server/dev-fetch-instrumentation.d.ts.map +0 -1
  729. package/dist/server/dev-logger.d.ts.map +0 -1
  730. package/dist/server/dev-span-processor.d.ts.map +0 -1
  731. package/dist/server/dev-warnings.d.ts.map +0 -1
  732. package/dist/server/manifest-status-resolver.d.ts +0 -58
  733. package/dist/server/manifest-status-resolver.d.ts.map +0 -1
  734. package/dist/server/prerender.d.ts +0 -77
  735. package/dist/server/prerender.d.ts.map +0 -1
  736. package/dist/server/response-cache.d.ts +0 -54
  737. package/dist/server/response-cache.d.ts.map +0 -1
  738. package/dist/utils/directive-parser.d.ts +0 -70
  739. package/dist/utils/directive-parser.d.ts.map +0 -1
  740. package/src/cache/register-cached-function.ts +0 -103
  741. package/src/client/browser-entry.ts +0 -678
  742. package/src/client/link-status-provider.tsx +0 -30
  743. package/src/client/transition-root.tsx +0 -166
  744. package/src/plugins/cache-transform.ts +0 -199
  745. package/src/plugins/dev-error-overlay.ts +0 -230
  746. package/src/plugins/dynamic-transform.ts +0 -161
  747. package/src/plugins/server-action-exports.ts +0 -220
  748. package/src/routing/status-file-lint.ts +0 -112
  749. package/src/search-params/analyze.ts +0 -192
  750. package/src/search-params/builtin-codecs.ts +0 -228
  751. package/src/search-params/create.ts +0 -321
  752. package/src/server/dev-fetch-instrumentation.ts +0 -96
  753. package/src/server/dev-span-processor.ts +0 -78
  754. package/src/server/manifest-status-resolver.ts +0 -215
  755. package/src/server/prerender.ts +0 -139
  756. package/src/server/response-cache.ts +0 -410
  757. package/src/utils/directive-parser.ts +0 -529
  758. /package/src/{server/dev-logger.ts → dev-tools/logger.ts} +0 -0
@@ -0,0 +1,358 @@
1
+ import { t as scanRoutes } from "./scanner-DmfoB7iK.js";
2
+ import { join } from "node:path";
3
+ import { createRequire } from "node:module";
4
+ import { existsSync, readFileSync, writeFileSync } from "node:fs";
5
+ import { performance } from "node:perf_hooks";
6
+ //#region src/utils/startup-timer.ts
7
+ /**
8
+ * Startup timer — records named phases with their durations.
9
+ *
10
+ * Used by the plugin system to instrument cold start and report a
11
+ * timing breakdown in dev mode. Zero overhead in production (disabled).
12
+ *
13
+ * See design/18-build-system.md, TIM-155.
14
+ */
15
+ /**
16
+ * Create a startup timer that records phase durations.
17
+ */
18
+ function createStartupTimer() {
19
+ const pending = /* @__PURE__ */ new Map();
20
+ const phases = [];
21
+ return {
22
+ start(phase) {
23
+ pending.set(phase, performance.now());
24
+ },
25
+ end(phase) {
26
+ const startMs = pending.get(phase);
27
+ if (startMs === void 0) return 0;
28
+ pending.delete(phase);
29
+ const durationMs = performance.now() - startMs;
30
+ phases.push({
31
+ name: phase,
32
+ startMs,
33
+ durationMs
34
+ });
35
+ return durationMs;
36
+ },
37
+ getPhases() {
38
+ return [...phases].sort((a, b) => a.startMs - b.startMs);
39
+ },
40
+ totalMs() {
41
+ if (phases.length === 0) return 0;
42
+ const sorted = this.getPhases();
43
+ const first = sorted[0];
44
+ const last = sorted[sorted.length - 1];
45
+ return last.startMs + last.durationMs - first.startMs;
46
+ },
47
+ formatSummary() {
48
+ const sorted = this.getPhases();
49
+ if (sorted.length === 0) return "No phases recorded.";
50
+ const lines = sorted.map((p) => {
51
+ const ms = p.durationMs.toFixed(1);
52
+ return ` ${p.name.padEnd(30)} ${ms.padStart(8)}ms`;
53
+ });
54
+ const total = this.totalMs().toFixed(1);
55
+ lines.push(` ${"total".padEnd(30)} ${total.padStart(8)}ms`);
56
+ return ["[timber] startup timing:", ...lines].join("\n");
57
+ }
58
+ };
59
+ }
60
+ /**
61
+ * No-op timer for production builds — all methods are empty.
62
+ */
63
+ function createNoopTimer() {
64
+ return {
65
+ start() {},
66
+ end() {
67
+ return 0;
68
+ },
69
+ getPhases() {
70
+ return [];
71
+ },
72
+ totalMs() {
73
+ return 0;
74
+ },
75
+ formatSummary() {
76
+ return "";
77
+ }
78
+ };
79
+ }
80
+ //#endregion
81
+ //#region src/plugin-context.ts
82
+ /**
83
+ * Plugin context — internal types and helpers for timber sub-plugins.
84
+ *
85
+ * These are NOT part of the user-facing API. They are consumed by
86
+ * sub-plugins (routing, entries, shims, etc.) via relative imports.
87
+ * The root entry point (index.ts) does not re-export them.
88
+ *
89
+ * Design doc: 18-build-system.md §"Shared Plugin Context"
90
+ */
91
+ /**
92
+ * Resolve `clientJavascript` into a fully resolved config.
93
+ */
94
+ function resolveClientJavascript(config) {
95
+ if (config.clientJavascript !== void 0) {
96
+ if (typeof config.clientJavascript === "boolean") return {
97
+ disabled: !config.clientJavascript,
98
+ enableHMRInDev: !config.clientJavascript
99
+ };
100
+ return {
101
+ disabled: config.clientJavascript.disabled,
102
+ enableHMRInDev: config.clientJavascript.enableHMRInDev ?? config.clientJavascript.disabled
103
+ };
104
+ }
105
+ return {
106
+ disabled: false,
107
+ enableHMRInDev: false
108
+ };
109
+ }
110
+ /**
111
+ * Resolve the app directory. Checks (in order):
112
+ * 1. Explicit `configAppDir` from timber.config.ts
113
+ * 2. `<root>/app`
114
+ * 3. `<root>/src/app`
115
+ *
116
+ * Throws if none exist.
117
+ */
118
+ function resolveAppDir(root, configAppDir) {
119
+ if (configAppDir) {
120
+ const explicit = join(root, configAppDir);
121
+ if (!existsSync(explicit)) throw new Error(`[timber] Configured appDir "${configAppDir}" does not exist at ${explicit}`);
122
+ return explicit;
123
+ }
124
+ const rootApp = join(root, "app");
125
+ if (existsSync(rootApp)) return rootApp;
126
+ const srcApp = join(root, "src", "app");
127
+ if (existsSync(srcApp)) return srcApp;
128
+ throw new Error(`[timber] Could not find app directory. Expected "app/" or "src/app/" in ${root}. You can set appDir in timber.config.ts to specify a custom location.`);
129
+ }
130
+ function createPluginContext(config, root) {
131
+ const projectRoot = root ?? process.cwd();
132
+ const resolvedConfig = { ...config };
133
+ return {
134
+ config: resolvedConfig,
135
+ clientJavascript: resolveClientJavascript(resolvedConfig),
136
+ routeTree: null,
137
+ appDir: join(projectRoot, "app"),
138
+ root: projectRoot,
139
+ dev: false,
140
+ buildManifest: null,
141
+ deploymentId: null,
142
+ timer: createStartupTimer(),
143
+ holdingServer: null,
144
+ buildDir: resolveBuildDir(projectRoot, resolvedConfig.buildDir)
145
+ };
146
+ }
147
+ /** Default build output directory (relative to root). */
148
+ var DEFAULT_BUILD_DIR = join(".timber", "dist");
149
+ /**
150
+ * Resolve the build output directory.
151
+ *
152
+ * Priority:
153
+ * 1. Explicit `timberBuildDir` from timber.config.ts
154
+ * 2. Explicit `viteBuildOutDir` from Vite's build.outDir (if not the default 'dist')
155
+ * 3. Default: `.timber/dist`
156
+ *
157
+ * Returns an absolute path.
158
+ */
159
+ function resolveBuildDir(root, timberBuildDir, viteBuildOutDir) {
160
+ if (timberBuildDir) return join(root, timberBuildDir);
161
+ if (viteBuildOutDir && viteBuildOutDir !== "dist") return join(root, viteBuildOutDir);
162
+ return join(root, DEFAULT_BUILD_DIR);
163
+ }
164
+ /**
165
+ * Load timber.config.ts (or .js, .mjs) from the project root.
166
+ * Returns the config object or null if no config file is found.
167
+ *
168
+ * Uses require() which works for ESM modules on Node 22.12+.
169
+ * This keeps timber() synchronous — no async config loading needed.
170
+ */
171
+ function loadTimberConfigFile(root) {
172
+ const configNames = [
173
+ "timber.config.ts",
174
+ "timber.config.js",
175
+ "timber.config.mjs"
176
+ ];
177
+ const req = createRequire(join(root, "package.json"));
178
+ for (const name of configNames) {
179
+ const configPath = join(root, name);
180
+ if (existsSync(configPath)) {
181
+ const mod = req(configPath);
182
+ return mod.default ?? mod;
183
+ }
184
+ }
185
+ return null;
186
+ }
187
+ /**
188
+ * Detect config keys set in both inline (vite.config.ts) and file (timber.config.ts)
189
+ * and warn the user. The `output` key is excluded because it defaults to 'server'
190
+ * in createPluginContext and would always appear as an inline key.
191
+ *
192
+ * Returns the list of conflicting key names (for testing).
193
+ */
194
+ function warnConfigConflicts(inline, fileConfig) {
195
+ const conflicts = [];
196
+ for (const key of Object.keys(fileConfig)) if (key in inline && inline[key] !== void 0) conflicts.push(key);
197
+ if (conflicts.length > 0) console.warn(`[timber] Config conflict: ${conflicts.map((k) => `"${k}"`).join(", ")} set in both vite.config.ts (inline) and timber.config.ts. Move all config to timber.config.ts to avoid confusion. The inline value from vite.config.ts will be used.`);
198
+ return conflicts;
199
+ }
200
+ /**
201
+ * Merge file-based config into ctx.config. Inline config (already in ctx.config)
202
+ * takes precedence — file config only fills in missing fields.
203
+ */
204
+ function mergeFileConfig(ctx, fileConfig) {
205
+ const inline = ctx.config;
206
+ warnConfigConflicts(inline, fileConfig);
207
+ ctx.config = {
208
+ ...fileConfig,
209
+ ...inline,
210
+ ...fileConfig.limits && inline.limits ? { limits: {
211
+ ...fileConfig.limits,
212
+ ...inline.limits
213
+ } } : {},
214
+ ...fileConfig.dev && inline.dev ? { dev: {
215
+ ...fileConfig.dev,
216
+ ...inline.dev
217
+ } } : {},
218
+ ...fileConfig.mdx && inline.mdx ? { mdx: {
219
+ ...fileConfig.mdx,
220
+ ...inline.mdx
221
+ } } : {}
222
+ };
223
+ }
224
+ //#endregion
225
+ //#region src/cli-schema-sync.ts
226
+ /**
227
+ * `timber schema sync` — scan filesystem for dynamic segments and append
228
+ * missing entries to app/schema.ts with `codec.string` defaults.
229
+ *
230
+ * Only adds, never removes or modifies existing entries.
231
+ *
232
+ * Design doc: design/41-global-params.md §Auto-Scaffolding
233
+ */
234
+ /**
235
+ * Collect all unique bracket-keyed dynamic segment names from the route tree.
236
+ * Returns entries like '[artistSlug]', '[...slug]', '[[...topic]]'.
237
+ */
238
+ function collectDynamicSegments(appDir) {
239
+ const tree = scanRoutes(appDir);
240
+ const segments = /* @__PURE__ */ new Set();
241
+ walkSegments(tree.root, segments);
242
+ return [...segments].sort();
243
+ }
244
+ function walkSegments(node, segments) {
245
+ if (node.paramName) segments.add(node.segmentName);
246
+ for (const child of node.children) walkSegments(child, segments);
247
+ for (const slot of Object.values(node.slots)) walkSegments(slot, segments);
248
+ }
249
+ /**
250
+ * Parse existing bracket keys from an app/schema.ts file.
251
+ * Uses regex to find keys in segmentParams: { '[key]': ... } blocks.
252
+ */
253
+ function parseExistingSchemaKeys(content) {
254
+ const keys = [];
255
+ const re = /['"](\[{1,2}(?:\.{3})?\w+\]{1,2})['"]\s*:/g;
256
+ let m;
257
+ while ((m = re.exec(content)) !== null) keys.push(m[1]);
258
+ return keys;
259
+ }
260
+ /** Schema file extensions to check. */
261
+ var SCHEMA_EXTENSIONS = [
262
+ ".ts",
263
+ ".tsx",
264
+ ".js",
265
+ ".jsx"
266
+ ];
267
+ /**
268
+ * Find the schema file path if it exists.
269
+ */
270
+ function findSchemaFile(appDir) {
271
+ for (const ext of SCHEMA_EXTENSIONS) {
272
+ const p = join(appDir, `schema${ext}`);
273
+ if (existsSync(p)) return p;
274
+ }
275
+ }
276
+ /**
277
+ * Generate the content for a new app/schema.ts with the given segment keys.
278
+ */
279
+ function generateNewSchema(segments) {
280
+ const lines = [];
281
+ lines.push("import { defineSchema } from '@timber-js/app/params';");
282
+ lines.push("import { codec } from '@timber-js/app/codec';");
283
+ lines.push("");
284
+ lines.push("export default defineSchema({");
285
+ lines.push(" segmentParams: {");
286
+ for (const seg of segments) lines.push(` '${seg}': codec.string,`);
287
+ lines.push(" },");
288
+ lines.push("});");
289
+ lines.push("");
290
+ return lines.join("\n");
291
+ }
292
+ /**
293
+ * Append missing segment entries to an existing schema file.
294
+ * Inserts new entries before the closing `}` of segmentParams.
295
+ */
296
+ function appendToSchema(content, newSegments) {
297
+ const spIndex = content.indexOf("segmentParams");
298
+ if (spIndex === -1) throw new Error("[timber] Could not find segmentParams in schema file. Expected a defineSchema({ segmentParams: { ... } }) call.");
299
+ const openBrace = content.indexOf("{", spIndex + 13);
300
+ if (openBrace === -1) throw new Error("[timber] Could not find opening brace for segmentParams.");
301
+ let depth = 1;
302
+ let i = openBrace + 1;
303
+ while (i < content.length && depth > 0) {
304
+ if (content[i] === "{") depth++;
305
+ else if (content[i] === "}") depth--;
306
+ i++;
307
+ }
308
+ const closeBrace = i - 1;
309
+ const existingLine = content.slice(openBrace, closeBrace).match(/^(\s+)['"]\[/m);
310
+ const indent = existingLine ? existingLine[1] : " ";
311
+ const insertion = newSegments.map((seg) => `${indent}'${seg}': codec.string,`).join("\n");
312
+ const before = content.slice(0, closeBrace);
313
+ const after = content.slice(closeBrace);
314
+ return before + (before.trimEnd().endsWith(",") ? "\n" : "\n") + insertion + "\n" + after;
315
+ }
316
+ /**
317
+ * Run the schema sync: scan filesystem, diff against schema, append missing.
318
+ */
319
+ function runSchemaSync(projectRoot) {
320
+ const appDir = resolveAppDir(projectRoot);
321
+ const filesystemSegments = collectDynamicSegments(appDir);
322
+ if (filesystemSegments.length === 0) return {
323
+ filesystemSegments: [],
324
+ existingSegments: [],
325
+ addedSegments: [],
326
+ created: false
327
+ };
328
+ const schemaPath = findSchemaFile(appDir);
329
+ if (!schemaPath) {
330
+ writeFileSync(join(appDir, "schema.ts"), generateNewSchema(filesystemSegments), "utf-8");
331
+ return {
332
+ filesystemSegments,
333
+ existingSegments: [],
334
+ addedSegments: filesystemSegments,
335
+ created: true
336
+ };
337
+ }
338
+ const content = readFileSync(schemaPath, "utf-8");
339
+ const existingSegments = parseExistingSchemaKeys(content);
340
+ const missing = filesystemSegments.filter((seg) => !existingSegments.includes(seg));
341
+ if (missing.length === 0) return {
342
+ filesystemSegments,
343
+ existingSegments,
344
+ addedSegments: [],
345
+ created: false
346
+ };
347
+ writeFileSync(schemaPath, appendToSchema(content, missing), "utf-8");
348
+ return {
349
+ filesystemSegments,
350
+ existingSegments,
351
+ addedSegments: missing,
352
+ created: false
353
+ };
354
+ }
355
+ //#endregion
356
+ export { DEFAULT_BUILD_DIR as a, mergeFileConfig as c, resolveClientJavascript as d, createNoopTimer as f, runSchemaSync as i, resolveAppDir as l, findSchemaFile as n, createPluginContext as o, parseExistingSchemaKeys as r, loadTimberConfigFile as s, collectDynamicSegments as t, resolveBuildDir as u };
357
+
358
+ //# sourceMappingURL=cli-schema-sync-q2wB0DyJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-schema-sync-q2wB0DyJ.js","names":[],"sources":["../../src/utils/startup-timer.ts","../../src/plugin-context.ts","../../src/cli-schema-sync.ts"],"sourcesContent":["/**\n * Startup timer — records named phases with their durations.\n *\n * Used by the plugin system to instrument cold start and report a\n * timing breakdown in dev mode. Zero overhead in production (disabled).\n *\n * See design/18-build-system.md, TIM-155.\n */\n\nimport { performance } from 'node:perf_hooks';\n\nexport interface PhaseRecord {\n name: string;\n startMs: number;\n durationMs: number;\n}\n\nexport interface StartupTimer {\n /** Mark the beginning of a named phase. */\n start(phase: string): void;\n /** Mark the end of a named phase. Returns duration in ms. */\n end(phase: string): number;\n /** Get all completed phase records, ordered by start time. */\n getPhases(): PhaseRecord[];\n /** Total elapsed time from first start() to last end(). */\n totalMs(): number;\n /** Format a human-readable summary string. */\n formatSummary(): string;\n}\n\n/**\n * Create a startup timer that records phase durations.\n */\nexport function createStartupTimer(): StartupTimer {\n const pending = new Map<string, number>();\n const phases: PhaseRecord[] = [];\n\n return {\n start(phase: string): void {\n pending.set(phase, performance.now());\n },\n\n end(phase: string): number {\n const startMs = pending.get(phase);\n if (startMs === undefined) {\n return 0;\n }\n pending.delete(phase);\n const durationMs = performance.now() - startMs;\n phases.push({ name: phase, startMs, durationMs });\n return durationMs;\n },\n\n getPhases(): PhaseRecord[] {\n return [...phases].sort((a, b) => a.startMs - b.startMs);\n },\n\n totalMs(): number {\n if (phases.length === 0) return 0;\n const sorted = this.getPhases();\n const first = sorted[0];\n const last = sorted[sorted.length - 1];\n return last.startMs + last.durationMs - first.startMs;\n },\n\n formatSummary(): string {\n const sorted = this.getPhases();\n if (sorted.length === 0) return 'No phases recorded.';\n\n const lines = sorted.map((p) => {\n const ms = p.durationMs.toFixed(1);\n return ` ${p.name.padEnd(30)} ${ms.padStart(8)}ms`;\n });\n\n const total = this.totalMs().toFixed(1);\n lines.push(` ${'total'.padEnd(30)} ${total.padStart(8)}ms`);\n\n return ['[timber] startup timing:', ...lines].join('\\n');\n },\n };\n}\n\n/**\n * No-op timer for production builds — all methods are empty.\n */\nexport function createNoopTimer(): StartupTimer {\n return {\n start() {},\n end() {\n return 0;\n },\n getPhases() {\n return [];\n },\n totalMs() {\n return 0;\n },\n formatSummary() {\n return '';\n },\n };\n}\n","/**\n * Plugin context — internal types and helpers for timber sub-plugins.\n *\n * These are NOT part of the user-facing API. They are consumed by\n * sub-plugins (routing, entries, shims, etc.) via relative imports.\n * The root entry point (index.ts) does not re-export them.\n *\n * Design doc: 18-build-system.md §\"Shared Plugin Context\"\n */\n\nimport { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { createRequire } from 'node:module';\nimport type { RouteTree } from './routing/types';\nimport type { BuildManifest } from './server/build-manifest';\nimport type { StartupTimer } from './utils/startup-timer';\nimport { createStartupTimer } from './utils/startup-timer';\nimport type { TimberUserConfig, ClientJavascriptConfig } from './config-types.js';\nimport type { HoldingServer } from './dev-tools/holding-server.js';\n\n// Re-export for sub-plugin convenience — they import from plugin-context.ts\nexport type { TimberUserConfig, ClientJavascriptConfig } from './config-types.js';\n\n// ── Client JavaScript config ─────────────────────────────────────────────\n\n/** Fully resolved client JavaScript configuration (no optionals). */\nexport interface ResolvedClientJavascript {\n disabled: boolean;\n enableHMRInDev: boolean;\n}\n\n/**\n * Resolve `clientJavascript` into a fully resolved config.\n */\nexport function resolveClientJavascript(config: TimberUserConfig): ResolvedClientJavascript {\n if (config.clientJavascript !== undefined) {\n if (typeof config.clientJavascript === 'boolean') {\n return {\n disabled: !config.clientJavascript,\n enableHMRInDev: !config.clientJavascript,\n };\n }\n return {\n disabled: config.clientJavascript.disabled,\n enableHMRInDev: config.clientJavascript.enableHMRInDev ?? config.clientJavascript.disabled,\n };\n }\n return { disabled: false, enableHMRInDev: false };\n}\n\n// ── Plugin Context ────────────────────────────────────────────────────────\n\n/**\n * Shared context object passed to all sub-plugins via closure.\n *\n * Sub-plugins communicate through this context — not through Vite's\n * plugin API or global state.\n * See design/18-build-system.md §\"Shared Plugin Context\".\n */\nexport interface PluginContext {\n config: TimberUserConfig;\n /** Resolved client JavaScript configuration */\n clientJavascript: ResolvedClientJavascript;\n /** The scanned route tree (populated by timber-routing, consumed by timber-entries) */\n routeTree: RouteTree | null;\n /** Absolute path to the app/ directory */\n appDir: string;\n /** Absolute path to the project root */\n root: string;\n /** Whether the dev server is running (set by timber-root-sync in configResolved) */\n dev: boolean;\n /** CSS build manifest (populated by adapter after client build, null in dev) */\n buildManifest: BuildManifest | null;\n /** Per-build deployment ID for version skew detection (null in dev) */\n deploymentId: string | null;\n /** Startup timer for profiling cold start phases (active in dev, no-op in prod) */\n timer: StartupTimer;\n /** Holding server that binds the port during dev startup (closed in timber-dev-server) */\n holdingServer?: HoldingServer | null;\n /**\n * Resolved absolute path to the build output directory.\n *\n * Defaults to `<root>/.timber/dist`. Can be overridden via\n * `timber.config.ts` `buildDir` or Vite's `build.outDir`.\n * Timber config takes precedence when both are set.\n *\n * Used by adapter-build and cli preview.\n */\n buildDir: string;\n}\n\n// ── App directory resolution ──────────────────────────────────────────────\n\n/**\n * Resolve the app directory. Checks (in order):\n * 1. Explicit `configAppDir` from timber.config.ts\n * 2. `<root>/app`\n * 3. `<root>/src/app`\n *\n * Throws if none exist.\n */\nexport function resolveAppDir(root: string, configAppDir?: string): string {\n if (configAppDir) {\n const explicit = join(root, configAppDir);\n if (!existsSync(explicit)) {\n throw new Error(`[timber] Configured appDir \"${configAppDir}\" does not exist at ${explicit}`);\n }\n return explicit;\n }\n\n const rootApp = join(root, 'app');\n if (existsSync(rootApp)) return rootApp;\n\n const srcApp = join(root, 'src', 'app');\n if (existsSync(srcApp)) return srcApp;\n\n throw new Error(\n `[timber] Could not find app directory. Expected \"app/\" or \"src/app/\" in ${root}. ` +\n `You can set appDir in timber.config.ts to specify a custom location.`\n );\n}\n\n// ── Plugin context factory ────────────────────────────────────────────────\n\nexport function createPluginContext(config?: TimberUserConfig, root?: string): PluginContext {\n const projectRoot = root ?? process.cwd();\n const resolvedConfig: TimberUserConfig = { ...config };\n return {\n config: resolvedConfig,\n clientJavascript: resolveClientJavascript(resolvedConfig),\n routeTree: null,\n appDir: join(projectRoot, 'app'),\n root: projectRoot,\n dev: false,\n buildManifest: null,\n deploymentId: null,\n timer: createStartupTimer(),\n holdingServer: null,\n buildDir: resolveBuildDir(projectRoot, resolvedConfig.buildDir),\n };\n}\n\n// ── Build directory resolution ────────────────────────────────────────────\n\n/** Default build output directory (relative to root). */\nexport const DEFAULT_BUILD_DIR = join('.timber', 'dist');\n\n/**\n * Resolve the build output directory.\n *\n * Priority:\n * 1. Explicit `timberBuildDir` from timber.config.ts\n * 2. Explicit `viteBuildOutDir` from Vite's build.outDir (if not the default 'dist')\n * 3. Default: `.timber/dist`\n *\n * Returns an absolute path.\n */\nexport function resolveBuildDir(\n root: string,\n timberBuildDir?: string,\n viteBuildOutDir?: string\n): string {\n if (timberBuildDir) {\n return join(root, timberBuildDir);\n }\n if (viteBuildOutDir && viteBuildOutDir !== 'dist') {\n return join(root, viteBuildOutDir);\n }\n return join(root, DEFAULT_BUILD_DIR);\n}\n\n// ── Config file loading ───────────────────────────────────────────────────\n\n/**\n * Load timber.config.ts (or .js, .mjs) from the project root.\n * Returns the config object or null if no config file is found.\n *\n * Uses require() which works for ESM modules on Node 22.12+.\n * This keeps timber() synchronous — no async config loading needed.\n */\nexport function loadTimberConfigFile(root: string): TimberUserConfig | null {\n const configNames = ['timber.config.ts', 'timber.config.js', 'timber.config.mjs'];\n const req = createRequire(join(root, 'package.json'));\n\n for (const name of configNames) {\n const configPath = join(root, name);\n if (existsSync(configPath)) {\n const mod = req(configPath);\n return (mod.default ?? mod) as TimberUserConfig;\n }\n }\n return null;\n}\n\n/**\n * Detect config keys set in both inline (vite.config.ts) and file (timber.config.ts)\n * and warn the user. The `output` key is excluded because it defaults to 'server'\n * in createPluginContext and would always appear as an inline key.\n *\n * Returns the list of conflicting key names (for testing).\n */\nexport function warnConfigConflicts(\n inline: TimberUserConfig,\n fileConfig: TimberUserConfig\n): string[] {\n const conflicts: string[] = [];\n for (const key of Object.keys(fileConfig) as (keyof TimberUserConfig)[]) {\n if (key in inline && inline[key] !== undefined) {\n conflicts.push(key);\n }\n }\n if (conflicts.length > 0) {\n console.warn(\n `[timber] Config conflict: ${conflicts.map((k) => `\"${k}\"`).join(', ')} set in both ` +\n `vite.config.ts (inline) and timber.config.ts. ` +\n `Move all config to timber.config.ts to avoid confusion. ` +\n `The inline value from vite.config.ts will be used.`\n );\n }\n return conflicts;\n}\n\n/**\n * Merge file-based config into ctx.config. Inline config (already in ctx.config)\n * takes precedence — file config only fills in missing fields.\n */\nexport function mergeFileConfig(ctx: PluginContext, fileConfig: TimberUserConfig): void {\n const inline = ctx.config;\n warnConfigConflicts(inline, fileConfig);\n\n ctx.config = {\n ...fileConfig,\n ...inline,\n ...(fileConfig.limits && inline.limits\n ? { limits: { ...fileConfig.limits, ...inline.limits } }\n : {}),\n ...(fileConfig.dev && inline.dev ? { dev: { ...fileConfig.dev, ...inline.dev } } : {}),\n ...(fileConfig.mdx && inline.mdx ? { mdx: { ...fileConfig.mdx, ...inline.mdx } } : {}),\n };\n}\n","/**\n * `timber schema sync` — scan filesystem for dynamic segments and append\n * missing entries to app/schema.ts with `codec.string` defaults.\n *\n * Only adds, never removes or modifies existing entries.\n *\n * Design doc: design/41-global-params.md §Auto-Scaffolding\n */\n\nimport { readFileSync, writeFileSync, existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { scanRoutes } from './routing/scanner.js';\nimport type { SegmentNode } from './routing/types.js';\nimport { resolveAppDir } from './plugin-context.js';\n\n/**\n * Collect all unique bracket-keyed dynamic segment names from the route tree.\n * Returns entries like '[artistSlug]', '[...slug]', '[[...topic]]'.\n */\nexport function collectDynamicSegments(appDir: string): string[] {\n const tree = scanRoutes(appDir);\n const segments = new Set<string>();\n walkSegments(tree.root, segments);\n return [...segments].sort();\n}\n\nfunction walkSegments(node: SegmentNode, segments: Set<string>): void {\n if (node.paramName) {\n // Reconstruct bracket key from segmentName (already has brackets)\n segments.add(node.segmentName);\n }\n for (const child of node.children) {\n walkSegments(child, segments);\n }\n for (const slot of Object.values(node.slots)) {\n walkSegments(slot, segments);\n }\n}\n\n/**\n * Parse existing bracket keys from an app/schema.ts file.\n * Uses regex to find keys in segmentParams: { '[key]': ... } blocks.\n */\nexport function parseExistingSchemaKeys(content: string): string[] {\n const keys: string[] = [];\n // Match quoted bracket keys like '[artistSlug]', '[...slug]', '[[...topic]]'\n const re = /['\"](\\[{1,2}(?:\\.{3})?\\w+\\]{1,2})['\"]\\s*:/g;\n let m: RegExpExecArray | null;\n while ((m = re.exec(content)) !== null) {\n keys.push(m[1]);\n }\n return keys;\n}\n\n/** Schema file extensions to check. */\nconst SCHEMA_EXTENSIONS = ['.ts', '.tsx', '.js', '.jsx'];\n\n/**\n * Find the schema file path if it exists.\n */\nexport function findSchemaFile(appDir: string): string | undefined {\n for (const ext of SCHEMA_EXTENSIONS) {\n const p = join(appDir, `schema${ext}`);\n if (existsSync(p)) return p;\n }\n return undefined;\n}\n\n/**\n * Generate the content for a new app/schema.ts with the given segment keys.\n */\nfunction generateNewSchema(segments: string[]): string {\n const lines: string[] = [];\n lines.push(\"import { defineSchema } from '@timber-js/app/params';\");\n lines.push(\"import { codec } from '@timber-js/app/codec';\");\n lines.push('');\n lines.push('export default defineSchema({');\n lines.push(' segmentParams: {');\n for (const seg of segments) {\n lines.push(` '${seg}': codec.string,`);\n }\n lines.push(' },');\n lines.push('});');\n lines.push('');\n return lines.join('\\n');\n}\n\n/**\n * Append missing segment entries to an existing schema file.\n * Inserts new entries before the closing `}` of segmentParams.\n */\nfunction appendToSchema(content: string, newSegments: string[]): string {\n // Find the closing brace of segmentParams object.\n // Strategy: find the last entry in segmentParams block, insert after it.\n // Look for the pattern: segmentParams: { ... }\n // We find the closing `},` or `}` that ends segmentParams.\n\n // Find \"segmentParams\" key position\n const spIndex = content.indexOf('segmentParams');\n if (spIndex === -1) {\n throw new Error(\n '[timber] Could not find segmentParams in schema file. ' +\n 'Expected a defineSchema({ segmentParams: { ... } }) call.'\n );\n }\n\n // Find the opening brace after segmentParams\n const openBrace = content.indexOf('{', spIndex + 'segmentParams'.length);\n if (openBrace === -1) {\n throw new Error('[timber] Could not find opening brace for segmentParams.');\n }\n\n // Count braces to find the matching close\n let depth = 1;\n let i = openBrace + 1;\n while (i < content.length && depth > 0) {\n if (content[i] === '{') depth++;\n else if (content[i] === '}') depth--;\n i++;\n }\n // i now points to just after the closing brace\n const closeBrace = i - 1;\n\n // Detect indentation from existing entries\n const existingLine = content.slice(openBrace, closeBrace).match(/^(\\s+)['\"]\\[/m);\n const indent = existingLine ? existingLine[1] : ' ';\n\n // Build insertion text\n const insertion = newSegments.map((seg) => `${indent}'${seg}': codec.string,`).join('\\n');\n\n // Insert before the closing brace\n const before = content.slice(0, closeBrace);\n const after = content.slice(closeBrace);\n\n // Add newline if the content before doesn't end with one\n const separator = before.trimEnd().endsWith(',') ? '\\n' : '\\n';\n\n return before + separator + insertion + '\\n' + after;\n}\n\nexport interface SchemaSyncResult {\n /** Segments found in the filesystem. */\n filesystemSegments: string[];\n /** Segments already defined in app/schema.ts. */\n existingSegments: string[];\n /** Segments that were added. */\n addedSegments: string[];\n /** Whether a new schema file was created. */\n created: boolean;\n}\n\n/**\n * Run the schema sync: scan filesystem, diff against schema, append missing.\n */\nexport function runSchemaSync(projectRoot: string): SchemaSyncResult {\n const appDir = resolveAppDir(projectRoot);\n\n const filesystemSegments = collectDynamicSegments(appDir);\n\n if (filesystemSegments.length === 0) {\n return {\n filesystemSegments: [],\n existingSegments: [],\n addedSegments: [],\n created: false,\n };\n }\n\n const schemaPath = findSchemaFile(appDir);\n\n if (!schemaPath) {\n // Create new schema file\n const newPath = join(appDir, 'schema.ts');\n writeFileSync(newPath, generateNewSchema(filesystemSegments), 'utf-8');\n return {\n filesystemSegments,\n existingSegments: [],\n addedSegments: filesystemSegments,\n created: true,\n };\n }\n\n // Read existing schema and find missing segments\n const content = readFileSync(schemaPath, 'utf-8');\n const existingSegments = parseExistingSchemaKeys(content);\n const missing = filesystemSegments.filter((seg) => !existingSegments.includes(seg));\n\n if (missing.length === 0) {\n return {\n filesystemSegments,\n existingSegments,\n addedSegments: [],\n created: false,\n };\n }\n\n // Append missing segments\n const updated = appendToSchema(content, missing);\n writeFileSync(schemaPath, updated, 'utf-8');\n\n return {\n filesystemSegments,\n existingSegments,\n addedSegments: missing,\n created: false,\n };\n}\n"],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ //#region src/params/codec-registry.ts
2
+ var _codecs = null;
3
+ /**
4
+ * Register the resolved schema codecs for use by Link's URL interpolation.
5
+ * Called once at startup from the browser entry or RSC entry.
6
+ * @internal
7
+ */
8
+ function setLinkCodecs(codecs) {
9
+ _codecs = codecs;
10
+ }
11
+ /**
12
+ * Look up a codec by bracket key (e.g. '[id]', '[...slug]').
13
+ * Returns undefined if no schema is registered or the key has no codec.
14
+ */
15
+ function getLinkCodec(bracketKey) {
16
+ return _codecs?.[bracketKey] ?? void 0;
17
+ }
18
+ //#endregion
19
+ export { setLinkCodecs as n, getLinkCodec as t };
20
+
21
+ //# sourceMappingURL=codec-registry-V7ARyeLN.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codec-registry-V7ARyeLN.js","names":[],"sources":["../../src/params/codec-registry.ts"],"sourcesContent":["/**\n * Client-side registry for schema segment param codecs.\n *\n * The Link component uses codec `serialize` functions to convert typed\n * segment param values back to URL-safe strings. Without this registry,\n * Link falls back to `String(value)` — which works for simple types\n * but breaks for custom codecs (e.g., Date → '2026-04-10').\n *\n * Populated at startup by the browser entry importing `virtual:timber-schema`.\n * Also usable on the server (isomorphic).\n *\n * Design doc: design/41-global-params.md §\"Link Component\"\n */\n\nimport type { Codec } from '../codec.js';\n\nlet _codecs: Record<string, Codec<unknown>> | null = null;\n\n/**\n * Register the resolved schema codecs for use by Link's URL interpolation.\n * Called once at startup from the browser entry or RSC entry.\n * @internal\n */\nexport function setLinkCodecs(codecs: Record<string, Codec<unknown>> | null): void {\n _codecs = codecs;\n}\n\n/**\n * Look up a codec by bracket key (e.g. '[id]', '[...slug]').\n * Returns undefined if no schema is registered or the key has no codec.\n */\nexport function getLinkCodec(bracketKey: string): Codec<unknown> | undefined {\n return _codecs?.[bracketKey] ?? undefined;\n}\n"],"mappings":";AAgBA,IAAI,UAAiD;;;;;;AAOrD,SAAgB,cAAc,QAAqD;AACjF,WAAU;;;;;;AAOZ,SAAgB,aAAa,YAAgD;AAC3E,QAAO,UAAU,eAAe,KAAA"}
@@ -0,0 +1,195 @@
1
+ import { n as useQueryStates } from "./use-query-states-D9SBlAfp.js";
2
+ import { i as isStandardSchema, n as fromSchema, r as isCodec } from "./schema-bridge-eL5vQDSA.js";
3
+ //#region src/search-params/define.ts
4
+ /**
5
+ * defineSearchParams — factory for SearchParamsDefinition<T>.
6
+ *
7
+ * Creates a typed, composable definition for a route's search parameters.
8
+ * Accepts both SearchParamCodec values and Standard Schema objects (Zod,
9
+ * Valibot, ArkType) with auto-detection. Supports URL key aliasing via
10
+ * withUrlKey(), default-omission serialization, and composition via
11
+ * .extend() / .pick().
12
+ *
13
+ * Design doc: design/23-search-params.md §"defineSearchParams — The Factory"
14
+ */
15
+ var _getSearchParamsFn;
16
+ /**
17
+ * Register the getSearchParams function. Called once at module load time
18
+ * from request-context.ts to avoid dynamic import at call time.
19
+ * @internal
20
+ */
21
+ function _setGetSearchParamsFn(fn) {
22
+ _getSearchParamsFn = fn;
23
+ }
24
+ function getSearchParamsFromAls() {
25
+ if (!_getSearchParamsFn) throw new Error("[timber] searchParams.get() is only available on the server. Use searchParams.useQueryStates() on the client.");
26
+ return _getSearchParamsFn();
27
+ }
28
+ /**
29
+ * Convert URLSearchParams or a plain record to a normalized record
30
+ * where repeated keys produce arrays.
31
+ */
32
+ function normalizeRaw(raw) {
33
+ if (raw instanceof URLSearchParams) {
34
+ const result = {};
35
+ for (const key of new Set(raw.keys())) {
36
+ const values = raw.getAll(key);
37
+ result[key] = values.length === 1 ? values[0] : values;
38
+ }
39
+ return result;
40
+ }
41
+ return raw;
42
+ }
43
+ /**
44
+ * Compute the serialized default value for a codec. Used for
45
+ * default-omission: when serialize(value) === serialize(parse(undefined)),
46
+ * the field is omitted from the URL.
47
+ */
48
+ function getDefaultSerialized(codec) {
49
+ return codec.serialize(codec.parse(void 0));
50
+ }
51
+ /**
52
+ * Resolve a field value to a SearchParamCodec. Auto-detects Standard Schema
53
+ * objects and wraps them with fromSchema. Reads .urlKey from codecs.
54
+ */
55
+ function resolveField(fieldName, value) {
56
+ if (isCodec(value)) return {
57
+ codec: value,
58
+ urlKey: value.urlKey
59
+ };
60
+ if (isStandardSchema(value)) return { codec: fromSchema(value) };
61
+ throw new Error(`[timber] defineSearchParams: field '${fieldName}' is not a valid codec or Standard Schema. Expected an object with { parse, serialize } methods, or a Standard Schema object (Zod, Valibot, ArkType).`);
62
+ }
63
+ /**
64
+ * Validate that all codecs handle absent params (parse(undefined) doesn't throw).
65
+ * Catches schemas that throw on missing input. `undefined` and `null` are both
66
+ * valid defaults — `undefined` is correct for optional fields (e.g., `z.string().optional()`).
67
+ */
68
+ function validateDefaults(codecMap) {
69
+ for (const [key, codec] of Object.entries(codecMap)) try {
70
+ codec.parse(void 0);
71
+ } catch {
72
+ throw new Error(`[timber] defineSearchParams: field '${key}' throws when the param is absent.\n Search params are optional — the URL might not contain ?${key}=anything.\n Add .default() or .optional() to your schema, or wrap with withDefault().`);
73
+ }
74
+ }
75
+ function defineSearchParams(codecsOrSchema) {
76
+ if (isStandardSchema(codecsOrSchema) && hasShape(codecsOrSchema)) {
77
+ const fieldCodecs = {};
78
+ for (const [key, fieldSchema] of Object.entries(codecsOrSchema.shape)) if (isStandardSchema(fieldSchema)) fieldCodecs[key] = fieldSchema;
79
+ else throw new Error(`[timber] defineSearchParams: field '${key}' in schema.shape is not a Standard Schema. All shape properties must be Standard Schema objects (Zod, Valibot, ArkType).`);
80
+ return defineSearchParamsFromMap(fieldCodecs);
81
+ }
82
+ return defineSearchParamsFromMap(codecsOrSchema);
83
+ }
84
+ /** Check if a schema has a .shape property with object-type values. */
85
+ function hasShape(schema) {
86
+ return typeof schema === "object" && schema !== null && "shape" in schema && typeof schema.shape === "object" && schema.shape !== null;
87
+ }
88
+ function defineSearchParamsFromMap(codecs) {
89
+ const resolvedCodecs = {};
90
+ const urlKeys = {};
91
+ for (const [key, value] of Object.entries(codecs)) {
92
+ const resolved = resolveField(key, value);
93
+ resolvedCodecs[key] = resolved.codec;
94
+ if (resolved.urlKey) urlKeys[key] = resolved.urlKey;
95
+ }
96
+ validateDefaults(resolvedCodecs);
97
+ return buildDefinition(resolvedCodecs, urlKeys);
98
+ }
99
+ /**
100
+ * Internal: build a SearchParamsDefinition from a typed codec map and url keys.
101
+ */
102
+ function buildDefinition(codecMap, urlKeys) {
103
+ const defaultSerialized = {};
104
+ for (const key of Object.keys(codecMap)) defaultSerialized[key] = getDefaultSerialized(codecMap[key]);
105
+ function getUrlKey(prop) {
106
+ return urlKeys[prop] ?? prop;
107
+ }
108
+ function parseSync(raw) {
109
+ const normalized = normalizeRaw(raw);
110
+ const result = {};
111
+ for (const prop of Object.keys(codecMap)) {
112
+ const rawValue = normalized[getUrlKey(prop)];
113
+ result[prop] = codecMap[prop].parse(rawValue);
114
+ }
115
+ return result;
116
+ }
117
+ function parse(raw) {
118
+ if (raw instanceof Promise) return raw.then(parseSync);
119
+ return parseSync(raw);
120
+ }
121
+ function serialize(values) {
122
+ const parts = [];
123
+ for (const prop of Object.keys(codecMap)) {
124
+ if (!(prop in values)) continue;
125
+ const serialized = codecMap[prop].serialize(values[prop]);
126
+ if (serialized === defaultSerialized[prop]) continue;
127
+ if (serialized === null) continue;
128
+ parts.push(`${encodeURIComponent(getUrlKey(prop))}=${encodeURIComponent(serialized)}`);
129
+ }
130
+ return parts.join("&");
131
+ }
132
+ function href(pathname, values) {
133
+ const qs = serialize(values);
134
+ return qs ? `${pathname}?${qs}` : pathname;
135
+ }
136
+ function toSearchParams(values) {
137
+ const usp = new URLSearchParams();
138
+ for (const prop of Object.keys(codecMap)) {
139
+ if (!(prop in values)) continue;
140
+ const serialized = codecMap[prop].serialize(values[prop]);
141
+ if (serialized === defaultSerialized[prop]) continue;
142
+ if (serialized === null) continue;
143
+ usp.set(getUrlKey(prop), serialized);
144
+ }
145
+ return usp;
146
+ }
147
+ function extend(newCodecs) {
148
+ const resolvedNewCodecs = {};
149
+ const newUrlKeys = {};
150
+ for (const [key, value] of Object.entries(newCodecs)) {
151
+ const resolved = resolveField(key, value);
152
+ resolvedNewCodecs[key] = resolved.codec;
153
+ if (resolved.urlKey) newUrlKeys[key] = resolved.urlKey;
154
+ }
155
+ return buildDefinition({
156
+ ...codecMap,
157
+ ...resolvedNewCodecs
158
+ }, {
159
+ ...urlKeys,
160
+ ...newUrlKeys
161
+ });
162
+ }
163
+ function pick(...keys) {
164
+ const pickedCodecs = {};
165
+ const pickedUrlKeys = {};
166
+ for (const key of keys) {
167
+ pickedCodecs[key] = codecMap[key];
168
+ if (key in urlKeys) pickedUrlKeys[key] = urlKeys[key];
169
+ }
170
+ return buildDefinition(pickedCodecs, pickedUrlKeys);
171
+ }
172
+ function useQueryStates$1(options) {
173
+ return useQueryStates(codecMap, options, Object.freeze({ ...urlKeys }));
174
+ }
175
+ function get() {
176
+ if (typeof window !== "undefined") throw new Error("[timber] searchParams.get() is server-only. Use searchParams.useQueryStates() on the client.");
177
+ return parseSync(getSearchParamsFromAls());
178
+ }
179
+ return {
180
+ parse,
181
+ get,
182
+ useQueryStates: useQueryStates$1,
183
+ extend,
184
+ pick,
185
+ serialize,
186
+ href,
187
+ toSearchParams,
188
+ codecs: codecMap,
189
+ urlKeys: Object.freeze({ ...urlKeys })
190
+ };
191
+ }
192
+ //#endregion
193
+ export { defineSearchParams as n, _setGetSearchParamsFn as t };
194
+
195
+ //# sourceMappingURL=define-8zQ8Vm7x.js.map