@nifrajs/web 3.5.0 → 4.0.2

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 (390) 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 +18 -6
  10. package/dist/build-plan.d.ts.map +1 -1
  11. package/dist/build-plan.js +82 -34
  12. package/dist/build-plan.js.map +1 -1
  13. package/dist/build-vite.d.ts +4 -0
  14. package/dist/build-vite.d.ts.map +1 -1
  15. package/dist/build-vite.js +68 -13
  16. package/dist/build-vite.js.map +1 -1
  17. package/dist/build.d.ts +57 -23
  18. package/dist/build.d.ts.map +1 -1
  19. package/dist/build.js +356 -85
  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 +3 -1
  28. package/dist/client.d.ts.map +1 -1
  29. package/dist/client.js +136 -35
  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/dev-client.d.ts +76 -0
  40. package/dist/dev-client.d.ts.map +1 -0
  41. package/dist/dev-client.js +280 -0
  42. package/dist/dev-client.js.map +1 -0
  43. package/dist/dev-diagnostics.d.ts +26 -2
  44. package/dist/dev-diagnostics.d.ts.map +1 -1
  45. package/dist/dev-diagnostics.js +38 -7
  46. package/dist/dev-diagnostics.js.map +1 -1
  47. package/dist/dev-error.d.ts +4 -13
  48. package/dist/dev-error.d.ts.map +1 -1
  49. package/dist/dev-error.js +46 -4
  50. package/dist/dev-error.js.map +1 -1
  51. package/dist/dev-feed.d.ts +298 -0
  52. package/dist/dev-feed.d.ts.map +1 -0
  53. package/dist/dev-feed.js +797 -0
  54. package/dist/dev-feed.js.map +1 -0
  55. package/dist/dev-indicator.d.ts +38 -0
  56. package/dist/dev-indicator.d.ts.map +1 -0
  57. package/dist/dev-indicator.js +93 -0
  58. package/dist/dev-indicator.js.map +1 -0
  59. package/dist/dev-session.d.ts +77 -0
  60. package/dist/dev-session.d.ts.map +1 -0
  61. package/dist/dev-session.js +580 -0
  62. package/dist/dev-session.js.map +1 -0
  63. package/dist/dev-sourcemap.d.ts +27 -0
  64. package/dist/dev-sourcemap.d.ts.map +1 -0
  65. package/dist/dev-sourcemap.js +235 -0
  66. package/dist/dev-sourcemap.js.map +1 -0
  67. package/dist/dev-ssr-graph.d.ts.map +1 -1
  68. package/dist/dev-ssr-graph.js +13 -5
  69. package/dist/dev-ssr-graph.js.map +1 -1
  70. package/dist/dev.d.ts +15 -2
  71. package/dist/dev.d.ts.map +1 -1
  72. package/dist/dev.js +69 -44
  73. package/dist/dev.js.map +1 -1
  74. package/dist/diagnostic-catalog.d.ts +35 -0
  75. package/dist/diagnostic-catalog.d.ts.map +1 -0
  76. package/dist/diagnostic-catalog.js +203 -0
  77. package/dist/diagnostic-catalog.js.map +1 -0
  78. package/dist/diagnostic-prompt.d.ts +49 -0
  79. package/dist/diagnostic-prompt.d.ts.map +1 -0
  80. package/dist/diagnostic-prompt.js +303 -0
  81. package/dist/diagnostic-prompt.js.map +1 -0
  82. package/dist/diagnostic.d.ts +17 -23
  83. package/dist/diagnostic.d.ts.map +1 -1
  84. package/dist/diagnostic.js +31 -39
  85. package/dist/diagnostic.js.map +1 -1
  86. package/dist/draft.d.ts.map +1 -1
  87. package/dist/draft.js +4 -1
  88. package/dist/draft.js.map +1 -1
  89. package/dist/fn.d.ts +5 -0
  90. package/dist/fn.d.ts.map +1 -1
  91. package/dist/fn.js +13 -3
  92. package/dist/fn.js.map +1 -1
  93. package/dist/fs.d.ts.map +1 -1
  94. package/dist/fs.js +4 -2
  95. package/dist/fs.js.map +1 -1
  96. package/dist/index.d.ts +13 -15
  97. package/dist/index.d.ts.map +1 -1
  98. package/dist/index.js +11 -12
  99. package/dist/index.js.map +1 -1
  100. package/dist/internal/cdn/cloudflare.d.ts +48 -0
  101. package/dist/internal/cdn/cloudflare.d.ts.map +1 -0
  102. package/dist/internal/cdn/cloudflare.js +94 -0
  103. package/dist/internal/cdn/cloudflare.js.map +1 -0
  104. package/dist/internal/cdn/core.d.ts +91 -0
  105. package/dist/internal/cdn/core.d.ts.map +1 -0
  106. package/dist/internal/cdn/core.js +220 -0
  107. package/dist/internal/cdn/core.js.map +1 -0
  108. package/dist/internal/cdn/fastly.d.ts +17 -0
  109. package/dist/internal/cdn/fastly.d.ts.map +1 -0
  110. package/dist/internal/cdn/fastly.js +43 -0
  111. package/dist/internal/cdn/fastly.js.map +1 -0
  112. package/dist/internal/cdn/vercel.d.ts +31 -0
  113. package/dist/internal/cdn/vercel.d.ts.map +1 -0
  114. package/dist/internal/cdn/vercel.js +56 -0
  115. package/dist/internal/cdn/vercel.js.map +1 -0
  116. package/dist/internal/code-unit-order.d.ts +4 -0
  117. package/dist/internal/code-unit-order.d.ts.map +1 -0
  118. package/dist/internal/code-unit-order.js +6 -0
  119. package/dist/internal/code-unit-order.js.map +1 -0
  120. package/dist/internal/codegen.d.ts.map +1 -1
  121. package/dist/internal/codegen.js +141 -25
  122. package/dist/internal/codegen.js.map +1 -1
  123. package/dist/internal/dev-csp.d.ts +24 -0
  124. package/dist/internal/dev-csp.d.ts.map +1 -0
  125. package/dist/internal/dev-csp.js +160 -0
  126. package/dist/internal/dev-csp.js.map +1 -0
  127. package/dist/internal/dev-reserved.d.ts +25 -0
  128. package/dist/internal/dev-reserved.d.ts.map +1 -0
  129. package/dist/internal/dev-reserved.js +39 -0
  130. package/dist/internal/dev-reserved.js.map +1 -0
  131. package/dist/internal/html-spans.d.ts +10 -0
  132. package/dist/internal/html-spans.d.ts.map +1 -0
  133. package/dist/internal/html-spans.js +46 -0
  134. package/dist/internal/html-spans.js.map +1 -0
  135. package/dist/internal/loading-runtime.d.ts +44 -0
  136. package/dist/internal/loading-runtime.d.ts.map +1 -0
  137. package/dist/internal/loading-runtime.js +206 -0
  138. package/dist/internal/loading-runtime.js.map +1 -0
  139. package/dist/internal/matches-runtime.d.ts +8 -0
  140. package/dist/internal/matches-runtime.d.ts.map +1 -0
  141. package/dist/internal/matches-runtime.js +61 -0
  142. package/dist/internal/matches-runtime.js.map +1 -0
  143. package/dist/internal/mount-shadow.d.ts +36 -0
  144. package/dist/internal/mount-shadow.d.ts.map +1 -0
  145. package/dist/internal/mount-shadow.js +65 -0
  146. package/dist/internal/mount-shadow.js.map +1 -0
  147. package/dist/internal/node-builtins.d.ts +3 -0
  148. package/dist/internal/node-builtins.d.ts.map +1 -0
  149. package/dist/internal/node-builtins.js +79 -0
  150. package/dist/internal/node-builtins.js.map +1 -0
  151. package/dist/internal/output-guard.d.ts +65 -0
  152. package/dist/internal/output-guard.d.ts.map +1 -0
  153. package/dist/internal/output-guard.js +630 -0
  154. package/dist/internal/output-guard.js.map +1 -0
  155. package/dist/internal/page-execution.d.ts +20 -8
  156. package/dist/internal/page-execution.d.ts.map +1 -1
  157. package/dist/internal/page-execution.js +571 -105
  158. package/dist/internal/page-execution.js.map +1 -1
  159. package/dist/internal/parity.d.ts +21 -0
  160. package/dist/internal/parity.d.ts.map +1 -1
  161. package/dist/internal/parity.js +104 -22
  162. package/dist/internal/parity.js.map +1 -1
  163. package/dist/internal/private-env.d.ts +12 -0
  164. package/dist/internal/private-env.d.ts.map +1 -0
  165. package/dist/internal/private-env.js +335 -0
  166. package/dist/internal/private-env.js.map +1 -0
  167. package/dist/internal/public-url.d.ts +3 -0
  168. package/dist/internal/public-url.d.ts.map +1 -0
  169. package/dist/internal/public-url.js +18 -0
  170. package/dist/internal/public-url.js.map +1 -0
  171. package/dist/internal/render-document.d.ts +25 -19
  172. package/dist/internal/render-document.d.ts.map +1 -1
  173. package/dist/internal/render-document.js +77 -61
  174. package/dist/internal/render-document.js.map +1 -1
  175. package/dist/internal/response-controls.d.ts +75 -0
  176. package/dist/internal/response-controls.d.ts.map +1 -0
  177. package/dist/internal/response-controls.js +256 -0
  178. package/dist/internal/response-controls.js.map +1 -0
  179. package/dist/internal/runtime-contract.d.ts +11 -16
  180. package/dist/internal/runtime-contract.d.ts.map +1 -1
  181. package/dist/internal/runtime-contract.js.map +1 -1
  182. package/dist/internal/secret-scan.d.ts +104 -0
  183. package/dist/internal/secret-scan.d.ts.map +1 -0
  184. package/dist/internal/secret-scan.js +503 -0
  185. package/dist/internal/secret-scan.js.map +1 -0
  186. package/dist/internal/server-boundary.d.ts +6 -29
  187. package/dist/internal/server-boundary.d.ts.map +1 -1
  188. package/dist/internal/server-boundary.js +6 -66
  189. package/dist/internal/server-boundary.js.map +1 -1
  190. package/dist/internal/source-map.d.ts +47 -0
  191. package/dist/internal/source-map.d.ts.map +1 -0
  192. package/dist/internal/source-map.js +225 -0
  193. package/dist/internal/source-map.js.map +1 -0
  194. package/dist/internal/target-compat.d.ts +27 -0
  195. package/dist/internal/target-compat.d.ts.map +1 -0
  196. package/dist/internal/target-compat.js +77 -0
  197. package/dist/internal/target-compat.js.map +1 -0
  198. package/dist/internal/timing-safe-equal.d.ts +6 -0
  199. package/dist/internal/timing-safe-equal.d.ts.map +1 -1
  200. package/dist/internal/timing-safe-equal.js +10 -0
  201. package/dist/internal/timing-safe-equal.js.map +1 -1
  202. package/dist/internal/vitals-runtime.d.ts +18 -0
  203. package/dist/internal/vitals-runtime.d.ts.map +1 -0
  204. package/dist/internal/vitals-runtime.js +38 -0
  205. package/dist/internal/vitals-runtime.js.map +1 -0
  206. package/dist/internal/web-app.d.ts +38 -9
  207. package/dist/internal/web-app.d.ts.map +1 -1
  208. package/dist/internal/web-app.js +199 -59
  209. package/dist/internal/web-app.js.map +1 -1
  210. package/dist/internal/zone-graph.d.ts +89 -0
  211. package/dist/internal/zone-graph.d.ts.map +1 -0
  212. package/dist/internal/zone-graph.js +492 -0
  213. package/dist/internal/zone-graph.js.map +1 -0
  214. package/dist/isr.d.ts +83 -6
  215. package/dist/isr.d.ts.map +1 -1
  216. package/dist/isr.js +263 -36
  217. package/dist/isr.js.map +1 -1
  218. package/dist/llms-txt.d.ts.map +1 -1
  219. package/dist/llms-txt.js +31 -6
  220. package/dist/llms-txt.js.map +1 -1
  221. package/dist/manifest.d.ts +220 -13
  222. package/dist/manifest.d.ts.map +1 -1
  223. package/dist/manifest.js +394 -9
  224. package/dist/manifest.js.map +1 -1
  225. package/dist/module-graph.d.ts +26 -5
  226. package/dist/module-graph.d.ts.map +1 -1
  227. package/dist/module-graph.js +17 -7
  228. package/dist/module-graph.js.map +1 -1
  229. package/dist/navigation.d.ts +17 -3
  230. package/dist/navigation.d.ts.map +1 -1
  231. package/dist/navigation.js +11 -5
  232. package/dist/navigation.js.map +1 -1
  233. package/dist/nonce.d.ts +47 -0
  234. package/dist/nonce.d.ts.map +1 -0
  235. package/dist/nonce.js +63 -0
  236. package/dist/nonce.js.map +1 -0
  237. package/dist/plugins/css-modules.d.ts.map +1 -1
  238. package/dist/plugins/css-modules.js +4 -3
  239. package/dist/plugins/css-modules.js.map +1 -1
  240. package/dist/plugins/kit.d.ts +9 -0
  241. package/dist/plugins/kit.d.ts.map +1 -1
  242. package/dist/plugins/kit.js +18 -0
  243. package/dist/plugins/kit.js.map +1 -1
  244. package/dist/plugins/svg.d.ts +22 -3
  245. package/dist/plugins/svg.d.ts.map +1 -1
  246. package/dist/plugins/svg.js +112 -1
  247. package/dist/plugins/svg.js.map +1 -1
  248. package/dist/plugins/vite-leak-guard.d.ts +107 -3
  249. package/dist/plugins/vite-leak-guard.d.ts.map +1 -1
  250. package/dist/plugins/vite-leak-guard.js +378 -17
  251. package/dist/plugins/vite-leak-guard.js.map +1 -1
  252. package/dist/plugins/vite-zone-guard.d.ts +61 -0
  253. package/dist/plugins/vite-zone-guard.d.ts.map +1 -0
  254. package/dist/plugins/vite-zone-guard.js +208 -0
  255. package/dist/plugins/vite-zone-guard.js.map +1 -0
  256. package/dist/plugins/zone-guard.d.ts +27 -0
  257. package/dist/plugins/zone-guard.d.ts.map +1 -0
  258. package/dist/plugins/zone-guard.js +80 -0
  259. package/dist/plugins/zone-guard.js.map +1 -0
  260. package/dist/prerender.d.ts +10 -0
  261. package/dist/prerender.d.ts.map +1 -1
  262. package/dist/prerender.js +35 -3
  263. package/dist/prerender.js.map +1 -1
  264. package/dist/public-dir.d.ts +9 -0
  265. package/dist/public-dir.d.ts.map +1 -1
  266. package/dist/public-dir.js +67 -9
  267. package/dist/public-dir.js.map +1 -1
  268. package/dist/pwa-manifest.d.ts +68 -0
  269. package/dist/pwa-manifest.d.ts.map +1 -0
  270. package/dist/pwa-manifest.js +178 -0
  271. package/dist/pwa-manifest.js.map +1 -0
  272. package/dist/query.js +4 -4
  273. package/dist/query.js.map +1 -1
  274. package/dist/render-seam.d.ts +42 -2
  275. package/dist/render-seam.d.ts.map +1 -1
  276. package/dist/render-seam.js +6 -0
  277. package/dist/render-seam.js.map +1 -1
  278. package/dist/route-manifest.d.ts +3 -0
  279. package/dist/route-manifest.d.ts.map +1 -1
  280. package/dist/route-manifest.js +26 -3
  281. package/dist/route-manifest.js.map +1 -1
  282. package/dist/route-types.d.ts +24 -0
  283. package/dist/route-types.d.ts.map +1 -0
  284. package/dist/route-types.js +195 -0
  285. package/dist/route-types.js.map +1 -0
  286. package/dist/router.d.ts +28 -6
  287. package/dist/router.d.ts.map +1 -1
  288. package/dist/router.js +129 -40
  289. package/dist/router.js.map +1 -1
  290. package/dist/vitals.d.ts +33 -0
  291. package/dist/vitals.d.ts.map +1 -0
  292. package/dist/vitals.js +16 -0
  293. package/dist/vitals.js.map +1 -0
  294. package/dist/vite.d.ts +16 -1
  295. package/dist/vite.d.ts.map +1 -1
  296. package/dist/vite.js +248 -43
  297. package/dist/vite.js.map +1 -1
  298. package/dist/zones.d.ts +70 -0
  299. package/dist/zones.d.ts.map +1 -0
  300. package/dist/zones.js +365 -0
  301. package/dist/zones.js.map +1 -0
  302. package/package.json +67 -14
  303. package/src/backend-only.ts +16 -0
  304. package/src/boundary.ts +18 -5
  305. package/src/build-plan.ts +90 -35
  306. package/src/build-vite.ts +77 -11
  307. package/src/build.ts +466 -96
  308. package/src/bun-dev-entry.ts +1 -1
  309. package/src/cdn.ts +216 -0
  310. package/src/client.ts +135 -36
  311. package/src/conformance.ts +16 -3
  312. package/src/csp.ts +194 -0
  313. package/src/dev-client.ts +349 -0
  314. package/src/dev-diagnostics.ts +60 -7
  315. package/src/dev-error.ts +49 -5
  316. package/src/dev-feed.ts +1140 -0
  317. package/src/dev-indicator.ts +113 -0
  318. package/src/dev-session.ts +729 -0
  319. package/src/dev-sourcemap.ts +281 -0
  320. package/src/dev-ssr-graph.ts +16 -5
  321. package/src/dev.ts +86 -43
  322. package/src/diagnostic-catalog.ts +243 -0
  323. package/src/diagnostic-prompt.ts +355 -0
  324. package/src/diagnostic.ts +63 -66
  325. package/src/draft.ts +4 -1
  326. package/src/fn.ts +19 -3
  327. package/src/fs.ts +13 -2
  328. package/src/index.ts +42 -10
  329. package/src/internal/cdn/cloudflare.ts +146 -0
  330. package/src/internal/cdn/core.ts +316 -0
  331. package/src/internal/cdn/fastly.ts +62 -0
  332. package/src/internal/cdn/vercel.ts +95 -0
  333. package/src/internal/code-unit-order.ts +5 -0
  334. package/src/internal/codegen.ts +161 -24
  335. package/src/internal/dev-csp.ts +176 -0
  336. package/src/internal/dev-reserved.ts +52 -0
  337. package/src/internal/html-spans.ts +50 -0
  338. package/src/internal/loading-runtime.ts +244 -0
  339. package/src/internal/matches-runtime.ts +62 -0
  340. package/src/internal/mount-shadow.ts +88 -0
  341. package/src/internal/node-builtins.ts +79 -0
  342. package/src/internal/output-guard.ts +701 -0
  343. package/src/internal/page-execution.ts +795 -185
  344. package/src/internal/parity.ts +150 -36
  345. package/src/internal/private-env.ts +334 -0
  346. package/src/internal/public-url.ts +22 -0
  347. package/src/internal/render-document.ts +114 -67
  348. package/src/internal/response-controls.ts +284 -0
  349. package/src/internal/runtime-contract.ts +10 -15
  350. package/src/internal/secret-scan.ts +638 -0
  351. package/src/internal/server-boundary.ts +6 -69
  352. package/src/internal/source-map.ts +256 -0
  353. package/src/internal/target-compat.ts +92 -0
  354. package/src/internal/timing-safe-equal.ts +13 -0
  355. package/src/internal/vitals-runtime.ts +53 -0
  356. package/src/internal/web-app.ts +262 -84
  357. package/src/internal/zone-graph.ts +593 -0
  358. package/src/isr.ts +325 -37
  359. package/src/llms-txt.ts +28 -4
  360. package/src/manifest.ts +682 -16
  361. package/src/module-graph.ts +53 -9
  362. package/src/navigation.ts +29 -6
  363. package/src/nonce.ts +104 -0
  364. package/src/plugins/css-modules.ts +5 -3
  365. package/src/plugins/kit.ts +24 -0
  366. package/src/plugins/svg.ts +135 -4
  367. package/src/plugins/vite-leak-guard.ts +529 -16
  368. package/src/plugins/vite-zone-guard.ts +263 -0
  369. package/src/plugins/zone-guard.ts +119 -0
  370. package/src/prerender.ts +49 -3
  371. package/src/public-dir.ts +69 -8
  372. package/src/pwa-manifest.ts +226 -0
  373. package/src/query.ts +4 -4
  374. package/src/render-seam.ts +46 -1
  375. package/src/route-manifest.ts +15 -3
  376. package/src/route-types.ts +264 -0
  377. package/src/router.ts +163 -63
  378. package/src/vitals.ts +44 -0
  379. package/src/vite.ts +257 -42
  380. package/src/zones.ts +430 -0
  381. package/dist/plugins/vite-server-only.d.ts +0 -49
  382. package/dist/plugins/vite-server-only.d.ts.map +0 -1
  383. package/dist/plugins/vite-server-only.js +0 -57
  384. package/dist/plugins/vite-server-only.js.map +0 -1
  385. package/dist/server-only.d.ts +0 -21
  386. package/dist/server-only.d.ts.map +0 -1
  387. package/dist/server-only.js +0 -25
  388. package/dist/server-only.js.map +0 -1
  389. package/src/plugins/vite-server-only.ts +0 -75
  390. package/src/server-only.ts +0 -25
@@ -0,0 +1,220 @@
1
+ const BASE32 = "abcdefghijklmnopqrstuvwxyz234567";
2
+ function base32(bytes) {
3
+ let out = "";
4
+ let bits = 0;
5
+ let value = 0;
6
+ for (const byte of bytes) {
7
+ value = (value << 8) | byte;
8
+ bits += 8;
9
+ while (bits >= 5) {
10
+ out += BASE32[(value >>> (bits - 5)) & 31];
11
+ bits -= 5;
12
+ }
13
+ }
14
+ if (bits > 0)
15
+ out += BASE32[(value << (5 - bits)) & 31];
16
+ return out;
17
+ }
18
+ /**
19
+ * The tag every page a CDN stores carries for its own path, so a path purge works on CDNs that only
20
+ * purge by tag. It hashes the normalized pathname alone: the query and the host stay out, so one purge
21
+ * reaches every query variant and needs no knowledge of the public origin. Two hosts serving the same
22
+ * path share the tag, which can only make a purge reach more than asked, never serve a wrong page.
23
+ */
24
+ export async function pathTag(path) {
25
+ const cut = path.search(/[?#]/);
26
+ // Joined as text, never resolved: `//host/x` stays a path, as the revalidation endpoint keys it.
27
+ const pathname = new URL(`http://n${cut === -1 ? path : path.slice(0, cut)}`).pathname;
28
+ const digest = await crypto.subtle.digest("SHA-256", new TextEncoder().encode(pathname));
29
+ return `nifra.p:${base32(new Uint8Array(digest)).slice(0, 26)}`;
30
+ }
31
+ /** `Retry-After` as milliseconds: delta seconds or an HTTP date; undefined when absent or unreadable. */
32
+ export function retryAfterMs(value, now = Date.now()) {
33
+ if (value === null)
34
+ return undefined;
35
+ const trimmed = value.trim();
36
+ if (/^\d+$/.test(trimmed))
37
+ return Number(trimmed) * 1000;
38
+ const at = Date.parse(trimmed);
39
+ return Number.isNaN(at) ? undefined : Math.max(0, at - now);
40
+ }
41
+ /** A purge API reply read the same way for every HTTP provider. */
42
+ export function attemptFromStatus(res, reason) {
43
+ if (res.ok)
44
+ return { ok: true };
45
+ const retryAfter = retryAfterMs(res.headers.get("retry-after"));
46
+ if (res.status === 429) {
47
+ return {
48
+ ok: false,
49
+ retryable: true,
50
+ rateLimited: true,
51
+ reason: "rate_limited",
52
+ retryAfterMs: retryAfter,
53
+ };
54
+ }
55
+ if (res.status >= 500) {
56
+ return {
57
+ ok: false,
58
+ retryable: true,
59
+ reason: `${reason}_${res.status}`,
60
+ retryAfterMs: retryAfter,
61
+ };
62
+ }
63
+ return { ok: false, retryable: false, reason: `${reason}_${res.status}` };
64
+ }
65
+ /** `max-age=..., stale-while-revalidate=...[, stale-if-error=...]` for a CDN TTL header. */
66
+ export function cdnDirectives(input) {
67
+ const parts = [`max-age=${input.maxAge}`, `stale-while-revalidate=${input.staleWhileRevalidate}`];
68
+ if (input.staleIfError !== undefined)
69
+ parts.push(`stale-if-error=${input.staleIfError}`);
70
+ return parts.join(", ");
71
+ }
72
+ function positive(value, fallback, name) {
73
+ if (value === undefined)
74
+ return fallback;
75
+ if (!Number.isFinite(value) || value < 0) {
76
+ throw new RangeError(`[nifra/web/cdn] ${name} must be a finite non-negative number`);
77
+ }
78
+ return value;
79
+ }
80
+ /**
81
+ * A {@link CdnProvider} from a provider's API calls, with the purge queue in front: tags arriving
82
+ * within `debounceMs` go out together, chunked to the provider's per-call limit and sent one call at
83
+ * a time; a 429 or 5xx is retried with capped exponential backoff that honors `Retry-After`. A
84
+ * `purge` resolves once its tags' first attempt is answered: `accepted`, `queued` (a retry is
85
+ * pending, kept alive with `platform.waitUntil` on edge runtimes), or `failed`.
86
+ */
87
+ export function defineCdnProvider(definition, options = {}) {
88
+ const debounceMs = positive(options.debounceMs, 250, "debounceMs");
89
+ const maxAttempts = Math.max(1, Math.floor(positive(options.maxAttempts, 5, "maxAttempts")));
90
+ const maxBackoffMs = positive(options.maxBackoffMs, 60_000, "maxBackoffMs");
91
+ const maxQueuedTags = positive(options.maxQueuedTags, 5000, "maxQueuedTags");
92
+ const sleep = options.sleep ?? ((ms) => new Promise((r) => setTimeout(r, ms)));
93
+ const report = options.onError ??
94
+ ((error) => console.error(`[nifra/web/cdn] ${error.code}: ${error.provider} refused a purge of ${error.tags} tag(s) (${error.reason})${error.final ? "" : "; retrying"}`));
95
+ let pending = new Set();
96
+ let waiters = [];
97
+ let scheduled = false;
98
+ let retrying = 0;
99
+ // Flushes run one after another, so the provider sees one purge call at a time from this queue.
100
+ let tail = Promise.resolve();
101
+ const attempt = async (chunk) => {
102
+ try {
103
+ return await definition.purgeTags(chunk);
104
+ }
105
+ catch {
106
+ // The provider's own error text can quote the request; only the kind leaves this function.
107
+ return { ok: false, retryable: true, reason: "network_error" };
108
+ }
109
+ };
110
+ const refusal = (chunk, result, final) => {
111
+ try {
112
+ report({
113
+ code: result.rateLimited === true ? "NIFRA_CDN_RATE_LIMITED" : "NIFRA_CDN_PURGE_FAILED",
114
+ provider: definition.name,
115
+ reason: result.reason,
116
+ tags: chunk.length,
117
+ final,
118
+ });
119
+ }
120
+ catch {
121
+ // A reporter that throws must not strand the purge or the callers waiting on it.
122
+ }
123
+ };
124
+ const retry = async (chunk, first) => {
125
+ retrying += chunk.length;
126
+ try {
127
+ let last = first;
128
+ for (let n = 2; n <= maxAttempts; n++) {
129
+ const backoff = Math.min(maxBackoffMs, 1000 * 2 ** (n - 2));
130
+ await sleep(Math.min(maxBackoffMs, Math.max(backoff, last.retryAfterMs ?? 0)));
131
+ const result = await attempt(chunk);
132
+ if (result.ok)
133
+ return;
134
+ last = result;
135
+ if (!result.retryable || n === maxAttempts) {
136
+ refusal(chunk, result, true);
137
+ return;
138
+ }
139
+ refusal(chunk, result, false);
140
+ }
141
+ }
142
+ finally {
143
+ retrying -= chunk.length;
144
+ }
145
+ };
146
+ const flush = async () => {
147
+ const batch = [...pending];
148
+ const settled = waiters;
149
+ pending = new Set();
150
+ waiters = [];
151
+ scheduled = false;
152
+ const states = new Map();
153
+ const background = [];
154
+ for (let i = 0; i < batch.length; i += definition.tagsPerCall) {
155
+ const chunk = batch.slice(i, i + definition.tagsPerCall);
156
+ const result = await attempt(chunk);
157
+ let state;
158
+ if (result.ok)
159
+ state = { state: "accepted" };
160
+ else if (result.retryable && maxAttempts > 1) {
161
+ refusal(chunk, result, false);
162
+ background.push(retry(chunk, result));
163
+ state = { state: "queued" };
164
+ }
165
+ else {
166
+ refusal(chunk, result, true);
167
+ state = { state: "failed", retryable: result.retryable, reason: result.reason };
168
+ }
169
+ for (const tag of chunk)
170
+ states.set(tag, state);
171
+ }
172
+ const retries = background.length === 0 ? undefined : Promise.all(background);
173
+ for (const waiter of settled) {
174
+ if (retries !== undefined)
175
+ waiter.platform?.waitUntil?.(retries);
176
+ let failed;
177
+ let queued = false;
178
+ for (const tag of waiter.tags) {
179
+ const state = states.get(tag);
180
+ if (state?.state === "failed")
181
+ failed = failed?.retryable === false ? failed : state;
182
+ else if (state?.state === "queued")
183
+ queued = true;
184
+ }
185
+ waiter.resolve(failed !== undefined
186
+ ? { cdn: "failed", retryable: failed.retryable, error: failed.reason }
187
+ : queued
188
+ ? { cdn: "queued", retryable: true }
189
+ : { cdn: "accepted", retryable: false });
190
+ }
191
+ };
192
+ return {
193
+ name: definition.name,
194
+ maxResponseTags: definition.maxResponseTags,
195
+ cacheHeaders: (input) => definition.cacheHeaders(input),
196
+ noStoreHeaders: () => definition.noStoreHeaders(),
197
+ async purge(target, platform) {
198
+ const tags = new Set(target.tags ?? []);
199
+ for (const path of target.paths ?? [])
200
+ tags.add(await pathTag(path));
201
+ if (tags.size === 0)
202
+ return { cdn: "accepted", retryable: false };
203
+ if (pending.size + retrying + tags.size > maxQueuedTags) {
204
+ return { cdn: "failed", retryable: true, error: "queue_full" };
205
+ }
206
+ const outcome = new Promise((resolve) => {
207
+ for (const tag of tags)
208
+ pending.add(tag);
209
+ waiters.push({ tags, platform, resolve });
210
+ });
211
+ if (!scheduled) {
212
+ scheduled = true;
213
+ tail = tail.then(() => sleep(debounceMs)).then(flush);
214
+ platform?.waitUntil?.(tail);
215
+ }
216
+ return outcome;
217
+ },
218
+ };
219
+ }
220
+ //# sourceMappingURL=core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../../../src/internal/cdn/core.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Fastly: `Surrogate-Key` (space-separated) and `Surrogate-Control`, purged in batches of up to 256
3
+ * keys. Soft purge by default, so a purged page is served stale while Fastly refetches it.
4
+ */
5
+ import { type CdnProvider, type PurgeQueueOptions } from "./core.js";
6
+ export interface FastlyOptions {
7
+ readonly serviceId: string;
8
+ /** A Fastly API token with the `purge_select` scope. Keep it in an env var. */
9
+ readonly apiToken: string;
10
+ /** Mark purged pages stale instead of dropping them. Default `true`. */
11
+ readonly soft?: boolean;
12
+ readonly queue?: PurgeQueueOptions;
13
+ /** The fetch purge calls go through; tests pass their own. */
14
+ readonly fetch?: typeof fetch;
15
+ }
16
+ export declare function fastly(options: FastlyOptions): CdnProvider;
17
+ //# sourceMappingURL=fastly.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fastly.d.ts","sourceRoot":"","sources":["../../../src/internal/cdn/fastly.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAEL,KAAK,WAAW,EAGhB,KAAK,iBAAiB,EACvB,MAAM,WAAW,CAAA;AAElB,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,+EAA+E;IAC/E,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,wEAAwE;IACxE,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,iBAAiB,CAAA;IAClC,8DAA8D;IAC9D,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAA;CAC9B;AAED,wBAAgB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,WAAW,CAsC1D"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Fastly: `Surrogate-Key` (space-separated) and `Surrogate-Control`, purged in batches of up to 256
3
+ * keys. Soft purge by default, so a purged page is served stale while Fastly refetches it.
4
+ */
5
+ import { attemptFromStatus, cdnDirectives, defineCdnProvider, } from "./core.js";
6
+ export function fastly(options) {
7
+ if (!/^[A-Za-z0-9]+$/.test(options.serviceId)) {
8
+ throw new TypeError("[nifra/web/cdn] fastly: serviceId must be the service's alphanumeric id");
9
+ }
10
+ if (typeof options.apiToken !== "string" || options.apiToken === "") {
11
+ throw new TypeError("[nifra/web/cdn] fastly: apiToken is empty (is the env var set?)");
12
+ }
13
+ const send = options.fetch ?? fetch;
14
+ const endpoint = `https://api.fastly.com/service/${options.serviceId}/purge`;
15
+ const soft = options.soft !== false;
16
+ return defineCdnProvider({
17
+ name: "fastly",
18
+ tagsPerCall: 256,
19
+ maxResponseTags: 1000,
20
+ cacheHeaders: (input) => ({
21
+ "surrogate-key": input.tags.join(" "),
22
+ "surrogate-control": cdnDirectives(input),
23
+ }),
24
+ noStoreHeaders: () => ({ "surrogate-control": "no-store" }),
25
+ async purgeTags(tags) {
26
+ const headers = {
27
+ "fastly-key": options.apiToken,
28
+ "content-type": "application/json",
29
+ accept: "application/json",
30
+ };
31
+ if (soft)
32
+ headers["fastly-soft-purge"] = "1";
33
+ const res = await send(endpoint, {
34
+ method: "POST",
35
+ headers,
36
+ body: JSON.stringify({ surrogate_keys: tags }),
37
+ });
38
+ await res.body?.cancel();
39
+ return attemptFromStatus(res, "fastly");
40
+ },
41
+ }, options.queue);
42
+ }
43
+ //# sourceMappingURL=fastly.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fastly.js","sourceRoot":"","sources":["../../../src/internal/cdn/fastly.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EACL,iBAAiB,EAEjB,aAAa,EACb,iBAAiB,GAElB,MAAM,WAAW,CAAA;AAalB,MAAM,UAAU,MAAM,CAAC,OAAsB;IAC3C,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,SAAS,CAAC,yEAAyE,CAAC,CAAA;IAChG,CAAC;IACD,IAAI,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ,IAAI,OAAO,CAAC,QAAQ,KAAK,EAAE,EAAE,CAAC;QACpE,MAAM,IAAI,SAAS,CAAC,iEAAiE,CAAC,CAAA;IACxF,CAAC;IACD,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,IAAI,KAAK,CAAA;IACnC,MAAM,QAAQ,GAAG,kCAAkC,OAAO,CAAC,SAAS,QAAQ,CAAA;IAC5E,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,KAAK,KAAK,CAAA;IACnC,OAAO,iBAAiB,CACtB;QACE,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,GAAG;QAChB,eAAe,EAAE,IAAI;QACrB,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACxB,eAAe,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;YACrC,mBAAmB,EAAE,aAAa,CAAC,KAAK,CAAC;SAC1C,CAAC;QACF,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,mBAAmB,EAAE,UAAU,EAAE,CAAC;QAC3D,KAAK,CAAC,SAAS,CAAC,IAAI;YAClB,MAAM,OAAO,GAA2B;gBACtC,YAAY,EAAE,OAAO,CAAC,QAAQ;gBAC9B,cAAc,EAAE,kBAAkB;gBAClC,MAAM,EAAE,kBAAkB;aAC3B,CAAA;YACD,IAAI,IAAI;gBAAE,OAAO,CAAC,mBAAmB,CAAC,GAAG,GAAG,CAAA;YAC5C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE;gBAC/B,MAAM,EAAE,MAAM;gBACd,OAAO;gBACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;aAC/C,CAAC,CAAA;YACF,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,CAAA;YACxB,OAAO,iBAAiB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;QACzC,CAAC;KACF,EACD,OAAO,CAAC,KAAK,CACd,CAAA;AACH,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Vercel's CDN: `Vercel-Cache-Tag` and `Vercel-CDN-Cache-Control`, both consumed by Vercel and kept
3
+ * from the browser. Tags are case-sensitive; at most 16 a purge call and 128 a response.
4
+ */
5
+ import { type CdnProvider, type PurgeQueueOptions } from "./core.js";
6
+ type TagPurge = (tags: string | string[]) => Promise<unknown>;
7
+ export type VercelOptions = ({
8
+ /** `invalidateByTag` from `@vercel/functions`: inside a Vercel Function, no token needed. */
9
+ readonly invalidateByTag: TagPurge;
10
+ /** `dangerouslyDeleteByTag` from `@vercel/functions`, for `mode: "delete"`. */
11
+ readonly dangerouslyDeleteByTag?: TagPurge;
12
+ } | {
13
+ /** A Vercel access token for the REST API. Keep it in an env var. */
14
+ readonly token: string;
15
+ readonly projectId: string;
16
+ readonly teamId?: string;
17
+ /** Purge one environment only; default both. */
18
+ readonly target?: "production" | "preview";
19
+ /** The fetch purge calls go through; tests pass their own. */
20
+ readonly fetch?: typeof fetch;
21
+ }) & {
22
+ /**
23
+ * `invalidate` (default) marks tagged pages stale: the next visitor gets the old page while Vercel
24
+ * refetches. `delete` drops them, so the next visitors wait on the origin together.
25
+ */
26
+ readonly mode?: "invalidate" | "delete";
27
+ readonly queue?: PurgeQueueOptions;
28
+ };
29
+ export declare function vercel(options: VercelOptions): CdnProvider;
30
+ export {};
31
+ //# sourceMappingURL=vercel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vercel.d.ts","sourceRoot":"","sources":["../../../src/internal/cdn/vercel.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAEL,KAAK,WAAW,EAGhB,KAAK,iBAAiB,EACvB,MAAM,WAAW,CAAA;AAElB,KAAK,QAAQ,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;AAE7D,MAAM,MAAM,aAAa,GAAG,CACxB;IACE,6FAA6F;IAC7F,QAAQ,CAAC,eAAe,EAAE,QAAQ,CAAA;IAClC,+EAA+E;IAC/E,QAAQ,CAAC,sBAAsB,CAAC,EAAE,QAAQ,CAAA;CAC3C,GACD;IACE,qEAAqE;IACrE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,gDAAgD;IAChD,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,SAAS,CAAA;IAC1C,8DAA8D;IAC9D,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAA;CAC9B,CACJ,GAAG;IACF;;;OAGG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,YAAY,GAAG,QAAQ,CAAA;IACvC,QAAQ,CAAC,KAAK,CAAC,EAAE,iBAAiB,CAAA;CACnC,CAAA;AAED,wBAAgB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,WAAW,CAsD1D"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Vercel's CDN: `Vercel-Cache-Tag` and `Vercel-CDN-Cache-Control`, both consumed by Vercel and kept
3
+ * from the browser. Tags are case-sensitive; at most 16 a purge call and 128 a response.
4
+ */
5
+ import { attemptFromStatus, cdnDirectives, defineCdnProvider, } from "./core.js";
6
+ export function vercel(options) {
7
+ const mode = options.mode ?? "invalidate";
8
+ let purgeTags;
9
+ if ("invalidateByTag" in options) {
10
+ const fn = mode === "delete" ? options.dangerouslyDeleteByTag : options.invalidateByTag;
11
+ if (typeof fn !== "function") {
12
+ throw new TypeError(`[nifra/web/cdn] vercel: pass ${mode === "delete" ? "dangerouslyDeleteByTag" : "invalidateByTag"} from @vercel/functions`);
13
+ }
14
+ purgeTags = async (tags) => {
15
+ await fn([...tags]);
16
+ return { ok: true };
17
+ };
18
+ }
19
+ else {
20
+ if (typeof options.token !== "string" || options.token === "") {
21
+ throw new TypeError("[nifra/web/cdn] vercel: token is empty (is the env var set?)");
22
+ }
23
+ if (typeof options.projectId !== "string" || options.projectId === "") {
24
+ throw new TypeError("[nifra/web/cdn] vercel: projectId is required");
25
+ }
26
+ const send = options.fetch ?? fetch;
27
+ const query = new URLSearchParams({ projectIdOrName: options.projectId });
28
+ if (options.teamId !== undefined)
29
+ query.set("teamId", options.teamId);
30
+ const path = mode === "delete" ? "dangerously-delete-by-tags" : "invalidate-by-tags";
31
+ const endpoint = `https://api.vercel.com/v1/edge-cache/${path}?${query}`;
32
+ const token = options.token;
33
+ const target = options.target;
34
+ purgeTags = async (tags) => {
35
+ const res = await send(endpoint, {
36
+ method: "POST",
37
+ headers: { authorization: `Bearer ${token}`, "content-type": "application/json" },
38
+ body: JSON.stringify(target === undefined ? { tags } : { tags, target }),
39
+ });
40
+ await res.body?.cancel();
41
+ return attemptFromStatus(res, "vercel");
42
+ };
43
+ }
44
+ return defineCdnProvider({
45
+ name: "vercel",
46
+ tagsPerCall: 16,
47
+ maxResponseTags: 128,
48
+ cacheHeaders: (input) => ({
49
+ "vercel-cache-tag": input.tags.join(","),
50
+ "vercel-cdn-cache-control": cdnDirectives(input),
51
+ }),
52
+ noStoreHeaders: () => ({ "vercel-cdn-cache-control": "no-store" }),
53
+ purgeTags,
54
+ }, options.queue);
55
+ }
56
+ //# sourceMappingURL=vercel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vercel.js","sourceRoot":"","sources":["../../../src/internal/cdn/vercel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ /** Code-unit order, the same on every runtime and in every locale. A build artifact or a report sorts
2
+ * with this, so its bytes and its order do not depend on the machine that produced it. */
3
+ export declare function codeUnitOrder(a: string, b: string): number;
4
+ //# sourceMappingURL=code-unit-order.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-unit-order.d.ts","sourceRoot":"","sources":["../../src/internal/code-unit-order.ts"],"names":[],"mappings":"AAAA;0FAC0F;AAC1F,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAE1D"}
@@ -0,0 +1,6 @@
1
+ /** Code-unit order, the same on every runtime and in every locale. A build artifact or a report sorts
2
+ * with this, so its bytes and its order do not depend on the machine that produced it. */
3
+ export function codeUnitOrder(a, b) {
4
+ return a < b ? -1 : a > b ? 1 : 0;
5
+ }
6
+ //# sourceMappingURL=code-unit-order.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-unit-order.js","sourceRoot":"","sources":["../../src/internal/code-unit-order.ts"],"names":[],"mappings":"AAAA;0FAC0F;AAC1F,MAAM,UAAU,aAAa,CAAC,CAAS,EAAE,CAAS;IAChD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACnC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"codegen.d.ts","sourceRoot":"","sources":["../../src/internal/codegen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAA4C,MAAM,oBAAoB,CAAA;AAElG,OAAO,KAAK,EAAe,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAU3D,MAAM,WAAW,0BAA0B;IACzC;;;;;;;;;OASG;IACH,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,6FAA6F;IAC7F,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAA;CAC3C;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,0BAA0B,GAClC,MAAM,CA4MR;AAED,MAAM,WAAW,+BAA+B;IAC9C;;qEAEiE;IACjE,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAA;IAC1C;gHAC4G;IAC5G,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CACzB;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,+BAA+B,GACvC,MAAM,CAuBR;AAED,MAAM,WAAW,6BAA6B;IAC5C;6DACyD;IACzD,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAA;IAC1C;4EACwE;IACxE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B;;+FAE2F;IAC3F,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAA;IAC/C;uFACmF;IACnF,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,GAAG,SAAS,CAAA;IAC9E,+FAA+F;IAC/F,QAAQ,CAAC,UAAU,CAAC,EAAE,cAAc,CAAA;IACpC;;;2FAGuF;IACvF,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CACxB;AAyBD,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,6BAA6B,GACrC,MAAM,CAsER"}
1
+ {"version":3,"file":"codegen.d.ts","sourceRoot":"","sources":["../../src/internal/codegen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAA4C,MAAM,oBAAoB,CAAA;AAElG,OAAO,KAAK,EAAe,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAsB3D,MAAM,WAAW,0BAA0B;IACzC;;;;;;;;;OASG;IACH,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,6FAA6F;IAC7F,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAA;CAC3C;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,0BAA0B,GAClC,MAAM,CAkTR;AAED,MAAM,WAAW,+BAA+B;IAC9C;;qEAEiE;IACjE,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAA;IAC1C;gHAC4G;IAC5G,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CACzB;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,+BAA+B,GACvC,MAAM,CAuBR;AAED,MAAM,WAAW,6BAA6B;IAC5C;6DACyD;IACzD,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAA;IAC1C;4EACwE;IACxE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B;;+FAE2F;IAC3F,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAA;IAC/C;uFACmF;IACnF,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,GAAG,SAAS,CAAA;IAC9E,+FAA+F;IAC/F,QAAQ,CAAC,UAAU,CAAC,EAAE,cAAc,CAAA;IACpC;;;2FAGuF;IACvF,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CACxB;AAgCD,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,6BAA6B,GACrC,MAAM,CAsFR"}