@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
@@ -0,0 +1,580 @@
1
+ /**
2
+ * One dev server's agent session, shared by both dev-server adapters (`./dev.ts`, `./vite.ts`) the way
3
+ * `./dev-diagnostics.ts` is: the feed, its HTTP surface, request tracking, the discovery record, console
4
+ * capture and the crash monitor live here once, so the two servers cannot drift on what an agent sees.
5
+ *
6
+ * Every agent read requires a loopback `Host` (a DNS-rebinding page cannot reach it) AND the token from
7
+ * the discovery record (owner-only file), so a script running in the app's own pages cannot read logs
8
+ * either. `/__nifra/last-error` keeps its older, token-free contract behind the same Host check.
9
+ */
10
+ import { performance } from "node:perf_hooks";
11
+ import { CLIENT_BATCH_MAX_BYTES, devClientTag, injectIntoHtml, injectIntoStream, isInjectablePage, parseClientBatch, } from "./dev-client.js";
12
+ import { createDevDiagnostics, createSourceGate } from "./dev-diagnostics.js";
13
+ import { captureInto, createDevFeed, createDevToken, currentDevRequest, DEV_ERROR_CATEGORIES, DEV_FEED_HEADER, DEV_FEED_PATHS, DEV_FEED_SCHEMA, DEV_LOG_LEVELS, DEV_REQUEST_ID_HEADER, DEV_TOKEN_HEADER, removeDevServerRecord, runWithDevRequest, writeDevServerRecord, } from "./dev-feed.js";
14
+ import { DEV_INDICATOR_MAX_ISSUES, DEV_INDICATOR_SOURCE } from "./dev-indicator.js";
15
+ import { createSourceMapper } from "./dev-sourcemap.js";
16
+ import { fixPrompts, isHydrationMismatch, LAST_ERROR_PATH, promptPath } from "./diagnostic.js";
17
+ import { diagnosticHeadline } from "./diagnostic-prompt.js";
18
+ import { timingSafeEqual } from "./internal/timing-safe-equal.js";
19
+ import { ISR_STATUS_HEADER } from "./isr.js";
20
+ import { DATA_HEADER } from "./router.js";
21
+ const JSON_HEADERS = {
22
+ "content-type": "application/json; charset=utf-8",
23
+ "cache-control": "no-store",
24
+ "x-content-type-options": "nosniff",
25
+ [DEV_FEED_HEADER]: "true",
26
+ };
27
+ /** A Host header naming this machine: localhost, `*.localhost`, 127.0.0.0/8, or `[::1]`. */
28
+ export function isLoopbackHost(host) {
29
+ if (host === null || host === undefined || host.length === 0)
30
+ return false;
31
+ let name = host.trim().toLowerCase();
32
+ if (name.startsWith("[")) {
33
+ const end = name.indexOf("]");
34
+ if (end === -1)
35
+ return false;
36
+ name = name.slice(1, end);
37
+ }
38
+ else {
39
+ const colon = name.lastIndexOf(":");
40
+ if (colon !== -1)
41
+ name = name.slice(0, colon);
42
+ }
43
+ return (name === "localhost" ||
44
+ name.endsWith(".localhost") ||
45
+ name === "::1" ||
46
+ /^127\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(name));
47
+ }
48
+ const AGENT_PATHS = new Set([
49
+ DEV_FEED_PATHS.identity,
50
+ DEV_FEED_PATHS.errors,
51
+ DEV_FEED_PATHS.logs,
52
+ DEV_FEED_PATHS.requests,
53
+ DEV_FEED_PATHS.clientEvent,
54
+ DEV_FEED_PATHS.indicator,
55
+ LAST_ERROR_PATH,
56
+ ]);
57
+ /** Whether `pathname` is one the session answers (so an adapter hands it over before its own routing). */
58
+ export function isDevAgentPath(pathname) {
59
+ return AGENT_PATHS.has(pathname);
60
+ }
61
+ const INDICATOR_HEADERS = {
62
+ "content-type": "text/javascript; charset=utf-8",
63
+ "cache-control": "no-store",
64
+ "x-content-type-options": "nosniff",
65
+ [DEV_FEED_HEADER]: "true",
66
+ };
67
+ const json = (body, status = 200) => new Response(JSON.stringify(body), { status, headers: JSON_HEADERS });
68
+ const intParam = (url, name) => {
69
+ const raw = url.searchParams.get(name);
70
+ if (raw === null || raw === "")
71
+ return undefined;
72
+ const value = Number(raw);
73
+ return Number.isSafeInteger(value) && value >= 0 ? value : undefined;
74
+ };
75
+ const textParam = (url, name) => {
76
+ const raw = url.searchParams.get(name);
77
+ return raw === null || raw === "" ? undefined : raw;
78
+ };
79
+ const listParam = (url, name, allowed) => {
80
+ const raw = url.searchParams.get(name);
81
+ if (raw === null || raw === "")
82
+ return undefined;
83
+ return raw
84
+ .split(",")
85
+ .map((part) => part.trim())
86
+ .filter((part) => allowed.some((value) => value === part));
87
+ };
88
+ const messageOf = (part) => {
89
+ if (part instanceof Error)
90
+ return part.message;
91
+ if (typeof part === "object" && part !== null && "message" in part) {
92
+ if (typeof part.message === "string")
93
+ return part.message;
94
+ }
95
+ return String(part);
96
+ };
97
+ /** A Bun BuildMessage's `position` (file, 1-based line, 0-based column), when it carries one. */
98
+ const positionOf = (part) => {
99
+ if (typeof part !== "object" || part === null || !("position" in part))
100
+ return undefined;
101
+ const position = part.position;
102
+ if (typeof position !== "object" || position === null)
103
+ return undefined;
104
+ if (!("file" in position) || typeof position.file !== "string")
105
+ return undefined;
106
+ if (!("line" in position) || typeof position.line !== "number")
107
+ return undefined;
108
+ const column = "column" in position && typeof position.column === "number" ? position.column : 0;
109
+ return { file: position.file, line: position.line, column };
110
+ };
111
+ /**
112
+ * A bundler failure as an Error a Diagnostic can locate. Bun rejects with an AggregateError of
113
+ * BuildMessages whose `position` names the file; that position becomes the top frame so the codeframe
114
+ * points at the offending line.
115
+ */
116
+ export function buildFailureError(err, label) {
117
+ const parts = err instanceof AggregateError && err.errors.length > 0 ? err.errors : [err];
118
+ const messages = parts.map(messageOf);
119
+ const position = parts.map(positionOf).find((pos) => pos !== undefined);
120
+ const error = new Error(`${label}\n${messages.map((m) => ` ${m}`).join("\n")}`);
121
+ error.name = "BuildError";
122
+ const frames = position !== undefined
123
+ ? ` at ${position.file}:${position.line}:${position.column + 1}`
124
+ : err instanceof Error && typeof err.stack === "string"
125
+ ? err.stack
126
+ .split("\n")
127
+ .filter((line) => /^\s*at\s/.test(line))
128
+ .join("\n")
129
+ : "";
130
+ error.stack = `BuildError: ${error.message}${frames === "" ? "" : `\n${frames}`}`;
131
+ return error;
132
+ }
133
+ /** The origin the browser used for this request (its own Host, which the session already vetted). */
134
+ const originOf = (request) => `http://${request.headers.get("host") ?? new URL(request.url).host}`;
135
+ /** A request from a page on this same origin: its Origin names the Host it was sent to. */
136
+ function sameOrigin(request) {
137
+ const origin = request.headers.get("origin");
138
+ const host = request.headers.get("host");
139
+ if (origin === null || host === null)
140
+ return false;
141
+ const site = request.headers.get("sec-fetch-site");
142
+ if (site !== null && site !== "same-origin")
143
+ return false;
144
+ try {
145
+ const url = new URL(origin);
146
+ return url.protocol === "http:" && url.host.toLowerCase() === host.toLowerCase();
147
+ }
148
+ catch {
149
+ return false;
150
+ }
151
+ }
152
+ /** The body as text, or undefined once it passes `max` bytes (declared or actual). */
153
+ async function readCapped(request, max) {
154
+ const declared = Number(request.headers.get("content-length") ?? "0");
155
+ if (declared > max)
156
+ return undefined;
157
+ if (request.body === null)
158
+ return "";
159
+ const reader = request.body.getReader();
160
+ const chunks = [];
161
+ let total = 0;
162
+ for (;;) {
163
+ const { done, value } = await reader.read();
164
+ if (done)
165
+ break;
166
+ total += value.byteLength;
167
+ if (total > max) {
168
+ await reader.cancel();
169
+ return undefined;
170
+ }
171
+ chunks.push(value);
172
+ }
173
+ return Buffer.concat(chunks).toString("utf8");
174
+ }
175
+ /** Create the session a dev server owns from construction to `stop()`. */
176
+ export function createDevSession(options) {
177
+ const { root, pipeline } = options;
178
+ const record = options.record !== false;
179
+ const indicator = options.indicator !== false;
180
+ const feed = createDevFeed({
181
+ root,
182
+ persist: record,
183
+ showSource: createSourceGate(root),
184
+ publicEnvPrefix: options.publicEnvPrefix,
185
+ });
186
+ const token = createDevToken();
187
+ // Embedded in every page, so it proves only "a page this server served": it admits event batches
188
+ // and nothing else. The agent token never leaves the discovery record.
189
+ const pageToken = createDevToken();
190
+ const startedAt = new Date().toISOString();
191
+ let port = 0;
192
+ let requestCounter = 0;
193
+ let stopped = false;
194
+ const diagnostics = createDevDiagnostics(root, (err, request) => {
195
+ const entry = feed.recordError(err, { category: "ssr", request });
196
+ return {
197
+ diagnostic: entry.diagnostic,
198
+ entry: { id: entry.id, seq: entry.seq },
199
+ requestId: entry.requestId,
200
+ category: entry.category,
201
+ };
202
+ });
203
+ const detachCapture = captureInto(feed);
204
+ const mapper = createSourceMapper({
205
+ root,
206
+ origin: () => (port === 0 ? undefined : `http://127.0.0.1:${port}`),
207
+ });
208
+ // Observes without changing what a crash does: the process still dies exactly as it would have.
209
+ const onCrash = (err) => {
210
+ try {
211
+ feed.recordError(err, { category: "process" });
212
+ feed.flush();
213
+ }
214
+ catch {
215
+ // Recording a crash must never mask it.
216
+ }
217
+ };
218
+ process.on("uncaughtExceptionMonitor", onCrash);
219
+ const identity = () => ({
220
+ schema: DEV_FEED_SCHEMA,
221
+ pid: process.pid,
222
+ port,
223
+ pipeline,
224
+ root,
225
+ startedAt,
226
+ cursor: feed.cursor,
227
+ generation: feed.generation,
228
+ counts: feed.counts(),
229
+ });
230
+ const authorized = (request) => timingSafeEqual(request.headers.get(DEV_TOKEN_HEADER) ?? "", token);
231
+ const handle = async (request) => {
232
+ const url = new URL(request.url);
233
+ const path = url.pathname;
234
+ if (!AGENT_PATHS.has(path))
235
+ return undefined;
236
+ if (!isLoopbackHost(request.headers.get("host") ?? url.host)) {
237
+ return json({ code: "NIFRA_DEV_FORBIDDEN", message: "dev endpoints answer loopback hosts only" }, 403);
238
+ }
239
+ if (path === LAST_ERROR_PATH) {
240
+ const { body, headers } = diagnostics.lastError();
241
+ return new Response(body, { headers });
242
+ }
243
+ if (path === DEV_FEED_PATHS.clientEvent)
244
+ return ingestClientEvents(request);
245
+ if (path === DEV_FEED_PATHS.indicator) {
246
+ if (!indicator)
247
+ return json({ code: "NIFRA_DEV_NOT_FOUND", message: "indicator off" }, 404);
248
+ return new Response(DEV_INDICATOR_SOURCE, { headers: INDICATOR_HEADERS });
249
+ }
250
+ if (request.method !== "GET" && request.method !== "HEAD") {
251
+ return json({ code: "NIFRA_DEV_METHOD", message: "use GET" }, 405);
252
+ }
253
+ if (!authorized(request)) {
254
+ return json({
255
+ code: "NIFRA_DEV_UNAUTHORIZED",
256
+ message: `send the token from ${root}/.nifra/dev-server.json as ${DEV_TOKEN_HEADER}`,
257
+ }, 401);
258
+ }
259
+ if (path === DEV_FEED_PATHS.identity)
260
+ return json(identity());
261
+ const since = intParam(url, "since");
262
+ const limit = intParam(url, "limit");
263
+ const requestId = textParam(url, "requestId");
264
+ if (path === DEV_FEED_PATHS.errors) {
265
+ return json(feed.errors({
266
+ since,
267
+ limit,
268
+ requestId,
269
+ categories: listParam(url, "category", DEV_ERROR_CATEGORIES),
270
+ includeStale: url.searchParams.get("stale") !== "false",
271
+ includeResolved: url.searchParams.get("resolved") === "true",
272
+ }));
273
+ }
274
+ if (path === DEV_FEED_PATHS.logs) {
275
+ const source = url.searchParams.get("source");
276
+ return json(feed.logs({
277
+ since,
278
+ limit,
279
+ requestId,
280
+ levels: listParam(url, "level", DEV_LOG_LEVELS),
281
+ source: source === "server" || source === "browser" ? source : undefined,
282
+ grep: textParam(url, "grep"),
283
+ }));
284
+ }
285
+ return json(feed.requests({ since, limit, requestId, path: textParam(url, "path") }));
286
+ };
287
+ // A page can loop on an error (a render that throws every frame): the bucket keeps it from flooding
288
+ // the feed. Refills at 30 events a second, holds 300.
289
+ const bucket = { tokens: 300, at: performance.now() };
290
+ let lastDropNotice = Number.NEGATIVE_INFINITY;
291
+ const admit = (wanted) => {
292
+ const now = performance.now();
293
+ bucket.tokens = Math.min(300, bucket.tokens + ((now - bucket.at) / 1000) * 30);
294
+ bucket.at = now;
295
+ const granted = Math.min(wanted, Math.floor(bucket.tokens));
296
+ bucket.tokens -= granted;
297
+ return granted;
298
+ };
299
+ /** A browser error as an entry, its stack mapped back to source. */
300
+ const recordBrowserError = async (error, meta) => {
301
+ const head = `${error.name}: ${error.message}`;
302
+ // Chrome leads a stack with its message; Firefox and Safari send frames only. Rebuild one shape.
303
+ const mapped = error.stack === "" ? "" : await mapper.mapStack(error.stack);
304
+ const frames = mapped
305
+ .split("\n")
306
+ .filter((line) => /^\s*at\s/.test(line))
307
+ .join("\n");
308
+ const rebuilt = new Error(error.message);
309
+ rebuilt.name = error.name;
310
+ rebuilt.stack = frames === "" ? head : `${head}\n${frames}`;
311
+ const entry = feed.recordError(rebuilt, {
312
+ ...meta,
313
+ category: isHydrationMismatch(error.message) ? "hydration" : "browser",
314
+ });
315
+ return { head, entry };
316
+ };
317
+ /** Record one browser event; returns the error entry it produced, if any. */
318
+ const recordClientEvent = async (event) => {
319
+ const meta = { source: "browser", page: event.page, requestId: event.requestId };
320
+ if (event.kind === "console") {
321
+ feed.recordLog(event.level, event.message, meta);
322
+ if (event.error !== undefined)
323
+ return (await recordBrowserError(event.error, meta)).entry;
324
+ // React 18, Vue and Svelte report a mismatch through the console rather than by throwing.
325
+ if ((event.level === "error" || event.level === "warn") &&
326
+ isHydrationMismatch(event.message)) {
327
+ const recorded = await recordBrowserError({ name: "HydrationMismatch", message: event.message, stack: "" }, meta);
328
+ return recorded.entry;
329
+ }
330
+ return undefined;
331
+ }
332
+ if (event.kind === "resource") {
333
+ const { head, entry } = await recordBrowserError({ name: "ResourceError", message: `failed to load <${event.tag}> ${event.url}`, stack: "" }, meta);
334
+ feed.recordLog("error", head, meta);
335
+ return entry;
336
+ }
337
+ const { head, entry } = await recordBrowserError(event, meta);
338
+ feed.recordLog("error", `Uncaught ${event.kind === "rejection" ? "(in promise) " : ""}${head}`, meta);
339
+ return entry;
340
+ };
341
+ /** What the indicator shows for an entry: the redacted diagnostic, paths relative, and prompts. */
342
+ const issueOf = (entry) => {
343
+ const { diagnostic } = entry;
344
+ const top = diagnostic.codeframe ?? diagnostic.frames.find((f) => f.file !== undefined);
345
+ return {
346
+ id: entry.id,
347
+ seq: entry.seq,
348
+ count: entry.count,
349
+ code: diagnostic.code,
350
+ category: entry.category,
351
+ message: diagnosticHeadline(diagnostic).slice(0, 2000),
352
+ page: entry.page,
353
+ at: top?.file === undefined
354
+ ? undefined
355
+ : `${promptPath(top.file, root)}:${top.line ?? 0}${top.column === undefined ? "" : `:${top.column}`}`,
356
+ codeframe: diagnostic.codeframe === undefined ? undefined : { lines: diagnostic.codeframe.lines },
357
+ cause: diagnostic.cause,
358
+ fix: diagnostic.fix,
359
+ docs: diagnostic.docsAnchor === undefined
360
+ ? undefined
361
+ : `https://nifra.dev/docs/${diagnostic.docsAnchor}`,
362
+ prompts: fixPrompts(diagnostic, {
363
+ surface: "indicator",
364
+ root,
365
+ entry: { id: entry.id, seq: entry.seq },
366
+ requestId: entry.requestId,
367
+ page: entry.page,
368
+ category: entry.category,
369
+ }),
370
+ };
371
+ };
372
+ const ingestClientEvents = async (request) => {
373
+ if (request.method !== "POST")
374
+ return json({ code: "NIFRA_DEV_METHOD", message: "use POST" }, 405);
375
+ // Only this server's own pages: a cross-site form or `fetch` POST carries a foreign Origin.
376
+ if (!sameOrigin(request))
377
+ return json({ code: "NIFRA_DEV_FORBIDDEN", message: "same-origin pages only" }, 403);
378
+ const text = await readCapped(request, CLIENT_BATCH_MAX_BYTES);
379
+ if (text === undefined)
380
+ return json({ code: "NIFRA_DEV_TOO_LARGE", message: "batch too large" }, 413);
381
+ let value;
382
+ try {
383
+ value = JSON.parse(text);
384
+ }
385
+ catch {
386
+ return json({ code: "NIFRA_DEV_BAD_BATCH", message: "batch is not JSON" }, 400);
387
+ }
388
+ const batch = parseClientBatch(value);
389
+ if (batch === undefined)
390
+ return json({ code: "NIFRA_DEV_BAD_BATCH", message: "batch has the wrong shape" }, 400);
391
+ if (!timingSafeEqual(batch.token, pageToken))
392
+ return json({ code: "NIFRA_DEV_UNAUTHORIZED", message: "unknown page token" }, 401);
393
+ const granted = admit(batch.events.length);
394
+ const recorded = [];
395
+ for (const event of batch.events.slice(0, granted)) {
396
+ const entry = await recordClientEvent(event);
397
+ if (entry !== undefined)
398
+ recorded.push(entry);
399
+ }
400
+ if (granted < batch.events.length) {
401
+ const now = performance.now();
402
+ if (now - lastDropNotice > 10_000) {
403
+ lastDropNotice = now;
404
+ feed.recordLog("warn", "[nifra] the browser is reporting faster than 30 events a second; dropping the excess");
405
+ }
406
+ return json({ code: "NIFRA_DEV_RATE_LIMITED", message: "slow down" }, 429);
407
+ }
408
+ // The page gets back only what it just reported, so this answer reveals nothing it did not send.
409
+ if (indicator && recorded.length > 0) {
410
+ return json({ issues: recorded.slice(-DEV_INDICATOR_MAX_ISSUES).map(issueOf) });
411
+ }
412
+ return new Response(null, { status: 204, headers: { [DEV_FEED_HEADER]: "true" } });
413
+ };
414
+ const clientConfig = (request, requestId) => {
415
+ const url = new URL(request.url);
416
+ return {
417
+ ingestPath: DEV_FEED_PATHS.clientEvent,
418
+ pageToken,
419
+ indicatorPath: indicator ? DEV_FEED_PATHS.indicator : undefined,
420
+ requestId: requestId ?? undefined,
421
+ documentPath: `${url.pathname}${url.search}`,
422
+ };
423
+ };
424
+ const decoratePage = (request, response) => {
425
+ const body = response.body;
426
+ if (body === null || !isInjectablePage(response, request.method))
427
+ return response;
428
+ const headers = new Headers(response.headers);
429
+ const requestId = currentDevRequest()?.requestId ?? response.headers.get(DEV_REQUEST_ID_HEADER);
430
+ const tag = devClientTag(clientConfig(request, requestId), headers, originOf(request));
431
+ if (tag === undefined)
432
+ return response;
433
+ headers.delete("content-length"); // the body grows by the script
434
+ return new Response(injectIntoStream(body, tag), {
435
+ status: response.status,
436
+ statusText: response.statusText,
437
+ headers,
438
+ });
439
+ };
440
+ const decorateHtml = (request, html, headers, requestId) => {
441
+ const tag = devClientTag(clientConfig(request, requestId), headers, originOf(request), true);
442
+ return tag === undefined ? html : injectIntoHtml(html, tag);
443
+ };
444
+ const isDocumentRequest = (request) => {
445
+ if (request.method !== "GET" && request.method !== "HEAD")
446
+ return false;
447
+ if (request.headers.has(DATA_HEADER))
448
+ return false;
449
+ const dest = request.headers.get("sec-fetch-dest");
450
+ if (dest !== null)
451
+ return dest === "document" || dest === "iframe";
452
+ return (request.headers.get("accept") ?? "").includes("text/html");
453
+ };
454
+ const overlays = new WeakSet();
455
+ // Core answers a page render that throws with a bare JSON 500, and its log line has already put the
456
+ // error in the feed under this request. A browser loading that page gets the overlay for it instead.
457
+ const overlayFor = async (request, requestId, response) => {
458
+ if (response.status < 500 || !isDocumentRequest(request))
459
+ return undefined;
460
+ if ((response.headers.get("content-type") ?? "").includes("text/html"))
461
+ return undefined;
462
+ const entry = feed.errors({ requestId }).errors.at(-1);
463
+ if (entry === undefined)
464
+ return undefined;
465
+ await response.body?.cancel();
466
+ const html = diagnostics.show({
467
+ diagnostic: entry.diagnostic,
468
+ entry: { id: entry.id, seq: entry.seq },
469
+ requestId,
470
+ category: entry.category,
471
+ });
472
+ const overlay = new Response(html, {
473
+ status: response.status,
474
+ headers: { "content-type": "text/html; charset=utf-8" },
475
+ });
476
+ overlays.add(overlay);
477
+ return overlay;
478
+ };
479
+ const track = async (request, handler) => {
480
+ requestCounter += 1;
481
+ const requestId = `r${requestCounter}`;
482
+ const url = new URL(request.url);
483
+ const path = `${url.pathname}${url.search}`;
484
+ feed.startRequest(requestId, request.method, path);
485
+ const started = performance.now();
486
+ let response;
487
+ try {
488
+ response = await runWithDevRequest({ feedId: feed.id, requestId, method: request.method, path }, handler);
489
+ }
490
+ catch (err) {
491
+ feed.finishRequest(requestId, { status: 500 }, performance.now() - started);
492
+ throw err;
493
+ }
494
+ response = (await overlayFor(request, requestId, response)) ?? response;
495
+ const length = response.headers.get("content-length");
496
+ feed.finishRequest(requestId, {
497
+ status: response.status,
498
+ bytes: length !== null && /^\d+$/.test(length) ? Number(length) : undefined,
499
+ isr: response.headers.get(ISR_STATUS_HEADER) ?? undefined,
500
+ }, performance.now() - started);
501
+ try {
502
+ response.headers.set(DEV_REQUEST_ID_HEADER, requestId);
503
+ return response;
504
+ }
505
+ catch {
506
+ // `Response.redirect()` and fetched responses carry immutable headers on some runtimes.
507
+ const headers = new Headers(response.headers);
508
+ headers.set(DEV_REQUEST_ID_HEADER, requestId);
509
+ return new Response(response.body, {
510
+ status: response.status,
511
+ statusText: response.statusText,
512
+ headers,
513
+ });
514
+ }
515
+ };
516
+ return {
517
+ feed,
518
+ token,
519
+ diagnostics,
520
+ handle,
521
+ track,
522
+ isOverlay: (response) => overlays.has(response),
523
+ decoratePage,
524
+ decorateHtml,
525
+ failure: (err, request) => diagnostics.capture(err, request),
526
+ onLoaderError: (err, ctx) => {
527
+ const url = new URL(ctx.request.url);
528
+ feed.recordError(err, {
529
+ category: "page",
530
+ route: ctx.route,
531
+ request: { method: ctx.request.method, url: `${url.pathname}${url.search}` },
532
+ });
533
+ },
534
+ buildFailed: (err, label) => {
535
+ feed.recordError(buildFailureError(err, label), { category: "build" });
536
+ },
537
+ buildPassed: () => feed.resolve("build"),
538
+ markChange: () => {
539
+ feed.markChange();
540
+ mapper.clear();
541
+ },
542
+ listening: (bound) => {
543
+ port = bound;
544
+ if (!record)
545
+ return;
546
+ try {
547
+ writeDevServerRecord(root, {
548
+ schema: DEV_FEED_SCHEMA,
549
+ pid: process.pid,
550
+ port: bound,
551
+ url: `http://127.0.0.1:${bound}`,
552
+ pipeline,
553
+ root,
554
+ startedAt,
555
+ token,
556
+ });
557
+ }
558
+ catch (err) {
559
+ feed.recordLog("warn", `[nifra] could not write ${root}/.nifra/dev-server.json; tools will need an explicit port: ${err instanceof Error ? err.message : String(err)}`);
560
+ }
561
+ },
562
+ stop: () => {
563
+ if (stopped)
564
+ return;
565
+ stopped = true;
566
+ detachCapture();
567
+ process.off("uncaughtExceptionMonitor", onCrash);
568
+ if (record) {
569
+ try {
570
+ removeDevServerRecord(root, token);
571
+ }
572
+ catch {
573
+ // Already gone, or the directory is; nothing to clean.
574
+ }
575
+ }
576
+ feed.close();
577
+ },
578
+ };
579
+ }
580
+ //# sourceMappingURL=dev-session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-session.js","sourceRoot":"","sources":["../src/dev-session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Maps a browser stack trace back to source files, using the source maps the dev server itself
3
+ * serves (Bun links `/_bun/client/<gen>.js.map`; Vite inlines a data URL per module).
4
+ *
5
+ * Every fetch goes to the dev server's own origin, whatever host a frame names, so a crafted frame
6
+ * cannot make the server request anything else. Browser stacks in any engine's format come out as
7
+ * V8 `at` frames, which is what {@link parseFrames} reads.
8
+ */
9
+ export interface SourceMapperOptions {
10
+ readonly root: string;
11
+ /** The dev server's own origin (`http://127.0.0.1:<port>`), or undefined before it listens. */
12
+ readonly origin: () => string | undefined;
13
+ readonly fetch?: (url: string, init: {
14
+ signal: AbortSignal;
15
+ }) => Promise<Response>;
16
+ /** Decoded maps kept, most recently used first. */
17
+ readonly maxMaps?: number;
18
+ }
19
+ export interface SourceMapper {
20
+ /** `stack` with each frame of a script this server served pointed at its source file. */
21
+ mapStack(stack: string): Promise<string>;
22
+ /** Forget every map: the code they describe changed. */
23
+ clear(): void;
24
+ }
25
+ export { decodeMappings } from "./internal/source-map.js";
26
+ export declare function createSourceMapper(options: SourceMapperOptions): SourceMapper;
27
+ //# sourceMappingURL=dev-sourcemap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-sourcemap.d.ts","sourceRoot":"","sources":["../src/dev-sourcemap.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAaH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,+FAA+F;IAC/F,QAAQ,CAAC,MAAM,EAAE,MAAM,MAAM,GAAG,SAAS,CAAA;IACzC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE;QAAE,MAAM,EAAE,WAAW,CAAA;KAAE,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;IAClF,mDAAmD;IACnD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,yFAAyF;IACzF,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACxC,wDAAwD;IACxD,KAAK,IAAI,IAAI,CAAA;CACd;AAkCD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AA4FzD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,YAAY,CAwH7E"}