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
@@ -1,25 +1,14 @@
1
- import {
2
- AddPermissionCommand,
1
+ import type {
3
2
  Architecture,
4
- CreateFunctionCommand,
5
- CreateFunctionUrlConfigCommand,
6
- DeleteFunctionCommand,
7
- DeleteFunctionUrlConfigCommand,
8
- GetFunctionCommand,
9
- GetFunctionConfigurationCommand,
10
- GetFunctionUrlConfigCommand,
11
3
  LambdaClient,
12
- ResourceNotFoundException,
13
4
  Runtime,
14
- UpdateFunctionCodeCommand,
15
- UpdateFunctionConfigurationCommand,
16
- UpdateFunctionUrlConfigCommand,
17
5
  } from "@aws-sdk/client-lambda";
18
6
  import type { Context } from "../context.ts";
19
7
  import type { Bundle } from "../esbuild/bundle.ts";
20
8
  import { Resource } from "../resource.ts";
21
9
  import { ignore } from "../util/ignore.ts";
22
10
  import { logger } from "../util/logger.ts";
11
+ import { importPeer } from "../util/peer.ts";
23
12
  import { retry } from "./retry.ts";
24
13
 
25
14
  /**
@@ -28,8 +17,10 @@ import { retry } from "./retry.ts";
28
17
  export interface FunctionProps {
29
18
  /**
30
19
  * Name of the Lambda function
20
+ *
21
+ * @default ${app}-${stage}-${id}
31
22
  */
32
- functionName: string;
23
+ functionName?: string;
33
24
 
34
25
  /**
35
26
  * Bundle for the function
@@ -151,6 +142,11 @@ export interface Function extends Resource<"lambda::Function">, FunctionProps {
151
142
  */
152
143
  arn: string;
153
144
 
145
+ /**
146
+ * Name of the Function
147
+ */
148
+ functionName: string;
149
+
154
150
  /**
155
151
  * Timestamp of the last function modification
156
152
  */
@@ -309,10 +305,36 @@ export interface Function extends Resource<"lambda::Function">, FunctionProps {
309
305
  */
310
306
  export const Function = Resource(
311
307
  "lambda::Function",
312
- async function (this: Context<Function>, _id: string, props: FunctionProps) {
308
+ async function (this: Context<Function>, id: string, props: FunctionProps) {
309
+ const {
310
+ AddPermissionCommand,
311
+ Architecture,
312
+ CreateFunctionCommand,
313
+ CreateFunctionUrlConfigCommand,
314
+ DeleteFunctionCommand,
315
+ DeleteFunctionUrlConfigCommand,
316
+ GetFunctionCommand,
317
+ GetFunctionConfigurationCommand,
318
+ GetFunctionUrlConfigCommand,
319
+ LambdaClient,
320
+ ResourceNotFoundException,
321
+ Runtime,
322
+ UpdateFunctionCodeCommand,
323
+ UpdateFunctionConfigurationCommand,
324
+ UpdateFunctionUrlConfigCommand,
325
+ } = await importPeer(import("@aws-sdk/client-lambda"), "lambda::Function");
313
326
  const client = new LambdaClient({});
314
327
  const region = await resolveRegion(client);
315
328
 
329
+ const functionName =
330
+ props.functionName ??
331
+ this.output?.functionName ??
332
+ this.scope.createPhysicalName(id);
333
+
334
+ if (this.phase === "update" && this.output.functionName !== functionName) {
335
+ this.replace();
336
+ }
337
+
316
338
  if (this.phase === "delete") {
317
339
  // Delete function URL if it exists
318
340
  if (this.output?.url) {
@@ -320,7 +342,7 @@ export const Function = Resource(
320
342
  await retry(() =>
321
343
  client.send(
322
344
  new DeleteFunctionUrlConfigCommand({
323
- FunctionName: props.functionName,
345
+ FunctionName: functionName,
324
346
  }),
325
347
  ),
326
348
  );
@@ -335,7 +357,7 @@ export const Function = Resource(
335
357
  retry(() =>
336
358
  client.send(
337
359
  new DeleteFunctionCommand({
338
- FunctionName: props.functionName,
360
+ FunctionName: functionName,
339
361
  }),
340
362
  ),
341
363
  ),
@@ -352,33 +374,33 @@ export const Function = Resource(
352
374
  await retry(() =>
353
375
  client.send(
354
376
  new GetFunctionCommand({
355
- FunctionName: props.functionName,
377
+ FunctionName: functionName,
356
378
  }),
357
379
  ),
358
380
  );
359
381
 
360
382
  if (this.phase === "update") {
361
383
  // Wait for function to stabilize
362
- await waitForFunctionStabilization(client, props.functionName);
384
+ await waitForFunctionStabilization(client, functionName);
363
385
 
364
386
  // Update function code
365
387
  await retry(() =>
366
388
  client.send(
367
389
  new UpdateFunctionCodeCommand({
368
- FunctionName: props.functionName,
390
+ FunctionName: functionName,
369
391
  ZipFile: code,
370
392
  }),
371
393
  ),
372
394
  );
373
395
 
374
396
  // Wait for code update to stabilize
375
- await waitForFunctionStabilization(client, props.functionName);
397
+ await waitForFunctionStabilization(client, functionName);
376
398
 
377
399
  // Update function configuration
378
400
  await retry(() =>
379
401
  client.send(
380
402
  new UpdateFunctionConfigurationCommand({
381
- FunctionName: props.functionName,
403
+ FunctionName: functionName,
382
404
  Handler: props.handler,
383
405
  Runtime: props.runtime,
384
406
  Role: props.roleArn,
@@ -394,7 +416,7 @@ export const Function = Resource(
394
416
  );
395
417
 
396
418
  // Wait for configuration update to stabilize
397
- await waitForFunctionStabilization(client, props.functionName);
419
+ await waitForFunctionStabilization(client, functionName);
398
420
 
399
421
  // Handle URL configuration
400
422
  if (props.url) {
@@ -403,7 +425,7 @@ export const Function = Resource(
403
425
  const urlConfig = await retry(() =>
404
426
  client.send(
405
427
  new GetFunctionUrlConfigCommand({
406
- FunctionName: props.functionName,
428
+ FunctionName: functionName,
407
429
  }),
408
430
  ),
409
431
  );
@@ -413,7 +435,7 @@ export const Function = Resource(
413
435
  const updateResult = await retry(() =>
414
436
  client.send(
415
437
  new UpdateFunctionUrlConfigCommand({
416
- FunctionName: props.functionName,
438
+ FunctionName: functionName,
417
439
  AuthType: props.url!.authType || "NONE",
418
440
  InvokeMode: props.url!.invokeMode || "BUFFERED",
419
441
  Cors: props.url!.cors
@@ -437,7 +459,7 @@ export const Function = Resource(
437
459
  await retry(() =>
438
460
  client.send(
439
461
  new AddPermissionCommand({
440
- FunctionName: props.functionName,
462
+ FunctionName: functionName,
441
463
  StatementId: "FunctionURLAllowPublicAccess",
442
464
  Action: "lambda:InvokeFunctionUrl",
443
465
  Principal: "*",
@@ -456,7 +478,7 @@ export const Function = Resource(
456
478
  const createResult = await retry(() =>
457
479
  client.send(
458
480
  new CreateFunctionUrlConfigCommand({
459
- FunctionName: props.functionName,
481
+ FunctionName: functionName,
460
482
  AuthType: props.url!.authType || "NONE",
461
483
  InvokeMode: props.url!.invokeMode || "BUFFERED",
462
484
  Cors: props.url!.cors
@@ -480,7 +502,7 @@ export const Function = Resource(
480
502
  await retry(() =>
481
503
  client.send(
482
504
  new AddPermissionCommand({
483
- FunctionName: props.functionName,
505
+ FunctionName: functionName,
484
506
  StatementId: "FunctionURLAllowPublicAccess",
485
507
  Action: "lambda:InvokeFunctionUrl",
486
508
  Principal: "*",
@@ -501,7 +523,7 @@ export const Function = Resource(
501
523
  const createResult = await retry(() =>
502
524
  client.send(
503
525
  new CreateFunctionUrlConfigCommand({
504
- FunctionName: props.functionName,
526
+ FunctionName: functionName,
505
527
  AuthType: props.url!.authType || "NONE",
506
528
  InvokeMode: props.url!.invokeMode || "BUFFERED",
507
529
  Cors: props.url!.cors
@@ -525,7 +547,7 @@ export const Function = Resource(
525
547
  await retry(() =>
526
548
  client.send(
527
549
  new AddPermissionCommand({
528
- FunctionName: props.functionName,
550
+ FunctionName: functionName,
529
551
  StatementId: "FunctionURLAllowPublicAccess",
530
552
  Action: "lambda:InvokeFunctionUrl",
531
553
  Principal: "*",
@@ -549,7 +571,7 @@ export const Function = Resource(
549
571
  await retry(() =>
550
572
  client.send(
551
573
  new DeleteFunctionUrlConfigCommand({
552
- FunctionName: props.functionName,
574
+ FunctionName: functionName,
553
575
  }),
554
576
  ),
555
577
  );
@@ -572,7 +594,7 @@ export const Function = Resource(
572
594
  await retry(() =>
573
595
  client.send(
574
596
  new CreateFunctionCommand({
575
- FunctionName: props.functionName,
597
+ FunctionName: functionName,
576
598
  Code: { ZipFile: code },
577
599
  Handler: props.handler || "index.handler",
578
600
  Runtime: props.runtime || Runtime.nodejs20x,
@@ -617,7 +639,7 @@ export const Function = Resource(
617
639
  const config = await retry(() =>
618
640
  client.send(
619
641
  new GetFunctionConfigurationCommand({
620
- FunctionName: props.functionName,
642
+ FunctionName: functionName,
621
643
  }),
622
644
  ),
623
645
  );
@@ -632,7 +654,7 @@ export const Function = Resource(
632
654
  await new Promise((resolve) => setTimeout(resolve, 2000));
633
655
 
634
656
  // Verify function is fully stable and role is usable
635
- await waitForFunctionStabilization(client, props.functionName);
657
+ await waitForFunctionStabilization(client, functionName);
636
658
 
637
659
  // Create URL configuration if needed
638
660
  if (props.url) {
@@ -640,7 +662,7 @@ export const Function = Resource(
640
662
  const createResult = await retry(() =>
641
663
  client.send(
642
664
  new CreateFunctionUrlConfigCommand({
643
- FunctionName: props.functionName,
665
+ FunctionName: functionName,
644
666
  AuthType: props.url!.authType || "NONE",
645
667
  InvokeMode: props.url!.invokeMode || "BUFFERED",
646
668
  Cors: props.url!.cors
@@ -664,7 +686,7 @@ export const Function = Resource(
664
686
  await retry(() =>
665
687
  client.send(
666
688
  new AddPermissionCommand({
667
- FunctionName: props.functionName,
689
+ FunctionName: functionName,
668
690
  StatementId: "FunctionURLAllowPublicAccess",
669
691
  Action: "lambda:InvokeFunctionUrl",
670
692
  Principal: "*",
@@ -692,14 +714,14 @@ export const Function = Resource(
692
714
  retry(() =>
693
715
  client.send(
694
716
  new GetFunctionCommand({
695
- FunctionName: props.functionName,
717
+ FunctionName: functionName,
696
718
  }),
697
719
  ),
698
720
  ),
699
721
  retry(() =>
700
722
  client.send(
701
723
  new GetFunctionConfigurationCommand({
702
- FunctionName: props.functionName,
724
+ FunctionName: functionName,
703
725
  }),
704
726
  ),
705
727
  ),
@@ -711,7 +733,7 @@ export const Function = Resource(
711
733
  const urlConfig = await retry(() =>
712
734
  client.send(
713
735
  new GetFunctionUrlConfigCommand({
714
- FunctionName: props.functionName,
736
+ FunctionName: functionName,
715
737
  }),
716
738
  ),
717
739
  );
@@ -726,6 +748,7 @@ export const Function = Resource(
726
748
  return this({
727
749
  ...props,
728
750
  arn: config.FunctionArn!,
751
+ functionName,
729
752
  lastModified: config.LastModified!,
730
753
  version: config.Version!,
731
754
  qualifiedArn: `${config.FunctionArn}:${config.Version}`,
@@ -755,6 +778,9 @@ async function waitForFunctionStabilization(
755
778
  client: LambdaClient,
756
779
  functionName: string,
757
780
  ) {
781
+ const { GetFunctionConfigurationCommand } = await import(
782
+ "@aws-sdk/client-lambda"
783
+ );
758
784
  while (true) {
759
785
  const config = await retry(() =>
760
786
  client.send(
@@ -1,12 +1,7 @@
1
- import {
2
- AttachRolePolicyCommand,
3
- DetachRolePolicyCommand,
4
- IAMClient,
5
- NoSuchEntityException,
6
- } from "@aws-sdk/client-iam";
7
1
  import type { Context } from "../context.ts";
8
2
  import { Resource } from "../resource.ts";
9
3
  import { ignore } from "../util/ignore.ts";
4
+ import { importPeer } from "../util/peer.ts";
10
5
  import { retry } from "./retry.ts";
11
6
 
12
7
  /**
@@ -69,6 +64,15 @@ export const PolicyAttachment = Resource(
69
64
  _id: string,
70
65
  props: PolicyAttachmentProps,
71
66
  ) {
67
+ const {
68
+ AttachRolePolicyCommand,
69
+ DetachRolePolicyCommand,
70
+ IAMClient,
71
+ NoSuchEntityException,
72
+ } = await importPeer(
73
+ import("@aws-sdk/client-iam"),
74
+ "iam::PolicyAttachment",
75
+ );
72
76
  const client = new IAMClient({});
73
77
 
74
78
  if (this.phase === "delete") {
package/src/aws/policy.ts CHANGED
@@ -1,16 +1,6 @@
1
- import {
2
- CreatePolicyCommand,
3
- CreatePolicyVersionCommand,
4
- DeletePolicyCommand,
5
- DeletePolicyVersionCommand,
6
- GetPolicyCommand,
7
- GetPolicyVersionCommand,
8
- IAMClient,
9
- ListPolicyVersionsCommand,
10
- NoSuchEntityException,
11
- } from "@aws-sdk/client-iam";
12
1
  import type { Context } from "../context.ts";
13
2
  import { Resource } from "../resource.ts";
3
+ import { importPeer } from "../util/peer.ts";
14
4
  import { retry } from "./retry.ts";
15
5
 
16
6
  /**
@@ -89,8 +79,10 @@ export interface PolicyDocument {
89
79
  export interface PolicyProps {
90
80
  /**
91
81
  * Name of the policy
82
+ *
83
+ * @default ${app}-${stage}-${id}
92
84
  */
93
- policyName: string;
85
+ policyName?: string;
94
86
 
95
87
  /**
96
88
  * Policy document defining the permissions
@@ -122,6 +114,11 @@ export interface Policy extends Resource<"iam::Policy">, PolicyProps {
122
114
  */
123
115
  arn: string;
124
116
 
117
+ /**
118
+ * Name of the Policy.
119
+ */
120
+ policyName: string;
121
+
125
122
  /**
126
123
  * ID of the default policy version
127
124
  */
@@ -230,11 +227,30 @@ export const Policy = Resource(
230
227
  "iam::Policy",
231
228
  async function (
232
229
  this: Context<Policy>,
233
- _id: string,
230
+ id: string,
234
231
  props: PolicyProps,
235
232
  ): Promise<Policy> {
233
+ const {
234
+ CreatePolicyCommand,
235
+ CreatePolicyVersionCommand,
236
+ DeletePolicyCommand,
237
+ DeletePolicyVersionCommand,
238
+ GetPolicyCommand,
239
+ GetPolicyVersionCommand,
240
+ IAMClient,
241
+ ListPolicyVersionsCommand,
242
+ NoSuchEntityException,
243
+ } = await importPeer(import("@aws-sdk/client-iam"), "iam::Policy");
236
244
  const client = new IAMClient({});
237
- const policyArn = `arn:aws:iam::${process.env.AWS_ACCOUNT_ID}:policy${props.path || "/"}${props.policyName}`;
245
+ const policyName =
246
+ props.policyName ??
247
+ this.output?.policyName ??
248
+ this.scope.createPhysicalName(id);
249
+ const policyArn = `arn:aws:iam::${process.env.AWS_ACCOUNT_ID}:policy${props.path || "/"}${policyName}`;
250
+
251
+ if (this.phase === "update" && this.output.policyName !== policyName) {
252
+ this.replace();
253
+ }
238
254
 
239
255
  if (this.phase === "delete") {
240
256
  try {
@@ -351,6 +367,7 @@ export const Policy = Resource(
351
367
  return this({
352
368
  ...props,
353
369
  arn: policy.Policy!.Arn!,
370
+ policyName,
354
371
  defaultVersionId: policy.Policy!.DefaultVersionId!,
355
372
  attachmentCount: policy.Policy!.AttachmentCount!,
356
373
  createDate: policy.Policy!.CreateDate!,
@@ -363,7 +380,7 @@ export const Policy = Resource(
363
380
  const newPolicy = await retry(() =>
364
381
  client.send(
365
382
  new CreatePolicyCommand({
366
- PolicyName: props.policyName,
383
+ PolicyName: policyName,
367
384
  PolicyDocument: JSON.stringify(props.document),
368
385
  Description: props.description,
369
386
  Path: props.path,
@@ -380,6 +397,7 @@ export const Policy = Resource(
380
397
  return this({
381
398
  ...props,
382
399
  arn: newPolicy.Policy!.Arn!,
400
+ policyName,
383
401
  defaultVersionId: newPolicy.Policy!.DefaultVersionId!,
384
402
  attachmentCount: newPolicy.Policy!.AttachmentCount!,
385
403
  createDate: newPolicy.Policy!.CreateDate!,
package/src/aws/queue.ts CHANGED
@@ -1,15 +1,7 @@
1
- import {
2
- CreateQueueCommand,
3
- DeleteQueueCommand,
4
- GetQueueAttributesCommand,
5
- GetQueueUrlCommand,
6
- QueueDeletedRecently,
7
- QueueDoesNotExist,
8
- SQSClient,
9
- } from "@aws-sdk/client-sqs";
10
1
  import type { Context } from "../context.ts";
11
2
  import { Resource } from "../resource.ts";
12
3
  import { logger } from "../util/logger.ts";
4
+ import { importPeer } from "../util/peer.ts";
13
5
  import { retry } from "./retry.ts";
14
6
 
15
7
  /**
@@ -19,8 +11,10 @@ export interface QueueProps {
19
11
  /**
20
12
  * Name of the queue
21
13
  * For FIFO queues, the name must end with the .fifo suffix
14
+ *
15
+ * @default ${app}-${stage}-${id}?.fifo
22
16
  */
23
- queueName: string;
17
+ queueName?: string;
24
18
 
25
19
  /**
26
20
  * Whether this is a FIFO queue.
@@ -91,6 +85,11 @@ export interface Queue extends Resource<"sqs::Queue">, QueueProps {
91
85
  */
92
86
  arn: string;
93
87
 
88
+ /**
89
+ * Name of the Queue
90
+ */
91
+ queueName: string;
92
+
94
93
  /**
95
94
  * URL of the queue
96
95
  */
@@ -140,18 +139,34 @@ export const Queue = Resource(
140
139
  "sqs::Queue",
141
140
  async function (
142
141
  this: Context<Queue>,
143
- _id: string,
142
+ id: string,
144
143
  props: QueueProps,
145
144
  ): Promise<Queue> {
145
+ const {
146
+ CreateQueueCommand,
147
+ DeleteQueueCommand,
148
+ GetQueueAttributesCommand,
149
+ GetQueueUrlCommand,
150
+ QueueDeletedRecently,
151
+ QueueDoesNotExist,
152
+ SQSClient,
153
+ } = await importPeer(import("@aws-sdk/client-sqs"), "sqs::Queue");
146
154
  const client = new SQSClient({});
147
155
  // Don't automatically add .fifo suffix - user must include it in queueName
148
- const queueName = props.queueName;
156
+ const queueName =
157
+ props.queueName ??
158
+ this.output?.queueName ??
159
+ `${this.scope.createPhysicalName(id)}${props.fifo ? ".fifo" : ""}`;
149
160
 
150
- // Validate that FIFO queues have .fifo suffix
151
161
  if (props.fifo && !queueName.endsWith(".fifo")) {
162
+ // Validate that FIFO queues have .fifo suffix
152
163
  throw new Error("FIFO queue names must end with .fifo suffix");
153
164
  }
154
165
 
166
+ if (this.phase === "update" && this.output.queueName !== queueName) {
167
+ this.replace();
168
+ }
169
+
155
170
  if (this.phase === "delete") {
156
171
  try {
157
172
  // Get queue URL first
@@ -271,6 +286,7 @@ export const Queue = Resource(
271
286
  return this({
272
287
  ...props,
273
288
  arn: attributesResponse.Attributes!.QueueArn!,
289
+ queueName,
274
290
  url: createResponse.QueueUrl!,
275
291
  });
276
292
  } catch (error: any) {
@@ -311,6 +327,7 @@ export const Queue = Resource(
311
327
  return this({
312
328
  ...props,
313
329
  arn: attributesResponse.Attributes!.QueueArn!,
330
+ queueName,
314
331
  url: createResponse.QueueUrl!,
315
332
  });
316
333
  } catch (retryError: any) {
@@ -326,21 +343,25 @@ export const Queue = Resource(
326
343
  }
327
344
  throw error;
328
345
  }
329
- },
330
- );
331
346
 
332
- function isQueueDoesNotExist(error: any): error is QueueDoesNotExist {
333
- return (
334
- error.name === "QueueDoesNotExist" ||
335
- error.Code === "AWS.SimpleQueueService.NonExistentQueue" ||
336
- error instanceof QueueDoesNotExist
337
- );
338
- }
347
+ function isQueueDoesNotExist(
348
+ error: any,
349
+ ): error is typeof QueueDoesNotExist {
350
+ return (
351
+ error.name === "QueueDoesNotExist" ||
352
+ error.Code === "AWS.SimpleQueueService.NonExistentQueue" ||
353
+ error instanceof QueueDoesNotExist
354
+ );
355
+ }
339
356
 
340
- function isQueueDeletedRecently(error: any): error is QueueDeletedRecently {
341
- return (
342
- error instanceof QueueDeletedRecently ||
343
- error.Code === "AWS.SimpleQueueService.QueueDeletedRecently" ||
344
- error.name === "QueueDeletedRecently"
345
- );
346
- }
357
+ function isQueueDeletedRecently(
358
+ error: any,
359
+ ): error is typeof QueueDeletedRecently {
360
+ return (
361
+ error instanceof QueueDeletedRecently ||
362
+ error.Code === "AWS.SimpleQueueService.QueueDeletedRecently" ||
363
+ error.name === "QueueDeletedRecently"
364
+ );
365
+ }
366
+ },
367
+ );
package/src/aws/role.ts CHANGED
@@ -1,24 +1,9 @@
1
- import {
2
- AttachRolePolicyCommand,
3
- CreateRoleCommand,
4
- DeleteRoleCommand,
5
- DeleteRolePolicyCommand,
6
- DetachRolePolicyCommand,
7
- EntityAlreadyExistsException,
8
- GetRoleCommand,
9
- IAMClient,
10
- ListAttachedRolePoliciesCommand,
11
- NoSuchEntityException,
12
- PutRolePolicyCommand,
13
- type Tag,
14
- TagRoleCommand,
15
- UpdateAssumeRolePolicyCommand,
16
- UpdateRoleCommand,
17
- } from "@aws-sdk/client-iam";
1
+ import type { Tag } from "@aws-sdk/client-iam";
18
2
  import type { Context } from "../context.ts";
19
3
  import { Resource } from "../resource.ts";
20
4
  import { ignore } from "../util/ignore.ts";
21
5
  import { logger } from "../util/logger.ts";
6
+ import { importPeer } from "../util/peer.ts";
22
7
  import type { PolicyDocument } from "./policy.ts";
23
8
  import { retry } from "./retry.ts";
24
9
 
@@ -28,8 +13,10 @@ import { retry } from "./retry.ts";
28
13
  export interface RoleProps {
29
14
  /**
30
15
  * Name of the IAM role
16
+ *
17
+ * @default ${app}-${stage}-${id}
31
18
  */
32
- roleName: string;
19
+ roleName?: string;
33
20
 
34
21
  /**
35
22
  * Policy that defines which entities can assume this role
@@ -86,6 +73,11 @@ export interface Role extends Resource<"iam::Role">, RoleProps {
86
73
  */
87
74
  arn: string;
88
75
 
76
+ /**
77
+ * Name of the Role.
78
+ */
79
+ roleName: string;
80
+
89
81
  /**
90
82
  * Unique identifier for the role
91
83
  */
@@ -220,11 +212,36 @@ export const Role = Resource(
220
212
  "iam::Role",
221
213
  async function (
222
214
  this: Context<Role>,
223
- _id: string,
215
+ id: string,
224
216
  props: RoleProps,
225
217
  ): Promise<Role> {
218
+ const {
219
+ AttachRolePolicyCommand,
220
+ CreateRoleCommand,
221
+ DeleteRoleCommand,
222
+ DeleteRolePolicyCommand,
223
+ DetachRolePolicyCommand,
224
+ EntityAlreadyExistsException,
225
+ GetRoleCommand,
226
+ IAMClient,
227
+ ListAttachedRolePoliciesCommand,
228
+ NoSuchEntityException,
229
+ PutRolePolicyCommand,
230
+ TagRoleCommand,
231
+ UpdateAssumeRolePolicyCommand,
232
+ UpdateRoleCommand,
233
+ } = await importPeer(import("@aws-sdk/client-iam"), "iam::Role");
226
234
  const client = new IAMClient({});
227
235
 
236
+ const roleName =
237
+ props.roleName ??
238
+ this.output?.roleName ??
239
+ this.scope.createPhysicalName(id);
240
+
241
+ if (this.phase === "update" && this.output.roleName !== roleName) {
242
+ this.replace();
243
+ }
244
+
228
245
  if (this.phase === "delete") {
229
246
  try {
230
247
  // Delete any inline policies first
@@ -523,7 +540,7 @@ export const Role = Resource(
523
540
  arn: role.Role.Arn!,
524
541
  uniqueId: role.Role.RoleId!,
525
542
  roleId: role.Role.RoleId!,
526
- roleName: role.Role.RoleName ?? props.roleName,
543
+ roleName,
527
544
  createDate: role.Role.CreateDate!,
528
545
  });
529
546
  },