alchemy 0.62.3 → 0.63.1
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 +1517 -1203
- package/bin/commands/deploy.ts +2 -0
- package/bin/commands/dev.ts +2 -0
- package/bin/commands/init.ts +1 -1
- package/bin/services/execute-alchemy.ts +11 -0
- package/bin/services/github-workflow.ts +2 -2
- 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/cloudflare-env-proxy.js +1 -1
- package/lib/cloudflare/cloudflare-env-proxy.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/durable-object-namespace.d.ts.map +1 -1
- package/lib/cloudflare/durable-object-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 +3 -2
- 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-metadata.js +1 -1
- package/lib/cloudflare/worker-metadata.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 +14 -11
- 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 +6 -5
- package/lib/upstash/redis.js.map +1 -1
- package/lib/util/idempotent-spawn.d.ts.map +1 -1
- package/lib/util/idempotent-spawn.js +21 -2
- package/lib/util/idempotent-spawn.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/xml.js +1 -1
- package/lib/util/xml.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/cloudflare-env-proxy.ts +1 -1
- 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/durable-object-namespace.ts +0 -1
- package/src/cloudflare/hyperdrive.ts +14 -4
- 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-metadata.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 +24 -11
- 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 +16 -6
- package/src/util/idempotent-spawn.ts +23 -2
- package/src/util/ignore-matcher.ts +3 -1
- package/src/util/peer.ts +53 -0
- package/src/util/xml.ts +1 -1
- 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
|
@@ -209,7 +209,8 @@ export const ShippingRate = Resource(
|
|
|
209
209
|
_id: string,
|
|
210
210
|
props: ShippingRateProps,
|
|
211
211
|
): Promise<ShippingRate> {
|
|
212
|
-
const
|
|
212
|
+
const adopt = props.adopt ?? this.scope.adopt;
|
|
213
|
+
const stripe = await createStripeClient({ apiKey: props.apiKey });
|
|
213
214
|
|
|
214
215
|
if (this.phase === "delete") {
|
|
215
216
|
try {
|
|
@@ -286,7 +287,7 @@ export const ShippingRate = Resource(
|
|
|
286
287
|
try {
|
|
287
288
|
shippingRate = await stripe.shippingRates.create(createParams);
|
|
288
289
|
} catch (error) {
|
|
289
|
-
if (isStripeConflictError(error) &&
|
|
290
|
+
if (isStripeConflictError(error) && adopt) {
|
|
290
291
|
throw new Error(
|
|
291
292
|
"ShippingRate adoption is not supported - shipping rates cannot be uniquely identified for adoption",
|
|
292
293
|
);
|
|
@@ -295,7 +296,7 @@ export const ShippingRate = Resource(
|
|
|
295
296
|
}
|
|
296
297
|
}
|
|
297
298
|
} catch (error) {
|
|
298
|
-
if (isStripeConflictError(error) &&
|
|
299
|
+
if (isStripeConflictError(error) && adopt) {
|
|
299
300
|
throw new Error(
|
|
300
301
|
"ShippingRate adoption is not supported - shipping rates cannot be uniquely identified for adoption",
|
|
301
302
|
);
|
package/src/stripe/tax-rate.ts
CHANGED
|
@@ -143,7 +143,8 @@ export const TaxRate = Resource(
|
|
|
143
143
|
_id: string,
|
|
144
144
|
props: TaxRateProps,
|
|
145
145
|
): Promise<TaxRate> {
|
|
146
|
-
const
|
|
146
|
+
const adopt = props.adopt ?? this.scope.adopt;
|
|
147
|
+
const stripe = await createStripeClient({ apiKey: props.apiKey });
|
|
147
148
|
|
|
148
149
|
if (this.phase === "delete") {
|
|
149
150
|
try {
|
|
@@ -185,7 +186,7 @@ export const TaxRate = Resource(
|
|
|
185
186
|
tax_type: props.taxType,
|
|
186
187
|
});
|
|
187
188
|
} catch (error) {
|
|
188
|
-
if (isStripeConflictError(error) &&
|
|
189
|
+
if (isStripeConflictError(error) && adopt) {
|
|
189
190
|
throw new Error(
|
|
190
191
|
"TaxRate adoption is not supported - tax rates cannot be uniquely identified for adoption",
|
|
191
192
|
);
|
package/src/stripe/webhook.ts
CHANGED
|
@@ -155,7 +155,8 @@ export const WebhookEndpoint = Resource(
|
|
|
155
155
|
_id: string,
|
|
156
156
|
props: WebhookEndpointProps,
|
|
157
157
|
) {
|
|
158
|
-
const
|
|
158
|
+
const adopt = props.adopt ?? this.scope.adopt;
|
|
159
|
+
const stripe = await createStripeClient({ apiKey: props.apiKey });
|
|
159
160
|
|
|
160
161
|
if (this.phase === "delete") {
|
|
161
162
|
try {
|
|
@@ -197,7 +198,7 @@ export const WebhookEndpoint = Resource(
|
|
|
197
198
|
try {
|
|
198
199
|
webhook = await stripe.webhookEndpoints.create(createParams);
|
|
199
200
|
} catch (error) {
|
|
200
|
-
if (isStripeConflictError(error) &&
|
|
201
|
+
if (isStripeConflictError(error) && adopt) {
|
|
201
202
|
const existingWebhooks = await stripe.webhookEndpoints.list({
|
|
202
203
|
limit: 100,
|
|
203
204
|
});
|
|
@@ -223,7 +224,7 @@ export const WebhookEndpoint = Resource(
|
|
|
223
224
|
}
|
|
224
225
|
}
|
|
225
226
|
} catch (error) {
|
|
226
|
-
if (isStripeConflictError(error) &&
|
|
227
|
+
if (isStripeConflictError(error) && adopt) {
|
|
227
228
|
const existingWebhooks = await stripe.webhookEndpoints.list({
|
|
228
229
|
limit: 100,
|
|
229
230
|
});
|
package/src/test/vitest.ts
CHANGED
package/src/upstash/redis.ts
CHANGED
|
@@ -26,8 +26,10 @@ export type UpstashRegion =
|
|
|
26
26
|
export interface UpstashRedisProps {
|
|
27
27
|
/**
|
|
28
28
|
* Name of the database
|
|
29
|
+
*
|
|
30
|
+
* @default ${app}-${stage}-${id}
|
|
29
31
|
*/
|
|
30
|
-
name
|
|
32
|
+
name?: string;
|
|
31
33
|
|
|
32
34
|
/**
|
|
33
35
|
* Primary region for the database
|
|
@@ -71,6 +73,11 @@ export interface UpstashRedis
|
|
|
71
73
|
*/
|
|
72
74
|
id: string;
|
|
73
75
|
|
|
76
|
+
/**
|
|
77
|
+
* Name of the database.
|
|
78
|
+
*/
|
|
79
|
+
name: string;
|
|
80
|
+
|
|
74
81
|
/**
|
|
75
82
|
* Type of the database in terms of pricing model
|
|
76
83
|
*/
|
|
@@ -157,7 +164,7 @@ export const UpstashRedis = Resource(
|
|
|
157
164
|
"upstash::Redis",
|
|
158
165
|
async function (
|
|
159
166
|
this: Context<UpstashRedis>,
|
|
160
|
-
|
|
167
|
+
id: string,
|
|
161
168
|
props: UpstashRedisProps,
|
|
162
169
|
): Promise<UpstashRedis> {
|
|
163
170
|
const api = new UpstashApi({
|
|
@@ -165,6 +172,9 @@ export const UpstashRedis = Resource(
|
|
|
165
172
|
email: props.email,
|
|
166
173
|
});
|
|
167
174
|
|
|
175
|
+
const databaseName =
|
|
176
|
+
props.name ?? this.output?.name ?? this.scope.createPhysicalName(id);
|
|
177
|
+
|
|
168
178
|
if (this.phase === "delete") {
|
|
169
179
|
await deleteRedisDatabase(api, this.output.id);
|
|
170
180
|
return this.destroy();
|
|
@@ -172,13 +182,13 @@ export const UpstashRedis = Resource(
|
|
|
172
182
|
|
|
173
183
|
const eviction = props.eviction ?? false;
|
|
174
184
|
|
|
175
|
-
// @ts-
|
|
185
|
+
// @ts-expect-error This is overridden during update/create
|
|
176
186
|
let database: UpstashDatabaseResponse = {};
|
|
177
187
|
|
|
178
188
|
if (this.phase === "update") {
|
|
179
189
|
// Update name if changed
|
|
180
|
-
if (
|
|
181
|
-
await renameRedisDatabase(api, this.output.id,
|
|
190
|
+
if (databaseName !== this.output.name) {
|
|
191
|
+
await renameRedisDatabase(api, this.output.id, databaseName);
|
|
182
192
|
}
|
|
183
193
|
|
|
184
194
|
// Update read regions if changed
|
|
@@ -208,7 +218,7 @@ export const UpstashRedis = Resource(
|
|
|
208
218
|
if (this.phase === "create") {
|
|
209
219
|
database = await createRedisDatabase(api, {
|
|
210
220
|
budget: props.budget,
|
|
211
|
-
name:
|
|
221
|
+
name: databaseName,
|
|
212
222
|
primary_region: props.primaryRegion,
|
|
213
223
|
read_regions: props.readRegions,
|
|
214
224
|
region: "global",
|
|
@@ -134,7 +134,6 @@ export async function idempotentSpawn({
|
|
|
134
134
|
if (isPidAlive(pid)) return pid;
|
|
135
135
|
if (await isSameProcess?.(pid)) return pid;
|
|
136
136
|
if (processName) {
|
|
137
|
-
const { default: find } = await import("find-process");
|
|
138
137
|
const processes = await find("pid", pid);
|
|
139
138
|
if (processes.length > 1) {
|
|
140
139
|
console.warn(
|
|
@@ -317,7 +316,7 @@ export async function idempotentSpawn({
|
|
|
317
316
|
// 2. Detect if it's still running.
|
|
318
317
|
// The process appears to remain in the process table even after it's exited, so `isPidAlive` will return true.
|
|
319
318
|
// However, if it's in the table, `find-process` will return it with a name of "<defunct>", so we can detect that instead.
|
|
320
|
-
const { default: find } = await import("find-process");
|
|
319
|
+
// const { default: find } = await import("find-process");
|
|
321
320
|
const processes = await find("pid", pid);
|
|
322
321
|
if (processes.some((p) => p.name !== "<defunct>")) {
|
|
323
322
|
// 3. If it's still running, kill with SIGKILL
|
|
@@ -327,3 +326,25 @@ export async function idempotentSpawn({
|
|
|
327
326
|
}
|
|
328
327
|
}
|
|
329
328
|
}
|
|
329
|
+
|
|
330
|
+
/**
|
|
331
|
+
* The find-process package is a bit of a mess and has different behavior across runtimes (bun, tsx, node, etc.)
|
|
332
|
+
*
|
|
333
|
+
* This wrapper function defensively searches for the find function in the imported module.
|
|
334
|
+
*
|
|
335
|
+
* It confirmed to support:
|
|
336
|
+
* 1. node
|
|
337
|
+
* 2. bun
|
|
338
|
+
* 3. tsx
|
|
339
|
+
*
|
|
340
|
+
* TODO(sam): check deno?
|
|
341
|
+
*/
|
|
342
|
+
const find: typeof import("find-process").default = async (...args) => {
|
|
343
|
+
const findProcess = await import("find-process");
|
|
344
|
+
const find =
|
|
345
|
+
(findProcess as any).default?.default ??
|
|
346
|
+
(findProcess as any).default ??
|
|
347
|
+
(findProcess as any).find ??
|
|
348
|
+
findProcess;
|
|
349
|
+
return find(...args);
|
|
350
|
+
};
|
package/src/util/peer.ts
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import {
|
|
2
|
+
detectPackageManager,
|
|
3
|
+
type PackageManager,
|
|
4
|
+
} from "./detect-package-manager.ts";
|
|
5
|
+
|
|
6
|
+
export class PeerDependencyError extends Error {
|
|
7
|
+
constructor(input: {
|
|
8
|
+
feature?: string;
|
|
9
|
+
missing: string[];
|
|
10
|
+
packageManager?: PackageManager;
|
|
11
|
+
}) {
|
|
12
|
+
super(
|
|
13
|
+
[
|
|
14
|
+
`Missing peer ${input.missing.length} ${input.missing.length === 1 ? "dependency" : "dependencies"}${input.feature ? ` for ${input.feature}` : ""}:`,
|
|
15
|
+
...input.missing.map((dep) => `- "${dep}"`),
|
|
16
|
+
"",
|
|
17
|
+
"Please install with:",
|
|
18
|
+
` ${input.packageManager ?? "npm"} install ${input.missing.join(" ")}`,
|
|
19
|
+
].join("\n"),
|
|
20
|
+
);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const extractPackageName = (error: unknown) => {
|
|
25
|
+
const message =
|
|
26
|
+
typeof error === "object" &&
|
|
27
|
+
error !== null &&
|
|
28
|
+
"message" in error &&
|
|
29
|
+
typeof error.message === "string"
|
|
30
|
+
? error.message
|
|
31
|
+
: undefined;
|
|
32
|
+
const match = message?.match(/Cannot find (package|module) '([^']+)'/);
|
|
33
|
+
return match?.[2];
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
export async function importPeer<T>(promise: Promise<T>, feature?: string) {
|
|
37
|
+
try {
|
|
38
|
+
return await promise;
|
|
39
|
+
} catch (err) {
|
|
40
|
+
const name = extractPackageName(err);
|
|
41
|
+
if (!name) {
|
|
42
|
+
throw err;
|
|
43
|
+
}
|
|
44
|
+
const packageManager = await detectPackageManager();
|
|
45
|
+
const error = new PeerDependencyError({
|
|
46
|
+
feature,
|
|
47
|
+
missing: [name],
|
|
48
|
+
packageManager,
|
|
49
|
+
});
|
|
50
|
+
Error.captureStackTrace(error, importPeer);
|
|
51
|
+
throw error;
|
|
52
|
+
}
|
|
53
|
+
}
|
package/src/util/xml.ts
CHANGED
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
* Extract value from XML string
|
|
3
3
|
*/
|
|
4
4
|
export function extractXmlValue(xml: string, tagName: string): string {
|
|
5
|
-
const match = xml.match(new RegExp(`<${tagName}>(.*?)
|
|
5
|
+
const match = xml.match(new RegExp(`<${tagName}>(.*?)</${tagName}>`));
|
|
6
6
|
return match ? match[1] : "";
|
|
7
7
|
}
|
package/src/vercel/project.ts
CHANGED
|
@@ -47,8 +47,10 @@ export interface ProjectProps {
|
|
|
47
47
|
*
|
|
48
48
|
* Maximum length: `100`
|
|
49
49
|
* Example: `a-project-name`
|
|
50
|
+
*
|
|
51
|
+
* @default ${app}-${stage}-${id}
|
|
50
52
|
*/
|
|
51
|
-
name
|
|
53
|
+
name?: string;
|
|
52
54
|
|
|
53
55
|
/**
|
|
54
56
|
* Opt-in to preview toolbar on the project level
|
|
@@ -244,6 +246,11 @@ export interface Project extends Resource<"vercel::Project">, ProjectProps {
|
|
|
244
246
|
*/
|
|
245
247
|
id: string;
|
|
246
248
|
|
|
249
|
+
/**
|
|
250
|
+
* The name for the project
|
|
251
|
+
*/
|
|
252
|
+
name: string;
|
|
253
|
+
|
|
247
254
|
/**
|
|
248
255
|
* The account ID that the project belongs to
|
|
249
256
|
*/
|
|
@@ -369,6 +376,31 @@ export const Project = Resource(
|
|
|
369
376
|
id: string,
|
|
370
377
|
{ accessToken, ...props }: ProjectProps & { accessToken?: Secret },
|
|
371
378
|
): Promise<Project> {
|
|
379
|
+
// it's possible that `this.output.name` is undefined because a previous version
|
|
380
|
+
// of alchemy had a bug where it didn't set the name on the output
|
|
381
|
+
// so, we try to find the project by ID and use the name from the API response
|
|
382
|
+
const lookupName = async () => {
|
|
383
|
+
if (!this.output) {
|
|
384
|
+
return undefined;
|
|
385
|
+
} else if (this.output.name) {
|
|
386
|
+
return this.output.name;
|
|
387
|
+
}
|
|
388
|
+
const name = await getProjectName(
|
|
389
|
+
await createVercelApi({
|
|
390
|
+
baseUrl: "https://api.vercel.com/v9",
|
|
391
|
+
accessToken,
|
|
392
|
+
}),
|
|
393
|
+
this.output.id,
|
|
394
|
+
);
|
|
395
|
+
if (name) {
|
|
396
|
+
this.output.name = name;
|
|
397
|
+
}
|
|
398
|
+
return name;
|
|
399
|
+
};
|
|
400
|
+
|
|
401
|
+
const projectName =
|
|
402
|
+
props.name ?? (await lookupName()) ?? this.scope.createPhysicalName(id);
|
|
403
|
+
|
|
372
404
|
switch (this.phase) {
|
|
373
405
|
case "delete": {
|
|
374
406
|
const api = await createVercelApi({
|
|
@@ -423,6 +455,7 @@ export const Project = Resource(
|
|
|
423
455
|
|
|
424
456
|
return this({
|
|
425
457
|
id: data.id,
|
|
458
|
+
name: projectName,
|
|
426
459
|
accountId: data.accountId,
|
|
427
460
|
createdAt: data.createdAt,
|
|
428
461
|
updatedAt: data.updatedAt,
|
|
@@ -492,3 +525,15 @@ export async function updateEnvironmentVariables(
|
|
|
492
525
|
await api.delete(`/projects/${output.id}/env/${previousEnv.id}`);
|
|
493
526
|
}
|
|
494
527
|
}
|
|
528
|
+
|
|
529
|
+
async function getProjectName(
|
|
530
|
+
api: VercelApi,
|
|
531
|
+
id: string,
|
|
532
|
+
): Promise<string | undefined> {
|
|
533
|
+
const response = await api.get(`/v9/projects/${id}`);
|
|
534
|
+
if (!response.ok) {
|
|
535
|
+
throw new Error(`API error: ${response.statusText}`);
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
return ((await response.json()) as { name: string }).name;
|
|
539
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
### Minimal Hono + Alchemy Template
|
|
2
|
+
|
|
3
|
+
### Run
|
|
4
|
+
- bun install
|
|
5
|
+
- bun run dev
|
|
6
|
+
|
|
7
|
+
### Deploy
|
|
8
|
+
- bun run deploy
|
|
9
|
+
- bun run destroy
|
|
10
|
+
|
|
11
|
+
### Alchemy
|
|
12
|
+
- Resource: defined in `alchemy.run.ts` (Worker + KV)
|
|
13
|
+
- Binding: `KV` bound to Worker as `c.env.KV`
|
|
14
|
+
- Types: inferred in `types/env.d.ts`
|
|
15
|
+
|
|
16
|
+
### References
|
|
17
|
+
- Alchemy Getting Started: https://alchemy.run/getting-started
|
|
18
|
+
- Alchemy CLI: https://alchemy.run/concepts/cli
|
|
19
|
+
- Bindings: https://alchemy.run/concepts/bindings
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ALCHEMY_PASSWORD=change-me
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ALCHEMY_PASSWORD=change-me
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# prod
|
|
2
|
+
dist/
|
|
3
|
+
|
|
4
|
+
# dev
|
|
5
|
+
.yarn/
|
|
6
|
+
!.yarn/releases
|
|
7
|
+
.vscode/*
|
|
8
|
+
!.vscode/launch.json
|
|
9
|
+
!.vscode/*.code-snippets
|
|
10
|
+
.idea/workspace.xml
|
|
11
|
+
.idea/usage.statistics.xml
|
|
12
|
+
.idea/shelf
|
|
13
|
+
|
|
14
|
+
# deps
|
|
15
|
+
node_modules/
|
|
16
|
+
.wrangler
|
|
17
|
+
.alchemy
|
|
18
|
+
|
|
19
|
+
# env
|
|
20
|
+
.env
|
|
21
|
+
.env.production
|
|
22
|
+
.dev.vars
|
|
23
|
+
|
|
24
|
+
# logs
|
|
25
|
+
logs/
|
|
26
|
+
*.log
|
|
27
|
+
npm-debug.log*
|
|
28
|
+
yarn-debug.log*
|
|
29
|
+
yarn-error.log*
|
|
30
|
+
pnpm-debug.log*
|
|
31
|
+
lerna-debug.log*
|
|
32
|
+
|
|
33
|
+
# misc
|
|
34
|
+
.DS_Store
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/// <reference types="@types/node" />
|
|
2
|
+
|
|
3
|
+
import alchemy from "alchemy";
|
|
4
|
+
import { KVNamespace, Worker } from "alchemy/cloudflare";
|
|
5
|
+
|
|
6
|
+
const app = await alchemy("{projectName}");
|
|
7
|
+
|
|
8
|
+
const kv = await KVNamespace("kv", {
|
|
9
|
+
title: "kv",
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
export const worker = await Worker("worker", {
|
|
13
|
+
name: `${app.name}-${app.stage}`,
|
|
14
|
+
entrypoint: "src/index.ts",
|
|
15
|
+
bindings: {
|
|
16
|
+
KV: kv,
|
|
17
|
+
},
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
console.log(worker.url);
|
|
21
|
+
|
|
22
|
+
await app.finalize();
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@alchemy.run/hono-template",
|
|
3
|
+
"type": "module",
|
|
4
|
+
"scripts": {
|
|
5
|
+
"check": "tsc --noEmit",
|
|
6
|
+
"dev": "alchemy dev",
|
|
7
|
+
"deploy": "alchemy deploy",
|
|
8
|
+
"destroy": "alchemy destroy"
|
|
9
|
+
},
|
|
10
|
+
"dependencies": {
|
|
11
|
+
"hono": "^4.9.2"
|
|
12
|
+
},
|
|
13
|
+
"devDependencies": {
|
|
14
|
+
"@cloudflare/workers-types": "^4.20250820.0",
|
|
15
|
+
"@types/node": "^24.3.0",
|
|
16
|
+
"alchemy": "workspace:*"
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Hono } from 'hono'
|
|
2
|
+
|
|
3
|
+
const app = new Hono<{ Bindings: Env }>()
|
|
4
|
+
|
|
5
|
+
app.get('/', (c) => {
|
|
6
|
+
return c.text('Hello Hono!')
|
|
7
|
+
})
|
|
8
|
+
|
|
9
|
+
app.get('/kv', async (c) => {
|
|
10
|
+
const key = 'hello'
|
|
11
|
+
const value = `world@${Date.now()}`
|
|
12
|
+
await c.env.KV.put(key, value)
|
|
13
|
+
const got = await c.env.KV.get(key)
|
|
14
|
+
return c.json({ key, value: got })
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
export default app
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ESNext",
|
|
4
|
+
"module": "ESNext",
|
|
5
|
+
"moduleResolution": "Bundler",
|
|
6
|
+
"strict": true,
|
|
7
|
+
"skipLibCheck": true,
|
|
8
|
+
"lib": ["ESNext"],
|
|
9
|
+
"jsx": "react-jsx",
|
|
10
|
+
"jsxImportSource": "hono/jsx",
|
|
11
|
+
"types": ["@cloudflare/workers-types"]
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// This file infers types for the cloudflare:workers environment from your Alchemy Worker.
|
|
2
|
+
// @see https://alchemy.run/concepts/bindings/#type-safe-bindings
|
|
3
|
+
|
|
4
|
+
import type { worker } from "../alchemy.run.ts";
|
|
5
|
+
|
|
6
|
+
export type CloudflareEnv = typeof worker.Env;
|
|
7
|
+
|
|
8
|
+
declare global {
|
|
9
|
+
type Env = CloudflareEnv;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
declare module "cloudflare:workers" {
|
|
13
|
+
namespace Cloudflare {
|
|
14
|
+
export interface Env extends CloudflareEnv {}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
import { reactRouter } from "@react-router/dev/vite";
|
|
2
2
|
import tailwindcss from "@tailwindcss/vite";
|
|
3
3
|
import alchemy from "alchemy/cloudflare/react-router";
|
|
4
|
-
import { defineConfig } from "vite";
|
|
4
|
+
import { defineConfig, type PluginOption } from "vite";
|
|
5
5
|
import tsconfigPaths from "vite-tsconfig-paths";
|
|
6
6
|
|
|
7
7
|
export default defineConfig({
|
|
8
8
|
plugins: [
|
|
9
|
-
alchemy(),
|
|
9
|
+
alchemy() as PluginOption,
|
|
10
10
|
tailwindcss(),
|
|
11
11
|
reactRouter(),
|
|
12
|
-
tsconfigPaths(
|
|
12
|
+
tsconfigPaths({
|
|
13
|
+
root: "."
|
|
14
|
+
}),
|
|
13
15
|
],
|
|
14
16
|
});
|