@nifrajs/web 3.3.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (407) hide show
  1. package/dist/backend-only.d.ts +15 -0
  2. package/dist/backend-only.d.ts.map +1 -0
  3. package/dist/backend-only.js +16 -0
  4. package/dist/backend-only.js.map +1 -0
  5. package/dist/boundary.d.ts +5 -0
  6. package/dist/boundary.d.ts.map +1 -1
  7. package/dist/boundary.js +11 -2
  8. package/dist/boundary.js.map +1 -1
  9. package/dist/build-plan.d.ts +35 -6
  10. package/dist/build-plan.d.ts.map +1 -1
  11. package/dist/build-plan.js +89 -35
  12. package/dist/build-plan.js.map +1 -1
  13. package/dist/build-vite.d.ts +18 -0
  14. package/dist/build-vite.d.ts.map +1 -1
  15. package/dist/build-vite.js +97 -17
  16. package/dist/build-vite.js.map +1 -1
  17. package/dist/build.d.ts +72 -23
  18. package/dist/build.d.ts.map +1 -1
  19. package/dist/build.js +411 -98
  20. package/dist/build.js.map +1 -1
  21. package/dist/bun-dev-entry.d.ts +1 -1
  22. package/dist/bun-dev-entry.js +1 -1
  23. package/dist/cdn.d.ts +74 -0
  24. package/dist/cdn.d.ts.map +1 -0
  25. package/dist/cdn.js +132 -0
  26. package/dist/cdn.js.map +1 -0
  27. package/dist/client.d.ts +21 -1
  28. package/dist/client.d.ts.map +1 -1
  29. package/dist/client.js +226 -15
  30. package/dist/client.js.map +1 -1
  31. package/dist/conformance.d.ts +4 -3
  32. package/dist/conformance.d.ts.map +1 -1
  33. package/dist/conformance.js +12 -3
  34. package/dist/conformance.js.map +1 -1
  35. package/dist/csp.d.ts +93 -0
  36. package/dist/csp.d.ts.map +1 -0
  37. package/dist/csp.js +122 -0
  38. package/dist/csp.js.map +1 -0
  39. package/dist/css-contract.d.ts +21 -0
  40. package/dist/css-contract.d.ts.map +1 -0
  41. package/dist/css-contract.js +28 -0
  42. package/dist/css-contract.js.map +1 -0
  43. package/dist/dev-client.d.ts +76 -0
  44. package/dist/dev-client.d.ts.map +1 -0
  45. package/dist/dev-client.js +280 -0
  46. package/dist/dev-client.js.map +1 -0
  47. package/dist/dev-diagnostics.d.ts +26 -2
  48. package/dist/dev-diagnostics.d.ts.map +1 -1
  49. package/dist/dev-diagnostics.js +38 -7
  50. package/dist/dev-diagnostics.js.map +1 -1
  51. package/dist/dev-error.d.ts +4 -13
  52. package/dist/dev-error.d.ts.map +1 -1
  53. package/dist/dev-error.js +46 -4
  54. package/dist/dev-error.js.map +1 -1
  55. package/dist/dev-feed.d.ts +298 -0
  56. package/dist/dev-feed.d.ts.map +1 -0
  57. package/dist/dev-feed.js +797 -0
  58. package/dist/dev-feed.js.map +1 -0
  59. package/dist/dev-indicator.d.ts +38 -0
  60. package/dist/dev-indicator.d.ts.map +1 -0
  61. package/dist/dev-indicator.js +93 -0
  62. package/dist/dev-indicator.js.map +1 -0
  63. package/dist/dev-session.d.ts +77 -0
  64. package/dist/dev-session.d.ts.map +1 -0
  65. package/dist/dev-session.js +580 -0
  66. package/dist/dev-session.js.map +1 -0
  67. package/dist/dev-sourcemap.d.ts +27 -0
  68. package/dist/dev-sourcemap.d.ts.map +1 -0
  69. package/dist/dev-sourcemap.js +235 -0
  70. package/dist/dev-sourcemap.js.map +1 -0
  71. package/dist/dev-ssr-graph.d.ts.map +1 -1
  72. package/dist/dev-ssr-graph.js +13 -5
  73. package/dist/dev-ssr-graph.js.map +1 -1
  74. package/dist/dev.d.ts +15 -2
  75. package/dist/dev.d.ts.map +1 -1
  76. package/dist/dev.js +69 -44
  77. package/dist/dev.js.map +1 -1
  78. package/dist/diagnostic-catalog.d.ts +35 -0
  79. package/dist/diagnostic-catalog.d.ts.map +1 -0
  80. package/dist/diagnostic-catalog.js +203 -0
  81. package/dist/diagnostic-catalog.js.map +1 -0
  82. package/dist/diagnostic-prompt.d.ts +49 -0
  83. package/dist/diagnostic-prompt.d.ts.map +1 -0
  84. package/dist/diagnostic-prompt.js +303 -0
  85. package/dist/diagnostic-prompt.js.map +1 -0
  86. package/dist/diagnostic.d.ts +17 -23
  87. package/dist/diagnostic.d.ts.map +1 -1
  88. package/dist/diagnostic.js +31 -39
  89. package/dist/diagnostic.js.map +1 -1
  90. package/dist/draft.d.ts.map +1 -1
  91. package/dist/draft.js +4 -1
  92. package/dist/draft.js.map +1 -1
  93. package/dist/fn.d.ts +5 -0
  94. package/dist/fn.d.ts.map +1 -1
  95. package/dist/fn.js +13 -3
  96. package/dist/fn.js.map +1 -1
  97. package/dist/fs.d.ts.map +1 -1
  98. package/dist/fs.js +4 -2
  99. package/dist/fs.js.map +1 -1
  100. package/dist/index.d.ts +15 -15
  101. package/dist/index.d.ts.map +1 -1
  102. package/dist/index.js +13 -12
  103. package/dist/index.js.map +1 -1
  104. package/dist/internal/cdn/cloudflare.d.ts +48 -0
  105. package/dist/internal/cdn/cloudflare.d.ts.map +1 -0
  106. package/dist/internal/cdn/cloudflare.js +94 -0
  107. package/dist/internal/cdn/cloudflare.js.map +1 -0
  108. package/dist/internal/cdn/core.d.ts +91 -0
  109. package/dist/internal/cdn/core.d.ts.map +1 -0
  110. package/dist/internal/cdn/core.js +220 -0
  111. package/dist/internal/cdn/core.js.map +1 -0
  112. package/dist/internal/cdn/fastly.d.ts +17 -0
  113. package/dist/internal/cdn/fastly.d.ts.map +1 -0
  114. package/dist/internal/cdn/fastly.js +43 -0
  115. package/dist/internal/cdn/fastly.js.map +1 -0
  116. package/dist/internal/cdn/vercel.d.ts +31 -0
  117. package/dist/internal/cdn/vercel.d.ts.map +1 -0
  118. package/dist/internal/cdn/vercel.js +56 -0
  119. package/dist/internal/cdn/vercel.js.map +1 -0
  120. package/dist/internal/code-unit-order.d.ts +4 -0
  121. package/dist/internal/code-unit-order.d.ts.map +1 -0
  122. package/dist/internal/code-unit-order.js +6 -0
  123. package/dist/internal/code-unit-order.js.map +1 -0
  124. package/dist/internal/codegen.d.ts +3 -0
  125. package/dist/internal/codegen.d.ts.map +1 -1
  126. package/dist/internal/codegen.js +151 -30
  127. package/dist/internal/codegen.js.map +1 -1
  128. package/dist/internal/dev-csp.d.ts +24 -0
  129. package/dist/internal/dev-csp.d.ts.map +1 -0
  130. package/dist/internal/dev-csp.js +160 -0
  131. package/dist/internal/dev-csp.js.map +1 -0
  132. package/dist/internal/dev-reserved.d.ts +25 -0
  133. package/dist/internal/dev-reserved.d.ts.map +1 -0
  134. package/dist/internal/dev-reserved.js +39 -0
  135. package/dist/internal/dev-reserved.js.map +1 -0
  136. package/dist/internal/html-spans.d.ts +10 -0
  137. package/dist/internal/html-spans.d.ts.map +1 -0
  138. package/dist/internal/html-spans.js +46 -0
  139. package/dist/internal/html-spans.js.map +1 -0
  140. package/dist/internal/loading-runtime.d.ts +44 -0
  141. package/dist/internal/loading-runtime.d.ts.map +1 -0
  142. package/dist/internal/loading-runtime.js +206 -0
  143. package/dist/internal/loading-runtime.js.map +1 -0
  144. package/dist/internal/matches-runtime.d.ts +8 -0
  145. package/dist/internal/matches-runtime.d.ts.map +1 -0
  146. package/dist/internal/matches-runtime.js +61 -0
  147. package/dist/internal/matches-runtime.js.map +1 -0
  148. package/dist/internal/mount-shadow.d.ts +36 -0
  149. package/dist/internal/mount-shadow.d.ts.map +1 -0
  150. package/dist/internal/mount-shadow.js +65 -0
  151. package/dist/internal/mount-shadow.js.map +1 -0
  152. package/dist/internal/node-builtins.d.ts +3 -0
  153. package/dist/internal/node-builtins.d.ts.map +1 -0
  154. package/dist/internal/node-builtins.js +79 -0
  155. package/dist/internal/node-builtins.js.map +1 -0
  156. package/dist/internal/output-guard.d.ts +65 -0
  157. package/dist/internal/output-guard.d.ts.map +1 -0
  158. package/dist/internal/output-guard.js +630 -0
  159. package/dist/internal/output-guard.js.map +1 -0
  160. package/dist/internal/page-execution.d.ts +69 -0
  161. package/dist/internal/page-execution.d.ts.map +1 -0
  162. package/dist/internal/page-execution.js +1021 -0
  163. package/dist/internal/page-execution.js.map +1 -0
  164. package/dist/internal/parity.d.ts +21 -0
  165. package/dist/internal/parity.d.ts.map +1 -1
  166. package/dist/internal/parity.js +104 -22
  167. package/dist/internal/parity.js.map +1 -1
  168. package/dist/internal/private-env.d.ts +12 -0
  169. package/dist/internal/private-env.d.ts.map +1 -0
  170. package/dist/internal/private-env.js +335 -0
  171. package/dist/internal/private-env.js.map +1 -0
  172. package/dist/internal/public-url.d.ts +3 -0
  173. package/dist/internal/public-url.d.ts.map +1 -0
  174. package/dist/internal/public-url.js +18 -0
  175. package/dist/internal/public-url.js.map +1 -0
  176. package/dist/internal/render-document.d.ts +37 -21
  177. package/dist/internal/render-document.d.ts.map +1 -1
  178. package/dist/internal/render-document.js +104 -65
  179. package/dist/internal/render-document.js.map +1 -1
  180. package/dist/internal/request-url.d.ts +3 -0
  181. package/dist/internal/request-url.d.ts.map +1 -0
  182. package/dist/internal/request-url.js +14 -0
  183. package/dist/internal/request-url.js.map +1 -0
  184. package/dist/internal/response-controls.d.ts +75 -0
  185. package/dist/internal/response-controls.d.ts.map +1 -0
  186. package/dist/internal/response-controls.js +256 -0
  187. package/dist/internal/response-controls.js.map +1 -0
  188. package/dist/internal/runtime-contract.d.ts +11 -16
  189. package/dist/internal/runtime-contract.d.ts.map +1 -1
  190. package/dist/internal/runtime-contract.js.map +1 -1
  191. package/dist/internal/secret-scan.d.ts +104 -0
  192. package/dist/internal/secret-scan.d.ts.map +1 -0
  193. package/dist/internal/secret-scan.js +485 -0
  194. package/dist/internal/secret-scan.js.map +1 -0
  195. package/dist/internal/server-boundary.d.ts +6 -29
  196. package/dist/internal/server-boundary.d.ts.map +1 -1
  197. package/dist/internal/server-boundary.js +6 -66
  198. package/dist/internal/server-boundary.js.map +1 -1
  199. package/dist/internal/source-map.d.ts +47 -0
  200. package/dist/internal/source-map.d.ts.map +1 -0
  201. package/dist/internal/source-map.js +225 -0
  202. package/dist/internal/source-map.js.map +1 -0
  203. package/dist/internal/target-compat.d.ts +27 -0
  204. package/dist/internal/target-compat.d.ts.map +1 -0
  205. package/dist/internal/target-compat.js +77 -0
  206. package/dist/internal/target-compat.js.map +1 -0
  207. package/dist/internal/timing-safe-equal.d.ts +6 -0
  208. package/dist/internal/timing-safe-equal.d.ts.map +1 -1
  209. package/dist/internal/timing-safe-equal.js +10 -0
  210. package/dist/internal/timing-safe-equal.js.map +1 -1
  211. package/dist/internal/vitals-runtime.d.ts +18 -0
  212. package/dist/internal/vitals-runtime.d.ts.map +1 -0
  213. package/dist/internal/vitals-runtime.js +38 -0
  214. package/dist/internal/vitals-runtime.js.map +1 -0
  215. package/dist/internal/web-app.d.ts +56 -8
  216. package/dist/internal/web-app.d.ts.map +1 -1
  217. package/dist/internal/web-app.js +215 -772
  218. package/dist/internal/web-app.js.map +1 -1
  219. package/dist/internal/zone-graph.d.ts +89 -0
  220. package/dist/internal/zone-graph.d.ts.map +1 -0
  221. package/dist/internal/zone-graph.js +492 -0
  222. package/dist/internal/zone-graph.js.map +1 -0
  223. package/dist/isr.d.ts +83 -6
  224. package/dist/isr.d.ts.map +1 -1
  225. package/dist/isr.js +301 -39
  226. package/dist/isr.js.map +1 -1
  227. package/dist/llms-txt.d.ts +3 -0
  228. package/dist/llms-txt.d.ts.map +1 -1
  229. package/dist/llms-txt.js +37 -9
  230. package/dist/llms-txt.js.map +1 -1
  231. package/dist/manifest.d.ts +221 -14
  232. package/dist/manifest.d.ts.map +1 -1
  233. package/dist/manifest.js +386 -9
  234. package/dist/manifest.js.map +1 -1
  235. package/dist/module-graph.d.ts +26 -5
  236. package/dist/module-graph.d.ts.map +1 -1
  237. package/dist/module-graph.js +17 -7
  238. package/dist/module-graph.js.map +1 -1
  239. package/dist/navigation.d.ts +17 -3
  240. package/dist/navigation.d.ts.map +1 -1
  241. package/dist/navigation.js +11 -5
  242. package/dist/navigation.js.map +1 -1
  243. package/dist/nonce.d.ts +47 -0
  244. package/dist/nonce.d.ts.map +1 -0
  245. package/dist/nonce.js +63 -0
  246. package/dist/nonce.js.map +1 -0
  247. package/dist/plugins/css-modules.d.ts.map +1 -1
  248. package/dist/plugins/css-modules.js +4 -3
  249. package/dist/plugins/css-modules.js.map +1 -1
  250. package/dist/plugins/kit.d.ts +9 -0
  251. package/dist/plugins/kit.d.ts.map +1 -1
  252. package/dist/plugins/kit.js +18 -0
  253. package/dist/plugins/kit.js.map +1 -1
  254. package/dist/plugins/svg.d.ts +22 -3
  255. package/dist/plugins/svg.d.ts.map +1 -1
  256. package/dist/plugins/svg.js +112 -1
  257. package/dist/plugins/svg.js.map +1 -1
  258. package/dist/plugins/vite-leak-guard.d.ts +107 -3
  259. package/dist/plugins/vite-leak-guard.d.ts.map +1 -1
  260. package/dist/plugins/vite-leak-guard.js +378 -17
  261. package/dist/plugins/vite-leak-guard.js.map +1 -1
  262. package/dist/plugins/vite-zone-guard.d.ts +61 -0
  263. package/dist/plugins/vite-zone-guard.d.ts.map +1 -0
  264. package/dist/plugins/vite-zone-guard.js +208 -0
  265. package/dist/plugins/vite-zone-guard.js.map +1 -0
  266. package/dist/plugins/zone-guard.d.ts +27 -0
  267. package/dist/plugins/zone-guard.d.ts.map +1 -0
  268. package/dist/plugins/zone-guard.js +72 -0
  269. package/dist/plugins/zone-guard.js.map +1 -0
  270. package/dist/prerender.d.ts +10 -0
  271. package/dist/prerender.d.ts.map +1 -1
  272. package/dist/prerender.js +35 -3
  273. package/dist/prerender.js.map +1 -1
  274. package/dist/public-dir.d.ts +9 -0
  275. package/dist/public-dir.d.ts.map +1 -1
  276. package/dist/public-dir.js +131 -48
  277. package/dist/public-dir.js.map +1 -1
  278. package/dist/pwa-manifest.d.ts +68 -0
  279. package/dist/pwa-manifest.d.ts.map +1 -0
  280. package/dist/pwa-manifest.js +178 -0
  281. package/dist/pwa-manifest.js.map +1 -0
  282. package/dist/query.js +4 -4
  283. package/dist/query.js.map +1 -1
  284. package/dist/render-seam.d.ts +42 -2
  285. package/dist/render-seam.d.ts.map +1 -1
  286. package/dist/render-seam.js +6 -0
  287. package/dist/render-seam.js.map +1 -1
  288. package/dist/route-manifest.d.ts +3 -0
  289. package/dist/route-manifest.d.ts.map +1 -1
  290. package/dist/route-manifest.js +26 -3
  291. package/dist/route-manifest.js.map +1 -1
  292. package/dist/route-types.d.ts +24 -0
  293. package/dist/route-types.d.ts.map +1 -0
  294. package/dist/route-types.js +195 -0
  295. package/dist/route-types.js.map +1 -0
  296. package/dist/router.d.ts +28 -6
  297. package/dist/router.d.ts.map +1 -1
  298. package/dist/router.js +129 -40
  299. package/dist/router.js.map +1 -1
  300. package/dist/trusted-html.d.ts +34 -0
  301. package/dist/trusted-html.d.ts.map +1 -0
  302. package/dist/trusted-html.js +35 -0
  303. package/dist/trusted-html.js.map +1 -0
  304. package/dist/vitals.d.ts +33 -0
  305. package/dist/vitals.d.ts.map +1 -0
  306. package/dist/vitals.js +16 -0
  307. package/dist/vitals.js.map +1 -0
  308. package/dist/vite.d.ts +16 -1
  309. package/dist/vite.d.ts.map +1 -1
  310. package/dist/vite.js +187 -36
  311. package/dist/vite.js.map +1 -1
  312. package/dist/zones.d.ts +70 -0
  313. package/dist/zones.d.ts.map +1 -0
  314. package/dist/zones.js +365 -0
  315. package/dist/zones.js.map +1 -0
  316. package/package.json +67 -14
  317. package/src/backend-only.ts +16 -0
  318. package/src/boundary.ts +18 -5
  319. package/src/build-plan.ts +113 -36
  320. package/src/build-vite.ts +124 -15
  321. package/src/build.ts +535 -102
  322. package/src/bun-dev-entry.ts +1 -1
  323. package/src/cdn.ts +216 -0
  324. package/src/client.ts +251 -18
  325. package/src/conformance.ts +16 -3
  326. package/src/csp.ts +194 -0
  327. package/src/css-contract.ts +44 -0
  328. package/src/dev-client.ts +349 -0
  329. package/src/dev-diagnostics.ts +60 -7
  330. package/src/dev-error.ts +49 -5
  331. package/src/dev-feed.ts +1140 -0
  332. package/src/dev-indicator.ts +113 -0
  333. package/src/dev-session.ts +729 -0
  334. package/src/dev-sourcemap.ts +281 -0
  335. package/src/dev-ssr-graph.ts +16 -5
  336. package/src/dev.ts +86 -43
  337. package/src/diagnostic-catalog.ts +243 -0
  338. package/src/diagnostic-prompt.ts +355 -0
  339. package/src/diagnostic.ts +63 -66
  340. package/src/draft.ts +4 -1
  341. package/src/fn.ts +19 -3
  342. package/src/fs.ts +13 -2
  343. package/src/index.ts +57 -10
  344. package/src/internal/cdn/cloudflare.ts +146 -0
  345. package/src/internal/cdn/core.ts +316 -0
  346. package/src/internal/cdn/fastly.ts +62 -0
  347. package/src/internal/cdn/vercel.ts +95 -0
  348. package/src/internal/code-unit-order.ts +5 -0
  349. package/src/internal/codegen.ts +180 -29
  350. package/src/internal/dev-csp.ts +176 -0
  351. package/src/internal/dev-reserved.ts +52 -0
  352. package/src/internal/html-spans.ts +50 -0
  353. package/src/internal/loading-runtime.ts +244 -0
  354. package/src/internal/matches-runtime.ts +62 -0
  355. package/src/internal/mount-shadow.ts +88 -0
  356. package/src/internal/node-builtins.ts +79 -0
  357. package/src/internal/output-guard.ts +701 -0
  358. package/src/internal/page-execution.ts +1371 -0
  359. package/src/internal/parity.ts +150 -36
  360. package/src/internal/private-env.ts +334 -0
  361. package/src/internal/public-url.ts +22 -0
  362. package/src/internal/render-document.ts +153 -73
  363. package/src/internal/request-url.ts +14 -0
  364. package/src/internal/response-controls.ts +284 -0
  365. package/src/internal/runtime-contract.ts +10 -15
  366. package/src/internal/secret-scan.ts +623 -0
  367. package/src/internal/server-boundary.ts +6 -69
  368. package/src/internal/source-map.ts +256 -0
  369. package/src/internal/target-compat.ts +92 -0
  370. package/src/internal/timing-safe-equal.ts +13 -0
  371. package/src/internal/vitals-runtime.ts +53 -0
  372. package/src/internal/web-app.ts +290 -879
  373. package/src/internal/zone-graph.ts +593 -0
  374. package/src/isr.ts +366 -39
  375. package/src/llms-txt.ts +44 -8
  376. package/src/manifest.ts +671 -17
  377. package/src/module-graph.ts +53 -9
  378. package/src/navigation.ts +29 -6
  379. package/src/nonce.ts +104 -0
  380. package/src/plugins/css-modules.ts +5 -3
  381. package/src/plugins/kit.ts +24 -0
  382. package/src/plugins/svg.ts +135 -4
  383. package/src/plugins/vite-leak-guard.ts +529 -16
  384. package/src/plugins/vite-zone-guard.ts +263 -0
  385. package/src/plugins/zone-guard.ts +110 -0
  386. package/src/prerender.ts +49 -3
  387. package/src/public-dir.ts +135 -49
  388. package/src/pwa-manifest.ts +226 -0
  389. package/src/query.ts +4 -4
  390. package/src/render-seam.ts +46 -1
  391. package/src/route-manifest.ts +15 -3
  392. package/src/route-types.ts +264 -0
  393. package/src/router.ts +163 -63
  394. package/src/trusted-html.ts +44 -0
  395. package/src/vitals.ts +44 -0
  396. package/src/vite.ts +207 -36
  397. package/src/zones.ts +430 -0
  398. package/dist/plugins/vite-server-only.d.ts +0 -49
  399. package/dist/plugins/vite-server-only.d.ts.map +0 -1
  400. package/dist/plugins/vite-server-only.js +0 -57
  401. package/dist/plugins/vite-server-only.js.map +0 -1
  402. package/dist/server-only.d.ts +0 -21
  403. package/dist/server-only.d.ts.map +0 -1
  404. package/dist/server-only.js +0 -25
  405. package/dist/server-only.js.map +0 -1
  406. package/src/plugins/vite-server-only.ts +0 -75
  407. package/src/server-only.ts +0 -25
package/dist/llms-txt.js CHANGED
@@ -1,4 +1,5 @@
1
- import { reflectRoutes } from "@nifrajs/core/reflection";
1
+ import { reflectedRoutesFromEvidence, snapshotProjectEvidence, } from "@nifrajs/core/evidence";
2
+ import { compileRoutePattern } from "@nifrajs/core/pattern";
2
3
  const IDENT = /^[A-Za-z_$][A-Za-z0-9_$]*$/;
3
4
  function tsTypeOf(schema, depth = 0) {
4
5
  if (typeof schema !== "object" || schema === null || depth > 6)
@@ -40,6 +41,35 @@ function tsTypeOf(schema, depth = 0) {
40
41
  return JSON.stringify(schema);
41
42
  }
42
43
  }
44
+ /**
45
+ * The call a non-static segment adds to the typed-client chain, or `undefined` for a static one. Read
46
+ * by the router's own grammar: a whole param or a wildcard is called by its name (`:id` and
47
+ * `:id{[0-9]+}` are `({ id })`), and a segment that is part literal, part parameter is called with
48
+ * the segment text (`:name.json` is ``(`${name}.json`)``).
49
+ */
50
+ function paramCall(seg) {
51
+ let segment;
52
+ try {
53
+ segment = compileRoutePattern(`/${seg}`).segments[0];
54
+ }
55
+ catch {
56
+ return undefined;
57
+ }
58
+ if (segment === undefined || segment.kind === "static")
59
+ return undefined;
60
+ if (segment.kind === "param")
61
+ return `({ ${segment.name} })`;
62
+ if (segment.kind === "wildcard") {
63
+ return segment.name === "*" ? '({ "*": rest })' : `({ ${segment.name} })`;
64
+ }
65
+ const [only] = segment.parts;
66
+ if (segment.parts.length === 1 && only?.t === "param")
67
+ return `({ ${only.name} })`;
68
+ const text = segment.parts
69
+ .map((part) => (part.t === "lit" ? part.v.replace(/[`\\]|\$\{/g, "\\$&") : `\${${part.name}}`))
70
+ .join("");
71
+ return `(\`${text}\`)`;
72
+ }
43
73
  function clientCall(method, path, schema) {
44
74
  const s = schema;
45
75
  const verb = method.toLowerCase();
@@ -49,12 +79,7 @@ function clientCall(method, path, schema) {
49
79
  chain += ".index";
50
80
  else
51
81
  for (const seg of segs) {
52
- if (seg.startsWith(":") || seg.startsWith("*")) {
53
- const name = seg.replace(/^[:*]/, "") || "value";
54
- chain += `({ ${name} })`;
55
- }
56
- else
57
- chain += IDENT.test(seg) ? `.${seg}` : `[${JSON.stringify(seg)}]`;
82
+ chain += paramCall(seg) ?? (IDENT.test(seg) ? `.${seg}` : `[${JSON.stringify(seg)}]`);
58
83
  }
59
84
  const isBodyVerb = verb === "post" || verb === "put" || verb === "patch";
60
85
  let call;
@@ -107,7 +132,7 @@ export async function generateLlmsTxt(full, pageRoutes, backend, options = {}) {
107
132
  output += `\n`;
108
133
  // 3. API Routes
109
134
  output += `## API Routes\n\n`;
110
- const apiRoutes = reflectRoutes(backend);
135
+ const apiRoutes = reflectedRoutesFromEvidence(options.evidence ?? snapshotProjectEvidence(backend));
111
136
  if (apiRoutes.length === 0) {
112
137
  output += `No API routes registered.\n`;
113
138
  }
@@ -130,7 +155,10 @@ export async function generateLlmsTxt(full, pageRoutes, backend, options = {}) {
130
155
  output += ` - Response Schema: \`${tsTypeOf(responseSchema)}\`\n`;
131
156
  }
132
157
  if (s?.errors) {
133
- for (const [status, errorSchema] of Object.entries(s.errors)) {
158
+ for (const status of Object.keys(s.errors)) {
159
+ const errorSchema = s.errors[status];
160
+ if (errorSchema === undefined)
161
+ continue;
134
162
  const errJson = errorSchema.jsonSchema;
135
163
  if (errJson !== undefined) {
136
164
  output += ` - Error ${status} Schema: \`${tsTypeOf(errJson)}\`\n`;
@@ -1 +1 @@
1
- {"version":3,"file":"llms-txt.js","sourceRoot":"","sources":["../src/llms-txt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"llms-txt.js","sourceRoot":"","sources":["../src/llms-txt.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,30 @@
1
+ import type { CookieOptions, ResponseResult, StandardSchemaV1 } from "@nifrajs/core/server";
2
+ import type { BoundaryDescriptor, BoundaryRegistration } from "./boundary.js";
3
+ import type { RevalidateTags } from "./isr.js";
1
4
  /**
2
- * Route manifest - the fs-free heart of file-based routing. Maps route file paths to nifra
3
- * router patterns + their nested layout chain. `discoverRoutes` (in `@nifrajs/web/fs`) scans
4
- * the filesystem and feeds `buildManifest`; everything here is pure logic, so it stays
5
- * portable (no fs, no DOM) and fully unit-testable. Edge deploys pre-build the manifest.
5
+ * Response controls a loader or action reaches as `ctx.set` - the page counterpart of a route
6
+ * handler's `c.set`. Write before the loader or action returns; a write from a deferred promise that
7
+ * settles later throws.
6
8
  */
7
- import type { StandardSchemaV1 } from "@nifrajs/core/server";
8
- import type { BoundaryDescriptor, BoundaryRegistration } from "./boundary.js";
9
+ export interface LoaderResponseControls {
10
+ /**
11
+ * Headers for the rendered document (`cache-control`, `x-robots-tag`, `link`, ...). A layout's
12
+ * headers are applied first, then the page's, then the action's, so the most specific writer wins a
13
+ * name. They are not applied to a redirect, a status page, an error page, or a navigation data
14
+ * response. `content-type`, `set-cookie`, `location`, transport headers, and the `x-nifra-` prefix
15
+ * are refused.
16
+ */
17
+ readonly headers: Record<string, string>;
18
+ /**
19
+ * Queue a `Set-Cookie`, with the same secure defaults as `c.set.cookie`
20
+ * (`HttpOnly; Secure; SameSite=Lax; Path=/`). The cookie rides every outcome - the document, a
21
+ * navigation data response, a redirect, a status or error page - and makes the response
22
+ * `cache-control: private, no-store`.
23
+ */
24
+ cookie(name: string, value: string, options?: CookieOptions): void;
25
+ /** Queue a cookie deletion. Match the `path`/`domain` the cookie was set with. */
26
+ deleteCookie(name: string, options?: Pick<CookieOptions, "path" | "domain">): void;
27
+ }
9
28
  /** Context passed to a route `loader`. The `api` + `env` are injected by `createWebApp` and typed
10
29
  * per-route via `@nifrajs/client`'s `LoaderArgs<Api, Env>` (here they are opaque to the agnostic core). */
11
30
  export interface LoaderContext {
@@ -23,9 +42,58 @@ export interface LoaderContext {
23
42
  * declares one - failing closed to the schema's defaults - else the raw parsed query. Typed per-route
24
43
  * via `@nifrajs/client`'s `LoaderArgs<Api, Env, Search>`. */
25
44
  readonly search: Record<string, unknown>;
45
+ /** Response headers and cookies for this page request. */
46
+ readonly set: LoaderResponseControls;
26
47
  }
27
48
  /** A route's optional data loader: params/request in, data out. */
28
49
  export type Loader = (ctx: LoaderContext) => unknown | Promise<unknown>;
50
+ /**
51
+ * The `middleware` export of a `_layout.backend.ts` file. It runs on the server before the layouts, loaders and
52
+ * action of every route in its directory and below - on a document request, a client navigation and a
53
+ * form post alike - and before a nested `_404` there. Middleware higher in the tree runs first.
54
+ *
55
+ * - Return nothing to let the request through.
56
+ * - Return or throw a `redirect()`, a status such as `notFound()`, or a `Response` to answer with it:
57
+ * nothing below the middleware runs.
58
+ * - `ctx.set` adds headers and cookies as a loader's does. A layout's or the page's header of the same
59
+ * name wins.
60
+ * - `ctx.params` holds the params of the directory's own URL prefix, as a layout's loader sees them.
61
+ *
62
+ * It does not run for a prerendered page, an ISR cache hit, a mounted API or a static file. For
63
+ * middleware on every request, export `use` from `backend/framework.ts`. Pass a typed context to type
64
+ * `ctx.api` and `ctx.env`: `RouteMiddleware<LoaderArgs<typeof app, Env>>`.
65
+ */
66
+ export type RouteMiddleware<Ctx = LoaderContext> = (ctx: Ctx) => MiddlewareOutcome | Promise<MiddlewareOutcome>;
67
+ /** What a {@link RouteMiddleware} answers with: nothing, to let the request through, or a response. */
68
+ export type MiddlewareOutcome = undefined | Response | ResponseResult;
69
+ /** One client navigation, as a layout's {@link ShouldRevalidate} sees it. */
70
+ export interface ShouldRevalidateArgs {
71
+ /** The URL the client is leaving. */
72
+ readonly currentUrl: URL;
73
+ /** The URL being loaded. */
74
+ readonly nextUrl: URL;
75
+ /** Every route param of the page being left - not only the ones the layout owns. */
76
+ readonly currentParams: Readonly<Record<string, string>>;
77
+ /** Every route param of the page being loaded. */
78
+ readonly nextParams: Readonly<Record<string, string>>;
79
+ /** The answer without the hook: `true` when a param the layout owns or the query changed. */
80
+ readonly defaultShouldRevalidate: boolean;
81
+ }
82
+ /**
83
+ * A layout's say over whether its loader runs again on a client navigation. Export it from a
84
+ * `_layout.backend.ts` next to the loader: `export const shouldRevalidate: ShouldRevalidate = (args) => ...`.
85
+ *
86
+ * - Asked on the server, on a client navigation that keeps this layout on screen, when the browser
87
+ * already holds its data. A document request, the revalidation after an action, and
88
+ * `router.invalidate()` always run the loader.
89
+ * - Return `false` to keep the data the browser has; any other value runs the loader. Return
90
+ * `args.defaultShouldRevalidate` to keep the default for the cases you do not handle.
91
+ * - Must be synchronous: a returned promise is not `false`, so the loader runs.
92
+ * - Never asked for a `gate` layout, which runs on every request.
93
+ * - A page's loader runs on every navigation and a page's `shouldRevalidate` is not read. Query keys
94
+ * a page's loader never uses belong in its `searchClientKeys`.
95
+ */
96
+ export type ShouldRevalidate = (args: ShouldRevalidateArgs) => boolean;
29
97
  /**
30
98
  * A route's optional mutation, run on POST. Shares the loader context (params/request/api);
31
99
  * read the form/JSON body off `request`. Returns either a control-flow value (a `redirect()`, a
@@ -55,13 +123,14 @@ export interface ClientActionResult {
55
123
  readonly optimisticData?: unknown;
56
124
  }
57
125
  /** A client-only action wrapper; it never replaces the server action. */
58
- export type ClientAction = (args: ClientActionArgs) => ClientActionResult | void | Promise<ClientActionResult | void>;
126
+ export type ClientAction = (args: ClientActionArgs) => ClientActionResult | undefined | Promise<ClientActionResult | undefined>;
59
127
  /** Client hooks populated by the generated route entry after a route chunk loads. */
60
128
  export interface ClientRouteHooks {
61
129
  readonly clientLoader?: ClientLoader;
62
130
  readonly clientAction?: ClientAction;
63
- /** Neutral boundary descriptors needed for soft-navigation interception; no server loader crosses. */
64
- readonly boundaries?: readonly BoundaryDescriptor[];
131
+ /** Neutral boundary descriptors needed for soft-navigation interception. A boundary's loader lives in
132
+ * the route's backend half, so the browser never learns whether one exists. */
133
+ readonly boundaries?: ReadonlyArray<Omit<BoundaryDescriptor, "hasLoad">>;
65
134
  }
66
135
  /**
67
136
  * One `<link>` tag's attributes for a route/layout's `meta.link`. The common HTML `<link>` attributes
@@ -170,6 +239,8 @@ export interface Meta {
170
239
  export interface MetaArgs<Data = unknown> {
171
240
  readonly data: Data;
172
241
  readonly params: Record<string, string>;
242
+ /** The resolved document CSP nonce, when this render uses per-request nonce protection. */
243
+ readonly nonce?: string;
173
244
  /**
174
245
  * The site origin - scheme + host (+ port), e.g. `"https://news.example.com"`, **with no trailing
175
246
  * slash**. The single piece of server/env knowledge `meta()` otherwise can't see: it runs in BOTH
@@ -208,12 +279,24 @@ export interface RouteModule {
208
279
  readonly default: unknown;
209
280
  readonly loader?: Loader;
210
281
  readonly action?: Action;
282
+ /**
283
+ * Backend half only: the schema of what {@link loader} sends to the browser. Required whenever the
284
+ * loader returns data. Keys it does not declare are dropped before the page renders; a declared
285
+ * field of the wrong shape fails the request with a 500 naming the field's path.
286
+ */
287
+ readonly loaderOutput?: StandardSchemaV1;
288
+ /** Backend half only: the schema of what {@link action} sends back, held to the same rule. */
289
+ readonly actionOutput?: StandardSchemaV1;
211
290
  /** Optional client-only loader. It runs after hydration and on client navigations. */
212
291
  readonly clientLoader?: ClientLoader;
213
292
  /** Optional client-only submit wrapper. The server action remains mandatory for mutations. */
214
293
  readonly clientAction?: ClientAction;
215
- /** Named async boundaries owned by this route. The adapter renders their neutral state seam. */
294
+ /** Named async boundaries owned by this route. The adapter renders their neutral state seam. A
295
+ * boundary's `load` comes from {@link boundaryLoaders} in the route's backend half; the frontend
296
+ * file declares only how it renders. */
216
297
  readonly boundaries?: readonly BoundaryRegistration[];
298
+ /** Backend half only: each boundary's server loader, keyed by boundary name. */
299
+ readonly boundaryLoaders?: Readonly<Record<string, BoundaryLoaderEntry>>;
217
300
  /** A Standard Schema validating this route's URL search params. When present, `ctx.search` is parsed +
218
301
  * validated against it (failing closed to the schema's defaults on invalid input); type it into the
219
302
  * loader with `LoaderArgs<Api, Env, typeof searchSchema>`. */
@@ -232,6 +315,30 @@ export interface RouteModule {
232
315
  * island-hydrated pages where interactivity is mounted by smaller, explicit client entries.
233
316
  */
234
317
  readonly hydrate?: boolean;
318
+ /**
319
+ * `false` renders this route's component in the browser only. The server still matches the route,
320
+ * runs its gates and loaders, renders the layouts around it and embeds the data - it skips the
321
+ * component alone, putting {@link HydrateFallback} (or nothing) in the page slot. The browser
322
+ * hydrates against that, then renders the component. For a component that cannot render on a
323
+ * server: one that reads `window` or a browser-only API while it renders.
324
+ *
325
+ * The module itself is still imported on the server, for its loader and options - so an import
326
+ * that needs a browser at load time belongs inside the component (a dynamic `import()`), not at the
327
+ * top of the file. Cannot be combined with `hydrate = false`: nothing would ever render the page.
328
+ */
329
+ readonly ssr?: boolean;
330
+ /**
331
+ * What the server renders in the page slot of an `ssr = false` route, and what the browser hydrates
332
+ * before the component takes over - a skeleton, a spinner. Receives the same props as the
333
+ * component, loader `data` included. Omitted ⇒ the slot is empty until the component renders.
334
+ */
335
+ readonly HydrateFallback?: unknown;
336
+ /**
337
+ * Any value to report through `useMatches` - a breadcrumb label, a render function, a flag a layout
338
+ * reads about the page inside it. Layouts, pages, and status pages may export one. It is read from
339
+ * the module on the server and in the browser, so it must be the same value on both.
340
+ */
341
+ readonly handle?: unknown;
235
342
  /**
236
343
  * Opt a **static** route (no `:param`/`*`) into build-time prerendering (SSG): `prerenderRoutes`
237
344
  * (from `@nifrajs/web/build`) renders it to a static `index.html` at build. The loader runs at build
@@ -252,8 +359,12 @@ export interface RouteModule {
252
359
  * list the client parses to refetch - so the two channels never alias.)
253
360
  */
254
361
  readonly revalidate?: number;
255
- /** Optional bounded tags used by ISR on-demand invalidation (`?tag=...`). */
256
- readonly revalidateTags?: readonly string[];
362
+ /**
363
+ * Bounded tags ISR on-demand invalidation (`?tag=...`) and a CDN purge reach this page by. A list, or
364
+ * a function of the route's params and URL (`({ params }) => [\`product:${params.id}\`]`) for tags
365
+ * per page. Tags travel to the CDN and reach anyone reading the origin: never put personal data in one.
366
+ */
367
+ readonly revalidateTags?: RevalidateTags;
257
368
  /**
258
369
  * No-framework island bundles (`@nifrajs/web/islands`) to load on this route, as `<script
259
370
  * type="module">` in the document tail. Loaded **regardless of `hydrate`** - pair with
@@ -262,6 +373,12 @@ export interface RouteModule {
262
373
  */
263
374
  readonly islandScripts?: readonly string[];
264
375
  }
376
+ /** A boundary's server loader, declared in the route's backend half under `boundaryLoaders`. */
377
+ export interface BoundaryLoaderEntry {
378
+ readonly load: NonNullable<BoundaryRegistration["load"]>;
379
+ /** The boundary data's output schema. Required whenever `load` returns data. */
380
+ readonly output?: StandardSchemaV1;
381
+ }
265
382
  /** A layout (or `_404`/`_error`) entry: its source file (for client codegen) + a lazy loader.
266
383
  *
267
384
  * A `_layout.tsx` may export `meta` (static {@link Meta} or a function of the loader data + params,
@@ -270,7 +387,11 @@ export interface RouteModule {
270
387
  * (`meta`/`link`) concatenate outermost→innermost→page; scalars (`title`) are nearest-wins (the page
271
388
  * overrides an inner layout, which overrides an outer one). See `mergeHeads` in `@nifrajs/web`. */
272
389
  export interface LayoutEntry {
390
+ /** The frontend half: the file the browser bundle imports. */
273
391
  readonly file: string;
392
+ /** The backend half (`x.backend.ts`), when the file has one. Server-only: never in a client bundle. */
393
+ readonly backend?: string;
394
+ /** Both halves, merged and checked. */
274
395
  readonly load: () => Promise<RouteModule>;
275
396
  }
276
397
  /** One matched route: pattern, nested layout ids (outermost → innermost), source file, loader. */
@@ -288,13 +409,61 @@ export interface RouteEntry {
288
409
  * Optional only so hand-built test manifests may omit it.
289
410
  */
290
411
  readonly layoutParams?: ReadonlyArray<readonly string[]>;
412
+ /** `_middleware` ids in this route's ancestor chain (outermost → innermost), run before its
413
+ * layouts. Absent ⇒ none. */
414
+ readonly middlewareIds?: readonly string[];
415
+ /** Param names each middleware in {@link middlewareIds} sees, aligned by index: the params of its
416
+ * directory's URL prefix, as {@link layoutParams} holds them for a layout. */
417
+ readonly middlewareParams?: ReadonlyArray<readonly string[]>;
291
418
  /** `_error` boundary ids in this route's ancestor chain (outermost → innermost). The last is the
292
419
  * **nearest** boundary, rendered when the route's loader throws. Always set by `buildManifest`
293
420
  * (optional only so hand-built test manifests may omit it); absent/empty ⇒ no boundary (error 500s). */
294
421
  readonly errorIds?: readonly string[];
422
+ /** Nested `_404` page ids in this route's ancestor chain (outermost → innermost); the root `_404`
423
+ * is not listed. The last is the **nearest**, rendered when the route's loader answers
424
+ * `notFound()`. Absent ⇒ the root `_404`. */
425
+ readonly notFoundIds?: readonly string[];
426
+ /** `_loading` page ids in this route's ancestor chain (outermost → innermost). A client navigation
427
+ * to the route shows the innermost one whose layouts are already on screen. Absent ⇒ none. */
428
+ readonly loadingIds?: readonly string[];
429
+ /** The frontend half: the file the browser bundle imports. */
295
430
  readonly file: string;
431
+ /** The backend half (`x.backend.ts`), when the route has one. Server-only. */
432
+ readonly backend?: string;
433
+ /** Both halves, merged and checked. */
296
434
  readonly load: () => Promise<RouteModule>;
297
435
  }
436
+ /** One URL pattern a nested `_404` answers when no route matches it. */
437
+ export interface NotFoundScope {
438
+ /** The directory's URL prefix (`/admin`) or everything beneath it (`/admin/*`). */
439
+ readonly pattern: string;
440
+ /** Param names each layout in {@link NotFoundEntry.layoutIds} owns on this pattern, by index. */
441
+ readonly layoutParams: ReadonlyArray<readonly string[]>;
442
+ /** Param names each middleware in {@link NotFoundEntry.middlewareIds} sees on this pattern, by
443
+ * index. Absent when the page has no middleware. */
444
+ readonly middlewareParams?: ReadonlyArray<readonly string[]>;
445
+ }
446
+ /** A `_404` page below the routes root. */
447
+ export interface NotFoundEntry extends LayoutEntry {
448
+ /** Layouts at or above the page's directory (outermost → innermost) - the ones it renders inside. */
449
+ readonly layoutIds: readonly string[];
450
+ /** `_error` boundaries at or above the page's directory (outermost → innermost). */
451
+ readonly errorIds: readonly string[];
452
+ /** `_middleware` ids at or above the page's directory (outermost → innermost). Absent ⇒ none. */
453
+ readonly middlewareIds?: readonly string[];
454
+ /**
455
+ * The URL patterns this page answers when no route matches. Empty when the directory is a
456
+ * catch-all, or when a `_404` in a directory above it answers the same URLs - the page is then
457
+ * reached only by `notFound()` from a route beneath it.
458
+ */
459
+ readonly scopes: readonly NotFoundScope[];
460
+ }
461
+ /** A `_loading` page: what the page slot shows while a client navigation loads. */
462
+ export interface LoadingEntry extends LayoutEntry {
463
+ /** Layouts at or above the page's directory (outermost → innermost). The page shows only while
464
+ * every one of them is on screen, so it never renders outside a layout above it. */
465
+ readonly layoutIds: readonly string[];
466
+ }
298
467
  /** The full route manifest. */
299
468
  export interface Manifest {
300
469
  readonly routes: readonly RouteEntry[];
@@ -302,13 +471,51 @@ export interface Manifest {
302
471
  /** Per-segment `_error` boundary components, keyed by id (`_error`, `a/_error`, …). Always set by
303
472
  * `buildManifest` (optional only so hand-built test manifests may omit it). */
304
473
  readonly errors?: Readonly<Record<string, LayoutEntry>>;
474
+ /** The `_404` at the routes root: unmatched URLs and `notFound()` wherever no nested one applies. */
305
475
  readonly notFound?: LayoutEntry;
476
+ /**
477
+ * `_404` pages below the routes root, keyed by id (`admin/_404`, …). Each answers `notFound()` from
478
+ * the routes beneath its directory and the unmatched URLs under that directory's URL prefix, and
479
+ * renders inside the layouts at or above it. Absent when the app has none.
480
+ */
481
+ readonly notFounds?: Readonly<Record<string, NotFoundEntry>>;
306
482
  /** Per-status terminal pages from `_<status>.tsx` at the routes root (`_410`, `_451`, …), keyed by
307
483
  * the status as a string. Rendered by a loader's `gone()` / `statusPage(n)`; a status with no page
308
484
  * falls back to `_404`, and then to plain text. `_404` itself stays on {@link notFound} - it is
309
485
  * reached by unmatched paths too, which these are not. */
310
486
  readonly statusPages?: Readonly<Record<string, LayoutEntry>>;
487
+ /**
488
+ * `_loading` pages, keyed by id (`_loading`, `admin/_loading`, …). A client navigation that is
489
+ * still loading after a short delay shows the target route's nearest one in the page slot, inside
490
+ * the layouts the two pages share. Browser-only: the server never renders one. Absent when the app
491
+ * has none.
492
+ */
493
+ readonly loadings?: Readonly<Record<string, LoadingEntry>>;
494
+ /**
495
+ * Middleware candidates, keyed by id (`_middleware`, `admin/_middleware`, …): one per directory
496
+ * with a `_layout.backend.ts`, whose `middleware` export each loads as `default` (`undefined` when
497
+ * that file exports none). Server-only: the client build never imports one. Absent when no
498
+ * directory has a layout backend half.
499
+ */
500
+ readonly middlewares?: Readonly<Record<string, LayoutEntry>>;
311
501
  }
502
+ /** Whether a routes-relative path is a retired `_middleware` module. Discovery collects it only so
503
+ * that {@link buildManifest} can refuse it with the migration. */
504
+ export declare const isMiddlewareFile: (file: string) => boolean;
505
+ /** Whether a routes-relative path is a route's backend half (`x.backend.ts`). */
506
+ export declare const isRouteBackendFile: (file: string) => boolean;
507
+ /** The backend half a frontend route file pairs with: `blog/[slug].tsx` -> `blog/[slug].backend.ts`. */
508
+ export declare const backendFileFor: (file: string) => string;
509
+ /** Exports the browser runs or reads. They live in a route's frontend file, which ships whole. */
510
+ export declare const FRONTEND_ROUTE_EXPORTS: ReadonlySet<string>;
511
+ /** Exports only the server or the build reads. They live in the route's `x.backend.ts`. */
512
+ export declare const BACKEND_ROUTE_EXPORTS: ReadonlySet<string>;
513
+ /**
514
+ * Merge a route's two halves into the one {@link RouteModule} the server runs, refusing any export on
515
+ * the wrong side. The checks run on every server, dev and production alike, so a misplaced `loader`
516
+ * fails the first request to its route even before a client build has looked at it.
517
+ */
518
+ export declare function mergeRouteHalves(file: string, front: RouteModule, backend: string | undefined, back: Readonly<Record<string, unknown>> | undefined): RouteModule;
312
519
  export declare function filePathToPatterns(file: string): string[];
313
520
  /** One URL pattern a route file expands to, plus the scope information layouts need. */
314
521
  export interface FileRoutePattern {
@@ -338,8 +545,8 @@ export declare function filePathToPattern(file: string): string;
338
545
  /**
339
546
  * Build a manifest from route file paths (relative to the routes dir) + an `importer` that
340
547
  * turns a path into a lazy module loader. Pure - no fs. Throws at boot (the loud-and-early
341
- * RouteConfigError ethos) on duplicate patterns. `_layout`/`_404`/`_error` files are special; other
342
- * `_`-prefixed files are ignored (private/colocated, never routed).
548
+ * RouteConfigError ethos) on duplicate patterns. `_layout`/`_404`/`_error`/`_loading`/`_middleware`
549
+ * files are special; other `_`-prefixed files are ignored (private/colocated, never routed).
343
550
  */
344
551
  export declare function buildManifest(files: readonly string[], importer: (file: string) => () => Promise<RouteModule>): Manifest;
345
552
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"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"}