@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,5 +1,5 @@
1
1
  /**
2
- * `@nifrajs/web/plugins/vite-leak-guard` - nifra's two client-leak guards, for a Vite/Rollup production
2
+ * `@nifrajs/web/plugins/vite-leak-guard` - nifra's client-leak guards, for a Vite/Rollup production
3
3
  * build.
4
4
  *
5
5
  * ## Why this exists
@@ -12,9 +12,9 @@
12
12
  * pipeline arriving WITHOUT them, or with a hastily re-implemented "mostly ported" copy, is the failure the
13
13
  * neutral module-graph seam was built to prevent.
14
14
  *
15
- * So this is not a second implementation. The detection logic (`detectNodeBuiltinsInClient`,
16
- * `detectServerOnlyInClient`) and the failure MESSAGES (`formatNodeBuiltinLeak`, `formatServerOnlyLeak`)
17
- * are the exact same functions the Bun build calls. This plugin only adapts Rollup's bundle shape into the
15
+ * So this is not a second implementation. The zone verification (`verifyClientGraph`,
16
+ * `accountEmittedFiles`), the `node:` and `backend-only` detectors and their failure MESSAGES are the
17
+ * exact same functions the Bun build calls. This plugin only adapts Rollup's bundle shape into the
18
18
  * neutral `ClientModuleGraph` (`fromRollupBundle`) and runs them. A leak reads identically whichever
19
19
  * bundler produced it, and there is one place to change if a guard changes.
20
20
  *
@@ -25,22 +25,42 @@
25
25
  * `fromRollupBundle` needs. Findings fail the build through Rollup's `this.error`, so the message lands in
26
26
  * the build output the same way a Bun-build throw does.
27
27
  *
28
- * Add it to the `plugins` of a Vite production build (the LAST plugin, so it sees the final graph):
28
+ * Add it to the `plugins` of a Vite production build (the LAST plugin, so it sees the final graph),
29
+ * with `viteBareBuiltinExternal()` first so a bare built-in such as `fs/promises` stays named:
29
30
  *
30
31
  * // vite.config.ts (production client build)
31
- * import { viteLeakGuard } from "@nifrajs/web/plugins/vite-leak-guard"
32
- * export default { build: { rollupOptions: { plugins: [viteLeakGuard()] } } }
32
+ * import { viteBareBuiltinExternal, viteLeakGuard } from "@nifrajs/web/plugins/vite-leak-guard"
33
+ * export default {
34
+ * plugins: [viteBareBuiltinExternal(), viteAssetUrlGuard({ appRoot: import.meta.dirname })],
35
+ * build: {
36
+ * rollupOptions: { external: [/^node:/], plugins: [viteLeakGuard({ appRoot: import.meta.dirname })] },
37
+ * },
38
+ * }
33
39
  */
34
- import { detectNodeBuiltinsInClient, detectServerOnlyInClient, formatNodeBuiltinLeak, formatServerOnlyLeak, } from "../build.js";
35
- import { fromRollupBundle } from "../module-graph.js";
40
+ import { existsSync, statSync } from "node:fs";
41
+ import { dirname, isAbsolute, relative, resolve } from "node:path";
42
+ import { detectNodeBuiltinsInClient, detectServerOnlyInClient, formatNodeBuiltinLeak, formatServerOnlyLeak, } from "../build-plan.js";
43
+ import { isBareNodeBuiltin } from "../internal/node-builtins.js";
44
+ import { privateEnvCheck } from "../internal/private-env.js";
45
+ import { emittedScanFiles, formatSecretFindings, graphScanInput, originName, publicScanFiles, scanForSecrets, textOf, } from "../internal/secret-scan.js";
46
+ import { accountEmittedFiles, assetDenial, formatClientGraphVerdict, formatServerGraphVerdict, formatUnaccountedOutput, rollupModuleSource, verifyClientGraph, verifyServerGraph, } from "../internal/zone-graph.js";
47
+ import { fromRollupBundle, } from "../module-graph.js";
48
+ import { createZoneClassifier } from "../zones.js";
49
+ const CSS_FILE = /\.(?:css|scss|sass|less|styl)(?:$|\?)/;
36
50
  /**
37
- * A Vite/Rollup plugin that fails the build when server-only code or a `node:` builtin reaches the client
38
- * bundle - the same two guards, and the same error messages, as nifra's Bun production build.
51
+ * A Vite/Rollup plugin that fails the build when anything the zones keep on the server reaches the client
52
+ * bundle, with the same checks and messages as nifra's Bun build: every module classified, the graph
53
+ * evidence complete, every emitted file traced back to it, and the `node:` and `backend-only` guards.
54
+ * It runs in `generateBundle`, before Rollup writes a byte.
39
55
  */
40
- export function viteLeakGuard() {
56
+ export function viteLeakGuard(options = {}) {
57
+ const appRoot = resolve(options.appRoot ?? process.cwd());
58
+ const root = resolve(options.root ?? appRoot);
59
+ const outDir = resolve(root, options.outDir ?? "dist");
41
60
  const plugin = {
42
61
  name: "nifra:leak-guard",
43
62
  generateBundle(_options, bundle) {
63
+ const classifier = classifierFor(appRoot, options);
44
64
  // Resolved import edges per module, straight from Rollup's graph. Dynamic imports count too: a
45
65
  // `node:`/server-only module reached only via `import()` still ships to the browser.
46
66
  const importsOf = (id) => {
@@ -49,11 +69,22 @@ export function viteLeakGuard() {
49
69
  return [];
50
70
  return [...(info.importedIds ?? []), ...(info.dynamicallyImportedIds ?? [])];
51
71
  };
52
- const graph = fromRollupBundle(bundle, importsOf);
53
- // Node-builtin guard first, then server-only - the same order as the Bun build, so the first error a
54
- // dev sees is the same across pipelines when a module trips both.
55
- const leak = formatNodeBuiltinLeak(detectNodeBuiltinsInClient(graph)) ??
56
- formatServerOnlyLeak(detectServerOnlyInClient(graph));
72
+ const graph = completeGraph(fromRollupBundle(bundle, importsOf), this, importsOf);
73
+ const sources = { classifier, sourceOf: rollupModuleSource };
74
+ const privateEnv = privateEnvCheck(options.publicEnvPrefix ?? "PUBLIC_");
75
+ const outputs = Object.values(bundle);
76
+ for (const output of outputs) {
77
+ if (output.type !== "asset" && output.fileName !== undefined)
78
+ options.verified?.add(output.fileName);
79
+ }
80
+ const leak = formatClientGraphVerdict(verifyClientGraph(graph, { ...sources, privateEnv })) ??
81
+ formatNodeBuiltinLeak(detectNodeBuiltinsInClient(graph)) ??
82
+ formatServerOnlyLeak(detectServerOnlyInClient(graph)) ??
83
+ formatUnaccountedOutput(accountEmittedFiles(emittedFiles(outputs, graph, root, options.verified), graph, {
84
+ ...sources,
85
+ outDir,
86
+ })) ??
87
+ secretLeak(outputs, graph, classifier, appRoot, options);
57
88
  if (leak === undefined)
58
89
  return;
59
90
  // Record before throwing: the throw is what fails the build for a standalone user of this plugin,
@@ -64,4 +95,334 @@ export function viteLeakGuard() {
64
95
  };
65
96
  return plugin;
66
97
  }
98
+ /** The secret scan over a finished bundle and the `public/` files that ship beside it. */
99
+ function secretLeak(outputs, graph, classifier, appRoot, options) {
100
+ const { sources, originsOf } = graphScanInput(graph, rollupModuleSource, classifier);
101
+ const artifacts = [];
102
+ for (const output of outputs) {
103
+ const name = output.fileName;
104
+ if (name === undefined || name.startsWith(".vite/"))
105
+ continue;
106
+ if (output.type === "chunk") {
107
+ artifacts.push(...emittedScanFiles(name, output.code ?? "", originsOf(name)));
108
+ if (output.map)
109
+ artifacts.push({ name: `${name}.map`, text: JSON.stringify(output.map) });
110
+ continue;
111
+ }
112
+ const text = typeof output.source === "string"
113
+ ? output.source
114
+ : output.source === undefined
115
+ ? undefined
116
+ : textOf(output.source);
117
+ if (text !== undefined)
118
+ artifacts.push({ name, text });
119
+ }
120
+ const publicDir = options.secrets?.publicDir;
121
+ if (publicDir !== undefined && existsSync(publicDir)) {
122
+ artifacts.push(...publicScanFiles(publicDir, originName(appRoot, resolve(publicDir))));
123
+ }
124
+ return formatSecretFindings(scanForSecrets({
125
+ sources,
126
+ artifacts,
127
+ env: options.secrets?.env ?? process.env,
128
+ publicEnvPrefix: options.publicEnvPrefix ?? "PUBLIC_",
129
+ ...(options.secrets?.exemptions ? { exemptions: options.secrets.exemptions } : {}),
130
+ }));
131
+ }
132
+ /**
133
+ * The server build's half of the zone rules, with the same checks and message as nifra's Bun server
134
+ * build: every first-party module zoned, backend code never importing frontend code, shared code
135
+ * importing only shared code. It records the refusal in `leak` for the same reason the client guard
136
+ * does.
137
+ */
138
+ export function viteServerZoneGuard(options = {}) {
139
+ const appRoot = resolve(options.appRoot ?? process.cwd());
140
+ const plugin = {
141
+ name: "nifra:server-zone-guard",
142
+ generateBundle(_options, bundle) {
143
+ const classifier = classifierFor(appRoot, options);
144
+ const importsOf = (id) => {
145
+ const info = this.getModuleInfo(id);
146
+ if (info === null)
147
+ return [];
148
+ return [...(info.importedIds ?? []), ...(info.dynamicallyImportedIds ?? [])];
149
+ };
150
+ const graph = completeGraph(fromRollupBundle(bundle, importsOf), this, importsOf);
151
+ const leak = formatServerGraphVerdict(verifyServerGraph(graph, {
152
+ classifier,
153
+ sourceOf: rollupModuleSource,
154
+ privateEnv: privateEnvCheck(options.publicEnvPrefix ?? "PUBLIC_"),
155
+ }));
156
+ if (leak === undefined)
157
+ return;
158
+ plugin.leak = leak;
159
+ this.error(new Error(leak));
160
+ },
161
+ };
162
+ return plugin;
163
+ }
164
+ /** The zone classifier for the app `options` names. */
165
+ function classifierFor(appRoot, options) {
166
+ return createZoneClassifier({
167
+ appRoot,
168
+ ...(options.routesDir !== undefined ? { routesDir: options.routesDir } : {}),
169
+ ...(options.generatedFiles !== undefined ? { generatedFiles: options.generatedFiles } : {}),
170
+ });
171
+ }
172
+ /**
173
+ * The chunk graph plus every module the build loaded but tree-shook out of every chunk, with external
174
+ * edges marked: an import the bundle left external is evidence the graph has to account for.
175
+ */
176
+ function completeGraph(graph, context, importsOf) {
177
+ const external = (id) => context.getModuleInfo(id)?.isExternal === true;
178
+ const modules = {};
179
+ for (const [id, module] of Object.entries(graph.modules)) {
180
+ modules[id] = {
181
+ imports: module.imports.map((im) => im.path !== undefined && !im.path.startsWith("node:") && external(im.path)
182
+ ? { ...im, external: true }
183
+ : im),
184
+ };
185
+ }
186
+ for (const id of context.getModuleIds?.() ?? []) {
187
+ if (modules[id] !== undefined || external(id))
188
+ continue;
189
+ modules[id] = {
190
+ imports: importsOf(id).map((path) => (external(path) ? { path, external: true } : { path })),
191
+ };
192
+ }
193
+ return { modules, chunks: graph.chunks };
194
+ }
195
+ /** Every file in the bundle, with what it claims to come from. */
196
+ function emittedFiles(outputs, graph, root, verified) {
197
+ const fromRoot = (name) => (isAbsolute(name) ? name : resolve(root, name));
198
+ const moduleFiles = (ids) => ids.flatMap((id) => {
199
+ const source = rollupModuleSource(id);
200
+ return source.kind === "builtin" || source.file === undefined ? [] : [source.file];
201
+ });
202
+ const referencedBy = new Map();
203
+ for (const output of outputs) {
204
+ if (output.type !== "chunk")
205
+ continue;
206
+ for (const name of [
207
+ ...(output.viteMetadata?.importedCss ?? []),
208
+ ...(output.viteMetadata?.importedAssets ?? []),
209
+ ]) {
210
+ referencedBy.set(name, [
211
+ ...(referencedBy.get(name) ?? []),
212
+ ...moduleFiles(output.moduleIds ?? []),
213
+ ]);
214
+ }
215
+ }
216
+ const cssModules = moduleFiles(Object.keys(graph.modules).filter((id) => CSS_FILE.test(id)));
217
+ const files = [];
218
+ for (const output of outputs) {
219
+ const name = output.fileName;
220
+ // Vite's own bookkeeping (`.vite/manifest.json`); nifra deletes it before anything is deployed.
221
+ if (name === undefined || name.startsWith(".vite/"))
222
+ continue;
223
+ if (output.type === "chunk") {
224
+ files.push({ name, kind: "code", text: output.code ?? "" });
225
+ if (output.map)
226
+ files.push({ name: `${name}.map`, kind: "map", text: JSON.stringify(output.map) });
227
+ continue;
228
+ }
229
+ const text = typeof output.source === "string" ? output.source : undefined;
230
+ if (name.endsWith(".map")) {
231
+ files.push({ name, kind: "map", ...(text !== undefined ? { text } : {}) });
232
+ continue;
233
+ }
234
+ if (verified?.has(name))
235
+ continue;
236
+ // Vite names a synthesized asset (the `cssCodeSplit: false` aggregate is `style.css`) after no
237
+ // real file; only names that exist are evidence.
238
+ const original = (output.originalFileNames ?? [])
239
+ .map(fromRoot)
240
+ .filter((file) => existsSync(file));
241
+ const referenced = referencedBy.get(name) ?? [];
242
+ const sources = original.length > 0
243
+ ? original
244
+ : referenced.length > 0
245
+ ? referenced
246
+ : name.endsWith(".css")
247
+ ? cssModules
248
+ : [];
249
+ files.push({ name, kind: "asset", sources });
250
+ }
251
+ return files;
252
+ }
253
+ /**
254
+ * Keep a bare Node built-in (`fs/promises`, `path`) visible to {@link viteLeakGuard}. Vite resolves a
255
+ * bare built-in that is not an installed package to one shared `__vite-browser-external` stub: the
256
+ * import builds, does nothing in the browser, and no longer names the module. This plugin externalizes
257
+ * it as `node:<name>` instead, so the guard fails the build naming it, as the Bun build does. A package
258
+ * of the same name the app installed (`events`, `buffer`) still resolves to that package.
259
+ */
260
+ export function viteBareBuiltinExternal() {
261
+ return {
262
+ name: "nifra:bare-builtin-external",
263
+ enforce: "pre",
264
+ async resolveId(source, importer) {
265
+ if (!isBareNodeBuiltin(source))
266
+ return null;
267
+ const resolved = await this.resolve(source, importer, { skipSelf: true });
268
+ if (resolved !== null && !resolved.id.startsWith("__vite-browser-external"))
269
+ return resolved;
270
+ return { id: `node:${source}`, external: true };
271
+ },
272
+ };
273
+ }
274
+ const POSTFIX = /[?#].*$/s;
275
+ const URL_SCHEME = /^(?:[a-z][a-z\d+.-]*:|\/\/)/i;
276
+ /**
277
+ * Keep server files out of a Vite client build's assets. A `new URL("./x", import.meta.url)` makes
278
+ * Vite copy the file it names into the output, or inline it into the chunk as a `data:` URL when it is
279
+ * small - no module and no import edge, so {@link viteLeakGuard}'s graph never sees it. This refuses a
280
+ * reference whose file the zones keep off the browser (backend code, a route's backend half, a server
281
+ * function's source, a file in no zone), and stops Vite inlining such a file anywhere else (a
282
+ * stylesheet's `url()`), so it is emitted where the leak guard's output accounting names it.
283
+ *
284
+ * Add it to the top-level `plugins`, after any framework plugin: it reads each module once that
285
+ * module is JavaScript, before Vite resolves the references.
286
+ */
287
+ export function viteAssetUrlGuard(options = {}) {
288
+ const appRoot = resolve(options.appRoot ?? process.cwd());
289
+ let classifier;
290
+ const denial = (file) => {
291
+ classifier ??= classifierFor(appRoot, options);
292
+ return assetDenial(classifier.classify(file));
293
+ };
294
+ const shown = (file) => relative(appRoot, file).replaceAll("\\", "/");
295
+ const plugin = {
296
+ name: "nifra:asset-url-guard",
297
+ apply: "build",
298
+ config(config) {
299
+ const own = config.build?.assetsInlineLimit;
300
+ return {
301
+ build: {
302
+ assetsInlineLimit: (file, content) => denial(file) !== undefined
303
+ ? false
304
+ : typeof own === "function"
305
+ ? own(file, content)
306
+ : own === undefined
307
+ ? undefined
308
+ : content.length < own,
309
+ },
310
+ };
311
+ },
312
+ async transform(code, id, transformOptions) {
313
+ if (transformOptions?.ssr === true || !code.includes("import.meta.url"))
314
+ return null;
315
+ const importer = id.replace(POSTFIX, "");
316
+ if (!isAbsolute(importer) || importer.includes("/node_modules/") || CSS_FILE.test(importer))
317
+ return null;
318
+ let program;
319
+ try {
320
+ program = this.parse(code);
321
+ }
322
+ catch {
323
+ return null;
324
+ }
325
+ const problems = [];
326
+ for (const url of newUrlLiterals(program)) {
327
+ if (URL_SCHEME.test(url))
328
+ continue;
329
+ for (const file of await assetUrlFiles(this, url, importer)) {
330
+ const reason = denial(file);
331
+ if (reason !== undefined) {
332
+ problems.push(`${shown(importer)}: new URL(${JSON.stringify(url)}, import.meta.url) names ${shown(file)}: ${reason}`);
333
+ }
334
+ }
335
+ }
336
+ if (problems.length === 0)
337
+ return null;
338
+ const leak = `[nifra/web] the browser build references files that may not ship to a browser:\n${problems.map((line) => ` - ${line}`).join("\n")}\n` +
339
+ "The bundler copies or inlines the file such a URL names, so it would ship as it is. Reach " +
340
+ "backend code through a route's backend half (x.backend.ts) or a *.fn.ts server function; a " +
341
+ "file the browser loads belongs in frontend/ or public/.";
342
+ plugin.leak = leak;
343
+ return this.error(new Error(leak));
344
+ },
345
+ };
346
+ return plugin;
347
+ }
348
+ /**
349
+ * The files a `new URL(url, import.meta.url)` can name, resolved the ways Vite tries: beside the
350
+ * module, then through the resolver (aliases, extensions, a root-relative path). Existing files only;
351
+ * a reference to nothing ships nothing.
352
+ */
353
+ async function assetUrlFiles(context, url, importer) {
354
+ const files = new Set();
355
+ const add = (path) => {
356
+ const file = path?.replace(POSTFIX, "");
357
+ if (file === undefined || !isAbsolute(file) || file.includes("\0"))
358
+ return;
359
+ if (statSync(file, { throwIfNoEntry: false })?.isFile() === true)
360
+ files.add(file);
361
+ };
362
+ if (!url.startsWith("/"))
363
+ add(resolve(dirname(importer), url.replace(POSTFIX, "")));
364
+ const sources = url.startsWith(".") || url.startsWith("/") ? [url] : [url, `./${url}`];
365
+ for (const source of sources) {
366
+ try {
367
+ add((await context.resolve(source, importer, { skipSelf: true }))?.id);
368
+ }
369
+ catch {
370
+ // An unresolvable reference is one Vite leaves unchanged.
371
+ }
372
+ }
373
+ return [...files];
374
+ }
375
+ const field = (node, key) => typeof node === "object" && node !== null ? Reflect.get(node, key) : undefined;
376
+ /** `import.meta.url`, and not `new.target.url`. */
377
+ const isImportMetaUrl = (node) => field(node, "type") === "MemberExpression" &&
378
+ field(node, "computed") === false &&
379
+ field(field(node, "property"), "name") === "url" &&
380
+ field(field(field(node, "object"), "meta"), "name") === "import";
381
+ /** A string literal's text as written and as it evaluates; nothing for a template with holes. */
382
+ function literalTexts(node) {
383
+ const type = field(node, "type");
384
+ if (type === "Literal") {
385
+ const value = field(node, "value");
386
+ const raw = field(node, "raw");
387
+ if (typeof value !== "string")
388
+ return [];
389
+ return typeof raw === "string" ? [value, raw.slice(1, -1)] : [value];
390
+ }
391
+ if (type !== "TemplateLiteral")
392
+ return [];
393
+ const holes = field(node, "expressions");
394
+ const quasis = field(node, "quasis");
395
+ if (!Array.isArray(holes) || holes.length > 0 || !Array.isArray(quasis))
396
+ return [];
397
+ const value = field(quasis[0], "value");
398
+ return [field(value, "cooked"), field(value, "raw")].filter((text) => typeof text === "string");
399
+ }
400
+ /**
401
+ * The URL text of every `new URL("...", import.meta.url)` in a parsed module. Parsed rather than
402
+ * matched, so a comment inside the call cannot hide one; a template with holes is skipped, as Vite
403
+ * turns it into an `import.meta.glob` the module graph sees.
404
+ */
405
+ function newUrlLiterals(program) {
406
+ const found = new Set();
407
+ const stack = [program];
408
+ while (stack.length > 0) {
409
+ const node = stack.pop();
410
+ if (typeof node !== "object" || node === null)
411
+ continue;
412
+ const args = field(node, "arguments");
413
+ if (field(node, "type") === "NewExpression" &&
414
+ field(field(node, "callee"), "type") === "Identifier" &&
415
+ field(field(node, "callee"), "name") === "URL" &&
416
+ Array.isArray(args) &&
417
+ isImportMetaUrl(args[1])) {
418
+ for (const text of literalTexts(args[0]))
419
+ found.add(text);
420
+ }
421
+ for (const child of Object.values(node)) {
422
+ if (typeof child === "object" && child !== null)
423
+ stack.push(child);
424
+ }
425
+ }
426
+ return [...found];
427
+ }
67
428
  //# sourceMappingURL=vite-leak-guard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"vite-leak-guard.js","sourceRoot":"","sources":["../../src/plugins/vite-leak-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,OAAO,EACL,0BAA0B,EAC1B,wBAAwB,EACxB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,gBAAgB,EAAyB,MAAM,oBAAoB,CAAA;AAyC5E;;;GAGG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,MAAM,GAAoB;QAC9B,IAAI,EAAE,kBAAkB;QACxB,cAAc,CAAC,QAAQ,EAAE,MAAM;YAC7B,+FAA+F;YAC/F,qFAAqF;YACrF,MAAM,SAAS,GAAG,CAAC,EAAU,EAAqB,EAAE;gBAClD,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAA;gBACnC,IAAI,IAAI,KAAK,IAAI;oBAAE,OAAO,EAAE,CAAA;gBAC5B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAAC,CAAA;YAC9E,CAAC,CAAA;YACD,MAAM,KAAK,GAAG,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;YACjD,qGAAqG;YACrG,kEAAkE;YAClE,MAAM,IAAI,GACR,qBAAqB,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC;gBACxD,oBAAoB,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC,CAAA;YACvD,IAAI,IAAI,KAAK,SAAS;gBAAE,OAAM;YAC9B,kGAAkG;YAClG,mGAAmG;YACnG,MAAM,CAAC,IAAI,GAAG,IAAI,CAAA;YAClB,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;QAC7B,CAAC;KACF,CAAA;IACD,OAAO,MAAM,CAAA;AACf,CAAC"}
1
+ {"version":3,"file":"vite-leak-guard.js","sourceRoot":"","sources":["../../src/plugins/vite-leak-guard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ import type { IncomingMessage, ServerResponse } from "node:http";
2
+ export interface ViteZoneGuardOptions {
3
+ /** The app root: the directory holding `routes/`, `frontend/`, `backend/` and `shared/`. */
4
+ readonly appRoot: string;
5
+ /** The routes directory (default `<appRoot>/routes`). */
6
+ readonly routesDir?: string;
7
+ /** Generated client modules (the dev entry). */
8
+ readonly generatedFiles?: readonly string[];
9
+ /** The public-env prefix browser code may read (default `"PUBLIC_"`). */
10
+ readonly publicEnvPrefix?: string;
11
+ }
12
+ type Next = (error?: unknown) => void;
13
+ type Middleware = (req: IncomingMessage, res: ServerResponse, next: Next) => void;
14
+ interface PluginContext {
15
+ readonly environment?: {
16
+ readonly name?: string;
17
+ };
18
+ error(error: Error | string): never;
19
+ resolve(source: string, importer: string | undefined, options: {
20
+ readonly skipSelf: boolean;
21
+ } & Record<string, unknown>): Promise<{
22
+ readonly id: string;
23
+ readonly external?: boolean | string;
24
+ } | null>;
25
+ }
26
+ /** The slice of a Vite plugin this returns. Structural, so `vite` stays an optional peer. */
27
+ export interface ViteZoneGuardPlugin {
28
+ readonly name: string;
29
+ readonly enforce: "pre";
30
+ config(): {
31
+ optimizeDeps: {
32
+ exclude: string[];
33
+ };
34
+ };
35
+ configResolved(config: {
36
+ readonly root: string;
37
+ }): void;
38
+ configureServer(server: {
39
+ readonly middlewares: {
40
+ use(middleware: Middleware): void;
41
+ };
42
+ }): void;
43
+ resolveId(this: PluginContext, source: string, importer: string | undefined, options?: {
44
+ readonly ssr?: boolean;
45
+ readonly scan?: boolean;
46
+ }): Promise<null>;
47
+ transform(this: PluginContext, code: string, id: string, options?: {
48
+ readonly ssr?: boolean;
49
+ }): null;
50
+ /**
51
+ * Why the module a request URL names failed to serve, when the guard refused one of its imports.
52
+ * Vite in middleware mode reports a transform error to the overlay and then passes the request on
53
+ * instead of answering it; the dev server answers with this.
54
+ */
55
+ refusalFor(url: string): string | undefined;
56
+ /** The source file a request URL names, when it names one. */
57
+ fileForUrl(url: string): string | undefined;
58
+ }
59
+ export declare function viteZoneGuard(options: ViteZoneGuardOptions): ViteZoneGuardPlugin;
60
+ export {};
61
+ //# sourceMappingURL=vite-zone-guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vite-zone-guard.d.ts","sourceRoot":"","sources":["../../src/plugins/vite-zone-guard.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAWhE,MAAM,WAAW,oBAAoB;IACnC,4FAA4F;IAC5F,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,yDAAyD;IACzD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,gDAAgD;IAChD,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC3C,yEAAyE;IACzE,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAClC;AAKD,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;AACrC,KAAK,UAAU,GAAG,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,KAAK,IAAI,CAAA;AAEjF,UAAU,aAAa;IACrB,QAAQ,CAAC,WAAW,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACjD,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,CAAA;IACnC,OAAO,CACL,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,OAAO,EAAE;QAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChE,OAAO,CAAC;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAA;CACjF;AAED,6FAA6F;AAC7F,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAA;IACvB,MAAM,IAAI;QAAE,YAAY,EAAE;YAAE,OAAO,EAAE,MAAM,EAAE,CAAA;SAAE,CAAA;KAAE,CAAA;IACjD,cAAc,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IACvD,eAAe,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,WAAW,EAAE;YAAE,GAAG,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAA;SAAE,CAAA;KAAE,GAAG,IAAI,CAAA;IAC9F,SAAS,CACP,IAAI,EAAE,aAAa,EACnB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,GAC5D,OAAO,CAAC,IAAI,CAAC,CAAA;IAChB,SAAS,CACP,IAAI,EAAE,aAAa,EACnB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAA;KAAE,GACnC,IAAI,CAAA;IACP;;;;OAIG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;IAC3C,8DAA8D;IAC9D,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;CAC5C;AAcD,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,mBAAmB,CA0KhF"}