@nifrajs/web 4.0.0 → 5.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 (388) hide show
  1. package/README.md +11 -0
  2. package/dist/build-vite.d.ts +19 -0
  3. package/dist/build-vite.d.ts.map +1 -1
  4. package/dist/build-vite.js +31 -10
  5. package/dist/build-vite.js.map +1 -1
  6. package/dist/build.d.ts +8 -10
  7. package/dist/build.d.ts.map +1 -1
  8. package/dist/build.js +90 -31
  9. package/dist/build.js.map +1 -1
  10. package/dist/cdn.d.ts +8 -0
  11. package/dist/cdn.d.ts.map +1 -1
  12. package/dist/cdn.js +14 -15
  13. package/dist/cdn.js.map +1 -1
  14. package/dist/client.d.ts +1 -1
  15. package/dist/client.d.ts.map +1 -1
  16. package/dist/client.js +49 -26
  17. package/dist/client.js.map +1 -1
  18. package/dist/deferred.d.ts +2 -2
  19. package/dist/deferred.d.ts.map +1 -1
  20. package/dist/deferred.js +28 -7
  21. package/dist/deferred.js.map +1 -1
  22. package/dist/dev-feed.d.ts.map +1 -1
  23. package/dist/dev-feed.js +24 -5
  24. package/dist/dev-feed.js.map +1 -1
  25. package/dist/dev-session.d.ts.map +1 -1
  26. package/dist/dev-session.js +4 -14
  27. package/dist/dev-session.js.map +1 -1
  28. package/dist/dev.d.ts +7 -17
  29. package/dist/dev.d.ts.map +1 -1
  30. package/dist/dev.js +13 -1
  31. package/dist/dev.js.map +1 -1
  32. package/dist/draft.d.ts +8 -5
  33. package/dist/draft.d.ts.map +1 -1
  34. package/dist/draft.js +30 -13
  35. package/dist/draft.js.map +1 -1
  36. package/dist/fonts-google.d.ts.map +1 -1
  37. package/dist/fonts-google.js +7 -0
  38. package/dist/fonts-google.js.map +1 -1
  39. package/dist/index.d.ts +2 -2
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +2 -2
  42. package/dist/index.js.map +1 -1
  43. package/dist/internal/codegen.d.ts +1 -0
  44. package/dist/internal/codegen.d.ts.map +1 -1
  45. package/dist/internal/codegen.js +56 -29
  46. package/dist/internal/codegen.js.map +1 -1
  47. package/dist/internal/disposable-dir.d.ts +8 -0
  48. package/dist/internal/disposable-dir.d.ts.map +1 -0
  49. package/dist/internal/disposable-dir.js +25 -0
  50. package/dist/internal/disposable-dir.js.map +1 -0
  51. package/dist/internal/entry-chunks.d.ts +9 -0
  52. package/dist/internal/entry-chunks.d.ts.map +1 -0
  53. package/dist/internal/entry-chunks.js +15 -0
  54. package/dist/internal/entry-chunks.js.map +1 -0
  55. package/dist/internal/evidence-traversal.d.ts +12 -0
  56. package/dist/internal/evidence-traversal.d.ts.map +1 -0
  57. package/dist/internal/evidence-traversal.js +48 -0
  58. package/dist/internal/evidence-traversal.js.map +1 -0
  59. package/dist/internal/head-merge.d.ts +6 -0
  60. package/dist/internal/head-merge.d.ts.map +1 -1
  61. package/dist/internal/head-merge.js +9 -0
  62. package/dist/internal/head-merge.js.map +1 -1
  63. package/dist/internal/js-string.d.ts +2 -0
  64. package/dist/internal/js-string.d.ts.map +1 -1
  65. package/dist/internal/js-string.js +5 -1
  66. package/dist/internal/js-string.js.map +1 -1
  67. package/dist/internal/mount-shadow.js +1 -1
  68. package/dist/internal/mount-shadow.js.map +1 -1
  69. package/dist/internal/output-guard.d.ts +7 -0
  70. package/dist/internal/output-guard.d.ts.map +1 -1
  71. package/dist/internal/output-guard.js +80 -8
  72. package/dist/internal/output-guard.js.map +1 -1
  73. package/dist/internal/page-execution.d.ts +6 -0
  74. package/dist/internal/page-execution.d.ts.map +1 -1
  75. package/dist/internal/page-execution.js +377 -108
  76. package/dist/internal/page-execution.js.map +1 -1
  77. package/dist/internal/progressive-cookies.d.ts +14 -0
  78. package/dist/internal/progressive-cookies.d.ts.map +1 -0
  79. package/dist/internal/progressive-cookies.js +43 -0
  80. package/dist/internal/progressive-cookies.js.map +1 -0
  81. package/dist/internal/public-env.d.ts +2 -0
  82. package/dist/internal/public-env.d.ts.map +1 -0
  83. package/dist/internal/public-env.js +13 -0
  84. package/dist/internal/public-env.js.map +1 -0
  85. package/dist/internal/render-document.d.ts +1 -0
  86. package/dist/internal/render-document.d.ts.map +1 -1
  87. package/dist/internal/render-document.js +28 -5
  88. package/dist/internal/render-document.js.map +1 -1
  89. package/dist/internal/response-controls.d.ts +2 -0
  90. package/dist/internal/response-controls.d.ts.map +1 -1
  91. package/dist/internal/response-controls.js +26 -16
  92. package/dist/internal/response-controls.js.map +1 -1
  93. package/dist/internal/revive-dates.d.ts +16 -0
  94. package/dist/internal/revive-dates.d.ts.map +1 -0
  95. package/dist/internal/revive-dates.js +32 -0
  96. package/dist/internal/revive-dates.js.map +1 -0
  97. package/dist/internal/route-path.d.ts +8 -0
  98. package/dist/internal/route-path.d.ts.map +1 -0
  99. package/dist/internal/route-path.js +8 -0
  100. package/dist/internal/route-path.js.map +1 -0
  101. package/dist/internal/secret-scan.d.ts.map +1 -1
  102. package/dist/internal/secret-scan.js +105 -19
  103. package/dist/internal/secret-scan.js.map +1 -1
  104. package/dist/internal/server-boundary.d.ts.map +1 -1
  105. package/dist/internal/server-boundary.js +33 -5
  106. package/dist/internal/server-boundary.js.map +1 -1
  107. package/dist/internal/web-app.d.ts +21 -16
  108. package/dist/internal/web-app.d.ts.map +1 -1
  109. package/dist/internal/web-app.js +73 -21
  110. package/dist/internal/web-app.js.map +1 -1
  111. package/dist/internal/wire-date.d.ts +3 -0
  112. package/dist/internal/wire-date.d.ts.map +1 -0
  113. package/dist/internal/wire-date.js +14 -0
  114. package/dist/internal/wire-date.js.map +1 -0
  115. package/dist/internal/zone-graph.d.ts +4 -0
  116. package/dist/internal/zone-graph.d.ts.map +1 -1
  117. package/dist/internal/zone-graph.js +54 -14
  118. package/dist/internal/zone-graph.js.map +1 -1
  119. package/dist/isr.d.ts +58 -2
  120. package/dist/isr.d.ts.map +1 -1
  121. package/dist/isr.js +296 -39
  122. package/dist/isr.js.map +1 -1
  123. package/dist/llms-txt.d.ts +2 -0
  124. package/dist/llms-txt.d.ts.map +1 -1
  125. package/dist/llms-txt.js +29 -3
  126. package/dist/llms-txt.js.map +1 -1
  127. package/dist/manifest.d.ts +28 -4
  128. package/dist/manifest.d.ts.map +1 -1
  129. package/dist/manifest.js +14 -3
  130. package/dist/manifest.js.map +1 -1
  131. package/dist/open-resolved.d.ts +18 -0
  132. package/dist/open-resolved.d.ts.map +1 -0
  133. package/dist/open-resolved.js +62 -0
  134. package/dist/open-resolved.js.map +1 -0
  135. package/dist/plugins/kit.d.ts +1 -0
  136. package/dist/plugins/kit.d.ts.map +1 -1
  137. package/dist/plugins/kit.js +26 -11
  138. package/dist/plugins/kit.js.map +1 -1
  139. package/dist/plugins/vite-leak-guard.d.ts +3 -1
  140. package/dist/plugins/vite-leak-guard.d.ts.map +1 -1
  141. package/dist/plugins/vite-leak-guard.js +4 -0
  142. package/dist/plugins/vite-leak-guard.js.map +1 -1
  143. package/dist/plugins/zone-guard.d.ts.map +1 -1
  144. package/dist/plugins/zone-guard.js +10 -2
  145. package/dist/plugins/zone-guard.js.map +1 -1
  146. package/dist/public-dir.d.ts +8 -1
  147. package/dist/public-dir.d.ts.map +1 -1
  148. package/dist/public-dir.js +17 -6
  149. package/dist/public-dir.js.map +1 -1
  150. package/dist/query.d.ts +13 -4
  151. package/dist/query.d.ts.map +1 -1
  152. package/dist/query.js +89 -26
  153. package/dist/query.js.map +1 -1
  154. package/dist/render-seam.d.ts +2 -0
  155. package/dist/render-seam.d.ts.map +1 -1
  156. package/dist/render-seam.js +1 -0
  157. package/dist/render-seam.js.map +1 -1
  158. package/dist/route-types.d.ts.map +1 -1
  159. package/dist/route-types.js +20 -9
  160. package/dist/route-types.js.map +1 -1
  161. package/dist/router.d.ts +9 -2
  162. package/dist/router.d.ts.map +1 -1
  163. package/dist/router.js +39 -46
  164. package/dist/router.js.map +1 -1
  165. package/dist/server-components/build-info.d.ts +3 -0
  166. package/dist/server-components/build-info.d.ts.map +1 -0
  167. package/dist/server-components/build-info.js +7 -0
  168. package/dist/server-components/build-info.js.map +1 -0
  169. package/dist/server-components/build-target.d.ts +12 -0
  170. package/dist/server-components/build-target.d.ts.map +1 -0
  171. package/dist/server-components/build-target.js +153 -0
  172. package/dist/server-components/build-target.js.map +1 -0
  173. package/dist/server-components/build.d.ts +24 -0
  174. package/dist/server-components/build.d.ts.map +1 -0
  175. package/dist/server-components/build.js +366 -0
  176. package/dist/server-components/build.js.map +1 -0
  177. package/dist/server-components/bundle-proof.d.ts +3 -0
  178. package/dist/server-components/bundle-proof.d.ts.map +1 -0
  179. package/dist/server-components/bundle-proof.js +23 -0
  180. package/dist/server-components/bundle-proof.js.map +1 -0
  181. package/dist/server-components/client.d.ts +46 -0
  182. package/dist/server-components/client.d.ts.map +1 -0
  183. package/dist/server-components/client.js +594 -0
  184. package/dist/server-components/client.js.map +1 -0
  185. package/dist/server-components/definition.d.ts +11 -0
  186. package/dist/server-components/definition.d.ts.map +1 -0
  187. package/dist/server-components/definition.js +94 -0
  188. package/dist/server-components/definition.js.map +1 -0
  189. package/dist/server-components/dev-http.d.ts +5 -0
  190. package/dist/server-components/dev-http.d.ts.map +1 -0
  191. package/dist/server-components/dev-http.js +71 -0
  192. package/dist/server-components/dev-http.js.map +1 -0
  193. package/dist/server-components/error.d.ts +9 -0
  194. package/dist/server-components/error.d.ts.map +1 -0
  195. package/dist/server-components/error.js +24 -0
  196. package/dist/server-components/error.js.map +1 -0
  197. package/dist/server-components/frames.d.ts +7 -0
  198. package/dist/server-components/frames.d.ts.map +1 -0
  199. package/dist/server-components/frames.js +169 -0
  200. package/dist/server-components/frames.js.map +1 -0
  201. package/dist/server-components/html-policy.d.ts +6 -0
  202. package/dist/server-components/html-policy.d.ts.map +1 -0
  203. package/dist/server-components/html-policy.js +75 -0
  204. package/dist/server-components/html-policy.js.map +1 -0
  205. package/dist/server-components/html.d.ts +4 -0
  206. package/dist/server-components/html.d.ts.map +1 -0
  207. package/dist/server-components/html.js +67 -0
  208. package/dist/server-components/html.js.map +1 -0
  209. package/dist/server-components/islands.d.ts +44 -0
  210. package/dist/server-components/islands.d.ts.map +1 -0
  211. package/dist/server-components/islands.js +42 -0
  212. package/dist/server-components/islands.js.map +1 -0
  213. package/dist/server-components/native.d.ts +4 -0
  214. package/dist/server-components/native.d.ts.map +1 -0
  215. package/dist/server-components/native.js +81 -0
  216. package/dist/server-components/native.js.map +1 -0
  217. package/dist/server-components/portal.d.ts +6 -0
  218. package/dist/server-components/portal.d.ts.map +1 -0
  219. package/dist/server-components/portal.js +35 -0
  220. package/dist/server-components/portal.js.map +1 -0
  221. package/dist/server-components/props.d.ts +3 -0
  222. package/dist/server-components/props.d.ts.map +1 -0
  223. package/dist/server-components/props.js +14 -0
  224. package/dist/server-components/props.js.map +1 -0
  225. package/dist/server-components/protocol.d.ts +44 -0
  226. package/dist/server-components/protocol.d.ts.map +1 -0
  227. package/dist/server-components/protocol.js +139 -0
  228. package/dist/server-components/protocol.js.map +1 -0
  229. package/dist/server-components/range.d.ts +24 -0
  230. package/dist/server-components/range.d.ts.map +1 -0
  231. package/dist/server-components/range.js +263 -0
  232. package/dist/server-components/range.js.map +1 -0
  233. package/dist/server-components/registry.d.ts +6 -0
  234. package/dist/server-components/registry.d.ts.map +1 -0
  235. package/dist/server-components/registry.js +30 -0
  236. package/dist/server-components/registry.js.map +1 -0
  237. package/dist/server-components/response.d.ts +4 -0
  238. package/dist/server-components/response.d.ts.map +1 -0
  239. package/dist/server-components/response.js +32 -0
  240. package/dist/server-components/response.js.map +1 -0
  241. package/dist/server-components/router-integration.d.ts +9 -0
  242. package/dist/server-components/router-integration.d.ts.map +1 -0
  243. package/dist/server-components/router-integration.js +29 -0
  244. package/dist/server-components/router-integration.js.map +1 -0
  245. package/dist/server-components/runtime.d.ts +14 -0
  246. package/dist/server-components/runtime.d.ts.map +1 -0
  247. package/dist/server-components/runtime.js +276 -0
  248. package/dist/server-components/runtime.js.map +1 -0
  249. package/dist/server-components/scheduler.d.ts +14 -0
  250. package/dist/server-components/scheduler.d.ts.map +1 -0
  251. package/dist/server-components/scheduler.js +74 -0
  252. package/dist/server-components/scheduler.js.map +1 -0
  253. package/dist/server-components/schema.d.ts +4 -0
  254. package/dist/server-components/schema.d.ts.map +1 -0
  255. package/dist/server-components/schema.js +77 -0
  256. package/dist/server-components/schema.js.map +1 -0
  257. package/dist/server-components/server-entry.d.ts +12 -0
  258. package/dist/server-components/server-entry.d.ts.map +1 -0
  259. package/dist/server-components/server-entry.js +90 -0
  260. package/dist/server-components/server-entry.js.map +1 -0
  261. package/dist/server-components/source.d.ts +15 -0
  262. package/dist/server-components/source.d.ts.map +1 -0
  263. package/dist/server-components/source.js +269 -0
  264. package/dist/server-components/source.js.map +1 -0
  265. package/dist/server-components/state.d.ts +4 -0
  266. package/dist/server-components/state.d.ts.map +1 -0
  267. package/dist/server-components/state.js +123 -0
  268. package/dist/server-components/state.js.map +1 -0
  269. package/dist/server-components/stream.d.ts +6 -0
  270. package/dist/server-components/stream.d.ts.map +1 -0
  271. package/dist/server-components/stream.js +70 -0
  272. package/dist/server-components/stream.js.map +1 -0
  273. package/dist/server-components/trusted-html.d.ts +3 -0
  274. package/dist/server-components/trusted-html.d.ts.map +1 -0
  275. package/dist/server-components/trusted-html.js +14 -0
  276. package/dist/server-components/trusted-html.js.map +1 -0
  277. package/dist/server-components/types.d.ts +107 -0
  278. package/dist/server-components/types.d.ts.map +1 -0
  279. package/dist/server-components/types.js +2 -0
  280. package/dist/server-components/types.js.map +1 -0
  281. package/dist/server-components/typescript.d.ts +11 -0
  282. package/dist/server-components/typescript.d.ts.map +1 -0
  283. package/dist/server-components/typescript.js +28 -0
  284. package/dist/server-components/typescript.js.map +1 -0
  285. package/dist/server-components/value.d.ts +5 -0
  286. package/dist/server-components/value.d.ts.map +1 -0
  287. package/dist/server-components/value.js +77 -0
  288. package/dist/server-components/value.js.map +1 -0
  289. package/dist/server-components/vite.d.ts +12 -0
  290. package/dist/server-components/vite.d.ts.map +1 -0
  291. package/dist/server-components/vite.js +197 -0
  292. package/dist/server-components/vite.js.map +1 -0
  293. package/dist/server-components.d.ts +5 -0
  294. package/dist/server-components.d.ts.map +1 -0
  295. package/dist/server-components.js +4 -0
  296. package/dist/server-components.js.map +1 -0
  297. package/dist/service-worker.d.ts +8 -1
  298. package/dist/service-worker.d.ts.map +1 -1
  299. package/dist/service-worker.js +20 -6
  300. package/dist/service-worker.js.map +1 -1
  301. package/dist/vite.d.ts +12 -0
  302. package/dist/vite.d.ts.map +1 -1
  303. package/dist/vite.js +77 -17
  304. package/dist/vite.js.map +1 -1
  305. package/dist/zones.d.ts +40 -0
  306. package/dist/zones.d.ts.map +1 -1
  307. package/dist/zones.js +170 -6
  308. package/dist/zones.js.map +1 -1
  309. package/package.json +97 -4
  310. package/src/build-vite.ts +31 -9
  311. package/src/build.ts +109 -31
  312. package/src/cdn.ts +18 -12
  313. package/src/client.ts +48 -23
  314. package/src/deferred.ts +27 -9
  315. package/src/dev-feed.ts +24 -5
  316. package/src/dev-session.ts +4 -13
  317. package/src/dev.ts +29 -1
  318. package/src/draft.ts +35 -14
  319. package/src/fonts-google.ts +10 -0
  320. package/src/index.ts +3 -2
  321. package/src/internal/codegen.ts +60 -29
  322. package/src/internal/disposable-dir.ts +24 -0
  323. package/src/internal/entry-chunks.ts +18 -0
  324. package/src/internal/evidence-traversal.ts +57 -0
  325. package/src/internal/head-merge.ts +16 -0
  326. package/src/internal/js-string.ts +6 -1
  327. package/src/internal/mount-shadow.ts +1 -1
  328. package/src/internal/output-guard.ts +88 -7
  329. package/src/internal/page-execution.ts +506 -108
  330. package/src/internal/progressive-cookies.ts +60 -0
  331. package/src/internal/public-env.ts +14 -0
  332. package/src/internal/render-document.ts +26 -11
  333. package/src/internal/response-controls.ts +31 -14
  334. package/src/internal/revive-dates.ts +35 -0
  335. package/src/internal/route-path.ts +8 -0
  336. package/src/internal/secret-scan.ts +104 -17
  337. package/src/internal/server-boundary.ts +29 -5
  338. package/src/internal/web-app.ts +116 -37
  339. package/src/internal/wire-date.ts +16 -0
  340. package/src/internal/zone-graph.ts +59 -19
  341. package/src/isr.ts +351 -43
  342. package/src/llms-txt.ts +32 -3
  343. package/src/manifest.ts +43 -7
  344. package/src/open-resolved.ts +64 -0
  345. package/src/plugins/kit.ts +31 -11
  346. package/src/plugins/vite-leak-guard.ts +5 -1
  347. package/src/plugins/zone-guard.ts +11 -2
  348. package/src/public-dir.ts +27 -8
  349. package/src/query.ts +107 -26
  350. package/src/render-seam.ts +2 -0
  351. package/src/route-types.ts +34 -7
  352. package/src/router.ts +58 -55
  353. package/src/server-components/build-info.ts +11 -0
  354. package/src/server-components/build-target.ts +194 -0
  355. package/src/server-components/build.ts +419 -0
  356. package/src/server-components/bundle-proof.ts +33 -0
  357. package/src/server-components/client.ts +663 -0
  358. package/src/server-components/definition.ts +125 -0
  359. package/src/server-components/dev-http.ts +75 -0
  360. package/src/server-components/error.ts +24 -0
  361. package/src/server-components/frames.ts +181 -0
  362. package/src/server-components/html-policy.ts +94 -0
  363. package/src/server-components/html.ts +81 -0
  364. package/src/server-components/islands.ts +111 -0
  365. package/src/server-components/native.ts +101 -0
  366. package/src/server-components/portal.ts +42 -0
  367. package/src/server-components/props.ts +19 -0
  368. package/src/server-components/protocol.ts +167 -0
  369. package/src/server-components/range.ts +313 -0
  370. package/src/server-components/registry.ts +34 -0
  371. package/src/server-components/response.ts +44 -0
  372. package/src/server-components/router-integration.ts +40 -0
  373. package/src/server-components/runtime.ts +376 -0
  374. package/src/server-components/scheduler.ts +84 -0
  375. package/src/server-components/schema.ts +69 -0
  376. package/src/server-components/server-entry.ts +98 -0
  377. package/src/server-components/source.ts +324 -0
  378. package/src/server-components/state.ts +143 -0
  379. package/src/server-components/stream.ts +71 -0
  380. package/src/server-components/trusted-html.ts +21 -0
  381. package/src/server-components/types.ts +138 -0
  382. package/src/server-components/typescript.ts +39 -0
  383. package/src/server-components/value.ts +82 -0
  384. package/src/server-components/vite.ts +242 -0
  385. package/src/server-components.ts +32 -0
  386. package/src/service-worker.ts +24 -7
  387. package/src/vite.ts +68 -17
  388. package/src/zones.ts +208 -7
@@ -0,0 +1,276 @@
1
+ import { isResponseResult, isStatusSignal, STATUS_SIGNAL } from "../internal/render-document.js";
2
+ import { authorizeServerComponent, isServerComponent, prepareAuthorizedServerComponent, serverComponentCapabilities, validateServerComponentInput, } from "./definition.js";
3
+ import { ServerComponentError } from "./error.js";
4
+ import { componentFrames } from "./frames.js";
5
+ import { componentRangeHTML } from "./html.js";
6
+ import { COMPONENT_LIMITS, COMPONENT_RESPONSE_HEADERS, componentFailure, componentKey, readComponentRequest, } from "./protocol.js";
7
+ import { BoundedComponentTasks, componentAbort } from "./scheduler.js";
8
+ import { componentValue } from "./schema.js";
9
+ import { componentInputKey } from "./value.js";
10
+ const admission = new BoundedComponentTasks(COMPONENT_LIMITS.activeLoads, COMPONENT_LIMITS.queuedLoads);
11
+ const encoder = new TextEncoder();
12
+ const token = /^[A-Za-z0-9_-]{1,128}$/;
13
+ export function serverComponentInstance(component, key, input, parent) {
14
+ const instance = { component, key, input };
15
+ if (parent !== undefined)
16
+ Object.assign(instance, { parent });
17
+ return instance;
18
+ }
19
+ export function defineComponentOwner(owner) {
20
+ return owner;
21
+ }
22
+ async function identity(value) {
23
+ const digest = await crypto.subtle.digest("SHA-256", encoder.encode(JSON.stringify(value)));
24
+ return [...new Uint8Array(digest)].map((byte) => byte.toString(16).padStart(2, "0")).join("");
25
+ }
26
+ export function serverComponentIdentity(owner, component, key, parent = null) {
27
+ if (component.reference === undefined ||
28
+ !componentKey(key) ||
29
+ (parent !== null && !token.test(parent)))
30
+ throw new ServerComponentError("component_contract");
31
+ return identity([owner, component.reference, parent, key]);
32
+ }
33
+ export function createServerComponents(options) {
34
+ if (!token.test(options.build) ||
35
+ options.adapter.version !== 1 ||
36
+ !["react", "vue", "svelte", "solid", "preact"].includes(options.adapter.name))
37
+ throw new ServerComponentError("component_contract");
38
+ const owners = new Map();
39
+ const assets = new Set(options.assets ?? []);
40
+ if ([...assets].some((path) => !/^\/assets\/[A-Za-z0-9_./-]+$/.test(path) || path.split("/").includes("..")))
41
+ throw new ServerComponentError("component_contract");
42
+ const capabilities = new Map((options.capabilities ?? []).map((capability) => [capability.id, capability]));
43
+ if (capabilities.size !== (options.capabilities?.length ?? 0))
44
+ throw new ServerComponentError("component_contract");
45
+ for (const [routeId, owner] of Object.entries(options.owners)) {
46
+ if (typeof owner.instances !== "function" ||
47
+ (owner.scope !== "anonymous" && typeof owner.scope !== "function"))
48
+ throw new ServerComponentError("component_contract");
49
+ const components = new Map();
50
+ const allowed = new Set(owner.capabilities ?? []);
51
+ for (const capability of allowed) {
52
+ const declared = capabilities.get(capability);
53
+ if (declared === undefined || (declared.zone === "domain" && declared.access !== "read"))
54
+ throw new ServerComponentError("component_contract");
55
+ }
56
+ for (const component of owner.components) {
57
+ if (!isServerComponent(component) ||
58
+ component.reference === undefined ||
59
+ !token.test(component.reference) ||
60
+ components.has(component.reference))
61
+ throw new ServerComponentError("component_contract");
62
+ components.set(component.reference, component);
63
+ if (serverComponentCapabilities(component).some((capability) => !allowed.has(capability)))
64
+ throw new ServerComponentError("component_contract");
65
+ }
66
+ owners.set(routeId, { owner, components });
67
+ }
68
+ return {
69
+ owns: (routeId) => owners.has(routeId),
70
+ capabilities: (routeId) => owners.get(routeId)?.owner.capabilities ?? [],
71
+ classify(request, routeId) {
72
+ const selection = readComponentRequest(request);
73
+ if (selection === undefined)
74
+ return undefined;
75
+ if (selection.build !== options.build)
76
+ throw new ServerComponentError("component_version", 409);
77
+ if (!owners.get(routeId)?.components.has(selection.reference))
78
+ throw new ServerComponentError("component_unavailable", 404);
79
+ return selection;
80
+ },
81
+ async execute(routeId, context, selection, nonce) {
82
+ const entry = owners.get(routeId);
83
+ if (entry === undefined)
84
+ throw new ServerComponentError("component_unavailable", 404);
85
+ const signal = AbortSignal.any([
86
+ context.signal,
87
+ AbortSignal.timeout(COMPONENT_LIMITS.executionMs),
88
+ ]);
89
+ const ctx = Object.create(context, {
90
+ signal: { value: signal, enumerable: true },
91
+ });
92
+ const { scope, instances } = await admission.run(signal, async () => ({
93
+ scope: entry.owner.scope === "anonymous" ? "anonymous" : await entry.owner.scope(ctx),
94
+ instances: await entry.owner.instances(ctx),
95
+ }));
96
+ if (typeof scope !== "string" || !token.test(scope))
97
+ throw new ServerComponentError("component_contract");
98
+ if (!Array.isArray(instances) || instances.length > COMPONENT_LIMITS.instances)
99
+ throw new ServerComponentError("component_limit", 413);
100
+ const candidates = await Promise.all(instances.map(async (instance) => {
101
+ const reference = instance.component.reference;
102
+ if (reference === undefined ||
103
+ entry.components.get(reference) !== instance.component ||
104
+ !componentKey(instance.key) ||
105
+ (instance.parent !== undefined && !token.test(instance.parent)))
106
+ throw new ServerComponentError("component_contract");
107
+ return {
108
+ ...instance,
109
+ reference,
110
+ id: await serverComponentIdentity(routeId, instance.component, instance.key, instance.parent ?? null),
111
+ input: componentValue(instance.input, COMPONENT_LIMITS.inputBytes),
112
+ };
113
+ }));
114
+ const byId = new Map(candidates.map((instance) => [instance.id, instance]));
115
+ if (byId.size !== candidates.length)
116
+ throw new ServerComponentError("component_contract");
117
+ await admission.run(signal, () => Promise.all(candidates.map((instance) =>
118
+ // biome-ignore lint/plugin/requireSafetyCommentForTypeAssertion: The owner allowlist and private definition registry identify this handle; input validation precedes callback execution.
119
+ validateServerComponentInput(instance.component, instance.input))));
120
+ for (const instance of candidates) {
121
+ const chain = new Set([instance.id]);
122
+ let parent = instance.parent;
123
+ while (parent !== undefined) {
124
+ const ancestor = byId.get(parent);
125
+ if (ancestor === undefined || chain.has(parent) || chain.size >= 16)
126
+ throw new ServerComponentError("component_contract");
127
+ chain.add(parent);
128
+ parent = ancestor.parent;
129
+ }
130
+ }
131
+ const roots = selection === undefined
132
+ ? candidates
133
+ : candidates.filter((item) => item.reference === selection.reference &&
134
+ item.key === selection.key &&
135
+ (item.parent ?? null) === selection.parent &&
136
+ componentInputKey(item.input) === componentInputKey(selection.input));
137
+ if (selection !== undefined && roots.length !== 1)
138
+ throw new ServerComponentError("component_unavailable", 404);
139
+ const selected = new Set(roots.map((item) => item.id));
140
+ if (selection !== undefined)
141
+ for (let depth = 0; depth < 16; depth++)
142
+ for (const item of candidates)
143
+ if (item.parent !== undefined && selected.has(item.parent))
144
+ selected.add(item.id);
145
+ const picked = selection === undefined
146
+ ? candidates
147
+ : [
148
+ ...roots,
149
+ ...candidates.filter((item) => selected.has(item.id) && item.id !== roots[0]?.id),
150
+ ];
151
+ const authorized = new Map();
152
+ await admission.run(signal, async () => {
153
+ for (const instance of picked)
154
+ authorized.set(instance.id, await authorizeServerComponent(
155
+ // biome-ignore lint/plugin/requireSafetyCommentForTypeAssertion: The owner allowlist and private definition registry identify this handle; input validation precedes callback execution.
156
+ instance.component, instance.input, ctx));
157
+ });
158
+ const requestTasks = new BoundedComponentTasks(COMPONENT_LIMITS.requestLoads, COMPONENT_LIMITS.instances);
159
+ let bytes = 0;
160
+ let count = candidates.length;
161
+ const pending = new Map();
162
+ const render = (instance) => {
163
+ const prior = pending.get(instance.id);
164
+ if (prior !== undefined)
165
+ return prior;
166
+ const task = (async () => {
167
+ const children = await Promise.all(picked.filter((child) => child.parent === instance.id).map(render));
168
+ return requestTasks.run(signal, () => admission.run(signal, async () => {
169
+ const id = instance.id;
170
+ // The runtime allowlist verified the handle; prepare still validates the schema-derived input and output.
171
+ const prepared = await prepareAuthorizedServerComponent(authorized.get(id));
172
+ const renderContext = {
173
+ reference: instance.reference,
174
+ instance: id,
175
+ signal,
176
+ children,
177
+ };
178
+ if (nonce !== undefined)
179
+ Object.assign(renderContext, { nonce });
180
+ const rendered = await options.adapter.render(prepared.view, prepared.props, renderContext);
181
+ if (signal.aborted)
182
+ throw componentAbort(signal);
183
+ if (typeof rendered.html !== "string")
184
+ throw new ServerComponentError("component_contract");
185
+ const html = componentRangeHTML(rendered.html, assets);
186
+ count += rendered.islands?.length ?? 0;
187
+ if (count > COMPONENT_LIMITS.instances)
188
+ throw new ServerComponentError("component_limit", 413);
189
+ const record = {
190
+ instance: id,
191
+ reference: instance.reference,
192
+ key: instance.key,
193
+ parent: instance.parent ?? null,
194
+ input: instance.input,
195
+ html,
196
+ };
197
+ if (rendered.payload !== undefined)
198
+ Object.assign(record, {
199
+ payload: componentValue(rendered.payload, COMPONENT_LIMITS.outputBytes),
200
+ });
201
+ if (rendered.islands !== undefined)
202
+ Object.assign(record, {
203
+ islands: rendered.islands.map((island) => ({
204
+ ...island,
205
+ props: componentValue(island.props),
206
+ })),
207
+ });
208
+ const size = encoder.encode(JSON.stringify(record)).length;
209
+ bytes += size;
210
+ if (size > COMPONENT_LIMITS.outputBytes ||
211
+ bytes >
212
+ (selection === undefined
213
+ ? COMPONENT_LIMITS.documentBytes
214
+ : COMPONENT_LIMITS.outputBytes))
215
+ throw new ServerComponentError("component_limit", 413);
216
+ return record;
217
+ }));
218
+ })();
219
+ pending.set(instance.id, task);
220
+ return task;
221
+ };
222
+ const records = await Promise.all(picked.map(render));
223
+ if (signal.aborted)
224
+ throw componentAbort(signal);
225
+ return {
226
+ v: 1,
227
+ build: options.build,
228
+ adapter: options.adapter.name,
229
+ owner: await identity(routeId),
230
+ scope,
231
+ records,
232
+ };
233
+ },
234
+ response(state, selection) {
235
+ return new Response(componentFrames({
236
+ ...selection,
237
+ input: undefined,
238
+ adapter: state.adapter,
239
+ owner: state.owner,
240
+ scope: state.scope,
241
+ instance: state.records[0]?.instance,
242
+ }, state), { headers: COMPONENT_RESPONSE_HEADERS });
243
+ },
244
+ failure(error) {
245
+ if (isResponseResult(error))
246
+ return this.failure(error.toResponse());
247
+ if (isStatusSignal(error)) {
248
+ const status = error[STATUS_SIGNAL];
249
+ const init = { status: status.status };
250
+ if (status.headers !== undefined)
251
+ init.headers = status.headers;
252
+ return this.failure(new Response(null, init));
253
+ }
254
+ if (error instanceof Response) {
255
+ const headers = new Headers(error.headers);
256
+ headers.set("cache-control", "private, no-store");
257
+ headers.delete("content-length");
258
+ if (error.status >= 300 && error.status < 400)
259
+ return new Response(null, { status: error.status, headers });
260
+ if (error.status < 300) {
261
+ headers.set("x-nifra-component-control", String(error.status));
262
+ return Response.json({ v: 1, control: { status: error.status } }, { headers });
263
+ }
264
+ const code = [401, 403, 404].includes(error.status)
265
+ ? "component_denied"
266
+ : "component_failed";
267
+ const response = componentFailure(new ServerComponentError(code, error.status >= 400 ? error.status : 500));
268
+ headers.set("content-type", "application/json");
269
+ headers.set("x-content-type-options", "nosniff");
270
+ return new Response(response.body, { status: response.status, headers });
271
+ }
272
+ return componentFailure(error);
273
+ },
274
+ };
275
+ }
276
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/server-components/runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { ServerComponentError } from "./error.js";
2
+ export declare function componentAbort(signal: AbortSignal): ServerComponentError;
3
+ export declare class BoundedComponentTasks {
4
+ #private;
5
+ readonly concurrency: number;
6
+ readonly capacity: number;
7
+ constructor(concurrency: number, capacity: number);
8
+ get counts(): {
9
+ active: number;
10
+ queued: number;
11
+ };
12
+ run<T>(signal: AbortSignal, work: () => T | Promise<T>): Promise<T>;
13
+ }
14
+ //# sourceMappingURL=scheduler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../src/server-components/scheduler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AASjD,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,oBAAoB,CAOxE;AAED,qBAAa,qBAAqB;;IAI9B,QAAQ,CAAC,WAAW,EAAE,MAAM;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM;gBADhB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM;IAU3B,IAAI,MAAM,IAAI;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAE/C;IAED,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CA8CpE"}
@@ -0,0 +1,74 @@
1
+ import { ServerComponentError } from "./error.js";
2
+ export function componentAbort(signal) {
3
+ return new ServerComponentError(signal.reason instanceof DOMException && signal.reason.name === "TimeoutError"
4
+ ? "component_timeout"
5
+ : "component_cancelled", 504);
6
+ }
7
+ export class BoundedComponentTasks {
8
+ concurrency;
9
+ capacity;
10
+ #active = 0;
11
+ #queue = [];
12
+ constructor(concurrency, capacity) {
13
+ this.concurrency = concurrency;
14
+ this.capacity = capacity;
15
+ if (!Number.isSafeInteger(concurrency) ||
16
+ concurrency < 1 ||
17
+ !Number.isSafeInteger(capacity) ||
18
+ capacity < 0)
19
+ throw new ServerComponentError("component_contract");
20
+ }
21
+ get counts() {
22
+ return { active: this.#active, queued: this.#queue.length };
23
+ }
24
+ run(signal, work) {
25
+ if (signal.aborted)
26
+ return Promise.reject(componentAbort(signal));
27
+ if (this.#active >= this.concurrency && this.#queue.length >= this.capacity)
28
+ return Promise.reject(new ServerComponentError("component_busy", 429));
29
+ return new Promise((resolve, reject) => {
30
+ let began = false;
31
+ const cancel = () => {
32
+ if (!began) {
33
+ const index = this.#queue.indexOf(pending);
34
+ if (index !== -1)
35
+ this.#queue.splice(index, 1);
36
+ signal.removeEventListener("abort", cancel);
37
+ }
38
+ reject(componentAbort(signal));
39
+ };
40
+ const start = () => {
41
+ began = true;
42
+ this.#active++;
43
+ const complete = () => {
44
+ signal.removeEventListener("abort", cancel);
45
+ this.#active--;
46
+ const next = this.#queue.shift();
47
+ if (next !== undefined)
48
+ next.start();
49
+ };
50
+ // Admission is released by actual completion, never by the public promise's abort.
51
+ void Promise.resolve()
52
+ .then(() => {
53
+ if (signal.aborted)
54
+ throw componentAbort(signal);
55
+ return work();
56
+ })
57
+ .then((value) => {
58
+ complete();
59
+ resolve(value);
60
+ }, (error) => {
61
+ complete();
62
+ reject(error);
63
+ });
64
+ };
65
+ const pending = { signal, start, reject, cancel };
66
+ signal.addEventListener("abort", cancel, { once: true });
67
+ if (this.#active < this.concurrency)
68
+ start();
69
+ else
70
+ this.#queue.push(pending);
71
+ });
72
+ }
73
+ }
74
+ //# sourceMappingURL=scheduler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../src/server-components/scheduler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { StandardSchemaV1 } from "@nifrajs/core/server";
2
+ export { componentValue } from "./value.js";
3
+ export declare function assertComponentSchema(schema: StandardSchemaV1): void;
4
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/server-components/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAI5D,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAK3C,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,CA2DpE"}
@@ -0,0 +1,77 @@
1
+ import { jsonSchemaOf } from "../internal/output-guard.js";
2
+ import { ServerComponentError } from "./error.js";
3
+ export { componentValue } from "./value.js";
4
+ const forbidden = new Set(["__proto__", "prototype", "constructor"]);
5
+ const scalar = new Set(["string", "number", "integer", "boolean", "null"]);
6
+ export function assertComponentSchema(schema) {
7
+ const root = jsonSchemaOf(schema);
8
+ if (root === undefined)
9
+ throw new ServerComponentError("component_contract");
10
+ const visiting = new Set();
11
+ const checked = new Set();
12
+ const visit = (value, depth) => {
13
+ if (typeof value !== "object" || value === null || Array.isArray(value) || depth > 32) {
14
+ throw new ServerComponentError("component_contract");
15
+ }
16
+ if (visiting.has(value))
17
+ throw new ServerComponentError("component_contract");
18
+ if (checked.has(value))
19
+ return;
20
+ visiting.add(value);
21
+ // biome-ignore lint/plugin/requireSafetyCommentForTypeAssertion: Schema traversal verifies object shape and local references before inspecting schema members.
22
+ const node = value;
23
+ if (node.$ref !== undefined) {
24
+ if (typeof node.$ref !== "string" || !node.$ref.startsWith("#/"))
25
+ throw new ServerComponentError("component_contract");
26
+ let target = root;
27
+ for (const part of node.$ref.slice(2).split("/")) {
28
+ const name = part.replace(/~1/g, "/").replace(/~0/g, "~");
29
+ if (forbidden.has(name) ||
30
+ typeof target !== "object" ||
31
+ target === null ||
32
+ !Object.hasOwn(target, name)) {
33
+ throw new ServerComponentError("component_contract");
34
+ }
35
+ // biome-ignore lint/plugin/requireSafetyCommentForTypeAssertion: Schema traversal verifies object shape and local references before inspecting schema members.
36
+ target = target[name];
37
+ }
38
+ visit(target, depth + 1);
39
+ }
40
+ else if (node.anyOf !== undefined || node.oneOf !== undefined || node.allOf !== undefined) {
41
+ for (const name of ["anyOf", "oneOf", "allOf"]) {
42
+ if (node[name] === undefined)
43
+ continue;
44
+ if (!Array.isArray(node[name]) || node[name].length === 0)
45
+ throw new ServerComponentError("component_contract");
46
+ for (const child of node[name])
47
+ visit(child, depth + 1);
48
+ }
49
+ }
50
+ else if (node.type === "object") {
51
+ if (node.additionalProperties !== false || node.patternProperties !== undefined)
52
+ throw new ServerComponentError("component_contract");
53
+ const properties = node.properties;
54
+ if (typeof properties !== "object" || properties === null || Array.isArray(properties))
55
+ throw new ServerComponentError("component_contract");
56
+ for (const [name, child] of Object.entries(properties)) {
57
+ if (forbidden.has(name))
58
+ throw new ServerComponentError("component_contract");
59
+ visit(child, depth + 1);
60
+ }
61
+ }
62
+ else if (node.type === "array") {
63
+ if (Array.isArray(node.items))
64
+ for (const child of node.items)
65
+ visit(child, depth + 1);
66
+ else
67
+ visit(node.items, depth + 1);
68
+ }
69
+ else if (typeof node.type !== "string" || !scalar.has(node.type)) {
70
+ throw new ServerComponentError("component_contract");
71
+ }
72
+ visiting.delete(value);
73
+ checked.add(value);
74
+ };
75
+ visit(root, 0);
76
+ }
77
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/server-components/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export interface ComponentEntryOptions {
2
+ readonly build: string;
3
+ readonly entry: string;
4
+ readonly styles: readonly string[];
5
+ readonly assets: readonly string[];
6
+ readonly serverEntry: string;
7
+ readonly platform: "bun" | "node" | "deno" | "cloudflare" | "vercel";
8
+ readonly manifestDigest?: string;
9
+ }
10
+ /** Only validated, build-owned paths and tokens become generated source. */
11
+ export declare function componentServerEntry(options: ComponentEntryOptions): string;
12
+ //# sourceMappingURL=server-entry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-entry.d.ts","sourceRoot":"","sources":["../../src/server-components/server-entry.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;IAClC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,QAAQ,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,YAAY,GAAG,QAAQ,CAAA;IACpE,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CACjC;AAED,4EAA4E;AAC5E,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,MAAM,CAsF3E"}
@@ -0,0 +1,90 @@
1
+ /** Only validated, build-owned paths and tokens become generated source. */
2
+ export function componentServerEntry(options) {
3
+ const local = options.platform !== "cloudflare";
4
+ const setup = local
5
+ ? [
6
+ 'import { readFile } from "node:fs/promises"',
7
+ 'import { createHash } from "node:crypto"',
8
+ 'const manifestBytes = await readFile(new URL("./component-manifest.json", import.meta.url))',
9
+ `if (createHash("sha256").update(manifestBytes).digest("hex") !== ${JSON.stringify(options.manifestDigest)}) throw new Error("component_version")`,
10
+ 'const manifest = JSON.parse(manifestBytes.toString("utf8"))',
11
+ "for (const [file, hash] of Object.entries(manifest.files)) {",
12
+ ' if (!["server", "ssr", "rsc", "assets"].includes(file.split("/")[0]) || file.split("/").some((part) => !/^[A-Za-z0-9_.-]+$/.test(part) || part === "..") || createHash("sha256").update(await readFile(new URL(file, import.meta.url))).digest("hex") !== hash) throw new Error("component_version")',
13
+ "}",
14
+ `const module = await import(${JSON.stringify(`./${options.serverEntry}`)})`,
15
+ ]
16
+ : [`import * as module from ${JSON.stringify(`./${options.serverEntry}`)}`];
17
+ const factory = [
18
+ `if (module.__nifraComponentBuild !== ${JSON.stringify(options.build)} || typeof module.createApp !== "function") throw new Error("component_version")`,
19
+ `const app = await module.createApp(${JSON.stringify(options.entry)}, ${JSON.stringify({ styles: options.styles, assets: options.assets, build: options.build })})`,
20
+ 'if (typeof app?.fetch !== "function") throw new Error("component_contract")',
21
+ "export const fetch = (request, env, context) => app.fetch(request, { env, ...(context?.waitUntil ? { waitUntil: context.waitUntil.bind(context) } : {}) })",
22
+ ];
23
+ if (!local)
24
+ return `${[...setup, ...factory, "export default { fetch }"].join("\n")}\n`;
25
+ const assets = options.platform === "vercel" ? [] : options.assets;
26
+ const serving = [
27
+ `const assets = new Set(${JSON.stringify(assets)})`,
28
+ "const serve = async (request) => {",
29
+ " const path = new URL(request.url).pathname",
30
+ ' if (assets.has(path) && ["GET", "HEAD"].includes(request.method)) {',
31
+ ' const bytes = await readFile(new URL("." + path, import.meta.url))',
32
+ ' const type = path.endsWith(".css") ? "text/css" : path.endsWith(".js") ? "text/javascript" : path.endsWith(".svg") ? "image/svg+xml" : "application/octet-stream"',
33
+ ' return new Response(request.method === "HEAD" ? null : bytes, { headers: { "content-type": type, "cache-control": "public, max-age=31536000, immutable", "x-content-type-options": "nosniff" } })',
34
+ " }",
35
+ " return fetch(request)",
36
+ "}",
37
+ ];
38
+ if (options.platform === "bun")
39
+ return `${[
40
+ ...setup,
41
+ ...factory,
42
+ ...serving,
43
+ "Bun.serve({ port: Number(process.env.PORT ?? 3000), fetch: serve })",
44
+ ].join("\n")}\n`;
45
+ if (options.platform === "deno")
46
+ return `${[
47
+ ...setup,
48
+ ...factory,
49
+ ...serving,
50
+ 'Deno.serve({ port: Number(Deno.env.get("PORT") ?? 3000) }, serve)',
51
+ ].join("\n")}\n`;
52
+ const http = [
53
+ 'import { createServer } from "node:http"',
54
+ 'import { Readable } from "node:stream"',
55
+ 'import { pipeline } from "node:stream/promises"',
56
+ "const handle = async (req, res) => {",
57
+ " const abort = new AbortController()",
58
+ " const close = () => { if (!res.writableEnded) abort.abort() }",
59
+ ' res.on("close", close)',
60
+ " try {",
61
+ " const headers = new Headers()",
62
+ " for (let i = 0; i < req.rawHeaders.length; i += 2) headers.append(req.rawHeaders[i], req.rawHeaders[i + 1])",
63
+ // Resolving the target against a base reads `//evil.example/admin` as a host; the origin comes
64
+ // from a validated Host header, and an absolute-form target is routed by its path.
65
+ ' const host = req.headers.host ?? "localhost"',
66
+ " if (!/^[\\w.:[\\]-]+$/.test(host)) { res.writeHead(400); res.end(); return }",
67
+ ' const target = req.url.startsWith("/") ? req.url : ((url) => url.pathname + url.search)(new URL(req.url))',
68
+ ' const request = new Request("http://" + host + target, { method: req.method, headers, signal: abort.signal, ...(["GET", "HEAD"].includes(req.method) ? {} : { body: Readable.toWeb(req), duplex: "half" }) })',
69
+ " const response = await serve(request)",
70
+ " res.statusCode = response.status",
71
+ ' for (const [name, value] of response.headers) if (name !== "set-cookie") res.setHeader(name, value)',
72
+ " const cookies = response.headers.getSetCookie()",
73
+ ' if (cookies.length) res.setHeader("set-cookie", cookies)',
74
+ ' if (response.body && req.method !== "HEAD") await pipeline(Readable.fromWeb(response.body), res)',
75
+ " else res.end()",
76
+ ' } catch { if (!res.headersSent) res.writeHead(500); res.end("component_failed") }',
77
+ ' finally { res.off("close", close) }',
78
+ "}",
79
+ ];
80
+ return `${[
81
+ ...setup,
82
+ ...factory,
83
+ ...serving,
84
+ ...http,
85
+ options.platform === "vercel"
86
+ ? "export default handle"
87
+ : 'createServer(handle).listen(Number(process.env.PORT ?? 3000), "0.0.0.0")',
88
+ ].join("\n")}\n`;
89
+ }
90
+ //# sourceMappingURL=server-entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-entry.js","sourceRoot":"","sources":["../../src/server-components/server-entry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type * as TS from "typescript";
2
+ export interface CompiledComponentModule {
3
+ readonly code: string;
4
+ readonly references: Readonly<Record<string, string>>;
5
+ }
6
+ export declare function componentReference(file: string, root: string, name: string): string;
7
+ export declare function sourceFile(source: string, file: string): TS.SourceFile;
8
+ /** The `componentPipeline` a config module exports as a plain literal, read without running the
9
+ * module, or `undefined` when it exports none or one that is not a literal. */
10
+ export declare function staticComponentPipeline(source: string, file: string): unknown;
11
+ export declare function directive(file: TS.SourceFile, value: string): boolean;
12
+ export declare function exportedValues(file: TS.SourceFile): readonly string[];
13
+ export declare function compileComponentModule(source: string, file: string, root: string, environment: string, kind?: "server" | "island"): CompiledComponentModule;
14
+ export declare function guardCreateElementCalls(source: string, file: string): string;
15
+ //# sourceMappingURL=source.d.ts.map