alchemy 0.62.2 → 0.63.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/alchemy.js +1518 -1204
- 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 +7 -3
- 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 +6 -4
- 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/vite/vite.d.ts +1 -1
- package/lib/cloudflare/vite/vite.d.ts.map +1 -1
- package/lib/cloudflare/vite/vite.js +1 -1
- package/lib/cloudflare/vite/vite.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/util/telemetry/constants.d.ts.map +1 -1
- package/lib/util/telemetry/constants.js +2 -2
- package/lib/util/telemetry/constants.js.map +1 -1
- 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 +11 -4
- 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 +65 -54
- 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/vite/vite.ts +2 -3
- 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/util/telemetry/constants.ts +2 -2
- package/src/vercel/project.ts +46 -1
- package/templates/astro/_gitignore +2 -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/nuxt/_gitignore +2 -1
- package/templates/react-router/_gitignore +1 -0
- package/templates/react-router/vite.config.ts +5 -3
- package/templates/rwsdk/_gitignore +2 -3
- package/templates/sveltekit/_gitignore +2 -1
- package/templates/tanstack-start/_gitignore +2 -1
- package/templates/typescript/_gitignore +2 -1
- package/templates/vite/_gitignore +2 -1
- 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
|
@@ -2,6 +2,7 @@ import { join, resolve } from "node:path";
|
|
|
2
2
|
import { getPackageManagerRunner } from "../../util/detect-package-manager.ts";
|
|
3
3
|
import type { Assets } from "../assets.ts";
|
|
4
4
|
import type { Bindings } from "../bindings.ts";
|
|
5
|
+
import { withSkipPathValidation } from "../miniflare/paths.ts";
|
|
5
6
|
import { Website, type WebsiteProps } from "../website.ts";
|
|
6
7
|
import type { Worker } from "../worker.ts";
|
|
7
8
|
|
|
@@ -80,6 +81,7 @@ export async function Astro<B extends Bindings>(
|
|
|
80
81
|
props.entrypoint ??
|
|
81
82
|
(output === "server" ? "dist/_worker.js/index.js" : undefined),
|
|
82
83
|
assets: props.assets ?? "dist",
|
|
84
|
+
spa: false,
|
|
83
85
|
});
|
|
84
86
|
}
|
|
85
87
|
|
|
@@ -92,7 +94,9 @@ async function resolveOutputType(cwd: string): Promise<"server" | "static"> {
|
|
|
92
94
|
];
|
|
93
95
|
for (const candidate of candidates) {
|
|
94
96
|
try {
|
|
95
|
-
const config = await
|
|
97
|
+
const config = await withSkipPathValidation(
|
|
98
|
+
() => import(join(cwd, candidate)),
|
|
99
|
+
);
|
|
96
100
|
if (
|
|
97
101
|
typeof config.default === "object" &&
|
|
98
102
|
config.default &&
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import cloudflare, { type Options } from "@astrojs/cloudflare";
|
|
2
|
+
import type { AstroIntegration } from "astro";
|
|
2
3
|
import { getPlatformProxyOptions } from "../cloudflare-env-proxy.ts";
|
|
3
4
|
|
|
4
|
-
const alchemy = (options?: Options) => {
|
|
5
|
+
const alchemy = (options?: Options): AstroIntegration => {
|
|
5
6
|
return cloudflare({
|
|
6
7
|
platformProxy: getPlatformProxyOptions(options?.platformProxy),
|
|
7
8
|
...options,
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* https://developers.cloudflare.com/api/resources/workers/subresources/scripts/methods/update/
|
|
5
5
|
*/
|
|
6
6
|
import type { Secret } from "../secret.ts";
|
|
7
|
-
import type {
|
|
7
|
+
import type { AiGateway } from "./ai-gateway.ts";
|
|
8
8
|
import type { Ai } from "./ai.ts";
|
|
9
9
|
import type { AnalyticsEngineDataset } from "./analytics-engine.ts";
|
|
10
10
|
import type { Assets } from "./assets.ts";
|
|
@@ -45,7 +45,7 @@ export declare namespace Bindings {
|
|
|
45
45
|
*/
|
|
46
46
|
export type Binding =
|
|
47
47
|
| Ai
|
|
48
|
-
|
|
|
48
|
+
| AiGateway
|
|
49
49
|
| Assets
|
|
50
50
|
| Container
|
|
51
51
|
| CloudflareSecret
|
package/src/cloudflare/bound.ts
CHANGED
|
@@ -21,7 +21,7 @@ import type {
|
|
|
21
21
|
} from "@cloudflare/workers-types";
|
|
22
22
|
import type { Pipeline } from "cloudflare:pipelines";
|
|
23
23
|
import type { Secret } from "../secret.ts";
|
|
24
|
-
import type {
|
|
24
|
+
import type { AiGateway as _AiGateway } from "./ai-gateway.ts";
|
|
25
25
|
import type { Ai as _Ai } from "./ai.ts";
|
|
26
26
|
import type { AnalyticsEngineDataset as _AnalyticsEngineDataset } from "./analytics-engine.ts";
|
|
27
27
|
import type { Assets } from "./assets.ts";
|
package/src/cloudflare/bucket.ts
CHANGED
|
@@ -24,7 +24,7 @@ export interface BucketProps extends CloudflareApiOptions {
|
|
|
24
24
|
* Names can only contain lowercase letters (a-z), numbers (0-9), and hyphens (-)
|
|
25
25
|
* Cannot begin or end with a hyphen
|
|
26
26
|
*
|
|
27
|
-
* @default
|
|
27
|
+
* @default ${app.name}-${app.stage}-${id}
|
|
28
28
|
*/
|
|
29
29
|
name?: string;
|
|
30
30
|
|
|
@@ -76,6 +76,16 @@ export interface BucketProps extends CloudflareApiOptions {
|
|
|
76
76
|
*/
|
|
77
77
|
cors?: R2BucketCORSRule[];
|
|
78
78
|
|
|
79
|
+
/**
|
|
80
|
+
* Lifecycle rules for the bucket
|
|
81
|
+
*/
|
|
82
|
+
lifecycle?: R2BucketLifecycleRule[];
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Lock rules for the bucket
|
|
86
|
+
*/
|
|
87
|
+
lock?: R2BucketLockRule[];
|
|
88
|
+
|
|
79
89
|
/**
|
|
80
90
|
* Whether to emulate the bucket locally when Alchemy is running in watch mode.
|
|
81
91
|
*/
|
|
@@ -94,6 +104,102 @@ export interface BucketProps extends CloudflareApiOptions {
|
|
|
94
104
|
};
|
|
95
105
|
}
|
|
96
106
|
|
|
107
|
+
interface R2BucketLifecycleRule {
|
|
108
|
+
/**
|
|
109
|
+
* Unique identifier for this rule.
|
|
110
|
+
*/
|
|
111
|
+
id?: string;
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Conditions that apply to all transitions of this rule.
|
|
115
|
+
*/
|
|
116
|
+
conditions?: {
|
|
117
|
+
/**
|
|
118
|
+
* Transitions will only apply to objects/uploads in the bucket that start with the given prefix, an empty prefix can be provided to scope rule to all objects/uploads.
|
|
119
|
+
*/
|
|
120
|
+
prefix: string;
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Whether or not this rule is in effect.
|
|
125
|
+
* @default true
|
|
126
|
+
*/
|
|
127
|
+
enabled?: boolean;
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Transition to abort ongoing multipart uploads.
|
|
131
|
+
*/
|
|
132
|
+
abortMultipartUploadsTransition?: {
|
|
133
|
+
/**
|
|
134
|
+
* Condition for lifecycle transitions to apply after an object reaches an age in seconds.
|
|
135
|
+
*/
|
|
136
|
+
condition: {
|
|
137
|
+
/**
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Maximum age of the object in seconds.
|
|
141
|
+
*/
|
|
142
|
+
maxAge: number;
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Type of condition.
|
|
146
|
+
*/
|
|
147
|
+
type: "Age";
|
|
148
|
+
};
|
|
149
|
+
};
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Transition to delete objects.
|
|
153
|
+
*/
|
|
154
|
+
deleteObjectsTransition?: {
|
|
155
|
+
/**
|
|
156
|
+
* Condition for lifecycle transitions to apply after an object reaches an age in seconds.
|
|
157
|
+
*/
|
|
158
|
+
condition: { maxAge: number; type: "Age" } | { date: string; type: "Date" };
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Transition to change the storage class of objects.
|
|
163
|
+
*/
|
|
164
|
+
storageClassTransitions?: {
|
|
165
|
+
/**
|
|
166
|
+
* Condition for lifecycle transitions to apply after an object reaches an age in seconds.
|
|
167
|
+
*/
|
|
168
|
+
condition: { maxAge: number; type: "Age" } | { date: string; type: "Date" };
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Storage class for the bucket.
|
|
172
|
+
*/
|
|
173
|
+
storageClass: "InfrequentAccess";
|
|
174
|
+
}[];
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
interface R2BucketLockRule {
|
|
178
|
+
/**
|
|
179
|
+
* Unique identifier for this rule.
|
|
180
|
+
*/
|
|
181
|
+
id?: string;
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* Condition to apply a lock rule to an object for how long in seconds.
|
|
185
|
+
*/
|
|
186
|
+
condition:
|
|
187
|
+
| { maxAgeSeconds: number; type: "Age" }
|
|
188
|
+
| { date: string; type: "Date" }
|
|
189
|
+
| { type: "Indefinite" };
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* Whether or not this rule is in effect.
|
|
193
|
+
* @default true
|
|
194
|
+
*/
|
|
195
|
+
enabled?: boolean;
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* Rule will only apply to objects/uploads in the bucket that start with the given prefix, an empty prefix can be provided to scope rule to all objects/uploads.
|
|
199
|
+
*/
|
|
200
|
+
prefix?: string;
|
|
201
|
+
}
|
|
202
|
+
|
|
97
203
|
interface R2BucketCORSRule {
|
|
98
204
|
/**
|
|
99
205
|
* Identifier for this rule.
|
|
@@ -246,12 +352,19 @@ const _R2Bucket = Resource(
|
|
|
246
352
|
id: string,
|
|
247
353
|
props: BucketProps = {},
|
|
248
354
|
): Promise<R2Bucket> {
|
|
249
|
-
const bucketName =
|
|
355
|
+
const bucketName =
|
|
356
|
+
props.name ?? this.output?.name ?? this.scope.createPhysicalName(id);
|
|
357
|
+
|
|
358
|
+
if (this.phase === "update" && this.output?.name !== bucketName) {
|
|
359
|
+
this.replace();
|
|
360
|
+
}
|
|
361
|
+
|
|
250
362
|
const allowPublicAccess = props.allowPublicAccess === true;
|
|
251
363
|
const dev = {
|
|
252
364
|
id: this.output?.dev?.id ?? bucketName,
|
|
253
365
|
remote: props.dev?.remote ?? false,
|
|
254
366
|
};
|
|
367
|
+
const adopt = props.adopt ?? this.scope.adopt;
|
|
255
368
|
|
|
256
369
|
if (this.scope.local && !props.dev?.remote) {
|
|
257
370
|
return this({
|
|
@@ -289,7 +402,7 @@ const _R2Bucket = Resource(
|
|
|
289
402
|
if (
|
|
290
403
|
err instanceof CloudflareApiError &&
|
|
291
404
|
err.status === 409 &&
|
|
292
|
-
|
|
405
|
+
adopt
|
|
293
406
|
) {
|
|
294
407
|
return await getBucket(api, bucketName, props);
|
|
295
408
|
}
|
|
@@ -305,6 +418,12 @@ const _R2Bucket = Resource(
|
|
|
305
418
|
if (props.cors?.length) {
|
|
306
419
|
await putBucketCORS(api, bucketName, props);
|
|
307
420
|
}
|
|
421
|
+
if (props.lifecycle?.length) {
|
|
422
|
+
await putBucketLifecycleRules(api, bucketName, props);
|
|
423
|
+
}
|
|
424
|
+
if (props.lock?.length) {
|
|
425
|
+
await putBucketLockRules(api, bucketName, props);
|
|
426
|
+
}
|
|
308
427
|
return this({
|
|
309
428
|
name: bucketName,
|
|
310
429
|
location: bucket.location,
|
|
@@ -314,6 +433,8 @@ const _R2Bucket = Resource(
|
|
|
314
433
|
domain,
|
|
315
434
|
type: "r2_bucket",
|
|
316
435
|
accountId: api.accountId,
|
|
436
|
+
lifecycle: props.lifecycle,
|
|
437
|
+
lock: props.lock,
|
|
317
438
|
cors: props.cors,
|
|
318
439
|
dev,
|
|
319
440
|
});
|
|
@@ -335,11 +456,21 @@ const _R2Bucket = Resource(
|
|
|
335
456
|
if (!isDeepStrictEqual(this.output.cors ?? [], props.cors ?? [])) {
|
|
336
457
|
await putBucketCORS(api, bucketName, props);
|
|
337
458
|
}
|
|
459
|
+
if (
|
|
460
|
+
!isDeepStrictEqual(this.output.lifecycle ?? [], props.lifecycle ?? [])
|
|
461
|
+
) {
|
|
462
|
+
await putBucketLifecycleRules(api, bucketName, props);
|
|
463
|
+
}
|
|
464
|
+
if (!isDeepStrictEqual(this.output.lock ?? [], props.lock ?? [])) {
|
|
465
|
+
await putBucketLockRules(api, bucketName, props);
|
|
466
|
+
}
|
|
338
467
|
return this({
|
|
339
468
|
...this.output,
|
|
340
469
|
allowPublicAccess,
|
|
341
470
|
dev,
|
|
342
471
|
cors: props.cors,
|
|
472
|
+
lifecycle: props.lifecycle,
|
|
473
|
+
lock: props.lock,
|
|
343
474
|
domain,
|
|
344
475
|
});
|
|
345
476
|
}
|
|
@@ -628,3 +759,111 @@ export async function putBucketCORS(
|
|
|
628
759
|
),
|
|
629
760
|
);
|
|
630
761
|
}
|
|
762
|
+
|
|
763
|
+
export async function putBucketLifecycleRules(
|
|
764
|
+
api: CloudflareApi,
|
|
765
|
+
bucketName: string,
|
|
766
|
+
props: BucketProps,
|
|
767
|
+
) {
|
|
768
|
+
const rulesBody = Array.isArray(props.lifecycle)
|
|
769
|
+
? props.lifecycle.length === 0
|
|
770
|
+
? { rules: [] }
|
|
771
|
+
: {
|
|
772
|
+
rules: props.lifecycle.map((rule) => ({
|
|
773
|
+
...rule,
|
|
774
|
+
// Required by the API; empty prefix means all objects/uploads
|
|
775
|
+
conditions: rule.conditions ?? { prefix: "" },
|
|
776
|
+
// Required by the API
|
|
777
|
+
enabled: rule.enabled ?? true,
|
|
778
|
+
})),
|
|
779
|
+
}
|
|
780
|
+
: {};
|
|
781
|
+
|
|
782
|
+
await extractCloudflareResult(
|
|
783
|
+
`put R2 bucket lifecycle rules for "${bucketName}"`,
|
|
784
|
+
api.put(
|
|
785
|
+
`/accounts/${api.accountId}/r2/buckets/${bucketName}/lifecycle`,
|
|
786
|
+
rulesBody,
|
|
787
|
+
{ headers: withJurisdiction(props) },
|
|
788
|
+
),
|
|
789
|
+
);
|
|
790
|
+
}
|
|
791
|
+
|
|
792
|
+
/**
|
|
793
|
+
* Get lifecycle rules for a bucket
|
|
794
|
+
*/
|
|
795
|
+
export async function getBucketLifecycleRules(
|
|
796
|
+
api: CloudflareApi,
|
|
797
|
+
bucketName: string,
|
|
798
|
+
props: BucketProps = {},
|
|
799
|
+
): Promise<R2BucketLifecycleRule[]> {
|
|
800
|
+
const res = await api.get(
|
|
801
|
+
`/accounts/${api.accountId}/r2/buckets/${bucketName}/lifecycle`,
|
|
802
|
+
{ headers: withJurisdiction(props) },
|
|
803
|
+
);
|
|
804
|
+
const json: any = await res.json();
|
|
805
|
+
if (!json?.success) {
|
|
806
|
+
throw new CloudflareApiError(
|
|
807
|
+
`Failed to get R2 bucket lifecycle rules for "${bucketName}": ${res.status} ${res.statusText}`,
|
|
808
|
+
res,
|
|
809
|
+
json?.errors,
|
|
810
|
+
);
|
|
811
|
+
}
|
|
812
|
+
const rules: any[] = Array.isArray(json.result)
|
|
813
|
+
? json.result
|
|
814
|
+
: (json.result?.rules ?? []);
|
|
815
|
+
return rules as R2BucketLifecycleRule[];
|
|
816
|
+
}
|
|
817
|
+
|
|
818
|
+
export async function putBucketLockRules(
|
|
819
|
+
api: CloudflareApi,
|
|
820
|
+
bucketName: string,
|
|
821
|
+
props: BucketProps,
|
|
822
|
+
) {
|
|
823
|
+
const rulesBody = Array.isArray(props.lock)
|
|
824
|
+
? props.lock.length === 0
|
|
825
|
+
? { rules: [] }
|
|
826
|
+
: {
|
|
827
|
+
rules: props.lock.map((rule) => ({
|
|
828
|
+
...rule,
|
|
829
|
+
// Required by the API
|
|
830
|
+
enabled: rule.enabled ?? true,
|
|
831
|
+
})),
|
|
832
|
+
}
|
|
833
|
+
: {};
|
|
834
|
+
|
|
835
|
+
await extractCloudflareResult(
|
|
836
|
+
`put R2 bucket lock rules for "${bucketName}"`,
|
|
837
|
+
api.put(
|
|
838
|
+
`/accounts/${api.accountId}/r2/buckets/${bucketName}/lock`,
|
|
839
|
+
rulesBody,
|
|
840
|
+
{ headers: withJurisdiction(props) },
|
|
841
|
+
),
|
|
842
|
+
);
|
|
843
|
+
}
|
|
844
|
+
|
|
845
|
+
/**
|
|
846
|
+
* Get lock rules for a bucket
|
|
847
|
+
*/
|
|
848
|
+
export async function getBucketLockRules(
|
|
849
|
+
api: CloudflareApi,
|
|
850
|
+
bucketName: string,
|
|
851
|
+
props: BucketProps = {},
|
|
852
|
+
): Promise<R2BucketLockRule[]> {
|
|
853
|
+
const res = await api.get(
|
|
854
|
+
`/accounts/${api.accountId}/r2/buckets/${bucketName}/lock`,
|
|
855
|
+
{ headers: withJurisdiction(props) },
|
|
856
|
+
);
|
|
857
|
+
const json: any = await res.json();
|
|
858
|
+
if (!json?.success) {
|
|
859
|
+
throw new CloudflareApiError(
|
|
860
|
+
`Failed to get R2 bucket lock rules for "${bucketName}": ${res.status} ${res.statusText}`,
|
|
861
|
+
res,
|
|
862
|
+
json?.errors,
|
|
863
|
+
);
|
|
864
|
+
}
|
|
865
|
+
const rules: any[] = Array.isArray(json.result)
|
|
866
|
+
? json.result
|
|
867
|
+
: (json.result?.rules ?? []);
|
|
868
|
+
return rules as R2BucketLockRule[];
|
|
869
|
+
}
|
|
@@ -123,8 +123,12 @@ export type Container<T = any> = {
|
|
|
123
123
|
/** Unique identifier for the container */
|
|
124
124
|
id: string;
|
|
125
125
|
|
|
126
|
-
/**
|
|
127
|
-
|
|
126
|
+
/**
|
|
127
|
+
* Optional human-readable name for the container
|
|
128
|
+
*
|
|
129
|
+
* @default ${app.name}-${app.stage}-${id}
|
|
130
|
+
*/
|
|
131
|
+
name?: string;
|
|
128
132
|
|
|
129
133
|
/** Class name used to identify the container in Worker bindings */
|
|
130
134
|
className: string;
|
|
@@ -170,7 +174,8 @@ export async function Container<T>(
|
|
|
170
174
|
id: string,
|
|
171
175
|
props: ContainerProps,
|
|
172
176
|
): Promise<Container<T>> {
|
|
173
|
-
const
|
|
177
|
+
const scope = Scope.current;
|
|
178
|
+
const name = props.name ?? scope.createPhysicalName(id);
|
|
174
179
|
const tag =
|
|
175
180
|
props.tag === undefined || props.tag === "latest"
|
|
176
181
|
? `latest-${Date.now()}`
|
|
@@ -191,7 +196,7 @@ export async function Container<T>(
|
|
|
191
196
|
adopt: props.adopt,
|
|
192
197
|
};
|
|
193
198
|
|
|
194
|
-
const isDev =
|
|
199
|
+
const isDev = scope.local && !props.dev?.remote;
|
|
195
200
|
if (isDev) {
|
|
196
201
|
const image = await Image(id, {
|
|
197
202
|
name: `cloudflare-dev/${name}`, // prefix used by Miniflare
|
|
@@ -291,8 +296,10 @@ export interface ContainerApplicationProps extends CloudflareApiOptions {
|
|
|
291
296
|
/**
|
|
292
297
|
* The name of the container application.
|
|
293
298
|
* Must be unique within your Cloudflare account.
|
|
299
|
+
*
|
|
300
|
+
* @default ${app}-${stage}-${id}
|
|
294
301
|
*/
|
|
295
|
-
name
|
|
302
|
+
name?: string;
|
|
296
303
|
|
|
297
304
|
/**
|
|
298
305
|
* Scheduling policy that controls where and how containers are deployed.
|
|
@@ -501,16 +508,20 @@ export const ContainerApplication = Resource(
|
|
|
501
508
|
"cloudflare::ContainerApplication",
|
|
502
509
|
async function (
|
|
503
510
|
this: Context<ContainerApplication, ContainerApplicationProps>,
|
|
504
|
-
|
|
511
|
+
id: string,
|
|
505
512
|
props: ContainerApplicationProps,
|
|
506
513
|
): Promise<ContainerApplication> {
|
|
514
|
+
const applicationName = props.name ?? this.scope.createPhysicalName(id);
|
|
515
|
+
|
|
507
516
|
if (this.scope.local && props.dev) {
|
|
508
517
|
return this({
|
|
509
518
|
id: this.output?.id ?? "",
|
|
510
|
-
name:
|
|
519
|
+
name: applicationName,
|
|
511
520
|
});
|
|
512
521
|
}
|
|
513
522
|
|
|
523
|
+
const adopt = props.adopt ?? this.scope.adopt;
|
|
524
|
+
|
|
514
525
|
const api = await createCloudflareApi(props);
|
|
515
526
|
if (this.phase === "delete") {
|
|
516
527
|
if (this.output?.id) {
|
|
@@ -562,8 +573,8 @@ export const ContainerApplication = Resource(
|
|
|
562
573
|
let application: ContainerApplicationData;
|
|
563
574
|
|
|
564
575
|
try {
|
|
565
|
-
application = await createContainerApplication(api,
|
|
566
|
-
name:
|
|
576
|
+
application = await createContainerApplication(api, adopt, {
|
|
577
|
+
name: applicationName,
|
|
567
578
|
scheduling_policy: props.schedulingPolicy ?? "default",
|
|
568
579
|
instances: props.instances ?? 1,
|
|
569
580
|
max_instances: props.maxInstances ?? 1,
|
|
@@ -588,19 +599,19 @@ export const ContainerApplication = Resource(
|
|
|
588
599
|
} catch (error) {
|
|
589
600
|
// Check if this is an "already exists" error and adopt is enabled
|
|
590
601
|
if (
|
|
591
|
-
|
|
602
|
+
adopt &&
|
|
592
603
|
error instanceof Error &&
|
|
593
604
|
error.message.includes("already exists")
|
|
594
605
|
) {
|
|
595
606
|
// Find the existing container application
|
|
596
607
|
const existingApplication = await findContainerApplicationByName(
|
|
597
608
|
api,
|
|
598
|
-
|
|
609
|
+
applicationName,
|
|
599
610
|
);
|
|
600
611
|
|
|
601
612
|
if (!existingApplication) {
|
|
602
613
|
throw new Error(
|
|
603
|
-
`Failed to find existing container application '${
|
|
614
|
+
`Failed to find existing container application '${applicationName}' for adoption`,
|
|
604
615
|
);
|
|
605
616
|
}
|
|
606
617
|
|
|
@@ -198,7 +198,7 @@ async function ensureCustomDomain(
|
|
|
198
198
|
): Promise<CustomDomain> {
|
|
199
199
|
const environment = props.environment || "production";
|
|
200
200
|
const domainHostname = props.name;
|
|
201
|
-
|
|
201
|
+
const adopt = props.adopt ?? context.scope.adopt;
|
|
202
202
|
// Check if domain binding already exists for this account
|
|
203
203
|
const listResponse = await api.get(
|
|
204
204
|
`/accounts/${api.accountId}/workers/domains`,
|
|
@@ -239,7 +239,7 @@ async function ensureCustomDomain(
|
|
|
239
239
|
|
|
240
240
|
// Handle the case where domain already exists during create phase
|
|
241
241
|
if (context.phase === "create" && bindingExists) {
|
|
242
|
-
if (!
|
|
242
|
+
if (!adopt) {
|
|
243
243
|
throw new Error(
|
|
244
244
|
`CustomDomain for ${domainHostname} already exists in zone ${props.zoneId}. ` +
|
|
245
245
|
"Set adopt: true to take control of the existing domain binding.",
|
|
@@ -31,7 +31,7 @@ export interface D1DatabaseProps extends CloudflareApiOptions {
|
|
|
31
31
|
/**
|
|
32
32
|
* Name of the database
|
|
33
33
|
*
|
|
34
|
-
* @default id
|
|
34
|
+
* @default ${app}-${stage}-${id}
|
|
35
35
|
*/
|
|
36
36
|
name?: string;
|
|
37
37
|
|
|
@@ -263,17 +263,24 @@ const _D1Database = Resource(
|
|
|
263
263
|
id: string,
|
|
264
264
|
props: D1DatabaseProps = {},
|
|
265
265
|
): Promise<D1Database> {
|
|
266
|
-
const databaseName =
|
|
266
|
+
const databaseName =
|
|
267
|
+
props.name ?? this.output?.name ?? this.scope.createPhysicalName(id);
|
|
268
|
+
|
|
269
|
+
if (this.phase === "update" && this.output?.name !== databaseName) {
|
|
270
|
+
this.replace();
|
|
271
|
+
}
|
|
272
|
+
|
|
267
273
|
const local = this.scope.local && !props.dev?.remote;
|
|
268
274
|
const dev = {
|
|
269
275
|
id: this.output?.dev?.id ?? this.output?.id ?? id,
|
|
270
276
|
remote: props.dev?.remote ?? false,
|
|
271
277
|
};
|
|
278
|
+
const adopt = props.adopt ?? this.scope.adopt;
|
|
272
279
|
|
|
273
280
|
if (local) {
|
|
274
281
|
if (props.migrationsFiles && props.migrationsFiles.length > 0) {
|
|
275
282
|
await applyLocalD1Migrations({
|
|
276
|
-
databaseId:
|
|
283
|
+
databaseId: dev.id,
|
|
277
284
|
migrationsTable: props.migrationsTable ?? DEFAULT_MIGRATIONS_TABLE,
|
|
278
285
|
migrations: props.migrationsFiles,
|
|
279
286
|
});
|
|
@@ -327,7 +334,7 @@ const _D1Database = Resource(
|
|
|
327
334
|
} catch (error) {
|
|
328
335
|
// Check if this is a "database already exists" error and adopt is enabled
|
|
329
336
|
if (
|
|
330
|
-
|
|
337
|
+
adopt &&
|
|
331
338
|
error instanceof CloudflareApiError &&
|
|
332
339
|
error.message.includes("already exists")
|
|
333
340
|
) {
|
|
@@ -14,6 +14,8 @@ import {
|
|
|
14
14
|
export interface DispatchNamespaceProps extends CloudflareApiOptions {
|
|
15
15
|
/**
|
|
16
16
|
* Name of the namespace
|
|
17
|
+
*
|
|
18
|
+
* @default ${app}-${stage}-${id}
|
|
17
19
|
*/
|
|
18
20
|
namespace?: string;
|
|
19
21
|
|
|
@@ -112,7 +114,11 @@ export const DispatchNamespace = Resource(
|
|
|
112
114
|
// Create Cloudflare API client with automatic account discovery
|
|
113
115
|
const api = await createCloudflareApi(props);
|
|
114
116
|
|
|
115
|
-
const namespace =
|
|
117
|
+
const namespace =
|
|
118
|
+
props.namespace ??
|
|
119
|
+
this.output?.namespace ??
|
|
120
|
+
this.scope.createPhysicalName(id);
|
|
121
|
+
const adopt = props.adopt ?? this.scope.adopt;
|
|
116
122
|
|
|
117
123
|
if (this.phase === "delete") {
|
|
118
124
|
// For delete operations, we need to check if the namespace exists in the output
|
|
@@ -132,11 +138,8 @@ export const DispatchNamespace = Resource(
|
|
|
132
138
|
: Date.now();
|
|
133
139
|
|
|
134
140
|
if (this.phase === "update") {
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
throw new Error(
|
|
138
|
-
`Cannot update dispatch namespace name after creation. Namespace name is immutable. Before: ${this.output.namespace}, After: ${namespace}`,
|
|
139
|
-
);
|
|
141
|
+
if (this.output.namespace !== namespace) {
|
|
142
|
+
this.replace();
|
|
140
143
|
}
|
|
141
144
|
// For updates, just refresh metadata
|
|
142
145
|
} else {
|
|
@@ -150,7 +153,7 @@ export const DispatchNamespace = Resource(
|
|
|
150
153
|
} catch (error) {
|
|
151
154
|
// Check if this is a "namespace already exists" error and adopt is enabled
|
|
152
155
|
if (
|
|
153
|
-
|
|
156
|
+
adopt &&
|
|
154
157
|
error instanceof CloudflareApiError &&
|
|
155
158
|
error.status === 400 &&
|
|
156
159
|
(error.message.includes("already exists") ||
|
|
@@ -136,8 +136,10 @@ export type HyperdriveOrigin =
|
|
|
136
136
|
export interface HyperdriveProps extends CloudflareApiOptions {
|
|
137
137
|
/**
|
|
138
138
|
* Name of the Hyperdrive configuration
|
|
139
|
+
*
|
|
140
|
+
* @default ${app}-${stage}-${id}
|
|
139
141
|
*/
|
|
140
|
-
name
|
|
142
|
+
name?: string;
|
|
141
143
|
|
|
142
144
|
/**
|
|
143
145
|
* Database connection origin configuration
|
|
@@ -182,6 +184,11 @@ export interface Hyperdrive
|
|
|
182
184
|
*/
|
|
183
185
|
id: string;
|
|
184
186
|
|
|
187
|
+
/**
|
|
188
|
+
* Name of the Hyperdrive configuration
|
|
189
|
+
*/
|
|
190
|
+
name: string;
|
|
191
|
+
|
|
185
192
|
/**
|
|
186
193
|
* The Cloudflare-generated UUID of the hyperdrive
|
|
187
194
|
*/
|
|
@@ -311,7 +318,7 @@ export async function Hyperdrive(
|
|
|
311
318
|
* @internal
|
|
312
319
|
*/
|
|
313
320
|
interface InternalHyperdriveProps extends CloudflareApiOptions {
|
|
314
|
-
name
|
|
321
|
+
name?: string;
|
|
315
322
|
hyperdriveId?: string;
|
|
316
323
|
origin: HyperdriveOrigin;
|
|
317
324
|
caching?: HyperdriveCaching;
|
|
@@ -331,11 +338,14 @@ const _Hyperdrive = Resource(
|
|
|
331
338
|
): Promise<Hyperdrive> {
|
|
332
339
|
const hyperdriveId = props.hyperdriveId || this.output?.hyperdriveId;
|
|
333
340
|
|
|
341
|
+
const name =
|
|
342
|
+
props.name ?? this.output?.name ?? this.scope.createPhysicalName(id);
|
|
343
|
+
|
|
334
344
|
if (this.scope.local) {
|
|
335
345
|
return this({
|
|
336
346
|
id,
|
|
337
347
|
hyperdriveId: hyperdriveId || "",
|
|
338
|
-
name
|
|
348
|
+
name,
|
|
339
349
|
origin: props.origin,
|
|
340
350
|
caching: props.caching,
|
|
341
351
|
mtls: props.mtls,
|