alchemy 0.62.3 → 0.63.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (594) hide show
  1. package/bin/alchemy.js +1516 -1202
  2. package/bin/commands/deploy.ts +2 -0
  3. package/bin/commands/dev.ts +2 -0
  4. package/bin/services/execute-alchemy.ts +11 -0
  5. package/bin/services/template-manager.ts +2 -0
  6. package/bin/types.ts +2 -1
  7. package/lib/alchemy.d.ts +6 -22
  8. package/lib/alchemy.d.ts.map +1 -1
  9. package/lib/alchemy.js +65 -169
  10. package/lib/alchemy.js.map +1 -1
  11. package/lib/apply.d.ts +0 -2
  12. package/lib/apply.d.ts.map +1 -1
  13. package/lib/apply.js +2 -16
  14. package/lib/apply.js.map +1 -1
  15. package/lib/aws/account-id.d.ts.map +1 -1
  16. package/lib/aws/account-id.js +3 -2
  17. package/lib/aws/account-id.js.map +1 -1
  18. package/lib/aws/bucket.d.ts +8 -2
  19. package/lib/aws/bucket.d.ts.map +1 -1
  20. package/lib/aws/bucket.js +21 -14
  21. package/lib/aws/bucket.js.map +1 -1
  22. package/lib/aws/ec2/security-group.d.ts +8 -2
  23. package/lib/aws/ec2/security-group.d.ts.map +1 -1
  24. package/lib/aws/ec2/security-group.js +7 -2
  25. package/lib/aws/ec2/security-group.js.map +1 -1
  26. package/lib/aws/function.d.ts +9 -3
  27. package/lib/aws/function.d.ts.map +1 -1
  28. package/lib/aws/function.js +35 -26
  29. package/lib/aws/function.js.map +1 -1
  30. package/lib/aws/policy-attachment.d.ts.map +1 -1
  31. package/lib/aws/policy-attachment.js +2 -1
  32. package/lib/aws/policy-attachment.js.map +1 -1
  33. package/lib/aws/policy.d.ts +8 -2
  34. package/lib/aws/policy.d.ts.map +1 -1
  35. package/lib/aws/policy.js +13 -4
  36. package/lib/aws/policy.js.map +1 -1
  37. package/lib/aws/queue.d.ts +8 -2
  38. package/lib/aws/queue.d.ts.map +1 -1
  39. package/lib/aws/queue.js +22 -14
  40. package/lib/aws/queue.js.map +1 -1
  41. package/lib/aws/role.d.ts +8 -2
  42. package/lib/aws/role.d.ts.map +1 -1
  43. package/lib/aws/role.js +10 -3
  44. package/lib/aws/role.js.map +1 -1
  45. package/lib/aws/ses.d.ts +1 -1
  46. package/lib/aws/ses.d.ts.map +1 -1
  47. package/lib/aws/ses.js +2 -1
  48. package/lib/aws/ses.js.map +1 -1
  49. package/lib/aws/ssm-parameter.d.ts +8 -2
  50. package/lib/aws/ssm-parameter.d.ts.map +1 -1
  51. package/lib/aws/ssm-parameter.js +15 -10
  52. package/lib/aws/ssm-parameter.js.map +1 -1
  53. package/lib/aws/table.d.ts +8 -2
  54. package/lib/aws/table.d.ts.map +1 -1
  55. package/lib/aws/table.js +17 -9
  56. package/lib/aws/table.js.map +1 -1
  57. package/lib/cloudflare/account-api-token.d.ts +2 -2
  58. package/lib/cloudflare/account-api-token.d.ts.map +1 -1
  59. package/lib/cloudflare/account-api-token.js +7 -6
  60. package/lib/cloudflare/account-api-token.js.map +1 -1
  61. package/lib/cloudflare/ai-gateway.d.ts +9 -4
  62. package/lib/cloudflare/ai-gateway.d.ts.map +1 -1
  63. package/lib/cloudflare/ai-gateway.js +20 -24
  64. package/lib/cloudflare/ai-gateway.js.map +1 -1
  65. package/lib/cloudflare/api-schema.d.ts +2 -2
  66. package/lib/cloudflare/api-schema.d.ts.map +1 -1
  67. package/lib/cloudflare/api-schema.js +6 -2
  68. package/lib/cloudflare/api-schema.js.map +1 -1
  69. package/lib/cloudflare/api-shield.d.ts +5 -1
  70. package/lib/cloudflare/api-shield.d.ts.map +1 -1
  71. package/lib/cloudflare/api-shield.js +6 -1
  72. package/lib/cloudflare/api-shield.js.map +1 -1
  73. package/lib/cloudflare/assets.d.ts +1 -1
  74. package/lib/cloudflare/assets.d.ts.map +1 -1
  75. package/lib/cloudflare/astro/astro.d.ts.map +1 -1
  76. package/lib/cloudflare/astro/astro.js +3 -1
  77. package/lib/cloudflare/astro/astro.js.map +1 -1
  78. package/lib/cloudflare/astro/plugin.d.ts +2 -1
  79. package/lib/cloudflare/astro/plugin.d.ts.map +1 -1
  80. package/lib/cloudflare/astro/plugin.js.map +1 -1
  81. package/lib/cloudflare/bindings.d.ts +2 -2
  82. package/lib/cloudflare/bindings.d.ts.map +1 -1
  83. package/lib/cloudflare/bound.d.ts +1 -1
  84. package/lib/cloudflare/bound.d.ts.map +1 -1
  85. package/lib/cloudflare/bucket.d.ts +120 -1
  86. package/lib/cloudflare/bucket.d.ts.map +1 -1
  87. package/lib/cloudflare/bucket.js +80 -2
  88. package/lib/cloudflare/bucket.js.map +1 -1
  89. package/lib/cloudflare/compatibility-date.gen.d.ts +1 -1
  90. package/lib/cloudflare/compatibility-date.gen.js +1 -1
  91. package/lib/cloudflare/container.d.ts +10 -4
  92. package/lib/cloudflare/container.d.ts.map +1 -1
  93. package/lib/cloudflare/container.js +12 -9
  94. package/lib/cloudflare/container.js.map +1 -1
  95. package/lib/cloudflare/custom-domain.js +2 -1
  96. package/lib/cloudflare/custom-domain.js.map +1 -1
  97. package/lib/cloudflare/d1-database.d.ts +1 -1
  98. package/lib/cloudflare/d1-database.d.ts.map +1 -1
  99. package/lib/cloudflare/d1-database.js +6 -2
  100. package/lib/cloudflare/d1-database.js.map +1 -1
  101. package/lib/cloudflare/dispatch-namespace.d.ts +2 -0
  102. package/lib/cloudflare/dispatch-namespace.d.ts.map +1 -1
  103. package/lib/cloudflare/dispatch-namespace.js +7 -5
  104. package/lib/cloudflare/dispatch-namespace.js.map +1 -1
  105. package/lib/cloudflare/hyperdrive.d.ts +7 -1
  106. package/lib/cloudflare/hyperdrive.d.ts.map +1 -1
  107. package/lib/cloudflare/hyperdrive.js +2 -1
  108. package/lib/cloudflare/hyperdrive.js.map +1 -1
  109. package/lib/cloudflare/kv-namespace.d.ts +3 -0
  110. package/lib/cloudflare/kv-namespace.d.ts.map +1 -1
  111. package/lib/cloudflare/kv-namespace.js +11 -2
  112. package/lib/cloudflare/kv-namespace.js.map +1 -1
  113. package/lib/cloudflare/miniflare/miniflare-worker-proxy.js +3 -1
  114. package/lib/cloudflare/miniflare/miniflare-worker-proxy.js.map +1 -1
  115. package/lib/cloudflare/miniflare/paths.d.ts +4 -0
  116. package/lib/cloudflare/miniflare/paths.d.ts.map +1 -1
  117. package/lib/cloudflare/miniflare/paths.js +11 -0
  118. package/lib/cloudflare/miniflare/paths.js.map +1 -1
  119. package/lib/cloudflare/pipeline.d.ts +14 -3
  120. package/lib/cloudflare/pipeline.d.ts.map +1 -1
  121. package/lib/cloudflare/pipeline.js +31 -2
  122. package/lib/cloudflare/pipeline.js.map +1 -1
  123. package/lib/cloudflare/queue-consumer.js +1 -1
  124. package/lib/cloudflare/queue-consumer.js.map +1 -1
  125. package/lib/cloudflare/queue.d.ts +4 -2
  126. package/lib/cloudflare/queue.d.ts.map +1 -1
  127. package/lib/cloudflare/queue.js +13 -9
  128. package/lib/cloudflare/queue.js.map +1 -1
  129. package/lib/cloudflare/react-router/plugin.d.ts +1 -1
  130. package/lib/cloudflare/react-router/plugin.d.ts.map +1 -1
  131. package/lib/cloudflare/react-router/react-router.d.ts.map +1 -1
  132. package/lib/cloudflare/react-router/react-router.js +32 -2
  133. package/lib/cloudflare/react-router/react-router.js.map +1 -1
  134. package/lib/cloudflare/redwood/plugin.d.ts +2 -1
  135. package/lib/cloudflare/redwood/plugin.d.ts.map +1 -1
  136. package/lib/cloudflare/redwood/plugin.js.map +1 -1
  137. package/lib/cloudflare/route.js +1 -1
  138. package/lib/cloudflare/route.js.map +1 -1
  139. package/lib/cloudflare/ruleset.d.ts +3 -1
  140. package/lib/cloudflare/ruleset.d.ts.map +1 -1
  141. package/lib/cloudflare/ruleset.js +3 -2
  142. package/lib/cloudflare/ruleset.js.map +1 -1
  143. package/lib/cloudflare/secret.d.ts +6 -23
  144. package/lib/cloudflare/secret.d.ts.map +1 -1
  145. package/lib/cloudflare/secret.js +8 -4
  146. package/lib/cloudflare/secret.js.map +1 -1
  147. package/lib/cloudflare/secrets-store.d.ts +1 -1
  148. package/lib/cloudflare/secrets-store.d.ts.map +1 -1
  149. package/lib/cloudflare/secrets-store.js +5 -2
  150. package/lib/cloudflare/secrets-store.js.map +1 -1
  151. package/lib/cloudflare/tunnel.d.ts +5 -1
  152. package/lib/cloudflare/tunnel.d.ts.map +1 -1
  153. package/lib/cloudflare/tunnel.js +5 -1
  154. package/lib/cloudflare/tunnel.js.map +1 -1
  155. package/lib/cloudflare/vectorize-index.d.ts +7 -1
  156. package/lib/cloudflare/vectorize-index.d.ts.map +1 -1
  157. package/lib/cloudflare/vectorize-index.js +5 -2
  158. package/lib/cloudflare/vectorize-index.js.map +1 -1
  159. package/lib/cloudflare/vite/plugin.d.ts +2 -1
  160. package/lib/cloudflare/vite/plugin.d.ts.map +1 -1
  161. package/lib/cloudflare/vite/plugin.js.map +1 -1
  162. package/lib/cloudflare/website.js +1 -1
  163. package/lib/cloudflare/website.js.map +1 -1
  164. package/lib/cloudflare/worker.d.ts +1 -1
  165. package/lib/cloudflare/worker.d.ts.map +1 -1
  166. package/lib/cloudflare/worker.js +12 -7
  167. package/lib/cloudflare/worker.js.map +1 -1
  168. package/lib/cloudflare/wrangler.json.d.ts +1 -1
  169. package/lib/cloudflare/wrangler.json.d.ts.map +1 -1
  170. package/lib/cloudflare/wrangler.json.js +5 -3
  171. package/lib/cloudflare/wrangler.json.js.map +1 -1
  172. package/lib/docker/container.d.ts +6 -0
  173. package/lib/docker/container.d.ts.map +1 -1
  174. package/lib/docker/container.js +5 -1
  175. package/lib/docker/container.js.map +1 -1
  176. package/lib/docker/network.d.ts +8 -2
  177. package/lib/docker/network.d.ts.map +1 -1
  178. package/lib/docker/network.js +7 -2
  179. package/lib/docker/network.js.map +1 -1
  180. package/lib/docker/volume.d.ts +8 -2
  181. package/lib/docker/volume.d.ts.map +1 -1
  182. package/lib/docker/volume.js +6 -4
  183. package/lib/docker/volume.js.map +1 -1
  184. package/lib/esbuild/bundle.d.ts +1 -1
  185. package/lib/fs/index.d.ts +0 -8
  186. package/lib/fs/index.d.ts.map +1 -1
  187. package/lib/fs/index.js +0 -8
  188. package/lib/fs/index.js.map +1 -1
  189. package/lib/github/client.d.ts +1 -1
  190. package/lib/github/client.d.ts.map +1 -1
  191. package/lib/github/client.js +2 -1
  192. package/lib/github/client.js.map +1 -1
  193. package/lib/github/repository-environment.d.ts +8 -2
  194. package/lib/github/repository-environment.d.ts.map +1 -1
  195. package/lib/github/repository-environment.js +16 -12
  196. package/lib/github/repository-environment.js.map +1 -1
  197. package/lib/neon/project.d.ts +7 -1
  198. package/lib/neon/project.d.ts.map +1 -1
  199. package/lib/neon/project.js +10 -6
  200. package/lib/neon/project.js.map +1 -1
  201. package/lib/planetscale/branch.d.ts +4 -2
  202. package/lib/planetscale/branch.d.ts.map +1 -1
  203. package/lib/planetscale/branch.js +18 -12
  204. package/lib/planetscale/branch.js.map +1 -1
  205. package/lib/planetscale/database.d.ts +8 -2
  206. package/lib/planetscale/database.d.ts.map +1 -1
  207. package/lib/planetscale/database.js +24 -16
  208. package/lib/planetscale/database.js.map +1 -1
  209. package/lib/planetscale/password.d.ts +8 -2
  210. package/lib/planetscale/password.d.ts.map +1 -1
  211. package/lib/planetscale/password.js +2 -2
  212. package/lib/planetscale/password.js.map +1 -1
  213. package/lib/resource.d.ts +0 -2
  214. package/lib/resource.d.ts.map +1 -1
  215. package/lib/resource.js +1 -9
  216. package/lib/resource.js.map +1 -1
  217. package/lib/scope.d.ts +9 -3
  218. package/lib/scope.d.ts.map +1 -1
  219. package/lib/scope.js +21 -34
  220. package/lib/scope.js.map +1 -1
  221. package/lib/sentry/client-key.d.ts +7 -1
  222. package/lib/sentry/client-key.d.ts.map +1 -1
  223. package/lib/sentry/client-key.js +45 -6
  224. package/lib/sentry/client-key.js.map +1 -1
  225. package/lib/sentry/project.d.ts +8 -2
  226. package/lib/sentry/project.d.ts.map +1 -1
  227. package/lib/sentry/project.js +35 -5
  228. package/lib/sentry/project.js.map +1 -1
  229. package/lib/sentry/team.d.ts +8 -2
  230. package/lib/sentry/team.d.ts.map +1 -1
  231. package/lib/sentry/team.js +36 -6
  232. package/lib/sentry/team.js.map +1 -1
  233. package/lib/serde.d.ts +0 -5
  234. package/lib/serde.d.ts.map +1 -1
  235. package/lib/serde.js +0 -28
  236. package/lib/serde.js.map +1 -1
  237. package/lib/state/d1-state-store.d.ts +1 -1
  238. package/lib/state/d1-state-store.d.ts.map +1 -1
  239. package/lib/state/d1-state-store.js +5 -5
  240. package/lib/state/d1-state-store.js.map +1 -1
  241. package/lib/state/sqlite-state-store.d.ts.map +1 -1
  242. package/lib/state/sqlite-state-store.js +7 -11
  243. package/lib/state/sqlite-state-store.js.map +1 -1
  244. package/lib/stripe/card.d.ts.map +1 -1
  245. package/lib/stripe/card.js +3 -2
  246. package/lib/stripe/card.js.map +1 -1
  247. package/lib/stripe/client.d.ts +2 -2
  248. package/lib/stripe/client.d.ts.map +1 -1
  249. package/lib/stripe/client.js +4 -3
  250. package/lib/stripe/client.js.map +1 -1
  251. package/lib/stripe/coupon.d.ts.map +1 -1
  252. package/lib/stripe/coupon.js +4 -3
  253. package/lib/stripe/coupon.js.map +1 -1
  254. package/lib/stripe/customer.js +2 -2
  255. package/lib/stripe/customer.js.map +1 -1
  256. package/lib/stripe/entitlements-feature.d.ts.map +1 -1
  257. package/lib/stripe/entitlements-feature.js +3 -2
  258. package/lib/stripe/entitlements-feature.js.map +1 -1
  259. package/lib/stripe/file.d.ts.map +1 -1
  260. package/lib/stripe/file.js +3 -2
  261. package/lib/stripe/file.js.map +1 -1
  262. package/lib/stripe/meter.js +2 -2
  263. package/lib/stripe/meter.js.map +1 -1
  264. package/lib/stripe/portal-configuration.d.ts.map +1 -1
  265. package/lib/stripe/portal-configuration.js +3 -2
  266. package/lib/stripe/portal-configuration.js.map +1 -1
  267. package/lib/stripe/price.d.ts.map +1 -1
  268. package/lib/stripe/price.js +3 -2
  269. package/lib/stripe/price.js.map +1 -1
  270. package/lib/stripe/product-feature.d.ts.map +1 -1
  271. package/lib/stripe/product-feature.js +3 -2
  272. package/lib/stripe/product-feature.js.map +1 -1
  273. package/lib/stripe/product.d.ts.map +1 -1
  274. package/lib/stripe/product.js +3 -2
  275. package/lib/stripe/product.js.map +1 -1
  276. package/lib/stripe/promotion-code.d.ts.map +1 -1
  277. package/lib/stripe/promotion-code.js +3 -2
  278. package/lib/stripe/promotion-code.js.map +1 -1
  279. package/lib/stripe/shipping-rate.d.ts.map +1 -1
  280. package/lib/stripe/shipping-rate.js +4 -3
  281. package/lib/stripe/shipping-rate.js.map +1 -1
  282. package/lib/stripe/tax-rate.d.ts.map +1 -1
  283. package/lib/stripe/tax-rate.js +3 -2
  284. package/lib/stripe/tax-rate.js.map +1 -1
  285. package/lib/stripe/webhook.d.ts.map +1 -1
  286. package/lib/stripe/webhook.js +4 -3
  287. package/lib/stripe/webhook.js.map +1 -1
  288. package/lib/test/vitest.d.ts.map +1 -1
  289. package/lib/test/vitest.js +1 -0
  290. package/lib/test/vitest.js.map +1 -1
  291. package/lib/upstash/redis.d.ts +8 -2
  292. package/lib/upstash/redis.d.ts.map +1 -1
  293. package/lib/upstash/redis.js +5 -4
  294. package/lib/upstash/redis.js.map +1 -1
  295. package/lib/util/ignore-matcher.d.ts.map +1 -1
  296. package/lib/util/ignore-matcher.js +3 -1
  297. package/lib/util/ignore-matcher.js.map +1 -1
  298. package/lib/util/peer.d.ts +10 -0
  299. package/lib/util/peer.d.ts.map +1 -0
  300. package/lib/util/peer.js +42 -0
  301. package/lib/util/peer.js.map +1 -0
  302. package/lib/vercel/project.d.ts +7 -1
  303. package/lib/vercel/project.d.ts.map +1 -1
  304. package/lib/vercel/project.js +28 -0
  305. package/lib/vercel/project.js.map +1 -1
  306. package/package.json +88 -74
  307. package/src/alchemy.ts +76 -222
  308. package/src/apply.ts +6 -19
  309. package/src/aws/account-id.ts +6 -3
  310. package/src/aws/bucket.ts +43 -32
  311. package/src/aws/ec2/security-group.ts +15 -3
  312. package/src/aws/function.ts +65 -39
  313. package/src/aws/policy-attachment.ts +10 -6
  314. package/src/aws/policy.ts +33 -15
  315. package/src/aws/queue.ts +50 -29
  316. package/src/aws/role.ts +37 -20
  317. package/src/aws/ses.ts +24 -20
  318. package/src/aws/ssm-parameter.ts +40 -20
  319. package/src/aws/table.ts +35 -17
  320. package/src/cloudflare/account-api-token.ts +9 -7
  321. package/src/cloudflare/ai-gateway.ts +37 -34
  322. package/src/cloudflare/api-schema.ts +33 -26
  323. package/src/cloudflare/api-shield.ts +15 -2
  324. package/src/cloudflare/astro/astro.ts +5 -1
  325. package/src/cloudflare/astro/plugin.ts +2 -1
  326. package/src/cloudflare/bindings.ts +2 -2
  327. package/src/cloudflare/bound.ts +1 -1
  328. package/src/cloudflare/bucket.ts +242 -3
  329. package/src/cloudflare/compatibility-date.gen.ts +1 -1
  330. package/src/cloudflare/container.ts +23 -12
  331. package/src/cloudflare/custom-domain.ts +2 -2
  332. package/src/cloudflare/d1-database.ts +10 -3
  333. package/src/cloudflare/dispatch-namespace.ts +10 -7
  334. package/src/cloudflare/hyperdrive.ts +13 -3
  335. package/src/cloudflare/kv-namespace.ts +25 -2
  336. package/src/cloudflare/miniflare/miniflare-worker-proxy.ts +3 -1
  337. package/src/cloudflare/miniflare/paths.ts +13 -0
  338. package/src/cloudflare/pipeline.ts +76 -28
  339. package/src/cloudflare/queue-consumer.ts +1 -1
  340. package/src/cloudflare/queue.ts +26 -14
  341. package/src/cloudflare/react-router/react-router.ts +28 -2
  342. package/src/cloudflare/redwood/plugin.ts +3 -2
  343. package/src/cloudflare/route.ts +1 -1
  344. package/src/cloudflare/ruleset.ts +7 -2
  345. package/src/cloudflare/secret.ts +20 -31
  346. package/src/cloudflare/secrets-store.ts +7 -3
  347. package/src/cloudflare/tunnel.ts +13 -2
  348. package/src/cloudflare/vectorize-index.ts +14 -3
  349. package/src/cloudflare/vite/plugin.ts +3 -2
  350. package/src/cloudflare/website.ts +1 -1
  351. package/src/cloudflare/worker.ts +35 -23
  352. package/src/cloudflare/wrangler.json.ts +7 -4
  353. package/src/docker/container.ts +13 -1
  354. package/src/docker/network.ts +18 -3
  355. package/src/docker/volume.ts +17 -6
  356. package/src/fs/index.ts +0 -8
  357. package/src/github/client.ts +6 -2
  358. package/src/github/repository-environment.ts +27 -13
  359. package/src/neon/project.ts +20 -6
  360. package/src/planetscale/branch.ts +24 -13
  361. package/src/planetscale/database.ts +38 -17
  362. package/src/planetscale/password.ts +10 -3
  363. package/src/resource.ts +1 -10
  364. package/src/scope.ts +29 -38
  365. package/src/sentry/client-key.ts +74 -6
  366. package/src/sentry/project.ts +59 -6
  367. package/src/sentry/team.ts +55 -7
  368. package/src/serde.ts +0 -44
  369. package/src/state/d1-state-store.ts +13 -6
  370. package/src/state/sqlite-state-store.ts +16 -17
  371. package/src/stripe/card.ts +5 -2
  372. package/src/stripe/client.ts +10 -3
  373. package/src/stripe/coupon.ts +4 -3
  374. package/src/stripe/customer.ts +2 -2
  375. package/src/stripe/entitlements-feature.ts +5 -2
  376. package/src/stripe/file.ts +3 -2
  377. package/src/stripe/meter.ts +2 -2
  378. package/src/stripe/portal-configuration.ts +5 -2
  379. package/src/stripe/price.ts +3 -2
  380. package/src/stripe/product-feature.ts +5 -2
  381. package/src/stripe/product.ts +3 -2
  382. package/src/stripe/promotion-code.ts +3 -2
  383. package/src/stripe/shipping-rate.ts +4 -3
  384. package/src/stripe/tax-rate.ts +3 -2
  385. package/src/stripe/webhook.ts +4 -3
  386. package/src/test/vitest.ts +1 -0
  387. package/src/upstash/redis.ts +15 -5
  388. package/src/util/ignore-matcher.ts +3 -1
  389. package/src/util/peer.ts +53 -0
  390. package/src/vercel/project.ts +46 -1
  391. package/templates/hono/README.md +19 -0
  392. package/templates/hono/_env +1 -0
  393. package/templates/hono/_env.example +1 -0
  394. package/templates/hono/_gitignore +34 -0
  395. package/templates/hono/alchemy.run.ts +22 -0
  396. package/templates/hono/package.json +18 -0
  397. package/templates/hono/src/index.ts +17 -0
  398. package/templates/hono/tsconfig.json +13 -0
  399. package/templates/hono/types/env.d.ts +16 -0
  400. package/templates/react-router/vite.config.ts +5 -3
  401. package/workers/cloudflare-state-store.js +69 -74
  402. package/workers/dofs-state-store.js +1 -1
  403. package/bin/bootstrap-s3.ts +0 -255
  404. package/lib/ai/ark.d.ts +0 -12
  405. package/lib/ai/ark.d.ts.map +0 -1
  406. package/lib/ai/ark.js +0 -87
  407. package/lib/ai/ark.js.map +0 -1
  408. package/lib/ai/astro-file.d.ts +0 -138
  409. package/lib/ai/astro-file.d.ts.map +0 -1
  410. package/lib/ai/astro-file.js +0 -158
  411. package/lib/ai/astro-file.js.map +0 -1
  412. package/lib/ai/client.d.ts +0 -51
  413. package/lib/ai/client.d.ts.map +0 -1
  414. package/lib/ai/client.js +0 -58
  415. package/lib/ai/client.js.map +0 -1
  416. package/lib/ai/css-file.d.ts +0 -132
  417. package/lib/ai/css-file.d.ts.map +0 -1
  418. package/lib/ai/css-file.js +0 -142
  419. package/lib/ai/css-file.js.map +0 -1
  420. package/lib/ai/data.d.ts +0 -152
  421. package/lib/ai/data.d.ts.map +0 -1
  422. package/lib/ai/data.js +0 -120
  423. package/lib/ai/data.js.map +0 -1
  424. package/lib/ai/document.d.ts +0 -208
  425. package/lib/ai/document.d.ts.map +0 -1
  426. package/lib/ai/document.js +0 -206
  427. package/lib/ai/document.js.map +0 -1
  428. package/lib/ai/html-file.d.ts +0 -129
  429. package/lib/ai/html-file.d.ts.map +0 -1
  430. package/lib/ai/html-file.js +0 -139
  431. package/lib/ai/html-file.js.map +0 -1
  432. package/lib/ai/index.d.ts +0 -11
  433. package/lib/ai/index.d.ts.map +0 -1
  434. package/lib/ai/index.js +0 -11
  435. package/lib/ai/index.js.map +0 -1
  436. package/lib/ai/json-file.d.ts +0 -161
  437. package/lib/ai/json-file.d.ts.map +0 -1
  438. package/lib/ai/json-file.js +0 -188
  439. package/lib/ai/json-file.js.map +0 -1
  440. package/lib/ai/typescript-file.d.ts +0 -140
  441. package/lib/ai/typescript-file.d.ts.map +0 -1
  442. package/lib/ai/typescript-file.js +0 -146
  443. package/lib/ai/typescript-file.js.map +0 -1
  444. package/lib/ai/vue-file.d.ts +0 -127
  445. package/lib/ai/vue-file.d.ts.map +0 -1
  446. package/lib/ai/vue-file.js +0 -137
  447. package/lib/ai/vue-file.js.map +0 -1
  448. package/lib/ai/yaml-file.d.ts +0 -170
  449. package/lib/ai/yaml-file.d.ts.map +0 -1
  450. package/lib/ai/yaml-file.js +0 -201
  451. package/lib/ai/yaml-file.js.map +0 -1
  452. package/lib/fs/static-astro-file.d.ts +0 -35
  453. package/lib/fs/static-astro-file.d.ts.map +0 -1
  454. package/lib/fs/static-astro-file.js +0 -40
  455. package/lib/fs/static-astro-file.js.map +0 -1
  456. package/lib/fs/static-css-file.d.ts +0 -25
  457. package/lib/fs/static-css-file.d.ts.map +0 -1
  458. package/lib/fs/static-css-file.js +0 -30
  459. package/lib/fs/static-css-file.js.map +0 -1
  460. package/lib/fs/static-html-file.d.ts +0 -32
  461. package/lib/fs/static-html-file.d.ts.map +0 -1
  462. package/lib/fs/static-html-file.js +0 -37
  463. package/lib/fs/static-html-file.js.map +0 -1
  464. package/lib/fs/static-json-file.d.ts +0 -18
  465. package/lib/fs/static-json-file.d.ts.map +0 -1
  466. package/lib/fs/static-json-file.js +0 -19
  467. package/lib/fs/static-json-file.js.map +0 -1
  468. package/lib/fs/static-text-file.d.ts +0 -13
  469. package/lib/fs/static-text-file.d.ts.map +0 -1
  470. package/lib/fs/static-text-file.js +0 -9
  471. package/lib/fs/static-text-file.js.map +0 -1
  472. package/lib/fs/static-typescript-file.d.ts +0 -20
  473. package/lib/fs/static-typescript-file.d.ts.map +0 -1
  474. package/lib/fs/static-typescript-file.js +0 -16
  475. package/lib/fs/static-typescript-file.js.map +0 -1
  476. package/lib/fs/static-vue-file.d.ts +0 -29
  477. package/lib/fs/static-vue-file.d.ts.map +0 -1
  478. package/lib/fs/static-vue-file.js +0 -34
  479. package/lib/fs/static-vue-file.js.map +0 -1
  480. package/lib/fs/static-yaml-file.d.ts +0 -23
  481. package/lib/fs/static-yaml-file.d.ts.map +0 -1
  482. package/lib/fs/static-yaml-file.js +0 -10
  483. package/lib/fs/static-yaml-file.js.map +0 -1
  484. package/lib/internal/docs/providers.d.ts +0 -34
  485. package/lib/internal/docs/providers.d.ts.map +0 -1
  486. package/lib/internal/docs/providers.js +0 -200
  487. package/lib/internal/docs/providers.js.map +0 -1
  488. package/lib/runtime/bind.d.ts +0 -25
  489. package/lib/runtime/bind.d.ts.map +0 -1
  490. package/lib/runtime/bind.js +0 -76
  491. package/lib/runtime/bind.js.map +0 -1
  492. package/lib/runtime/global.d.ts +0 -8
  493. package/lib/runtime/global.d.ts.map +0 -1
  494. package/lib/runtime/global.js +0 -3
  495. package/lib/runtime/global.js.map +0 -1
  496. package/lib/runtime/plugin.d.ts +0 -35
  497. package/lib/runtime/plugin.d.ts.map +0 -1
  498. package/lib/runtime/plugin.js +0 -134
  499. package/lib/runtime/plugin.js.map +0 -1
  500. package/lib/runtime/shims.d.ts +0 -6
  501. package/lib/runtime/shims.d.ts.map +0 -1
  502. package/lib/runtime/shims.js +0 -27
  503. package/lib/runtime/shims.js.map +0 -1
  504. package/lib/runtime/state.d.ts +0 -5
  505. package/lib/runtime/state.d.ts.map +0 -1
  506. package/lib/runtime/state.js +0 -4
  507. package/lib/runtime/state.js.map +0 -1
  508. package/lib/web/astro.d.ts +0 -148
  509. package/lib/web/astro.d.ts.map +0 -1
  510. package/lib/web/astro.js +0 -419
  511. package/lib/web/astro.js.map +0 -1
  512. package/lib/web/shadcn-component.d.ts +0 -30
  513. package/lib/web/shadcn-component.d.ts.map +0 -1
  514. package/lib/web/shadcn-component.js +0 -25
  515. package/lib/web/shadcn-component.js.map +0 -1
  516. package/lib/web/shadcn.d.ts +0 -98
  517. package/lib/web/shadcn.d.ts.map +0 -1
  518. package/lib/web/shadcn.js +0 -102
  519. package/lib/web/shadcn.js.map +0 -1
  520. package/lib/web/tailwind.d.ts +0 -65
  521. package/lib/web/tailwind.d.ts.map +0 -1
  522. package/lib/web/tailwind.js +0 -98
  523. package/lib/web/tailwind.js.map +0 -1
  524. package/lib/web/vite.d.ts +0 -96
  525. package/lib/web/vite.d.ts.map +0 -1
  526. package/lib/web/vite.js +0 -232
  527. package/lib/web/vite.js.map +0 -1
  528. package/lib/web/vitepress/config.d.ts +0 -12
  529. package/lib/web/vitepress/config.d.ts.map +0 -1
  530. package/lib/web/vitepress/config.js +0 -33
  531. package/lib/web/vitepress/config.js.map +0 -1
  532. package/lib/web/vitepress/custom-theme.d.ts +0 -174
  533. package/lib/web/vitepress/custom-theme.d.ts.map +0 -1
  534. package/lib/web/vitepress/custom-theme.js +0 -337
  535. package/lib/web/vitepress/custom-theme.js.map +0 -1
  536. package/lib/web/vitepress/dependencies.d.ts +0 -13
  537. package/lib/web/vitepress/dependencies.d.ts.map +0 -1
  538. package/lib/web/vitepress/dependencies.js +0 -37
  539. package/lib/web/vitepress/dependencies.js.map +0 -1
  540. package/lib/web/vitepress/home-page.d.ts +0 -247
  541. package/lib/web/vitepress/home-page.d.ts.map +0 -1
  542. package/lib/web/vitepress/home-page.js +0 -146
  543. package/lib/web/vitepress/home-page.js.map +0 -1
  544. package/lib/web/vitepress/index.d.ts +0 -6
  545. package/lib/web/vitepress/index.d.ts.map +0 -1
  546. package/lib/web/vitepress/index.js +0 -6
  547. package/lib/web/vitepress/index.js.map +0 -1
  548. package/lib/web/vitepress/process-front-matter-files.d.ts +0 -19
  549. package/lib/web/vitepress/process-front-matter-files.d.ts.map +0 -1
  550. package/lib/web/vitepress/process-front-matter-files.js +0 -73
  551. package/lib/web/vitepress/process-front-matter-files.js.map +0 -1
  552. package/lib/web/vitepress/vitepress.d.ts +0 -75
  553. package/lib/web/vitepress/vitepress.d.ts.map +0 -1
  554. package/lib/web/vitepress/vitepress.js +0 -254
  555. package/lib/web/vitepress/vitepress.js.map +0 -1
  556. package/src/ai/ark.ts +0 -118
  557. package/src/ai/astro-file.ts +0 -270
  558. package/src/ai/client.ts +0 -117
  559. package/src/ai/css-file.ts +0 -247
  560. package/src/ai/data.ts +0 -221
  561. package/src/ai/document.ts +0 -367
  562. package/src/ai/html-file.ts +0 -244
  563. package/src/ai/index.ts +0 -10
  564. package/src/ai/json-file.ts +0 -325
  565. package/src/ai/typescript-file.ts +0 -259
  566. package/src/ai/vue-file.ts +0 -242
  567. package/src/ai/yaml-file.ts +0 -328
  568. package/src/fs/static-astro-file.ts +0 -45
  569. package/src/fs/static-css-file.ts +0 -35
  570. package/src/fs/static-html-file.ts +0 -42
  571. package/src/fs/static-json-file.ts +0 -38
  572. package/src/fs/static-text-file.ts +0 -23
  573. package/src/fs/static-typescript-file.ts +0 -37
  574. package/src/fs/static-vue-file.ts +0 -39
  575. package/src/fs/static-yaml-file.ts +0 -33
  576. package/src/internal/docs/providers.ts +0 -286
  577. package/src/runtime/bind.ts +0 -95
  578. package/src/runtime/global.ts +0 -10
  579. package/src/runtime/plugin.ts +0 -163
  580. package/src/runtime/shims.js +0 -34
  581. package/src/runtime/state.ts +0 -9
  582. package/src/web/astro.ts +0 -643
  583. package/src/web/shadcn-component.ts +0 -72
  584. package/src/web/shadcn.ts +0 -221
  585. package/src/web/tailwind.ts +0 -167
  586. package/src/web/vite.ts +0 -407
  587. package/src/web/vitepress/config.ts +0 -50
  588. package/src/web/vitepress/custom-theme.ts +0 -514
  589. package/src/web/vitepress/dependencies.ts +0 -69
  590. package/src/web/vitepress/home-page.ts +0 -378
  591. package/src/web/vitepress/index.ts +0 -5
  592. package/src/web/vitepress/process-front-matter-files.ts +0 -107
  593. package/src/web/vitepress/vitepress.ts +0 -372
  594. package/templates/sveltekit/bun.lock +0 -1099
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "alchemy",
3
- "version": "0.62.3",
3
+ "version": "0.63.0",
4
4
  "license": "Apache-2.0",
5
5
  "author": "Sam Goodwin <sam@alchemy.run>",
6
6
  "homepage": "https://alchemy.run",
@@ -20,7 +20,6 @@
20
20
  "build:workers": "bun ./scripts/build-workers.ts",
21
21
  "build": "rm -rf ./*.tsbuildinfo && rm -rf ./lib && tsc -b && bun run build:cli && bun run build:workers",
22
22
  "drizzle:generate": "bun run scripts/drizzle-generate.ts",
23
- "docs:gen": "rm -rf ./docs && typedoc",
24
23
  "postbuild": "cpx 'src/**/*/types.d.ts' lib && cpx 'src/**/*.txt' lib",
25
24
  "publish:npm": "cp ../README.md . && bun run build && bun run build:cli && bun publish && rm README.md"
26
25
  },
@@ -41,10 +40,6 @@
41
40
  "bun": "./src/llms.ts",
42
41
  "import": "./lib/llms.js"
43
42
  },
44
- "./ai": {
45
- "bun": "./src/ai/index.ts",
46
- "import": "./lib/ai/index.js"
47
- },
48
43
  "./aws": {
49
44
  "bun": "./src/aws/index.ts",
50
45
  "import": "./lib/aws/index.js"
@@ -129,6 +124,10 @@
129
124
  "bun": "./src/sentry/index.ts",
130
125
  "import": "./lib/sentry/index.js"
131
126
  },
127
+ "./state": {
128
+ "bun": "./src/state/index.ts",
129
+ "import": "./lib/state/index.js"
130
+ },
132
131
  "./stripe": {
133
132
  "bun": "./src/stripe/index.ts",
134
133
  "import": "./lib/stripe/index.js"
@@ -137,48 +136,21 @@
137
136
  "bun": "./src/upstash/index.ts",
138
137
  "import": "./lib/upstash/index.js"
139
138
  },
140
- "./vercel": {
141
- "bun": "./src/vercel/index.ts",
142
- "import": "./lib/vercel/index.js"
143
- },
144
- "./shadcn": {
145
- "bun": "./src/web/shadcn.ts",
146
- "import": "./lib/web/shadcn.js"
147
- },
148
- "./state": {
149
- "bun": "./src/state/index.ts",
150
- "import": "./lib/state/index.js"
151
- },
152
139
  "./util": {
153
140
  "bun": "./src/util/index.ts",
154
141
  "import": "./lib/util/index.js"
155
142
  },
156
- "./web/astro": {
157
- "bun": "./src/web/astro.ts",
158
- "import": "./lib/web/astro.js"
159
- },
160
- "./web/tailwind": {
161
- "bun": "./src/web/tailwind.ts",
162
- "import": "./lib/web/tailwind.js"
163
- },
164
- "./web/vite": {
165
- "bun": "./src/web/vite.ts",
166
- "import": "./lib/web/vite.js"
167
- },
168
- "./web/vitepress": {
169
- "bun": "./src/web/vitepress/index.ts",
170
- "import": "./lib/web/vitepress/index.js"
143
+ "./vercel": {
144
+ "bun": "./src/vercel/index.ts",
145
+ "import": "./lib/vercel/index.js"
171
146
  }
172
147
  },
173
148
  "dependencies": {
174
149
  "@aws-sdk/credential-providers": "^3.0.0",
175
150
  "@cloudflare/unenv-preset": "^2.6.1",
176
- "@cloudflare/workers-shared": "^0.17.5",
177
151
  "@iarna/toml": "^2.2.5",
178
152
  "@smithy/node-config-provider": "^4.0.0",
179
- "@swc/core": "^1.11.24",
180
153
  "aws4fetch": "^1.0.20",
181
- "diff": "^8.0.2",
182
154
  "env-paths": "^3.0.0",
183
155
  "esbuild": "^0.25.1",
184
156
  "execa": "^9.6.0",
@@ -188,95 +160,137 @@
188
160
  "glob": "^10.0.0",
189
161
  "jszip": "^3.0.0",
190
162
  "libsodium-wrappers": "^0.7.15",
191
- "miniflare": "^4.20250816.0",
163
+ "miniflare": "^4.20250712.0",
192
164
  "neverthrow": "^8.2.0",
193
165
  "open": "^10.1.2",
194
166
  "openapi-types": "^12.1.3",
195
167
  "pathe": "^2.0.3",
196
168
  "picocolors": "^1.1.1",
197
169
  "signal-exit": "^4.1.0",
198
- "turndown": "^7.0.0",
199
170
  "unenv": "2.0.0-rc.19",
200
171
  "ws": "^8.18.3",
201
172
  "yaml": "^2.0.0"
202
173
  },
203
174
  "peerDependencies": {
204
- "@ai-sdk/openai": "^1.1.9",
205
- "@ai-sdk/openai-compatible": "^0.2.2",
175
+ "@astrojs/cloudflare": "^12.6.4",
206
176
  "@aws-sdk/client-dynamodb": "^3.0.0",
207
- "@aws-sdk/client-ec2": "^3.0.0",
208
177
  "@aws-sdk/client-iam": "^3.0.0",
209
178
  "@aws-sdk/client-lambda": "^3.0.0",
210
179
  "@aws-sdk/client-s3": "^3.0.0",
211
- "@aws-sdk/client-sagemaker": "^3.0.0",
212
- "@aws-sdk/client-ses": "^3.0.0",
213
180
  "@aws-sdk/client-sesv2": "^3.0.0",
214
181
  "@aws-sdk/client-sqs": "^3.0.0",
215
182
  "@aws-sdk/client-ssm": "^3.0.0",
216
183
  "@aws-sdk/client-sts": "^3.0.0",
217
184
  "@cloudflare/vite-plugin": "^1.10.1",
218
- "@libsql/client": "^0.15.9",
185
+ "@cloudflare/workers-types": "*",
186
+ "@libsql/client": "^0.15.12",
219
187
  "@octokit/rest": "^21.1.1",
220
- "ai": "^4.0.0",
221
- "arktype": "^2.0.0",
222
- "cloudflare": "^4.0.0",
188
+ "astro": "^5.13.2",
223
189
  "drizzle-orm": "^0.44.2",
224
- "hono": "^4.0.0",
225
- "prettier": "^3.0.0",
226
- "stripe": "^17.0.0",
227
- "@cloudflare/workers-types": "^4.20250816.0"
190
+ "rwsdk": "^0.1.36",
191
+ "stripe": "^17.0.0"
192
+ },
193
+ "peerDependenciesMeta": {
194
+ "@astrojs/cloudflare": {
195
+ "optional": true
196
+ },
197
+ "@aws-sdk/client-dynamodb": {
198
+ "optional": true
199
+ },
200
+ "@aws-sdk/client-iam": {
201
+ "optional": true
202
+ },
203
+ "@aws-sdk/client-lambda": {
204
+ "optional": true
205
+ },
206
+ "@aws-sdk/client-s3": {
207
+ "optional": true
208
+ },
209
+ "@aws-sdk/client-sesv2": {
210
+ "optional": true
211
+ },
212
+ "@aws-sdk/client-sqs": {
213
+ "optional": true
214
+ },
215
+ "@aws-sdk/client-ssm": {
216
+ "optional": true
217
+ },
218
+ "@aws-sdk/client-sts": {
219
+ "optional": true
220
+ },
221
+ "@cloudflare/vite-plugin": {
222
+ "optional": true
223
+ },
224
+ "@cloudflare/workers-types": {
225
+ "optional": true
226
+ },
227
+ "@octokit/rest": {
228
+ "optional": true
229
+ },
230
+ "@libsql/client": {
231
+ "optional": true
232
+ },
233
+ "astro": {
234
+ "optional": true
235
+ },
236
+ "drizzle-orm": {
237
+ "optional": true
238
+ },
239
+ "rwsdk": {
240
+ "optional": true
241
+ },
242
+ "stripe": {
243
+ "optional": true
244
+ }
228
245
  },
229
246
  "devDependencies": {
230
- "@ai-sdk/anthropic": "^1.1.6",
231
- "@ai-sdk/openai": "^1.1.9",
232
- "@asteasolutions/zod-to-openapi": "^7.3.0",
233
- "@aws-sdk/client-resource-groups-tagging-api": "^3.830.0",
247
+ "@astrojs/cloudflare": "^12.6.4",
248
+ "@aws-sdk/client-dynamodb": "^3.0.0",
249
+ "@aws-sdk/client-ec2": "^3.868.0",
250
+ "@aws-sdk/client-iam": "^3.864.0",
251
+ "@aws-sdk/client-lambda": "^3.0.0",
234
252
  "@aws-sdk/client-s3": "3.726.1",
253
+ "@aws-sdk/client-sesv2": "^3.0.0",
254
+ "@aws-sdk/client-sqs": "^3.0.0",
255
+ "@aws-sdk/client-ssm": "^3.0.0",
256
+ "@aws-sdk/client-sts": "^3.0.0",
235
257
  "@clack/prompts": "^0.11.0",
236
258
  "@cloudflare/containers": "^0.0.13",
237
259
  "@cloudflare/puppeteer": "^1.0.2",
238
- "@iarna/toml": "^2.2.5",
260
+ "@cloudflare/vite-plugin": "^1.11.6",
261
+ "@cloudflare/workers-types": "^4.20250805.0",
262
+ "@libsql/client": "^0.15.12",
239
263
  "@octokit/rest": "^21.1.1",
240
- "@react-router/dev": "^7.7.1",
241
264
  "@sentry/cloudflare": "^9.43.0",
242
265
  "@sveltejs/adapter-cloudflare": "^7.1.2",
243
266
  "@types/bun": "latest",
244
- "@types/diff": "^5.0.0",
267
+ "@types/debug": "^4.1.12",
245
268
  "@types/fs-extra": "^11.0.4",
246
269
  "@types/libsodium-wrappers": "^0.7.14",
247
270
  "@types/node": "latest",
248
- "@types/turndown": "^5.0.5",
249
271
  "@types/ws": "^8.18.1",
250
- "ai": "^4.1.16",
251
272
  "arktype": "^2.1.16",
273
+ "astro": "^5.13.2",
252
274
  "braintrust": "^0.0.201",
253
- "change-case": "^5.4.4",
254
- "cloudflare": "^4.2.0",
255
275
  "cpx": "^1.5.0",
276
+ "debug": "^4.4.1",
256
277
  "dofs": "^0.1.0",
257
278
  "drizzle-kit": "^0.31.4",
279
+ "drizzle-orm": "^0.44.2",
258
280
  "fs-extra": "^11.3.0",
259
281
  "globby": "^14.1.0",
260
282
  "grammy": "^1.37.0",
261
283
  "jsonc-parse": "^1.5.5",
262
- "libsodium-wrappers": "^0.7.15",
263
284
  "listr2": "^8.0.0",
264
- "nitro-cloudflare-dev": "^0.2.2",
265
285
  "nitropack": "^2.12.4",
266
- "openpgp": "^6.1.0",
267
- "prettier": "^3.5.3",
268
- "rwsdk": "^0.1.28",
286
+ "rwsdk": "^0.1.36",
287
+ "stripe": "^17.0.0",
269
288
  "trpc-cli": "^0.10.2",
270
289
  "ts-morph": "^26.0.0",
271
- "tsdown": "^0.13.0",
272
- "turndown": "^7.2.0",
273
- "typedoc": "^0.28.1",
274
- "typedoc-plugin-markdown": "^4.6.0",
290
+ "tsdown": "^0.14.2",
275
291
  "typescript": "^5.8.3",
276
- "vite": "^6.0.7",
277
- "vitepress": "^1.6.3",
292
+ "undici": "^7.14.0",
278
293
  "wrangler": "^4.27.0",
279
- "yaml": "^2.7.1",
280
294
  "zod": "^4.0.10"
281
295
  }
282
296
  }
package/src/alchemy.ts CHANGED
@@ -1,6 +1,3 @@
1
- import fs from "node:fs/promises";
2
- import path from "node:path";
3
-
4
1
  import { execArgv } from "node:process";
5
2
  import { onExit } from "signal-exit";
6
3
  import { ReplacedSignal } from "./apply.ts";
@@ -14,12 +11,10 @@ import {
14
11
  ResourceSeq,
15
12
  type PendingResource,
16
13
  } from "./resource.ts";
17
- import { isRuntime } from "./runtime/global.ts";
18
14
  import { DEFAULT_STAGE, Scope, type ProviderCredentials } from "./scope.ts";
19
15
  import { secret } from "./secret.ts";
20
16
  import type { StateStoreType } from "./state.ts";
21
17
  import type { LoggerApi } from "./util/cli.ts";
22
- import { logger } from "./util/logger.ts";
23
18
  import { TelemetryClient } from "./util/telemetry/client.ts";
24
19
 
25
20
  /**
@@ -71,10 +66,6 @@ export interface Alchemy {
71
66
  * or locally in the current scope.
72
67
  */
73
68
  secret: typeof secret;
74
- /**
75
- * Whether the current runtime is the Cloudflare Workers runtime.
76
- */
77
- isRuntime: boolean;
78
69
 
79
70
  /**
80
71
  * Creates a new application scope with the given name and options.
@@ -95,74 +86,51 @@ export interface Alchemy {
95
86
  * });
96
87
  */
97
88
  (appName: string, options?: Omit<AlchemyOptions, "appName">): Promise<Scope>;
98
- /**
99
- * Template literal tag that supports file interpolation for documentation.
100
- * Automatically formats the content and appends file contents as code blocks.
101
- *
102
- * @example
103
- * // Generate documentation using file contents
104
- * await Document("api-docs", {
105
- * prompt: await alchemy`
106
- * Generate docs using the contents of:
107
- * ${alchemy.file("README.md")}
108
- * ${alchemy.file("./.cursorrules")}
109
- *
110
- * And here are the source files:
111
- * ${alchemy.files(files)}
112
- * `
113
- * });
114
- */
115
- (template: TemplateStringsArray, ...values: any[]): Promise<string>;
116
89
  }
117
90
 
118
91
  _alchemy.destroy = destroy;
119
92
  _alchemy.run = run;
120
93
  _alchemy.secret = secret;
121
94
  _alchemy.env = env;
122
- _alchemy.isRuntime = isRuntime;
123
95
 
124
96
  /**
125
- * Implementation of the alchemy function that handles both application scoping
126
- * and template string interpolation.
97
+ * Implementation of the alchemy function.
127
98
  */
128
99
  async function _alchemy(
129
- ...args:
130
- | [template: TemplateStringsArray, ...values: any[]]
131
- | [appName: string, options?: Omit<AlchemyOptions, "appName">]
132
- ): Promise<Scope | string | never> {
133
- if (typeof args[0] === "string") {
134
- const [appName, options] = args as [string, AlchemyOptions?];
135
-
136
- const cliArgs = process.argv.slice(2);
137
- const cliOptions = {
138
- phase: cliArgs.includes("--destroy")
139
- ? "destroy"
140
- : cliArgs.includes("--read")
141
- ? "read"
142
- : "up",
143
- local: cliArgs.includes("--local") || cliArgs.includes("--dev"),
144
- watch: cliArgs.includes("--watch") || execArgv.includes("--watch"),
145
- quiet: cliArgs.includes("--quiet"),
146
- force: cliArgs.includes("--force"),
147
- // Parse stage argument (--stage my-stage) functionally and inline as a property declaration
148
- stage: (function parseStage() {
149
- const i = cliArgs.indexOf("--stage");
150
- return i !== -1 && i + 1 < cliArgs.length
151
- ? cliArgs[i + 1]
152
- : process.env.STAGE;
153
- })(),
154
- password: process.env.ALCHEMY_PASSWORD,
155
- } satisfies Partial<AlchemyOptions>;
156
- const mergedOptions = {
157
- ...cliOptions,
158
- ...options,
159
- };
160
- if (
161
- mergedOptions.stateStore === undefined &&
162
- process.env.CI &&
163
- process.env.ALCHEMY_CI_STATE_STORE_CHECK !== "false"
164
- ) {
165
- throw new Error(`You are running Alchemy in a CI environment with the default local state store.
100
+ appName: string,
101
+ options?: Omit<AlchemyOptions, "appName">,
102
+ ): Promise<Scope> {
103
+ const cliArgs = process.argv.slice(2);
104
+ const cliOptions = {
105
+ phase: cliArgs.includes("--destroy")
106
+ ? "destroy"
107
+ : cliArgs.includes("--read")
108
+ ? "read"
109
+ : "up",
110
+ local: cliArgs.includes("--local") || cliArgs.includes("--dev"),
111
+ watch: cliArgs.includes("--watch") || execArgv.includes("--watch"),
112
+ quiet: cliArgs.includes("--quiet"),
113
+ force: cliArgs.includes("--force"),
114
+ // Parse stage argument (--stage my-stage) functionally and inline as a property declaration
115
+ stage: (function parseStage() {
116
+ const i = cliArgs.indexOf("--stage");
117
+ return i !== -1 && i + 1 < cliArgs.length
118
+ ? cliArgs[i + 1]
119
+ : process.env.STAGE;
120
+ })(),
121
+ password: process.env.ALCHEMY_PASSWORD,
122
+ adopt: cliArgs.includes("--adopt"),
123
+ } satisfies Partial<AlchemyOptions>;
124
+ const mergedOptions = {
125
+ ...cliOptions,
126
+ ...options,
127
+ };
128
+ if (
129
+ mergedOptions.stateStore === undefined &&
130
+ process.env.CI &&
131
+ process.env.ALCHEMY_CI_STATE_STORE_CHECK !== "false"
132
+ ) {
133
+ throw new Error(`You are running Alchemy in a CI environment with the default local state store.
166
134
  This can lead to orphaned infrastructure and is rarely what you want to do.
167
135
 
168
136
  Instead, you should choose a persistent state store:
@@ -173,165 +141,45 @@ You can read more about State and State Stores here: https://alchemy.run/concept
173
141
 
174
142
  If this is a mistake, you can disable this check by setting the ALCHEMY_CI_STATE_STORE_CHECK=false.
175
143
  `);
176
- }
144
+ }
177
145
 
178
- const phase = isRuntime ? "read" : (mergedOptions?.phase ?? "up");
179
- const telemetryClient =
180
- mergedOptions?.parent?.telemetryClient ??
181
- TelemetryClient.create({
182
- phase,
183
- enabled: mergedOptions?.telemetry ?? true,
184
- quiet: mergedOptions?.quiet ?? false,
185
- });
186
- const root = new Scope({
187
- ...mergedOptions,
188
- parent: undefined,
189
- scopeName: appName,
146
+ const phase = mergedOptions?.phase ?? "up";
147
+ const telemetryClient =
148
+ mergedOptions?.parent?.telemetryClient ??
149
+ TelemetryClient.create({
190
150
  phase,
191
- password: mergedOptions?.password ?? process.env.ALCHEMY_PASSWORD,
192
- telemetryClient,
151
+ enabled: mergedOptions?.telemetry ?? true,
152
+ quiet: mergedOptions?.quiet ?? false,
193
153
  });
194
- onExit((code) => {
195
- root.cleanup().then(() => {
196
- code = code === 130 ? 0 : (code ?? 0);
197
- process.exit(code);
198
- });
199
- return true;
200
- });
201
- const stageName = mergedOptions?.stage ?? DEFAULT_STAGE;
202
- const stage = new Scope({
203
- ...mergedOptions,
204
- parent: root,
205
- scopeName: stageName,
206
- stage: stageName,
154
+ const root = new Scope({
155
+ ...mergedOptions,
156
+ parent: undefined,
157
+ scopeName: appName,
158
+ phase,
159
+ password: mergedOptions?.password ?? process.env.ALCHEMY_PASSWORD,
160
+ telemetryClient,
161
+ });
162
+ onExit((code) => {
163
+ root.cleanup().then(() => {
164
+ code = code === 130 ? 0 : (code ?? 0);
165
+ process.exit(code);
207
166
  });
208
- try {
209
- Scope.storage.enterWith(root);
210
- Scope.storage.enterWith(stage);
211
- } catch {
212
- // we are in Cloudflare Workers, we will emulate the enterWith behavior
213
- // see Scope.finalize for where we pop the global scope
214
- Scope.globals.push(root);
215
- Scope.globals.push(stage);
216
- }
217
- if (mergedOptions?.phase === "destroy") {
218
- await destroy(stage);
219
- return process.exit(0);
220
- }
221
- return root;
167
+ return true;
168
+ });
169
+ const stageName = mergedOptions?.stage ?? DEFAULT_STAGE;
170
+ const stage = new Scope({
171
+ ...mergedOptions,
172
+ parent: root,
173
+ scopeName: stageName,
174
+ stage: stageName,
175
+ });
176
+ Scope.storage.enterWith(root);
177
+ Scope.storage.enterWith(stage);
178
+ if (mergedOptions?.phase === "destroy") {
179
+ await destroy(stage);
180
+ return process.exit(0);
222
181
  }
223
- const [template, ...values] = args;
224
- const [, secondLine] = template[0].split("\n");
225
- const leadingSpaces = secondLine
226
- ? secondLine.match(/^(\s*)/)?.[1]?.length || 0
227
- : 0;
228
- const indent = " ".repeat(leadingSpaces);
229
-
230
- const [{ isFileRef }, { isFileCollection }] = await Promise.all([
231
- import("./fs/file-ref.js"),
232
- import("./fs/file-collection.js"),
233
- ]);
234
-
235
- const appendices: Record<string, string> = {};
236
-
237
- const stringValues = await Promise.all(
238
- values.map(async function resolve(value): Promise<string> {
239
- if (typeof value === "string") {
240
- return indent + value;
241
- }
242
- if (value === null) {
243
- return "null";
244
- }
245
- if (value === undefined) {
246
- return "undefined";
247
- }
248
- if (
249
- typeof value === "number" ||
250
- typeof value === "boolean" ||
251
- typeof value === "bigint"
252
- ) {
253
- return value.toString();
254
- }
255
- if (value instanceof Promise) {
256
- return resolve(await value);
257
- }
258
- if (isFileRef(value)) {
259
- if (!(value.path in appendices)) {
260
- appendices[value.path] = await fs.readFile(value.path, "utf-8");
261
- }
262
- return `[${path.basename(value.path)}](${value.path})`;
263
- }
264
- if (isFileCollection(value)) {
265
- return Object.entries(value.files)
266
- .map(([filePath, content]) => {
267
- appendices[filePath] = content;
268
- return `[${path.basename(filePath)}](${filePath})`;
269
- })
270
- .join("\n\n");
271
- }
272
- if (Array.isArray(value)) {
273
- return (
274
- await Promise.all(
275
- value.map(async (value, i) => `${i}. ${await resolve(value)}`),
276
- )
277
- ).join("\n");
278
- }
279
- if (typeof value === "object" && typeof value.path === "string") {
280
- if (typeof value.content === "string") {
281
- appendices[value.path] = value.content;
282
- return `[${path.basename(value.path)}](${value.path})`;
283
- }
284
- appendices[value.path] = await fs.readFile(value.path, "utf-8");
285
- return `[${path.basename(value.path)}](${value.path})`;
286
- }
287
- if (typeof value === "object") {
288
- return (
289
- await Promise.all(
290
- Object.entries(value).map(async ([key, value]) => {
291
- return `* ${key}: ${await resolve(value)}`;
292
- }),
293
- )
294
- ).join("\n");
295
- }
296
- // TODO: support other types
297
- logger.log(value);
298
- throw new Error(`Unsupported value type: ${value}`);
299
- }),
300
- );
301
-
302
- // Construct the string template by joining template parts with interpolated values
303
- const lines = template
304
- .map((part) =>
305
- part
306
- .split("\n")
307
- .map((line) =>
308
- line.startsWith(indent) ? line.slice(indent.length) : line,
309
- )
310
- .join("\n"),
311
- )
312
- .flatMap((part, i) =>
313
- i < stringValues.length ? [part, stringValues[i] ?? ""] : [part],
314
- )
315
- .join("")
316
- .split("\n");
317
-
318
- // Collect and sort appendices by file path
319
- return [
320
- // format the user prompt and trim the first line if it's empty
321
- lines.length > 1 && lines[0].replaceAll(" ", "").length === 0
322
- ? lines.slice(1).join("\n")
323
- : lines.join("\n"),
324
-
325
- // sort appendices by path and include at the end of the prompt
326
- Object.entries(appendices)
327
- .sort(([a], [b]) => a.localeCompare(b))
328
- .map(([filePath, content]) => {
329
- const extension = path.extname(filePath).slice(1);
330
- const codeTag = extension ? extension : "";
331
- return `// ${filePath}\n\`\`\`${codeTag}\n${content}\n\`\`\``;
332
- })
333
- .join("\n\n"),
334
- ].join("\n");
182
+ return root;
335
183
  }
336
184
 
337
185
  export type Phase = "up" | "destroy" | "read";
@@ -414,6 +262,12 @@ export interface AlchemyOptions {
414
262
  * If not provided, the default fallback logger will be used.
415
263
  */
416
264
  logger?: LoggerApi;
265
+ /**
266
+ * Whether to adopt resources if they already exist but are not yet managed by your Alchemy app.
267
+ *
268
+ * @default false
269
+ */
270
+ adopt?: boolean;
417
271
  }
418
272
 
419
273
  export interface ScopeOptions extends AlchemyOptions {
@@ -463,7 +317,7 @@ async function run<T>(
463
317
  const telemetryClient =
464
318
  options?.parent?.telemetryClient ??
465
319
  TelemetryClient.create({
466
- phase: isRuntime ? "read" : (options?.phase ?? "up"),
320
+ phase: options?.phase ?? "up",
467
321
  enabled: options?.telemetry ?? true,
468
322
  quiet: options?.quiet ?? false,
469
323
  });