@nifrajs/web 5.5.1 → 5.7.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 (481) hide show
  1. package/CHANGELOG.md +243 -0
  2. package/README.md +21 -11
  3. package/dist/boundary.d.ts +67 -7
  4. package/dist/boundary.d.ts.map +1 -1
  5. package/dist/boundary.js +6 -4
  6. package/dist/boundary.js.map +1 -1
  7. package/dist/build-plan.d.ts +3 -0
  8. package/dist/build-plan.d.ts.map +1 -1
  9. package/dist/build-plan.js.map +1 -1
  10. package/dist/build-vite.d.ts.map +1 -1
  11. package/dist/build-vite.js +2 -0
  12. package/dist/build-vite.js.map +1 -1
  13. package/dist/build.d.ts +9 -2
  14. package/dist/build.d.ts.map +1 -1
  15. package/dist/build.js +10 -0
  16. package/dist/build.js.map +1 -1
  17. package/dist/client.d.ts +3 -1
  18. package/dist/client.d.ts.map +1 -1
  19. package/dist/client.js +174 -23
  20. package/dist/client.js.map +1 -1
  21. package/dist/csp.d.ts +8 -0
  22. package/dist/csp.d.ts.map +1 -1
  23. package/dist/csp.js +11 -2
  24. package/dist/csp.js.map +1 -1
  25. package/dist/deferred.d.ts +6 -4
  26. package/dist/deferred.d.ts.map +1 -1
  27. package/dist/deferred.js +10 -6
  28. package/dist/deferred.js.map +1 -1
  29. package/dist/dev-feed.d.ts.map +1 -1
  30. package/dist/dev-feed.js +11 -2
  31. package/dist/dev-feed.js.map +1 -1
  32. package/dist/dev-session.d.ts.map +1 -1
  33. package/dist/dev-session.js +13 -6
  34. package/dist/dev-session.js.map +1 -1
  35. package/dist/dev.d.ts +4 -1
  36. package/dist/dev.d.ts.map +1 -1
  37. package/dist/dev.js +12 -5
  38. package/dist/dev.js.map +1 -1
  39. package/dist/diagnostic-catalog.d.ts +4 -0
  40. package/dist/diagnostic-catalog.d.ts.map +1 -1
  41. package/dist/diagnostic-catalog.js +48 -0
  42. package/dist/diagnostic-catalog.js.map +1 -1
  43. package/dist/diagnostic.d.ts +1 -1
  44. package/dist/diagnostic.d.ts.map +1 -1
  45. package/dist/diagnostic.js +1 -1
  46. package/dist/diagnostic.js.map +1 -1
  47. package/dist/fn.d.ts +5 -3
  48. package/dist/fn.d.ts.map +1 -1
  49. package/dist/fn.js +20 -5
  50. package/dist/fn.js.map +1 -1
  51. package/dist/fs.d.ts.map +1 -1
  52. package/dist/fs.js +13 -3
  53. package/dist/fs.js.map +1 -1
  54. package/dist/identity.d.ts +22 -0
  55. package/dist/identity.d.ts.map +1 -0
  56. package/dist/identity.js +60 -0
  57. package/dist/identity.js.map +1 -0
  58. package/dist/index.d.ts +8 -6
  59. package/dist/index.d.ts.map +1 -1
  60. package/dist/index.js +6 -3
  61. package/dist/index.js.map +1 -1
  62. package/dist/internal/cdn/cloudflare.d.ts +2 -1
  63. package/dist/internal/cdn/cloudflare.d.ts.map +1 -1
  64. package/dist/internal/cdn/cloudflare.js +2 -1
  65. package/dist/internal/cdn/cloudflare.js.map +1 -1
  66. package/dist/internal/certified-components.d.ts +1 -1
  67. package/dist/internal/certified-components.js +1 -1
  68. package/dist/internal/codegen.d.ts +11 -10
  69. package/dist/internal/codegen.d.ts.map +1 -1
  70. package/dist/internal/codegen.js +73 -10
  71. package/dist/internal/codegen.js.map +1 -1
  72. package/dist/internal/dev-websocket.d.ts +73 -0
  73. package/dist/internal/dev-websocket.d.ts.map +1 -0
  74. package/dist/internal/dev-websocket.js +145 -0
  75. package/dist/internal/dev-websocket.js.map +1 -0
  76. package/dist/internal/hole-runtime.d.ts +66 -0
  77. package/dist/internal/hole-runtime.d.ts.map +1 -0
  78. package/dist/internal/hole-runtime.js +211 -0
  79. package/dist/internal/hole-runtime.js.map +1 -0
  80. package/dist/internal/identity-epoch.d.ts +50 -0
  81. package/dist/internal/identity-epoch.d.ts.map +1 -0
  82. package/dist/internal/identity-epoch.js +180 -0
  83. package/dist/internal/identity-epoch.js.map +1 -0
  84. package/dist/internal/invalidation-contract.d.ts +23 -0
  85. package/dist/internal/invalidation-contract.d.ts.map +1 -0
  86. package/dist/internal/invalidation-contract.js +11 -0
  87. package/dist/internal/invalidation-contract.js.map +1 -0
  88. package/dist/internal/invalidation.d.ts +62 -0
  89. package/dist/internal/invalidation.d.ts.map +1 -0
  90. package/dist/internal/invalidation.js +149 -0
  91. package/dist/internal/invalidation.js.map +1 -0
  92. package/dist/internal/island-bindings.d.ts +51 -0
  93. package/dist/internal/island-bindings.d.ts.map +1 -0
  94. package/dist/internal/island-bindings.js +147 -0
  95. package/dist/internal/island-bindings.js.map +1 -0
  96. package/dist/internal/island-list.d.ts +26 -0
  97. package/dist/internal/island-list.d.ts.map +1 -0
  98. package/dist/internal/island-list.js +78 -0
  99. package/dist/internal/island-list.js.map +1 -0
  100. package/dist/internal/island-mount.d.ts +4 -0
  101. package/dist/internal/island-mount.d.ts.map +1 -0
  102. package/dist/internal/island-mount.js +66 -0
  103. package/dist/internal/island-mount.js.map +1 -0
  104. package/dist/internal/island-owner.d.ts +5 -0
  105. package/dist/internal/island-owner.d.ts.map +1 -0
  106. package/dist/internal/island-owner.js +20 -0
  107. package/dist/internal/island-owner.js.map +1 -0
  108. package/dist/internal/island-resource.d.ts +30 -0
  109. package/dist/internal/island-resource.d.ts.map +1 -0
  110. package/dist/internal/island-resource.js +57 -0
  111. package/dist/internal/island-resource.js.map +1 -0
  112. package/dist/internal/island-signals.d.ts +51 -0
  113. package/dist/internal/island-signals.d.ts.map +1 -0
  114. package/dist/internal/island-signals.js +220 -0
  115. package/dist/internal/island-signals.js.map +1 -0
  116. package/dist/internal/keep-alive-table.d.ts +23 -0
  117. package/dist/internal/keep-alive-table.d.ts.map +1 -0
  118. package/dist/internal/keep-alive-table.js +53 -0
  119. package/dist/internal/keep-alive-table.js.map +1 -0
  120. package/dist/internal/live-contract.d.ts +101 -0
  121. package/dist/internal/live-contract.d.ts.map +1 -0
  122. package/dist/internal/live-contract.js +5 -0
  123. package/dist/internal/live-contract.js.map +1 -0
  124. package/dist/internal/live-queries.d.ts +22 -0
  125. package/dist/internal/live-queries.d.ts.map +1 -0
  126. package/dist/internal/live-queries.js +54 -0
  127. package/dist/internal/live-queries.js.map +1 -0
  128. package/dist/internal/page-events.d.ts +10 -0
  129. package/dist/internal/page-events.d.ts.map +1 -0
  130. package/dist/internal/page-events.js +26 -0
  131. package/dist/internal/page-events.js.map +1 -0
  132. package/dist/internal/page-execution.d.ts +16 -1
  133. package/dist/internal/page-execution.d.ts.map +1 -1
  134. package/dist/internal/page-execution.js +432 -31
  135. package/dist/internal/page-execution.js.map +1 -1
  136. package/dist/internal/parity.d.ts +3 -0
  137. package/dist/internal/parity.d.ts.map +1 -1
  138. package/dist/internal/parity.js +28 -5
  139. package/dist/internal/parity.js.map +1 -1
  140. package/dist/internal/ppr/admission.d.ts +83 -0
  141. package/dist/internal/ppr/admission.d.ts.map +1 -0
  142. package/dist/internal/ppr/admission.js +221 -0
  143. package/dist/internal/ppr/admission.js.map +1 -0
  144. package/dist/internal/ppr/canary.d.ts +24 -0
  145. package/dist/internal/ppr/canary.d.ts.map +1 -0
  146. package/dist/internal/ppr/canary.js +102 -0
  147. package/dist/internal/ppr/canary.js.map +1 -0
  148. package/dist/internal/ppr/compile-shell.d.ts +39 -0
  149. package/dist/internal/ppr/compile-shell.d.ts.map +1 -0
  150. package/dist/internal/ppr/compile-shell.js +298 -0
  151. package/dist/internal/ppr/compile-shell.js.map +1 -0
  152. package/dist/internal/ppr/contract.d.ts +177 -0
  153. package/dist/internal/ppr/contract.d.ts.map +1 -0
  154. package/dist/internal/ppr/contract.js +80 -0
  155. package/dist/internal/ppr/contract.js.map +1 -0
  156. package/dist/internal/ppr/frames.d.ts +71 -0
  157. package/dist/internal/ppr/frames.d.ts.map +1 -0
  158. package/dist/internal/ppr/frames.js +119 -0
  159. package/dist/internal/ppr/frames.js.map +1 -0
  160. package/dist/internal/ppr/integration.d.ts +19 -0
  161. package/dist/internal/ppr/integration.d.ts.map +1 -0
  162. package/dist/internal/ppr/integration.js +106 -0
  163. package/dist/internal/ppr/integration.js.map +1 -0
  164. package/dist/internal/ppr/options.d.ts +96 -0
  165. package/dist/internal/ppr/options.d.ts.map +1 -0
  166. package/dist/internal/ppr/options.js +125 -0
  167. package/dist/internal/ppr/options.js.map +1 -0
  168. package/dist/internal/ppr/route-rules.d.ts +12 -0
  169. package/dist/internal/ppr/route-rules.d.ts.map +1 -0
  170. package/dist/internal/ppr/route-rules.js +53 -0
  171. package/dist/internal/ppr/route-rules.js.map +1 -0
  172. package/dist/internal/ppr/runtime.d.ts +29 -0
  173. package/dist/internal/ppr/runtime.d.ts.map +1 -0
  174. package/dist/internal/ppr/runtime.js +35 -0
  175. package/dist/internal/ppr/runtime.js.map +1 -0
  176. package/dist/internal/ppr/server.d.ts +29 -0
  177. package/dist/internal/ppr/server.d.ts.map +1 -0
  178. package/dist/internal/ppr/server.js +1409 -0
  179. package/dist/internal/ppr/server.js.map +1 -0
  180. package/dist/internal/ppr/shell-store.d.ts +39 -0
  181. package/dist/internal/ppr/shell-store.d.ts.map +1 -0
  182. package/dist/internal/ppr/shell-store.js +106 -0
  183. package/dist/internal/ppr/shell-store.js.map +1 -0
  184. package/dist/internal/prerendered-pages.d.ts +1 -1
  185. package/dist/internal/prerendered-pages.d.ts.map +1 -1
  186. package/dist/internal/prerendered-pages.js +7 -4
  187. package/dist/internal/prerendered-pages.js.map +1 -1
  188. package/dist/internal/present.d.ts +11 -0
  189. package/dist/internal/present.d.ts.map +1 -0
  190. package/dist/internal/present.js +13 -0
  191. package/dist/internal/present.js.map +1 -0
  192. package/dist/internal/query-digest.d.ts +9 -0
  193. package/dist/internal/query-digest.d.ts.map +1 -0
  194. package/dist/internal/query-digest.js +23 -0
  195. package/dist/internal/query-digest.js.map +1 -0
  196. package/dist/internal/query-runtime.d.ts +6 -1
  197. package/dist/internal/query-runtime.d.ts.map +1 -1
  198. package/dist/internal/query-runtime.js +9 -0
  199. package/dist/internal/query-runtime.js.map +1 -1
  200. package/dist/internal/query-seam.d.ts +29 -0
  201. package/dist/internal/query-seam.d.ts.map +1 -0
  202. package/dist/internal/query-seam.js +23 -0
  203. package/dist/internal/query-seam.js.map +1 -0
  204. package/dist/internal/render-document.d.ts +34 -64
  205. package/dist/internal/render-document.d.ts.map +1 -1
  206. package/dist/internal/render-document.js +82 -64
  207. package/dist/internal/render-document.js.map +1 -1
  208. package/dist/internal/request-abort.d.ts +8 -0
  209. package/dist/internal/request-abort.d.ts.map +1 -0
  210. package/dist/internal/request-abort.js +22 -0
  211. package/dist/internal/request-abort.js.map +1 -0
  212. package/dist/internal/server-boundary.d.ts +2 -0
  213. package/dist/internal/server-boundary.d.ts.map +1 -1
  214. package/dist/internal/server-boundary.js +8 -1
  215. package/dist/internal/server-boundary.js.map +1 -1
  216. package/dist/internal/share-data.d.ts +10 -0
  217. package/dist/internal/share-data.d.ts.map +1 -0
  218. package/dist/internal/share-data.js +135 -0
  219. package/dist/internal/share-data.js.map +1 -0
  220. package/dist/internal/status-page.d.ts +68 -0
  221. package/dist/internal/status-page.d.ts.map +1 -0
  222. package/dist/internal/status-page.js +66 -0
  223. package/dist/internal/status-page.js.map +1 -0
  224. package/dist/internal/store-signature.d.ts +15 -0
  225. package/dist/internal/store-signature.d.ts.map +1 -0
  226. package/dist/internal/store-signature.js +114 -0
  227. package/dist/internal/store-signature.js.map +1 -0
  228. package/dist/internal/vite-plugin-compat.d.ts +2 -2
  229. package/dist/internal/vite-plugin-compat.js +2 -2
  230. package/dist/internal/web-app.d.ts +26 -0
  231. package/dist/internal/web-app.d.ts.map +1 -1
  232. package/dist/internal/web-app.js +79 -3
  233. package/dist/internal/web-app.js.map +1 -1
  234. package/dist/islands-swap.d.ts +41 -0
  235. package/dist/islands-swap.d.ts.map +1 -0
  236. package/dist/islands-swap.js +270 -0
  237. package/dist/islands-swap.js.map +1 -0
  238. package/dist/islands.d.ts +86 -24
  239. package/dist/islands.d.ts.map +1 -1
  240. package/dist/islands.js +138 -78
  241. package/dist/islands.js.map +1 -1
  242. package/dist/isr.d.ts +67 -13
  243. package/dist/isr.d.ts.map +1 -1
  244. package/dist/isr.js +247 -99
  245. package/dist/isr.js.map +1 -1
  246. package/dist/keep-alive.d.ts +147 -0
  247. package/dist/keep-alive.d.ts.map +1 -0
  248. package/dist/keep-alive.js +1102 -0
  249. package/dist/keep-alive.js.map +1 -0
  250. package/dist/live/bus.d.ts +70 -0
  251. package/dist/live/bus.d.ts.map +1 -0
  252. package/dist/live/bus.js +55 -0
  253. package/dist/live/bus.js.map +1 -0
  254. package/dist/live/core.d.ts +25 -0
  255. package/dist/live/core.d.ts.map +1 -0
  256. package/dist/live/core.js +29 -0
  257. package/dist/live/core.js.map +1 -0
  258. package/dist/live/history.d.ts +38 -0
  259. package/dist/live/history.d.ts.map +1 -0
  260. package/dist/live/history.js +104 -0
  261. package/dist/live/history.js.map +1 -0
  262. package/dist/live/hub-protocol.d.ts +46 -0
  263. package/dist/live/hub-protocol.d.ts.map +1 -0
  264. package/dist/live/hub-protocol.js +108 -0
  265. package/dist/live/hub-protocol.js.map +1 -0
  266. package/dist/live/hub.d.ts +185 -0
  267. package/dist/live/hub.d.ts.map +1 -0
  268. package/dist/live/hub.js +544 -0
  269. package/dist/live/hub.js.map +1 -0
  270. package/dist/live/keyring.d.ts +92 -0
  271. package/dist/live/keyring.d.ts.map +1 -0
  272. package/dist/live/keyring.js +265 -0
  273. package/dist/live/keyring.js.map +1 -0
  274. package/dist/live/read-capped.d.ts +6 -0
  275. package/dist/live/read-capped.d.ts.map +1 -0
  276. package/dist/live/read-capped.js +42 -0
  277. package/dist/live/read-capped.js.map +1 -0
  278. package/dist/live/revocations.d.ts +52 -0
  279. package/dist/live/revocations.d.ts.map +1 -0
  280. package/dist/live/revocations.js +116 -0
  281. package/dist/live/revocations.js.map +1 -0
  282. package/dist/live/settings.d.ts +14 -0
  283. package/dist/live/settings.d.ts.map +1 -0
  284. package/dist/live/settings.js +38 -0
  285. package/dist/live/settings.js.map +1 -0
  286. package/dist/live-client.d.ts +34 -0
  287. package/dist/live-client.d.ts.map +1 -0
  288. package/dist/live-client.js +878 -0
  289. package/dist/live-client.js.map +1 -0
  290. package/dist/live-hub.d.ts +130 -0
  291. package/dist/live-hub.d.ts.map +1 -0
  292. package/dist/live-hub.js +507 -0
  293. package/dist/live-hub.js.map +1 -0
  294. package/dist/live-redis.d.ts +60 -0
  295. package/dist/live-redis.d.ts.map +1 -0
  296. package/dist/live-redis.js +212 -0
  297. package/dist/live-redis.js.map +1 -0
  298. package/dist/live.d.ts +150 -0
  299. package/dist/live.d.ts.map +1 -0
  300. package/dist/live.js +972 -0
  301. package/dist/live.js.map +1 -0
  302. package/dist/manifest.d.ts +113 -2
  303. package/dist/manifest.d.ts.map +1 -1
  304. package/dist/manifest.js +109 -5
  305. package/dist/manifest.js.map +1 -1
  306. package/dist/navigation.d.ts +9 -3
  307. package/dist/navigation.d.ts.map +1 -1
  308. package/dist/navigation.js +13 -3
  309. package/dist/navigation.js.map +1 -1
  310. package/dist/plugins/vite-zone-guard.d.ts +6 -0
  311. package/dist/plugins/vite-zone-guard.d.ts.map +1 -1
  312. package/dist/plugins/vite-zone-guard.js +8 -2
  313. package/dist/plugins/vite-zone-guard.js.map +1 -1
  314. package/dist/ppr.d.ts +73 -0
  315. package/dist/ppr.d.ts.map +1 -0
  316. package/dist/ppr.js +76 -0
  317. package/dist/ppr.js.map +1 -0
  318. package/dist/query.d.ts +8 -13
  319. package/dist/query.d.ts.map +1 -1
  320. package/dist/query.js +112 -18
  321. package/dist/query.js.map +1 -1
  322. package/dist/render-seam.d.ts +32 -0
  323. package/dist/render-seam.d.ts.map +1 -1
  324. package/dist/render-seam.js +7 -0
  325. package/dist/render-seam.js.map +1 -1
  326. package/dist/route-types.d.ts.map +1 -1
  327. package/dist/route-types.js +2 -2
  328. package/dist/route-types.js.map +1 -1
  329. package/dist/router.d.ts +72 -4
  330. package/dist/router.d.ts.map +1 -1
  331. package/dist/router.js +416 -129
  332. package/dist/router.js.map +1 -1
  333. package/dist/server-components/build.d.ts.map +1 -1
  334. package/dist/server-components/build.js +3 -3
  335. package/dist/server-components/build.js.map +1 -1
  336. package/dist/server-components/client.d.ts +23 -1
  337. package/dist/server-components/client.d.ts.map +1 -1
  338. package/dist/server-components/client.js +92 -5
  339. package/dist/server-components/client.js.map +1 -1
  340. package/dist/server-components/definition.d.ts.map +1 -1
  341. package/dist/server-components/definition.js +2 -1
  342. package/dist/server-components/definition.js.map +1 -1
  343. package/dist/server-components/hole.d.ts +8 -0
  344. package/dist/server-components/hole.d.ts.map +1 -0
  345. package/dist/server-components/hole.js +20 -0
  346. package/dist/server-components/hole.js.map +1 -0
  347. package/dist/server-components/html-policy.d.ts.map +1 -1
  348. package/dist/server-components/html-policy.js +62 -4
  349. package/dist/server-components/html-policy.js.map +1 -1
  350. package/dist/server-components/html-scan.d.ts +17 -0
  351. package/dist/server-components/html-scan.d.ts.map +1 -0
  352. package/dist/server-components/html-scan.js +180 -0
  353. package/dist/server-components/html-scan.js.map +1 -0
  354. package/dist/server-components/html.d.ts.map +1 -1
  355. package/dist/server-components/html.js +19 -4
  356. package/dist/server-components/html.js.map +1 -1
  357. package/dist/server-components/router-integration.d.ts +4 -1
  358. package/dist/server-components/router-integration.d.ts.map +1 -1
  359. package/dist/server-components/router-integration.js +23 -2
  360. package/dist/server-components/router-integration.js.map +1 -1
  361. package/dist/server-components/runtime.d.ts +6 -1
  362. package/dist/server-components/runtime.d.ts.map +1 -1
  363. package/dist/server-components/runtime.js +88 -29
  364. package/dist/server-components/runtime.js.map +1 -1
  365. package/dist/server-components/state.d.ts +3 -1
  366. package/dist/server-components/state.d.ts.map +1 -1
  367. package/dist/server-components/state.js +50 -38
  368. package/dist/server-components/state.js.map +1 -1
  369. package/dist/server-components/types.d.ts +9 -0
  370. package/dist/server-components/types.d.ts.map +1 -1
  371. package/dist/server-components/vite.d.ts.map +1 -1
  372. package/dist/server-components/vite.js +26 -9
  373. package/dist/server-components/vite.js.map +1 -1
  374. package/dist/vite.d.ts +5 -1
  375. package/dist/vite.d.ts.map +1 -1
  376. package/dist/vite.js +58 -4
  377. package/dist/vite.js.map +1 -1
  378. package/package.json +48 -8
  379. package/src/boundary.ts +77 -5
  380. package/src/build-plan.ts +3 -0
  381. package/src/build-vite.ts +2 -0
  382. package/src/build.ts +20 -1
  383. package/src/client.ts +183 -23
  384. package/src/csp.ts +16 -2
  385. package/src/deferred.ts +11 -5
  386. package/src/dev-feed.ts +11 -2
  387. package/src/dev-session.ts +22 -11
  388. package/src/dev.ts +29 -8
  389. package/src/diagnostic-catalog.ts +53 -0
  390. package/src/diagnostic.ts +1 -0
  391. package/src/fn.ts +24 -7
  392. package/src/fs.ts +22 -8
  393. package/src/identity.ts +61 -0
  394. package/src/index.ts +20 -4
  395. package/src/internal/cdn/cloudflare.ts +2 -1
  396. package/src/internal/certified-components.ts +1 -1
  397. package/src/internal/codegen.ts +95 -9
  398. package/src/internal/dev-websocket.ts +230 -0
  399. package/src/internal/hole-runtime.ts +286 -0
  400. package/src/internal/identity-epoch.ts +239 -0
  401. package/src/internal/invalidation-contract.ts +35 -0
  402. package/src/internal/invalidation.ts +213 -0
  403. package/src/internal/island-bindings.ts +191 -0
  404. package/src/internal/island-list.ts +92 -0
  405. package/src/internal/island-mount.ts +68 -0
  406. package/src/internal/island-owner.ts +20 -0
  407. package/src/internal/island-resource.ts +76 -0
  408. package/src/internal/island-signals.ts +249 -0
  409. package/src/internal/keep-alive-table.ts +72 -0
  410. package/src/internal/live-contract.ts +111 -0
  411. package/src/internal/live-queries.ts +60 -0
  412. package/src/internal/page-events.ts +27 -0
  413. package/src/internal/page-execution.ts +605 -45
  414. package/src/internal/parity.ts +35 -6
  415. package/src/internal/ppr/admission.ts +300 -0
  416. package/src/internal/ppr/canary.ts +122 -0
  417. package/src/internal/ppr/compile-shell.ts +379 -0
  418. package/src/internal/ppr/contract.ts +265 -0
  419. package/src/internal/ppr/frames.ts +170 -0
  420. package/src/internal/ppr/integration.ts +137 -0
  421. package/src/internal/ppr/options.ts +221 -0
  422. package/src/internal/ppr/route-rules.ts +77 -0
  423. package/src/internal/ppr/runtime.ts +39 -0
  424. package/src/internal/ppr/server.ts +1766 -0
  425. package/src/internal/ppr/shell-store.ts +152 -0
  426. package/src/internal/prerendered-pages.ts +7 -4
  427. package/src/internal/present.ts +20 -0
  428. package/src/internal/query-digest.ts +34 -0
  429. package/src/internal/query-runtime.ts +14 -1
  430. package/src/internal/query-seam.ts +48 -0
  431. package/src/internal/render-document.ts +158 -113
  432. package/src/internal/request-abort.ts +26 -0
  433. package/src/internal/server-boundary.ts +10 -1
  434. package/src/internal/share-data.ts +136 -0
  435. package/src/internal/status-page.ts +95 -0
  436. package/src/internal/store-signature.ts +149 -0
  437. package/src/internal/vite-plugin-compat.ts +2 -2
  438. package/src/internal/web-app.ts +123 -3
  439. package/src/islands-swap.ts +283 -0
  440. package/src/islands.ts +169 -72
  441. package/src/isr.ts +348 -106
  442. package/src/keep-alive.ts +1354 -0
  443. package/src/live/bus.ts +104 -0
  444. package/src/live/core.ts +52 -0
  445. package/src/live/history.ts +109 -0
  446. package/src/live/hub-protocol.ts +133 -0
  447. package/src/live/hub.ts +620 -0
  448. package/src/live/keyring.ts +384 -0
  449. package/src/live/read-capped.ts +36 -0
  450. package/src/live/revocations.ts +155 -0
  451. package/src/live/settings.ts +46 -0
  452. package/src/live-client.ts +1011 -0
  453. package/src/live-hub.ts +658 -0
  454. package/src/live-redis.ts +284 -0
  455. package/src/live.ts +1257 -0
  456. package/src/manifest.ts +274 -6
  457. package/src/navigation.ts +14 -2
  458. package/src/plugins/vite-zone-guard.ts +15 -2
  459. package/src/ppr.ts +153 -0
  460. package/src/query.ts +147 -20
  461. package/src/render-seam.ts +37 -0
  462. package/src/route-types.ts +3 -1
  463. package/src/router.ts +534 -132
  464. package/src/server-components/build.ts +9 -3
  465. package/src/server-components/client.ts +89 -5
  466. package/src/server-components/definition.ts +2 -1
  467. package/src/server-components/hole.ts +23 -0
  468. package/src/server-components/html-policy.ts +63 -4
  469. package/src/server-components/html-scan.ts +159 -0
  470. package/src/server-components/html.ts +18 -4
  471. package/src/server-components/router-integration.ts +21 -2
  472. package/src/server-components/runtime.ts +114 -31
  473. package/src/server-components/state.ts +66 -44
  474. package/src/server-components/types.ts +16 -0
  475. package/src/server-components/vite.ts +33 -14
  476. package/src/vite.ts +75 -6
  477. package/dist/nano.d.ts +0 -125
  478. package/dist/nano.d.ts.map +0 -1
  479. package/dist/nano.js +0 -190
  480. package/dist/nano.js.map +0 -1
  481. package/src/nano.ts +0 -246
@@ -0,0 +1,220 @@
1
+ /**
2
+ * Fine-grained signals - the reactive core of `@nifrajs/web/islands`. Pull-based auto-tracking with
3
+ * per-run re-tracking (a branch switch drops the stale branch's subscriptions), `Object.is`
4
+ * equality skips, and an explicit synchronous {@link batch} that coalesces effect re-runs.
5
+ *
6
+ * Deliberately tiny and synchronous: a write recomputes the computeds it feeds at once and runs its
7
+ * effects before `set` returns, each once, after every computed has settled - predictable for
8
+ * island-scale code (a counter, a filter drawer), and the whole core stays well under a kilobyte.
9
+ * This is NOT a general app framework - just island-scale reactivity.
10
+ */
11
+ import { adopt } from "./island-owner.js";
12
+ let currentEffect;
13
+ /** Run `fn` without subscribing the running effect or computed to the signals it reads. */
14
+ export function untrack(fn) {
15
+ const prev = currentEffect;
16
+ currentEffect = undefined;
17
+ try {
18
+ return fn();
19
+ }
20
+ finally {
21
+ currentEffect = prev;
22
+ }
23
+ }
24
+ let batchDepth = 0;
25
+ const queue = [];
26
+ /**
27
+ * Batch writes: effects triggered inside `fn` run ONCE after it returns, deduplicated - so
28
+ * `setA(); setB()` updates the DOM once, not twice. Re-entrant; an effect re-queued during the
29
+ * flush runs in the same flush.
30
+ */
31
+ export function batch(fn) {
32
+ batchDepth++;
33
+ try {
34
+ return fn();
35
+ }
36
+ finally {
37
+ flush();
38
+ }
39
+ }
40
+ // Closes one batch level; the outermost runs the queue.
41
+ function flush() {
42
+ let i = 0;
43
+ try {
44
+ // The flush still counts as a batch: a write an effect makes here queues, so none runs twice.
45
+ while (batchDepth === 1 && i < queue.length) {
46
+ const next = queue[i++];
47
+ if (next?.q) {
48
+ next.q = false;
49
+ next.run();
50
+ }
51
+ }
52
+ }
53
+ finally {
54
+ // A throwing effect leaves the rest queued for the next flush.
55
+ if (i === queue.length)
56
+ queue.length = 0;
57
+ else
58
+ queue.splice(0, i);
59
+ batchDepth--;
60
+ }
61
+ }
62
+ // Each plain signal's reader set, so `watch` can subscribe without tracking.
63
+ const readers = new WeakMap();
64
+ /** Create a signal. Reads inside an {@link effect} (or {@link computed}) subscribe automatically. */
65
+ export function signal(initial) {
66
+ const subs = new Set();
67
+ const s = readable(initial, subs);
68
+ readers.set(s, subs);
69
+ return s;
70
+ }
71
+ /**
72
+ * Call `fn` with `source`'s value now and after each change, queued and batched like an effect but
73
+ * subscribed once instead of tracking reads. Any other getter (a computed, a derived function) is
74
+ * tracked as an effect. Either way `fn` runs untracked. Internal to the binding walker, whose bindings each read one named signal,
75
+ * and to `bindList`; not exported from `@nifrajs/web/islands`.
76
+ */
77
+ export function watch(source, fn) {
78
+ const subs = readers.get(source);
79
+ if (!subs)
80
+ return effect(() => {
81
+ const value = source();
82
+ untrack(() => fn(value));
83
+ });
84
+ const e = {
85
+ deps: new Map([[subs, 0]]),
86
+ v: 0,
87
+ n: 1,
88
+ run: () => {
89
+ const prev = currentEffect;
90
+ currentEffect = undefined;
91
+ try {
92
+ fn(source());
93
+ }
94
+ finally {
95
+ currentEffect = prev;
96
+ }
97
+ },
98
+ };
99
+ const stop = () => {
100
+ subs.delete(e);
101
+ e.q = false;
102
+ };
103
+ subs.add(e);
104
+ adopt(stop);
105
+ batch(e.run);
106
+ return stop;
107
+ }
108
+ // A signal whose readers are `subs`, so a computed can see whether anything still reads it.
109
+ function readable(initial, subs) {
110
+ let value = initial;
111
+ // biome-ignore lint/plugin/requireSafetyCommentForTypeAssertion: `set` is assigned below, before the signal is returned
112
+ const read = (() => {
113
+ const e = currentEffect;
114
+ if (e) {
115
+ const seen = e.deps.get(subs);
116
+ if (seen !== e.v) {
117
+ if (seen === undefined)
118
+ subs.add(e);
119
+ e.deps.set(subs, e.v);
120
+ e.n++;
121
+ }
122
+ }
123
+ return value;
124
+ });
125
+ read.set = (next) => {
126
+ // biome-ignore lint/plugin/requireSafetyCommentForTypeAssertion: a function passed to `set` is always the updater form
127
+ const resolved = typeof next === "function" ? next(value) : next;
128
+ if (Object.is(resolved, value))
129
+ return;
130
+ value = resolved;
131
+ // Snapshot: an effect created while this write flushes must not run in it.
132
+ batchDepth++;
133
+ try {
134
+ for (const e of [...subs]) {
135
+ // A running effect is requeued only by a source its current run has already read.
136
+ if (e.r && e.deps.get(subs) !== e.v)
137
+ continue;
138
+ if (e.c)
139
+ e.run();
140
+ else if (!e.q) {
141
+ e.q = true;
142
+ queue.push(e);
143
+ }
144
+ }
145
+ }
146
+ finally {
147
+ flush();
148
+ }
149
+ };
150
+ return read;
151
+ }
152
+ /**
153
+ * Derived value, cached into a signal and computed on first read. While an effect (or another
154
+ * computed) reads it, it recomputes when its tracked inputs change. Once nothing reads it, the next
155
+ * input change stops it instead of recomputing, so a dropped computed costs nothing; reading it
156
+ * again starts it afresh. `dispose()` stops it at once.
157
+ */
158
+ export function computed(fn) {
159
+ const subs = new Set();
160
+ // biome-ignore lint/plugin/requireSafetyCommentForTypeAssertion: the first read computes it before returning
161
+ const out = readable(undefined, subs);
162
+ let stop;
163
+ // biome-ignore lint/plugin/requireSafetyCommentForTypeAssertion: `dispose` is assigned below
164
+ const read = (() => {
165
+ // biome-ignore lint/plugin/requireSafetyCommentForTypeAssertion: the implementation takes the computed flag its public overload hides
166
+ stop ??= effect(() => {
167
+ if (!stop || subs.size)
168
+ out.set(fn());
169
+ else
170
+ read.dispose();
171
+ }, true);
172
+ return out();
173
+ });
174
+ read.dispose = () => {
175
+ stop?.();
176
+ stop = undefined;
177
+ };
178
+ return read;
179
+ }
180
+ export function effect(fn, c) {
181
+ const stop = () => {
182
+ for (const subs of e.deps.keys())
183
+ subs.delete(e);
184
+ e.deps.clear();
185
+ e.q = false;
186
+ };
187
+ const e = {
188
+ c,
189
+ deps: new Map(),
190
+ v: 0,
191
+ n: 0,
192
+ // Subscriptions persist across runs; a source this run did not read is dropped afterwards.
193
+ run: () => {
194
+ ++e.v;
195
+ e.n = 0;
196
+ e.q = false;
197
+ e.r = true;
198
+ const prev = currentEffect;
199
+ currentEffect = e;
200
+ try {
201
+ fn();
202
+ }
203
+ finally {
204
+ currentEffect = prev;
205
+ e.r = false;
206
+ if (e.n < e.deps.size)
207
+ for (const [subs, seen] of e.deps)
208
+ if (seen !== e.v) {
209
+ subs.delete(e);
210
+ e.deps.delete(subs);
211
+ }
212
+ }
213
+ },
214
+ };
215
+ adopt(stop);
216
+ // Batched, so a write in the first run cannot re-enter it before it finishes.
217
+ batch(e.run);
218
+ return stop;
219
+ }
220
+ //# sourceMappingURL=island-signals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"island-signals.js","sourceRoot":"","sources":["../../src/internal/island-signals.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Where the slot wrappers of kept pages go, decided once from the route table so that the server's
3
+ * markup and every client render agree: a wrapper that appeared or vanished with what is kept would
4
+ * remount the page inside it, and one the server did not render fails hydration.
5
+ */
6
+ import type { Manifest } from "../manifest.js";
7
+ /** What the server and the browser both read to place the slot wrappers. */
8
+ export interface KeepAliveTable {
9
+ /** Routes whose page renders inside the slot wrappers: the build found a `keepAlive` export. */
10
+ readonly routes: readonly string[];
11
+ /** Layouts rendered inside the slot wrappers, because another chain the browser can render shares
12
+ * the layouts above one of them and not that one: a kept page then sits there beside the page on
13
+ * screen. A layout every chain shares is never wrapped. */
14
+ readonly layouts: readonly string[];
15
+ }
16
+ /** The table for `manifest`, or `undefined` when no route keeps its page alive. */
17
+ export declare function keepAliveTable(manifest: Manifest): KeepAliveTable | undefined;
18
+ /**
19
+ * The chain indices to render inside slot wrappers for a chain of `layoutIds` and then the page of
20
+ * `routeId`: each wrapped layout, and the page when its route keeps alive.
21
+ */
22
+ export declare function slotDepths(table: KeepAliveTable, layoutIds: readonly string[], routeId: string | undefined): readonly number[];
23
+ //# sourceMappingURL=keep-alive-table.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keep-alive-table.d.ts","sourceRoot":"","sources":["../../src/internal/keep-alive-table.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAE9C,4EAA4E;AAC5E,MAAM,WAAW,cAAc;IAC7B,gGAAgG;IAChG,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;IAClC;;+DAE2D;IAC3D,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;CACpC;AAOD,mFAAmF;AACnF,wBAAgB,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,cAAc,GAAG,SAAS,CA+B7E;AAED;;;GAGG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,SAAS,MAAM,EAAE,EAC5B,OAAO,EAAE,MAAM,GAAG,SAAS,GAC1B,SAAS,MAAM,EAAE,CAOnB"}
@@ -0,0 +1,53 @@
1
+ const sharesAbove = (a, b, depth) => {
2
+ for (let i = 0; i < depth; i++)
3
+ if (a[i] !== b[i])
4
+ return false;
5
+ return true;
6
+ };
7
+ /** The table for `manifest`, or `undefined` when no route keeps its page alive. */
8
+ export function keepAliveTable(manifest) {
9
+ const kept = manifest.routes.filter((route) => route.keepAlive === true);
10
+ if (kept.length === 0)
11
+ return undefined;
12
+ // Every layout chain the browser renders: each route's, a root status page's (inside the root
13
+ // layout unless the page opts out, which only its module says), and a `_loading` page's, which takes
14
+ // the layouts the two pages of a navigation share, so any prefix of a route under it.
15
+ const chains = manifest.routes.map((route) => route.layoutIds);
16
+ if (manifest.notFound !== undefined || Object.keys(manifest.statusPages ?? {}).length > 0) {
17
+ chains.push(manifest.layouts._layout === undefined ? [] : ["_layout"]);
18
+ }
19
+ for (const [id, loading] of Object.entries(manifest.loadings ?? {})) {
20
+ for (const route of manifest.routes) {
21
+ if (!route.loadingIds?.includes(id))
22
+ continue;
23
+ for (let n = loading.layoutIds.length; n <= route.layoutIds.length; n++) {
24
+ chains.push(route.layoutIds.slice(0, n));
25
+ }
26
+ }
27
+ }
28
+ const layouts = new Set();
29
+ for (const route of kept) {
30
+ route.layoutIds.forEach((layout, depth) => {
31
+ if (layouts.has(layout))
32
+ return;
33
+ if (chains.some((chain) => chain[depth] !== layout && sharesAbove(chain, route.layoutIds, depth)))
34
+ layouts.add(layout);
35
+ });
36
+ }
37
+ return { routes: [...new Set(kept.map((route) => route.id))], layouts: [...layouts] };
38
+ }
39
+ /**
40
+ * The chain indices to render inside slot wrappers for a chain of `layoutIds` and then the page of
41
+ * `routeId`: each wrapped layout, and the page when its route keeps alive.
42
+ */
43
+ export function slotDepths(table, layoutIds, routeId) {
44
+ const depths = [];
45
+ layoutIds.forEach((layout, depth) => {
46
+ if (table.layouts.includes(layout))
47
+ depths.push(depth);
48
+ });
49
+ if (routeId !== undefined && table.routes.includes(routeId))
50
+ depths.push(layoutIds.length);
51
+ return depths;
52
+ }
53
+ //# sourceMappingURL=keep-alive-table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keep-alive-table.js","sourceRoot":"","sources":["../../src/internal/keep-alive-table.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * The seam between page execution and a configured live runtime (`@nifrajs/web/live`): types and one
3
+ * symbol. An app without `live` imports nothing from the live module itself.
4
+ */
5
+ import type { IdentityPlugin, WebSocketHandler } from "@nifrajs/core/server";
6
+ import type { LoaderContext } from "../manifest.js";
7
+ import type { LiveClientEntry } from "./codegen.js";
8
+ /** What `createWebApp` tells the runtime about its routes. */
9
+ export interface LiveRouteMatch {
10
+ readonly routeId: string;
11
+ readonly layoutIds: readonly string[];
12
+ }
13
+ /** The app the live socket registers on. */
14
+ export interface LiveHostApp {
15
+ use(plugin: IdentityPlugin): unknown;
16
+ ws<Data>(path: string, handler: WebSocketHandler<Data>): unknown;
17
+ publish(topic: string, data: string): void;
18
+ }
19
+ export interface LiveAttachInput {
20
+ /** The route a canonical `pathname + search` renders, or `null`. */
21
+ readonly matchRoute: (path: string) => LiveRouteMatch | null;
22
+ readonly app: LiveHostApp;
23
+ }
24
+ export interface LiveAttachment {
25
+ /** Admission and dispatch for the live load endpoint; `undefined` for every other request. */
26
+ readonly onRequest: (req: Request) => Promise<Request | Response> | undefined;
27
+ /** The live load a page request belongs to, or `undefined` for every request that is not one. */
28
+ readonly loadOf: (req: Request) => LiveLoad | undefined;
29
+ /**
30
+ * The seed a server-rendered page of `routeId` collects its keys into, or `undefined` when none can
31
+ * be issued now (the runtime not started, the bus down, Workers). Never admitted: it is no live load.
32
+ */
33
+ readonly seedOf: (req: Request, routeId: string) => LiveLoad | undefined;
34
+ }
35
+ /** One live load, from the page handler's side. */
36
+ export interface LiveLoad {
37
+ /** The route the endpoint mapped the retain list against. */
38
+ readonly routeId: string;
39
+ /** `undefined` when admitted; else the 503 to answer with. An admitted load is released once. */
40
+ admit(): Response | undefined;
41
+ /** Release the admission slot once the response is complete: at once, or when its stream ends. */
42
+ settle(response: Response): Response;
43
+ release(): void;
44
+ /**
45
+ * After middleware: resolve the viewer's subject. `false` when the presented grant's retention no
46
+ * longer applies (another subject), so every owner loads fresh.
47
+ */
48
+ bind(ctx: LoaderContext): Promise<boolean>;
49
+ /** Skip the page loader: the page owner is retained. Read after {@link bind}. */
50
+ readonly retainPage: boolean;
51
+ /** `ctx.live` for one owner. */
52
+ collector(owner: string): (...keys: string[]) => void;
53
+ /** Close an owner's collector once its loader has settled. */
54
+ seal(owner: string): void;
55
+ /** The envelope's `live` member, built after every loader settled without a throw or status. */
56
+ finish(input: LiveFinish): Promise<LiveEnvelope>;
57
+ }
58
+ export interface LiveFinish {
59
+ /** Owners whose loaders ran and resolved. */
60
+ readonly fresh: readonly string[];
61
+ /** Owners whose loaders were skipped: their keys come from the presented grant. */
62
+ readonly retained: readonly string[];
63
+ readonly ctx: LoaderContext;
64
+ }
65
+ export interface LiveEnvelope {
66
+ /**
67
+ * Opaque and stable per viewer, one per listed secret, newest first. A load sharing none with the
68
+ * last one is another user, so client caches are cleared; a rotation always leaves one in common.
69
+ */
70
+ readonly subjects: readonly string[];
71
+ /** Absent when no grant could be issued; the client then polls. */
72
+ readonly grant?: string;
73
+ /** Wire tag to the frame's owners that watch its key. */
74
+ readonly tags?: Readonly<Record<string, readonly string[]>>;
75
+ /** The page loader did not run: the client keeps its page data. */
76
+ readonly page?: "retained";
77
+ /** Seconds the grant stays valid from now; the client renews a minute before. */
78
+ readonly ttl?: number;
79
+ /** For query hooks: with `queryKeys`, and in development so the page can warn. */
80
+ readonly query?: LiveQueryKeys;
81
+ }
82
+ export interface LiveQueryKeys {
83
+ /** Fresh per load; absent when `queryKeys` is off. */
84
+ readonly salt?: string;
85
+ /** Wire tag to its key's digest under `salt`. */
86
+ readonly keys?: Readonly<Record<string, string>>;
87
+ /** The app runs in development: the page warns about query keys no grant holds. */
88
+ readonly dev?: true;
89
+ }
90
+ /** The owner a hole of a partially prerendered page is in its page's live frame. */
91
+ export declare const holeOwner: (hole: string, routeId: string) => string;
92
+ /** `createWebApp` reads the runtime through this symbol, so it is not public API on the object. */
93
+ export declare const LIVE_ATTACH: unique symbol;
94
+ export interface LiveRuntimeHandle {
95
+ readonly [LIVE_ATTACH]: (input: LiveAttachInput) => LiveAttachment;
96
+ /** The client entry's `live` option for this runtime: the endpoints it serves, where not the default. */
97
+ readonly clientEntry: LiveClientEntry;
98
+ /** Announce changed keys; resolves once this process applied the change. */
99
+ publish(...keys: string[]): Promise<void>;
100
+ }
101
+ //# sourceMappingURL=live-contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live-contract.d.ts","sourceRoot":"","sources":["../../src/internal/live-contract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /** The owner a hole of a partially prerendered page is in its page's live frame. */
2
+ export const holeOwner = (hole, routeId) => `B:${hole}:${routeId}`;
3
+ /** `createWebApp` reads the runtime through this symbol, so it is not public API on the object. */
4
+ export const LIVE_ATTACH = Symbol.for("nifra.web.live.attach");
5
+ //# sourceMappingURL=live-contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live-contract.js","sourceRoot":"","sources":["../../src/internal/live-contract.ts"],"names":[],"mappings":"AAkGA,oFAAoF;AACpF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,OAAe,EAAU,EAAE,CAAC,KAAK,IAAI,IAAI,OAAO,EAAE,CAAA;AAE1F,mGAAmG;AACnG,MAAM,CAAC,MAAM,WAAW,GAAkB,MAAM,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAA"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * The live client's side of the query seam. A mounted query with live keys registers here, and the
3
+ * live client matches its keys to the tags each live load grants. Importing this module installs the
4
+ * seam.
5
+ */
6
+ import { type LiveQuery } from "./query-seam.js";
7
+ export type { LiveQuery };
8
+ /** Read by a query as each fetch starts. */
9
+ export declare const liveTick: () => number;
10
+ /**
11
+ * Advanced as each live load's response arrives, and as each query registers. A query whose fetch
12
+ * started after a load arrived read the server after that load took its watermark.
13
+ */
14
+ export declare const advanceLiveTick: () => number;
15
+ export declare function liveQueries(): Iterable<LiveQuery>;
16
+ /** The live tick `query` registered at, or `undefined` once it left. */
17
+ export declare function registeredAt(query: LiveQuery): number | undefined;
18
+ /** Returns the function that stops watching. */
19
+ export declare function watchLiveQueries(watcher: () => void): () => void;
20
+ /** Another viewer: no query client keeps data loaded for the last one. */
21
+ export declare function clearQueryClients(): void;
22
+ //# sourceMappingURL=live-queries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live-queries.d.ts","sourceRoot":"","sources":["../../src/internal/live-queries.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAoB,KAAK,SAAS,EAAgB,MAAM,iBAAiB,CAAA;AAEhF,YAAY,EAAE,SAAS,EAAE,CAAA;AAIzB,4CAA4C;AAC5C,eAAO,MAAM,QAAQ,QAAO,MAAc,CAAA;AAE1C;;;GAGG;AACH,eAAO,MAAM,eAAe,QAAO,MAAgB,CAAA;AAUnD,wBAAgB,WAAW,IAAI,QAAQ,CAAC,SAAS,CAAC,CAEjD;AAED,wEAAwE;AACxE,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,CAEjE;AAED,gDAAgD;AAChD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAKhE;AAED,0EAA0E;AAC1E,wBAAgB,iBAAiB,IAAI,IAAI,CAExC"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * The live client's side of the query seam. A mounted query with live keys registers here, and the
3
+ * live client matches its keys to the tags each live load grants. Importing this module installs the
4
+ * seam.
5
+ */
6
+ import { installQuerySeam, queryClients } from "./query-seam.js";
7
+ let tick = 0;
8
+ /** Read by a query as each fetch starts. */
9
+ export const liveTick = () => tick;
10
+ /**
11
+ * Advanced as each live load's response arrives, and as each query registers. A query whose fetch
12
+ * started after a load arrived read the server after that load took its watermark.
13
+ */
14
+ export const advanceLiveTick = () => ++tick;
15
+ // Query to the live tick it registered at: a change before that never reached it.
16
+ const queries = new Map();
17
+ const watchers = new Set();
18
+ function changed() {
19
+ for (const watcher of watchers)
20
+ watcher();
21
+ }
22
+ export function liveQueries() {
23
+ return queries.keys();
24
+ }
25
+ /** The live tick `query` registered at, or `undefined` once it left. */
26
+ export function registeredAt(query) {
27
+ return queries.get(query);
28
+ }
29
+ /** Returns the function that stops watching. */
30
+ export function watchLiveQueries(watcher) {
31
+ watchers.add(watcher);
32
+ return () => {
33
+ watchers.delete(watcher);
34
+ };
35
+ }
36
+ /** Another viewer: no query client keeps data loaded for the last one. */
37
+ export function clearQueryClients() {
38
+ for (const ref of queryClients())
39
+ ref.deref()?.clear();
40
+ }
41
+ installQuerySeam({
42
+ tick: liveTick,
43
+ track(query, mounted) {
44
+ if (mounted && query.keys().length > 0) {
45
+ if (queries.has(query))
46
+ return;
47
+ queries.set(query, advanceLiveTick());
48
+ changed();
49
+ }
50
+ else if (queries.delete(query))
51
+ changed();
52
+ },
53
+ });
54
+ //# sourceMappingURL=live-queries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live-queries.js","sourceRoot":"","sources":["../../src/internal/live-queries.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,gBAAgB,EAAkB,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAIhF,IAAI,IAAI,GAAG,CAAC,CAAA;AAEZ,4CAA4C;AAC5C,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAW,EAAE,CAAC,IAAI,CAAA;AAE1C;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,GAAW,EAAE,CAAC,EAAE,IAAI,CAAA;AAEnD,kFAAkF;AAClF,MAAM,OAAO,GAAG,IAAI,GAAG,EAAqB,CAAA;AAC5C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAc,CAAA;AAEtC,SAAS,OAAO;IACd,KAAK,MAAM,OAAO,IAAI,QAAQ;QAAE,OAAO,EAAE,CAAA;AAC3C,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,OAAO,CAAC,IAAI,EAAE,CAAA;AACvB,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,YAAY,CAAC,KAAgB;IAC3C,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;AAC3B,CAAC;AAED,gDAAgD;AAChD,MAAM,UAAU,gBAAgB,CAAC,OAAmB;IAClD,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IACrB,OAAO,GAAG,EAAE;QACV,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAC1B,CAAC,CAAA;AACH,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,iBAAiB;IAC/B,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE;QAAE,GAAG,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAA;AACxD,CAAC;AAED,gBAAgB,CAAC;IACf,IAAI,EAAE,QAAQ;IACd,KAAK,CAAC,KAAK,EAAE,OAAO;QAClB,IAAI,OAAO,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvC,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;gBAAE,OAAM;YAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,eAAe,EAAE,CAAC,CAAA;YACrC,OAAO,EAAE,CAAA;QACX,CAAC;aAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE,CAAA;IAC7C,CAAC;CACF,CAAC,CAAA"}
@@ -0,0 +1,10 @@
1
+ /** Dispatched on a kept page's element as the router hides it (`keepAlive`), while it is still in the
2
+ * document and before the router's subscribers see the state that hides it. */
3
+ export declare const PAGE_HIDE_EVENT = "nifra:pagehide";
4
+ /** Dispatched on a kept page's element once it is shown again. */
5
+ export declare const PAGE_SHOW_EVENT = "nifra:pageshow";
6
+ /** Run `release` once the kept page `page` leaves its view for good; the result cancels it. */
7
+ export declare function onPageRelease(page: object, release: () => void): () => void;
8
+ /** The kept page `page` left its view: what its hidden content set aside goes. */
9
+ export declare function releasePage(page: object): void;
10
+ //# sourceMappingURL=page-events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-events.d.ts","sourceRoot":"","sources":["../../src/internal/page-events.ts"],"names":[],"mappings":"AAAA;+EAC+E;AAC/E,eAAO,MAAM,eAAe,mBAAmB,CAAA;AAC/C,kEAAkE;AAClE,eAAO,MAAM,eAAe,mBAAmB,CAAA;AAI/C,+FAA+F;AAC/F,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAU3E;AAED,kFAAkF;AAClF,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAI9C"}
@@ -0,0 +1,26 @@
1
+ /** Dispatched on a kept page's element as the router hides it (`keepAlive`), while it is still in the
2
+ * document and before the router's subscribers see the state that hides it. */
3
+ export const PAGE_HIDE_EVENT = "nifra:pagehide";
4
+ /** Dispatched on a kept page's element once it is shown again. */
5
+ export const PAGE_SHOW_EVENT = "nifra:pageshow";
6
+ const releases = new WeakMap();
7
+ /** Run `release` once the kept page `page` leaves its view for good; the result cancels it. */
8
+ export function onPageRelease(page, release) {
9
+ let pending = releases.get(page);
10
+ if (pending === undefined) {
11
+ pending = new Set();
12
+ releases.set(page, pending);
13
+ }
14
+ pending.add(release);
15
+ return () => {
16
+ pending.delete(release);
17
+ };
18
+ }
19
+ /** The kept page `page` left its view: what its hidden content set aside goes. */
20
+ export function releasePage(page) {
21
+ const pending = releases.get(page);
22
+ releases.delete(page);
23
+ for (const release of pending ?? [])
24
+ release();
25
+ }
26
+ //# sourceMappingURL=page-events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-events.js","sourceRoot":"","sources":["../../src/internal/page-events.ts"],"names":[],"mappings":"AAAA;+EAC+E;AAC/E,MAAM,CAAC,MAAM,eAAe,GAAG,gBAAgB,CAAA;AAC/C,kEAAkE;AAClE,MAAM,CAAC,MAAM,eAAe,GAAG,gBAAgB,CAAA;AAE/C,MAAM,QAAQ,GAAG,IAAI,OAAO,EAA2B,CAAA;AAEvD,+FAA+F;AAC/F,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,OAAmB;IAC7D,IAAI,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAChC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,GAAG,IAAI,GAAG,EAAE,CAAA;QACnB,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAC7B,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IACpB,OAAO,GAAG,EAAE;QACV,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IACzB,CAAC,CAAA;AACH,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAClC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACrB,KAAK,MAAM,OAAO,IAAI,OAAO,IAAI,EAAE;QAAE,OAAO,EAAE,CAAA;AAChD,CAAC"}
@@ -5,7 +5,9 @@ import { type CssLoadingMode } from "../css-contract.js";
5
5
  import type { Manifest, RouteEntry } from "../manifest.js";
6
6
  import type { NonceResolver } from "../nonce.js";
7
7
  import type { PageLocales, RenderAdapter } from "../render-seam.js";
8
- import { type RenderedPage } from "./render-document.js";
8
+ import { type LiveLoad, type LiveRouteMatch } from "./live-contract.js";
9
+ import { type PprIntegration } from "./ppr/contract.js";
10
+ import { type RenderedPage, type RevalidateResult } from "./render-document.js";
9
11
  import { type CoreResponseControls } from "./response-controls.js";
10
12
  export type { NonceResolver } from "../nonce.js";
11
13
  /** Structural context supplied by the core server to one page route handler. */
@@ -67,6 +69,15 @@ export interface PageExecutionOptions<Env = unknown> {
67
69
  readonly cacheChannel?: {
68
70
  readonly enabled: boolean;
69
71
  };
72
+ /**
73
+ * Run, or hand to the cache wrapper, what an action's `revalidate()` made stale. A promise is awaited
74
+ * before the action answers; `undefined` means nothing runs it. Never throws, never changes the answer.
75
+ */
76
+ readonly invalidate?: (revalidation: RevalidateResult<unknown>, request: Request) => Promise<void> | undefined;
77
+ /** The live load a request belongs to; only set when the app configures `live`. */
78
+ readonly liveLoadOf?: ((request: Request) => LiveLoad | undefined) | undefined;
79
+ /** The seed a rendered document collects its keys into; only set when the app configures `live`. */
80
+ readonly liveSeedOf?: ((request: Request, routeId: string) => LiveLoad | undefined) | undefined;
70
81
  readonly onLoaderError?: (error: unknown, ctx: {
71
82
  readonly request: Request;
72
83
  readonly params: Readonly<Record<string, string>>;
@@ -75,6 +86,8 @@ export interface PageExecutionOptions<Env = unknown> {
75
86
  /** Logs a failure an `_error` boundary answered. Without a boundary the error propagates and the
76
87
  * server logs it, so this runs only where the server never sees the throw. */
77
88
  readonly logBoundaryError?: (error: unknown, request: Request) => void;
89
+ /** Experimental partial prerendering: routes with a `shellLoader` stream a shared shell, then holes. */
90
+ readonly ppr?: PprIntegration;
78
91
  }
79
92
  type PageResponse = Response | ResponseResult | RenderedPage;
80
93
  export interface PageRequestExecutor<Env = unknown> {
@@ -82,6 +95,8 @@ export interface PageRequestExecutor<Env = unknown> {
82
95
  post(route: RouteEntry): (ctx: PageRouteContext<Env>) => Promise<PageResponse>;
83
96
  /** Answer a URL no route matched: the nearest nested `_404` for it, else the root one. */
84
97
  fallback(ctx: PageRouteContext<Env>): Promise<PageResponse>;
98
+ /** The route a `pathname + search` renders, with its layout chain. */
99
+ matchRoute(path: string): LiveRouteMatch | null;
85
100
  }
86
101
  /**
87
102
  * Own the page request program behind one private seam.
@@ -1 +1 @@
1
- {"version":3,"file":"page-execution.d.ts","sourceRoot":"","sources":["../../src/internal/page-execution.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"page-execution.d.ts","sourceRoot":"","sources":["../../src/internal/page-execution.ts"],"names":[],"mappings":"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"}