@timber-js/app 0.2.0-alpha.97 → 0.2.0-alpha.99

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 (372) hide show
  1. package/dist/_chunks/actions-CQ8Z8VGL.js +1061 -0
  2. package/dist/_chunks/actions-CQ8Z8VGL.js.map +1 -0
  3. package/dist/_chunks/build-output-helper-DXnW0qjz.js +61 -0
  4. package/dist/_chunks/build-output-helper-DXnW0qjz.js.map +1 -0
  5. package/dist/_chunks/{define-Itxvcd7F.js → define-B-Q_UMOD.js} +19 -23
  6. package/dist/_chunks/define-B-Q_UMOD.js.map +1 -0
  7. package/dist/_chunks/{define-C77ScO0m.js → define-CfBPoJb0.js} +24 -7
  8. package/dist/_chunks/define-CfBPoJb0.js.map +1 -0
  9. package/dist/_chunks/define-cookie-BjpIt4UC.js +194 -0
  10. package/dist/_chunks/define-cookie-BjpIt4UC.js.map +1 -0
  11. package/dist/_chunks/{format-CYBGxKtc.js → format-Bcn-Iv1x.js} +1 -1
  12. package/dist/_chunks/{format-CYBGxKtc.js.map → format-Bcn-Iv1x.js.map} +1 -1
  13. package/dist/_chunks/handler-store-B-lqaGyh.js +54 -0
  14. package/dist/_chunks/handler-store-B-lqaGyh.js.map +1 -0
  15. package/dist/_chunks/logger-0m8MsKdc.js +291 -0
  16. package/dist/_chunks/logger-0m8MsKdc.js.map +1 -0
  17. package/dist/_chunks/merge-search-params-BphMdht_.js +122 -0
  18. package/dist/_chunks/merge-search-params-BphMdht_.js.map +1 -0
  19. package/dist/_chunks/{metadata-routes-DS3eKNmf.js → metadata-routes-BU684ls2.js} +1 -1
  20. package/dist/_chunks/{metadata-routes-DS3eKNmf.js.map → metadata-routes-BU684ls2.js.map} +1 -1
  21. package/dist/_chunks/navigation-root-BCYczjml.js +96 -0
  22. package/dist/_chunks/navigation-root-BCYczjml.js.map +1 -0
  23. package/dist/_chunks/registry-I2ss-lvy.js +20 -0
  24. package/dist/_chunks/registry-I2ss-lvy.js.map +1 -0
  25. package/dist/_chunks/router-ref-h3-UaCQv.js +28 -0
  26. package/dist/_chunks/router-ref-h3-UaCQv.js.map +1 -0
  27. package/dist/_chunks/{schema-bridge-C3xl_vfb.js → schema-bridge-Cxu4l-7p.js} +1 -1
  28. package/dist/_chunks/{schema-bridge-C3xl_vfb.js.map → schema-bridge-Cxu4l-7p.js.map} +1 -1
  29. package/dist/_chunks/segment-classify-BjfuctV2.js +137 -0
  30. package/dist/_chunks/segment-classify-BjfuctV2.js.map +1 -0
  31. package/dist/_chunks/{segment-context-fHFLF1PE.js → segment-context-Dx_OizxD.js} +1 -1
  32. package/dist/_chunks/{segment-context-fHFLF1PE.js.map → segment-context-Dx_OizxD.js.map} +1 -1
  33. package/dist/_chunks/{router-ref-C8OCm7g7.js → ssr-data-B4CdH7rE.js} +2 -26
  34. package/dist/_chunks/ssr-data-B4CdH7rE.js.map +1 -0
  35. package/dist/_chunks/{stale-reload-BX5gL1r-.js → stale-reload-Bab885FO.js} +1 -1
  36. package/dist/_chunks/{stale-reload-BX5gL1r-.js.map → stale-reload-Bab885FO.js.map} +1 -1
  37. package/dist/_chunks/tracing-C8V-YGsP.js +329 -0
  38. package/dist/_chunks/tracing-C8V-YGsP.js.map +1 -0
  39. package/dist/_chunks/{use-query-states-BiV5GJgm.js → use-query-states-B2XTqxDR.js} +3 -19
  40. package/dist/_chunks/use-query-states-B2XTqxDR.js.map +1 -0
  41. package/dist/_chunks/{use-params-IOPu7E8t.js → use-segment-params-BkpKAQ7D.js} +9 -95
  42. package/dist/_chunks/use-segment-params-BkpKAQ7D.js.map +1 -0
  43. package/dist/_chunks/{interception-BbqMCVXa.js → walkers-Tg0Alwcg.js} +66 -87
  44. package/dist/_chunks/walkers-Tg0Alwcg.js.map +1 -0
  45. package/dist/_chunks/{dev-warnings-DpGRGoDi.js → warnings-Cg47l5sk.js} +3 -3
  46. package/dist/_chunks/warnings-Cg47l5sk.js.map +1 -0
  47. package/dist/adapters/build-output-helper.d.ts +28 -0
  48. package/dist/adapters/build-output-helper.d.ts.map +1 -0
  49. package/dist/adapters/cloudflare.d.ts.map +1 -1
  50. package/dist/adapters/cloudflare.js +8 -28
  51. package/dist/adapters/cloudflare.js.map +1 -1
  52. package/dist/adapters/nitro.d.ts.map +1 -1
  53. package/dist/adapters/nitro.js +63 -31
  54. package/dist/adapters/nitro.js.map +1 -1
  55. package/dist/adapters/shared.d.ts +16 -0
  56. package/dist/adapters/shared.d.ts.map +1 -0
  57. package/dist/cache/index.js +9 -2
  58. package/dist/cache/index.js.map +1 -1
  59. package/dist/cache/timber-cache.d.ts.map +1 -1
  60. package/dist/client/error-boundary.js +2 -1
  61. package/dist/client/error-boundary.js.map +1 -1
  62. package/dist/client/form.d.ts +10 -24
  63. package/dist/client/form.d.ts.map +1 -1
  64. package/dist/client/index.d.ts +1 -5
  65. package/dist/client/index.d.ts.map +1 -1
  66. package/dist/client/index.js +41 -91
  67. package/dist/client/index.js.map +1 -1
  68. package/dist/client/internal.d.ts +2 -1
  69. package/dist/client/internal.d.ts.map +1 -1
  70. package/dist/client/internal.js +81 -7
  71. package/dist/client/internal.js.map +1 -1
  72. package/dist/client/rsc-fetch.d.ts.map +1 -1
  73. package/dist/client/state.d.ts +1 -1
  74. package/dist/client/use-cookie.d.ts +8 -0
  75. package/dist/client/use-cookie.d.ts.map +1 -1
  76. package/dist/client/{use-params.d.ts → use-segment-params.d.ts} +1 -1
  77. package/dist/client/use-segment-params.d.ts.map +1 -0
  78. package/dist/codec.d.ts +1 -1
  79. package/dist/codec.d.ts.map +1 -1
  80. package/dist/codec.js +2 -2
  81. package/dist/config-types.d.ts +28 -0
  82. package/dist/config-types.d.ts.map +1 -1
  83. package/dist/cookies/define-cookie.d.ts +87 -35
  84. package/dist/cookies/define-cookie.d.ts.map +1 -1
  85. package/dist/cookies/index.d.ts +2 -1
  86. package/dist/cookies/index.d.ts.map +1 -1
  87. package/dist/cookies/index.js +48 -2
  88. package/dist/cookies/index.js.map +1 -0
  89. package/dist/cookies/json-cookie.d.ts +64 -0
  90. package/dist/cookies/json-cookie.d.ts.map +1 -0
  91. package/dist/cookies/validation.d.ts +46 -0
  92. package/dist/cookies/validation.d.ts.map +1 -0
  93. package/dist/{plugins/dev-404-page.d.ts → dev-tools/404-page.d.ts} +9 -19
  94. package/dist/dev-tools/404-page.d.ts.map +1 -0
  95. package/dist/{plugins/dev-browser-logs.d.ts → dev-tools/browser-logs.d.ts} +1 -1
  96. package/dist/dev-tools/browser-logs.d.ts.map +1 -0
  97. package/dist/{plugins/dev-error-page.d.ts → dev-tools/error-page.d.ts} +2 -2
  98. package/dist/dev-tools/error-page.d.ts.map +1 -0
  99. package/dist/{server/dev-holding-server.d.ts → dev-tools/holding-server.d.ts} +5 -3
  100. package/dist/dev-tools/holding-server.d.ts.map +1 -0
  101. package/dist/dev-tools/index.d.ts +31 -0
  102. package/dist/dev-tools/index.d.ts.map +1 -0
  103. package/dist/{server/dev-span-processor.d.ts → dev-tools/instrumentation.d.ts} +26 -6
  104. package/dist/dev-tools/instrumentation.d.ts.map +1 -0
  105. package/dist/{server/dev-logger.d.ts → dev-tools/logger.d.ts} +1 -1
  106. package/dist/dev-tools/logger.d.ts.map +1 -0
  107. package/dist/{plugins/dev-logs.d.ts → dev-tools/logs.d.ts} +1 -1
  108. package/dist/dev-tools/logs.d.ts.map +1 -0
  109. package/dist/{plugins/dev-error-overlay.d.ts → dev-tools/overlay.d.ts} +3 -12
  110. package/dist/dev-tools/overlay.d.ts.map +1 -0
  111. package/dist/dev-tools/stack-classifier.d.ts +34 -0
  112. package/dist/dev-tools/stack-classifier.d.ts.map +1 -0
  113. package/dist/{plugins/dev-terminal-error.d.ts → dev-tools/terminal.d.ts} +2 -2
  114. package/dist/dev-tools/terminal.d.ts.map +1 -0
  115. package/dist/{server/dev-warnings.d.ts → dev-tools/warnings.d.ts} +1 -1
  116. package/dist/dev-tools/warnings.d.ts.map +1 -0
  117. package/dist/index.d.ts +1 -0
  118. package/dist/index.d.ts.map +1 -1
  119. package/dist/index.js +285 -133
  120. package/dist/index.js.map +1 -1
  121. package/dist/plugin-context.d.ts +1 -1
  122. package/dist/plugin-context.d.ts.map +1 -1
  123. package/dist/plugins/adapter-build.d.ts.map +1 -1
  124. package/dist/plugins/build-report.d.ts +6 -4
  125. package/dist/plugins/build-report.d.ts.map +1 -1
  126. package/dist/routing/convention-lint.d.ts.map +1 -1
  127. package/dist/routing/index.d.ts +5 -3
  128. package/dist/routing/index.d.ts.map +1 -1
  129. package/dist/routing/index.js +3 -3
  130. package/dist/routing/scanner.d.ts +1 -10
  131. package/dist/routing/scanner.d.ts.map +1 -1
  132. package/dist/routing/segment-classify.d.ts +37 -8
  133. package/dist/routing/segment-classify.d.ts.map +1 -1
  134. package/dist/routing/status-file-lint.d.ts.map +1 -1
  135. package/dist/routing/types.d.ts +63 -23
  136. package/dist/routing/types.d.ts.map +1 -1
  137. package/dist/routing/walkers.d.ts +51 -0
  138. package/dist/routing/walkers.d.ts.map +1 -0
  139. package/dist/search-params/define.d.ts +25 -7
  140. package/dist/search-params/define.d.ts.map +1 -1
  141. package/dist/search-params/index.js +5 -3
  142. package/dist/search-params/index.js.map +1 -1
  143. package/dist/search-params/wrappers.d.ts +2 -2
  144. package/dist/search-params/wrappers.d.ts.map +1 -1
  145. package/dist/segment-params/define.d.ts +23 -6
  146. package/dist/segment-params/define.d.ts.map +1 -1
  147. package/dist/segment-params/index.js +1 -1
  148. package/dist/server/access-gate.d.ts +4 -3
  149. package/dist/server/access-gate.d.ts.map +1 -1
  150. package/dist/server/action-handler.d.ts +15 -6
  151. package/dist/server/action-handler.d.ts.map +1 -1
  152. package/dist/server/als-registry.d.ts +5 -5
  153. package/dist/server/als-registry.d.ts.map +1 -1
  154. package/dist/server/asset-headers.d.ts +1 -15
  155. package/dist/server/asset-headers.d.ts.map +1 -1
  156. package/dist/server/cookie-context.d.ts +170 -0
  157. package/dist/server/cookie-context.d.ts.map +1 -0
  158. package/dist/server/cookie-parsing.d.ts +51 -0
  159. package/dist/server/cookie-parsing.d.ts.map +1 -0
  160. package/dist/server/deny-boundary.d.ts +90 -0
  161. package/dist/server/deny-boundary.d.ts.map +1 -0
  162. package/dist/server/deny-renderer.d.ts.map +1 -1
  163. package/dist/server/early-hints-sender.d.ts.map +1 -1
  164. package/dist/server/html-injector-core.d.ts +212 -0
  165. package/dist/server/html-injector-core.d.ts.map +1 -0
  166. package/dist/server/html-injectors.d.ts +59 -59
  167. package/dist/server/html-injectors.d.ts.map +1 -1
  168. package/dist/server/index.d.ts +5 -4
  169. package/dist/server/index.d.ts.map +1 -1
  170. package/dist/server/index.js +4 -149
  171. package/dist/server/index.js.map +1 -1
  172. package/dist/server/internal.d.ts +6 -4
  173. package/dist/server/internal.d.ts.map +1 -1
  174. package/dist/server/internal.js +852 -852
  175. package/dist/server/internal.js.map +1 -1
  176. package/dist/server/logger.d.ts +14 -0
  177. package/dist/server/logger.d.ts.map +1 -1
  178. package/dist/server/middleware-runner.d.ts +17 -0
  179. package/dist/server/middleware-runner.d.ts.map +1 -1
  180. package/dist/server/node-stream-transforms.d.ts +46 -49
  181. package/dist/server/node-stream-transforms.d.ts.map +1 -1
  182. package/dist/server/param-coercion.d.ts +26 -0
  183. package/dist/server/param-coercion.d.ts.map +1 -0
  184. package/dist/server/pipeline-helpers.d.ts +95 -0
  185. package/dist/server/pipeline-helpers.d.ts.map +1 -0
  186. package/dist/server/pipeline-outcome.d.ts +49 -0
  187. package/dist/server/pipeline-outcome.d.ts.map +1 -0
  188. package/dist/server/pipeline-phases.d.ts +52 -0
  189. package/dist/server/pipeline-phases.d.ts.map +1 -0
  190. package/dist/server/pipeline.d.ts +51 -32
  191. package/dist/server/pipeline.d.ts.map +1 -1
  192. package/dist/server/port-resolution.d.ts +117 -0
  193. package/dist/server/port-resolution.d.ts.map +1 -0
  194. package/dist/server/request-context.d.ts +22 -159
  195. package/dist/server/request-context.d.ts.map +1 -1
  196. package/dist/server/route-element-builder.d.ts.map +1 -1
  197. package/dist/server/route-matcher.d.ts +20 -47
  198. package/dist/server/route-matcher.d.ts.map +1 -1
  199. package/dist/server/rsc-entry/action-middleware-runner.d.ts +66 -0
  200. package/dist/server/rsc-entry/action-middleware-runner.d.ts.map +1 -0
  201. package/dist/server/rsc-entry/helpers.d.ts +1 -1
  202. package/dist/server/rsc-entry/helpers.d.ts.map +1 -1
  203. package/dist/server/rsc-entry/index.d.ts.map +1 -1
  204. package/dist/server/rsc-entry/render-route.d.ts +50 -0
  205. package/dist/server/rsc-entry/render-route.d.ts.map +1 -0
  206. package/dist/server/rsc-entry/wrap-action-dispatch.d.ts +119 -0
  207. package/dist/server/rsc-entry/wrap-action-dispatch.d.ts.map +1 -0
  208. package/dist/server/state-tree-diff.d.ts.map +1 -1
  209. package/dist/server/status-code-resolver.d.ts +16 -11
  210. package/dist/server/status-code-resolver.d.ts.map +1 -1
  211. package/dist/server/tracing.d.ts +1 -1
  212. package/dist/server/tracing.d.ts.map +1 -1
  213. package/dist/server/tree-builder.d.ts +45 -16
  214. package/dist/server/tree-builder.d.ts.map +1 -1
  215. package/dist/server/types.d.ts +48 -0
  216. package/dist/server/types.d.ts.map +1 -1
  217. package/dist/server/utils/escape-html.d.ts +14 -0
  218. package/dist/server/utils/escape-html.d.ts.map +1 -0
  219. package/dist/shims/headers.d.ts +2 -2
  220. package/dist/shims/headers.d.ts.map +1 -1
  221. package/dist/shims/navigation-client.d.ts +3 -1
  222. package/dist/shims/navigation-client.d.ts.map +1 -1
  223. package/dist/shims/navigation.d.ts +9 -4
  224. package/dist/shims/navigation.d.ts.map +1 -1
  225. package/dist/utils/directive-parser.d.ts +0 -45
  226. package/dist/utils/directive-parser.d.ts.map +1 -1
  227. package/package.json +1 -1
  228. package/src/adapters/build-output-helper.ts +77 -0
  229. package/src/adapters/cloudflare.ts +10 -50
  230. package/src/adapters/nitro.ts +66 -50
  231. package/src/adapters/shared.ts +40 -0
  232. package/src/cache/timber-cache.ts +3 -2
  233. package/src/client/form.tsx +17 -25
  234. package/src/client/index.ts +16 -9
  235. package/src/client/internal.ts +3 -2
  236. package/src/client/router.ts +1 -1
  237. package/src/client/rsc-fetch.ts +15 -0
  238. package/src/client/state.ts +2 -2
  239. package/src/client/use-cookie.ts +29 -0
  240. package/src/codec.ts +3 -7
  241. package/src/config-types.ts +28 -0
  242. package/src/cookies/define-cookie.ts +271 -78
  243. package/src/cookies/index.ts +11 -8
  244. package/src/cookies/json-cookie.ts +105 -0
  245. package/src/cookies/validation.ts +134 -0
  246. package/src/{plugins/dev-404-page.ts → dev-tools/404-page.ts} +17 -48
  247. package/src/{plugins/dev-error-page.ts → dev-tools/error-page.ts} +5 -32
  248. package/src/{server/dev-holding-server.ts → dev-tools/holding-server.ts} +4 -2
  249. package/src/dev-tools/index.ts +90 -0
  250. package/src/dev-tools/instrumentation.ts +176 -0
  251. package/src/{plugins/dev-logs.ts → dev-tools/logs.ts} +2 -2
  252. package/src/{plugins/dev-error-overlay.ts → dev-tools/overlay.ts} +5 -23
  253. package/src/dev-tools/stack-classifier.ts +75 -0
  254. package/src/{plugins/dev-terminal-error.ts → dev-tools/terminal.ts} +4 -38
  255. package/src/{server/dev-warnings.ts → dev-tools/warnings.ts} +1 -1
  256. package/src/index.ts +95 -34
  257. package/src/plugin-context.ts +1 -1
  258. package/src/plugins/adapter-build.ts +3 -1
  259. package/src/plugins/build-report.ts +13 -22
  260. package/src/plugins/dev-server.ts +3 -3
  261. package/src/plugins/routing.ts +14 -12
  262. package/src/plugins/shims.ts +1 -1
  263. package/src/plugins/static-build.ts +1 -1
  264. package/src/routing/codegen.ts +1 -1
  265. package/src/routing/convention-lint.ts +9 -8
  266. package/src/routing/index.ts +5 -3
  267. package/src/routing/interception.ts +1 -1
  268. package/src/routing/scanner.ts +22 -95
  269. package/src/routing/segment-classify.ts +107 -8
  270. package/src/routing/status-file-lint.ts +7 -5
  271. package/src/routing/types.ts +63 -23
  272. package/src/routing/walkers.ts +90 -0
  273. package/src/search-params/define.ts +71 -15
  274. package/src/search-params/wrappers.ts +9 -2
  275. package/src/segment-params/define.ts +66 -13
  276. package/src/server/access-gate.tsx +9 -8
  277. package/src/server/action-handler.ts +34 -38
  278. package/src/server/als-registry.ts +5 -5
  279. package/src/server/asset-headers.ts +8 -34
  280. package/src/server/cookie-context.ts +468 -0
  281. package/src/server/cookie-parsing.ts +135 -0
  282. package/src/server/{deny-page-resolver.ts → deny-boundary.ts} +78 -14
  283. package/src/server/deny-renderer.ts +7 -12
  284. package/src/server/early-hints-sender.ts +3 -2
  285. package/src/server/fallback-error.ts +2 -2
  286. package/src/server/html-injector-core.ts +403 -0
  287. package/src/server/html-injectors.ts +158 -297
  288. package/src/server/index.ts +13 -14
  289. package/src/server/internal.ts +10 -3
  290. package/src/server/logger.ts +23 -0
  291. package/src/server/middleware-runner.ts +44 -0
  292. package/src/server/node-stream-transforms.ts +108 -248
  293. package/src/server/param-coercion.ts +76 -0
  294. package/src/server/pipeline-helpers.ts +204 -0
  295. package/src/server/pipeline-outcome.ts +167 -0
  296. package/src/server/pipeline-phases.ts +409 -0
  297. package/src/server/pipeline.ts +70 -540
  298. package/src/server/port-resolution.ts +215 -0
  299. package/src/server/request-context.ts +46 -451
  300. package/src/server/route-element-builder.ts +8 -4
  301. package/src/server/route-matcher.ts +28 -60
  302. package/src/server/rsc-entry/action-middleware-runner.ts +167 -0
  303. package/src/server/rsc-entry/api-handler.ts +2 -2
  304. package/src/server/rsc-entry/error-renderer.ts +2 -2
  305. package/src/server/rsc-entry/helpers.ts +2 -7
  306. package/src/server/rsc-entry/index.ts +81 -366
  307. package/src/server/rsc-entry/render-route.ts +304 -0
  308. package/src/server/rsc-entry/rsc-payload.ts +1 -1
  309. package/src/server/rsc-entry/ssr-renderer.ts +2 -2
  310. package/src/server/rsc-entry/wrap-action-dispatch.ts +449 -0
  311. package/src/server/sitemap-generator.ts +1 -1
  312. package/src/server/slot-resolver.ts +1 -1
  313. package/src/server/ssr-entry.ts +1 -1
  314. package/src/server/state-tree-diff.ts +4 -1
  315. package/src/server/status-code-resolver.ts +112 -128
  316. package/src/server/tracing.ts +3 -3
  317. package/src/server/tree-builder.ts +134 -56
  318. package/src/server/types.ts +52 -0
  319. package/src/server/utils/escape-html.ts +20 -0
  320. package/src/shims/headers.ts +3 -3
  321. package/src/shims/navigation-client.ts +4 -3
  322. package/src/shims/navigation.ts +9 -7
  323. package/src/utils/directive-parser.ts +0 -392
  324. package/dist/_chunks/actions-DLnUaR65.js +0 -421
  325. package/dist/_chunks/actions-DLnUaR65.js.map +0 -1
  326. package/dist/_chunks/als-registry-HS0LGUl2.js +0 -41
  327. package/dist/_chunks/als-registry-HS0LGUl2.js.map +0 -1
  328. package/dist/_chunks/debug-ECi_61pb.js +0 -108
  329. package/dist/_chunks/debug-ECi_61pb.js.map +0 -1
  330. package/dist/_chunks/define-C77ScO0m.js.map +0 -1
  331. package/dist/_chunks/define-Itxvcd7F.js.map +0 -1
  332. package/dist/_chunks/define-cookie-BowvzoP0.js +0 -94
  333. package/dist/_chunks/define-cookie-BowvzoP0.js.map +0 -1
  334. package/dist/_chunks/dev-warnings-DpGRGoDi.js.map +0 -1
  335. package/dist/_chunks/interception-BbqMCVXa.js.map +0 -1
  336. package/dist/_chunks/merge-search-params-Cm_KIWDX.js +0 -41
  337. package/dist/_chunks/merge-search-params-Cm_KIWDX.js.map +0 -1
  338. package/dist/_chunks/request-context-CK5tZqIP.js +0 -478
  339. package/dist/_chunks/request-context-CK5tZqIP.js.map +0 -1
  340. package/dist/_chunks/router-ref-C8OCm7g7.js.map +0 -1
  341. package/dist/_chunks/segment-classify-BDNn6EzD.js +0 -65
  342. package/dist/_chunks/segment-classify-BDNn6EzD.js.map +0 -1
  343. package/dist/_chunks/tracing-CCYbKn5n.js +0 -238
  344. package/dist/_chunks/tracing-CCYbKn5n.js.map +0 -1
  345. package/dist/_chunks/use-params-IOPu7E8t.js.map +0 -1
  346. package/dist/_chunks/use-query-states-BiV5GJgm.js.map +0 -1
  347. package/dist/client/use-params.d.ts.map +0 -1
  348. package/dist/plugins/dev-404-page.d.ts.map +0 -1
  349. package/dist/plugins/dev-browser-logs.d.ts.map +0 -1
  350. package/dist/plugins/dev-error-overlay.d.ts.map +0 -1
  351. package/dist/plugins/dev-error-page.d.ts.map +0 -1
  352. package/dist/plugins/dev-logs.d.ts.map +0 -1
  353. package/dist/plugins/dev-terminal-error.d.ts.map +0 -1
  354. package/dist/server/deny-page-resolver.d.ts +0 -52
  355. package/dist/server/deny-page-resolver.d.ts.map +0 -1
  356. package/dist/server/dev-fetch-instrumentation.d.ts +0 -22
  357. package/dist/server/dev-fetch-instrumentation.d.ts.map +0 -1
  358. package/dist/server/dev-holding-server.d.ts.map +0 -1
  359. package/dist/server/dev-logger.d.ts.map +0 -1
  360. package/dist/server/dev-span-processor.d.ts.map +0 -1
  361. package/dist/server/dev-warnings.d.ts.map +0 -1
  362. package/dist/server/manifest-status-resolver.d.ts +0 -58
  363. package/dist/server/manifest-status-resolver.d.ts.map +0 -1
  364. package/dist/server/page-deny-boundary.d.ts +0 -31
  365. package/dist/server/page-deny-boundary.d.ts.map +0 -1
  366. package/src/server/dev-fetch-instrumentation.ts +0 -96
  367. package/src/server/dev-span-processor.ts +0 -78
  368. package/src/server/manifest-status-resolver.ts +0 -215
  369. package/src/server/page-deny-boundary.tsx +0 -56
  370. /package/src/client/{use-params.ts → use-segment-params.ts} +0 -0
  371. /package/src/{plugins/dev-browser-logs.ts → dev-tools/browser-logs.ts} +0 -0
  372. /package/src/{server/dev-logger.ts → dev-tools/logger.ts} +0 -0
@@ -1,31 +0,0 @@
1
- /**
2
- * PageDenyBoundary — catches DenySignal from page components server-side.
3
- *
4
- * Wraps a server component page by calling it as an async function (the same
5
- * thing React Flight does internally). If the page throws DenySignal, the
6
- * boundary catches it and renders the matching deny page as a normal element.
7
- * No error reaches React Flight — the Flight stream is clean, SSR succeeds,
8
- * and the entire request uses a single renderToReadableStream call.
9
- *
10
- * Client component pages ('use client') are NOT wrapped — they can't call
11
- * deny() (server-only API) and must go through createElement normally.
12
- *
13
- * See design/04-authorization.md, design/10-error-handling.md, TIM-666.
14
- */
15
- import type { DenyPageEntry } from './deny-page-resolver.js';
16
- /**
17
- * Async server component that wraps a page call with DenySignal catching.
18
- *
19
- * Calls the page component as an async function, awaits it, and catches
20
- * DenySignal. On catch, renders the deny page in-tree. On success, returns
21
- * the page's rendered output normally.
22
- */
23
- export declare function PageDenyBoundary({ Page, route, denyPages, }: {
24
- /** The page server component function. */
25
- Page: (...args: unknown[]) => unknown;
26
- /** Route path for OTEL tracing. */
27
- route: string;
28
- /** Deny page fallback chain from the segment chain. */
29
- denyPages: DenyPageEntry[];
30
- }): Promise<React.ReactElement>;
31
- //# sourceMappingURL=page-deny-boundary.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"page-deny-boundary.d.ts","sourceRoot":"","sources":["../../src/server/page-deny-boundary.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAI7D;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CAAC,EACrC,IAAI,EACJ,KAAK,EACL,SAAS,GACV,EAAE;IACD,0CAA0C;IAC1C,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC;IACtC,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,uDAAuD;IACvD,SAAS,EAAE,aAAa,EAAE,CAAC;CAC5B,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAiB9B"}
@@ -1,96 +0,0 @@
1
- /**
2
- * Dev-mode fetch instrumentation — patches globalThis.fetch to create OTEL
3
- * spans for every fetch call, giving visibility into async data fetching
4
- * in the dev request log tree.
5
- *
6
- * Only activated in dev mode — zero overhead in production.
7
- *
8
- * The spans are automatically children of the active OTEL context (e.g. a
9
- * timber.page or timber.layout span), so they appear nested under the
10
- * component that initiated the fetch in the dev log tree.
11
- *
12
- * Design ref: 17-logging.md §"Dev Logging", LOCAL-289
13
- */
14
-
15
- import * as api from '@opentelemetry/api';
16
-
17
- export type DevFetchCleanup = () => void;
18
-
19
- /**
20
- * Patch globalThis.fetch to wrap every call in an OTEL span.
21
- *
22
- * Returns a cleanup function that restores the original fetch.
23
- * Only call this in dev mode.
24
- */
25
- export function instrumentDevFetch(): DevFetchCleanup {
26
- const originalFetch = globalThis.fetch;
27
- const tracer = api.trace.getTracer('timber.js');
28
-
29
- globalThis.fetch = async (input: RequestInfo | URL, init?: RequestInit): Promise<Response> => {
30
- const { method, url } = extractFetchInfo(input, init);
31
-
32
- return tracer.startActiveSpan(
33
- 'timber.fetch',
34
- {
35
- attributes: {
36
- 'http.request.method': method,
37
- 'http.url': url,
38
- },
39
- },
40
- async (span) => {
41
- try {
42
- const response = await originalFetch(input, init);
43
-
44
- span.setAttribute('http.response.status_code', response.status);
45
-
46
- // Surface cache status from standard headers
47
- const cacheStatus =
48
- response.headers.get('X-Cache') ?? response.headers.get('CF-Cache-Status');
49
- if (cacheStatus) {
50
- span.setAttribute('timber.cache_status', cacheStatus);
51
- }
52
-
53
- span.setStatus({ code: api.SpanStatusCode.OK });
54
- span.end();
55
- return response;
56
- } catch (error) {
57
- span.setStatus({ code: api.SpanStatusCode.ERROR });
58
- if (error instanceof Error) {
59
- span.setAttribute('timber.fetch_error', error.message);
60
- span.recordException(error);
61
- }
62
- span.end();
63
- throw error;
64
- }
65
- }
66
- );
67
- };
68
-
69
- return () => {
70
- globalThis.fetch = originalFetch;
71
- };
72
- }
73
-
74
- /**
75
- * Extract method and URL from the various fetch() call signatures.
76
- */
77
- function extractFetchInfo(
78
- input: RequestInfo | URL,
79
- init?: RequestInit
80
- ): { method: string; url: string } {
81
- let method = init?.method ?? 'GET';
82
- let url: string;
83
-
84
- if (input instanceof Request) {
85
- url = input.url;
86
- if (!init?.method) {
87
- method = input.method;
88
- }
89
- } else if (input instanceof URL) {
90
- url = input.toString();
91
- } else {
92
- url = input;
93
- }
94
-
95
- return { method: method.toUpperCase(), url };
96
- }
@@ -1,78 +0,0 @@
1
- /**
2
- * DevSpanProcessor — Custom OTEL SpanProcessor that drives dev log output.
3
- *
4
- * Collects completed spans per-request (correlated by trace ID). When the
5
- * root span (http.server.request) ends, all child spans are already collected
6
- * (child spans end before parent in OTEL). The processor formats the span
7
- * tree and writes it to stderr.
8
- *
9
- * This replaces the old DevLogEmitter/DevLogEvents system. OTEL spans are
10
- * now the single source of truth for dev logging — no more parallel event
11
- * systems that can drift.
12
- *
13
- * Design doc: 17-logging.md §"Dev Logging", 21-dev-server.md §"Dev Logging"
14
- */
15
-
16
- import type { SpanProcessor, ReadableSpan } from '@opentelemetry/sdk-trace-base';
17
- import type { Span, Context } from '@opentelemetry/api';
18
- import {
19
- formatSpanTree,
20
- formatSpanSummary,
21
- formatJson,
22
- type DevLogMode,
23
- type DevLoggerConfig,
24
- } from './dev-logger.js';
25
-
26
- export class DevSpanProcessor implements SpanProcessor {
27
- private spansByTrace = new Map<string, ReadableSpan[]>();
28
- private mode: DevLogMode;
29
- private config: DevLoggerConfig;
30
-
31
- constructor(config: DevLoggerConfig) {
32
- this.config = config;
33
- this.mode = config.mode ?? 'tree';
34
- }
35
-
36
- onStart(_span: Span, _context: Context): void {
37
- // No action needed on span start — we collect on end.
38
- }
39
-
40
- onEnd(span: ReadableSpan): void {
41
- const traceId = span.spanContext().traceId;
42
-
43
- let spans = this.spansByTrace.get(traceId);
44
- if (!spans) {
45
- spans = [];
46
- this.spansByTrace.set(traceId, spans);
47
- }
48
- spans.push(span);
49
-
50
- // Root span signals request completion — all child spans are already
51
- // collected because OTEL ends child spans before parent spans.
52
- if (span.name === 'http.server.request') {
53
- const output = this.format(spans);
54
- if (output) {
55
- process.stderr.write(output);
56
- }
57
- this.spansByTrace.delete(traceId);
58
- }
59
- }
60
-
61
- private format(spans: ReadableSpan[]): string {
62
- if (this.mode === 'quiet') return '';
63
- if (this.mode === 'json') return formatJson(spans);
64
- if (this.mode === 'summary') return formatSpanSummary(spans, this.config);
65
- // Both 'tree' and 'verbose' use the tree formatter.
66
- // verbose will show additional detail (every component render) once
67
- // component-level spans are wired.
68
- return formatSpanTree(spans, this.config);
69
- }
70
-
71
- async shutdown(): Promise<void> {
72
- this.spansByTrace.clear();
73
- }
74
-
75
- async forceFlush(): Promise<void> {
76
- // Nothing to flush — output happens synchronously in onEnd.
77
- }
78
- }
@@ -1,215 +0,0 @@
1
- /**
2
- * Manifest-compatible status-code file resolver.
3
- *
4
- * The existing status-code-resolver.ts works with SegmentNode (Map-based).
5
- * This module works with ManifestSegmentNode (object-based) for use at
6
- * runtime in the RSC/SSR entries, where the route manifest provides
7
- * plain objects instead of Maps.
8
- *
9
- * Supports two format families:
10
- * - 'component' (default): .tsx/.jsx/.mdx status files → React rendering pipeline
11
- * - 'json': .json status files → raw JSON response, no React
12
- *
13
- * Follows the same fallback chains as status-code-resolver.ts:
14
- *
15
- * **Component chain (4xx):**
16
- * Pass 1 — status files (leaf → root): {status}.tsx → 4xx.tsx
17
- * Pass 2 — legacy compat (leaf → root): not-found.tsx / forbidden.tsx / unauthorized.tsx
18
- * Pass 3 — error.tsx (leaf → root)
19
- * Pass 4 — framework default (returns null)
20
- *
21
- * **JSON chain (4xx):**
22
- * Pass 1 — json status files (leaf → root): {status}.json → 4xx.json
23
- * Pass 2 — framework default JSON (returns null, caller provides bare JSON)
24
- *
25
- * See design/10-error-handling.md §"Status-Code Files"
26
- */
27
-
28
- import type { ManifestSegmentNode } from './route-matcher.js';
29
-
30
- // ─── Types ───────────────────────────────────────────────────────────────────
31
-
32
- /** A file reference in the manifest (lazy import + path). */
33
- interface ManifestFile {
34
- load: () => Promise<unknown>;
35
- filePath: string;
36
- }
37
-
38
- /** How the status-code file was matched. */
39
- export type ManifestStatusFileKind =
40
- | 'exact' // e.g. 403.tsx matched status 403
41
- | 'category' // e.g. 4xx.tsx matched status 403
42
- | 'legacy' // e.g. not-found.tsx matched status 404
43
- | 'error'; // error.tsx as last resort
44
-
45
- /** Response format family for status-code resolution. */
46
- export type ManifestStatusFileFormat = 'component' | 'json';
47
-
48
- /** Result of resolving a status-code file from manifest segments. */
49
- export interface ManifestStatusFileResolution {
50
- /** The matched manifest file (has load() and filePath). */
51
- file: ManifestFile;
52
- /** The HTTP status code (always the original status, not the file's code). */
53
- status: number;
54
- /** How the file was matched. */
55
- kind: ManifestStatusFileKind;
56
- /** Index into the segments array where the file was found. */
57
- segmentIndex: number;
58
- }
59
-
60
- // ─── Legacy Compat Mapping ───────────────────────────────────────────────────
61
-
62
- const LEGACY_FILE_TO_STATUS: Record<string, number> = {
63
- 'not-found': 404,
64
- 'forbidden': 403,
65
- 'unauthorized': 401,
66
- };
67
-
68
- // ─── Resolver ────────────────────────────────────────────────────────────────
69
-
70
- /**
71
- * Resolve the status-code file to render for a given HTTP status code,
72
- * using manifest segment nodes (plain objects, not Maps).
73
- *
74
- * @param status - The HTTP status code (4xx or 5xx).
75
- * @param segments - The matched segment chain from root (index 0) to leaf (last).
76
- * @param format - The response format family ('component' or 'json'). Defaults to 'component'.
77
- */
78
- export function resolveManifestStatusFile(
79
- status: number,
80
- segments: ReadonlyArray<ManifestSegmentNode>,
81
- format: ManifestStatusFileFormat = 'component'
82
- ): ManifestStatusFileResolution | null {
83
- if (status < 400 || status > 599) {
84
- return null;
85
- }
86
-
87
- if (format === 'json') {
88
- return resolveJson(status, segments);
89
- }
90
-
91
- if (status <= 499) {
92
- return resolve4xx(status, segments);
93
- }
94
-
95
- return resolve5xx(status, segments);
96
- }
97
-
98
- /**
99
- * 4xx component fallback chain (three separate passes):
100
- * Pass 1 — status files (leaf → root): {status}.tsx → 4xx.tsx
101
- * Pass 2 — legacy compat (leaf → root): not-found.tsx / forbidden.tsx / unauthorized.tsx
102
- * Pass 3 — error.tsx (leaf → root)
103
- */
104
- function resolve4xx(
105
- status: number,
106
- segments: ReadonlyArray<ManifestSegmentNode>
107
- ): ManifestStatusFileResolution | null {
108
- const statusStr = String(status);
109
-
110
- // Pass 1: status files across all segments (leaf → root)
111
- for (let i = segments.length - 1; i >= 0; i--) {
112
- const segment = segments[i];
113
- if (!segment.statusFiles) continue;
114
-
115
- // Exact match first
116
- const exact = segment.statusFiles[statusStr];
117
- if (exact) {
118
- return { file: exact, status, kind: 'exact', segmentIndex: i };
119
- }
120
-
121
- // Category catch-all
122
- const category = segment.statusFiles['4xx'];
123
- if (category) {
124
- return { file: category, status, kind: 'category', segmentIndex: i };
125
- }
126
- }
127
-
128
- // Pass 2: legacy compat files (leaf → root)
129
- for (let i = segments.length - 1; i >= 0; i--) {
130
- const segment = segments[i];
131
- if (!segment.legacyStatusFiles) continue;
132
-
133
- for (const [name, legacyStatus] of Object.entries(LEGACY_FILE_TO_STATUS)) {
134
- if (legacyStatus === status) {
135
- const file = segment.legacyStatusFiles[name];
136
- if (file) {
137
- return { file, status, kind: 'legacy', segmentIndex: i };
138
- }
139
- }
140
- }
141
- }
142
-
143
- // Pass 3: error.tsx (leaf → root)
144
- for (let i = segments.length - 1; i >= 0; i--) {
145
- if (segments[i].error) {
146
- return { file: segments[i].error!, status, kind: 'error', segmentIndex: i };
147
- }
148
- }
149
-
150
- return null;
151
- }
152
-
153
- /**
154
- * 5xx component fallback chain (single pass, per-segment):
155
- * At each segment (leaf → root): {status}.tsx → 5xx.tsx → error.tsx
156
- */
157
- function resolve5xx(
158
- status: number,
159
- segments: ReadonlyArray<ManifestSegmentNode>
160
- ): ManifestStatusFileResolution | null {
161
- const statusStr = String(status);
162
-
163
- for (let i = segments.length - 1; i >= 0; i--) {
164
- const segment = segments[i];
165
-
166
- if (segment.statusFiles) {
167
- const exact = segment.statusFiles[statusStr];
168
- if (exact) {
169
- return { file: exact, status, kind: 'exact', segmentIndex: i };
170
- }
171
-
172
- const categoryKey = '5xx';
173
- const category = segment.statusFiles[categoryKey];
174
- if (category) {
175
- return { file: category, status, kind: 'category', segmentIndex: i };
176
- }
177
- }
178
-
179
- if (segment.error) {
180
- return { file: segment.error, status, kind: 'error', segmentIndex: i };
181
- }
182
- }
183
-
184
- return null;
185
- }
186
-
187
- /**
188
- * JSON fallback chain (for both 4xx and 5xx):
189
- * At each segment (leaf → root): {status}.json → {category}.json
190
- * No legacy compat, no error.tsx — JSON chain terminates at category catch-all.
191
- */
192
- function resolveJson(
193
- status: number,
194
- segments: ReadonlyArray<ManifestSegmentNode>
195
- ): ManifestStatusFileResolution | null {
196
- const statusStr = String(status);
197
- const categoryKey = status >= 500 ? '5xx' : '4xx';
198
-
199
- for (let i = segments.length - 1; i >= 0; i--) {
200
- const segment = segments[i];
201
- if (!segment.jsonStatusFiles) continue;
202
-
203
- const exact = segment.jsonStatusFiles[statusStr];
204
- if (exact) {
205
- return { file: exact, status, kind: 'exact', segmentIndex: i };
206
- }
207
-
208
- const category = segment.jsonStatusFiles[categoryKey];
209
- if (category) {
210
- return { file: category, status, kind: 'category', segmentIndex: i };
211
- }
212
- }
213
-
214
- return null;
215
- }
@@ -1,56 +0,0 @@
1
- /**
2
- * PageDenyBoundary — catches DenySignal from page components server-side.
3
- *
4
- * Wraps a server component page by calling it as an async function (the same
5
- * thing React Flight does internally). If the page throws DenySignal, the
6
- * boundary catches it and renders the matching deny page as a normal element.
7
- * No error reaches React Flight — the Flight stream is clean, SSR succeeds,
8
- * and the entire request uses a single renderToReadableStream call.
9
- *
10
- * Client component pages ('use client') are NOT wrapped — they can't call
11
- * deny() (server-only API) and must go through createElement normally.
12
- *
13
- * See design/04-authorization.md, design/10-error-handling.md, TIM-666.
14
- */
15
-
16
- import { DenySignal } from './primitives.js';
17
- import type { DenyPageEntry } from './deny-page-resolver.js';
18
- import { renderMatchingDenyPage, setDenyStatus } from './deny-page-resolver.js';
19
- import { withSpan } from './tracing.js';
20
-
21
- /**
22
- * Async server component that wraps a page call with DenySignal catching.
23
- *
24
- * Calls the page component as an async function, awaits it, and catches
25
- * DenySignal. On catch, renders the deny page in-tree. On success, returns
26
- * the page's rendered output normally.
27
- */
28
- export async function PageDenyBoundary({
29
- Page,
30
- route,
31
- denyPages,
32
- }: {
33
- /** The page server component function. */
34
- Page: (...args: unknown[]) => unknown;
35
- /** Route path for OTEL tracing. */
36
- route: string;
37
- /** Deny page fallback chain from the segment chain. */
38
- denyPages: DenyPageEntry[];
39
- }): Promise<React.ReactElement> {
40
- try {
41
- // Call the page as an async function — same as React Flight does.
42
- // Wrap in OTEL span for tracing (replaces the TracedPage wrapper).
43
- const result = await withSpan('timber.page', { 'timber.route': route }, () => Page({}));
44
- return result as React.ReactElement;
45
- } catch (error: unknown) {
46
- if (error instanceof DenySignal) {
47
- const denyElement = renderMatchingDenyPage(denyPages, error.status, error.data);
48
- if (denyElement) {
49
- setDenyStatus(error.status);
50
- return denyElement;
51
- }
52
- }
53
- // Non-deny errors (RedirectSignal, runtime errors) propagate normally.
54
- throw error;
55
- }
56
- }