alchemy 0.62.2 → 0.63.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/alchemy.js +1518 -1204
- package/bin/commands/deploy.ts +2 -0
- package/bin/commands/dev.ts +2 -0
- package/bin/services/execute-alchemy.ts +11 -0
- package/bin/services/template-manager.ts +2 -0
- package/bin/types.ts +2 -1
- package/lib/alchemy.d.ts +6 -22
- package/lib/alchemy.d.ts.map +1 -1
- package/lib/alchemy.js +65 -169
- package/lib/alchemy.js.map +1 -1
- package/lib/apply.d.ts +0 -2
- package/lib/apply.d.ts.map +1 -1
- package/lib/apply.js +2 -16
- package/lib/apply.js.map +1 -1
- package/lib/aws/account-id.d.ts.map +1 -1
- package/lib/aws/account-id.js +3 -2
- package/lib/aws/account-id.js.map +1 -1
- package/lib/aws/bucket.d.ts +8 -2
- package/lib/aws/bucket.d.ts.map +1 -1
- package/lib/aws/bucket.js +21 -14
- package/lib/aws/bucket.js.map +1 -1
- package/lib/aws/ec2/security-group.d.ts +8 -2
- package/lib/aws/ec2/security-group.d.ts.map +1 -1
- package/lib/aws/ec2/security-group.js +7 -2
- package/lib/aws/ec2/security-group.js.map +1 -1
- package/lib/aws/function.d.ts +9 -3
- package/lib/aws/function.d.ts.map +1 -1
- package/lib/aws/function.js +35 -26
- package/lib/aws/function.js.map +1 -1
- package/lib/aws/policy-attachment.d.ts.map +1 -1
- package/lib/aws/policy-attachment.js +2 -1
- package/lib/aws/policy-attachment.js.map +1 -1
- package/lib/aws/policy.d.ts +8 -2
- package/lib/aws/policy.d.ts.map +1 -1
- package/lib/aws/policy.js +13 -4
- package/lib/aws/policy.js.map +1 -1
- package/lib/aws/queue.d.ts +8 -2
- package/lib/aws/queue.d.ts.map +1 -1
- package/lib/aws/queue.js +22 -14
- package/lib/aws/queue.js.map +1 -1
- package/lib/aws/role.d.ts +8 -2
- package/lib/aws/role.d.ts.map +1 -1
- package/lib/aws/role.js +10 -3
- package/lib/aws/role.js.map +1 -1
- package/lib/aws/ses.d.ts +1 -1
- package/lib/aws/ses.d.ts.map +1 -1
- package/lib/aws/ses.js +2 -1
- package/lib/aws/ses.js.map +1 -1
- package/lib/aws/ssm-parameter.d.ts +8 -2
- package/lib/aws/ssm-parameter.d.ts.map +1 -1
- package/lib/aws/ssm-parameter.js +15 -10
- package/lib/aws/ssm-parameter.js.map +1 -1
- package/lib/aws/table.d.ts +8 -2
- package/lib/aws/table.d.ts.map +1 -1
- package/lib/aws/table.js +17 -9
- package/lib/aws/table.js.map +1 -1
- package/lib/cloudflare/account-api-token.d.ts +2 -2
- package/lib/cloudflare/account-api-token.d.ts.map +1 -1
- package/lib/cloudflare/account-api-token.js +7 -6
- package/lib/cloudflare/account-api-token.js.map +1 -1
- package/lib/cloudflare/ai-gateway.d.ts +9 -4
- package/lib/cloudflare/ai-gateway.d.ts.map +1 -1
- package/lib/cloudflare/ai-gateway.js +20 -24
- package/lib/cloudflare/ai-gateway.js.map +1 -1
- package/lib/cloudflare/api-schema.d.ts +2 -2
- package/lib/cloudflare/api-schema.d.ts.map +1 -1
- package/lib/cloudflare/api-schema.js +6 -2
- package/lib/cloudflare/api-schema.js.map +1 -1
- package/lib/cloudflare/api-shield.d.ts +5 -1
- package/lib/cloudflare/api-shield.d.ts.map +1 -1
- package/lib/cloudflare/api-shield.js +6 -1
- package/lib/cloudflare/api-shield.js.map +1 -1
- package/lib/cloudflare/assets.d.ts +1 -1
- package/lib/cloudflare/assets.d.ts.map +1 -1
- package/lib/cloudflare/astro/astro.d.ts.map +1 -1
- package/lib/cloudflare/astro/astro.js +3 -1
- package/lib/cloudflare/astro/astro.js.map +1 -1
- package/lib/cloudflare/astro/plugin.d.ts +2 -1
- package/lib/cloudflare/astro/plugin.d.ts.map +1 -1
- package/lib/cloudflare/astro/plugin.js.map +1 -1
- package/lib/cloudflare/bindings.d.ts +2 -2
- package/lib/cloudflare/bindings.d.ts.map +1 -1
- package/lib/cloudflare/bound.d.ts +1 -1
- package/lib/cloudflare/bound.d.ts.map +1 -1
- package/lib/cloudflare/bucket.d.ts +120 -1
- package/lib/cloudflare/bucket.d.ts.map +1 -1
- package/lib/cloudflare/bucket.js +80 -2
- package/lib/cloudflare/bucket.js.map +1 -1
- package/lib/cloudflare/compatibility-date.gen.d.ts +1 -1
- package/lib/cloudflare/compatibility-date.gen.js +1 -1
- package/lib/cloudflare/container.d.ts +10 -4
- package/lib/cloudflare/container.d.ts.map +1 -1
- package/lib/cloudflare/container.js +12 -9
- package/lib/cloudflare/container.js.map +1 -1
- package/lib/cloudflare/custom-domain.js +2 -1
- package/lib/cloudflare/custom-domain.js.map +1 -1
- package/lib/cloudflare/d1-database.d.ts +1 -1
- package/lib/cloudflare/d1-database.d.ts.map +1 -1
- package/lib/cloudflare/d1-database.js +7 -3
- package/lib/cloudflare/d1-database.js.map +1 -1
- package/lib/cloudflare/dispatch-namespace.d.ts +2 -0
- package/lib/cloudflare/dispatch-namespace.d.ts.map +1 -1
- package/lib/cloudflare/dispatch-namespace.js +7 -5
- package/lib/cloudflare/dispatch-namespace.js.map +1 -1
- package/lib/cloudflare/hyperdrive.d.ts +7 -1
- package/lib/cloudflare/hyperdrive.d.ts.map +1 -1
- package/lib/cloudflare/hyperdrive.js +2 -1
- package/lib/cloudflare/hyperdrive.js.map +1 -1
- package/lib/cloudflare/kv-namespace.d.ts +3 -0
- package/lib/cloudflare/kv-namespace.d.ts.map +1 -1
- package/lib/cloudflare/kv-namespace.js +11 -2
- package/lib/cloudflare/kv-namespace.js.map +1 -1
- package/lib/cloudflare/miniflare/miniflare-worker-proxy.js +3 -1
- package/lib/cloudflare/miniflare/miniflare-worker-proxy.js.map +1 -1
- package/lib/cloudflare/miniflare/paths.d.ts +4 -0
- package/lib/cloudflare/miniflare/paths.d.ts.map +1 -1
- package/lib/cloudflare/miniflare/paths.js +11 -0
- package/lib/cloudflare/miniflare/paths.js.map +1 -1
- package/lib/cloudflare/pipeline.d.ts +14 -3
- package/lib/cloudflare/pipeline.d.ts.map +1 -1
- package/lib/cloudflare/pipeline.js +31 -2
- package/lib/cloudflare/pipeline.js.map +1 -1
- package/lib/cloudflare/queue-consumer.js +1 -1
- package/lib/cloudflare/queue-consumer.js.map +1 -1
- package/lib/cloudflare/queue.d.ts +6 -4
- package/lib/cloudflare/queue.d.ts.map +1 -1
- package/lib/cloudflare/queue.js +13 -9
- package/lib/cloudflare/queue.js.map +1 -1
- package/lib/cloudflare/react-router/plugin.d.ts +1 -1
- package/lib/cloudflare/react-router/plugin.d.ts.map +1 -1
- package/lib/cloudflare/react-router/react-router.d.ts.map +1 -1
- package/lib/cloudflare/react-router/react-router.js +32 -2
- package/lib/cloudflare/react-router/react-router.js.map +1 -1
- package/lib/cloudflare/redwood/plugin.d.ts +2 -1
- package/lib/cloudflare/redwood/plugin.d.ts.map +1 -1
- package/lib/cloudflare/redwood/plugin.js.map +1 -1
- package/lib/cloudflare/route.js +1 -1
- package/lib/cloudflare/route.js.map +1 -1
- package/lib/cloudflare/ruleset.d.ts +3 -1
- package/lib/cloudflare/ruleset.d.ts.map +1 -1
- package/lib/cloudflare/ruleset.js +3 -2
- package/lib/cloudflare/ruleset.js.map +1 -1
- package/lib/cloudflare/secret.d.ts +6 -23
- package/lib/cloudflare/secret.d.ts.map +1 -1
- package/lib/cloudflare/secret.js +8 -4
- package/lib/cloudflare/secret.js.map +1 -1
- package/lib/cloudflare/secrets-store.d.ts +1 -1
- package/lib/cloudflare/secrets-store.d.ts.map +1 -1
- package/lib/cloudflare/secrets-store.js +5 -2
- package/lib/cloudflare/secrets-store.js.map +1 -1
- package/lib/cloudflare/tunnel.d.ts +5 -1
- package/lib/cloudflare/tunnel.d.ts.map +1 -1
- package/lib/cloudflare/tunnel.js +5 -1
- package/lib/cloudflare/tunnel.js.map +1 -1
- package/lib/cloudflare/vectorize-index.d.ts +7 -1
- package/lib/cloudflare/vectorize-index.d.ts.map +1 -1
- package/lib/cloudflare/vectorize-index.js +5 -2
- package/lib/cloudflare/vectorize-index.js.map +1 -1
- package/lib/cloudflare/vite/plugin.d.ts +2 -1
- package/lib/cloudflare/vite/plugin.d.ts.map +1 -1
- package/lib/cloudflare/vite/plugin.js.map +1 -1
- package/lib/cloudflare/vite/vite.d.ts +1 -1
- package/lib/cloudflare/vite/vite.d.ts.map +1 -1
- package/lib/cloudflare/vite/vite.js +1 -1
- package/lib/cloudflare/vite/vite.js.map +1 -1
- package/lib/cloudflare/website.js +1 -1
- package/lib/cloudflare/website.js.map +1 -1
- package/lib/cloudflare/worker.d.ts +1 -1
- package/lib/cloudflare/worker.d.ts.map +1 -1
- package/lib/cloudflare/worker.js +12 -7
- package/lib/cloudflare/worker.js.map +1 -1
- package/lib/cloudflare/wrangler.json.d.ts +1 -1
- package/lib/cloudflare/wrangler.json.d.ts.map +1 -1
- package/lib/cloudflare/wrangler.json.js +5 -3
- package/lib/cloudflare/wrangler.json.js.map +1 -1
- package/lib/docker/container.d.ts +6 -0
- package/lib/docker/container.d.ts.map +1 -1
- package/lib/docker/container.js +5 -1
- package/lib/docker/container.js.map +1 -1
- package/lib/docker/network.d.ts +8 -2
- package/lib/docker/network.d.ts.map +1 -1
- package/lib/docker/network.js +7 -2
- package/lib/docker/network.js.map +1 -1
- package/lib/docker/volume.d.ts +8 -2
- package/lib/docker/volume.d.ts.map +1 -1
- package/lib/docker/volume.js +6 -4
- package/lib/docker/volume.js.map +1 -1
- package/lib/esbuild/bundle.d.ts +1 -1
- package/lib/fs/index.d.ts +0 -8
- package/lib/fs/index.d.ts.map +1 -1
- package/lib/fs/index.js +0 -8
- package/lib/fs/index.js.map +1 -1
- package/lib/github/client.d.ts +1 -1
- package/lib/github/client.d.ts.map +1 -1
- package/lib/github/client.js +2 -1
- package/lib/github/client.js.map +1 -1
- package/lib/github/repository-environment.d.ts +8 -2
- package/lib/github/repository-environment.d.ts.map +1 -1
- package/lib/github/repository-environment.js +16 -12
- package/lib/github/repository-environment.js.map +1 -1
- package/lib/neon/project.d.ts +7 -1
- package/lib/neon/project.d.ts.map +1 -1
- package/lib/neon/project.js +10 -6
- package/lib/neon/project.js.map +1 -1
- package/lib/planetscale/branch.d.ts +4 -2
- package/lib/planetscale/branch.d.ts.map +1 -1
- package/lib/planetscale/branch.js +18 -12
- package/lib/planetscale/branch.js.map +1 -1
- package/lib/planetscale/database.d.ts +8 -2
- package/lib/planetscale/database.d.ts.map +1 -1
- package/lib/planetscale/database.js +24 -16
- package/lib/planetscale/database.js.map +1 -1
- package/lib/planetscale/password.d.ts +8 -2
- package/lib/planetscale/password.d.ts.map +1 -1
- package/lib/planetscale/password.js +2 -2
- package/lib/planetscale/password.js.map +1 -1
- package/lib/resource.d.ts +0 -2
- package/lib/resource.d.ts.map +1 -1
- package/lib/resource.js +1 -9
- package/lib/resource.js.map +1 -1
- package/lib/scope.d.ts +9 -3
- package/lib/scope.d.ts.map +1 -1
- package/lib/scope.js +21 -34
- package/lib/scope.js.map +1 -1
- package/lib/sentry/client-key.d.ts +7 -1
- package/lib/sentry/client-key.d.ts.map +1 -1
- package/lib/sentry/client-key.js +45 -6
- package/lib/sentry/client-key.js.map +1 -1
- package/lib/sentry/project.d.ts +8 -2
- package/lib/sentry/project.d.ts.map +1 -1
- package/lib/sentry/project.js +35 -5
- package/lib/sentry/project.js.map +1 -1
- package/lib/sentry/team.d.ts +8 -2
- package/lib/sentry/team.d.ts.map +1 -1
- package/lib/sentry/team.js +36 -6
- package/lib/sentry/team.js.map +1 -1
- package/lib/serde.d.ts +0 -5
- package/lib/serde.d.ts.map +1 -1
- package/lib/serde.js +0 -28
- package/lib/serde.js.map +1 -1
- package/lib/state/d1-state-store.d.ts +1 -1
- package/lib/state/d1-state-store.d.ts.map +1 -1
- package/lib/state/d1-state-store.js +5 -5
- package/lib/state/d1-state-store.js.map +1 -1
- package/lib/state/sqlite-state-store.d.ts.map +1 -1
- package/lib/state/sqlite-state-store.js +7 -11
- package/lib/state/sqlite-state-store.js.map +1 -1
- package/lib/stripe/card.d.ts.map +1 -1
- package/lib/stripe/card.js +3 -2
- package/lib/stripe/card.js.map +1 -1
- package/lib/stripe/client.d.ts +2 -2
- package/lib/stripe/client.d.ts.map +1 -1
- package/lib/stripe/client.js +4 -3
- package/lib/stripe/client.js.map +1 -1
- package/lib/stripe/coupon.d.ts.map +1 -1
- package/lib/stripe/coupon.js +4 -3
- package/lib/stripe/coupon.js.map +1 -1
- package/lib/stripe/customer.js +2 -2
- package/lib/stripe/customer.js.map +1 -1
- package/lib/stripe/entitlements-feature.d.ts.map +1 -1
- package/lib/stripe/entitlements-feature.js +3 -2
- package/lib/stripe/entitlements-feature.js.map +1 -1
- package/lib/stripe/file.d.ts.map +1 -1
- package/lib/stripe/file.js +3 -2
- package/lib/stripe/file.js.map +1 -1
- package/lib/stripe/meter.js +2 -2
- package/lib/stripe/meter.js.map +1 -1
- package/lib/stripe/portal-configuration.d.ts.map +1 -1
- package/lib/stripe/portal-configuration.js +3 -2
- package/lib/stripe/portal-configuration.js.map +1 -1
- package/lib/stripe/price.d.ts.map +1 -1
- package/lib/stripe/price.js +3 -2
- package/lib/stripe/price.js.map +1 -1
- package/lib/stripe/product-feature.d.ts.map +1 -1
- package/lib/stripe/product-feature.js +3 -2
- package/lib/stripe/product-feature.js.map +1 -1
- package/lib/stripe/product.d.ts.map +1 -1
- package/lib/stripe/product.js +3 -2
- package/lib/stripe/product.js.map +1 -1
- package/lib/stripe/promotion-code.d.ts.map +1 -1
- package/lib/stripe/promotion-code.js +3 -2
- package/lib/stripe/promotion-code.js.map +1 -1
- package/lib/stripe/shipping-rate.d.ts.map +1 -1
- package/lib/stripe/shipping-rate.js +4 -3
- package/lib/stripe/shipping-rate.js.map +1 -1
- package/lib/stripe/tax-rate.d.ts.map +1 -1
- package/lib/stripe/tax-rate.js +3 -2
- package/lib/stripe/tax-rate.js.map +1 -1
- package/lib/stripe/webhook.d.ts.map +1 -1
- package/lib/stripe/webhook.js +4 -3
- package/lib/stripe/webhook.js.map +1 -1
- package/lib/test/vitest.d.ts.map +1 -1
- package/lib/test/vitest.js +1 -0
- package/lib/test/vitest.js.map +1 -1
- package/lib/upstash/redis.d.ts +8 -2
- package/lib/upstash/redis.d.ts.map +1 -1
- package/lib/upstash/redis.js +5 -4
- package/lib/upstash/redis.js.map +1 -1
- package/lib/util/ignore-matcher.d.ts.map +1 -1
- package/lib/util/ignore-matcher.js +3 -1
- package/lib/util/ignore-matcher.js.map +1 -1
- package/lib/util/peer.d.ts +10 -0
- package/lib/util/peer.d.ts.map +1 -0
- package/lib/util/peer.js +42 -0
- package/lib/util/peer.js.map +1 -0
- package/lib/util/telemetry/constants.d.ts.map +1 -1
- package/lib/util/telemetry/constants.js +2 -2
- package/lib/util/telemetry/constants.js.map +1 -1
- package/lib/vercel/project.d.ts +7 -1
- package/lib/vercel/project.d.ts.map +1 -1
- package/lib/vercel/project.js +28 -0
- package/lib/vercel/project.js.map +1 -1
- package/package.json +88 -74
- package/src/alchemy.ts +76 -222
- package/src/apply.ts +6 -19
- package/src/aws/account-id.ts +6 -3
- package/src/aws/bucket.ts +43 -32
- package/src/aws/ec2/security-group.ts +15 -3
- package/src/aws/function.ts +65 -39
- package/src/aws/policy-attachment.ts +10 -6
- package/src/aws/policy.ts +33 -15
- package/src/aws/queue.ts +50 -29
- package/src/aws/role.ts +37 -20
- package/src/aws/ses.ts +24 -20
- package/src/aws/ssm-parameter.ts +40 -20
- package/src/aws/table.ts +35 -17
- package/src/cloudflare/account-api-token.ts +9 -7
- package/src/cloudflare/ai-gateway.ts +37 -34
- package/src/cloudflare/api-schema.ts +33 -26
- package/src/cloudflare/api-shield.ts +15 -2
- package/src/cloudflare/astro/astro.ts +5 -1
- package/src/cloudflare/astro/plugin.ts +2 -1
- package/src/cloudflare/bindings.ts +2 -2
- package/src/cloudflare/bound.ts +1 -1
- package/src/cloudflare/bucket.ts +242 -3
- package/src/cloudflare/compatibility-date.gen.ts +1 -1
- package/src/cloudflare/container.ts +23 -12
- package/src/cloudflare/custom-domain.ts +2 -2
- package/src/cloudflare/d1-database.ts +11 -4
- package/src/cloudflare/dispatch-namespace.ts +10 -7
- package/src/cloudflare/hyperdrive.ts +13 -3
- package/src/cloudflare/kv-namespace.ts +25 -2
- package/src/cloudflare/miniflare/miniflare-worker-proxy.ts +3 -1
- package/src/cloudflare/miniflare/paths.ts +13 -0
- package/src/cloudflare/pipeline.ts +76 -28
- package/src/cloudflare/queue-consumer.ts +1 -1
- package/src/cloudflare/queue.ts +65 -54
- package/src/cloudflare/react-router/react-router.ts +28 -2
- package/src/cloudflare/redwood/plugin.ts +3 -2
- package/src/cloudflare/route.ts +1 -1
- package/src/cloudflare/ruleset.ts +7 -2
- package/src/cloudflare/secret.ts +20 -31
- package/src/cloudflare/secrets-store.ts +7 -3
- package/src/cloudflare/tunnel.ts +13 -2
- package/src/cloudflare/vectorize-index.ts +14 -3
- package/src/cloudflare/vite/plugin.ts +3 -2
- package/src/cloudflare/vite/vite.ts +2 -3
- package/src/cloudflare/website.ts +1 -1
- package/src/cloudflare/worker.ts +35 -23
- package/src/cloudflare/wrangler.json.ts +7 -4
- package/src/docker/container.ts +13 -1
- package/src/docker/network.ts +18 -3
- package/src/docker/volume.ts +17 -6
- package/src/fs/index.ts +0 -8
- package/src/github/client.ts +6 -2
- package/src/github/repository-environment.ts +27 -13
- package/src/neon/project.ts +20 -6
- package/src/planetscale/branch.ts +24 -13
- package/src/planetscale/database.ts +38 -17
- package/src/planetscale/password.ts +10 -3
- package/src/resource.ts +1 -10
- package/src/scope.ts +29 -38
- package/src/sentry/client-key.ts +74 -6
- package/src/sentry/project.ts +59 -6
- package/src/sentry/team.ts +55 -7
- package/src/serde.ts +0 -44
- package/src/state/d1-state-store.ts +13 -6
- package/src/state/sqlite-state-store.ts +16 -17
- package/src/stripe/card.ts +5 -2
- package/src/stripe/client.ts +10 -3
- package/src/stripe/coupon.ts +4 -3
- package/src/stripe/customer.ts +2 -2
- package/src/stripe/entitlements-feature.ts +5 -2
- package/src/stripe/file.ts +3 -2
- package/src/stripe/meter.ts +2 -2
- package/src/stripe/portal-configuration.ts +5 -2
- package/src/stripe/price.ts +3 -2
- package/src/stripe/product-feature.ts +5 -2
- package/src/stripe/product.ts +3 -2
- package/src/stripe/promotion-code.ts +3 -2
- package/src/stripe/shipping-rate.ts +4 -3
- package/src/stripe/tax-rate.ts +3 -2
- package/src/stripe/webhook.ts +4 -3
- package/src/test/vitest.ts +1 -0
- package/src/upstash/redis.ts +15 -5
- package/src/util/ignore-matcher.ts +3 -1
- package/src/util/peer.ts +53 -0
- package/src/util/telemetry/constants.ts +2 -2
- package/src/vercel/project.ts +46 -1
- package/templates/astro/_gitignore +2 -1
- package/templates/hono/README.md +19 -0
- package/templates/hono/_env +1 -0
- package/templates/hono/_env.example +1 -0
- package/templates/hono/_gitignore +34 -0
- package/templates/hono/alchemy.run.ts +22 -0
- package/templates/hono/package.json +18 -0
- package/templates/hono/src/index.ts +17 -0
- package/templates/hono/tsconfig.json +13 -0
- package/templates/hono/types/env.d.ts +16 -0
- package/templates/nuxt/_gitignore +2 -1
- package/templates/react-router/_gitignore +1 -0
- package/templates/react-router/vite.config.ts +5 -3
- package/templates/rwsdk/_gitignore +2 -3
- package/templates/sveltekit/_gitignore +2 -1
- package/templates/tanstack-start/_gitignore +2 -1
- package/templates/typescript/_gitignore +2 -1
- package/templates/vite/_gitignore +2 -1
- package/workers/cloudflare-state-store.js +69 -74
- package/workers/dofs-state-store.js +1 -1
- package/bin/bootstrap-s3.ts +0 -255
- package/lib/ai/ark.d.ts +0 -12
- package/lib/ai/ark.d.ts.map +0 -1
- package/lib/ai/ark.js +0 -87
- package/lib/ai/ark.js.map +0 -1
- package/lib/ai/astro-file.d.ts +0 -138
- package/lib/ai/astro-file.d.ts.map +0 -1
- package/lib/ai/astro-file.js +0 -158
- package/lib/ai/astro-file.js.map +0 -1
- package/lib/ai/client.d.ts +0 -51
- package/lib/ai/client.d.ts.map +0 -1
- package/lib/ai/client.js +0 -58
- package/lib/ai/client.js.map +0 -1
- package/lib/ai/css-file.d.ts +0 -132
- package/lib/ai/css-file.d.ts.map +0 -1
- package/lib/ai/css-file.js +0 -142
- package/lib/ai/css-file.js.map +0 -1
- package/lib/ai/data.d.ts +0 -152
- package/lib/ai/data.d.ts.map +0 -1
- package/lib/ai/data.js +0 -120
- package/lib/ai/data.js.map +0 -1
- package/lib/ai/document.d.ts +0 -208
- package/lib/ai/document.d.ts.map +0 -1
- package/lib/ai/document.js +0 -206
- package/lib/ai/document.js.map +0 -1
- package/lib/ai/html-file.d.ts +0 -129
- package/lib/ai/html-file.d.ts.map +0 -1
- package/lib/ai/html-file.js +0 -139
- package/lib/ai/html-file.js.map +0 -1
- package/lib/ai/index.d.ts +0 -11
- package/lib/ai/index.d.ts.map +0 -1
- package/lib/ai/index.js +0 -11
- package/lib/ai/index.js.map +0 -1
- package/lib/ai/json-file.d.ts +0 -161
- package/lib/ai/json-file.d.ts.map +0 -1
- package/lib/ai/json-file.js +0 -188
- package/lib/ai/json-file.js.map +0 -1
- package/lib/ai/typescript-file.d.ts +0 -140
- package/lib/ai/typescript-file.d.ts.map +0 -1
- package/lib/ai/typescript-file.js +0 -146
- package/lib/ai/typescript-file.js.map +0 -1
- package/lib/ai/vue-file.d.ts +0 -127
- package/lib/ai/vue-file.d.ts.map +0 -1
- package/lib/ai/vue-file.js +0 -137
- package/lib/ai/vue-file.js.map +0 -1
- package/lib/ai/yaml-file.d.ts +0 -170
- package/lib/ai/yaml-file.d.ts.map +0 -1
- package/lib/ai/yaml-file.js +0 -201
- package/lib/ai/yaml-file.js.map +0 -1
- package/lib/fs/static-astro-file.d.ts +0 -35
- package/lib/fs/static-astro-file.d.ts.map +0 -1
- package/lib/fs/static-astro-file.js +0 -40
- package/lib/fs/static-astro-file.js.map +0 -1
- package/lib/fs/static-css-file.d.ts +0 -25
- package/lib/fs/static-css-file.d.ts.map +0 -1
- package/lib/fs/static-css-file.js +0 -30
- package/lib/fs/static-css-file.js.map +0 -1
- package/lib/fs/static-html-file.d.ts +0 -32
- package/lib/fs/static-html-file.d.ts.map +0 -1
- package/lib/fs/static-html-file.js +0 -37
- package/lib/fs/static-html-file.js.map +0 -1
- package/lib/fs/static-json-file.d.ts +0 -18
- package/lib/fs/static-json-file.d.ts.map +0 -1
- package/lib/fs/static-json-file.js +0 -19
- package/lib/fs/static-json-file.js.map +0 -1
- package/lib/fs/static-text-file.d.ts +0 -13
- package/lib/fs/static-text-file.d.ts.map +0 -1
- package/lib/fs/static-text-file.js +0 -9
- package/lib/fs/static-text-file.js.map +0 -1
- package/lib/fs/static-typescript-file.d.ts +0 -20
- package/lib/fs/static-typescript-file.d.ts.map +0 -1
- package/lib/fs/static-typescript-file.js +0 -16
- package/lib/fs/static-typescript-file.js.map +0 -1
- package/lib/fs/static-vue-file.d.ts +0 -29
- package/lib/fs/static-vue-file.d.ts.map +0 -1
- package/lib/fs/static-vue-file.js +0 -34
- package/lib/fs/static-vue-file.js.map +0 -1
- package/lib/fs/static-yaml-file.d.ts +0 -23
- package/lib/fs/static-yaml-file.d.ts.map +0 -1
- package/lib/fs/static-yaml-file.js +0 -10
- package/lib/fs/static-yaml-file.js.map +0 -1
- package/lib/internal/docs/providers.d.ts +0 -34
- package/lib/internal/docs/providers.d.ts.map +0 -1
- package/lib/internal/docs/providers.js +0 -200
- package/lib/internal/docs/providers.js.map +0 -1
- package/lib/runtime/bind.d.ts +0 -25
- package/lib/runtime/bind.d.ts.map +0 -1
- package/lib/runtime/bind.js +0 -76
- package/lib/runtime/bind.js.map +0 -1
- package/lib/runtime/global.d.ts +0 -8
- package/lib/runtime/global.d.ts.map +0 -1
- package/lib/runtime/global.js +0 -3
- package/lib/runtime/global.js.map +0 -1
- package/lib/runtime/plugin.d.ts +0 -35
- package/lib/runtime/plugin.d.ts.map +0 -1
- package/lib/runtime/plugin.js +0 -134
- package/lib/runtime/plugin.js.map +0 -1
- package/lib/runtime/shims.d.ts +0 -6
- package/lib/runtime/shims.d.ts.map +0 -1
- package/lib/runtime/shims.js +0 -27
- package/lib/runtime/shims.js.map +0 -1
- package/lib/runtime/state.d.ts +0 -5
- package/lib/runtime/state.d.ts.map +0 -1
- package/lib/runtime/state.js +0 -4
- package/lib/runtime/state.js.map +0 -1
- package/lib/web/astro.d.ts +0 -148
- package/lib/web/astro.d.ts.map +0 -1
- package/lib/web/astro.js +0 -419
- package/lib/web/astro.js.map +0 -1
- package/lib/web/shadcn-component.d.ts +0 -30
- package/lib/web/shadcn-component.d.ts.map +0 -1
- package/lib/web/shadcn-component.js +0 -25
- package/lib/web/shadcn-component.js.map +0 -1
- package/lib/web/shadcn.d.ts +0 -98
- package/lib/web/shadcn.d.ts.map +0 -1
- package/lib/web/shadcn.js +0 -102
- package/lib/web/shadcn.js.map +0 -1
- package/lib/web/tailwind.d.ts +0 -65
- package/lib/web/tailwind.d.ts.map +0 -1
- package/lib/web/tailwind.js +0 -98
- package/lib/web/tailwind.js.map +0 -1
- package/lib/web/vite.d.ts +0 -96
- package/lib/web/vite.d.ts.map +0 -1
- package/lib/web/vite.js +0 -232
- package/lib/web/vite.js.map +0 -1
- package/lib/web/vitepress/config.d.ts +0 -12
- package/lib/web/vitepress/config.d.ts.map +0 -1
- package/lib/web/vitepress/config.js +0 -33
- package/lib/web/vitepress/config.js.map +0 -1
- package/lib/web/vitepress/custom-theme.d.ts +0 -174
- package/lib/web/vitepress/custom-theme.d.ts.map +0 -1
- package/lib/web/vitepress/custom-theme.js +0 -337
- package/lib/web/vitepress/custom-theme.js.map +0 -1
- package/lib/web/vitepress/dependencies.d.ts +0 -13
- package/lib/web/vitepress/dependencies.d.ts.map +0 -1
- package/lib/web/vitepress/dependencies.js +0 -37
- package/lib/web/vitepress/dependencies.js.map +0 -1
- package/lib/web/vitepress/home-page.d.ts +0 -247
- package/lib/web/vitepress/home-page.d.ts.map +0 -1
- package/lib/web/vitepress/home-page.js +0 -146
- package/lib/web/vitepress/home-page.js.map +0 -1
- package/lib/web/vitepress/index.d.ts +0 -6
- package/lib/web/vitepress/index.d.ts.map +0 -1
- package/lib/web/vitepress/index.js +0 -6
- package/lib/web/vitepress/index.js.map +0 -1
- package/lib/web/vitepress/process-front-matter-files.d.ts +0 -19
- package/lib/web/vitepress/process-front-matter-files.d.ts.map +0 -1
- package/lib/web/vitepress/process-front-matter-files.js +0 -73
- package/lib/web/vitepress/process-front-matter-files.js.map +0 -1
- package/lib/web/vitepress/vitepress.d.ts +0 -75
- package/lib/web/vitepress/vitepress.d.ts.map +0 -1
- package/lib/web/vitepress/vitepress.js +0 -254
- package/lib/web/vitepress/vitepress.js.map +0 -1
- package/src/ai/ark.ts +0 -118
- package/src/ai/astro-file.ts +0 -270
- package/src/ai/client.ts +0 -117
- package/src/ai/css-file.ts +0 -247
- package/src/ai/data.ts +0 -221
- package/src/ai/document.ts +0 -367
- package/src/ai/html-file.ts +0 -244
- package/src/ai/index.ts +0 -10
- package/src/ai/json-file.ts +0 -325
- package/src/ai/typescript-file.ts +0 -259
- package/src/ai/vue-file.ts +0 -242
- package/src/ai/yaml-file.ts +0 -328
- package/src/fs/static-astro-file.ts +0 -45
- package/src/fs/static-css-file.ts +0 -35
- package/src/fs/static-html-file.ts +0 -42
- package/src/fs/static-json-file.ts +0 -38
- package/src/fs/static-text-file.ts +0 -23
- package/src/fs/static-typescript-file.ts +0 -37
- package/src/fs/static-vue-file.ts +0 -39
- package/src/fs/static-yaml-file.ts +0 -33
- package/src/internal/docs/providers.ts +0 -286
- package/src/runtime/bind.ts +0 -95
- package/src/runtime/global.ts +0 -10
- package/src/runtime/plugin.ts +0 -163
- package/src/runtime/shims.js +0 -34
- package/src/runtime/state.ts +0 -9
- package/src/web/astro.ts +0 -643
- package/src/web/shadcn-component.ts +0 -72
- package/src/web/shadcn.ts +0 -221
- package/src/web/tailwind.ts +0 -167
- package/src/web/vite.ts +0 -407
- package/src/web/vitepress/config.ts +0 -50
- package/src/web/vitepress/custom-theme.ts +0 -514
- package/src/web/vitepress/dependencies.ts +0 -69
- package/src/web/vitepress/home-page.ts +0 -378
- package/src/web/vitepress/index.ts +0 -5
- package/src/web/vitepress/process-front-matter-files.ts +0 -107
- package/src/web/vitepress/vitepress.ts +0 -372
- package/templates/sveltekit/bun.lock +0 -1099
|
@@ -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
|
|
|
@@ -100,57 +100,56 @@ export function isQueue(eventSource: any): eventSource is Queue {
|
|
|
100
100
|
/**
|
|
101
101
|
* Output returned after Cloudflare Queue creation/update
|
|
102
102
|
*/
|
|
103
|
-
export
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
type: "queue";
|
|
110
|
-
|
|
111
|
-
/**
|
|
112
|
-
* The unique ID of the queue
|
|
113
|
-
*/
|
|
114
|
-
id: string;
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* The name of the queue
|
|
118
|
-
*/
|
|
119
|
-
name: string;
|
|
103
|
+
export type Queue<Body = unknown> = Resource<"cloudflare::Queue"> &
|
|
104
|
+
Omit<QueueProps, "dev"> & {
|
|
105
|
+
/**
|
|
106
|
+
* Type identifier for Cloudflare Queue
|
|
107
|
+
*/
|
|
108
|
+
type: "queue";
|
|
120
109
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
110
|
+
/**
|
|
111
|
+
* The unique ID of the queue
|
|
112
|
+
*/
|
|
113
|
+
id: string;
|
|
125
114
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
115
|
+
/**
|
|
116
|
+
* The name of the queue
|
|
117
|
+
*/
|
|
118
|
+
name: string;
|
|
130
119
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
120
|
+
/**
|
|
121
|
+
* Time when the queue was created
|
|
122
|
+
*/
|
|
123
|
+
createdOn: string;
|
|
135
124
|
|
|
136
|
-
|
|
125
|
+
/**
|
|
126
|
+
* Modified timestamp
|
|
127
|
+
*/
|
|
128
|
+
modifiedOn: string;
|
|
137
129
|
|
|
138
|
-
/**
|
|
139
|
-
* Development mode properties
|
|
140
|
-
* @internal
|
|
141
|
-
*/
|
|
142
|
-
dev: {
|
|
143
130
|
/**
|
|
144
|
-
*
|
|
131
|
+
* Phantom property to allow type inference
|
|
145
132
|
*/
|
|
146
|
-
|
|
133
|
+
Body: Body;
|
|
134
|
+
|
|
135
|
+
Batch: MessageBatch<Body>;
|
|
147
136
|
|
|
148
137
|
/**
|
|
149
|
-
*
|
|
138
|
+
* Development mode properties
|
|
139
|
+
* @internal
|
|
150
140
|
*/
|
|
151
|
-
|
|
141
|
+
dev: {
|
|
142
|
+
/**
|
|
143
|
+
* The ID of the queue in development mode
|
|
144
|
+
*/
|
|
145
|
+
id: string;
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Whether the queue is running remotely
|
|
149
|
+
*/
|
|
150
|
+
remote: boolean;
|
|
151
|
+
};
|
|
152
152
|
};
|
|
153
|
-
}
|
|
154
153
|
|
|
155
154
|
/**
|
|
156
155
|
* Creates and manages Cloudflare Queues.
|
|
@@ -249,7 +248,9 @@ const _Queue = Resource("cloudflare::Queue", async function <
|
|
|
249
248
|
>(this: Context<Queue<T>>, id: string, props: QueueProps = {}): Promise<
|
|
250
249
|
Queue<T>
|
|
251
250
|
> {
|
|
252
|
-
const queueName =
|
|
251
|
+
const queueName =
|
|
252
|
+
props.name ?? this.output?.name ?? this.scope.createPhysicalName(id);
|
|
253
|
+
|
|
253
254
|
const dev = {
|
|
254
255
|
id: this.output?.dev?.id ?? this.output?.id ?? id,
|
|
255
256
|
remote: props.dev?.remote ?? false,
|
|
@@ -286,7 +287,7 @@ const _Queue = Resource("cloudflare::Queue", async function <
|
|
|
286
287
|
queueData = await createQueue(api, queueName, props);
|
|
287
288
|
} catch (error) {
|
|
288
289
|
if (error instanceof CloudflareApiError && error.status === 409) {
|
|
289
|
-
if (!props.adopt) {
|
|
290
|
+
if (!(props.adopt ?? this.scope.adopt)) {
|
|
290
291
|
throw error;
|
|
291
292
|
}
|
|
292
293
|
// Queue already exists, try to find it by name
|
|
@@ -297,7 +298,10 @@ const _Queue = Resource("cloudflare::Queue", async function <
|
|
|
297
298
|
);
|
|
298
299
|
}
|
|
299
300
|
queueData = existingQueue;
|
|
300
|
-
queueData = await updateQueue(api, queueData.result.queue_id!,
|
|
301
|
+
queueData = await updateQueue(api, queueData.result.queue_id!, {
|
|
302
|
+
...props,
|
|
303
|
+
name: queueName,
|
|
304
|
+
});
|
|
301
305
|
} else {
|
|
302
306
|
throw error;
|
|
303
307
|
}
|
|
@@ -305,15 +309,11 @@ const _Queue = Resource("cloudflare::Queue", async function <
|
|
|
305
309
|
} else {
|
|
306
310
|
// Update operation
|
|
307
311
|
if (this.output?.id) {
|
|
308
|
-
// Check if name is being changed, which is not allowed
|
|
309
|
-
if (queueName !== this.output.name) {
|
|
310
|
-
throw new Error(
|
|
311
|
-
`Cannot update Queue name after creation. Queue name is immutable. Before: ${this.output.name}, After: ${queueName}`,
|
|
312
|
-
);
|
|
313
|
-
}
|
|
314
|
-
|
|
315
312
|
// Update the queue with new settings
|
|
316
|
-
queueData = await updateQueue(api, this.output.id,
|
|
313
|
+
queueData = await updateQueue(api, this.output.id, {
|
|
314
|
+
...props,
|
|
315
|
+
name: queueName,
|
|
316
|
+
});
|
|
317
317
|
} else {
|
|
318
318
|
// If no ID exists, fall back to creating a new queue
|
|
319
319
|
queueData = await createQueue(api, queueName, props);
|
|
@@ -453,10 +453,21 @@ export async function deleteQueue(
|
|
|
453
453
|
export async function updateQueue(
|
|
454
454
|
api: CloudflareApi,
|
|
455
455
|
queueId: string,
|
|
456
|
-
props: QueueProps
|
|
456
|
+
props: QueueProps & {
|
|
457
|
+
name: string;
|
|
458
|
+
},
|
|
457
459
|
): Promise<CloudflareQueueResponse> {
|
|
458
460
|
// Prepare the update payload - only include settings
|
|
459
|
-
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
|
+
};
|
|
460
471
|
|
|
461
472
|
// Add settings if provided
|
|
462
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) {
|