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
package/src/neon/project.ts
CHANGED
|
@@ -28,8 +28,10 @@ export type NeonRegion =
|
|
|
28
28
|
export interface NeonProjectProps extends NeonApiOptions {
|
|
29
29
|
/**
|
|
30
30
|
* Name of the project
|
|
31
|
+
*
|
|
32
|
+
* @default ${app}-${stage}-${id}
|
|
31
33
|
*/
|
|
32
|
-
name
|
|
34
|
+
name?: string;
|
|
33
35
|
|
|
34
36
|
/**
|
|
35
37
|
* Region where the project will be provisioned
|
|
@@ -440,6 +442,11 @@ export interface NeonProject
|
|
|
440
442
|
*/
|
|
441
443
|
id: string;
|
|
442
444
|
|
|
445
|
+
/**
|
|
446
|
+
* Name of the Project.
|
|
447
|
+
*/
|
|
448
|
+
name: string;
|
|
449
|
+
|
|
443
450
|
/**
|
|
444
451
|
* Time at which the project was created
|
|
445
452
|
*/
|
|
@@ -515,6 +522,12 @@ export const NeonProject = Resource(
|
|
|
515
522
|
): Promise<NeonProject> {
|
|
516
523
|
const api = createNeonApi(props);
|
|
517
524
|
const projectId = props.existing_project_id || this.output?.id;
|
|
525
|
+
const projectName =
|
|
526
|
+
props.name ?? this.output?.name ?? this.scope.createPhysicalName(id);
|
|
527
|
+
|
|
528
|
+
if (this.phase === "update" && this.output.name !== projectName) {
|
|
529
|
+
this.replace();
|
|
530
|
+
}
|
|
518
531
|
|
|
519
532
|
if (this.phase === "delete") {
|
|
520
533
|
try {
|
|
@@ -540,7 +553,7 @@ export const NeonProject = Resource(
|
|
|
540
553
|
// Neon only allows updating the project name
|
|
541
554
|
const projectResponse = await api.patch(`/projects/${projectId}`, {
|
|
542
555
|
project: {
|
|
543
|
-
name:
|
|
556
|
+
name: projectName,
|
|
544
557
|
},
|
|
545
558
|
});
|
|
546
559
|
|
|
@@ -564,7 +577,7 @@ export const NeonProject = Resource(
|
|
|
564
577
|
// Project exists, update it
|
|
565
578
|
const projectResponse = await api.patch(`/projects/${projectId}`, {
|
|
566
579
|
project: {
|
|
567
|
-
name:
|
|
580
|
+
name: projectName,
|
|
568
581
|
},
|
|
569
582
|
});
|
|
570
583
|
|
|
@@ -585,11 +598,11 @@ export const NeonProject = Resource(
|
|
|
585
598
|
throw new Error("Failed to check if project exists");
|
|
586
599
|
} else {
|
|
587
600
|
// Project doesn't exist, create new
|
|
588
|
-
response = await createNewProject(api, props);
|
|
601
|
+
response = await createNewProject(api, projectName, props);
|
|
589
602
|
}
|
|
590
603
|
} else {
|
|
591
604
|
// No output ID, create new project
|
|
592
|
-
response = await createNewProject(api, props);
|
|
605
|
+
response = await createNewProject(api, projectName, props);
|
|
593
606
|
}
|
|
594
607
|
}
|
|
595
608
|
|
|
@@ -640,12 +653,13 @@ export const NeonProject = Resource(
|
|
|
640
653
|
*/
|
|
641
654
|
async function createNewProject(
|
|
642
655
|
api: any,
|
|
656
|
+
projectName: string,
|
|
643
657
|
props: NeonProjectProps,
|
|
644
658
|
): Promise<NeonApiResponse> {
|
|
645
659
|
const defaultEndpoint = props.default_endpoint ?? true;
|
|
646
660
|
const projectResponse = await api.post("/projects", {
|
|
647
661
|
project: {
|
|
648
|
-
name:
|
|
662
|
+
name: projectName,
|
|
649
663
|
region_id: props.region_id || "aws-us-east-1",
|
|
650
664
|
pg_version: props.pg_version || 16,
|
|
651
665
|
default_endpoint: defaultEndpoint,
|
|
@@ -14,8 +14,10 @@ import {
|
|
|
14
14
|
export interface BranchProps {
|
|
15
15
|
/**
|
|
16
16
|
* The name of the branch
|
|
17
|
+
*
|
|
18
|
+
* @default ${app}-${stage}-${id}
|
|
17
19
|
*/
|
|
18
|
-
name
|
|
20
|
+
name?: string;
|
|
19
21
|
|
|
20
22
|
/**
|
|
21
23
|
* The organization ID
|
|
@@ -152,9 +154,10 @@ export const Branch = Resource(
|
|
|
152
154
|
"planetscale::Branch",
|
|
153
155
|
async function (
|
|
154
156
|
this: Context<Branch>,
|
|
155
|
-
|
|
157
|
+
id: string,
|
|
156
158
|
props: BranchProps,
|
|
157
159
|
): Promise<Branch> {
|
|
160
|
+
const adopt = props.adopt ?? this.scope.adopt;
|
|
158
161
|
const apiKey =
|
|
159
162
|
props.apiKey?.unencrypted || process.env.PLANETSCALE_API_TOKEN;
|
|
160
163
|
if (!apiKey) {
|
|
@@ -163,6 +166,14 @@ export const Branch = Resource(
|
|
|
163
166
|
|
|
164
167
|
const api = new PlanetScaleApi({ apiKey });
|
|
165
168
|
|
|
169
|
+
const branchName =
|
|
170
|
+
props.name ?? this.output?.name ?? this.scope.createPhysicalName(id);
|
|
171
|
+
|
|
172
|
+
if (this.phase === "update" && this.output.name !== branchName) {
|
|
173
|
+
// TODO(sam): maybe we don't need to replace? just branch again? or rename?
|
|
174
|
+
this.replace();
|
|
175
|
+
}
|
|
176
|
+
|
|
166
177
|
if (this.phase === "delete") {
|
|
167
178
|
try {
|
|
168
179
|
if (this.output?.name) {
|
|
@@ -201,7 +212,7 @@ export const Branch = Resource(
|
|
|
201
212
|
|
|
202
213
|
// Check if branch exists
|
|
203
214
|
const getResponse = await api.get(
|
|
204
|
-
`/organizations/${props.organizationId}/databases/${props.databaseName}/branches/${
|
|
215
|
+
`/organizations/${props.organizationId}/databases/${props.databaseName}/branches/${branchName}`,
|
|
205
216
|
);
|
|
206
217
|
|
|
207
218
|
if (!getResponse.ok && getResponse.status !== 404) {
|
|
@@ -213,9 +224,9 @@ export const Branch = Resource(
|
|
|
213
224
|
|
|
214
225
|
if (getResponse.ok) {
|
|
215
226
|
// Branch exists
|
|
216
|
-
if (!
|
|
227
|
+
if (!adopt) {
|
|
217
228
|
throw new Error(
|
|
218
|
-
`Branch ${
|
|
229
|
+
`Branch ${branchName} already exists and adopt is false`,
|
|
219
230
|
);
|
|
220
231
|
}
|
|
221
232
|
|
|
@@ -245,7 +256,7 @@ export const Branch = Resource(
|
|
|
245
256
|
const safeMigrationsResponse = await api[
|
|
246
257
|
props.safeMigrations ? "post" : "delete"
|
|
247
258
|
](
|
|
248
|
-
`/organizations/${props.organizationId}/databases/${props.databaseName}/branches/${
|
|
259
|
+
`/organizations/${props.organizationId}/databases/${props.databaseName}/branches/${branchName}/safe-migrations`,
|
|
249
260
|
);
|
|
250
261
|
|
|
251
262
|
if (!safeMigrationsResponse.ok) {
|
|
@@ -257,7 +268,7 @@ export const Branch = Resource(
|
|
|
257
268
|
|
|
258
269
|
if (props.clusterSize && data.cluster_size !== props.clusterSize) {
|
|
259
270
|
const clusterResponse = await api.patch(
|
|
260
|
-
`/organizations/${props.organizationId}/databases/${props.databaseName}/branches/${
|
|
271
|
+
`/organizations/${props.organizationId}/databases/${props.databaseName}/branches/${branchName}/cluster`,
|
|
261
272
|
{
|
|
262
273
|
cluster_size: props.clusterSize,
|
|
263
274
|
},
|
|
@@ -272,7 +283,7 @@ export const Branch = Resource(
|
|
|
272
283
|
|
|
273
284
|
return this({
|
|
274
285
|
...props,
|
|
275
|
-
name:
|
|
286
|
+
name: branchName,
|
|
276
287
|
parentBranch: currentParentBranch,
|
|
277
288
|
createdAt: data.created_at,
|
|
278
289
|
updatedAt: data.updated_at,
|
|
@@ -285,7 +296,7 @@ export const Branch = Resource(
|
|
|
285
296
|
const createResponse = await api.post(
|
|
286
297
|
`/organizations/${props.organizationId}/databases/${props.databaseName}/branches`,
|
|
287
298
|
{
|
|
288
|
-
name:
|
|
299
|
+
name: branchName,
|
|
289
300
|
parent_branch: parentBranchName,
|
|
290
301
|
backup_id: props.backupId,
|
|
291
302
|
seed_data: props.seedData,
|
|
@@ -308,12 +319,12 @@ export const Branch = Resource(
|
|
|
308
319
|
api,
|
|
309
320
|
props.organizationId,
|
|
310
321
|
props.databaseName,
|
|
311
|
-
|
|
322
|
+
branchName,
|
|
312
323
|
);
|
|
313
324
|
const safeMigrationsResponse = await api[
|
|
314
325
|
props.safeMigrations ? "post" : "delete"
|
|
315
326
|
](
|
|
316
|
-
`/organizations/${props.organizationId}/databases/${props.databaseName}/branches/${
|
|
327
|
+
`/organizations/${props.organizationId}/databases/${props.databaseName}/branches/${branchName}/safe-migrations`,
|
|
317
328
|
);
|
|
318
329
|
|
|
319
330
|
if (!safeMigrationsResponse.ok) {
|
|
@@ -330,7 +341,7 @@ export const Branch = Resource(
|
|
|
330
341
|
api,
|
|
331
342
|
props.organizationId,
|
|
332
343
|
props.databaseName,
|
|
333
|
-
|
|
344
|
+
branchName,
|
|
334
345
|
props.clusterSize,
|
|
335
346
|
true,
|
|
336
347
|
);
|
|
@@ -338,7 +349,7 @@ export const Branch = Resource(
|
|
|
338
349
|
|
|
339
350
|
return this({
|
|
340
351
|
...props,
|
|
341
|
-
name:
|
|
352
|
+
name: branchName,
|
|
342
353
|
parentBranch: data.parent_branch,
|
|
343
354
|
createdAt: data.created_at,
|
|
344
355
|
updatedAt: data.updated_at,
|
|
@@ -14,8 +14,10 @@ import {
|
|
|
14
14
|
export interface DatabaseProps {
|
|
15
15
|
/**
|
|
16
16
|
* The name of the database
|
|
17
|
+
*
|
|
18
|
+
* @default ${app}-${stage}-${id}
|
|
17
19
|
*/
|
|
18
|
-
name
|
|
20
|
+
name?: string;
|
|
19
21
|
|
|
20
22
|
/**
|
|
21
23
|
* The organization ID where the database will be created
|
|
@@ -104,6 +106,11 @@ export interface Database
|
|
|
104
106
|
*/
|
|
105
107
|
id: string;
|
|
106
108
|
|
|
109
|
+
/**
|
|
110
|
+
* The name of the database
|
|
111
|
+
*/
|
|
112
|
+
name: string;
|
|
113
|
+
|
|
107
114
|
/**
|
|
108
115
|
* The current state of the database
|
|
109
116
|
*/
|
|
@@ -173,9 +180,10 @@ export const Database = Resource(
|
|
|
173
180
|
"planetscale::Database",
|
|
174
181
|
async function (
|
|
175
182
|
this: Context<Database>,
|
|
176
|
-
|
|
183
|
+
id: string,
|
|
177
184
|
props: DatabaseProps,
|
|
178
185
|
): Promise<Database> {
|
|
186
|
+
const adopt = props.adopt ?? this.scope.adopt;
|
|
179
187
|
const apiKey =
|
|
180
188
|
props.apiKey?.unencrypted || process.env.PLANETSCALE_API_TOKEN;
|
|
181
189
|
if (!apiKey) {
|
|
@@ -184,6 +192,16 @@ export const Database = Resource(
|
|
|
184
192
|
|
|
185
193
|
const api = new PlanetScaleApi({ apiKey });
|
|
186
194
|
|
|
195
|
+
const databaseName =
|
|
196
|
+
props.name ?? this.output?.name ?? this.scope.createPhysicalName(id);
|
|
197
|
+
|
|
198
|
+
if (this.phase === "update" && this.output.name !== databaseName) {
|
|
199
|
+
await api.patch(
|
|
200
|
+
`/organizations/${props.organizationId}/databases/${this.output.name}`,
|
|
201
|
+
{ new_name: databaseName },
|
|
202
|
+
);
|
|
203
|
+
}
|
|
204
|
+
|
|
187
205
|
if (this.phase === "delete") {
|
|
188
206
|
try {
|
|
189
207
|
if (this.output?.name) {
|
|
@@ -207,26 +225,26 @@ export const Database = Resource(
|
|
|
207
225
|
try {
|
|
208
226
|
// Check if database exists
|
|
209
227
|
const getResponse = await api.get(
|
|
210
|
-
`/organizations/${props.organizationId}/databases/${
|
|
228
|
+
`/organizations/${props.organizationId}/databases/${databaseName}`,
|
|
211
229
|
);
|
|
212
230
|
const getData = await getResponse.json<any>();
|
|
213
|
-
if (this.phase === "update" || (
|
|
231
|
+
if (this.phase === "update" || (adopt && getResponse.ok)) {
|
|
214
232
|
if (!getResponse.ok) {
|
|
215
|
-
throw new Error(`Database ${
|
|
233
|
+
throw new Error(`Database ${databaseName} not found`);
|
|
216
234
|
}
|
|
217
235
|
// Update database settings
|
|
218
236
|
// If updating to a non-'main' default branch, create it first
|
|
219
237
|
if (props.defaultBranch && props.defaultBranch !== "main") {
|
|
220
238
|
const branchResponse = await api.get(
|
|
221
|
-
`/organizations/${props.organizationId}/databases/${
|
|
239
|
+
`/organizations/${props.organizationId}/databases/${databaseName}/branches/${props.defaultBranch}`,
|
|
222
240
|
);
|
|
223
241
|
if (!getData.ready) {
|
|
224
|
-
await waitForDatabaseReady(api, props.organizationId,
|
|
242
|
+
await waitForDatabaseReady(api, props.organizationId, databaseName);
|
|
225
243
|
}
|
|
226
244
|
if (!branchResponse.ok && branchResponse.status === 404) {
|
|
227
245
|
// Create the branch
|
|
228
246
|
const createBranchResponse = await api.post(
|
|
229
|
-
`/organizations/${props.organizationId}/databases/${
|
|
247
|
+
`/organizations/${props.organizationId}/databases/${databaseName}/branches`,
|
|
230
248
|
{
|
|
231
249
|
name: props.defaultBranch,
|
|
232
250
|
parent_branch: "main",
|
|
@@ -242,7 +260,7 @@ export const Database = Resource(
|
|
|
242
260
|
}
|
|
243
261
|
|
|
244
262
|
const updateResponse = await api.patch(
|
|
245
|
-
`/organizations/${props.organizationId}/databases/${
|
|
263
|
+
`/organizations/${props.organizationId}/databases/${databaseName}`,
|
|
246
264
|
{
|
|
247
265
|
automatic_migrations: props.automaticMigrations,
|
|
248
266
|
migration_framework: props.migrationFramework,
|
|
@@ -265,7 +283,7 @@ export const Database = Resource(
|
|
|
265
283
|
await fixClusterSize(
|
|
266
284
|
api,
|
|
267
285
|
props.organizationId,
|
|
268
|
-
|
|
286
|
+
databaseName,
|
|
269
287
|
props.defaultBranch || "main",
|
|
270
288
|
props.clusterSize,
|
|
271
289
|
getData.ready,
|
|
@@ -275,6 +293,7 @@ export const Database = Resource(
|
|
|
275
293
|
return this({
|
|
276
294
|
...props,
|
|
277
295
|
id: data.id,
|
|
296
|
+
name: databaseName,
|
|
278
297
|
state: data.state,
|
|
279
298
|
defaultBranch: data.default_branch,
|
|
280
299
|
plan: data.plan,
|
|
@@ -285,14 +304,14 @@ export const Database = Resource(
|
|
|
285
304
|
}
|
|
286
305
|
|
|
287
306
|
if (getResponse.ok) {
|
|
288
|
-
throw new Error(`Database with name ${
|
|
307
|
+
throw new Error(`Database with name ${databaseName} already exists`);
|
|
289
308
|
}
|
|
290
309
|
|
|
291
310
|
// Create new database
|
|
292
311
|
const createResponse = await api.post(
|
|
293
312
|
`/organizations/${props.organizationId}/databases`,
|
|
294
313
|
{
|
|
295
|
-
name:
|
|
314
|
+
name: databaseName,
|
|
296
315
|
region_slug: props.region?.slug,
|
|
297
316
|
require_approval_for_deploy: props.requireApprovalForDeploy,
|
|
298
317
|
allow_data_branching: props.allowDataBranching,
|
|
@@ -316,17 +335,17 @@ export const Database = Resource(
|
|
|
316
335
|
|
|
317
336
|
// If a non-'main' default branch is specified, create it
|
|
318
337
|
if (props.defaultBranch && props.defaultBranch !== "main") {
|
|
319
|
-
await waitForDatabaseReady(api, props.organizationId,
|
|
338
|
+
await waitForDatabaseReady(api, props.organizationId, databaseName);
|
|
320
339
|
|
|
321
340
|
// Check if branch exists
|
|
322
341
|
const branchResponse = await api.get(
|
|
323
|
-
`/organizations/${props.organizationId}/databases/${
|
|
342
|
+
`/organizations/${props.organizationId}/databases/${databaseName}/branches/${props.defaultBranch}`,
|
|
324
343
|
);
|
|
325
344
|
|
|
326
345
|
if (!branchResponse.ok && branchResponse.status === 404) {
|
|
327
346
|
// Create the branch
|
|
328
347
|
const createBranchResponse = await api.post(
|
|
329
|
-
`/organizations/${props.organizationId}/databases/${
|
|
348
|
+
`/organizations/${props.organizationId}/databases/${databaseName}/branches`,
|
|
330
349
|
{
|
|
331
350
|
name: props.defaultBranch,
|
|
332
351
|
parent_branch: "main",
|
|
@@ -342,7 +361,7 @@ export const Database = Resource(
|
|
|
342
361
|
await fixClusterSize(
|
|
343
362
|
api,
|
|
344
363
|
props.organizationId,
|
|
345
|
-
|
|
364
|
+
databaseName,
|
|
346
365
|
props.defaultBranch || "main",
|
|
347
366
|
props.clusterSize,
|
|
348
367
|
false,
|
|
@@ -350,7 +369,7 @@ export const Database = Resource(
|
|
|
350
369
|
|
|
351
370
|
// Update database to use new branch as default
|
|
352
371
|
const updateResponse = await api.patch(
|
|
353
|
-
`/organizations/${props.organizationId}/databases/${
|
|
372
|
+
`/organizations/${props.organizationId}/databases/${databaseName}`,
|
|
354
373
|
{
|
|
355
374
|
default_branch: props.defaultBranch,
|
|
356
375
|
},
|
|
@@ -366,6 +385,7 @@ export const Database = Resource(
|
|
|
366
385
|
return this({
|
|
367
386
|
...props,
|
|
368
387
|
id: data.id,
|
|
388
|
+
name: databaseName,
|
|
369
389
|
state: updatedData.state,
|
|
370
390
|
defaultBranch: updatedData.default_branch,
|
|
371
391
|
plan: updatedData.plan,
|
|
@@ -379,6 +399,7 @@ export const Database = Resource(
|
|
|
379
399
|
return this({
|
|
380
400
|
...props,
|
|
381
401
|
id: data.id,
|
|
402
|
+
name: databaseName,
|
|
382
403
|
state: data.state,
|
|
383
404
|
defaultBranch: data.default_branch || "main",
|
|
384
405
|
plan: data.plan,
|
|
@@ -14,8 +14,10 @@ import type { Database } from "./database.ts";
|
|
|
14
14
|
export interface PasswordProps {
|
|
15
15
|
/**
|
|
16
16
|
* The name of the password
|
|
17
|
+
*
|
|
18
|
+
* @default ${app}-${stage}-${id}
|
|
17
19
|
*/
|
|
18
|
-
name
|
|
20
|
+
name?: string;
|
|
19
21
|
|
|
20
22
|
/**
|
|
21
23
|
* The organization ID where the password will be created
|
|
@@ -73,6 +75,11 @@ export interface Password
|
|
|
73
75
|
*/
|
|
74
76
|
id: string;
|
|
75
77
|
|
|
78
|
+
/**
|
|
79
|
+
* Name of the Password.
|
|
80
|
+
*/
|
|
81
|
+
name: string;
|
|
82
|
+
|
|
76
83
|
/**
|
|
77
84
|
* The timestamp when the password expires (ISO 8601 format)
|
|
78
85
|
*/
|
|
@@ -255,7 +262,7 @@ export const Password = Resource(
|
|
|
255
262
|
"planetscale::Password",
|
|
256
263
|
async function (
|
|
257
264
|
this: Context<Password>,
|
|
258
|
-
|
|
265
|
+
id: string,
|
|
259
266
|
props: PasswordProps,
|
|
260
267
|
): Promise<Password> {
|
|
261
268
|
const apiKey =
|
|
@@ -266,7 +273,7 @@ export const Password = Resource(
|
|
|
266
273
|
const nameSlug = this.isReplacement
|
|
267
274
|
? lowercaseId()
|
|
268
275
|
: (this.output?.nameSlug ?? lowercaseId());
|
|
269
|
-
const name = `${props.name.toLowerCase()}-${nameSlug}`;
|
|
276
|
+
const name = `${(props.name ?? this.output?.name ?? this.scope.createPhysicalName(id)).toLowerCase()}-${nameSlug}`;
|
|
270
277
|
|
|
271
278
|
const api = new PlanetScaleApi({ apiKey });
|
|
272
279
|
const branchName =
|
package/src/resource.ts
CHANGED
|
@@ -59,7 +59,6 @@ export const ResourceFQN = Symbol.for("alchemy::ResourceFQN");
|
|
|
59
59
|
export type ResourceKind = string;
|
|
60
60
|
export const ResourceKind = Symbol.for("alchemy::ResourceKind");
|
|
61
61
|
export const ResourceScope = Symbol.for("alchemy::ResourceScope");
|
|
62
|
-
export const InnerResourceScope = Symbol.for("alchemy::InnerResourceScope");
|
|
63
62
|
export const ResourceSeq = Symbol.for("alchemy::ResourceSeq");
|
|
64
63
|
|
|
65
64
|
export interface ProviderOptions {
|
|
@@ -97,7 +96,6 @@ export interface PendingResource<Out = unknown> extends Promise<Out> {
|
|
|
97
96
|
[ResourceScope]: Scope;
|
|
98
97
|
[ResourceSeq]: number;
|
|
99
98
|
[DestroyStrategy]: DestroyStrategy;
|
|
100
|
-
[InnerResourceScope]: Promise<Scope>;
|
|
101
99
|
}
|
|
102
100
|
|
|
103
101
|
export interface Resource<Kind extends ResourceKind = ResourceKind> {
|
|
@@ -187,7 +185,6 @@ export function Resource<
|
|
|
187
185
|
|
|
188
186
|
// get a sequence number (unique within the scope) for the resource
|
|
189
187
|
const seq = scope.seq();
|
|
190
|
-
let resolveInnerScope: ((scope: Scope) => void) | undefined;
|
|
191
188
|
const meta = {
|
|
192
189
|
[ResourceKind]: type,
|
|
193
190
|
[ResourceID]: resourceID,
|
|
@@ -195,14 +192,8 @@ export function Resource<
|
|
|
195
192
|
[ResourceSeq]: seq,
|
|
196
193
|
[ResourceScope]: scope,
|
|
197
194
|
[DestroyStrategy]: options?.destroyStrategy ?? "sequential",
|
|
198
|
-
[InnerResourceScope]: new Promise<Scope>((resolve) => {
|
|
199
|
-
resolveInnerScope = resolve;
|
|
200
|
-
}),
|
|
201
195
|
} as any as PendingResource<Out>;
|
|
202
|
-
const promise = apply(meta, props,
|
|
203
|
-
...options,
|
|
204
|
-
resolveInnerScope,
|
|
205
|
-
});
|
|
196
|
+
const promise = apply(meta, props, options);
|
|
206
197
|
const resource = Object.assign(promise, meta);
|
|
207
198
|
scope.resources.set(resourceID, resource);
|
|
208
199
|
return resource;
|
package/src/scope.ts
CHANGED
|
@@ -15,7 +15,6 @@ import {
|
|
|
15
15
|
type ResourceProps,
|
|
16
16
|
} from "./resource.ts";
|
|
17
17
|
import type { State, StateStore, StateStoreType } from "./state.ts";
|
|
18
|
-
import { D1StateStore } from "./state/d1-state-store.ts";
|
|
19
18
|
import { FileSystemStateStore } from "./state/file-system-state-store.ts";
|
|
20
19
|
import { InstrumentedStateStore } from "./state/instrumented-state-store.ts";
|
|
21
20
|
import {
|
|
@@ -84,6 +83,12 @@ export interface ScopeOptions extends ProviderCredentials {
|
|
|
84
83
|
* @default "./.alchemy"
|
|
85
84
|
*/
|
|
86
85
|
dotAlchemy?: string;
|
|
86
|
+
/**
|
|
87
|
+
* Whether to adopt resources if they already exist but are not yet managed by your Alchemy app.
|
|
88
|
+
*
|
|
89
|
+
* @default false
|
|
90
|
+
*/
|
|
91
|
+
adopt?: boolean;
|
|
87
92
|
}
|
|
88
93
|
|
|
89
94
|
/**
|
|
@@ -123,7 +128,6 @@ export const DEFAULT_STAGE =
|
|
|
123
128
|
|
|
124
129
|
declare global {
|
|
125
130
|
var __ALCHEMY_STORAGE__: AsyncLocalStorage<Scope>;
|
|
126
|
-
var __ALCHEMY_GLOBALS__: Scope[];
|
|
127
131
|
}
|
|
128
132
|
|
|
129
133
|
const ScopeSymbol = Symbol.for("alchemy::Scope");
|
|
@@ -139,17 +143,9 @@ export class Scope {
|
|
|
139
143
|
|
|
140
144
|
public static storage = (globalThis.__ALCHEMY_STORAGE__ ??=
|
|
141
145
|
new AsyncLocalStorage<Scope>());
|
|
142
|
-
public static globals: Scope[] = (globalThis.__ALCHEMY_GLOBALS__ ??= []);
|
|
143
146
|
|
|
144
147
|
public static getScope(): Scope | undefined {
|
|
145
|
-
|
|
146
|
-
if (!scope) {
|
|
147
|
-
if (Scope.globals.length > 0) {
|
|
148
|
-
return Scope.globals[Scope.globals.length - 1];
|
|
149
|
-
}
|
|
150
|
-
return undefined;
|
|
151
|
-
}
|
|
152
|
-
return scope;
|
|
148
|
+
return Scope.storage.getStore();
|
|
153
149
|
}
|
|
154
150
|
|
|
155
151
|
public static get root(): Scope {
|
|
@@ -176,10 +172,12 @@ export class Scope {
|
|
|
176
172
|
public readonly local: boolean;
|
|
177
173
|
public readonly watch: boolean;
|
|
178
174
|
public readonly force: boolean;
|
|
175
|
+
public readonly adopt: boolean;
|
|
179
176
|
public readonly destroyStrategy: DestroyStrategy;
|
|
180
177
|
public readonly logger: LoggerApi;
|
|
181
178
|
public readonly telemetryClient: ITelemetryClient;
|
|
182
179
|
public readonly dataMutex: AsyncMutex;
|
|
180
|
+
public readonly dotAlchemy: string;
|
|
183
181
|
|
|
184
182
|
// Provider credentials for scope-level credential overrides
|
|
185
183
|
public readonly providerCredentials: ProviderCredentials;
|
|
@@ -198,8 +196,6 @@ export class Scope {
|
|
|
198
196
|
return this.scopeName;
|
|
199
197
|
}
|
|
200
198
|
|
|
201
|
-
public readonly dotAlchemy: string;
|
|
202
|
-
|
|
203
199
|
constructor(options: ScopeOptions) {
|
|
204
200
|
// Extract core scope options first
|
|
205
201
|
const {
|
|
@@ -216,10 +212,16 @@ export class Scope {
|
|
|
216
212
|
destroyStrategy,
|
|
217
213
|
telemetryClient,
|
|
218
214
|
logger,
|
|
215
|
+
adopt,
|
|
219
216
|
dotAlchemy,
|
|
220
217
|
...providerCredentials
|
|
221
218
|
} = options;
|
|
222
219
|
|
|
220
|
+
this.dotAlchemy =
|
|
221
|
+
dotAlchemy ??
|
|
222
|
+
this.parent?.dotAlchemy ??
|
|
223
|
+
path.join(process.cwd(), ".alchemy");
|
|
224
|
+
|
|
223
225
|
this.scopeName = scopeName;
|
|
224
226
|
this.name = this.scopeName;
|
|
225
227
|
this.parent = parent ?? Scope.getScope();
|
|
@@ -234,10 +236,6 @@ export class Scope {
|
|
|
234
236
|
`Scope name "${this.scopeName}" cannot contain double colons`,
|
|
235
237
|
);
|
|
236
238
|
}
|
|
237
|
-
this.dotAlchemy =
|
|
238
|
-
options.dotAlchemy ??
|
|
239
|
-
this.parent?.dotAlchemy ??
|
|
240
|
-
path.join(process.cwd(), ".alchemy");
|
|
241
239
|
|
|
242
240
|
this.stage = stage ?? this.parent?.stage ?? DEFAULT_STAGE;
|
|
243
241
|
this.parent?.children.set(this.scopeName!, this);
|
|
@@ -266,6 +264,7 @@ export class Scope {
|
|
|
266
264
|
this.local = local ?? this.parent?.local ?? false;
|
|
267
265
|
this.watch = watch ?? this.parent?.watch ?? false;
|
|
268
266
|
this.force = force ?? this.parent?.force ?? false;
|
|
267
|
+
this.adopt = adopt ?? this.parent?.adopt ?? false;
|
|
269
268
|
this.destroyStrategy =
|
|
270
269
|
destroyStrategy ?? this.parent?.destroyStrategy ?? "sequential";
|
|
271
270
|
if (this.local) {
|
|
@@ -275,7 +274,9 @@ export class Scope {
|
|
|
275
274
|
}
|
|
276
275
|
|
|
277
276
|
this.stateStore =
|
|
278
|
-
stateStore ??
|
|
277
|
+
stateStore ??
|
|
278
|
+
this.parent?.stateStore ??
|
|
279
|
+
((scope) => new FileSystemStateStore(scope));
|
|
279
280
|
this.telemetryClient = telemetryClient ?? this.parent?.telemetryClient!;
|
|
280
281
|
this.state = new InstrumentedStateStore(
|
|
281
282
|
this.stateStore(this),
|
|
@@ -287,6 +288,14 @@ export class Scope {
|
|
|
287
288
|
this.dataMutex = new AsyncMutex();
|
|
288
289
|
}
|
|
289
290
|
|
|
291
|
+
public createPhysicalName(id: string, delimiter = "-"): string {
|
|
292
|
+
const app = this.appName;
|
|
293
|
+
const stage = this.stage;
|
|
294
|
+
return [app, ...this.chain.slice(2), id, stage]
|
|
295
|
+
.map((s) => s.replaceAll(/[^a-z0-9_-]/gi, delimiter))
|
|
296
|
+
.join(delimiter);
|
|
297
|
+
}
|
|
298
|
+
|
|
290
299
|
public async spawn<
|
|
291
300
|
E extends ((line: string) => string | undefined) | undefined,
|
|
292
301
|
>(
|
|
@@ -294,9 +303,8 @@ export class Scope {
|
|
|
294
303
|
id: string,
|
|
295
304
|
options: Omit<IdempotentSpawnOptions, "log" | "stateFile">,
|
|
296
305
|
): Promise<E extends undefined ? undefined : string> {
|
|
297
|
-
const
|
|
298
|
-
const
|
|
299
|
-
const pidsDir = path.join(dotAlchemy, "pids");
|
|
306
|
+
const logsDir = path.join(this.dotAlchemy, "logs");
|
|
307
|
+
const pidsDir = path.join(this.dotAlchemy, "pids");
|
|
300
308
|
|
|
301
309
|
const result = await idempotentSpawn({
|
|
302
310
|
log: path.join(logsDir, `${id}.log`),
|
|
@@ -496,14 +504,6 @@ export class Scope {
|
|
|
496
504
|
if (this.finalized && !shouldForce) {
|
|
497
505
|
return;
|
|
498
506
|
}
|
|
499
|
-
if (this.parent === undefined && Scope.globals.length > 0) {
|
|
500
|
-
const last = Scope.globals.pop();
|
|
501
|
-
if (last !== this) {
|
|
502
|
-
throw new Error(
|
|
503
|
-
"Running in AsyncLocaStorage.enterWith emulation mode and attempted to finalize a global Scope that wasn't top of the stack",
|
|
504
|
-
);
|
|
505
|
-
}
|
|
506
|
-
}
|
|
507
507
|
this.finalized = true;
|
|
508
508
|
// trigger and await all deferred promises
|
|
509
509
|
await Promise.all(this.deferred.map((fn) => fn()));
|
|
@@ -667,15 +667,6 @@ export class Scope {
|
|
|
667
667
|
}
|
|
668
668
|
}
|
|
669
669
|
|
|
670
|
-
const defaultStateStore: StateStoreType = (scope: Scope) => {
|
|
671
|
-
switch (process.env.ALCHEMY_STATE_STORE) {
|
|
672
|
-
case "d1":
|
|
673
|
-
return new D1StateStore(scope);
|
|
674
|
-
default:
|
|
675
|
-
return new FileSystemStateStore(scope);
|
|
676
|
-
}
|
|
677
|
-
};
|
|
678
|
-
|
|
679
670
|
declare global {
|
|
680
671
|
// for runtime
|
|
681
672
|
// TODO(sam): maybe inject is a better way to achieve this
|