alchemy 0.25.0 → 0.26.1

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 (499) hide show
  1. package/README.md +7 -0
  2. package/lib/ai/astro-file.d.ts.map +1 -1
  3. package/lib/ai/astro-file.js +2 -1
  4. package/lib/ai/astro-file.js.map +1 -1
  5. package/lib/ai/client.d.ts.map +1 -1
  6. package/lib/ai/client.js +3 -2
  7. package/lib/ai/client.js.map +1 -1
  8. package/lib/alchemy.d.ts +7 -0
  9. package/lib/alchemy.d.ts.map +1 -1
  10. package/lib/alchemy.js +19 -3
  11. package/lib/alchemy.js.map +1 -1
  12. package/lib/apply.d.ts.map +1 -1
  13. package/lib/apply.js +63 -5
  14. package/lib/apply.js.map +1 -1
  15. package/lib/aws/control/client.js +4 -3
  16. package/lib/aws/control/client.js.map +1 -1
  17. package/lib/aws/control/properties.d.ts +6 -0
  18. package/lib/aws/control/properties.d.ts.map +1 -1
  19. package/lib/aws/control/properties.js +48 -0
  20. package/lib/aws/control/properties.js.map +1 -1
  21. package/lib/aws/control/resource.d.ts.map +1 -1
  22. package/lib/aws/control/resource.js +3 -2
  23. package/lib/aws/control/resource.js.map +1 -1
  24. package/lib/aws/control/types.d.ts +3969 -4862
  25. package/lib/aws/control/types.d.ts.map +1 -1
  26. package/lib/aws/control/types.js.map +1 -1
  27. package/lib/aws/function.d.ts.map +1 -1
  28. package/lib/aws/function.js +9 -8
  29. package/lib/aws/function.js.map +1 -1
  30. package/lib/aws/oidc/oidc-provider.d.ts.map +1 -1
  31. package/lib/aws/oidc/oidc-provider.js +3 -2
  32. package/lib/aws/oidc/oidc-provider.js.map +1 -1
  33. package/lib/aws/queue.d.ts.map +1 -1
  34. package/lib/aws/queue.js +3 -2
  35. package/lib/aws/queue.js.map +1 -1
  36. package/lib/aws/role.d.ts.map +1 -1
  37. package/lib/aws/role.js +3 -1
  38. package/lib/aws/role.js.map +1 -1
  39. package/lib/aws/ssm-parameter.d.ts.map +1 -1
  40. package/lib/aws/ssm-parameter.js +2 -1
  41. package/lib/aws/ssm-parameter.js.map +1 -1
  42. package/lib/cloudflare/account-api-token.d.ts.map +1 -1
  43. package/lib/cloudflare/account-api-token.js +3 -2
  44. package/lib/cloudflare/account-api-token.js.map +1 -1
  45. package/lib/cloudflare/ai-gateway.d.ts.map +1 -1
  46. package/lib/cloudflare/ai-gateway.js +4 -3
  47. package/lib/cloudflare/ai-gateway.js.map +1 -1
  48. package/lib/cloudflare/api-error.d.ts +0 -9
  49. package/lib/cloudflare/api-error.d.ts.map +1 -1
  50. package/lib/cloudflare/api-error.js +24 -0
  51. package/lib/cloudflare/api-error.js.map +1 -1
  52. package/lib/cloudflare/api.d.ts.map +1 -1
  53. package/lib/cloudflare/api.js +5 -4
  54. package/lib/cloudflare/api.js.map +1 -1
  55. package/lib/cloudflare/assets.d.ts.map +1 -1
  56. package/lib/cloudflare/assets.js +26 -6
  57. package/lib/cloudflare/assets.js.map +1 -1
  58. package/lib/cloudflare/astro.d.ts +63 -0
  59. package/lib/cloudflare/astro.d.ts.map +1 -0
  60. package/lib/cloudflare/astro.js +133 -0
  61. package/lib/cloudflare/astro.js.map +1 -0
  62. package/lib/cloudflare/auth.d.ts.map +1 -1
  63. package/lib/cloudflare/auth.js +3 -2
  64. package/lib/cloudflare/auth.js.map +1 -1
  65. package/lib/cloudflare/bindings.d.ts +24 -2
  66. package/lib/cloudflare/bindings.d.ts.map +1 -1
  67. package/lib/cloudflare/bindings.js.map +1 -1
  68. package/lib/cloudflare/bound.d.ts +10 -1
  69. package/lib/cloudflare/bound.d.ts.map +1 -1
  70. package/lib/cloudflare/bucket.d.ts.map +1 -1
  71. package/lib/cloudflare/bucket.js +12 -8
  72. package/lib/cloudflare/bucket.js.map +1 -1
  73. package/lib/cloudflare/bundle/bundle-worker.d.ts.map +1 -1
  74. package/lib/cloudflare/bundle/bundle-worker.js +2 -1
  75. package/lib/cloudflare/bundle/bundle-worker.js.map +1 -1
  76. package/lib/cloudflare/bundle/nodejs-compat-mode.d.ts.map +1 -1
  77. package/lib/cloudflare/bundle/nodejs-compat-mode.js +2 -1
  78. package/lib/cloudflare/bundle/nodejs-compat-mode.js.map +1 -1
  79. package/lib/cloudflare/custom-domain.d.ts.map +1 -1
  80. package/lib/cloudflare/custom-domain.js +10 -9
  81. package/lib/cloudflare/custom-domain.js.map +1 -1
  82. package/lib/cloudflare/d1-database.d.ts.map +1 -1
  83. package/lib/cloudflare/d1-database.js +11 -10
  84. package/lib/cloudflare/d1-database.js.map +1 -1
  85. package/lib/cloudflare/d1-export.d.ts.map +1 -1
  86. package/lib/cloudflare/d1-export.js +2 -1
  87. package/lib/cloudflare/d1-export.js.map +1 -1
  88. package/lib/cloudflare/d1-import.d.ts.map +1 -1
  89. package/lib/cloudflare/d1-import.js +2 -1
  90. package/lib/cloudflare/d1-import.js.map +1 -1
  91. package/lib/cloudflare/d1-migrations.d.ts.map +1 -1
  92. package/lib/cloudflare/d1-migrations.js +2 -1
  93. package/lib/cloudflare/d1-migrations.js.map +1 -1
  94. package/lib/cloudflare/dispatch-namespace.d.ts +94 -0
  95. package/lib/cloudflare/dispatch-namespace.d.ts.map +1 -0
  96. package/lib/cloudflare/dispatch-namespace.js +143 -0
  97. package/lib/cloudflare/dispatch-namespace.js.map +1 -0
  98. package/lib/cloudflare/dns-records.d.ts.map +1 -1
  99. package/lib/cloudflare/dns-records.js +5 -4
  100. package/lib/cloudflare/dns-records.js.map +1 -1
  101. package/lib/cloudflare/do-state-store/worker.d.ts.map +1 -1
  102. package/lib/cloudflare/do-state-store/worker.js +4 -0
  103. package/lib/cloudflare/do-state-store/worker.js.map +1 -1
  104. package/lib/cloudflare/email-address.d.ts +79 -0
  105. package/lib/cloudflare/email-address.d.ts.map +1 -0
  106. package/lib/cloudflare/email-address.js +112 -0
  107. package/lib/cloudflare/email-address.js.map +1 -0
  108. package/lib/cloudflare/email-catch-all.d.ts +123 -0
  109. package/lib/cloudflare/email-catch-all.d.ts.map +1 -0
  110. package/lib/cloudflare/email-catch-all.js +124 -0
  111. package/lib/cloudflare/email-catch-all.js.map +1 -0
  112. package/lib/cloudflare/email-routing.d.ts +89 -0
  113. package/lib/cloudflare/email-routing.d.ts.map +1 -0
  114. package/lib/cloudflare/email-routing.js +120 -0
  115. package/lib/cloudflare/email-routing.js.map +1 -0
  116. package/lib/cloudflare/email-rule.d.ts +196 -0
  117. package/lib/cloudflare/email-rule.d.ts.map +1 -0
  118. package/lib/cloudflare/email-rule.js +153 -0
  119. package/lib/cloudflare/email-rule.js.map +1 -0
  120. package/lib/cloudflare/hyperdrive.d.ts.map +1 -1
  121. package/lib/cloudflare/hyperdrive.js +5 -4
  122. package/lib/cloudflare/hyperdrive.js.map +1 -1
  123. package/lib/cloudflare/images.d.ts +60 -0
  124. package/lib/cloudflare/images.d.ts.map +1 -0
  125. package/lib/cloudflare/images.js +60 -0
  126. package/lib/cloudflare/images.js.map +1 -0
  127. package/lib/cloudflare/index.d.ts +10 -0
  128. package/lib/cloudflare/index.d.ts.map +1 -1
  129. package/lib/cloudflare/index.js +10 -0
  130. package/lib/cloudflare/index.js.map +1 -1
  131. package/lib/cloudflare/kv-namespace.d.ts.map +1 -1
  132. package/lib/cloudflare/kv-namespace.js +2 -1
  133. package/lib/cloudflare/kv-namespace.js.map +1 -1
  134. package/lib/cloudflare/pipeline.d.ts +7 -0
  135. package/lib/cloudflare/pipeline.d.ts.map +1 -1
  136. package/lib/cloudflare/pipeline.js +28 -2
  137. package/lib/cloudflare/pipeline.js.map +1 -1
  138. package/lib/cloudflare/queue-consumer.d.ts.map +1 -1
  139. package/lib/cloudflare/queue-consumer.js +2 -1
  140. package/lib/cloudflare/queue-consumer.js.map +1 -1
  141. package/lib/cloudflare/queue.d.ts.map +1 -1
  142. package/lib/cloudflare/queue.js +0 -8
  143. package/lib/cloudflare/queue.js.map +1 -1
  144. package/lib/cloudflare/route.d.ts +26 -1
  145. package/lib/cloudflare/route.d.ts.map +1 -1
  146. package/lib/cloudflare/route.js +84 -16
  147. package/lib/cloudflare/route.js.map +1 -1
  148. package/lib/cloudflare/secret.d.ts +137 -0
  149. package/lib/cloudflare/secret.d.ts.map +1 -0
  150. package/lib/cloudflare/secret.js +122 -0
  151. package/lib/cloudflare/secret.js.map +1 -0
  152. package/lib/cloudflare/secrets-store.d.ts +145 -0
  153. package/lib/cloudflare/secrets-store.d.ts.map +1 -0
  154. package/lib/cloudflare/secrets-store.js +213 -0
  155. package/lib/cloudflare/secrets-store.js.map +1 -0
  156. package/lib/cloudflare/sveltekit.d.ts +49 -0
  157. package/lib/cloudflare/sveltekit.d.ts.map +1 -0
  158. package/lib/cloudflare/sveltekit.js +56 -0
  159. package/lib/cloudflare/sveltekit.js.map +1 -0
  160. package/lib/cloudflare/user.d.ts.map +1 -1
  161. package/lib/cloudflare/user.js +2 -1
  162. package/lib/cloudflare/user.js.map +1 -1
  163. package/lib/cloudflare/vectorize-index.d.ts.map +1 -1
  164. package/lib/cloudflare/vectorize-index.js +6 -5
  165. package/lib/cloudflare/vectorize-index.js.map +1 -1
  166. package/lib/cloudflare/vectorize-metadata-index.d.ts.map +1 -1
  167. package/lib/cloudflare/vectorize-metadata-index.js +2 -1
  168. package/lib/cloudflare/vectorize-metadata-index.js.map +1 -1
  169. package/lib/cloudflare/website.d.ts.map +1 -1
  170. package/lib/cloudflare/website.js +7 -2
  171. package/lib/cloudflare/website.js.map +1 -1
  172. package/lib/cloudflare/worker-assets.d.ts +18 -0
  173. package/lib/cloudflare/worker-assets.d.ts.map +1 -1
  174. package/lib/cloudflare/worker-assets.js +61 -67
  175. package/lib/cloudflare/worker-assets.js.map +1 -1
  176. package/lib/cloudflare/worker-metadata.d.ts.map +1 -1
  177. package/lib/cloudflare/worker-metadata.js +23 -1
  178. package/lib/cloudflare/worker-metadata.js.map +1 -1
  179. package/lib/cloudflare/worker.d.ts +43 -2
  180. package/lib/cloudflare/worker.d.ts.map +1 -1
  181. package/lib/cloudflare/worker.js +50 -11
  182. package/lib/cloudflare/worker.js.map +1 -1
  183. package/lib/cloudflare/wrangler.json.d.ts +21 -0
  184. package/lib/cloudflare/wrangler.json.d.ts.map +1 -1
  185. package/lib/cloudflare/wrangler.json.js +33 -0
  186. package/lib/cloudflare/wrangler.json.js.map +1 -1
  187. package/lib/cloudflare/zone.d.ts.map +1 -1
  188. package/lib/cloudflare/zone.js +4 -3
  189. package/lib/cloudflare/zone.js.map +1 -1
  190. package/lib/destroy.d.ts.map +1 -1
  191. package/lib/destroy.js +30 -13
  192. package/lib/destroy.js.map +1 -1
  193. package/lib/dns/godaddy.d.ts.map +1 -1
  194. package/lib/dns/godaddy.js +3 -2
  195. package/lib/dns/godaddy.js.map +1 -1
  196. package/lib/dns/import-dns.d.ts.map +1 -1
  197. package/lib/dns/import-dns.js +2 -1
  198. package/lib/dns/import-dns.js.map +1 -1
  199. package/lib/esbuild/bundle.d.ts +1 -1
  200. package/lib/esbuild/bundle.d.ts.map +1 -1
  201. package/lib/esbuild/bundle.js +2 -1
  202. package/lib/esbuild/bundle.js.map +1 -1
  203. package/lib/fs/copy-file.d.ts.map +1 -1
  204. package/lib/fs/copy-file.js +2 -1
  205. package/lib/fs/copy-file.js.map +1 -1
  206. package/lib/fs/file.d.ts.map +1 -1
  207. package/lib/fs/file.js +2 -1
  208. package/lib/fs/file.js.map +1 -1
  209. package/lib/github/client.d.ts.map +1 -1
  210. package/lib/github/client.js +11 -10
  211. package/lib/github/client.js.map +1 -1
  212. package/lib/github/repository-environment.d.ts.map +1 -1
  213. package/lib/github/repository-environment.js +5 -4
  214. package/lib/github/repository-environment.js.map +1 -1
  215. package/lib/github/secret.d.ts.map +1 -1
  216. package/lib/github/secret.js +7 -6
  217. package/lib/github/secret.js.map +1 -1
  218. package/lib/index.d.ts +2 -1
  219. package/lib/index.d.ts.map +1 -1
  220. package/lib/index.js +1 -0
  221. package/lib/index.js.map +1 -1
  222. package/lib/neon/project.d.ts.map +1 -1
  223. package/lib/neon/project.js +3 -2
  224. package/lib/neon/project.js.map +1 -1
  225. package/lib/planetscale/api.d.ts +53 -0
  226. package/lib/planetscale/api.d.ts.map +1 -0
  227. package/lib/planetscale/api.js +84 -0
  228. package/lib/planetscale/api.js.map +1 -0
  229. package/lib/planetscale/branch.d.ts +129 -0
  230. package/lib/planetscale/branch.d.ts.map +1 -0
  231. package/lib/planetscale/branch.js +161 -0
  232. package/lib/planetscale/branch.js.map +1 -0
  233. package/lib/planetscale/database.d.ts +143 -0
  234. package/lib/planetscale/database.d.ts.map +1 -0
  235. package/lib/planetscale/database.js +184 -0
  236. package/lib/planetscale/database.js.map +1 -0
  237. package/lib/planetscale/index.d.ts +5 -0
  238. package/lib/planetscale/index.d.ts.map +1 -0
  239. package/lib/planetscale/index.js +5 -0
  240. package/lib/planetscale/index.js.map +1 -0
  241. package/lib/planetscale/utils.d.ts +15 -0
  242. package/lib/planetscale/utils.d.ts.map +1 -0
  243. package/lib/planetscale/utils.js +95 -0
  244. package/lib/planetscale/utils.js.map +1 -0
  245. package/lib/resource.js +7 -1
  246. package/lib/resource.js.map +1 -1
  247. package/lib/runtime/plugin.d.ts.map +1 -1
  248. package/lib/runtime/plugin.js +2 -1
  249. package/lib/runtime/plugin.js.map +1 -1
  250. package/lib/scope.d.ts +13 -2
  251. package/lib/scope.d.ts.map +1 -1
  252. package/lib/scope.js +53 -10
  253. package/lib/scope.js.map +1 -1
  254. package/lib/sentry/client-key.d.ts.map +1 -1
  255. package/lib/sentry/client-key.js +5 -4
  256. package/lib/sentry/client-key.js.map +1 -1
  257. package/lib/sentry/project.d.ts.map +1 -1
  258. package/lib/sentry/project.js +5 -4
  259. package/lib/sentry/project.js.map +1 -1
  260. package/lib/sentry/team.d.ts.map +1 -1
  261. package/lib/sentry/team.js +5 -4
  262. package/lib/sentry/team.js.map +1 -1
  263. package/lib/stripe/card.d.ts.map +1 -1
  264. package/lib/stripe/card.js +2 -1
  265. package/lib/stripe/card.js.map +1 -1
  266. package/lib/stripe/client.d.ts.map +1 -1
  267. package/lib/stripe/client.js +3 -2
  268. package/lib/stripe/client.js.map +1 -1
  269. package/lib/stripe/coupon.d.ts.map +1 -1
  270. package/lib/stripe/coupon.js +2 -1
  271. package/lib/stripe/coupon.js.map +1 -1
  272. package/lib/stripe/customer.d.ts.map +1 -1
  273. package/lib/stripe/customer.js +2 -1
  274. package/lib/stripe/customer.js.map +1 -1
  275. package/lib/stripe/entitlements-feature.d.ts.map +1 -1
  276. package/lib/stripe/entitlements-feature.js +2 -1
  277. package/lib/stripe/entitlements-feature.js.map +1 -1
  278. package/lib/stripe/file.d.ts.map +1 -1
  279. package/lib/stripe/file.js +2 -1
  280. package/lib/stripe/file.js.map +1 -1
  281. package/lib/stripe/meter.d.ts.map +1 -1
  282. package/lib/stripe/meter.js +4 -2
  283. package/lib/stripe/meter.js.map +1 -1
  284. package/lib/stripe/portal-configuration.d.ts.map +1 -1
  285. package/lib/stripe/portal-configuration.js +2 -1
  286. package/lib/stripe/portal-configuration.js.map +1 -1
  287. package/lib/stripe/price.d.ts.map +1 -1
  288. package/lib/stripe/price.js +2 -1
  289. package/lib/stripe/price.js.map +1 -1
  290. package/lib/stripe/product-feature.d.ts.map +1 -1
  291. package/lib/stripe/product-feature.js +2 -1
  292. package/lib/stripe/product-feature.js.map +1 -1
  293. package/lib/stripe/product.d.ts.map +1 -1
  294. package/lib/stripe/product.js +2 -1
  295. package/lib/stripe/product.js.map +1 -1
  296. package/lib/stripe/promotion-code.d.ts.map +1 -1
  297. package/lib/stripe/promotion-code.js +2 -1
  298. package/lib/stripe/promotion-code.js.map +1 -1
  299. package/lib/stripe/shipping-rate.d.ts.map +1 -1
  300. package/lib/stripe/shipping-rate.js +2 -1
  301. package/lib/stripe/shipping-rate.js.map +1 -1
  302. package/lib/stripe/tax-rate.d.ts.map +1 -1
  303. package/lib/stripe/tax-rate.js +2 -1
  304. package/lib/stripe/tax-rate.js.map +1 -1
  305. package/lib/stripe/webhook.d.ts.map +1 -1
  306. package/lib/stripe/webhook.js +3 -2
  307. package/lib/stripe/webhook.js.map +1 -1
  308. package/lib/test/bun.d.ts.map +1 -1
  309. package/lib/test/bun.js +6 -1
  310. package/lib/test/bun.js.map +1 -1
  311. package/lib/test/prune.js +7 -1
  312. package/lib/test/prune.js.map +1 -1
  313. package/lib/test/vitest.d.ts.map +1 -1
  314. package/lib/test/vitest.js +10 -3
  315. package/lib/test/vitest.js.map +1 -1
  316. package/lib/upstash/redis.d.ts.map +1 -1
  317. package/lib/upstash/redis.js +2 -1
  318. package/lib/upstash/redis.js.map +1 -1
  319. package/lib/util/async-queue.d.ts +35 -0
  320. package/lib/util/async-queue.d.ts.map +1 -0
  321. package/lib/util/async-queue.js +87 -0
  322. package/lib/util/async-queue.js.map +1 -0
  323. package/lib/util/cli.d.ts +37 -0
  324. package/lib/util/cli.d.ts.map +1 -0
  325. package/lib/util/cli.js +90 -0
  326. package/lib/util/cli.js.map +1 -0
  327. package/lib/util/ignore-matcher.d.ts +94 -0
  328. package/lib/util/ignore-matcher.d.ts.map +1 -0
  329. package/lib/util/ignore-matcher.js +616 -0
  330. package/lib/util/ignore-matcher.js.map +1 -0
  331. package/lib/util/logger.d.ts +3 -0
  332. package/lib/util/logger.d.ts.map +1 -0
  333. package/lib/util/logger.js +15 -0
  334. package/lib/util/logger.js.map +1 -0
  335. package/lib/util/retry.d.ts.map +1 -1
  336. package/lib/util/retry.js +0 -1
  337. package/lib/util/retry.js.map +1 -1
  338. package/lib/util/safe-fetch.d.ts.map +1 -1
  339. package/lib/util/safe-fetch.js +2 -1
  340. package/lib/util/safe-fetch.js.map +1 -1
  341. package/lib/util/telemetry/client.d.ts +32 -0
  342. package/lib/util/telemetry/client.d.ts.map +1 -0
  343. package/lib/util/telemetry/client.js +94 -0
  344. package/lib/util/telemetry/client.js.map +1 -0
  345. package/lib/util/telemetry/constants.d.ts +4 -0
  346. package/lib/util/telemetry/constants.d.ts.map +1 -0
  347. package/lib/util/telemetry/constants.js +8 -0
  348. package/lib/util/telemetry/constants.js.map +1 -0
  349. package/lib/util/telemetry/context.d.ts +15 -0
  350. package/lib/util/telemetry/context.d.ts.map +1 -0
  351. package/lib/util/telemetry/context.js +128 -0
  352. package/lib/util/telemetry/context.js.map +1 -0
  353. package/lib/util/telemetry/index.d.ts +3 -0
  354. package/lib/util/telemetry/index.d.ts.map +1 -0
  355. package/lib/util/telemetry/index.js +3 -0
  356. package/lib/util/telemetry/index.js.map +1 -0
  357. package/lib/util/telemetry/types.d.ts +59 -0
  358. package/lib/util/telemetry/types.d.ts.map +1 -0
  359. package/lib/util/telemetry/types.js +1 -0
  360. package/lib/util/telemetry/types.js.map +1 -0
  361. package/lib/util/xdg-paths.d.ts +9 -0
  362. package/lib/util/xdg-paths.d.ts.map +1 -0
  363. package/lib/util/xdg-paths.js +41 -0
  364. package/lib/util/xdg-paths.js.map +1 -0
  365. package/lib/vercel/project.d.ts.map +1 -1
  366. package/lib/vercel/project.js +2 -1
  367. package/lib/vercel/project.js.map +1 -1
  368. package/lib/web/astro.d.ts.map +1 -1
  369. package/lib/web/astro.js +2 -1
  370. package/lib/web/astro.js.map +1 -1
  371. package/lib/web/shadcn.d.ts.map +1 -1
  372. package/lib/web/shadcn.js +2 -1
  373. package/lib/web/shadcn.js.map +1 -1
  374. package/lib/web/vite.d.ts.map +1 -1
  375. package/lib/web/vite.js +3 -2
  376. package/lib/web/vite.js.map +1 -1
  377. package/lib/web/vitepress/dependencies.d.ts.map +1 -1
  378. package/lib/web/vitepress/dependencies.js +2 -1
  379. package/lib/web/vitepress/dependencies.js.map +1 -1
  380. package/lib/web/vitepress/vitepress.d.ts.map +1 -1
  381. package/lib/web/vitepress/vitepress.js +2 -1
  382. package/lib/web/vitepress/vitepress.js.map +1 -1
  383. package/package.json +6 -4
  384. package/src/ai/astro-file.ts +2 -1
  385. package/src/ai/client.ts +3 -2
  386. package/src/alchemy.ts +28 -3
  387. package/src/apply.ts +66 -5
  388. package/src/aws/control/client.ts +4 -4
  389. package/src/aws/control/properties.ts +48 -0
  390. package/src/aws/control/resource.ts +3 -2
  391. package/src/aws/control/types.ts +3988 -6301
  392. package/src/aws/function.ts +9 -8
  393. package/src/aws/oidc/oidc-provider.ts +3 -2
  394. package/src/aws/queue.ts +3 -2
  395. package/src/aws/role.ts +3 -1
  396. package/src/aws/ssm-parameter.ts +2 -1
  397. package/src/cloudflare/account-api-token.ts +3 -2
  398. package/src/cloudflare/ai-gateway.ts +4 -3
  399. package/src/cloudflare/api-error.ts +36 -0
  400. package/src/cloudflare/api.ts +9 -4
  401. package/src/cloudflare/assets.ts +30 -6
  402. package/src/cloudflare/astro.ts +176 -0
  403. package/src/cloudflare/auth.ts +3 -2
  404. package/src/cloudflare/bindings.ts +29 -0
  405. package/src/cloudflare/bound.ts +38 -21
  406. package/src/cloudflare/bucket.ts +15 -8
  407. package/src/cloudflare/bundle/bundle-worker.ts +2 -1
  408. package/src/cloudflare/bundle/nodejs-compat-mode.ts +2 -1
  409. package/src/cloudflare/custom-domain.ts +10 -9
  410. package/src/cloudflare/d1-database.ts +11 -10
  411. package/src/cloudflare/d1-export.ts +2 -1
  412. package/src/cloudflare/d1-import.ts +2 -1
  413. package/src/cloudflare/d1-migrations.ts +2 -1
  414. package/src/cloudflare/dispatch-namespace.ts +281 -0
  415. package/src/cloudflare/dns-records.ts +5 -4
  416. package/src/cloudflare/do-state-store/worker.ts +4 -0
  417. package/src/cloudflare/email-address.ts +203 -0
  418. package/src/cloudflare/email-catch-all.ts +248 -0
  419. package/src/cloudflare/email-routing.ts +230 -0
  420. package/src/cloudflare/email-rule.ts +322 -0
  421. package/src/cloudflare/hyperdrive.ts +5 -4
  422. package/src/cloudflare/images.ts +59 -0
  423. package/src/cloudflare/index.ts +10 -0
  424. package/src/cloudflare/kv-namespace.ts +2 -1
  425. package/src/cloudflare/pipeline.ts +38 -2
  426. package/src/cloudflare/queue-consumer.ts +2 -1
  427. package/src/cloudflare/queue.ts +0 -12
  428. package/src/cloudflare/route.ts +118 -18
  429. package/src/cloudflare/secret.ts +253 -0
  430. package/src/cloudflare/secrets-store.ts +420 -0
  431. package/src/cloudflare/sveltekit.ts +72 -0
  432. package/src/cloudflare/user.ts +2 -1
  433. package/src/cloudflare/vectorize-index.ts +6 -5
  434. package/src/cloudflare/vectorize-metadata-index.ts +2 -1
  435. package/src/cloudflare/website.ts +76 -66
  436. package/src/cloudflare/worker-assets.ts +95 -89
  437. package/src/cloudflare/worker-metadata.ts +20 -1
  438. package/src/cloudflare/worker.ts +116 -18
  439. package/src/cloudflare/wrangler.json.ts +63 -0
  440. package/src/cloudflare/zone.ts +4 -3
  441. package/src/destroy.ts +35 -17
  442. package/src/dns/godaddy.ts +3 -2
  443. package/src/dns/import-dns.ts +2 -1
  444. package/src/esbuild/bundle.ts +2 -1
  445. package/src/fs/copy-file.ts +2 -1
  446. package/src/fs/file.ts +3 -1
  447. package/src/github/client.ts +11 -10
  448. package/src/github/repository-environment.ts +5 -4
  449. package/src/github/secret.ts +7 -6
  450. package/src/index.ts +2 -1
  451. package/src/neon/project.ts +3 -2
  452. package/src/planetscale/api.ts +115 -0
  453. package/src/planetscale/branch.ts +352 -0
  454. package/src/planetscale/database.ts +394 -0
  455. package/src/planetscale/index.ts +4 -0
  456. package/src/planetscale/utils.ts +189 -0
  457. package/src/resource.ts +7 -1
  458. package/src/runtime/plugin.ts +2 -1
  459. package/src/scope.ts +64 -13
  460. package/src/sentry/client-key.ts +5 -4
  461. package/src/sentry/project.ts +5 -4
  462. package/src/sentry/team.ts +5 -4
  463. package/src/stripe/card.ts +2 -1
  464. package/src/stripe/client.ts +3 -2
  465. package/src/stripe/coupon.ts +2 -1
  466. package/src/stripe/customer.ts +2 -1
  467. package/src/stripe/entitlements-feature.ts +2 -1
  468. package/src/stripe/file.ts +2 -1
  469. package/src/stripe/meter.ts +4 -2
  470. package/src/stripe/portal-configuration.ts +2 -1
  471. package/src/stripe/price.ts +2 -1
  472. package/src/stripe/product-feature.ts +2 -1
  473. package/src/stripe/product.ts +2 -1
  474. package/src/stripe/promotion-code.ts +2 -1
  475. package/src/stripe/shipping-rate.ts +2 -1
  476. package/src/stripe/tax-rate.ts +2 -1
  477. package/src/stripe/webhook.ts +3 -2
  478. package/src/test/bun.ts +6 -1
  479. package/src/test/prune.ts +7 -1
  480. package/src/test/vitest.ts +14 -3
  481. package/src/upstash/redis.ts +2 -1
  482. package/src/util/async-queue.ts +97 -0
  483. package/src/util/cli.tsx +221 -0
  484. package/src/util/ignore-matcher.ts +873 -0
  485. package/src/util/logger.ts +17 -0
  486. package/src/util/retry.ts +0 -1
  487. package/src/util/safe-fetch.ts +2 -1
  488. package/src/util/telemetry/client.ts +127 -0
  489. package/src/util/telemetry/constants.ts +13 -0
  490. package/src/util/telemetry/context.ts +154 -0
  491. package/src/util/telemetry/index.ts +2 -0
  492. package/src/util/telemetry/types.ts +83 -0
  493. package/src/util/xdg-paths.ts +48 -0
  494. package/src/vercel/project.ts +2 -1
  495. package/src/web/astro.ts +2 -1
  496. package/src/web/shadcn.ts +2 -1
  497. package/src/web/vite.ts +3 -2
  498. package/src/web/vitepress/dependencies.ts +2 -1
  499. package/src/web/vitepress/vitepress.ts +2 -1
@@ -1,6 +1,7 @@
1
1
  import path from "node:path";
2
2
  import { alchemy } from "../alchemy.ts";
3
3
  import { Exec } from "../os/exec.ts";
4
+ import { Scope } from "../scope.ts";
4
5
  import { Assets } from "./assets.ts";
5
6
  import type { Bindings } from "./bindings.ts";
6
7
  import {
@@ -101,81 +102,90 @@ export async function Website<B extends Bindings>(
101
102
  }
102
103
  const wrangler = props.wrangler ?? true;
103
104
 
104
- return alchemy.run(id, async () => {
105
- const cwd = path.resolve(props.cwd || process.cwd());
106
- const fileName =
107
- typeof wrangler === "boolean"
108
- ? "wrangler.jsonc"
109
- : typeof wrangler === "string"
110
- ? wrangler
111
- : (wrangler?.path ?? "wrangler.jsonc");
112
- const wranglerPath =
113
- fileName && path.relative(cwd, path.join(cwd, fileName));
114
- const wranglerMain =
115
- typeof wrangler === "object" ? (wrangler.main ?? props.main) : props.main;
105
+ return alchemy.run(
106
+ id,
107
+ {
108
+ parent: Scope.current,
109
+ },
110
+ async () => {
111
+ const cwd = path.resolve(props.cwd || process.cwd());
112
+ const fileName =
113
+ typeof wrangler === "boolean"
114
+ ? "wrangler.jsonc"
115
+ : typeof wrangler === "string"
116
+ ? wrangler
117
+ : (wrangler?.path ?? "wrangler.jsonc");
118
+ const wranglerPath =
119
+ fileName && path.relative(cwd, path.join(cwd, fileName));
120
+ const wranglerMain =
121
+ typeof wrangler === "object"
122
+ ? (wrangler.main ?? props.main)
123
+ : props.main;
116
124
 
117
- const workerName = props.name ?? id;
125
+ const workerName = props.name ?? id;
118
126
 
119
- const assetDir =
120
- typeof props.assets === "string"
121
- ? props.assets
122
- : (props.assets?.dist ?? "dist");
127
+ const assetDir =
128
+ typeof props.assets === "string"
129
+ ? props.assets
130
+ : (props.assets?.dist ?? "dist");
123
131
 
124
- const workerProps = {
125
- ...props,
126
- compatibilityDate: props.compatibilityDate ?? DEFAULT_COMPATIBILITY_DATE,
127
- name: workerName,
128
- entrypoint: props.main,
129
- assets: {
130
- html_handling: "auto-trailing-slash",
131
- not_found_handling: "single-page-application",
132
- run_worker_first: false,
133
- ...(typeof props.assets === "string" ? {} : props.assets),
134
- },
135
- script: props.main
136
- ? undefined
137
- : `
132
+ const workerProps = {
133
+ ...props,
134
+ compatibilityDate:
135
+ props.compatibilityDate ?? DEFAULT_COMPATIBILITY_DATE,
136
+ name: workerName,
137
+ entrypoint: props.main,
138
+ assets: {
139
+ html_handling: "auto-trailing-slash",
140
+ not_found_handling: "single-page-application",
141
+ run_worker_first: false,
142
+ ...(typeof props.assets === "string" ? {} : props.assets),
143
+ },
144
+ script: props.main
145
+ ? undefined
146
+ : `
138
147
  export default {
139
148
  async fetch(request, env) {
140
149
  return new Response("Not Found", { status: 404 });
141
150
  },
142
151
  };`,
143
- url: true,
144
- adopt: true,
145
- } as WorkerProps<any> & { name: string };
152
+ url: true,
153
+ adopt: true,
154
+ } as WorkerProps<any> & { name: string };
146
155
 
147
- if (wrangler) {
148
- await WranglerJson("wrangler.jsonc", {
149
- path: wranglerPath,
150
- worker: workerProps,
151
- main: wranglerMain,
152
- // hard-code the assets directory because we haven't yet included the assets binding
153
- assets: {
154
- binding: "ASSETS",
155
- directory: assetDir,
156
- },
157
- });
158
- }
156
+ if (wrangler) {
157
+ await WranglerJson("wrangler.jsonc", {
158
+ path: wranglerPath,
159
+ worker: workerProps,
160
+ main: wranglerMain,
161
+ // hard-code the assets directory because we haven't yet included the assets binding
162
+ assets: {
163
+ binding: "ASSETS",
164
+ directory: assetDir,
165
+ },
166
+ });
167
+ }
159
168
 
160
- if (props.command) {
161
- await Exec("build", {
162
- cwd,
163
- command: props.command,
164
- env: props.env,
165
- memoize: props.memoize,
166
- });
167
- }
169
+ if (props.command) {
170
+ await Exec("build", {
171
+ cwd,
172
+ command: props.command,
173
+ env: props.env,
174
+ memoize: props.memoize,
175
+ });
176
+ }
168
177
 
169
- return (await Worker("worker", {
170
- ...workerProps,
171
- bindings: {
172
- ...workerProps.bindings,
173
- // we don't include the Assets binding until after build to make sure the asset manifest is correct
174
- // we generate the wrangler.json using all the bind
175
- ASSETS: await Assets("assets", {
176
- path: assetDir,
177
- }),
178
- },
179
- } as WorkerProps<any> & { name: string })) as Website<B>;
180
- });
178
+ return (await Worker("worker", {
179
+ ...workerProps,
180
+ bindings: {
181
+ ...workerProps.bindings,
182
+ // we don't include the Assets binding until after build to make sure the asset manifest is correct
183
+ // we generate the wrangler.json using all the bind
184
+ ASSETS: await Assets("assets", {
185
+ path: assetDir,
186
+ }),
187
+ },
188
+ } as WorkerProps<any> & { name: string })) as Website<B>;
189
+ },
190
+ );
181
191
  }
@@ -1,6 +1,7 @@
1
1
  import crypto from "node:crypto";
2
2
  import fs from "node:fs/promises";
3
3
  import path from "node:path";
4
+ import { AsyncQueue } from "../util/async-queue.ts";
4
5
  import { getContentType } from "../util/content-type.ts";
5
6
  import type { CloudflareApi } from "./api.ts";
6
7
  import type { Assets } from "./assets.ts";
@@ -63,22 +64,12 @@ export async function uploadAssets(
63
64
  // Process the assets configuration once at the beginning
64
65
  const processedConfig = createAssetConfig(assetConfig);
65
66
 
66
- // Generate the file manifest
67
- const fileMetadata: Record<string, FileMetadata> = {};
68
-
69
- // Process each file in the assets
70
- for (const file of assets.files) {
71
- const { hash, size } = await calculateFileMetadata(file.filePath);
72
- // Use the relative path as the key, ensuring it starts with a slash
73
- const key = file.path.startsWith("/") ? file.path : `/${file.path}`;
74
- fileMetadata[key] = { hash, size };
75
- }
67
+ const { manifest, filePathsByHash } = await prepareAssetManifest(assets);
76
68
 
77
69
  // Start the upload session
78
- const uploadSessionUrl = `/accounts/${api.accountId}/workers/scripts/${workerName}/assets-upload-session`;
79
70
  const uploadSessionResponse = await api.post(
80
- uploadSessionUrl,
81
- JSON.stringify({ manifest: fileMetadata }),
71
+ `/accounts/${api.accountId}/workers/scripts/${workerName}/assets-upload-session`,
72
+ JSON.stringify({ manifest }),
82
73
  {
83
74
  headers: { "Content-Type": "application/json" },
84
75
  },
@@ -86,7 +77,7 @@ export async function uploadAssets(
86
77
 
87
78
  if (!uploadSessionResponse.ok) {
88
79
  throw new Error(
89
- `Failed to start assets upload session: ${uploadSessionResponse.status} ${uploadSessionResponse.statusText}`,
80
+ `Failed to start assets upload session: ${uploadSessionResponse.status} ${uploadSessionResponse.statusText} - ${await uploadSessionResponse.text()}`,
90
81
  );
91
82
  }
92
83
 
@@ -105,81 +96,22 @@ export async function uploadAssets(
105
96
  let completionToken = sessionData.result.jwt;
106
97
  const buckets = sessionData.result.buckets;
107
98
 
108
- // Process each bucket of files
109
- for (const bucket of buckets) {
110
- const formData = new FormData();
111
-
112
- // Prepare file reading operations for parallel execution
113
- const fileReadPromises = bucket.map(async (fileHash) => {
114
- // Find the file with this hash
115
- const file = assets.files.find((f) => {
116
- const filePath = f.path.startsWith("/") ? f.path : `/${f.path}`;
117
- return fileMetadata[filePath]?.hash === fileHash;
118
- });
119
-
120
- if (!file) {
121
- throw new Error(`Could not find file with hash ${fileHash}`);
122
- }
123
-
124
- // Read the file content
125
- const fileContent = await fs.readFile(file.filePath);
126
-
127
- // Convert to base64 as required by the API when using base64=true
128
- const base64Content = fileContent.toString("base64");
129
-
130
- return {
131
- fileHash,
132
- base64Content,
133
- filePath: file.filePath,
134
- };
135
- });
136
-
137
- // Read all files in parallel
138
- const fileResults = await Promise.all(fileReadPromises);
139
-
140
- // Add each file to the form
141
- for (const { fileHash, base64Content, filePath } of fileResults) {
142
- // Add the file to the form with the hash as the key and set the correct content type
143
- const blob = new Blob([base64Content], {
144
- // if you set application/octet-stream, you get weird `-1` errors with a message to contact support
145
- type: getContentType(filePath) ?? "application/null",
146
- });
147
- formData.append(fileHash, blob, fileHash);
148
- }
149
-
150
- // Upload this batch of files
151
- const uploadResponse = await api.post(
152
- `/accounts/${api.accountId}/workers/assets/upload?base64=true`,
153
- formData,
154
- {
155
- headers: {
156
- Authorization: `Bearer ${completionToken}`,
157
- "Content-Type": "multipart/form-data",
158
- },
159
- },
160
- );
161
-
162
- if (!uploadResponse.ok) {
163
- throw new Error(
164
- `Failed to upload asset files: ${uploadResponse.status} ${uploadResponse.statusText}`,
165
- );
166
- }
167
-
168
- const uploadData = (await uploadResponse.json()) as UploadResponse;
169
- if (!uploadData.success) {
170
- const error = uploadData.errors[0];
171
- const message = error.message;
172
- const code = error.code;
173
- throw new Error(
174
- `Failed to upload asset files: ${message} (Code: ${code})`,
175
- );
176
- }
177
-
178
- // Update the completion token for the next batch
179
- if (uploadData.result.jwt) {
180
- completionToken = uploadData.result.jwt;
181
- }
182
- }
99
+ const queue = new AsyncQueue(3);
100
+ await Promise.all(
101
+ buckets.map((bucket) =>
102
+ queue.add(async () => {
103
+ const jwt = await uploadBucket(
104
+ api,
105
+ sessionData.result.jwt,
106
+ bucket,
107
+ filePathsByHash,
108
+ );
109
+ if (jwt) {
110
+ completionToken = jwt;
111
+ }
112
+ }),
113
+ ),
114
+ );
183
115
 
184
116
  // Return the final completion token with asset configuration
185
117
  return {
@@ -225,6 +157,74 @@ export function createAssetConfig(config?: AssetsConfig): AssetsConfig {
225
157
  return assetConfig;
226
158
  }
227
159
 
160
+ /**
161
+ * Prepares the asset manifest for the assets upload session
162
+ *
163
+ * @param assets Assets resource containing files to upload
164
+ * @returns Asset manifest and file paths by hash
165
+ */
166
+ export async function prepareAssetManifest(assets: Assets) {
167
+ const manifest: Record<string, FileMetadata> = {};
168
+ const filePathsByHash = new Map<string, string>();
169
+ await Promise.all(
170
+ assets.files.map(async (file) => {
171
+ const { hash, size } = await calculateFileMetadata(file.filePath);
172
+ const key = file.path.startsWith("/") ? file.path : `/${file.path}`;
173
+ manifest[key] = { hash, size };
174
+ filePathsByHash.set(hash, file.filePath);
175
+ }),
176
+ );
177
+ return { manifest, filePathsByHash };
178
+ }
179
+
180
+ async function uploadBucket(
181
+ api: CloudflareApi,
182
+ jwt: string,
183
+ bucket: string[],
184
+ files: Map<string, string>,
185
+ ) {
186
+ const formData = new FormData();
187
+ await Promise.all(
188
+ bucket.map(async (fileHash) => {
189
+ const filePath = files.get(fileHash);
190
+ if (!filePath) {
191
+ throw new Error(`Could not find file with hash ${fileHash}`);
192
+ }
193
+ const fileContent = await fs.readFile(filePath);
194
+ const blob = new Blob([fileContent.toString("base64")], {
195
+ type: getContentType(filePath) ?? "application/null",
196
+ });
197
+ formData.append(fileHash, blob, fileHash);
198
+ }),
199
+ );
200
+ const uploadResponse = await api.post(
201
+ `/accounts/${api.accountId}/workers/assets/upload?base64=true`,
202
+ formData,
203
+ {
204
+ headers: {
205
+ Authorization: `Bearer ${jwt}`,
206
+ "Content-Type": "multipart/form-data",
207
+ },
208
+ },
209
+ );
210
+
211
+ if (!uploadResponse.ok) {
212
+ throw new Error(
213
+ `Failed to upload asset files: ${uploadResponse.status} ${uploadResponse.statusText}`,
214
+ );
215
+ }
216
+
217
+ const uploadData = (await uploadResponse.json()) as UploadResponse;
218
+ if (!uploadData.success) {
219
+ const error = uploadData.errors[0];
220
+ const message = error.message;
221
+ const code = error.code;
222
+ throw new Error(`Failed to upload asset files: ${message} (Code: ${code})`);
223
+ }
224
+
225
+ return uploadData.result.jwt;
226
+ }
227
+
228
228
  /**
229
229
  * Calculate the SHA-256 hash and size of a file
230
230
  *
@@ -242,6 +242,12 @@ export async function calculateFileMetadata(
242
242
  const extension = path.extname(filePath).substring(1);
243
243
  hash.update(extension);
244
244
 
245
+ if (contents.length > 26214400) {
246
+ throw new Error(
247
+ `File "${filePath}" is too large to upload as an asset to Cloudflare (the file is ${(contents.length / 1024 / 1024).toFixed(2)} MB; the maximum size is 25MB).`,
248
+ );
249
+ }
250
+
245
251
  return {
246
252
  hash: hash.digest("hex").slice(0, 32),
247
253
  size: contents.length,
@@ -1,5 +1,6 @@
1
1
  import path from "node:path";
2
2
  import type { Context } from "../context.ts";
3
+ import { logger } from "../util/logger.ts";
3
4
  import { slugify } from "../util/slugify.ts";
4
5
  import {
5
6
  Self,
@@ -386,6 +387,13 @@ export async function prepareWorkerMetadata<B extends Bindings>(
386
387
  name: bindingName,
387
388
  bucket_name: binding.name,
388
389
  });
390
+ } else if (binding.type === "secrets_store") {
391
+ meta.bindings.push({
392
+ type: "secrets_store",
393
+ name: bindingName,
394
+ store_id: binding.id,
395
+ secret_name: bindingName,
396
+ });
389
397
  } else if (binding.type === "assets") {
390
398
  meta.bindings.push({
391
399
  type: "assets",
@@ -460,11 +468,22 @@ export async function prepareWorkerMetadata<B extends Bindings>(
460
468
  name: bindingName,
461
469
  dataset: binding.dataset,
462
470
  });
471
+ } else if (binding.type === "images") {
472
+ meta.bindings.push({
473
+ type: "images",
474
+ name: bindingName,
475
+ });
463
476
  } else if (binding.type === "version_metadata") {
464
477
  meta.bindings.push({
465
478
  type: "version_metadata",
466
479
  name: bindingName,
467
480
  });
481
+ } else if (binding.type === "dispatch_namespace") {
482
+ meta.bindings.push({
483
+ type: "dispatch_namespace",
484
+ name: bindingName,
485
+ namespace: binding.namespaceName,
486
+ });
468
487
  } else {
469
488
  // @ts-expect-error - we should never reach here
470
489
  throw new Error(`Unsupported binding type: ${binding.type}`);
@@ -544,7 +563,7 @@ export async function prepareWorkerMetadata<B extends Bindings>(
544
563
  meta.body_part = scriptName;
545
564
  }
546
565
  if (process.env.DEBUG) {
547
- console.log(meta);
566
+ logger.log(meta);
548
567
  }
549
568
  return meta;
550
569
  }