alchemy 0.62.3 → 0.63.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (594) hide show
  1. package/bin/alchemy.js +1516 -1202
  2. package/bin/commands/deploy.ts +2 -0
  3. package/bin/commands/dev.ts +2 -0
  4. package/bin/services/execute-alchemy.ts +11 -0
  5. package/bin/services/template-manager.ts +2 -0
  6. package/bin/types.ts +2 -1
  7. package/lib/alchemy.d.ts +6 -22
  8. package/lib/alchemy.d.ts.map +1 -1
  9. package/lib/alchemy.js +65 -169
  10. package/lib/alchemy.js.map +1 -1
  11. package/lib/apply.d.ts +0 -2
  12. package/lib/apply.d.ts.map +1 -1
  13. package/lib/apply.js +2 -16
  14. package/lib/apply.js.map +1 -1
  15. package/lib/aws/account-id.d.ts.map +1 -1
  16. package/lib/aws/account-id.js +3 -2
  17. package/lib/aws/account-id.js.map +1 -1
  18. package/lib/aws/bucket.d.ts +8 -2
  19. package/lib/aws/bucket.d.ts.map +1 -1
  20. package/lib/aws/bucket.js +21 -14
  21. package/lib/aws/bucket.js.map +1 -1
  22. package/lib/aws/ec2/security-group.d.ts +8 -2
  23. package/lib/aws/ec2/security-group.d.ts.map +1 -1
  24. package/lib/aws/ec2/security-group.js +7 -2
  25. package/lib/aws/ec2/security-group.js.map +1 -1
  26. package/lib/aws/function.d.ts +9 -3
  27. package/lib/aws/function.d.ts.map +1 -1
  28. package/lib/aws/function.js +35 -26
  29. package/lib/aws/function.js.map +1 -1
  30. package/lib/aws/policy-attachment.d.ts.map +1 -1
  31. package/lib/aws/policy-attachment.js +2 -1
  32. package/lib/aws/policy-attachment.js.map +1 -1
  33. package/lib/aws/policy.d.ts +8 -2
  34. package/lib/aws/policy.d.ts.map +1 -1
  35. package/lib/aws/policy.js +13 -4
  36. package/lib/aws/policy.js.map +1 -1
  37. package/lib/aws/queue.d.ts +8 -2
  38. package/lib/aws/queue.d.ts.map +1 -1
  39. package/lib/aws/queue.js +22 -14
  40. package/lib/aws/queue.js.map +1 -1
  41. package/lib/aws/role.d.ts +8 -2
  42. package/lib/aws/role.d.ts.map +1 -1
  43. package/lib/aws/role.js +10 -3
  44. package/lib/aws/role.js.map +1 -1
  45. package/lib/aws/ses.d.ts +1 -1
  46. package/lib/aws/ses.d.ts.map +1 -1
  47. package/lib/aws/ses.js +2 -1
  48. package/lib/aws/ses.js.map +1 -1
  49. package/lib/aws/ssm-parameter.d.ts +8 -2
  50. package/lib/aws/ssm-parameter.d.ts.map +1 -1
  51. package/lib/aws/ssm-parameter.js +15 -10
  52. package/lib/aws/ssm-parameter.js.map +1 -1
  53. package/lib/aws/table.d.ts +8 -2
  54. package/lib/aws/table.d.ts.map +1 -1
  55. package/lib/aws/table.js +17 -9
  56. package/lib/aws/table.js.map +1 -1
  57. package/lib/cloudflare/account-api-token.d.ts +2 -2
  58. package/lib/cloudflare/account-api-token.d.ts.map +1 -1
  59. package/lib/cloudflare/account-api-token.js +7 -6
  60. package/lib/cloudflare/account-api-token.js.map +1 -1
  61. package/lib/cloudflare/ai-gateway.d.ts +9 -4
  62. package/lib/cloudflare/ai-gateway.d.ts.map +1 -1
  63. package/lib/cloudflare/ai-gateway.js +20 -24
  64. package/lib/cloudflare/ai-gateway.js.map +1 -1
  65. package/lib/cloudflare/api-schema.d.ts +2 -2
  66. package/lib/cloudflare/api-schema.d.ts.map +1 -1
  67. package/lib/cloudflare/api-schema.js +6 -2
  68. package/lib/cloudflare/api-schema.js.map +1 -1
  69. package/lib/cloudflare/api-shield.d.ts +5 -1
  70. package/lib/cloudflare/api-shield.d.ts.map +1 -1
  71. package/lib/cloudflare/api-shield.js +6 -1
  72. package/lib/cloudflare/api-shield.js.map +1 -1
  73. package/lib/cloudflare/assets.d.ts +1 -1
  74. package/lib/cloudflare/assets.d.ts.map +1 -1
  75. package/lib/cloudflare/astro/astro.d.ts.map +1 -1
  76. package/lib/cloudflare/astro/astro.js +3 -1
  77. package/lib/cloudflare/astro/astro.js.map +1 -1
  78. package/lib/cloudflare/astro/plugin.d.ts +2 -1
  79. package/lib/cloudflare/astro/plugin.d.ts.map +1 -1
  80. package/lib/cloudflare/astro/plugin.js.map +1 -1
  81. package/lib/cloudflare/bindings.d.ts +2 -2
  82. package/lib/cloudflare/bindings.d.ts.map +1 -1
  83. package/lib/cloudflare/bound.d.ts +1 -1
  84. package/lib/cloudflare/bound.d.ts.map +1 -1
  85. package/lib/cloudflare/bucket.d.ts +120 -1
  86. package/lib/cloudflare/bucket.d.ts.map +1 -1
  87. package/lib/cloudflare/bucket.js +80 -2
  88. package/lib/cloudflare/bucket.js.map +1 -1
  89. package/lib/cloudflare/compatibility-date.gen.d.ts +1 -1
  90. package/lib/cloudflare/compatibility-date.gen.js +1 -1
  91. package/lib/cloudflare/container.d.ts +10 -4
  92. package/lib/cloudflare/container.d.ts.map +1 -1
  93. package/lib/cloudflare/container.js +12 -9
  94. package/lib/cloudflare/container.js.map +1 -1
  95. package/lib/cloudflare/custom-domain.js +2 -1
  96. package/lib/cloudflare/custom-domain.js.map +1 -1
  97. package/lib/cloudflare/d1-database.d.ts +1 -1
  98. package/lib/cloudflare/d1-database.d.ts.map +1 -1
  99. package/lib/cloudflare/d1-database.js +6 -2
  100. package/lib/cloudflare/d1-database.js.map +1 -1
  101. package/lib/cloudflare/dispatch-namespace.d.ts +2 -0
  102. package/lib/cloudflare/dispatch-namespace.d.ts.map +1 -1
  103. package/lib/cloudflare/dispatch-namespace.js +7 -5
  104. package/lib/cloudflare/dispatch-namespace.js.map +1 -1
  105. package/lib/cloudflare/hyperdrive.d.ts +7 -1
  106. package/lib/cloudflare/hyperdrive.d.ts.map +1 -1
  107. package/lib/cloudflare/hyperdrive.js +2 -1
  108. package/lib/cloudflare/hyperdrive.js.map +1 -1
  109. package/lib/cloudflare/kv-namespace.d.ts +3 -0
  110. package/lib/cloudflare/kv-namespace.d.ts.map +1 -1
  111. package/lib/cloudflare/kv-namespace.js +11 -2
  112. package/lib/cloudflare/kv-namespace.js.map +1 -1
  113. package/lib/cloudflare/miniflare/miniflare-worker-proxy.js +3 -1
  114. package/lib/cloudflare/miniflare/miniflare-worker-proxy.js.map +1 -1
  115. package/lib/cloudflare/miniflare/paths.d.ts +4 -0
  116. package/lib/cloudflare/miniflare/paths.d.ts.map +1 -1
  117. package/lib/cloudflare/miniflare/paths.js +11 -0
  118. package/lib/cloudflare/miniflare/paths.js.map +1 -1
  119. package/lib/cloudflare/pipeline.d.ts +14 -3
  120. package/lib/cloudflare/pipeline.d.ts.map +1 -1
  121. package/lib/cloudflare/pipeline.js +31 -2
  122. package/lib/cloudflare/pipeline.js.map +1 -1
  123. package/lib/cloudflare/queue-consumer.js +1 -1
  124. package/lib/cloudflare/queue-consumer.js.map +1 -1
  125. package/lib/cloudflare/queue.d.ts +4 -2
  126. package/lib/cloudflare/queue.d.ts.map +1 -1
  127. package/lib/cloudflare/queue.js +13 -9
  128. package/lib/cloudflare/queue.js.map +1 -1
  129. package/lib/cloudflare/react-router/plugin.d.ts +1 -1
  130. package/lib/cloudflare/react-router/plugin.d.ts.map +1 -1
  131. package/lib/cloudflare/react-router/react-router.d.ts.map +1 -1
  132. package/lib/cloudflare/react-router/react-router.js +32 -2
  133. package/lib/cloudflare/react-router/react-router.js.map +1 -1
  134. package/lib/cloudflare/redwood/plugin.d.ts +2 -1
  135. package/lib/cloudflare/redwood/plugin.d.ts.map +1 -1
  136. package/lib/cloudflare/redwood/plugin.js.map +1 -1
  137. package/lib/cloudflare/route.js +1 -1
  138. package/lib/cloudflare/route.js.map +1 -1
  139. package/lib/cloudflare/ruleset.d.ts +3 -1
  140. package/lib/cloudflare/ruleset.d.ts.map +1 -1
  141. package/lib/cloudflare/ruleset.js +3 -2
  142. package/lib/cloudflare/ruleset.js.map +1 -1
  143. package/lib/cloudflare/secret.d.ts +6 -23
  144. package/lib/cloudflare/secret.d.ts.map +1 -1
  145. package/lib/cloudflare/secret.js +8 -4
  146. package/lib/cloudflare/secret.js.map +1 -1
  147. package/lib/cloudflare/secrets-store.d.ts +1 -1
  148. package/lib/cloudflare/secrets-store.d.ts.map +1 -1
  149. package/lib/cloudflare/secrets-store.js +5 -2
  150. package/lib/cloudflare/secrets-store.js.map +1 -1
  151. package/lib/cloudflare/tunnel.d.ts +5 -1
  152. package/lib/cloudflare/tunnel.d.ts.map +1 -1
  153. package/lib/cloudflare/tunnel.js +5 -1
  154. package/lib/cloudflare/tunnel.js.map +1 -1
  155. package/lib/cloudflare/vectorize-index.d.ts +7 -1
  156. package/lib/cloudflare/vectorize-index.d.ts.map +1 -1
  157. package/lib/cloudflare/vectorize-index.js +5 -2
  158. package/lib/cloudflare/vectorize-index.js.map +1 -1
  159. package/lib/cloudflare/vite/plugin.d.ts +2 -1
  160. package/lib/cloudflare/vite/plugin.d.ts.map +1 -1
  161. package/lib/cloudflare/vite/plugin.js.map +1 -1
  162. package/lib/cloudflare/website.js +1 -1
  163. package/lib/cloudflare/website.js.map +1 -1
  164. package/lib/cloudflare/worker.d.ts +1 -1
  165. package/lib/cloudflare/worker.d.ts.map +1 -1
  166. package/lib/cloudflare/worker.js +12 -7
  167. package/lib/cloudflare/worker.js.map +1 -1
  168. package/lib/cloudflare/wrangler.json.d.ts +1 -1
  169. package/lib/cloudflare/wrangler.json.d.ts.map +1 -1
  170. package/lib/cloudflare/wrangler.json.js +5 -3
  171. package/lib/cloudflare/wrangler.json.js.map +1 -1
  172. package/lib/docker/container.d.ts +6 -0
  173. package/lib/docker/container.d.ts.map +1 -1
  174. package/lib/docker/container.js +5 -1
  175. package/lib/docker/container.js.map +1 -1
  176. package/lib/docker/network.d.ts +8 -2
  177. package/lib/docker/network.d.ts.map +1 -1
  178. package/lib/docker/network.js +7 -2
  179. package/lib/docker/network.js.map +1 -1
  180. package/lib/docker/volume.d.ts +8 -2
  181. package/lib/docker/volume.d.ts.map +1 -1
  182. package/lib/docker/volume.js +6 -4
  183. package/lib/docker/volume.js.map +1 -1
  184. package/lib/esbuild/bundle.d.ts +1 -1
  185. package/lib/fs/index.d.ts +0 -8
  186. package/lib/fs/index.d.ts.map +1 -1
  187. package/lib/fs/index.js +0 -8
  188. package/lib/fs/index.js.map +1 -1
  189. package/lib/github/client.d.ts +1 -1
  190. package/lib/github/client.d.ts.map +1 -1
  191. package/lib/github/client.js +2 -1
  192. package/lib/github/client.js.map +1 -1
  193. package/lib/github/repository-environment.d.ts +8 -2
  194. package/lib/github/repository-environment.d.ts.map +1 -1
  195. package/lib/github/repository-environment.js +16 -12
  196. package/lib/github/repository-environment.js.map +1 -1
  197. package/lib/neon/project.d.ts +7 -1
  198. package/lib/neon/project.d.ts.map +1 -1
  199. package/lib/neon/project.js +10 -6
  200. package/lib/neon/project.js.map +1 -1
  201. package/lib/planetscale/branch.d.ts +4 -2
  202. package/lib/planetscale/branch.d.ts.map +1 -1
  203. package/lib/planetscale/branch.js +18 -12
  204. package/lib/planetscale/branch.js.map +1 -1
  205. package/lib/planetscale/database.d.ts +8 -2
  206. package/lib/planetscale/database.d.ts.map +1 -1
  207. package/lib/planetscale/database.js +24 -16
  208. package/lib/planetscale/database.js.map +1 -1
  209. package/lib/planetscale/password.d.ts +8 -2
  210. package/lib/planetscale/password.d.ts.map +1 -1
  211. package/lib/planetscale/password.js +2 -2
  212. package/lib/planetscale/password.js.map +1 -1
  213. package/lib/resource.d.ts +0 -2
  214. package/lib/resource.d.ts.map +1 -1
  215. package/lib/resource.js +1 -9
  216. package/lib/resource.js.map +1 -1
  217. package/lib/scope.d.ts +9 -3
  218. package/lib/scope.d.ts.map +1 -1
  219. package/lib/scope.js +21 -34
  220. package/lib/scope.js.map +1 -1
  221. package/lib/sentry/client-key.d.ts +7 -1
  222. package/lib/sentry/client-key.d.ts.map +1 -1
  223. package/lib/sentry/client-key.js +45 -6
  224. package/lib/sentry/client-key.js.map +1 -1
  225. package/lib/sentry/project.d.ts +8 -2
  226. package/lib/sentry/project.d.ts.map +1 -1
  227. package/lib/sentry/project.js +35 -5
  228. package/lib/sentry/project.js.map +1 -1
  229. package/lib/sentry/team.d.ts +8 -2
  230. package/lib/sentry/team.d.ts.map +1 -1
  231. package/lib/sentry/team.js +36 -6
  232. package/lib/sentry/team.js.map +1 -1
  233. package/lib/serde.d.ts +0 -5
  234. package/lib/serde.d.ts.map +1 -1
  235. package/lib/serde.js +0 -28
  236. package/lib/serde.js.map +1 -1
  237. package/lib/state/d1-state-store.d.ts +1 -1
  238. package/lib/state/d1-state-store.d.ts.map +1 -1
  239. package/lib/state/d1-state-store.js +5 -5
  240. package/lib/state/d1-state-store.js.map +1 -1
  241. package/lib/state/sqlite-state-store.d.ts.map +1 -1
  242. package/lib/state/sqlite-state-store.js +7 -11
  243. package/lib/state/sqlite-state-store.js.map +1 -1
  244. package/lib/stripe/card.d.ts.map +1 -1
  245. package/lib/stripe/card.js +3 -2
  246. package/lib/stripe/card.js.map +1 -1
  247. package/lib/stripe/client.d.ts +2 -2
  248. package/lib/stripe/client.d.ts.map +1 -1
  249. package/lib/stripe/client.js +4 -3
  250. package/lib/stripe/client.js.map +1 -1
  251. package/lib/stripe/coupon.d.ts.map +1 -1
  252. package/lib/stripe/coupon.js +4 -3
  253. package/lib/stripe/coupon.js.map +1 -1
  254. package/lib/stripe/customer.js +2 -2
  255. package/lib/stripe/customer.js.map +1 -1
  256. package/lib/stripe/entitlements-feature.d.ts.map +1 -1
  257. package/lib/stripe/entitlements-feature.js +3 -2
  258. package/lib/stripe/entitlements-feature.js.map +1 -1
  259. package/lib/stripe/file.d.ts.map +1 -1
  260. package/lib/stripe/file.js +3 -2
  261. package/lib/stripe/file.js.map +1 -1
  262. package/lib/stripe/meter.js +2 -2
  263. package/lib/stripe/meter.js.map +1 -1
  264. package/lib/stripe/portal-configuration.d.ts.map +1 -1
  265. package/lib/stripe/portal-configuration.js +3 -2
  266. package/lib/stripe/portal-configuration.js.map +1 -1
  267. package/lib/stripe/price.d.ts.map +1 -1
  268. package/lib/stripe/price.js +3 -2
  269. package/lib/stripe/price.js.map +1 -1
  270. package/lib/stripe/product-feature.d.ts.map +1 -1
  271. package/lib/stripe/product-feature.js +3 -2
  272. package/lib/stripe/product-feature.js.map +1 -1
  273. package/lib/stripe/product.d.ts.map +1 -1
  274. package/lib/stripe/product.js +3 -2
  275. package/lib/stripe/product.js.map +1 -1
  276. package/lib/stripe/promotion-code.d.ts.map +1 -1
  277. package/lib/stripe/promotion-code.js +3 -2
  278. package/lib/stripe/promotion-code.js.map +1 -1
  279. package/lib/stripe/shipping-rate.d.ts.map +1 -1
  280. package/lib/stripe/shipping-rate.js +4 -3
  281. package/lib/stripe/shipping-rate.js.map +1 -1
  282. package/lib/stripe/tax-rate.d.ts.map +1 -1
  283. package/lib/stripe/tax-rate.js +3 -2
  284. package/lib/stripe/tax-rate.js.map +1 -1
  285. package/lib/stripe/webhook.d.ts.map +1 -1
  286. package/lib/stripe/webhook.js +4 -3
  287. package/lib/stripe/webhook.js.map +1 -1
  288. package/lib/test/vitest.d.ts.map +1 -1
  289. package/lib/test/vitest.js +1 -0
  290. package/lib/test/vitest.js.map +1 -1
  291. package/lib/upstash/redis.d.ts +8 -2
  292. package/lib/upstash/redis.d.ts.map +1 -1
  293. package/lib/upstash/redis.js +5 -4
  294. package/lib/upstash/redis.js.map +1 -1
  295. package/lib/util/ignore-matcher.d.ts.map +1 -1
  296. package/lib/util/ignore-matcher.js +3 -1
  297. package/lib/util/ignore-matcher.js.map +1 -1
  298. package/lib/util/peer.d.ts +10 -0
  299. package/lib/util/peer.d.ts.map +1 -0
  300. package/lib/util/peer.js +42 -0
  301. package/lib/util/peer.js.map +1 -0
  302. package/lib/vercel/project.d.ts +7 -1
  303. package/lib/vercel/project.d.ts.map +1 -1
  304. package/lib/vercel/project.js +28 -0
  305. package/lib/vercel/project.js.map +1 -1
  306. package/package.json +88 -74
  307. package/src/alchemy.ts +76 -222
  308. package/src/apply.ts +6 -19
  309. package/src/aws/account-id.ts +6 -3
  310. package/src/aws/bucket.ts +43 -32
  311. package/src/aws/ec2/security-group.ts +15 -3
  312. package/src/aws/function.ts +65 -39
  313. package/src/aws/policy-attachment.ts +10 -6
  314. package/src/aws/policy.ts +33 -15
  315. package/src/aws/queue.ts +50 -29
  316. package/src/aws/role.ts +37 -20
  317. package/src/aws/ses.ts +24 -20
  318. package/src/aws/ssm-parameter.ts +40 -20
  319. package/src/aws/table.ts +35 -17
  320. package/src/cloudflare/account-api-token.ts +9 -7
  321. package/src/cloudflare/ai-gateway.ts +37 -34
  322. package/src/cloudflare/api-schema.ts +33 -26
  323. package/src/cloudflare/api-shield.ts +15 -2
  324. package/src/cloudflare/astro/astro.ts +5 -1
  325. package/src/cloudflare/astro/plugin.ts +2 -1
  326. package/src/cloudflare/bindings.ts +2 -2
  327. package/src/cloudflare/bound.ts +1 -1
  328. package/src/cloudflare/bucket.ts +242 -3
  329. package/src/cloudflare/compatibility-date.gen.ts +1 -1
  330. package/src/cloudflare/container.ts +23 -12
  331. package/src/cloudflare/custom-domain.ts +2 -2
  332. package/src/cloudflare/d1-database.ts +10 -3
  333. package/src/cloudflare/dispatch-namespace.ts +10 -7
  334. package/src/cloudflare/hyperdrive.ts +13 -3
  335. package/src/cloudflare/kv-namespace.ts +25 -2
  336. package/src/cloudflare/miniflare/miniflare-worker-proxy.ts +3 -1
  337. package/src/cloudflare/miniflare/paths.ts +13 -0
  338. package/src/cloudflare/pipeline.ts +76 -28
  339. package/src/cloudflare/queue-consumer.ts +1 -1
  340. package/src/cloudflare/queue.ts +26 -14
  341. package/src/cloudflare/react-router/react-router.ts +28 -2
  342. package/src/cloudflare/redwood/plugin.ts +3 -2
  343. package/src/cloudflare/route.ts +1 -1
  344. package/src/cloudflare/ruleset.ts +7 -2
  345. package/src/cloudflare/secret.ts +20 -31
  346. package/src/cloudflare/secrets-store.ts +7 -3
  347. package/src/cloudflare/tunnel.ts +13 -2
  348. package/src/cloudflare/vectorize-index.ts +14 -3
  349. package/src/cloudflare/vite/plugin.ts +3 -2
  350. package/src/cloudflare/website.ts +1 -1
  351. package/src/cloudflare/worker.ts +35 -23
  352. package/src/cloudflare/wrangler.json.ts +7 -4
  353. package/src/docker/container.ts +13 -1
  354. package/src/docker/network.ts +18 -3
  355. package/src/docker/volume.ts +17 -6
  356. package/src/fs/index.ts +0 -8
  357. package/src/github/client.ts +6 -2
  358. package/src/github/repository-environment.ts +27 -13
  359. package/src/neon/project.ts +20 -6
  360. package/src/planetscale/branch.ts +24 -13
  361. package/src/planetscale/database.ts +38 -17
  362. package/src/planetscale/password.ts +10 -3
  363. package/src/resource.ts +1 -10
  364. package/src/scope.ts +29 -38
  365. package/src/sentry/client-key.ts +74 -6
  366. package/src/sentry/project.ts +59 -6
  367. package/src/sentry/team.ts +55 -7
  368. package/src/serde.ts +0 -44
  369. package/src/state/d1-state-store.ts +13 -6
  370. package/src/state/sqlite-state-store.ts +16 -17
  371. package/src/stripe/card.ts +5 -2
  372. package/src/stripe/client.ts +10 -3
  373. package/src/stripe/coupon.ts +4 -3
  374. package/src/stripe/customer.ts +2 -2
  375. package/src/stripe/entitlements-feature.ts +5 -2
  376. package/src/stripe/file.ts +3 -2
  377. package/src/stripe/meter.ts +2 -2
  378. package/src/stripe/portal-configuration.ts +5 -2
  379. package/src/stripe/price.ts +3 -2
  380. package/src/stripe/product-feature.ts +5 -2
  381. package/src/stripe/product.ts +3 -2
  382. package/src/stripe/promotion-code.ts +3 -2
  383. package/src/stripe/shipping-rate.ts +4 -3
  384. package/src/stripe/tax-rate.ts +3 -2
  385. package/src/stripe/webhook.ts +4 -3
  386. package/src/test/vitest.ts +1 -0
  387. package/src/upstash/redis.ts +15 -5
  388. package/src/util/ignore-matcher.ts +3 -1
  389. package/src/util/peer.ts +53 -0
  390. package/src/vercel/project.ts +46 -1
  391. package/templates/hono/README.md +19 -0
  392. package/templates/hono/_env +1 -0
  393. package/templates/hono/_env.example +1 -0
  394. package/templates/hono/_gitignore +34 -0
  395. package/templates/hono/alchemy.run.ts +22 -0
  396. package/templates/hono/package.json +18 -0
  397. package/templates/hono/src/index.ts +17 -0
  398. package/templates/hono/tsconfig.json +13 -0
  399. package/templates/hono/types/env.d.ts +16 -0
  400. package/templates/react-router/vite.config.ts +5 -3
  401. package/workers/cloudflare-state-store.js +69 -74
  402. package/workers/dofs-state-store.js +1 -1
  403. package/bin/bootstrap-s3.ts +0 -255
  404. package/lib/ai/ark.d.ts +0 -12
  405. package/lib/ai/ark.d.ts.map +0 -1
  406. package/lib/ai/ark.js +0 -87
  407. package/lib/ai/ark.js.map +0 -1
  408. package/lib/ai/astro-file.d.ts +0 -138
  409. package/lib/ai/astro-file.d.ts.map +0 -1
  410. package/lib/ai/astro-file.js +0 -158
  411. package/lib/ai/astro-file.js.map +0 -1
  412. package/lib/ai/client.d.ts +0 -51
  413. package/lib/ai/client.d.ts.map +0 -1
  414. package/lib/ai/client.js +0 -58
  415. package/lib/ai/client.js.map +0 -1
  416. package/lib/ai/css-file.d.ts +0 -132
  417. package/lib/ai/css-file.d.ts.map +0 -1
  418. package/lib/ai/css-file.js +0 -142
  419. package/lib/ai/css-file.js.map +0 -1
  420. package/lib/ai/data.d.ts +0 -152
  421. package/lib/ai/data.d.ts.map +0 -1
  422. package/lib/ai/data.js +0 -120
  423. package/lib/ai/data.js.map +0 -1
  424. package/lib/ai/document.d.ts +0 -208
  425. package/lib/ai/document.d.ts.map +0 -1
  426. package/lib/ai/document.js +0 -206
  427. package/lib/ai/document.js.map +0 -1
  428. package/lib/ai/html-file.d.ts +0 -129
  429. package/lib/ai/html-file.d.ts.map +0 -1
  430. package/lib/ai/html-file.js +0 -139
  431. package/lib/ai/html-file.js.map +0 -1
  432. package/lib/ai/index.d.ts +0 -11
  433. package/lib/ai/index.d.ts.map +0 -1
  434. package/lib/ai/index.js +0 -11
  435. package/lib/ai/index.js.map +0 -1
  436. package/lib/ai/json-file.d.ts +0 -161
  437. package/lib/ai/json-file.d.ts.map +0 -1
  438. package/lib/ai/json-file.js +0 -188
  439. package/lib/ai/json-file.js.map +0 -1
  440. package/lib/ai/typescript-file.d.ts +0 -140
  441. package/lib/ai/typescript-file.d.ts.map +0 -1
  442. package/lib/ai/typescript-file.js +0 -146
  443. package/lib/ai/typescript-file.js.map +0 -1
  444. package/lib/ai/vue-file.d.ts +0 -127
  445. package/lib/ai/vue-file.d.ts.map +0 -1
  446. package/lib/ai/vue-file.js +0 -137
  447. package/lib/ai/vue-file.js.map +0 -1
  448. package/lib/ai/yaml-file.d.ts +0 -170
  449. package/lib/ai/yaml-file.d.ts.map +0 -1
  450. package/lib/ai/yaml-file.js +0 -201
  451. package/lib/ai/yaml-file.js.map +0 -1
  452. package/lib/fs/static-astro-file.d.ts +0 -35
  453. package/lib/fs/static-astro-file.d.ts.map +0 -1
  454. package/lib/fs/static-astro-file.js +0 -40
  455. package/lib/fs/static-astro-file.js.map +0 -1
  456. package/lib/fs/static-css-file.d.ts +0 -25
  457. package/lib/fs/static-css-file.d.ts.map +0 -1
  458. package/lib/fs/static-css-file.js +0 -30
  459. package/lib/fs/static-css-file.js.map +0 -1
  460. package/lib/fs/static-html-file.d.ts +0 -32
  461. package/lib/fs/static-html-file.d.ts.map +0 -1
  462. package/lib/fs/static-html-file.js +0 -37
  463. package/lib/fs/static-html-file.js.map +0 -1
  464. package/lib/fs/static-json-file.d.ts +0 -18
  465. package/lib/fs/static-json-file.d.ts.map +0 -1
  466. package/lib/fs/static-json-file.js +0 -19
  467. package/lib/fs/static-json-file.js.map +0 -1
  468. package/lib/fs/static-text-file.d.ts +0 -13
  469. package/lib/fs/static-text-file.d.ts.map +0 -1
  470. package/lib/fs/static-text-file.js +0 -9
  471. package/lib/fs/static-text-file.js.map +0 -1
  472. package/lib/fs/static-typescript-file.d.ts +0 -20
  473. package/lib/fs/static-typescript-file.d.ts.map +0 -1
  474. package/lib/fs/static-typescript-file.js +0 -16
  475. package/lib/fs/static-typescript-file.js.map +0 -1
  476. package/lib/fs/static-vue-file.d.ts +0 -29
  477. package/lib/fs/static-vue-file.d.ts.map +0 -1
  478. package/lib/fs/static-vue-file.js +0 -34
  479. package/lib/fs/static-vue-file.js.map +0 -1
  480. package/lib/fs/static-yaml-file.d.ts +0 -23
  481. package/lib/fs/static-yaml-file.d.ts.map +0 -1
  482. package/lib/fs/static-yaml-file.js +0 -10
  483. package/lib/fs/static-yaml-file.js.map +0 -1
  484. package/lib/internal/docs/providers.d.ts +0 -34
  485. package/lib/internal/docs/providers.d.ts.map +0 -1
  486. package/lib/internal/docs/providers.js +0 -200
  487. package/lib/internal/docs/providers.js.map +0 -1
  488. package/lib/runtime/bind.d.ts +0 -25
  489. package/lib/runtime/bind.d.ts.map +0 -1
  490. package/lib/runtime/bind.js +0 -76
  491. package/lib/runtime/bind.js.map +0 -1
  492. package/lib/runtime/global.d.ts +0 -8
  493. package/lib/runtime/global.d.ts.map +0 -1
  494. package/lib/runtime/global.js +0 -3
  495. package/lib/runtime/global.js.map +0 -1
  496. package/lib/runtime/plugin.d.ts +0 -35
  497. package/lib/runtime/plugin.d.ts.map +0 -1
  498. package/lib/runtime/plugin.js +0 -134
  499. package/lib/runtime/plugin.js.map +0 -1
  500. package/lib/runtime/shims.d.ts +0 -6
  501. package/lib/runtime/shims.d.ts.map +0 -1
  502. package/lib/runtime/shims.js +0 -27
  503. package/lib/runtime/shims.js.map +0 -1
  504. package/lib/runtime/state.d.ts +0 -5
  505. package/lib/runtime/state.d.ts.map +0 -1
  506. package/lib/runtime/state.js +0 -4
  507. package/lib/runtime/state.js.map +0 -1
  508. package/lib/web/astro.d.ts +0 -148
  509. package/lib/web/astro.d.ts.map +0 -1
  510. package/lib/web/astro.js +0 -419
  511. package/lib/web/astro.js.map +0 -1
  512. package/lib/web/shadcn-component.d.ts +0 -30
  513. package/lib/web/shadcn-component.d.ts.map +0 -1
  514. package/lib/web/shadcn-component.js +0 -25
  515. package/lib/web/shadcn-component.js.map +0 -1
  516. package/lib/web/shadcn.d.ts +0 -98
  517. package/lib/web/shadcn.d.ts.map +0 -1
  518. package/lib/web/shadcn.js +0 -102
  519. package/lib/web/shadcn.js.map +0 -1
  520. package/lib/web/tailwind.d.ts +0 -65
  521. package/lib/web/tailwind.d.ts.map +0 -1
  522. package/lib/web/tailwind.js +0 -98
  523. package/lib/web/tailwind.js.map +0 -1
  524. package/lib/web/vite.d.ts +0 -96
  525. package/lib/web/vite.d.ts.map +0 -1
  526. package/lib/web/vite.js +0 -232
  527. package/lib/web/vite.js.map +0 -1
  528. package/lib/web/vitepress/config.d.ts +0 -12
  529. package/lib/web/vitepress/config.d.ts.map +0 -1
  530. package/lib/web/vitepress/config.js +0 -33
  531. package/lib/web/vitepress/config.js.map +0 -1
  532. package/lib/web/vitepress/custom-theme.d.ts +0 -174
  533. package/lib/web/vitepress/custom-theme.d.ts.map +0 -1
  534. package/lib/web/vitepress/custom-theme.js +0 -337
  535. package/lib/web/vitepress/custom-theme.js.map +0 -1
  536. package/lib/web/vitepress/dependencies.d.ts +0 -13
  537. package/lib/web/vitepress/dependencies.d.ts.map +0 -1
  538. package/lib/web/vitepress/dependencies.js +0 -37
  539. package/lib/web/vitepress/dependencies.js.map +0 -1
  540. package/lib/web/vitepress/home-page.d.ts +0 -247
  541. package/lib/web/vitepress/home-page.d.ts.map +0 -1
  542. package/lib/web/vitepress/home-page.js +0 -146
  543. package/lib/web/vitepress/home-page.js.map +0 -1
  544. package/lib/web/vitepress/index.d.ts +0 -6
  545. package/lib/web/vitepress/index.d.ts.map +0 -1
  546. package/lib/web/vitepress/index.js +0 -6
  547. package/lib/web/vitepress/index.js.map +0 -1
  548. package/lib/web/vitepress/process-front-matter-files.d.ts +0 -19
  549. package/lib/web/vitepress/process-front-matter-files.d.ts.map +0 -1
  550. package/lib/web/vitepress/process-front-matter-files.js +0 -73
  551. package/lib/web/vitepress/process-front-matter-files.js.map +0 -1
  552. package/lib/web/vitepress/vitepress.d.ts +0 -75
  553. package/lib/web/vitepress/vitepress.d.ts.map +0 -1
  554. package/lib/web/vitepress/vitepress.js +0 -254
  555. package/lib/web/vitepress/vitepress.js.map +0 -1
  556. package/src/ai/ark.ts +0 -118
  557. package/src/ai/astro-file.ts +0 -270
  558. package/src/ai/client.ts +0 -117
  559. package/src/ai/css-file.ts +0 -247
  560. package/src/ai/data.ts +0 -221
  561. package/src/ai/document.ts +0 -367
  562. package/src/ai/html-file.ts +0 -244
  563. package/src/ai/index.ts +0 -10
  564. package/src/ai/json-file.ts +0 -325
  565. package/src/ai/typescript-file.ts +0 -259
  566. package/src/ai/vue-file.ts +0 -242
  567. package/src/ai/yaml-file.ts +0 -328
  568. package/src/fs/static-astro-file.ts +0 -45
  569. package/src/fs/static-css-file.ts +0 -35
  570. package/src/fs/static-html-file.ts +0 -42
  571. package/src/fs/static-json-file.ts +0 -38
  572. package/src/fs/static-text-file.ts +0 -23
  573. package/src/fs/static-typescript-file.ts +0 -37
  574. package/src/fs/static-vue-file.ts +0 -39
  575. package/src/fs/static-yaml-file.ts +0 -33
  576. package/src/internal/docs/providers.ts +0 -286
  577. package/src/runtime/bind.ts +0 -95
  578. package/src/runtime/global.ts +0 -10
  579. package/src/runtime/plugin.ts +0 -163
  580. package/src/runtime/shims.js +0 -34
  581. package/src/runtime/state.ts +0 -9
  582. package/src/web/astro.ts +0 -643
  583. package/src/web/shadcn-component.ts +0 -72
  584. package/src/web/shadcn.ts +0 -221
  585. package/src/web/tailwind.ts +0 -167
  586. package/src/web/vite.ts +0 -407
  587. package/src/web/vitepress/config.ts +0 -50
  588. package/src/web/vitepress/custom-theme.ts +0 -514
  589. package/src/web/vitepress/dependencies.ts +0 -69
  590. package/src/web/vitepress/home-page.ts +0 -378
  591. package/src/web/vitepress/index.ts +0 -5
  592. package/src/web/vitepress/process-front-matter-files.ts +0 -107
  593. package/src/web/vitepress/vitepress.ts +0 -372
  594. package/templates/sveltekit/bun.lock +0 -1099
package/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
  },
package/src/aws/ses.ts CHANGED
@@ -1,27 +1,14 @@
1
- import {
2
- CreateConfigurationSetCommand,
3
- CreateEmailIdentityCommand,
4
- DeleteConfigurationSetCommand,
5
- DeleteEmailIdentityCommand,
6
- type DeliveryOptions,
7
- GetConfigurationSetCommand,
8
- GetEmailIdentityCommand,
9
- NotFoundException,
10
- PutConfigurationSetDeliveryOptionsCommand,
11
- PutConfigurationSetReputationOptionsCommand,
12
- PutConfigurationSetSendingOptionsCommand,
13
- PutConfigurationSetSuppressionOptionsCommand,
14
- PutConfigurationSetTrackingOptionsCommand,
15
- PutEmailIdentityDkimAttributesCommand,
16
- type ReputationOptions,
17
- SESv2Client,
18
- type SendingOptions,
19
- type SuppressionOptions,
20
- type TrackingOptions,
1
+ import type {
2
+ DeliveryOptions,
3
+ ReputationOptions,
4
+ SendingOptions,
5
+ SuppressionOptions,
6
+ TrackingOptions,
21
7
  } from "@aws-sdk/client-sesv2";
22
8
  import type { Context } from "../context.ts";
23
9
  import { Resource } from "../resource.ts";
24
10
  import { ignore } from "../util/ignore.ts";
11
+ import { importPeer } from "../util/peer.ts";
25
12
  import { retry } from "./retry.ts";
26
13
 
27
14
  /**
@@ -165,6 +152,23 @@ export const SES = Resource(
165
152
  props: SESProps,
166
153
  ): Promise<SES> {
167
154
  // Create SES client
155
+ const {
156
+ CreateConfigurationSetCommand,
157
+ CreateEmailIdentityCommand,
158
+ DeleteConfigurationSetCommand,
159
+ DeleteEmailIdentityCommand,
160
+ GetConfigurationSetCommand,
161
+ GetEmailIdentityCommand,
162
+ NotFoundException,
163
+ PutConfigurationSetDeliveryOptionsCommand,
164
+ PutConfigurationSetReputationOptionsCommand,
165
+ PutConfigurationSetSendingOptionsCommand,
166
+ PutConfigurationSetSuppressionOptionsCommand,
167
+ PutConfigurationSetTrackingOptionsCommand,
168
+ PutEmailIdentityDkimAttributesCommand,
169
+ SESv2Client,
170
+ } = await importPeer(import("@aws-sdk/client-sesv2"), "ses::SES");
171
+
168
172
  const client = new SESv2Client({});
169
173
 
170
174
  // Resource ID is either based on the configuration set name or email identity
@@ -1,18 +1,10 @@
1
- import {
2
- AddTagsToResourceCommand,
3
- DeleteParameterCommand,
4
- GetParameterCommand,
5
- ParameterAlreadyExists,
6
- ParameterNotFound,
7
- PutParameterCommand,
8
- SSMClient,
9
- type Tag,
10
- } from "@aws-sdk/client-ssm";
1
+ import type { Tag } from "@aws-sdk/client-ssm";
11
2
  import type { Context } from "../context.ts";
12
3
  import { Resource } from "../resource.ts";
13
4
  import { type Secret, isSecret } from "../secret.ts";
14
5
  import { ignore } from "../util/ignore.ts";
15
6
  import { logger } from "../util/logger.ts";
7
+ import { importPeer } from "../util/peer.ts";
16
8
 
17
9
  /**
18
10
  * Base properties shared by all SSM Parameter types
@@ -20,8 +12,10 @@ import { logger } from "../util/logger.ts";
20
12
  interface SSMParameterBaseProps {
21
13
  /**
22
14
  * Name of the parameter
15
+ *
16
+ * @default ${app}-${stage}-${id}
23
17
  */
24
- name: string;
18
+ name?: string;
25
19
 
26
20
  /**
27
21
  * Description of the parameter's purpose
@@ -101,6 +95,11 @@ export type SSMParameter = Resource<"ssm::Parameter"> & {
101
95
  */
102
96
  arn: string;
103
97
 
98
+ /**
99
+ * Name of the SSM Parameter.
100
+ */
101
+ name: string;
102
+
104
103
  /**
105
104
  * Version of the parameter
106
105
  */
@@ -176,17 +175,33 @@ export const SSMParameter = Resource(
176
175
  "ssm::Parameter",
177
176
  async function (
178
177
  this: Context<SSMParameter>,
179
- _id: string,
178
+ id: string,
180
179
  props: SSMParameterProps,
181
180
  ): Promise<SSMParameter> {
181
+ const {
182
+ AddTagsToResourceCommand,
183
+ DeleteParameterCommand,
184
+ GetParameterCommand,
185
+ ParameterAlreadyExists,
186
+ ParameterNotFound,
187
+ PutParameterCommand,
188
+ SSMClient,
189
+ } = await importPeer(import("@aws-sdk/client-ssm"), "ssm::Parameter");
182
190
  const client = new SSMClient({});
183
191
 
192
+ const parameterName =
193
+ props.name ?? this.output?.name ?? this.scope.createPhysicalName(id);
194
+
195
+ if (this.phase === "update" && this.output.name !== parameterName) {
196
+ this.replace();
197
+ }
198
+
184
199
  if (this.phase === "delete") {
185
200
  try {
186
201
  await ignore(ParameterNotFound.name, () =>
187
202
  client.send(
188
203
  new DeleteParameterCommand({
189
- Name: props.name,
204
+ Name: parameterName,
190
205
  }),
191
206
  ),
192
207
  );
@@ -217,7 +232,7 @@ export const SSMParameter = Resource(
217
232
  try {
218
233
  await client.send(
219
234
  new PutParameterCommand({
220
- Name: props.name,
235
+ Name: parameterName,
221
236
  Value: parameterValue,
222
237
  Type: parameterType,
223
238
  Description: props.description,
@@ -247,7 +262,7 @@ export const SSMParameter = Resource(
247
262
  if (error instanceof ParameterAlreadyExists) {
248
263
  await client.send(
249
264
  new PutParameterCommand({
250
- Name: props.name,
265
+ Name: parameterName,
251
266
  Value: parameterValue,
252
267
  Type: parameterType,
253
268
  Description: props.description,
@@ -278,7 +293,7 @@ export const SSMParameter = Resource(
278
293
  await client.send(
279
294
  new AddTagsToResourceCommand({
280
295
  ResourceType: "Parameter",
281
- ResourceId: props.name,
296
+ ResourceId: parameterName,
282
297
  Tags: tags,
283
298
  }),
284
299
  );
@@ -290,13 +305,15 @@ export const SSMParameter = Resource(
290
305
  // Get the updated parameter
291
306
  const parameter = await client.send(
292
307
  new GetParameterCommand({
293
- Name: props.name,
308
+ Name: parameterName,
294
309
  WithDecryption: true,
295
310
  }),
296
311
  );
297
312
 
298
313
  if (!parameter?.Parameter) {
299
- throw new Error(`Failed to create or update parameter ${props.name}`);
314
+ throw new Error(
315
+ `Failed to create or update parameter ${parameterName}`,
316
+ );
300
317
  }
301
318
 
302
319
  return this({
@@ -304,12 +321,15 @@ export const SSMParameter = Resource(
304
321
  arn: parameter.Parameter.ARN!,
305
322
  version: parameter.Parameter.Version!,
306
323
  lastModifiedDate: parameter.Parameter.LastModifiedDate!,
307
- name: parameter.Parameter.Name ?? props.name,
324
+ name: parameter.Parameter.Name ?? parameterName,
308
325
  value: props.value,
309
326
  type: (parameter.Parameter.Type as any) ?? parameterType,
310
327
  } as SSMParameter);
311
328
  } catch (error: any) {
312
- logger.error(`Error creating/updating parameter ${props.name}:`, error);
329
+ logger.error(
330
+ `Error creating/updating parameter ${parameterName}:`,
331
+ error,
332
+ );
313
333
  throw error;
314
334
  }
315
335
  },
package/src/aws/table.ts CHANGED
@@ -1,14 +1,8 @@
1
- import {
2
- CreateTableCommand,
3
- DeleteTableCommand,
4
- DescribeTableCommand,
5
- DynamoDBClient,
6
- type KeySchemaElement,
7
- ResourceNotFoundException,
8
- } from "@aws-sdk/client-dynamodb";
1
+ import type { KeySchemaElement } from "@aws-sdk/client-dynamodb";
9
2
  import type { Context } from "../context.ts";
10
3
  import { Resource } from "../resource.ts";
11
4
  import { ignore } from "../util/ignore.ts";
5
+ import { importPeer } from "../util/peer.ts";
12
6
  import { retry } from "./retry.ts";
13
7
 
14
8
  /**
@@ -17,8 +11,10 @@ import { retry } from "./retry.ts";
17
11
  export interface TableProps {
18
12
  /**
19
13
  * Name of the DynamoDB table
14
+ *
15
+ * @default ${app}-${stage}-${id}
20
16
  */
21
- tableName: string;
17
+ tableName?: string;
22
18
 
23
19
  /**
24
20
  * Primary partition key (hash key) configuration
@@ -88,6 +84,11 @@ export interface Table extends Resource<"dynamo::Table">, TableProps {
88
84
  */
89
85
  arn: string;
90
86
 
87
+ /**
88
+ * Name of the DynamoDB Table.
89
+ */
90
+ tableName: string;
91
+
91
92
  /**
92
93
  * ARN of the table's stream if enabled
93
94
  * Format: arn:aws:dynamodb:region:account-id:table/table-name/stream/timestamp
@@ -140,17 +141,33 @@ export const Table = Resource(
140
141
  "dynamo::Table",
141
142
  async function (
142
143
  this: Context<Table>,
143
- _id: string,
144
+ id: string,
144
145
  props: TableProps,
145
146
  ): Promise<Table> {
147
+ const {
148
+ CreateTableCommand,
149
+ DeleteTableCommand,
150
+ DescribeTableCommand,
151
+ DynamoDBClient,
152
+ ResourceNotFoundException,
153
+ } = await importPeer(import("@aws-sdk/client-dynamodb"), "dynamo::Table");
146
154
  const client = new DynamoDBClient({});
147
155
 
156
+ const tableName =
157
+ props.tableName ??
158
+ this.output?.tableName ??
159
+ this.scope.createPhysicalName(id);
160
+
161
+ if (this.phase === "update" && this.output?.tableName !== tableName) {
162
+ this.replace();
163
+ }
164
+
148
165
  if (this.phase === "delete") {
149
166
  await retry(async () => {
150
167
  await ignore(ResourceNotFoundException.name, () =>
151
168
  client.send(
152
169
  new DeleteTableCommand({
153
- TableName: props.tableName,
170
+ TableName: tableName,
154
171
  }),
155
172
  ),
156
173
  );
@@ -165,7 +182,7 @@ export const Table = Resource(
165
182
  try {
166
183
  await client.send(
167
184
  new DescribeTableCommand({
168
- TableName: props.tableName,
185
+ TableName: tableName,
169
186
  }),
170
187
  );
171
188
  // If we get here, table still exists
@@ -184,7 +201,7 @@ export const Table = Resource(
184
201
 
185
202
  if (!tableDeleted) {
186
203
  throw new Error(
187
- `Timed out waiting for table ${props.tableName} to be deleted`,
204
+ `Timed out waiting for table ${tableName} to be deleted`,
188
205
  );
189
206
  }
190
207
 
@@ -222,7 +239,7 @@ export const Table = Resource(
222
239
  // First check if table already exists
223
240
  const describeResponse = await client.send(
224
241
  new DescribeTableCommand({
225
- TableName: props.tableName,
242
+ TableName: tableName,
226
243
  }),
227
244
  );
228
245
 
@@ -240,7 +257,7 @@ export const Table = Resource(
240
257
  // Table doesn't exist, try to create it
241
258
  await client.send(
242
259
  new CreateTableCommand({
243
- TableName: props.tableName,
260
+ TableName: tableName,
244
261
  AttributeDefinitions: attributeDefinitions,
245
262
  KeySchema: keySchema,
246
263
  BillingMode: props.billingMode || "PAY_PER_REQUEST",
@@ -277,7 +294,7 @@ export const Table = Resource(
277
294
  async () =>
278
295
  await client.send(
279
296
  new DescribeTableCommand({
280
- TableName: props.tableName,
297
+ TableName: tableName,
281
298
  }),
282
299
  ),
283
300
  );
@@ -302,13 +319,14 @@ export const Table = Resource(
302
319
 
303
320
  if (!tableActive) {
304
321
  throw new Error(
305
- `Timed out waiting for table ${props.tableName} to become active`,
322
+ `Timed out waiting for table ${tableName} to become active`,
306
323
  );
307
324
  }
308
325
 
309
326
  return this({
310
327
  ...props,
311
328
  arn: tableDescription!.TableArn!,
329
+ tableName,
312
330
  streamArn: tableDescription!.LatestStreamArn,
313
331
  tableId: tableDescription!.TableId!,
314
332
  });