alchemy 0.62.3 → 0.63.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 (612) hide show
  1. package/bin/alchemy.js +1517 -1203
  2. package/bin/commands/deploy.ts +2 -0
  3. package/bin/commands/dev.ts +2 -0
  4. package/bin/commands/init.ts +1 -1
  5. package/bin/services/execute-alchemy.ts +11 -0
  6. package/bin/services/github-workflow.ts +2 -2
  7. package/bin/services/template-manager.ts +2 -0
  8. package/bin/types.ts +2 -1
  9. package/lib/alchemy.d.ts +6 -22
  10. package/lib/alchemy.d.ts.map +1 -1
  11. package/lib/alchemy.js +65 -169
  12. package/lib/alchemy.js.map +1 -1
  13. package/lib/apply.d.ts +0 -2
  14. package/lib/apply.d.ts.map +1 -1
  15. package/lib/apply.js +2 -16
  16. package/lib/apply.js.map +1 -1
  17. package/lib/aws/account-id.d.ts.map +1 -1
  18. package/lib/aws/account-id.js +3 -2
  19. package/lib/aws/account-id.js.map +1 -1
  20. package/lib/aws/bucket.d.ts +8 -2
  21. package/lib/aws/bucket.d.ts.map +1 -1
  22. package/lib/aws/bucket.js +21 -14
  23. package/lib/aws/bucket.js.map +1 -1
  24. package/lib/aws/ec2/security-group.d.ts +8 -2
  25. package/lib/aws/ec2/security-group.d.ts.map +1 -1
  26. package/lib/aws/ec2/security-group.js +7 -2
  27. package/lib/aws/ec2/security-group.js.map +1 -1
  28. package/lib/aws/function.d.ts +9 -3
  29. package/lib/aws/function.d.ts.map +1 -1
  30. package/lib/aws/function.js +35 -26
  31. package/lib/aws/function.js.map +1 -1
  32. package/lib/aws/policy-attachment.d.ts.map +1 -1
  33. package/lib/aws/policy-attachment.js +2 -1
  34. package/lib/aws/policy-attachment.js.map +1 -1
  35. package/lib/aws/policy.d.ts +8 -2
  36. package/lib/aws/policy.d.ts.map +1 -1
  37. package/lib/aws/policy.js +13 -4
  38. package/lib/aws/policy.js.map +1 -1
  39. package/lib/aws/queue.d.ts +8 -2
  40. package/lib/aws/queue.d.ts.map +1 -1
  41. package/lib/aws/queue.js +22 -14
  42. package/lib/aws/queue.js.map +1 -1
  43. package/lib/aws/role.d.ts +8 -2
  44. package/lib/aws/role.d.ts.map +1 -1
  45. package/lib/aws/role.js +10 -3
  46. package/lib/aws/role.js.map +1 -1
  47. package/lib/aws/ses.d.ts +1 -1
  48. package/lib/aws/ses.d.ts.map +1 -1
  49. package/lib/aws/ses.js +2 -1
  50. package/lib/aws/ses.js.map +1 -1
  51. package/lib/aws/ssm-parameter.d.ts +8 -2
  52. package/lib/aws/ssm-parameter.d.ts.map +1 -1
  53. package/lib/aws/ssm-parameter.js +15 -10
  54. package/lib/aws/ssm-parameter.js.map +1 -1
  55. package/lib/aws/table.d.ts +8 -2
  56. package/lib/aws/table.d.ts.map +1 -1
  57. package/lib/aws/table.js +17 -9
  58. package/lib/aws/table.js.map +1 -1
  59. package/lib/cloudflare/account-api-token.d.ts +2 -2
  60. package/lib/cloudflare/account-api-token.d.ts.map +1 -1
  61. package/lib/cloudflare/account-api-token.js +7 -6
  62. package/lib/cloudflare/account-api-token.js.map +1 -1
  63. package/lib/cloudflare/ai-gateway.d.ts +9 -4
  64. package/lib/cloudflare/ai-gateway.d.ts.map +1 -1
  65. package/lib/cloudflare/ai-gateway.js +20 -24
  66. package/lib/cloudflare/ai-gateway.js.map +1 -1
  67. package/lib/cloudflare/api-schema.d.ts +2 -2
  68. package/lib/cloudflare/api-schema.d.ts.map +1 -1
  69. package/lib/cloudflare/api-schema.js +6 -2
  70. package/lib/cloudflare/api-schema.js.map +1 -1
  71. package/lib/cloudflare/api-shield.d.ts +5 -1
  72. package/lib/cloudflare/api-shield.d.ts.map +1 -1
  73. package/lib/cloudflare/api-shield.js +6 -1
  74. package/lib/cloudflare/api-shield.js.map +1 -1
  75. package/lib/cloudflare/assets.d.ts +1 -1
  76. package/lib/cloudflare/assets.d.ts.map +1 -1
  77. package/lib/cloudflare/astro/astro.d.ts.map +1 -1
  78. package/lib/cloudflare/astro/astro.js +3 -1
  79. package/lib/cloudflare/astro/astro.js.map +1 -1
  80. package/lib/cloudflare/astro/plugin.d.ts +2 -1
  81. package/lib/cloudflare/astro/plugin.d.ts.map +1 -1
  82. package/lib/cloudflare/astro/plugin.js.map +1 -1
  83. package/lib/cloudflare/bindings.d.ts +2 -2
  84. package/lib/cloudflare/bindings.d.ts.map +1 -1
  85. package/lib/cloudflare/bound.d.ts +1 -1
  86. package/lib/cloudflare/bound.d.ts.map +1 -1
  87. package/lib/cloudflare/bucket.d.ts +120 -1
  88. package/lib/cloudflare/bucket.d.ts.map +1 -1
  89. package/lib/cloudflare/bucket.js +80 -2
  90. package/lib/cloudflare/bucket.js.map +1 -1
  91. package/lib/cloudflare/cloudflare-env-proxy.js +1 -1
  92. package/lib/cloudflare/cloudflare-env-proxy.js.map +1 -1
  93. package/lib/cloudflare/compatibility-date.gen.d.ts +1 -1
  94. package/lib/cloudflare/compatibility-date.gen.js +1 -1
  95. package/lib/cloudflare/container.d.ts +10 -4
  96. package/lib/cloudflare/container.d.ts.map +1 -1
  97. package/lib/cloudflare/container.js +12 -9
  98. package/lib/cloudflare/container.js.map +1 -1
  99. package/lib/cloudflare/custom-domain.js +2 -1
  100. package/lib/cloudflare/custom-domain.js.map +1 -1
  101. package/lib/cloudflare/d1-database.d.ts +1 -1
  102. package/lib/cloudflare/d1-database.d.ts.map +1 -1
  103. package/lib/cloudflare/d1-database.js +6 -2
  104. package/lib/cloudflare/d1-database.js.map +1 -1
  105. package/lib/cloudflare/dispatch-namespace.d.ts +2 -0
  106. package/lib/cloudflare/dispatch-namespace.d.ts.map +1 -1
  107. package/lib/cloudflare/dispatch-namespace.js +7 -5
  108. package/lib/cloudflare/dispatch-namespace.js.map +1 -1
  109. package/lib/cloudflare/durable-object-namespace.d.ts.map +1 -1
  110. package/lib/cloudflare/durable-object-namespace.js.map +1 -1
  111. package/lib/cloudflare/hyperdrive.d.ts +7 -1
  112. package/lib/cloudflare/hyperdrive.d.ts.map +1 -1
  113. package/lib/cloudflare/hyperdrive.js +3 -2
  114. package/lib/cloudflare/hyperdrive.js.map +1 -1
  115. package/lib/cloudflare/kv-namespace.d.ts +3 -0
  116. package/lib/cloudflare/kv-namespace.d.ts.map +1 -1
  117. package/lib/cloudflare/kv-namespace.js +11 -2
  118. package/lib/cloudflare/kv-namespace.js.map +1 -1
  119. package/lib/cloudflare/miniflare/miniflare-worker-proxy.js +3 -1
  120. package/lib/cloudflare/miniflare/miniflare-worker-proxy.js.map +1 -1
  121. package/lib/cloudflare/miniflare/paths.d.ts +4 -0
  122. package/lib/cloudflare/miniflare/paths.d.ts.map +1 -1
  123. package/lib/cloudflare/miniflare/paths.js +11 -0
  124. package/lib/cloudflare/miniflare/paths.js.map +1 -1
  125. package/lib/cloudflare/pipeline.d.ts +14 -3
  126. package/lib/cloudflare/pipeline.d.ts.map +1 -1
  127. package/lib/cloudflare/pipeline.js +31 -2
  128. package/lib/cloudflare/pipeline.js.map +1 -1
  129. package/lib/cloudflare/queue-consumer.js +1 -1
  130. package/lib/cloudflare/queue-consumer.js.map +1 -1
  131. package/lib/cloudflare/queue.d.ts +4 -2
  132. package/lib/cloudflare/queue.d.ts.map +1 -1
  133. package/lib/cloudflare/queue.js +13 -9
  134. package/lib/cloudflare/queue.js.map +1 -1
  135. package/lib/cloudflare/react-router/plugin.d.ts +1 -1
  136. package/lib/cloudflare/react-router/plugin.d.ts.map +1 -1
  137. package/lib/cloudflare/react-router/react-router.d.ts.map +1 -1
  138. package/lib/cloudflare/react-router/react-router.js +32 -2
  139. package/lib/cloudflare/react-router/react-router.js.map +1 -1
  140. package/lib/cloudflare/redwood/plugin.d.ts +2 -1
  141. package/lib/cloudflare/redwood/plugin.d.ts.map +1 -1
  142. package/lib/cloudflare/redwood/plugin.js.map +1 -1
  143. package/lib/cloudflare/route.js +1 -1
  144. package/lib/cloudflare/route.js.map +1 -1
  145. package/lib/cloudflare/ruleset.d.ts +3 -1
  146. package/lib/cloudflare/ruleset.d.ts.map +1 -1
  147. package/lib/cloudflare/ruleset.js +3 -2
  148. package/lib/cloudflare/ruleset.js.map +1 -1
  149. package/lib/cloudflare/secret.d.ts +6 -23
  150. package/lib/cloudflare/secret.d.ts.map +1 -1
  151. package/lib/cloudflare/secret.js +8 -4
  152. package/lib/cloudflare/secret.js.map +1 -1
  153. package/lib/cloudflare/secrets-store.d.ts +1 -1
  154. package/lib/cloudflare/secrets-store.d.ts.map +1 -1
  155. package/lib/cloudflare/secrets-store.js +5 -2
  156. package/lib/cloudflare/secrets-store.js.map +1 -1
  157. package/lib/cloudflare/tunnel.d.ts +5 -1
  158. package/lib/cloudflare/tunnel.d.ts.map +1 -1
  159. package/lib/cloudflare/tunnel.js +5 -1
  160. package/lib/cloudflare/tunnel.js.map +1 -1
  161. package/lib/cloudflare/vectorize-index.d.ts +7 -1
  162. package/lib/cloudflare/vectorize-index.d.ts.map +1 -1
  163. package/lib/cloudflare/vectorize-index.js +5 -2
  164. package/lib/cloudflare/vectorize-index.js.map +1 -1
  165. package/lib/cloudflare/vite/plugin.d.ts +2 -1
  166. package/lib/cloudflare/vite/plugin.d.ts.map +1 -1
  167. package/lib/cloudflare/vite/plugin.js.map +1 -1
  168. package/lib/cloudflare/website.js +1 -1
  169. package/lib/cloudflare/website.js.map +1 -1
  170. package/lib/cloudflare/worker-metadata.js +1 -1
  171. package/lib/cloudflare/worker-metadata.js.map +1 -1
  172. package/lib/cloudflare/worker.d.ts +1 -1
  173. package/lib/cloudflare/worker.d.ts.map +1 -1
  174. package/lib/cloudflare/worker.js +12 -7
  175. package/lib/cloudflare/worker.js.map +1 -1
  176. package/lib/cloudflare/wrangler.json.d.ts +1 -1
  177. package/lib/cloudflare/wrangler.json.d.ts.map +1 -1
  178. package/lib/cloudflare/wrangler.json.js +5 -3
  179. package/lib/cloudflare/wrangler.json.js.map +1 -1
  180. package/lib/docker/container.d.ts +6 -0
  181. package/lib/docker/container.d.ts.map +1 -1
  182. package/lib/docker/container.js +5 -1
  183. package/lib/docker/container.js.map +1 -1
  184. package/lib/docker/network.d.ts +8 -2
  185. package/lib/docker/network.d.ts.map +1 -1
  186. package/lib/docker/network.js +7 -2
  187. package/lib/docker/network.js.map +1 -1
  188. package/lib/docker/volume.d.ts +8 -2
  189. package/lib/docker/volume.d.ts.map +1 -1
  190. package/lib/docker/volume.js +6 -4
  191. package/lib/docker/volume.js.map +1 -1
  192. package/lib/esbuild/bundle.d.ts +1 -1
  193. package/lib/fs/index.d.ts +0 -8
  194. package/lib/fs/index.d.ts.map +1 -1
  195. package/lib/fs/index.js +0 -8
  196. package/lib/fs/index.js.map +1 -1
  197. package/lib/github/client.d.ts +1 -1
  198. package/lib/github/client.d.ts.map +1 -1
  199. package/lib/github/client.js +2 -1
  200. package/lib/github/client.js.map +1 -1
  201. package/lib/github/repository-environment.d.ts +8 -2
  202. package/lib/github/repository-environment.d.ts.map +1 -1
  203. package/lib/github/repository-environment.js +16 -12
  204. package/lib/github/repository-environment.js.map +1 -1
  205. package/lib/neon/project.d.ts +7 -1
  206. package/lib/neon/project.d.ts.map +1 -1
  207. package/lib/neon/project.js +14 -11
  208. package/lib/neon/project.js.map +1 -1
  209. package/lib/planetscale/branch.d.ts +4 -2
  210. package/lib/planetscale/branch.d.ts.map +1 -1
  211. package/lib/planetscale/branch.js +18 -12
  212. package/lib/planetscale/branch.js.map +1 -1
  213. package/lib/planetscale/database.d.ts +8 -2
  214. package/lib/planetscale/database.d.ts.map +1 -1
  215. package/lib/planetscale/database.js +24 -16
  216. package/lib/planetscale/database.js.map +1 -1
  217. package/lib/planetscale/password.d.ts +8 -2
  218. package/lib/planetscale/password.d.ts.map +1 -1
  219. package/lib/planetscale/password.js +2 -2
  220. package/lib/planetscale/password.js.map +1 -1
  221. package/lib/resource.d.ts +0 -2
  222. package/lib/resource.d.ts.map +1 -1
  223. package/lib/resource.js +1 -9
  224. package/lib/resource.js.map +1 -1
  225. package/lib/scope.d.ts +9 -3
  226. package/lib/scope.d.ts.map +1 -1
  227. package/lib/scope.js +21 -34
  228. package/lib/scope.js.map +1 -1
  229. package/lib/sentry/client-key.d.ts +7 -1
  230. package/lib/sentry/client-key.d.ts.map +1 -1
  231. package/lib/sentry/client-key.js +45 -6
  232. package/lib/sentry/client-key.js.map +1 -1
  233. package/lib/sentry/project.d.ts +8 -2
  234. package/lib/sentry/project.d.ts.map +1 -1
  235. package/lib/sentry/project.js +35 -5
  236. package/lib/sentry/project.js.map +1 -1
  237. package/lib/sentry/team.d.ts +8 -2
  238. package/lib/sentry/team.d.ts.map +1 -1
  239. package/lib/sentry/team.js +36 -6
  240. package/lib/sentry/team.js.map +1 -1
  241. package/lib/serde.d.ts +0 -5
  242. package/lib/serde.d.ts.map +1 -1
  243. package/lib/serde.js +0 -28
  244. package/lib/serde.js.map +1 -1
  245. package/lib/state/d1-state-store.d.ts +1 -1
  246. package/lib/state/d1-state-store.d.ts.map +1 -1
  247. package/lib/state/d1-state-store.js +5 -5
  248. package/lib/state/d1-state-store.js.map +1 -1
  249. package/lib/state/sqlite-state-store.d.ts.map +1 -1
  250. package/lib/state/sqlite-state-store.js +7 -11
  251. package/lib/state/sqlite-state-store.js.map +1 -1
  252. package/lib/stripe/card.d.ts.map +1 -1
  253. package/lib/stripe/card.js +3 -2
  254. package/lib/stripe/card.js.map +1 -1
  255. package/lib/stripe/client.d.ts +2 -2
  256. package/lib/stripe/client.d.ts.map +1 -1
  257. package/lib/stripe/client.js +4 -3
  258. package/lib/stripe/client.js.map +1 -1
  259. package/lib/stripe/coupon.d.ts.map +1 -1
  260. package/lib/stripe/coupon.js +4 -3
  261. package/lib/stripe/coupon.js.map +1 -1
  262. package/lib/stripe/customer.js +2 -2
  263. package/lib/stripe/customer.js.map +1 -1
  264. package/lib/stripe/entitlements-feature.d.ts.map +1 -1
  265. package/lib/stripe/entitlements-feature.js +3 -2
  266. package/lib/stripe/entitlements-feature.js.map +1 -1
  267. package/lib/stripe/file.d.ts.map +1 -1
  268. package/lib/stripe/file.js +3 -2
  269. package/lib/stripe/file.js.map +1 -1
  270. package/lib/stripe/meter.js +2 -2
  271. package/lib/stripe/meter.js.map +1 -1
  272. package/lib/stripe/portal-configuration.d.ts.map +1 -1
  273. package/lib/stripe/portal-configuration.js +3 -2
  274. package/lib/stripe/portal-configuration.js.map +1 -1
  275. package/lib/stripe/price.d.ts.map +1 -1
  276. package/lib/stripe/price.js +3 -2
  277. package/lib/stripe/price.js.map +1 -1
  278. package/lib/stripe/product-feature.d.ts.map +1 -1
  279. package/lib/stripe/product-feature.js +3 -2
  280. package/lib/stripe/product-feature.js.map +1 -1
  281. package/lib/stripe/product.d.ts.map +1 -1
  282. package/lib/stripe/product.js +3 -2
  283. package/lib/stripe/product.js.map +1 -1
  284. package/lib/stripe/promotion-code.d.ts.map +1 -1
  285. package/lib/stripe/promotion-code.js +3 -2
  286. package/lib/stripe/promotion-code.js.map +1 -1
  287. package/lib/stripe/shipping-rate.d.ts.map +1 -1
  288. package/lib/stripe/shipping-rate.js +4 -3
  289. package/lib/stripe/shipping-rate.js.map +1 -1
  290. package/lib/stripe/tax-rate.d.ts.map +1 -1
  291. package/lib/stripe/tax-rate.js +3 -2
  292. package/lib/stripe/tax-rate.js.map +1 -1
  293. package/lib/stripe/webhook.d.ts.map +1 -1
  294. package/lib/stripe/webhook.js +4 -3
  295. package/lib/stripe/webhook.js.map +1 -1
  296. package/lib/test/vitest.d.ts.map +1 -1
  297. package/lib/test/vitest.js +1 -0
  298. package/lib/test/vitest.js.map +1 -1
  299. package/lib/upstash/redis.d.ts +8 -2
  300. package/lib/upstash/redis.d.ts.map +1 -1
  301. package/lib/upstash/redis.js +6 -5
  302. package/lib/upstash/redis.js.map +1 -1
  303. package/lib/util/idempotent-spawn.d.ts.map +1 -1
  304. package/lib/util/idempotent-spawn.js +21 -2
  305. package/lib/util/idempotent-spawn.js.map +1 -1
  306. package/lib/util/ignore-matcher.d.ts.map +1 -1
  307. package/lib/util/ignore-matcher.js +3 -1
  308. package/lib/util/ignore-matcher.js.map +1 -1
  309. package/lib/util/peer.d.ts +10 -0
  310. package/lib/util/peer.d.ts.map +1 -0
  311. package/lib/util/peer.js +42 -0
  312. package/lib/util/peer.js.map +1 -0
  313. package/lib/util/xml.js +1 -1
  314. package/lib/util/xml.js.map +1 -1
  315. package/lib/vercel/project.d.ts +7 -1
  316. package/lib/vercel/project.d.ts.map +1 -1
  317. package/lib/vercel/project.js +28 -0
  318. package/lib/vercel/project.js.map +1 -1
  319. package/package.json +88 -74
  320. package/src/alchemy.ts +76 -222
  321. package/src/apply.ts +6 -19
  322. package/src/aws/account-id.ts +6 -3
  323. package/src/aws/bucket.ts +43 -32
  324. package/src/aws/ec2/security-group.ts +15 -3
  325. package/src/aws/function.ts +65 -39
  326. package/src/aws/policy-attachment.ts +10 -6
  327. package/src/aws/policy.ts +33 -15
  328. package/src/aws/queue.ts +50 -29
  329. package/src/aws/role.ts +37 -20
  330. package/src/aws/ses.ts +24 -20
  331. package/src/aws/ssm-parameter.ts +40 -20
  332. package/src/aws/table.ts +35 -17
  333. package/src/cloudflare/account-api-token.ts +9 -7
  334. package/src/cloudflare/ai-gateway.ts +37 -34
  335. package/src/cloudflare/api-schema.ts +33 -26
  336. package/src/cloudflare/api-shield.ts +15 -2
  337. package/src/cloudflare/astro/astro.ts +5 -1
  338. package/src/cloudflare/astro/plugin.ts +2 -1
  339. package/src/cloudflare/bindings.ts +2 -2
  340. package/src/cloudflare/bound.ts +1 -1
  341. package/src/cloudflare/bucket.ts +242 -3
  342. package/src/cloudflare/cloudflare-env-proxy.ts +1 -1
  343. package/src/cloudflare/compatibility-date.gen.ts +1 -1
  344. package/src/cloudflare/container.ts +23 -12
  345. package/src/cloudflare/custom-domain.ts +2 -2
  346. package/src/cloudflare/d1-database.ts +10 -3
  347. package/src/cloudflare/dispatch-namespace.ts +10 -7
  348. package/src/cloudflare/durable-object-namespace.ts +0 -1
  349. package/src/cloudflare/hyperdrive.ts +14 -4
  350. package/src/cloudflare/kv-namespace.ts +25 -2
  351. package/src/cloudflare/miniflare/miniflare-worker-proxy.ts +3 -1
  352. package/src/cloudflare/miniflare/paths.ts +13 -0
  353. package/src/cloudflare/pipeline.ts +76 -28
  354. package/src/cloudflare/queue-consumer.ts +1 -1
  355. package/src/cloudflare/queue.ts +26 -14
  356. package/src/cloudflare/react-router/react-router.ts +28 -2
  357. package/src/cloudflare/redwood/plugin.ts +3 -2
  358. package/src/cloudflare/route.ts +1 -1
  359. package/src/cloudflare/ruleset.ts +7 -2
  360. package/src/cloudflare/secret.ts +20 -31
  361. package/src/cloudflare/secrets-store.ts +7 -3
  362. package/src/cloudflare/tunnel.ts +13 -2
  363. package/src/cloudflare/vectorize-index.ts +14 -3
  364. package/src/cloudflare/vite/plugin.ts +3 -2
  365. package/src/cloudflare/website.ts +1 -1
  366. package/src/cloudflare/worker-metadata.ts +1 -1
  367. package/src/cloudflare/worker.ts +35 -23
  368. package/src/cloudflare/wrangler.json.ts +7 -4
  369. package/src/docker/container.ts +13 -1
  370. package/src/docker/network.ts +18 -3
  371. package/src/docker/volume.ts +17 -6
  372. package/src/fs/index.ts +0 -8
  373. package/src/github/client.ts +6 -2
  374. package/src/github/repository-environment.ts +27 -13
  375. package/src/neon/project.ts +24 -11
  376. package/src/planetscale/branch.ts +24 -13
  377. package/src/planetscale/database.ts +38 -17
  378. package/src/planetscale/password.ts +10 -3
  379. package/src/resource.ts +1 -10
  380. package/src/scope.ts +29 -38
  381. package/src/sentry/client-key.ts +74 -6
  382. package/src/sentry/project.ts +59 -6
  383. package/src/sentry/team.ts +55 -7
  384. package/src/serde.ts +0 -44
  385. package/src/state/d1-state-store.ts +13 -6
  386. package/src/state/sqlite-state-store.ts +16 -17
  387. package/src/stripe/card.ts +5 -2
  388. package/src/stripe/client.ts +10 -3
  389. package/src/stripe/coupon.ts +4 -3
  390. package/src/stripe/customer.ts +2 -2
  391. package/src/stripe/entitlements-feature.ts +5 -2
  392. package/src/stripe/file.ts +3 -2
  393. package/src/stripe/meter.ts +2 -2
  394. package/src/stripe/portal-configuration.ts +5 -2
  395. package/src/stripe/price.ts +3 -2
  396. package/src/stripe/product-feature.ts +5 -2
  397. package/src/stripe/product.ts +3 -2
  398. package/src/stripe/promotion-code.ts +3 -2
  399. package/src/stripe/shipping-rate.ts +4 -3
  400. package/src/stripe/tax-rate.ts +3 -2
  401. package/src/stripe/webhook.ts +4 -3
  402. package/src/test/vitest.ts +1 -0
  403. package/src/upstash/redis.ts +16 -6
  404. package/src/util/idempotent-spawn.ts +23 -2
  405. package/src/util/ignore-matcher.ts +3 -1
  406. package/src/util/peer.ts +53 -0
  407. package/src/util/xml.ts +1 -1
  408. package/src/vercel/project.ts +46 -1
  409. package/templates/hono/README.md +19 -0
  410. package/templates/hono/_env +1 -0
  411. package/templates/hono/_env.example +1 -0
  412. package/templates/hono/_gitignore +34 -0
  413. package/templates/hono/alchemy.run.ts +22 -0
  414. package/templates/hono/package.json +18 -0
  415. package/templates/hono/src/index.ts +17 -0
  416. package/templates/hono/tsconfig.json +13 -0
  417. package/templates/hono/types/env.d.ts +16 -0
  418. package/templates/react-router/vite.config.ts +5 -3
  419. package/workers/cloudflare-state-store.js +69 -74
  420. package/workers/dofs-state-store.js +1 -1
  421. package/bin/bootstrap-s3.ts +0 -255
  422. package/lib/ai/ark.d.ts +0 -12
  423. package/lib/ai/ark.d.ts.map +0 -1
  424. package/lib/ai/ark.js +0 -87
  425. package/lib/ai/ark.js.map +0 -1
  426. package/lib/ai/astro-file.d.ts +0 -138
  427. package/lib/ai/astro-file.d.ts.map +0 -1
  428. package/lib/ai/astro-file.js +0 -158
  429. package/lib/ai/astro-file.js.map +0 -1
  430. package/lib/ai/client.d.ts +0 -51
  431. package/lib/ai/client.d.ts.map +0 -1
  432. package/lib/ai/client.js +0 -58
  433. package/lib/ai/client.js.map +0 -1
  434. package/lib/ai/css-file.d.ts +0 -132
  435. package/lib/ai/css-file.d.ts.map +0 -1
  436. package/lib/ai/css-file.js +0 -142
  437. package/lib/ai/css-file.js.map +0 -1
  438. package/lib/ai/data.d.ts +0 -152
  439. package/lib/ai/data.d.ts.map +0 -1
  440. package/lib/ai/data.js +0 -120
  441. package/lib/ai/data.js.map +0 -1
  442. package/lib/ai/document.d.ts +0 -208
  443. package/lib/ai/document.d.ts.map +0 -1
  444. package/lib/ai/document.js +0 -206
  445. package/lib/ai/document.js.map +0 -1
  446. package/lib/ai/html-file.d.ts +0 -129
  447. package/lib/ai/html-file.d.ts.map +0 -1
  448. package/lib/ai/html-file.js +0 -139
  449. package/lib/ai/html-file.js.map +0 -1
  450. package/lib/ai/index.d.ts +0 -11
  451. package/lib/ai/index.d.ts.map +0 -1
  452. package/lib/ai/index.js +0 -11
  453. package/lib/ai/index.js.map +0 -1
  454. package/lib/ai/json-file.d.ts +0 -161
  455. package/lib/ai/json-file.d.ts.map +0 -1
  456. package/lib/ai/json-file.js +0 -188
  457. package/lib/ai/json-file.js.map +0 -1
  458. package/lib/ai/typescript-file.d.ts +0 -140
  459. package/lib/ai/typescript-file.d.ts.map +0 -1
  460. package/lib/ai/typescript-file.js +0 -146
  461. package/lib/ai/typescript-file.js.map +0 -1
  462. package/lib/ai/vue-file.d.ts +0 -127
  463. package/lib/ai/vue-file.d.ts.map +0 -1
  464. package/lib/ai/vue-file.js +0 -137
  465. package/lib/ai/vue-file.js.map +0 -1
  466. package/lib/ai/yaml-file.d.ts +0 -170
  467. package/lib/ai/yaml-file.d.ts.map +0 -1
  468. package/lib/ai/yaml-file.js +0 -201
  469. package/lib/ai/yaml-file.js.map +0 -1
  470. package/lib/fs/static-astro-file.d.ts +0 -35
  471. package/lib/fs/static-astro-file.d.ts.map +0 -1
  472. package/lib/fs/static-astro-file.js +0 -40
  473. package/lib/fs/static-astro-file.js.map +0 -1
  474. package/lib/fs/static-css-file.d.ts +0 -25
  475. package/lib/fs/static-css-file.d.ts.map +0 -1
  476. package/lib/fs/static-css-file.js +0 -30
  477. package/lib/fs/static-css-file.js.map +0 -1
  478. package/lib/fs/static-html-file.d.ts +0 -32
  479. package/lib/fs/static-html-file.d.ts.map +0 -1
  480. package/lib/fs/static-html-file.js +0 -37
  481. package/lib/fs/static-html-file.js.map +0 -1
  482. package/lib/fs/static-json-file.d.ts +0 -18
  483. package/lib/fs/static-json-file.d.ts.map +0 -1
  484. package/lib/fs/static-json-file.js +0 -19
  485. package/lib/fs/static-json-file.js.map +0 -1
  486. package/lib/fs/static-text-file.d.ts +0 -13
  487. package/lib/fs/static-text-file.d.ts.map +0 -1
  488. package/lib/fs/static-text-file.js +0 -9
  489. package/lib/fs/static-text-file.js.map +0 -1
  490. package/lib/fs/static-typescript-file.d.ts +0 -20
  491. package/lib/fs/static-typescript-file.d.ts.map +0 -1
  492. package/lib/fs/static-typescript-file.js +0 -16
  493. package/lib/fs/static-typescript-file.js.map +0 -1
  494. package/lib/fs/static-vue-file.d.ts +0 -29
  495. package/lib/fs/static-vue-file.d.ts.map +0 -1
  496. package/lib/fs/static-vue-file.js +0 -34
  497. package/lib/fs/static-vue-file.js.map +0 -1
  498. package/lib/fs/static-yaml-file.d.ts +0 -23
  499. package/lib/fs/static-yaml-file.d.ts.map +0 -1
  500. package/lib/fs/static-yaml-file.js +0 -10
  501. package/lib/fs/static-yaml-file.js.map +0 -1
  502. package/lib/internal/docs/providers.d.ts +0 -34
  503. package/lib/internal/docs/providers.d.ts.map +0 -1
  504. package/lib/internal/docs/providers.js +0 -200
  505. package/lib/internal/docs/providers.js.map +0 -1
  506. package/lib/runtime/bind.d.ts +0 -25
  507. package/lib/runtime/bind.d.ts.map +0 -1
  508. package/lib/runtime/bind.js +0 -76
  509. package/lib/runtime/bind.js.map +0 -1
  510. package/lib/runtime/global.d.ts +0 -8
  511. package/lib/runtime/global.d.ts.map +0 -1
  512. package/lib/runtime/global.js +0 -3
  513. package/lib/runtime/global.js.map +0 -1
  514. package/lib/runtime/plugin.d.ts +0 -35
  515. package/lib/runtime/plugin.d.ts.map +0 -1
  516. package/lib/runtime/plugin.js +0 -134
  517. package/lib/runtime/plugin.js.map +0 -1
  518. package/lib/runtime/shims.d.ts +0 -6
  519. package/lib/runtime/shims.d.ts.map +0 -1
  520. package/lib/runtime/shims.js +0 -27
  521. package/lib/runtime/shims.js.map +0 -1
  522. package/lib/runtime/state.d.ts +0 -5
  523. package/lib/runtime/state.d.ts.map +0 -1
  524. package/lib/runtime/state.js +0 -4
  525. package/lib/runtime/state.js.map +0 -1
  526. package/lib/web/astro.d.ts +0 -148
  527. package/lib/web/astro.d.ts.map +0 -1
  528. package/lib/web/astro.js +0 -419
  529. package/lib/web/astro.js.map +0 -1
  530. package/lib/web/shadcn-component.d.ts +0 -30
  531. package/lib/web/shadcn-component.d.ts.map +0 -1
  532. package/lib/web/shadcn-component.js +0 -25
  533. package/lib/web/shadcn-component.js.map +0 -1
  534. package/lib/web/shadcn.d.ts +0 -98
  535. package/lib/web/shadcn.d.ts.map +0 -1
  536. package/lib/web/shadcn.js +0 -102
  537. package/lib/web/shadcn.js.map +0 -1
  538. package/lib/web/tailwind.d.ts +0 -65
  539. package/lib/web/tailwind.d.ts.map +0 -1
  540. package/lib/web/tailwind.js +0 -98
  541. package/lib/web/tailwind.js.map +0 -1
  542. package/lib/web/vite.d.ts +0 -96
  543. package/lib/web/vite.d.ts.map +0 -1
  544. package/lib/web/vite.js +0 -232
  545. package/lib/web/vite.js.map +0 -1
  546. package/lib/web/vitepress/config.d.ts +0 -12
  547. package/lib/web/vitepress/config.d.ts.map +0 -1
  548. package/lib/web/vitepress/config.js +0 -33
  549. package/lib/web/vitepress/config.js.map +0 -1
  550. package/lib/web/vitepress/custom-theme.d.ts +0 -174
  551. package/lib/web/vitepress/custom-theme.d.ts.map +0 -1
  552. package/lib/web/vitepress/custom-theme.js +0 -337
  553. package/lib/web/vitepress/custom-theme.js.map +0 -1
  554. package/lib/web/vitepress/dependencies.d.ts +0 -13
  555. package/lib/web/vitepress/dependencies.d.ts.map +0 -1
  556. package/lib/web/vitepress/dependencies.js +0 -37
  557. package/lib/web/vitepress/dependencies.js.map +0 -1
  558. package/lib/web/vitepress/home-page.d.ts +0 -247
  559. package/lib/web/vitepress/home-page.d.ts.map +0 -1
  560. package/lib/web/vitepress/home-page.js +0 -146
  561. package/lib/web/vitepress/home-page.js.map +0 -1
  562. package/lib/web/vitepress/index.d.ts +0 -6
  563. package/lib/web/vitepress/index.d.ts.map +0 -1
  564. package/lib/web/vitepress/index.js +0 -6
  565. package/lib/web/vitepress/index.js.map +0 -1
  566. package/lib/web/vitepress/process-front-matter-files.d.ts +0 -19
  567. package/lib/web/vitepress/process-front-matter-files.d.ts.map +0 -1
  568. package/lib/web/vitepress/process-front-matter-files.js +0 -73
  569. package/lib/web/vitepress/process-front-matter-files.js.map +0 -1
  570. package/lib/web/vitepress/vitepress.d.ts +0 -75
  571. package/lib/web/vitepress/vitepress.d.ts.map +0 -1
  572. package/lib/web/vitepress/vitepress.js +0 -254
  573. package/lib/web/vitepress/vitepress.js.map +0 -1
  574. package/src/ai/ark.ts +0 -118
  575. package/src/ai/astro-file.ts +0 -270
  576. package/src/ai/client.ts +0 -117
  577. package/src/ai/css-file.ts +0 -247
  578. package/src/ai/data.ts +0 -221
  579. package/src/ai/document.ts +0 -367
  580. package/src/ai/html-file.ts +0 -244
  581. package/src/ai/index.ts +0 -10
  582. package/src/ai/json-file.ts +0 -325
  583. package/src/ai/typescript-file.ts +0 -259
  584. package/src/ai/vue-file.ts +0 -242
  585. package/src/ai/yaml-file.ts +0 -328
  586. package/src/fs/static-astro-file.ts +0 -45
  587. package/src/fs/static-css-file.ts +0 -35
  588. package/src/fs/static-html-file.ts +0 -42
  589. package/src/fs/static-json-file.ts +0 -38
  590. package/src/fs/static-text-file.ts +0 -23
  591. package/src/fs/static-typescript-file.ts +0 -37
  592. package/src/fs/static-vue-file.ts +0 -39
  593. package/src/fs/static-yaml-file.ts +0 -33
  594. package/src/internal/docs/providers.ts +0 -286
  595. package/src/runtime/bind.ts +0 -95
  596. package/src/runtime/global.ts +0 -10
  597. package/src/runtime/plugin.ts +0 -163
  598. package/src/runtime/shims.js +0 -34
  599. package/src/runtime/state.ts +0 -9
  600. package/src/web/astro.ts +0 -643
  601. package/src/web/shadcn-component.ts +0 -72
  602. package/src/web/shadcn.ts +0 -221
  603. package/src/web/tailwind.ts +0 -167
  604. package/src/web/vite.ts +0 -407
  605. package/src/web/vitepress/config.ts +0 -50
  606. package/src/web/vitepress/custom-theme.ts +0 -514
  607. package/src/web/vitepress/dependencies.ts +0 -69
  608. package/src/web/vitepress/home-page.ts +0 -378
  609. package/src/web/vitepress/index.ts +0 -5
  610. package/src/web/vitepress/process-front-matter-files.ts +0 -107
  611. package/src/web/vitepress/vitepress.ts +0 -372
  612. package/templates/sveltekit/bun.lock +0 -1099
@@ -1,12 +1,13 @@
1
1
  import { cloudflare, type PluginConfig } from "@cloudflare/vite-plugin";
2
2
  import path from "node:path";
3
+ import type { PluginOption } from "vite";
3
4
  import {
4
5
  DEFAULT_PERSIST_PATH,
5
6
  validateConfigPath,
6
7
  validatePersistPath,
7
8
  } from "../miniflare/paths.ts";
8
9
 
9
- const alchemy = (config?: PluginConfig) => {
10
+ const alchemy = (config?: PluginConfig): PluginOption => {
10
11
  const persistState = config?.persistState ?? {
11
12
  path: validatePersistPath(
12
13
  typeof config?.persistState === "object"
@@ -24,7 +25,7 @@ const alchemy = (config?: PluginConfig) => {
24
25
  experimental: config?.experimental ?? {
25
26
  remoteBindings: true,
26
27
  },
27
- });
28
+ }) as PluginOption;
28
29
  };
29
30
 
30
31
  export default alchemy;
@@ -149,7 +149,7 @@ export async function Website<B extends Bindings>(
149
149
  props: WebsiteProps<B>,
150
150
  ) {
151
151
  const {
152
- name = id,
152
+ name = Scope.current.createPhysicalName(id),
153
153
  build: buildProps,
154
154
  assets,
155
155
  dev,
@@ -651,7 +651,7 @@ export function bumpMigrationTagVersion(tag?: string) {
651
651
  if (!tag.match(/^v\d+$/)) {
652
652
  throw new Error(`Invalid tag format: ${tag}. Expected format: v<number>`);
653
653
  }
654
- return `v${Number.parseInt(tag.slice(1)) + 1}`;
654
+ return `v${Number.parseInt(tag.slice(1), 10) + 1}`;
655
655
  }
656
656
  return undefined;
657
657
  }
@@ -134,7 +134,7 @@ export interface BaseWorkerProps<
134
134
  /**
135
135
  * Name for the worker
136
136
  *
137
- * @default id
137
+ * @default ${app}-${stage}-${id}
138
138
  */
139
139
  name?: string;
140
140
 
@@ -709,12 +709,14 @@ const _Worker = Resource(
709
709
  id: string,
710
710
  props: WorkerProps<B>,
711
711
  ) {
712
+ const adopt = props.adopt ?? this.scope.adopt;
712
713
  const options = (() => {
713
714
  if (props.projectRoot) {
714
715
  logger.warn("projectRoot is deprecated, use cwd instead");
715
716
  props.cwd = props.projectRoot;
716
717
  }
717
- const name = props.name ?? id;
718
+ const name =
719
+ props.name ?? this.output?.name ?? this.scope.createPhysicalName(id);
718
720
  const cwd = path.resolve(props.cwd ?? process.cwd());
719
721
  const compatibilityDate =
720
722
  props.compatibilityDate ?? DEFAULT_COMPATIBILITY_DATE;
@@ -826,12 +828,18 @@ const _Worker = Resource(
826
828
  });
827
829
  this.onCleanup(() => controller.dispose());
828
830
  }
829
- await provisionResources(props, {
830
- name: options.name,
831
- local: true,
832
- dispatchNamespace: options.dispatchNamespace,
833
- containers: options.containers,
834
- });
831
+ await provisionResources(
832
+ {
833
+ ...props,
834
+ adopt,
835
+ },
836
+ {
837
+ name: options.name,
838
+ local: true,
839
+ dispatchNamespace: options.dispatchNamespace,
840
+ containers: options.containers,
841
+ },
842
+ );
835
843
  return this({
836
844
  ...props,
837
845
  type: "service",
@@ -878,13 +886,9 @@ const _Worker = Resource(
878
886
  });
879
887
  }
880
888
  // We always "adopt" when publishing versions
881
- } else if (!props.adopt) {
889
+ } else if (!adopt) {
882
890
  await assertWorkerDoesNotExist(api, options.name);
883
- } else if (
884
- props.adopt &&
885
- !options.dispatchNamespace &&
886
- props.url === false
887
- ) {
891
+ } else if (adopt && !options.dispatchNamespace && props.url === false) {
888
892
  // explicitly disable the workers.dev subdomain
889
893
  await disableWorkerSubdomain(api, options.name);
890
894
  }
@@ -964,14 +968,20 @@ const _Worker = Resource(
964
968
  ),
965
969
  );
966
970
 
967
- const { domains, routes, subdomain } = await provisionResources(props, {
968
- name: options.name,
969
- local: false,
970
- dispatchNamespace: options.dispatchNamespace,
971
- containers: options.containers,
972
- result,
973
- api,
974
- });
971
+ const { domains, routes, subdomain } = await provisionResources(
972
+ {
973
+ ...props,
974
+ adopt,
975
+ },
976
+ {
977
+ name: options.name,
978
+ local: false,
979
+ dispatchNamespace: options.dispatchNamespace,
980
+ containers: options.containers,
981
+ result,
982
+ api,
983
+ },
984
+ );
975
985
 
976
986
  const now = new Date();
977
987
  return this({
@@ -1044,7 +1054,9 @@ const assertUnique = <T, Key extends keyof T>(
1044
1054
  };
1045
1055
 
1046
1056
  async function provisionResources<B extends Bindings>(
1047
- props: WorkerProps<B>,
1057
+ props: WorkerProps<B> & {
1058
+ adopt: boolean;
1059
+ },
1048
1060
  options:
1049
1061
  | {
1050
1062
  name: string;
@@ -1,7 +1,6 @@
1
1
  import fs from "node:fs/promises";
2
2
  import path from "node:path";
3
3
  import type { Context } from "../context.ts";
4
- import { formatJson } from "../fs/static-json-file.ts";
5
4
  import { Resource } from "../resource.ts";
6
5
  import { isSecret } from "../secret.ts";
7
6
  import { assertNever } from "../util/assert-never.ts";
@@ -29,7 +28,7 @@ export interface WranglerJsonProps {
29
28
  * The worker to generate the wrangler.json file for
30
29
  */
31
30
  worker:
32
- | Worker
31
+ | Worker<any>
33
32
  | (WorkerProps<any> & {
34
33
  name: string;
35
34
  });
@@ -218,9 +217,9 @@ export const WranglerJson = Resource(
218
217
  ),
219
218
  },
220
219
  };
221
- await fs.writeFile(filePath, await formatJson(withSecretsUnwrapped));
220
+ await writeJSON(filePath, withSecretsUnwrapped);
222
221
  } else {
223
- await fs.writeFile(filePath, await formatJson(finalSpec));
222
+ await writeJSON(filePath, finalSpec);
224
223
  }
225
224
 
226
225
  // Return the resource
@@ -234,6 +233,10 @@ export const WranglerJson = Resource(
234
233
  },
235
234
  );
236
235
 
236
+ const writeJSON = async (filePath: string, content: any) => {
237
+ await fs.writeFile(filePath, `${JSON.stringify(content, null, 2)}\n`);
238
+ };
239
+
237
240
  /**
238
241
  * Wrangler.json configuration specification based on Cloudflare's schema
239
242
  */
@@ -71,6 +71,8 @@ export interface ContainerProps {
71
71
 
72
72
  /**
73
73
  * Container name
74
+ *
75
+ * @default ${app}-${stage}-${id}
74
76
  */
75
77
  name?: string;
76
78
 
@@ -126,6 +128,11 @@ export interface Container
126
128
  */
127
129
  id: string;
128
130
 
131
+ /**
132
+ * Container name
133
+ */
134
+ name: string;
135
+
129
136
  /**
130
137
  * Container state
131
138
  */
@@ -184,7 +191,11 @@ export const Container = Resource(
184
191
 
185
192
  // Use provided name or generate one based on resource ID
186
193
  const containerName =
187
- props.name || `alchemy-${id.replace(/[^a-zA-Z0-9_.-]/g, "-")}`;
194
+ props.name ?? this.output?.name ?? this.scope.createPhysicalName(id);
195
+
196
+ if (this.phase === "update" && this.output.name !== containerName) {
197
+ this.replace();
198
+ }
188
199
 
189
200
  // Handle delete phase
190
201
  if (this.phase === "delete") {
@@ -259,6 +270,7 @@ export const Container = Resource(
259
270
  return this({
260
271
  ...props,
261
272
  id: containerId,
273
+ name: containerName,
262
274
  state: containerState,
263
275
  createdAt: Date.now(),
264
276
  });
@@ -8,8 +8,10 @@ import { DockerApi } from "./api.ts";
8
8
  export interface NetworkProps {
9
9
  /**
10
10
  * Network name
11
+ *
12
+ * @default ${app}-${stage}-${id}
11
13
  */
12
- name: string;
14
+ name?: string;
13
15
 
14
16
  /**
15
17
  * Network driver to use
@@ -38,6 +40,11 @@ export interface Network extends Resource<"docker::Network">, NetworkProps {
38
40
  */
39
41
  id: string;
40
42
 
43
+ /**
44
+ * Network name
45
+ */
46
+ name: string;
47
+
41
48
  /**
42
49
  * Time when the network was created
43
50
  */
@@ -70,12 +77,19 @@ export const Network = Resource(
70
77
  "docker::Network",
71
78
  async function (
72
79
  this: Context<Network>,
73
- _id: string,
80
+ id: string,
74
81
  props: NetworkProps,
75
82
  ): Promise<Network> {
76
83
  // Initialize Docker API client
77
84
  const api = new DockerApi();
78
85
 
86
+ const networkName =
87
+ props.name ?? this.output?.name ?? this.scope.createPhysicalName(id);
88
+
89
+ if (this.phase === "update" && this.output.name !== networkName) {
90
+ this.replace();
91
+ }
92
+
79
93
  // Handle delete phase
80
94
  if (this.phase === "delete") {
81
95
  if (this.output?.id) {
@@ -88,12 +102,13 @@ export const Network = Resource(
88
102
  } else {
89
103
  // Create the network
90
104
  props.driver = props.driver || "bridge";
91
- const networkId = await api.createNetwork(props.name, props.driver);
105
+ const networkId = await api.createNetwork(networkName, props.driver);
92
106
 
93
107
  // Return the resource using this() to construct output
94
108
  return this({
95
109
  ...props,
96
110
  id: networkId,
111
+ name: networkName,
97
112
  createdAt: Date.now(),
98
113
  });
99
114
  }
@@ -23,8 +23,10 @@ export interface VolumeLabel {
23
23
  export interface VolumeProps {
24
24
  /**
25
25
  * Volume name
26
+ *
27
+ * @default ${app}-${stage}-${id}
26
28
  */
27
- name: string;
29
+ name?: string;
28
30
 
29
31
  /**
30
32
  * Volume driver to use
@@ -52,6 +54,11 @@ export interface Volume extends Resource<"docker::Volume">, VolumeProps {
52
54
  */
53
55
  id: string;
54
56
 
57
+ /**
58
+ * Volume name
59
+ */
60
+ name: string;
61
+
55
62
  /**
56
63
  * Volume mountpoint path on the host
57
64
  */
@@ -94,12 +101,15 @@ export const Volume = Resource(
94
101
  "docker::Volume",
95
102
  async function (
96
103
  this: Context<Volume>,
97
- _id: string,
104
+ id: string,
98
105
  props: VolumeProps,
99
106
  ): Promise<Volume> {
100
107
  // Initialize Docker API client
101
108
  const api = new DockerApi();
102
109
 
110
+ const volumeName =
111
+ props.name ?? this.output?.name ?? this.scope.createPhysicalName(id);
112
+
103
113
  // Process labels to ensure consistent format
104
114
  const processedLabels: Record<string, string> = {};
105
115
  if (props.labels) {
@@ -129,21 +139,22 @@ export const Volume = Resource(
129
139
  const driverOpts = props.driverOpts || {};
130
140
 
131
141
  // Create the volume
132
- const volumeName = await api.createVolume(
133
- props.name,
142
+ const volumeId = await api.createVolume(
143
+ volumeName,
134
144
  props.driver,
135
145
  driverOpts,
136
146
  processedLabels,
137
147
  );
138
148
 
139
149
  // Get volume details to retrieve mountpoint
140
- const volumeInfos = await api.inspectVolume(volumeName);
150
+ const volumeInfos = await api.inspectVolume(volumeId);
141
151
  const mountpoint = volumeInfos[0].Mountpoint;
142
152
 
143
153
  // Return the resource using this() to construct output
144
154
  return this({
145
155
  ...props,
146
- id: volumeName,
156
+ id: volumeId,
157
+ name: volumeName,
147
158
  mountpoint,
148
159
  createdAt: Date.now(),
149
160
  labels: Array.isArray(props.labels) ? props.labels : undefined,
package/src/fs/index.ts CHANGED
@@ -3,11 +3,3 @@ export * from "./file-collection.ts";
3
3
  export * from "./file-ref.ts";
4
4
  export * from "./file.ts";
5
5
  export * from "./folder.ts";
6
- export * from "./static-astro-file.ts";
7
- export * from "./static-css-file.ts";
8
- export * from "./static-html-file.ts";
9
- export * from "./static-json-file.ts";
10
- export * from "./static-text-file.ts";
11
- export * from "./static-typescript-file.ts";
12
- export * from "./static-vue-file.ts";
13
- export * from "./static-yaml-file.ts";
@@ -1,7 +1,8 @@
1
- import { Octokit } from "@octokit/rest";
1
+ import type { Octokit } from "@octokit/rest";
2
2
  import { exec } from "node:child_process";
3
3
  import { promisify } from "node:util";
4
4
  import { logger } from "../util/logger.ts";
5
+ import { importPeer } from "../util/peer.ts";
5
6
 
6
7
  // Convert exec to promise-based
7
8
  const execAsync = promisify(exec);
@@ -52,7 +53,10 @@ export async function createGitHubClient(
52
53
  options: { token?: string } = {},
53
54
  ): Promise<Octokit> {
54
55
  const token = await getGitHubToken(options.token);
55
-
56
+ const { Octokit } = await importPeer(
57
+ import("@octokit/rest"),
58
+ "GitHub resources",
59
+ );
56
60
  return new Octokit({
57
61
  auth: token,
58
62
  });
@@ -19,8 +19,10 @@ export interface RepositoryEnvironmentProps {
19
19
 
20
20
  /**
21
21
  * Environment name
22
+ *
23
+ * @default ${app}-${stage}-${id}
22
24
  */
23
- name: string;
25
+ name?: string;
24
26
 
25
27
  /**
26
28
  * Wait timer before allowing deployments to proceed (in minutes)
@@ -104,6 +106,11 @@ export interface RepositoryEnvironment
104
106
  */
105
107
  id: string;
106
108
 
109
+ /**
110
+ * Environment name
111
+ */
112
+ name: string;
113
+
107
114
  /**
108
115
  * The numeric ID of the environment in GitHub
109
116
  */
@@ -174,7 +181,7 @@ export const RepositoryEnvironment = Resource(
174
181
  "github::RepositoryEnvironment",
175
182
  async function (
176
183
  this: Context<RepositoryEnvironment>,
177
- _id: string,
184
+ id: string,
178
185
  props: RepositoryEnvironmentProps,
179
186
  ): Promise<RepositoryEnvironment> {
180
187
  // Create authenticated Octokit client
@@ -187,6 +194,13 @@ export const RepositoryEnvironment = Resource(
187
194
  await verifyGitHubAuth(octokit, props.owner, props.repository);
188
195
  }
189
196
 
197
+ const environmentName =
198
+ props.name ?? this.output?.name ?? this.scope.createPhysicalName(id);
199
+
200
+ if (this.phase === "update" && this.output.name !== environmentName) {
201
+ this.replace();
202
+ }
203
+
190
204
  if (this.phase === "delete") {
191
205
  if (this.output?.id) {
192
206
  try {
@@ -194,7 +208,7 @@ export const RepositoryEnvironment = Resource(
194
208
  await octokit.rest.repos.deleteAnEnvironment({
195
209
  owner: props.owner,
196
210
  repo: props.repository,
197
- environment_name: props.name,
211
+ environment_name: environmentName,
198
212
  });
199
213
  } catch (error: any) {
200
214
  // Ignore 404 errors (environment already deleted)
@@ -220,7 +234,7 @@ export const RepositoryEnvironment = Resource(
220
234
  });
221
235
 
222
236
  const existingEnv = environments.environments?.find(
223
- (env) => env.name.toLowerCase() === props.name.toLowerCase(),
237
+ (env) => env.name.toLowerCase() === environmentName.toLowerCase(),
224
238
  );
225
239
 
226
240
  if (existingEnv?.id) {
@@ -303,7 +317,7 @@ export const RepositoryEnvironment = Resource(
303
317
  await octokit.rest.repos.createOrUpdateEnvironment({
304
318
  owner: props.owner,
305
319
  repo: props.repository,
306
- environment_name: props.name,
320
+ environment_name: environmentName,
307
321
  wait_timer: props.waitTimer,
308
322
  prevent_self_review: props.preventSelfReview,
309
323
  reviewers: reviewers.length > 0 ? reviewers : undefined,
@@ -330,7 +344,7 @@ export const RepositoryEnvironment = Resource(
330
344
  await octokit.rest.repos.createDeploymentBranchPolicy({
331
345
  owner: props.owner,
332
346
  repo: props.repository,
333
- environment_name: props.name,
347
+ environment_name: environmentName,
334
348
  name: pattern,
335
349
  });
336
350
  }
@@ -340,7 +354,7 @@ export const RepositoryEnvironment = Resource(
340
354
  await octokit.rest.repos.createOrUpdateEnvironment({
341
355
  owner: props.owner,
342
356
  repo: props.repository,
343
- environment_name: props.name,
357
+ environment_name: environmentName,
344
358
  wait_timer: props.waitTimer,
345
359
  prevent_self_review: props.preventSelfReview,
346
360
  reviewers: reviewers.length > 0 ? reviewers : undefined,
@@ -361,7 +375,7 @@ export const RepositoryEnvironment = Resource(
361
375
  await octokit.rest.repos.listDeploymentBranchPolicies({
362
376
  owner: props.owner,
363
377
  repo: props.repository,
364
- environment_name: props.name,
378
+ environment_name: environmentName,
365
379
  });
366
380
 
367
381
  const existingPatterns = existingPolicies.branch_policies.map(
@@ -402,7 +416,7 @@ export const RepositoryEnvironment = Resource(
402
416
  await octokit.rest.repos.deleteDeploymentBranchPolicy({
403
417
  owner: props.owner,
404
418
  repo: props.repository,
405
- environment_name: props.name,
419
+ environment_name: environmentName,
406
420
  branch_policy_id: policy.id,
407
421
  });
408
422
  }
@@ -413,7 +427,7 @@ export const RepositoryEnvironment = Resource(
413
427
  await octokit.rest.repos.createDeploymentBranchPolicy({
414
428
  owner: props.owner,
415
429
  repo: props.repository,
416
- environment_name: props.name,
430
+ environment_name: environmentName,
417
431
  name: pattern,
418
432
  });
419
433
  }
@@ -424,16 +438,16 @@ export const RepositoryEnvironment = Resource(
424
438
  const { data: env } = await octokit.rest.repos.getEnvironment({
425
439
  owner: props.owner,
426
440
  repo: props.repository,
427
- environment_name: props.name,
441
+ environment_name: environmentName,
428
442
  });
429
443
 
430
444
  // Return environment details
431
445
  return this({
432
- id: `${props.owner}/${props.repository}/${props.name}`,
446
+ id: `${props.owner}/${props.repository}/${environmentName}`,
433
447
  environmentId: environmentId || env.id,
434
448
  owner: props.owner,
435
449
  repository: props.repository,
436
- name: props.name,
450
+ name: environmentName,
437
451
  waitTimer: props.waitTimer,
438
452
  preventSelfReview: props.preventSelfReview,
439
453
  adminBypass: props.adminBypass,
@@ -28,8 +28,10 @@ export type NeonRegion =
28
28
  export interface NeonProjectProps extends NeonApiOptions {
29
29
  /**
30
30
  * Name of the project
31
+ *
32
+ * @default ${app}-${stage}-${id}
31
33
  */
32
- name: string;
34
+ name?: string;
33
35
 
34
36
  /**
35
37
  * Region where the project will be provisioned
@@ -440,6 +442,11 @@ export interface NeonProject
440
442
  */
441
443
  id: string;
442
444
 
445
+ /**
446
+ * Name of the Project.
447
+ */
448
+ name: string;
449
+
443
450
  /**
444
451
  * Time at which the project was created
445
452
  */
@@ -515,6 +522,12 @@ export const NeonProject = Resource(
515
522
  ): Promise<NeonProject> {
516
523
  const api = createNeonApi(props);
517
524
  const projectId = props.existing_project_id || this.output?.id;
525
+ const projectName =
526
+ props.name ?? this.output?.name ?? this.scope.createPhysicalName(id);
527
+
528
+ if (this.phase === "update" && this.output.name !== projectName) {
529
+ this.replace();
530
+ }
518
531
 
519
532
  if (this.phase === "delete") {
520
533
  try {
@@ -540,7 +553,7 @@ export const NeonProject = Resource(
540
553
  // Neon only allows updating the project name
541
554
  const projectResponse = await api.patch(`/projects/${projectId}`, {
542
555
  project: {
543
- name: props.name,
556
+ name: projectName,
544
557
  },
545
558
  });
546
559
 
@@ -564,7 +577,7 @@ export const NeonProject = Resource(
564
577
  // Project exists, update it
565
578
  const projectResponse = await api.patch(`/projects/${projectId}`, {
566
579
  project: {
567
- name: props.name,
580
+ name: projectName,
568
581
  },
569
582
  });
570
583
 
@@ -585,11 +598,11 @@ export const NeonProject = Resource(
585
598
  throw new Error("Failed to check if project exists");
586
599
  } else {
587
600
  // Project doesn't exist, create new
588
- response = await createNewProject(api, props);
601
+ response = await createNewProject(api, projectName, props);
589
602
  }
590
603
  } else {
591
604
  // No output ID, create new project
592
- response = await createNewProject(api, props);
605
+ response = await createNewProject(api, projectName, props);
593
606
  }
594
607
  }
595
608
 
@@ -617,15 +630,14 @@ export const NeonProject = Resource(
617
630
  default_branch_name: props.default_branch_name,
618
631
  baseUrl: props.baseUrl,
619
632
  // Add all available data
620
- // @ts-ignore - api ensures they're non-empty
633
+ // @ts-expect-error - api ensures they're non-empty
621
634
  connection_uris: response.connection_uris,
622
- // @ts-ignore
635
+ // @ts-expect-error
623
636
  roles: response.roles,
624
- // @ts-ignore
637
+ // @ts-expect-error
625
638
  databases: response.databases,
626
- // @ts-ignore
627
639
  branch: response.branch,
628
- // @ts-ignore
640
+ // @ts-expect-error
629
641
  endpoints: response.endpoints,
630
642
  });
631
643
  } catch (error) {
@@ -640,12 +652,13 @@ export const NeonProject = Resource(
640
652
  */
641
653
  async function createNewProject(
642
654
  api: any,
655
+ projectName: string,
643
656
  props: NeonProjectProps,
644
657
  ): Promise<NeonApiResponse> {
645
658
  const defaultEndpoint = props.default_endpoint ?? true;
646
659
  const projectResponse = await api.post("/projects", {
647
660
  project: {
648
- name: props.name,
661
+ name: projectName,
649
662
  region_id: props.region_id || "aws-us-east-1",
650
663
  pg_version: props.pg_version || 16,
651
664
  default_endpoint: defaultEndpoint,