alchemy 0.62.2 → 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 (611) hide show
  1. package/bin/alchemy.js +1518 -1204
  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 +7 -3
  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 +6 -4
  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/vite/vite.d.ts +1 -1
  163. package/lib/cloudflare/vite/vite.d.ts.map +1 -1
  164. package/lib/cloudflare/vite/vite.js +1 -1
  165. package/lib/cloudflare/vite/vite.js.map +1 -1
  166. package/lib/cloudflare/website.js +1 -1
  167. package/lib/cloudflare/website.js.map +1 -1
  168. package/lib/cloudflare/worker.d.ts +1 -1
  169. package/lib/cloudflare/worker.d.ts.map +1 -1
  170. package/lib/cloudflare/worker.js +12 -7
  171. package/lib/cloudflare/worker.js.map +1 -1
  172. package/lib/cloudflare/wrangler.json.d.ts +1 -1
  173. package/lib/cloudflare/wrangler.json.d.ts.map +1 -1
  174. package/lib/cloudflare/wrangler.json.js +5 -3
  175. package/lib/cloudflare/wrangler.json.js.map +1 -1
  176. package/lib/docker/container.d.ts +6 -0
  177. package/lib/docker/container.d.ts.map +1 -1
  178. package/lib/docker/container.js +5 -1
  179. package/lib/docker/container.js.map +1 -1
  180. package/lib/docker/network.d.ts +8 -2
  181. package/lib/docker/network.d.ts.map +1 -1
  182. package/lib/docker/network.js +7 -2
  183. package/lib/docker/network.js.map +1 -1
  184. package/lib/docker/volume.d.ts +8 -2
  185. package/lib/docker/volume.d.ts.map +1 -1
  186. package/lib/docker/volume.js +6 -4
  187. package/lib/docker/volume.js.map +1 -1
  188. package/lib/esbuild/bundle.d.ts +1 -1
  189. package/lib/fs/index.d.ts +0 -8
  190. package/lib/fs/index.d.ts.map +1 -1
  191. package/lib/fs/index.js +0 -8
  192. package/lib/fs/index.js.map +1 -1
  193. package/lib/github/client.d.ts +1 -1
  194. package/lib/github/client.d.ts.map +1 -1
  195. package/lib/github/client.js +2 -1
  196. package/lib/github/client.js.map +1 -1
  197. package/lib/github/repository-environment.d.ts +8 -2
  198. package/lib/github/repository-environment.d.ts.map +1 -1
  199. package/lib/github/repository-environment.js +16 -12
  200. package/lib/github/repository-environment.js.map +1 -1
  201. package/lib/neon/project.d.ts +7 -1
  202. package/lib/neon/project.d.ts.map +1 -1
  203. package/lib/neon/project.js +10 -6
  204. package/lib/neon/project.js.map +1 -1
  205. package/lib/planetscale/branch.d.ts +4 -2
  206. package/lib/planetscale/branch.d.ts.map +1 -1
  207. package/lib/planetscale/branch.js +18 -12
  208. package/lib/planetscale/branch.js.map +1 -1
  209. package/lib/planetscale/database.d.ts +8 -2
  210. package/lib/planetscale/database.d.ts.map +1 -1
  211. package/lib/planetscale/database.js +24 -16
  212. package/lib/planetscale/database.js.map +1 -1
  213. package/lib/planetscale/password.d.ts +8 -2
  214. package/lib/planetscale/password.d.ts.map +1 -1
  215. package/lib/planetscale/password.js +2 -2
  216. package/lib/planetscale/password.js.map +1 -1
  217. package/lib/resource.d.ts +0 -2
  218. package/lib/resource.d.ts.map +1 -1
  219. package/lib/resource.js +1 -9
  220. package/lib/resource.js.map +1 -1
  221. package/lib/scope.d.ts +9 -3
  222. package/lib/scope.d.ts.map +1 -1
  223. package/lib/scope.js +21 -34
  224. package/lib/scope.js.map +1 -1
  225. package/lib/sentry/client-key.d.ts +7 -1
  226. package/lib/sentry/client-key.d.ts.map +1 -1
  227. package/lib/sentry/client-key.js +45 -6
  228. package/lib/sentry/client-key.js.map +1 -1
  229. package/lib/sentry/project.d.ts +8 -2
  230. package/lib/sentry/project.d.ts.map +1 -1
  231. package/lib/sentry/project.js +35 -5
  232. package/lib/sentry/project.js.map +1 -1
  233. package/lib/sentry/team.d.ts +8 -2
  234. package/lib/sentry/team.d.ts.map +1 -1
  235. package/lib/sentry/team.js +36 -6
  236. package/lib/sentry/team.js.map +1 -1
  237. package/lib/serde.d.ts +0 -5
  238. package/lib/serde.d.ts.map +1 -1
  239. package/lib/serde.js +0 -28
  240. package/lib/serde.js.map +1 -1
  241. package/lib/state/d1-state-store.d.ts +1 -1
  242. package/lib/state/d1-state-store.d.ts.map +1 -1
  243. package/lib/state/d1-state-store.js +5 -5
  244. package/lib/state/d1-state-store.js.map +1 -1
  245. package/lib/state/sqlite-state-store.d.ts.map +1 -1
  246. package/lib/state/sqlite-state-store.js +7 -11
  247. package/lib/state/sqlite-state-store.js.map +1 -1
  248. package/lib/stripe/card.d.ts.map +1 -1
  249. package/lib/stripe/card.js +3 -2
  250. package/lib/stripe/card.js.map +1 -1
  251. package/lib/stripe/client.d.ts +2 -2
  252. package/lib/stripe/client.d.ts.map +1 -1
  253. package/lib/stripe/client.js +4 -3
  254. package/lib/stripe/client.js.map +1 -1
  255. package/lib/stripe/coupon.d.ts.map +1 -1
  256. package/lib/stripe/coupon.js +4 -3
  257. package/lib/stripe/coupon.js.map +1 -1
  258. package/lib/stripe/customer.js +2 -2
  259. package/lib/stripe/customer.js.map +1 -1
  260. package/lib/stripe/entitlements-feature.d.ts.map +1 -1
  261. package/lib/stripe/entitlements-feature.js +3 -2
  262. package/lib/stripe/entitlements-feature.js.map +1 -1
  263. package/lib/stripe/file.d.ts.map +1 -1
  264. package/lib/stripe/file.js +3 -2
  265. package/lib/stripe/file.js.map +1 -1
  266. package/lib/stripe/meter.js +2 -2
  267. package/lib/stripe/meter.js.map +1 -1
  268. package/lib/stripe/portal-configuration.d.ts.map +1 -1
  269. package/lib/stripe/portal-configuration.js +3 -2
  270. package/lib/stripe/portal-configuration.js.map +1 -1
  271. package/lib/stripe/price.d.ts.map +1 -1
  272. package/lib/stripe/price.js +3 -2
  273. package/lib/stripe/price.js.map +1 -1
  274. package/lib/stripe/product-feature.d.ts.map +1 -1
  275. package/lib/stripe/product-feature.js +3 -2
  276. package/lib/stripe/product-feature.js.map +1 -1
  277. package/lib/stripe/product.d.ts.map +1 -1
  278. package/lib/stripe/product.js +3 -2
  279. package/lib/stripe/product.js.map +1 -1
  280. package/lib/stripe/promotion-code.d.ts.map +1 -1
  281. package/lib/stripe/promotion-code.js +3 -2
  282. package/lib/stripe/promotion-code.js.map +1 -1
  283. package/lib/stripe/shipping-rate.d.ts.map +1 -1
  284. package/lib/stripe/shipping-rate.js +4 -3
  285. package/lib/stripe/shipping-rate.js.map +1 -1
  286. package/lib/stripe/tax-rate.d.ts.map +1 -1
  287. package/lib/stripe/tax-rate.js +3 -2
  288. package/lib/stripe/tax-rate.js.map +1 -1
  289. package/lib/stripe/webhook.d.ts.map +1 -1
  290. package/lib/stripe/webhook.js +4 -3
  291. package/lib/stripe/webhook.js.map +1 -1
  292. package/lib/test/vitest.d.ts.map +1 -1
  293. package/lib/test/vitest.js +1 -0
  294. package/lib/test/vitest.js.map +1 -1
  295. package/lib/upstash/redis.d.ts +8 -2
  296. package/lib/upstash/redis.d.ts.map +1 -1
  297. package/lib/upstash/redis.js +5 -4
  298. package/lib/upstash/redis.js.map +1 -1
  299. package/lib/util/ignore-matcher.d.ts.map +1 -1
  300. package/lib/util/ignore-matcher.js +3 -1
  301. package/lib/util/ignore-matcher.js.map +1 -1
  302. package/lib/util/peer.d.ts +10 -0
  303. package/lib/util/peer.d.ts.map +1 -0
  304. package/lib/util/peer.js +42 -0
  305. package/lib/util/peer.js.map +1 -0
  306. package/lib/util/telemetry/constants.d.ts.map +1 -1
  307. package/lib/util/telemetry/constants.js +2 -2
  308. package/lib/util/telemetry/constants.js.map +1 -1
  309. package/lib/vercel/project.d.ts +7 -1
  310. package/lib/vercel/project.d.ts.map +1 -1
  311. package/lib/vercel/project.js +28 -0
  312. package/lib/vercel/project.js.map +1 -1
  313. package/package.json +88 -74
  314. package/src/alchemy.ts +76 -222
  315. package/src/apply.ts +6 -19
  316. package/src/aws/account-id.ts +6 -3
  317. package/src/aws/bucket.ts +43 -32
  318. package/src/aws/ec2/security-group.ts +15 -3
  319. package/src/aws/function.ts +65 -39
  320. package/src/aws/policy-attachment.ts +10 -6
  321. package/src/aws/policy.ts +33 -15
  322. package/src/aws/queue.ts +50 -29
  323. package/src/aws/role.ts +37 -20
  324. package/src/aws/ses.ts +24 -20
  325. package/src/aws/ssm-parameter.ts +40 -20
  326. package/src/aws/table.ts +35 -17
  327. package/src/cloudflare/account-api-token.ts +9 -7
  328. package/src/cloudflare/ai-gateway.ts +37 -34
  329. package/src/cloudflare/api-schema.ts +33 -26
  330. package/src/cloudflare/api-shield.ts +15 -2
  331. package/src/cloudflare/astro/astro.ts +5 -1
  332. package/src/cloudflare/astro/plugin.ts +2 -1
  333. package/src/cloudflare/bindings.ts +2 -2
  334. package/src/cloudflare/bound.ts +1 -1
  335. package/src/cloudflare/bucket.ts +242 -3
  336. package/src/cloudflare/compatibility-date.gen.ts +1 -1
  337. package/src/cloudflare/container.ts +23 -12
  338. package/src/cloudflare/custom-domain.ts +2 -2
  339. package/src/cloudflare/d1-database.ts +11 -4
  340. package/src/cloudflare/dispatch-namespace.ts +10 -7
  341. package/src/cloudflare/hyperdrive.ts +13 -3
  342. package/src/cloudflare/kv-namespace.ts +25 -2
  343. package/src/cloudflare/miniflare/miniflare-worker-proxy.ts +3 -1
  344. package/src/cloudflare/miniflare/paths.ts +13 -0
  345. package/src/cloudflare/pipeline.ts +76 -28
  346. package/src/cloudflare/queue-consumer.ts +1 -1
  347. package/src/cloudflare/queue.ts +65 -54
  348. package/src/cloudflare/react-router/react-router.ts +28 -2
  349. package/src/cloudflare/redwood/plugin.ts +3 -2
  350. package/src/cloudflare/route.ts +1 -1
  351. package/src/cloudflare/ruleset.ts +7 -2
  352. package/src/cloudflare/secret.ts +20 -31
  353. package/src/cloudflare/secrets-store.ts +7 -3
  354. package/src/cloudflare/tunnel.ts +13 -2
  355. package/src/cloudflare/vectorize-index.ts +14 -3
  356. package/src/cloudflare/vite/plugin.ts +3 -2
  357. package/src/cloudflare/vite/vite.ts +2 -3
  358. package/src/cloudflare/website.ts +1 -1
  359. package/src/cloudflare/worker.ts +35 -23
  360. package/src/cloudflare/wrangler.json.ts +7 -4
  361. package/src/docker/container.ts +13 -1
  362. package/src/docker/network.ts +18 -3
  363. package/src/docker/volume.ts +17 -6
  364. package/src/fs/index.ts +0 -8
  365. package/src/github/client.ts +6 -2
  366. package/src/github/repository-environment.ts +27 -13
  367. package/src/neon/project.ts +20 -6
  368. package/src/planetscale/branch.ts +24 -13
  369. package/src/planetscale/database.ts +38 -17
  370. package/src/planetscale/password.ts +10 -3
  371. package/src/resource.ts +1 -10
  372. package/src/scope.ts +29 -38
  373. package/src/sentry/client-key.ts +74 -6
  374. package/src/sentry/project.ts +59 -6
  375. package/src/sentry/team.ts +55 -7
  376. package/src/serde.ts +0 -44
  377. package/src/state/d1-state-store.ts +13 -6
  378. package/src/state/sqlite-state-store.ts +16 -17
  379. package/src/stripe/card.ts +5 -2
  380. package/src/stripe/client.ts +10 -3
  381. package/src/stripe/coupon.ts +4 -3
  382. package/src/stripe/customer.ts +2 -2
  383. package/src/stripe/entitlements-feature.ts +5 -2
  384. package/src/stripe/file.ts +3 -2
  385. package/src/stripe/meter.ts +2 -2
  386. package/src/stripe/portal-configuration.ts +5 -2
  387. package/src/stripe/price.ts +3 -2
  388. package/src/stripe/product-feature.ts +5 -2
  389. package/src/stripe/product.ts +3 -2
  390. package/src/stripe/promotion-code.ts +3 -2
  391. package/src/stripe/shipping-rate.ts +4 -3
  392. package/src/stripe/tax-rate.ts +3 -2
  393. package/src/stripe/webhook.ts +4 -3
  394. package/src/test/vitest.ts +1 -0
  395. package/src/upstash/redis.ts +15 -5
  396. package/src/util/ignore-matcher.ts +3 -1
  397. package/src/util/peer.ts +53 -0
  398. package/src/util/telemetry/constants.ts +2 -2
  399. package/src/vercel/project.ts +46 -1
  400. package/templates/astro/_gitignore +2 -1
  401. package/templates/hono/README.md +19 -0
  402. package/templates/hono/_env +1 -0
  403. package/templates/hono/_env.example +1 -0
  404. package/templates/hono/_gitignore +34 -0
  405. package/templates/hono/alchemy.run.ts +22 -0
  406. package/templates/hono/package.json +18 -0
  407. package/templates/hono/src/index.ts +17 -0
  408. package/templates/hono/tsconfig.json +13 -0
  409. package/templates/hono/types/env.d.ts +16 -0
  410. package/templates/nuxt/_gitignore +2 -1
  411. package/templates/react-router/_gitignore +1 -0
  412. package/templates/react-router/vite.config.ts +5 -3
  413. package/templates/rwsdk/_gitignore +2 -3
  414. package/templates/sveltekit/_gitignore +2 -1
  415. package/templates/tanstack-start/_gitignore +2 -1
  416. package/templates/typescript/_gitignore +2 -1
  417. package/templates/vite/_gitignore +2 -1
  418. package/workers/cloudflare-state-store.js +69 -74
  419. package/workers/dofs-state-store.js +1 -1
  420. package/bin/bootstrap-s3.ts +0 -255
  421. package/lib/ai/ark.d.ts +0 -12
  422. package/lib/ai/ark.d.ts.map +0 -1
  423. package/lib/ai/ark.js +0 -87
  424. package/lib/ai/ark.js.map +0 -1
  425. package/lib/ai/astro-file.d.ts +0 -138
  426. package/lib/ai/astro-file.d.ts.map +0 -1
  427. package/lib/ai/astro-file.js +0 -158
  428. package/lib/ai/astro-file.js.map +0 -1
  429. package/lib/ai/client.d.ts +0 -51
  430. package/lib/ai/client.d.ts.map +0 -1
  431. package/lib/ai/client.js +0 -58
  432. package/lib/ai/client.js.map +0 -1
  433. package/lib/ai/css-file.d.ts +0 -132
  434. package/lib/ai/css-file.d.ts.map +0 -1
  435. package/lib/ai/css-file.js +0 -142
  436. package/lib/ai/css-file.js.map +0 -1
  437. package/lib/ai/data.d.ts +0 -152
  438. package/lib/ai/data.d.ts.map +0 -1
  439. package/lib/ai/data.js +0 -120
  440. package/lib/ai/data.js.map +0 -1
  441. package/lib/ai/document.d.ts +0 -208
  442. package/lib/ai/document.d.ts.map +0 -1
  443. package/lib/ai/document.js +0 -206
  444. package/lib/ai/document.js.map +0 -1
  445. package/lib/ai/html-file.d.ts +0 -129
  446. package/lib/ai/html-file.d.ts.map +0 -1
  447. package/lib/ai/html-file.js +0 -139
  448. package/lib/ai/html-file.js.map +0 -1
  449. package/lib/ai/index.d.ts +0 -11
  450. package/lib/ai/index.d.ts.map +0 -1
  451. package/lib/ai/index.js +0 -11
  452. package/lib/ai/index.js.map +0 -1
  453. package/lib/ai/json-file.d.ts +0 -161
  454. package/lib/ai/json-file.d.ts.map +0 -1
  455. package/lib/ai/json-file.js +0 -188
  456. package/lib/ai/json-file.js.map +0 -1
  457. package/lib/ai/typescript-file.d.ts +0 -140
  458. package/lib/ai/typescript-file.d.ts.map +0 -1
  459. package/lib/ai/typescript-file.js +0 -146
  460. package/lib/ai/typescript-file.js.map +0 -1
  461. package/lib/ai/vue-file.d.ts +0 -127
  462. package/lib/ai/vue-file.d.ts.map +0 -1
  463. package/lib/ai/vue-file.js +0 -137
  464. package/lib/ai/vue-file.js.map +0 -1
  465. package/lib/ai/yaml-file.d.ts +0 -170
  466. package/lib/ai/yaml-file.d.ts.map +0 -1
  467. package/lib/ai/yaml-file.js +0 -201
  468. package/lib/ai/yaml-file.js.map +0 -1
  469. package/lib/fs/static-astro-file.d.ts +0 -35
  470. package/lib/fs/static-astro-file.d.ts.map +0 -1
  471. package/lib/fs/static-astro-file.js +0 -40
  472. package/lib/fs/static-astro-file.js.map +0 -1
  473. package/lib/fs/static-css-file.d.ts +0 -25
  474. package/lib/fs/static-css-file.d.ts.map +0 -1
  475. package/lib/fs/static-css-file.js +0 -30
  476. package/lib/fs/static-css-file.js.map +0 -1
  477. package/lib/fs/static-html-file.d.ts +0 -32
  478. package/lib/fs/static-html-file.d.ts.map +0 -1
  479. package/lib/fs/static-html-file.js +0 -37
  480. package/lib/fs/static-html-file.js.map +0 -1
  481. package/lib/fs/static-json-file.d.ts +0 -18
  482. package/lib/fs/static-json-file.d.ts.map +0 -1
  483. package/lib/fs/static-json-file.js +0 -19
  484. package/lib/fs/static-json-file.js.map +0 -1
  485. package/lib/fs/static-text-file.d.ts +0 -13
  486. package/lib/fs/static-text-file.d.ts.map +0 -1
  487. package/lib/fs/static-text-file.js +0 -9
  488. package/lib/fs/static-text-file.js.map +0 -1
  489. package/lib/fs/static-typescript-file.d.ts +0 -20
  490. package/lib/fs/static-typescript-file.d.ts.map +0 -1
  491. package/lib/fs/static-typescript-file.js +0 -16
  492. package/lib/fs/static-typescript-file.js.map +0 -1
  493. package/lib/fs/static-vue-file.d.ts +0 -29
  494. package/lib/fs/static-vue-file.d.ts.map +0 -1
  495. package/lib/fs/static-vue-file.js +0 -34
  496. package/lib/fs/static-vue-file.js.map +0 -1
  497. package/lib/fs/static-yaml-file.d.ts +0 -23
  498. package/lib/fs/static-yaml-file.d.ts.map +0 -1
  499. package/lib/fs/static-yaml-file.js +0 -10
  500. package/lib/fs/static-yaml-file.js.map +0 -1
  501. package/lib/internal/docs/providers.d.ts +0 -34
  502. package/lib/internal/docs/providers.d.ts.map +0 -1
  503. package/lib/internal/docs/providers.js +0 -200
  504. package/lib/internal/docs/providers.js.map +0 -1
  505. package/lib/runtime/bind.d.ts +0 -25
  506. package/lib/runtime/bind.d.ts.map +0 -1
  507. package/lib/runtime/bind.js +0 -76
  508. package/lib/runtime/bind.js.map +0 -1
  509. package/lib/runtime/global.d.ts +0 -8
  510. package/lib/runtime/global.d.ts.map +0 -1
  511. package/lib/runtime/global.js +0 -3
  512. package/lib/runtime/global.js.map +0 -1
  513. package/lib/runtime/plugin.d.ts +0 -35
  514. package/lib/runtime/plugin.d.ts.map +0 -1
  515. package/lib/runtime/plugin.js +0 -134
  516. package/lib/runtime/plugin.js.map +0 -1
  517. package/lib/runtime/shims.d.ts +0 -6
  518. package/lib/runtime/shims.d.ts.map +0 -1
  519. package/lib/runtime/shims.js +0 -27
  520. package/lib/runtime/shims.js.map +0 -1
  521. package/lib/runtime/state.d.ts +0 -5
  522. package/lib/runtime/state.d.ts.map +0 -1
  523. package/lib/runtime/state.js +0 -4
  524. package/lib/runtime/state.js.map +0 -1
  525. package/lib/web/astro.d.ts +0 -148
  526. package/lib/web/astro.d.ts.map +0 -1
  527. package/lib/web/astro.js +0 -419
  528. package/lib/web/astro.js.map +0 -1
  529. package/lib/web/shadcn-component.d.ts +0 -30
  530. package/lib/web/shadcn-component.d.ts.map +0 -1
  531. package/lib/web/shadcn-component.js +0 -25
  532. package/lib/web/shadcn-component.js.map +0 -1
  533. package/lib/web/shadcn.d.ts +0 -98
  534. package/lib/web/shadcn.d.ts.map +0 -1
  535. package/lib/web/shadcn.js +0 -102
  536. package/lib/web/shadcn.js.map +0 -1
  537. package/lib/web/tailwind.d.ts +0 -65
  538. package/lib/web/tailwind.d.ts.map +0 -1
  539. package/lib/web/tailwind.js +0 -98
  540. package/lib/web/tailwind.js.map +0 -1
  541. package/lib/web/vite.d.ts +0 -96
  542. package/lib/web/vite.d.ts.map +0 -1
  543. package/lib/web/vite.js +0 -232
  544. package/lib/web/vite.js.map +0 -1
  545. package/lib/web/vitepress/config.d.ts +0 -12
  546. package/lib/web/vitepress/config.d.ts.map +0 -1
  547. package/lib/web/vitepress/config.js +0 -33
  548. package/lib/web/vitepress/config.js.map +0 -1
  549. package/lib/web/vitepress/custom-theme.d.ts +0 -174
  550. package/lib/web/vitepress/custom-theme.d.ts.map +0 -1
  551. package/lib/web/vitepress/custom-theme.js +0 -337
  552. package/lib/web/vitepress/custom-theme.js.map +0 -1
  553. package/lib/web/vitepress/dependencies.d.ts +0 -13
  554. package/lib/web/vitepress/dependencies.d.ts.map +0 -1
  555. package/lib/web/vitepress/dependencies.js +0 -37
  556. package/lib/web/vitepress/dependencies.js.map +0 -1
  557. package/lib/web/vitepress/home-page.d.ts +0 -247
  558. package/lib/web/vitepress/home-page.d.ts.map +0 -1
  559. package/lib/web/vitepress/home-page.js +0 -146
  560. package/lib/web/vitepress/home-page.js.map +0 -1
  561. package/lib/web/vitepress/index.d.ts +0 -6
  562. package/lib/web/vitepress/index.d.ts.map +0 -1
  563. package/lib/web/vitepress/index.js +0 -6
  564. package/lib/web/vitepress/index.js.map +0 -1
  565. package/lib/web/vitepress/process-front-matter-files.d.ts +0 -19
  566. package/lib/web/vitepress/process-front-matter-files.d.ts.map +0 -1
  567. package/lib/web/vitepress/process-front-matter-files.js +0 -73
  568. package/lib/web/vitepress/process-front-matter-files.js.map +0 -1
  569. package/lib/web/vitepress/vitepress.d.ts +0 -75
  570. package/lib/web/vitepress/vitepress.d.ts.map +0 -1
  571. package/lib/web/vitepress/vitepress.js +0 -254
  572. package/lib/web/vitepress/vitepress.js.map +0 -1
  573. package/src/ai/ark.ts +0 -118
  574. package/src/ai/astro-file.ts +0 -270
  575. package/src/ai/client.ts +0 -117
  576. package/src/ai/css-file.ts +0 -247
  577. package/src/ai/data.ts +0 -221
  578. package/src/ai/document.ts +0 -367
  579. package/src/ai/html-file.ts +0 -244
  580. package/src/ai/index.ts +0 -10
  581. package/src/ai/json-file.ts +0 -325
  582. package/src/ai/typescript-file.ts +0 -259
  583. package/src/ai/vue-file.ts +0 -242
  584. package/src/ai/yaml-file.ts +0 -328
  585. package/src/fs/static-astro-file.ts +0 -45
  586. package/src/fs/static-css-file.ts +0 -35
  587. package/src/fs/static-html-file.ts +0 -42
  588. package/src/fs/static-json-file.ts +0 -38
  589. package/src/fs/static-text-file.ts +0 -23
  590. package/src/fs/static-typescript-file.ts +0 -37
  591. package/src/fs/static-vue-file.ts +0 -39
  592. package/src/fs/static-yaml-file.ts +0 -33
  593. package/src/internal/docs/providers.ts +0 -286
  594. package/src/runtime/bind.ts +0 -95
  595. package/src/runtime/global.ts +0 -10
  596. package/src/runtime/plugin.ts +0 -163
  597. package/src/runtime/shims.js +0 -34
  598. package/src/runtime/state.ts +0 -9
  599. package/src/web/astro.ts +0 -643
  600. package/src/web/shadcn-component.ts +0 -72
  601. package/src/web/shadcn.ts +0 -221
  602. package/src/web/tailwind.ts +0 -167
  603. package/src/web/vite.ts +0 -407
  604. package/src/web/vitepress/config.ts +0 -50
  605. package/src/web/vitepress/custom-theme.ts +0 -514
  606. package/src/web/vitepress/dependencies.ts +0 -69
  607. package/src/web/vitepress/home-page.ts +0 -378
  608. package/src/web/vitepress/index.ts +0 -5
  609. package/src/web/vitepress/process-front-matter-files.ts +0 -107
  610. package/src/web/vitepress/vitepress.ts +0 -372
  611. package/templates/sveltekit/bun.lock +0 -1099
@@ -49,7 +49,7 @@ export interface TunnelProps extends CloudflareApiOptions {
49
49
  * Note: Tunnel names are immutable and cannot be changed after creation.
50
50
  * When updating a tunnel, any name change will be ignored.
51
51
  *
52
- * @default id
52
+ * @default ${app}-${stage}-${id}
53
53
  */
54
54
  name?: string;
55
55
 
@@ -274,6 +274,11 @@ export function isTunnel(resource: Resource): resource is Tunnel {
274
274
  export interface Tunnel
275
275
  extends Resource<"cloudflare::Tunnel">,
276
276
  Omit<TunnelProps, "delete" | "tunnelSecret"> {
277
+ /**
278
+ * The name of the tunnel
279
+ */
280
+ name: string;
281
+
277
282
  /**
278
283
  * The ID of the tunnel
279
284
  */
@@ -488,7 +493,13 @@ export const Tunnel = Resource(
488
493
  // Create Cloudflare API client with automatic account discovery
489
494
  const api = await createCloudflareApi(props);
490
495
 
491
- const name = props.name ?? id;
496
+ const name =
497
+ props.name ?? this.output?.name ?? this.scope.createPhysicalName(id);
498
+
499
+ if (this.phase === "update" && this.output.name !== name) {
500
+ console.log("replacing tunnel", this.output.name, name);
501
+ this.replace(true);
502
+ }
492
503
 
493
504
  if (this.phase === "delete") {
494
505
  // For delete operations, check if the tunnel ID exists in the output
@@ -14,8 +14,10 @@ import {
14
14
  export interface VectorizeIndexProps extends CloudflareApiOptions {
15
15
  /**
16
16
  * Name of the index
17
+ *
18
+ * @default ${app}-${stage}-${id}
17
19
  */
18
- name: string;
20
+ name?: string;
19
21
 
20
22
  /**
21
23
  * Optional description of the index
@@ -68,6 +70,11 @@ export interface VectorizeIndex
68
70
  */
69
71
  id: string;
70
72
 
73
+ /**
74
+ * Name of the Vectorize Index.
75
+ */
76
+ name: string;
77
+
71
78
  /**
72
79
  * Time at which the index was created
73
80
  */
@@ -121,7 +128,8 @@ export const VectorizeIndex = Resource(
121
128
  props: VectorizeIndexProps,
122
129
  ): Promise<VectorizeIndex> {
123
130
  const api = await createCloudflareApi(props);
124
- const indexName = props.name || id;
131
+ const indexName =
132
+ props.name ?? this.output?.name ?? this.scope.createPhysicalName(id);
125
133
 
126
134
  if (this.phase === "delete") {
127
135
  logger.log("Deleting Vectorize index:", indexName);
@@ -145,7 +153,7 @@ export const VectorizeIndex = Resource(
145
153
  } catch (error) {
146
154
  // Check if this is a "index already exists" error and adopt is enabled
147
155
  if (
148
- props.adopt &&
156
+ (props.adopt ?? this.scope.adopt) &&
149
157
  error instanceof CloudflareApiError &&
150
158
  error.message.includes("vectorize.index.duplicate_name")
151
159
  ) {
@@ -158,6 +166,9 @@ export const VectorizeIndex = Resource(
158
166
  }
159
167
  }
160
168
  } else {
169
+ if (this.output.name !== indexName) {
170
+ return this.replace();
171
+ }
161
172
  if (props.delete !== this.props.delete) {
162
173
  // Only allow changing the delete property
163
174
  if (!this.quiet) {
@@ -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;
@@ -4,8 +4,7 @@ import type { Bindings } from "../bindings.ts";
4
4
  import { Website, type WebsiteProps } from "../website.ts";
5
5
  import type { Worker } from "../worker.ts";
6
6
 
7
- export interface ViteProps<B extends Bindings>
8
- extends Omit<WebsiteProps<B>, "spa"> {}
7
+ export interface ViteProps<B extends Bindings> extends WebsiteProps<B> {}
9
8
 
10
9
  export type Vite<B extends Bindings> = B extends { ASSETS: any }
11
10
  ? never
@@ -17,8 +16,8 @@ export async function Vite<B extends Bindings>(
17
16
  ): Promise<Vite<B>> {
18
17
  const runner = await getPackageManagerRunner();
19
18
  return await Website(id, {
20
- ...props,
21
19
  spa: true,
20
+ ...props,
22
21
  assets:
23
22
  typeof props.assets === "string"
24
23
  ? { directory: props.assets }
@@ -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,
@@ -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,