devflare 1.0.0-next.5 → 1.0.0-next.51

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 (596) hide show
  1. package/LICENSE +21 -0
  2. package/LLM.md +17312 -2139
  3. package/README.md +397 -605
  4. package/bin/devflare.js +30 -14
  5. package/dist/_chunks/account-Csog80ie.js +462 -0
  6. package/dist/_chunks/account-resources-CsmVowJp.js +159 -0
  7. package/dist/_chunks/ai-CBEuLdoP.js +322 -0
  8. package/dist/_chunks/api-TzdliH-6.js +568 -0
  9. package/dist/_chunks/build-Ccza8VQz.js +24 -0
  10. package/dist/_chunks/build-artifacts-BNssqhxE.js +483 -0
  11. package/dist/_chunks/cli-CU7wSG1-.js +1163 -0
  12. package/dist/_chunks/cloudflare-BaloqI3H.js +157 -0
  13. package/dist/_chunks/colors-DiK6wPJ5.js +13 -0
  14. package/dist/_chunks/command-utils-_bGRraDR.js +45 -0
  15. package/dist/_chunks/compiler-BtLp9T9N.js +500 -0
  16. package/dist/_chunks/config-QU8UEWmA.js +78 -0
  17. package/dist/_chunks/config-path-1yI7BiDU.js +42 -0
  18. package/dist/_chunks/context-CX50Y2Kb.js +2250 -0
  19. package/dist/_chunks/decorators-QmV57ixr.js +19 -0
  20. package/dist/_chunks/dependencies-C2oxFjU_.js +57 -0
  21. package/dist/_chunks/deploy-aifBaMVv.js +1032 -0
  22. package/dist/_chunks/dev-DF_3baGr.js +3483 -0
  23. package/dist/_chunks/doctor-tR9kGT_Z.js +219 -0
  24. package/dist/_chunks/durable-object-DMtH0XYX.js +234 -0
  25. package/dist/_chunks/env-S0_nMVz1.js +125 -0
  26. package/dist/_chunks/family-DKPp4wqj.js +143 -0
  27. package/dist/_chunks/generated-artifacts-dMJY4KAt.js +32 -0
  28. package/dist/_chunks/glob-CmQOvunB.js +56 -0
  29. package/dist/_chunks/init-DnkJOmpW.js +165 -0
  30. package/dist/_chunks/loader-OQ2AWpqm.js +1308 -0
  31. package/dist/_chunks/local-dev-vars-CTSa-wvF.js +81 -0
  32. package/dist/_chunks/local-hyperdrive-CJ90j46O.js +119 -0
  33. package/dist/_chunks/local-media-bindings-DsAW4AMF.js +335 -0
  34. package/dist/_chunks/local-secrets-CYoHfvQ1.js +123 -0
  35. package/dist/_chunks/local-workflow-entrypoints-8d_mXh8T.js +90 -0
  36. package/dist/_chunks/login-rVWUZOKC.js +51 -0
  37. package/dist/_chunks/package-metadata-DjHBLB-z.js +39 -0
  38. package/dist/_chunks/preferences-BKp_7XJx.js +241 -0
  39. package/dist/_chunks/preview-C3Cdr8an.js +462 -0
  40. package/dist/_chunks/preview-registry-ClAbLTHH.js +1186 -0
  41. package/dist/_chunks/preview-resources-DRWR0gaB.js +359 -0
  42. package/dist/_chunks/previews-BxNq8Y_J.js +1134 -0
  43. package/dist/_chunks/productions-DK7xwbEs.js +411 -0
  44. package/dist/_chunks/ref-CYJNAAe_.js +178 -0
  45. package/dist/_chunks/remote-CZnP-HLJ.js +79 -0
  46. package/dist/_chunks/remote-config-D39BY9ji.js +132 -0
  47. package/dist/_chunks/resolve-package-qizBfCIm.js +152 -0
  48. package/dist/_chunks/rolldown-runtime-CvQ6eiug.js +14 -0
  49. package/dist/_chunks/routes-B6XiI8Sa.js +851 -0
  50. package/dist/_chunks/runtime-DL-Nz3k8.js +550 -0
  51. package/dist/_chunks/schema-normalization-GjhTATHL.js +666 -0
  52. package/dist/_chunks/secrets-qT1JaBGt.js +95 -0
  53. package/dist/_chunks/tail-CuWI04BL.js +239 -0
  54. package/dist/_chunks/token-Dmi0KXyX.js +333 -0
  55. package/dist/_chunks/tokens-iVcgNXi-.js +221 -0
  56. package/dist/_chunks/types-BquPXsFg.js +484 -0
  57. package/dist/_chunks/ui-BUoZApvE.js +103 -0
  58. package/dist/_chunks/usage-BBTGzjon.js +272 -0
  59. package/dist/_chunks/vite-D_wLDGBs.js +1267 -0
  60. package/dist/_chunks/vite-utils-OVLMV605.js +183 -0
  61. package/dist/_chunks/worker-DEF-e8LL.js +410 -0
  62. package/dist/_chunks/worker-bundler-dTTnYU3n.js +458 -0
  63. package/dist/_chunks/worker-entrypoint-CQW77lG8.js +247 -0
  64. package/dist/_chunks/workerName-CFJsLZA-.js +23 -0
  65. package/dist/bridge/client.d.ts +49 -7
  66. package/dist/bridge/client.d.ts.map +1 -1
  67. package/dist/bridge/gateway-runtime.d.ts +8 -0
  68. package/dist/bridge/gateway-runtime.d.ts.map +1 -0
  69. package/dist/bridge/index.d.ts +6 -6
  70. package/dist/bridge/index.d.ts.map +1 -1
  71. package/dist/bridge/log.d.ts +5 -0
  72. package/dist/bridge/log.d.ts.map +1 -0
  73. package/dist/bridge/miniflare.d.ts +85 -2
  74. package/dist/bridge/miniflare.d.ts.map +1 -1
  75. package/dist/bridge/proxy.d.ts +12 -11
  76. package/dist/bridge/proxy.d.ts.map +1 -1
  77. package/dist/bridge/server.d.ts +2 -1
  78. package/dist/bridge/server.d.ts.map +1 -1
  79. package/dist/bridge/v2/body-streams.d.ts +53 -0
  80. package/dist/bridge/v2/body-streams.d.ts.map +1 -0
  81. package/dist/bridge/v2/codec.d.ts +106 -0
  82. package/dist/bridge/v2/codec.d.ts.map +1 -0
  83. package/dist/bridge/v2/control-messages.d.ts +46 -0
  84. package/dist/bridge/v2/control-messages.d.ts.map +1 -0
  85. package/dist/bridge/v2/frames.d.ts +109 -0
  86. package/dist/bridge/v2/frames.d.ts.map +1 -0
  87. package/dist/bridge/v2/index.d.ts +11 -0
  88. package/dist/bridge/v2/index.d.ts.map +1 -0
  89. package/dist/bridge/v2/serialization.d.ts +48 -0
  90. package/dist/bridge/v2/serialization.d.ts.map +1 -0
  91. package/dist/bridge/v2/transport.d.ts +31 -0
  92. package/dist/bridge/v2/transport.d.ts.map +1 -0
  93. package/dist/bridge/v2/value-codec.d.ts +61 -0
  94. package/dist/bridge/v2/value-codec.d.ts.map +1 -0
  95. package/dist/bridge/{serialization.d.ts → v2/value-serialization.d.ts} +40 -18
  96. package/dist/bridge/v2/value-serialization.d.ts.map +1 -0
  97. package/dist/bridge/{protocol.d.ts → v2/wire.d.ts} +32 -8
  98. package/dist/bridge/v2/wire.d.ts.map +1 -0
  99. package/dist/bridge/v2/ws-relay.d.ts +53 -0
  100. package/dist/bridge/v2/ws-relay.d.ts.map +1 -0
  101. package/dist/browser-shim/handler.d.ts +2 -2
  102. package/dist/browser-shim/handler.d.ts.map +1 -1
  103. package/dist/browser-shim/index.d.ts +2 -2
  104. package/dist/browser-shim/server.d.ts +63 -0
  105. package/dist/browser-shim/server.d.ts.map +1 -1
  106. package/dist/browser.d.ts +5705 -0
  107. package/dist/browser.d.ts.map +1 -0
  108. package/dist/browser.js +80 -0
  109. package/dist/bundler/defaults.d.ts +23 -0
  110. package/dist/bundler/defaults.d.ts.map +1 -0
  111. package/dist/bundler/do-bundler.d.ts +7 -0
  112. package/dist/bundler/do-bundler.d.ts.map +1 -1
  113. package/dist/bundler/index.d.ts +3 -1
  114. package/dist/bundler/index.d.ts.map +1 -1
  115. package/dist/bundler/rolldown-shared.d.ts +53 -0
  116. package/dist/bundler/rolldown-shared.d.ts.map +1 -0
  117. package/dist/bundler/worker-bundler.d.ts +13 -0
  118. package/dist/bundler/worker-bundler.d.ts.map +1 -0
  119. package/dist/bundler/worker-compat.d.ts +4 -0
  120. package/dist/bundler/worker-compat.d.ts.map +1 -0
  121. package/dist/cli/build-manifest.d.ts +66 -0
  122. package/dist/cli/build-manifest.d.ts.map +1 -0
  123. package/dist/cli/command-utils.d.ts +18 -0
  124. package/dist/cli/command-utils.d.ts.map +1 -0
  125. package/dist/cli/commands/account.d.ts +2 -2
  126. package/dist/cli/commands/account.d.ts.map +1 -1
  127. package/dist/cli/commands/ai.d.ts +1 -1
  128. package/dist/cli/commands/ai.d.ts.map +1 -1
  129. package/dist/cli/commands/build-artifacts.d.ts +40 -0
  130. package/dist/cli/commands/build-artifacts.d.ts.map +1 -0
  131. package/dist/cli/commands/build.d.ts +2 -2
  132. package/dist/cli/commands/build.d.ts.map +1 -1
  133. package/dist/cli/commands/config.d.ts +4 -0
  134. package/dist/cli/commands/config.d.ts.map +1 -0
  135. package/dist/cli/commands/deploy/metadata.d.ts +18 -0
  136. package/dist/cli/commands/deploy/metadata.d.ts.map +1 -0
  137. package/dist/cli/commands/deploy/prepare.d.ts +23 -0
  138. package/dist/cli/commands/deploy/prepare.d.ts.map +1 -0
  139. package/dist/cli/commands/deploy/runtime.d.ts +4 -0
  140. package/dist/cli/commands/deploy/runtime.d.ts.map +1 -0
  141. package/dist/cli/commands/deploy/verification.d.ts +36 -0
  142. package/dist/cli/commands/deploy/verification.d.ts.map +1 -0
  143. package/dist/cli/commands/deploy.d.ts +2 -2
  144. package/dist/cli/commands/deploy.d.ts.map +1 -1
  145. package/dist/cli/commands/dev.d.ts +9 -1
  146. package/dist/cli/commands/dev.d.ts.map +1 -1
  147. package/dist/cli/commands/doctor.d.ts +2 -2
  148. package/dist/cli/commands/doctor.d.ts.map +1 -1
  149. package/dist/cli/commands/init.d.ts +2 -2
  150. package/dist/cli/commands/init.d.ts.map +1 -1
  151. package/dist/cli/commands/login.d.ts +4 -0
  152. package/dist/cli/commands/login.d.ts.map +1 -0
  153. package/dist/cli/commands/previews-support/cleanup.d.ts +9 -0
  154. package/dist/cli/commands/previews-support/cleanup.d.ts.map +1 -0
  155. package/dist/cli/commands/previews-support/family.d.ts +10 -0
  156. package/dist/cli/commands/previews-support/family.d.ts.map +1 -0
  157. package/dist/cli/commands/previews-support/render.d.ts +8 -0
  158. package/dist/cli/commands/previews-support/render.d.ts.map +1 -0
  159. package/dist/cli/commands/previews-support/theme.d.ts +10 -0
  160. package/dist/cli/commands/previews-support/theme.d.ts.map +1 -0
  161. package/dist/cli/commands/previews-support/types.d.ts +70 -0
  162. package/dist/cli/commands/previews-support/types.d.ts.map +1 -0
  163. package/dist/cli/commands/previews.d.ts +4 -0
  164. package/dist/cli/commands/previews.d.ts.map +1 -0
  165. package/dist/cli/commands/productions.d.ts +4 -0
  166. package/dist/cli/commands/productions.d.ts.map +1 -0
  167. package/dist/cli/commands/remote.d.ts +1 -1
  168. package/dist/cli/commands/remote.d.ts.map +1 -1
  169. package/dist/cli/commands/secrets.d.ts +4 -0
  170. package/dist/cli/commands/secrets.d.ts.map +1 -0
  171. package/dist/cli/commands/tail.d.ts +44 -0
  172. package/dist/cli/commands/tail.d.ts.map +1 -0
  173. package/dist/cli/commands/token.d.ts +4 -0
  174. package/dist/cli/commands/token.d.ts.map +1 -0
  175. package/dist/cli/commands/type-generation/discovery.d.ts +7 -0
  176. package/dist/cli/commands/type-generation/discovery.d.ts.map +1 -0
  177. package/dist/cli/commands/type-generation/generator.d.ts +121 -0
  178. package/dist/cli/commands/type-generation/generator.d.ts.map +1 -0
  179. package/dist/cli/commands/type-generation/models.d.ts +27 -0
  180. package/dist/cli/commands/type-generation/models.d.ts.map +1 -0
  181. package/dist/cli/commands/types.d.ts +2 -2
  182. package/dist/cli/commands/types.d.ts.map +1 -1
  183. package/dist/cli/commands/worker.d.ts +4 -0
  184. package/dist/cli/commands/worker.d.ts.map +1 -0
  185. package/dist/cli/config-path.d.ts +6 -0
  186. package/dist/cli/config-path.d.ts.map +1 -0
  187. package/dist/cli/dependencies.d.ts +2 -1
  188. package/dist/cli/dependencies.d.ts.map +1 -1
  189. package/dist/cli/deploy-strategy.d.ts +17 -0
  190. package/dist/cli/deploy-strategy.d.ts.map +1 -0
  191. package/dist/cli/deploy-target.d.ts +17 -0
  192. package/dist/cli/deploy-target.d.ts.map +1 -0
  193. package/dist/cli/generated-artifacts.d.ts +12 -0
  194. package/dist/cli/generated-artifacts.d.ts.map +1 -0
  195. package/dist/cli/gradual-deploy.d.ts +49 -0
  196. package/dist/cli/gradual-deploy.d.ts.map +1 -0
  197. package/dist/cli/help-pages/pages/account.d.ts +3 -0
  198. package/dist/cli/help-pages/pages/account.d.ts.map +1 -0
  199. package/dist/cli/help-pages/pages/core.d.ts +4 -0
  200. package/dist/cli/help-pages/pages/core.d.ts.map +1 -0
  201. package/dist/cli/help-pages/pages/index.d.ts +3 -0
  202. package/dist/cli/help-pages/pages/index.d.ts.map +1 -0
  203. package/dist/cli/help-pages/pages/misc.d.ts +3 -0
  204. package/dist/cli/help-pages/pages/misc.d.ts.map +1 -0
  205. package/dist/cli/help-pages/pages/previews.d.ts +3 -0
  206. package/dist/cli/help-pages/pages/previews.d.ts.map +1 -0
  207. package/dist/cli/help-pages/pages/productions.d.ts +3 -0
  208. package/dist/cli/help-pages/pages/productions.d.ts.map +1 -0
  209. package/dist/cli/help-pages/render.d.ts +12 -0
  210. package/dist/cli/help-pages/render.d.ts.map +1 -0
  211. package/dist/cli/help-pages/shared.d.ts +15 -0
  212. package/dist/cli/help-pages/shared.d.ts.map +1 -0
  213. package/dist/cli/help-pages/types.d.ts +23 -0
  214. package/dist/cli/help-pages/types.d.ts.map +1 -0
  215. package/dist/cli/help.d.ts +6 -0
  216. package/dist/cli/help.d.ts.map +1 -0
  217. package/dist/cli/index.d.ts +1 -0
  218. package/dist/cli/index.d.ts.map +1 -1
  219. package/dist/cli/index.js +2 -0
  220. package/dist/cli/package-metadata.d.ts +16 -0
  221. package/dist/cli/package-metadata.d.ts.map +1 -0
  222. package/dist/cli/preview-bindings.d.ts +49 -0
  223. package/dist/cli/preview-bindings.d.ts.map +1 -0
  224. package/dist/cli/preview.d.ts +10 -0
  225. package/dist/cli/preview.d.ts.map +1 -0
  226. package/dist/cli/ui.d.ts +37 -0
  227. package/dist/cli/ui.d.ts.map +1 -0
  228. package/dist/cli/workspace-build-guard.d.ts +14 -0
  229. package/dist/cli/workspace-build-guard.d.ts.map +1 -0
  230. package/dist/cli/wrangler-auth.d.ts +1 -1
  231. package/dist/cloudflare/account-core.d.ts +6 -0
  232. package/dist/cloudflare/account-core.d.ts.map +1 -0
  233. package/dist/cloudflare/account-resources.d.ts +40 -0
  234. package/dist/cloudflare/account-resources.d.ts.map +1 -0
  235. package/dist/cloudflare/account-status.d.ts +11 -0
  236. package/dist/cloudflare/account-status.d.ts.map +1 -0
  237. package/dist/cloudflare/account-workers.d.ts +14 -0
  238. package/dist/cloudflare/account-workers.d.ts.map +1 -0
  239. package/dist/cloudflare/account.d.ts +7 -64
  240. package/dist/cloudflare/account.d.ts.map +1 -1
  241. package/dist/cloudflare/api.d.ts +71 -3
  242. package/dist/cloudflare/api.d.ts.map +1 -1
  243. package/dist/cloudflare/auth.d.ts +1 -1
  244. package/dist/cloudflare/auth.d.ts.map +1 -1
  245. package/dist/cloudflare/index.d.ts +61 -6
  246. package/dist/cloudflare/index.d.ts.map +1 -1
  247. package/dist/cloudflare/index.js +4 -13
  248. package/dist/cloudflare/known-permission-group-ids.generated.d.ts +10 -0
  249. package/dist/cloudflare/known-permission-group-ids.generated.d.ts.map +1 -0
  250. package/dist/cloudflare/kv-namespace.d.ts +4 -0
  251. package/dist/cloudflare/kv-namespace.d.ts.map +1 -0
  252. package/dist/cloudflare/preferences.d.ts +7 -0
  253. package/dist/cloudflare/preferences.d.ts.map +1 -1
  254. package/dist/cloudflare/preview-registry-cache.d.ts +6 -0
  255. package/dist/cloudflare/preview-registry-cache.d.ts.map +1 -0
  256. package/dist/cloudflare/preview-registry-inference.d.ts +14 -0
  257. package/dist/cloudflare/preview-registry-inference.d.ts.map +1 -0
  258. package/dist/cloudflare/preview-registry-records.d.ts +4 -0
  259. package/dist/cloudflare/preview-registry-records.d.ts.map +1 -0
  260. package/dist/cloudflare/preview-registry-shape.d.ts +47 -0
  261. package/dist/cloudflare/preview-registry-shape.d.ts.map +1 -0
  262. package/dist/cloudflare/preview-registry-store.d.ts +14 -0
  263. package/dist/cloudflare/preview-registry-store.d.ts.map +1 -0
  264. package/dist/cloudflare/preview-registry-transport.d.ts +4 -0
  265. package/dist/cloudflare/preview-registry-transport.d.ts.map +1 -0
  266. package/dist/cloudflare/preview-registry-types.d.ts +103 -0
  267. package/dist/cloudflare/preview-registry-types.d.ts.map +1 -0
  268. package/dist/cloudflare/preview-registry.d.ts +42 -0
  269. package/dist/cloudflare/preview-registry.d.ts.map +1 -0
  270. package/dist/cloudflare/preview-urls.d.ts +3 -0
  271. package/dist/cloudflare/preview-urls.d.ts.map +1 -0
  272. package/dist/cloudflare/registry-schema.d.ts +253 -0
  273. package/dist/cloudflare/registry-schema.d.ts.map +1 -0
  274. package/dist/cloudflare/remote-config.d.ts.map +1 -1
  275. package/dist/cloudflare/tokens.d.ts +44 -0
  276. package/dist/cloudflare/tokens.d.ts.map +1 -0
  277. package/dist/cloudflare/types.d.ts +124 -7
  278. package/dist/cloudflare/types.d.ts.map +1 -1
  279. package/dist/cloudflare/usage.d.ts +31 -3
  280. package/dist/cloudflare/usage.d.ts.map +1 -1
  281. package/dist/config/binding-resolution-helpers.d.ts +41 -0
  282. package/dist/config/binding-resolution-helpers.d.ts.map +1 -0
  283. package/dist/config/compatibility.d.ts +3 -0
  284. package/dist/config/compatibility.d.ts.map +1 -0
  285. package/dist/config/compiler/bindings.d.ts +14 -0
  286. package/dist/config/compiler/bindings.d.ts.map +1 -0
  287. package/dist/config/compiler/core-helpers.d.ts +6 -0
  288. package/dist/config/compiler/core-helpers.d.ts.map +1 -0
  289. package/dist/config/compiler/do-workers.d.ts +34 -0
  290. package/dist/config/compiler/do-workers.d.ts.map +1 -0
  291. package/dist/config/compiler/paths.d.ts +18 -0
  292. package/dist/config/compiler/paths.d.ts.map +1 -0
  293. package/dist/config/compiler/types.d.ts +309 -0
  294. package/dist/config/compiler/types.d.ts.map +1 -0
  295. package/dist/config/compiler.d.ts +22 -134
  296. package/dist/config/compiler.d.ts.map +1 -1
  297. package/dist/config/cron.d.ts +19 -0
  298. package/dist/config/cron.d.ts.map +1 -0
  299. package/dist/config/define.d.ts +8 -5
  300. package/dist/config/define.d.ts.map +1 -1
  301. package/dist/config/deploy-resources.d.ts +58 -0
  302. package/dist/config/deploy-resources.d.ts.map +1 -0
  303. package/dist/config/env-vars.d.ts +309 -0
  304. package/dist/config/env-vars.d.ts.map +1 -0
  305. package/dist/config/framework-providers.d.ts +9 -0
  306. package/dist/config/framework-providers.d.ts.map +1 -0
  307. package/dist/config/index.d.ts +12 -5
  308. package/dist/config/index.d.ts.map +1 -1
  309. package/dist/config/loader.d.ts +2 -1
  310. package/dist/config/loader.d.ts.map +1 -1
  311. package/dist/config/local-dev-vars.d.ts +15 -0
  312. package/dist/config/local-dev-vars.d.ts.map +1 -0
  313. package/dist/config/preview-resources.d.ts +83 -0
  314. package/dist/config/preview-resources.d.ts.map +1 -0
  315. package/dist/config/preview.d.ts +29 -0
  316. package/dist/config/preview.d.ts.map +1 -0
  317. package/dist/config/ref.d.ts +16 -25
  318. package/dist/config/ref.d.ts.map +1 -1
  319. package/dist/config/resolve-phased.d.ts +72 -0
  320. package/dist/config/resolve-phased.d.ts.map +1 -0
  321. package/dist/config/resolve.d.ts +11 -0
  322. package/dist/config/resolve.d.ts.map +1 -0
  323. package/dist/config/resource-resolution.d.ts +80 -0
  324. package/dist/config/resource-resolution.d.ts.map +1 -0
  325. package/dist/config/schema-bindings.d.ts +2087 -0
  326. package/dist/config/schema-bindings.d.ts.map +1 -0
  327. package/dist/config/schema-build.d.ts +67 -0
  328. package/dist/config/schema-build.d.ts.map +1 -0
  329. package/dist/config/schema-env.d.ts +3771 -0
  330. package/dist/config/schema-env.d.ts.map +1 -0
  331. package/dist/config/schema-normalization.d.ts +267 -0
  332. package/dist/config/schema-normalization.d.ts.map +1 -0
  333. package/dist/config/schema-runtime.d.ts +557 -0
  334. package/dist/config/schema-runtime.d.ts.map +1 -0
  335. package/dist/config/schema-types-bindings-platform.d.ts +520 -0
  336. package/dist/config/schema-types-bindings-platform.d.ts.map +1 -0
  337. package/dist/config/schema-types-bindings-resources.d.ts +802 -0
  338. package/dist/config/schema-types-bindings-resources.d.ts.map +1 -0
  339. package/dist/config/schema-types-bindings.d.ts +293 -0
  340. package/dist/config/schema-types-bindings.d.ts.map +1 -0
  341. package/dist/config/schema-types-build.d.ts +86 -0
  342. package/dist/config/schema-types-build.d.ts.map +1 -0
  343. package/dist/config/schema-types-runtime-server.d.ts +122 -0
  344. package/dist/config/schema-types-runtime-server.d.ts.map +1 -0
  345. package/dist/config/schema-types-runtime.d.ts +913 -0
  346. package/dist/config/schema-types-runtime.d.ts.map +1 -0
  347. package/dist/config/schema-types.d.ts +458 -0
  348. package/dist/config/schema-types.d.ts.map +1 -0
  349. package/dist/config/schema.d.ts +5699 -2021
  350. package/dist/config/schema.d.ts.map +1 -1
  351. package/dist/config/service-bindings-validation.d.ts +36 -0
  352. package/dist/config/service-bindings-validation.d.ts.map +1 -0
  353. package/dist/config-entry.d.ts +7 -0
  354. package/dist/config-entry.d.ts.map +1 -0
  355. package/dist/config-entry.js +3 -0
  356. package/dist/decorators/durable-object.d.ts.map +1 -1
  357. package/dist/decorators/index.d.ts +2 -2
  358. package/dist/decorators/index.js +2 -9
  359. package/dist/dev-server/d1-migrations.d.ts +36 -0
  360. package/dist/dev-server/d1-migrations.d.ts.map +1 -0
  361. package/dist/dev-server/dev-server-state.d.ts +59 -0
  362. package/dist/dev-server/dev-server-state.d.ts.map +1 -0
  363. package/dist/dev-server/gateway-script.d.ts +21 -0
  364. package/dist/dev-server/gateway-script.d.ts.map +1 -0
  365. package/dist/dev-server/index.d.ts +1 -1
  366. package/dist/dev-server/miniflare-bindings.d.ts +90 -0
  367. package/dist/dev-server/miniflare-bindings.d.ts.map +1 -0
  368. package/dist/dev-server/miniflare-dev-config.d.ts +36 -0
  369. package/dist/dev-server/miniflare-dev-config.d.ts.map +1 -0
  370. package/dist/dev-server/miniflare-log.d.ts +20 -0
  371. package/dist/dev-server/miniflare-log.d.ts.map +1 -0
  372. package/dist/dev-server/miniflare-worker-config.d.ts +93 -0
  373. package/dist/dev-server/miniflare-worker-config.d.ts.map +1 -0
  374. package/dist/dev-server/reload-queue.d.ts +13 -0
  375. package/dist/dev-server/reload-queue.d.ts.map +1 -0
  376. package/dist/dev-server/runtime-stdio.d.ts +8 -0
  377. package/dist/dev-server/runtime-stdio.d.ts.map +1 -0
  378. package/dist/dev-server/server-startup-helpers.d.ts +84 -0
  379. package/dist/dev-server/server-startup-helpers.d.ts.map +1 -0
  380. package/dist/dev-server/server.d.ts +2 -0
  381. package/dist/dev-server/server.d.ts.map +1 -1
  382. package/dist/dev-server/vite-process.d.ts +15 -0
  383. package/dist/dev-server/vite-process.d.ts.map +1 -0
  384. package/dist/dev-server/vite-utils.d.ts +19 -1
  385. package/dist/dev-server/vite-utils.d.ts.map +1 -1
  386. package/dist/dev-server/worker-source-watcher.d.ts +17 -0
  387. package/dist/dev-server/worker-source-watcher.d.ts.map +1 -0
  388. package/dist/dev-server/worker-surface-paths.d.ts +6 -0
  389. package/dist/dev-server/worker-surface-paths.d.ts.map +1 -0
  390. package/dist/env.d.ts +10 -0
  391. package/dist/env.d.ts.map +1 -1
  392. package/dist/index.d.ts +8 -12
  393. package/dist/index.d.ts.map +1 -1
  394. package/dist/index.js +9 -298
  395. package/dist/runtime/context-events.d.ts +13 -0
  396. package/dist/runtime/context-events.d.ts.map +1 -0
  397. package/dist/runtime/context-types.d.ts +82 -0
  398. package/dist/runtime/context-types.d.ts.map +1 -0
  399. package/dist/runtime/context.d.ts +20 -44
  400. package/dist/runtime/context.d.ts.map +1 -1
  401. package/dist/runtime/exports.d.ts +70 -55
  402. package/dist/runtime/exports.d.ts.map +1 -1
  403. package/dist/runtime/index.d.ts +10 -3
  404. package/dist/runtime/index.d.ts.map +1 -1
  405. package/dist/runtime/index.js +5 -111
  406. package/dist/runtime/middleware.d.ts +119 -67
  407. package/dist/runtime/middleware.d.ts.map +1 -1
  408. package/dist/runtime/router/index.d.ts +7 -0
  409. package/dist/runtime/router/index.d.ts.map +1 -0
  410. package/dist/runtime/router/types.d.ts +24 -0
  411. package/dist/runtime/router/types.d.ts.map +1 -0
  412. package/dist/runtime/validation.d.ts +18 -4
  413. package/dist/runtime/validation.d.ts.map +1 -1
  414. package/dist/secrets/local-secrets.d.ts +46 -0
  415. package/dist/secrets/local-secrets.d.ts.map +1 -0
  416. package/dist/shims/local-hyperdrive.d.ts +12 -0
  417. package/dist/shims/local-hyperdrive.d.ts.map +1 -0
  418. package/dist/shims/local-media-bindings.d.ts +19 -0
  419. package/dist/shims/local-media-bindings.d.ts.map +1 -0
  420. package/dist/shims/local-worker-loader.d.ts +3 -0
  421. package/dist/shims/local-worker-loader.d.ts.map +1 -0
  422. package/dist/sveltekit/index.d.ts +1 -1
  423. package/dist/sveltekit/index.d.ts.map +1 -1
  424. package/dist/sveltekit/index.js +313 -167
  425. package/dist/sveltekit/local-bindings.d.ts +4 -0
  426. package/dist/sveltekit/local-bindings.d.ts.map +1 -0
  427. package/dist/sveltekit/platform.d.ts +20 -2
  428. package/dist/sveltekit/platform.d.ts.map +1 -1
  429. package/dist/test/ai-search.d.ts +39 -0
  430. package/dist/test/ai-search.d.ts.map +1 -0
  431. package/dist/test/alarm.d.ts +55 -0
  432. package/dist/test/alarm.d.ts.map +1 -0
  433. package/dist/test/binding-hints.d.ts +10 -0
  434. package/dist/test/binding-hints.d.ts.map +1 -0
  435. package/dist/test/cf.d.ts +71 -35
  436. package/dist/test/cf.d.ts.map +1 -1
  437. package/dist/test/containers.d.ts +87 -0
  438. package/dist/test/containers.d.ts.map +1 -0
  439. package/dist/test/email.d.ts +16 -7
  440. package/dist/test/email.d.ts.map +1 -1
  441. package/dist/test/index.d.ts +20 -21
  442. package/dist/test/index.d.ts.map +1 -1
  443. package/dist/test/index.js +4981 -70
  444. package/dist/test/offline-bindings.d.ts +115 -0
  445. package/dist/test/offline-bindings.d.ts.map +1 -0
  446. package/dist/test/queue.d.ts.map +1 -1
  447. package/dist/test/remote-ai.d.ts.map +1 -1
  448. package/dist/test/remote-cloudflare.d.ts +13 -0
  449. package/dist/test/remote-cloudflare.d.ts.map +1 -0
  450. package/dist/test/remote-vectorize.d.ts.map +1 -1
  451. package/dist/test/resolve-service-bindings.d.ts +64 -4
  452. package/dist/test/resolve-service-bindings.d.ts.map +1 -1
  453. package/dist/test/scheduled.d.ts.map +1 -1
  454. package/dist/test/should-skip.d.ts +14 -18
  455. package/dist/test/should-skip.d.ts.map +1 -1
  456. package/dist/test/simple-context-bindings.d.ts +13 -0
  457. package/dist/test/simple-context-bindings.d.ts.map +1 -0
  458. package/dist/test/simple-context-durable-objects.d.ts +6 -0
  459. package/dist/test/simple-context-durable-objects.d.ts.map +1 -0
  460. package/dist/test/simple-context-env.d.ts +35 -0
  461. package/dist/test/simple-context-env.d.ts.map +1 -0
  462. package/dist/test/simple-context-gateway-script.d.ts +2 -0
  463. package/dist/test/simple-context-gateway-script.d.ts.map +1 -0
  464. package/dist/test/simple-context-handlers.d.ts +12 -0
  465. package/dist/test/simple-context-handlers.d.ts.map +1 -0
  466. package/dist/test/simple-context-lifecycle.d.ts +32 -0
  467. package/dist/test/simple-context-lifecycle.d.ts.map +1 -0
  468. package/dist/test/simple-context-mfconfig.d.ts +10 -0
  469. package/dist/test/simple-context-mfconfig.d.ts.map +1 -0
  470. package/dist/test/simple-context-multi-worker.d.ts +16 -0
  471. package/dist/test/simple-context-multi-worker.d.ts.map +1 -0
  472. package/dist/test/simple-context-paths.d.ts +40 -0
  473. package/dist/test/simple-context-paths.d.ts.map +1 -0
  474. package/dist/test/simple-context-runtime.d.ts +19 -0
  475. package/dist/test/simple-context-runtime.d.ts.map +1 -0
  476. package/dist/test/simple-context-startup.d.ts +11 -0
  477. package/dist/test/simple-context-startup.d.ts.map +1 -0
  478. package/dist/test/simple-context-transport.d.ts +14 -0
  479. package/dist/test/simple-context-transport.d.ts.map +1 -0
  480. package/dist/test/simple-context.d.ts +8 -27
  481. package/dist/test/simple-context.d.ts.map +1 -1
  482. package/dist/test/tail.d.ts +3 -2
  483. package/dist/test/tail.d.ts.map +1 -1
  484. package/dist/test/utilities/analytics-engine.d.ts +22 -0
  485. package/dist/test/utilities/analytics-engine.d.ts.map +1 -0
  486. package/dist/test/utilities/artifacts.d.ts +11 -0
  487. package/dist/test/utilities/artifacts.d.ts.map +1 -0
  488. package/dist/test/utilities/context.d.ts +39 -0
  489. package/dist/test/utilities/context.d.ts.map +1 -0
  490. package/dist/test/utilities/d1.d.ts +21 -0
  491. package/dist/test/utilities/d1.d.ts.map +1 -0
  492. package/dist/test/utilities/env.d.ts +43 -0
  493. package/dist/test/utilities/env.d.ts.map +1 -0
  494. package/dist/test/utilities/kv.d.ts +11 -0
  495. package/dist/test/utilities/kv.d.ts.map +1 -0
  496. package/dist/test/utilities/media.d.ts +16 -0
  497. package/dist/test/utilities/media.d.ts.map +1 -0
  498. package/dist/test/utilities/platform.d.ts +41 -0
  499. package/dist/test/utilities/platform.d.ts.map +1 -0
  500. package/dist/test/utilities/queue.d.ts +5 -0
  501. package/dist/test/utilities/queue.d.ts.map +1 -0
  502. package/dist/test/utilities/r2.d.ts +2 -0
  503. package/dist/test/utilities/r2.d.ts.map +1 -0
  504. package/dist/test/utilities/stream-flagship.d.ts +27 -0
  505. package/dist/test/utilities/stream-flagship.d.ts.map +1 -0
  506. package/dist/test/utilities/vectorize.d.ts +38 -0
  507. package/dist/test/utilities/vectorize.d.ts.map +1 -0
  508. package/dist/test/utilities/workflows.d.ts +26 -0
  509. package/dist/test/utilities/workflows.d.ts.map +1 -0
  510. package/dist/test/utilities.d.ts +13 -98
  511. package/dist/test/utilities.d.ts.map +1 -1
  512. package/dist/test/worker.d.ts +6 -0
  513. package/dist/test/worker.d.ts.map +1 -1
  514. package/dist/transform/durable-object.d.ts.map +1 -1
  515. package/dist/transform/index.d.ts +2 -2
  516. package/dist/transform/worker-entrypoint.d.ts +5 -0
  517. package/dist/transform/worker-entrypoint.d.ts.map +1 -1
  518. package/dist/utils/entrypoint-discovery.d.ts +6 -3
  519. package/dist/utils/entrypoint-discovery.d.ts.map +1 -1
  520. package/dist/utils/glob.d.ts.map +1 -1
  521. package/dist/utils/resolve-package.d.ts.map +1 -1
  522. package/dist/utils/send-email.d.ts +15 -0
  523. package/dist/utils/send-email.d.ts.map +1 -0
  524. package/dist/utils/send-email.js +163 -0
  525. package/dist/vite/config-file.d.ts +25 -0
  526. package/dist/vite/config-file.d.ts.map +1 -0
  527. package/dist/vite/index.d.ts +3 -2
  528. package/dist/vite/index.d.ts.map +1 -1
  529. package/dist/vite/index.js +2 -339
  530. package/dist/vite/plugin-config-hook.d.ts +28 -0
  531. package/dist/vite/plugin-config-hook.d.ts.map +1 -0
  532. package/dist/vite/plugin-context.d.ts +27 -0
  533. package/dist/vite/plugin-context.d.ts.map +1 -0
  534. package/dist/vite/plugin-durable-objects.d.ts +18 -0
  535. package/dist/vite/plugin-durable-objects.d.ts.map +1 -0
  536. package/dist/vite/plugin-programmatic.d.ts +44 -0
  537. package/dist/vite/plugin-programmatic.d.ts.map +1 -0
  538. package/dist/vite/plugin-service-bindings.d.ts +13 -0
  539. package/dist/vite/plugin-service-bindings.d.ts.map +1 -0
  540. package/dist/vite/plugin-transform.d.ts +41 -0
  541. package/dist/vite/plugin-transform.d.ts.map +1 -0
  542. package/dist/vite/plugin.d.ts +10 -41
  543. package/dist/vite/plugin.d.ts.map +1 -1
  544. package/dist/worker-entry/composed-worker.d.ts +7 -0
  545. package/dist/worker-entry/composed-worker.d.ts.map +1 -0
  546. package/dist/worker-entry/durable-object-discovery.d.ts +20 -0
  547. package/dist/worker-entry/durable-object-discovery.d.ts.map +1 -0
  548. package/dist/worker-entry/extensions.d.ts +5 -0
  549. package/dist/worker-entry/extensions.d.ts.map +1 -0
  550. package/dist/worker-entry/routes.d.ts +22 -0
  551. package/dist/worker-entry/routes.d.ts.map +1 -0
  552. package/dist/worker-entry/surface-paths.d.ts +26 -0
  553. package/dist/worker-entry/surface-paths.d.ts.map +1 -0
  554. package/dist/worker-entry/validate-fetch-style.d.ts +12 -0
  555. package/dist/worker-entry/validate-fetch-style.d.ts.map +1 -0
  556. package/dist/workflows/local-workflow-entrypoints.d.ts +7 -0
  557. package/dist/workflows/local-workflow-entrypoints.d.ts.map +1 -0
  558. package/package.json +159 -116
  559. package/R2.md +0 -170
  560. package/dist/account-rvrj687w.js +0 -397
  561. package/dist/ai-dx4fr9jh.js +0 -107
  562. package/dist/bridge/protocol.d.ts.map +0 -1
  563. package/dist/bridge/serialization.d.ts.map +0 -1
  564. package/dist/browser-shim/worker.d.ts +0 -14
  565. package/dist/browser-shim/worker.d.ts.map +0 -1
  566. package/dist/build-mnf6v8gd.js +0 -53
  567. package/dist/deploy-nhceck39.js +0 -70
  568. package/dist/dev-b9dmrj7b.js +0 -2417
  569. package/dist/doctor-fmgb3d28.js +0 -190
  570. package/dist/durable-object-t4kbb0yt.js +0 -13
  571. package/dist/index-07q6yxyc.js +0 -168
  572. package/dist/index-18hvb6gb.js +0 -194
  573. package/dist/index-1xpj0m4r.js +0 -57
  574. package/dist/index-37x76zdn.js +0 -4
  575. package/dist/index-3t6rypgc.js +0 -13
  576. package/dist/index-67qcae0f.js +0 -183
  577. package/dist/index-a855bdsx.js +0 -18
  578. package/dist/index-d8bdkx2h.js +0 -109
  579. package/dist/index-ep3445yc.js +0 -2225
  580. package/dist/index-gz1gndna.js +0 -307
  581. package/dist/index-hcex3rgh.js +0 -266
  582. package/dist/index-m2q41jwa.js +0 -462
  583. package/dist/index-n7rs26ft.js +0 -77
  584. package/dist/index-pf5s73n9.js +0 -1413
  585. package/dist/index-rbht7m9r.js +0 -36
  586. package/dist/index-tfyxa77h.js +0 -850
  587. package/dist/index-tk6ej9dj.js +0 -94
  588. package/dist/index-z14anrqp.js +0 -226
  589. package/dist/init-f9mgmew3.js +0 -186
  590. package/dist/remote-q59qk463.js +0 -97
  591. package/dist/test/bridge-context.d.ts +0 -76
  592. package/dist/test/bridge-context.d.ts.map +0 -1
  593. package/dist/test/multi-worker-context.d.ts +0 -114
  594. package/dist/test/multi-worker-context.d.ts.map +0 -1
  595. package/dist/types-5nyrz1sz.js +0 -454
  596. package/dist/worker-entrypoint-m9th0rg0.js +0 -13
@@ -0,0 +1,1134 @@
1
+ import { a as resolvePreviewIdentifier } from "./preview-C3Cdr8an.js";
2
+ import { i as resolveConfigPath, o as loadResolvedConfig, r as loadConfig, t as ConfigNotFoundError } from "./loader-OQ2AWpqm.js";
3
+ import { t as compileBuildConfig } from "./compiler-BtLp9T9N.js";
4
+ import { t as account } from "./cloudflare-BaloqI3H.js";
5
+ import { _ as yellowBold, a as cyanBold, d as green, f as logLine, g as yellow, h as whiteDim, m as red, n as bold, o as dim, r as createCliTheme, u as formatTableLine } from "./ui-BUoZApvE.js";
6
+ import { i as resolveNamedSelection, r as resolveCloudflareAccountId, t as asOptionalString } from "./command-utils-_bGRraDR.js";
7
+ import { t as getDependencies } from "./dependencies-C2oxFjU_.js";
8
+ import { t as cleanupPreviewScopedResources } from "./preview-resources-DRWR0gaB.js";
9
+ import { t as findConfigPathsUnderDirectory } from "./config-path-1yI7BiDU.js";
10
+ import { a as orderPreviewWorkerNamesForDeletion, i as collectConfiguredWorkerFamilies, n as buildPreviewWorkerCandidatesByScope, r as buildStableWorkerRowsFromLiveWorkers, t as buildPreviewScopeRowsFromLiveWorkers } from "./family-DKPp4wqj.js";
11
+ //#region src/cli/preview-bindings.ts
12
+ function normalizeCell(value) {
13
+ return (value ?? "").trim().replace(/\s+/g, " ");
14
+ }
15
+ function buildAssociationKey(type, resource) {
16
+ return `${normalizeCell(type).toLowerCase()}\u0000${normalizeCell(resource).toLowerCase()}`;
17
+ }
18
+ function uniqueStrings(values) {
19
+ return Array.from(new Set(values.filter((value) => value.trim().length > 0)));
20
+ }
21
+ function formatSendEmailResource(entry) {
22
+ const destination = entry.destination_address?.trim();
23
+ if (destination) return destination;
24
+ const destinations = uniqueStrings(entry.allowed_destination_addresses ?? []);
25
+ const senders = uniqueStrings(entry.allowed_sender_addresses ?? []);
26
+ const destinationLabel = destinations.length > 0 ? destinations.join(", ") : "configured destinations";
27
+ if (senders.length === 0) return destinationLabel;
28
+ return `${destinationLabel} - senders: ${senders.join(", ")}`;
29
+ }
30
+ function addAssociationTarget(targets, input) {
31
+ const type = normalizeCell(input.type);
32
+ const resource = normalizeCell(input.resource);
33
+ const key = buildAssociationKey(type, resource);
34
+ const existing = targets.get(key);
35
+ if (existing) {
36
+ if (input.reference) existing.referenceLabels = uniqueStrings([...existing.referenceLabels, input.reference]);
37
+ if (input.note) existing.notes = uniqueStrings([...existing.notes, input.note]);
38
+ if (!existing.queueName && input.queueName) existing.queueName = input.queueName;
39
+ return;
40
+ }
41
+ targets.set(key, {
42
+ key,
43
+ referenceLabels: input.reference ? [input.reference] : [],
44
+ type,
45
+ resource,
46
+ notes: input.note ? [input.note] : [],
47
+ queueName: input.queueName
48
+ });
49
+ }
50
+ function collectBindingAssociationTargets(config) {
51
+ const compiled = compileBuildConfig(config);
52
+ const targets = /* @__PURE__ */ new Map();
53
+ for (const binding of compiled.kv_namespaces ?? []) addAssociationTarget(targets, {
54
+ reference: binding.binding,
55
+ type: "KV Namespace",
56
+ resource: "id" in binding ? binding.id : binding.name
57
+ });
58
+ for (const binding of compiled.d1_databases ?? []) addAssociationTarget(targets, {
59
+ reference: binding.binding,
60
+ type: "D1 Database",
61
+ resource: "database_id" in binding ? binding.database_id : binding.database_name
62
+ });
63
+ for (const binding of compiled.r2_buckets ?? []) addAssociationTarget(targets, {
64
+ reference: binding.binding,
65
+ type: "R2 Bucket",
66
+ resource: binding.bucket_name
67
+ });
68
+ for (const binding of compiled.durable_objects?.bindings ?? []) addAssociationTarget(targets, {
69
+ reference: binding.name,
70
+ type: "Durable Object Namespace",
71
+ resource: binding.class_name,
72
+ note: binding.script_name ? `script ${binding.script_name}` : void 0
73
+ });
74
+ for (const binding of compiled.queues?.producers ?? []) addAssociationTarget(targets, {
75
+ reference: binding.binding,
76
+ type: "Queue",
77
+ resource: binding.queue,
78
+ note: "producer binding",
79
+ queueName: binding.queue
80
+ });
81
+ for (const binding of compiled.queues?.consumers ?? []) {
82
+ addAssociationTarget(targets, {
83
+ type: "Queue",
84
+ resource: binding.queue,
85
+ note: "consumer attachment",
86
+ queueName: binding.queue
87
+ });
88
+ if (binding.dead_letter_queue) addAssociationTarget(targets, {
89
+ type: "Queue",
90
+ resource: binding.dead_letter_queue,
91
+ note: "dead letter queue",
92
+ queueName: binding.dead_letter_queue
93
+ });
94
+ }
95
+ for (const binding of compiled.ratelimits ?? []) addAssociationTarget(targets, {
96
+ reference: binding.name,
97
+ type: "Rate Limiting",
98
+ resource: binding.namespace_id
99
+ });
100
+ if (compiled.version_metadata) addAssociationTarget(targets, {
101
+ reference: compiled.version_metadata.binding,
102
+ type: "Version Metadata",
103
+ resource: "Version Metadata"
104
+ });
105
+ for (const binding of compiled.worker_loaders ?? []) addAssociationTarget(targets, {
106
+ reference: binding.binding,
107
+ type: "Worker Loader",
108
+ resource: "Worker Loader"
109
+ });
110
+ for (const binding of compiled.mtls_certificates ?? []) addAssociationTarget(targets, {
111
+ reference: binding.binding,
112
+ type: "mTLS Certificate",
113
+ resource: binding.certificate_id
114
+ });
115
+ for (const binding of compiled.dispatch_namespaces ?? []) addAssociationTarget(targets, {
116
+ reference: binding.binding,
117
+ type: "Dispatch Namespace",
118
+ resource: binding.namespace,
119
+ note: binding.outbound ? `outbound ${binding.outbound.service}` : void 0
120
+ });
121
+ for (const binding of compiled.workflows ?? []) addAssociationTarget(targets, {
122
+ reference: binding.binding,
123
+ type: "Workflow",
124
+ resource: binding.name,
125
+ note: binding.script_name ? `script ${binding.script_name}` : binding.class_name
126
+ });
127
+ for (const binding of compiled.pipelines ?? []) addAssociationTarget(targets, {
128
+ reference: binding.binding,
129
+ type: "Pipeline",
130
+ resource: binding.pipeline,
131
+ note: binding.remote ? "remote local binding" : void 0
132
+ });
133
+ if (compiled.images) addAssociationTarget(targets, {
134
+ reference: compiled.images.binding,
135
+ type: "Images",
136
+ resource: "Images",
137
+ note: compiled.images.remote ? "remote local binding" : void 0
138
+ });
139
+ if (compiled.media) addAssociationTarget(targets, {
140
+ reference: compiled.media.binding,
141
+ type: "Media Transformations",
142
+ resource: "Media Transformations",
143
+ note: compiled.media.remote ? "remote local binding" : void 0
144
+ });
145
+ for (const binding of compiled.artifacts ?? []) addAssociationTarget(targets, {
146
+ reference: binding.binding,
147
+ type: "Artifacts",
148
+ resource: binding.namespace,
149
+ note: binding.remote ? "remote local binding" : void 0
150
+ });
151
+ for (const binding of compiled.secrets_store_secrets ?? []) addAssociationTarget(targets, {
152
+ reference: binding.binding,
153
+ type: "Secrets Store",
154
+ resource: `${binding.store_id}/${binding.secret_name}`
155
+ });
156
+ for (const consumer of compiled.tail_consumers ?? []) addAssociationTarget(targets, {
157
+ type: "Tail Consumer",
158
+ resource: consumer.service,
159
+ note: consumer.environment ? `env ${consumer.environment}` : void 0
160
+ });
161
+ for (const binding of compiled.services ?? []) addAssociationTarget(targets, {
162
+ reference: binding.binding,
163
+ type: "Worker",
164
+ resource: binding.entrypoint ? `${binding.service}#${binding.entrypoint}` : binding.service,
165
+ note: binding.environment ? `env ${binding.environment}` : void 0
166
+ });
167
+ if (compiled.ai?.binding) addAssociationTarget(targets, {
168
+ reference: compiled.ai.binding,
169
+ type: "AI",
170
+ resource: "Workers AI"
171
+ });
172
+ for (const binding of compiled.vectorize ?? []) addAssociationTarget(targets, {
173
+ reference: binding.binding,
174
+ type: "Vectorize",
175
+ resource: binding.index_name
176
+ });
177
+ for (const binding of compiled.hyperdrive ?? []) addAssociationTarget(targets, {
178
+ reference: binding.binding,
179
+ type: "Hyperdrive",
180
+ resource: "id" in binding ? binding.id : binding.name
181
+ });
182
+ if (compiled.browser?.binding) addAssociationTarget(targets, {
183
+ reference: compiled.browser.binding,
184
+ type: "Browser",
185
+ resource: "Browser Rendering"
186
+ });
187
+ for (const binding of compiled.analytics_engine_datasets ?? []) addAssociationTarget(targets, {
188
+ reference: binding.binding,
189
+ type: "Analytics Engine",
190
+ resource: binding.dataset
191
+ });
192
+ for (const binding of compiled.send_email ?? []) addAssociationTarget(targets, {
193
+ reference: binding.name,
194
+ type: "Send Email",
195
+ resource: formatSendEmailResource(binding)
196
+ });
197
+ return Array.from(targets.values());
198
+ }
199
+ function getActiveVersionId(deployments) {
200
+ const sortedDeployments = [...deployments].sort((left, right) => right.createdOn.getTime() - left.createdOn.getTime());
201
+ for (const deployment of sortedDeployments) {
202
+ const version = [...deployment.versions].sort((left, right) => right.percentage - left.percentage)[0];
203
+ if (version?.versionId) return version.versionId;
204
+ }
205
+ }
206
+ function extractWorkerNames(value) {
207
+ return Array.from(value.matchAll(/worker:([^,\s]+)/gi), (match) => match[1]);
208
+ }
209
+ function parseWranglerQueueInfo(output) {
210
+ const lines = output.split(/\r?\n/);
211
+ let queueName = "";
212
+ const producerWorkers = [];
213
+ const consumerWorkers = [];
214
+ let currentSection = null;
215
+ for (const rawLine of lines) {
216
+ const trimmed = rawLine.trim();
217
+ if (!trimmed) {
218
+ currentSection = null;
219
+ continue;
220
+ }
221
+ const queueMatch = trimmed.match(/^Queue Name:\s*(.+)$/i);
222
+ if (queueMatch) {
223
+ queueName = normalizeCell(queueMatch[1]);
224
+ currentSection = null;
225
+ continue;
226
+ }
227
+ const producerMatch = trimmed.match(/^Producers:\s*(.*)$/i);
228
+ if (producerMatch) {
229
+ producerWorkers.push(...extractWorkerNames(producerMatch[1]));
230
+ currentSection = producerMatch[1] ? null : "producers";
231
+ continue;
232
+ }
233
+ const consumerMatch = trimmed.match(/^Consumers:\s*(.*)$/i);
234
+ if (consumerMatch) {
235
+ consumerWorkers.push(...extractWorkerNames(consumerMatch[1]));
236
+ currentSection = consumerMatch[1] ? null : "consumers";
237
+ continue;
238
+ }
239
+ if (!currentSection) continue;
240
+ const extractedWorkers = extractWorkerNames(trimmed);
241
+ if (currentSection === "producers") producerWorkers.push(...extractedWorkers);
242
+ else consumerWorkers.push(...extractedWorkers);
243
+ }
244
+ if (!queueName) return null;
245
+ return {
246
+ queueName,
247
+ producerWorkers: uniqueStrings(producerWorkers),
248
+ consumerWorkers: uniqueStrings(consumerWorkers)
249
+ };
250
+ }
251
+ /**
252
+ * Parse the JSON output of `wrangler versions view --json` into a flat list
253
+ * of `{ type, bindingName, resource }` rows that match the friendly type
254
+ * labels used by `collectBindingAssociationTargets`.
255
+ *
256
+ * Requires Wrangler 3.99+ (the `--json` flag on `versions view`).
257
+ */
258
+ function parseWranglerVersionBindings(jsonOutput) {
259
+ let parsed;
260
+ try {
261
+ parsed = JSON.parse(jsonOutput);
262
+ } catch {
263
+ return [];
264
+ }
265
+ const bindings = extractBindingsArray(parsed);
266
+ if (!bindings) return [];
267
+ const rows = [];
268
+ for (const raw of bindings) {
269
+ const row = mapWranglerBindingToRow(raw);
270
+ if (row) rows.push(row);
271
+ }
272
+ return rows;
273
+ }
274
+ function extractBindingsArray(parsed) {
275
+ if (!parsed || typeof parsed !== "object") return null;
276
+ const bindings = parsed.resources?.bindings;
277
+ return Array.isArray(bindings) ? bindings : null;
278
+ }
279
+ function mapWranglerBindingToRow(raw) {
280
+ if (!raw || typeof raw !== "object") return null;
281
+ const binding = raw;
282
+ const type = typeof binding.type === "string" ? binding.type : "";
283
+ const bindingName = typeof binding.name === "string" ? binding.name : "";
284
+ if (!type || !bindingName) return null;
285
+ const mapped = mapWranglerBindingType(type, binding);
286
+ if (!mapped) return null;
287
+ return {
288
+ type: mapped.friendlyType,
289
+ bindingName,
290
+ resource: mapped.resource
291
+ };
292
+ }
293
+ function mapWranglerBindingType(type, binding) {
294
+ const stringField = (key) => typeof binding[key] === "string" ? binding[key] : "";
295
+ switch (type) {
296
+ case "kv_namespace": return {
297
+ friendlyType: "KV Namespace",
298
+ resource: stringField("namespace_id")
299
+ };
300
+ case "d1": return {
301
+ friendlyType: "D1 Database",
302
+ resource: stringField("id")
303
+ };
304
+ case "r2_bucket": return {
305
+ friendlyType: "R2 Bucket",
306
+ resource: stringField("bucket_name")
307
+ };
308
+ case "durable_object_namespace": return {
309
+ friendlyType: "Durable Object Namespace",
310
+ resource: stringField("class_name")
311
+ };
312
+ case "queue": return {
313
+ friendlyType: "Queue",
314
+ resource: stringField("queue_name")
315
+ };
316
+ case "ratelimit": return {
317
+ friendlyType: "Rate Limiting",
318
+ resource: stringField("namespace_id")
319
+ };
320
+ case "service": {
321
+ const service = stringField("service") || binding.name;
322
+ const entrypoint = stringField("entrypoint");
323
+ return {
324
+ friendlyType: "Worker",
325
+ resource: entrypoint ? `${service}#${entrypoint}` : service
326
+ };
327
+ }
328
+ case "ai": return {
329
+ friendlyType: "AI",
330
+ resource: "Workers AI"
331
+ };
332
+ case "vectorize": return {
333
+ friendlyType: "Vectorize",
334
+ resource: stringField("index_name")
335
+ };
336
+ case "hyperdrive": return {
337
+ friendlyType: "Hyperdrive",
338
+ resource: stringField("id")
339
+ };
340
+ case "browser": return {
341
+ friendlyType: "Browser",
342
+ resource: "Browser Rendering"
343
+ };
344
+ case "analytics_engine": return {
345
+ friendlyType: "Analytics Engine",
346
+ resource: stringField("dataset")
347
+ };
348
+ case "send_email": return {
349
+ friendlyType: "Send Email",
350
+ resource: stringField("destination_address") || stringField("name") || binding.name
351
+ };
352
+ case "mtls_certificate": return {
353
+ friendlyType: "mTLS Certificate",
354
+ resource: stringField("certificate_id")
355
+ };
356
+ case "dispatch_namespace": return {
357
+ friendlyType: "Dispatch Namespace",
358
+ resource: stringField("namespace")
359
+ };
360
+ case "workflow": return {
361
+ friendlyType: "Workflow",
362
+ resource: stringField("workflow_name") || stringField("name")
363
+ };
364
+ case "pipeline": return {
365
+ friendlyType: "Pipeline",
366
+ resource: stringField("pipeline")
367
+ };
368
+ case "images": return {
369
+ friendlyType: "Images",
370
+ resource: "Images"
371
+ };
372
+ case "media": return {
373
+ friendlyType: "Media Transformations",
374
+ resource: "Media Transformations"
375
+ };
376
+ case "artifacts": return {
377
+ friendlyType: "Artifacts",
378
+ resource: stringField("namespace")
379
+ };
380
+ case "version_metadata": return {
381
+ friendlyType: "Version Metadata",
382
+ resource: "Version Metadata"
383
+ };
384
+ case "worker_loader": return {
385
+ friendlyType: "Worker Loader",
386
+ resource: "Worker Loader"
387
+ };
388
+ case "secrets_store_secret": return {
389
+ friendlyType: "Secrets Store",
390
+ resource: `${stringField("store_id")}/${stringField("secret_name")}`
391
+ };
392
+ case "plain_text":
393
+ case "json":
394
+ case "secret_text": return null;
395
+ default: return {
396
+ friendlyType: type,
397
+ resource: stringField("id") || stringField("name") || ""
398
+ };
399
+ }
400
+ }
401
+ async function inspectWorkerBindings(exec, options) {
402
+ return parseWranglerVersionBindings(await runWranglerInspectionCommand(exec, [
403
+ "wrangler",
404
+ "versions",
405
+ "view",
406
+ options.versionId,
407
+ "--name",
408
+ options.workerName,
409
+ "--json"
410
+ ], options, "Wrangler versions view failed"));
411
+ }
412
+ async function runWranglerInspectionCommand(exec, args, options, failureMessage) {
413
+ const result = await exec.exec("bunx", args, {
414
+ cwd: options.cwd,
415
+ env: {
416
+ ...process.env,
417
+ CLOUDFLARE_ACCOUNT_ID: options.accountId,
418
+ FORCE_COLOR: process.env.FORCE_COLOR ?? "0"
419
+ }
420
+ });
421
+ if (result.exitCode !== 0) throw new Error(result.stderr || result.stdout || failureMessage);
422
+ return `${result.stdout}\n${result.stderr}`;
423
+ }
424
+ async function inspectQueueAssociation(exec, options) {
425
+ return parseWranglerQueueInfo(await runWranglerInspectionCommand(exec, [
426
+ "wrangler",
427
+ "queues",
428
+ "info",
429
+ options.queueName
430
+ ], options, "Wrangler queues info failed"));
431
+ }
432
+ function formatReference(target) {
433
+ return target.referenceLabels.length > 0 ? target.referenceLabels.join(", ") : "—";
434
+ }
435
+ function formatResource(target) {
436
+ return target.resource || "—";
437
+ }
438
+ function buildRowNotes(target, queueAssociation) {
439
+ const notes = [...target.notes];
440
+ if (queueAssociation) {
441
+ notes.push(`producers ${queueAssociation.producerWorkers.length}`);
442
+ notes.push(`consumers ${queueAssociation.consumerWorkers.length}`);
443
+ }
444
+ return uniqueStrings(notes);
445
+ }
446
+ async function inspectBindingAssociations(options) {
447
+ const targets = collectBindingAssociationTargets(options.config);
448
+ const warnings = [];
449
+ const bindingUsage = /* @__PURE__ */ new Map();
450
+ const scannedWorkers = [];
451
+ const queueTargets = uniqueStrings(targets.map((target) => target.queueName).filter((queueName) => typeof queueName === "string" && queueName.length > 0));
452
+ const queueAssociations = /* @__PURE__ */ new Map();
453
+ const workers = await account.workers(options.accountId, options.apiOptions);
454
+ for (const worker of workers) {
455
+ let versionId;
456
+ try {
457
+ versionId = getActiveVersionId(await account.workerDeployments(options.accountId, worker.name, options.apiOptions));
458
+ } catch (error) {
459
+ const message = error instanceof Error ? error.message : String(error);
460
+ warnings.push(`Could not resolve active deployment for ${worker.name}: ${message}`);
461
+ continue;
462
+ }
463
+ if (!versionId) continue;
464
+ scannedWorkers.push(worker.name);
465
+ try {
466
+ const bindings = await inspectWorkerBindings(options.exec, {
467
+ accountId: options.accountId,
468
+ workerName: worker.name,
469
+ versionId,
470
+ cwd: options.cwd
471
+ });
472
+ for (const binding of bindings) {
473
+ const key = buildAssociationKey(binding.type, binding.resource);
474
+ const connectedWorkers = bindingUsage.get(key) ?? /* @__PURE__ */ new Set();
475
+ connectedWorkers.add(worker.name);
476
+ bindingUsage.set(key, connectedWorkers);
477
+ }
478
+ } catch (error) {
479
+ const message = error instanceof Error ? error.message : String(error);
480
+ warnings.push(`Could not inspect bindings for ${worker.name}: ${message}`);
481
+ }
482
+ }
483
+ for (const queueName of queueTargets) try {
484
+ const queueAssociation = await inspectQueueAssociation(options.exec, {
485
+ accountId: options.accountId,
486
+ queueName,
487
+ cwd: options.cwd
488
+ });
489
+ if (queueAssociation) queueAssociations.set(queueName, queueAssociation);
490
+ } catch (error) {
491
+ const message = error instanceof Error ? error.message : String(error);
492
+ warnings.push(`Could not inspect queue ${queueName}: ${message}`);
493
+ }
494
+ const rows = targets.map((target) => {
495
+ const queueAssociation = target.queueName ? queueAssociations.get(target.queueName) : void 0;
496
+ const connectedWorkers = uniqueStrings([
497
+ ...Array.from(bindingUsage.get(target.key) ?? []),
498
+ ...queueAssociation?.producerWorkers ?? [],
499
+ ...queueAssociation?.consumerWorkers ?? []
500
+ ]).sort((left, right) => left.localeCompare(right));
501
+ return {
502
+ reference: formatReference(target),
503
+ type: target.type,
504
+ resource: formatResource(target),
505
+ workerCount: connectedWorkers.length,
506
+ connectedWorkers,
507
+ notes: buildRowNotes(target, queueAssociation),
508
+ producerWorkers: queueAssociation?.producerWorkers,
509
+ consumerWorkers: queueAssociation?.consumerWorkers
510
+ };
511
+ });
512
+ return {
513
+ workerName: options.workerName ?? options.config.name,
514
+ rows,
515
+ targets: targets.length,
516
+ scannedWorkers,
517
+ warnings
518
+ };
519
+ }
520
+ //#endregion
521
+ //#region src/cli/commands/previews-support/theme.ts
522
+ function shouldUseColor(options) {
523
+ return createCliTheme(options).useColor;
524
+ }
525
+ function formatRecordDate(date) {
526
+ return date ? date.toISOString().slice(0, 19).replace("T", " ") : "N/A";
527
+ }
528
+ function formatStatus(value, theme) {
529
+ switch (value) {
530
+ case "active": return green(value, theme);
531
+ case "superseded":
532
+ case "reassigned":
533
+ case "orphaned": return yellow(value, theme);
534
+ case "deleted":
535
+ case "rolled_back": return red(value, theme);
536
+ default: return value;
537
+ }
538
+ }
539
+ function formatOverviewStatus(value, theme) {
540
+ switch (value) {
541
+ case "ready": return green(value, theme);
542
+ case "partial": return yellow(value, theme);
543
+ case "missing": return red(value, theme);
544
+ default: return formatStatus(value, theme);
545
+ }
546
+ }
547
+ //#endregion
548
+ //#region src/cli/commands/previews-support/cleanup.ts
549
+ function comparePreviewCleanupScopeNames(left, right) {
550
+ if (left === "preview" && right !== "preview") return 1;
551
+ if (left !== "preview" && right === "preview") return -1;
552
+ return left.localeCompare(right);
553
+ }
554
+ function buildPreviewCleanupTarget(scope, workerCandidatesByScope, environment) {
555
+ const strategies = /* @__PURE__ */ new Set();
556
+ const workerNames = [...workerCandidatesByScope.get(scope) ?? []];
557
+ if (workerNames.length > 0) strategies.add("dedicated workers");
558
+ if (scope === "preview" && environment === "preview") strategies.add("default preview scope");
559
+ return {
560
+ scope,
561
+ strategies: Array.from(strategies),
562
+ workerNames
563
+ };
564
+ }
565
+ function buildPreviewCleanupTargets(workerCandidatesByScope, environment) {
566
+ const scopeNames = /* @__PURE__ */ new Set();
567
+ for (const scope of workerCandidatesByScope.keys()) scopeNames.add(scope);
568
+ return Array.from(scopeNames).sort(comparePreviewCleanupScopeNames).map((scope) => buildPreviewCleanupTarget(scope, workerCandidatesByScope, environment));
569
+ }
570
+ function getPreviewCleanupResourceCandidateCount(result) {
571
+ return result.candidates.kv.length + result.candidates.d1.length + result.candidates.r2.length + result.candidates.queues.length + result.candidates.vectorize.length + result.candidates.hyperdrive.length;
572
+ }
573
+ function buildPreviewCleanupResourceSummary(result) {
574
+ return [
575
+ result.candidates.kv.length > 0 ? `KV ${result.candidates.kv.length}` : null,
576
+ result.candidates.d1.length > 0 ? `D1 ${result.candidates.d1.length}` : null,
577
+ result.candidates.r2.length > 0 ? `R2 ${result.candidates.r2.length}` : null,
578
+ result.candidates.queues.length > 0 ? `Queues ${result.candidates.queues.length}` : null,
579
+ result.candidates.vectorize.length > 0 ? `Vectorize ${result.candidates.vectorize.length}` : null,
580
+ result.candidates.hyperdrive.length > 0 ? `Hyperdrive ${result.candidates.hyperdrive.length}` : null
581
+ ].filter((segment) => segment !== null);
582
+ }
583
+ function logResolvedPreviewScopes(logger, targets, theme) {
584
+ if (targets.length === 0) {
585
+ logLine(logger, `${dim("preview scopes", theme)} ${dim("none discovered (--all)", theme)}`);
586
+ logLine(logger);
587
+ return;
588
+ }
589
+ logLine(logger, `${dim("preview scopes", theme)} ${green(targets.map((target) => target.scope).join(", "), theme)} ${dim("(--all)", theme)}`);
590
+ logLine(logger);
591
+ }
592
+ function logPreviewCleanupScopeBreakdown(logger, executions, theme) {
593
+ const scopedExecutions = executions.filter((execution) => execution.target);
594
+ if (scopedExecutions.length === 0) return;
595
+ logLine(logger, `${dim("scope breakdown", theme)}`);
596
+ for (const execution of scopedExecutions) {
597
+ const target = execution.target;
598
+ const strategies = target.strategies.length > 0 ? dim(`(${target.strategies.join(" + ")})`, theme) : "";
599
+ const summary = [target.workerNames.length > 0 ? `Workers ${target.workerNames.length}` : null, ...buildPreviewCleanupResourceSummary(execution.result)].filter((segment) => segment !== null);
600
+ logLine(logger, ` ${green(target.scope, theme)} ${strategies} ${dim("—", theme)} ${summary.length > 0 ? summary.join(" · ") : dim("none", theme)}`);
601
+ }
602
+ logLine(logger);
603
+ }
604
+ function showNoPreviewCleanupCandidatesHint(logger, selection, includeAll, theme) {
605
+ if (includeAll) {
606
+ logger.warn("No preview-only resources or dedicated preview Worker scripts were discovered across the live preview scopes Devflare could resolve. This usually means those previews were already cleaned up or the remaining previews only share stable Workers and shared account resources.");
607
+ return;
608
+ }
609
+ if (!selection?.identifier) return;
610
+ if (selection.source === "environment") {
611
+ logger.warn(`No preview-only resources or dedicated preview Worker scripts matched the default "${selection.identifier}" scope. If your previews use branch-style scopes such as "next" or "pr-1", rerun with --scope <name>, use --all, or set DEVFLARE_PREVIEW_BRANCH, DEVFLARE_PREVIEW_PR, or DEVFLARE_PREVIEW_IDENTIFIER.`);
612
+ return;
613
+ }
614
+ logger.warn(`No preview-only resources or dedicated preview Worker scripts matched the resolved "${selection.identifier}" scope. This usually means that scope was already cleaned up or the preview shares stable Workers without preview.scope() resources of its own.`);
615
+ }
616
+ //#endregion
617
+ //#region src/cli/commands/previews-support/render.ts
618
+ function logWorkerFamilyHeader(logger, families, theme) {
619
+ const primaryFamily = families.find((family) => family.role === "primary") ?? families[0];
620
+ const relatedFamilies = families.filter((family) => family.role !== "primary");
621
+ logLine(logger, `${dim("worker family", theme)} ${green(primaryFamily?.baseName ?? "unknown", theme)}`);
622
+ if (relatedFamilies.length > 0) logLine(logger, `${dim("related workers", theme)} ${whiteDim(String(relatedFamilies.length), theme)}`);
623
+ logLine(logger);
624
+ }
625
+ function logSection(logger, title, records, columns, theme) {
626
+ for (const line of buildSectionLines(title, records, columns, theme)) logLine(logger, line);
627
+ }
628
+ function logLiveWorkerFamilyOverview(logger, families, workers, workersSubdomain, theme) {
629
+ const stableRows = buildStableWorkerRowsFromLiveWorkers(families, workers, workersSubdomain);
630
+ const previewScopeRows = buildPreviewScopeRowsFromLiveWorkers(families, workers, workersSubdomain);
631
+ logWorkerFamilyHeader(logger, families, theme);
632
+ logSection(logger, "Stable workers", stableRows, buildStableWorkerColumns(theme), theme);
633
+ logLine(logger);
634
+ if (previewScopeRows.length === 0) logLine(logger, dim("No dedicated preview scopes found for this worker family.", theme));
635
+ else logSection(logger, "Preview scopes", previewScopeRows, buildPreviewScopeColumns(theme), theme);
636
+ }
637
+ function buildStableWorkerColumns(theme) {
638
+ return [
639
+ {
640
+ label: "Worker",
641
+ width: 34,
642
+ value: (row) => row.workerName
643
+ },
644
+ {
645
+ label: "Role",
646
+ width: 20,
647
+ value: (row) => row.role
648
+ },
649
+ {
650
+ label: "Status",
651
+ width: 8,
652
+ value: (row) => formatOverviewStatus(row.status, theme)
653
+ },
654
+ {
655
+ label: "Updated",
656
+ width: 19,
657
+ value: (row) => whiteDim(formatRecordDate(row.updatedAt), theme)
658
+ },
659
+ {
660
+ label: "URL",
661
+ value: (row) => row.url ?? "N/A"
662
+ }
663
+ ];
664
+ }
665
+ function buildPreviewScopeColumns(theme) {
666
+ return [
667
+ {
668
+ label: "Scope",
669
+ width: 18,
670
+ value: (row) => row.scope
671
+ },
672
+ {
673
+ label: "Strategy",
674
+ width: 18,
675
+ value: (row) => row.strategy
676
+ },
677
+ {
678
+ label: "Workers",
679
+ width: 7,
680
+ value: (row) => row.workersLabel
681
+ },
682
+ {
683
+ label: "Status",
684
+ width: 10,
685
+ value: (row) => formatOverviewStatus(row.status, theme)
686
+ },
687
+ {
688
+ label: "Updated",
689
+ width: 19,
690
+ value: (row) => whiteDim(formatRecordDate(row.updatedAt), theme)
691
+ },
692
+ {
693
+ label: "Notes",
694
+ width: 30,
695
+ value: (row) => row.notes ?? dim("—", theme)
696
+ },
697
+ {
698
+ label: "Entry URL",
699
+ value: (row) => row.entryUrl ?? "N/A"
700
+ }
701
+ ];
702
+ }
703
+ function buildSectionLines(title, records, columns, theme) {
704
+ if (records.length === 0) return [];
705
+ const widths = columns.map((column) => column.width);
706
+ return [
707
+ `${title === "Preview scopes" ? cyanBold(title, theme) : title === "Stable workers" ? bold(title, theme) : yellowBold(title, theme)} ${dim(`(${records.length})`, theme)}`,
708
+ formatTableLine(columns.map((column) => dim(column.label, theme)), widths),
709
+ ...records.map((record) => formatTableLine(columns.map((column) => column.value(record)), widths))
710
+ ];
711
+ }
712
+ function showWorkerFamilyOverviewFromLiveWorkers(families, workers, workersSubdomain, logger, theme) {
713
+ logLine(logger);
714
+ logLiveWorkerFamilyOverview(logger, families, workers, workersSubdomain, theme);
715
+ logLine(logger);
716
+ logLine(logger, dim("Preview scopes are derived from live dedicated preview Worker names and the current config family.", theme));
717
+ logLine(logger, dim("Use `devflare previews cleanup --scope <name>` to delete one scope or `--all` to clean every discovered scope.", theme));
718
+ logLine(logger);
719
+ }
720
+ function showWorkspaceWorkerFamilyOverviewFromLiveWorkers(familyGroups, workers, workersSubdomain, logger, theme) {
721
+ logLine(logger);
722
+ logLine(logger, `${dim("configured worker families", theme)} ${whiteDim(String(familyGroups.length), theme)}`);
723
+ logLine(logger);
724
+ for (const [index, families] of familyGroups.entries()) {
725
+ if (index > 0) logLine(logger);
726
+ logLiveWorkerFamilyOverview(logger, families, workers, workersSubdomain, theme);
727
+ }
728
+ logLine(logger);
729
+ logLine(logger, dim("Preview scopes are derived from live dedicated preview Worker names and each discovered config family.", theme));
730
+ logLine(logger, dim("Run inside a configured package or pass `--config <path>` to narrow the summary or clean one family.", theme));
731
+ logLine(logger);
732
+ }
733
+ function buildBindingAssociationColumns(theme) {
734
+ return [
735
+ {
736
+ label: "Reference",
737
+ width: 24,
738
+ value: (row) => row.reference
739
+ },
740
+ {
741
+ label: "Type",
742
+ width: 24,
743
+ value: (row) => row.type
744
+ },
745
+ {
746
+ label: "Resource",
747
+ width: 36,
748
+ value: (row) => row.resource
749
+ },
750
+ {
751
+ label: "Workers",
752
+ width: 7,
753
+ value: (row) => String(row.workerCount)
754
+ },
755
+ {
756
+ label: "Notes",
757
+ width: 28,
758
+ value: (row) => row.notes.length > 0 ? row.notes.join(" · ") : dim("—", theme)
759
+ },
760
+ {
761
+ label: "Connected workers",
762
+ value: (row) => row.connectedWorkers.length > 0 ? row.connectedWorkers.join(", ") : dim("—", theme)
763
+ }
764
+ ];
765
+ }
766
+ function showBindingAssociations(logger, inspection, theme) {
767
+ logLine(logger);
768
+ logLine(logger, `${dim("worker family", theme)} ${green(inspection.workerName, theme)}`);
769
+ logLine(logger, `${dim("resolved targets", theme)} ${whiteDim(String(inspection.targets), theme)}`);
770
+ logLine(logger, `${dim("active deployments scanned", theme)} ${whiteDim(String(inspection.scannedWorkers.length), theme)}`);
771
+ if (inspection.rows.length === 0) {
772
+ logLine(logger);
773
+ logLine(logger, dim("No binding or resource targets were resolved from the current config.", theme));
774
+ logLine(logger);
775
+ return;
776
+ }
777
+ logLine(logger);
778
+ logSection(logger, "Bindings", inspection.rows, buildBindingAssociationColumns(theme), theme);
779
+ if (inspection.warnings.length > 0) {
780
+ logLine(logger);
781
+ for (const warning of inspection.warnings) logger.warn(warning);
782
+ }
783
+ logLine(logger);
784
+ }
785
+ //#endregion
786
+ //#region src/cli/commands/previews-support/types.ts
787
+ const PREVIEW_SUBCOMMANDS = [
788
+ "list",
789
+ "bindings",
790
+ "cleanup"
791
+ ];
792
+ //#endregion
793
+ //#region src/cli/commands/previews.ts
794
+ const CLI_API_OPTIONS = { timeout: 1e4 };
795
+ function compareConfiguredWorkerFamilies(left, right) {
796
+ if (left.role === "primary" && right.role !== "primary") return -1;
797
+ if (left.role !== "primary" && right.role === "primary") return 1;
798
+ return left.baseName.localeCompare(right.baseName);
799
+ }
800
+ function sortConfiguredWorkerFamilies(families) {
801
+ return [...families].sort(compareConfiguredWorkerFamilies);
802
+ }
803
+ function resolvePrimaryWorkerFamilyName(families) {
804
+ return families.find((family) => family.role === "primary")?.baseName ?? families[0]?.baseName;
805
+ }
806
+ function shouldReplaceConfiguredWorkerFamily(existing, candidate) {
807
+ return !existing || candidate.role === "primary" && existing.role !== "primary";
808
+ }
809
+ function mergeConfiguredWorkerFamilies(existing, candidates) {
810
+ const merged = new Map(existing.map((family) => [family.baseName, family]));
811
+ for (const candidate of candidates) if (shouldReplaceConfiguredWorkerFamily(merged.get(candidate.baseName), candidate)) merged.set(candidate.baseName, candidate);
812
+ return sortConfiguredWorkerFamilies(Array.from(merged.values()));
813
+ }
814
+ function comparePreviewConfiguredFamilyGroups(left, right) {
815
+ const leftName = resolvePrimaryWorkerFamilyName(left.families) ?? left.configPath ?? "";
816
+ const rightName = resolvePrimaryWorkerFamilyName(right.families) ?? right.configPath ?? "";
817
+ return leftName.localeCompare(rightName);
818
+ }
819
+ function upsertPreviewConfiguredFamilyGroup(groups, candidate) {
820
+ const groupKey = resolvePrimaryWorkerFamilyName(candidate.families) ?? candidate.configPath ?? `group-${groups.size}`;
821
+ const existing = groups.get(groupKey);
822
+ if (!existing) {
823
+ groups.set(groupKey, {
824
+ ...candidate,
825
+ families: sortConfiguredWorkerFamilies(candidate.families)
826
+ });
827
+ return;
828
+ }
829
+ groups.set(groupKey, {
830
+ accountId: existing.accountId ?? candidate.accountId,
831
+ configPath: existing.configPath ?? candidate.configPath,
832
+ families: mergeConfiguredWorkerFamilies(existing.families, candidate.families)
833
+ });
834
+ }
835
+ async function discoverPreviewListConfigs(cwd, configFile, environment) {
836
+ const groups = /* @__PURE__ */ new Map();
837
+ const accountIds = /* @__PURE__ */ new Set();
838
+ const loadAndCollect = async (candidateConfigFile) => {
839
+ try {
840
+ const config = await loadConfig({
841
+ cwd,
842
+ configFile: candidateConfigFile
843
+ });
844
+ const families = collectConfiguredWorkerFamilies(config, environment);
845
+ const accountId = config.accountId?.trim() || void 0;
846
+ if (accountId) accountIds.add(accountId);
847
+ upsertPreviewConfiguredFamilyGroup(groups, {
848
+ accountId,
849
+ configPath: candidateConfigFile,
850
+ families
851
+ });
852
+ return true;
853
+ } catch (error) {
854
+ if (error instanceof ConfigNotFoundError) return false;
855
+ throw error;
856
+ }
857
+ };
858
+ if (configFile) await loadAndCollect(configFile);
859
+ else if (!(await resolveConfigPath(cwd) ? await loadAndCollect() : false)) {
860
+ const configPaths = await findConfigPathsUnderDirectory(cwd);
861
+ for (const configPath of configPaths) await loadAndCollect(configPath);
862
+ }
863
+ return {
864
+ accountIds: Array.from(accountIds).sort((left, right) => left.localeCompare(right)),
865
+ familyGroups: Array.from(groups.values()).sort(comparePreviewConfiguredFamilyGroups)
866
+ };
867
+ }
868
+ function isPreviewSubcommand(value) {
869
+ return PREVIEW_SUBCOMMANDS.includes(value);
870
+ }
871
+ function resolvePreviewScopeSelection(parsed, environment) {
872
+ const explicitScope = asOptionalString(parsed.options.scope) || asOptionalString(parsed.options.identifier);
873
+ if (explicitScope) return {
874
+ identifier: resolvePreviewIdentifier({ identifier: explicitScope }).identifier,
875
+ source: "scope-option"
876
+ };
877
+ const resolved = resolvePreviewIdentifier({
878
+ environment,
879
+ env: process.env
880
+ });
881
+ return {
882
+ identifier: resolved.identifier,
883
+ source: resolved.source
884
+ };
885
+ }
886
+ function formatPreviewScopeSource(source) {
887
+ switch (source) {
888
+ case "scope-option": return "--scope";
889
+ case "identifier": return "explicit identifier";
890
+ case "env-identifier": return "DEVFLARE_PREVIEW_IDENTIFIER";
891
+ case "env-pr": return "DEVFLARE_PREVIEW_PR";
892
+ case "env-branch": return "DEVFLARE_PREVIEW_BRANCH";
893
+ case "environment": return "default preview scope";
894
+ default: return "no explicit preview scope";
895
+ }
896
+ }
897
+ function logResolvedPreviewScope(logger, selection, theme) {
898
+ if (!selection.identifier) return;
899
+ logLine(logger, `${dim("preview scope", theme)} ${green(selection.identifier, theme)} ${dim(`(${formatPreviewScopeSource(selection.source)})`, theme)}`);
900
+ logLine(logger);
901
+ }
902
+ async function loadLocalConfig(cwd, configFile, needsConfig) {
903
+ if (!needsConfig) return;
904
+ if (!configFile) {
905
+ if (!await resolveConfigPath(cwd)) return;
906
+ try {
907
+ const config = await loadConfig({ cwd });
908
+ return {
909
+ accountId: config.accountId,
910
+ name: config.name
911
+ };
912
+ } catch (error) {
913
+ if (error instanceof ConfigNotFoundError) return;
914
+ throw error;
915
+ }
916
+ }
917
+ try {
918
+ const config = await loadConfig({
919
+ cwd,
920
+ configFile
921
+ });
922
+ return {
923
+ accountId: config.accountId,
924
+ name: config.name
925
+ };
926
+ } catch (error) {
927
+ if (error instanceof ConfigNotFoundError) return;
928
+ throw error;
929
+ }
930
+ }
931
+ async function resolveAccountId(parsed, config) {
932
+ return resolveCloudflareAccountId({
933
+ explicitAccountId: asOptionalString(parsed.options.account),
934
+ configuredAccountId: config?.accountId,
935
+ apiOptions: CLI_API_OPTIONS
936
+ });
937
+ }
938
+ function resolveWorkerName(parsed, config) {
939
+ const selection = resolveNamedSelection({
940
+ explicitValue: asOptionalString(parsed.options.worker),
941
+ configuredValue: config?.name
942
+ });
943
+ return {
944
+ workerName: selection.value,
945
+ source: selection.source
946
+ };
947
+ }
948
+ async function resolveContext(parsed, options, subcommand) {
949
+ const cwd = options.cwd ?? process.cwd();
950
+ const configFile = asOptionalString(parsed.options.config);
951
+ const explicitAccountId = asOptionalString(parsed.options.account);
952
+ const environment = asOptionalString(parsed.options.env);
953
+ if (subcommand === "list") {
954
+ const listDiscovery = await discoverPreviewListConfigs(cwd, configFile, environment);
955
+ if (!explicitAccountId && listDiscovery.accountIds.length > 1) throw new Error("Multiple Cloudflare account ids were discovered across local Devflare configs. Pass --account to select one account explicitly for `devflare previews`.");
956
+ const accountId = await resolveCloudflareAccountId({
957
+ explicitAccountId,
958
+ configuredAccountId: listDiscovery.accountIds[0],
959
+ apiOptions: CLI_API_OPTIONS
960
+ });
961
+ if (!accountId) throw new Error("No Cloudflare account could be resolved. Use --account or configure accountId in devflare.config.*.");
962
+ return {
963
+ accountId,
964
+ workerName: void 0,
965
+ workerNameSource: "none",
966
+ config: void 0,
967
+ listDiscovery
968
+ };
969
+ }
970
+ const needsConfig = subcommand === "cleanup" || subcommand === "bindings" || !explicitAccountId;
971
+ const config = await loadLocalConfig(cwd, configFile, needsConfig);
972
+ if (needsConfig && !config) throw new Error("Preview commands now inspect and clean dedicated preview workers for the current package. Run inside a configured package or pass --config <path>.");
973
+ const accountId = await resolveAccountId(parsed, config);
974
+ const workerSelection = resolveWorkerName(parsed, config);
975
+ if (!accountId) throw new Error("No Cloudflare account could be resolved. Use --account or configure accountId in devflare.config.*.");
976
+ return {
977
+ accountId,
978
+ workerName: workerSelection.workerName,
979
+ workerNameSource: workerSelection.source,
980
+ config
981
+ };
982
+ }
983
+ async function runBindingsSubcommand(parsed, context, logger, options, environment, configFile, theme) {
984
+ const cwd = options.cwd ?? process.cwd();
985
+ const previewScope = resolvePreviewScopeSelection(parsed, environment);
986
+ logResolvedPreviewScope(logger, previewScope, theme);
987
+ const resolvedConfig = await loadResolvedConfig({
988
+ cwd,
989
+ configFile,
990
+ environment,
991
+ identifier: previewScope.identifier,
992
+ accountId: context.accountId
993
+ });
994
+ const deps = await getDependencies();
995
+ showBindingAssociations(logger, await inspectBindingAssociations({
996
+ accountId: context.accountId,
997
+ config: resolvedConfig,
998
+ workerName: context.workerName ?? resolvedConfig.name,
999
+ cwd,
1000
+ exec: deps.exec,
1001
+ apiOptions: CLI_API_OPTIONS
1002
+ }), theme);
1003
+ return { exitCode: 0 };
1004
+ }
1005
+ async function runCleanupSubcommand(parsed, context, logger, options, environment, configFile, includeAll, theme) {
1006
+ const cwd = options.cwd ?? process.cwd();
1007
+ const resolvedEnvironment = environment ?? "preview";
1008
+ const explicitScope = asOptionalString(parsed.options.scope) || asOptionalString(parsed.options.identifier);
1009
+ if (includeAll && explicitScope) {
1010
+ logger.error("Choose either --scope <name> or --all for preview cleanup, not both.");
1011
+ return { exitCode: 1 };
1012
+ }
1013
+ const previewScope = resolvePreviewScopeSelection(parsed, resolvedEnvironment);
1014
+ const config = await loadConfig({
1015
+ cwd,
1016
+ configFile
1017
+ });
1018
+ const configuredFamilies = collectConfiguredWorkerFamilies(config, resolvedEnvironment);
1019
+ const workerCandidatesByScope = buildPreviewWorkerCandidatesByScope(configuredFamilies, await account.workers(context.accountId, CLI_API_OPTIONS));
1020
+ const cleanupTargets = includeAll ? buildPreviewCleanupTargets(workerCandidatesByScope, resolvedEnvironment) : previewScope.identifier ? [buildPreviewCleanupTarget(previewScope.identifier, workerCandidatesByScope, resolvedEnvironment)] : [];
1021
+ const cleanupRuns = includeAll ? cleanupTargets.map((target) => ({
1022
+ scope: target.scope,
1023
+ target
1024
+ })) : previewScope.identifier ? [{
1025
+ scope: previewScope.identifier,
1026
+ target: cleanupTargets[0]
1027
+ }] : [];
1028
+ const applyCleanup = parsed.options.apply === true;
1029
+ const executions = [];
1030
+ if (includeAll) logResolvedPreviewScopes(logger, cleanupTargets, theme);
1031
+ else logResolvedPreviewScope(logger, previewScope, theme);
1032
+ for (const cleanupRun of cleanupRuns) {
1033
+ if (applyCleanup) {
1034
+ const orderedWorkerNames = cleanupRun.target ? orderPreviewWorkerNamesForDeletion(cleanupRun.target.workerNames, cleanupRun.target.scope, configuredFamilies) : [];
1035
+ for (const workerName of orderedWorkerNames) await account.deleteWorker(context.accountId, workerName, CLI_API_OPTIONS);
1036
+ }
1037
+ const result = await cleanupPreviewScopedResources(config, {
1038
+ environment: resolvedEnvironment,
1039
+ identifier: cleanupRun.scope,
1040
+ accountId: context.accountId,
1041
+ apply: applyCleanup
1042
+ });
1043
+ executions.push({
1044
+ target: cleanupRun.target,
1045
+ result
1046
+ });
1047
+ }
1048
+ const totalWorkerCandidates = executions.reduce((sum, execution) => {
1049
+ return sum + (execution.target?.workerNames.length ?? 0);
1050
+ }, 0);
1051
+ const totalKvCandidates = executions.reduce((sum, execution) => sum + execution.result.candidates.kv.length, 0);
1052
+ const totalD1Candidates = executions.reduce((sum, execution) => sum + execution.result.candidates.d1.length, 0);
1053
+ const totalR2Candidates = executions.reduce((sum, execution) => sum + execution.result.candidates.r2.length, 0);
1054
+ const totalQueueCandidates = executions.reduce((sum, execution) => sum + execution.result.candidates.queues.length, 0);
1055
+ const totalVectorizeCandidates = executions.reduce((sum, execution) => sum + execution.result.candidates.vectorize.length, 0);
1056
+ const totalHyperdriveCandidates = executions.reduce((sum, execution) => sum + execution.result.candidates.hyperdrive.length, 0);
1057
+ const totalCandidates = totalWorkerCandidates + executions.reduce((sum, execution) => {
1058
+ return sum + getPreviewCleanupResourceCandidateCount(execution.result);
1059
+ }, 0);
1060
+ const scopeCountSuffix = cleanupRuns.length > 0 ? ` across ${cleanupRuns.length} preview scope${cleanupRuns.length === 1 ? "" : "s"}` : "";
1061
+ logger.success(applyCleanup ? `Deleted ${totalCandidates} preview-only cleanup candidate${totalCandidates === 1 ? "" : "s"}${scopeCountSuffix}` : `Preview cleanup dry run complete with ${totalCandidates} candidate${totalCandidates === 1 ? "" : "s"}${scopeCountSuffix}`);
1062
+ const resourceSummary = [
1063
+ totalWorkerCandidates > 0 ? `Workers ${totalWorkerCandidates}` : null,
1064
+ totalKvCandidates > 0 ? `KV ${totalKvCandidates}` : null,
1065
+ totalD1Candidates > 0 ? `D1 ${totalD1Candidates}` : null,
1066
+ totalR2Candidates > 0 ? `R2 ${totalR2Candidates}` : null,
1067
+ totalQueueCandidates > 0 ? `Queues ${totalQueueCandidates}` : null,
1068
+ totalVectorizeCandidates > 0 ? `Vectorize ${totalVectorizeCandidates}` : null,
1069
+ totalHyperdriveCandidates > 0 ? `Hyperdrive ${totalHyperdriveCandidates}` : null
1070
+ ].filter((segment) => segment !== null);
1071
+ if (resourceSummary.length > 0) logger.info(`Candidates: ${resourceSummary.join(" · ")}`);
1072
+ else {
1073
+ logger.info("Candidates: none");
1074
+ showNoPreviewCleanupCandidatesHint(logger, previewScope, includeAll, theme);
1075
+ }
1076
+ if (includeAll || executions.some((execution) => Boolean(execution.target?.workerNames.length))) logPreviewCleanupScopeBreakdown(logger, executions, theme);
1077
+ const warnings = Array.from(new Set(executions.flatMap((execution) => execution.result.warnings)));
1078
+ for (const warning of warnings) logger.warn(warning);
1079
+ return { exitCode: 0 };
1080
+ }
1081
+ async function runListSubcommand(context, logger, theme) {
1082
+ const discoveredFamilyGroups = context.listDiscovery?.familyGroups ?? [];
1083
+ if (discoveredFamilyGroups.length === 0) throw new Error("Preview listing needs a resolvable devflare config in the current package or workspace so Devflare can identify worker families.");
1084
+ const matchingFamilyGroups = discoveredFamilyGroups.filter((group) => {
1085
+ return !group.accountId || group.accountId === context.accountId;
1086
+ });
1087
+ if (matchingFamilyGroups.length === 0) throw new Error(`No configured preview worker families matched Cloudflare account ${context.accountId}. Pass --account or --config <path> to narrow the selection.`);
1088
+ const liveWorkers = await account.workers(context.accountId, CLI_API_OPTIONS);
1089
+ const workersSubdomain = await account.workersSubdomain(context.accountId, CLI_API_OPTIONS);
1090
+ if (matchingFamilyGroups.length === 1) {
1091
+ showWorkerFamilyOverviewFromLiveWorkers(matchingFamilyGroups[0].families, liveWorkers, workersSubdomain, logger, theme);
1092
+ return { exitCode: 0 };
1093
+ }
1094
+ showWorkspaceWorkerFamilyOverviewFromLiveWorkers(matchingFamilyGroups.map((group) => group.families), liveWorkers, workersSubdomain, logger, theme);
1095
+ return { exitCode: 0 };
1096
+ }
1097
+ function resolvePreviewSubcommand(rawSubcommand) {
1098
+ if (!rawSubcommand) return;
1099
+ if (isPreviewSubcommand(rawSubcommand)) return rawSubcommand;
1100
+ }
1101
+ async function runPreviewsCommand(parsed, logger, options) {
1102
+ if (!await account.isAuthenticated()) {
1103
+ logger.error("Not authenticated with Cloudflare");
1104
+ logger.info("Run `devflare login` first.");
1105
+ return { exitCode: 1 };
1106
+ }
1107
+ const rawSubcommand = parsed.args[0];
1108
+ const subcommand = resolvePreviewSubcommand(rawSubcommand) ?? "list";
1109
+ const includeAll = parsed.options.all === true;
1110
+ const theme = { useColor: shouldUseColor(parsed.options) };
1111
+ if (rawSubcommand && !resolvePreviewSubcommand(rawSubcommand)) {
1112
+ logger.error(`Unknown previews subcommand: ${rawSubcommand}`);
1113
+ logger.info(`Available previews subcommands: ${PREVIEW_SUBCOMMANDS.join(", ")}`);
1114
+ return { exitCode: 1 };
1115
+ }
1116
+ try {
1117
+ const context = await resolveContext(parsed, options, subcommand);
1118
+ const environment = asOptionalString(parsed.options.env);
1119
+ const configFile = asOptionalString(parsed.options.config);
1120
+ switch (subcommand) {
1121
+ case "bindings": return runBindingsSubcommand(parsed, context, logger, options, environment, configFile, theme);
1122
+ case "cleanup": return runCleanupSubcommand(parsed, context, logger, options, environment, configFile, includeAll, theme);
1123
+ default: return runListSubcommand(context, logger, theme);
1124
+ }
1125
+ } catch (error) {
1126
+ if (error instanceof Error) {
1127
+ logger.error(error.message);
1128
+ return { exitCode: 1 };
1129
+ }
1130
+ throw error;
1131
+ }
1132
+ }
1133
+ //#endregion
1134
+ export { runPreviewsCommand };