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
package/bin/bootstrap-s3.ts
DELETED
|
@@ -1,255 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
GetResourcesCommand,
|
|
3
|
-
ResourceGroupsTaggingAPIClient,
|
|
4
|
-
} from "@aws-sdk/client-resource-groups-tagging-api";
|
|
5
|
-
import {
|
|
6
|
-
CreateBucketCommand,
|
|
7
|
-
PutBucketTaggingCommand,
|
|
8
|
-
S3Client,
|
|
9
|
-
} from "@aws-sdk/client-s3";
|
|
10
|
-
import { loadConfig } from "@smithy/node-config-provider";
|
|
11
|
-
|
|
12
|
-
export interface BootstrapS3Options {
|
|
13
|
-
region?: string;
|
|
14
|
-
prefix?: string;
|
|
15
|
-
help?: boolean;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
const BOOTSTRAP_TAG_KEY = "alchemy:bootstrap";
|
|
19
|
-
const BOOTSTRAP_TAG_VALUE = "s3-state-store";
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Generate a random suffix for bucket names to avoid conflicts
|
|
23
|
-
*/
|
|
24
|
-
function generateRandomSuffix(): string {
|
|
25
|
-
return Math.random().toString(36).substring(2, 8);
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Find existing bootstrap bucket by checking tags using Resource Groups API
|
|
30
|
-
*/
|
|
31
|
-
async function findExistingBootstrapBucket(
|
|
32
|
-
region: string,
|
|
33
|
-
prefix: string,
|
|
34
|
-
): Promise<string | null> {
|
|
35
|
-
try {
|
|
36
|
-
const resourceGroupsClient = new ResourceGroupsTaggingAPIClient({ region });
|
|
37
|
-
|
|
38
|
-
const result = await resourceGroupsClient.send(
|
|
39
|
-
new GetResourcesCommand({
|
|
40
|
-
ResourceTypeFilters: ["s3:bucket"],
|
|
41
|
-
TagFilters: [
|
|
42
|
-
{
|
|
43
|
-
Key: BOOTSTRAP_TAG_KEY,
|
|
44
|
-
Values: [BOOTSTRAP_TAG_VALUE],
|
|
45
|
-
},
|
|
46
|
-
],
|
|
47
|
-
}),
|
|
48
|
-
);
|
|
49
|
-
|
|
50
|
-
if (!result.ResourceTagMappingList) {
|
|
51
|
-
return null;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
// Find a bucket that matches our prefix
|
|
55
|
-
for (const resource of result.ResourceTagMappingList) {
|
|
56
|
-
if (resource.ResourceARN) {
|
|
57
|
-
// Extract bucket name from ARN: arn:aws:s3:::bucket-name
|
|
58
|
-
const bucketName = resource.ResourceARN.split(":::")[1];
|
|
59
|
-
if (bucketName?.startsWith(prefix)) {
|
|
60
|
-
return bucketName;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
} catch (error: any) {
|
|
65
|
-
console.error("Error finding bootstrap buckets:", error.message);
|
|
66
|
-
return null;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
return null;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* Create a new S3 bucket with bootstrap tags
|
|
74
|
-
*/
|
|
75
|
-
async function createBootstrapBucket(
|
|
76
|
-
s3Client: S3Client,
|
|
77
|
-
bucketName: string,
|
|
78
|
-
): Promise<void> {
|
|
79
|
-
try {
|
|
80
|
-
// Create the bucket
|
|
81
|
-
const createCommand = new CreateBucketCommand({
|
|
82
|
-
Bucket: bucketName,
|
|
83
|
-
});
|
|
84
|
-
|
|
85
|
-
await s3Client.send(createCommand);
|
|
86
|
-
console.log(`✅ Created S3 bucket: ${bucketName}`);
|
|
87
|
-
|
|
88
|
-
// Add bootstrap tags
|
|
89
|
-
await s3Client.send(
|
|
90
|
-
new PutBucketTaggingCommand({
|
|
91
|
-
Bucket: bucketName,
|
|
92
|
-
Tagging: {
|
|
93
|
-
TagSet: [
|
|
94
|
-
{
|
|
95
|
-
Key: BOOTSTRAP_TAG_KEY,
|
|
96
|
-
Value: BOOTSTRAP_TAG_VALUE,
|
|
97
|
-
},
|
|
98
|
-
{
|
|
99
|
-
Key: "Purpose",
|
|
100
|
-
Value: "Alchemy state storage",
|
|
101
|
-
},
|
|
102
|
-
{
|
|
103
|
-
Key: "CreatedBy",
|
|
104
|
-
Value: "alchemy-cli",
|
|
105
|
-
},
|
|
106
|
-
],
|
|
107
|
-
},
|
|
108
|
-
}),
|
|
109
|
-
);
|
|
110
|
-
|
|
111
|
-
console.log("✅ Tagged bucket with bootstrap markers");
|
|
112
|
-
} catch (error: any) {
|
|
113
|
-
if (error.name === "BucketAlreadyExists") {
|
|
114
|
-
throw new Error(
|
|
115
|
-
`Bucket name '${bucketName}' is already taken. Please try again to generate a new random suffix.`,
|
|
116
|
-
);
|
|
117
|
-
} else if (error.name === "BucketAlreadyOwnedByYou") {
|
|
118
|
-
console.log(`✅ Bucket ${bucketName} already exists and is owned by you`);
|
|
119
|
-
|
|
120
|
-
// Still add tags if they're missing
|
|
121
|
-
try {
|
|
122
|
-
await s3Client.send(
|
|
123
|
-
new PutBucketTaggingCommand({
|
|
124
|
-
Bucket: bucketName,
|
|
125
|
-
Tagging: {
|
|
126
|
-
TagSet: [
|
|
127
|
-
{
|
|
128
|
-
Key: BOOTSTRAP_TAG_KEY,
|
|
129
|
-
Value: BOOTSTRAP_TAG_VALUE,
|
|
130
|
-
},
|
|
131
|
-
{
|
|
132
|
-
Key: "Purpose",
|
|
133
|
-
Value: "Alchemy state storage",
|
|
134
|
-
},
|
|
135
|
-
{
|
|
136
|
-
Key: "CreatedBy",
|
|
137
|
-
Value: "alchemy-cli",
|
|
138
|
-
},
|
|
139
|
-
],
|
|
140
|
-
},
|
|
141
|
-
}),
|
|
142
|
-
);
|
|
143
|
-
console.log("✅ Added bootstrap tags to existing bucket");
|
|
144
|
-
} catch (tagError: any) {
|
|
145
|
-
throw new Error(
|
|
146
|
-
`Failed to tag existing bucket '${bucketName}': ${tagError.message}`,
|
|
147
|
-
);
|
|
148
|
-
}
|
|
149
|
-
} else {
|
|
150
|
-
throw error;
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
/**
|
|
156
|
-
* Get the default AWS region from the current profile/configuration
|
|
157
|
-
*/
|
|
158
|
-
async function getDefaultRegion(): Promise<string> {
|
|
159
|
-
try {
|
|
160
|
-
const regionProvider = loadConfig({
|
|
161
|
-
environmentVariableSelector: (env) =>
|
|
162
|
-
env.AWS_REGION || env.AWS_DEFAULT_REGION,
|
|
163
|
-
configFileSelector: (profile) => profile.region,
|
|
164
|
-
default: "us-east-1",
|
|
165
|
-
});
|
|
166
|
-
|
|
167
|
-
return await regionProvider();
|
|
168
|
-
} catch (_error) {
|
|
169
|
-
return "us-east-1"; // Default fallback
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
/**
|
|
174
|
-
* Bootstrap S3 bucket for Alchemy state storage
|
|
175
|
-
*/
|
|
176
|
-
export async function bootstrapS3(options: BootstrapS3Options): Promise<void> {
|
|
177
|
-
if (options.help) {
|
|
178
|
-
console.log(`
|
|
179
|
-
Usage: alchemy bootstrap s3 [options]
|
|
180
|
-
|
|
181
|
-
Create an S3 bucket for Alchemy state storage with proper tagging.
|
|
182
|
-
|
|
183
|
-
Options:
|
|
184
|
-
--region AWS region (defaults to AWS profile default: us-east-1)
|
|
185
|
-
--prefix S3 bucket name prefix (default: alchemy-state)
|
|
186
|
-
--help Show this help message
|
|
187
|
-
|
|
188
|
-
Examples:
|
|
189
|
-
alchemy bootstrap s3 # Use defaults
|
|
190
|
-
alchemy bootstrap s3 --region us-west-2 # Specify region
|
|
191
|
-
alchemy bootstrap s3 --prefix my-app-state # Custom prefix
|
|
192
|
-
alchemy bootstrap s3 --region eu-west-1 --prefix app # Both options
|
|
193
|
-
|
|
194
|
-
The created bucket will be tagged with 'alchemy:bootstrap=s3-state-store' to
|
|
195
|
-
identify it for future bootstrap operations and avoid creating duplicates.
|
|
196
|
-
`);
|
|
197
|
-
return;
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
const prefix = options.prefix || "alchemy-state";
|
|
201
|
-
const region = options.region || (await getDefaultRegion());
|
|
202
|
-
|
|
203
|
-
console.log("🚀 Bootstrapping S3 state storage...");
|
|
204
|
-
console.log(` Region: ${region}`);
|
|
205
|
-
console.log(` Prefix: ${prefix}`);
|
|
206
|
-
|
|
207
|
-
// Initialize S3 client
|
|
208
|
-
const s3Client = new S3Client({
|
|
209
|
-
region,
|
|
210
|
-
});
|
|
211
|
-
|
|
212
|
-
try {
|
|
213
|
-
// Check for existing bootstrap bucket
|
|
214
|
-
const existingBucket = await findExistingBootstrapBucket(region, prefix);
|
|
215
|
-
|
|
216
|
-
if (existingBucket) {
|
|
217
|
-
console.log(`✅ Found existing bootstrap bucket: ${existingBucket}`);
|
|
218
|
-
console.log("\n📝 To use this bucket in your alchemy.run.ts file:\n");
|
|
219
|
-
console.log(`import { S3StateStore } from "alchemy/aws";`);
|
|
220
|
-
console.log("\nconst stateStore = new S3StateStore(scope, {");
|
|
221
|
-
console.log(` bucketName: "${existingBucket}",`);
|
|
222
|
-
console.log(` region: "${region}",`);
|
|
223
|
-
console.log("});\n");
|
|
224
|
-
return;
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
// Generate a new bucket name with random suffix
|
|
228
|
-
const bucketName = `${prefix}-${generateRandomSuffix()}`;
|
|
229
|
-
console.log(`📦 Creating new bucket: ${bucketName}`);
|
|
230
|
-
|
|
231
|
-
// Create the bucket
|
|
232
|
-
await createBootstrapBucket(s3Client, bucketName);
|
|
233
|
-
|
|
234
|
-
console.log("\n🎉 Bootstrap complete!");
|
|
235
|
-
console.log("\n📝 To use this bucket in your alchemy.run.ts file:\n");
|
|
236
|
-
console.log(`import { S3StateStore } from "alchemy/aws";`);
|
|
237
|
-
console.log("\nconst stateStore = new S3StateStore(scope, {");
|
|
238
|
-
console.log(` bucketName: "${bucketName}",`);
|
|
239
|
-
console.log(` region: "${region}",`);
|
|
240
|
-
console.log("});\n");
|
|
241
|
-
} catch (error: any) {
|
|
242
|
-
console.error(`❌ Failed to bootstrap S3: ${error.message}`);
|
|
243
|
-
|
|
244
|
-
if (error.message?.includes("credentials")) {
|
|
245
|
-
console.error("\n💡 Make sure your AWS credentials are configured:");
|
|
246
|
-
console.error(` - Run 'aws configure' to set up credentials`);
|
|
247
|
-
console.error(
|
|
248
|
-
" - Or set AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY environment variables",
|
|
249
|
-
);
|
|
250
|
-
console.error(" - Or use IAM roles if running on EC2/Lambda");
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
process.exit(1);
|
|
254
|
-
}
|
|
255
|
-
}
|
package/lib/ai/ark.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { type Tool as AITool, type Schema, type ToolExecutionOptions } from "ai";
|
|
2
|
-
import { type JsonSchema, type type } from "arktype";
|
|
3
|
-
export declare namespace ark {
|
|
4
|
-
function schema<T>(type: JsonSchema): Schema<T>;
|
|
5
|
-
interface Tool<Input extends type, Output> extends Omit<AITool<Schema<type.infer<Input>>>, "parameters" | "execute"> {
|
|
6
|
-
description?: string;
|
|
7
|
-
parameters: Input;
|
|
8
|
-
execute: (input: type.infer<Input>, options: ToolExecutionOptions) => Promise<Output>;
|
|
9
|
-
}
|
|
10
|
-
function tool<Input extends type, Output>(tool: Tool<Input, Output>): AITool<Schema<type.infer<Input>>, Output>;
|
|
11
|
-
}
|
|
12
|
-
//# sourceMappingURL=ark.d.ts.map
|
package/lib/ai/ark.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ark.d.ts","sourceRoot":"","sources":["../../src/ai/ark.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,IAAI,IAAI,MAAM,EACnB,KAAK,MAAM,EACX,KAAK,oBAAoB,EAG1B,MAAM,IAAI,CAAC;AACZ,OAAO,EAAa,KAAK,UAAU,EAAE,KAAK,IAAI,EAAE,MAAM,SAAS,CAAC;AAEhE,yBAAiB,GAAG,CAAC;IACnB,SAAgB,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAyFvD,UAAiB,IAAI,CAAC,KAAK,SAAS,IAAI,EAAE,MAAM,CAC9C,SAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;QACzE,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,KAAK,CAAC;QAClB,OAAO,EAAE,CACP,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EACxB,OAAO,EAAE,oBAAoB,KAC1B,OAAO,CAAC,MAAM,CAAC,CAAC;KACtB;IAED,SAAgB,IAAI,CAAC,KAAK,SAAS,IAAI,EAAE,MAAM,EAC7C,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,GACxB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAK3C;CACF"}
|
package/lib/ai/ark.js
DELETED
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import { tool as aitool, jsonSchema, } from "ai";
|
|
2
|
-
import { ArkErrors } from "arktype";
|
|
3
|
-
export var ark;
|
|
4
|
-
(function (ark) {
|
|
5
|
-
function schema(type) {
|
|
6
|
-
const jsonSchemaObj = type.toJsonSchema();
|
|
7
|
-
const processedSchema = processSchema(jsonSchemaObj);
|
|
8
|
-
return jsonSchema(processedSchema, {
|
|
9
|
-
validate: (value) => {
|
|
10
|
-
const out = type(value);
|
|
11
|
-
if (out instanceof ArkErrors) {
|
|
12
|
-
return {
|
|
13
|
-
success: false,
|
|
14
|
-
error: new Error(out.summary),
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
return {
|
|
18
|
-
success: true,
|
|
19
|
-
value: out,
|
|
20
|
-
};
|
|
21
|
-
},
|
|
22
|
-
});
|
|
23
|
-
}
|
|
24
|
-
ark.schema = schema;
|
|
25
|
-
/**
|
|
26
|
-
* Recursively processes a JSON schema and sets additionalProperties: false
|
|
27
|
-
* for any object types.
|
|
28
|
-
*
|
|
29
|
-
* Structured Outputs requires additionalProperties: false
|
|
30
|
-
*/
|
|
31
|
-
function processSchema(schema) {
|
|
32
|
-
if (!schema || typeof schema !== "object")
|
|
33
|
-
return schema;
|
|
34
|
-
// Create a copy to avoid mutating the original
|
|
35
|
-
const result = { ...schema };
|
|
36
|
-
// Convert anyOf with all const values to enum
|
|
37
|
-
if (result.anyOf && Array.isArray(result.anyOf)) {
|
|
38
|
-
const allConst = result.anyOf.every((item) => item && typeof item === "object" && "const" in item);
|
|
39
|
-
if (allConst) {
|
|
40
|
-
// Extract all const values
|
|
41
|
-
const enumValues = result.anyOf.map((item) => item.const);
|
|
42
|
-
// Determine the type based on the first const value
|
|
43
|
-
// Assuming all const values are of the same type
|
|
44
|
-
const firstType = typeof enumValues[0];
|
|
45
|
-
// Replace anyOf with enum
|
|
46
|
-
delete result.anyOf;
|
|
47
|
-
result.type = firstType;
|
|
48
|
-
result.enum = enumValues;
|
|
49
|
-
}
|
|
50
|
-
else {
|
|
51
|
-
// Process each item in anyOf
|
|
52
|
-
result.anyOf = result.anyOf.map(processSchema);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
// If this is an object type, set additionalProperties: false
|
|
56
|
-
if (result.type === "object") {
|
|
57
|
-
result.additionalProperties = false;
|
|
58
|
-
result.properties ??= {};
|
|
59
|
-
}
|
|
60
|
-
// Process properties of objects
|
|
61
|
-
if (result.properties && typeof result.properties === "object") {
|
|
62
|
-
result.properties = Object.fromEntries(Object.entries(result.properties).map(([key, value]) => [
|
|
63
|
-
key,
|
|
64
|
-
processSchema(value),
|
|
65
|
-
]));
|
|
66
|
-
}
|
|
67
|
-
// Process items in arrays
|
|
68
|
-
if (result.items) {
|
|
69
|
-
result.items = processSchema(result.items);
|
|
70
|
-
}
|
|
71
|
-
// Process allOf, oneOf
|
|
72
|
-
for (const key of ["allOf", "oneOf"]) {
|
|
73
|
-
if (Array.isArray(result[key])) {
|
|
74
|
-
result[key] = result[key].map(processSchema);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
return result;
|
|
78
|
-
}
|
|
79
|
-
function tool(tool) {
|
|
80
|
-
return aitool({
|
|
81
|
-
...tool,
|
|
82
|
-
parameters: ark.schema(tool.parameters),
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
ark.tool = tool;
|
|
86
|
-
})(ark || (ark = {}));
|
|
87
|
-
//# sourceMappingURL=ark.js.map
|
package/lib/ai/ark.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ark.js","sourceRoot":"","sources":["../../src/ai/ark.ts"],"names":[],"mappings":"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"}
|
package/lib/ai/astro-file.d.ts
DELETED
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
import prettier from "prettier";
|
|
2
|
-
import type { Context } from "../context.ts";
|
|
3
|
-
import { Resource } from "../resource.ts";
|
|
4
|
-
import type { Secret } from "../secret.ts";
|
|
5
|
-
import { type ModelConfig } from "./client.ts";
|
|
6
|
-
/**
|
|
7
|
-
* Properties for creating or updating an AstroFile
|
|
8
|
-
*/
|
|
9
|
-
export interface AstroFileProps {
|
|
10
|
-
/**
|
|
11
|
-
* Path to the Astro file
|
|
12
|
-
*/
|
|
13
|
-
path: string;
|
|
14
|
-
/**
|
|
15
|
-
* Base URL for the OpenAI API
|
|
16
|
-
* @default 'https://api.openai.com/v1'
|
|
17
|
-
*/
|
|
18
|
-
baseURL?: string;
|
|
19
|
-
/**
|
|
20
|
-
* Prompt for generating content
|
|
21
|
-
* Use alchemy template literals to include file context:
|
|
22
|
-
* @example
|
|
23
|
-
* prompt: await alchemy`
|
|
24
|
-
* Generate an Astro component using:
|
|
25
|
-
* ${alchemy.file("src/types.ts")}
|
|
26
|
-
* `
|
|
27
|
-
*/
|
|
28
|
-
prompt: string;
|
|
29
|
-
/**
|
|
30
|
-
* System prompt for the model
|
|
31
|
-
* This is used to provide instructions to the model about how to format the response
|
|
32
|
-
* The default system prompt instructs the model to return Astro code inside ```astro fences
|
|
33
|
-
* @default "You are an Astro component generator. Create Astro components based on the user's requirements. Your response MUST include only Astro code inside ```astro fences. Do not include any other text, explanations, or multiple code blocks."
|
|
34
|
-
*/
|
|
35
|
-
system?: string;
|
|
36
|
-
/**
|
|
37
|
-
* OpenAI API key to use for generating content
|
|
38
|
-
* If not provided, will use OPENAI_API_KEY environment variable
|
|
39
|
-
*/
|
|
40
|
-
apiKey?: Secret;
|
|
41
|
-
/**
|
|
42
|
-
* Model configuration
|
|
43
|
-
*/
|
|
44
|
-
model?: ModelConfig;
|
|
45
|
-
/**
|
|
46
|
-
* Temperature for controlling randomness in generation.
|
|
47
|
-
* Higher values (e.g., 0.8) make output more random,
|
|
48
|
-
* lower values (e.g., 0.2) make it more deterministic.
|
|
49
|
-
* @default 0.7
|
|
50
|
-
*/
|
|
51
|
-
temperature?: number;
|
|
52
|
-
/**
|
|
53
|
-
* Prettier configuration to use for formatting the Astro code
|
|
54
|
-
* If not provided, will use the default Prettier configuration
|
|
55
|
-
*/
|
|
56
|
-
prettierConfig?: prettier.Options;
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* An Astro file that can be created, updated, and deleted
|
|
60
|
-
*/
|
|
61
|
-
export interface AstroFile extends AstroFileProps, Resource<"ai::AstroFile"> {
|
|
62
|
-
/**
|
|
63
|
-
* Content of the Astro file
|
|
64
|
-
*/
|
|
65
|
-
content: string;
|
|
66
|
-
/**
|
|
67
|
-
* Time at which the file was created
|
|
68
|
-
*/
|
|
69
|
-
createdAt: number;
|
|
70
|
-
/**
|
|
71
|
-
* Time at which the file was last updated
|
|
72
|
-
*/
|
|
73
|
-
updatedAt: number;
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* Resource for generating Astro files using AI models.
|
|
77
|
-
* Extracts Astro code from between ```astro fences, validates the response,
|
|
78
|
-
* and formats the code with Prettier.
|
|
79
|
-
*
|
|
80
|
-
* @example
|
|
81
|
-
* // Create a simple Astro component
|
|
82
|
-
* const header = await AstroFile("header", {
|
|
83
|
-
* path: "./src/components/Header.astro",
|
|
84
|
-
* prompt: await alchemy`
|
|
85
|
-
* Generate an Astro header component with:
|
|
86
|
-
* - Site logo
|
|
87
|
-
* - Navigation menu with Home, About, Services, Contact links
|
|
88
|
-
* - Mobile responsive design
|
|
89
|
-
* - Dark/light mode toggle
|
|
90
|
-
* `,
|
|
91
|
-
* model: {
|
|
92
|
-
* id: "gpt-4o",
|
|
93
|
-
* provider: "openai"
|
|
94
|
-
* }
|
|
95
|
-
* });
|
|
96
|
-
*
|
|
97
|
-
* @example
|
|
98
|
-
* // Generate an Astro page with data fetching
|
|
99
|
-
* const blogPost = await AstroFile("blog-post", {
|
|
100
|
-
* path: "./src/pages/blog/[slug].astro",
|
|
101
|
-
* prompt: await alchemy`
|
|
102
|
-
* Create an Astro blog post page that:
|
|
103
|
-
* - Uses getStaticPaths to generate pages from a CMS
|
|
104
|
-
* - Renders markdown content
|
|
105
|
-
* - Includes author info, publication date, and related posts
|
|
106
|
-
* - Has social sharing buttons
|
|
107
|
-
*
|
|
108
|
-
* Use the following types:
|
|
109
|
-
* ${alchemy.file("src/types/Blog.ts")}
|
|
110
|
-
* `,
|
|
111
|
-
* temperature: 0.2,
|
|
112
|
-
* prettierConfig: {
|
|
113
|
-
* semi: false,
|
|
114
|
-
* singleQuote: true,
|
|
115
|
-
* printWidth: 120
|
|
116
|
-
* }
|
|
117
|
-
* });
|
|
118
|
-
*
|
|
119
|
-
* @example
|
|
120
|
-
* // Generate a layout with custom system prompt
|
|
121
|
-
* const mainLayout = await AstroFile("main-layout", {
|
|
122
|
-
* path: "./src/layouts/MainLayout.astro",
|
|
123
|
-
* prompt: await alchemy`
|
|
124
|
-
* Create the main layout for an Astro site that:
|
|
125
|
-
* - Includes common head metadata and SEO optimization
|
|
126
|
-
* - Has slots for page content, header, and footer
|
|
127
|
-
* - Imports and uses the Header and Footer components
|
|
128
|
-
* - Sets up viewport and responsive configurations
|
|
129
|
-
* `,
|
|
130
|
-
* system: "You are an expert Astro developer. Create a single Astro layout file inside ```astro fences with no additional text. Follow Astro best practices and include proper typing in the frontmatter section.",
|
|
131
|
-
* model: {
|
|
132
|
-
* id: "claude-3-opus-20240229",
|
|
133
|
-
* provider: "anthropic"
|
|
134
|
-
* }
|
|
135
|
-
* });
|
|
136
|
-
*/
|
|
137
|
-
export declare const AstroFile: (((this: any, id: string, props?: {}) => never) & (new (_: never) => never)) | ((this: Context<AstroFile>, _id: string, props: AstroFileProps) => Promise<AstroFile>);
|
|
138
|
-
//# sourceMappingURL=astro-file.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"astro-file.d.ts","sourceRoot":"","sources":["../../src/ai/astro-file.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAE,KAAK,WAAW,EAAe,MAAM,aAAa,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;;;;;;OAQG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,KAAK,CAAC,EAAE,WAAW,CAAC;IAEpB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,cAAc,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,SAAU,SAAQ,cAAc,EAAE,QAAQ,CAAC,eAAe,CAAC;IAC1E;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;CACnB;AAQD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6DG;AACH,eAAO,MAAM,SAAS,yFAGZ,OAAO,CAAC,SAAS,CAAC,OACnB,MAAM,SACJ,cAAc,KACpB,OAAO,CAAC,SAAS,CAAC,CA0EtB,CAAC"}
|
package/lib/ai/astro-file.js
DELETED
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
import { generateText } from "ai";
|
|
2
|
-
import prettier from "prettier";
|
|
3
|
-
import { StaticAstroFile } from "../fs/static-astro-file.js";
|
|
4
|
-
import { Resource } from "../resource.js";
|
|
5
|
-
import { logger } from "../util/logger.js";
|
|
6
|
-
import { createModel } from "./client.js";
|
|
7
|
-
/**
|
|
8
|
-
* Default system prompt for Astro file generation
|
|
9
|
-
*/
|
|
10
|
-
const DEFAULT_ASTRO_SYSTEM_PROMPT = "You are an Astro component generator. Create Astro components based on the user's requirements. Your response MUST include only Astro code inside ```astro fences. Do not include any other text, explanations, or multiple code blocks.";
|
|
11
|
-
/**
|
|
12
|
-
* Resource for generating Astro files using AI models.
|
|
13
|
-
* Extracts Astro code from between ```astro fences, validates the response,
|
|
14
|
-
* and formats the code with Prettier.
|
|
15
|
-
*
|
|
16
|
-
* @example
|
|
17
|
-
* // Create a simple Astro component
|
|
18
|
-
* const header = await AstroFile("header", {
|
|
19
|
-
* path: "./src/components/Header.astro",
|
|
20
|
-
* prompt: await alchemy`
|
|
21
|
-
* Generate an Astro header component with:
|
|
22
|
-
* - Site logo
|
|
23
|
-
* - Navigation menu with Home, About, Services, Contact links
|
|
24
|
-
* - Mobile responsive design
|
|
25
|
-
* - Dark/light mode toggle
|
|
26
|
-
* `,
|
|
27
|
-
* model: {
|
|
28
|
-
* id: "gpt-4o",
|
|
29
|
-
* provider: "openai"
|
|
30
|
-
* }
|
|
31
|
-
* });
|
|
32
|
-
*
|
|
33
|
-
* @example
|
|
34
|
-
* // Generate an Astro page with data fetching
|
|
35
|
-
* const blogPost = await AstroFile("blog-post", {
|
|
36
|
-
* path: "./src/pages/blog/[slug].astro",
|
|
37
|
-
* prompt: await alchemy`
|
|
38
|
-
* Create an Astro blog post page that:
|
|
39
|
-
* - Uses getStaticPaths to generate pages from a CMS
|
|
40
|
-
* - Renders markdown content
|
|
41
|
-
* - Includes author info, publication date, and related posts
|
|
42
|
-
* - Has social sharing buttons
|
|
43
|
-
*
|
|
44
|
-
* Use the following types:
|
|
45
|
-
* ${alchemy.file("src/types/Blog.ts")}
|
|
46
|
-
* `,
|
|
47
|
-
* temperature: 0.2,
|
|
48
|
-
* prettierConfig: {
|
|
49
|
-
* semi: false,
|
|
50
|
-
* singleQuote: true,
|
|
51
|
-
* printWidth: 120
|
|
52
|
-
* }
|
|
53
|
-
* });
|
|
54
|
-
*
|
|
55
|
-
* @example
|
|
56
|
-
* // Generate a layout with custom system prompt
|
|
57
|
-
* const mainLayout = await AstroFile("main-layout", {
|
|
58
|
-
* path: "./src/layouts/MainLayout.astro",
|
|
59
|
-
* prompt: await alchemy`
|
|
60
|
-
* Create the main layout for an Astro site that:
|
|
61
|
-
* - Includes common head metadata and SEO optimization
|
|
62
|
-
* - Has slots for page content, header, and footer
|
|
63
|
-
* - Imports and uses the Header and Footer components
|
|
64
|
-
* - Sets up viewport and responsive configurations
|
|
65
|
-
* `,
|
|
66
|
-
* system: "You are an expert Astro developer. Create a single Astro layout file inside ```astro fences with no additional text. Follow Astro best practices and include proper typing in the frontmatter section.",
|
|
67
|
-
* model: {
|
|
68
|
-
* id: "claude-3-opus-20240229",
|
|
69
|
-
* provider: "anthropic"
|
|
70
|
-
* }
|
|
71
|
-
* });
|
|
72
|
-
*/
|
|
73
|
-
export const AstroFile = Resource("ai::AstroFile", async function (_id, props) {
|
|
74
|
-
// Handle deletion phase
|
|
75
|
-
if (this.phase === "delete") {
|
|
76
|
-
return this.destroy();
|
|
77
|
-
}
|
|
78
|
-
// Use provided system prompt or default
|
|
79
|
-
const system = props.system || DEFAULT_ASTRO_SYSTEM_PROMPT;
|
|
80
|
-
// Generate initial content
|
|
81
|
-
const { text } = await generateText({
|
|
82
|
-
model: createModel(props),
|
|
83
|
-
prompt: props.prompt,
|
|
84
|
-
system,
|
|
85
|
-
providerOptions: props.model?.options,
|
|
86
|
-
...(props.temperature === undefined
|
|
87
|
-
? {}
|
|
88
|
-
: { temperature: props.temperature }),
|
|
89
|
-
});
|
|
90
|
-
// Extract and validate Astro code
|
|
91
|
-
let { code, error } = await extractAstroCode(text);
|
|
92
|
-
// Re-prompt if there are validation errors
|
|
93
|
-
if (error) {
|
|
94
|
-
const errorSystem = `${system}\n\nERROR: ${error}\n\nPlease try again and ensure your response contains exactly one Astro code block inside \`\`\`astro fences.`;
|
|
95
|
-
const { text: retryText } = await generateText({
|
|
96
|
-
model: createModel(props),
|
|
97
|
-
prompt: props.prompt,
|
|
98
|
-
system: errorSystem,
|
|
99
|
-
providerOptions: props.model?.options,
|
|
100
|
-
...(props.temperature === undefined
|
|
101
|
-
? {}
|
|
102
|
-
: { temperature: props.temperature }),
|
|
103
|
-
});
|
|
104
|
-
const retryResult = await extractAstroCode(retryText);
|
|
105
|
-
if (retryResult.error) {
|
|
106
|
-
throw new Error(`Failed to generate valid Astro code: ${retryResult.error}`);
|
|
107
|
-
}
|
|
108
|
-
code = retryResult.code;
|
|
109
|
-
}
|
|
110
|
-
// Format the code with Prettier
|
|
111
|
-
try {
|
|
112
|
-
// Set default parser to astro
|
|
113
|
-
const prettierOptions = {
|
|
114
|
-
parser: "astro",
|
|
115
|
-
...props.prettierConfig,
|
|
116
|
-
};
|
|
117
|
-
// Format the code
|
|
118
|
-
code = await prettier.format(code, prettierOptions);
|
|
119
|
-
}
|
|
120
|
-
catch (error) {
|
|
121
|
-
// If Prettier formatting fails, just use the unformatted code
|
|
122
|
-
logger.warn("Failed to format Astro code with Prettier:", error);
|
|
123
|
-
}
|
|
124
|
-
// Use StaticAstroFile to create/update the file
|
|
125
|
-
const file = await StaticAstroFile("file", props.path, code);
|
|
126
|
-
// Return the resource
|
|
127
|
-
return this({
|
|
128
|
-
...props,
|
|
129
|
-
content: file.content,
|
|
130
|
-
createdAt: Date.now(),
|
|
131
|
-
updatedAt: Date.now(),
|
|
132
|
-
});
|
|
133
|
-
});
|
|
134
|
-
/**
|
|
135
|
-
* Extracts Astro code from between ```astro fences
|
|
136
|
-
* Validates that exactly one Astro code block exists
|
|
137
|
-
*
|
|
138
|
-
* @param text The text to extract Astro code from
|
|
139
|
-
* @returns The extracted Astro code or error message
|
|
140
|
-
*/
|
|
141
|
-
async function extractAstroCode(text) {
|
|
142
|
-
const astroCodeRegex = /```astro\s*([\s\S]*?)```/g;
|
|
143
|
-
const matches = Array.from(text.matchAll(astroCodeRegex));
|
|
144
|
-
if (matches.length === 0) {
|
|
145
|
-
return {
|
|
146
|
-
code: "",
|
|
147
|
-
error: "No Astro code block found in the response. Please include your code within ```astro fences.",
|
|
148
|
-
};
|
|
149
|
-
}
|
|
150
|
-
if (matches.length > 1) {
|
|
151
|
-
return {
|
|
152
|
-
code: "",
|
|
153
|
-
error: "Multiple Astro code blocks found in the response. Please provide exactly one code block within ```astro fences.",
|
|
154
|
-
};
|
|
155
|
-
}
|
|
156
|
-
return { code: matches[0][1].trim() };
|
|
157
|
-
}
|
|
158
|
-
//# sourceMappingURL=astro-file.js.map
|
package/lib/ai/astro-file.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"astro-file.js","sourceRoot":"","sources":["../../src/ai/astro-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAoB,WAAW,EAAE,MAAM,aAAa,CAAC;AAkF5D;;GAEG;AACH,MAAM,2BAA2B,GAC/B,0OAA0O,CAAC;AAE7O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6DG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,QAAQ,CAC/B,eAAe,EACf,KAAK,WAEH,GAAW,EACX,KAAqB;IAErB,wBAAwB;IACxB,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC;IAED,wCAAwC;IACxC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,2BAA2B,CAAC;IAE3D,2BAA2B;IAC3B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,YAAY,CAAC;QAClC,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC;QACzB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,MAAM;QACN,eAAe,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO;QACrC,GAAG,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS;YACjC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC;KACxC,CAAC,CAAC;IAEH,kCAAkC;IAClC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAEnD,2CAA2C;IAC3C,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,WAAW,GAAG,GAAG,MAAM,cAAc,KAAK,gHAAgH,CAAC;QAEjK,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,MAAM,YAAY,CAAC;YAC7C,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC;YACzB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,MAAM,EAAE,WAAW;YACnB,eAAe,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO;YACrC,GAAG,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS;gBACjC,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC;SACxC,CAAC,CAAC;QAEH,MAAM,WAAW,GAAG,MAAM,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAEtD,IAAI,WAAW,CAAC,KAAK,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CACb,wCAAwC,WAAW,CAAC,KAAK,EAAE,CAC5D,CAAC;QACJ,CAAC;QAED,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC;IAC1B,CAAC;IAED,gCAAgC;IAChC,IAAI,CAAC;QACH,8BAA8B;QAC9B,MAAM,eAAe,GAAqB;YACxC,MAAM,EAAE,OAAO;YACf,GAAG,KAAK,CAAC,cAAc;SACxB,CAAC;QAEF,kBAAkB;QAClB,IAAI,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IACtD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,8DAA8D;QAC9D,MAAM,CAAC,IAAI,CAAC,4CAA4C,EAAE,KAAK,CAAC,CAAC;IACnE,CAAC;IAED,gDAAgD;IAChD,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAE7D,sBAAsB;IACtB,OAAO,IAAI,CAAC;QACV,GAAG,KAAK;QACR,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACtB,CAAC,CAAC;AACL,CAAC,CACF,CAAC;AAEF;;;;;;GAMG;AACH,KAAK,UAAU,gBAAgB,CAC7B,IAAY;IAEZ,MAAM,cAAc,GAAG,2BAA2B,CAAC;IACnD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;IAE1D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO;YACL,IAAI,EAAE,EAAE;YACR,KAAK,EACH,6FAA6F;SAChG,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO;YACL,IAAI,EAAE,EAAE;YACR,KAAK,EACH,iHAAiH;SACpH,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;AACxC,CAAC"}
|