alchemy 0.62.3 → 0.63.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/alchemy.js +1516 -1202
- package/bin/commands/deploy.ts +2 -0
- package/bin/commands/dev.ts +2 -0
- package/bin/services/execute-alchemy.ts +11 -0
- package/bin/services/template-manager.ts +2 -0
- package/bin/types.ts +2 -1
- package/lib/alchemy.d.ts +6 -22
- package/lib/alchemy.d.ts.map +1 -1
- package/lib/alchemy.js +65 -169
- package/lib/alchemy.js.map +1 -1
- package/lib/apply.d.ts +0 -2
- package/lib/apply.d.ts.map +1 -1
- package/lib/apply.js +2 -16
- package/lib/apply.js.map +1 -1
- package/lib/aws/account-id.d.ts.map +1 -1
- package/lib/aws/account-id.js +3 -2
- package/lib/aws/account-id.js.map +1 -1
- package/lib/aws/bucket.d.ts +8 -2
- package/lib/aws/bucket.d.ts.map +1 -1
- package/lib/aws/bucket.js +21 -14
- package/lib/aws/bucket.js.map +1 -1
- package/lib/aws/ec2/security-group.d.ts +8 -2
- package/lib/aws/ec2/security-group.d.ts.map +1 -1
- package/lib/aws/ec2/security-group.js +7 -2
- package/lib/aws/ec2/security-group.js.map +1 -1
- package/lib/aws/function.d.ts +9 -3
- package/lib/aws/function.d.ts.map +1 -1
- package/lib/aws/function.js +35 -26
- package/lib/aws/function.js.map +1 -1
- package/lib/aws/policy-attachment.d.ts.map +1 -1
- package/lib/aws/policy-attachment.js +2 -1
- package/lib/aws/policy-attachment.js.map +1 -1
- package/lib/aws/policy.d.ts +8 -2
- package/lib/aws/policy.d.ts.map +1 -1
- package/lib/aws/policy.js +13 -4
- package/lib/aws/policy.js.map +1 -1
- package/lib/aws/queue.d.ts +8 -2
- package/lib/aws/queue.d.ts.map +1 -1
- package/lib/aws/queue.js +22 -14
- package/lib/aws/queue.js.map +1 -1
- package/lib/aws/role.d.ts +8 -2
- package/lib/aws/role.d.ts.map +1 -1
- package/lib/aws/role.js +10 -3
- package/lib/aws/role.js.map +1 -1
- package/lib/aws/ses.d.ts +1 -1
- package/lib/aws/ses.d.ts.map +1 -1
- package/lib/aws/ses.js +2 -1
- package/lib/aws/ses.js.map +1 -1
- package/lib/aws/ssm-parameter.d.ts +8 -2
- package/lib/aws/ssm-parameter.d.ts.map +1 -1
- package/lib/aws/ssm-parameter.js +15 -10
- package/lib/aws/ssm-parameter.js.map +1 -1
- package/lib/aws/table.d.ts +8 -2
- package/lib/aws/table.d.ts.map +1 -1
- package/lib/aws/table.js +17 -9
- package/lib/aws/table.js.map +1 -1
- package/lib/cloudflare/account-api-token.d.ts +2 -2
- package/lib/cloudflare/account-api-token.d.ts.map +1 -1
- package/lib/cloudflare/account-api-token.js +7 -6
- package/lib/cloudflare/account-api-token.js.map +1 -1
- package/lib/cloudflare/ai-gateway.d.ts +9 -4
- package/lib/cloudflare/ai-gateway.d.ts.map +1 -1
- package/lib/cloudflare/ai-gateway.js +20 -24
- package/lib/cloudflare/ai-gateway.js.map +1 -1
- package/lib/cloudflare/api-schema.d.ts +2 -2
- package/lib/cloudflare/api-schema.d.ts.map +1 -1
- package/lib/cloudflare/api-schema.js +6 -2
- package/lib/cloudflare/api-schema.js.map +1 -1
- package/lib/cloudflare/api-shield.d.ts +5 -1
- package/lib/cloudflare/api-shield.d.ts.map +1 -1
- package/lib/cloudflare/api-shield.js +6 -1
- package/lib/cloudflare/api-shield.js.map +1 -1
- package/lib/cloudflare/assets.d.ts +1 -1
- package/lib/cloudflare/assets.d.ts.map +1 -1
- package/lib/cloudflare/astro/astro.d.ts.map +1 -1
- package/lib/cloudflare/astro/astro.js +3 -1
- package/lib/cloudflare/astro/astro.js.map +1 -1
- package/lib/cloudflare/astro/plugin.d.ts +2 -1
- package/lib/cloudflare/astro/plugin.d.ts.map +1 -1
- package/lib/cloudflare/astro/plugin.js.map +1 -1
- package/lib/cloudflare/bindings.d.ts +2 -2
- package/lib/cloudflare/bindings.d.ts.map +1 -1
- package/lib/cloudflare/bound.d.ts +1 -1
- package/lib/cloudflare/bound.d.ts.map +1 -1
- package/lib/cloudflare/bucket.d.ts +120 -1
- package/lib/cloudflare/bucket.d.ts.map +1 -1
- package/lib/cloudflare/bucket.js +80 -2
- package/lib/cloudflare/bucket.js.map +1 -1
- package/lib/cloudflare/compatibility-date.gen.d.ts +1 -1
- package/lib/cloudflare/compatibility-date.gen.js +1 -1
- package/lib/cloudflare/container.d.ts +10 -4
- package/lib/cloudflare/container.d.ts.map +1 -1
- package/lib/cloudflare/container.js +12 -9
- package/lib/cloudflare/container.js.map +1 -1
- package/lib/cloudflare/custom-domain.js +2 -1
- package/lib/cloudflare/custom-domain.js.map +1 -1
- package/lib/cloudflare/d1-database.d.ts +1 -1
- package/lib/cloudflare/d1-database.d.ts.map +1 -1
- package/lib/cloudflare/d1-database.js +6 -2
- package/lib/cloudflare/d1-database.js.map +1 -1
- package/lib/cloudflare/dispatch-namespace.d.ts +2 -0
- package/lib/cloudflare/dispatch-namespace.d.ts.map +1 -1
- package/lib/cloudflare/dispatch-namespace.js +7 -5
- package/lib/cloudflare/dispatch-namespace.js.map +1 -1
- package/lib/cloudflare/hyperdrive.d.ts +7 -1
- package/lib/cloudflare/hyperdrive.d.ts.map +1 -1
- package/lib/cloudflare/hyperdrive.js +2 -1
- package/lib/cloudflare/hyperdrive.js.map +1 -1
- package/lib/cloudflare/kv-namespace.d.ts +3 -0
- package/lib/cloudflare/kv-namespace.d.ts.map +1 -1
- package/lib/cloudflare/kv-namespace.js +11 -2
- package/lib/cloudflare/kv-namespace.js.map +1 -1
- package/lib/cloudflare/miniflare/miniflare-worker-proxy.js +3 -1
- package/lib/cloudflare/miniflare/miniflare-worker-proxy.js.map +1 -1
- package/lib/cloudflare/miniflare/paths.d.ts +4 -0
- package/lib/cloudflare/miniflare/paths.d.ts.map +1 -1
- package/lib/cloudflare/miniflare/paths.js +11 -0
- package/lib/cloudflare/miniflare/paths.js.map +1 -1
- package/lib/cloudflare/pipeline.d.ts +14 -3
- package/lib/cloudflare/pipeline.d.ts.map +1 -1
- package/lib/cloudflare/pipeline.js +31 -2
- package/lib/cloudflare/pipeline.js.map +1 -1
- package/lib/cloudflare/queue-consumer.js +1 -1
- package/lib/cloudflare/queue-consumer.js.map +1 -1
- package/lib/cloudflare/queue.d.ts +4 -2
- package/lib/cloudflare/queue.d.ts.map +1 -1
- package/lib/cloudflare/queue.js +13 -9
- package/lib/cloudflare/queue.js.map +1 -1
- package/lib/cloudflare/react-router/plugin.d.ts +1 -1
- package/lib/cloudflare/react-router/plugin.d.ts.map +1 -1
- package/lib/cloudflare/react-router/react-router.d.ts.map +1 -1
- package/lib/cloudflare/react-router/react-router.js +32 -2
- package/lib/cloudflare/react-router/react-router.js.map +1 -1
- package/lib/cloudflare/redwood/plugin.d.ts +2 -1
- package/lib/cloudflare/redwood/plugin.d.ts.map +1 -1
- package/lib/cloudflare/redwood/plugin.js.map +1 -1
- package/lib/cloudflare/route.js +1 -1
- package/lib/cloudflare/route.js.map +1 -1
- package/lib/cloudflare/ruleset.d.ts +3 -1
- package/lib/cloudflare/ruleset.d.ts.map +1 -1
- package/lib/cloudflare/ruleset.js +3 -2
- package/lib/cloudflare/ruleset.js.map +1 -1
- package/lib/cloudflare/secret.d.ts +6 -23
- package/lib/cloudflare/secret.d.ts.map +1 -1
- package/lib/cloudflare/secret.js +8 -4
- package/lib/cloudflare/secret.js.map +1 -1
- package/lib/cloudflare/secrets-store.d.ts +1 -1
- package/lib/cloudflare/secrets-store.d.ts.map +1 -1
- package/lib/cloudflare/secrets-store.js +5 -2
- package/lib/cloudflare/secrets-store.js.map +1 -1
- package/lib/cloudflare/tunnel.d.ts +5 -1
- package/lib/cloudflare/tunnel.d.ts.map +1 -1
- package/lib/cloudflare/tunnel.js +5 -1
- package/lib/cloudflare/tunnel.js.map +1 -1
- package/lib/cloudflare/vectorize-index.d.ts +7 -1
- package/lib/cloudflare/vectorize-index.d.ts.map +1 -1
- package/lib/cloudflare/vectorize-index.js +5 -2
- package/lib/cloudflare/vectorize-index.js.map +1 -1
- package/lib/cloudflare/vite/plugin.d.ts +2 -1
- package/lib/cloudflare/vite/plugin.d.ts.map +1 -1
- package/lib/cloudflare/vite/plugin.js.map +1 -1
- package/lib/cloudflare/website.js +1 -1
- package/lib/cloudflare/website.js.map +1 -1
- package/lib/cloudflare/worker.d.ts +1 -1
- package/lib/cloudflare/worker.d.ts.map +1 -1
- package/lib/cloudflare/worker.js +12 -7
- package/lib/cloudflare/worker.js.map +1 -1
- package/lib/cloudflare/wrangler.json.d.ts +1 -1
- package/lib/cloudflare/wrangler.json.d.ts.map +1 -1
- package/lib/cloudflare/wrangler.json.js +5 -3
- package/lib/cloudflare/wrangler.json.js.map +1 -1
- package/lib/docker/container.d.ts +6 -0
- package/lib/docker/container.d.ts.map +1 -1
- package/lib/docker/container.js +5 -1
- package/lib/docker/container.js.map +1 -1
- package/lib/docker/network.d.ts +8 -2
- package/lib/docker/network.d.ts.map +1 -1
- package/lib/docker/network.js +7 -2
- package/lib/docker/network.js.map +1 -1
- package/lib/docker/volume.d.ts +8 -2
- package/lib/docker/volume.d.ts.map +1 -1
- package/lib/docker/volume.js +6 -4
- package/lib/docker/volume.js.map +1 -1
- package/lib/esbuild/bundle.d.ts +1 -1
- package/lib/fs/index.d.ts +0 -8
- package/lib/fs/index.d.ts.map +1 -1
- package/lib/fs/index.js +0 -8
- package/lib/fs/index.js.map +1 -1
- package/lib/github/client.d.ts +1 -1
- package/lib/github/client.d.ts.map +1 -1
- package/lib/github/client.js +2 -1
- package/lib/github/client.js.map +1 -1
- package/lib/github/repository-environment.d.ts +8 -2
- package/lib/github/repository-environment.d.ts.map +1 -1
- package/lib/github/repository-environment.js +16 -12
- package/lib/github/repository-environment.js.map +1 -1
- package/lib/neon/project.d.ts +7 -1
- package/lib/neon/project.d.ts.map +1 -1
- package/lib/neon/project.js +10 -6
- package/lib/neon/project.js.map +1 -1
- package/lib/planetscale/branch.d.ts +4 -2
- package/lib/planetscale/branch.d.ts.map +1 -1
- package/lib/planetscale/branch.js +18 -12
- package/lib/planetscale/branch.js.map +1 -1
- package/lib/planetscale/database.d.ts +8 -2
- package/lib/planetscale/database.d.ts.map +1 -1
- package/lib/planetscale/database.js +24 -16
- package/lib/planetscale/database.js.map +1 -1
- package/lib/planetscale/password.d.ts +8 -2
- package/lib/planetscale/password.d.ts.map +1 -1
- package/lib/planetscale/password.js +2 -2
- package/lib/planetscale/password.js.map +1 -1
- package/lib/resource.d.ts +0 -2
- package/lib/resource.d.ts.map +1 -1
- package/lib/resource.js +1 -9
- package/lib/resource.js.map +1 -1
- package/lib/scope.d.ts +9 -3
- package/lib/scope.d.ts.map +1 -1
- package/lib/scope.js +21 -34
- package/lib/scope.js.map +1 -1
- package/lib/sentry/client-key.d.ts +7 -1
- package/lib/sentry/client-key.d.ts.map +1 -1
- package/lib/sentry/client-key.js +45 -6
- package/lib/sentry/client-key.js.map +1 -1
- package/lib/sentry/project.d.ts +8 -2
- package/lib/sentry/project.d.ts.map +1 -1
- package/lib/sentry/project.js +35 -5
- package/lib/sentry/project.js.map +1 -1
- package/lib/sentry/team.d.ts +8 -2
- package/lib/sentry/team.d.ts.map +1 -1
- package/lib/sentry/team.js +36 -6
- package/lib/sentry/team.js.map +1 -1
- package/lib/serde.d.ts +0 -5
- package/lib/serde.d.ts.map +1 -1
- package/lib/serde.js +0 -28
- package/lib/serde.js.map +1 -1
- package/lib/state/d1-state-store.d.ts +1 -1
- package/lib/state/d1-state-store.d.ts.map +1 -1
- package/lib/state/d1-state-store.js +5 -5
- package/lib/state/d1-state-store.js.map +1 -1
- package/lib/state/sqlite-state-store.d.ts.map +1 -1
- package/lib/state/sqlite-state-store.js +7 -11
- package/lib/state/sqlite-state-store.js.map +1 -1
- package/lib/stripe/card.d.ts.map +1 -1
- package/lib/stripe/card.js +3 -2
- package/lib/stripe/card.js.map +1 -1
- package/lib/stripe/client.d.ts +2 -2
- package/lib/stripe/client.d.ts.map +1 -1
- package/lib/stripe/client.js +4 -3
- package/lib/stripe/client.js.map +1 -1
- package/lib/stripe/coupon.d.ts.map +1 -1
- package/lib/stripe/coupon.js +4 -3
- package/lib/stripe/coupon.js.map +1 -1
- package/lib/stripe/customer.js +2 -2
- package/lib/stripe/customer.js.map +1 -1
- package/lib/stripe/entitlements-feature.d.ts.map +1 -1
- package/lib/stripe/entitlements-feature.js +3 -2
- package/lib/stripe/entitlements-feature.js.map +1 -1
- package/lib/stripe/file.d.ts.map +1 -1
- package/lib/stripe/file.js +3 -2
- package/lib/stripe/file.js.map +1 -1
- package/lib/stripe/meter.js +2 -2
- package/lib/stripe/meter.js.map +1 -1
- package/lib/stripe/portal-configuration.d.ts.map +1 -1
- package/lib/stripe/portal-configuration.js +3 -2
- package/lib/stripe/portal-configuration.js.map +1 -1
- package/lib/stripe/price.d.ts.map +1 -1
- package/lib/stripe/price.js +3 -2
- package/lib/stripe/price.js.map +1 -1
- package/lib/stripe/product-feature.d.ts.map +1 -1
- package/lib/stripe/product-feature.js +3 -2
- package/lib/stripe/product-feature.js.map +1 -1
- package/lib/stripe/product.d.ts.map +1 -1
- package/lib/stripe/product.js +3 -2
- package/lib/stripe/product.js.map +1 -1
- package/lib/stripe/promotion-code.d.ts.map +1 -1
- package/lib/stripe/promotion-code.js +3 -2
- package/lib/stripe/promotion-code.js.map +1 -1
- package/lib/stripe/shipping-rate.d.ts.map +1 -1
- package/lib/stripe/shipping-rate.js +4 -3
- package/lib/stripe/shipping-rate.js.map +1 -1
- package/lib/stripe/tax-rate.d.ts.map +1 -1
- package/lib/stripe/tax-rate.js +3 -2
- package/lib/stripe/tax-rate.js.map +1 -1
- package/lib/stripe/webhook.d.ts.map +1 -1
- package/lib/stripe/webhook.js +4 -3
- package/lib/stripe/webhook.js.map +1 -1
- package/lib/test/vitest.d.ts.map +1 -1
- package/lib/test/vitest.js +1 -0
- package/lib/test/vitest.js.map +1 -1
- package/lib/upstash/redis.d.ts +8 -2
- package/lib/upstash/redis.d.ts.map +1 -1
- package/lib/upstash/redis.js +5 -4
- package/lib/upstash/redis.js.map +1 -1
- package/lib/util/ignore-matcher.d.ts.map +1 -1
- package/lib/util/ignore-matcher.js +3 -1
- package/lib/util/ignore-matcher.js.map +1 -1
- package/lib/util/peer.d.ts +10 -0
- package/lib/util/peer.d.ts.map +1 -0
- package/lib/util/peer.js +42 -0
- package/lib/util/peer.js.map +1 -0
- package/lib/vercel/project.d.ts +7 -1
- package/lib/vercel/project.d.ts.map +1 -1
- package/lib/vercel/project.js +28 -0
- package/lib/vercel/project.js.map +1 -1
- package/package.json +88 -74
- package/src/alchemy.ts +76 -222
- package/src/apply.ts +6 -19
- package/src/aws/account-id.ts +6 -3
- package/src/aws/bucket.ts +43 -32
- package/src/aws/ec2/security-group.ts +15 -3
- package/src/aws/function.ts +65 -39
- package/src/aws/policy-attachment.ts +10 -6
- package/src/aws/policy.ts +33 -15
- package/src/aws/queue.ts +50 -29
- package/src/aws/role.ts +37 -20
- package/src/aws/ses.ts +24 -20
- package/src/aws/ssm-parameter.ts +40 -20
- package/src/aws/table.ts +35 -17
- package/src/cloudflare/account-api-token.ts +9 -7
- package/src/cloudflare/ai-gateway.ts +37 -34
- package/src/cloudflare/api-schema.ts +33 -26
- package/src/cloudflare/api-shield.ts +15 -2
- package/src/cloudflare/astro/astro.ts +5 -1
- package/src/cloudflare/astro/plugin.ts +2 -1
- package/src/cloudflare/bindings.ts +2 -2
- package/src/cloudflare/bound.ts +1 -1
- package/src/cloudflare/bucket.ts +242 -3
- package/src/cloudflare/compatibility-date.gen.ts +1 -1
- package/src/cloudflare/container.ts +23 -12
- package/src/cloudflare/custom-domain.ts +2 -2
- package/src/cloudflare/d1-database.ts +10 -3
- package/src/cloudflare/dispatch-namespace.ts +10 -7
- package/src/cloudflare/hyperdrive.ts +13 -3
- package/src/cloudflare/kv-namespace.ts +25 -2
- package/src/cloudflare/miniflare/miniflare-worker-proxy.ts +3 -1
- package/src/cloudflare/miniflare/paths.ts +13 -0
- package/src/cloudflare/pipeline.ts +76 -28
- package/src/cloudflare/queue-consumer.ts +1 -1
- package/src/cloudflare/queue.ts +26 -14
- package/src/cloudflare/react-router/react-router.ts +28 -2
- package/src/cloudflare/redwood/plugin.ts +3 -2
- package/src/cloudflare/route.ts +1 -1
- package/src/cloudflare/ruleset.ts +7 -2
- package/src/cloudflare/secret.ts +20 -31
- package/src/cloudflare/secrets-store.ts +7 -3
- package/src/cloudflare/tunnel.ts +13 -2
- package/src/cloudflare/vectorize-index.ts +14 -3
- package/src/cloudflare/vite/plugin.ts +3 -2
- package/src/cloudflare/website.ts +1 -1
- package/src/cloudflare/worker.ts +35 -23
- package/src/cloudflare/wrangler.json.ts +7 -4
- package/src/docker/container.ts +13 -1
- package/src/docker/network.ts +18 -3
- package/src/docker/volume.ts +17 -6
- package/src/fs/index.ts +0 -8
- package/src/github/client.ts +6 -2
- package/src/github/repository-environment.ts +27 -13
- package/src/neon/project.ts +20 -6
- package/src/planetscale/branch.ts +24 -13
- package/src/planetscale/database.ts +38 -17
- package/src/planetscale/password.ts +10 -3
- package/src/resource.ts +1 -10
- package/src/scope.ts +29 -38
- package/src/sentry/client-key.ts +74 -6
- package/src/sentry/project.ts +59 -6
- package/src/sentry/team.ts +55 -7
- package/src/serde.ts +0 -44
- package/src/state/d1-state-store.ts +13 -6
- package/src/state/sqlite-state-store.ts +16 -17
- package/src/stripe/card.ts +5 -2
- package/src/stripe/client.ts +10 -3
- package/src/stripe/coupon.ts +4 -3
- package/src/stripe/customer.ts +2 -2
- package/src/stripe/entitlements-feature.ts +5 -2
- package/src/stripe/file.ts +3 -2
- package/src/stripe/meter.ts +2 -2
- package/src/stripe/portal-configuration.ts +5 -2
- package/src/stripe/price.ts +3 -2
- package/src/stripe/product-feature.ts +5 -2
- package/src/stripe/product.ts +3 -2
- package/src/stripe/promotion-code.ts +3 -2
- package/src/stripe/shipping-rate.ts +4 -3
- package/src/stripe/tax-rate.ts +3 -2
- package/src/stripe/webhook.ts +4 -3
- package/src/test/vitest.ts +1 -0
- package/src/upstash/redis.ts +15 -5
- package/src/util/ignore-matcher.ts +3 -1
- package/src/util/peer.ts +53 -0
- package/src/vercel/project.ts +46 -1
- package/templates/hono/README.md +19 -0
- package/templates/hono/_env +1 -0
- package/templates/hono/_env.example +1 -0
- package/templates/hono/_gitignore +34 -0
- package/templates/hono/alchemy.run.ts +22 -0
- package/templates/hono/package.json +18 -0
- package/templates/hono/src/index.ts +17 -0
- package/templates/hono/tsconfig.json +13 -0
- package/templates/hono/types/env.d.ts +16 -0
- package/templates/react-router/vite.config.ts +5 -3
- package/workers/cloudflare-state-store.js +69 -74
- package/workers/dofs-state-store.js +1 -1
- package/bin/bootstrap-s3.ts +0 -255
- package/lib/ai/ark.d.ts +0 -12
- package/lib/ai/ark.d.ts.map +0 -1
- package/lib/ai/ark.js +0 -87
- package/lib/ai/ark.js.map +0 -1
- package/lib/ai/astro-file.d.ts +0 -138
- package/lib/ai/astro-file.d.ts.map +0 -1
- package/lib/ai/astro-file.js +0 -158
- package/lib/ai/astro-file.js.map +0 -1
- package/lib/ai/client.d.ts +0 -51
- package/lib/ai/client.d.ts.map +0 -1
- package/lib/ai/client.js +0 -58
- package/lib/ai/client.js.map +0 -1
- package/lib/ai/css-file.d.ts +0 -132
- package/lib/ai/css-file.d.ts.map +0 -1
- package/lib/ai/css-file.js +0 -142
- package/lib/ai/css-file.js.map +0 -1
- package/lib/ai/data.d.ts +0 -152
- package/lib/ai/data.d.ts.map +0 -1
- package/lib/ai/data.js +0 -120
- package/lib/ai/data.js.map +0 -1
- package/lib/ai/document.d.ts +0 -208
- package/lib/ai/document.d.ts.map +0 -1
- package/lib/ai/document.js +0 -206
- package/lib/ai/document.js.map +0 -1
- package/lib/ai/html-file.d.ts +0 -129
- package/lib/ai/html-file.d.ts.map +0 -1
- package/lib/ai/html-file.js +0 -139
- package/lib/ai/html-file.js.map +0 -1
- package/lib/ai/index.d.ts +0 -11
- package/lib/ai/index.d.ts.map +0 -1
- package/lib/ai/index.js +0 -11
- package/lib/ai/index.js.map +0 -1
- package/lib/ai/json-file.d.ts +0 -161
- package/lib/ai/json-file.d.ts.map +0 -1
- package/lib/ai/json-file.js +0 -188
- package/lib/ai/json-file.js.map +0 -1
- package/lib/ai/typescript-file.d.ts +0 -140
- package/lib/ai/typescript-file.d.ts.map +0 -1
- package/lib/ai/typescript-file.js +0 -146
- package/lib/ai/typescript-file.js.map +0 -1
- package/lib/ai/vue-file.d.ts +0 -127
- package/lib/ai/vue-file.d.ts.map +0 -1
- package/lib/ai/vue-file.js +0 -137
- package/lib/ai/vue-file.js.map +0 -1
- package/lib/ai/yaml-file.d.ts +0 -170
- package/lib/ai/yaml-file.d.ts.map +0 -1
- package/lib/ai/yaml-file.js +0 -201
- package/lib/ai/yaml-file.js.map +0 -1
- package/lib/fs/static-astro-file.d.ts +0 -35
- package/lib/fs/static-astro-file.d.ts.map +0 -1
- package/lib/fs/static-astro-file.js +0 -40
- package/lib/fs/static-astro-file.js.map +0 -1
- package/lib/fs/static-css-file.d.ts +0 -25
- package/lib/fs/static-css-file.d.ts.map +0 -1
- package/lib/fs/static-css-file.js +0 -30
- package/lib/fs/static-css-file.js.map +0 -1
- package/lib/fs/static-html-file.d.ts +0 -32
- package/lib/fs/static-html-file.d.ts.map +0 -1
- package/lib/fs/static-html-file.js +0 -37
- package/lib/fs/static-html-file.js.map +0 -1
- package/lib/fs/static-json-file.d.ts +0 -18
- package/lib/fs/static-json-file.d.ts.map +0 -1
- package/lib/fs/static-json-file.js +0 -19
- package/lib/fs/static-json-file.js.map +0 -1
- package/lib/fs/static-text-file.d.ts +0 -13
- package/lib/fs/static-text-file.d.ts.map +0 -1
- package/lib/fs/static-text-file.js +0 -9
- package/lib/fs/static-text-file.js.map +0 -1
- package/lib/fs/static-typescript-file.d.ts +0 -20
- package/lib/fs/static-typescript-file.d.ts.map +0 -1
- package/lib/fs/static-typescript-file.js +0 -16
- package/lib/fs/static-typescript-file.js.map +0 -1
- package/lib/fs/static-vue-file.d.ts +0 -29
- package/lib/fs/static-vue-file.d.ts.map +0 -1
- package/lib/fs/static-vue-file.js +0 -34
- package/lib/fs/static-vue-file.js.map +0 -1
- package/lib/fs/static-yaml-file.d.ts +0 -23
- package/lib/fs/static-yaml-file.d.ts.map +0 -1
- package/lib/fs/static-yaml-file.js +0 -10
- package/lib/fs/static-yaml-file.js.map +0 -1
- package/lib/internal/docs/providers.d.ts +0 -34
- package/lib/internal/docs/providers.d.ts.map +0 -1
- package/lib/internal/docs/providers.js +0 -200
- package/lib/internal/docs/providers.js.map +0 -1
- package/lib/runtime/bind.d.ts +0 -25
- package/lib/runtime/bind.d.ts.map +0 -1
- package/lib/runtime/bind.js +0 -76
- package/lib/runtime/bind.js.map +0 -1
- package/lib/runtime/global.d.ts +0 -8
- package/lib/runtime/global.d.ts.map +0 -1
- package/lib/runtime/global.js +0 -3
- package/lib/runtime/global.js.map +0 -1
- package/lib/runtime/plugin.d.ts +0 -35
- package/lib/runtime/plugin.d.ts.map +0 -1
- package/lib/runtime/plugin.js +0 -134
- package/lib/runtime/plugin.js.map +0 -1
- package/lib/runtime/shims.d.ts +0 -6
- package/lib/runtime/shims.d.ts.map +0 -1
- package/lib/runtime/shims.js +0 -27
- package/lib/runtime/shims.js.map +0 -1
- package/lib/runtime/state.d.ts +0 -5
- package/lib/runtime/state.d.ts.map +0 -1
- package/lib/runtime/state.js +0 -4
- package/lib/runtime/state.js.map +0 -1
- package/lib/web/astro.d.ts +0 -148
- package/lib/web/astro.d.ts.map +0 -1
- package/lib/web/astro.js +0 -419
- package/lib/web/astro.js.map +0 -1
- package/lib/web/shadcn-component.d.ts +0 -30
- package/lib/web/shadcn-component.d.ts.map +0 -1
- package/lib/web/shadcn-component.js +0 -25
- package/lib/web/shadcn-component.js.map +0 -1
- package/lib/web/shadcn.d.ts +0 -98
- package/lib/web/shadcn.d.ts.map +0 -1
- package/lib/web/shadcn.js +0 -102
- package/lib/web/shadcn.js.map +0 -1
- package/lib/web/tailwind.d.ts +0 -65
- package/lib/web/tailwind.d.ts.map +0 -1
- package/lib/web/tailwind.js +0 -98
- package/lib/web/tailwind.js.map +0 -1
- package/lib/web/vite.d.ts +0 -96
- package/lib/web/vite.d.ts.map +0 -1
- package/lib/web/vite.js +0 -232
- package/lib/web/vite.js.map +0 -1
- package/lib/web/vitepress/config.d.ts +0 -12
- package/lib/web/vitepress/config.d.ts.map +0 -1
- package/lib/web/vitepress/config.js +0 -33
- package/lib/web/vitepress/config.js.map +0 -1
- package/lib/web/vitepress/custom-theme.d.ts +0 -174
- package/lib/web/vitepress/custom-theme.d.ts.map +0 -1
- package/lib/web/vitepress/custom-theme.js +0 -337
- package/lib/web/vitepress/custom-theme.js.map +0 -1
- package/lib/web/vitepress/dependencies.d.ts +0 -13
- package/lib/web/vitepress/dependencies.d.ts.map +0 -1
- package/lib/web/vitepress/dependencies.js +0 -37
- package/lib/web/vitepress/dependencies.js.map +0 -1
- package/lib/web/vitepress/home-page.d.ts +0 -247
- package/lib/web/vitepress/home-page.d.ts.map +0 -1
- package/lib/web/vitepress/home-page.js +0 -146
- package/lib/web/vitepress/home-page.js.map +0 -1
- package/lib/web/vitepress/index.d.ts +0 -6
- package/lib/web/vitepress/index.d.ts.map +0 -1
- package/lib/web/vitepress/index.js +0 -6
- package/lib/web/vitepress/index.js.map +0 -1
- package/lib/web/vitepress/process-front-matter-files.d.ts +0 -19
- package/lib/web/vitepress/process-front-matter-files.d.ts.map +0 -1
- package/lib/web/vitepress/process-front-matter-files.js +0 -73
- package/lib/web/vitepress/process-front-matter-files.js.map +0 -1
- package/lib/web/vitepress/vitepress.d.ts +0 -75
- package/lib/web/vitepress/vitepress.d.ts.map +0 -1
- package/lib/web/vitepress/vitepress.js +0 -254
- package/lib/web/vitepress/vitepress.js.map +0 -1
- package/src/ai/ark.ts +0 -118
- package/src/ai/astro-file.ts +0 -270
- package/src/ai/client.ts +0 -117
- package/src/ai/css-file.ts +0 -247
- package/src/ai/data.ts +0 -221
- package/src/ai/document.ts +0 -367
- package/src/ai/html-file.ts +0 -244
- package/src/ai/index.ts +0 -10
- package/src/ai/json-file.ts +0 -325
- package/src/ai/typescript-file.ts +0 -259
- package/src/ai/vue-file.ts +0 -242
- package/src/ai/yaml-file.ts +0 -328
- package/src/fs/static-astro-file.ts +0 -45
- package/src/fs/static-css-file.ts +0 -35
- package/src/fs/static-html-file.ts +0 -42
- package/src/fs/static-json-file.ts +0 -38
- package/src/fs/static-text-file.ts +0 -23
- package/src/fs/static-typescript-file.ts +0 -37
- package/src/fs/static-vue-file.ts +0 -39
- package/src/fs/static-yaml-file.ts +0 -33
- package/src/internal/docs/providers.ts +0 -286
- package/src/runtime/bind.ts +0 -95
- package/src/runtime/global.ts +0 -10
- package/src/runtime/plugin.ts +0 -163
- package/src/runtime/shims.js +0 -34
- package/src/runtime/state.ts +0 -9
- package/src/web/astro.ts +0 -643
- package/src/web/shadcn-component.ts +0 -72
- package/src/web/shadcn.ts +0 -221
- package/src/web/tailwind.ts +0 -167
- package/src/web/vite.ts +0 -407
- package/src/web/vitepress/config.ts +0 -50
- package/src/web/vitepress/custom-theme.ts +0 -514
- package/src/web/vitepress/dependencies.ts +0 -69
- package/src/web/vitepress/home-page.ts +0 -378
- package/src/web/vitepress/index.ts +0 -5
- package/src/web/vitepress/process-front-matter-files.ts +0 -107
- package/src/web/vitepress/vitepress.ts +0 -372
- package/templates/sveltekit/bun.lock +0 -1099
package/src/cloudflare/worker.ts
CHANGED
|
@@ -134,7 +134,7 @@ export interface BaseWorkerProps<
|
|
|
134
134
|
/**
|
|
135
135
|
* Name for the worker
|
|
136
136
|
*
|
|
137
|
-
* @default id
|
|
137
|
+
* @default ${app}-${stage}-${id}
|
|
138
138
|
*/
|
|
139
139
|
name?: string;
|
|
140
140
|
|
|
@@ -709,12 +709,14 @@ const _Worker = Resource(
|
|
|
709
709
|
id: string,
|
|
710
710
|
props: WorkerProps<B>,
|
|
711
711
|
) {
|
|
712
|
+
const adopt = props.adopt ?? this.scope.adopt;
|
|
712
713
|
const options = (() => {
|
|
713
714
|
if (props.projectRoot) {
|
|
714
715
|
logger.warn("projectRoot is deprecated, use cwd instead");
|
|
715
716
|
props.cwd = props.projectRoot;
|
|
716
717
|
}
|
|
717
|
-
const name =
|
|
718
|
+
const name =
|
|
719
|
+
props.name ?? this.output?.name ?? this.scope.createPhysicalName(id);
|
|
718
720
|
const cwd = path.resolve(props.cwd ?? process.cwd());
|
|
719
721
|
const compatibilityDate =
|
|
720
722
|
props.compatibilityDate ?? DEFAULT_COMPATIBILITY_DATE;
|
|
@@ -826,12 +828,18 @@ const _Worker = Resource(
|
|
|
826
828
|
});
|
|
827
829
|
this.onCleanup(() => controller.dispose());
|
|
828
830
|
}
|
|
829
|
-
await provisionResources(
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
831
|
+
await provisionResources(
|
|
832
|
+
{
|
|
833
|
+
...props,
|
|
834
|
+
adopt,
|
|
835
|
+
},
|
|
836
|
+
{
|
|
837
|
+
name: options.name,
|
|
838
|
+
local: true,
|
|
839
|
+
dispatchNamespace: options.dispatchNamespace,
|
|
840
|
+
containers: options.containers,
|
|
841
|
+
},
|
|
842
|
+
);
|
|
835
843
|
return this({
|
|
836
844
|
...props,
|
|
837
845
|
type: "service",
|
|
@@ -878,13 +886,9 @@ const _Worker = Resource(
|
|
|
878
886
|
});
|
|
879
887
|
}
|
|
880
888
|
// We always "adopt" when publishing versions
|
|
881
|
-
} else if (!
|
|
889
|
+
} else if (!adopt) {
|
|
882
890
|
await assertWorkerDoesNotExist(api, options.name);
|
|
883
|
-
} else if (
|
|
884
|
-
props.adopt &&
|
|
885
|
-
!options.dispatchNamespace &&
|
|
886
|
-
props.url === false
|
|
887
|
-
) {
|
|
891
|
+
} else if (adopt && !options.dispatchNamespace && props.url === false) {
|
|
888
892
|
// explicitly disable the workers.dev subdomain
|
|
889
893
|
await disableWorkerSubdomain(api, options.name);
|
|
890
894
|
}
|
|
@@ -964,14 +968,20 @@ const _Worker = Resource(
|
|
|
964
968
|
),
|
|
965
969
|
);
|
|
966
970
|
|
|
967
|
-
const { domains, routes, subdomain } = await provisionResources(
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
971
|
+
const { domains, routes, subdomain } = await provisionResources(
|
|
972
|
+
{
|
|
973
|
+
...props,
|
|
974
|
+
adopt,
|
|
975
|
+
},
|
|
976
|
+
{
|
|
977
|
+
name: options.name,
|
|
978
|
+
local: false,
|
|
979
|
+
dispatchNamespace: options.dispatchNamespace,
|
|
980
|
+
containers: options.containers,
|
|
981
|
+
result,
|
|
982
|
+
api,
|
|
983
|
+
},
|
|
984
|
+
);
|
|
975
985
|
|
|
976
986
|
const now = new Date();
|
|
977
987
|
return this({
|
|
@@ -1044,7 +1054,9 @@ const assertUnique = <T, Key extends keyof T>(
|
|
|
1044
1054
|
};
|
|
1045
1055
|
|
|
1046
1056
|
async function provisionResources<B extends Bindings>(
|
|
1047
|
-
props: WorkerProps<B
|
|
1057
|
+
props: WorkerProps<B> & {
|
|
1058
|
+
adopt: boolean;
|
|
1059
|
+
},
|
|
1048
1060
|
options:
|
|
1049
1061
|
| {
|
|
1050
1062
|
name: string;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import fs from "node:fs/promises";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import type { Context } from "../context.ts";
|
|
4
|
-
import { formatJson } from "../fs/static-json-file.ts";
|
|
5
4
|
import { Resource } from "../resource.ts";
|
|
6
5
|
import { isSecret } from "../secret.ts";
|
|
7
6
|
import { assertNever } from "../util/assert-never.ts";
|
|
@@ -29,7 +28,7 @@ export interface WranglerJsonProps {
|
|
|
29
28
|
* The worker to generate the wrangler.json file for
|
|
30
29
|
*/
|
|
31
30
|
worker:
|
|
32
|
-
| Worker
|
|
31
|
+
| Worker<any>
|
|
33
32
|
| (WorkerProps<any> & {
|
|
34
33
|
name: string;
|
|
35
34
|
});
|
|
@@ -218,9 +217,9 @@ export const WranglerJson = Resource(
|
|
|
218
217
|
),
|
|
219
218
|
},
|
|
220
219
|
};
|
|
221
|
-
await
|
|
220
|
+
await writeJSON(filePath, withSecretsUnwrapped);
|
|
222
221
|
} else {
|
|
223
|
-
await
|
|
222
|
+
await writeJSON(filePath, finalSpec);
|
|
224
223
|
}
|
|
225
224
|
|
|
226
225
|
// Return the resource
|
|
@@ -234,6 +233,10 @@ export const WranglerJson = Resource(
|
|
|
234
233
|
},
|
|
235
234
|
);
|
|
236
235
|
|
|
236
|
+
const writeJSON = async (filePath: string, content: any) => {
|
|
237
|
+
await fs.writeFile(filePath, `${JSON.stringify(content, null, 2)}\n`);
|
|
238
|
+
};
|
|
239
|
+
|
|
237
240
|
/**
|
|
238
241
|
* Wrangler.json configuration specification based on Cloudflare's schema
|
|
239
242
|
*/
|
package/src/docker/container.ts
CHANGED
|
@@ -71,6 +71,8 @@ export interface ContainerProps {
|
|
|
71
71
|
|
|
72
72
|
/**
|
|
73
73
|
* Container name
|
|
74
|
+
*
|
|
75
|
+
* @default ${app}-${stage}-${id}
|
|
74
76
|
*/
|
|
75
77
|
name?: string;
|
|
76
78
|
|
|
@@ -126,6 +128,11 @@ export interface Container
|
|
|
126
128
|
*/
|
|
127
129
|
id: string;
|
|
128
130
|
|
|
131
|
+
/**
|
|
132
|
+
* Container name
|
|
133
|
+
*/
|
|
134
|
+
name: string;
|
|
135
|
+
|
|
129
136
|
/**
|
|
130
137
|
* Container state
|
|
131
138
|
*/
|
|
@@ -184,7 +191,11 @@ export const Container = Resource(
|
|
|
184
191
|
|
|
185
192
|
// Use provided name or generate one based on resource ID
|
|
186
193
|
const containerName =
|
|
187
|
-
props.name
|
|
194
|
+
props.name ?? this.output?.name ?? this.scope.createPhysicalName(id);
|
|
195
|
+
|
|
196
|
+
if (this.phase === "update" && this.output.name !== containerName) {
|
|
197
|
+
this.replace();
|
|
198
|
+
}
|
|
188
199
|
|
|
189
200
|
// Handle delete phase
|
|
190
201
|
if (this.phase === "delete") {
|
|
@@ -259,6 +270,7 @@ export const Container = Resource(
|
|
|
259
270
|
return this({
|
|
260
271
|
...props,
|
|
261
272
|
id: containerId,
|
|
273
|
+
name: containerName,
|
|
262
274
|
state: containerState,
|
|
263
275
|
createdAt: Date.now(),
|
|
264
276
|
});
|
package/src/docker/network.ts
CHANGED
|
@@ -8,8 +8,10 @@ import { DockerApi } from "./api.ts";
|
|
|
8
8
|
export interface NetworkProps {
|
|
9
9
|
/**
|
|
10
10
|
* Network name
|
|
11
|
+
*
|
|
12
|
+
* @default ${app}-${stage}-${id}
|
|
11
13
|
*/
|
|
12
|
-
name
|
|
14
|
+
name?: string;
|
|
13
15
|
|
|
14
16
|
/**
|
|
15
17
|
* Network driver to use
|
|
@@ -38,6 +40,11 @@ export interface Network extends Resource<"docker::Network">, NetworkProps {
|
|
|
38
40
|
*/
|
|
39
41
|
id: string;
|
|
40
42
|
|
|
43
|
+
/**
|
|
44
|
+
* Network name
|
|
45
|
+
*/
|
|
46
|
+
name: string;
|
|
47
|
+
|
|
41
48
|
/**
|
|
42
49
|
* Time when the network was created
|
|
43
50
|
*/
|
|
@@ -70,12 +77,19 @@ export const Network = Resource(
|
|
|
70
77
|
"docker::Network",
|
|
71
78
|
async function (
|
|
72
79
|
this: Context<Network>,
|
|
73
|
-
|
|
80
|
+
id: string,
|
|
74
81
|
props: NetworkProps,
|
|
75
82
|
): Promise<Network> {
|
|
76
83
|
// Initialize Docker API client
|
|
77
84
|
const api = new DockerApi();
|
|
78
85
|
|
|
86
|
+
const networkName =
|
|
87
|
+
props.name ?? this.output?.name ?? this.scope.createPhysicalName(id);
|
|
88
|
+
|
|
89
|
+
if (this.phase === "update" && this.output.name !== networkName) {
|
|
90
|
+
this.replace();
|
|
91
|
+
}
|
|
92
|
+
|
|
79
93
|
// Handle delete phase
|
|
80
94
|
if (this.phase === "delete") {
|
|
81
95
|
if (this.output?.id) {
|
|
@@ -88,12 +102,13 @@ export const Network = Resource(
|
|
|
88
102
|
} else {
|
|
89
103
|
// Create the network
|
|
90
104
|
props.driver = props.driver || "bridge";
|
|
91
|
-
const networkId = await api.createNetwork(
|
|
105
|
+
const networkId = await api.createNetwork(networkName, props.driver);
|
|
92
106
|
|
|
93
107
|
// Return the resource using this() to construct output
|
|
94
108
|
return this({
|
|
95
109
|
...props,
|
|
96
110
|
id: networkId,
|
|
111
|
+
name: networkName,
|
|
97
112
|
createdAt: Date.now(),
|
|
98
113
|
});
|
|
99
114
|
}
|
package/src/docker/volume.ts
CHANGED
|
@@ -23,8 +23,10 @@ export interface VolumeLabel {
|
|
|
23
23
|
export interface VolumeProps {
|
|
24
24
|
/**
|
|
25
25
|
* Volume name
|
|
26
|
+
*
|
|
27
|
+
* @default ${app}-${stage}-${id}
|
|
26
28
|
*/
|
|
27
|
-
name
|
|
29
|
+
name?: string;
|
|
28
30
|
|
|
29
31
|
/**
|
|
30
32
|
* Volume driver to use
|
|
@@ -52,6 +54,11 @@ export interface Volume extends Resource<"docker::Volume">, VolumeProps {
|
|
|
52
54
|
*/
|
|
53
55
|
id: string;
|
|
54
56
|
|
|
57
|
+
/**
|
|
58
|
+
* Volume name
|
|
59
|
+
*/
|
|
60
|
+
name: string;
|
|
61
|
+
|
|
55
62
|
/**
|
|
56
63
|
* Volume mountpoint path on the host
|
|
57
64
|
*/
|
|
@@ -94,12 +101,15 @@ export const Volume = Resource(
|
|
|
94
101
|
"docker::Volume",
|
|
95
102
|
async function (
|
|
96
103
|
this: Context<Volume>,
|
|
97
|
-
|
|
104
|
+
id: string,
|
|
98
105
|
props: VolumeProps,
|
|
99
106
|
): Promise<Volume> {
|
|
100
107
|
// Initialize Docker API client
|
|
101
108
|
const api = new DockerApi();
|
|
102
109
|
|
|
110
|
+
const volumeName =
|
|
111
|
+
props.name ?? this.output?.name ?? this.scope.createPhysicalName(id);
|
|
112
|
+
|
|
103
113
|
// Process labels to ensure consistent format
|
|
104
114
|
const processedLabels: Record<string, string> = {};
|
|
105
115
|
if (props.labels) {
|
|
@@ -129,21 +139,22 @@ export const Volume = Resource(
|
|
|
129
139
|
const driverOpts = props.driverOpts || {};
|
|
130
140
|
|
|
131
141
|
// Create the volume
|
|
132
|
-
const
|
|
133
|
-
|
|
142
|
+
const volumeId = await api.createVolume(
|
|
143
|
+
volumeName,
|
|
134
144
|
props.driver,
|
|
135
145
|
driverOpts,
|
|
136
146
|
processedLabels,
|
|
137
147
|
);
|
|
138
148
|
|
|
139
149
|
// Get volume details to retrieve mountpoint
|
|
140
|
-
const volumeInfos = await api.inspectVolume(
|
|
150
|
+
const volumeInfos = await api.inspectVolume(volumeId);
|
|
141
151
|
const mountpoint = volumeInfos[0].Mountpoint;
|
|
142
152
|
|
|
143
153
|
// Return the resource using this() to construct output
|
|
144
154
|
return this({
|
|
145
155
|
...props,
|
|
146
|
-
id:
|
|
156
|
+
id: volumeId,
|
|
157
|
+
name: volumeName,
|
|
147
158
|
mountpoint,
|
|
148
159
|
createdAt: Date.now(),
|
|
149
160
|
labels: Array.isArray(props.labels) ? props.labels : undefined,
|
package/src/fs/index.ts
CHANGED
|
@@ -3,11 +3,3 @@ export * from "./file-collection.ts";
|
|
|
3
3
|
export * from "./file-ref.ts";
|
|
4
4
|
export * from "./file.ts";
|
|
5
5
|
export * from "./folder.ts";
|
|
6
|
-
export * from "./static-astro-file.ts";
|
|
7
|
-
export * from "./static-css-file.ts";
|
|
8
|
-
export * from "./static-html-file.ts";
|
|
9
|
-
export * from "./static-json-file.ts";
|
|
10
|
-
export * from "./static-text-file.ts";
|
|
11
|
-
export * from "./static-typescript-file.ts";
|
|
12
|
-
export * from "./static-vue-file.ts";
|
|
13
|
-
export * from "./static-yaml-file.ts";
|
package/src/github/client.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { Octokit } from "@octokit/rest";
|
|
1
|
+
import type { Octokit } from "@octokit/rest";
|
|
2
2
|
import { exec } from "node:child_process";
|
|
3
3
|
import { promisify } from "node:util";
|
|
4
4
|
import { logger } from "../util/logger.ts";
|
|
5
|
+
import { importPeer } from "../util/peer.ts";
|
|
5
6
|
|
|
6
7
|
// Convert exec to promise-based
|
|
7
8
|
const execAsync = promisify(exec);
|
|
@@ -52,7 +53,10 @@ export async function createGitHubClient(
|
|
|
52
53
|
options: { token?: string } = {},
|
|
53
54
|
): Promise<Octokit> {
|
|
54
55
|
const token = await getGitHubToken(options.token);
|
|
55
|
-
|
|
56
|
+
const { Octokit } = await importPeer(
|
|
57
|
+
import("@octokit/rest"),
|
|
58
|
+
"GitHub resources",
|
|
59
|
+
);
|
|
56
60
|
return new Octokit({
|
|
57
61
|
auth: token,
|
|
58
62
|
});
|
|
@@ -19,8 +19,10 @@ export interface RepositoryEnvironmentProps {
|
|
|
19
19
|
|
|
20
20
|
/**
|
|
21
21
|
* Environment name
|
|
22
|
+
*
|
|
23
|
+
* @default ${app}-${stage}-${id}
|
|
22
24
|
*/
|
|
23
|
-
name
|
|
25
|
+
name?: string;
|
|
24
26
|
|
|
25
27
|
/**
|
|
26
28
|
* Wait timer before allowing deployments to proceed (in minutes)
|
|
@@ -104,6 +106,11 @@ export interface RepositoryEnvironment
|
|
|
104
106
|
*/
|
|
105
107
|
id: string;
|
|
106
108
|
|
|
109
|
+
/**
|
|
110
|
+
* Environment name
|
|
111
|
+
*/
|
|
112
|
+
name: string;
|
|
113
|
+
|
|
107
114
|
/**
|
|
108
115
|
* The numeric ID of the environment in GitHub
|
|
109
116
|
*/
|
|
@@ -174,7 +181,7 @@ export const RepositoryEnvironment = Resource(
|
|
|
174
181
|
"github::RepositoryEnvironment",
|
|
175
182
|
async function (
|
|
176
183
|
this: Context<RepositoryEnvironment>,
|
|
177
|
-
|
|
184
|
+
id: string,
|
|
178
185
|
props: RepositoryEnvironmentProps,
|
|
179
186
|
): Promise<RepositoryEnvironment> {
|
|
180
187
|
// Create authenticated Octokit client
|
|
@@ -187,6 +194,13 @@ export const RepositoryEnvironment = Resource(
|
|
|
187
194
|
await verifyGitHubAuth(octokit, props.owner, props.repository);
|
|
188
195
|
}
|
|
189
196
|
|
|
197
|
+
const environmentName =
|
|
198
|
+
props.name ?? this.output?.name ?? this.scope.createPhysicalName(id);
|
|
199
|
+
|
|
200
|
+
if (this.phase === "update" && this.output.name !== environmentName) {
|
|
201
|
+
this.replace();
|
|
202
|
+
}
|
|
203
|
+
|
|
190
204
|
if (this.phase === "delete") {
|
|
191
205
|
if (this.output?.id) {
|
|
192
206
|
try {
|
|
@@ -194,7 +208,7 @@ export const RepositoryEnvironment = Resource(
|
|
|
194
208
|
await octokit.rest.repos.deleteAnEnvironment({
|
|
195
209
|
owner: props.owner,
|
|
196
210
|
repo: props.repository,
|
|
197
|
-
environment_name:
|
|
211
|
+
environment_name: environmentName,
|
|
198
212
|
});
|
|
199
213
|
} catch (error: any) {
|
|
200
214
|
// Ignore 404 errors (environment already deleted)
|
|
@@ -220,7 +234,7 @@ export const RepositoryEnvironment = Resource(
|
|
|
220
234
|
});
|
|
221
235
|
|
|
222
236
|
const existingEnv = environments.environments?.find(
|
|
223
|
-
(env) => env.name.toLowerCase() ===
|
|
237
|
+
(env) => env.name.toLowerCase() === environmentName.toLowerCase(),
|
|
224
238
|
);
|
|
225
239
|
|
|
226
240
|
if (existingEnv?.id) {
|
|
@@ -303,7 +317,7 @@ export const RepositoryEnvironment = Resource(
|
|
|
303
317
|
await octokit.rest.repos.createOrUpdateEnvironment({
|
|
304
318
|
owner: props.owner,
|
|
305
319
|
repo: props.repository,
|
|
306
|
-
environment_name:
|
|
320
|
+
environment_name: environmentName,
|
|
307
321
|
wait_timer: props.waitTimer,
|
|
308
322
|
prevent_self_review: props.preventSelfReview,
|
|
309
323
|
reviewers: reviewers.length > 0 ? reviewers : undefined,
|
|
@@ -330,7 +344,7 @@ export const RepositoryEnvironment = Resource(
|
|
|
330
344
|
await octokit.rest.repos.createDeploymentBranchPolicy({
|
|
331
345
|
owner: props.owner,
|
|
332
346
|
repo: props.repository,
|
|
333
|
-
environment_name:
|
|
347
|
+
environment_name: environmentName,
|
|
334
348
|
name: pattern,
|
|
335
349
|
});
|
|
336
350
|
}
|
|
@@ -340,7 +354,7 @@ export const RepositoryEnvironment = Resource(
|
|
|
340
354
|
await octokit.rest.repos.createOrUpdateEnvironment({
|
|
341
355
|
owner: props.owner,
|
|
342
356
|
repo: props.repository,
|
|
343
|
-
environment_name:
|
|
357
|
+
environment_name: environmentName,
|
|
344
358
|
wait_timer: props.waitTimer,
|
|
345
359
|
prevent_self_review: props.preventSelfReview,
|
|
346
360
|
reviewers: reviewers.length > 0 ? reviewers : undefined,
|
|
@@ -361,7 +375,7 @@ export const RepositoryEnvironment = Resource(
|
|
|
361
375
|
await octokit.rest.repos.listDeploymentBranchPolicies({
|
|
362
376
|
owner: props.owner,
|
|
363
377
|
repo: props.repository,
|
|
364
|
-
environment_name:
|
|
378
|
+
environment_name: environmentName,
|
|
365
379
|
});
|
|
366
380
|
|
|
367
381
|
const existingPatterns = existingPolicies.branch_policies.map(
|
|
@@ -402,7 +416,7 @@ export const RepositoryEnvironment = Resource(
|
|
|
402
416
|
await octokit.rest.repos.deleteDeploymentBranchPolicy({
|
|
403
417
|
owner: props.owner,
|
|
404
418
|
repo: props.repository,
|
|
405
|
-
environment_name:
|
|
419
|
+
environment_name: environmentName,
|
|
406
420
|
branch_policy_id: policy.id,
|
|
407
421
|
});
|
|
408
422
|
}
|
|
@@ -413,7 +427,7 @@ export const RepositoryEnvironment = Resource(
|
|
|
413
427
|
await octokit.rest.repos.createDeploymentBranchPolicy({
|
|
414
428
|
owner: props.owner,
|
|
415
429
|
repo: props.repository,
|
|
416
|
-
environment_name:
|
|
430
|
+
environment_name: environmentName,
|
|
417
431
|
name: pattern,
|
|
418
432
|
});
|
|
419
433
|
}
|
|
@@ -424,16 +438,16 @@ export const RepositoryEnvironment = Resource(
|
|
|
424
438
|
const { data: env } = await octokit.rest.repos.getEnvironment({
|
|
425
439
|
owner: props.owner,
|
|
426
440
|
repo: props.repository,
|
|
427
|
-
environment_name:
|
|
441
|
+
environment_name: environmentName,
|
|
428
442
|
});
|
|
429
443
|
|
|
430
444
|
// Return environment details
|
|
431
445
|
return this({
|
|
432
|
-
id: `${props.owner}/${props.repository}/${
|
|
446
|
+
id: `${props.owner}/${props.repository}/${environmentName}`,
|
|
433
447
|
environmentId: environmentId || env.id,
|
|
434
448
|
owner: props.owner,
|
|
435
449
|
repository: props.repository,
|
|
436
|
-
name:
|
|
450
|
+
name: environmentName,
|
|
437
451
|
waitTimer: props.waitTimer,
|
|
438
452
|
preventSelfReview: props.preventSelfReview,
|
|
439
453
|
adminBypass: props.adminBypass,
|
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,
|