@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,107 @@
1
+ import type { StandardSchemaV1 } from "@nifrajs/core/server";
2
+ import type { LoaderContext } from "../manifest.js";
3
+ export type ComponentKey = string | number;
4
+ export type ComponentValue = null | boolean | number | string | readonly ComponentValue[] | {
5
+ readonly [key: string]: ComponentValue;
6
+ };
7
+ export interface ServerComponentContext extends LoaderContext {
8
+ readonly signal: AbortSignal;
9
+ readonly data: unknown;
10
+ readonly layoutData: readonly unknown[];
11
+ }
12
+ export interface ServerComponentDefinition<Input, Props, View> {
13
+ readonly input: StandardSchemaV1<unknown, Input>;
14
+ readonly props: StandardSchemaV1<unknown, Props>;
15
+ readonly authorize: (ctx: ServerComponentContext, input: Input) => void | Promise<void>;
16
+ readonly load: (ctx: ServerComponentContext, input: Input) => unknown | Promise<unknown>;
17
+ readonly view: (args: {
18
+ readonly props: Props;
19
+ readonly children?: readonly ComponentRecord[];
20
+ }) => View | Promise<View>;
21
+ readonly capabilities?: readonly string[];
22
+ }
23
+ export interface ServerComponent<Input = unknown, Props = unknown, View = unknown> {
24
+ /** Compiler-generated opaque reference; application authors do not assign module URLs. */
25
+ readonly reference?: string;
26
+ readonly view: (args: {
27
+ readonly props: Props;
28
+ readonly children?: readonly ComponentRecord[];
29
+ }) => View | Promise<View>;
30
+ readonly input: StandardSchemaV1<unknown, Input>;
31
+ readonly props: StandardSchemaV1<unknown, Props>;
32
+ }
33
+ export interface PreparedServerComponent<Props = unknown, View = unknown> {
34
+ readonly props: Props;
35
+ readonly view: (args: {
36
+ readonly props: Props;
37
+ readonly children?: readonly ComponentRecord[];
38
+ }) => View | Promise<View>;
39
+ }
40
+ export interface ComponentRenderContext {
41
+ readonly reference: string;
42
+ readonly instance: string;
43
+ readonly signal: AbortSignal;
44
+ readonly nonce?: string;
45
+ readonly children?: readonly ComponentRecord[];
46
+ }
47
+ export interface ComponentRender {
48
+ readonly html: string;
49
+ readonly payload?: ComponentValue;
50
+ readonly islands?: readonly ComponentIsland[];
51
+ }
52
+ export interface ComponentIsland {
53
+ readonly reference: string;
54
+ readonly key: ComponentKey;
55
+ readonly props: ComponentValue;
56
+ readonly renderId: string;
57
+ readonly slots?: Readonly<Record<string, string>>;
58
+ }
59
+ export interface ServerComponentRenderAdapter {
60
+ readonly name: "react" | "vue" | "svelte" | "solid" | "preact";
61
+ readonly version: 1;
62
+ render(view: unknown, props: unknown, context: ComponentRenderContext): ComponentRender | Promise<ComponentRender>;
63
+ }
64
+ export interface ComponentInstance {
65
+ readonly component: ServerComponentHandle;
66
+ readonly key: ComponentKey;
67
+ readonly input: unknown;
68
+ readonly parent?: string;
69
+ }
70
+ export interface ComponentOwner {
71
+ readonly components: readonly ServerComponentHandle[];
72
+ readonly capabilities?: readonly string[];
73
+ readonly instances: (ctx: ServerComponentContext) => readonly ComponentInstance[] | Promise<readonly ComponentInstance[]>;
74
+ /** A public, non-secret token supplied by the application's auth integration. */
75
+ readonly scope: "anonymous" | ((ctx: ServerComponentContext) => string | Promise<string>);
76
+ }
77
+ export interface ServerComponentHandle {
78
+ readonly reference?: string;
79
+ readonly input: StandardSchemaV1;
80
+ readonly props: StandardSchemaV1;
81
+ readonly view: (args: never) => unknown;
82
+ }
83
+ export interface ComponentRecord extends ComponentRender {
84
+ readonly instance: string;
85
+ readonly reference: string;
86
+ readonly key: ComponentKey;
87
+ readonly parent: string | null;
88
+ readonly input: ComponentValue;
89
+ }
90
+ export interface ComponentState {
91
+ readonly v: 1;
92
+ readonly build: string;
93
+ readonly adapter: "react" | "vue" | "svelte" | "solid" | "preact";
94
+ readonly owner: string;
95
+ readonly scope: string;
96
+ readonly records: readonly ComponentRecord[];
97
+ }
98
+ /** Optional seam passed to createWebApp; disabled applications have no runtime import of this feature. */
99
+ export interface ServerComponentRuntime {
100
+ owns(routeId: string): boolean;
101
+ capabilities(routeId: string): readonly string[];
102
+ classify(request: Request, routeId: string): import("./protocol.js").ComponentRequest | undefined;
103
+ execute(routeId: string, context: ServerComponentContext, selection?: import("./protocol.js").ComponentRequest, nonce?: string): Promise<ComponentState>;
104
+ response(state: ComponentState, selection: import("./protocol.js").ComponentRequest): Response;
105
+ failure(error: unknown): Response;
106
+ }
107
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/server-components/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/server-components/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ import type * as TS from "typescript";
2
+ /** The code of the error a TypeScript without the in-process compiler API raises here. */
3
+ export declare const UNSUPPORTED_TYPESCRIPT = "NIFRA_TS_UNSUPPORTED";
4
+ /**
5
+ * The TypeScript compiler API, resolved from `from` the way `import "typescript"` there would be.
6
+ * TypeScript 7's package ships no in-process compiler API (its root export is only `version`), so
7
+ * it raises an error that names the fix instead of a TypeError on first use.
8
+ */
9
+ export declare function loadTypeScript(from?: string): typeof TS;
10
+ export declare const ts: typeof TS;
11
+ //# sourceMappingURL=typescript.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typescript.d.ts","sourceRoot":"","sources":["../../src/server-components/typescript.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,EAAE,MAAM,YAAY,CAAA;AAErC,0FAA0F;AAC1F,eAAO,MAAM,sBAAsB,yBAAyB,CAAA;AAW5D;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,GAAE,MAAwB,GAAG,OAAO,EAAE,CAgBxE;AAED,eAAO,MAAM,EAAE,EAAE,OAAO,EAAqB,CAAA"}
@@ -0,0 +1,28 @@
1
+ import { createRequire } from "node:module";
2
+ /** The code of the error a TypeScript without the in-process compiler API raises here. */
3
+ export const UNSUPPORTED_TYPESCRIPT = "NIFRA_TS_UNSUPPORTED";
4
+ function isCompiler(value) {
5
+ return (typeof value === "object" &&
6
+ value !== null &&
7
+ "createSourceFile" in value &&
8
+ typeof value.createSourceFile === "function");
9
+ }
10
+ /**
11
+ * The TypeScript compiler API, resolved from `from` the way `import "typescript"` there would be.
12
+ * TypeScript 7's package ships no in-process compiler API (its root export is only `version`), so
13
+ * it raises an error that names the fix instead of a TypeError on first use.
14
+ */
15
+ export function loadTypeScript(from = import.meta.url) {
16
+ const loaded = createRequire(from)("typescript");
17
+ if (isCompiler(loaded))
18
+ return loaded;
19
+ const version = typeof loaded === "object" &&
20
+ loaded !== null &&
21
+ "version" in loaded &&
22
+ typeof loaded.version === "string"
23
+ ? loaded.version
24
+ : "unknown";
25
+ throw Object.assign(new Error(`${UNSUPPORTED_TYPESCRIPT}: server components read component modules with the TypeScript compiler API, which TypeScript ${version} does not ship. Pin the project to TypeScript 6 (for example, \`bun add -d typescript@^6\`).`), { code: UNSUPPORTED_TYPESCRIPT, version });
26
+ }
27
+ export const ts = loadTypeScript();
28
+ //# sourceMappingURL=typescript.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typescript.js","sourceRoot":"","sources":["../../src/server-components/typescript.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAG3C,0FAA0F;AAC1F,MAAM,CAAC,MAAM,sBAAsB,GAAG,sBAAsB,CAAA;AAE5D,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,kBAAkB,IAAI,KAAK;QAC3B,OAAO,KAAK,CAAC,gBAAgB,KAAK,UAAU,CAC7C,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe,MAAM,CAAC,IAAI,CAAC,GAAG;IAC3D,MAAM,MAAM,GAAY,aAAa,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,CAAA;IACzD,IAAI,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAA;IACrC,MAAM,OAAO,GACX,OAAO,MAAM,KAAK,QAAQ;QAC1B,MAAM,KAAK,IAAI;QACf,SAAS,IAAI,MAAM;QACnB,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ;QAChC,CAAC,CAAC,MAAM,CAAC,OAAO;QAChB,CAAC,CAAC,SAAS,CAAA;IACf,MAAM,MAAM,CAAC,MAAM,CACjB,IAAI,KAAK,CACP,GAAG,sBAAsB,iGAAiG,OAAO,8FAA8F,CAChO,EACD,EAAE,IAAI,EAAE,sBAAsB,EAAE,OAAO,EAAE,CAC1C,CAAA;AACH,CAAC;AAED,MAAM,CAAC,MAAM,EAAE,GAAc,cAAc,EAAE,CAAA"}
@@ -0,0 +1,5 @@
1
+ import type { ComponentValue } from "./types.js";
2
+ /** Property order does not identify a resource; callers supply already-validated DTO inputs. */
3
+ export declare function componentInputKey(value: ComponentValue): string;
4
+ export declare function componentValue(value: unknown, maxBytes?: number): ComponentValue;
5
+ //# sourceMappingURL=value.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"value.d.ts","sourceRoot":"","sources":["../../src/server-components/value.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAEhD,gGAAgG;AAChG,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAQ/D;AAKD,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,GAAE,MAAc,GAAG,cAAc,CAgEvF"}
@@ -0,0 +1,77 @@
1
+ import { ServerComponentError } from "./error.js";
2
+ /** Property order does not identify a resource; callers supply already-validated DTO inputs. */
3
+ export function componentInputKey(value) {
4
+ if (Array.isArray(value))
5
+ return `[${value.map(componentInputKey).join(",")}]`;
6
+ if (typeof value === "object" && value !== null)
7
+ return `{${Object.keys(value)
8
+ .sort()
9
+ .map((key) => `${JSON.stringify(key)}:${componentInputKey(Reflect.get(value, key))}`)
10
+ .join(",")}}`;
11
+ return JSON.stringify(value);
12
+ }
13
+ const encoder = new TextEncoder();
14
+ const forbidden = new Set(["__proto__", "prototype", "constructor"]);
15
+ export function componentValue(value, maxBytes = 65536) {
16
+ const seen = new Set();
17
+ let nodes = 0;
18
+ let bytes = 0;
19
+ const charge = (text) => {
20
+ bytes += encoder.encode(text).byteLength;
21
+ if (bytes > maxBytes)
22
+ throw new ServerComponentError("component_limit", 413);
23
+ };
24
+ const visit = (item, depth) => {
25
+ if (++nodes > 8192 || depth > 16)
26
+ throw new ServerComponentError("component_limit", 413);
27
+ if (item === null ||
28
+ typeof item === "string" ||
29
+ typeof item === "boolean" ||
30
+ (typeof item === "number" && Number.isFinite(item))) {
31
+ charge(JSON.stringify(item));
32
+ return item;
33
+ }
34
+ if (typeof item !== "object" || item === null || seen.has(item))
35
+ throw new ServerComponentError("component_contract");
36
+ const array = Array.isArray(item);
37
+ const prototype = Object.getPrototypeOf(item);
38
+ if (array ? prototype !== Array.prototype : prototype !== Object.prototype && prototype !== null) {
39
+ throw new ServerComponentError("component_contract");
40
+ }
41
+ // Reject custom serializers without invoking them, including inherited serializers.
42
+ if ("toJSON" in item || Object.getOwnPropertySymbols(item).length > 0)
43
+ throw new ServerComponentError("component_contract");
44
+ const descriptors = Object.getOwnPropertyDescriptors(item);
45
+ const names = Object.keys(descriptors);
46
+ if (array && (item.length > 8192 || names.length !== item.length + 1))
47
+ throw new ServerComponentError("component_contract");
48
+ const result = array
49
+ ? []
50
+ : Object.create(null);
51
+ seen.add(item);
52
+ charge(array ? "[]" : "{}");
53
+ let count = 0;
54
+ for (const name of names) {
55
+ if (array && name === "length")
56
+ continue;
57
+ const property = descriptors[name];
58
+ if (forbidden.has(name) ||
59
+ !property.enumerable ||
60
+ !Object.hasOwn(property, "value") ||
61
+ (array && (!/^(0|[1-9][0-9]*)$/.test(name) || Number(name) >= item.length))) {
62
+ throw new ServerComponentError("component_contract");
63
+ }
64
+ charge((count++ === 0 ? "" : ",") + (array ? "" : `${JSON.stringify(name)}:`));
65
+ Object.defineProperty(result, name, {
66
+ value: visit(property.value, depth + 1),
67
+ enumerable: true,
68
+ writable: true,
69
+ configurable: true,
70
+ });
71
+ }
72
+ seen.delete(item);
73
+ return result;
74
+ };
75
+ return visit(value, 0);
76
+ }
77
+ //# sourceMappingURL=value.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"value.js","sourceRoot":"","sources":["../../src/server-components/value.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { type Plugin } from "vite";
2
+ export interface ServerComponentsPluginOptions {
3
+ readonly root: string;
4
+ readonly adapter: "react" | "vue" | "svelte" | "solid" | "preact";
5
+ }
6
+ /** Compiler bridge. The ordinary build must continue rejecting arbitrary server imports. */
7
+ export declare function serverComponentsPlugin(options: ServerComponentsPluginOptions): Plugin & {
8
+ readonly api: {
9
+ readonly componentModules: ReadonlySet<string>;
10
+ };
11
+ };
12
+ //# sourceMappingURL=vite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vite.d.ts","sourceRoot":"","sources":["../../src/server-components/vite.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,MAAM,EAA0B,MAAM,MAAM,CAAA;AAmB1D,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAA;CAClE;AAiED,4FAA4F;AAC5F,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,6BAA6B,GACrC,MAAM,GAAG;IAAE,QAAQ,CAAC,GAAG,EAAE;QAAE,QAAQ,CAAC,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;KAAE,CAAA;CAAE,CAmJ/E"}
@@ -0,0 +1,197 @@
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ import { createRequire } from "node:module";
3
+ import { resolve } from "node:path";
4
+ import { version as viteVersion } from "vite";
5
+ import { compileComponentModule, componentReference, directive, exportedValues, guardCreateElementCalls, sourceFile, } from "./source.js";
6
+ import { ts } from "./typescript.js";
7
+ const componentFile = /\.component\.server\.[cm]?[jt]sx?$/;
8
+ const islandFile = /\.island\.[cm]?[jt]sx?$/;
9
+ const referencePrefix = "\0nifra-component-reference:";
10
+ const nativeQuery = "nifra-native-client-reference";
11
+ const reactRuntime = "\0nifra-component-react-runtime";
12
+ // Vite uses forward slashes for module IDs even when the filesystem uses backslashes.
13
+ const bare = (id) => (id.split("?")[0] ?? id).replaceAll("\\", "/");
14
+ function nativeFacade(source, file) {
15
+ const prefix = file.replace(/\.[cm]?[jt]sx?$/, ".props.");
16
+ const extensions = /\.[cm]?jsx?$/.test(file)
17
+ ? ["js", "mjs", "cjs", "ts"]
18
+ : ["ts", "mts", "cts", "js"];
19
+ const companion = extensions.map((extension) => prefix + extension).find(existsSync) ?? prefix + extensions[0];
20
+ if (!existsSync(companion))
21
+ throw new Error(`[nifra/components] ${file} requires ${companion}: export a closed props schema for every native client component`);
22
+ const schemas = sourceFile(readFileSync(companion, "utf8"), companion);
23
+ const registered = new Set(exportedValues(schemas));
24
+ const slots = new Map();
25
+ for (const statement of schemas.statements) {
26
+ if (!ts.isVariableStatement(statement))
27
+ continue;
28
+ for (const declaration of statement.declarationList.declarations) {
29
+ if (!ts.isIdentifier(declaration.name) || !declaration.name.text.endsWith("Slots"))
30
+ continue;
31
+ let value = declaration.initializer;
32
+ if (value !== undefined && ts.isAsExpression(value))
33
+ value = value.expression;
34
+ if (value === undefined ||
35
+ !ts.isArrayLiteralExpression(value) ||
36
+ !value.elements.every(ts.isStringLiteral))
37
+ throw new Error("[nifra/components] Managed slot names must be a literal array");
38
+ // biome-ignore lint/plugin/requireSafetyCommentForTypeAssertion: The compiler inspects trusted AST/package metadata and its own populated stub map; application data never supplies these values.
39
+ const names = value.elements.map((node) => node.text);
40
+ if (names.some((name) => !/^[A-Za-z][A-Za-z0-9_]{0,63}$/.test(name) ||
41
+ name === "ref" ||
42
+ name === "key" ||
43
+ name === "constructor"))
44
+ throw new Error("[nifra/components] Invalid managed slot name");
45
+ slots.set(declaration.name.text.slice(0, -5), names);
46
+ }
47
+ }
48
+ const names = exportedValues(sourceFile(source, file));
49
+ const exports = names.map((name, index) => {
50
+ if (!registered.has(name))
51
+ throw new Error(`[nifra/components] Native client export ${name} in ${file} has no registered props schema`);
52
+ if (name !== "default" && !/^[$A-Z_a-z][$\w]*$/.test(name))
53
+ throw new Error("[nifra/components] Native client export names must be identifiers");
54
+ const local = `__nifra_client_${index}`;
55
+ const value = `__guard(__native[${JSON.stringify(name)}], __schemas[${JSON.stringify(name)}], ${JSON.stringify(slots.get(name) ?? [])})`;
56
+ return name === "default"
57
+ ? `const ${local} = ${value}; export default ${local};`
58
+ : `export const ${name} = ${value};`;
59
+ });
60
+ return [
61
+ 'import { guardedClientReference as __guard } from "@nifrajs/web-react/server-components/guard";',
62
+ `import * as __native from ${JSON.stringify(`${file}?${nativeQuery}`)};`,
63
+ `import * as __schemas from ${JSON.stringify(companion)};`,
64
+ ...exports,
65
+ ].join("\n");
66
+ }
67
+ /** Compiler bridge. The ordinary build must continue rejecting arbitrary server imports. */
68
+ export function serverComponentsPlugin(options) {
69
+ const stubs = new Map();
70
+ const internal = new Set();
71
+ const nativeReferences = new Set();
72
+ const componentModules = new Set();
73
+ return {
74
+ api: { componentModules },
75
+ name: "nifra:server-components",
76
+ enforce: "pre",
77
+ configResolved(config) {
78
+ if (viteVersion !== "8.2.1")
79
+ throw new Error("[nifra/components] Use the certified Vite 8.2.1 component pipeline; Bun remains a supported server runtime");
80
+ if (options.adapter === "react") {
81
+ const require = createRequire(resolve(config.root, "package.json"));
82
+ const versions = ["react", "react-dom", "react-server-dom-webpack"].map((name) => {
83
+ try {
84
+ // biome-ignore lint/plugin/requireSafetyCommentForTypeAssertion: The compiler inspects trusted AST/package metadata and its own populated stub map; application data never supplies these values.
85
+ return require(`${name}/package.json`).version;
86
+ }
87
+ catch {
88
+ throw new Error(`[nifra/components] Install ${name}@19.2.8 for the React component pipeline`);
89
+ }
90
+ });
91
+ if (versions.some((version) => version !== "19.2.8"))
92
+ throw new Error("[nifra/components] React, React DOM, and Flight must all use the matching 19.2.8 version");
93
+ }
94
+ },
95
+ async resolveId(source, importer) {
96
+ const environment = this.environment.name;
97
+ if (source === "react" && environment === "rsc" && !internal.has(bare(importer ?? ""))) {
98
+ internal.add(reactRuntime);
99
+ const guard = await this.resolve("@nifrajs/web-react/server-components/guard", importer, {
100
+ skipSelf: true,
101
+ });
102
+ if (guard !== null)
103
+ internal.add(bare(guard.id));
104
+ return reactRuntime;
105
+ }
106
+ if (source.startsWith("\0virtual:vite-rsc/") && environment !== "rsc")
107
+ return null;
108
+ if (source.startsWith("@nifrajs/web-react/server-components/")) {
109
+ const resolved = await this.resolve(source, importer, { skipSelf: true });
110
+ if (resolved !== null)
111
+ internal.add(bare(resolved.id));
112
+ return resolved;
113
+ }
114
+ if (source.includes(nativeQuery)) {
115
+ const file = source.startsWith("/@fs/")
116
+ ? source.slice("/@fs".length).replace(/^\/(?=[A-Za-z]:[\\/])/, "")
117
+ : existsSync(bare(source))
118
+ ? source
119
+ : resolve(options.root, `.${source}`);
120
+ if (!nativeReferences.has(bare(file)) ||
121
+ (environment === "rsc" && (importer === undefined || bare(importer) !== bare(file))))
122
+ throw new Error("[nifra/components] Raw native client references are compiler-owned; import the registered client component");
123
+ return file;
124
+ }
125
+ if (source.startsWith(referencePrefix) || source.startsWith("\0"))
126
+ return null;
127
+ if (environment === "rsc" &&
128
+ options.adapter === "react" &&
129
+ (source === "react/jsx-runtime" || source === "react/jsx-dev-runtime") &&
130
+ !internal.has(bare(importer ?? ""))) {
131
+ const resolved = await this.resolve(`@nifrajs/web-react/server-components/${source.endsWith("dev-runtime") ? "jsx-dev-runtime" : "jsx-runtime"}`, importer, { skipSelf: true });
132
+ if (resolved === null)
133
+ throw new Error("[nifra/components] Install the matching @nifrajs/web-react adapter");
134
+ internal.add(bare(resolved.id));
135
+ const guard = await this.resolve("@nifrajs/web-react/server-components/guard", importer, {
136
+ skipSelf: true,
137
+ });
138
+ if (guard !== null)
139
+ internal.add(bare(guard.id));
140
+ return resolved;
141
+ }
142
+ if (environment !== "client")
143
+ return null;
144
+ const resolved = await this.resolve(source, importer, { skipSelf: true });
145
+ if (resolved === null || !componentFile.test(bare(resolved.id)))
146
+ return null;
147
+ if (resolved.id !== bare(resolved.id))
148
+ throw new Error("[nifra/components] Server component source cannot be imported as an asset");
149
+ const compiled = compileComponentModule(readFileSync(resolved.id, "utf8"), resolved.id, options.root, "client");
150
+ const id = referencePrefix + componentReference(resolved.id, options.root, "module");
151
+ stubs.set(id, compiled.code);
152
+ return id;
153
+ },
154
+ load(id) {
155
+ if (id === reactRuntime)
156
+ return {
157
+ code: 'import * as Native from "react"; import { guardedCreateElement as createElement, guardedCloneElement as cloneElement } from "@nifrajs/web-react/server-components/guard"; export { Children, Fragment, Profiler, StrictMode, Suspense, __SERVER_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, cache, cacheSignal, captureOwnerStack, createRef, forwardRef, isValidElement, lazy, memo, use, useCallback, useDebugValue, useId, useMemo, version } from "react"; export { createElement, cloneElement }; export default { ...Native, createElement, cloneElement };',
158
+ map: null,
159
+ };
160
+ // biome-ignore lint/plugin/requireSafetyCommentForTypeAssertion: The compiler inspects trusted AST/package metadata and its own populated stub map; application data never supplies these values.
161
+ if (stubs.has(id))
162
+ return { code: stubs.get(id), map: null };
163
+ const path = bare(id);
164
+ if (id.endsWith(`?${nativeQuery}`))
165
+ return { code: readFileSync(path, "utf8"), map: null };
166
+ if (!/\.[cm]?[jt]sx?$/.test(path) || !existsSync(path))
167
+ return null;
168
+ const source = readFileSync(path, "utf8");
169
+ const ast = sourceFile(source, path);
170
+ if (directive(ast, "use server"))
171
+ throw new Error(`[nifra/components] Native use-server actions in ${path} are unsupported; use a validated serverFn in a *.fn.ts module`);
172
+ if (this.environment.name === "rsc" &&
173
+ options.adapter === "react" &&
174
+ directive(ast, "use client")) {
175
+ nativeReferences.add(path);
176
+ return { code: nativeFacade(source, path), map: null };
177
+ }
178
+ return null;
179
+ },
180
+ transform(source, id) {
181
+ if (id.includes(nativeQuery) || internal.has(bare(id)))
182
+ return null;
183
+ const path = bare(id);
184
+ let code = source;
185
+ if (componentFile.test(path)) {
186
+ code = compileComponentModule(source, path, options.root, this.environment.name).code;
187
+ componentModules.add(path);
188
+ }
189
+ if (islandFile.test(path))
190
+ code = compileComponentModule(source, path, options.root, this.environment.name, "island").code;
191
+ if (this.environment.name === "rsc" && options.adapter === "react")
192
+ code = guardCreateElementCalls(code, path);
193
+ return code === source ? null : { code, map: null };
194
+ },
195
+ };
196
+ }
197
+ //# sourceMappingURL=vite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vite.js","sourceRoot":"","sources":["../../src/server-components/vite.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { defineServerComponent, inheritOwnerAuthorization, isServerComponent, prepareServerComponent, } from "./server-components/definition.js";
2
+ export { type ComponentErrorCode, ServerComponentError } from "./server-components/error.js";
3
+ export { createServerComponents, defineComponentOwner, type ServerComponentsOptions, serverComponentIdentity, serverComponentInstance, } from "./server-components/runtime.js";
4
+ export type { ComponentInstance, ComponentIsland, ComponentKey, ComponentOwner, ComponentRecord, ComponentRender, ComponentRenderContext, ComponentState, ComponentValue, PreparedServerComponent, ServerComponent, ServerComponentContext, ServerComponentDefinition, ServerComponentHandle, ServerComponentRenderAdapter, ServerComponentRuntime, } from "./server-components/types.js";
5
+ //# sourceMappingURL=server-components.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-components.d.ts","sourceRoot":"","sources":["../src/server-components.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,yBAAyB,EACzB,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EAAE,KAAK,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AAC5F,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,KAAK,uBAAuB,EAC5B,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,gCAAgC,CAAA;AACvC,YAAY,EACV,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,cAAc,EACd,eAAe,EACf,eAAe,EACf,sBAAsB,EACtB,cAAc,EACd,cAAc,EACd,uBAAuB,EACvB,eAAe,EACf,sBAAsB,EACtB,yBAAyB,EACzB,qBAAqB,EACrB,4BAA4B,EAC5B,sBAAsB,GACvB,MAAM,8BAA8B,CAAA"}
@@ -0,0 +1,4 @@
1
+ export { defineServerComponent, inheritOwnerAuthorization, isServerComponent, prepareServerComponent, } from "./server-components/definition.js";
2
+ export { ServerComponentError } from "./server-components/error.js";
3
+ export { createServerComponents, defineComponentOwner, serverComponentIdentity, serverComponentInstance, } from "./server-components/runtime.js";
4
+ //# sourceMappingURL=server-components.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-components.js","sourceRoot":"","sources":["../src/server-components.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,yBAAyB,EACzB,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EAA2B,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AAC5F,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EAEpB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,gCAAgC,CAAA"}
@@ -13,6 +13,10 @@
13
13
  * - **GET, same-origin, `ok`, and not `no-store`.** Anything else goes straight to the network.
14
14
  * - **The cache name carries the build id.** A deploy that changed the assets gets a new cache, and
15
15
  * activation deletes every older one, so a stale worker cannot pin an old build indefinitely.
16
+ * Only caches named `<cacheName>:<buildId>` are the worker's: the origin's other caches - another
17
+ * app's, or data the page stored itself - are never read, written or deleted.
18
+ * - **Only this build's precached URLs are answered.** Every other request, an API call included,
19
+ * goes to the network untouched.
16
20
  *
17
21
  * It is opt-in and generated at build time; an app that does not call this ships nothing.
18
22
  */
@@ -34,7 +38,10 @@ export interface ServiceWorkerOptions {
34
38
  * bytes. Omit it and failed navigations simply fail, which is the honest default.
35
39
  */
36
40
  readonly offlineUrl?: string;
37
- /** Cache name prefix. Default `nifra`. */
41
+ /**
42
+ * Cache name prefix, and the namespace activation cleans: every cache named `<cacheName>:<id>` other
43
+ * than this build's is deleted. Give each worker sharing an origin its own. Default `nifra`.
44
+ */
38
45
  readonly cacheName?: string;
39
46
  /** Extra same-origin URLs to precache. Only pass immutable ones. */
40
47
  readonly additionalPrecache?: readonly string[];
@@ -1 +1 @@
1
- {"version":3,"file":"service-worker.d.ts","sourceRoot":"","sources":["../src/service-worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,oGAAoG;AACpG,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;IAClC,QAAQ,CAAC,GAAG,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CACjC;AAED,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,0CAA0C;IAC1C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,oEAAoE;IACpE,QAAQ,CAAC,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAChD;AAuBD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,qBAAqB,EAC/B,OAAO,EAAE,oBAAoB,GAC5B,MAAM,CAiFR;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,SAAS,SAAW,GAAG,MAAM,CAGtE"}
1
+ {"version":3,"file":"service-worker.d.ts","sourceRoot":"","sources":["../src/service-worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,oGAAoG;AACpG,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;IAClC,QAAQ,CAAC,GAAG,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CACjC;AAED,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,oEAAoE;IACpE,QAAQ,CAAC,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAChD;AAuBD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,qBAAqB,EAC/B,OAAO,EAAE,oBAAoB,GAC5B,MAAM,CA2FR;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,SAAS,SAAW,GAAG,MAAM,CAGtE"}
@@ -13,6 +13,10 @@
13
13
  * - **GET, same-origin, `ok`, and not `no-store`.** Anything else goes straight to the network.
14
14
  * - **The cache name carries the build id.** A deploy that changed the assets gets a new cache, and
15
15
  * activation deletes every older one, so a stale worker cannot pin an old build indefinitely.
16
+ * Only caches named `<cacheName>:<buildId>` are the worker's: the origin's other caches - another
17
+ * app's, or data the page stored itself - are never read, written or deleted.
18
+ * - **Only this build's precached URLs are answered.** Every other request, an API call included,
19
+ * goes to the network untouched.
16
20
  *
17
21
  * It is opt-in and generated at build time; an app that does not call this ships nothing.
18
22
  */
@@ -62,8 +66,11 @@ export function generateServiceWorker(manifest, options) {
62
66
  // means the browser does not treat it as an update.
63
67
  const urls = [...new Set(offline === undefined ? precache : [...precache, offline])].sort();
64
68
  return `// Generated by @nifrajs/web/service-worker. Do not edit.
65
- const CACHE = ${JSON.stringify(`${prefix}-${options.buildId}`)}
69
+ const OWNED = ${JSON.stringify(`${prefix}:`)}
70
+ const CACHE = OWNED + ${JSON.stringify(options.buildId)}
66
71
  const PRECACHE = ${JSON.stringify(urls)}
72
+ const OWN_URLS = new Set(PRECACHE)
73
+ const OWN = { cacheName: CACHE }
67
74
  const OFFLINE = ${offline === undefined ? "null" : JSON.stringify(offline)}
68
75
 
69
76
  self.addEventListener("install", (event) => {
@@ -76,7 +83,9 @@ self.addEventListener("activate", (event) => {
76
83
  event.waitUntil(
77
84
  caches
78
85
  .keys()
79
- .then((keys) => Promise.all(keys.filter((k) => k !== CACHE).map((k) => caches.delete(k))))
86
+ // Neither the prefix nor a build id can hold a colon, so the first one ends the namespace.
87
+ .then((keys) => keys.filter((k) => k !== CACHE && k.startsWith(OWNED)))
88
+ .then((old) => Promise.all(old.map((k) => caches.delete(k))))
80
89
  .then(() => self.clients.claim()),
81
90
  )
82
91
  })
@@ -91,20 +100,25 @@ self.addEventListener("fetch", (event) => {
91
100
  // how one user gets served the page rendered for another, so nothing is stored here.
92
101
  if (request.mode === "navigate") {
93
102
  if (OFFLINE === null) return
94
- event.respondWith(fetch(request).catch(() => caches.match(OFFLINE).then((r) => r ?? Response.error())))
103
+ event.respondWith(
104
+ fetch(request).catch(() => caches.match(OFFLINE, OWN).then((r) => r ?? Response.error())),
105
+ )
95
106
  return
96
107
  }
97
108
 
98
- // Assets: cache first, because every precached URL is content-hashed and therefore immutable.
109
+ // Assets: cache first, because every precached URL is content-hashed and therefore immutable. Only
110
+ // this build's URLs are answered, and only from this build's cache: every other request, an API
111
+ // call included, goes to the network, and another cache on the origin is never read.
112
+ if (!OWN_URLS.has(url.pathname)) return
99
113
  event.respondWith(
100
- caches.match(request).then((hit) => {
114
+ caches.match(request, OWN).then((hit) => {
101
115
  if (hit !== undefined) return hit
102
116
  return fetch(request).then((response) => {
103
117
  const cacheable =
104
118
  response.ok &&
105
119
  response.type === "basic" &&
106
120
  !(response.headers.get("cache-control") ?? "").includes("no-store")
107
- if (cacheable && PRECACHE.includes(url.pathname)) {
121
+ if (cacheable) {
108
122
  const copy = response.clone()
109
123
  void caches.open(CACHE).then((c) => c.put(request, copy))
110
124
  }