@nifrajs/web 3.3.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (407) hide show
  1. package/dist/backend-only.d.ts +15 -0
  2. package/dist/backend-only.d.ts.map +1 -0
  3. package/dist/backend-only.js +16 -0
  4. package/dist/backend-only.js.map +1 -0
  5. package/dist/boundary.d.ts +5 -0
  6. package/dist/boundary.d.ts.map +1 -1
  7. package/dist/boundary.js +11 -2
  8. package/dist/boundary.js.map +1 -1
  9. package/dist/build-plan.d.ts +35 -6
  10. package/dist/build-plan.d.ts.map +1 -1
  11. package/dist/build-plan.js +89 -35
  12. package/dist/build-plan.js.map +1 -1
  13. package/dist/build-vite.d.ts +18 -0
  14. package/dist/build-vite.d.ts.map +1 -1
  15. package/dist/build-vite.js +97 -17
  16. package/dist/build-vite.js.map +1 -1
  17. package/dist/build.d.ts +72 -23
  18. package/dist/build.d.ts.map +1 -1
  19. package/dist/build.js +411 -98
  20. package/dist/build.js.map +1 -1
  21. package/dist/bun-dev-entry.d.ts +1 -1
  22. package/dist/bun-dev-entry.js +1 -1
  23. package/dist/cdn.d.ts +74 -0
  24. package/dist/cdn.d.ts.map +1 -0
  25. package/dist/cdn.js +132 -0
  26. package/dist/cdn.js.map +1 -0
  27. package/dist/client.d.ts +21 -1
  28. package/dist/client.d.ts.map +1 -1
  29. package/dist/client.js +226 -15
  30. package/dist/client.js.map +1 -1
  31. package/dist/conformance.d.ts +4 -3
  32. package/dist/conformance.d.ts.map +1 -1
  33. package/dist/conformance.js +12 -3
  34. package/dist/conformance.js.map +1 -1
  35. package/dist/csp.d.ts +93 -0
  36. package/dist/csp.d.ts.map +1 -0
  37. package/dist/csp.js +122 -0
  38. package/dist/csp.js.map +1 -0
  39. package/dist/css-contract.d.ts +21 -0
  40. package/dist/css-contract.d.ts.map +1 -0
  41. package/dist/css-contract.js +28 -0
  42. package/dist/css-contract.js.map +1 -0
  43. package/dist/dev-client.d.ts +76 -0
  44. package/dist/dev-client.d.ts.map +1 -0
  45. package/dist/dev-client.js +280 -0
  46. package/dist/dev-client.js.map +1 -0
  47. package/dist/dev-diagnostics.d.ts +26 -2
  48. package/dist/dev-diagnostics.d.ts.map +1 -1
  49. package/dist/dev-diagnostics.js +38 -7
  50. package/dist/dev-diagnostics.js.map +1 -1
  51. package/dist/dev-error.d.ts +4 -13
  52. package/dist/dev-error.d.ts.map +1 -1
  53. package/dist/dev-error.js +46 -4
  54. package/dist/dev-error.js.map +1 -1
  55. package/dist/dev-feed.d.ts +298 -0
  56. package/dist/dev-feed.d.ts.map +1 -0
  57. package/dist/dev-feed.js +797 -0
  58. package/dist/dev-feed.js.map +1 -0
  59. package/dist/dev-indicator.d.ts +38 -0
  60. package/dist/dev-indicator.d.ts.map +1 -0
  61. package/dist/dev-indicator.js +93 -0
  62. package/dist/dev-indicator.js.map +1 -0
  63. package/dist/dev-session.d.ts +77 -0
  64. package/dist/dev-session.d.ts.map +1 -0
  65. package/dist/dev-session.js +580 -0
  66. package/dist/dev-session.js.map +1 -0
  67. package/dist/dev-sourcemap.d.ts +27 -0
  68. package/dist/dev-sourcemap.d.ts.map +1 -0
  69. package/dist/dev-sourcemap.js +235 -0
  70. package/dist/dev-sourcemap.js.map +1 -0
  71. package/dist/dev-ssr-graph.d.ts.map +1 -1
  72. package/dist/dev-ssr-graph.js +13 -5
  73. package/dist/dev-ssr-graph.js.map +1 -1
  74. package/dist/dev.d.ts +15 -2
  75. package/dist/dev.d.ts.map +1 -1
  76. package/dist/dev.js +69 -44
  77. package/dist/dev.js.map +1 -1
  78. package/dist/diagnostic-catalog.d.ts +35 -0
  79. package/dist/diagnostic-catalog.d.ts.map +1 -0
  80. package/dist/diagnostic-catalog.js +203 -0
  81. package/dist/diagnostic-catalog.js.map +1 -0
  82. package/dist/diagnostic-prompt.d.ts +49 -0
  83. package/dist/diagnostic-prompt.d.ts.map +1 -0
  84. package/dist/diagnostic-prompt.js +303 -0
  85. package/dist/diagnostic-prompt.js.map +1 -0
  86. package/dist/diagnostic.d.ts +17 -23
  87. package/dist/diagnostic.d.ts.map +1 -1
  88. package/dist/diagnostic.js +31 -39
  89. package/dist/diagnostic.js.map +1 -1
  90. package/dist/draft.d.ts.map +1 -1
  91. package/dist/draft.js +4 -1
  92. package/dist/draft.js.map +1 -1
  93. package/dist/fn.d.ts +5 -0
  94. package/dist/fn.d.ts.map +1 -1
  95. package/dist/fn.js +13 -3
  96. package/dist/fn.js.map +1 -1
  97. package/dist/fs.d.ts.map +1 -1
  98. package/dist/fs.js +4 -2
  99. package/dist/fs.js.map +1 -1
  100. package/dist/index.d.ts +15 -15
  101. package/dist/index.d.ts.map +1 -1
  102. package/dist/index.js +13 -12
  103. package/dist/index.js.map +1 -1
  104. package/dist/internal/cdn/cloudflare.d.ts +48 -0
  105. package/dist/internal/cdn/cloudflare.d.ts.map +1 -0
  106. package/dist/internal/cdn/cloudflare.js +94 -0
  107. package/dist/internal/cdn/cloudflare.js.map +1 -0
  108. package/dist/internal/cdn/core.d.ts +91 -0
  109. package/dist/internal/cdn/core.d.ts.map +1 -0
  110. package/dist/internal/cdn/core.js +220 -0
  111. package/dist/internal/cdn/core.js.map +1 -0
  112. package/dist/internal/cdn/fastly.d.ts +17 -0
  113. package/dist/internal/cdn/fastly.d.ts.map +1 -0
  114. package/dist/internal/cdn/fastly.js +43 -0
  115. package/dist/internal/cdn/fastly.js.map +1 -0
  116. package/dist/internal/cdn/vercel.d.ts +31 -0
  117. package/dist/internal/cdn/vercel.d.ts.map +1 -0
  118. package/dist/internal/cdn/vercel.js +56 -0
  119. package/dist/internal/cdn/vercel.js.map +1 -0
  120. package/dist/internal/code-unit-order.d.ts +4 -0
  121. package/dist/internal/code-unit-order.d.ts.map +1 -0
  122. package/dist/internal/code-unit-order.js +6 -0
  123. package/dist/internal/code-unit-order.js.map +1 -0
  124. package/dist/internal/codegen.d.ts +3 -0
  125. package/dist/internal/codegen.d.ts.map +1 -1
  126. package/dist/internal/codegen.js +151 -30
  127. package/dist/internal/codegen.js.map +1 -1
  128. package/dist/internal/dev-csp.d.ts +24 -0
  129. package/dist/internal/dev-csp.d.ts.map +1 -0
  130. package/dist/internal/dev-csp.js +160 -0
  131. package/dist/internal/dev-csp.js.map +1 -0
  132. package/dist/internal/dev-reserved.d.ts +25 -0
  133. package/dist/internal/dev-reserved.d.ts.map +1 -0
  134. package/dist/internal/dev-reserved.js +39 -0
  135. package/dist/internal/dev-reserved.js.map +1 -0
  136. package/dist/internal/html-spans.d.ts +10 -0
  137. package/dist/internal/html-spans.d.ts.map +1 -0
  138. package/dist/internal/html-spans.js +46 -0
  139. package/dist/internal/html-spans.js.map +1 -0
  140. package/dist/internal/loading-runtime.d.ts +44 -0
  141. package/dist/internal/loading-runtime.d.ts.map +1 -0
  142. package/dist/internal/loading-runtime.js +206 -0
  143. package/dist/internal/loading-runtime.js.map +1 -0
  144. package/dist/internal/matches-runtime.d.ts +8 -0
  145. package/dist/internal/matches-runtime.d.ts.map +1 -0
  146. package/dist/internal/matches-runtime.js +61 -0
  147. package/dist/internal/matches-runtime.js.map +1 -0
  148. package/dist/internal/mount-shadow.d.ts +36 -0
  149. package/dist/internal/mount-shadow.d.ts.map +1 -0
  150. package/dist/internal/mount-shadow.js +65 -0
  151. package/dist/internal/mount-shadow.js.map +1 -0
  152. package/dist/internal/node-builtins.d.ts +3 -0
  153. package/dist/internal/node-builtins.d.ts.map +1 -0
  154. package/dist/internal/node-builtins.js +79 -0
  155. package/dist/internal/node-builtins.js.map +1 -0
  156. package/dist/internal/output-guard.d.ts +65 -0
  157. package/dist/internal/output-guard.d.ts.map +1 -0
  158. package/dist/internal/output-guard.js +630 -0
  159. package/dist/internal/output-guard.js.map +1 -0
  160. package/dist/internal/page-execution.d.ts +69 -0
  161. package/dist/internal/page-execution.d.ts.map +1 -0
  162. package/dist/internal/page-execution.js +1021 -0
  163. package/dist/internal/page-execution.js.map +1 -0
  164. package/dist/internal/parity.d.ts +21 -0
  165. package/dist/internal/parity.d.ts.map +1 -1
  166. package/dist/internal/parity.js +104 -22
  167. package/dist/internal/parity.js.map +1 -1
  168. package/dist/internal/private-env.d.ts +12 -0
  169. package/dist/internal/private-env.d.ts.map +1 -0
  170. package/dist/internal/private-env.js +335 -0
  171. package/dist/internal/private-env.js.map +1 -0
  172. package/dist/internal/public-url.d.ts +3 -0
  173. package/dist/internal/public-url.d.ts.map +1 -0
  174. package/dist/internal/public-url.js +18 -0
  175. package/dist/internal/public-url.js.map +1 -0
  176. package/dist/internal/render-document.d.ts +37 -21
  177. package/dist/internal/render-document.d.ts.map +1 -1
  178. package/dist/internal/render-document.js +104 -65
  179. package/dist/internal/render-document.js.map +1 -1
  180. package/dist/internal/request-url.d.ts +3 -0
  181. package/dist/internal/request-url.d.ts.map +1 -0
  182. package/dist/internal/request-url.js +14 -0
  183. package/dist/internal/request-url.js.map +1 -0
  184. package/dist/internal/response-controls.d.ts +75 -0
  185. package/dist/internal/response-controls.d.ts.map +1 -0
  186. package/dist/internal/response-controls.js +256 -0
  187. package/dist/internal/response-controls.js.map +1 -0
  188. package/dist/internal/runtime-contract.d.ts +11 -16
  189. package/dist/internal/runtime-contract.d.ts.map +1 -1
  190. package/dist/internal/runtime-contract.js.map +1 -1
  191. package/dist/internal/secret-scan.d.ts +104 -0
  192. package/dist/internal/secret-scan.d.ts.map +1 -0
  193. package/dist/internal/secret-scan.js +485 -0
  194. package/dist/internal/secret-scan.js.map +1 -0
  195. package/dist/internal/server-boundary.d.ts +6 -29
  196. package/dist/internal/server-boundary.d.ts.map +1 -1
  197. package/dist/internal/server-boundary.js +6 -66
  198. package/dist/internal/server-boundary.js.map +1 -1
  199. package/dist/internal/source-map.d.ts +47 -0
  200. package/dist/internal/source-map.d.ts.map +1 -0
  201. package/dist/internal/source-map.js +225 -0
  202. package/dist/internal/source-map.js.map +1 -0
  203. package/dist/internal/target-compat.d.ts +27 -0
  204. package/dist/internal/target-compat.d.ts.map +1 -0
  205. package/dist/internal/target-compat.js +77 -0
  206. package/dist/internal/target-compat.js.map +1 -0
  207. package/dist/internal/timing-safe-equal.d.ts +6 -0
  208. package/dist/internal/timing-safe-equal.d.ts.map +1 -1
  209. package/dist/internal/timing-safe-equal.js +10 -0
  210. package/dist/internal/timing-safe-equal.js.map +1 -1
  211. package/dist/internal/vitals-runtime.d.ts +18 -0
  212. package/dist/internal/vitals-runtime.d.ts.map +1 -0
  213. package/dist/internal/vitals-runtime.js +38 -0
  214. package/dist/internal/vitals-runtime.js.map +1 -0
  215. package/dist/internal/web-app.d.ts +56 -8
  216. package/dist/internal/web-app.d.ts.map +1 -1
  217. package/dist/internal/web-app.js +215 -772
  218. package/dist/internal/web-app.js.map +1 -1
  219. package/dist/internal/zone-graph.d.ts +89 -0
  220. package/dist/internal/zone-graph.d.ts.map +1 -0
  221. package/dist/internal/zone-graph.js +492 -0
  222. package/dist/internal/zone-graph.js.map +1 -0
  223. package/dist/isr.d.ts +83 -6
  224. package/dist/isr.d.ts.map +1 -1
  225. package/dist/isr.js +301 -39
  226. package/dist/isr.js.map +1 -1
  227. package/dist/llms-txt.d.ts +3 -0
  228. package/dist/llms-txt.d.ts.map +1 -1
  229. package/dist/llms-txt.js +37 -9
  230. package/dist/llms-txt.js.map +1 -1
  231. package/dist/manifest.d.ts +221 -14
  232. package/dist/manifest.d.ts.map +1 -1
  233. package/dist/manifest.js +386 -9
  234. package/dist/manifest.js.map +1 -1
  235. package/dist/module-graph.d.ts +26 -5
  236. package/dist/module-graph.d.ts.map +1 -1
  237. package/dist/module-graph.js +17 -7
  238. package/dist/module-graph.js.map +1 -1
  239. package/dist/navigation.d.ts +17 -3
  240. package/dist/navigation.d.ts.map +1 -1
  241. package/dist/navigation.js +11 -5
  242. package/dist/navigation.js.map +1 -1
  243. package/dist/nonce.d.ts +47 -0
  244. package/dist/nonce.d.ts.map +1 -0
  245. package/dist/nonce.js +63 -0
  246. package/dist/nonce.js.map +1 -0
  247. package/dist/plugins/css-modules.d.ts.map +1 -1
  248. package/dist/plugins/css-modules.js +4 -3
  249. package/dist/plugins/css-modules.js.map +1 -1
  250. package/dist/plugins/kit.d.ts +9 -0
  251. package/dist/plugins/kit.d.ts.map +1 -1
  252. package/dist/plugins/kit.js +18 -0
  253. package/dist/plugins/kit.js.map +1 -1
  254. package/dist/plugins/svg.d.ts +22 -3
  255. package/dist/plugins/svg.d.ts.map +1 -1
  256. package/dist/plugins/svg.js +112 -1
  257. package/dist/plugins/svg.js.map +1 -1
  258. package/dist/plugins/vite-leak-guard.d.ts +107 -3
  259. package/dist/plugins/vite-leak-guard.d.ts.map +1 -1
  260. package/dist/plugins/vite-leak-guard.js +378 -17
  261. package/dist/plugins/vite-leak-guard.js.map +1 -1
  262. package/dist/plugins/vite-zone-guard.d.ts +61 -0
  263. package/dist/plugins/vite-zone-guard.d.ts.map +1 -0
  264. package/dist/plugins/vite-zone-guard.js +208 -0
  265. package/dist/plugins/vite-zone-guard.js.map +1 -0
  266. package/dist/plugins/zone-guard.d.ts +27 -0
  267. package/dist/plugins/zone-guard.d.ts.map +1 -0
  268. package/dist/plugins/zone-guard.js +72 -0
  269. package/dist/plugins/zone-guard.js.map +1 -0
  270. package/dist/prerender.d.ts +10 -0
  271. package/dist/prerender.d.ts.map +1 -1
  272. package/dist/prerender.js +35 -3
  273. package/dist/prerender.js.map +1 -1
  274. package/dist/public-dir.d.ts +9 -0
  275. package/dist/public-dir.d.ts.map +1 -1
  276. package/dist/public-dir.js +131 -48
  277. package/dist/public-dir.js.map +1 -1
  278. package/dist/pwa-manifest.d.ts +68 -0
  279. package/dist/pwa-manifest.d.ts.map +1 -0
  280. package/dist/pwa-manifest.js +178 -0
  281. package/dist/pwa-manifest.js.map +1 -0
  282. package/dist/query.js +4 -4
  283. package/dist/query.js.map +1 -1
  284. package/dist/render-seam.d.ts +42 -2
  285. package/dist/render-seam.d.ts.map +1 -1
  286. package/dist/render-seam.js +6 -0
  287. package/dist/render-seam.js.map +1 -1
  288. package/dist/route-manifest.d.ts +3 -0
  289. package/dist/route-manifest.d.ts.map +1 -1
  290. package/dist/route-manifest.js +26 -3
  291. package/dist/route-manifest.js.map +1 -1
  292. package/dist/route-types.d.ts +24 -0
  293. package/dist/route-types.d.ts.map +1 -0
  294. package/dist/route-types.js +195 -0
  295. package/dist/route-types.js.map +1 -0
  296. package/dist/router.d.ts +28 -6
  297. package/dist/router.d.ts.map +1 -1
  298. package/dist/router.js +129 -40
  299. package/dist/router.js.map +1 -1
  300. package/dist/trusted-html.d.ts +34 -0
  301. package/dist/trusted-html.d.ts.map +1 -0
  302. package/dist/trusted-html.js +35 -0
  303. package/dist/trusted-html.js.map +1 -0
  304. package/dist/vitals.d.ts +33 -0
  305. package/dist/vitals.d.ts.map +1 -0
  306. package/dist/vitals.js +16 -0
  307. package/dist/vitals.js.map +1 -0
  308. package/dist/vite.d.ts +16 -1
  309. package/dist/vite.d.ts.map +1 -1
  310. package/dist/vite.js +187 -36
  311. package/dist/vite.js.map +1 -1
  312. package/dist/zones.d.ts +70 -0
  313. package/dist/zones.d.ts.map +1 -0
  314. package/dist/zones.js +365 -0
  315. package/dist/zones.js.map +1 -0
  316. package/package.json +67 -14
  317. package/src/backend-only.ts +16 -0
  318. package/src/boundary.ts +18 -5
  319. package/src/build-plan.ts +113 -36
  320. package/src/build-vite.ts +124 -15
  321. package/src/build.ts +535 -102
  322. package/src/bun-dev-entry.ts +1 -1
  323. package/src/cdn.ts +216 -0
  324. package/src/client.ts +251 -18
  325. package/src/conformance.ts +16 -3
  326. package/src/csp.ts +194 -0
  327. package/src/css-contract.ts +44 -0
  328. package/src/dev-client.ts +349 -0
  329. package/src/dev-diagnostics.ts +60 -7
  330. package/src/dev-error.ts +49 -5
  331. package/src/dev-feed.ts +1140 -0
  332. package/src/dev-indicator.ts +113 -0
  333. package/src/dev-session.ts +729 -0
  334. package/src/dev-sourcemap.ts +281 -0
  335. package/src/dev-ssr-graph.ts +16 -5
  336. package/src/dev.ts +86 -43
  337. package/src/diagnostic-catalog.ts +243 -0
  338. package/src/diagnostic-prompt.ts +355 -0
  339. package/src/diagnostic.ts +63 -66
  340. package/src/draft.ts +4 -1
  341. package/src/fn.ts +19 -3
  342. package/src/fs.ts +13 -2
  343. package/src/index.ts +57 -10
  344. package/src/internal/cdn/cloudflare.ts +146 -0
  345. package/src/internal/cdn/core.ts +316 -0
  346. package/src/internal/cdn/fastly.ts +62 -0
  347. package/src/internal/cdn/vercel.ts +95 -0
  348. package/src/internal/code-unit-order.ts +5 -0
  349. package/src/internal/codegen.ts +180 -29
  350. package/src/internal/dev-csp.ts +176 -0
  351. package/src/internal/dev-reserved.ts +52 -0
  352. package/src/internal/html-spans.ts +50 -0
  353. package/src/internal/loading-runtime.ts +244 -0
  354. package/src/internal/matches-runtime.ts +62 -0
  355. package/src/internal/mount-shadow.ts +88 -0
  356. package/src/internal/node-builtins.ts +79 -0
  357. package/src/internal/output-guard.ts +701 -0
  358. package/src/internal/page-execution.ts +1371 -0
  359. package/src/internal/parity.ts +150 -36
  360. package/src/internal/private-env.ts +334 -0
  361. package/src/internal/public-url.ts +22 -0
  362. package/src/internal/render-document.ts +153 -73
  363. package/src/internal/request-url.ts +14 -0
  364. package/src/internal/response-controls.ts +284 -0
  365. package/src/internal/runtime-contract.ts +10 -15
  366. package/src/internal/secret-scan.ts +623 -0
  367. package/src/internal/server-boundary.ts +6 -69
  368. package/src/internal/source-map.ts +256 -0
  369. package/src/internal/target-compat.ts +92 -0
  370. package/src/internal/timing-safe-equal.ts +13 -0
  371. package/src/internal/vitals-runtime.ts +53 -0
  372. package/src/internal/web-app.ts +290 -879
  373. package/src/internal/zone-graph.ts +593 -0
  374. package/src/isr.ts +366 -39
  375. package/src/llms-txt.ts +44 -8
  376. package/src/manifest.ts +671 -17
  377. package/src/module-graph.ts +53 -9
  378. package/src/navigation.ts +29 -6
  379. package/src/nonce.ts +104 -0
  380. package/src/plugins/css-modules.ts +5 -3
  381. package/src/plugins/kit.ts +24 -0
  382. package/src/plugins/svg.ts +135 -4
  383. package/src/plugins/vite-leak-guard.ts +529 -16
  384. package/src/plugins/vite-zone-guard.ts +263 -0
  385. package/src/plugins/zone-guard.ts +110 -0
  386. package/src/prerender.ts +49 -3
  387. package/src/public-dir.ts +135 -49
  388. package/src/pwa-manifest.ts +226 -0
  389. package/src/query.ts +4 -4
  390. package/src/render-seam.ts +46 -1
  391. package/src/route-manifest.ts +15 -3
  392. package/src/route-types.ts +264 -0
  393. package/src/router.ts +163 -63
  394. package/src/trusted-html.ts +44 -0
  395. package/src/vitals.ts +44 -0
  396. package/src/vite.ts +207 -36
  397. package/src/zones.ts +430 -0
  398. package/dist/plugins/vite-server-only.d.ts +0 -49
  399. package/dist/plugins/vite-server-only.d.ts.map +0 -1
  400. package/dist/plugins/vite-server-only.js +0 -57
  401. package/dist/plugins/vite-server-only.js.map +0 -1
  402. package/dist/server-only.d.ts +0 -21
  403. package/dist/server-only.d.ts.map +0 -1
  404. package/dist/server-only.js +0 -25
  405. package/dist/server-only.js.map +0 -1
  406. package/src/plugins/vite-server-only.ts +0 -75
  407. package/src/server-only.ts +0 -25
@@ -1,6 +1,17 @@
1
+ import { DEFAULT_CSS_LOADING, normalizeCssLoading } from "../css-contract.js";
1
2
  import { MAP_DEFERRED_SOURCE } from "../deferred.js";
2
- import { ACTION_GLOBAL, BOUNDARY_GLOBAL, DATA_GLOBAL, LAYOUT_DATA_GLOBAL, ROOT_ATTRIBUTE, ROUTE_GLOBAL, } from "../render-seam.js";
3
+ import { ACTION_GLOBAL, BOUNDARY_GLOBAL, DATA_GLOBAL, HANDOVER_ID, LAYOUT_DATA_GLOBAL, ROOT_ATTRIBUTE, ROUTE_GLOBAL, } from "../render-seam.js";
4
+ import { PRERENDERED_GLOBAL } from "../router.js";
3
5
  import { jsStringLiteral } from "./js-string.js";
6
+ /** The globals the page-state handover may set - nothing else in it reaches `window`. */
7
+ const HANDOVER_GLOBALS = [
8
+ DATA_GLOBAL,
9
+ LAYOUT_DATA_GLOBAL,
10
+ ROUTE_GLOBAL,
11
+ ACTION_GLOBAL,
12
+ BOUNDARY_GLOBAL,
13
+ PRERENDERED_GLOBAL,
14
+ ];
4
15
  /**
5
16
  * Codegen: emit a client-entry module (as source) that lazily imports each route's layout chain
6
17
  * (so `Bun.build` with `splitting` code-splits one chunk per route), builds a `patterns` list,
@@ -19,6 +30,8 @@ export function generateClientEntry(manifest, options) {
19
30
  // Routes whose loader appends a nearest `_error` module (LAST) - the client wraps the page in the
20
31
  // adapter's `errorBoundary(fallback)` for these, so a client render error shows the `_error` UI.
21
32
  const errorRouteIds = [];
33
+ // Route id → its layout ids, for the chain `useMatches` reports. Routes without layouts are omitted.
34
+ const layoutIdsOf = {};
22
35
  // Lazy loader returns the raw modules (for both the component chain + the page's `meta` export).
23
36
  const lazyLoader = (files) => {
24
37
  const imports = files.map((f) => `import(${jsStringLiteral(resolve(f))})`).join(", ");
@@ -38,6 +51,8 @@ export function generateClientEntry(manifest, options) {
38
51
  errorRouteIds.push(route.id);
39
52
  }
40
53
  loaderRows.push(` ${JSON.stringify(route.id)}: ${lazyLoader(files)},`);
54
+ if (route.layoutIds.length > 0)
55
+ layoutIdsOf[route.id] = route.layoutIds;
41
56
  patternRows.push(` { routeId: ${JSON.stringify(route.id)}, pattern: ${JSON.stringify(route.pattern)} },`);
42
57
  }
43
58
  if (manifest.notFound !== undefined) {
@@ -49,13 +64,32 @@ export function generateClientEntry(manifest, options) {
49
64
  loaderRows.push(` ${JSON.stringify(routeId)}: ${lazyLoader([entry.file])},`);
50
65
  statusRoutes[Number(status)] = routeId;
51
66
  }
67
+ // `_loading` pages. Emitted only when the app has one, so an app without them imports nothing extra.
68
+ // Each is its own lazy chunk; a route row carries its layout ids and the loading pages above it with
69
+ // the number of those layouts each sits under - all the runtime needs to choose one.
70
+ const loadings = Object.entries(manifest.loadings ?? {});
71
+ const loadingLines = [];
72
+ if (loadings.length > 0) {
73
+ const routeRows = new Map();
74
+ for (const route of manifest.routes) {
75
+ const above = (route.loadingIds ?? []).map((id) => [
76
+ id,
77
+ manifest.loadings?.[id]?.layoutIds.length ?? 0,
78
+ ]);
79
+ routeRows.set(route.id, ` ${JSON.stringify(route.id)}: ${JSON.stringify([route.layoutIds, above])},`);
80
+ }
81
+ loadingLines.push("const loadingModules = {", ...loadings.map(([id, entry]) => ` ${JSON.stringify(id)}: () => import(${jsStringLiteral(resolve(entry.file))}),`), "}", "const loadingRoutes = {", ...routeRows.values(), "}");
82
+ }
52
83
  return `${[
53
84
  // `/client`, never the root: the root's graph carries the server (renderPage, the static-file
54
85
  // server), and Vite's dev server evaluates what it is given instead of tree-shaking it.
55
86
  'import { createClientRouter, createMatcher, mergeHeads, resolveMeta } from "@nifrajs/web/client"',
56
- 'import { applyHead, installForms, installHistory, signalHydrated } from "@nifrajs/web/client"',
87
+ 'import { applyHead, currentDocumentNonce, installForms, installHistory, signalHydrated, waitForStyles } from "@nifrajs/web/client"',
57
88
  // Namespace import: `errorBoundary` is optional (an adapter may not export it). A namespace member
58
89
  // access yields `undefined` if absent - unlike a named import, which would be a link error.
90
+ ...(loadings.length > 0
91
+ ? ['import { withLoading } from "@nifrajs/web/internal/loading-runtime"']
92
+ : []),
59
93
  `import * as __adapter from ${JSON.stringify(clientModule)}`,
60
94
  "const { mountRouter } = __adapter",
61
95
  // The assurance hook is optional: ordinary client entries pay only for the namespace lookup, while
@@ -105,6 +139,12 @@ export function generateClientEntry(manifest, options) {
105
139
  // routeId → the page's optional post-hydration client loader/action hooks. Hooks are populated only
106
140
  // after the route chunk loads, so routes that do not declare them remain ordinary route modules.
107
141
  "const routeHooks = {}",
142
+ // routeId → the chain the server rendered for an `ssr = false` page: the same layouts (and
143
+ // boundary), with the page's `HydrateFallback` - or an empty leaf - where the component goes.
144
+ "const holds = {}",
145
+ // routeId → the ids and `handle` exports `useMatches` reports (layouts, then the page).
146
+ `const layoutIdsOf = ${JSON.stringify(layoutIdsOf)}`,
147
+ "const matchChains = {}",
108
148
  "const loadModule = async (id) => {",
109
149
  " if (chains[id]) return",
110
150
  " const mods = await loaders[id]()",
@@ -126,20 +166,34 @@ export function generateClientEntry(manifest, options) {
126
166
  // `searchSchema` merges with the page's. Client keys come from the page (second-to-last).
127
167
  " searchSchemas[id] = mods.slice(0, mods.length - 1).map((m) => m.searchSchema)",
128
168
  " searchClientKeys[id] = mods[mods.length - 2].searchClientKeys ?? []",
169
+ " matchChains[id] = { ids: [...(layoutIdsOf[id] ?? []), id], handles: mods.slice(0, mods.length - 1).map((m) => m.handle) }",
129
170
  " } else {",
130
171
  " chains[id] = mods.map((m) => m.default)",
131
172
  " metas[id] = mods.map((m) => m.meta)",
132
173
  // The chain is every module (layouts + page); client keys come from the page (the last module).
133
174
  " searchSchemas[id] = mods.map((m) => m.searchSchema)",
134
175
  " searchClientKeys[id] = mods[mods.length - 1].searchClientKeys ?? []",
176
+ " matchChains[id] = { ids: [...(layoutIdsOf[id] ?? []), id], handles: mods.map((m) => m.handle) }",
135
177
  " }",
136
178
  " const page = errorRouteIds.has(id) ? mods[mods.length - 2] : mods[mods.length - 1]",
137
- // Keep interception client-safe: only neutral name/mode metadata crosses into the router. The
138
- // server-side boundary load function (which may close over secrets) is never stored in the client
139
- // hook table or serialized into a browser bundle by this wiring.
179
+ // Only neutral name/mode metadata crosses into the router; a boundary's loader lives in the route's
180
+ // backend half, which no browser bundle contains.
140
181
  " const boundaryMods = errorRouteIds.has(id) ? mods.slice(0, -1) : mods",
141
- " const boundaries = boundaryMods.flatMap((m) => (m.boundaries ?? []).map((b) => ({ name: b.name, mode: b.mode, hasLoad: b.load !== undefined, ...(b.errorId === undefined ? {} : { errorId: b.errorId }) })))",
182
+ " const boundaries = boundaryMods.flatMap((m) => (m.boundaries ?? []).map((b) => ({ name: b.name, mode: b.mode, ...(b.errorId === undefined ? {} : { errorId: b.errorId }) })))",
142
183
  " routeHooks[id] = { clientLoader: page.clientLoader, clientAction: page.clientAction, boundaries }",
184
+ " if (page.ssr === false) holds[id] = [...chains[id].slice(0, -1), page.HydrateFallback ?? (() => null)]",
185
+ "}",
186
+ // The server hands page state over as one inert JSON script; lift it onto the globals the
187
+ // router, the deferred mapper and the adapters read, before any of them runs. Only the LAST
188
+ // matching <script> counts, and only known keys: page HTML (sanitized user content) can carry an
189
+ // element with the same id, and arbitrary keys copied onto `window` include `location`.
190
+ `const handovers = document.querySelectorAll(${JSON.stringify(`script[type="application/json"][id="${HANDOVER_ID}"]`)})`,
191
+ "const handover = handovers[handovers.length - 1]",
192
+ "if (handover !== undefined) {",
193
+ ' const state = JSON.parse(handover.textContent || "{}")',
194
+ ` for (const key of ${JSON.stringify(HANDOVER_GLOBALS)}) {`,
195
+ " if (Object.prototype.hasOwnProperty.call(state, key)) Reflect.set(window, key, state[key])",
196
+ " }",
143
197
  "}",
144
198
  "const patterns = [",
145
199
  ...patternRows,
@@ -147,12 +201,19 @@ export function generateClientEntry(manifest, options) {
147
201
  // Derive the initial route from the URL (correct on refresh/deep-link); fall back to the
148
202
  // server-injected route id for non-pattern routes (e.g. _404, which matches nothing).
149
203
  "const matched = createMatcher(patterns)(location.pathname)",
204
+ `const statusRoutes = ${JSON.stringify(statusRoutes)}`,
205
+ `const serverRoute = window.${ROUTE_GLOBAL} ?? ""`,
206
+ // A terminal status page the server rendered (`_404`, `_410`, ...) outranks the URL match: a
207
+ // loader that throws notFound() on `/learn/bad-slug` leaves a URL that still matches
208
+ // `learn/[slug]`, and hydrating that route with null data over the 404 markup is wrong. Membership
209
+ // in the status table, not a `_` prefix: `routes/_admin/index.tsx` is an ordinary routable id.
210
+ "const terminal = Object.values(statusRoutes).includes(serverRoute)",
150
211
  // Map any `{__nifra_deferred: id}` placeholder in the SSR data to the registry's promise, so the
151
212
  // component receives real promises to `<Await>` (a no-op when a page has no deferred data).
152
213
  MAP_DEFERRED_SOURCE,
153
214
  "const initial = {",
154
- ` routeId: matched ? matched.routeId : (window.${ROUTE_GLOBAL} ?? ""),`,
155
- " params: matched ? matched.params : {},",
215
+ " routeId: matched && !terminal ? matched.routeId : serverRoute,",
216
+ " params: matched && !terminal ? matched.params : {},",
156
217
  // pathname + search (NOT just pathname): the SSR render threads `pathname+search` into
157
218
  // `useLocation`/`useSearchParams`, so the hydrating initial state must carry the query too or a
158
219
  // page reading the search string would hydrate-mismatch. The #hash is client-only (never SSR'd).
@@ -167,8 +228,12 @@ export function generateClientEntry(manifest, options) {
167
228
  ` actionData: mapDeferred(window.${ACTION_GLOBAL}),`,
168
229
  " pending: false,",
169
230
  "}",
170
- `const statusRoutes = ${JSON.stringify(statusRoutes)}`,
171
- "const router = createClientRouter({ patterns, initial, loadModule, statusRoutes, searchClientKeys, routeHooks })",
231
+ ...loadingLines,
232
+ // With `_loading` pages the store is wrapped: a slow navigation then names a loading chain (the
233
+ // shared layouts + the `_loading` component) for the mounted view to render in the meantime.
234
+ loadings.length > 0
235
+ ? "const router = withLoading(createClientRouter({ patterns, initial, loadModule, statusRoutes, searchClientKeys, routeHooks }), { routes: loadingRoutes, modules: loadingModules, chains, searchSchemas, matchChains })"
236
+ : "const router = createClientRouter({ patterns, initial, loadModule, statusRoutes, searchClientKeys, routeHooks })",
172
237
  "installHistory(router)",
173
238
  "installForms(router)",
174
239
  // The container is found in the DOM, not baked in. `rootId` is a per-render option and this entry
@@ -183,10 +248,45 @@ export function generateClientEntry(manifest, options) {
183
248
  `renderPage opened the app in - the one marked \`${ROOT_ATTRIBUTE}\` when a custom \`rootId\` ` +
184
249
  "is set, `#root` otherwise - and this document has neither. If you emit the document yourself, " +
185
250
  'keep `<div id="root">` around the SSR markup.')})`,
186
- // Load the initial route's chunk, then hydrate the Router (chain is cached). The initial head
187
- // is server-rendered; subsequent navigations update it from the matched route's meta + data.
188
- "loadModule(initial.routeId).then(() => {",
189
- " mountRouter({ router, routes: chains, searchSchemas, container: root })",
251
+ // Wait for framework-owned deferred CSS before loading/mounting the initial route. The coordinator
252
+ // is a no-op for the default blocking links and always has a bounded fail-open terminal state.
253
+ "waitForStyles().then(() => loadModule(initial.routeId)).then(() => {",
254
+ // An `ssr = false` page: the server rendered its held chain, so the view hydrates THAT - under a
255
+ // chain id no route file can produce - and is handed the real route a task later, once every
256
+ // adapter has hydrated and subscribed. Only the first view is held; a client navigation to such a
257
+ // page has no server markup to match and renders the component directly.
258
+ " let view = router",
259
+ " const hold = holds[initial.routeId]",
260
+ " if (hold) {",
261
+ ' const id = "\\0ssr"',
262
+ " chains[id] = hold",
263
+ " searchSchemas[id] = searchSchemas[initial.routeId]",
264
+ " matchChains[id] = matchChains[initial.routeId]",
265
+ " const listeners = new Set()",
266
+ " let held = true",
267
+ " let base",
268
+ " let derived",
269
+ " view = {",
270
+ " ...router,",
271
+ " snapshot() {",
272
+ " const s = router.snapshot()",
273
+ " if (!held) return s",
274
+ // One derived state per router state: the view's store must hand back a stable reference.
275
+ " if (base !== s) derived = { ...(base = s), routeId: id }",
276
+ " return derived",
277
+ " },",
278
+ " subscribe(listener) {",
279
+ " listeners.add(listener)",
280
+ " const off = router.subscribe(listener)",
281
+ " return () => (listeners.delete(listener), off())",
282
+ " },",
283
+ " }",
284
+ " setTimeout(() => {",
285
+ " held = false",
286
+ " for (const listener of [...listeners]) listener()",
287
+ " }, 0)",
288
+ " }",
289
+ " mountRouter({ router: view, routes: chains, searchSchemas, matchChains, container: root })",
190
290
  // Run the optional client loader only after the adapter has mounted the SSR tree. The initial
191
291
  // server data is already in `window.__NIFRA_DATA__`, so `serverLoader()` reuses it and cannot
192
292
  // duplicate the first request.
@@ -200,11 +300,12 @@ export function generateClientEntry(manifest, options) {
200
300
  " if (!s.pending) {",
201
301
  // `origin: location.origin` matches the SSR `originOf(req)` (both are `URL.origin` for the same
202
302
  // page URL), so a soft-nav re-resolves the SAME absolute canonical/og:url - no head drift.
203
- " const args = { data: s.data, params: s.params, origin: location.origin }",
303
+ " const nonce = currentDocumentNonce()",
304
+ " const args = { data: s.data, params: s.params, origin: location.origin, ...(nonce === undefined ? {} : { nonce }) }",
204
305
  " applyHead(mergeHeads((metas[s.routeId] ?? [undefined]).map((m) => resolveMeta(m, args))))",
205
306
  " }",
206
307
  " })",
207
- "})",
308
+ "}).catch((error) => console.error('[nifra/web] hydration failed:', error))",
208
309
  ].join("\n")}\n`;
209
310
  }
210
311
  /**
@@ -241,7 +342,8 @@ export function generateRouteSearchTypes(manifest, options) {
241
342
  * Codegen: emit a **server manifest** module (as source) for disk-less edge runtimes (Cloudflare
242
343
  * Workers, …) - and, with a `target`, any portable server bundle. `discoverRoutes` scans `node:fs`
243
344
  * and dynamic-imports each route by a *runtime* path - neither exists on workerd. This instead emits
244
- * **statically-analyzable** imports of every route/layout/`_error`/terminal status page (so the bundler includes them) and
345
+ * **statically-analyzable** imports of every route/layout/`_error`/terminal status page and each one's
346
+ * backend half (so the bundler includes them) and
245
347
  * rebuilds the manifest with `buildManifest` - the SAME pure logic `discoverRoutes` feeds, so patterns
246
348
  * + layout chains are identical. Eager (`import * as`) by default; `lazy` emits `() => import(...)` so
247
349
  * a code-splitting bundler chunks per route. The emitted module exports `manifest` (consumed by
@@ -259,17 +361,33 @@ const SOURCE_EXTENSION = /\.(?:[mc]?tsx?|[mc]?jsx?)$/;
259
361
  function moduleSpecifier(resolved) {
260
362
  return resolved.replace(SOURCE_EXTENSION, "");
261
363
  }
364
+ // A route's namespace is not assignable to `RouteModule` under a strict `tsc` (a backend half has no
365
+ // `default`, a typed `meta` narrows its data), so the table holds plain objects and the cast happens at
366
+ // `buildManifest`'s boundary - the same cast `discoverRoutes` applies to its dynamic import.
367
+ const LAZY_IMPORTER = "(file) => loaders[file] as () => Promise<RouteModule>";
368
+ const EAGER_IMPORTER = "(file) => () => Promise.resolve(modules[file] as RouteModule)";
262
369
  export function generateServerManifest(manifest, options) {
263
- const { resolve, clientEntry, styles, routeStyles, lazy = false } = options;
264
- // Every unique source file in the manifest (routes + layouts + error/status pages), sorted for stable output.
370
+ const { resolve, clientEntry, styles, routeStyles, cssLoading: requestedCssLoading, lazy = false, } = options;
371
+ // A missing entry would bake `clientEntry = undefined` and the build would still succeed, leaving
372
+ // every hydrating page to fail at request time. `""` stays valid: an app with no client script.
373
+ if (typeof clientEntry !== "string") {
374
+ throw new TypeError(`[nifra/web] the server build needs clientEntry (the built client entry URL, buildClient's manifest.entry), got ${clientEntry === null ? "null" : typeof clientEntry}; check the option is spelled clientEntry, or pass "" for an app with no client script`);
375
+ }
376
+ const cssLoading = normalizeCssLoading(requestedCssLoading ?? DEFAULT_CSS_LOADING);
377
+ // Every unique source file in the manifest, both halves of each, sorted for stable output. This is the
378
+ // one generated module that imports frontend and backend halves together: it is the server's
379
+ // composition, and `buildManifest` pairs the halves again from these keys.
380
+ const sources = [
381
+ ...manifest.routes,
382
+ ...Object.values(manifest.layouts),
383
+ ...Object.values(manifest.errors ?? {}),
384
+ ...(manifest.notFound ? [manifest.notFound] : []),
385
+ ...Object.values(manifest.notFounds ?? {}),
386
+ ...Object.values(manifest.statusPages ?? {}),
387
+ ...Object.values(manifest.middlewares ?? {}),
388
+ ];
265
389
  const files = [
266
- ...new Set([
267
- ...manifest.routes.map((r) => r.file),
268
- ...Object.values(manifest.layouts).map((l) => l.file),
269
- ...Object.values(manifest.errors ?? {}).map((e) => e.file),
270
- ...(manifest.notFound ? [manifest.notFound.file] : []),
271
- ...Object.values(manifest.statusPages ?? {}).map((page) => page.file),
272
- ]),
390
+ ...new Set(sources.flatMap((entry) => entry.backend === undefined ? [entry.file] : [entry.file, entry.backend])),
273
391
  ].sort();
274
392
  const header = [
275
393
  "// GENERATED by @nifrajs/web generateServerManifest - route manifest for the disk-less edge",
@@ -282,6 +400,7 @@ export function generateServerManifest(manifest, options) {
282
400
  // Always emitted (default empty) so consumers can `import { styles, routeStyles }` unconditionally.
283
401
  const stylesLine = `export const styles = ${JSON.stringify(styles ?? [])}`;
284
402
  const routeStylesLine = `export const routeStyles = ${JSON.stringify(routeStyles ?? {})}`;
403
+ const cssLoadingLine = `export const cssLoading = ${JSON.stringify(cssLoading)}`;
285
404
  if (lazy) {
286
405
  // Lazy: `() => import("./routes/x")` per route (static specifier → one chunk per route under a
287
406
  // code-splitting bundler, loaded on first request). The map keys are the route-relative paths
@@ -289,13 +408,14 @@ export function generateServerManifest(manifest, options) {
289
408
  const loaders = files.map((file) => ` ${jsStringLiteral(file)}: () => import(${jsStringLiteral(moduleSpecifier(resolve(file)))}),`);
290
409
  return `${[
291
410
  ...header,
292
- "const loaders: Record<string, () => Promise<RouteModule>> = {",
411
+ "const loaders: Record<string, () => Promise<object>> = {",
293
412
  ...loaders,
294
413
  "}",
295
414
  clientEntryLine,
296
415
  stylesLine,
297
416
  routeStylesLine,
298
- "export const manifest = buildManifest(Object.keys(loaders), (file) => () => loaders[file]())",
417
+ cssLoadingLine,
418
+ `export const manifest = buildManifest(Object.keys(loaders), ${LAZY_IMPORTER})`,
299
419
  ].join("\n")}\n`;
300
420
  }
301
421
  // Eager: `import * as` per route (all bundled into the entry, parsed at boot). Index-based
@@ -305,13 +425,14 @@ export function generateServerManifest(manifest, options) {
305
425
  return `${[
306
426
  ...header,
307
427
  ...imports,
308
- "const modules: Record<string, RouteModule> = {",
428
+ "const modules: Record<string, object> = {",
309
429
  ...entries,
310
430
  "}",
311
431
  clientEntryLine,
312
432
  stylesLine,
313
433
  routeStylesLine,
314
- "export const manifest = buildManifest(Object.keys(modules), (file) => () => Promise.resolve(modules[file]))",
434
+ cssLoadingLine,
435
+ `export const manifest = buildManifest(Object.keys(modules), ${EAGER_IMPORTER})`,
315
436
  ].join("\n")}\n`;
316
437
  }
317
438
  //# sourceMappingURL=codegen.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"codegen.js","sourceRoot":"","sources":["../../src/internal/codegen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AAEpD,OAAO,EACL,aAAa,EACb,eAAe,EACf,WAAW,EACX,kBAAkB,EAClB,cAAc,EACd,YAAY,GACb,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAiBhD;;;;;;;;;GASG;AACH,MAAM,UAAU,mBAAmB,CACjC,QAAkB,EAClB,OAAmC;IAEnC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,OAAO,CAAA;IAEzC,MAAM,UAAU,GAAa,EAAE,CAAA;IAC/B,MAAM,WAAW,GAAa,EAAE,CAAA;IAChC,MAAM,YAAY,GAA2B,EAAE,CAAA;IAC/C,kGAAkG;IAClG,iGAAiG;IACjG,MAAM,aAAa,GAAa,EAAE,CAAA;IAClC,iGAAiG;IACjG,MAAM,UAAU,GAAG,CAAC,KAAwB,EAAU,EAAE;QACtD,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACrF,OAAO,sBAAsB,OAAO,IAAI,CAAA;IAC1C,CAAC,CAAA;IACD,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QACpC,sFAAsF;QACtF,MAAM,KAAK,GAAG;YACZ,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAiB,CAAC,IAAI,CAAC;YAC1E,KAAK,CAAC,IAAI;SACX,CAAA;QACD,mGAAmG;QACnG,MAAM,cAAc,GAAG,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QAC7C,MAAM,SAAS,GACb,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,cAAc,CAAC,EAAE,IAAI,CAAA;QACpF,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YACrB,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QAC9B,CAAC;QACD,UAAU,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACvE,WAAW,CAAC,IAAI,CACd,gBAAgB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,cAAc,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CACzF,CAAA;IACH,CAAC;IACD,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACpC,UAAU,CAAC,IAAI,CAAC,aAAa,UAAU,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA;QACrE,YAAY,CAAC,GAAG,CAAC,GAAG,MAAM,CAAA;IAC5B,CAAC;IACD,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,IAAI,EAAE,CAAC,EAAE,CAAC;QACzE,MAAM,OAAO,GAAG,IAAI,MAAM,EAAE,CAAA;QAC5B,UAAU,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,UAAU,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA;QAC7E,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,CAAA;IACxC,CAAC;IAED,OAAO,GAAG;QACR,8FAA8F;QAC9F,wFAAwF;QACxF,kGAAkG;QAClG,+FAA+F;QAC/F,mGAAmG;QACnG,4FAA4F;QAC5F,8BAA8B,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE;QAC5D,mCAAmC;QACnC,mGAAmG;QACnG,oGAAoG;QACpG,2FAA2F;QAC3F,0DAA0D;QAC1D,iFAAiF;QACjF,8DAA8D;QAC9D,mDAAmD;QACnD,oHAAoH;QACpH,yIAAyI;QACzI,GAAG;QACH,+FAA+F;QAC/F,0EAA0E;QAC1E,kGAAkG;QAClG,8FAA8F;QAC9F,0DAA0D,IAAI,CAAC,SAAS,CACtE,4BAA4B,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,oCAAoC;YAC1F,6FAA6F;YAC7F,uFAAuF;YACvF,uFAAuF,CAC1F,GAAG;QACJ,+CAA+C;QAC/C,8FAA8F;QAC9F,EAAE;QACF,mGAAmG;QACnG,iGAAiG;QACjG,oGAAoG;QACpG,iGAAiG;QACjG,oGAAoG;QACpG,kGAAkG;QAClG,mDAAmD;QACnD,uHAAuH;QACvH,iCAAiC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,GAAG;QACjE,2FAA2F;QAC3F,2FAA2F;QAC3F,kGAAkG;QAClG,mBAAmB;QACnB,GAAG,UAAU;QACb,GAAG;QACH,mBAAmB;QACnB,kBAAkB;QAClB,0FAA0F;QAC1F,mGAAmG;QACnG,0BAA0B;QAC1B,oGAAoG;QACpG,qGAAqG;QACrG,6BAA6B;QAC7B,oGAAoG;QACpG,iGAAiG;QACjG,uBAAuB;QACvB,oCAAoC;QACpC,0BAA0B;QAC1B,oCAAoC;QACpC,iGAAiG;QACjG,mGAAmG;QACnG,mGAAmG;QACnG,sCAAsC;QACtC,8FAA8F;QAC9F,gGAAgG;QAChG,iGAAiG;QACjG,oFAAoF;QACpF,iDAAiD;QACjD,oDAAoD;QACpD,gDAAgD;QAChD,0EAA0E;QAC1E,8DAA8D;QAC9D,mEAAmE;QACnE,sGAAsG;QACtG,0FAA0F;QAC1F,mFAAmF;QACnF,yEAAyE;QACzE,YAAY;QACZ,6CAA6C;QAC7C,yCAAyC;QACzC,gGAAgG;QAChG,yDAAyD;QACzD,yEAAyE;QACzE,KAAK;QACL,sFAAsF;QACtF,8FAA8F;QAC9F,kGAAkG;QAClG,iEAAiE;QACjE,yEAAyE;QACzE,gNAAgN;QAChN,qGAAqG;QACrG,GAAG;QACH,oBAAoB;QACpB,GAAG,WAAW;QACd,GAAG;QACH,yFAAyF;QACzF,sFAAsF;QACtF,4DAA4D;QAC5D,iGAAiG;QACjG,4FAA4F;QAC5F,mBAAmB;QACnB,mBAAmB;QACnB,kDAAkD,YAAY,UAAU;QACxE,0CAA0C;QAC1C,uFAAuF;QACvF,gGAAgG;QAChG,iGAAiG;QACjG,8CAA8C;QAC9C,8BAA8B,WAAW,IAAI;QAC7C,6FAA6F;QAC7F,wBAAwB,kBAAkB,cAAc,kBAAkB,oBAAoB;QAC9F,oCAAoC,eAAe,IAAI;QACvD,0FAA0F;QAC1F,+FAA+F;QAC/F,wFAAwF;QACxF,oCAAoC,aAAa,IAAI;QACrD,mBAAmB;QACnB,GAAG;QACH,wBAAwB,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE;QACtD,kHAAkH;QAClH,wBAAwB;QACxB,sBAAsB;QACtB,kGAAkG;QAClG,oGAAoG;QACpG,8FAA8F;QAC9F,gGAAgG;QAChG,yEAAyE;QACzE,mDAAmD,cAAc,wCAAwC;QACzG,+FAA+F;QAC/F,8FAA8F;QAC9F,8BAA8B,IAAI,CAAC,SAAS,CAC1C,4FAA4F;YAC1F,mDAAmD,cAAc,8BAA8B;YAC/F,gGAAgG;YAChG,+CAA+C,CAClD,GAAG;QACJ,8FAA8F;QAC9F,6FAA6F;QAC7F,0CAA0C;QAC1C,2EAA2E;QAC3E,8FAA8F;QAC9F,8FAA8F;QAC9F,+BAA+B;QAC/B,+FAA+F;QAC/F,kGAAkG;QAClG,wGAAwG;QACxG,yCAAyC;QACzC,4BAA4B;QAC5B,iCAAiC;QACjC,4FAA4F;QAC5F,uBAAuB;QACvB,gGAAgG;QAChG,2FAA2F;QAC3F,gFAAgF;QAChF,iGAAiG;QACjG,OAAO;QACP,MAAM;QACN,IAAI;KACL,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAA;AAClB,CAAC;AAYD;;;;;;;;GAQG;AACH,MAAM,UAAU,wBAAwB,CACtC,QAAkB,EAClB,OAAwC;IAExC,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc,EAAE,GAAG,OAAO,CAAA;IACpD,wGAAwG;IACxG,kGAAkG;IAClG,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM;SAC5B,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;SAC9C,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAU,CAAC;SAC7D,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACtC,GAAG,CACF,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,CAClB,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,4BAA4B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CACrF,CAAA;IACH,OAAO,GAAG;QACR,qGAAqG;QACrG,sGAAsG;QACtG,8CAA8C;QAC9C,kBAAkB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI;QAC5C,2BAA2B;QAC3B,GAAG,OAAO;QACV,KAAK;QACL,GAAG;QACH,WAAW;KACZ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAA;AAClB,CAAC;AAuBD;;;;;;;;;;GAUG;AACH,oGAAoG;AACpG,yGAAyG;AACzG,uGAAuG;AACvG,sGAAsG;AACtG,oGAAoG;AACpG,wGAAwG;AACxG,gDAAgD;AAChD,MAAM,gBAAgB,GAAG,4BAA4B,CAAA;AACrD,SAAS,eAAe,CAAC,QAAgB;IACvC,OAAO,QAAQ,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAA;AAC/C,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,QAAkB,EAClB,OAAsC;IAEtC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,GAAG,KAAK,EAAE,GAAG,OAAO,CAAA;IAC3E,8GAA8G;IAC9G,MAAM,KAAK,GAAG;QACZ,GAAG,IAAI,GAAG,CAAC;YACT,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YACrC,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YACrD,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAC1D,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACtD,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;SACtE,CAAC;KACH,CAAC,IAAI,EAAE,CAAA;IACR,MAAM,MAAM,GAAG;QACb,6FAA6F;QAC7F,gGAAgG;QAChG,yFAAyF;QACzF,gEAAgE;KACjE,CAAA;IACD,MAAM,eAAe,GAAG,8BAA8B,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAA;IACnF,qGAAqG;IACrG,oGAAoG;IACpG,MAAM,UAAU,GAAG,yBAAyB,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAA;IAC1E,MAAM,eAAe,GAAG,8BAA8B,IAAI,CAAC,SAAS,CAAC,WAAW,IAAI,EAAE,CAAC,EAAE,CAAA;IACzF,IAAI,IAAI,EAAE,CAAC;QACT,+FAA+F;QAC/F,8FAA8F;QAC9F,6EAA6E;QAC7E,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CACvB,CAAC,IAAI,EAAE,EAAE,CACP,KAAK,eAAe,CAAC,IAAI,CAAC,kBAAkB,eAAe,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAClG,CAAA;QACD,OAAO,GAAG;YACR,GAAG,MAAM;YACT,+DAA+D;YAC/D,GAAG,OAAO;YACV,GAAG;YACH,eAAe;YACf,UAAU;YACV,eAAe;YACf,8FAA8F;SAC/F,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAA;IAClB,CAAC;IACD,2FAA2F;IAC3F,0DAA0D;IAC1D,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CACvB,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CACxF,CAAA;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IAC3E,OAAO,GAAG;QACR,GAAG,MAAM;QACT,GAAG,OAAO;QACV,gDAAgD;QAChD,GAAG,OAAO;QACV,GAAG;QACH,eAAe;QACf,UAAU;QACV,eAAe;QACf,6GAA6G;KAC9G,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAA;AAClB,CAAC"}
1
+ {"version":3,"file":"codegen.js","sourceRoot":"","sources":["../../src/internal/codegen.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Vite dev adds its own tags to each SSR'd page: the HMR client, a framework's refresh preamble (an
3
+ * inline script), and at runtime a `<style>` per imported stylesheet. A page whose CSP admits scripts
4
+ * by nonce or hash refuses all of them, so the app would not boot in dev. Dev gives every such tag one
5
+ * nonce - the page's own, or a fresh one for a hash-only page - and names it in each directive that
6
+ * governs them.
7
+ */
8
+ /**
9
+ * Let a dev page's CSP admit what Vite injected. Rewrites the policy headers in `headers` and returns
10
+ * the page with the nonce on its script and style tags, plus the `csp-nonce` meta Vite's client reads
11
+ * to nonce the styles it adds at runtime. A page with no CSP is returned as it is.
12
+ */
13
+ export declare function admitViteTags(html: string, headers: Headers, generate?: () => string): string;
14
+ /**
15
+ * Admit nifra's own inline dev script, by `hash`, and its POSTs to `connect`, in each policy header.
16
+ * Without a `hash` the caller nonces the script itself. Returns false when a policy forbids scripts
17
+ * outright (`'none'`): such a page runs no code, so there is nothing to capture and the script stays
18
+ * out. A directive that already admits every inline script is left alone, because adding a hash would
19
+ * switch its `'unsafe-inline'` off. `module` is the one script the inline one may load; it is admitted
20
+ * by its exact URL, except under `'strict-dynamic'`, which ignores URLs and trusts what a trusted
21
+ * script loads anyway.
22
+ */
23
+ export declare function admitInlineScript(headers: Headers, hash: string | undefined, connect: URL, module?: URL): boolean;
24
+ //# sourceMappingURL=dev-csp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-csp.d.ts","sourceRoot":"","sources":["../../src/internal/dev-csp.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA8DH;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,OAAO,EAChB,QAAQ,GAAE,MAAM,MAAsD,GACrE,MAAM,CAkBR;AAmBD;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,OAAO,EAAE,GAAG,EACZ,MAAM,CAAC,EAAE,GAAG,GACX,OAAO,CA+CT"}
@@ -0,0 +1,160 @@
1
+ /**
2
+ * Vite dev adds its own tags to each SSR'd page: the HMR client, a framework's refresh preamble (an
3
+ * inline script), and at runtime a `<style>` per imported stylesheet. A page whose CSP admits scripts
4
+ * by nonce or hash refuses all of them, so the app would not boot in dev. Dev gives every such tag one
5
+ * nonce - the page's own, or a fresh one for a hash-only page - and names it in each directive that
6
+ * governs them.
7
+ */
8
+ const POLICY_HEADERS = ["content-security-policy", "content-security-policy-report-only"];
9
+ /** Directives that govern each element kind, most specific first: the first present one applies. */
10
+ const GOVERNING = [
11
+ ["script-src-elem", "script-src", "default-src"],
12
+ ["style-src-elem", "style-src", "default-src"],
13
+ ];
14
+ const NONCE_SOURCE = /'nonce-([^']+)'/;
15
+ /** True when a directive admits every inline element: `'unsafe-inline'`, not voided by a nonce or hash. */
16
+ const allowsInline = (sources) => sources.includes("'unsafe-inline'") &&
17
+ !sources.some((source) => /^'(?:nonce|sha256|sha384|sha512)-/.test(source));
18
+ /** One header value (comma-separated policies), with `'nonce-<nonce>'` added where it is needed. */
19
+ function admitNonce(value, nonce) {
20
+ const token = `'nonce-${nonce}'`;
21
+ return value
22
+ .split(",")
23
+ .map((policy) => {
24
+ const directives = policy
25
+ .split(";")
26
+ .map((directive) => directive.trim())
27
+ .filter((directive) => directive !== "")
28
+ .map((directive) => directive.split(/\s+/));
29
+ for (const names of GOVERNING) {
30
+ const governing = names
31
+ .map((name) => directives.find(([directive]) => directive?.toLowerCase() === name))
32
+ .find((directive) => directive !== undefined);
33
+ if (governing === undefined)
34
+ continue;
35
+ const sources = governing.slice(1);
36
+ if (sources.includes(token) || sources.includes("'none'") || allowsInline(sources))
37
+ continue;
38
+ governing.push(token);
39
+ }
40
+ return directives.map((directive) => directive.join(" ")).join("; ");
41
+ })
42
+ .join(", ");
43
+ }
44
+ const RAW_TEXT_START = /<(script|style)\b([^>]*)>/gi;
45
+ /** `html` with `nonce` on each `<script>` / `<style>` that has none; their bodies are left as written. */
46
+ function nonceTags(html, nonce) {
47
+ let out = "";
48
+ let at = 0;
49
+ const lower = html.toLowerCase();
50
+ RAW_TEXT_START.lastIndex = 0;
51
+ for (let match = RAW_TEXT_START.exec(html); match !== null; match = RAW_TEXT_START.exec(html)) {
52
+ const [tag, name = "", attrs = ""] = match;
53
+ out += html.slice(at, match.index);
54
+ out += /\snonce\s*=/i.test(attrs) ? tag : `<${name} nonce="${nonce}"${attrs}>`;
55
+ const close = lower.indexOf(`</${name.toLowerCase()}`, RAW_TEXT_START.lastIndex);
56
+ at = close === -1 ? html.length : close;
57
+ out += html.slice(RAW_TEXT_START.lastIndex, at);
58
+ RAW_TEXT_START.lastIndex = at;
59
+ }
60
+ return out + html.slice(at);
61
+ }
62
+ /**
63
+ * Let a dev page's CSP admit what Vite injected. Rewrites the policy headers in `headers` and returns
64
+ * the page with the nonce on its script and style tags, plus the `csp-nonce` meta Vite's client reads
65
+ * to nonce the styles it adds at runtime. A page with no CSP is returned as it is.
66
+ */
67
+ export function admitViteTags(html, headers, generate = () => crypto.randomUUID().replaceAll("-", "")) {
68
+ const policies = POLICY_HEADERS.map((name) => [name, headers.get(name)]);
69
+ if (policies.every(([, value]) => value === null))
70
+ return html;
71
+ const nonce = policies.map(([, value]) => NONCE_SOURCE.exec(value ?? "")?.[1]).find((n) => n !== undefined) ??
72
+ generate();
73
+ for (const [name, value] of policies) {
74
+ if (value !== null)
75
+ headers.set(name, admitNonce(value, nonce));
76
+ }
77
+ const tagged = nonceTags(html, nonce);
78
+ if (tagged.includes(`property="csp-nonce"`))
79
+ return tagged;
80
+ const meta = `<meta property="csp-nonce" nonce="${nonce}">`;
81
+ const head = /<head\b[^>]*>/i.exec(tagged);
82
+ return head === null
83
+ ? meta + tagged
84
+ : tagged.slice(0, head.index + head[0].length) +
85
+ meta +
86
+ tagged.slice(head.index + head[0].length);
87
+ }
88
+ const SCRIPT_DIRECTIVES = GOVERNING[0];
89
+ const CONNECT_DIRECTIVES = ["connect-src", "default-src"];
90
+ /** Whether `sources` already let the page reach `url` (a same-origin absolute URL). */
91
+ const reaches = (sources, url) => sources.some((source) => {
92
+ const lower = source.toLowerCase();
93
+ return (lower === "'self'" ||
94
+ lower === "*" ||
95
+ lower === `${url.protocol}` ||
96
+ lower === url.origin ||
97
+ lower === `${url.origin}/` ||
98
+ lower === url.href);
99
+ });
100
+ /**
101
+ * Admit nifra's own inline dev script, by `hash`, and its POSTs to `connect`, in each policy header.
102
+ * Without a `hash` the caller nonces the script itself. Returns false when a policy forbids scripts
103
+ * outright (`'none'`): such a page runs no code, so there is nothing to capture and the script stays
104
+ * out. A directive that already admits every inline script is left alone, because adding a hash would
105
+ * switch its `'unsafe-inline'` off. `module` is the one script the inline one may load; it is admitted
106
+ * by its exact URL, except under `'strict-dynamic'`, which ignores URLs and trusts what a trusted
107
+ * script loads anyway.
108
+ */
109
+ export function admitInlineScript(headers, hash, connect, module) {
110
+ const updates = [];
111
+ let allowed = true;
112
+ for (const name of POLICY_HEADERS) {
113
+ const value = headers.get(name);
114
+ if (value === null)
115
+ continue;
116
+ const next = value
117
+ .split(",")
118
+ .map((policy) => {
119
+ const directives = policy
120
+ .split(";")
121
+ .map((directive) => directive.trim())
122
+ .filter((directive) => directive !== "")
123
+ .map((directive) => directive.split(/\s+/));
124
+ const governing = (names) => names
125
+ .map((n) => directives.find(([directive]) => directive?.toLowerCase() === n))
126
+ .find((directive) => directive !== undefined);
127
+ const script = governing(SCRIPT_DIRECTIVES);
128
+ if (script !== undefined) {
129
+ const sources = script.slice(1);
130
+ if (sources.includes("'none'"))
131
+ allowed = false;
132
+ else {
133
+ if (hash !== undefined && !sources.includes(hash) && !allowsInline(sources))
134
+ script.push(hash);
135
+ if (module !== undefined &&
136
+ !sources.includes("'strict-dynamic'") &&
137
+ !reaches(sources, module))
138
+ script.push(module.href);
139
+ }
140
+ }
141
+ const connectDirective = governing(CONNECT_DIRECTIVES);
142
+ if (connectDirective !== undefined && !reaches(connectDirective.slice(1), connect)) {
143
+ const none = connectDirective.indexOf("'none'");
144
+ if (none === -1)
145
+ connectDirective.push(connect.href);
146
+ else
147
+ connectDirective.splice(none, 1, connect.href);
148
+ }
149
+ return directives.map((directive) => directive.join(" ")).join("; ");
150
+ })
151
+ .join(", ");
152
+ updates.push([name, next]);
153
+ }
154
+ if (!allowed)
155
+ return false;
156
+ for (const [name, value] of updates)
157
+ headers.set(name, value);
158
+ return true;
159
+ }
160
+ //# sourceMappingURL=dev-csp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-csp.js","sourceRoot":"","sources":["../../src/internal/dev-csp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Specifiers no plugin may match on Bun's dev-server bundler.
3
+ *
4
+ * When a `[serve.static]` plugin's `onResolve` FILTER matches an import, Bun sends it down its plugin
5
+ * path, and a handler that declines does not undo that: Bun then resolves the import on a fallback that
6
+ * breaks a nifra dev page in two ways (Bun 1.3.14 through 1.4.3, oven-sh/bun#19951):
7
+ *
8
+ * - an HTML page's `<script src>` keeps its raw specifier in the HMR module table, so the browser throws
9
+ * "Failed to load bundled module" and the page never hydrates;
10
+ * - the fallback skips the dev server's built-in modules, so the React Fast Refresh runtime Bun embeds
11
+ * for an app without `react-refresh` installed fails to resolve, and the dev server does not start.
12
+ *
13
+ * unplugin's Bun adapter registers `onResolve({ filter: /.*\/ })` for every plugin with a `resolveId`
14
+ * hook, so an app plugin can hit both without doing anything unusual. Every plugin nifra hands that
15
+ * bundler registers through {@link reserveDevSpecifiers}.
16
+ */
17
+ import type { PluginBuilder } from "bun";
18
+ /** The generated client entry, written beside the probe page that loads it. Named so that no import
19
+ * an app writes can be the reserved specifier. */
20
+ export declare const DEV_ENTRY_FILE = "nifra-dev-entry.tsx";
21
+ /** `filter`, except that it never matches a reserved specifier. Any other string matches as before. */
22
+ export declare function withoutReservedSpecifiers(filter: RegExp): RegExp;
23
+ /** A view of `build` whose `onResolve` filters never match a reserved specifier. */
24
+ export declare function reserveDevSpecifiers(build: PluginBuilder): PluginBuilder;
25
+ //# sourceMappingURL=dev-reserved.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-reserved.d.ts","sourceRoot":"","sources":["../../src/internal/dev-reserved.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,KAAK,CAAA;AAExC;kDACkD;AAClD,eAAO,MAAM,cAAc,wBAAwB,CAAA;AAOnD,uGAAuG;AACvG,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAQhE;AAED,oFAAoF;AACpF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,aAAa,GAAG,aAAa,CAWxE"}