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
|
@@ -20,6 +20,8 @@ import { deleteMiniflareBinding } from "./miniflare/delete.ts";
|
|
|
20
20
|
export interface KVNamespaceProps extends CloudflareApiOptions {
|
|
21
21
|
/**
|
|
22
22
|
* Title of the namespace
|
|
23
|
+
*
|
|
24
|
+
* @default ${app}-${stage}-${id}
|
|
23
25
|
*/
|
|
24
26
|
title?: string;
|
|
25
27
|
|
|
@@ -209,7 +211,9 @@ const _KVNamespace = Resource(
|
|
|
209
211
|
id: string,
|
|
210
212
|
props: KVNamespaceProps,
|
|
211
213
|
): Promise<KVNamespace> {
|
|
212
|
-
const title =
|
|
214
|
+
const title =
|
|
215
|
+
props.title ?? this.output?.title ?? this.scope.createPhysicalName(id);
|
|
216
|
+
|
|
213
217
|
const local = this.scope.local && !props.dev?.remote;
|
|
214
218
|
const dev = {
|
|
215
219
|
id: this.output?.dev?.id ?? this.output?.namespaceId ?? id,
|
|
@@ -230,6 +234,10 @@ const _KVNamespace = Resource(
|
|
|
230
234
|
|
|
231
235
|
const api = await createCloudflareApi(props);
|
|
232
236
|
|
|
237
|
+
if (this.phase === "update" && this.output?.title !== title) {
|
|
238
|
+
await renameKVNamespace(api, this.output.namespaceId, title);
|
|
239
|
+
}
|
|
240
|
+
|
|
233
241
|
if (this.phase === "delete") {
|
|
234
242
|
if (this.output.dev?.id) {
|
|
235
243
|
await deleteMiniflareBinding("kv", this.output.dev.id);
|
|
@@ -289,7 +297,7 @@ export async function createKVNamespace(
|
|
|
289
297
|
(error.errorData as CloudflareApiErrorPayload[]).some(
|
|
290
298
|
(e) => e.code === 10014,
|
|
291
299
|
) &&
|
|
292
|
-
props.adopt
|
|
300
|
+
(props.adopt ?? Scope.current.adopt)
|
|
293
301
|
) {
|
|
294
302
|
const existingNamespace = await findKVNamespaceByTitle(api, props.title);
|
|
295
303
|
|
|
@@ -456,3 +464,18 @@ export async function findKVNamespaceByTitle(
|
|
|
456
464
|
// No matching namespace found
|
|
457
465
|
return null;
|
|
458
466
|
}
|
|
467
|
+
|
|
468
|
+
export async function renameKVNamespace(
|
|
469
|
+
api: CloudflareApi,
|
|
470
|
+
namespaceId: string,
|
|
471
|
+
title: string,
|
|
472
|
+
) {
|
|
473
|
+
const response = await api.put(
|
|
474
|
+
`/accounts/${api.accountId}/storage/kv/namespaces/${namespaceId}`,
|
|
475
|
+
{ title },
|
|
476
|
+
);
|
|
477
|
+
|
|
478
|
+
if (!response.ok) {
|
|
479
|
+
await handleApiError(response, "update", "kv_namespace", namespaceId);
|
|
480
|
+
}
|
|
481
|
+
}
|
|
@@ -149,7 +149,9 @@ const writeMiniflareResponseToNode = (
|
|
|
149
149
|
out: http.ServerResponse,
|
|
150
150
|
) => {
|
|
151
151
|
out.statusCode = res.status;
|
|
152
|
-
res.headers.forEach((value, key) =>
|
|
152
|
+
res.headers.forEach((value, key) => {
|
|
153
|
+
out.setHeader(key, value);
|
|
154
|
+
});
|
|
153
155
|
|
|
154
156
|
if (res.body) {
|
|
155
157
|
Readable.fromWeb(res.body).pipe(out, { end: true });
|
|
@@ -1,5 +1,15 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
1
2
|
import { existsSync, readlinkSync, statSync } from "node:fs";
|
|
2
3
|
|
|
4
|
+
const dynamicImportContext = new AsyncLocalStorage<boolean>();
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Used to disable path validation during dynamic imports.
|
|
8
|
+
*/
|
|
9
|
+
export const withSkipPathValidation = <T>(callback: () => T) => {
|
|
10
|
+
return dynamicImportContext.run(true, callback);
|
|
11
|
+
};
|
|
12
|
+
|
|
3
13
|
export const DEFAULT_CONFIG_PATH = ".alchemy/local/wrangler.jsonc";
|
|
4
14
|
export const DEFAULT_PERSIST_PATH = ".alchemy/miniflare/v3";
|
|
5
15
|
|
|
@@ -42,6 +52,9 @@ export const validatePersistPath = (
|
|
|
42
52
|
const warned = new Set<string>();
|
|
43
53
|
|
|
44
54
|
const warnOrThrow = (message: string, throws: boolean) => {
|
|
55
|
+
if (dynamicImportContext.getStore()) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
45
58
|
if (throws) {
|
|
46
59
|
throw new Error(message);
|
|
47
60
|
}
|
|
@@ -183,7 +183,7 @@ export interface PipelineProps extends CloudflareApiOptions {
|
|
|
183
183
|
/**
|
|
184
184
|
* Name of the pipeline
|
|
185
185
|
*
|
|
186
|
-
* @default id
|
|
186
|
+
* @default ${app}-${stage}-${id}
|
|
187
187
|
*/
|
|
188
188
|
name?: string;
|
|
189
189
|
|
|
@@ -236,34 +236,34 @@ export function isPipeline(resource: Resource): resource is Pipeline {
|
|
|
236
236
|
/**
|
|
237
237
|
* Output returned after Pipeline creation/update
|
|
238
238
|
*/
|
|
239
|
-
export
|
|
240
|
-
|
|
241
|
-
PipelineProps {
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
239
|
+
export type Pipeline<_T extends PipelineRecord = PipelineRecord> =
|
|
240
|
+
Resource<"cloudflare::Pipeline"> &
|
|
241
|
+
PipelineProps & {
|
|
242
|
+
/**
|
|
243
|
+
* Type identifier for the Pipeline resource
|
|
244
|
+
*/
|
|
245
|
+
type: "pipeline";
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
* The unique ID of the pipeline
|
|
249
|
+
*/
|
|
250
|
+
id: string;
|
|
251
251
|
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
252
|
+
/**
|
|
253
|
+
* The name of the pipeline
|
|
254
|
+
*/
|
|
255
|
+
name: string;
|
|
256
256
|
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
257
|
+
/**
|
|
258
|
+
* HTTP endpoint URL for the pipeline
|
|
259
|
+
*/
|
|
260
|
+
endpoint: string;
|
|
261
261
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
}
|
|
262
|
+
/**
|
|
263
|
+
* Version of the pipeline
|
|
264
|
+
*/
|
|
265
|
+
version: number;
|
|
266
|
+
};
|
|
267
267
|
|
|
268
268
|
/**
|
|
269
269
|
* Creates and manages Cloudflare Pipelines.
|
|
@@ -337,7 +337,8 @@ export const Pipeline = Resource("cloudflare::Pipeline", async function <
|
|
|
337
337
|
Pipeline<T>
|
|
338
338
|
> {
|
|
339
339
|
const api = await createCloudflareApi(props);
|
|
340
|
-
const pipelineName =
|
|
340
|
+
const pipelineName =
|
|
341
|
+
props.name ?? this.output?.name ?? this.scope.createPhysicalName(id);
|
|
341
342
|
|
|
342
343
|
if (this.scope.local && !props.dev?.remote) {
|
|
343
344
|
return this({
|
|
@@ -353,6 +354,10 @@ export const Pipeline = Resource("cloudflare::Pipeline", async function <
|
|
|
353
354
|
});
|
|
354
355
|
}
|
|
355
356
|
|
|
357
|
+
if (this.phase === "update" && this.output?.name !== pipelineName) {
|
|
358
|
+
await renamePipeline(api, this.output.name, pipelineName);
|
|
359
|
+
}
|
|
360
|
+
|
|
356
361
|
if (this.phase === "delete") {
|
|
357
362
|
if (props.delete !== false) {
|
|
358
363
|
// Delete Pipeline
|
|
@@ -377,7 +382,7 @@ export const Pipeline = Resource("cloudflare::Pipeline", async function <
|
|
|
377
382
|
(error.status === 400 &&
|
|
378
383
|
error.message.includes("Pipeline with this name already exists")))
|
|
379
384
|
) {
|
|
380
|
-
if (props.adopt) {
|
|
385
|
+
if (props.adopt ?? this.scope.adopt) {
|
|
381
386
|
console.warn(
|
|
382
387
|
"Pipeline already exists, adopting existing Cloudflare Pipeline:",
|
|
383
388
|
pipelineName,
|
|
@@ -580,6 +585,49 @@ export async function updatePipeline(
|
|
|
580
585
|
return (await updateResponse.json()) as CloudflarePipelineResponse;
|
|
581
586
|
}
|
|
582
587
|
|
|
588
|
+
/**
|
|
589
|
+
* Rename a pipeline
|
|
590
|
+
*
|
|
591
|
+
* @param api - Cloudflare API instance
|
|
592
|
+
* @param currentName - Current name of the pipeline
|
|
593
|
+
* @param newName - New name for the pipeline
|
|
594
|
+
* @returns Updated pipeline response with the new name
|
|
595
|
+
*
|
|
596
|
+
* @see https://developers.cloudflare.com/api/resources/pipelines/methods/update/
|
|
597
|
+
*/
|
|
598
|
+
export async function renamePipeline(
|
|
599
|
+
api: CloudflareApi,
|
|
600
|
+
currentName: string,
|
|
601
|
+
newName: string,
|
|
602
|
+
): Promise<CloudflarePipelineResponse> {
|
|
603
|
+
// Get the current pipeline configuration
|
|
604
|
+
const currentPipeline = await getPipeline(api, currentName);
|
|
605
|
+
|
|
606
|
+
// Build the update payload with the new name
|
|
607
|
+
const updatePayload = {
|
|
608
|
+
name: newName,
|
|
609
|
+
source: currentPipeline.result.source,
|
|
610
|
+
destination: currentPipeline.result.destination,
|
|
611
|
+
};
|
|
612
|
+
|
|
613
|
+
// Use the update endpoint with the current name in the path and new name in the body
|
|
614
|
+
const updateResponse = await api.put(
|
|
615
|
+
`/accounts/${api.accountId}/pipelines/${currentName}`,
|
|
616
|
+
updatePayload,
|
|
617
|
+
);
|
|
618
|
+
|
|
619
|
+
if (!updateResponse.ok) {
|
|
620
|
+
return await handleApiError(
|
|
621
|
+
updateResponse,
|
|
622
|
+
"renaming",
|
|
623
|
+
"Pipeline",
|
|
624
|
+
`${currentName} -> ${newName}`,
|
|
625
|
+
);
|
|
626
|
+
}
|
|
627
|
+
|
|
628
|
+
return (await updateResponse.json()) as CloudflarePipelineResponse;
|
|
629
|
+
}
|
|
630
|
+
|
|
583
631
|
/**
|
|
584
632
|
* Helper function to prepare pipeline payload for create/update operations
|
|
585
633
|
*/
|
|
@@ -200,7 +200,7 @@ export const QueueConsumer = Resource(
|
|
|
200
200
|
err instanceof CloudflareApiError &&
|
|
201
201
|
err.status === 400 &&
|
|
202
202
|
err.message.includes("already has a consumer") &&
|
|
203
|
-
props.adopt
|
|
203
|
+
(props.adopt ?? this.scope.adopt)
|
|
204
204
|
) {
|
|
205
205
|
const consumerId = await findQueueConsumerId(
|
|
206
206
|
api,
|
package/src/cloudflare/queue.ts
CHANGED
|
@@ -40,7 +40,7 @@ export interface QueueProps extends CloudflareApiOptions {
|
|
|
40
40
|
* Required during creation
|
|
41
41
|
* Cannot be changed after creation
|
|
42
42
|
*
|
|
43
|
-
* @default id
|
|
43
|
+
* @default ${app}-${stage}-${id}
|
|
44
44
|
*/
|
|
45
45
|
name?: string;
|
|
46
46
|
|
|
@@ -248,7 +248,9 @@ const _Queue = Resource("cloudflare::Queue", async function <
|
|
|
248
248
|
>(this: Context<Queue<T>>, id: string, props: QueueProps = {}): Promise<
|
|
249
249
|
Queue<T>
|
|
250
250
|
> {
|
|
251
|
-
const queueName =
|
|
251
|
+
const queueName =
|
|
252
|
+
props.name ?? this.output?.name ?? this.scope.createPhysicalName(id);
|
|
253
|
+
|
|
252
254
|
const dev = {
|
|
253
255
|
id: this.output?.dev?.id ?? this.output?.id ?? id,
|
|
254
256
|
remote: props.dev?.remote ?? false,
|
|
@@ -285,7 +287,7 @@ const _Queue = Resource("cloudflare::Queue", async function <
|
|
|
285
287
|
queueData = await createQueue(api, queueName, props);
|
|
286
288
|
} catch (error) {
|
|
287
289
|
if (error instanceof CloudflareApiError && error.status === 409) {
|
|
288
|
-
if (!props.adopt) {
|
|
290
|
+
if (!(props.adopt ?? this.scope.adopt)) {
|
|
289
291
|
throw error;
|
|
290
292
|
}
|
|
291
293
|
// Queue already exists, try to find it by name
|
|
@@ -296,7 +298,10 @@ const _Queue = Resource("cloudflare::Queue", async function <
|
|
|
296
298
|
);
|
|
297
299
|
}
|
|
298
300
|
queueData = existingQueue;
|
|
299
|
-
queueData = await updateQueue(api, queueData.result.queue_id!,
|
|
301
|
+
queueData = await updateQueue(api, queueData.result.queue_id!, {
|
|
302
|
+
...props,
|
|
303
|
+
name: queueName,
|
|
304
|
+
});
|
|
300
305
|
} else {
|
|
301
306
|
throw error;
|
|
302
307
|
}
|
|
@@ -304,15 +309,11 @@ const _Queue = Resource("cloudflare::Queue", async function <
|
|
|
304
309
|
} else {
|
|
305
310
|
// Update operation
|
|
306
311
|
if (this.output?.id) {
|
|
307
|
-
// Check if name is being changed, which is not allowed
|
|
308
|
-
if (queueName !== this.output.name) {
|
|
309
|
-
throw new Error(
|
|
310
|
-
`Cannot update Queue name after creation. Queue name is immutable. Before: ${this.output.name}, After: ${queueName}`,
|
|
311
|
-
);
|
|
312
|
-
}
|
|
313
|
-
|
|
314
312
|
// Update the queue with new settings
|
|
315
|
-
queueData = await updateQueue(api, this.output.id,
|
|
313
|
+
queueData = await updateQueue(api, this.output.id, {
|
|
314
|
+
...props,
|
|
315
|
+
name: queueName,
|
|
316
|
+
});
|
|
316
317
|
} else {
|
|
317
318
|
// If no ID exists, fall back to creating a new queue
|
|
318
319
|
queueData = await createQueue(api, queueName, props);
|
|
@@ -452,10 +453,21 @@ export async function deleteQueue(
|
|
|
452
453
|
export async function updateQueue(
|
|
453
454
|
api: CloudflareApi,
|
|
454
455
|
queueId: string,
|
|
455
|
-
props: QueueProps
|
|
456
|
+
props: QueueProps & {
|
|
457
|
+
name: string;
|
|
458
|
+
},
|
|
456
459
|
): Promise<CloudflareQueueResponse> {
|
|
457
460
|
// Prepare the update payload - only include settings
|
|
458
|
-
const updatePayload:
|
|
461
|
+
const updatePayload: {
|
|
462
|
+
queue_name?: string;
|
|
463
|
+
settings?: {
|
|
464
|
+
delivery_delay?: number;
|
|
465
|
+
delivery_paused?: boolean;
|
|
466
|
+
message_retention_period?: number;
|
|
467
|
+
};
|
|
468
|
+
} = {
|
|
469
|
+
queue_name: props.name,
|
|
470
|
+
};
|
|
459
471
|
|
|
460
472
|
// Add settings if provided
|
|
461
473
|
if (props.settings) {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import path from "node:path";
|
|
1
2
|
import { getPackageManagerRunner } from "../../util/detect-package-manager.ts";
|
|
2
3
|
import type { Assets } from "../assets.ts";
|
|
3
4
|
import type { Bindings } from "../bindings.ts";
|
|
@@ -21,6 +22,8 @@ export async function ReactRouter<B extends Bindings>(
|
|
|
21
22
|
props: ReactRouterProps<B> = {},
|
|
22
23
|
): Promise<ReactRouter<B>> {
|
|
23
24
|
const runner = await getPackageManagerRunner();
|
|
25
|
+
const cwd = path.resolve(props.cwd ?? process.cwd());
|
|
26
|
+
const ssr = await detectSSREnabled(cwd);
|
|
24
27
|
return await Vite(id, {
|
|
25
28
|
...props,
|
|
26
29
|
build:
|
|
@@ -29,13 +32,36 @@ export async function ReactRouter<B extends Bindings>(
|
|
|
29
32
|
dev:
|
|
30
33
|
props.dev ??
|
|
31
34
|
`${runner} react-router typegen && ${runner} react-router dev`,
|
|
35
|
+
spa: !ssr,
|
|
32
36
|
compatibility: "node",
|
|
33
|
-
entrypoint: props.entrypoint ?? "build/server/index.js",
|
|
37
|
+
entrypoint: props.entrypoint ?? (ssr ? "build/server/index.js" : undefined),
|
|
34
38
|
noBundle: props.noBundle ?? true,
|
|
35
39
|
assets: props.assets ?? "build/client",
|
|
36
40
|
wrangler: {
|
|
37
|
-
main:
|
|
41
|
+
main:
|
|
42
|
+
props.wrangler?.main ??
|
|
43
|
+
props.main ??
|
|
44
|
+
(ssr ? "workers/app.ts" : undefined),
|
|
38
45
|
transform: props.wrangler?.transform,
|
|
39
46
|
},
|
|
40
47
|
});
|
|
41
48
|
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Detect if SSR is enabled by checking for an `ssr` property in `react-router.config.ts`.
|
|
52
|
+
* If no config is found or if there is no `ssr` property, default to true in line with React Router's default behavior.
|
|
53
|
+
* @see https://reactrouter.com/api/framework-conventions/react-router.config.ts
|
|
54
|
+
*/
|
|
55
|
+
async function detectSSREnabled(cwd: string): Promise<boolean> {
|
|
56
|
+
const candidates = [
|
|
57
|
+
"react-router.config.ts",
|
|
58
|
+
"react-router.config.mts",
|
|
59
|
+
"react-router.config.mjs",
|
|
60
|
+
"react-router.config.js",
|
|
61
|
+
];
|
|
62
|
+
const configs = await Promise.allSettled(
|
|
63
|
+
candidates.map((candidate) => import(path.join(cwd, candidate))),
|
|
64
|
+
);
|
|
65
|
+
const config = configs.find((result) => result.status === "fulfilled")?.value;
|
|
66
|
+
return config?.default?.ssr !== false;
|
|
67
|
+
}
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import { redwood, type RedwoodPluginOptions } from "rwsdk/vite";
|
|
2
|
+
import type { PluginOption } from "vite";
|
|
2
3
|
import { DEFAULT_CONFIG_PATH } from "../miniflare/paths.ts";
|
|
3
4
|
import alchemyVite from "../vite/plugin.ts";
|
|
4
5
|
|
|
5
|
-
const alchemyRedwood = (options?: RedwoodPluginOptions) => {
|
|
6
|
+
const alchemyRedwood = (options?: RedwoodPluginOptions): PluginOption => {
|
|
6
7
|
const configPath = options?.configPath ?? DEFAULT_CONFIG_PATH;
|
|
7
8
|
return [
|
|
8
9
|
redwood({
|
|
9
10
|
...options,
|
|
10
11
|
configPath,
|
|
11
12
|
includeCloudflarePlugin: false,
|
|
12
|
-
}),
|
|
13
|
+
}) as PluginOption,
|
|
13
14
|
alchemyVite({
|
|
14
15
|
configPath,
|
|
15
16
|
viteEnvironment: { name: "worker" },
|
package/src/cloudflare/route.ts
CHANGED
|
@@ -211,7 +211,7 @@ export const Route = Resource(
|
|
|
211
211
|
} catch (error) {
|
|
212
212
|
// Check if this is a "route already exists" error and adopt is enabled
|
|
213
213
|
if (
|
|
214
|
-
props.adopt &&
|
|
214
|
+
(props.adopt ?? this.scope.adopt) &&
|
|
215
215
|
error instanceof CloudflareApiError &&
|
|
216
216
|
error.status === 409
|
|
217
217
|
) {
|
|
@@ -32,6 +32,8 @@ export interface RulesetProps<Phase extends RulePhase>
|
|
|
32
32
|
|
|
33
33
|
/**
|
|
34
34
|
* Human-readable name for the ruleset
|
|
35
|
+
*
|
|
36
|
+
* @default ${app}-${stage}-${id}
|
|
35
37
|
*/
|
|
36
38
|
name?: string;
|
|
37
39
|
|
|
@@ -152,7 +154,7 @@ export interface Ruleset<Phase extends RulePhase>
|
|
|
152
154
|
*/
|
|
153
155
|
export const Ruleset = Resource("cloudflare::Ruleset", async function <
|
|
154
156
|
Phase extends RulePhase,
|
|
155
|
-
>(this: Context<Ruleset<Phase>>,
|
|
157
|
+
>(this: Context<Ruleset<Phase>>, id: string, props: RulesetProps<Phase>): Promise<
|
|
156
158
|
Ruleset<Phase>
|
|
157
159
|
> {
|
|
158
160
|
const api = await createCloudflareApi(props);
|
|
@@ -172,10 +174,13 @@ export const Ruleset = Resource("cloudflare::Ruleset", async function <
|
|
|
172
174
|
return this.destroy();
|
|
173
175
|
}
|
|
174
176
|
|
|
177
|
+
const rulesetName =
|
|
178
|
+
props.name ?? this.output?.name ?? this.scope.createPhysicalName(id);
|
|
179
|
+
|
|
175
180
|
// Overwrite entire entrypoint with only the provided rules
|
|
176
181
|
const result = await updateRuleset(api, zoneId, phase, {
|
|
177
182
|
rules: props.rules,
|
|
178
|
-
|
|
183
|
+
name: rulesetName,
|
|
179
184
|
...(props.description && { description: props.description }),
|
|
180
185
|
});
|
|
181
186
|
|
package/src/cloudflare/secret.ts
CHANGED
|
@@ -13,41 +13,21 @@ import {
|
|
|
13
13
|
import { findSecretsStoreByName, SecretsStore } from "./secrets-store.ts";
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
|
-
* Properties for creating or updating a Secret in a Secrets Store (
|
|
16
|
+
* Properties for creating or updating a Secret in a Secrets Store (public interface)
|
|
17
17
|
*/
|
|
18
|
-
interface
|
|
18
|
+
export interface SecretProps extends CloudflareApiOptions {
|
|
19
19
|
/**
|
|
20
|
-
*
|
|
20
|
+
* Name for the Secret.
|
|
21
21
|
*
|
|
22
|
-
* @default
|
|
23
|
-
*/
|
|
24
|
-
store?: SecretsStore<any>;
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* The secret value to store (must be an AlchemySecret for security)
|
|
22
|
+
* @default ${app}-${stage}-${id}
|
|
28
23
|
*/
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* Whether to delete the secret.
|
|
33
|
-
* If set to false, the secret will remain but the resource will be removed from state
|
|
34
|
-
*
|
|
35
|
-
* @default true
|
|
36
|
-
*/
|
|
37
|
-
delete?: boolean;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* Properties for creating or updating a Secret in a Secrets Store (public interface)
|
|
42
|
-
*/
|
|
43
|
-
export interface SecretProps extends CloudflareApiOptions {
|
|
24
|
+
name?: string;
|
|
44
25
|
/**
|
|
45
26
|
* The secrets store to add this secret to
|
|
46
27
|
*
|
|
47
28
|
* @default - the default-secret-store
|
|
48
29
|
*/
|
|
49
30
|
store?: SecretsStore<any>;
|
|
50
|
-
|
|
51
31
|
/**
|
|
52
32
|
* The secret value to store
|
|
53
33
|
* Can be a string or an existing Secret instance
|
|
@@ -76,7 +56,7 @@ export function isSecret(resource: Resource): resource is Secret {
|
|
|
76
56
|
}
|
|
77
57
|
|
|
78
58
|
export type Secret = Resource<"cloudflare::Secret"> &
|
|
79
|
-
Omit<
|
|
59
|
+
Omit<SecretProps, "delete" | "value"> & {
|
|
80
60
|
/**
|
|
81
61
|
* The binding type for Cloudflare Workers
|
|
82
62
|
*/
|
|
@@ -177,11 +157,20 @@ const _Secret = Resource(
|
|
|
177
157
|
"cloudflare::Secret",
|
|
178
158
|
async function (
|
|
179
159
|
this: Context<Secret>,
|
|
180
|
-
|
|
181
|
-
props:
|
|
160
|
+
id: string,
|
|
161
|
+
props: SecretProps & {
|
|
162
|
+
value: AlchemySecret;
|
|
163
|
+
},
|
|
182
164
|
): Promise<Secret> {
|
|
183
165
|
const api = await createCloudflareApi(props);
|
|
184
166
|
|
|
167
|
+
const secretName =
|
|
168
|
+
props.name ?? this.output?.name ?? this.scope.createPhysicalName(id);
|
|
169
|
+
|
|
170
|
+
if (this.phase === "update" && this.output.name !== secretName) {
|
|
171
|
+
this.replace();
|
|
172
|
+
}
|
|
173
|
+
|
|
185
174
|
const storeId =
|
|
186
175
|
props.store?.id ??
|
|
187
176
|
(await findSecretsStoreByName(api, SecretsStore.Default))?.id ??
|
|
@@ -195,7 +184,7 @@ const _Secret = Resource(
|
|
|
195
184
|
|
|
196
185
|
if (this.phase === "delete") {
|
|
197
186
|
if (props.delete !== false) {
|
|
198
|
-
await deleteSecret(api, storeId,
|
|
187
|
+
await deleteSecret(api, storeId, secretName);
|
|
199
188
|
}
|
|
200
189
|
return this.destroy();
|
|
201
190
|
}
|
|
@@ -206,11 +195,11 @@ const _Secret = Resource(
|
|
|
206
195
|
: Date.now();
|
|
207
196
|
|
|
208
197
|
// Insert or update the secret
|
|
209
|
-
await insertSecret(api, storeId,
|
|
198
|
+
await insertSecret(api, storeId, secretName, props.value);
|
|
210
199
|
|
|
211
200
|
return this({
|
|
212
201
|
type: "secrets_store_secret",
|
|
213
|
-
name,
|
|
202
|
+
name: secretName,
|
|
214
203
|
storeId,
|
|
215
204
|
store: props.store,
|
|
216
205
|
value: props.value,
|
|
@@ -17,7 +17,7 @@ export interface SecretsStoreProps<
|
|
|
17
17
|
/**
|
|
18
18
|
* Name of the secrets store
|
|
19
19
|
*
|
|
20
|
-
* @default id
|
|
20
|
+
* @default ${app}-${stage}-${id}
|
|
21
21
|
*/
|
|
22
22
|
name?: string;
|
|
23
23
|
|
|
@@ -179,7 +179,11 @@ const _SecretsStore = Resource("cloudflare::SecretsStore", async function <
|
|
|
179
179
|
> {
|
|
180
180
|
const api = await createCloudflareApi(props);
|
|
181
181
|
|
|
182
|
-
const name = props.name ?? id;
|
|
182
|
+
const name = props.name ?? this.scope.createPhysicalName(id);
|
|
183
|
+
|
|
184
|
+
if (this.phase === "update" && this.output.name !== name) {
|
|
185
|
+
this.replace();
|
|
186
|
+
}
|
|
183
187
|
|
|
184
188
|
if (this.phase === "delete") {
|
|
185
189
|
const storeId = this.output?.id;
|
|
@@ -209,7 +213,7 @@ const _SecretsStore = Resource("cloudflare::SecretsStore", async function <
|
|
|
209
213
|
await insertSecrets(api, storeId, props);
|
|
210
214
|
} else {
|
|
211
215
|
// If adopt is true, first check if a store with this name already exists
|
|
212
|
-
if (props.adopt) {
|
|
216
|
+
if (props.adopt ?? this.scope.adopt) {
|
|
213
217
|
const existingStore = await findSecretsStoreByName(api, name);
|
|
214
218
|
|
|
215
219
|
if (existingStore) {
|
package/src/cloudflare/tunnel.ts
CHANGED
|
@@ -49,7 +49,7 @@ export interface TunnelProps extends CloudflareApiOptions {
|
|
|
49
49
|
* Note: Tunnel names are immutable and cannot be changed after creation.
|
|
50
50
|
* When updating a tunnel, any name change will be ignored.
|
|
51
51
|
*
|
|
52
|
-
* @default id
|
|
52
|
+
* @default ${app}-${stage}-${id}
|
|
53
53
|
*/
|
|
54
54
|
name?: string;
|
|
55
55
|
|
|
@@ -274,6 +274,11 @@ export function isTunnel(resource: Resource): resource is Tunnel {
|
|
|
274
274
|
export interface Tunnel
|
|
275
275
|
extends Resource<"cloudflare::Tunnel">,
|
|
276
276
|
Omit<TunnelProps, "delete" | "tunnelSecret"> {
|
|
277
|
+
/**
|
|
278
|
+
* The name of the tunnel
|
|
279
|
+
*/
|
|
280
|
+
name: string;
|
|
281
|
+
|
|
277
282
|
/**
|
|
278
283
|
* The ID of the tunnel
|
|
279
284
|
*/
|
|
@@ -488,7 +493,13 @@ export const Tunnel = Resource(
|
|
|
488
493
|
// Create Cloudflare API client with automatic account discovery
|
|
489
494
|
const api = await createCloudflareApi(props);
|
|
490
495
|
|
|
491
|
-
const name =
|
|
496
|
+
const name =
|
|
497
|
+
props.name ?? this.output?.name ?? this.scope.createPhysicalName(id);
|
|
498
|
+
|
|
499
|
+
if (this.phase === "update" && this.output.name !== name) {
|
|
500
|
+
console.log("replacing tunnel", this.output.name, name);
|
|
501
|
+
this.replace(true);
|
|
502
|
+
}
|
|
492
503
|
|
|
493
504
|
if (this.phase === "delete") {
|
|
494
505
|
// For delete operations, check if the tunnel ID exists in the output
|
|
@@ -14,8 +14,10 @@ import {
|
|
|
14
14
|
export interface VectorizeIndexProps extends CloudflareApiOptions {
|
|
15
15
|
/**
|
|
16
16
|
* Name of the index
|
|
17
|
+
*
|
|
18
|
+
* @default ${app}-${stage}-${id}
|
|
17
19
|
*/
|
|
18
|
-
name
|
|
20
|
+
name?: string;
|
|
19
21
|
|
|
20
22
|
/**
|
|
21
23
|
* Optional description of the index
|
|
@@ -68,6 +70,11 @@ export interface VectorizeIndex
|
|
|
68
70
|
*/
|
|
69
71
|
id: string;
|
|
70
72
|
|
|
73
|
+
/**
|
|
74
|
+
* Name of the Vectorize Index.
|
|
75
|
+
*/
|
|
76
|
+
name: string;
|
|
77
|
+
|
|
71
78
|
/**
|
|
72
79
|
* Time at which the index was created
|
|
73
80
|
*/
|
|
@@ -121,7 +128,8 @@ export const VectorizeIndex = Resource(
|
|
|
121
128
|
props: VectorizeIndexProps,
|
|
122
129
|
): Promise<VectorizeIndex> {
|
|
123
130
|
const api = await createCloudflareApi(props);
|
|
124
|
-
const indexName =
|
|
131
|
+
const indexName =
|
|
132
|
+
props.name ?? this.output?.name ?? this.scope.createPhysicalName(id);
|
|
125
133
|
|
|
126
134
|
if (this.phase === "delete") {
|
|
127
135
|
logger.log("Deleting Vectorize index:", indexName);
|
|
@@ -145,7 +153,7 @@ export const VectorizeIndex = Resource(
|
|
|
145
153
|
} catch (error) {
|
|
146
154
|
// Check if this is a "index already exists" error and adopt is enabled
|
|
147
155
|
if (
|
|
148
|
-
props.adopt &&
|
|
156
|
+
(props.adopt ?? this.scope.adopt) &&
|
|
149
157
|
error instanceof CloudflareApiError &&
|
|
150
158
|
error.message.includes("vectorize.index.duplicate_name")
|
|
151
159
|
) {
|
|
@@ -158,6 +166,9 @@ export const VectorizeIndex = Resource(
|
|
|
158
166
|
}
|
|
159
167
|
}
|
|
160
168
|
} else {
|
|
169
|
+
if (this.output.name !== indexName) {
|
|
170
|
+
return this.replace();
|
|
171
|
+
}
|
|
161
172
|
if (props.delete !== this.props.delete) {
|
|
162
173
|
// Only allow changing the delete property
|
|
163
174
|
if (!this.quiet) {
|