@timber-js/app 0.2.0-alpha.20 → 0.2.0-alpha.201

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 (1332) hide show
  1. package/LICENSE +8 -0
  2. package/agent-skill.md +346 -0
  3. package/bin/timber.mjs +15 -1
  4. package/dist/_chunks/actions-HUdJADAD.js +345 -0
  5. package/dist/_chunks/actions-HUdJADAD.js.map +1 -0
  6. package/dist/_chunks/als-registry-C6kcfprT.js +41 -0
  7. package/dist/_chunks/als-registry-C6kcfprT.js.map +1 -0
  8. package/dist/_chunks/als-slots-BEEIPKYm.js +26 -0
  9. package/dist/_chunks/als-slots-BEEIPKYm.js.map +1 -0
  10. package/dist/_chunks/base-path-DaQrzbez.js +80 -0
  11. package/dist/_chunks/base-path-DaQrzbez.js.map +1 -0
  12. package/dist/_chunks/build-manifest-DWppEdLB.js +86 -0
  13. package/dist/_chunks/build-manifest-DWppEdLB.js.map +1 -0
  14. package/dist/_chunks/build-output-helper-9dqCv1pZ.js +370 -0
  15. package/dist/_chunks/build-output-helper-9dqCv1pZ.js.map +1 -0
  16. package/dist/_chunks/cache-api-CAPbZTga.js +1149 -0
  17. package/dist/_chunks/cache-api-CAPbZTga.js.map +1 -0
  18. package/dist/_chunks/canonicalize-CgHoscYO.js +66 -0
  19. package/dist/_chunks/canonicalize-CgHoscYO.js.map +1 -0
  20. package/dist/_chunks/chains-CBNA0Ozj.js +412 -0
  21. package/dist/_chunks/chains-CBNA0Ozj.js.map +1 -0
  22. package/dist/_chunks/cli-check-BzMGuIH6.js +293 -0
  23. package/dist/_chunks/cli-check-BzMGuIH6.js.map +1 -0
  24. package/dist/_chunks/cli-schema-sync-DnXqcIIj.js +299 -0
  25. package/dist/_chunks/cli-schema-sync-DnXqcIIj.js.map +1 -0
  26. package/dist/_chunks/cloudflare-DxX1SU0g.js +1290 -0
  27. package/dist/_chunks/cloudflare-DxX1SU0g.js.map +1 -0
  28. package/dist/_chunks/codec-registry-oOUxugz3.js +21 -0
  29. package/dist/_chunks/codec-registry-oOUxugz3.js.map +1 -0
  30. package/dist/_chunks/convention-lint-DHOFvX5s.js +803 -0
  31. package/dist/_chunks/convention-lint-DHOFvX5s.js.map +1 -0
  32. package/dist/_chunks/csp-nonce-hOGniaG4.js +227 -0
  33. package/dist/_chunks/csp-nonce-hOGniaG4.js.map +1 -0
  34. package/dist/_chunks/dev-server-DioP7tkQ.js +2288 -0
  35. package/dist/_chunks/dev-server-DioP7tkQ.js.map +1 -0
  36. package/dist/_chunks/dist-DtrJyBbw.js +386 -0
  37. package/dist/_chunks/dist-DtrJyBbw.js.map +1 -0
  38. package/dist/_chunks/error-boundary-BQKxl6EX.js +1044 -0
  39. package/dist/_chunks/error-boundary-BQKxl6EX.js.map +1 -0
  40. package/dist/_chunks/fast-hash-C-tVYrLb.js +41 -0
  41. package/dist/_chunks/fast-hash-C-tVYrLb.js.map +1 -0
  42. package/dist/_chunks/file-cache-Dw6BJPG7.js +458 -0
  43. package/dist/_chunks/file-cache-Dw6BJPG7.js.map +1 -0
  44. package/dist/_chunks/format-BKclgVbk.js +14 -0
  45. package/dist/_chunks/format-BKclgVbk.js.map +1 -0
  46. package/dist/_chunks/fs-identity-D7vb6GdI.js +208 -0
  47. package/dist/_chunks/fs-identity-D7vb6GdI.js.map +1 -0
  48. package/dist/_chunks/graph-cache-Cv3njEH8.js +304 -0
  49. package/dist/_chunks/graph-cache-Cv3njEH8.js.map +1 -0
  50. package/dist/_chunks/href-validation-BIrxavIy.js +213 -0
  51. package/dist/_chunks/href-validation-BIrxavIy.js.map +1 -0
  52. package/dist/_chunks/json-lossy-check-ClNvBM_3.js +63 -0
  53. package/dist/_chunks/json-lossy-check-ClNvBM_3.js.map +1 -0
  54. package/dist/_chunks/live-graph-VjHFF5EV.js +150 -0
  55. package/dist/_chunks/live-graph-VjHFF5EV.js.map +1 -0
  56. package/dist/_chunks/logger-DqJ2VoAY.js +1476 -0
  57. package/dist/_chunks/logger-DqJ2VoAY.js.map +1 -0
  58. package/dist/_chunks/{metadata-routes-Cjmvi3rQ.js → metadata-routes-DSDjM_hJ.js} +71 -27
  59. package/dist/_chunks/metadata-routes-DSDjM_hJ.js.map +1 -0
  60. package/dist/_chunks/navigation-context-D0TU0Jog.js +135 -0
  61. package/dist/_chunks/navigation-context-D0TU0Jog.js.map +1 -0
  62. package/dist/_chunks/navigation-root-mHSK9psY.js +126 -0
  63. package/dist/_chunks/navigation-root-mHSK9psY.js.map +1 -0
  64. package/dist/_chunks/param-value-C8TNYchQ.js +66 -0
  65. package/dist/_chunks/param-value-C8TNYchQ.js.map +1 -0
  66. package/dist/_chunks/plugin-context-8idfR3UZ.js +321 -0
  67. package/dist/_chunks/plugin-context-8idfR3UZ.js.map +1 -0
  68. package/dist/_chunks/poison-rules-DoEhbqaY.js +110 -0
  69. package/dist/_chunks/poison-rules-DoEhbqaY.js.map +1 -0
  70. package/dist/_chunks/poison-scan-lEbz4pQE.js +101 -0
  71. package/dist/_chunks/poison-scan-lEbz4pQE.js.map +1 -0
  72. package/dist/_chunks/purge-store-Byr8XOjU.js +14 -0
  73. package/dist/_chunks/purge-store-Byr8XOjU.js.map +1 -0
  74. package/dist/_chunks/resolve-schema-CBR6Lm4i.js +50 -0
  75. package/dist/_chunks/resolve-schema-CBR6Lm4i.js.map +1 -0
  76. package/dist/_chunks/rolldown-runtime-D7D4PA-g.js +13 -0
  77. package/dist/_chunks/rsc-cache-key-ClUiXQnK.js +243 -0
  78. package/dist/_chunks/rsc-cache-key-ClUiXQnK.js.map +1 -0
  79. package/dist/_chunks/rsc-media-type-DDc7duTD.js +61 -0
  80. package/dist/_chunks/rsc-media-type-DDc7duTD.js.map +1 -0
  81. package/dist/_chunks/rsc-payload-path-B_LBodc2.js +48 -0
  82. package/dist/_chunks/rsc-payload-path-B_LBodc2.js.map +1 -0
  83. package/dist/_chunks/scan-BoP17W3w.js +140 -0
  84. package/dist/_chunks/scan-BoP17W3w.js.map +1 -0
  85. package/dist/_chunks/scanner-B_tnqFcF.js +1671 -0
  86. package/dist/_chunks/scanner-B_tnqFcF.js.map +1 -0
  87. package/dist/_chunks/schema-bridge-C83xa9lT.js +199 -0
  88. package/dist/_chunks/schema-bridge-C83xa9lT.js.map +1 -0
  89. package/dist/_chunks/segment-classify-C539Pa2O.js +197 -0
  90. package/dist/_chunks/segment-classify-C539Pa2O.js.map +1 -0
  91. package/dist/_chunks/segment-context-D9_89u34.js +34 -0
  92. package/dist/_chunks/segment-context-D9_89u34.js.map +1 -0
  93. package/dist/_chunks/segment-keys-D5hu1hz4.js +62 -0
  94. package/dist/_chunks/segment-keys-D5hu1hz4.js.map +1 -0
  95. package/dist/_chunks/singleflight-2lUWfcAk.js +54 -0
  96. package/dist/_chunks/singleflight-2lUWfcAk.js.map +1 -0
  97. package/dist/_chunks/sizeof-lXffQ1Vr.js +35 -0
  98. package/dist/_chunks/sizeof-lXffQ1Vr.js.map +1 -0
  99. package/dist/_chunks/{ssr-data-MjmprTmO.js → ssr-data-D6T6Y3ef.js} +3 -31
  100. package/dist/_chunks/ssr-data-D6T6Y3ef.js.map +1 -0
  101. package/dist/_chunks/state-FippDgxN.js +52 -0
  102. package/dist/_chunks/state-FippDgxN.js.map +1 -0
  103. package/dist/_chunks/status-page-marker-DwQBrLBz.js +496 -0
  104. package/dist/_chunks/status-page-marker-DwQBrLBz.js.map +1 -0
  105. package/dist/_chunks/tree-match-CdbvYTBz.js +122 -0
  106. package/dist/_chunks/tree-match-CdbvYTBz.js.map +1 -0
  107. package/dist/_chunks/use-query-states-I3JMng6J.js +226 -0
  108. package/dist/_chunks/use-query-states-I3JMng6J.js.map +1 -0
  109. package/dist/_chunks/walkers-Cm3PC5JT.js +144 -0
  110. package/dist/_chunks/walkers-Cm3PC5JT.js.map +1 -0
  111. package/dist/adapters/build-output-helper.d.ts +72 -0
  112. package/dist/adapters/build-output-helper.d.ts.map +1 -0
  113. package/dist/adapters/cloudflare-dev.d.ts +109 -0
  114. package/dist/adapters/cloudflare-dev.d.ts.map +1 -0
  115. package/dist/adapters/cloudflare-dev.js +74 -0
  116. package/dist/adapters/cloudflare-dev.js.map +1 -0
  117. package/dist/adapters/cloudflare-kv-cache.d.ts +65 -0
  118. package/dist/adapters/cloudflare-kv-cache.d.ts.map +1 -0
  119. package/dist/adapters/cloudflare-kv-cache.js +123 -0
  120. package/dist/adapters/cloudflare-kv-cache.js.map +1 -0
  121. package/dist/adapters/cloudflare.d.ts +200 -22
  122. package/dist/adapters/cloudflare.d.ts.map +1 -1
  123. package/dist/adapters/cloudflare.js +2 -188
  124. package/dist/adapters/compress-module.d.ts +17 -4
  125. package/dist/adapters/compress-module.d.ts.map +1 -1
  126. package/dist/adapters/fs-identity.d.ts +64 -0
  127. package/dist/adapters/fs-identity.d.ts.map +1 -0
  128. package/dist/adapters/nitro-presets.d.ts +37 -0
  129. package/dist/adapters/nitro-presets.d.ts.map +1 -0
  130. package/dist/adapters/nitro-preview.d.ts +32 -0
  131. package/dist/adapters/nitro-preview.d.ts.map +1 -0
  132. package/dist/adapters/nitro.d.ts +66 -37
  133. package/dist/adapters/nitro.d.ts.map +1 -1
  134. package/dist/adapters/nitro.js +457 -300
  135. package/dist/adapters/nitro.js.map +1 -1
  136. package/dist/adapters/shared.d.ts +62 -0
  137. package/dist/adapters/shared.d.ts.map +1 -0
  138. package/dist/adapters/types.d.ts +28 -6
  139. package/dist/adapters/types.d.ts.map +1 -1
  140. package/dist/analyze/chains.d.ts +124 -0
  141. package/dist/analyze/chains.d.ts.map +1 -0
  142. package/dist/analyze/classify.d.ts +150 -0
  143. package/dist/analyze/classify.d.ts.map +1 -0
  144. package/dist/analyze/crawl-entry.d.ts +17 -0
  145. package/dist/analyze/crawl-entry.d.ts.map +1 -0
  146. package/dist/analyze/crawl-entry.js +313 -0
  147. package/dist/analyze/crawl-entry.js.map +1 -0
  148. package/dist/analyze/crawl.d.ts +134 -0
  149. package/dist/analyze/crawl.d.ts.map +1 -0
  150. package/dist/analyze/graph-cache.d.ts +104 -0
  151. package/dist/analyze/graph-cache.d.ts.map +1 -0
  152. package/dist/analyze/graph-command.d.ts +43 -0
  153. package/dist/analyze/graph-command.d.ts.map +1 -0
  154. package/dist/analyze/graph-command.js +472 -0
  155. package/dist/analyze/graph-command.js.map +1 -0
  156. package/dist/analyze/live-graph.d.ts +81 -0
  157. package/dist/analyze/live-graph.d.ts.map +1 -0
  158. package/dist/analyze/poison-rules.d.ts +72 -0
  159. package/dist/analyze/poison-rules.d.ts.map +1 -0
  160. package/dist/analyze/poison-scan.d.ts +48 -0
  161. package/dist/analyze/poison-scan.d.ts.map +1 -0
  162. package/dist/analyze/scan.d.ts +73 -0
  163. package/dist/analyze/scan.d.ts.map +1 -0
  164. package/dist/cache/cache-api.d.ts +48 -0
  165. package/dist/cache/cache-api.d.ts.map +1 -0
  166. package/dist/cache/fast-hash.d.ts +5 -0
  167. package/dist/cache/fast-hash.d.ts.map +1 -1
  168. package/dist/cache/handler-store.d.ts +33 -0
  169. package/dist/cache/handler-store.d.ts.map +1 -0
  170. package/dist/cache/index.d.ts +32 -9
  171. package/dist/cache/index.d.ts.map +1 -1
  172. package/dist/cache/index.js +3 -326
  173. package/dist/cache/invalidation-epoch.d.ts +43 -0
  174. package/dist/cache/invalidation-epoch.d.ts.map +1 -0
  175. package/dist/cache/json-lossy-check.d.ts +11 -0
  176. package/dist/cache/json-lossy-check.d.ts.map +1 -0
  177. package/dist/cache/redis-handler.d.ts +141 -9
  178. package/dist/cache/redis-handler.d.ts.map +1 -1
  179. package/dist/cache/singleflight.d.ts +21 -2
  180. package/dist/cache/singleflight.d.ts.map +1 -1
  181. package/dist/cache/sizeof.d.ts +22 -0
  182. package/dist/cache/sizeof.d.ts.map +1 -0
  183. package/dist/cache/stable-stringify.d.ts +9 -0
  184. package/dist/cache/stable-stringify.d.ts.map +1 -1
  185. package/dist/cache/store.d.ts +53 -0
  186. package/dist/cache/store.d.ts.map +1 -0
  187. package/dist/cache/stores/cloudflare-kv.d.ts +38 -0
  188. package/dist/cache/stores/cloudflare-kv.d.ts.map +1 -0
  189. package/dist/cache/stores/cloudflare-kv.js +29 -0
  190. package/dist/cache/stores/cloudflare-kv.js.map +1 -0
  191. package/dist/cache/stores/memory.d.ts +42 -0
  192. package/dist/cache/stores/memory.d.ts.map +1 -0
  193. package/dist/cache/stores/memory.js +90 -0
  194. package/dist/cache/stores/memory.js.map +1 -0
  195. package/dist/cache/stores/redis.d.ts +69 -0
  196. package/dist/cache/stores/redis.d.ts.map +1 -0
  197. package/dist/cache/stores/redis.js +35 -0
  198. package/dist/cache/stores/redis.js.map +1 -0
  199. package/dist/cache/stores/vercel.d.ts +36 -0
  200. package/dist/cache/stores/vercel.d.ts.map +1 -0
  201. package/dist/cache/stores/vercel.js +33 -0
  202. package/dist/cache/stores/vercel.js.map +1 -0
  203. package/dist/cache/tag-aware-handler.d.ts +52 -0
  204. package/dist/cache/tag-aware-handler.d.ts.map +1 -0
  205. package/dist/cache/timber-cache.d.ts +21 -11
  206. package/dist/cache/timber-cache.d.ts.map +1 -1
  207. package/dist/cdn/cloudflare-purge.d.ts +23 -0
  208. package/dist/cdn/cloudflare-purge.d.ts.map +1 -0
  209. package/dist/cdn/cloudflare-purge.js +30 -0
  210. package/dist/cdn/cloudflare-purge.js.map +1 -0
  211. package/dist/cdn/fastly-purge.d.ts +25 -0
  212. package/dist/cdn/fastly-purge.d.ts.map +1 -0
  213. package/dist/cdn/fastly-purge.js +33 -0
  214. package/dist/cdn/fastly-purge.js.map +1 -0
  215. package/dist/cdn/headers.d.ts +97 -0
  216. package/dist/cdn/headers.d.ts.map +1 -0
  217. package/dist/cdn/index.d.ts +5 -0
  218. package/dist/cdn/index.d.ts.map +1 -0
  219. package/dist/cdn/index.js +94 -0
  220. package/dist/cdn/index.js.map +1 -0
  221. package/dist/cdn/purge-store.d.ts +23 -0
  222. package/dist/cdn/purge-store.d.ts.map +1 -0
  223. package/dist/cdn/workers-cache-purge.d.ts +20 -0
  224. package/dist/cdn/workers-cache-purge.d.ts.map +1 -0
  225. package/dist/cdn/workers-cache-purge.js +35 -0
  226. package/dist/cdn/workers-cache-purge.js.map +1 -0
  227. package/dist/cli-check.d.ts +163 -0
  228. package/dist/cli-check.d.ts.map +1 -0
  229. package/dist/cli-schema-sync.d.ts +59 -0
  230. package/dist/cli-schema-sync.d.ts.map +1 -0
  231. package/dist/cli.d.ts +81 -9
  232. package/dist/cli.d.ts.map +1 -1
  233. package/dist/cli.js +216 -51
  234. package/dist/cli.js.map +1 -1
  235. package/dist/client/browser-dev.d.ts +37 -1
  236. package/dist/client/browser-dev.d.ts.map +1 -1
  237. package/dist/client/browser-entry/action-dispatch.d.ts +19 -0
  238. package/dist/client/browser-entry/action-dispatch.d.ts.map +1 -0
  239. package/dist/client/browser-entry/action-queue.d.ts +63 -0
  240. package/dist/client/browser-entry/action-queue.d.ts.map +1 -0
  241. package/dist/client/browser-entry/hmr.d.ts +21 -0
  242. package/dist/client/browser-entry/hmr.d.ts.map +1 -0
  243. package/dist/client/browser-entry/hydrate.d.ts +63 -0
  244. package/dist/client/browser-entry/hydrate.d.ts.map +1 -0
  245. package/dist/client/browser-entry/index.d.ts +30 -0
  246. package/dist/client/browser-entry/index.d.ts.map +1 -0
  247. package/dist/client/browser-entry/post-hydration.d.ts +29 -0
  248. package/dist/client/browser-entry/post-hydration.d.ts.map +1 -0
  249. package/dist/client/browser-entry/router-init.d.ts +46 -0
  250. package/dist/client/browser-entry/router-init.d.ts.map +1 -0
  251. package/dist/client/browser-entry/rsc-stream.d.ts +32 -0
  252. package/dist/client/browser-entry/rsc-stream.d.ts.map +1 -0
  253. package/dist/client/browser-entry/scroll.d.ts +28 -0
  254. package/dist/client/browser-entry/scroll.d.ts.map +1 -0
  255. package/dist/client/deny-last-resort.d.ts +29 -0
  256. package/dist/client/deny-last-resort.d.ts.map +1 -0
  257. package/dist/client/error-boundary.d.ts +55 -7
  258. package/dist/client/error-boundary.d.ts.map +1 -1
  259. package/dist/client/error-boundary.js +2 -126
  260. package/dist/client/error-reconstituter.d.ts +61 -0
  261. package/dist/client/error-reconstituter.d.ts.map +1 -0
  262. package/dist/client/form.d.ts +16 -27
  263. package/dist/client/form.d.ts.map +1 -1
  264. package/dist/client/global-context.d.ts +15 -0
  265. package/dist/client/global-context.d.ts.map +1 -0
  266. package/dist/client/history.d.ts +50 -9
  267. package/dist/client/history.d.ts.map +1 -1
  268. package/dist/client/index.d.ts +20 -33
  269. package/dist/client/index.d.ts.map +1 -1
  270. package/dist/client/index.js +323 -1148
  271. package/dist/client/index.js.map +1 -1
  272. package/dist/client/internal.d.ts +20 -0
  273. package/dist/client/internal.d.ts.map +1 -0
  274. package/dist/client/internal.js +818 -0
  275. package/dist/client/internal.js.map +1 -0
  276. package/dist/client/link.d.ts +63 -60
  277. package/dist/client/link.d.ts.map +1 -1
  278. package/dist/client/location-search.d.ts +12 -0
  279. package/dist/client/location-search.d.ts.map +1 -0
  280. package/dist/client/navigation-api.d.ts +121 -0
  281. package/dist/client/navigation-api.d.ts.map +1 -0
  282. package/dist/client/navigation-commit.d.ts +98 -0
  283. package/dist/client/navigation-commit.d.ts.map +1 -0
  284. package/dist/client/navigation-context.d.ts +51 -31
  285. package/dist/client/navigation-context.d.ts.map +1 -1
  286. package/dist/client/navigation-root.d.ts +98 -0
  287. package/dist/client/navigation-root.d.ts.map +1 -0
  288. package/dist/client/navigation-transition.d.ts +187 -0
  289. package/dist/client/navigation-transition.d.ts.map +1 -0
  290. package/dist/client/nuqs-adapter.d.ts +1 -1
  291. package/dist/client/nuqs-adapter.d.ts.map +1 -1
  292. package/dist/client/params-context.d.ts +81 -0
  293. package/dist/client/params-context.d.ts.map +1 -0
  294. package/dist/client/react-root.d.ts +44 -0
  295. package/dist/client/react-root.d.ts.map +1 -0
  296. package/dist/client/router-effects.d.ts +130 -0
  297. package/dist/client/router-effects.d.ts.map +1 -0
  298. package/dist/client/router-lifecycle.d.ts +98 -0
  299. package/dist/client/router-lifecycle.d.ts.map +1 -0
  300. package/dist/client/router-pipeline.d.ts +87 -0
  301. package/dist/client/router-pipeline.d.ts.map +1 -0
  302. package/dist/client/router-ref.d.ts +2 -2
  303. package/dist/client/router-ref.d.ts.map +1 -1
  304. package/dist/client/router-skew.d.ts +21 -0
  305. package/dist/client/router-skew.d.ts.map +1 -0
  306. package/dist/client/router-types.d.ts +272 -0
  307. package/dist/client/router-types.d.ts.map +1 -0
  308. package/dist/client/router.d.ts +1 -97
  309. package/dist/client/router.d.ts.map +1 -1
  310. package/dist/client/rsc-fetch.d.ts +104 -26
  311. package/dist/client/rsc-fetch.d.ts.map +1 -1
  312. package/dist/client/segment-cache.d.ts +161 -25
  313. package/dist/client/segment-cache.d.ts.map +1 -1
  314. package/dist/client/segment-context.d.ts.map +1 -1
  315. package/dist/client/segment-outlet.d.ts +68 -0
  316. package/dist/client/segment-outlet.d.ts.map +1 -0
  317. package/dist/client/segment-update-context.d.ts +15 -0
  318. package/dist/client/segment-update-context.d.ts.map +1 -0
  319. package/dist/client/shallow-url.d.ts +10 -0
  320. package/dist/client/shallow-url.d.ts.map +1 -0
  321. package/dist/client/slot-content-cache-context.d.ts +35 -0
  322. package/dist/client/slot-content-cache-context.d.ts.map +1 -0
  323. package/dist/client/slot-context.d.ts +31 -0
  324. package/dist/client/slot-context.d.ts.map +1 -0
  325. package/dist/client/slot-outlet.d.ts +16 -0
  326. package/dist/client/slot-outlet.d.ts.map +1 -0
  327. package/dist/client/slot-provider.d.ts +25 -0
  328. package/dist/client/slot-provider.d.ts.map +1 -0
  329. package/dist/client/ssr-data.d.ts +29 -7
  330. package/dist/client/ssr-data.d.ts.map +1 -1
  331. package/dist/client/stale-client.d.ts +69 -0
  332. package/dist/client/stale-client.d.ts.map +1 -0
  333. package/dist/client/state.d.ts +19 -8
  334. package/dist/client/state.d.ts.map +1 -1
  335. package/dist/client/status-page-marker.d.ts +25 -0
  336. package/dist/client/status-page-marker.d.ts.map +1 -0
  337. package/dist/client/top-loader.d.ts +7 -6
  338. package/dist/client/top-loader.d.ts.map +1 -1
  339. package/dist/client/unload-guard.d.ts +5 -0
  340. package/dist/client/unload-guard.d.ts.map +1 -1
  341. package/dist/client/use-cookie.d.ts +12 -0
  342. package/dist/client/use-cookie.d.ts.map +1 -1
  343. package/dist/client/use-link-status.d.ts +5 -5
  344. package/dist/client/use-link-status.d.ts.map +1 -1
  345. package/dist/client/use-pathname.d.ts +13 -11
  346. package/dist/client/use-pathname.d.ts.map +1 -1
  347. package/dist/client/use-pending-navigation.d.ts +23 -0
  348. package/dist/client/use-pending-navigation.d.ts.map +1 -0
  349. package/dist/client/use-query-states.d.ts +10 -4
  350. package/dist/client/use-query-states.d.ts.map +1 -1
  351. package/dist/client/use-router.d.ts +2 -2
  352. package/dist/client/use-router.d.ts.map +1 -1
  353. package/dist/client/use-search-params.d.ts +15 -8
  354. package/dist/client/use-search-params.d.ts.map +1 -1
  355. package/dist/client/use-segment-params.d.ts +55 -0
  356. package/dist/client/use-segment-params.d.ts.map +1 -0
  357. package/dist/codec.d.ts +69 -0
  358. package/dist/codec.d.ts.map +1 -0
  359. package/dist/codec.js +76 -0
  360. package/dist/codec.js.map +1 -0
  361. package/dist/config-types.d.ts +322 -0
  362. package/dist/config-types.d.ts.map +1 -0
  363. package/dist/config-validation.d.ts +51 -0
  364. package/dist/config-validation.d.ts.map +1 -0
  365. package/dist/cookies/define-cookie.d.ts +58 -25
  366. package/dist/cookies/define-cookie.d.ts.map +1 -1
  367. package/dist/cookies/index.d.ts +3 -2
  368. package/dist/cookies/index.d.ts.map +1 -1
  369. package/dist/cookies/index.js +256 -36
  370. package/dist/cookies/index.js.map +1 -1
  371. package/dist/cookies/json-cookie.d.ts +64 -0
  372. package/dist/cookies/json-cookie.d.ts.map +1 -0
  373. package/dist/cookies/validation.d.ts +34 -0
  374. package/dist/cookies/validation.d.ts.map +1 -0
  375. package/dist/dev-tools/404-page.d.ts +50 -0
  376. package/dist/dev-tools/404-page.d.ts.map +1 -0
  377. package/dist/dev-tools/browser-logs.d.ts +40 -0
  378. package/dist/dev-tools/browser-logs.d.ts.map +1 -0
  379. package/dist/dev-tools/debug-channel.d.ts +55 -0
  380. package/dist/dev-tools/debug-channel.d.ts.map +1 -0
  381. package/dist/dev-tools/dev-page-shell.d.ts +78 -0
  382. package/dist/dev-tools/dev-page-shell.d.ts.map +1 -0
  383. package/dist/dev-tools/error-page.d.ts +32 -0
  384. package/dist/dev-tools/error-page.d.ts.map +1 -0
  385. package/dist/dev-tools/holding-server.d.ts +46 -0
  386. package/dist/dev-tools/holding-server.d.ts.map +1 -0
  387. package/dist/dev-tools/hydration-overlay.d.ts +11 -0
  388. package/dist/dev-tools/hydration-overlay.d.ts.map +1 -0
  389. package/dist/dev-tools/index.d.ts +31 -0
  390. package/dist/dev-tools/index.d.ts.map +1 -0
  391. package/dist/dev-tools/instrumentation.d.ts +59 -0
  392. package/dist/dev-tools/instrumentation.d.ts.map +1 -0
  393. package/dist/{server/dev-logger.d.ts → dev-tools/logger.d.ts} +1 -1
  394. package/dist/dev-tools/logger.d.ts.map +1 -0
  395. package/dist/{plugins/dev-logs.d.ts → dev-tools/logs.d.ts} +17 -3
  396. package/dist/dev-tools/logs.d.ts.map +1 -0
  397. package/dist/dev-tools/overlay.d.ts +91 -0
  398. package/dist/dev-tools/overlay.d.ts.map +1 -0
  399. package/dist/dev-tools/stack-classifier.d.ts +34 -0
  400. package/dist/dev-tools/stack-classifier.d.ts.map +1 -0
  401. package/dist/dev-tools/terminal.d.ts +28 -0
  402. package/dist/dev-tools/terminal.d.ts.map +1 -0
  403. package/dist/fonts/ast-walk.d.ts +68 -0
  404. package/dist/fonts/ast-walk.d.ts.map +1 -0
  405. package/dist/fonts/ast.d.ts +112 -8
  406. package/dist/fonts/ast.d.ts.map +1 -1
  407. package/dist/fonts/bundle.d.ts +50 -0
  408. package/dist/fonts/bundle.d.ts.map +1 -0
  409. package/dist/fonts/css.d.ts +1 -1
  410. package/dist/fonts/dev-middleware.d.ts +22 -0
  411. package/dist/fonts/dev-middleware.d.ts.map +1 -0
  412. package/dist/fonts/fallbacks.d.ts +0 -7
  413. package/dist/fonts/fallbacks.d.ts.map +1 -1
  414. package/dist/fonts/google.d.ts +5 -3
  415. package/dist/fonts/google.d.ts.map +1 -1
  416. package/dist/fonts/local.d.ts +5 -5
  417. package/dist/fonts/local.d.ts.map +1 -1
  418. package/dist/fonts/paths.d.ts +43 -0
  419. package/dist/fonts/paths.d.ts.map +1 -0
  420. package/dist/fonts/pipeline.d.ts +177 -0
  421. package/dist/fonts/pipeline.d.ts.map +1 -0
  422. package/dist/fonts/transform.d.ts +82 -0
  423. package/dist/fonts/transform.d.ts.map +1 -0
  424. package/dist/fonts/types.d.ts +47 -1
  425. package/dist/fonts/types.d.ts.map +1 -1
  426. package/dist/fonts/virtual-modules.d.ts +77 -0
  427. package/dist/fonts/virtual-modules.d.ts.map +1 -0
  428. package/dist/index.d.ts +35 -181
  429. package/dist/index.d.ts.map +1 -1
  430. package/dist/index.js +8462 -14279
  431. package/dist/index.js.map +1 -1
  432. package/dist/params/codec-registry.d.ts +26 -0
  433. package/dist/params/codec-registry.d.ts.map +1 -0
  434. package/dist/params/define-schema.d.ts +81 -0
  435. package/dist/params/define-schema.d.ts.map +1 -0
  436. package/dist/params/index.d.ts +5 -0
  437. package/dist/params/index.d.ts.map +1 -0
  438. package/dist/params/index.js +34 -0
  439. package/dist/params/index.js.map +1 -0
  440. package/dist/params/resolve-schema.d.ts +34 -0
  441. package/dist/params/resolve-schema.d.ts.map +1 -0
  442. package/dist/plugin-context.d.ts +276 -0
  443. package/dist/plugin-context.d.ts.map +1 -0
  444. package/dist/plugins/adapter-build.d.ts +21 -1
  445. package/dist/plugins/adapter-build.d.ts.map +1 -1
  446. package/dist/plugins/build-manifest.d.ts +7 -3
  447. package/dist/plugins/build-manifest.d.ts.map +1 -1
  448. package/dist/plugins/build-report.d.ts +47 -10
  449. package/dist/plugins/build-report.d.ts.map +1 -1
  450. package/dist/plugins/cache.d.ts +64 -0
  451. package/dist/plugins/cache.d.ts.map +1 -0
  452. package/dist/plugins/callsite-ast.d.ts +117 -0
  453. package/dist/plugins/callsite-ast.d.ts.map +1 -0
  454. package/dist/plugins/callsite-jsx.d.ts +35 -0
  455. package/dist/plugins/callsite-jsx.d.ts.map +1 -0
  456. package/dist/plugins/chunks.d.ts +11 -4
  457. package/dist/plugins/chunks.d.ts.map +1 -1
  458. package/dist/plugins/client-chunks.d.ts +40 -0
  459. package/dist/plugins/client-chunks.d.ts.map +1 -0
  460. package/dist/plugins/cloudflare-wasm.d.ts +21 -0
  461. package/dist/plugins/cloudflare-wasm.d.ts.map +1 -0
  462. package/dist/plugins/content.d.ts +1 -1
  463. package/dist/plugins/content.d.ts.map +1 -1
  464. package/dist/plugins/dev-discovery.d.ts +123 -0
  465. package/dist/plugins/dev-discovery.d.ts.map +1 -0
  466. package/dist/plugins/dev-server.d.ts +24 -1
  467. package/dist/plugins/dev-server.d.ts.map +1 -1
  468. package/dist/plugins/entries.d.ts +28 -4
  469. package/dist/plugins/entries.d.ts.map +1 -1
  470. package/dist/plugins/fonts.d.ts +16 -73
  471. package/dist/plugins/fonts.d.ts.map +1 -1
  472. package/dist/plugins/graph-endpoint.d.ts +112 -0
  473. package/dist/plugins/graph-endpoint.d.ts.map +1 -0
  474. package/dist/plugins/mdx.d.ts +18 -5
  475. package/dist/plugins/mdx.d.ts.map +1 -1
  476. package/dist/plugins/prebuilt-capture.d.ts +60 -0
  477. package/dist/plugins/prebuilt-capture.d.ts.map +1 -0
  478. package/dist/plugins/prebuilt-options-analysis.d.ts +40 -0
  479. package/dist/plugins/prebuilt-options-analysis.d.ts.map +1 -0
  480. package/dist/plugins/prebuilt.d.ts +82 -0
  481. package/dist/plugins/prebuilt.d.ts.map +1 -0
  482. package/dist/plugins/prerender-sugar.d.ts +39 -0
  483. package/dist/plugins/prerender-sugar.d.ts.map +1 -0
  484. package/dist/plugins/request-dep/analysis.d.ts +106 -0
  485. package/dist/plugins/request-dep/analysis.d.ts.map +1 -0
  486. package/dist/plugins/request-dep/index.d.ts +75 -0
  487. package/dist/plugins/request-dep/index.d.ts.map +1 -0
  488. package/dist/plugins/request-dep/origin.d.ts +61 -0
  489. package/dist/plugins/request-dep/origin.d.ts.map +1 -0
  490. package/dist/plugins/routing.d.ts +1 -1
  491. package/dist/plugins/routing.d.ts.map +1 -1
  492. package/dist/plugins/server-bundle.d.ts.map +1 -1
  493. package/dist/plugins/shims.d.ts +29 -5
  494. package/dist/plugins/shims.d.ts.map +1 -1
  495. package/dist/plugins/static-build.d.ts +218 -21
  496. package/dist/plugins/static-build.d.ts.map +1 -1
  497. package/dist/routing/codegen-shared.d.ts +26 -0
  498. package/dist/routing/codegen-shared.d.ts.map +1 -0
  499. package/dist/routing/codegen-types.d.ts +61 -0
  500. package/dist/routing/codegen-types.d.ts.map +1 -0
  501. package/dist/routing/codegen-write.d.ts +51 -0
  502. package/dist/routing/codegen-write.d.ts.map +1 -0
  503. package/dist/routing/codegen.d.ts +8 -3
  504. package/dist/routing/codegen.d.ts.map +1 -1
  505. package/dist/routing/collision-probe.d.ts +104 -0
  506. package/dist/routing/collision-probe.d.ts.map +1 -0
  507. package/dist/routing/collision-spaces.d.ts +26 -0
  508. package/dist/routing/collision-spaces.d.ts.map +1 -0
  509. package/dist/routing/convention-lint.d.ts +55 -0
  510. package/dist/routing/convention-lint.d.ts.map +1 -0
  511. package/dist/routing/export-detect.d.ts +72 -0
  512. package/dist/routing/export-detect.d.ts.map +1 -0
  513. package/dist/routing/file-cache.d.ts +8 -0
  514. package/dist/routing/file-cache.d.ts.map +1 -0
  515. package/dist/routing/index.d.ts +13 -7
  516. package/dist/routing/index.d.ts.map +1 -1
  517. package/dist/routing/index.js +5 -2
  518. package/dist/routing/interception-overlap.d.ts +35 -0
  519. package/dist/routing/interception-overlap.d.ts.map +1 -0
  520. package/dist/routing/interception.d.ts +234 -10
  521. package/dist/routing/interception.d.ts.map +1 -1
  522. package/dist/routing/link-codegen.d.ts +105 -0
  523. package/dist/routing/link-codegen.d.ts.map +1 -0
  524. package/dist/routing/manifest-codegen.d.ts +26 -0
  525. package/dist/routing/manifest-codegen.d.ts.map +1 -0
  526. package/dist/routing/scanner.d.ts +14 -10
  527. package/dist/routing/scanner.d.ts.map +1 -1
  528. package/dist/routing/schema-validation.d.ts +35 -0
  529. package/dist/routing/schema-validation.d.ts.map +1 -0
  530. package/dist/routing/segment-classify.d.ts +114 -0
  531. package/dist/routing/segment-classify.d.ts.map +1 -0
  532. package/dist/routing/segment-codegen.d.ts +38 -0
  533. package/dist/routing/segment-codegen.d.ts.map +1 -0
  534. package/dist/routing/segment-keys.d.ts +118 -0
  535. package/dist/routing/segment-keys.d.ts.map +1 -0
  536. package/dist/routing/slot-placement.d.ts +48 -0
  537. package/dist/routing/slot-placement.d.ts.map +1 -0
  538. package/dist/routing/types.d.ts +74 -26
  539. package/dist/routing/types.d.ts.map +1 -1
  540. package/dist/routing/walkers.d.ts +57 -0
  541. package/dist/routing/walkers.d.ts.map +1 -0
  542. package/dist/rsc-runtime/rsc.d.ts +1 -1
  543. package/dist/rsc-runtime/rsc.d.ts.map +1 -1
  544. package/dist/rsc-runtime/ssr.d.ts +14 -0
  545. package/dist/rsc-runtime/ssr.d.ts.map +1 -1
  546. package/dist/rsc-runtime/transforms.d.ts +13 -0
  547. package/dist/rsc-runtime/transforms.d.ts.map +1 -0
  548. package/dist/schema-bridge.d.ts +145 -0
  549. package/dist/schema-bridge.d.ts.map +1 -0
  550. package/dist/search-params/define.d.ts +262 -0
  551. package/dist/search-params/define.d.ts.map +1 -0
  552. package/dist/search-params/index.d.ts +3 -7
  553. package/dist/search-params/index.d.ts.map +1 -1
  554. package/dist/search-params/index.js +179 -360
  555. package/dist/search-params/index.js.map +1 -1
  556. package/dist/search-params/parse-total.d.ts +81 -0
  557. package/dist/search-params/parse-total.d.ts.map +1 -0
  558. package/dist/search-params/serialize-equal.d.ts +9 -0
  559. package/dist/search-params/serialize-equal.d.ts.map +1 -0
  560. package/dist/search-params/wrappers.d.ts +76 -0
  561. package/dist/search-params/wrappers.d.ts.map +1 -0
  562. package/dist/server/access-gate.d.ts +98 -10
  563. package/dist/server/access-gate.d.ts.map +1 -1
  564. package/dist/server/action-client.d.ts +42 -7
  565. package/dist/server/action-client.d.ts.map +1 -1
  566. package/dist/server/action-encryption.d.ts +76 -0
  567. package/dist/server/action-encryption.d.ts.map +1 -0
  568. package/dist/server/action-handler.d.ts +39 -5
  569. package/dist/server/action-handler.d.ts.map +1 -1
  570. package/dist/server/actions.d.ts +29 -35
  571. package/dist/server/actions.d.ts.map +1 -1
  572. package/dist/server/als-registry.d.ts +117 -13
  573. package/dist/server/als-registry.d.ts.map +1 -1
  574. package/dist/server/asset-headers.d.ts +8 -18
  575. package/dist/server/asset-headers.d.ts.map +1 -1
  576. package/dist/server/body-limits.d.ts.map +1 -1
  577. package/dist/server/build-manifest.d.ts +25 -30
  578. package/dist/server/build-manifest.d.ts.map +1 -1
  579. package/dist/server/canonicalize.d.ts +10 -0
  580. package/dist/server/canonicalize.d.ts.map +1 -1
  581. package/dist/server/chain-url-parts.d.ts +82 -0
  582. package/dist/server/chain-url-parts.d.ts.map +1 -0
  583. package/dist/server/children-interception.d.ts +49 -0
  584. package/dist/server/children-interception.d.ts.map +1 -0
  585. package/dist/server/coalesce-tick.d.ts +40 -0
  586. package/dist/server/coalesce-tick.d.ts.map +1 -0
  587. package/dist/server/compress.d.ts.map +1 -1
  588. package/dist/server/cookie-context.d.ts +170 -0
  589. package/dist/server/cookie-context.d.ts.map +1 -0
  590. package/dist/server/cookie-parsing.d.ts +65 -0
  591. package/dist/server/cookie-parsing.d.ts.map +1 -0
  592. package/dist/server/csp-nonce.d.ts +45 -0
  593. package/dist/server/csp-nonce.d.ts.map +1 -0
  594. package/dist/server/csrf.d.ts +3 -2
  595. package/dist/server/csrf.d.ts.map +1 -1
  596. package/dist/server/default-logger.d.ts +22 -0
  597. package/dist/server/default-logger.d.ts.map +1 -0
  598. package/dist/server/default-status-page.d.ts +45 -0
  599. package/dist/server/default-status-page.d.ts.map +1 -0
  600. package/dist/server/deny-boundary.d.ts +251 -0
  601. package/dist/server/deny-boundary.d.ts.map +1 -0
  602. package/dist/server/deny-renderer.d.ts +20 -10
  603. package/dist/server/deny-renderer.d.ts.map +1 -1
  604. package/dist/server/dev-source-map.d.ts +22 -0
  605. package/dist/server/dev-source-map.d.ts.map +1 -0
  606. package/dist/server/early-hints-sender.d.ts.map +1 -1
  607. package/dist/server/early-hints.d.ts +14 -12
  608. package/dist/server/early-hints.d.ts.map +1 -1
  609. package/dist/server/error-boundary-wrapper.d.ts +94 -10
  610. package/dist/server/error-boundary-wrapper.d.ts.map +1 -1
  611. package/dist/server/error-response-headers.d.ts +3 -0
  612. package/dist/server/error-response-headers.d.ts.map +1 -0
  613. package/dist/server/fallback-error.d.ts +12 -7
  614. package/dist/server/fallback-error.d.ts.map +1 -1
  615. package/dist/server/flight-injection-state.d.ts +66 -0
  616. package/dist/server/flight-injection-state.d.ts.map +1 -0
  617. package/dist/server/flight-scripts.d.ts +45 -0
  618. package/dist/server/flight-scripts.d.ts.map +1 -0
  619. package/dist/server/form-data.d.ts +41 -0
  620. package/dist/server/form-data.d.ts.map +1 -1
  621. package/dist/server/form-flash.d.ts +1 -1
  622. package/dist/server/head-response.d.ts +35 -0
  623. package/dist/server/head-response.d.ts.map +1 -0
  624. package/dist/server/html-injector-core.d.ts +257 -0
  625. package/dist/server/html-injector-core.d.ts.map +1 -0
  626. package/dist/server/html-injectors.d.ts +84 -42
  627. package/dist/server/html-injectors.d.ts.map +1 -1
  628. package/dist/server/index.d.ts +18 -54
  629. package/dist/server/index.d.ts.map +1 -1
  630. package/dist/server/index.js +195 -2922
  631. package/dist/server/index.js.map +1 -1
  632. package/dist/server/instrumentation.d.ts +1 -1
  633. package/dist/server/internal.d.ts +50 -0
  634. package/dist/server/internal.d.ts.map +1 -0
  635. package/dist/server/internal.js +3859 -0
  636. package/dist/server/internal.js.map +1 -0
  637. package/dist/server/logger.d.ts +39 -7
  638. package/dist/server/logger.d.ts.map +1 -1
  639. package/dist/server/metadata-collector.d.ts +71 -0
  640. package/dist/server/metadata-collector.d.ts.map +1 -0
  641. package/dist/server/metadata-platform.d.ts +2 -2
  642. package/dist/server/metadata-render.d.ts +2 -2
  643. package/dist/server/metadata-render.d.ts.map +1 -1
  644. package/dist/server/metadata-routes.d.ts +60 -11
  645. package/dist/server/metadata-routes.d.ts.map +1 -1
  646. package/dist/server/metadata-social.d.ts +2 -2
  647. package/dist/server/metadata.d.ts +10 -2
  648. package/dist/server/metadata.d.ts.map +1 -1
  649. package/dist/server/middleware-runner.d.ts +20 -5
  650. package/dist/server/middleware-runner.d.ts.map +1 -1
  651. package/dist/server/node-stream-transforms.d.ts +105 -0
  652. package/dist/server/node-stream-transforms.d.ts.map +1 -0
  653. package/dist/server/nuqs-ssr-provider.d.ts +7 -3
  654. package/dist/server/nuqs-ssr-provider.d.ts.map +1 -1
  655. package/dist/server/param-coercion.d.ts +78 -0
  656. package/dist/server/param-coercion.d.ts.map +1 -0
  657. package/dist/server/pipeline-helpers.d.ts +77 -0
  658. package/dist/server/pipeline-helpers.d.ts.map +1 -0
  659. package/dist/server/pipeline-interception.d.ts +59 -9
  660. package/dist/server/pipeline-interception.d.ts.map +1 -1
  661. package/dist/server/pipeline-metadata.d.ts +7 -1
  662. package/dist/server/pipeline-metadata.d.ts.map +1 -1
  663. package/dist/server/pipeline-outcome.d.ts +49 -0
  664. package/dist/server/pipeline-outcome.d.ts.map +1 -0
  665. package/dist/server/pipeline-phases.d.ts +70 -0
  666. package/dist/server/pipeline-phases.d.ts.map +1 -0
  667. package/dist/server/pipeline.d.ts +161 -20
  668. package/dist/server/pipeline.d.ts.map +1 -1
  669. package/dist/server/port-resolution.d.ts +31 -0
  670. package/dist/server/port-resolution.d.ts.map +1 -0
  671. package/dist/server/prebuilt/cache-key.d.ts +63 -0
  672. package/dist/server/prebuilt/cache-key.d.ts.map +1 -0
  673. package/dist/server/prebuilt/capture-state.d.ts +57 -0
  674. package/dist/server/prebuilt/capture-state.d.ts.map +1 -0
  675. package/dist/server/prebuilt/key-discipline.d.ts +52 -0
  676. package/dist/server/prebuilt/key-discipline.d.ts.map +1 -0
  677. package/dist/server/prebuilt/manifest-tag-index.d.ts +27 -0
  678. package/dist/server/prebuilt/manifest-tag-index.d.ts.map +1 -0
  679. package/dist/server/prebuilt/overlay.d.ts +100 -0
  680. package/dist/server/prebuilt/overlay.d.ts.map +1 -0
  681. package/dist/server/prebuilt/payload-source.d.ts +79 -0
  682. package/dist/server/prebuilt/payload-source.d.ts.map +1 -0
  683. package/dist/server/prebuilt/slots.d.ts +99 -0
  684. package/dist/server/prebuilt/slots.d.ts.map +1 -0
  685. package/dist/server/prebuilt/synthetic-store.d.ts +67 -0
  686. package/dist/server/prebuilt/synthetic-store.d.ts.map +1 -0
  687. package/dist/server/prebuilt-builder.d.ts +121 -0
  688. package/dist/server/prebuilt-builder.d.ts.map +1 -0
  689. package/dist/server/prebuilt-runtime.d.ts +111 -0
  690. package/dist/server/prebuilt-runtime.d.ts.map +1 -0
  691. package/dist/server/primitives.d.ts +131 -45
  692. package/dist/server/primitives.d.ts.map +1 -1
  693. package/dist/server/publish-params.d.ts +33 -0
  694. package/dist/server/publish-params.d.ts.map +1 -0
  695. package/dist/server/render-timeout.d.ts +51 -0
  696. package/dist/server/render-timeout.d.ts.map +1 -0
  697. package/dist/server/render-utils.d.ts +26 -0
  698. package/dist/server/render-utils.d.ts.map +1 -0
  699. package/dist/server/request-context.d.ts +111 -107
  700. package/dist/server/request-context.d.ts.map +1 -1
  701. package/dist/server/request-dep.d.ts +15 -0
  702. package/dist/server/request-dep.d.ts.map +1 -0
  703. package/dist/server/response-cache-policy.d.ts +3 -0
  704. package/dist/server/response-cache-policy.d.ts.map +1 -0
  705. package/dist/server/route-element-builder.d.ts +57 -30
  706. package/dist/server/route-element-builder.d.ts.map +1 -1
  707. package/dist/server/route-element-helpers.d.ts +12 -0
  708. package/dist/server/route-element-helpers.d.ts.map +1 -0
  709. package/dist/server/route-handler.d.ts +1 -1
  710. package/dist/server/route-handler.d.ts.map +1 -1
  711. package/dist/server/route-matcher.d.ts +40 -38
  712. package/dist/server/route-matcher.d.ts.map +1 -1
  713. package/dist/server/route-module-loader.d.ts +37 -0
  714. package/dist/server/route-module-loader.d.ts.map +1 -0
  715. package/dist/server/rsc-cache-key-guard.d.ts +78 -0
  716. package/dist/server/rsc-cache-key-guard.d.ts.map +1 -0
  717. package/dist/server/rsc-entry/action-middleware-runner.d.ts +66 -0
  718. package/dist/server/rsc-entry/action-middleware-runner.d.ts.map +1 -0
  719. package/dist/server/rsc-entry/api-handler.d.ts +12 -3
  720. package/dist/server/rsc-entry/api-handler.d.ts.map +1 -1
  721. package/dist/server/rsc-entry/deny-fallback.d.ts +29 -0
  722. package/dist/server/rsc-entry/deny-fallback.d.ts.map +1 -0
  723. package/dist/server/rsc-entry/error-renderer.d.ts +34 -13
  724. package/dist/server/rsc-entry/error-renderer.d.ts.map +1 -1
  725. package/dist/server/rsc-entry/helpers.d.ts +47 -51
  726. package/dist/server/rsc-entry/helpers.d.ts.map +1 -1
  727. package/dist/server/rsc-entry/index.d.ts +40 -6
  728. package/dist/server/rsc-entry/index.d.ts.map +1 -1
  729. package/dist/server/rsc-entry/render-route.d.ts +52 -0
  730. package/dist/server/rsc-entry/render-route.d.ts.map +1 -0
  731. package/dist/server/rsc-entry/revalidate-renderer.d.ts +108 -0
  732. package/dist/server/rsc-entry/revalidate-renderer.d.ts.map +1 -0
  733. package/dist/server/rsc-entry/rsc-payload.d.ts +26 -6
  734. package/dist/server/rsc-entry/rsc-payload.d.ts.map +1 -1
  735. package/dist/server/rsc-entry/rsc-stream.d.ts +36 -3
  736. package/dist/server/rsc-entry/rsc-stream.d.ts.map +1 -1
  737. package/dist/server/rsc-entry/ssr-bridge.d.ts +5 -1
  738. package/dist/server/rsc-entry/ssr-bridge.d.ts.map +1 -1
  739. package/dist/server/rsc-entry/ssr-renderer.d.ts +38 -5
  740. package/dist/server/rsc-entry/ssr-renderer.d.ts.map +1 -1
  741. package/dist/server/rsc-entry/wrap-action-dispatch.d.ts +89 -0
  742. package/dist/server/rsc-entry/wrap-action-dispatch.d.ts.map +1 -0
  743. package/dist/server/rsc-error-envelope.d.ts +11 -0
  744. package/dist/server/rsc-error-envelope.d.ts.map +1 -0
  745. package/dist/server/safe-load.d.ts +46 -0
  746. package/dist/server/safe-load.d.ts.map +1 -0
  747. package/dist/server/sensitive-fields.d.ts +74 -0
  748. package/dist/server/sensitive-fields.d.ts.map +1 -0
  749. package/dist/server/sitemap-generator.d.ts +130 -0
  750. package/dist/server/sitemap-generator.d.ts.map +1 -0
  751. package/dist/server/sitemap-handler.d.ts +22 -0
  752. package/dist/server/sitemap-handler.d.ts.map +1 -0
  753. package/dist/server/skippable-prefix.d.ts +29 -0
  754. package/dist/server/skippable-prefix.d.ts.map +1 -0
  755. package/dist/server/slot-interception.d.ts +80 -0
  756. package/dist/server/slot-interception.d.ts.map +1 -0
  757. package/dist/server/slot-resolver.d.ts +137 -7
  758. package/dist/server/slot-resolver.d.ts.map +1 -1
  759. package/dist/server/slot-subtree-contain.d.ts +54 -0
  760. package/dist/server/slot-subtree-contain.d.ts.map +1 -0
  761. package/dist/server/ssr-bridge-types.d.ts +160 -0
  762. package/dist/server/ssr-bridge-types.d.ts.map +1 -0
  763. package/dist/server/ssr-entry.d.ts +1 -43
  764. package/dist/server/ssr-entry.d.ts.map +1 -1
  765. package/dist/server/ssr-render.d.ts +69 -22
  766. package/dist/server/ssr-render.d.ts.map +1 -1
  767. package/dist/server/ssr-wrappers.d.ts +93 -0
  768. package/dist/server/ssr-wrappers.d.ts.map +1 -0
  769. package/dist/server/state-tree-diff.d.ts +44 -9
  770. package/dist/server/state-tree-diff.d.ts.map +1 -1
  771. package/dist/server/static-generator.d.ts +112 -0
  772. package/dist/server/static-generator.d.ts.map +1 -0
  773. package/dist/server/static-not-found.d.ts +52 -0
  774. package/dist/server/static-not-found.d.ts.map +1 -0
  775. package/dist/server/status-code-resolver.d.ts +26 -15
  776. package/dist/server/status-code-resolver.d.ts.map +1 -1
  777. package/dist/server/stream-utils.d.ts +47 -0
  778. package/dist/server/stream-utils.d.ts.map +1 -0
  779. package/dist/server/tracing.d.ts +46 -11
  780. package/dist/server/tracing.d.ts.map +1 -1
  781. package/dist/server/tree-match.d.ts +49 -0
  782. package/dist/server/tree-match.d.ts.map +1 -0
  783. package/dist/server/types.d.ts +88 -7
  784. package/dist/server/types.d.ts.map +1 -1
  785. package/dist/server/utils/element-type.d.ts +50 -0
  786. package/dist/server/utils/element-type.d.ts.map +1 -0
  787. package/dist/server/utils/escape-html.d.ts +14 -0
  788. package/dist/server/utils/escape-html.d.ts.map +1 -0
  789. package/dist/server/version-skew.d.ts +61 -0
  790. package/dist/server/version-skew.d.ts.map +1 -0
  791. package/dist/server/workers-cache-bridge.d.ts +26 -0
  792. package/dist/server/workers-cache-bridge.d.ts.map +1 -0
  793. package/dist/shared/als-slots.d.ts +42 -0
  794. package/dist/shared/als-slots.d.ts.map +1 -0
  795. package/dist/shared/base-path.d.ts +56 -0
  796. package/dist/shared/base-path.d.ts.map +1 -0
  797. package/dist/shared/href-validation.d.ts +49 -0
  798. package/dist/shared/href-validation.d.ts.map +1 -0
  799. package/dist/shared/merge-search-params.d.ts +22 -0
  800. package/dist/shared/merge-search-params.d.ts.map +1 -0
  801. package/dist/shared/param-value.d.ts +104 -0
  802. package/dist/shared/param-value.d.ts.map +1 -0
  803. package/dist/shared/payload-root.d.ts +109 -0
  804. package/dist/shared/payload-root.d.ts.map +1 -0
  805. package/dist/shared/redirect-type.d.ts +17 -0
  806. package/dist/shared/redirect-type.d.ts.map +1 -0
  807. package/dist/shared/rsc-cache-key.d.ts +163 -0
  808. package/dist/shared/rsc-cache-key.d.ts.map +1 -0
  809. package/dist/shared/rsc-error-envelope.d.ts +16 -0
  810. package/dist/shared/rsc-error-envelope.d.ts.map +1 -0
  811. package/dist/shared/rsc-manifest.d.ts +28 -0
  812. package/dist/shared/rsc-manifest.d.ts.map +1 -0
  813. package/dist/shared/rsc-media-type.d.ts +52 -0
  814. package/dist/shared/rsc-media-type.d.ts.map +1 -0
  815. package/dist/shared/rsc-payload-path.d.ts +42 -0
  816. package/dist/shared/rsc-payload-path.d.ts.map +1 -0
  817. package/dist/shared/segment-info.d.ts +66 -0
  818. package/dist/shared/segment-info.d.ts.map +1 -0
  819. package/dist/shared/slot-params.d.ts +52 -0
  820. package/dist/shared/slot-params.d.ts.map +1 -0
  821. package/dist/shared/static-platform-files.d.ts +71 -0
  822. package/dist/shared/static-platform-files.d.ts.map +1 -0
  823. package/dist/shared/status-reason-phrase.d.ts +26 -0
  824. package/dist/shared/status-reason-phrase.d.ts.map +1 -0
  825. package/dist/shims/font-google.d.ts +1 -1
  826. package/dist/shims/font-google.d.ts.map +1 -1
  827. package/dist/shims/font-google.js +42 -0
  828. package/dist/shims/font-google.js.map +1 -0
  829. package/dist/shims/font-local.d.ts +26 -0
  830. package/dist/shims/font-local.d.ts.map +1 -0
  831. package/dist/shims/font-local.js +20 -0
  832. package/dist/shims/font-local.js.map +1 -0
  833. package/dist/shims/headers.d.ts +53 -1
  834. package/dist/shims/headers.d.ts.map +1 -1
  835. package/dist/shims/image.d.ts +120 -120
  836. package/dist/shims/image.d.ts.map +1 -1
  837. package/dist/shims/navigation-client.d.ts +25 -12
  838. package/dist/shims/navigation-client.d.ts.map +1 -1
  839. package/dist/shims/navigation-rsc.d.ts +21 -0
  840. package/dist/shims/navigation-rsc.d.ts.map +1 -0
  841. package/dist/shims/navigation.d.ts +10 -5
  842. package/dist/shims/navigation.d.ts.map +1 -1
  843. package/dist/utils/state-machine.d.ts +80 -0
  844. package/dist/utils/state-machine.d.ts.map +1 -0
  845. package/docs/api/30-api-server.mdx +236 -0
  846. package/docs/api/31-api-client.mdx +167 -0
  847. package/docs/api/32-api-cache.mdx +311 -0
  848. package/docs/api/33-api-search-params.mdx +176 -0
  849. package/docs/api/34-api-config.mdx +329 -0
  850. package/docs/api/35-api-typescript.mdx +91 -0
  851. package/docs/api/36-cli.mdx +192 -0
  852. package/docs/learn/00-introduction.mdx +109 -0
  853. package/docs/learn/01-quick-start.mdx +94 -0
  854. package/docs/learn/02-pages-and-layouts.mdx +147 -0
  855. package/docs/learn/03-fetching-data.mdx +211 -0
  856. package/docs/learn/04-access-control.mdx +115 -0
  857. package/docs/learn/05-the-flush-point.mdx +175 -0
  858. package/docs/learn/06-typed-params.mdx +275 -0
  859. package/docs/learn/07-typed-routes.mdx +108 -0
  860. package/docs/learn/08-forms-and-actions.mdx +146 -0
  861. package/docs/learn/09-streaming.mdx +140 -0
  862. package/docs/learn/10-caching.mdx +252 -0
  863. package/docs/learn/11-middleware.mdx +158 -0
  864. package/docs/learn/12-error-handling.mdx +187 -0
  865. package/docs/learn/13-deploying.mdx +287 -0
  866. package/llms.txt +55 -0
  867. package/package.json +116 -30
  868. package/src/adapters/build-output-helper.ts +351 -0
  869. package/src/adapters/cloudflare-dev.ts +183 -0
  870. package/src/adapters/cloudflare-kv-cache.ts +207 -0
  871. package/src/adapters/cloudflare.ts +747 -130
  872. package/src/adapters/compress-module.ts +101 -88
  873. package/src/adapters/fs-identity.ts +156 -0
  874. package/src/adapters/nitro-presets.ts +139 -0
  875. package/src/adapters/nitro-preview.ts +340 -0
  876. package/src/adapters/nitro.ts +249 -426
  877. package/src/adapters/raw-imports.d.ts +5 -0
  878. package/src/adapters/shared.ts +274 -0
  879. package/src/adapters/types.ts +28 -7
  880. package/src/adapters/wrangler.d.ts +7 -0
  881. package/src/analyze/chains.ts +411 -0
  882. package/src/analyze/classify.ts +258 -0
  883. package/src/analyze/crawl-entry.ts +68 -0
  884. package/src/analyze/crawl.ts +500 -0
  885. package/src/analyze/graph-cache.ts +332 -0
  886. package/src/analyze/graph-command.ts +762 -0
  887. package/src/analyze/live-graph.ts +232 -0
  888. package/src/analyze/poison-rules.ts +165 -0
  889. package/src/analyze/poison-scan.ts +162 -0
  890. package/src/analyze/scan.ts +149 -0
  891. package/src/cache/cache-api.ts +107 -0
  892. package/src/cache/fast-hash.ts +5 -0
  893. package/src/cache/handler-store.ts +76 -0
  894. package/src/cache/index.ts +115 -22
  895. package/src/cache/invalidation-epoch.ts +93 -0
  896. package/src/cache/json-lossy-check.ts +75 -0
  897. package/src/cache/redis-handler.ts +198 -20
  898. package/src/cache/singleflight.ts +69 -6
  899. package/src/cache/sizeof.ts +33 -0
  900. package/src/cache/stable-stringify.ts +65 -2
  901. package/src/cache/store.ts +71 -0
  902. package/src/cache/stores/cloudflare-kv.ts +52 -0
  903. package/src/cache/stores/memory.ts +125 -0
  904. package/src/cache/stores/redis.ts +97 -0
  905. package/src/cache/stores/vercel.ts +59 -0
  906. package/src/cache/tag-aware-handler.ts +237 -0
  907. package/src/cache/timber-cache.ts +165 -40
  908. package/src/cdn/cloudflare-purge.ts +50 -0
  909. package/src/cdn/fastly-purge.ts +63 -0
  910. package/src/cdn/headers.ts +153 -0
  911. package/src/cdn/index.ts +23 -0
  912. package/src/cdn/purge-store.ts +34 -0
  913. package/src/cdn/workers-cache-purge.ts +34 -0
  914. package/src/cli-check.ts +507 -0
  915. package/src/cli-schema-sync.ts +401 -0
  916. package/src/cli.ts +323 -62
  917. package/src/client/browser-dev.ts +157 -2
  918. package/src/client/browser-entry/action-dispatch.ts +209 -0
  919. package/src/client/browser-entry/action-queue.ts +152 -0
  920. package/src/client/browser-entry/hmr.ts +70 -0
  921. package/src/client/browser-entry/hydrate.ts +148 -0
  922. package/src/client/browser-entry/index.ts +131 -0
  923. package/src/client/browser-entry/post-hydration.ts +123 -0
  924. package/src/client/browser-entry/router-init.ts +418 -0
  925. package/src/client/browser-entry/rsc-stream.ts +222 -0
  926. package/src/client/browser-entry/scroll.ts +50 -0
  927. package/src/client/deny-last-resort.tsx +54 -0
  928. package/src/client/error-boundary.tsx +289 -39
  929. package/src/client/error-reconstituter.tsx +79 -0
  930. package/src/client/form.tsx +36 -32
  931. package/src/client/global-context.ts +31 -0
  932. package/src/client/history.ts +81 -10
  933. package/src/client/index.ts +89 -53
  934. package/src/client/internal.ts +59 -0
  935. package/src/client/link.tsx +439 -151
  936. package/src/client/location-search.ts +15 -0
  937. package/src/client/navigation-api.ts +347 -0
  938. package/src/client/navigation-commit.ts +295 -0
  939. package/src/client/navigation-context.ts +67 -98
  940. package/src/client/navigation-root.tsx +224 -0
  941. package/src/client/navigation-transition.ts +327 -0
  942. package/src/client/nuqs-adapter.tsx +21 -9
  943. package/src/client/params-context.ts +187 -0
  944. package/src/client/react-root.ts +72 -0
  945. package/src/client/router-effects.ts +228 -0
  946. package/src/client/router-lifecycle.ts +354 -0
  947. package/src/client/router-pipeline.ts +490 -0
  948. package/src/client/router-ref.ts +3 -3
  949. package/src/client/router-skew.ts +30 -0
  950. package/src/client/router-types.ts +294 -0
  951. package/src/client/router.ts +435 -421
  952. package/src/client/rsc-fetch.ts +512 -73
  953. package/src/client/segment-cache.ts +327 -40
  954. package/src/client/segment-context.ts +7 -4
  955. package/src/client/segment-outlet.tsx +96 -0
  956. package/src/client/segment-update-context.ts +23 -0
  957. package/src/client/shallow-url.ts +22 -0
  958. package/src/client/slot-content-cache-context.ts +43 -0
  959. package/src/client/slot-context.ts +50 -0
  960. package/src/client/slot-outlet.tsx +22 -0
  961. package/src/client/slot-provider.tsx +32 -0
  962. package/src/client/ssr-data.ts +30 -9
  963. package/src/client/stale-client.ts +191 -0
  964. package/src/client/state.ts +29 -15
  965. package/src/client/status-page-marker.tsx +32 -0
  966. package/src/client/top-loader.tsx +13 -10
  967. package/src/client/unload-guard.ts +35 -3
  968. package/src/client/use-cookie.ts +70 -18
  969. package/src/client/use-link-status.ts +7 -7
  970. package/src/client/use-pathname.ts +22 -31
  971. package/src/client/use-pending-navigation.ts +40 -0
  972. package/src/client/use-query-states.ts +206 -36
  973. package/src/client/use-router.ts +6 -3
  974. package/src/client/use-search-params.ts +38 -49
  975. package/src/client/use-segment-params.ts +69 -0
  976. package/src/client/use-selected-layout-segment.ts +2 -2
  977. package/src/codec.ts +149 -0
  978. package/src/config-types.ts +322 -0
  979. package/src/config-validation.ts +347 -0
  980. package/src/cookies/define-cookie.ts +222 -53
  981. package/src/cookies/index.ts +13 -2
  982. package/src/cookies/json-cookie.ts +105 -0
  983. package/src/cookies/validation.ts +192 -0
  984. package/src/dev-tools/404-page.ts +286 -0
  985. package/src/dev-tools/browser-logs.ts +55 -0
  986. package/src/dev-tools/debug-channel.ts +151 -0
  987. package/src/dev-tools/dev-page-shell.ts +260 -0
  988. package/src/dev-tools/error-page.ts +331 -0
  989. package/src/dev-tools/holding-server.ts +185 -0
  990. package/src/dev-tools/hydration-overlay.ts +158 -0
  991. package/src/dev-tools/index.ts +83 -0
  992. package/src/dev-tools/instrumentation.ts +213 -0
  993. package/src/{server/dev-logger.ts → dev-tools/logger.ts} +33 -51
  994. package/src/{plugins/dev-logs.ts → dev-tools/logs.ts} +122 -26
  995. package/src/dev-tools/overlay.ts +469 -0
  996. package/src/dev-tools/stack-classifier.ts +75 -0
  997. package/src/dev-tools/terminal.ts +182 -0
  998. package/src/fonts/ast-walk.ts +235 -0
  999. package/src/fonts/ast.ts +479 -128
  1000. package/src/fonts/bundle.ts +138 -0
  1001. package/src/fonts/css.ts +1 -1
  1002. package/src/fonts/dev-middleware.ts +85 -0
  1003. package/src/fonts/fallbacks.ts +0 -23
  1004. package/src/fonts/google.ts +101 -19
  1005. package/src/fonts/local.ts +12 -11
  1006. package/src/fonts/paths.ts +58 -0
  1007. package/src/fonts/pipeline.ts +348 -0
  1008. package/src/fonts/transform.ts +311 -0
  1009. package/src/fonts/types.ts +52 -1
  1010. package/src/fonts/virtual-modules.ts +179 -0
  1011. package/src/index.ts +482 -377
  1012. package/src/params/codec-registry.ts +34 -0
  1013. package/src/params/define-schema.ts +115 -0
  1014. package/src/params/index.ts +17 -0
  1015. package/src/params/resolve-schema.ts +84 -0
  1016. package/src/plugin-context.ts +503 -0
  1017. package/src/plugins/adapter-build.ts +229 -7
  1018. package/src/plugins/build-manifest.ts +201 -26
  1019. package/src/plugins/build-report.ts +259 -47
  1020. package/src/plugins/cache.ts +243 -0
  1021. package/src/plugins/callsite-ast.ts +472 -0
  1022. package/src/plugins/callsite-jsx.ts +243 -0
  1023. package/src/plugins/chunks.ts +74 -5
  1024. package/src/plugins/client-chunks.ts +185 -0
  1025. package/src/plugins/cloudflare-wasm.ts +141 -0
  1026. package/src/plugins/content.ts +5 -1
  1027. package/src/plugins/dev-discovery.ts +218 -0
  1028. package/src/plugins/dev-server.ts +418 -94
  1029. package/src/plugins/entries.ts +141 -16
  1030. package/src/plugins/fonts.ts +234 -659
  1031. package/src/plugins/graph-endpoint.ts +532 -0
  1032. package/src/plugins/mdx.ts +108 -35
  1033. package/src/plugins/prebuilt-capture.ts +217 -0
  1034. package/src/plugins/prebuilt-options-analysis.ts +175 -0
  1035. package/src/plugins/prebuilt.ts +655 -0
  1036. package/src/plugins/prerender-sugar.ts +320 -0
  1037. package/src/plugins/request-dep/analysis.ts +447 -0
  1038. package/src/plugins/request-dep/index.ts +376 -0
  1039. package/src/plugins/request-dep/origin.ts +310 -0
  1040. package/src/plugins/routing.ts +273 -277
  1041. package/src/plugins/server-bundle.ts +99 -14
  1042. package/src/plugins/shims.ts +259 -97
  1043. package/src/plugins/static-build.ts +708 -66
  1044. package/src/react-canary.d.ts +2 -0
  1045. package/src/routing/codegen-shared.ts +39 -0
  1046. package/src/routing/codegen-types.ts +62 -0
  1047. package/src/routing/codegen-write.ts +141 -0
  1048. package/src/routing/codegen.ts +349 -232
  1049. package/src/routing/collision-probe.ts +438 -0
  1050. package/src/routing/collision-spaces.ts +281 -0
  1051. package/src/routing/convention-lint.ts +516 -0
  1052. package/src/routing/export-detect.ts +448 -0
  1053. package/src/routing/file-cache.ts +23 -0
  1054. package/src/routing/index.ts +16 -7
  1055. package/src/routing/interception-overlap.ts +141 -0
  1056. package/src/routing/interception.ts +1044 -67
  1057. package/src/routing/link-codegen.ts +280 -0
  1058. package/src/routing/manifest-codegen.ts +226 -0
  1059. package/src/routing/scanner.ts +408 -223
  1060. package/src/routing/schema-validation.ts +155 -0
  1061. package/src/routing/segment-classify.ts +280 -0
  1062. package/src/routing/segment-codegen.ts +98 -0
  1063. package/src/routing/segment-keys.ts +186 -0
  1064. package/src/routing/slot-placement.ts +97 -0
  1065. package/src/routing/types.ts +75 -26
  1066. package/src/routing/walkers.ts +98 -0
  1067. package/src/rsc-runtime/rsc.ts +9 -0
  1068. package/src/rsc-runtime/ssr.ts +51 -0
  1069. package/src/rsc-runtime/transforms.ts +13 -0
  1070. package/src/rsc-runtime/vendor-types.d.ts +19 -0
  1071. package/src/schema-bridge.ts +380 -0
  1072. package/src/search-params/define.ts +677 -0
  1073. package/src/search-params/index.ts +14 -20
  1074. package/src/search-params/parse-total.ts +91 -0
  1075. package/src/search-params/serialize-equal.ts +14 -0
  1076. package/src/search-params/wrappers.ts +150 -0
  1077. package/src/server/access-gate.tsx +194 -56
  1078. package/src/server/action-client.ts +122 -31
  1079. package/src/server/action-encryption.ts +144 -0
  1080. package/src/server/action-handler.ts +256 -56
  1081. package/src/server/actions.ts +112 -68
  1082. package/src/server/als-registry.ts +160 -21
  1083. package/src/server/asset-headers.ts +15 -37
  1084. package/src/server/body-limits.ts +10 -2
  1085. package/src/server/build-manifest.ts +33 -57
  1086. package/src/server/canonicalize.ts +6 -3
  1087. package/src/server/chain-url-parts.ts +163 -0
  1088. package/src/server/children-interception.ts +115 -0
  1089. package/src/server/coalesce-tick.ts +75 -0
  1090. package/src/server/compress.ts +43 -8
  1091. package/src/server/cookie-context.ts +484 -0
  1092. package/src/server/cookie-parsing.ts +163 -0
  1093. package/src/server/csp-nonce.ts +70 -0
  1094. package/src/server/csrf.ts +39 -6
  1095. package/src/server/default-logger.ts +99 -0
  1096. package/src/server/default-status-page.ts +88 -0
  1097. package/src/server/deny-boundary.ts +515 -0
  1098. package/src/server/deny-renderer.ts +211 -113
  1099. package/src/server/dev-source-map.ts +31 -0
  1100. package/src/server/early-hints-sender.ts +4 -3
  1101. package/src/server/early-hints.ts +39 -29
  1102. package/src/server/error-boundary-wrapper.ts +157 -44
  1103. package/src/server/error-response-headers.ts +18 -0
  1104. package/src/server/fallback-error.ts +79 -102
  1105. package/src/server/flight-injection-state.ts +113 -0
  1106. package/src/server/flight-scripts.ts +67 -0
  1107. package/src/server/form-data.ts +124 -12
  1108. package/src/server/form-flash.ts +2 -2
  1109. package/src/server/head-response.ts +54 -0
  1110. package/src/server/html-injector-core.ts +512 -0
  1111. package/src/server/html-injectors.ts +272 -255
  1112. package/src/server/index.ts +40 -192
  1113. package/src/server/instrumentation.ts +1 -1
  1114. package/src/server/internal.ts +173 -0
  1115. package/src/server/logger.ts +73 -37
  1116. package/src/server/metadata-collector.ts +174 -0
  1117. package/src/server/metadata-platform.ts +2 -2
  1118. package/src/server/metadata-render.ts +30 -8
  1119. package/src/server/metadata-routes.ts +205 -24
  1120. package/src/server/metadata-social.ts +2 -2
  1121. package/src/server/metadata.ts +23 -2
  1122. package/src/server/middleware-runner.ts +32 -5
  1123. package/src/server/node-stream-transforms.ts +323 -0
  1124. package/src/server/nuqs-ssr-provider.tsx +8 -7
  1125. package/src/server/param-coercion.ts +198 -0
  1126. package/src/server/pipeline-helpers.ts +159 -0
  1127. package/src/server/pipeline-interception.ts +109 -33
  1128. package/src/server/pipeline-metadata.ts +15 -1
  1129. package/src/server/pipeline-outcome.ts +218 -0
  1130. package/src/server/pipeline-phases.ts +606 -0
  1131. package/src/server/pipeline.ts +333 -384
  1132. package/src/server/port-resolution.ts +53 -0
  1133. package/src/server/prebuilt/cache-key.ts +299 -0
  1134. package/src/server/prebuilt/capture-state.ts +89 -0
  1135. package/src/server/prebuilt/key-discipline.ts +122 -0
  1136. package/src/server/prebuilt/manifest-tag-index.ts +46 -0
  1137. package/src/server/prebuilt/overlay.ts +256 -0
  1138. package/src/server/prebuilt/payload-source.ts +202 -0
  1139. package/src/server/prebuilt/slots.ts +190 -0
  1140. package/src/server/prebuilt/synthetic-store.ts +122 -0
  1141. package/src/server/prebuilt-builder.ts +804 -0
  1142. package/src/server/prebuilt-runtime.ts +817 -0
  1143. package/src/server/primitives.ts +240 -98
  1144. package/src/server/publish-params.ts +42 -0
  1145. package/src/server/render-timeout.ts +108 -0
  1146. package/src/server/render-utils.ts +35 -0
  1147. package/src/server/request-context.ts +244 -334
  1148. package/src/server/request-dep.ts +37 -0
  1149. package/src/server/response-cache-policy.ts +45 -0
  1150. package/src/server/route-element-builder.ts +508 -355
  1151. package/src/server/route-element-helpers.ts +37 -0
  1152. package/src/server/route-handler.ts +40 -13
  1153. package/src/server/route-matcher.ts +165 -272
  1154. package/src/server/route-module-loader.ts +161 -0
  1155. package/src/server/rsc-cache-key-guard.ts +122 -0
  1156. package/src/server/rsc-entry/action-middleware-runner.ts +174 -0
  1157. package/src/server/rsc-entry/api-handler.ts +78 -34
  1158. package/src/server/rsc-entry/deny-fallback.ts +93 -0
  1159. package/src/server/rsc-entry/error-renderer.ts +341 -91
  1160. package/src/server/rsc-entry/helpers.ts +180 -106
  1161. package/src/server/rsc-entry/index.ts +371 -331
  1162. package/src/server/rsc-entry/render-route.ts +315 -0
  1163. package/src/server/rsc-entry/revalidate-renderer.ts +350 -0
  1164. package/src/server/rsc-entry/rsc-payload.ts +209 -55
  1165. package/src/server/rsc-entry/rsc-stream.ts +154 -26
  1166. package/src/server/rsc-entry/ssr-bridge.ts +18 -5
  1167. package/src/server/rsc-entry/ssr-renderer.ts +317 -60
  1168. package/src/server/rsc-entry/wrap-action-dispatch.ts +186 -0
  1169. package/src/server/rsc-error-envelope.ts +18 -0
  1170. package/src/server/rsc-prop-warnings.ts +1 -1
  1171. package/src/server/safe-load.ts +60 -0
  1172. package/src/server/sensitive-fields.ts +230 -0
  1173. package/src/server/server-only-guard-noop.js +3 -0
  1174. package/src/server/server-timing.ts +1 -1
  1175. package/src/server/sitemap-generator.ts +337 -0
  1176. package/src/server/sitemap-handler.ts +157 -0
  1177. package/src/server/skippable-prefix.ts +172 -0
  1178. package/src/server/slot-interception.ts +168 -0
  1179. package/src/server/slot-resolver.ts +707 -300
  1180. package/src/server/slot-subtree-contain.ts +255 -0
  1181. package/src/server/ssr-bridge-types.ts +165 -0
  1182. package/src/server/ssr-entry.ts +230 -85
  1183. package/src/server/ssr-render.ts +357 -85
  1184. package/src/server/ssr-wrappers.tsx +162 -0
  1185. package/src/server/state-tree-diff.ts +85 -30
  1186. package/src/server/static-generator.ts +715 -0
  1187. package/src/server/static-not-found.ts +134 -0
  1188. package/src/server/status-code-resolver.ts +107 -148
  1189. package/src/server/stream-utils.ts +292 -0
  1190. package/src/server/tracing.ts +128 -16
  1191. package/src/server/tree-match.ts +262 -0
  1192. package/src/server/types.ts +95 -10
  1193. package/src/server/utils/element-type.ts +88 -0
  1194. package/src/server/utils/escape-html.ts +20 -0
  1195. package/src/server/version-skew.ts +104 -0
  1196. package/src/server/waituntil-bridge.ts +1 -1
  1197. package/src/server/workers-cache-bridge.ts +33 -0
  1198. package/src/shared/als-slots.ts +74 -0
  1199. package/src/shared/base-path.ts +80 -0
  1200. package/src/shared/href-validation.ts +159 -0
  1201. package/src/shared/merge-search-params.ts +55 -0
  1202. package/src/shared/param-value.ts +281 -0
  1203. package/src/shared/payload-root.ts +152 -0
  1204. package/src/shared/redirect-type.ts +17 -0
  1205. package/src/shared/rsc-cache-key.ts +269 -0
  1206. package/src/shared/rsc-error-envelope.ts +16 -0
  1207. package/src/shared/rsc-manifest.ts +29 -0
  1208. package/src/shared/rsc-media-type.ts +59 -0
  1209. package/src/shared/rsc-payload-path.ts +45 -0
  1210. package/src/shared/segment-info.ts +67 -0
  1211. package/src/shared/slot-params.ts +109 -0
  1212. package/src/shared/static-platform-files.ts +75 -0
  1213. package/src/shared/status-reason-phrase.ts +61 -0
  1214. package/src/shims/font-google.ts +1 -1
  1215. package/src/shims/font-local.ts +34 -0
  1216. package/src/shims/headers.ts +122 -1
  1217. package/src/shims/navigation-client.ts +36 -32
  1218. package/src/shims/navigation-rsc.ts +47 -0
  1219. package/src/shims/navigation.ts +10 -7
  1220. package/src/utils/state-machine.ts +111 -0
  1221. package/dist/_chunks/als-registry-B7DbZ2hS.js +0 -41
  1222. package/dist/_chunks/als-registry-B7DbZ2hS.js.map +0 -1
  1223. package/dist/_chunks/debug-B3Gypr3D.js +0 -108
  1224. package/dist/_chunks/debug-B3Gypr3D.js.map +0 -1
  1225. package/dist/_chunks/format-RyoGQL74.js +0 -164
  1226. package/dist/_chunks/format-RyoGQL74.js.map +0 -1
  1227. package/dist/_chunks/interception-BOoWmLUA.js +0 -676
  1228. package/dist/_chunks/interception-BOoWmLUA.js.map +0 -1
  1229. package/dist/_chunks/metadata-routes-Cjmvi3rQ.js.map +0 -1
  1230. package/dist/_chunks/request-context-BQUC8PHn.js +0 -330
  1231. package/dist/_chunks/request-context-BQUC8PHn.js.map +0 -1
  1232. package/dist/_chunks/ssr-data-MjmprTmO.js.map +0 -1
  1233. package/dist/_chunks/tracing-CemImE6h.js +0 -187
  1234. package/dist/_chunks/tracing-CemImE6h.js.map +0 -1
  1235. package/dist/_chunks/use-cookie-DX-l1_5E.js +0 -91
  1236. package/dist/_chunks/use-cookie-DX-l1_5E.js.map +0 -1
  1237. package/dist/_chunks/use-query-states-D5KaffOK.js +0 -109
  1238. package/dist/_chunks/use-query-states-D5KaffOK.js.map +0 -1
  1239. package/dist/adapters/cloudflare.js.map +0 -1
  1240. package/dist/cache/index.js.map +0 -1
  1241. package/dist/cache/register-cached-function.d.ts +0 -17
  1242. package/dist/cache/register-cached-function.d.ts.map +0 -1
  1243. package/dist/client/browser-entry.d.ts +0 -21
  1244. package/dist/client/browser-entry.d.ts.map +0 -1
  1245. package/dist/client/error-boundary.js.map +0 -1
  1246. package/dist/client/head.d.ts +0 -16
  1247. package/dist/client/head.d.ts.map +0 -1
  1248. package/dist/client/link-status-provider.d.ts +0 -11
  1249. package/dist/client/link-status-provider.d.ts.map +0 -1
  1250. package/dist/client/segment-merger.d.ts +0 -119
  1251. package/dist/client/segment-merger.d.ts.map +0 -1
  1252. package/dist/client/stale-reload.d.ts +0 -44
  1253. package/dist/client/stale-reload.d.ts.map +0 -1
  1254. package/dist/client/transition-root.d.ts +0 -74
  1255. package/dist/client/transition-root.d.ts.map +0 -1
  1256. package/dist/client/use-navigation-pending.d.ts +0 -26
  1257. package/dist/client/use-navigation-pending.d.ts.map +0 -1
  1258. package/dist/client/use-params.d.ts +0 -92
  1259. package/dist/client/use-params.d.ts.map +0 -1
  1260. package/dist/content/index.d.ts +0 -11
  1261. package/dist/content/index.d.ts.map +0 -1
  1262. package/dist/content/index.js +0 -2
  1263. package/dist/plugins/cache-transform.d.ts +0 -36
  1264. package/dist/plugins/cache-transform.d.ts.map +0 -1
  1265. package/dist/plugins/dev-error-overlay.d.ts +0 -60
  1266. package/dist/plugins/dev-error-overlay.d.ts.map +0 -1
  1267. package/dist/plugins/dev-logs.d.ts.map +0 -1
  1268. package/dist/plugins/dynamic-transform.d.ts +0 -72
  1269. package/dist/plugins/dynamic-transform.d.ts.map +0 -1
  1270. package/dist/plugins/server-action-exports.d.ts +0 -26
  1271. package/dist/plugins/server-action-exports.d.ts.map +0 -1
  1272. package/dist/routing/status-file-lint.d.ts +0 -33
  1273. package/dist/routing/status-file-lint.d.ts.map +0 -1
  1274. package/dist/search-params/analyze.d.ts +0 -54
  1275. package/dist/search-params/analyze.d.ts.map +0 -1
  1276. package/dist/search-params/builtin-codecs.d.ts +0 -105
  1277. package/dist/search-params/builtin-codecs.d.ts.map +0 -1
  1278. package/dist/search-params/codecs.d.ts +0 -53
  1279. package/dist/search-params/codecs.d.ts.map +0 -1
  1280. package/dist/search-params/create.d.ts +0 -106
  1281. package/dist/search-params/create.d.ts.map +0 -1
  1282. package/dist/search-params/registry.d.ts +0 -20
  1283. package/dist/search-params/registry.d.ts.map +0 -1
  1284. package/dist/server/client-module-map.d.ts +0 -47
  1285. package/dist/server/client-module-map.d.ts.map +0 -1
  1286. package/dist/server/dev-fetch-instrumentation.d.ts +0 -22
  1287. package/dist/server/dev-fetch-instrumentation.d.ts.map +0 -1
  1288. package/dist/server/dev-logger.d.ts.map +0 -1
  1289. package/dist/server/dev-span-processor.d.ts +0 -29
  1290. package/dist/server/dev-span-processor.d.ts.map +0 -1
  1291. package/dist/server/dev-warnings.d.ts +0 -129
  1292. package/dist/server/dev-warnings.d.ts.map +0 -1
  1293. package/dist/server/flush.d.ts +0 -74
  1294. package/dist/server/flush.d.ts.map +0 -1
  1295. package/dist/server/manifest-status-resolver.d.ts +0 -58
  1296. package/dist/server/manifest-status-resolver.d.ts.map +0 -1
  1297. package/dist/server/prerender.d.ts +0 -77
  1298. package/dist/server/prerender.d.ts.map +0 -1
  1299. package/dist/server/tree-builder.d.ts +0 -126
  1300. package/dist/server/tree-builder.d.ts.map +0 -1
  1301. package/dist/utils/directive-parser.d.ts +0 -70
  1302. package/dist/utils/directive-parser.d.ts.map +0 -1
  1303. package/src/cache/register-cached-function.ts +0 -103
  1304. package/src/client/browser-entry.ts +0 -678
  1305. package/src/client/head.ts +0 -61
  1306. package/src/client/link-status-provider.tsx +0 -30
  1307. package/src/client/segment-merger.ts +0 -339
  1308. package/src/client/stale-reload.ts +0 -87
  1309. package/src/client/transition-root.tsx +0 -166
  1310. package/src/client/use-navigation-pending.ts +0 -38
  1311. package/src/client/use-params.ts +0 -141
  1312. package/src/content/index.ts +0 -13
  1313. package/src/plugins/cache-transform.ts +0 -199
  1314. package/src/plugins/dev-error-overlay.ts +0 -230
  1315. package/src/plugins/dynamic-transform.ts +0 -161
  1316. package/src/plugins/server-action-exports.ts +0 -220
  1317. package/src/routing/status-file-lint.ts +0 -112
  1318. package/src/search-params/analyze.ts +0 -192
  1319. package/src/search-params/builtin-codecs.ts +0 -228
  1320. package/src/search-params/codecs.ts +0 -153
  1321. package/src/search-params/create.ts +0 -321
  1322. package/src/search-params/registry.ts +0 -31
  1323. package/src/server/client-module-map.ts +0 -58
  1324. package/src/server/dev-fetch-instrumentation.ts +0 -96
  1325. package/src/server/dev-span-processor.ts +0 -78
  1326. package/src/server/dev-warnings.ts +0 -283
  1327. package/src/server/flush.ts +0 -182
  1328. package/src/server/manifest-status-resolver.ts +0 -215
  1329. package/src/server/prerender.ts +0 -139
  1330. package/src/server/tree-builder.ts +0 -382
  1331. package/src/shims/server-only-noop.js +0 -6
  1332. package/src/utils/directive-parser.ts +0 -529
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classify.d.ts","sourceRoot":"","sources":["../../src/analyze/classify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAcH,MAAM,MAAM,UAAU,GAClB,QAAQ,GACR,iBAAiB,GACjB,iBAAiB,GACjB,QAAQ,GACR,eAAe,GACf,cAAc,CAAC;AAEnB,MAAM,MAAM,SAAS,GAAG,YAAY,GAAG,YAAY,GAAG,IAAI,CAAC;AAE3D;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,KAAK,EAAE,OAAO,CAAC;IACf,qDAAqD;IACrD,KAAK,EAAE,OAAO,CAAC;IACf;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,uDAAuD;IACvD,SAAS,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;IACjB;;;;;OAKG;IACH,IAAI,EAAE;QAAE,GAAG,EAAE,OAAO,CAAC;QAAC,GAAG,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC;IACtD;;;;OAIG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB;;;;;OAKG;IACH,cAAc,EAAE,OAAO,CAAC;CACzB;AAKD;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,CAI9D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,CAerE;AAED,2CAA2C;AAC3C,MAAM,WAAW,eAAe;IAC9B;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAQhG;AAoBD;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,iBAAiB,EACtB,GAAG,CAAC,EAAE,eAAe,GACpB,oBAAoB,CA2BtB;AAED,0EAA0E;AAC1E,wBAAgB,eAAe,CAC7B,YAAY,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EACzC,GAAG,CAAC,EAAE,eAAe,GACpB,oBAAoB,EAAE,CAIxB"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * crawl-entry — child-process entry point for the cold crawl.
3
+ *
4
+ * The crawl's memory footprint is transient but large (~1.3 GB RSS on
5
+ * plugin-heavy apps — design/47 §6), so consumers spawn this module as a
6
+ * short-lived child process instead of crawling in-process:
7
+ *
8
+ * node --import tsx/esm crawl-entry.ts --root <dir> [--config <file>]
9
+ * [--out <file>] [--timeout <ms>]
10
+ *
11
+ * With `--out`, the JSON report is written to that file. Otherwise it is
12
+ * printed to stdout after a marker line — plugins in the booted app may
13
+ * write their own stdout noise, so consumers parse everything after the
14
+ * marker, not the whole stream.
15
+ */
16
+ export {};
17
+ //# sourceMappingURL=crawl-entry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crawl-entry.d.ts","sourceRoot":"","sources":["../../src/analyze/crawl-entry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG"}
@@ -0,0 +1,313 @@
1
+ import { i as scanProjectSourceFiles, n as isScannableSourceFile, t as buildSourceExtensions } from "../_chunks/scan-BoP17W3w.js";
2
+ import { n as isTimberPluginApi, o as resolveAppDir } from "../_chunks/plugin-context-8idfR3UZ.js";
3
+ import { a as detectDirective, i as classifyModules, n as stitchImportChains } from "../_chunks/chains-CBNA0Ozj.js";
4
+ import { n as importSignals, r as poisoningsFor, t as collectImportSpecifiers } from "../_chunks/poison-scan-lEbz4pQE.js";
5
+ import { normalizePath } from "vite";
6
+ import { join, resolve } from "node:path";
7
+ import { readFile, realpath, writeFile } from "node:fs/promises";
8
+ //#region src/analyze/crawl.ts
9
+ /**
10
+ * crawl — programmatic middleware-mode crawl (the cold path).
11
+ *
12
+ * Boots `createServer({ middlewareMode: true })` — no HTTP port, no route
13
+ * rendering — and BFS-walks `env.transformRequest(url)` → importedModules
14
+ * edges from `virtual:timber-rsc-entry`, then from every discovered
15
+ * `'use client'` boundary through the SSR environment. This reuses Vite's
16
+ * actual resolution (aliases, tsconfig paths, react-server export
17
+ * conditions, virtual modules), so it cannot drift from what dev or the
18
+ * build does; hand-rolled resolution was evaluated and rejected
19
+ * (design/47 §"Verified Prototype Findings").
20
+ *
21
+ * Cost model (design/47 §6): 2.5 s on small apps to ~10 s on dep-heavy
22
+ * plugin stacks, with a transient ~1.3 GB RSS — callers MUST run this in
23
+ * a short-lived child process (see crawl-entry.ts) and cache the
24
+ * classification output, not the Vite transforms. The crawl always
25
+ * covers the full project: one crawl per project state, never per
26
+ * question — marginal per-file cost is ~zero once booted.
27
+ *
28
+ * `TIMBER_ANALYZE=1` is set before the server boots so platform dev
29
+ * plugins (wrangler bindings — a measured ~6.8 s remote-bindings
30
+ * handshake on website) skip work the crawl never needs: classification
31
+ * wants import edges, not live Cloudflare connections.
32
+ *
33
+ * Design docs: 47-module-environment-tooling.md §6, §8.
34
+ */
35
+ var RSC_ENTRY_URL = "virtual:timber-rsc-entry";
36
+ /**
37
+ * Marker preceding the JSON report on crawl-entry's stdout. Lives here
38
+ * (not in crawl-entry.ts) so consumers can import it without executing
39
+ * the child entry's main().
40
+ */
41
+ var CRAWL_RESULT_MARKER = "__TIMBER_CRAWL_RESULT__";
42
+ /** Marker error for deadline expiry — structurally distinguishable
43
+ * from a deterministic transform failure (consumers must not cache a
44
+ * deadline-truncated report; a transform failure recurs on retry and
45
+ * caches fine). */
46
+ var CrawlDeadlineError = class extends Error {};
47
+ /** Race a promise against the crawl deadline. */
48
+ function withDeadline(promise, remainingMs, label) {
49
+ return new Promise((resolvePromise, rejectPromise) => {
50
+ const timer = setTimeout(() => rejectPromise(new CrawlDeadlineError(`crawl deadline exceeded while transforming ${label}`)), Math.max(remainingMs, 1));
51
+ promise.then((value) => {
52
+ clearTimeout(timer);
53
+ resolvePromise(value);
54
+ }, (error) => {
55
+ clearTimeout(timer);
56
+ rejectPromise(error);
57
+ });
58
+ });
59
+ }
60
+ /**
61
+ * Whether a graph node's file belongs in the report. `root` must be
62
+ * slash-normalized; module-node paths already are (Vite normalizes
63
+ * them, even on Windows — comparing against a backslashed root would
64
+ * reject every physical module there and misreport the whole app as
65
+ * pending). The rule set is the scan's own (isScannableSourceFile), so
66
+ * report membership, disk-scan coverage, and the cache fingerprint are
67
+ * one set — a graph-reachable file the fingerprint never tracked would
68
+ * let its edits serve a stale cache (codex review, PR #1056).
69
+ */
70
+ function isProjectFile(file, root, extensions) {
71
+ if (!file) return false;
72
+ return isScannableSourceFile(normalizePath(file), root, extensions);
73
+ }
74
+ /**
75
+ * BFS one environment from the given seed URLs, transforming every
76
+ * discovered module unconditionally. Transforming (rather than reading
77
+ * live graphs) is what closes the §8 blind spot: modules behind
78
+ * unexecuted dynamic imports are transformed here like any other edge.
79
+ *
80
+ * Exported for tests (deadline behavior is exercised with a fake env).
81
+ */
82
+ async function crawlEnvironment(env, envName, seeds, root, deadlineAt, errors, extensions) {
83
+ const queue = [...seeds];
84
+ const enqueued = new Set(queue);
85
+ const projectFiles = /* @__PURE__ */ new Set();
86
+ const failedFiles = /* @__PURE__ */ new Set();
87
+ let visited = 0;
88
+ let deadlineHit = false;
89
+ for (let cursor = 0; cursor < queue.length; cursor++) {
90
+ const url = queue[cursor];
91
+ const remaining = deadlineAt - Date.now();
92
+ if (remaining <= 0) {
93
+ errors.push({
94
+ environment: envName,
95
+ id: url,
96
+ message: "crawl deadline exceeded"
97
+ });
98
+ deadlineHit = true;
99
+ break;
100
+ }
101
+ let node;
102
+ try {
103
+ await withDeadline(env.transformRequest(url), remaining, url);
104
+ node = await env.moduleGraph.getModuleByUrl(url);
105
+ } catch (error) {
106
+ if (error instanceof CrawlDeadlineError) deadlineHit = true;
107
+ errors.push({
108
+ environment: envName,
109
+ id: url,
110
+ message: error instanceof Error ? error.message : String(error)
111
+ });
112
+ node = await env.moduleGraph.getModuleByUrl(url).catch(() => void 0);
113
+ if (node && isProjectFile(node.file, root, extensions)) {
114
+ projectFiles.add(node.file);
115
+ failedFiles.add(node.file);
116
+ }
117
+ continue;
118
+ }
119
+ if (!node) continue;
120
+ visited++;
121
+ if (isProjectFile(node.file, root, extensions)) projectFiles.add(node.file);
122
+ for (const child of node.importedModules) {
123
+ const childUrl = child.url ?? child.id;
124
+ if (!childUrl || enqueued.has(childUrl)) continue;
125
+ enqueued.add(childUrl);
126
+ queue.push(childUrl);
127
+ }
128
+ }
129
+ return {
130
+ projectFiles,
131
+ failedFiles,
132
+ visited,
133
+ deadlineHit
134
+ };
135
+ }
136
+ /** Root-relative Vite URL for an absolute project file path.
137
+ * Both arguments must be slash-normalized (the crawl normalizes at
138
+ * the boundary, so callers always satisfy this). */
139
+ function fileToUrl(file, root) {
140
+ return file.slice(root.length);
141
+ }
142
+ /**
143
+ * Read a file's first directive and poison signals from its original
144
+ * source on disk, in one read. A failure is recorded, not swallowed —
145
+ * a lost 'use client' here would silently drop the whole client
146
+ * subtree from the SSR crawl.
147
+ */
148
+ async function sourceFactsOf(file, errors) {
149
+ try {
150
+ const code = await readFile(file, "utf8");
151
+ return {
152
+ directive: detectDirective(code, file),
153
+ signals: importSignals(collectImportSpecifiers(code, file))
154
+ };
155
+ } catch (error) {
156
+ errors.push({
157
+ environment: "scan",
158
+ id: file,
159
+ message: `directive read failed: ${error instanceof Error ? error.message : String(error)}`
160
+ });
161
+ return {
162
+ directive: null,
163
+ signals: []
164
+ };
165
+ }
166
+ }
167
+ /**
168
+ * Crawl a project cold and classify every project file.
169
+ *
170
+ * Boots a middleware-mode Vite server with the app's own config (all
171
+ * timber plugins, real resolution), crawls the RSC graph from the entry,
172
+ * detects directives from original sources, crawls the SSR graph from
173
+ * every `'use client'` boundary, and intersects the memberships.
174
+ */
175
+ async function crawlProject(options) {
176
+ const startedAt = Date.now();
177
+ const deadlineAt = startedAt + (options.timeoutMs ?? 12e4);
178
+ process.env.TIMBER_ANALYZE = "1";
179
+ const { createServer } = await import("vite");
180
+ const server = await createServer({
181
+ root: options.root,
182
+ configFile: options.configFile,
183
+ server: {
184
+ middlewareMode: true,
185
+ watch: null
186
+ },
187
+ logLevel: "error"
188
+ });
189
+ try {
190
+ const root = normalizePath(server.config.resolve.preserveSymlinks ? server.config.root : await realpath(server.config.root));
191
+ const rscEnv = server.environments.rsc;
192
+ const ssrEnv = server.environments.ssr;
193
+ if (!rscEnv?.transformRequest || !ssrEnv?.transformRequest) throw new Error("[timber] crawl requires the rsc and ssr Vite environments");
194
+ const errors = [];
195
+ const rootSyncPlugin = server.config.plugins.find((p) => p.name === "timber-root-sync");
196
+ let appDir;
197
+ let pageExtensions;
198
+ if (rootSyncPlugin && isTimberPluginApi(rootSyncPlugin.api)) {
199
+ const pluginCtx = rootSyncPlugin.api.getContext();
200
+ appDir = pluginCtx.appDir;
201
+ pageExtensions = pluginCtx.config.pageExtensions;
202
+ } else try {
203
+ appDir = resolveAppDir(root);
204
+ } catch {
205
+ appDir = join(root, "app");
206
+ }
207
+ appDir = normalizePath(appDir);
208
+ const extensions = buildSourceExtensions(pageExtensions);
209
+ const rsc = await crawlEnvironment(rscEnv, "rsc", [RSC_ENTRY_URL], root, deadlineAt, errors, extensions);
210
+ const diskFiles = [];
211
+ await scanProjectSourceFiles(root, diskFiles, (failure) => errors.push({
212
+ environment: "scan",
213
+ id: failure.dir,
214
+ message: failure.message
215
+ }), 0, extensions);
216
+ const allFiles = /* @__PURE__ */ new Set([...rsc.projectFiles, ...diskFiles.map(normalizePath)]);
217
+ const facts = /* @__PURE__ */ new Map();
218
+ for (const file of allFiles) facts.set(file, await sourceFactsOf(file, errors));
219
+ const ssr = await crawlEnvironment(ssrEnv, "ssr", [...rsc.projectFiles].filter((file) => facts.get(file)?.directive === "use client").map((file) => fileToUrl(file, root)), root, deadlineAt, errors, extensions);
220
+ for (const file of ssr.projectFiles) if (!facts.has(file)) {
221
+ facts.set(file, await sourceFactsOf(file, errors));
222
+ allFiles.add(file);
223
+ }
224
+ const classifications = classifyModules([...allFiles].map((file) => ({
225
+ file,
226
+ inRsc: rsc.projectFiles.has(file),
227
+ inSsr: ssr.projectFiles.has(file),
228
+ ssrTransformed: ssr.projectFiles.has(file) ? !ssr.failedFiles.has(file) : void 0,
229
+ directive: facts.get(file)?.directive ?? null
230
+ })), {
231
+ appDir,
232
+ pageExtensions
233
+ });
234
+ const chainCtx = {
235
+ rsc: server.environments.rsc.moduleGraph,
236
+ ssr: server.environments.ssr.moduleGraph,
237
+ appDir,
238
+ pageExtensions,
239
+ getDirective: (file) => facts.get(file)?.directive ?? null
240
+ };
241
+ const modules = classifications.map((classification) => ({
242
+ ...classification,
243
+ boundary: facts.get(classification.file)?.directive === "use client",
244
+ chains: stitchImportChains(classification.file, chainCtx),
245
+ poisonings: poisoningsFor(classification.kind, classification.pending, facts.get(classification.file)?.signals ?? [])
246
+ }));
247
+ return {
248
+ root,
249
+ incomplete: rsc.deadlineHit || ssr.deadlineHit,
250
+ modules,
251
+ errors,
252
+ stats: {
253
+ rscGraphModules: rsc.visited,
254
+ ssrGraphModules: ssr.visited,
255
+ projectFiles: allFiles.size,
256
+ durationMs: Date.now() - startedAt
257
+ }
258
+ };
259
+ } finally {
260
+ await Promise.race([server.close().catch(() => {}), new Promise((resolveTimer) => setTimeout(resolveTimer, 5e3))]);
261
+ }
262
+ }
263
+ //#endregion
264
+ //#region src/analyze/crawl-entry.ts
265
+ /**
266
+ * crawl-entry — child-process entry point for the cold crawl.
267
+ *
268
+ * The crawl's memory footprint is transient but large (~1.3 GB RSS on
269
+ * plugin-heavy apps — design/47 §6), so consumers spawn this module as a
270
+ * short-lived child process instead of crawling in-process:
271
+ *
272
+ * node --import tsx/esm crawl-entry.ts --root <dir> [--config <file>]
273
+ * [--out <file>] [--timeout <ms>]
274
+ *
275
+ * With `--out`, the JSON report is written to that file. Otherwise it is
276
+ * printed to stdout after a marker line — plugins in the booted app may
277
+ * write their own stdout noise, so consumers parse everything after the
278
+ * marker, not the whole stream.
279
+ */
280
+ function readFlag(argv, name) {
281
+ const index = argv.indexOf(name);
282
+ return index !== -1 ? argv[index + 1] : void 0;
283
+ }
284
+ async function main() {
285
+ const argv = process.argv.slice(2);
286
+ const rootArg = readFlag(argv, "--root");
287
+ if (!rootArg) {
288
+ process.stderr.write("usage: crawl-entry --root <dir> [--config <file>] [--out <file>]\n");
289
+ process.exitCode = 2;
290
+ return;
291
+ }
292
+ const timeoutArg = readFlag(argv, "--timeout");
293
+ const report = await crawlProject({
294
+ root: resolve(rootArg),
295
+ configFile: readFlag(argv, "--config"),
296
+ timeoutMs: timeoutArg ? Number(timeoutArg) : void 0
297
+ });
298
+ const json = JSON.stringify(report);
299
+ const outFile = readFlag(argv, "--out");
300
+ if (outFile) await writeFile(resolve(outFile), json);
301
+ else await new Promise((resolveWrite, rejectWrite) => {
302
+ process.stdout.write(`\n${CRAWL_RESULT_MARKER}\n${json}\n`, (error) => error ? rejectWrite(error) : resolveWrite());
303
+ });
304
+ }
305
+ main().then(() => {
306
+ process.exit(process.exitCode ?? 0);
307
+ }, (error) => {
308
+ process.stderr.write(`[timber] crawl failed: ${error?.stack ?? String(error)}\n`);
309
+ process.exit(1);
310
+ });
311
+ //#endregion
312
+
313
+ //# sourceMappingURL=crawl-entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crawl-entry.js","names":[],"sources":["../../src/analyze/crawl.ts","../../src/analyze/crawl-entry.ts"],"sourcesContent":["/**\n * crawl — programmatic middleware-mode crawl (the cold path).\n *\n * Boots `createServer({ middlewareMode: true })` — no HTTP port, no route\n * rendering — and BFS-walks `env.transformRequest(url)` → importedModules\n * edges from `virtual:timber-rsc-entry`, then from every discovered\n * `'use client'` boundary through the SSR environment. This reuses Vite's\n * actual resolution (aliases, tsconfig paths, react-server export\n * conditions, virtual modules), so it cannot drift from what dev or the\n * build does; hand-rolled resolution was evaluated and rejected\n * (design/47 §\"Verified Prototype Findings\").\n *\n * Cost model (design/47 §6): 2.5 s on small apps to ~10 s on dep-heavy\n * plugin stacks, with a transient ~1.3 GB RSS — callers MUST run this in\n * a short-lived child process (see crawl-entry.ts) and cache the\n * classification output, not the Vite transforms. The crawl always\n * covers the full project: one crawl per project state, never per\n * question — marginal per-file cost is ~zero once booted.\n *\n * `TIMBER_ANALYZE=1` is set before the server boots so platform dev\n * plugins (wrangler bindings — a measured ~6.8 s remote-bindings\n * handshake on website) skip work the crawl never needs: classification\n * wants import edges, not live Cloudflare connections.\n *\n * Design docs: 47-module-environment-tooling.md §6, §8.\n */\n\nimport { readFile, realpath } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport type { ViteDevServer } from 'vite';\nimport { normalizePath } from 'vite';\nimport {\n classifyModules,\n detectDirective,\n type Directive,\n type ModuleClassification,\n} from './classify.ts';\nimport { buildSourceExtensions, scanProjectSourceFiles, isScannableSourceFile } from './scan.ts';\nimport { stitchImportChains, type ChainGraph, type ImportChain } from './chains.ts';\nimport {\n collectImportSpecifiers,\n importSignals,\n poisoningsFor,\n type Poisoning,\n} from './poison-scan.ts';\nimport { isTimberPluginApi, resolveAppDir } from '../plugin-context.ts';\n\nconst RSC_ENTRY_URL = 'virtual:timber-rsc-entry';\n\n/**\n * Marker preceding the JSON report on crawl-entry's stdout. Lives here\n * (not in crawl-entry.ts) so consumers can import it without executing\n * the child entry's main().\n */\nexport const CRAWL_RESULT_MARKER = '__TIMBER_CRAWL_RESULT__';\n\nexport interface CrawlOptions {\n /** Project root (the app directory containing vite.config). */\n root: string;\n /** Explicit Vite config file; discovered from root when omitted. */\n configFile?: string;\n /** Overall crawl deadline. Default 120s. */\n timeoutMs?: number;\n}\n\nexport interface CrawlError {\n /** 'scan' covers disk-scan and directive-read failures. */\n environment: 'rsc' | 'ssr' | 'scan';\n id: string;\n message: string;\n}\n\n/**\n * One project file's full graph answer — the classification plus the\n * remaining JSON-contract fields (`boundary`, `chains`, `poisonings`)\n * that need the open graphs / original sources to compute. This is the\n * per-module unit `timber graph` caches and serves.\n */\nexport interface GraphModuleReport extends ModuleClassification {\n /** True when the file itself carries `'use client'`. */\n boundary: boolean;\n /** Boundary-aware import chains (design/47 §7); [] when in no graph. */\n chains: ImportChain[];\n /** Report-only poisoning conflicts (design/47 §3); [] when clean. */\n poisonings: Poisoning[];\n}\n\nexport interface CrawlReport {\n root: string;\n /**\n * True when the crawl deadline expired mid-walk — the report is\n * truncated, not wrong, and the condition is transient (a slow\n * machine, a cold dep-optimizer). Consumers must not cache an\n * incomplete report: with unchanged files it would be served forever,\n * never retrying after the transient cause cleared. Deterministic\n * per-module transform failures do NOT set this — they recur on\n * retry, so caching them is correct.\n */\n incomplete: boolean;\n /** Classification of every project file, sorted by path. */\n modules: GraphModuleReport[];\n /**\n * Transform failures encountered during the BFS. These are classified,\n * not swallowed — CSS/asset URLs and non-transformable modules land\n * here (44 on website in the §6 measurement) and the crawl continues.\n */\n errors: CrawlError[];\n stats: {\n rscGraphModules: number;\n ssrGraphModules: number;\n projectFiles: number;\n durationMs: number;\n };\n}\n\n/** Marker error for deadline expiry — structurally distinguishable\n * from a deterministic transform failure (consumers must not cache a\n * deadline-truncated report; a transform failure recurs on retry and\n * caches fine). */\nclass CrawlDeadlineError extends Error {}\n\n/** Race a promise against the crawl deadline. */\nfunction withDeadline<T>(promise: Promise<T>, remainingMs: number, label: string): Promise<T> {\n return new Promise<T>((resolvePromise, rejectPromise) => {\n const timer = setTimeout(\n () =>\n rejectPromise(\n new CrawlDeadlineError(`crawl deadline exceeded while transforming ${label}`)\n ),\n Math.max(remainingMs, 1)\n );\n promise.then(\n (value) => {\n clearTimeout(timer);\n resolvePromise(value);\n },\n (error) => {\n clearTimeout(timer);\n rejectPromise(error);\n }\n );\n });\n}\n\n/** Duck-typed view of the Vite dev environment surface the crawl uses. */\nexport interface CrawlEnvironment {\n transformRequest(url: string): Promise<unknown>;\n moduleGraph: {\n getModuleByUrl(url: string): Promise<CrawlModuleNode | undefined>;\n };\n}\n\ninterface CrawlModuleNode {\n id: string | null;\n url: string;\n file: string | null;\n importedModules: Set<CrawlModuleNode>;\n transformResult: unknown;\n}\n\ninterface EnvCrawlResult {\n /** Absolute paths of project files reached in this environment. */\n projectFiles: Set<string>;\n /** Project files whose own transform failed (membership unconfirmed subtree). */\n failedFiles: Set<string>;\n /** Total graph modules visited (project + deps + virtual). */\n visited: number;\n /** The deadline expired mid-walk — the result is truncated. */\n deadlineHit: boolean;\n}\n\n/**\n * Whether a graph node's file belongs in the report. `root` must be\n * slash-normalized; module-node paths already are (Vite normalizes\n * them, even on Windows — comparing against a backslashed root would\n * reject every physical module there and misreport the whole app as\n * pending). The rule set is the scan's own (isScannableSourceFile), so\n * report membership, disk-scan coverage, and the cache fingerprint are\n * one set — a graph-reachable file the fingerprint never tracked would\n * let its edits serve a stale cache (codex review, PR #1056).\n */\nfunction isProjectFile(file: string | null, root: string, extensions?: RegExp): file is string {\n if (!file) return false;\n return isScannableSourceFile(normalizePath(file), root, extensions);\n}\n\n/**\n * BFS one environment from the given seed URLs, transforming every\n * discovered module unconditionally. Transforming (rather than reading\n * live graphs) is what closes the §8 blind spot: modules behind\n * unexecuted dynamic imports are transformed here like any other edge.\n *\n * Exported for tests (deadline behavior is exercised with a fake env).\n */\nexport async function crawlEnvironment(\n env: CrawlEnvironment,\n envName: 'rsc' | 'ssr',\n seeds: string[],\n root: string,\n deadlineAt: number,\n errors: CrawlError[],\n extensions?: RegExp\n): Promise<EnvCrawlResult> {\n const queue = [...seeds];\n const enqueued = new Set(queue);\n const projectFiles = new Set<string>();\n const failedFiles = new Set<string>();\n let visited = 0;\n let deadlineHit = false;\n\n // Index-cursor BFS — the queue only grows, so this walks each entry once.\n for (let cursor = 0; cursor < queue.length; cursor++) {\n const url = queue[cursor];\n const remaining = deadlineAt - Date.now();\n if (remaining <= 0) {\n errors.push({ environment: envName, id: url, message: 'crawl deadline exceeded' });\n deadlineHit = true;\n break;\n }\n\n let node: CrawlModuleNode | undefined;\n try {\n await withDeadline(env.transformRequest(url), remaining, url);\n node = await env.moduleGraph.getModuleByUrl(url);\n } catch (error) {\n if (error instanceof CrawlDeadlineError) deadlineHit = true;\n errors.push({\n environment: envName,\n id: url,\n message: error instanceof Error ? error.message : String(error),\n });\n // The URL may still have a graph node with a file — it IS a graph\n // member (reachable), its transform just failed. Record membership\n // AND the failure so classification reports it as reachable with\n // subtreeUnknown, not as pending/unreferenced.\n node = await env.moduleGraph.getModuleByUrl(url).catch(() => undefined);\n if (node && isProjectFile(node.file, root, extensions)) {\n projectFiles.add(node.file);\n failedFiles.add(node.file);\n }\n continue;\n }\n\n if (!node) continue;\n visited++;\n if (isProjectFile(node.file, root, extensions)) projectFiles.add(node.file);\n\n for (const child of node.importedModules) {\n const childUrl = child.url ?? child.id;\n if (!childUrl || enqueued.has(childUrl)) continue;\n enqueued.add(childUrl);\n queue.push(childUrl);\n }\n }\n\n return { projectFiles, failedFiles, visited, deadlineHit };\n}\n\n/** Root-relative Vite URL for an absolute project file path.\n * Both arguments must be slash-normalized (the crawl normalizes at\n * the boundary, so callers always satisfy this). */\nfunction fileToUrl(file: string, root: string): string {\n return file.slice(root.length);\n}\n\n/** What one read of a module's original source yields. */\ninterface SourceFacts {\n directive: Directive;\n /** Import-specifier exclusivity signals (poison-scan). */\n signals: Poisoning[];\n}\n\n/**\n * Read a file's first directive and poison signals from its original\n * source on disk, in one read. A failure is recorded, not swallowed —\n * a lost 'use client' here would silently drop the whole client\n * subtree from the SSR crawl.\n */\nasync function sourceFactsOf(file: string, errors: CrawlError[]): Promise<SourceFacts> {\n try {\n const code = await readFile(file, 'utf8');\n return {\n directive: detectDirective(code, file),\n signals: importSignals(collectImportSpecifiers(code, file)),\n };\n } catch (error) {\n errors.push({\n environment: 'scan',\n id: file,\n message: `directive read failed: ${error instanceof Error ? error.message : String(error)}`,\n });\n return { directive: null, signals: [] };\n }\n}\n\n/**\n * Crawl a project cold and classify every project file.\n *\n * Boots a middleware-mode Vite server with the app's own config (all\n * timber plugins, real resolution), crawls the RSC graph from the entry,\n * detects directives from original sources, crawls the SSR graph from\n * every `'use client'` boundary, and intersects the memberships.\n */\nexport async function crawlProject(options: CrawlOptions): Promise<CrawlReport> {\n const startedAt = Date.now();\n const deadlineAt = startedAt + (options.timeoutMs ?? 120_000);\n // Signal platform dev plugins (wrangler bindings) to skip boot work the\n // crawl never uses. Must be set before createServer runs plugin hooks.\n process.env.TIMBER_ANALYZE = '1';\n\n const { createServer } = await import('vite');\n const server: ViteDevServer = await createServer({\n root: options.root,\n configFile: options.configFile,\n server: { middlewareMode: true, watch: null },\n logLevel: 'error',\n });\n\n try {\n // The root must live in the same path space as the graph nodes.\n // By default Vite resolves through symlinks, so nodes carry\n // realpaths and a symlinked root (pnpm workspaces, ~ links) would\n // string-mismatch every file and misclassify the whole project as\n // unreferenced (design/43 open question 3). Under\n // resolve.preserveSymlinks the graphs keep the SYMLINK paths, and\n // realpathing would create exactly the mismatch it normally\n // prevents — honor the resolved setting. Slash-normalize either\n // way: module-node paths are slash-normalized even on Windows.\n const root = normalizePath(\n server.config.resolve.preserveSymlinks\n ? server.config.root\n : await realpath(server.config.root)\n );\n // Structural assignment, no cast: CrawlEnvironment/CrawlModuleNode\n // are supertypes of Vite's DevEnvironment/EnvironmentModuleNode for\n // the members the BFS reads, so an upstream shape change fails here\n // at compile time instead of inside the walk.\n const rscEnv: CrawlEnvironment | undefined = server.environments.rsc;\n const ssrEnv: CrawlEnvironment | undefined = server.environments.ssr;\n if (!rscEnv?.transformRequest || !ssrEnv?.transformRequest) {\n throw new Error('[timber] crawl requires the rsc and ssr Vite environments');\n }\n\n const errors: CrawlError[] = [];\n\n // appDir and pageExtensions come from the booted server's own\n // resolved timber config (the root-sync plugin api — the single\n // supported way to read it; cf. cli-check.ts). Resolved before\n // Phase 1 so the scan extension set is available to isProjectFile\n // and scanProjectSourceFiles — custom pageExtensions must be\n // admitted throughout, or graph membership disagrees with the\n // disk scan and fingerprint (TIM-1392).\n const rootSyncPlugin = server.config.plugins.find((p) => p.name === 'timber-root-sync');\n let appDir: string;\n let pageExtensions: readonly string[] | undefined;\n if (rootSyncPlugin && isTimberPluginApi(rootSyncPlugin.api)) {\n const pluginCtx = rootSyncPlugin.api.getContext();\n appDir = pluginCtx.appDir;\n pageExtensions = pluginCtx.config.pageExtensions;\n } else {\n try {\n appDir = resolveAppDir(root);\n } catch {\n // No app directory at all — provisional convention hints just\n // never fire; graph-membership classification is unaffected.\n appDir = join(root, 'app');\n }\n }\n // Normalize once at the boundary: appDir comes from node:path\n // join() (backslashes on Windows) but all downstream comparisons\n // — classify, chains, isRouteRoot — expect slash-normalized paths.\n appDir = normalizePath(appDir);\n const extensions = buildSourceExtensions(pageExtensions);\n\n // Phase 1 — RSC graph from the entry.\n const rsc = await crawlEnvironment(\n rscEnv,\n 'rsc',\n [RSC_ENTRY_URL],\n root,\n deadlineAt,\n errors,\n extensions\n );\n\n // Phase 2 — directives + poison signals for everything discovered so\n // far plus files on disk that no graph reached (the provisional/\n // pending set). The disk walk is the same one the graph cache\n // fingerprints (scan.ts) so cache validity covers exactly this set.\n const diskFiles: string[] = [];\n await scanProjectSourceFiles(\n root,\n diskFiles,\n (failure) => errors.push({ environment: 'scan', id: failure.dir, message: failure.message }),\n 0,\n extensions\n );\n // One path space throughout: graph paths are already slash-\n // normalized, disk-walk paths are node-joined (backslashed on\n // Windows) — mixing them in one Set would duplicate every file.\n const allFiles = new Set([...rsc.projectFiles, ...diskFiles.map(normalizePath)]);\n const facts = new Map<string, SourceFacts>();\n for (const file of allFiles) {\n facts.set(file, await sourceFactsOf(file, errors));\n }\n\n // Phase 3 — SSR graph from every RSC-REACHABLE 'use client'\n // boundary. SSR renders exactly the tree the browser hydrates, so\n // this yields the client tree (boundaries plus everything they\n // transitively import). Disk-only boundaries are deliberately NOT\n // seeded: an unreferenced 'use client' file must keep its\n // provisional pending classification, not get promoted to a\n // confirmed boundary (and drag its imports in as client-internal)\n // by the act of analyzing it.\n const boundarySeeds = [...rsc.projectFiles]\n .filter((file) => facts.get(file)?.directive === 'use client')\n .map((file) => fileToUrl(file, root));\n const ssr = await crawlEnvironment(\n ssrEnv,\n 'ssr',\n boundarySeeds,\n root,\n deadlineAt,\n errors,\n extensions\n );\n\n // SSR-only discoveries (client-internal files) need facts too.\n for (const file of ssr.projectFiles) {\n if (!facts.has(file)) {\n facts.set(file, await sourceFactsOf(file, errors));\n allFiles.add(file);\n }\n }\n\n const classifications = classifyModules(\n [...allFiles].map((file) => ({\n file,\n inRsc: rsc.projectFiles.has(file),\n inSsr: ssr.projectFiles.has(file),\n // The crawl transforms unconditionally, so the untransformed\n // frontier only arises where the transform itself failed.\n ssrTransformed: ssr.projectFiles.has(file) ? !ssr.failedFiles.has(file) : undefined,\n directive: facts.get(file)?.directive ?? null,\n })),\n { appDir, pageExtensions }\n );\n\n // Phase 4 — chains, from the live graphs of the still-open server.\n // ChainGraph is a structural supertype of Vite's module graphs\n // (TIM-1382), so the assignment is cast-free and an upstream shape\n // change fails at compile time.\n const rscChainGraph: ChainGraph = server.environments.rsc.moduleGraph;\n const ssrChainGraph: ChainGraph = server.environments.ssr.moduleGraph;\n const chainCtx = {\n rsc: rscChainGraph,\n ssr: ssrChainGraph,\n appDir,\n pageExtensions,\n // facts keys are already slash-normalized (allFiles is built from\n // graph membership + diskFiles.map(normalizePath)), so no\n // per-lookup normalization is needed.\n getDirective: (file: string) => facts.get(file)?.directive ?? null,\n };\n\n const modules: GraphModuleReport[] = classifications.map((classification) => ({\n ...classification,\n boundary: facts.get(classification.file)?.directive === 'use client',\n chains: stitchImportChains(classification.file, chainCtx),\n poisonings: poisoningsFor(\n classification.kind,\n classification.pending,\n facts.get(classification.file)?.signals ?? []\n ),\n }));\n\n return {\n root,\n incomplete: rsc.deadlineHit || ssr.deadlineHit,\n modules,\n errors,\n stats: {\n rscGraphModules: rsc.visited,\n ssrGraphModules: ssr.visited,\n projectFiles: allFiles.size,\n durationMs: Date.now() - startedAt,\n },\n };\n } finally {\n // Bound the cleanup: after a deadline expiry the very transforms\n // that hung are what server.close() waits on — an unbounded await\n // here would hang the child past its own --timeout and the report\n // would never be emitted. The child's process.exit reaps whatever\n // close left behind.\n await Promise.race([\n server.close().catch(() => {}),\n new Promise<void>((resolveTimer) => setTimeout(resolveTimer, 5_000)),\n ]);\n }\n}\n","/**\n * crawl-entry — child-process entry point for the cold crawl.\n *\n * The crawl's memory footprint is transient but large (~1.3 GB RSS on\n * plugin-heavy apps — design/47 §6), so consumers spawn this module as a\n * short-lived child process instead of crawling in-process:\n *\n * node --import tsx/esm crawl-entry.ts --root <dir> [--config <file>]\n * [--out <file>] [--timeout <ms>]\n *\n * With `--out`, the JSON report is written to that file. Otherwise it is\n * printed to stdout after a marker line — plugins in the booted app may\n * write their own stdout noise, so consumers parse everything after the\n * marker, not the whole stream.\n */\n\nimport { writeFile } from 'node:fs/promises';\nimport { resolve } from 'node:path';\nimport { crawlProject, CRAWL_RESULT_MARKER } from './crawl.ts';\n\nfunction readFlag(argv: string[], name: string): string | undefined {\n const index = argv.indexOf(name);\n return index !== -1 ? argv[index + 1] : undefined;\n}\n\nasync function main(): Promise<void> {\n const argv = process.argv.slice(2);\n const rootArg = readFlag(argv, '--root');\n if (!rootArg) {\n process.stderr.write('usage: crawl-entry --root <dir> [--config <file>] [--out <file>]\\n');\n process.exitCode = 2;\n return;\n }\n\n const timeoutArg = readFlag(argv, '--timeout');\n const report = await crawlProject({\n root: resolve(rootArg),\n configFile: readFlag(argv, '--config'),\n timeoutMs: timeoutArg ? Number(timeoutArg) : undefined,\n });\n\n const json = JSON.stringify(report);\n const outFile = readFlag(argv, '--out');\n if (outFile) {\n await writeFile(resolve(outFile), json);\n } else {\n // Await the flush: stdout to a pipe is async, and process.exit()\n // below does NOT flush pending pipe writes — a large report would\n // be truncated right after the marker.\n await new Promise<void>((resolveWrite, rejectWrite) => {\n process.stdout.write(`\\n${CRAWL_RESULT_MARKER}\\n${json}\\n`, (error) =>\n error ? rejectWrite(error) : resolveWrite()\n );\n });\n }\n}\n\nmain().then(\n () => {\n // The booted app's plugins may hold handles (watchers, sockets) past\n // server.close(); the crawl is a read-only child, so exit explicitly.\n process.exit(process.exitCode ?? 0);\n },\n (error) => {\n process.stderr.write(`[timber] crawl failed: ${error?.stack ?? String(error)}\\n`);\n process.exit(1);\n }\n);\n"],"mappings":"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"}
@@ -0,0 +1,134 @@
1
+ /**
2
+ * crawl — programmatic middleware-mode crawl (the cold path).
3
+ *
4
+ * Boots `createServer({ middlewareMode: true })` — no HTTP port, no route
5
+ * rendering — and BFS-walks `env.transformRequest(url)` → importedModules
6
+ * edges from `virtual:timber-rsc-entry`, then from every discovered
7
+ * `'use client'` boundary through the SSR environment. This reuses Vite's
8
+ * actual resolution (aliases, tsconfig paths, react-server export
9
+ * conditions, virtual modules), so it cannot drift from what dev or the
10
+ * build does; hand-rolled resolution was evaluated and rejected
11
+ * (design/47 §"Verified Prototype Findings").
12
+ *
13
+ * Cost model (design/47 §6): 2.5 s on small apps to ~10 s on dep-heavy
14
+ * plugin stacks, with a transient ~1.3 GB RSS — callers MUST run this in
15
+ * a short-lived child process (see crawl-entry.ts) and cache the
16
+ * classification output, not the Vite transforms. The crawl always
17
+ * covers the full project: one crawl per project state, never per
18
+ * question — marginal per-file cost is ~zero once booted.
19
+ *
20
+ * `TIMBER_ANALYZE=1` is set before the server boots so platform dev
21
+ * plugins (wrangler bindings — a measured ~6.8 s remote-bindings
22
+ * handshake on website) skip work the crawl never needs: classification
23
+ * wants import edges, not live Cloudflare connections.
24
+ *
25
+ * Design docs: 47-module-environment-tooling.md §6, §8.
26
+ */
27
+ import { type ModuleClassification } from './classify.ts';
28
+ import { type ImportChain } from './chains.ts';
29
+ import { type Poisoning } from './poison-scan.ts';
30
+ /**
31
+ * Marker preceding the JSON report on crawl-entry's stdout. Lives here
32
+ * (not in crawl-entry.ts) so consumers can import it without executing
33
+ * the child entry's main().
34
+ */
35
+ export declare const CRAWL_RESULT_MARKER = "__TIMBER_CRAWL_RESULT__";
36
+ export interface CrawlOptions {
37
+ /** Project root (the app directory containing vite.config). */
38
+ root: string;
39
+ /** Explicit Vite config file; discovered from root when omitted. */
40
+ configFile?: string;
41
+ /** Overall crawl deadline. Default 120s. */
42
+ timeoutMs?: number;
43
+ }
44
+ export interface CrawlError {
45
+ /** 'scan' covers disk-scan and directive-read failures. */
46
+ environment: 'rsc' | 'ssr' | 'scan';
47
+ id: string;
48
+ message: string;
49
+ }
50
+ /**
51
+ * One project file's full graph answer — the classification plus the
52
+ * remaining JSON-contract fields (`boundary`, `chains`, `poisonings`)
53
+ * that need the open graphs / original sources to compute. This is the
54
+ * per-module unit `timber graph` caches and serves.
55
+ */
56
+ export interface GraphModuleReport extends ModuleClassification {
57
+ /** True when the file itself carries `'use client'`. */
58
+ boundary: boolean;
59
+ /** Boundary-aware import chains (design/47 §7); [] when in no graph. */
60
+ chains: ImportChain[];
61
+ /** Report-only poisoning conflicts (design/47 §3); [] when clean. */
62
+ poisonings: Poisoning[];
63
+ }
64
+ export interface CrawlReport {
65
+ root: string;
66
+ /**
67
+ * True when the crawl deadline expired mid-walk — the report is
68
+ * truncated, not wrong, and the condition is transient (a slow
69
+ * machine, a cold dep-optimizer). Consumers must not cache an
70
+ * incomplete report: with unchanged files it would be served forever,
71
+ * never retrying after the transient cause cleared. Deterministic
72
+ * per-module transform failures do NOT set this — they recur on
73
+ * retry, so caching them is correct.
74
+ */
75
+ incomplete: boolean;
76
+ /** Classification of every project file, sorted by path. */
77
+ modules: GraphModuleReport[];
78
+ /**
79
+ * Transform failures encountered during the BFS. These are classified,
80
+ * not swallowed — CSS/asset URLs and non-transformable modules land
81
+ * here (44 on website in the §6 measurement) and the crawl continues.
82
+ */
83
+ errors: CrawlError[];
84
+ stats: {
85
+ rscGraphModules: number;
86
+ ssrGraphModules: number;
87
+ projectFiles: number;
88
+ durationMs: number;
89
+ };
90
+ }
91
+ /** Duck-typed view of the Vite dev environment surface the crawl uses. */
92
+ export interface CrawlEnvironment {
93
+ transformRequest(url: string): Promise<unknown>;
94
+ moduleGraph: {
95
+ getModuleByUrl(url: string): Promise<CrawlModuleNode | undefined>;
96
+ };
97
+ }
98
+ interface CrawlModuleNode {
99
+ id: string | null;
100
+ url: string;
101
+ file: string | null;
102
+ importedModules: Set<CrawlModuleNode>;
103
+ transformResult: unknown;
104
+ }
105
+ interface EnvCrawlResult {
106
+ /** Absolute paths of project files reached in this environment. */
107
+ projectFiles: Set<string>;
108
+ /** Project files whose own transform failed (membership unconfirmed subtree). */
109
+ failedFiles: Set<string>;
110
+ /** Total graph modules visited (project + deps + virtual). */
111
+ visited: number;
112
+ /** The deadline expired mid-walk — the result is truncated. */
113
+ deadlineHit: boolean;
114
+ }
115
+ /**
116
+ * BFS one environment from the given seed URLs, transforming every
117
+ * discovered module unconditionally. Transforming (rather than reading
118
+ * live graphs) is what closes the §8 blind spot: modules behind
119
+ * unexecuted dynamic imports are transformed here like any other edge.
120
+ *
121
+ * Exported for tests (deadline behavior is exercised with a fake env).
122
+ */
123
+ export declare function crawlEnvironment(env: CrawlEnvironment, envName: 'rsc' | 'ssr', seeds: string[], root: string, deadlineAt: number, errors: CrawlError[], extensions?: RegExp): Promise<EnvCrawlResult>;
124
+ /**
125
+ * Crawl a project cold and classify every project file.
126
+ *
127
+ * Boots a middleware-mode Vite server with the app's own config (all
128
+ * timber plugins, real resolution), crawls the RSC graph from the entry,
129
+ * detects directives from original sources, crawls the SSR graph from
130
+ * every `'use client'` boundary, and intersects the memberships.
131
+ */
132
+ export declare function crawlProject(options: CrawlOptions): Promise<CrawlReport>;
133
+ export {};
134
+ //# sourceMappingURL=crawl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crawl.d.ts","sourceRoot":"","sources":["../../src/analyze/crawl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAMH,OAAO,EAIL,KAAK,oBAAoB,EAC1B,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAuC,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AACpF,OAAO,EAIL,KAAK,SAAS,EACf,MAAM,kBAAkB,CAAC;AAK1B;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,4BAA4B,CAAC;AAE7D,MAAM,WAAW,YAAY;IAC3B,+DAA+D;IAC/D,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,2DAA2D;IAC3D,WAAW,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,MAAM,WAAW,iBAAkB,SAAQ,oBAAoB;IAC7D,wDAAwD;IACxD,QAAQ,EAAE,OAAO,CAAC;IAClB,wEAAwE;IACxE,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,qEAAqE;IACrE,UAAU,EAAE,SAAS,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb;;;;;;;;OAQG;IACH,UAAU,EAAE,OAAO,CAAC;IACpB,4DAA4D;IAC5D,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B;;;;OAIG;IACH,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,KAAK,EAAE;QACL,eAAe,EAAE,MAAM,CAAC;QACxB,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AA+BD,0EAA0E;AAC1E,MAAM,WAAW,gBAAgB;IAC/B,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAChD,WAAW,EAAE;QACX,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAAC;KACnE,CAAC;CACH;AAED,UAAU,eAAe;IACvB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,eAAe,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC;IACtC,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,UAAU,cAAc;IACtB,mEAAmE;IACnE,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1B,iFAAiF;IACjF,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACzB,8DAA8D;IAC9D,OAAO,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,WAAW,EAAE,OAAO,CAAC;CACtB;AAiBD;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,gBAAgB,EACrB,OAAO,EAAE,KAAK,GAAG,KAAK,EACtB,KAAK,EAAE,MAAM,EAAE,EACf,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,UAAU,EAAE,EACpB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,cAAc,CAAC,CAsDzB;AAuCD;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAoM9E"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * graph-cache — the mtime-keyed output cache for `timber graph`.
3
+ *
4
+ * The cold crawl costs seconds (design/47 §6) and its cost is setup +
5
+ * dependency compilation, not project-file count — so the cacheable
6
+ * unit is the classification OUTPUT, never Vite's transforms. One
7
+ * crawl per project state: the first question after a clone pays for
8
+ * the crawl, every subsequent question is a cache hit until the
9
+ * project changes.
10
+ *
11
+ * Validity is a fingerprint over (path, mtime, size) of every project
12
+ * source file — the same disk walk the crawl itself uses (scan.ts), so
13
+ * cache coverage and crawl coverage cannot drift — plus the config
14
+ * files and the nearest lockfile, since dependency changes change
15
+ * resolution (export conditions can flip a file's environment without
16
+ * touching project code).
17
+ *
18
+ * Deliberately vite-free: a cache hit answers without importing Vite.
19
+ *
20
+ * Design docs: 47-module-environment-tooling.md §"Cold-path policy".
21
+ */
22
+ import type { CrawlReport } from './crawl.ts';
23
+ /**
24
+ * JSON contract version (design/47 §9) — one constant for every
25
+ * frontend (CLI and dev-server endpoint), so the two cannot drift.
26
+ * Lives here rather than graph-command.ts because this module is
27
+ * vite-free and both frontends already depend on the analyze core.
28
+ */
29
+ export declare const GRAPH_JSON_VERSION = 1;
30
+ /** Bump when the report shape or fingerprint inputs change. */
31
+ export declare const GRAPH_CACHE_VERSION = 2;
32
+ export interface GraphCacheFile {
33
+ version: number;
34
+ fingerprint: string;
35
+ /** The Vite config file the cached crawl booted with. */
36
+ configFile: string;
37
+ /**
38
+ * The resolved pageExtensions from the timber config at crawl time.
39
+ * Stored so the vite-free hit path can reproduce the same scan
40
+ * extension set (custom extensions like 'foo' must be admitted on
41
+ * both the write and the hit path, or the fingerprint disagrees
42
+ * with what was cached).
43
+ */
44
+ pageExtensions?: string[];
45
+ /**
46
+ * Files the fingerprint tracks BEYOND the disk scan, discovered at
47
+ * crawl time: Vite's `configFileDependencies` (a config helper
48
+ * imported from outside the app root can reshape the whole app) and
49
+ * every file the report itself classifies (the graph can reach files
50
+ * the scan skips — `app/.well-known/page.tsx`, a route under a
51
+ * directory named `dist`). The hit path re-stats exactly this list,
52
+ * so an edit to any of them misses the cache.
53
+ */
54
+ trackedExtras: string[];
55
+ report: CrawlReport;
56
+ }
57
+ /**
58
+ * Follow a tsconfig/jsconfig `extends` chain, returning every file on
59
+ * it (the start file included). A base config outside the app —
60
+ * `"extends": "../tsconfig.base.json"` with a `paths` mapping — can
61
+ * reshape Vite's resolution without touching anything else the
62
+ * fingerprint tracks. Parsing is a targeted regex, not JSONC: tsconfig
63
+ * allows comments, and all we need is the `extends` value. Package
64
+ * specifiers resolve through Node resolution (an approximation of
65
+ * TypeScript's — the `.json` append covers the common shapes): a
66
+ * WORKSPACE package like `@repo/tsconfig/base.json` is a link, so its
67
+ * edits change neither the lockfile nor any scanned file and must be
68
+ * fingerprinted directly; registry packages resolve too, harmlessly.
69
+ * Cycles and unresolvable targets just end the walk (bounded at 16).
70
+ */
71
+ /**
72
+ * Strip JSONC comments so a commented-out `"extends"` line cannot
73
+ * shadow the real one. String-aware: comment markers inside string
74
+ * literals (a path containing `//`) survive.
75
+ */
76
+ export declare function stripJsonComments(raw: string): string;
77
+ /** `path\0mtime\0size` entries for a file list; absent files contribute nothing. */
78
+ export declare function fingerprintEntriesForFiles(files: Iterable<string>): Promise<string[]>;
79
+ /**
80
+ * Entries for the scan-derived base set: project source files, the
81
+ * config, root manifests, and the nearest lockfile. Scan failures are
82
+ * folded into the entry list rather than thrown: an unreadable
83
+ * directory changes the answer's completeness, so it must change the
84
+ * key too.
85
+ */
86
+ export declare function collectBaseFingerprintEntries(root: string, configFile: string, pageExtensions?: readonly string[]): Promise<string[]>;
87
+ /** Hash an entry list order-independently. */
88
+ export declare function hashFingerprintEntries(entries: string[]): string;
89
+ /**
90
+ * Fingerprint the project state `timber graph`'s answers depend on:
91
+ * the scan-derived base set plus `extraFiles` (the cache's
92
+ * trackedExtras on the hit path; config dependencies + report files on
93
+ * the write path).
94
+ */
95
+ export declare function computeProjectFingerprint(root: string, configFile: string, extraFiles?: readonly string[], pageExtensions?: readonly string[]): Promise<string>;
96
+ /** Read the cache file; anything unreadable or version-mismatched is a miss. */
97
+ export declare function readGraphCache(root: string): Promise<GraphCacheFile | null>;
98
+ /**
99
+ * Write the cache atomically (temp file + rename) so a concurrent
100
+ * reader — parallel agent invocations are the expected workload —
101
+ * never sees a torn JSON file.
102
+ */
103
+ export declare function writeGraphCache(root: string, cache: GraphCacheFile): Promise<void>;
104
+ //# sourceMappingURL=graph-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-cache.d.ts","sourceRoot":"","sources":["../../src/analyze/graph-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAOH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,IAAI,CAAC;AAEpC,+DAA+D;AAC/D,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAuCrC,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,UAAU,EAAE,MAAM,CAAC;IACnB;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B;;;;;;;;OAQG;IACH,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,EAAE,WAAW,CAAC;CACrB;AAED;;;;;;;;;;;;;GAaG;AACH;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CA4BrD;AAsED,oFAAoF;AACpF,wBAAsB,0BAA0B,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAY3F;AAED;;;;;;GAMG;AACH,wBAAsB,6BAA6B,CACjD,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,GACjC,OAAO,CAAC,MAAM,EAAE,CAAC,CA4BnB;AAED,8CAA8C;AAC9C,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAGhE;AAED;;;;;GAKG;AACH,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,UAAU,GAAE,SAAS,MAAM,EAAO,EAClC,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,GACjC,OAAO,CAAC,MAAM,CAAC,CAIjB;AAED,gFAAgF;AAChF,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAkBjF;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAMxF"}