alchemy 0.62.3 → 0.63.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/alchemy.js +1516 -1202
- package/bin/commands/deploy.ts +2 -0
- package/bin/commands/dev.ts +2 -0
- package/bin/services/execute-alchemy.ts +11 -0
- package/bin/services/template-manager.ts +2 -0
- package/bin/types.ts +2 -1
- package/lib/alchemy.d.ts +6 -22
- package/lib/alchemy.d.ts.map +1 -1
- package/lib/alchemy.js +65 -169
- package/lib/alchemy.js.map +1 -1
- package/lib/apply.d.ts +0 -2
- package/lib/apply.d.ts.map +1 -1
- package/lib/apply.js +2 -16
- package/lib/apply.js.map +1 -1
- package/lib/aws/account-id.d.ts.map +1 -1
- package/lib/aws/account-id.js +3 -2
- package/lib/aws/account-id.js.map +1 -1
- package/lib/aws/bucket.d.ts +8 -2
- package/lib/aws/bucket.d.ts.map +1 -1
- package/lib/aws/bucket.js +21 -14
- package/lib/aws/bucket.js.map +1 -1
- package/lib/aws/ec2/security-group.d.ts +8 -2
- package/lib/aws/ec2/security-group.d.ts.map +1 -1
- package/lib/aws/ec2/security-group.js +7 -2
- package/lib/aws/ec2/security-group.js.map +1 -1
- package/lib/aws/function.d.ts +9 -3
- package/lib/aws/function.d.ts.map +1 -1
- package/lib/aws/function.js +35 -26
- package/lib/aws/function.js.map +1 -1
- package/lib/aws/policy-attachment.d.ts.map +1 -1
- package/lib/aws/policy-attachment.js +2 -1
- package/lib/aws/policy-attachment.js.map +1 -1
- package/lib/aws/policy.d.ts +8 -2
- package/lib/aws/policy.d.ts.map +1 -1
- package/lib/aws/policy.js +13 -4
- package/lib/aws/policy.js.map +1 -1
- package/lib/aws/queue.d.ts +8 -2
- package/lib/aws/queue.d.ts.map +1 -1
- package/lib/aws/queue.js +22 -14
- package/lib/aws/queue.js.map +1 -1
- package/lib/aws/role.d.ts +8 -2
- package/lib/aws/role.d.ts.map +1 -1
- package/lib/aws/role.js +10 -3
- package/lib/aws/role.js.map +1 -1
- package/lib/aws/ses.d.ts +1 -1
- package/lib/aws/ses.d.ts.map +1 -1
- package/lib/aws/ses.js +2 -1
- package/lib/aws/ses.js.map +1 -1
- package/lib/aws/ssm-parameter.d.ts +8 -2
- package/lib/aws/ssm-parameter.d.ts.map +1 -1
- package/lib/aws/ssm-parameter.js +15 -10
- package/lib/aws/ssm-parameter.js.map +1 -1
- package/lib/aws/table.d.ts +8 -2
- package/lib/aws/table.d.ts.map +1 -1
- package/lib/aws/table.js +17 -9
- package/lib/aws/table.js.map +1 -1
- package/lib/cloudflare/account-api-token.d.ts +2 -2
- package/lib/cloudflare/account-api-token.d.ts.map +1 -1
- package/lib/cloudflare/account-api-token.js +7 -6
- package/lib/cloudflare/account-api-token.js.map +1 -1
- package/lib/cloudflare/ai-gateway.d.ts +9 -4
- package/lib/cloudflare/ai-gateway.d.ts.map +1 -1
- package/lib/cloudflare/ai-gateway.js +20 -24
- package/lib/cloudflare/ai-gateway.js.map +1 -1
- package/lib/cloudflare/api-schema.d.ts +2 -2
- package/lib/cloudflare/api-schema.d.ts.map +1 -1
- package/lib/cloudflare/api-schema.js +6 -2
- package/lib/cloudflare/api-schema.js.map +1 -1
- package/lib/cloudflare/api-shield.d.ts +5 -1
- package/lib/cloudflare/api-shield.d.ts.map +1 -1
- package/lib/cloudflare/api-shield.js +6 -1
- package/lib/cloudflare/api-shield.js.map +1 -1
- package/lib/cloudflare/assets.d.ts +1 -1
- package/lib/cloudflare/assets.d.ts.map +1 -1
- package/lib/cloudflare/astro/astro.d.ts.map +1 -1
- package/lib/cloudflare/astro/astro.js +3 -1
- package/lib/cloudflare/astro/astro.js.map +1 -1
- package/lib/cloudflare/astro/plugin.d.ts +2 -1
- package/lib/cloudflare/astro/plugin.d.ts.map +1 -1
- package/lib/cloudflare/astro/plugin.js.map +1 -1
- package/lib/cloudflare/bindings.d.ts +2 -2
- package/lib/cloudflare/bindings.d.ts.map +1 -1
- package/lib/cloudflare/bound.d.ts +1 -1
- package/lib/cloudflare/bound.d.ts.map +1 -1
- package/lib/cloudflare/bucket.d.ts +120 -1
- package/lib/cloudflare/bucket.d.ts.map +1 -1
- package/lib/cloudflare/bucket.js +80 -2
- package/lib/cloudflare/bucket.js.map +1 -1
- package/lib/cloudflare/compatibility-date.gen.d.ts +1 -1
- package/lib/cloudflare/compatibility-date.gen.js +1 -1
- package/lib/cloudflare/container.d.ts +10 -4
- package/lib/cloudflare/container.d.ts.map +1 -1
- package/lib/cloudflare/container.js +12 -9
- package/lib/cloudflare/container.js.map +1 -1
- package/lib/cloudflare/custom-domain.js +2 -1
- package/lib/cloudflare/custom-domain.js.map +1 -1
- package/lib/cloudflare/d1-database.d.ts +1 -1
- package/lib/cloudflare/d1-database.d.ts.map +1 -1
- package/lib/cloudflare/d1-database.js +6 -2
- package/lib/cloudflare/d1-database.js.map +1 -1
- package/lib/cloudflare/dispatch-namespace.d.ts +2 -0
- package/lib/cloudflare/dispatch-namespace.d.ts.map +1 -1
- package/lib/cloudflare/dispatch-namespace.js +7 -5
- package/lib/cloudflare/dispatch-namespace.js.map +1 -1
- package/lib/cloudflare/hyperdrive.d.ts +7 -1
- package/lib/cloudflare/hyperdrive.d.ts.map +1 -1
- package/lib/cloudflare/hyperdrive.js +2 -1
- package/lib/cloudflare/hyperdrive.js.map +1 -1
- package/lib/cloudflare/kv-namespace.d.ts +3 -0
- package/lib/cloudflare/kv-namespace.d.ts.map +1 -1
- package/lib/cloudflare/kv-namespace.js +11 -2
- package/lib/cloudflare/kv-namespace.js.map +1 -1
- package/lib/cloudflare/miniflare/miniflare-worker-proxy.js +3 -1
- package/lib/cloudflare/miniflare/miniflare-worker-proxy.js.map +1 -1
- package/lib/cloudflare/miniflare/paths.d.ts +4 -0
- package/lib/cloudflare/miniflare/paths.d.ts.map +1 -1
- package/lib/cloudflare/miniflare/paths.js +11 -0
- package/lib/cloudflare/miniflare/paths.js.map +1 -1
- package/lib/cloudflare/pipeline.d.ts +14 -3
- package/lib/cloudflare/pipeline.d.ts.map +1 -1
- package/lib/cloudflare/pipeline.js +31 -2
- package/lib/cloudflare/pipeline.js.map +1 -1
- package/lib/cloudflare/queue-consumer.js +1 -1
- package/lib/cloudflare/queue-consumer.js.map +1 -1
- package/lib/cloudflare/queue.d.ts +4 -2
- package/lib/cloudflare/queue.d.ts.map +1 -1
- package/lib/cloudflare/queue.js +13 -9
- package/lib/cloudflare/queue.js.map +1 -1
- package/lib/cloudflare/react-router/plugin.d.ts +1 -1
- package/lib/cloudflare/react-router/plugin.d.ts.map +1 -1
- package/lib/cloudflare/react-router/react-router.d.ts.map +1 -1
- package/lib/cloudflare/react-router/react-router.js +32 -2
- package/lib/cloudflare/react-router/react-router.js.map +1 -1
- package/lib/cloudflare/redwood/plugin.d.ts +2 -1
- package/lib/cloudflare/redwood/plugin.d.ts.map +1 -1
- package/lib/cloudflare/redwood/plugin.js.map +1 -1
- package/lib/cloudflare/route.js +1 -1
- package/lib/cloudflare/route.js.map +1 -1
- package/lib/cloudflare/ruleset.d.ts +3 -1
- package/lib/cloudflare/ruleset.d.ts.map +1 -1
- package/lib/cloudflare/ruleset.js +3 -2
- package/lib/cloudflare/ruleset.js.map +1 -1
- package/lib/cloudflare/secret.d.ts +6 -23
- package/lib/cloudflare/secret.d.ts.map +1 -1
- package/lib/cloudflare/secret.js +8 -4
- package/lib/cloudflare/secret.js.map +1 -1
- package/lib/cloudflare/secrets-store.d.ts +1 -1
- package/lib/cloudflare/secrets-store.d.ts.map +1 -1
- package/lib/cloudflare/secrets-store.js +5 -2
- package/lib/cloudflare/secrets-store.js.map +1 -1
- package/lib/cloudflare/tunnel.d.ts +5 -1
- package/lib/cloudflare/tunnel.d.ts.map +1 -1
- package/lib/cloudflare/tunnel.js +5 -1
- package/lib/cloudflare/tunnel.js.map +1 -1
- package/lib/cloudflare/vectorize-index.d.ts +7 -1
- package/lib/cloudflare/vectorize-index.d.ts.map +1 -1
- package/lib/cloudflare/vectorize-index.js +5 -2
- package/lib/cloudflare/vectorize-index.js.map +1 -1
- package/lib/cloudflare/vite/plugin.d.ts +2 -1
- package/lib/cloudflare/vite/plugin.d.ts.map +1 -1
- package/lib/cloudflare/vite/plugin.js.map +1 -1
- package/lib/cloudflare/website.js +1 -1
- package/lib/cloudflare/website.js.map +1 -1
- package/lib/cloudflare/worker.d.ts +1 -1
- package/lib/cloudflare/worker.d.ts.map +1 -1
- package/lib/cloudflare/worker.js +12 -7
- package/lib/cloudflare/worker.js.map +1 -1
- package/lib/cloudflare/wrangler.json.d.ts +1 -1
- package/lib/cloudflare/wrangler.json.d.ts.map +1 -1
- package/lib/cloudflare/wrangler.json.js +5 -3
- package/lib/cloudflare/wrangler.json.js.map +1 -1
- package/lib/docker/container.d.ts +6 -0
- package/lib/docker/container.d.ts.map +1 -1
- package/lib/docker/container.js +5 -1
- package/lib/docker/container.js.map +1 -1
- package/lib/docker/network.d.ts +8 -2
- package/lib/docker/network.d.ts.map +1 -1
- package/lib/docker/network.js +7 -2
- package/lib/docker/network.js.map +1 -1
- package/lib/docker/volume.d.ts +8 -2
- package/lib/docker/volume.d.ts.map +1 -1
- package/lib/docker/volume.js +6 -4
- package/lib/docker/volume.js.map +1 -1
- package/lib/esbuild/bundle.d.ts +1 -1
- package/lib/fs/index.d.ts +0 -8
- package/lib/fs/index.d.ts.map +1 -1
- package/lib/fs/index.js +0 -8
- package/lib/fs/index.js.map +1 -1
- package/lib/github/client.d.ts +1 -1
- package/lib/github/client.d.ts.map +1 -1
- package/lib/github/client.js +2 -1
- package/lib/github/client.js.map +1 -1
- package/lib/github/repository-environment.d.ts +8 -2
- package/lib/github/repository-environment.d.ts.map +1 -1
- package/lib/github/repository-environment.js +16 -12
- package/lib/github/repository-environment.js.map +1 -1
- package/lib/neon/project.d.ts +7 -1
- package/lib/neon/project.d.ts.map +1 -1
- package/lib/neon/project.js +10 -6
- package/lib/neon/project.js.map +1 -1
- package/lib/planetscale/branch.d.ts +4 -2
- package/lib/planetscale/branch.d.ts.map +1 -1
- package/lib/planetscale/branch.js +18 -12
- package/lib/planetscale/branch.js.map +1 -1
- package/lib/planetscale/database.d.ts +8 -2
- package/lib/planetscale/database.d.ts.map +1 -1
- package/lib/planetscale/database.js +24 -16
- package/lib/planetscale/database.js.map +1 -1
- package/lib/planetscale/password.d.ts +8 -2
- package/lib/planetscale/password.d.ts.map +1 -1
- package/lib/planetscale/password.js +2 -2
- package/lib/planetscale/password.js.map +1 -1
- package/lib/resource.d.ts +0 -2
- package/lib/resource.d.ts.map +1 -1
- package/lib/resource.js +1 -9
- package/lib/resource.js.map +1 -1
- package/lib/scope.d.ts +9 -3
- package/lib/scope.d.ts.map +1 -1
- package/lib/scope.js +21 -34
- package/lib/scope.js.map +1 -1
- package/lib/sentry/client-key.d.ts +7 -1
- package/lib/sentry/client-key.d.ts.map +1 -1
- package/lib/sentry/client-key.js +45 -6
- package/lib/sentry/client-key.js.map +1 -1
- package/lib/sentry/project.d.ts +8 -2
- package/lib/sentry/project.d.ts.map +1 -1
- package/lib/sentry/project.js +35 -5
- package/lib/sentry/project.js.map +1 -1
- package/lib/sentry/team.d.ts +8 -2
- package/lib/sentry/team.d.ts.map +1 -1
- package/lib/sentry/team.js +36 -6
- package/lib/sentry/team.js.map +1 -1
- package/lib/serde.d.ts +0 -5
- package/lib/serde.d.ts.map +1 -1
- package/lib/serde.js +0 -28
- package/lib/serde.js.map +1 -1
- package/lib/state/d1-state-store.d.ts +1 -1
- package/lib/state/d1-state-store.d.ts.map +1 -1
- package/lib/state/d1-state-store.js +5 -5
- package/lib/state/d1-state-store.js.map +1 -1
- package/lib/state/sqlite-state-store.d.ts.map +1 -1
- package/lib/state/sqlite-state-store.js +7 -11
- package/lib/state/sqlite-state-store.js.map +1 -1
- package/lib/stripe/card.d.ts.map +1 -1
- package/lib/stripe/card.js +3 -2
- package/lib/stripe/card.js.map +1 -1
- package/lib/stripe/client.d.ts +2 -2
- package/lib/stripe/client.d.ts.map +1 -1
- package/lib/stripe/client.js +4 -3
- package/lib/stripe/client.js.map +1 -1
- package/lib/stripe/coupon.d.ts.map +1 -1
- package/lib/stripe/coupon.js +4 -3
- package/lib/stripe/coupon.js.map +1 -1
- package/lib/stripe/customer.js +2 -2
- package/lib/stripe/customer.js.map +1 -1
- package/lib/stripe/entitlements-feature.d.ts.map +1 -1
- package/lib/stripe/entitlements-feature.js +3 -2
- package/lib/stripe/entitlements-feature.js.map +1 -1
- package/lib/stripe/file.d.ts.map +1 -1
- package/lib/stripe/file.js +3 -2
- package/lib/stripe/file.js.map +1 -1
- package/lib/stripe/meter.js +2 -2
- package/lib/stripe/meter.js.map +1 -1
- package/lib/stripe/portal-configuration.d.ts.map +1 -1
- package/lib/stripe/portal-configuration.js +3 -2
- package/lib/stripe/portal-configuration.js.map +1 -1
- package/lib/stripe/price.d.ts.map +1 -1
- package/lib/stripe/price.js +3 -2
- package/lib/stripe/price.js.map +1 -1
- package/lib/stripe/product-feature.d.ts.map +1 -1
- package/lib/stripe/product-feature.js +3 -2
- package/lib/stripe/product-feature.js.map +1 -1
- package/lib/stripe/product.d.ts.map +1 -1
- package/lib/stripe/product.js +3 -2
- package/lib/stripe/product.js.map +1 -1
- package/lib/stripe/promotion-code.d.ts.map +1 -1
- package/lib/stripe/promotion-code.js +3 -2
- package/lib/stripe/promotion-code.js.map +1 -1
- package/lib/stripe/shipping-rate.d.ts.map +1 -1
- package/lib/stripe/shipping-rate.js +4 -3
- package/lib/stripe/shipping-rate.js.map +1 -1
- package/lib/stripe/tax-rate.d.ts.map +1 -1
- package/lib/stripe/tax-rate.js +3 -2
- package/lib/stripe/tax-rate.js.map +1 -1
- package/lib/stripe/webhook.d.ts.map +1 -1
- package/lib/stripe/webhook.js +4 -3
- package/lib/stripe/webhook.js.map +1 -1
- package/lib/test/vitest.d.ts.map +1 -1
- package/lib/test/vitest.js +1 -0
- package/lib/test/vitest.js.map +1 -1
- package/lib/upstash/redis.d.ts +8 -2
- package/lib/upstash/redis.d.ts.map +1 -1
- package/lib/upstash/redis.js +5 -4
- package/lib/upstash/redis.js.map +1 -1
- package/lib/util/ignore-matcher.d.ts.map +1 -1
- package/lib/util/ignore-matcher.js +3 -1
- package/lib/util/ignore-matcher.js.map +1 -1
- package/lib/util/peer.d.ts +10 -0
- package/lib/util/peer.d.ts.map +1 -0
- package/lib/util/peer.js +42 -0
- package/lib/util/peer.js.map +1 -0
- package/lib/vercel/project.d.ts +7 -1
- package/lib/vercel/project.d.ts.map +1 -1
- package/lib/vercel/project.js +28 -0
- package/lib/vercel/project.js.map +1 -1
- package/package.json +88 -74
- package/src/alchemy.ts +76 -222
- package/src/apply.ts +6 -19
- package/src/aws/account-id.ts +6 -3
- package/src/aws/bucket.ts +43 -32
- package/src/aws/ec2/security-group.ts +15 -3
- package/src/aws/function.ts +65 -39
- package/src/aws/policy-attachment.ts +10 -6
- package/src/aws/policy.ts +33 -15
- package/src/aws/queue.ts +50 -29
- package/src/aws/role.ts +37 -20
- package/src/aws/ses.ts +24 -20
- package/src/aws/ssm-parameter.ts +40 -20
- package/src/aws/table.ts +35 -17
- package/src/cloudflare/account-api-token.ts +9 -7
- package/src/cloudflare/ai-gateway.ts +37 -34
- package/src/cloudflare/api-schema.ts +33 -26
- package/src/cloudflare/api-shield.ts +15 -2
- package/src/cloudflare/astro/astro.ts +5 -1
- package/src/cloudflare/astro/plugin.ts +2 -1
- package/src/cloudflare/bindings.ts +2 -2
- package/src/cloudflare/bound.ts +1 -1
- package/src/cloudflare/bucket.ts +242 -3
- package/src/cloudflare/compatibility-date.gen.ts +1 -1
- package/src/cloudflare/container.ts +23 -12
- package/src/cloudflare/custom-domain.ts +2 -2
- package/src/cloudflare/d1-database.ts +10 -3
- package/src/cloudflare/dispatch-namespace.ts +10 -7
- package/src/cloudflare/hyperdrive.ts +13 -3
- package/src/cloudflare/kv-namespace.ts +25 -2
- package/src/cloudflare/miniflare/miniflare-worker-proxy.ts +3 -1
- package/src/cloudflare/miniflare/paths.ts +13 -0
- package/src/cloudflare/pipeline.ts +76 -28
- package/src/cloudflare/queue-consumer.ts +1 -1
- package/src/cloudflare/queue.ts +26 -14
- package/src/cloudflare/react-router/react-router.ts +28 -2
- package/src/cloudflare/redwood/plugin.ts +3 -2
- package/src/cloudflare/route.ts +1 -1
- package/src/cloudflare/ruleset.ts +7 -2
- package/src/cloudflare/secret.ts +20 -31
- package/src/cloudflare/secrets-store.ts +7 -3
- package/src/cloudflare/tunnel.ts +13 -2
- package/src/cloudflare/vectorize-index.ts +14 -3
- package/src/cloudflare/vite/plugin.ts +3 -2
- package/src/cloudflare/website.ts +1 -1
- package/src/cloudflare/worker.ts +35 -23
- package/src/cloudflare/wrangler.json.ts +7 -4
- package/src/docker/container.ts +13 -1
- package/src/docker/network.ts +18 -3
- package/src/docker/volume.ts +17 -6
- package/src/fs/index.ts +0 -8
- package/src/github/client.ts +6 -2
- package/src/github/repository-environment.ts +27 -13
- package/src/neon/project.ts +20 -6
- package/src/planetscale/branch.ts +24 -13
- package/src/planetscale/database.ts +38 -17
- package/src/planetscale/password.ts +10 -3
- package/src/resource.ts +1 -10
- package/src/scope.ts +29 -38
- package/src/sentry/client-key.ts +74 -6
- package/src/sentry/project.ts +59 -6
- package/src/sentry/team.ts +55 -7
- package/src/serde.ts +0 -44
- package/src/state/d1-state-store.ts +13 -6
- package/src/state/sqlite-state-store.ts +16 -17
- package/src/stripe/card.ts +5 -2
- package/src/stripe/client.ts +10 -3
- package/src/stripe/coupon.ts +4 -3
- package/src/stripe/customer.ts +2 -2
- package/src/stripe/entitlements-feature.ts +5 -2
- package/src/stripe/file.ts +3 -2
- package/src/stripe/meter.ts +2 -2
- package/src/stripe/portal-configuration.ts +5 -2
- package/src/stripe/price.ts +3 -2
- package/src/stripe/product-feature.ts +5 -2
- package/src/stripe/product.ts +3 -2
- package/src/stripe/promotion-code.ts +3 -2
- package/src/stripe/shipping-rate.ts +4 -3
- package/src/stripe/tax-rate.ts +3 -2
- package/src/stripe/webhook.ts +4 -3
- package/src/test/vitest.ts +1 -0
- package/src/upstash/redis.ts +15 -5
- package/src/util/ignore-matcher.ts +3 -1
- package/src/util/peer.ts +53 -0
- package/src/vercel/project.ts +46 -1
- package/templates/hono/README.md +19 -0
- package/templates/hono/_env +1 -0
- package/templates/hono/_env.example +1 -0
- package/templates/hono/_gitignore +34 -0
- package/templates/hono/alchemy.run.ts +22 -0
- package/templates/hono/package.json +18 -0
- package/templates/hono/src/index.ts +17 -0
- package/templates/hono/tsconfig.json +13 -0
- package/templates/hono/types/env.d.ts +16 -0
- package/templates/react-router/vite.config.ts +5 -3
- package/workers/cloudflare-state-store.js +69 -74
- package/workers/dofs-state-store.js +1 -1
- package/bin/bootstrap-s3.ts +0 -255
- package/lib/ai/ark.d.ts +0 -12
- package/lib/ai/ark.d.ts.map +0 -1
- package/lib/ai/ark.js +0 -87
- package/lib/ai/ark.js.map +0 -1
- package/lib/ai/astro-file.d.ts +0 -138
- package/lib/ai/astro-file.d.ts.map +0 -1
- package/lib/ai/astro-file.js +0 -158
- package/lib/ai/astro-file.js.map +0 -1
- package/lib/ai/client.d.ts +0 -51
- package/lib/ai/client.d.ts.map +0 -1
- package/lib/ai/client.js +0 -58
- package/lib/ai/client.js.map +0 -1
- package/lib/ai/css-file.d.ts +0 -132
- package/lib/ai/css-file.d.ts.map +0 -1
- package/lib/ai/css-file.js +0 -142
- package/lib/ai/css-file.js.map +0 -1
- package/lib/ai/data.d.ts +0 -152
- package/lib/ai/data.d.ts.map +0 -1
- package/lib/ai/data.js +0 -120
- package/lib/ai/data.js.map +0 -1
- package/lib/ai/document.d.ts +0 -208
- package/lib/ai/document.d.ts.map +0 -1
- package/lib/ai/document.js +0 -206
- package/lib/ai/document.js.map +0 -1
- package/lib/ai/html-file.d.ts +0 -129
- package/lib/ai/html-file.d.ts.map +0 -1
- package/lib/ai/html-file.js +0 -139
- package/lib/ai/html-file.js.map +0 -1
- package/lib/ai/index.d.ts +0 -11
- package/lib/ai/index.d.ts.map +0 -1
- package/lib/ai/index.js +0 -11
- package/lib/ai/index.js.map +0 -1
- package/lib/ai/json-file.d.ts +0 -161
- package/lib/ai/json-file.d.ts.map +0 -1
- package/lib/ai/json-file.js +0 -188
- package/lib/ai/json-file.js.map +0 -1
- package/lib/ai/typescript-file.d.ts +0 -140
- package/lib/ai/typescript-file.d.ts.map +0 -1
- package/lib/ai/typescript-file.js +0 -146
- package/lib/ai/typescript-file.js.map +0 -1
- package/lib/ai/vue-file.d.ts +0 -127
- package/lib/ai/vue-file.d.ts.map +0 -1
- package/lib/ai/vue-file.js +0 -137
- package/lib/ai/vue-file.js.map +0 -1
- package/lib/ai/yaml-file.d.ts +0 -170
- package/lib/ai/yaml-file.d.ts.map +0 -1
- package/lib/ai/yaml-file.js +0 -201
- package/lib/ai/yaml-file.js.map +0 -1
- package/lib/fs/static-astro-file.d.ts +0 -35
- package/lib/fs/static-astro-file.d.ts.map +0 -1
- package/lib/fs/static-astro-file.js +0 -40
- package/lib/fs/static-astro-file.js.map +0 -1
- package/lib/fs/static-css-file.d.ts +0 -25
- package/lib/fs/static-css-file.d.ts.map +0 -1
- package/lib/fs/static-css-file.js +0 -30
- package/lib/fs/static-css-file.js.map +0 -1
- package/lib/fs/static-html-file.d.ts +0 -32
- package/lib/fs/static-html-file.d.ts.map +0 -1
- package/lib/fs/static-html-file.js +0 -37
- package/lib/fs/static-html-file.js.map +0 -1
- package/lib/fs/static-json-file.d.ts +0 -18
- package/lib/fs/static-json-file.d.ts.map +0 -1
- package/lib/fs/static-json-file.js +0 -19
- package/lib/fs/static-json-file.js.map +0 -1
- package/lib/fs/static-text-file.d.ts +0 -13
- package/lib/fs/static-text-file.d.ts.map +0 -1
- package/lib/fs/static-text-file.js +0 -9
- package/lib/fs/static-text-file.js.map +0 -1
- package/lib/fs/static-typescript-file.d.ts +0 -20
- package/lib/fs/static-typescript-file.d.ts.map +0 -1
- package/lib/fs/static-typescript-file.js +0 -16
- package/lib/fs/static-typescript-file.js.map +0 -1
- package/lib/fs/static-vue-file.d.ts +0 -29
- package/lib/fs/static-vue-file.d.ts.map +0 -1
- package/lib/fs/static-vue-file.js +0 -34
- package/lib/fs/static-vue-file.js.map +0 -1
- package/lib/fs/static-yaml-file.d.ts +0 -23
- package/lib/fs/static-yaml-file.d.ts.map +0 -1
- package/lib/fs/static-yaml-file.js +0 -10
- package/lib/fs/static-yaml-file.js.map +0 -1
- package/lib/internal/docs/providers.d.ts +0 -34
- package/lib/internal/docs/providers.d.ts.map +0 -1
- package/lib/internal/docs/providers.js +0 -200
- package/lib/internal/docs/providers.js.map +0 -1
- package/lib/runtime/bind.d.ts +0 -25
- package/lib/runtime/bind.d.ts.map +0 -1
- package/lib/runtime/bind.js +0 -76
- package/lib/runtime/bind.js.map +0 -1
- package/lib/runtime/global.d.ts +0 -8
- package/lib/runtime/global.d.ts.map +0 -1
- package/lib/runtime/global.js +0 -3
- package/lib/runtime/global.js.map +0 -1
- package/lib/runtime/plugin.d.ts +0 -35
- package/lib/runtime/plugin.d.ts.map +0 -1
- package/lib/runtime/plugin.js +0 -134
- package/lib/runtime/plugin.js.map +0 -1
- package/lib/runtime/shims.d.ts +0 -6
- package/lib/runtime/shims.d.ts.map +0 -1
- package/lib/runtime/shims.js +0 -27
- package/lib/runtime/shims.js.map +0 -1
- package/lib/runtime/state.d.ts +0 -5
- package/lib/runtime/state.d.ts.map +0 -1
- package/lib/runtime/state.js +0 -4
- package/lib/runtime/state.js.map +0 -1
- package/lib/web/astro.d.ts +0 -148
- package/lib/web/astro.d.ts.map +0 -1
- package/lib/web/astro.js +0 -419
- package/lib/web/astro.js.map +0 -1
- package/lib/web/shadcn-component.d.ts +0 -30
- package/lib/web/shadcn-component.d.ts.map +0 -1
- package/lib/web/shadcn-component.js +0 -25
- package/lib/web/shadcn-component.js.map +0 -1
- package/lib/web/shadcn.d.ts +0 -98
- package/lib/web/shadcn.d.ts.map +0 -1
- package/lib/web/shadcn.js +0 -102
- package/lib/web/shadcn.js.map +0 -1
- package/lib/web/tailwind.d.ts +0 -65
- package/lib/web/tailwind.d.ts.map +0 -1
- package/lib/web/tailwind.js +0 -98
- package/lib/web/tailwind.js.map +0 -1
- package/lib/web/vite.d.ts +0 -96
- package/lib/web/vite.d.ts.map +0 -1
- package/lib/web/vite.js +0 -232
- package/lib/web/vite.js.map +0 -1
- package/lib/web/vitepress/config.d.ts +0 -12
- package/lib/web/vitepress/config.d.ts.map +0 -1
- package/lib/web/vitepress/config.js +0 -33
- package/lib/web/vitepress/config.js.map +0 -1
- package/lib/web/vitepress/custom-theme.d.ts +0 -174
- package/lib/web/vitepress/custom-theme.d.ts.map +0 -1
- package/lib/web/vitepress/custom-theme.js +0 -337
- package/lib/web/vitepress/custom-theme.js.map +0 -1
- package/lib/web/vitepress/dependencies.d.ts +0 -13
- package/lib/web/vitepress/dependencies.d.ts.map +0 -1
- package/lib/web/vitepress/dependencies.js +0 -37
- package/lib/web/vitepress/dependencies.js.map +0 -1
- package/lib/web/vitepress/home-page.d.ts +0 -247
- package/lib/web/vitepress/home-page.d.ts.map +0 -1
- package/lib/web/vitepress/home-page.js +0 -146
- package/lib/web/vitepress/home-page.js.map +0 -1
- package/lib/web/vitepress/index.d.ts +0 -6
- package/lib/web/vitepress/index.d.ts.map +0 -1
- package/lib/web/vitepress/index.js +0 -6
- package/lib/web/vitepress/index.js.map +0 -1
- package/lib/web/vitepress/process-front-matter-files.d.ts +0 -19
- package/lib/web/vitepress/process-front-matter-files.d.ts.map +0 -1
- package/lib/web/vitepress/process-front-matter-files.js +0 -73
- package/lib/web/vitepress/process-front-matter-files.js.map +0 -1
- package/lib/web/vitepress/vitepress.d.ts +0 -75
- package/lib/web/vitepress/vitepress.d.ts.map +0 -1
- package/lib/web/vitepress/vitepress.js +0 -254
- package/lib/web/vitepress/vitepress.js.map +0 -1
- package/src/ai/ark.ts +0 -118
- package/src/ai/astro-file.ts +0 -270
- package/src/ai/client.ts +0 -117
- package/src/ai/css-file.ts +0 -247
- package/src/ai/data.ts +0 -221
- package/src/ai/document.ts +0 -367
- package/src/ai/html-file.ts +0 -244
- package/src/ai/index.ts +0 -10
- package/src/ai/json-file.ts +0 -325
- package/src/ai/typescript-file.ts +0 -259
- package/src/ai/vue-file.ts +0 -242
- package/src/ai/yaml-file.ts +0 -328
- package/src/fs/static-astro-file.ts +0 -45
- package/src/fs/static-css-file.ts +0 -35
- package/src/fs/static-html-file.ts +0 -42
- package/src/fs/static-json-file.ts +0 -38
- package/src/fs/static-text-file.ts +0 -23
- package/src/fs/static-typescript-file.ts +0 -37
- package/src/fs/static-vue-file.ts +0 -39
- package/src/fs/static-yaml-file.ts +0 -33
- package/src/internal/docs/providers.ts +0 -286
- package/src/runtime/bind.ts +0 -95
- package/src/runtime/global.ts +0 -10
- package/src/runtime/plugin.ts +0 -163
- package/src/runtime/shims.js +0 -34
- package/src/runtime/state.ts +0 -9
- package/src/web/astro.ts +0 -643
- package/src/web/shadcn-component.ts +0 -72
- package/src/web/shadcn.ts +0 -221
- package/src/web/tailwind.ts +0 -167
- package/src/web/vite.ts +0 -407
- package/src/web/vitepress/config.ts +0 -50
- package/src/web/vitepress/custom-theme.ts +0 -514
- package/src/web/vitepress/dependencies.ts +0 -69
- package/src/web/vitepress/home-page.ts +0 -378
- package/src/web/vitepress/index.ts +0 -5
- package/src/web/vitepress/process-front-matter-files.ts +0 -107
- package/src/web/vitepress/vitepress.ts +0 -372
- package/templates/sveltekit/bun.lock +0 -1099
|
@@ -1,514 +0,0 @@
|
|
|
1
|
-
import { type } from "arktype";
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
import type { ModelConfig } from "../../ai/client.ts";
|
|
4
|
-
import { CSSFile } from "../../ai/css-file.ts";
|
|
5
|
-
import { Data } from "../../ai/data.ts";
|
|
6
|
-
import { TypeScriptFile } from "../../ai/typescript-file.ts";
|
|
7
|
-
import { VueFile } from "../../ai/vue-file.ts";
|
|
8
|
-
import { alchemy } from "../../alchemy.ts";
|
|
9
|
-
import type { Context } from "../../context.ts";
|
|
10
|
-
import { Folder } from "../../fs/folder.ts";
|
|
11
|
-
import { Resource } from "../../resource.ts";
|
|
12
|
-
import type { Secret } from "../../secret.ts";
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Theme component props for customizing the layout
|
|
16
|
-
*/
|
|
17
|
-
export interface ThemeComponentProps {
|
|
18
|
-
/**
|
|
19
|
-
* Name of the component
|
|
20
|
-
*/
|
|
21
|
-
name: string;
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Description of what the component does
|
|
25
|
-
*/
|
|
26
|
-
description: string;
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Features or functionality to include in the component
|
|
30
|
-
*/
|
|
31
|
-
features?: string[];
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* Properties for creating or updating a VitePress custom theme
|
|
36
|
-
*/
|
|
37
|
-
export interface CustomThemeProps {
|
|
38
|
-
/**
|
|
39
|
-
* Output directory for the theme files
|
|
40
|
-
*/
|
|
41
|
-
outDir: string;
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Title of the theme
|
|
45
|
-
*/
|
|
46
|
-
title: string;
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* Description of the theme
|
|
50
|
-
*/
|
|
51
|
-
description: string;
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* Components to include in the theme
|
|
55
|
-
*/
|
|
56
|
-
components?: ThemeComponentProps[];
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* Whether to include dark mode support
|
|
60
|
-
* @default true
|
|
61
|
-
*/
|
|
62
|
-
darkMode?: boolean;
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* Custom CSS variables for theming
|
|
66
|
-
*/
|
|
67
|
-
customCssVars?: Record<string, string>;
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* Custom plugins to add to the theme
|
|
71
|
-
*/
|
|
72
|
-
plugins?: string[];
|
|
73
|
-
|
|
74
|
-
/**
|
|
75
|
-
* User prompt describing the design of the theme
|
|
76
|
-
*/
|
|
77
|
-
prompt: string;
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* Optional extension to the built-in system prompt
|
|
81
|
-
*/
|
|
82
|
-
systemPromptExtension?: string;
|
|
83
|
-
|
|
84
|
-
/**
|
|
85
|
-
* Base URL for the OpenAI API
|
|
86
|
-
* @default 'https://api.openai.com/v1'
|
|
87
|
-
*/
|
|
88
|
-
baseURL?: string;
|
|
89
|
-
|
|
90
|
-
/**
|
|
91
|
-
* OpenAI API key to use for generating content
|
|
92
|
-
* If not provided, will use OPENAI_API_KEY environment variable
|
|
93
|
-
*/
|
|
94
|
-
apiKey?: Secret;
|
|
95
|
-
|
|
96
|
-
/**
|
|
97
|
-
* Model configuration for the AI generator
|
|
98
|
-
*/
|
|
99
|
-
model?: ModelConfig;
|
|
100
|
-
|
|
101
|
-
/**
|
|
102
|
-
* Temperature for controlling randomness in generation
|
|
103
|
-
* @default 0.7
|
|
104
|
-
*/
|
|
105
|
-
temperature?: number;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
/**
|
|
109
|
-
* A generated file in the custom theme
|
|
110
|
-
*/
|
|
111
|
-
export interface ThemeFile {
|
|
112
|
-
/**
|
|
113
|
-
* Path to the file
|
|
114
|
-
*/
|
|
115
|
-
path: string;
|
|
116
|
-
|
|
117
|
-
/**
|
|
118
|
-
* Content of the file
|
|
119
|
-
*/
|
|
120
|
-
content: string;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
/**
|
|
124
|
-
* Output for the VitePress custom theme resource
|
|
125
|
-
*/
|
|
126
|
-
export interface CustomTheme
|
|
127
|
-
extends CustomThemeProps,
|
|
128
|
-
Resource<"vitepress::CustomTheme"> {
|
|
129
|
-
/**
|
|
130
|
-
* Path to the generated theme directory
|
|
131
|
-
*/
|
|
132
|
-
themePath: string;
|
|
133
|
-
|
|
134
|
-
/**
|
|
135
|
-
* List of generated files
|
|
136
|
-
*/
|
|
137
|
-
files: ThemeFile[];
|
|
138
|
-
|
|
139
|
-
/**
|
|
140
|
-
* Time at which the theme was created
|
|
141
|
-
*/
|
|
142
|
-
createdAt: number;
|
|
143
|
-
|
|
144
|
-
/**
|
|
145
|
-
* Time at which the theme was last updated
|
|
146
|
-
*/
|
|
147
|
-
updatedAt: number;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
/**
|
|
151
|
-
* Resource for generating a custom VitePress theme using AI.
|
|
152
|
-
*
|
|
153
|
-
* Generates the necessary theme files including:
|
|
154
|
-
* - Theme entry file (index.ts)
|
|
155
|
-
* - Layout component (Layout.vue)
|
|
156
|
-
* - Additional components based on configuration
|
|
157
|
-
* - Style sheets and utilities
|
|
158
|
-
*
|
|
159
|
-
* @example
|
|
160
|
-
* // Create a basic custom theme
|
|
161
|
-
* const theme = await CustomTheme("docs-theme", {
|
|
162
|
-
* outDir: "./.vitepress/theme",
|
|
163
|
-
* title: "My Custom Theme",
|
|
164
|
-
* description: "A clean, minimal theme for documentation",
|
|
165
|
-
* prompt: "Create a clean documentation theme with a sidebar and search"
|
|
166
|
-
* });
|
|
167
|
-
*
|
|
168
|
-
* @example
|
|
169
|
-
* // Create a theme with specific components
|
|
170
|
-
* const complexTheme = await CustomTheme("blog-theme", {
|
|
171
|
-
* outDir: "./.vitepress/theme",
|
|
172
|
-
* title: "Blog Theme",
|
|
173
|
-
* description: "A theme for technical blogs",
|
|
174
|
-
* components: [
|
|
175
|
-
* {
|
|
176
|
-
* name: "PostList",
|
|
177
|
-
* description: "Component that displays a list of blog posts with pagination",
|
|
178
|
-
* features: ["thumbnail images", "post dates", "categories", "excerpts"]
|
|
179
|
-
* },
|
|
180
|
-
* {
|
|
181
|
-
* name: "TableOfContents",
|
|
182
|
-
* description: "Component that displays the current page's table of contents",
|
|
183
|
-
* features: ["sticky positioning", "active link highlighting"]
|
|
184
|
-
* }
|
|
185
|
-
* ],
|
|
186
|
-
* darkMode: true,
|
|
187
|
-
* prompt: "Create a modern blog theme with post listings and detailed article pages"
|
|
188
|
-
* });
|
|
189
|
-
*
|
|
190
|
-
* @example
|
|
191
|
-
* // Create a theme with custom CSS variables
|
|
192
|
-
* const brandedTheme = await CustomTheme("branded-theme", {
|
|
193
|
-
* outDir: "./.vitepress/theme",
|
|
194
|
-
* title: "Branded Docs",
|
|
195
|
-
* description: "A themed documentation site with custom branding",
|
|
196
|
-
* customCssVars: {
|
|
197
|
-
* "--vp-c-brand": "#3a70b0",
|
|
198
|
-
* "--vp-c-brand-light": "#5785bc",
|
|
199
|
-
* "--vp-c-brand-lighter": "#79a1ce",
|
|
200
|
-
* "--vp-c-brand-dark": "#2c5989",
|
|
201
|
-
* "--vp-c-brand-darker": "#1e3d5c"
|
|
202
|
-
* },
|
|
203
|
-
* prompt: "Create a documentation theme with custom branding and color scheme"
|
|
204
|
-
* });
|
|
205
|
-
*/
|
|
206
|
-
export const CustomTheme = Resource(
|
|
207
|
-
"vitepress::CustomTheme",
|
|
208
|
-
async function (
|
|
209
|
-
this: Context<CustomTheme>,
|
|
210
|
-
id: string,
|
|
211
|
-
props: CustomThemeProps,
|
|
212
|
-
): Promise<CustomTheme> {
|
|
213
|
-
// Handle deletion
|
|
214
|
-
if (this.phase === "delete") {
|
|
215
|
-
// No need to actually delete files, as they're not critical infrastructure
|
|
216
|
-
// In a real implementation, you might want to clean up files
|
|
217
|
-
return this.destroy();
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
// Ensure the output directory exists
|
|
221
|
-
await Folder(props.outDir);
|
|
222
|
-
|
|
223
|
-
// Create components directory if it doesn't exist
|
|
224
|
-
await Folder(path.join(props.outDir, "components"));
|
|
225
|
-
|
|
226
|
-
// Build the system prompt with optional extension
|
|
227
|
-
const systemPrompt = `
|
|
228
|
-
You are creating a custom VitePress theme.
|
|
229
|
-
|
|
230
|
-
A VitePress custom theme consists of multiple files:
|
|
231
|
-
1. An entry file (index.ts or index.js) that exports the theme object
|
|
232
|
-
2. A Layout component (Layout.vue) that handles the overall page structure
|
|
233
|
-
3. Optional additional Vue components for specific functionality
|
|
234
|
-
4. Optional style files for theming and customization
|
|
235
|
-
|
|
236
|
-
The theme entry file must export an object with:
|
|
237
|
-
- Layout: The root layout component (required)
|
|
238
|
-
- enhanceApp: Function to enhance the Vue app (optional)
|
|
239
|
-
- extends: Another theme to extend (optional)
|
|
240
|
-
|
|
241
|
-
Follow these guidelines:
|
|
242
|
-
1. Use Vue 3 Composition API and <script setup> syntax
|
|
243
|
-
2. Ensure the theme is SSR-compatible
|
|
244
|
-
3. Use the useData() composable to access page and site data
|
|
245
|
-
4. Handle different page layouts (home, 404, regular pages)
|
|
246
|
-
5. Include proper TypeScript types
|
|
247
|
-
6. Use modern JavaScript/TypeScript features
|
|
248
|
-
7. Include clear comments explaining key functionality
|
|
249
|
-
8. Make components reusable and customizable
|
|
250
|
-
9. Include support for dark mode if requested
|
|
251
|
-
|
|
252
|
-
${props.systemPromptExtension || ""}
|
|
253
|
-
`;
|
|
254
|
-
|
|
255
|
-
// Generate the theme entry file (index.ts)
|
|
256
|
-
const indexFile = await TypeScriptFile(`${id}-index`, {
|
|
257
|
-
path: path.join(props.outDir, "index.ts"),
|
|
258
|
-
prompt: await alchemy`
|
|
259
|
-
Create a VitePress theme entry file (index.ts) for a theme named "${props.title}".
|
|
260
|
-
|
|
261
|
-
The theme should:
|
|
262
|
-
- Export a default theme object with the required properties
|
|
263
|
-
- Import the Layout component
|
|
264
|
-
- Include a proper enhanceApp function
|
|
265
|
-
- Include TypeScript types
|
|
266
|
-
- Have clear comments explaining the code
|
|
267
|
-
|
|
268
|
-
${props.description ? `Theme description: ${props.description}` : ""}
|
|
269
|
-
${props.plugins?.length ? `Include these plugins: ${props.plugins.join(", ")}` : ""}
|
|
270
|
-
|
|
271
|
-
The output should be a complete, well-structured TypeScript file.
|
|
272
|
-
`,
|
|
273
|
-
system: `${systemPrompt}
|
|
274
|
-
You are writing a TypeScript entry file for a VitePress theme.`,
|
|
275
|
-
baseURL: props.baseURL,
|
|
276
|
-
apiKey: props.apiKey,
|
|
277
|
-
model: props.model,
|
|
278
|
-
temperature: props.temperature,
|
|
279
|
-
});
|
|
280
|
-
|
|
281
|
-
// Generate the Layout component
|
|
282
|
-
const layoutFile = await VueFile(`${id}-layout`, {
|
|
283
|
-
path: path.join(props.outDir, "Layout.vue"),
|
|
284
|
-
prompt: await alchemy`
|
|
285
|
-
Create a Layout.vue component for a VitePress theme named "${props.title}".
|
|
286
|
-
|
|
287
|
-
The layout should:
|
|
288
|
-
- Use <script setup> with the Composition API
|
|
289
|
-
- Import and use the useData() composable
|
|
290
|
-
- Handle different page types (regular pages, home pages, 404 pages)
|
|
291
|
-
- Include a <Content /> component to render the page content
|
|
292
|
-
- Have a clean, modern design
|
|
293
|
-
- Include proper TypeScript types
|
|
294
|
-
- Use Vue's Teleport for elements like modals if needed
|
|
295
|
-
|
|
296
|
-
The layout should use modular components for different parts of the UI, such as:
|
|
297
|
-
- NavBar/Header component for navigation
|
|
298
|
-
- Sidebar component for documentation navigation
|
|
299
|
-
- Footer component
|
|
300
|
-
- Home page specific components (like hero sections)
|
|
301
|
-
- 404 page component
|
|
302
|
-
|
|
303
|
-
These components should be imported from the components directory.
|
|
304
|
-
|
|
305
|
-
${props.description ? `Theme description: ${props.description}` : ""}
|
|
306
|
-
${props.darkMode !== false ? "Include support for dark mode" : "Dark mode is not required"}
|
|
307
|
-
|
|
308
|
-
The layout should follow the user's requirements:
|
|
309
|
-
${props.prompt}
|
|
310
|
-
|
|
311
|
-
The output should be a complete, well-structured Vue component file.
|
|
312
|
-
`,
|
|
313
|
-
system: `${systemPrompt}
|
|
314
|
-
You are writing a Vue component for a VitePress theme Layout.
|
|
315
|
-
Import smaller components from the components directory using relative paths (e.g., import NavBar from './components/NavBar.vue').
|
|
316
|
-
Break down the layout into logical components like NavBar, Sidebar, Footer, etc., which will be generated separately.`,
|
|
317
|
-
baseURL: props.baseURL,
|
|
318
|
-
apiKey: props.apiKey,
|
|
319
|
-
model: props.model,
|
|
320
|
-
temperature: props.temperature,
|
|
321
|
-
});
|
|
322
|
-
|
|
323
|
-
// Extract component imports from the Layout.vue file
|
|
324
|
-
const componentImportsData = await Data(`${id}-component-imports`, {
|
|
325
|
-
schema: type({
|
|
326
|
-
components: type({
|
|
327
|
-
name: type("string").describe(
|
|
328
|
-
"Component name as used in the import statement (e.g., NavBar, Footer)",
|
|
329
|
-
),
|
|
330
|
-
path: type("string").describe(
|
|
331
|
-
"Import path as written in the import statement (e.g., './components/NavBar.vue')",
|
|
332
|
-
),
|
|
333
|
-
purpose: type("string").describe(
|
|
334
|
-
"A clear description of the component's purpose, functionality, and responsibilities in the layout",
|
|
335
|
-
),
|
|
336
|
-
}).array(),
|
|
337
|
-
}),
|
|
338
|
-
prompt: await alchemy`
|
|
339
|
-
Analyze the following Layout.vue file and extract information about all the component imports:
|
|
340
|
-
|
|
341
|
-
${layoutFile.content}
|
|
342
|
-
|
|
343
|
-
For each component import:
|
|
344
|
-
1. Extract the component name (e.g., NavBar)
|
|
345
|
-
2. Extract the import path (e.g., ./components/NavBar.vue)
|
|
346
|
-
3. Infer the purpose of the component based on its name and usage in the file
|
|
347
|
-
|
|
348
|
-
Return a structured list of all component imports found in the file.
|
|
349
|
-
Only include components that are imported from local files (not from VitePress or other libraries).
|
|
350
|
-
Focus on components that are likely Vue components (.vue files).
|
|
351
|
-
`,
|
|
352
|
-
system:
|
|
353
|
-
"You are a code analyzer tasked with extracting component imports from a Vue file. Be precise and thorough in identifying all local component imports.",
|
|
354
|
-
baseURL: props.baseURL,
|
|
355
|
-
apiKey: props.apiKey,
|
|
356
|
-
model: props.model,
|
|
357
|
-
temperature: props.temperature || 0.2, // Lower temperature for more deterministic extraction
|
|
358
|
-
});
|
|
359
|
-
|
|
360
|
-
// Generate the detected components
|
|
361
|
-
const autoComponentFiles = await Promise.all(
|
|
362
|
-
componentImportsData.object.components.map(async (component) => {
|
|
363
|
-
const componentName = component.name;
|
|
364
|
-
const componentPath = component.path;
|
|
365
|
-
const componentPurpose = component.purpose;
|
|
366
|
-
|
|
367
|
-
// Extract the relative path from the import
|
|
368
|
-
const relativePath = componentPath.startsWith("./")
|
|
369
|
-
? componentPath.slice(2) // Remove './'
|
|
370
|
-
: componentPath.startsWith("/")
|
|
371
|
-
? componentPath.slice(1) // Remove '/'
|
|
372
|
-
: componentPath;
|
|
373
|
-
|
|
374
|
-
// Compute the full file path
|
|
375
|
-
const fullPath = path.join(props.outDir, relativePath);
|
|
376
|
-
|
|
377
|
-
return VueFile(`${id}-component-${componentName}`, {
|
|
378
|
-
path: fullPath,
|
|
379
|
-
prompt: await alchemy`
|
|
380
|
-
Create a Vue component named "${componentName}" for a VitePress theme.
|
|
381
|
-
|
|
382
|
-
Component purpose: ${componentPurpose}
|
|
383
|
-
|
|
384
|
-
The component should:
|
|
385
|
-
- Use <script setup> with the Composition API
|
|
386
|
-
- Have a clean, focused design for its specific purpose
|
|
387
|
-
- Include proper TypeScript types
|
|
388
|
-
- Be reusable and customizable
|
|
389
|
-
- Include clear comments explaining key functionality
|
|
390
|
-
- Fit seamlessly with the overall theme design described below
|
|
391
|
-
|
|
392
|
-
This component will be used in the following layout context:
|
|
393
|
-
${layoutFile.content}
|
|
394
|
-
|
|
395
|
-
${props.description ? `Theme description: ${props.description}` : ""}
|
|
396
|
-
${props.darkMode !== false ? "Include support for dark mode" : "Dark mode is not required"}
|
|
397
|
-
|
|
398
|
-
The component should follow the user's theme requirements:
|
|
399
|
-
${props.prompt}
|
|
400
|
-
`,
|
|
401
|
-
system: `${systemPrompt}
|
|
402
|
-
You are writing a Vue component for a VitePress theme. This component (${componentName}) is intended to ${componentPurpose}.
|
|
403
|
-
Make sure it integrates well with the overall layout and theme style.`,
|
|
404
|
-
baseURL: props.baseURL,
|
|
405
|
-
apiKey: props.apiKey,
|
|
406
|
-
model: props.model,
|
|
407
|
-
temperature: props.temperature,
|
|
408
|
-
});
|
|
409
|
-
}),
|
|
410
|
-
);
|
|
411
|
-
|
|
412
|
-
// Generate user-specified components if provided
|
|
413
|
-
const userComponentFiles = await Promise.all(
|
|
414
|
-
(props.components || []).map(async (component) => {
|
|
415
|
-
return VueFile(`${id}-user-component-${component.name}`, {
|
|
416
|
-
path: path.join(props.outDir, "components", `${component.name}.vue`),
|
|
417
|
-
prompt: await alchemy`
|
|
418
|
-
Create a Vue component named "${component.name}" for a VitePress theme.
|
|
419
|
-
|
|
420
|
-
Component description: ${component.description}
|
|
421
|
-
|
|
422
|
-
The component should:
|
|
423
|
-
- Use <script setup> with the Composition API
|
|
424
|
-
- Have a clean, focused design for its specific purpose
|
|
425
|
-
- Include proper TypeScript types
|
|
426
|
-
- Be reusable and customizable
|
|
427
|
-
- Include clear comments
|
|
428
|
-
|
|
429
|
-
${
|
|
430
|
-
component.features?.length
|
|
431
|
-
? `Include these features:
|
|
432
|
-
${component.features.map((f) => `- ${f}`).join("\n")}`
|
|
433
|
-
: ""
|
|
434
|
-
}
|
|
435
|
-
|
|
436
|
-
Make sure the component integrates well with the overall theme.
|
|
437
|
-
|
|
438
|
-
The output should be a complete, well-structured Vue component file.
|
|
439
|
-
`,
|
|
440
|
-
system: `${systemPrompt}
|
|
441
|
-
You are writing a Vue component for a VitePress theme.`,
|
|
442
|
-
baseURL: props.baseURL,
|
|
443
|
-
apiKey: props.apiKey,
|
|
444
|
-
model: props.model,
|
|
445
|
-
temperature: props.temperature,
|
|
446
|
-
});
|
|
447
|
-
}),
|
|
448
|
-
);
|
|
449
|
-
|
|
450
|
-
// Generate styles file
|
|
451
|
-
const stylesFile = await CSSFile(`${id}-styles`, {
|
|
452
|
-
path: path.join(props.outDir, "styles.css"),
|
|
453
|
-
prompt: await alchemy`
|
|
454
|
-
Create a CSS styles file for a VitePress theme named "${props.title}".
|
|
455
|
-
|
|
456
|
-
The styles should:
|
|
457
|
-
- Define a cohesive set of styles for the theme
|
|
458
|
-
- Include CSS variables for customization
|
|
459
|
-
- Use modern CSS features
|
|
460
|
-
- Be well-organized with clear comments
|
|
461
|
-
${props.darkMode !== false ? "- Include dark mode variants using :root.dark selectors" : ""}
|
|
462
|
-
|
|
463
|
-
${props.description ? `Theme description: ${props.description}` : ""}
|
|
464
|
-
|
|
465
|
-
${
|
|
466
|
-
props.customCssVars
|
|
467
|
-
? `Include these custom CSS variables:
|
|
468
|
-
${Object.entries(props.customCssVars)
|
|
469
|
-
.map(([key, value]) => `${key}: ${value};`)
|
|
470
|
-
.join("\n")}`
|
|
471
|
-
: ""
|
|
472
|
-
}
|
|
473
|
-
|
|
474
|
-
Style according to the user's requirements:
|
|
475
|
-
${props.prompt}
|
|
476
|
-
|
|
477
|
-
The output should be a complete, well-structured CSS file.
|
|
478
|
-
`,
|
|
479
|
-
system: `${systemPrompt}
|
|
480
|
-
You are writing CSS styles for a VitePress theme.`,
|
|
481
|
-
baseURL: props.baseURL,
|
|
482
|
-
apiKey: props.apiKey,
|
|
483
|
-
model: props.model,
|
|
484
|
-
temperature: props.temperature,
|
|
485
|
-
});
|
|
486
|
-
|
|
487
|
-
// Collect all generated files
|
|
488
|
-
const allFiles = [
|
|
489
|
-
indexFile,
|
|
490
|
-
layoutFile,
|
|
491
|
-
...autoComponentFiles,
|
|
492
|
-
...userComponentFiles,
|
|
493
|
-
stylesFile,
|
|
494
|
-
];
|
|
495
|
-
|
|
496
|
-
// Create file objects for resource output
|
|
497
|
-
const files = allFiles.map((file) => ({
|
|
498
|
-
path: file.path,
|
|
499
|
-
content: file.content,
|
|
500
|
-
}));
|
|
501
|
-
|
|
502
|
-
// Get the current timestamp
|
|
503
|
-
const now = Date.now();
|
|
504
|
-
|
|
505
|
-
// Return the resource using this() to construct output
|
|
506
|
-
return this({
|
|
507
|
-
...props,
|
|
508
|
-
themePath: props.outDir,
|
|
509
|
-
files,
|
|
510
|
-
createdAt: this.output?.createdAt || now,
|
|
511
|
-
updatedAt: now,
|
|
512
|
-
});
|
|
513
|
-
},
|
|
514
|
-
);
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import { exec } from "node:child_process";
|
|
2
|
-
import { promisify } from "node:util";
|
|
3
|
-
import type { Context } from "../../context.ts";
|
|
4
|
-
import { Resource } from "../../resource.ts";
|
|
5
|
-
import { logger } from "../../util/logger.ts";
|
|
6
|
-
|
|
7
|
-
const execAsync = promisify(exec);
|
|
8
|
-
|
|
9
|
-
export type InstallDependencies = Resource<"project::InstallDependencies">;
|
|
10
|
-
|
|
11
|
-
export const InstallDependencies = Resource(
|
|
12
|
-
"project::InstallDependencies",
|
|
13
|
-
{
|
|
14
|
-
alwaysUpdate: true,
|
|
15
|
-
},
|
|
16
|
-
async function (
|
|
17
|
-
this: Context<InstallDependencies>,
|
|
18
|
-
_id: string,
|
|
19
|
-
{
|
|
20
|
-
cwd,
|
|
21
|
-
dependencies,
|
|
22
|
-
devDependencies,
|
|
23
|
-
}: {
|
|
24
|
-
cwd: string;
|
|
25
|
-
dependencies?: Record<string, string>;
|
|
26
|
-
devDependencies?: Record<string, string>;
|
|
27
|
-
},
|
|
28
|
-
) {
|
|
29
|
-
if (this.phase === "delete") {
|
|
30
|
-
return this.destroy();
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
await installDependencies(cwd, dependencies);
|
|
34
|
-
await installDependencies(cwd, devDependencies, "-D");
|
|
35
|
-
await execAsync("bun install", { cwd });
|
|
36
|
-
|
|
37
|
-
return this({});
|
|
38
|
-
},
|
|
39
|
-
);
|
|
40
|
-
|
|
41
|
-
function isInstallableVersion(version: string) {
|
|
42
|
-
// TODO: file:// ?
|
|
43
|
-
return !version.startsWith("workspace:");
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
export function fixedDependencies(dependencies?: Record<string, string>) {
|
|
47
|
-
if (!dependencies) return {};
|
|
48
|
-
return Object.fromEntries(
|
|
49
|
-
Object.entries(dependencies).filter(
|
|
50
|
-
([, value]) => !isInstallableVersion(value),
|
|
51
|
-
),
|
|
52
|
-
);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
export async function installDependencies(
|
|
56
|
-
cwd: string,
|
|
57
|
-
dependencies: Record<string, string> | undefined,
|
|
58
|
-
...args: string[]
|
|
59
|
-
) {
|
|
60
|
-
if (!dependencies) return;
|
|
61
|
-
const deps = Object.entries(dependencies)
|
|
62
|
-
.filter(([, value]) => isInstallableVersion(value))
|
|
63
|
-
.map(([pkg, version]) => `${pkg}@${version}`)
|
|
64
|
-
.join(" ");
|
|
65
|
-
|
|
66
|
-
const cmd = `bun add ${args.join(" ")} ${deps}`;
|
|
67
|
-
logger.log(cmd);
|
|
68
|
-
await execAsync(cmd, { cwd });
|
|
69
|
-
}
|