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.
- package/bin/alchemy.js +1516 -1202
- package/bin/commands/deploy.ts +2 -0
- package/bin/commands/dev.ts +2 -0
- package/bin/services/execute-alchemy.ts +11 -0
- package/bin/services/template-manager.ts +2 -0
- package/bin/types.ts +2 -1
- package/lib/alchemy.d.ts +6 -22
- package/lib/alchemy.d.ts.map +1 -1
- package/lib/alchemy.js +65 -169
- package/lib/alchemy.js.map +1 -1
- package/lib/apply.d.ts +0 -2
- package/lib/apply.d.ts.map +1 -1
- package/lib/apply.js +2 -16
- package/lib/apply.js.map +1 -1
- package/lib/aws/account-id.d.ts.map +1 -1
- package/lib/aws/account-id.js +3 -2
- package/lib/aws/account-id.js.map +1 -1
- package/lib/aws/bucket.d.ts +8 -2
- package/lib/aws/bucket.d.ts.map +1 -1
- package/lib/aws/bucket.js +21 -14
- package/lib/aws/bucket.js.map +1 -1
- package/lib/aws/ec2/security-group.d.ts +8 -2
- package/lib/aws/ec2/security-group.d.ts.map +1 -1
- package/lib/aws/ec2/security-group.js +7 -2
- package/lib/aws/ec2/security-group.js.map +1 -1
- package/lib/aws/function.d.ts +9 -3
- package/lib/aws/function.d.ts.map +1 -1
- package/lib/aws/function.js +35 -26
- package/lib/aws/function.js.map +1 -1
- package/lib/aws/policy-attachment.d.ts.map +1 -1
- package/lib/aws/policy-attachment.js +2 -1
- package/lib/aws/policy-attachment.js.map +1 -1
- package/lib/aws/policy.d.ts +8 -2
- package/lib/aws/policy.d.ts.map +1 -1
- package/lib/aws/policy.js +13 -4
- package/lib/aws/policy.js.map +1 -1
- package/lib/aws/queue.d.ts +8 -2
- package/lib/aws/queue.d.ts.map +1 -1
- package/lib/aws/queue.js +22 -14
- package/lib/aws/queue.js.map +1 -1
- package/lib/aws/role.d.ts +8 -2
- package/lib/aws/role.d.ts.map +1 -1
- package/lib/aws/role.js +10 -3
- package/lib/aws/role.js.map +1 -1
- package/lib/aws/ses.d.ts +1 -1
- package/lib/aws/ses.d.ts.map +1 -1
- package/lib/aws/ses.js +2 -1
- package/lib/aws/ses.js.map +1 -1
- package/lib/aws/ssm-parameter.d.ts +8 -2
- package/lib/aws/ssm-parameter.d.ts.map +1 -1
- package/lib/aws/ssm-parameter.js +15 -10
- package/lib/aws/ssm-parameter.js.map +1 -1
- package/lib/aws/table.d.ts +8 -2
- package/lib/aws/table.d.ts.map +1 -1
- package/lib/aws/table.js +17 -9
- package/lib/aws/table.js.map +1 -1
- package/lib/cloudflare/account-api-token.d.ts +2 -2
- package/lib/cloudflare/account-api-token.d.ts.map +1 -1
- package/lib/cloudflare/account-api-token.js +7 -6
- package/lib/cloudflare/account-api-token.js.map +1 -1
- package/lib/cloudflare/ai-gateway.d.ts +9 -4
- package/lib/cloudflare/ai-gateway.d.ts.map +1 -1
- package/lib/cloudflare/ai-gateway.js +20 -24
- package/lib/cloudflare/ai-gateway.js.map +1 -1
- package/lib/cloudflare/api-schema.d.ts +2 -2
- package/lib/cloudflare/api-schema.d.ts.map +1 -1
- package/lib/cloudflare/api-schema.js +6 -2
- package/lib/cloudflare/api-schema.js.map +1 -1
- package/lib/cloudflare/api-shield.d.ts +5 -1
- package/lib/cloudflare/api-shield.d.ts.map +1 -1
- package/lib/cloudflare/api-shield.js +6 -1
- package/lib/cloudflare/api-shield.js.map +1 -1
- package/lib/cloudflare/assets.d.ts +1 -1
- package/lib/cloudflare/assets.d.ts.map +1 -1
- package/lib/cloudflare/astro/astro.d.ts.map +1 -1
- package/lib/cloudflare/astro/astro.js +3 -1
- package/lib/cloudflare/astro/astro.js.map +1 -1
- package/lib/cloudflare/astro/plugin.d.ts +2 -1
- package/lib/cloudflare/astro/plugin.d.ts.map +1 -1
- package/lib/cloudflare/astro/plugin.js.map +1 -1
- package/lib/cloudflare/bindings.d.ts +2 -2
- package/lib/cloudflare/bindings.d.ts.map +1 -1
- package/lib/cloudflare/bound.d.ts +1 -1
- package/lib/cloudflare/bound.d.ts.map +1 -1
- package/lib/cloudflare/bucket.d.ts +120 -1
- package/lib/cloudflare/bucket.d.ts.map +1 -1
- package/lib/cloudflare/bucket.js +80 -2
- package/lib/cloudflare/bucket.js.map +1 -1
- package/lib/cloudflare/compatibility-date.gen.d.ts +1 -1
- package/lib/cloudflare/compatibility-date.gen.js +1 -1
- package/lib/cloudflare/container.d.ts +10 -4
- package/lib/cloudflare/container.d.ts.map +1 -1
- package/lib/cloudflare/container.js +12 -9
- package/lib/cloudflare/container.js.map +1 -1
- package/lib/cloudflare/custom-domain.js +2 -1
- package/lib/cloudflare/custom-domain.js.map +1 -1
- package/lib/cloudflare/d1-database.d.ts +1 -1
- package/lib/cloudflare/d1-database.d.ts.map +1 -1
- package/lib/cloudflare/d1-database.js +6 -2
- package/lib/cloudflare/d1-database.js.map +1 -1
- package/lib/cloudflare/dispatch-namespace.d.ts +2 -0
- package/lib/cloudflare/dispatch-namespace.d.ts.map +1 -1
- package/lib/cloudflare/dispatch-namespace.js +7 -5
- package/lib/cloudflare/dispatch-namespace.js.map +1 -1
- package/lib/cloudflare/hyperdrive.d.ts +7 -1
- package/lib/cloudflare/hyperdrive.d.ts.map +1 -1
- package/lib/cloudflare/hyperdrive.js +2 -1
- package/lib/cloudflare/hyperdrive.js.map +1 -1
- package/lib/cloudflare/kv-namespace.d.ts +3 -0
- package/lib/cloudflare/kv-namespace.d.ts.map +1 -1
- package/lib/cloudflare/kv-namespace.js +11 -2
- package/lib/cloudflare/kv-namespace.js.map +1 -1
- package/lib/cloudflare/miniflare/miniflare-worker-proxy.js +3 -1
- package/lib/cloudflare/miniflare/miniflare-worker-proxy.js.map +1 -1
- package/lib/cloudflare/miniflare/paths.d.ts +4 -0
- package/lib/cloudflare/miniflare/paths.d.ts.map +1 -1
- package/lib/cloudflare/miniflare/paths.js +11 -0
- package/lib/cloudflare/miniflare/paths.js.map +1 -1
- package/lib/cloudflare/pipeline.d.ts +14 -3
- package/lib/cloudflare/pipeline.d.ts.map +1 -1
- package/lib/cloudflare/pipeline.js +31 -2
- package/lib/cloudflare/pipeline.js.map +1 -1
- package/lib/cloudflare/queue-consumer.js +1 -1
- package/lib/cloudflare/queue-consumer.js.map +1 -1
- package/lib/cloudflare/queue.d.ts +4 -2
- package/lib/cloudflare/queue.d.ts.map +1 -1
- package/lib/cloudflare/queue.js +13 -9
- package/lib/cloudflare/queue.js.map +1 -1
- package/lib/cloudflare/react-router/plugin.d.ts +1 -1
- package/lib/cloudflare/react-router/plugin.d.ts.map +1 -1
- package/lib/cloudflare/react-router/react-router.d.ts.map +1 -1
- package/lib/cloudflare/react-router/react-router.js +32 -2
- package/lib/cloudflare/react-router/react-router.js.map +1 -1
- package/lib/cloudflare/redwood/plugin.d.ts +2 -1
- package/lib/cloudflare/redwood/plugin.d.ts.map +1 -1
- package/lib/cloudflare/redwood/plugin.js.map +1 -1
- package/lib/cloudflare/route.js +1 -1
- package/lib/cloudflare/route.js.map +1 -1
- package/lib/cloudflare/ruleset.d.ts +3 -1
- package/lib/cloudflare/ruleset.d.ts.map +1 -1
- package/lib/cloudflare/ruleset.js +3 -2
- package/lib/cloudflare/ruleset.js.map +1 -1
- package/lib/cloudflare/secret.d.ts +6 -23
- package/lib/cloudflare/secret.d.ts.map +1 -1
- package/lib/cloudflare/secret.js +8 -4
- package/lib/cloudflare/secret.js.map +1 -1
- package/lib/cloudflare/secrets-store.d.ts +1 -1
- package/lib/cloudflare/secrets-store.d.ts.map +1 -1
- package/lib/cloudflare/secrets-store.js +5 -2
- package/lib/cloudflare/secrets-store.js.map +1 -1
- package/lib/cloudflare/tunnel.d.ts +5 -1
- package/lib/cloudflare/tunnel.d.ts.map +1 -1
- package/lib/cloudflare/tunnel.js +5 -1
- package/lib/cloudflare/tunnel.js.map +1 -1
- package/lib/cloudflare/vectorize-index.d.ts +7 -1
- package/lib/cloudflare/vectorize-index.d.ts.map +1 -1
- package/lib/cloudflare/vectorize-index.js +5 -2
- package/lib/cloudflare/vectorize-index.js.map +1 -1
- package/lib/cloudflare/vite/plugin.d.ts +2 -1
- package/lib/cloudflare/vite/plugin.d.ts.map +1 -1
- package/lib/cloudflare/vite/plugin.js.map +1 -1
- package/lib/cloudflare/website.js +1 -1
- package/lib/cloudflare/website.js.map +1 -1
- package/lib/cloudflare/worker.d.ts +1 -1
- package/lib/cloudflare/worker.d.ts.map +1 -1
- package/lib/cloudflare/worker.js +12 -7
- package/lib/cloudflare/worker.js.map +1 -1
- package/lib/cloudflare/wrangler.json.d.ts +1 -1
- package/lib/cloudflare/wrangler.json.d.ts.map +1 -1
- package/lib/cloudflare/wrangler.json.js +5 -3
- package/lib/cloudflare/wrangler.json.js.map +1 -1
- package/lib/docker/container.d.ts +6 -0
- package/lib/docker/container.d.ts.map +1 -1
- package/lib/docker/container.js +5 -1
- package/lib/docker/container.js.map +1 -1
- package/lib/docker/network.d.ts +8 -2
- package/lib/docker/network.d.ts.map +1 -1
- package/lib/docker/network.js +7 -2
- package/lib/docker/network.js.map +1 -1
- package/lib/docker/volume.d.ts +8 -2
- package/lib/docker/volume.d.ts.map +1 -1
- package/lib/docker/volume.js +6 -4
- package/lib/docker/volume.js.map +1 -1
- package/lib/esbuild/bundle.d.ts +1 -1
- package/lib/fs/index.d.ts +0 -8
- package/lib/fs/index.d.ts.map +1 -1
- package/lib/fs/index.js +0 -8
- package/lib/fs/index.js.map +1 -1
- package/lib/github/client.d.ts +1 -1
- package/lib/github/client.d.ts.map +1 -1
- package/lib/github/client.js +2 -1
- package/lib/github/client.js.map +1 -1
- package/lib/github/repository-environment.d.ts +8 -2
- package/lib/github/repository-environment.d.ts.map +1 -1
- package/lib/github/repository-environment.js +16 -12
- package/lib/github/repository-environment.js.map +1 -1
- package/lib/neon/project.d.ts +7 -1
- package/lib/neon/project.d.ts.map +1 -1
- package/lib/neon/project.js +10 -6
- package/lib/neon/project.js.map +1 -1
- package/lib/planetscale/branch.d.ts +4 -2
- package/lib/planetscale/branch.d.ts.map +1 -1
- package/lib/planetscale/branch.js +18 -12
- package/lib/planetscale/branch.js.map +1 -1
- package/lib/planetscale/database.d.ts +8 -2
- package/lib/planetscale/database.d.ts.map +1 -1
- package/lib/planetscale/database.js +24 -16
- package/lib/planetscale/database.js.map +1 -1
- package/lib/planetscale/password.d.ts +8 -2
- package/lib/planetscale/password.d.ts.map +1 -1
- package/lib/planetscale/password.js +2 -2
- package/lib/planetscale/password.js.map +1 -1
- package/lib/resource.d.ts +0 -2
- package/lib/resource.d.ts.map +1 -1
- package/lib/resource.js +1 -9
- package/lib/resource.js.map +1 -1
- package/lib/scope.d.ts +9 -3
- package/lib/scope.d.ts.map +1 -1
- package/lib/scope.js +21 -34
- package/lib/scope.js.map +1 -1
- package/lib/sentry/client-key.d.ts +7 -1
- package/lib/sentry/client-key.d.ts.map +1 -1
- package/lib/sentry/client-key.js +45 -6
- package/lib/sentry/client-key.js.map +1 -1
- package/lib/sentry/project.d.ts +8 -2
- package/lib/sentry/project.d.ts.map +1 -1
- package/lib/sentry/project.js +35 -5
- package/lib/sentry/project.js.map +1 -1
- package/lib/sentry/team.d.ts +8 -2
- package/lib/sentry/team.d.ts.map +1 -1
- package/lib/sentry/team.js +36 -6
- package/lib/sentry/team.js.map +1 -1
- package/lib/serde.d.ts +0 -5
- package/lib/serde.d.ts.map +1 -1
- package/lib/serde.js +0 -28
- package/lib/serde.js.map +1 -1
- package/lib/state/d1-state-store.d.ts +1 -1
- package/lib/state/d1-state-store.d.ts.map +1 -1
- package/lib/state/d1-state-store.js +5 -5
- package/lib/state/d1-state-store.js.map +1 -1
- package/lib/state/sqlite-state-store.d.ts.map +1 -1
- package/lib/state/sqlite-state-store.js +7 -11
- package/lib/state/sqlite-state-store.js.map +1 -1
- package/lib/stripe/card.d.ts.map +1 -1
- package/lib/stripe/card.js +3 -2
- package/lib/stripe/card.js.map +1 -1
- package/lib/stripe/client.d.ts +2 -2
- package/lib/stripe/client.d.ts.map +1 -1
- package/lib/stripe/client.js +4 -3
- package/lib/stripe/client.js.map +1 -1
- package/lib/stripe/coupon.d.ts.map +1 -1
- package/lib/stripe/coupon.js +4 -3
- package/lib/stripe/coupon.js.map +1 -1
- package/lib/stripe/customer.js +2 -2
- package/lib/stripe/customer.js.map +1 -1
- package/lib/stripe/entitlements-feature.d.ts.map +1 -1
- package/lib/stripe/entitlements-feature.js +3 -2
- package/lib/stripe/entitlements-feature.js.map +1 -1
- package/lib/stripe/file.d.ts.map +1 -1
- package/lib/stripe/file.js +3 -2
- package/lib/stripe/file.js.map +1 -1
- package/lib/stripe/meter.js +2 -2
- package/lib/stripe/meter.js.map +1 -1
- package/lib/stripe/portal-configuration.d.ts.map +1 -1
- package/lib/stripe/portal-configuration.js +3 -2
- package/lib/stripe/portal-configuration.js.map +1 -1
- package/lib/stripe/price.d.ts.map +1 -1
- package/lib/stripe/price.js +3 -2
- package/lib/stripe/price.js.map +1 -1
- package/lib/stripe/product-feature.d.ts.map +1 -1
- package/lib/stripe/product-feature.js +3 -2
- package/lib/stripe/product-feature.js.map +1 -1
- package/lib/stripe/product.d.ts.map +1 -1
- package/lib/stripe/product.js +3 -2
- package/lib/stripe/product.js.map +1 -1
- package/lib/stripe/promotion-code.d.ts.map +1 -1
- package/lib/stripe/promotion-code.js +3 -2
- package/lib/stripe/promotion-code.js.map +1 -1
- package/lib/stripe/shipping-rate.d.ts.map +1 -1
- package/lib/stripe/shipping-rate.js +4 -3
- package/lib/stripe/shipping-rate.js.map +1 -1
- package/lib/stripe/tax-rate.d.ts.map +1 -1
- package/lib/stripe/tax-rate.js +3 -2
- package/lib/stripe/tax-rate.js.map +1 -1
- package/lib/stripe/webhook.d.ts.map +1 -1
- package/lib/stripe/webhook.js +4 -3
- package/lib/stripe/webhook.js.map +1 -1
- package/lib/test/vitest.d.ts.map +1 -1
- package/lib/test/vitest.js +1 -0
- package/lib/test/vitest.js.map +1 -1
- package/lib/upstash/redis.d.ts +8 -2
- package/lib/upstash/redis.d.ts.map +1 -1
- package/lib/upstash/redis.js +5 -4
- package/lib/upstash/redis.js.map +1 -1
- package/lib/util/ignore-matcher.d.ts.map +1 -1
- package/lib/util/ignore-matcher.js +3 -1
- package/lib/util/ignore-matcher.js.map +1 -1
- package/lib/util/peer.d.ts +10 -0
- package/lib/util/peer.d.ts.map +1 -0
- package/lib/util/peer.js +42 -0
- package/lib/util/peer.js.map +1 -0
- package/lib/vercel/project.d.ts +7 -1
- package/lib/vercel/project.d.ts.map +1 -1
- package/lib/vercel/project.js +28 -0
- package/lib/vercel/project.js.map +1 -1
- package/package.json +88 -74
- package/src/alchemy.ts +76 -222
- package/src/apply.ts +6 -19
- package/src/aws/account-id.ts +6 -3
- package/src/aws/bucket.ts +43 -32
- package/src/aws/ec2/security-group.ts +15 -3
- package/src/aws/function.ts +65 -39
- package/src/aws/policy-attachment.ts +10 -6
- package/src/aws/policy.ts +33 -15
- package/src/aws/queue.ts +50 -29
- package/src/aws/role.ts +37 -20
- package/src/aws/ses.ts +24 -20
- package/src/aws/ssm-parameter.ts +40 -20
- package/src/aws/table.ts +35 -17
- package/src/cloudflare/account-api-token.ts +9 -7
- package/src/cloudflare/ai-gateway.ts +37 -34
- package/src/cloudflare/api-schema.ts +33 -26
- package/src/cloudflare/api-shield.ts +15 -2
- package/src/cloudflare/astro/astro.ts +5 -1
- package/src/cloudflare/astro/plugin.ts +2 -1
- package/src/cloudflare/bindings.ts +2 -2
- package/src/cloudflare/bound.ts +1 -1
- package/src/cloudflare/bucket.ts +242 -3
- package/src/cloudflare/compatibility-date.gen.ts +1 -1
- package/src/cloudflare/container.ts +23 -12
- package/src/cloudflare/custom-domain.ts +2 -2
- package/src/cloudflare/d1-database.ts +10 -3
- package/src/cloudflare/dispatch-namespace.ts +10 -7
- package/src/cloudflare/hyperdrive.ts +13 -3
- package/src/cloudflare/kv-namespace.ts +25 -2
- package/src/cloudflare/miniflare/miniflare-worker-proxy.ts +3 -1
- package/src/cloudflare/miniflare/paths.ts +13 -0
- package/src/cloudflare/pipeline.ts +76 -28
- package/src/cloudflare/queue-consumer.ts +1 -1
- package/src/cloudflare/queue.ts +26 -14
- package/src/cloudflare/react-router/react-router.ts +28 -2
- package/src/cloudflare/redwood/plugin.ts +3 -2
- package/src/cloudflare/route.ts +1 -1
- package/src/cloudflare/ruleset.ts +7 -2
- package/src/cloudflare/secret.ts +20 -31
- package/src/cloudflare/secrets-store.ts +7 -3
- package/src/cloudflare/tunnel.ts +13 -2
- package/src/cloudflare/vectorize-index.ts +14 -3
- package/src/cloudflare/vite/plugin.ts +3 -2
- package/src/cloudflare/website.ts +1 -1
- package/src/cloudflare/worker.ts +35 -23
- package/src/cloudflare/wrangler.json.ts +7 -4
- package/src/docker/container.ts +13 -1
- package/src/docker/network.ts +18 -3
- package/src/docker/volume.ts +17 -6
- package/src/fs/index.ts +0 -8
- package/src/github/client.ts +6 -2
- package/src/github/repository-environment.ts +27 -13
- package/src/neon/project.ts +20 -6
- package/src/planetscale/branch.ts +24 -13
- package/src/planetscale/database.ts +38 -17
- package/src/planetscale/password.ts +10 -3
- package/src/resource.ts +1 -10
- package/src/scope.ts +29 -38
- package/src/sentry/client-key.ts +74 -6
- package/src/sentry/project.ts +59 -6
- package/src/sentry/team.ts +55 -7
- package/src/serde.ts +0 -44
- package/src/state/d1-state-store.ts +13 -6
- package/src/state/sqlite-state-store.ts +16 -17
- package/src/stripe/card.ts +5 -2
- package/src/stripe/client.ts +10 -3
- package/src/stripe/coupon.ts +4 -3
- package/src/stripe/customer.ts +2 -2
- package/src/stripe/entitlements-feature.ts +5 -2
- package/src/stripe/file.ts +3 -2
- package/src/stripe/meter.ts +2 -2
- package/src/stripe/portal-configuration.ts +5 -2
- package/src/stripe/price.ts +3 -2
- package/src/stripe/product-feature.ts +5 -2
- package/src/stripe/product.ts +3 -2
- package/src/stripe/promotion-code.ts +3 -2
- package/src/stripe/shipping-rate.ts +4 -3
- package/src/stripe/tax-rate.ts +3 -2
- package/src/stripe/webhook.ts +4 -3
- package/src/test/vitest.ts +1 -0
- package/src/upstash/redis.ts +15 -5
- package/src/util/ignore-matcher.ts +3 -1
- package/src/util/peer.ts +53 -0
- package/src/vercel/project.ts +46 -1
- package/templates/hono/README.md +19 -0
- package/templates/hono/_env +1 -0
- package/templates/hono/_env.example +1 -0
- package/templates/hono/_gitignore +34 -0
- package/templates/hono/alchemy.run.ts +22 -0
- package/templates/hono/package.json +18 -0
- package/templates/hono/src/index.ts +17 -0
- package/templates/hono/tsconfig.json +13 -0
- package/templates/hono/types/env.d.ts +16 -0
- package/templates/react-router/vite.config.ts +5 -3
- package/workers/cloudflare-state-store.js +69 -74
- package/workers/dofs-state-store.js +1 -1
- package/bin/bootstrap-s3.ts +0 -255
- package/lib/ai/ark.d.ts +0 -12
- package/lib/ai/ark.d.ts.map +0 -1
- package/lib/ai/ark.js +0 -87
- package/lib/ai/ark.js.map +0 -1
- package/lib/ai/astro-file.d.ts +0 -138
- package/lib/ai/astro-file.d.ts.map +0 -1
- package/lib/ai/astro-file.js +0 -158
- package/lib/ai/astro-file.js.map +0 -1
- package/lib/ai/client.d.ts +0 -51
- package/lib/ai/client.d.ts.map +0 -1
- package/lib/ai/client.js +0 -58
- package/lib/ai/client.js.map +0 -1
- package/lib/ai/css-file.d.ts +0 -132
- package/lib/ai/css-file.d.ts.map +0 -1
- package/lib/ai/css-file.js +0 -142
- package/lib/ai/css-file.js.map +0 -1
- package/lib/ai/data.d.ts +0 -152
- package/lib/ai/data.d.ts.map +0 -1
- package/lib/ai/data.js +0 -120
- package/lib/ai/data.js.map +0 -1
- package/lib/ai/document.d.ts +0 -208
- package/lib/ai/document.d.ts.map +0 -1
- package/lib/ai/document.js +0 -206
- package/lib/ai/document.js.map +0 -1
- package/lib/ai/html-file.d.ts +0 -129
- package/lib/ai/html-file.d.ts.map +0 -1
- package/lib/ai/html-file.js +0 -139
- package/lib/ai/html-file.js.map +0 -1
- package/lib/ai/index.d.ts +0 -11
- package/lib/ai/index.d.ts.map +0 -1
- package/lib/ai/index.js +0 -11
- package/lib/ai/index.js.map +0 -1
- package/lib/ai/json-file.d.ts +0 -161
- package/lib/ai/json-file.d.ts.map +0 -1
- package/lib/ai/json-file.js +0 -188
- package/lib/ai/json-file.js.map +0 -1
- package/lib/ai/typescript-file.d.ts +0 -140
- package/lib/ai/typescript-file.d.ts.map +0 -1
- package/lib/ai/typescript-file.js +0 -146
- package/lib/ai/typescript-file.js.map +0 -1
- package/lib/ai/vue-file.d.ts +0 -127
- package/lib/ai/vue-file.d.ts.map +0 -1
- package/lib/ai/vue-file.js +0 -137
- package/lib/ai/vue-file.js.map +0 -1
- package/lib/ai/yaml-file.d.ts +0 -170
- package/lib/ai/yaml-file.d.ts.map +0 -1
- package/lib/ai/yaml-file.js +0 -201
- package/lib/ai/yaml-file.js.map +0 -1
- package/lib/fs/static-astro-file.d.ts +0 -35
- package/lib/fs/static-astro-file.d.ts.map +0 -1
- package/lib/fs/static-astro-file.js +0 -40
- package/lib/fs/static-astro-file.js.map +0 -1
- package/lib/fs/static-css-file.d.ts +0 -25
- package/lib/fs/static-css-file.d.ts.map +0 -1
- package/lib/fs/static-css-file.js +0 -30
- package/lib/fs/static-css-file.js.map +0 -1
- package/lib/fs/static-html-file.d.ts +0 -32
- package/lib/fs/static-html-file.d.ts.map +0 -1
- package/lib/fs/static-html-file.js +0 -37
- package/lib/fs/static-html-file.js.map +0 -1
- package/lib/fs/static-json-file.d.ts +0 -18
- package/lib/fs/static-json-file.d.ts.map +0 -1
- package/lib/fs/static-json-file.js +0 -19
- package/lib/fs/static-json-file.js.map +0 -1
- package/lib/fs/static-text-file.d.ts +0 -13
- package/lib/fs/static-text-file.d.ts.map +0 -1
- package/lib/fs/static-text-file.js +0 -9
- package/lib/fs/static-text-file.js.map +0 -1
- package/lib/fs/static-typescript-file.d.ts +0 -20
- package/lib/fs/static-typescript-file.d.ts.map +0 -1
- package/lib/fs/static-typescript-file.js +0 -16
- package/lib/fs/static-typescript-file.js.map +0 -1
- package/lib/fs/static-vue-file.d.ts +0 -29
- package/lib/fs/static-vue-file.d.ts.map +0 -1
- package/lib/fs/static-vue-file.js +0 -34
- package/lib/fs/static-vue-file.js.map +0 -1
- package/lib/fs/static-yaml-file.d.ts +0 -23
- package/lib/fs/static-yaml-file.d.ts.map +0 -1
- package/lib/fs/static-yaml-file.js +0 -10
- package/lib/fs/static-yaml-file.js.map +0 -1
- package/lib/internal/docs/providers.d.ts +0 -34
- package/lib/internal/docs/providers.d.ts.map +0 -1
- package/lib/internal/docs/providers.js +0 -200
- package/lib/internal/docs/providers.js.map +0 -1
- package/lib/runtime/bind.d.ts +0 -25
- package/lib/runtime/bind.d.ts.map +0 -1
- package/lib/runtime/bind.js +0 -76
- package/lib/runtime/bind.js.map +0 -1
- package/lib/runtime/global.d.ts +0 -8
- package/lib/runtime/global.d.ts.map +0 -1
- package/lib/runtime/global.js +0 -3
- package/lib/runtime/global.js.map +0 -1
- package/lib/runtime/plugin.d.ts +0 -35
- package/lib/runtime/plugin.d.ts.map +0 -1
- package/lib/runtime/plugin.js +0 -134
- package/lib/runtime/plugin.js.map +0 -1
- package/lib/runtime/shims.d.ts +0 -6
- package/lib/runtime/shims.d.ts.map +0 -1
- package/lib/runtime/shims.js +0 -27
- package/lib/runtime/shims.js.map +0 -1
- package/lib/runtime/state.d.ts +0 -5
- package/lib/runtime/state.d.ts.map +0 -1
- package/lib/runtime/state.js +0 -4
- package/lib/runtime/state.js.map +0 -1
- package/lib/web/astro.d.ts +0 -148
- package/lib/web/astro.d.ts.map +0 -1
- package/lib/web/astro.js +0 -419
- package/lib/web/astro.js.map +0 -1
- package/lib/web/shadcn-component.d.ts +0 -30
- package/lib/web/shadcn-component.d.ts.map +0 -1
- package/lib/web/shadcn-component.js +0 -25
- package/lib/web/shadcn-component.js.map +0 -1
- package/lib/web/shadcn.d.ts +0 -98
- package/lib/web/shadcn.d.ts.map +0 -1
- package/lib/web/shadcn.js +0 -102
- package/lib/web/shadcn.js.map +0 -1
- package/lib/web/tailwind.d.ts +0 -65
- package/lib/web/tailwind.d.ts.map +0 -1
- package/lib/web/tailwind.js +0 -98
- package/lib/web/tailwind.js.map +0 -1
- package/lib/web/vite.d.ts +0 -96
- package/lib/web/vite.d.ts.map +0 -1
- package/lib/web/vite.js +0 -232
- package/lib/web/vite.js.map +0 -1
- package/lib/web/vitepress/config.d.ts +0 -12
- package/lib/web/vitepress/config.d.ts.map +0 -1
- package/lib/web/vitepress/config.js +0 -33
- package/lib/web/vitepress/config.js.map +0 -1
- package/lib/web/vitepress/custom-theme.d.ts +0 -174
- package/lib/web/vitepress/custom-theme.d.ts.map +0 -1
- package/lib/web/vitepress/custom-theme.js +0 -337
- package/lib/web/vitepress/custom-theme.js.map +0 -1
- package/lib/web/vitepress/dependencies.d.ts +0 -13
- package/lib/web/vitepress/dependencies.d.ts.map +0 -1
- package/lib/web/vitepress/dependencies.js +0 -37
- package/lib/web/vitepress/dependencies.js.map +0 -1
- package/lib/web/vitepress/home-page.d.ts +0 -247
- package/lib/web/vitepress/home-page.d.ts.map +0 -1
- package/lib/web/vitepress/home-page.js +0 -146
- package/lib/web/vitepress/home-page.js.map +0 -1
- package/lib/web/vitepress/index.d.ts +0 -6
- package/lib/web/vitepress/index.d.ts.map +0 -1
- package/lib/web/vitepress/index.js +0 -6
- package/lib/web/vitepress/index.js.map +0 -1
- package/lib/web/vitepress/process-front-matter-files.d.ts +0 -19
- package/lib/web/vitepress/process-front-matter-files.d.ts.map +0 -1
- package/lib/web/vitepress/process-front-matter-files.js +0 -73
- package/lib/web/vitepress/process-front-matter-files.js.map +0 -1
- package/lib/web/vitepress/vitepress.d.ts +0 -75
- package/lib/web/vitepress/vitepress.d.ts.map +0 -1
- package/lib/web/vitepress/vitepress.js +0 -254
- package/lib/web/vitepress/vitepress.js.map +0 -1
- package/src/ai/ark.ts +0 -118
- package/src/ai/astro-file.ts +0 -270
- package/src/ai/client.ts +0 -117
- package/src/ai/css-file.ts +0 -247
- package/src/ai/data.ts +0 -221
- package/src/ai/document.ts +0 -367
- package/src/ai/html-file.ts +0 -244
- package/src/ai/index.ts +0 -10
- package/src/ai/json-file.ts +0 -325
- package/src/ai/typescript-file.ts +0 -259
- package/src/ai/vue-file.ts +0 -242
- package/src/ai/yaml-file.ts +0 -328
- package/src/fs/static-astro-file.ts +0 -45
- package/src/fs/static-css-file.ts +0 -35
- package/src/fs/static-html-file.ts +0 -42
- package/src/fs/static-json-file.ts +0 -38
- package/src/fs/static-text-file.ts +0 -23
- package/src/fs/static-typescript-file.ts +0 -37
- package/src/fs/static-vue-file.ts +0 -39
- package/src/fs/static-yaml-file.ts +0 -33
- package/src/internal/docs/providers.ts +0 -286
- package/src/runtime/bind.ts +0 -95
- package/src/runtime/global.ts +0 -10
- package/src/runtime/plugin.ts +0 -163
- package/src/runtime/shims.js +0 -34
- package/src/runtime/state.ts +0 -9
- package/src/web/astro.ts +0 -643
- package/src/web/shadcn-component.ts +0 -72
- package/src/web/shadcn.ts +0 -221
- package/src/web/tailwind.ts +0 -167
- package/src/web/vite.ts +0 -407
- package/src/web/vitepress/config.ts +0 -50
- package/src/web/vitepress/custom-theme.ts +0 -514
- package/src/web/vitepress/dependencies.ts +0 -69
- package/src/web/vitepress/home-page.ts +0 -378
- package/src/web/vitepress/index.ts +0 -5
- package/src/web/vitepress/process-front-matter-files.ts +0 -107
- package/src/web/vitepress/vitepress.ts +0 -372
- package/templates/sveltekit/bun.lock +0 -1099
package/src/apply.ts
CHANGED
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
type Resource,
|
|
14
14
|
type ResourceProps,
|
|
15
15
|
} from "./resource.ts";
|
|
16
|
-
import {
|
|
16
|
+
import type { PendingDeletions } from "./scope.ts";
|
|
17
17
|
import { serialize } from "./serde.ts";
|
|
18
18
|
import { formatFQN } from "./util/cli.ts";
|
|
19
19
|
import { logger } from "./util/logger.ts";
|
|
@@ -22,7 +22,6 @@ import type { Telemetry } from "./util/telemetry/index.ts";
|
|
|
22
22
|
export interface ApplyOptions {
|
|
23
23
|
quiet?: boolean;
|
|
24
24
|
alwaysUpdate?: boolean;
|
|
25
|
-
resolveInnerScope?: (scope: Scope) => void;
|
|
26
25
|
}
|
|
27
26
|
|
|
28
27
|
export function apply<Out extends Resource>(
|
|
@@ -63,12 +62,6 @@ async function _apply<Out extends Resource>(
|
|
|
63
62
|
`Resource "${resource[ResourceFQN]}" not found and running in 'read' phase.`,
|
|
64
63
|
);
|
|
65
64
|
}
|
|
66
|
-
options?.resolveInnerScope?.(
|
|
67
|
-
new Scope({
|
|
68
|
-
parent: scope,
|
|
69
|
-
scopeName: resource[ResourceID],
|
|
70
|
-
}),
|
|
71
|
-
);
|
|
72
65
|
scope.telemetryClient.record({
|
|
73
66
|
event: "resource.read",
|
|
74
67
|
resource: resource[ResourceKind],
|
|
@@ -115,11 +108,6 @@ async function _apply<Out extends Resource>(
|
|
|
115
108
|
alwaysUpdate !== true &&
|
|
116
109
|
!scope.force
|
|
117
110
|
) {
|
|
118
|
-
const innerScope = new Scope({
|
|
119
|
-
parent: scope,
|
|
120
|
-
scopeName: resource[ResourceID],
|
|
121
|
-
});
|
|
122
|
-
innerScope.skip();
|
|
123
111
|
if (!quiet) {
|
|
124
112
|
logger.task(resource[ResourceFQN], {
|
|
125
113
|
prefix: "skipped",
|
|
@@ -129,7 +117,6 @@ async function _apply<Out extends Resource>(
|
|
|
129
117
|
status: "success",
|
|
130
118
|
});
|
|
131
119
|
}
|
|
132
|
-
options?.resolveInnerScope?.(innerScope);
|
|
133
120
|
scope.telemetryClient.record({
|
|
134
121
|
event: "resource.skip",
|
|
135
122
|
resource: resource[ResourceKind],
|
|
@@ -199,10 +186,8 @@ async function _apply<Out extends Resource>(
|
|
|
199
186
|
parent: scope,
|
|
200
187
|
destroyStrategy: provider.options?.destroyStrategy ?? "sequential",
|
|
201
188
|
},
|
|
202
|
-
async (
|
|
203
|
-
|
|
204
|
-
return provider.handler.bind(ctx)(resource[ResourceID], props);
|
|
205
|
-
},
|
|
189
|
+
async () =>
|
|
190
|
+
await provider.handler.bind(ctx)(resource[ResourceID], props),
|
|
206
191
|
);
|
|
207
192
|
} catch (error) {
|
|
208
193
|
if (error instanceof ReplacedSignal) {
|
|
@@ -216,7 +201,9 @@ async function _apply<Out extends Resource>(
|
|
|
216
201
|
},
|
|
217
202
|
});
|
|
218
203
|
} else {
|
|
219
|
-
if (
|
|
204
|
+
if (
|
|
205
|
+
(scope.children.get(resource[ResourceID])?.children.size ?? 0) > 0
|
|
206
|
+
) {
|
|
220
207
|
throw new Error(
|
|
221
208
|
`Resource ${resource[ResourceFQN]} has children and cannot be replaced.`,
|
|
222
209
|
);
|
package/src/aws/account-id.ts
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
const sts = new STSClient({});
|
|
1
|
+
import { importPeer } from "../util/peer.ts";
|
|
4
2
|
|
|
5
3
|
export type AccountId = string & {
|
|
6
4
|
readonly __brand: "AccountId";
|
|
@@ -10,6 +8,11 @@ export type AccountId = string & {
|
|
|
10
8
|
* Helper to get the current AWS account ID
|
|
11
9
|
*/
|
|
12
10
|
export async function AccountId(): Promise<AccountId> {
|
|
11
|
+
const { GetCallerIdentityCommand, STSClient } = await importPeer(
|
|
12
|
+
import("@aws-sdk/client-sts"),
|
|
13
|
+
"aws::AccountId",
|
|
14
|
+
);
|
|
15
|
+
const sts = new STSClient({});
|
|
13
16
|
const identity = await sts.send(new GetCallerIdentityCommand({}));
|
|
14
17
|
return identity.Account! as AccountId;
|
|
15
18
|
}
|
package/src/aws/bucket.ts
CHANGED
|
@@ -1,18 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
CreateBucketCommand,
|
|
3
|
-
DeleteBucketCommand,
|
|
4
|
-
GetBucketAclCommand,
|
|
5
|
-
GetBucketLocationCommand,
|
|
6
|
-
GetBucketTaggingCommand,
|
|
7
|
-
GetBucketVersioningCommand,
|
|
8
|
-
HeadBucketCommand,
|
|
9
|
-
NoSuchBucket,
|
|
10
|
-
PutBucketTaggingCommand,
|
|
11
|
-
S3Client,
|
|
12
|
-
} from "@aws-sdk/client-s3";
|
|
13
1
|
import type { Context } from "../context.ts";
|
|
14
2
|
import { Resource } from "../resource.ts";
|
|
15
3
|
import { ignore } from "../util/ignore.ts";
|
|
4
|
+
import { importPeer } from "../util/peer.ts";
|
|
16
5
|
import { retry } from "./retry.ts";
|
|
17
6
|
|
|
18
7
|
/**
|
|
@@ -22,8 +11,10 @@ export interface BucketProps {
|
|
|
22
11
|
/**
|
|
23
12
|
* The name of the bucket. Must be globally unique across all AWS accounts.
|
|
24
13
|
* Should be lowercase alphanumeric characters or hyphens.
|
|
14
|
+
*
|
|
15
|
+
* @default ${app}-${stage}-${id}
|
|
25
16
|
*/
|
|
26
|
-
bucketName
|
|
17
|
+
bucketName?: string;
|
|
27
18
|
|
|
28
19
|
/**
|
|
29
20
|
* Optional tags to apply to the bucket for organization and cost tracking.
|
|
@@ -42,6 +33,11 @@ export interface Bucket extends Resource<"s3::Bucket">, BucketProps {
|
|
|
42
33
|
*/
|
|
43
34
|
arn: string;
|
|
44
35
|
|
|
36
|
+
/**
|
|
37
|
+
* Name of the Bucket.
|
|
38
|
+
*/
|
|
39
|
+
bucketName: string;
|
|
40
|
+
|
|
45
41
|
/**
|
|
46
42
|
* The global domain name for the bucket
|
|
47
43
|
* Format: bucket-name.s3.amazonaws.com
|
|
@@ -129,15 +125,36 @@ export interface Bucket extends Resource<"s3::Bucket">, BucketProps {
|
|
|
129
125
|
*/
|
|
130
126
|
export const Bucket = Resource(
|
|
131
127
|
"s3::Bucket",
|
|
132
|
-
async function (this: Context<Bucket>,
|
|
128
|
+
async function (this: Context<Bucket>, id: string, props: BucketProps) {
|
|
129
|
+
const {
|
|
130
|
+
CreateBucketCommand,
|
|
131
|
+
DeleteBucketCommand,
|
|
132
|
+
GetBucketAclCommand,
|
|
133
|
+
GetBucketLocationCommand,
|
|
134
|
+
GetBucketTaggingCommand,
|
|
135
|
+
GetBucketVersioningCommand,
|
|
136
|
+
HeadBucketCommand,
|
|
137
|
+
NoSuchBucket,
|
|
138
|
+
PutBucketTaggingCommand,
|
|
139
|
+
S3Client,
|
|
140
|
+
} = await importPeer(import("@aws-sdk/client-s3"), "s3::Bucket");
|
|
133
141
|
const client = new S3Client({});
|
|
134
142
|
|
|
143
|
+
const bucketName =
|
|
144
|
+
props.bucketName ??
|
|
145
|
+
this.output?.bucketName ??
|
|
146
|
+
this.scope.createPhysicalName(id);
|
|
147
|
+
|
|
148
|
+
if (this.phase === "update" && this.output.bucketName !== bucketName) {
|
|
149
|
+
this.replace();
|
|
150
|
+
}
|
|
151
|
+
|
|
135
152
|
if (this.phase === "delete") {
|
|
136
153
|
await ignore(NoSuchBucket.name, () =>
|
|
137
154
|
retry(() =>
|
|
138
155
|
client.send(
|
|
139
156
|
new DeleteBucketCommand({
|
|
140
|
-
Bucket:
|
|
157
|
+
Bucket: bucketName,
|
|
141
158
|
}),
|
|
142
159
|
),
|
|
143
160
|
),
|
|
@@ -149,7 +166,7 @@ export const Bucket = Resource(
|
|
|
149
166
|
await retry(() =>
|
|
150
167
|
client.send(
|
|
151
168
|
new HeadBucketCommand({
|
|
152
|
-
Bucket:
|
|
169
|
+
Bucket: bucketName,
|
|
153
170
|
}),
|
|
154
171
|
),
|
|
155
172
|
);
|
|
@@ -159,7 +176,7 @@ export const Bucket = Resource(
|
|
|
159
176
|
await retry(() =>
|
|
160
177
|
client.send(
|
|
161
178
|
new PutBucketTaggingCommand({
|
|
162
|
-
Bucket:
|
|
179
|
+
Bucket: bucketName,
|
|
163
180
|
Tagging: {
|
|
164
181
|
TagSet: Object.entries(props.tags!).map(([Key, Value]) => ({
|
|
165
182
|
Key,
|
|
@@ -176,7 +193,7 @@ export const Bucket = Resource(
|
|
|
176
193
|
await retry(() =>
|
|
177
194
|
client.send(
|
|
178
195
|
new CreateBucketCommand({
|
|
179
|
-
Bucket:
|
|
196
|
+
Bucket: bucketName,
|
|
180
197
|
// Add tags during creation if specified
|
|
181
198
|
...(props.tags && {
|
|
182
199
|
Tagging: {
|
|
@@ -198,17 +215,13 @@ export const Bucket = Resource(
|
|
|
198
215
|
const [locationResponse, versioningResponse, aclResponse] =
|
|
199
216
|
await Promise.all([
|
|
200
217
|
retry(() =>
|
|
201
|
-
client.send(
|
|
202
|
-
new GetBucketLocationCommand({ Bucket: props.bucketName }),
|
|
203
|
-
),
|
|
218
|
+
client.send(new GetBucketLocationCommand({ Bucket: bucketName })),
|
|
204
219
|
),
|
|
205
220
|
retry(() =>
|
|
206
|
-
client.send(
|
|
207
|
-
new GetBucketVersioningCommand({ Bucket: props.bucketName }),
|
|
208
|
-
),
|
|
221
|
+
client.send(new GetBucketVersioningCommand({ Bucket: bucketName })),
|
|
209
222
|
),
|
|
210
223
|
retry(() =>
|
|
211
|
-
client.send(new GetBucketAclCommand({ Bucket:
|
|
224
|
+
client.send(new GetBucketAclCommand({ Bucket: bucketName })),
|
|
212
225
|
),
|
|
213
226
|
]);
|
|
214
227
|
|
|
@@ -219,9 +232,7 @@ export const Bucket = Resource(
|
|
|
219
232
|
if (!tags) {
|
|
220
233
|
try {
|
|
221
234
|
const taggingResponse = await retry(() =>
|
|
222
|
-
client.send(
|
|
223
|
-
new GetBucketTaggingCommand({ Bucket: props.bucketName }),
|
|
224
|
-
),
|
|
235
|
+
client.send(new GetBucketTaggingCommand({ Bucket: bucketName })),
|
|
225
236
|
);
|
|
226
237
|
tags = Object.fromEntries(
|
|
227
238
|
taggingResponse.TagSet?.map(({ Key, Value }) => [Key, Value]) || [],
|
|
@@ -234,10 +245,10 @@ export const Bucket = Resource(
|
|
|
234
245
|
}
|
|
235
246
|
|
|
236
247
|
return this({
|
|
237
|
-
bucketName:
|
|
238
|
-
arn: `arn:aws:s3:::${
|
|
239
|
-
bucketDomainName: `${
|
|
240
|
-
bucketRegionalDomainName: `${
|
|
248
|
+
bucketName: bucketName,
|
|
249
|
+
arn: `arn:aws:s3:::${bucketName}`,
|
|
250
|
+
bucketDomainName: `${bucketName}.s3.amazonaws.com`,
|
|
251
|
+
bucketRegionalDomainName: `${bucketName}.s3.${region}.amazonaws.com`,
|
|
241
252
|
region,
|
|
242
253
|
hostedZoneId: getHostedZoneId(region),
|
|
243
254
|
versioningEnabled: versioningResponse.Status === "Enabled",
|
|
@@ -31,8 +31,10 @@ export interface SecurityGroupProps extends AwsClientProps {
|
|
|
31
31
|
|
|
32
32
|
/**
|
|
33
33
|
* The name of the security group.
|
|
34
|
+
*
|
|
35
|
+
* @default ${app}-${stage}-${id}
|
|
34
36
|
*/
|
|
35
|
-
groupName
|
|
37
|
+
groupName?: string;
|
|
36
38
|
|
|
37
39
|
/**
|
|
38
40
|
* The description of the security group.
|
|
@@ -62,6 +64,11 @@ export interface SecurityGroup
|
|
|
62
64
|
*/
|
|
63
65
|
groupId: string;
|
|
64
66
|
|
|
67
|
+
/**
|
|
68
|
+
* The name of the security group.
|
|
69
|
+
*/
|
|
70
|
+
groupName: string;
|
|
71
|
+
|
|
65
72
|
/**
|
|
66
73
|
* The ID of the VPC the security group belongs to.
|
|
67
74
|
*/
|
|
@@ -200,7 +207,7 @@ export const SecurityGroup = Resource(
|
|
|
200
207
|
"aws::SecurityGroup",
|
|
201
208
|
async function (
|
|
202
209
|
this: Context<SecurityGroup>,
|
|
203
|
-
|
|
210
|
+
id: string,
|
|
204
211
|
props: SecurityGroupProps,
|
|
205
212
|
): Promise<SecurityGroup> {
|
|
206
213
|
// Create EC2 client with credential resolution handled internally
|
|
@@ -210,6 +217,10 @@ export const SecurityGroup = Resource(
|
|
|
210
217
|
SECURITY_GROUP_TIMEOUT,
|
|
211
218
|
props.timeout,
|
|
212
219
|
);
|
|
220
|
+
const groupName = props.groupName ?? this.scope.createPhysicalName(id);
|
|
221
|
+
if (this.phase === "update" && this.output.groupName !== groupName) {
|
|
222
|
+
this.replace();
|
|
223
|
+
}
|
|
213
224
|
|
|
214
225
|
if (this.phase === "delete") {
|
|
215
226
|
if (this.output?.groupId) {
|
|
@@ -259,7 +270,7 @@ export const SecurityGroup = Resource(
|
|
|
259
270
|
} else {
|
|
260
271
|
// Create new security group
|
|
261
272
|
const createParams: CreateSecurityGroupParams = {
|
|
262
|
-
GroupName:
|
|
273
|
+
GroupName: groupName,
|
|
263
274
|
GroupDescription: props.description,
|
|
264
275
|
VpcId: vpcId,
|
|
265
276
|
};
|
|
@@ -313,6 +324,7 @@ export const SecurityGroup = Resource(
|
|
|
313
324
|
|
|
314
325
|
return this({
|
|
315
326
|
groupId: securityGroup.GroupId,
|
|
327
|
+
groupName,
|
|
316
328
|
vpcId: securityGroup.VpcId,
|
|
317
329
|
ownerId: securityGroup.OwnerId,
|
|
318
330
|
...props,
|
package/src/aws/function.ts
CHANGED
|
@@ -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
|
|
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>,
|
|
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:
|
|
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:
|
|
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:
|
|
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,
|
|
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:
|
|
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,
|
|
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:
|
|
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,
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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,
|
|
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:
|
|
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:
|
|
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:
|
|
717
|
+
FunctionName: functionName,
|
|
696
718
|
}),
|
|
697
719
|
),
|
|
698
720
|
),
|
|
699
721
|
retry(() =>
|
|
700
722
|
client.send(
|
|
701
723
|
new GetFunctionConfigurationCommand({
|
|
702
|
-
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:
|
|
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") {
|