@nifrajs/web 4.0.2 → 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 (384) 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 +25 -7
  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 +88 -20
  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 +3 -0
  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/public-dir.d.ts +8 -1
  144. package/dist/public-dir.d.ts.map +1 -1
  145. package/dist/public-dir.js +17 -6
  146. package/dist/public-dir.js.map +1 -1
  147. package/dist/query.d.ts +13 -4
  148. package/dist/query.d.ts.map +1 -1
  149. package/dist/query.js +89 -26
  150. package/dist/query.js.map +1 -1
  151. package/dist/render-seam.d.ts +2 -0
  152. package/dist/render-seam.d.ts.map +1 -1
  153. package/dist/render-seam.js +1 -0
  154. package/dist/render-seam.js.map +1 -1
  155. package/dist/route-types.d.ts.map +1 -1
  156. package/dist/route-types.js +20 -9
  157. package/dist/route-types.js.map +1 -1
  158. package/dist/router.d.ts +9 -2
  159. package/dist/router.d.ts.map +1 -1
  160. package/dist/router.js +39 -46
  161. package/dist/router.js.map +1 -1
  162. package/dist/server-components/build-info.d.ts +3 -0
  163. package/dist/server-components/build-info.d.ts.map +1 -0
  164. package/dist/server-components/build-info.js +7 -0
  165. package/dist/server-components/build-info.js.map +1 -0
  166. package/dist/server-components/build-target.d.ts +12 -0
  167. package/dist/server-components/build-target.d.ts.map +1 -0
  168. package/dist/server-components/build-target.js +153 -0
  169. package/dist/server-components/build-target.js.map +1 -0
  170. package/dist/server-components/build.d.ts +24 -0
  171. package/dist/server-components/build.d.ts.map +1 -0
  172. package/dist/server-components/build.js +366 -0
  173. package/dist/server-components/build.js.map +1 -0
  174. package/dist/server-components/bundle-proof.d.ts +3 -0
  175. package/dist/server-components/bundle-proof.d.ts.map +1 -0
  176. package/dist/server-components/bundle-proof.js +23 -0
  177. package/dist/server-components/bundle-proof.js.map +1 -0
  178. package/dist/server-components/client.d.ts +46 -0
  179. package/dist/server-components/client.d.ts.map +1 -0
  180. package/dist/server-components/client.js +594 -0
  181. package/dist/server-components/client.js.map +1 -0
  182. package/dist/server-components/definition.d.ts +11 -0
  183. package/dist/server-components/definition.d.ts.map +1 -0
  184. package/dist/server-components/definition.js +94 -0
  185. package/dist/server-components/definition.js.map +1 -0
  186. package/dist/server-components/dev-http.d.ts +5 -0
  187. package/dist/server-components/dev-http.d.ts.map +1 -0
  188. package/dist/server-components/dev-http.js +71 -0
  189. package/dist/server-components/dev-http.js.map +1 -0
  190. package/dist/server-components/error.d.ts +9 -0
  191. package/dist/server-components/error.d.ts.map +1 -0
  192. package/dist/server-components/error.js +24 -0
  193. package/dist/server-components/error.js.map +1 -0
  194. package/dist/server-components/frames.d.ts +7 -0
  195. package/dist/server-components/frames.d.ts.map +1 -0
  196. package/dist/server-components/frames.js +169 -0
  197. package/dist/server-components/frames.js.map +1 -0
  198. package/dist/server-components/html-policy.d.ts +6 -0
  199. package/dist/server-components/html-policy.d.ts.map +1 -0
  200. package/dist/server-components/html-policy.js +75 -0
  201. package/dist/server-components/html-policy.js.map +1 -0
  202. package/dist/server-components/html.d.ts +4 -0
  203. package/dist/server-components/html.d.ts.map +1 -0
  204. package/dist/server-components/html.js +67 -0
  205. package/dist/server-components/html.js.map +1 -0
  206. package/dist/server-components/islands.d.ts +44 -0
  207. package/dist/server-components/islands.d.ts.map +1 -0
  208. package/dist/server-components/islands.js +42 -0
  209. package/dist/server-components/islands.js.map +1 -0
  210. package/dist/server-components/native.d.ts +4 -0
  211. package/dist/server-components/native.d.ts.map +1 -0
  212. package/dist/server-components/native.js +81 -0
  213. package/dist/server-components/native.js.map +1 -0
  214. package/dist/server-components/portal.d.ts +6 -0
  215. package/dist/server-components/portal.d.ts.map +1 -0
  216. package/dist/server-components/portal.js +35 -0
  217. package/dist/server-components/portal.js.map +1 -0
  218. package/dist/server-components/props.d.ts +3 -0
  219. package/dist/server-components/props.d.ts.map +1 -0
  220. package/dist/server-components/props.js +14 -0
  221. package/dist/server-components/props.js.map +1 -0
  222. package/dist/server-components/protocol.d.ts +44 -0
  223. package/dist/server-components/protocol.d.ts.map +1 -0
  224. package/dist/server-components/protocol.js +139 -0
  225. package/dist/server-components/protocol.js.map +1 -0
  226. package/dist/server-components/range.d.ts +24 -0
  227. package/dist/server-components/range.d.ts.map +1 -0
  228. package/dist/server-components/range.js +263 -0
  229. package/dist/server-components/range.js.map +1 -0
  230. package/dist/server-components/registry.d.ts +6 -0
  231. package/dist/server-components/registry.d.ts.map +1 -0
  232. package/dist/server-components/registry.js +30 -0
  233. package/dist/server-components/registry.js.map +1 -0
  234. package/dist/server-components/response.d.ts +4 -0
  235. package/dist/server-components/response.d.ts.map +1 -0
  236. package/dist/server-components/response.js +32 -0
  237. package/dist/server-components/response.js.map +1 -0
  238. package/dist/server-components/router-integration.d.ts +9 -0
  239. package/dist/server-components/router-integration.d.ts.map +1 -0
  240. package/dist/server-components/router-integration.js +29 -0
  241. package/dist/server-components/router-integration.js.map +1 -0
  242. package/dist/server-components/runtime.d.ts +14 -0
  243. package/dist/server-components/runtime.d.ts.map +1 -0
  244. package/dist/server-components/runtime.js +276 -0
  245. package/dist/server-components/runtime.js.map +1 -0
  246. package/dist/server-components/scheduler.d.ts +14 -0
  247. package/dist/server-components/scheduler.d.ts.map +1 -0
  248. package/dist/server-components/scheduler.js +74 -0
  249. package/dist/server-components/scheduler.js.map +1 -0
  250. package/dist/server-components/schema.d.ts +4 -0
  251. package/dist/server-components/schema.d.ts.map +1 -0
  252. package/dist/server-components/schema.js +77 -0
  253. package/dist/server-components/schema.js.map +1 -0
  254. package/dist/server-components/server-entry.d.ts +12 -0
  255. package/dist/server-components/server-entry.d.ts.map +1 -0
  256. package/dist/server-components/server-entry.js +90 -0
  257. package/dist/server-components/server-entry.js.map +1 -0
  258. package/dist/server-components/source.d.ts +15 -0
  259. package/dist/server-components/source.d.ts.map +1 -0
  260. package/dist/server-components/source.js +269 -0
  261. package/dist/server-components/source.js.map +1 -0
  262. package/dist/server-components/state.d.ts +4 -0
  263. package/dist/server-components/state.d.ts.map +1 -0
  264. package/dist/server-components/state.js +123 -0
  265. package/dist/server-components/state.js.map +1 -0
  266. package/dist/server-components/stream.d.ts +6 -0
  267. package/dist/server-components/stream.d.ts.map +1 -0
  268. package/dist/server-components/stream.js +70 -0
  269. package/dist/server-components/stream.js.map +1 -0
  270. package/dist/server-components/trusted-html.d.ts +3 -0
  271. package/dist/server-components/trusted-html.d.ts.map +1 -0
  272. package/dist/server-components/trusted-html.js +14 -0
  273. package/dist/server-components/trusted-html.js.map +1 -0
  274. package/dist/server-components/types.d.ts +107 -0
  275. package/dist/server-components/types.d.ts.map +1 -0
  276. package/dist/server-components/types.js +2 -0
  277. package/dist/server-components/types.js.map +1 -0
  278. package/dist/server-components/typescript.d.ts +11 -0
  279. package/dist/server-components/typescript.d.ts.map +1 -0
  280. package/dist/server-components/typescript.js +28 -0
  281. package/dist/server-components/typescript.js.map +1 -0
  282. package/dist/server-components/value.d.ts +5 -0
  283. package/dist/server-components/value.d.ts.map +1 -0
  284. package/dist/server-components/value.js +77 -0
  285. package/dist/server-components/value.js.map +1 -0
  286. package/dist/server-components/vite.d.ts +12 -0
  287. package/dist/server-components/vite.d.ts.map +1 -0
  288. package/dist/server-components/vite.js +197 -0
  289. package/dist/server-components/vite.js.map +1 -0
  290. package/dist/server-components.d.ts +5 -0
  291. package/dist/server-components.d.ts.map +1 -0
  292. package/dist/server-components.js +4 -0
  293. package/dist/server-components.js.map +1 -0
  294. package/dist/service-worker.d.ts +8 -1
  295. package/dist/service-worker.d.ts.map +1 -1
  296. package/dist/service-worker.js +20 -6
  297. package/dist/service-worker.js.map +1 -1
  298. package/dist/vite.d.ts +12 -0
  299. package/dist/vite.d.ts.map +1 -1
  300. package/dist/vite.js +7 -1
  301. package/dist/vite.js.map +1 -1
  302. package/dist/zones.d.ts +40 -0
  303. package/dist/zones.d.ts.map +1 -1
  304. package/dist/zones.js +170 -6
  305. package/dist/zones.js.map +1 -1
  306. package/package.json +97 -4
  307. package/src/build-vite.ts +31 -9
  308. package/src/build.ts +109 -31
  309. package/src/cdn.ts +18 -12
  310. package/src/client.ts +25 -6
  311. package/src/deferred.ts +27 -9
  312. package/src/dev-feed.ts +24 -5
  313. package/src/dev-session.ts +4 -13
  314. package/src/dev.ts +29 -1
  315. package/src/draft.ts +35 -14
  316. package/src/fonts-google.ts +10 -0
  317. package/src/index.ts +3 -2
  318. package/src/internal/codegen.ts +60 -29
  319. package/src/internal/disposable-dir.ts +24 -0
  320. package/src/internal/entry-chunks.ts +18 -0
  321. package/src/internal/evidence-traversal.ts +57 -0
  322. package/src/internal/head-merge.ts +16 -0
  323. package/src/internal/js-string.ts +6 -1
  324. package/src/internal/mount-shadow.ts +1 -1
  325. package/src/internal/output-guard.ts +88 -7
  326. package/src/internal/page-execution.ts +506 -108
  327. package/src/internal/progressive-cookies.ts +60 -0
  328. package/src/internal/public-env.ts +14 -0
  329. package/src/internal/render-document.ts +26 -11
  330. package/src/internal/response-controls.ts +31 -14
  331. package/src/internal/revive-dates.ts +35 -0
  332. package/src/internal/route-path.ts +8 -0
  333. package/src/internal/secret-scan.ts +90 -18
  334. package/src/internal/server-boundary.ts +29 -5
  335. package/src/internal/web-app.ts +116 -37
  336. package/src/internal/wire-date.ts +16 -0
  337. package/src/internal/zone-graph.ts +59 -19
  338. package/src/isr.ts +351 -43
  339. package/src/llms-txt.ts +32 -3
  340. package/src/manifest.ts +28 -4
  341. package/src/open-resolved.ts +64 -0
  342. package/src/plugins/kit.ts +31 -11
  343. package/src/plugins/vite-leak-guard.ts +5 -1
  344. package/src/public-dir.ts +27 -8
  345. package/src/query.ts +107 -26
  346. package/src/render-seam.ts +2 -0
  347. package/src/route-types.ts +34 -7
  348. package/src/router.ts +58 -55
  349. package/src/server-components/build-info.ts +11 -0
  350. package/src/server-components/build-target.ts +194 -0
  351. package/src/server-components/build.ts +419 -0
  352. package/src/server-components/bundle-proof.ts +33 -0
  353. package/src/server-components/client.ts +663 -0
  354. package/src/server-components/definition.ts +125 -0
  355. package/src/server-components/dev-http.ts +75 -0
  356. package/src/server-components/error.ts +24 -0
  357. package/src/server-components/frames.ts +181 -0
  358. package/src/server-components/html-policy.ts +94 -0
  359. package/src/server-components/html.ts +81 -0
  360. package/src/server-components/islands.ts +111 -0
  361. package/src/server-components/native.ts +101 -0
  362. package/src/server-components/portal.ts +42 -0
  363. package/src/server-components/props.ts +19 -0
  364. package/src/server-components/protocol.ts +167 -0
  365. package/src/server-components/range.ts +313 -0
  366. package/src/server-components/registry.ts +34 -0
  367. package/src/server-components/response.ts +44 -0
  368. package/src/server-components/router-integration.ts +40 -0
  369. package/src/server-components/runtime.ts +376 -0
  370. package/src/server-components/scheduler.ts +84 -0
  371. package/src/server-components/schema.ts +69 -0
  372. package/src/server-components/server-entry.ts +98 -0
  373. package/src/server-components/source.ts +324 -0
  374. package/src/server-components/state.ts +143 -0
  375. package/src/server-components/stream.ts +71 -0
  376. package/src/server-components/trusted-html.ts +21 -0
  377. package/src/server-components/types.ts +138 -0
  378. package/src/server-components/typescript.ts +39 -0
  379. package/src/server-components/value.ts +82 -0
  380. package/src/server-components/vite.ts +242 -0
  381. package/src/server-components.ts +32 -0
  382. package/src/service-worker.ts +24 -7
  383. package/src/vite.ts +8 -1
  384. package/src/zones.ts +208 -7
@@ -0,0 +1,44 @@
1
+ import type { StandardSchemaV1 } from "@nifrajs/core/server";
2
+ import type { ComponentKey, ComponentRecord, ServerComponentHandle } from "./types.js";
3
+ declare const contractBrand: unique symbol;
4
+ declare const viewBrand: unique symbol;
5
+ export interface ClientIsland<Props = unknown, Component = unknown> {
6
+ readonly reference?: string;
7
+ readonly props: StandardSchemaV1<unknown, Props>;
8
+ readonly component: Component;
9
+ readonly slots: readonly string[];
10
+ readonly [contractBrand]: true;
11
+ }
12
+ type NativeComponentProps<Component> = Component extends abstract new (...args: never[]) => {
13
+ $props: infer Props;
14
+ } ? Props : Component extends abstract new (...args: never[]) => {
15
+ props: infer Props;
16
+ } ? Props : Component extends (...args: infer Args) => unknown ? Args extends [] ? object : Args extends [unknown, infer Props, ...unknown[]] ? Args[0] | Props : Args[0] : never;
17
+ type CompatibleComponent<Props, Component> = Props extends NativeComponentProps<Component> ? unknown : {
18
+ readonly __nifraIslandPropsMustMatchComponent: never;
19
+ };
20
+ export declare function defineClientIsland<Props, Component>(definition: {
21
+ readonly props: StandardSchemaV1<unknown, Props>;
22
+ readonly component: Component;
23
+ readonly slots?: readonly string[];
24
+ } & CompatibleComponent<NoInfer<Props>, NoInfer<Component>>, reference?: string): ClientIsland<Props, Component>;
25
+ export interface IslandInstance {
26
+ readonly contract: ClientIsland;
27
+ readonly key: ComponentKey;
28
+ readonly props: unknown;
29
+ readonly slots: Readonly<Record<string, string>>;
30
+ }
31
+ export declare function clientIsland<Props>(contract: ClientIsland<Props>, key: ComponentKey, props: NoInfer<Props>, slots?: Readonly<Record<string, string>>): IslandInstance;
32
+ export interface NativeServerView {
33
+ readonly component: unknown;
34
+ readonly islands: Readonly<Record<string, IslandInstance>>;
35
+ readonly ranges: Readonly<Record<string, ComponentRecord>>;
36
+ readonly [viewBrand]: true;
37
+ }
38
+ /** Server-only native view rendered by the selected framework's own renderer. */
39
+ export declare function nativeServerView(component: unknown, islands?: Readonly<Record<string, IslandInstance>>, ranges?: Readonly<Record<string, ComponentRecord>>): NativeServerView;
40
+ export declare function serverComponentChild(children: readonly ComponentRecord[], component: Pick<ServerComponentHandle, "reference">, key: ComponentKey): ComponentRecord;
41
+ export declare function isNativeServerView(value: unknown): value is NativeServerView;
42
+ export declare function isClientIsland(value: unknown): value is ClientIsland;
43
+ export {};
44
+ //# sourceMappingURL=islands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"islands.d.ts","sourceRoot":"","sources":["../../src/server-components/islands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ const contractBrand = Symbol.for("nifra.components.island");
2
+ const viewBrand = Symbol.for("nifra.components.view");
3
+ export function defineClientIsland(definition, reference) {
4
+ const slots = definition.slots ?? [];
5
+ if (slots.length > 16 ||
6
+ new Set(slots).size !== slots.length ||
7
+ slots.some((name) => !/^[A-Za-z][A-Za-z0-9_]{0,63}$/.test(name) || ["ref", "key", "constructor"].includes(name)))
8
+ throw new Error("component_contract");
9
+ const contract = {
10
+ props: definition.props,
11
+ component: definition.component,
12
+ slots: Object.freeze([...slots]),
13
+ [contractBrand]: true,
14
+ };
15
+ if (reference !== undefined)
16
+ Object.assign(contract, { reference });
17
+ return Object.freeze(contract);
18
+ }
19
+ export function clientIsland(contract, key, props, slots = {}) {
20
+ return { contract, key, props, slots };
21
+ }
22
+ /** Server-only native view rendered by the selected framework's own renderer. */
23
+ export function nativeServerView(component, islands = {}, ranges = {}) {
24
+ return { component, islands, ranges, [viewBrand]: true };
25
+ }
26
+ export function serverComponentChild(children, component, key) {
27
+ const matches = children.filter((record) => record.reference === component.reference && record.key === key);
28
+ if (matches.length !== 1)
29
+ throw new Error("component_contract");
30
+ return matches[0];
31
+ }
32
+ export function isNativeServerView(value) {
33
+ return (
34
+ // biome-ignore lint/plugin/requireSafetyCommentForTypeAssertion: Object shape is checked before inspecting the private symbol brand created by this module.
35
+ typeof value === "object" && value !== null && value[viewBrand] === true);
36
+ }
37
+ export function isClientIsland(value) {
38
+ return (
39
+ // biome-ignore lint/plugin/requireSafetyCommentForTypeAssertion: Object shape is checked before inspecting the private symbol brand created by this module.
40
+ typeof value === "object" && value !== null && value[contractBrand] === true);
41
+ }
42
+ //# sourceMappingURL=islands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"islands.js","sourceRoot":"","sources":["../../src/server-components/islands.ts"],"names":[],"mappings":"AAGA,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAA;AAC3D,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAA;AA6BrD,MAAM,UAAU,kBAAkB,CAChC,UAI2D,EAC3D,SAAkB;IAElB,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,IAAI,EAAE,CAAA;IACpC,IACE,KAAK,CAAC,MAAM,GAAG,EAAE;QACjB,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM;QACpC,KAAK,CAAC,IAAI,CACR,CAAC,IAAI,EAAE,EAAE,CACP,CAAC,8BAA8B,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAC7F;QAED,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAA;IACvC,MAAM,QAAQ,GAAmC;QAC/C,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,SAAS,EAAE,UAAU,CAAC,SAAS;QAC/B,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;QAChC,CAAC,aAAa,CAAC,EAAE,IAAI;KACtB,CAAA;IACD,IAAI,SAAS,KAAK,SAAS;QAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,CAAC,CAAA;IACnE,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;AAChC,CAAC;AAOD,MAAM,UAAU,YAAY,CAC1B,QAA6B,EAC7B,GAAiB,EACjB,KAAqB,EACrB,QAA0C,EAAE;IAE5C,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,CAAA;AACxC,CAAC;AAOD,iFAAiF;AACjF,MAAM,UAAU,gBAAgB,CAC9B,SAAkB,EAClB,UAAoD,EAAE,EACtD,SAAoD,EAAE;IAEtD,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAA;AAC1D,CAAC;AACD,MAAM,UAAU,oBAAoB,CAClC,QAAoC,EACpC,SAAmD,EACnD,GAAiB;IAEjB,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAC7B,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC,SAAS,IAAI,MAAM,CAAC,GAAG,KAAK,GAAG,CAC3E,CAAA;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAA;IAC/D,OAAO,OAAO,CAAC,CAAC,CAAE,CAAA;AACpB,CAAC;AACD,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,OAAO;IACL,4JAA4J;IAC5J,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAK,KAA0B,CAAC,SAAS,CAAC,KAAK,IAAI,CAC/F,CAAA;AACH,CAAC;AACD,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,OAAO;IACL,4JAA4J;IAC5J,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAK,KAAsB,CAAC,aAAa,CAAC,KAAK,IAAI,CAC/F,CAAA;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { ServerComponentRenderAdapter } from "./types.js";
2
+ export type NativeRender = (component: unknown, props: Record<string, unknown>, renderId: string) => string | Promise<string>;
3
+ export declare function nativeServerComponents(name: "vue" | "svelte" | "solid" | "preact", render: NativeRender): ServerComponentRenderAdapter;
4
+ //# sourceMappingURL=native.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../../src/server-components/native.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAmB,4BAA4B,EAAE,MAAM,YAAY,CAAA;AAE/E,MAAM,MAAM,YAAY,GAAG,CACzB,SAAS,EAAE,OAAO,EAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,QAAQ,EAAE,MAAM,KACb,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;AAC7B,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,EAC3C,MAAM,EAAE,YAAY,GACnB,4BAA4B,CAsF9B"}
@@ -0,0 +1,81 @@
1
+ import { isClientIsland, isNativeServerView } from "./islands.js";
2
+ import { guardComponentProps } from "./props.js";
3
+ import { COMPONENT_LIMITS, componentKey } from "./protocol.js";
4
+ import { componentToken } from "./state.js";
5
+ export function nativeServerComponents(name, render) {
6
+ return {
7
+ name,
8
+ version: 1,
9
+ async render(view, props, context) {
10
+ if (typeof view !== "function")
11
+ throw new Error("component_contract");
12
+ const value = await view({ props, children: context.children ?? [] });
13
+ if (!isNativeServerView(value))
14
+ throw new Error("component_contract");
15
+ const entries = Object.entries(value.islands);
16
+ if (entries.length > COMPONENT_LIMITS.instances)
17
+ throw new Error("component_limit");
18
+ const seen = new Set();
19
+ const islands = [];
20
+ const markup = Object.create(null);
21
+ for (const [slot, instance] of entries) {
22
+ if (!/^[A-Za-z][A-Za-z0-9_]{0,63}$/.test(slot) ||
23
+ !isClientIsland(instance.contract) ||
24
+ !componentToken(instance.contract.reference) ||
25
+ !componentKey(instance.key) ||
26
+ Object.keys(instance.slots).some((name) => !instance.contract.slots.includes(name)))
27
+ throw new Error("component_contract");
28
+ const digest = await crypto.subtle.digest("SHA-256", new TextEncoder().encode(JSON.stringify([context.instance, instance.contract.reference, instance.key])));
29
+ const renderId = `i_${[...new Uint8Array(digest)].map((n) => n.toString(16).padStart(2, "0")).join("")}`;
30
+ if (seen.has(renderId))
31
+ throw new Error("component_contract");
32
+ seen.add(renderId);
33
+ const projected = await guardComponentProps(instance.contract.props, instance.props);
34
+ // biome-ignore lint/plugin/requireSafetyCommentForTypeAssertion: The closed schema guard and bounded JSON validator produced this public props object before native rendering.
35
+ const guarded = projected; // Closed schema guard and JSON check own this boundary.
36
+ const slots = Object.fromEntries(instance.contract.slots.map((name) => {
37
+ const html = instance.slots[name] ?? "";
38
+ if (typeof html !== "string")
39
+ throw new Error("component_contract");
40
+ return [name, `<nifra-slot data-nifra-slot="${name}">${html}</nifra-slot>`];
41
+ }));
42
+ const html = await render(instance.contract.component, { ...guarded, slots }, renderId);
43
+ if (context.signal.aborted)
44
+ throw new Error("component_cancelled");
45
+ markup[slot] = {
46
+ html: `<nifra-island data-nifra-island="${renderId}">${html}</nifra-island>`,
47
+ renderId,
48
+ };
49
+ islands.push({
50
+ reference: instance.contract.reference,
51
+ key: instance.key,
52
+ // biome-ignore lint/plugin/requireSafetyCommentForTypeAssertion: The closed schema guard and bounded JSON validator produced this public props object before native rendering.
53
+ props: projected,
54
+ renderId,
55
+ slots: instance.slots,
56
+ });
57
+ }
58
+ const ranges = Object.create(null);
59
+ const rangeIds = new Set();
60
+ for (const [name, child] of Object.entries(value.ranges)) {
61
+ if (!/^[A-Za-z][A-Za-z0-9_]{0,63}$/.test(name) ||
62
+ child.parent !== context.instance ||
63
+ !(context.children ?? []).includes(child) ||
64
+ rangeIds.has(child.instance))
65
+ throw new Error("component_contract");
66
+ rangeIds.add(child.instance);
67
+ ranges[name] = {
68
+ instance: child.instance,
69
+ html: '<nifra-component data-nifra-component="' +
70
+ child.instance +
71
+ '">' +
72
+ child.html +
73
+ "</nifra-component>",
74
+ };
75
+ }
76
+ const html = await render(value.component, { props, islands: markup, ranges }, `${context.instance}-view`);
77
+ return { html, islands };
78
+ },
79
+ };
80
+ }
81
+ //# sourceMappingURL=native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native.js","sourceRoot":"","sources":["../../src/server-components/native.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /** Resolve only a declared target inside the island or component that owns the calling node. */
2
+ export declare function componentPortalTarget(source: Element, target: Element): Element;
3
+ /** Native portal actions register cleanup with the island that owns their target. */
4
+ export declare function ownComponentPortal(source: Element, target: Element, cleanup: () => void | Promise<void>): () => Promise<void>;
5
+ export declare function disposeComponentPortals(owner: Element): Promise<void>;
6
+ //# sourceMappingURL=portal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portal.d.ts","sourceRoot":"","sources":["../../src/server-components/portal.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAChG,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAY/E;AAID,qFAAqF;AACrF,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,OAAO,EACf,OAAO,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAClC,MAAM,OAAO,CAAC,IAAI,CAAC,CAarB;AAED,wBAAsB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAI3E"}
@@ -0,0 +1,35 @@
1
+ /** Resolve only a declared target inside the island or component that owns the calling node. */
2
+ export function componentPortalTarget(source, target) {
3
+ const owner = source.closest("[data-nifra-island], [data-nifra-component]");
4
+ const name = target.getAttribute("data-nifra-portal");
5
+ if (owner === null ||
6
+ name === null ||
7
+ !/^[A-Za-z][A-Za-z0-9_]{0,63}$/.test(name) ||
8
+ !owner.contains(target) ||
9
+ target.closest("[data-nifra-island], [data-nifra-component]") !== owner)
10
+ throw new Error("component_contract");
11
+ return target;
12
+ }
13
+ const cleanups = new WeakMap();
14
+ /** Native portal actions register cleanup with the island that owns their target. */
15
+ export function ownComponentPortal(source, target, cleanup) {
16
+ componentPortalTarget(source, target);
17
+ const owner = source.closest("[data-nifra-island], [data-nifra-component]");
18
+ const entries = cleanups.get(owner) ?? new Set();
19
+ let pending;
20
+ const dispose = () => {
21
+ entries.delete(dispose);
22
+ pending ??= Promise.resolve().then(cleanup);
23
+ return pending;
24
+ };
25
+ entries.add(dispose);
26
+ cleanups.set(owner, entries);
27
+ return dispose;
28
+ }
29
+ export async function disposeComponentPortals(owner) {
30
+ const entries = cleanups.get(owner);
31
+ cleanups.delete(owner);
32
+ if (entries !== undefined)
33
+ await Promise.all([...entries].map((cleanup) => cleanup()));
34
+ }
35
+ //# sourceMappingURL=portal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portal.js","sourceRoot":"","sources":["../../src/server-components/portal.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAChG,MAAM,UAAU,qBAAqB,CAAC,MAAe,EAAE,MAAe;IACpE,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,6CAA6C,CAAC,CAAA;IAC3E,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAA;IACrD,IACE,KAAK,KAAK,IAAI;QACd,IAAI,KAAK,IAAI;QACb,CAAC,8BAA8B,CAAC,IAAI,CAAC,IAAI,CAAC;QAC1C,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;QACvB,MAAM,CAAC,OAAO,CAAC,6CAA6C,CAAC,KAAK,KAAK;QAEvE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAA;IACvC,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,QAAQ,GAAG,IAAI,OAAO,EAAqC,CAAA;AAEjE,qFAAqF;AACrF,MAAM,UAAU,kBAAkB,CAChC,MAAe,EACf,MAAe,EACf,OAAmC;IAEnC,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACrC,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,6CAA6C,CAAE,CAAA;IAC5E,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,EAAuB,CAAA;IACrE,IAAI,OAAkC,CAAA;IACtC,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QACvB,OAAO,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC3C,OAAO,OAAO,CAAA;IAChB,CAAC,CAAA;IACD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IACpB,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;IAC5B,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,KAAc;IAC1D,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IACnC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACtB,IAAI,OAAO,KAAK,SAAS;QAAE,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;AACxF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { StandardSchemaV1 } from "@nifrajs/core/schema";
2
+ export declare function guardComponentProps(schema: StandardSchemaV1, value: unknown): Promise<unknown>;
3
+ //# sourceMappingURL=props.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"props.d.ts","sourceRoot":"","sources":["../../src/server-components/props.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAO5D,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,gBAAgB,EACxB,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,OAAO,CAAC,CAQlB"}
@@ -0,0 +1,14 @@
1
+ import { outputGuard, runGuard } from "../internal/output-guard.js";
2
+ import { assertComponentSchema } from "./schema.js";
3
+ import { componentValue } from "./value.js";
4
+ const guards = new WeakMap();
5
+ export async function guardComponentProps(schema, value) {
6
+ let guard = guards.get(schema);
7
+ if (guard === undefined) {
8
+ assertComponentSchema(schema);
9
+ guard = outputGuard(schema, "client component", "props");
10
+ guards.set(schema, guard);
11
+ }
12
+ return componentValue(await runGuard(guard, value, "client component props"));
13
+ }
14
+ //# sourceMappingURL=props.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"props.js","sourceRoot":"","sources":["../../src/server-components/props.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAA;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAE3C,MAAM,MAAM,GAAG,IAAI,OAAO,EAA0C,CAAA;AAEpE,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAwB,EACxB,KAAc;IAEd,IAAI,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IAC9B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,qBAAqB,CAAC,MAAM,CAAC,CAAA;QAC7B,KAAK,GAAG,WAAW,CAAC,MAAM,EAAE,kBAAkB,EAAE,OAAO,CAAC,CAAA;QACxD,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IAC3B,CAAC;IACD,OAAO,cAAc,CAAC,MAAM,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,wBAAwB,CAAC,CAAC,CAAA;AAC/E,CAAC"}
@@ -0,0 +1,44 @@
1
+ import type { ComponentKey, ComponentValue } from "./types.js";
2
+ export declare const COMPONENT_HEADER = "x-nifra-component";
3
+ export declare const COMPONENT_MEDIA_TYPE = "application/vnd.nifra.component-v1";
4
+ export declare const COMPONENT_PROTOCOL = 1;
5
+ export declare const COMPONENT_LIMITS: Readonly<{
6
+ headerBytes: 2048;
7
+ encodedHeaderBytes: 2732;
8
+ inputBytes: 1024;
9
+ propsBytes: 65536;
10
+ outputBytes: 1048576;
11
+ documentBytes: 4194304;
12
+ frameBytes: 262144;
13
+ depth: 16;
14
+ instances: 128;
15
+ requestLoads: 8;
16
+ activeLoads: 64;
17
+ queuedLoads: 128;
18
+ executionMs: 10000;
19
+ idleMs: 5000;
20
+ operationMs: 15000;
21
+ }>;
22
+ export interface ComponentRequest {
23
+ readonly v: 1;
24
+ readonly build: string;
25
+ readonly reference: string;
26
+ readonly key: ComponentKey;
27
+ readonly parent: string | null;
28
+ readonly generation: number;
29
+ readonly routeEpoch: number;
30
+ readonly authEpoch: number;
31
+ readonly input: ComponentValue;
32
+ }
33
+ export declare function componentKey(value: unknown): value is ComponentKey;
34
+ export declare function parseComponentRequest(value: unknown): ComponentRequest;
35
+ export declare function componentRequestHeader(value: ComponentRequest): string;
36
+ export declare function readComponentRequest(request: Request): ComponentRequest | undefined;
37
+ export declare const COMPONENT_RESPONSE_HEADERS: Readonly<{
38
+ "content-type": "application/vnd.nifra.component-v1";
39
+ "cache-control": "private, no-store";
40
+ "x-content-type-options": "nosniff";
41
+ vary: "x-nifra-component, x-nifra-data";
42
+ }>;
43
+ export declare function componentFailure(error: unknown): Response;
44
+ //# sourceMappingURL=protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/server-components/protocol.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAG9D,eAAO,MAAM,gBAAgB,sBAAsB,CAAA;AACnD,eAAO,MAAM,oBAAoB,uCAAuC,CAAA;AACxE,eAAO,MAAM,kBAAkB,IAAI,CAAA;AACnC,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;EAgB3B,CAAA;AAEF,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAA;IACb,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAA;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAA;CAC/B;AAiBD,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,YAAY,CAOlE;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,CAmCtE;AAQD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CAMtE;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,gBAAgB,GAAG,SAAS,CAmCnF;AAED,eAAO,MAAM,0BAA0B;;;;;EAKrC,CAAA;AAEF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,CAUzD"}
@@ -0,0 +1,139 @@
1
+ import { ServerComponentError } from "./error.js";
2
+ import { componentValue } from "./value.js";
3
+ export const COMPONENT_HEADER = "x-nifra-component";
4
+ export const COMPONENT_MEDIA_TYPE = "application/vnd.nifra.component-v1";
5
+ export const COMPONENT_PROTOCOL = 1;
6
+ export const COMPONENT_LIMITS = Object.freeze({
7
+ headerBytes: 2048,
8
+ encodedHeaderBytes: 2732,
9
+ inputBytes: 1024,
10
+ propsBytes: 65536,
11
+ outputBytes: 1048576,
12
+ documentBytes: 4194304,
13
+ frameBytes: 262144,
14
+ depth: 16,
15
+ instances: 128,
16
+ requestLoads: 8,
17
+ activeLoads: 64,
18
+ queuedLoads: 128,
19
+ executionMs: 10000,
20
+ idleMs: 5000,
21
+ operationMs: 15000,
22
+ });
23
+ const fields = [
24
+ "v",
25
+ "build",
26
+ "reference",
27
+ "key",
28
+ "parent",
29
+ "generation",
30
+ "routeEpoch",
31
+ "authEpoch",
32
+ "input",
33
+ ];
34
+ const token = /^[A-Za-z0-9_-]{1,128}$/;
35
+ const encoder = new TextEncoder();
36
+ const decoder = new TextDecoder("utf-8", { fatal: true });
37
+ export function componentKey(value) {
38
+ return ((typeof value === "string" &&
39
+ encoder.encode(value).length > 0 &&
40
+ encoder.encode(value).length <= 128) ||
41
+ (typeof value === "number" && Number.isSafeInteger(value)));
42
+ }
43
+ export function parseComponentRequest(value) {
44
+ if (typeof value !== "object" || value === null || Array.isArray(value))
45
+ throw new ServerComponentError("component_protocol", 400);
46
+ // biome-ignore lint/plugin/requireSafetyCommentForTypeAssertion: Object shape is checked before field inspection; every field is validated before a request is returned.
47
+ const object = value;
48
+ if (Object.keys(object).length !== fields.length ||
49
+ fields.some((name) => !Object.hasOwn(object, name)) ||
50
+ object.v !== 1 ||
51
+ typeof object.build !== "string" ||
52
+ !token.test(object.build) ||
53
+ typeof object.reference !== "string" ||
54
+ !token.test(object.reference) ||
55
+ !componentKey(object.key) ||
56
+ (object.parent !== null && (typeof object.parent !== "string" || !token.test(object.parent)))) {
57
+ throw new ServerComponentError("component_protocol", 400);
58
+ }
59
+ const counter = (value) => {
60
+ if (typeof value !== "number" || !Number.isSafeInteger(value) || value < 0)
61
+ throw new ServerComponentError("component_protocol", 400);
62
+ return value;
63
+ };
64
+ const input = componentValue(object.input, COMPONENT_LIMITS.inputBytes);
65
+ return {
66
+ v: 1,
67
+ build: object.build,
68
+ reference: object.reference,
69
+ key: object.key,
70
+ parent: object.parent,
71
+ generation: counter(object.generation),
72
+ routeEpoch: counter(object.routeEpoch),
73
+ authEpoch: counter(object.authEpoch),
74
+ input,
75
+ };
76
+ }
77
+ function base64url(bytes) {
78
+ let binary = "";
79
+ for (const byte of bytes)
80
+ binary += String.fromCharCode(byte);
81
+ return btoa(binary).replaceAll("+", "-").replaceAll("/", "_").replace(/=+$/, "");
82
+ }
83
+ export function componentRequestHeader(value) {
84
+ const request = parseComponentRequest(value);
85
+ const bytes = encoder.encode(JSON.stringify(request));
86
+ if (bytes.length > COMPONENT_LIMITS.headerBytes)
87
+ throw new ServerComponentError("component_limit", 431);
88
+ return base64url(bytes);
89
+ }
90
+ export function readComponentRequest(request) {
91
+ const encoded = request.headers.get(COMPONENT_HEADER);
92
+ if (encoded === null)
93
+ return undefined;
94
+ if (request.method !== "GET" ||
95
+ request.headers.has("x-nifra-data") ||
96
+ request.headers.has("x-nifra-retain") ||
97
+ request.headers.has("x-nifra-revalidate") ||
98
+ request.headers.has("x-nifra-from"))
99
+ throw new ServerComponentError("component_protocol", 400);
100
+ if (encoded.length > COMPONENT_LIMITS.encodedHeaderBytes)
101
+ throw new ServerComponentError("component_limit", 431);
102
+ if (!/^[A-Za-z0-9_-]+$/.test(encoded) || encoded.length % 4 === 1)
103
+ throw new ServerComponentError("component_protocol", 400);
104
+ const origin = new URL(request.url).origin;
105
+ if (request.headers.get("sec-fetch-site") !== "same-origin" ||
106
+ (request.headers.has("origin") && request.headers.get("origin") !== origin)) {
107
+ throw new ServerComponentError("component_denied", 403);
108
+ }
109
+ let decoded;
110
+ try {
111
+ const binary = atob(encoded.replaceAll("-", "+").replaceAll("_", "/"));
112
+ const bytes = Uint8Array.from(binary, (char) => char.charCodeAt(0));
113
+ if (bytes.length > COMPONENT_LIMITS.headerBytes)
114
+ throw new ServerComponentError("component_limit", 431);
115
+ if (base64url(bytes) !== encoded)
116
+ throw new ServerComponentError("component_protocol", 400);
117
+ decoded = JSON.parse(decoder.decode(bytes));
118
+ }
119
+ catch (error) {
120
+ if (error instanceof ServerComponentError)
121
+ throw error;
122
+ throw new ServerComponentError("component_protocol", 400);
123
+ }
124
+ return parseComponentRequest(decoded);
125
+ }
126
+ export const COMPONENT_RESPONSE_HEADERS = Object.freeze({
127
+ "content-type": COMPONENT_MEDIA_TYPE,
128
+ "cache-control": "private, no-store",
129
+ "x-content-type-options": "nosniff",
130
+ vary: "x-nifra-component, x-nifra-data",
131
+ });
132
+ export function componentFailure(error) {
133
+ const failure = error instanceof ServerComponentError ? error : new ServerComponentError("component_failed");
134
+ return Response.json({ v: 1, error: failure.code }, {
135
+ status: failure.status === 499 ? 409 : failure.status,
136
+ headers: { ...COMPONENT_RESPONSE_HEADERS, "content-type": "application/json" },
137
+ });
138
+ }
139
+ //# sourceMappingURL=protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/server-components/protocol.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { ComponentClientAdapter, CurrentComponent } from "./client.js";
2
+ import { type ClientIsland } from "./islands.js";
3
+ import type { ComponentIsland, ComponentState } from "./types.js";
4
+ export interface NativeIslandRoot {
5
+ readonly ready?: Promise<void>;
6
+ update(props: Record<string, unknown>, current: CurrentComponent): void | Promise<void>;
7
+ dispose(): void | Promise<void>;
8
+ }
9
+ export interface NativeIslandRuntime {
10
+ hydrate(host: Element, contract: ClientIsland, record: ComponentIsland, current: CurrentComponent): NativeIslandRoot | Promise<NativeIslandRoot>;
11
+ }
12
+ export interface NativeRangeOptions {
13
+ readonly adapter: Exclude<ComponentState["adapter"], "react">;
14
+ readonly islands: readonly ClientIsland[];
15
+ readonly runtime: NativeIslandRuntime;
16
+ /** A narrowly scoped Trusted Types policy's createHTML, when the application requires TT. */
17
+ readonly trustedHTML?: (html: string) => string | {
18
+ toString(): string;
19
+ };
20
+ }
21
+ /** Parse inertly and reject executable content before it can reach a live document. */
22
+ export declare function parseComponentHTML(html: string, context: Element, trustedHTML?: NativeRangeOptions["trustedHTML"]): DocumentFragment;
23
+ export declare function nativeComponentClient(options: NativeRangeOptions): ComponentClientAdapter;
24
+ //# sourceMappingURL=range.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"range.d.ts","sourceRoot":"","sources":["../../src/server-components/range.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAuB,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAGhG,OAAO,EAAE,KAAK,YAAY,EAAkB,MAAM,cAAc,CAAA;AAEhE,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAEjE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9B,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,gBAAgB,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACvF,OAAO,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAChC;AACD,MAAM,WAAW,mBAAmB;IAClC,OAAO,CACL,IAAI,EAAE,OAAO,EACb,QAAQ,EAAE,YAAY,EACtB,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,gBAAgB,GACxB,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAA;CAChD;AACD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAAA;IAC7D,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,CAAA;IACzC,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAA;IACrC,6FAA6F;IAC7F,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG;QAAE,QAAQ,IAAI,MAAM,CAAA;KAAE,CAAA;CACzE;AAgBD,uFAAuF;AACvF,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,OAAO,EAChB,WAAW,CAAC,EAAE,kBAAkB,CAAC,aAAa,CAAC,GAC9C,gBAAgB,CAWlB;AA4LD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,kBAAkB,GAAG,sBAAsB,CAkEzF"}