blume 1.7.3 → 2.0.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/AGENTS.md +19 -0
- package/CHANGELOG.md +245 -0
- package/README.md +34 -21
- package/dist/cli/{chunk-vacwm2hv.js → chunk-27g6wdth.js} +2 -2
- package/dist/cli/{chunk-ps4m1xh4.js → chunk-2hn4b8z7.js} +513 -550
- package/dist/cli/chunk-2hn4b8z7.js.map +12 -0
- package/dist/cli/chunk-5shv93fd.js +39 -0
- package/dist/cli/chunk-5shv93fd.js.map +10 -0
- package/dist/cli/chunk-6crbhc3x.js +361 -0
- package/dist/cli/chunk-6crbhc3x.js.map +14 -0
- package/dist/cli/{chunk-8cjtbafj.js → chunk-6hsn950k.js} +109 -383
- package/dist/cli/chunk-6hsn950k.js.map +10 -0
- package/dist/cli/chunk-6vm74dry.js +148 -0
- package/dist/cli/chunk-6vm74dry.js.map +10 -0
- package/dist/cli/{chunk-yg63d42r.js → chunk-79jhk4py.js} +87 -58
- package/dist/cli/chunk-79jhk4py.js.map +35 -0
- package/dist/cli/chunk-82bbrxdn.js +51 -0
- package/dist/cli/chunk-82bbrxdn.js.map +10 -0
- package/dist/cli/chunk-abh8yjkn.js +31 -0
- package/dist/cli/chunk-abh8yjkn.js.map +10 -0
- package/dist/cli/chunk-ah61y8py.js +75 -0
- package/dist/cli/chunk-ah61y8py.js.map +11 -0
- package/dist/cli/{chunk-dwgcp5sm.js → chunk-ce574jw2.js} +1 -1
- package/dist/cli/chunk-ch6g3ar0.js +102 -0
- package/dist/cli/chunk-ch6g3ar0.js.map +10 -0
- package/dist/cli/chunk-dh8cwk36.js +279 -0
- package/dist/cli/chunk-dh8cwk36.js.map +10 -0
- package/dist/cli/{chunk-rqy0s5wh.js → chunk-epjnccmv.js} +17 -16
- package/dist/cli/{chunk-rqy0s5wh.js.map → chunk-epjnccmv.js.map} +3 -3
- package/dist/cli/chunk-f2z5v128.js +97 -0
- package/dist/cli/chunk-f2z5v128.js.map +10 -0
- package/dist/cli/{chunk-2z47ypj8.js → chunk-fa25z98p.js} +16 -3
- package/dist/cli/chunk-fa25z98p.js.map +11 -0
- package/dist/cli/{chunk-1jefwnfs.js → chunk-fs23ddbb.js} +1076 -2592
- package/dist/cli/chunk-fs23ddbb.js.map +35 -0
- package/dist/cli/{chunk-e7f42gdj.js → chunk-fxypxtvm.js} +2 -2
- package/dist/cli/{chunk-bvwwhd84.js → chunk-fz5wtpmh.js} +15 -15
- package/dist/cli/{chunk-bvwwhd84.js.map → chunk-fz5wtpmh.js.map} +1 -1
- package/dist/cli/chunk-hdpx1tax.js +91 -0
- package/dist/cli/chunk-hdpx1tax.js.map +10 -0
- package/dist/cli/{chunk-ct47dqpx.js → chunk-jts8mvcz.js} +67 -7
- package/dist/cli/{chunk-2mzebbbz.js.map → chunk-jts8mvcz.js.map} +6 -4
- package/dist/cli/{chunk-ahnw3kxw.js → chunk-jwyddg7y.js} +27 -22
- package/dist/cli/chunk-jwyddg7y.js.map +15 -0
- package/dist/cli/{chunk-cjtn640a.js → chunk-kdp5q7ke.js} +43 -20
- package/dist/cli/chunk-kdp5q7ke.js.map +10 -0
- package/dist/cli/{chunk-5g0w1e2c.js → chunk-kpf8rrjc.js} +28 -16
- package/dist/cli/{chunk-5g0w1e2c.js.map → chunk-kpf8rrjc.js.map} +4 -4
- package/dist/cli/chunk-m3vmjgmq.js +133 -0
- package/dist/cli/chunk-m3vmjgmq.js.map +10 -0
- package/dist/cli/{chunk-b27xqwn9.js → chunk-mb2919y2.js} +9 -5
- package/dist/cli/chunk-mb2919y2.js.map +10 -0
- package/dist/cli/{chunk-5qk08vmp.js → chunk-q5163e60.js} +133 -54
- package/dist/cli/chunk-q5163e60.js.map +11 -0
- package/dist/cli/chunk-qkqwkpte.js +12437 -0
- package/dist/cli/chunk-qkqwkpte.js.map +182 -0
- package/dist/cli/{chunk-4x36ddpw.js → chunk-qs4q5p4e.js} +81 -87
- package/dist/cli/chunk-qs4q5p4e.js.map +10 -0
- package/dist/cli/{chunk-0xjyb285.js → chunk-qwsrynx5.js} +15 -5
- package/dist/cli/{chunk-0xjyb285.js.map → chunk-qwsrynx5.js.map} +4 -4
- package/dist/cli/chunk-s1p84fyh.js +261 -0
- package/dist/cli/chunk-s1p84fyh.js.map +10 -0
- package/dist/cli/chunk-s6jhgk0q.js +176 -0
- package/dist/cli/chunk-s6jhgk0q.js.map +11 -0
- package/dist/cli/chunk-vtk4a6dg.js +374 -0
- package/dist/cli/chunk-vtk4a6dg.js.map +10 -0
- package/dist/cli/{chunk-k79xp7av.js → chunk-wgm7m9qk.js} +230 -700
- package/dist/cli/chunk-wgm7m9qk.js.map +36 -0
- package/dist/cli/chunk-wm7js3j9.js +145 -0
- package/dist/cli/chunk-wm7js3j9.js.map +11 -0
- package/dist/cli/chunk-yt5n7ppj.js +79 -0
- package/dist/cli/chunk-yt5n7ppj.js.map +10 -0
- package/dist/cli/{chunk-3r45185y.js → chunk-yw7dm696.js} +9 -11
- package/dist/cli/{chunk-3r45185y.js.map → chunk-yw7dm696.js.map} +3 -3
- package/dist/cli/{chunk-nn13znc2.js → chunk-zxcczpyx.js} +1 -1
- package/dist/cli/chunk-zxh4d9vy.js +122 -0
- package/dist/cli/chunk-zxh4d9vy.js.map +11 -0
- package/dist/cli/index.js +214 -57
- package/dist/cli/index.js.map +8 -7
- package/dist/types/ai/agent-readability.d.ts +52 -0
- package/dist/types/ai/ai-catalog.d.ts +42 -0
- package/dist/types/ai/api/paths.d.ts +17 -0
- package/dist/types/ai/api-catalog.d.ts +18 -0
- package/dist/types/ai/ask-context.d.ts +7 -7
- package/dist/types/ai/ask.d.ts +368 -0
- package/dist/types/ai/changelog-markdown.d.ts +2 -0
- package/dist/types/ai/component-markdown.d.ts +2 -2
- package/dist/types/ai/index.d.ts +24 -0
- package/dist/types/ai/link-headers.d.ts +24 -0
- package/dist/types/ai/llms.d.ts +25 -0
- package/dist/types/ai/markdown.d.ts +45 -0
- package/dist/types/ai/mcp/discovery.d.ts +68 -0
- package/dist/types/ai/mcp/tools.d.ts +16 -0
- package/dist/types/ai/openapi-components.d.ts +43 -0
- package/dist/types/ai/relative-links.d.ts +26 -0
- package/dist/types/ai/serializers.d.ts +15 -0
- package/dist/types/ai/skills.d.ts +42 -0
- package/dist/types/ai/tar.d.ts +25 -0
- package/dist/types/ai/visibility.d.ts +17 -0
- package/dist/types/ai/web-bot-auth.d.ts +16 -0
- package/dist/types/analytics/adobe.d.ts +35 -0
- package/dist/types/analytics/amplitude.d.ts +50 -0
- package/dist/types/analytics/clarity.d.ts +31 -0
- package/dist/types/analytics/clearbit.d.ts +29 -0
- package/dist/types/analytics/cloudflare.d.ts +41 -0
- package/dist/types/analytics/fathom.d.ts +41 -0
- package/dist/types/analytics/google-analytics.d.ts +44 -0
- package/dist/types/analytics/google-tag-manager.d.ts +40 -0
- package/dist/types/analytics/head.d.ts +30 -0
- package/dist/types/analytics/heap.d.ts +40 -0
- package/dist/types/analytics/hightouch.d.ts +44 -0
- package/dist/types/analytics/hotjar.d.ts +33 -0
- package/dist/types/analytics/index.d.ts +61 -0
- package/dist/types/analytics/inline.d.ts +17 -0
- package/dist/types/analytics/logrocket.d.ts +44 -0
- package/dist/types/analytics/mixpanel.d.ts +67 -0
- package/dist/types/analytics/pirsch.d.ts +42 -0
- package/dist/types/analytics/plausible.d.ts +56 -0
- package/dist/types/analytics/posthog.d.ts +45 -0
- package/dist/types/analytics/schema.d.ts +320 -0
- package/dist/types/analytics/script.d.ts +46 -0
- package/dist/types/analytics/segment.d.ts +50 -0
- package/dist/types/analytics/vercel.d.ts +48 -0
- package/dist/types/astro/integration.d.ts +76 -0
- package/dist/types/astro/markdown-negotiation.d.ts +23 -0
- package/dist/types/astro/module-types.d.ts +14 -0
- package/dist/types/astro/pages.d.ts +44 -0
- package/dist/types/cli/env.d.ts +12 -0
- package/dist/types/cli/init/scaffold.d.ts +154 -0
- package/dist/types/components/layout/nav-utils.d.ts +11 -0
- package/dist/types/core/adapter.d.ts +47 -0
- package/dist/types/core/api-name.d.ts +7 -0
- package/dist/types/core/changelog-index.d.ts +13 -0
- package/dist/types/core/config-input.d.ts +197 -526
- package/dist/types/core/config.d.ts +61 -35
- package/dist/types/core/content-assets.d.ts +76 -0
- package/dist/types/core/custom-pages.d.ts +33 -0
- package/dist/types/core/data.d.ts +30 -15
- package/dist/types/core/define-components.d.ts +12 -9
- package/dist/types/core/deployment-env.d.ts +6 -11
- package/dist/types/core/frontmatter.d.ts +10 -0
- package/dist/types/core/graph.d.ts +18 -0
- package/dist/types/core/heading-markers.d.ts +54 -0
- package/dist/types/core/i18n-ui.d.ts +12 -10
- package/dist/types/core/i18n.d.ts +87 -0
- package/dist/types/core/includes.d.ts +138 -0
- package/dist/types/core/last-modified.d.ts +47 -0
- package/dist/types/core/links.d.ts +95 -0
- package/dist/types/core/locale-links.d.ts +60 -0
- package/dist/types/core/manifest.d.ts +17 -0
- package/dist/types/core/meta.d.ts +38 -0
- package/dist/types/core/nav-diagnostics.d.ts +26 -0
- package/dist/types/core/navigation.d.ts +6 -0
- package/dist/types/core/node-require.d.ts +19 -0
- package/dist/types/core/package-json.d.ts +13 -0
- package/dist/types/core/probe.d.ts +42 -0
- package/dist/types/core/project-graph.d.ts +51 -0
- package/dist/types/core/project.d.ts +2 -0
- package/dist/types/core/safe-href.d.ts +2 -0
- package/dist/types/core/safe-links.d.ts +26 -0
- package/dist/types/core/schema.d.ts +2284 -454
- package/dist/types/core/site-url.d.ts +16 -0
- package/dist/types/core/sources/assets.d.ts +36 -0
- package/dist/types/core/sources/cache.d.ts +37 -0
- package/dist/types/core/sources/collection.d.ts +28 -0
- package/dist/types/core/sources/contentful-rich-text.d.ts +31 -0
- package/dist/types/core/sources/contentful.d.ts +40 -0
- package/dist/types/core/sources/filesystem.d.ts +24 -0
- package/dist/types/core/sources/github-releases.d.ts +31 -0
- package/dist/types/core/sources/json.d.ts +30 -0
- package/dist/types/core/sources/lexical.d.ts +19 -0
- package/dist/types/core/sources/lower.d.ts +75 -0
- package/dist/types/core/sources/mdx-remote.d.ts +28 -0
- package/dist/types/core/sources/normalize.d.ts +147 -0
- package/dist/types/core/sources/notion.d.ts +131 -0
- package/dist/types/core/sources/obsidian.d.ts +46 -0
- package/dist/types/core/sources/payload.d.ts +39 -0
- package/dist/types/core/sources/portable-text.d.ts +42 -0
- package/dist/types/core/sources/read.d.ts +23 -0
- package/dist/types/core/sources/remote.d.ts +74 -0
- package/dist/types/core/sources/resolve.d.ts +19 -0
- package/dist/types/core/sources/sanity.d.ts +43 -0
- package/dist/types/core/sources/strapi-blocks.d.ts +12 -0
- package/dist/types/core/sources/strapi.d.ts +33 -0
- package/dist/types/core/sources/types.d.ts +7 -0
- package/dist/types/core/sources/watch.d.ts +45 -0
- package/dist/types/core/text-width.d.ts +11 -0
- package/dist/types/core/types.d.ts +15 -1
- package/dist/types/core/unrecognized-keys.d.ts +7 -0
- package/dist/types/core/versions.d.ts +72 -0
- package/dist/types/core/yaml.d.ts +9 -0
- package/dist/types/deploy/adapter-output.d.ts +45 -0
- package/dist/types/deploy/adapters/cloudflare.d.ts +40 -0
- package/dist/types/deploy/adapters/index.d.ts +29 -0
- package/dist/types/deploy/adapters/netlify.d.ts +37 -0
- package/dist/types/deploy/adapters/node.d.ts +37 -0
- package/dist/types/deploy/adapters/registry.d.ts +133 -0
- package/dist/types/deploy/adapters/types.d.ts +71 -0
- package/dist/types/deploy/adapters/vercel.d.ts +38 -0
- package/dist/types/deploy/artifacts.d.ts +65 -0
- package/dist/types/deploy/cloudflare-negotiation.d.ts +196 -0
- package/dist/types/deploy/function-bundle.d.ts +80 -0
- package/dist/types/deploy/headers.d.ts +50 -0
- package/dist/types/deploy/node-headers.d.ts +42 -0
- package/dist/types/deploy/platforms/cloudflare.d.ts +40 -0
- package/dist/types/deploy/platforms/index.d.ts +18 -0
- package/dist/types/deploy/platforms/netlify.d.ts +13 -0
- package/dist/types/deploy/platforms/node.d.ts +11 -0
- package/dist/types/deploy/platforms/paths.d.ts +27 -0
- package/dist/types/deploy/platforms/static.d.ts +10 -0
- package/dist/types/deploy/platforms/types.d.ts +104 -0
- package/dist/types/deploy/platforms/vercel.d.ts +32 -0
- package/dist/types/deploy/redirects.d.ts +53 -0
- package/dist/types/deploy/robots.d.ts +8 -0
- package/dist/types/deploy/rss.d.ts +31 -0
- package/dist/types/deploy/sitemap.d.ts +21 -0
- package/dist/types/deploy/vercel-negotiation.d.ts +109 -0
- package/dist/types/markdown/code-title.d.ts +32 -0
- package/dist/types/markdown/fence-meta.d.ts +23 -0
- package/dist/types/markdown/themes.d.ts +3 -3
- package/dist/types/openapi/asyncapi.d.ts +129 -0
- package/dist/types/openapi/graphql-build.d.ts +8 -0
- package/dist/types/openapi/graphql.d.ts +122 -0
- package/dist/types/openapi/model.d.ts +158 -0
- package/dist/types/openapi/parse.d.ts +57 -0
- package/dist/types/openapi/references.d.ts +37 -25
- package/dist/types/openapi/render-mdx.d.ts +33 -0
- package/dist/types/openapi/sentence.d.ts +7 -0
- package/dist/types/openapi/signature.d.ts +10 -0
- package/dist/types/openapi/source.d.ts +22 -0
- package/dist/types/openapi/spec-dependency-error.d.ts +10 -0
- package/dist/types/reference/asyncapi.d.ts +166 -0
- package/dist/types/reference/graphql.d.ts +181 -0
- package/dist/types/reference/index.d.ts +32 -0
- package/dist/types/reference/openapi.d.ts +165 -0
- package/dist/types/reference/options.d.ts +157 -0
- package/dist/types/reference/scalar.d.ts +136 -0
- package/dist/types/reference/schema.d.ts +630 -0
- package/dist/types/search/adapters/algolia.d.ts +32 -0
- package/dist/types/search/adapters/flexsearch.d.ts +12 -0
- package/dist/types/search/adapters/index.d.ts +31 -0
- package/dist/types/search/adapters/mixedbread.d.ts +22 -0
- package/dist/types/search/adapters/orama-cloud.d.ts +33 -0
- package/dist/types/search/adapters/orama.d.ts +13 -0
- package/dist/types/search/adapters/pagefind.d.ts +12 -0
- package/dist/types/search/adapters/registry.d.ts +228 -0
- package/dist/types/search/adapters/types.d.ts +34 -0
- package/dist/types/search/adapters/typesense.d.ts +42 -0
- package/dist/types/search/build.d.ts +23 -0
- package/dist/types/search/documents.d.ts +90 -0
- package/dist/types/search/facets.d.ts +3 -0
- package/dist/types/search/orama-index.d.ts +1 -1
- package/dist/types/search/sync/algolia.d.ts +14 -0
- package/dist/types/search/sync/index.d.ts +14 -0
- package/dist/types/search/sync/orama-cloud.d.ts +10 -0
- package/dist/types/search/sync/typesense.d.ts +14 -0
- package/dist/types/sources/contentful.d.ts +68 -0
- package/dist/types/sources/custom.d.ts +20 -0
- package/dist/types/sources/filesystem.d.ts +42 -0
- package/dist/types/sources/github-releases.d.ts +46 -0
- package/dist/types/sources/index.d.ts +48 -0
- package/dist/types/sources/mdx-remote.d.ts +63 -0
- package/dist/types/sources/notion.d.ts +65 -0
- package/dist/types/sources/obsidian.d.ts +34 -0
- package/dist/types/sources/payload.d.ts +68 -0
- package/dist/types/sources/registry.d.ts +1414 -0
- package/dist/types/sources/sanity.d.ts +69 -0
- package/dist/types/sources/shared.d.ts +46 -0
- package/dist/types/sources/strapi.d.ts +66 -0
- package/dist/types/theme/icon-kind.d.ts +11 -0
- package/dist/types/theme/icons.d.ts +20 -0
- package/docs/01-quickstart.mdx +18 -18
- package/docs/02-deployment.mdx +52 -28
- package/docs/03-upgrading.mdx +364 -0
- package/docs/04-migrating.mdx +58 -0
- package/docs/08-faq.mdx +5 -5
- package/docs/advanced/blog.mdx +13 -6
- package/docs/advanced/changelog.mdx +23 -35
- package/docs/advanced/custom-pages.mdx +22 -10
- package/docs/advanced/meta.ts +1 -8
- package/docs/advanced/skills.mdx +8 -0
- package/docs/cli/audit.mdx +646 -0
- package/docs/cli/doctor.mdx +29 -0
- package/docs/{reference/eval.mdx → cli/evals.mdx} +12 -11
- package/docs/cli/index.mdx +105 -0
- package/docs/cli/meta.ts +7 -0
- package/docs/{reference → cli}/translate.mdx +9 -9
- package/docs/cli/validate.mdx +41 -0
- package/docs/cli/version.mdx +40 -0
- package/docs/configuration/analytics.mdx +350 -59
- package/docs/configuration/assistant.mdx +357 -0
- package/docs/configuration/customization.mdx +16 -10
- package/docs/configuration/index.mdx +50 -31
- package/docs/configuration/meta.ts +1 -1
- package/docs/configuration/search.mdx +76 -55
- package/docs/configuration/theming.mdx +24 -15
- package/docs/content/components.mdx +21 -5
- package/docs/{reference → content}/frontmatter.mdx +35 -1
- package/docs/content/i18n.mdx +9 -7
- package/docs/content/includes.mdx +2 -4
- package/docs/content/index.mdx +1 -1
- package/docs/content/islands.mdx +11 -6
- package/docs/content/meta.mdx +1 -1
- package/docs/content/meta.ts +1 -0
- package/docs/content/navigation.mdx +9 -7
- package/docs/content/sources.mdx +145 -50
- package/docs/content/syntax.mdx +16 -12
- package/docs/content/versioning.mdx +3 -3
- package/docs/discoverability/agent-discovery.mdx +12 -12
- package/docs/discoverability/index.mdx +4 -4
- package/docs/discoverability/json-api.mdx +4 -4
- package/docs/discoverability/llms-txt.mdx +6 -6
- package/docs/discoverability/markdown.mdx +4 -4
- package/docs/discoverability/mcp.mdx +11 -11
- package/docs/discoverability/sitemap-and-robots.mdx +3 -3
- package/docs/index.mdx +4 -4
- package/docs/references/asyncapi.mdx +59 -0
- package/docs/{advanced → references}/graphql.mdx +45 -32
- package/docs/{reference → references}/meta.ts +2 -2
- package/docs/references/openapi.mdx +171 -0
- package/docs/references/scalar.mdx +64 -0
- package/package.json +42 -8
- package/skills/blume/SKILL.md +23 -10
- package/skills/blume-migrate/SKILL.md +22 -21
- package/skills/blume-migrate/assets/oxfmt@0.67.0.patch +49 -0
- package/skills/blume-migrate/references/docusaurus.md +5 -4
- package/skills/blume-migrate/references/fumadocs.md +4 -4
- package/skills/blume-migrate/references/mintlify.md +23 -8
- package/skills/blume-migrate/references/monorepo.md +6 -6
- package/skills/blume-migrate/references/starlight.md +4 -4
- package/src/ai/agent-readability.ts +25 -26
- package/src/ai/ai-catalog.ts +50 -32
- package/src/ai/api/handlers.ts +46 -11
- package/src/ai/api/paths.ts +1 -1
- package/src/ai/api-catalog.ts +8 -8
- package/src/ai/ask-context.ts +7 -7
- package/src/ai/ask-data.ts +3 -3
- package/src/ai/ask.ts +637 -100
- package/src/ai/changelog-markdown.ts +91 -0
- package/src/ai/component-markdown.ts +328 -12
- package/src/ai/cors.ts +3 -3
- package/src/ai/index.ts +45 -0
- package/src/ai/link-headers.ts +7 -6
- package/src/ai/llms.ts +20 -15
- package/src/ai/markdown.ts +35 -5
- package/src/ai/mcp/data.ts +9 -5
- package/src/ai/openapi-components.ts +5 -2
- package/src/ai/relative-links.ts +170 -0
- package/src/ai/serializers.ts +3 -3
- package/src/ai/skills.ts +1 -1
- package/src/ai/visibility.ts +1 -1
- package/src/ai/web-bot-auth.ts +2 -2
- package/src/analytics/adobe.ts +46 -0
- package/src/analytics/amplitude.ts +79 -0
- package/src/analytics/clarity.ts +46 -0
- package/src/analytics/clearbit.ts +47 -0
- package/src/analytics/cloudflare.ts +67 -0
- package/src/analytics/fathom.ts +64 -0
- package/src/analytics/google-analytics.ts +84 -0
- package/src/analytics/google-tag-manager.ts +61 -0
- package/src/analytics/head.ts +130 -0
- package/src/analytics/heap.ts +65 -0
- package/src/analytics/hightouch.ts +77 -0
- package/src/analytics/hotjar.ts +47 -0
- package/src/analytics/index.ts +71 -0
- package/src/analytics/inline.ts +21 -0
- package/src/analytics/logrocket.ts +71 -0
- package/src/analytics/mixpanel.ts +92 -0
- package/src/analytics/pirsch.ts +66 -0
- package/src/analytics/plausible.ts +83 -0
- package/src/analytics/posthog.ts +78 -0
- package/src/analytics/schema.ts +60 -0
- package/src/analytics/script.ts +60 -0
- package/src/analytics/segment.ts +85 -0
- package/src/analytics/vercel.ts +50 -0
- package/src/astro/adapter-root.ts +7 -9
- package/src/astro/component-slots.ts +131 -91
- package/src/astro/generate.ts +129 -361
- package/src/astro/integration.ts +2 -6
- package/src/astro/module-types.ts +1 -1
- package/src/astro/pages.ts +13 -101
- package/src/astro/render-deps.ts +379 -0
- package/src/astro/runtime-deps.ts +201 -0
- package/src/astro/templates.ts +575 -562
- package/src/audit/agent.ts +24 -0
- package/src/audit/catalog.ts +2 -2
- package/src/audit/checks/assets.ts +2 -2
- package/src/audit/checks/dns-aid.ts +1 -1
- package/src/audit/checks/duplicates.ts +3 -1
- package/src/audit/checks/i18n.ts +1 -1
- package/src/audit/checks/indexability.ts +7 -7
- package/src/audit/checks/links.ts +2 -2
- package/src/audit/checks/llms.ts +6 -6
- package/src/audit/checks/network.ts +3 -3
- package/src/audit/checks/og-image.ts +2 -2
- package/src/audit/checks/robots.ts +1 -1
- package/src/audit/checks/sitemap.ts +2 -2
- package/src/audit/checks/social.ts +1 -1
- package/src/audit/run.ts +4 -3
- package/src/audit/terms.ts +31 -0
- package/src/audit/url.ts +13 -13
- package/src/blume-modules.d.ts +2 -2
- package/src/cli/command-meta.ts +10 -0
- package/src/cli/commands/audit.ts +40 -21
- package/src/cli/commands/build.ts +71 -316
- package/src/cli/commands/check.ts +1 -0
- package/src/cli/commands/dev.ts +40 -1
- package/src/cli/commands/doctor.ts +92 -14
- package/src/cli/commands/eject.ts +44 -7
- package/src/cli/commands/eval.ts +5 -5
- package/src/cli/commands/init.ts +161 -41
- package/src/cli/commands/migrate.ts +121 -0
- package/src/cli/commands/preview.ts +7 -1
- package/src/cli/commands/translate.ts +5 -5
- package/src/cli/commands/upgrade.ts +141 -0
- package/src/cli/commands/version.ts +57 -44
- package/src/cli/eject-scripts.ts +121 -6
- package/src/cli/index.ts +11 -1
- package/src/cli/init/install.ts +70 -0
- package/src/cli/init/questions.ts +7 -0
- package/src/cli/init/scaffold.ts +459 -75
- package/src/cli/lazy-command.ts +37 -1
- package/src/cli/prepare.ts +40 -6
- package/src/cli/required-secrets.ts +39 -12
- package/src/cli/unknown-flags.ts +266 -0
- package/src/cli/yarn-pnp.ts +52 -0
- package/src/components/content/AccordionItem.astro +7 -1
- package/src/components/content/Card.astro +4 -3
- package/src/components/content/ColorItem.astro +22 -4
- package/src/components/content/GithubInfo.astro +2 -2
- package/src/components/content/Prompt.astro +25 -25
- package/src/components/content/Tabs.astro +3 -1
- package/src/components/content/Tile.astro +2 -3
- package/src/components/content/Tooltip.astro +57 -9
- package/src/components/content/content-strings.ts +34 -0
- package/src/components/content/diff.ts +1 -1
- package/src/components/content/mermaid-element.ts +13 -2
- package/src/components/content/prompt-markdown.ts +292 -0
- package/src/components/content/tooltip-id.ts +41 -0
- package/src/components/copy-feedback.ts +1 -1
- package/src/components/islands/{AskAI.astro → Assistant.astro} +10 -10
- package/src/components/islands/{ask-ai.tsx → assistant.tsx} +23 -23
- package/src/components/islands/hooks.ts +36 -11
- package/src/components/layout/Analytics.astro +21 -79
- package/src/components/layout/Banner.astro +3 -1
- package/src/components/layout/DiscoveryLinks.astro +69 -0
- package/src/components/layout/Header.astro +93 -30
- package/src/components/layout/LanguageSwitcher.astro +4 -1
- package/src/components/layout/Logo.astro +23 -2
- package/src/components/layout/NavSelector.astro +13 -2
- package/src/components/layout/NavTree.astro +12 -3
- package/src/components/layout/NavTreeScript.astro +17 -3
- package/src/components/layout/PageActions.astro +3 -3
- package/src/components/layout/PageFeedback.astro +11 -1
- package/src/components/layout/PageLayout.astro +58 -11
- package/src/components/layout/Pagination.astro +7 -7
- package/src/components/layout/ReferenceLayout.astro +22 -13
- package/src/components/layout/RootLayout.astro +75 -72
- package/src/components/layout/Search.astro +43 -19
- package/src/components/layout/WebMcp.astro +1 -1
- package/src/components/layout/analytics-client.ts +73 -16
- package/src/components/layout/drawer-inert.ts +113 -15
- package/src/components/layout/dropdown-clamp.ts +105 -0
- package/src/components/layout/head-scripts.ts +15 -6
- package/src/components/layout/nav-utils.ts +17 -0
- package/src/components/layout/search/algolia.ts +8 -8
- package/src/components/layout/search/orama-cloud.ts +9 -7
- package/src/components/layout/search/typesense.ts +11 -17
- package/src/components/openapi/MessageComposer.astro +2 -2
- package/src/components/openapi/Playground.astro +2 -2
- package/src/components/openapi/description.ts +2 -2
- package/src/components/openapi/playground-client.ts +79 -10
- package/src/core/changelog-index.ts +24 -0
- package/src/core/code-fences.ts +1 -1
- package/src/core/component-overrides.ts +399 -154
- package/src/core/config-input.ts +201 -566
- package/src/core/config.ts +131 -42
- package/src/core/custom-pages.ts +105 -0
- package/src/core/data.ts +34 -15
- package/src/core/define-components.ts +12 -9
- package/src/core/deployment-env.ts +18 -74
- package/src/core/diagnostics.ts +14 -7
- package/src/core/graph.ts +69 -25
- package/src/core/i18n-ui.ts +41 -11
- package/src/core/i18n.ts +17 -0
- package/src/core/includes.ts +156 -38
- package/src/core/last-modified.ts +6 -11
- package/src/core/links.ts +166 -2
- package/src/core/manifest.ts +10 -3
- package/src/core/navigation.ts +115 -16
- package/src/core/new-tab.ts +35 -0
- package/src/core/node-require.ts +21 -0
- package/src/core/project-graph.ts +42 -26
- package/src/core/project.ts +9 -4
- package/src/core/request-body.ts +61 -0
- package/src/core/safe-href.ts +28 -0
- package/src/core/safe-links.ts +68 -0
- package/src/core/schema.ts +528 -745
- package/src/core/server-features.ts +10 -11
- package/src/core/sources/assets.ts +47 -11
- package/src/core/sources/collection.ts +67 -0
- package/src/core/sources/contentful-rich-text.ts +285 -0
- package/src/core/sources/contentful.ts +173 -0
- package/src/core/sources/github-releases.ts +51 -1
- package/src/core/sources/json.ts +71 -0
- package/src/core/sources/lexical.ts +195 -0
- package/src/core/sources/lower.ts +226 -0
- package/src/core/sources/normalize.ts +52 -2
- package/src/core/sources/notion.ts +39 -28
- package/src/core/sources/payload.ts +135 -0
- package/src/core/sources/portable-text.ts +11 -16
- package/src/core/sources/remote.ts +226 -0
- package/src/core/sources/resolve.ts +104 -166
- package/src/core/sources/sanity.ts +16 -49
- package/src/core/sources/strapi-blocks.ts +124 -0
- package/src/core/sources/strapi.ts +191 -0
- package/src/core/sources/types.ts +12 -1
- package/src/core/types.ts +15 -1
- package/src/core/ui-packs/ar.ts +10 -7
- package/src/core/ui-packs/bg.ts +10 -7
- package/src/core/ui-packs/bn.ts +10 -7
- package/src/core/ui-packs/ca.ts +7 -6
- package/src/core/ui-packs/cs.ts +10 -7
- package/src/core/ui-packs/da.ts +10 -7
- package/src/core/ui-packs/de.ts +10 -7
- package/src/core/ui-packs/el.ts +7 -6
- package/src/core/ui-packs/es.ts +7 -6
- package/src/core/ui-packs/fa.ts +10 -7
- package/src/core/ui-packs/fi.ts +10 -7
- package/src/core/ui-packs/fr.ts +7 -6
- package/src/core/ui-packs/he.ts +10 -7
- package/src/core/ui-packs/hi.ts +10 -7
- package/src/core/ui-packs/hr.ts +10 -7
- package/src/core/ui-packs/hu.ts +10 -7
- package/src/core/ui-packs/id.ts +10 -7
- package/src/core/ui-packs/it.ts +7 -6
- package/src/core/ui-packs/ja.ts +7 -6
- package/src/core/ui-packs/ko.ts +7 -6
- package/src/core/ui-packs/nl.ts +10 -7
- package/src/core/ui-packs/no.ts +10 -7
- package/src/core/ui-packs/pl.ts +10 -7
- package/src/core/ui-packs/pt-br.ts +7 -6
- package/src/core/ui-packs/pt.ts +7 -6
- package/src/core/ui-packs/ro.ts +10 -7
- package/src/core/ui-packs/ru.ts +10 -7
- package/src/core/ui-packs/sk.ts +10 -7
- package/src/core/ui-packs/sr.ts +10 -7
- package/src/core/ui-packs/sv.ts +10 -7
- package/src/core/ui-packs/th.ts +7 -6
- package/src/core/ui-packs/tr.ts +10 -7
- package/src/core/ui-packs/uk.ts +10 -7
- package/src/core/ui-packs/vi.ts +7 -6
- package/src/core/ui-packs/zh-tw.ts +7 -6
- package/src/core/ui-packs/zh.ts +7 -6
- package/src/core/unrecognized-keys.ts +10 -0
- package/src/core/version-cut.ts +116 -8
- package/src/deploy/adapter-output.ts +57 -97
- package/src/deploy/adapters/cloudflare.ts +39 -0
- package/src/deploy/adapters/index.ts +41 -0
- package/src/deploy/adapters/netlify.ts +34 -0
- package/src/deploy/adapters/node.ts +34 -0
- package/src/deploy/adapters/registry.ts +127 -0
- package/src/deploy/adapters/types.ts +92 -0
- package/src/deploy/adapters/vercel.ts +35 -0
- package/src/deploy/artifacts.ts +55 -27
- package/src/deploy/cloudflare-negotiation.ts +179 -100
- package/src/deploy/function-bundle.ts +18 -3
- package/src/deploy/headers.ts +124 -23
- package/src/deploy/node-headers.ts +198 -0
- package/src/deploy/platforms/cloudflare.ts +312 -0
- package/src/deploy/platforms/index.ts +67 -0
- package/src/deploy/platforms/netlify.ts +52 -0
- package/src/deploy/platforms/node.ts +40 -0
- package/src/deploy/platforms/paths.ts +42 -0
- package/src/deploy/platforms/static.ts +29 -0
- package/src/deploy/platforms/types.ts +112 -0
- package/src/deploy/platforms/vercel.ts +193 -0
- package/src/deploy/redirects.ts +30 -18
- package/src/deploy/robots.ts +3 -3
- package/src/deploy/rss.ts +2 -2
- package/src/deploy/sitemap.ts +2 -2
- package/src/deploy/vercel-negotiation.ts +2 -2
- package/src/eval/agents.ts +32 -1
- package/src/eval/findings.ts +19 -11
- package/src/eval/report.ts +10 -2
- package/src/markdown/external-links.ts +65 -0
- package/src/markdown/include.ts +45 -27
- package/src/markdown/index.ts +34 -9
- package/src/markdown/inline-code.ts +12 -6
- package/src/markdown/relative-links.ts +324 -0
- package/src/markdown/themes.ts +3 -3
- package/src/migrate/migrate.ts +149 -0
- package/src/openapi/parse.ts +64 -16
- package/src/openapi/proxy.ts +62 -10
- package/src/openapi/references.ts +147 -147
- package/src/openapi/render-mdx.ts +32 -10
- package/src/openapi/scalar.ts +15 -13
- package/src/openapi/sentence.ts +14 -0
- package/src/openapi/source.ts +37 -21
- package/src/openapi/spec-dependency-error.ts +15 -0
- package/src/reference/asyncapi.ts +83 -0
- package/src/reference/graphql.ts +89 -0
- package/src/reference/index.ts +40 -0
- package/src/reference/openapi.ts +83 -0
- package/src/reference/options.ts +201 -0
- package/src/reference/scalar.ts +136 -0
- package/src/reference/schema.ts +88 -0
- package/src/registry/eject.ts +109 -53
- package/src/search/adapters/algolia.ts +46 -0
- package/src/search/adapters/flexsearch.ts +29 -0
- package/src/search/adapters/index.ts +39 -0
- package/src/search/adapters/mixedbread.ts +39 -0
- package/src/search/adapters/orama-cloud.ts +51 -0
- package/src/search/adapters/orama.ts +24 -0
- package/src/search/adapters/pagefind.ts +27 -0
- package/src/search/adapters/registry.ts +131 -0
- package/src/search/adapters/types.ts +46 -0
- package/src/search/adapters/typesense.ts +57 -0
- package/src/search/build.ts +8 -4
- package/src/search/documents.ts +8 -2
- package/src/search/orama-index.ts +1 -1
- package/src/search/sync/algolia.ts +12 -11
- package/src/search/sync/index.ts +35 -20
- package/src/search/sync/orama-cloud.ts +12 -9
- package/src/search/sync/typesense.ts +15 -13
- package/src/sources/contentful.ts +63 -0
- package/src/sources/custom.ts +38 -0
- package/src/sources/filesystem.ts +51 -0
- package/src/sources/github-releases.ts +52 -0
- package/src/sources/index.ts +60 -0
- package/src/sources/mdx-remote.ts +76 -0
- package/src/sources/notion.ts +63 -0
- package/src/sources/obsidian.ts +38 -0
- package/src/sources/payload.ts +60 -0
- package/src/sources/registry.ts +182 -0
- package/src/sources/sanity.ts +66 -0
- package/src/sources/shared.ts +52 -0
- package/src/sources/strapi.ts +58 -0
- package/src/theme/entry.ts +24 -2
- package/src/translate/report.ts +40 -7
- package/src/upgrade/upgrade.ts +499 -0
- package/dist/cli/chunk-0qymqwzz.js +0 -164
- package/dist/cli/chunk-0qymqwzz.js.map +0 -15
- package/dist/cli/chunk-1jefwnfs.js.map +0 -48
- package/dist/cli/chunk-2mzebbbz.js +0 -69
- package/dist/cli/chunk-2z47ypj8.js.map +0 -11
- package/dist/cli/chunk-4x36ddpw.js.map +0 -11
- package/dist/cli/chunk-5093q3n7.js +0 -68
- package/dist/cli/chunk-5093q3n7.js.map +0 -10
- package/dist/cli/chunk-5qk08vmp.js.map +0 -11
- package/dist/cli/chunk-7s8hm3b6.js +0 -5347
- package/dist/cli/chunk-7s8hm3b6.js.map +0 -58
- package/dist/cli/chunk-8cjtbafj.js.map +0 -13
- package/dist/cli/chunk-97r59kpr.js +0 -381
- package/dist/cli/chunk-97r59kpr.js.map +0 -12
- package/dist/cli/chunk-ahnw3kxw.js.map +0 -15
- package/dist/cli/chunk-b27xqwn9.js.map +0 -10
- package/dist/cli/chunk-bf6bt1xt.js +0 -185
- package/dist/cli/chunk-bf6bt1xt.js.map +0 -11
- package/dist/cli/chunk-cjtn640a.js.map +0 -10
- package/dist/cli/chunk-ct47dqpx.js.map +0 -11
- package/dist/cli/chunk-esphfr8p.js +0 -107
- package/dist/cli/chunk-esphfr8p.js.map +0 -11
- package/dist/cli/chunk-ex56aa81.js +0 -1016
- package/dist/cli/chunk-ex56aa81.js.map +0 -13
- package/dist/cli/chunk-garjf5z9.js +0 -30
- package/dist/cli/chunk-garjf5z9.js.map +0 -10
- package/dist/cli/chunk-js7saxwm.js +0 -1045
- package/dist/cli/chunk-js7saxwm.js.map +0 -22
- package/dist/cli/chunk-k79xp7av.js.map +0 -39
- package/dist/cli/chunk-ps4m1xh4.js.map +0 -15
- package/dist/cli/chunk-q4rae3bg.js +0 -60
- package/dist/cli/chunk-q4rae3bg.js.map +0 -10
- package/dist/cli/chunk-rz9jmfhz.js +0 -108
- package/dist/cli/chunk-rz9jmfhz.js.map +0 -10
- package/dist/cli/chunk-vh9w1sgp.js +0 -73
- package/dist/cli/chunk-vh9w1sgp.js.map +0 -10
- package/dist/cli/chunk-vrfp10qk.js +0 -81
- package/dist/cli/chunk-vrfp10qk.js.map +0 -10
- package/dist/cli/chunk-yg63d42r.js.map +0 -34
- package/docs/advanced/api-reference.mdx +0 -240
- package/docs/configuration/ask-ai.mdx +0 -256
- package/docs/reference/cli.mdx +0 -197
- package/skills/blume-migrate/assets/oxfmt@0.55.0.patch +0 -20
- package/src/components/content/changelog-element.ts +0 -69
- package/src/search/providers.ts +0 -91
- /package/dist/cli/{chunk-vacwm2hv.js.map → chunk-27g6wdth.js.map} +0 -0
- /package/dist/cli/{chunk-dwgcp5sm.js.map → chunk-ce574jw2.js.map} +0 -0
- /package/dist/cli/{chunk-e7f42gdj.js.map → chunk-fxypxtvm.js.map} +0 -0
- /package/dist/cli/{chunk-nn13znc2.js.map → chunk-zxcczpyx.js.map} +0 -0
|
@@ -5,111 +5,56 @@ import { dirname, join } from "pathe";
|
|
|
5
5
|
|
|
6
6
|
import type { ResolvedConfig } from "../core/schema.ts";
|
|
7
7
|
import type { ProjectContext } from "../core/types.ts";
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
/** An optional per-adapter path, keyed by the closed adapter union. */
|
|
12
|
-
type AdapterPathMap = { [A in Adapter]?: string };
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Top-level directory each server adapter writes its deploy bundle into, for
|
|
16
|
-
* `.gitignore` — the bundle is a build artifact, and the platform's own state
|
|
17
|
-
* lives alongside it (`.vercel/project.json`, `.netlify/state.json`), so the
|
|
18
|
-
* whole directory is ignored. `node` and `cloudflare` emit into `dist/`, which
|
|
19
|
-
* `blume init` already ignores.
|
|
20
|
-
*/
|
|
21
|
-
export const ADAPTER_IGNORE_DIRS: AdapterPathMap = {
|
|
22
|
-
netlify: ".netlify/",
|
|
23
|
-
vercel: ".vercel/",
|
|
24
|
-
};
|
|
8
|
+
import type { ResolvedDeployment } from "./adapters/registry.ts";
|
|
9
|
+
import { deployPlatform } from "./platforms/index.ts";
|
|
10
|
+
import { distDir } from "./platforms/paths.ts";
|
|
25
11
|
|
|
26
12
|
/**
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
* `<root>/.blume/<path>` — where the deploy platform never looks. Each value is
|
|
31
|
-
* the sub-path to surface up to the real project root.
|
|
32
|
-
*
|
|
33
|
-
* `netlify` writes a Frameworks API tree at `.netlify/v1` (its `.netlify/build`
|
|
34
|
-
* sibling is only the intermediate SSR bundle, already traced into
|
|
35
|
-
* `v1/functions`); only `v1` is moved, so the `.netlify/state.json` written by
|
|
36
|
-
* `netlify link` survives too. `node` and `cloudflare` emit into `dist/`
|
|
37
|
-
* (already at the project root), so they are absent here and need no
|
|
38
|
-
* relocation.
|
|
39
|
-
*
|
|
40
|
-
* `vercel` is absent for a different reason: it is shown the real project root
|
|
41
|
-
* up front (see `withAdapterRoot`), because its `@vercel/nft` dependency trace
|
|
42
|
-
* is rooted there too and tracing from `.blume` silently drops the function's
|
|
43
|
-
* chunks and `node_modules`. Given the right root it writes its Build Output
|
|
44
|
-
* tree straight to `<root>/.vercel/output`, so there is nothing left to move.
|
|
13
|
+
* Where a build's output lands. Every static build and most server builds
|
|
14
|
+
* write to Astro's `outDir`; the Vercel adapter writes its Build Output tree
|
|
15
|
+
* beside it instead. Each platform declares its own (see `deploy/platforms`).
|
|
45
16
|
*/
|
|
46
|
-
export const
|
|
47
|
-
|
|
17
|
+
export const deployOutputDir = (
|
|
18
|
+
config: ResolvedConfig,
|
|
19
|
+
context: ProjectContext
|
|
20
|
+
): string => {
|
|
21
|
+
const { deployment } = config;
|
|
22
|
+
return deployment.options.output === "server"
|
|
23
|
+
? deployPlatform(deployment).serverOutputDir(context)
|
|
24
|
+
: distDir(context);
|
|
48
25
|
};
|
|
49
26
|
|
|
50
|
-
/**
|
|
51
|
-
* Whether this build keeps Astro's `dist/client` + `dist/server` split and
|
|
52
|
-
* serves only the `client/` half. True for Node and Cloudflare server builds:
|
|
53
|
-
* the Node standalone server's static handler reads only `build.client`, and
|
|
54
|
-
* `@astrojs/cloudflare` declares `preserveBuildClientDir: true` and points the
|
|
55
|
-
* ASSETS binding in the `dist/server/wrangler.json` it generates at
|
|
56
|
-
* `../client` — the Worker serves that directory and nothing above it. A
|
|
57
|
-
* Cloudflare *static* build has no server dir to split against, so its
|
|
58
|
-
* `outDir` root is what ships.
|
|
59
|
-
*/
|
|
60
|
-
export const servesClientSubdir = (
|
|
61
|
-
deployment: ResolvedConfig["deployment"]
|
|
62
|
-
): boolean =>
|
|
63
|
-
deployment.output === "server" &&
|
|
64
|
-
(deployment.adapter === "node" || deployment.adapter === "cloudflare");
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* Whether the platform applies a `_headers` file to the static assets it
|
|
68
|
-
* serves. True for every static build (Netlify and Cloudflare Pages/Workers
|
|
69
|
-
* both read it) and, additionally, for a **Cloudflare server** build: the
|
|
70
|
-
* Worker serves `dist/client` through its ASSETS binding, and Workers static
|
|
71
|
-
* assets honor `_headers` from that directory exactly as Pages does.
|
|
72
|
-
*
|
|
73
|
-
* Deliberately not true for a Node server build. Node's standalone server has
|
|
74
|
-
* its own static handler with no `_headers` support, so writing the file there
|
|
75
|
-
* would be inert — and reporting a header that is not applied is worse than
|
|
76
|
-
* omitting it.
|
|
77
|
-
*
|
|
78
|
-
* A Vercel **server** build is excluded because its headers arrive through the
|
|
79
|
-
* routing config instead (see `deploy/vercel-negotiation.ts`), which
|
|
80
|
-
* `_headers` would duplicate rather than complement. A *static* build on the
|
|
81
|
-
* Vercel adapter still returns true: Vercel ignores the file, so it is inert
|
|
82
|
-
* there, matching what the old `output === "static"` gate emitted.
|
|
83
|
-
*/
|
|
84
|
-
export const readsHeaderFiles = (
|
|
85
|
-
deployment: ResolvedConfig["deployment"]
|
|
86
|
-
): boolean =>
|
|
87
|
-
deployment.output === "static" ||
|
|
88
|
-
(deployment.output === "server" && deployment.adapter === "cloudflare");
|
|
89
|
-
|
|
90
27
|
/**
|
|
91
28
|
* Directory whose contents the deploy platform serves as static files. Build
|
|
92
29
|
* artifacts (robots.txt, sitemap.xml, llms.txt, …) must be written here to be
|
|
93
|
-
* served.
|
|
94
|
-
*
|
|
95
|
-
* `build.client` dir (`dist/client/`
|
|
96
|
-
*
|
|
30
|
+
* served. A static build serves `dist/` wherever it lands; a server build
|
|
31
|
+
* serves what its platform declares — the Build Output tree's `static/` half
|
|
32
|
+
* on Vercel, Astro's `build.client` dir (`dist/client/`) on Node and
|
|
33
|
+
* Cloudflare, `dist/` on Netlify.
|
|
97
34
|
*/
|
|
98
35
|
export const deployStaticDir = (
|
|
99
36
|
config: ResolvedConfig,
|
|
100
37
|
context: ProjectContext
|
|
101
38
|
): string => {
|
|
102
|
-
const {
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
const dist = context.distDir ?? join(context.root, "dist");
|
|
107
|
-
if (servesClientSubdir(config.deployment)) {
|
|
108
|
-
return join(dist, "client");
|
|
109
|
-
}
|
|
110
|
-
return dist;
|
|
39
|
+
const { deployment } = config;
|
|
40
|
+
return deployment.options.output === "server"
|
|
41
|
+
? deployPlatform(deployment).serverStaticDir(context)
|
|
42
|
+
: distDir(context);
|
|
111
43
|
};
|
|
112
44
|
|
|
45
|
+
/**
|
|
46
|
+
* Whether the platform applies a `_headers` file to the static assets it
|
|
47
|
+
* serves — true where Netlify or Cloudflare read one, including a Cloudflare
|
|
48
|
+
* **server** build (the Worker serves `dist/client` through its ASSETS
|
|
49
|
+
* binding, which honors `_headers` exactly as Pages does), and for a static
|
|
50
|
+
* build with no named host. Deliberately false where the file would be inert:
|
|
51
|
+
* Node's standalone server has its own static handler with no `_headers`
|
|
52
|
+
* support, and Vercel's headers arrive through the routing config instead.
|
|
53
|
+
* Reporting a header that is not applied is worse than omitting it.
|
|
54
|
+
*/
|
|
55
|
+
export const readsHeaderFiles = (deployment: ResolvedDeployment): boolean =>
|
|
56
|
+
deployPlatform(deployment).readsHeaderFiles[deployment.options.output];
|
|
57
|
+
|
|
113
58
|
/** Outcome of {@link surfaceAdapterOutput}, for logging. */
|
|
114
59
|
export type SurfaceResult =
|
|
115
60
|
| { moved: false }
|
|
@@ -117,19 +62,20 @@ export type SurfaceResult =
|
|
|
117
62
|
|
|
118
63
|
/**
|
|
119
64
|
* Move a server adapter's deploy bundle out of the hidden `.blume` runtime and
|
|
120
|
-
* up to the project root, where the deploy platform
|
|
121
|
-
*
|
|
122
|
-
*
|
|
65
|
+
* up to the project root, where the deploy platform expects it. A no-op for
|
|
66
|
+
* static builds, for platforms whose bundle already lands where they look
|
|
67
|
+
* (`hiddenRuntime.surfacePath` is null), and when the expected output is
|
|
68
|
+
* absent.
|
|
123
69
|
*/
|
|
124
70
|
export const surfaceAdapterOutput = async (
|
|
125
71
|
config: ResolvedConfig,
|
|
126
72
|
context: ProjectContext
|
|
127
73
|
): Promise<SurfaceResult> => {
|
|
128
|
-
const {
|
|
129
|
-
if (output !== "server"
|
|
74
|
+
const { deployment } = config;
|
|
75
|
+
if (deployment.options.output !== "server") {
|
|
130
76
|
return { moved: false };
|
|
131
77
|
}
|
|
132
|
-
const rel =
|
|
78
|
+
const rel = deployPlatform(deployment).hiddenRuntime.surfacePath;
|
|
133
79
|
if (!rel) {
|
|
134
80
|
return { moved: false };
|
|
135
81
|
}
|
|
@@ -150,7 +96,21 @@ export const surfaceAdapterOutput = async (
|
|
|
150
96
|
// ERR_MODULE_NOT_FOUND. Verbatim, the links stay relative and internal to the
|
|
151
97
|
// bundle, surviving both this move and the platform's own (Vercel mounts the
|
|
152
98
|
// bundle at `/var/task`).
|
|
153
|
-
|
|
99
|
+
try {
|
|
100
|
+
await cp(from, to, { recursive: true, verbatimSymlinks: true });
|
|
101
|
+
} catch (error) {
|
|
102
|
+
// SAFETY: a rejected `cp` always yields a Node system error, whose `code`
|
|
103
|
+
// is the only field read here.
|
|
104
|
+
if ((error as NodeJS.ErrnoException).code !== "EPERM") {
|
|
105
|
+
throw error;
|
|
106
|
+
}
|
|
107
|
+
// `EPERM` is Windows refusing to create a symlink without Developer Mode
|
|
108
|
+
// or admin rights (the same answer `symlinkDir` handles for the deps
|
|
109
|
+
// link). Copy through the links instead: each becomes an ordinary
|
|
110
|
+
// directory holding its target's files — bigger, but self-contained.
|
|
111
|
+
await rm(to, { force: true, recursive: true });
|
|
112
|
+
await cp(from, to, { dereference: true, recursive: true });
|
|
113
|
+
}
|
|
154
114
|
await rm(from, { force: true, recursive: true });
|
|
155
115
|
return { from, moved: true, to };
|
|
156
116
|
};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { adapterDescriptorSchema } from "../../core/adapter.ts";
|
|
2
|
+
import type { DeployAdapter, DeployOptions } from "./types.ts";
|
|
3
|
+
import { deployOptionsSchema, serverRuntimeDeps } from "./types.ts";
|
|
4
|
+
|
|
5
|
+
/** The Astro adapter package a Cloudflare server build imports. */
|
|
6
|
+
export const CLOUDFLARE_ADAPTER_PACKAGE = "@astrojs/cloudflare";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Options for {@link cloudflare}: `output`, `site`, and `base`, plus any
|
|
10
|
+
* option of `@astrojs/cloudflare` forwarded verbatim (`platformProxy`,
|
|
11
|
+
* `routes`, `cloudflareModules`, …). Blume sets `prerenderEnvironment`,
|
|
12
|
+
* `imageService`, and `configPath` itself; an option you pass wins.
|
|
13
|
+
*/
|
|
14
|
+
export type CloudflareOptions = DeployOptions;
|
|
15
|
+
|
|
16
|
+
export type CloudflareAdapter = DeployAdapter<"cloudflare">;
|
|
17
|
+
|
|
18
|
+
export const cloudflareOptionsSchema = deployOptionsSchema;
|
|
19
|
+
|
|
20
|
+
export const cloudflareAdapterSchema = adapterDescriptorSchema(
|
|
21
|
+
"cloudflare",
|
|
22
|
+
cloudflareOptionsSchema
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Cloudflare Workers and Pages. A server build emits a Worker into
|
|
27
|
+
* `dist/server` (with a generated wrapper that answers `Accept:
|
|
28
|
+
* text/markdown`) and serves `dist/client` through the ASSETS binding.
|
|
29
|
+
* `@astrojs/cloudflare` is an optional peer: install it in the project
|
|
30
|
+
* (`npm install @astrojs/cloudflare`).
|
|
31
|
+
*/
|
|
32
|
+
export const cloudflare = (
|
|
33
|
+
options: CloudflareOptions = {}
|
|
34
|
+
): CloudflareAdapter => ({
|
|
35
|
+
kind: "cloudflare",
|
|
36
|
+
options,
|
|
37
|
+
requiredSecrets: [],
|
|
38
|
+
runtimeDeps: serverRuntimeDeps(options, CLOUDFLARE_ADAPTER_PACKAGE),
|
|
39
|
+
});
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deployment adapters for `blume.config.ts`:
|
|
3
|
+
*
|
|
4
|
+
* ```ts
|
|
5
|
+
* import { defineConfig } from "blume";
|
|
6
|
+
* import { vercel } from "blume/deploy";
|
|
7
|
+
*
|
|
8
|
+
* export default defineConfig({
|
|
9
|
+
* deployment: vercel({ site: "https://docs.example.com" }),
|
|
10
|
+
* });
|
|
11
|
+
* ```
|
|
12
|
+
*
|
|
13
|
+
* Naming a host switches the build to server output on that host; leave
|
|
14
|
+
* `deployment` unset (or `{ site, base }`) for a static build anywhere. Each
|
|
15
|
+
* factory returns a plain descriptor (see `core/adapter.ts`) that the schema
|
|
16
|
+
* validates; the generated `astro.config.mjs` imports the real `@astrojs/*`
|
|
17
|
+
* adapter and passes the options through verbatim.
|
|
18
|
+
*/
|
|
19
|
+
export type { AdapterDescriptor, JsonValue } from "../../core/adapter.ts";
|
|
20
|
+
export { cloudflare } from "./cloudflare.ts";
|
|
21
|
+
export type { CloudflareAdapter, CloudflareOptions } from "./cloudflare.ts";
|
|
22
|
+
export { netlify } from "./netlify.ts";
|
|
23
|
+
export type { NetlifyAdapter, NetlifyOptions } from "./netlify.ts";
|
|
24
|
+
export { node } from "./node.ts";
|
|
25
|
+
export type { NodeAdapter, NodeOptions } from "./node.ts";
|
|
26
|
+
export type {
|
|
27
|
+
AnyDeployAdapter,
|
|
28
|
+
DeployAdapterKind,
|
|
29
|
+
DeploymentInput,
|
|
30
|
+
ResolvedDeployment,
|
|
31
|
+
ResolvedDeployOptions,
|
|
32
|
+
} from "./registry.ts";
|
|
33
|
+
export type {
|
|
34
|
+
DeployAdapter,
|
|
35
|
+
DeployNamedOptions,
|
|
36
|
+
DeployOptions,
|
|
37
|
+
DeployOutput,
|
|
38
|
+
StaticDeployment,
|
|
39
|
+
} from "./types.ts";
|
|
40
|
+
export { vercel } from "./vercel.ts";
|
|
41
|
+
export type { VercelAdapter, VercelOptions } from "./vercel.ts";
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { adapterDescriptorSchema } from "../../core/adapter.ts";
|
|
2
|
+
import type { DeployAdapter, DeployOptions } from "./types.ts";
|
|
3
|
+
import { deployOptionsSchema, serverRuntimeDeps } from "./types.ts";
|
|
4
|
+
|
|
5
|
+
/** The Astro adapter package a Netlify server build imports. */
|
|
6
|
+
export const NETLIFY_ADAPTER_PACKAGE = "@astrojs/netlify";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Options for {@link netlify}: `output`, `site`, and `base`, plus any option
|
|
10
|
+
* of `@astrojs/netlify` forwarded verbatim (`edgeMiddleware`, `imageCDN`,
|
|
11
|
+
* `cacheOnDemandPages`, …).
|
|
12
|
+
*/
|
|
13
|
+
export type NetlifyOptions = DeployOptions;
|
|
14
|
+
|
|
15
|
+
export type NetlifyAdapter = DeployAdapter<"netlify">;
|
|
16
|
+
|
|
17
|
+
export const netlifyOptionsSchema = deployOptionsSchema;
|
|
18
|
+
|
|
19
|
+
export const netlifyAdapterSchema = adapterDescriptorSchema(
|
|
20
|
+
"netlify",
|
|
21
|
+
netlifyOptionsSchema
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Netlify. A server build runs on Netlify Functions from the Frameworks API
|
|
26
|
+
* tree the adapter writes to `.netlify/v1`. `@astrojs/netlify` is an optional
|
|
27
|
+
* peer: install it in the project (`npm install @astrojs/netlify`).
|
|
28
|
+
*/
|
|
29
|
+
export const netlify = (options: NetlifyOptions = {}): NetlifyAdapter => ({
|
|
30
|
+
kind: "netlify",
|
|
31
|
+
options,
|
|
32
|
+
requiredSecrets: [],
|
|
33
|
+
runtimeDeps: serverRuntimeDeps(options, NETLIFY_ADAPTER_PACKAGE),
|
|
34
|
+
});
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { adapterDescriptorSchema } from "../../core/adapter.ts";
|
|
2
|
+
import type { DeployAdapter, DeployOptions } from "./types.ts";
|
|
3
|
+
import { deployOptionsSchema, serverRuntimeDeps } from "./types.ts";
|
|
4
|
+
|
|
5
|
+
/** The Astro adapter package a Node server build imports. */
|
|
6
|
+
export const NODE_ADAPTER_PACKAGE = "@astrojs/node";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Options for {@link node}: `output`, `site`, and `base`, plus any option of
|
|
10
|
+
* `@astrojs/node` forwarded verbatim (`mode`, `host`, `port`, …). Blume
|
|
11
|
+
* defaults `mode` to `"standalone"`; an option you pass wins.
|
|
12
|
+
*/
|
|
13
|
+
export type NodeOptions = DeployOptions;
|
|
14
|
+
|
|
15
|
+
export type NodeAdapter = DeployAdapter<"node">;
|
|
16
|
+
|
|
17
|
+
export const nodeOptionsSchema = deployOptionsSchema;
|
|
18
|
+
|
|
19
|
+
export const nodeAdapterSchema = adapterDescriptorSchema(
|
|
20
|
+
"node",
|
|
21
|
+
nodeOptionsSchema
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* A self-hosted Node server (containers, VMs). The standalone server in
|
|
26
|
+
* `dist/server/entry.mjs` serves `dist/client` itself. `@astrojs/node` is one
|
|
27
|
+
* of Blume's own dependencies.
|
|
28
|
+
*/
|
|
29
|
+
export const node = (options: NodeOptions = {}): NodeAdapter => ({
|
|
30
|
+
kind: "node",
|
|
31
|
+
options,
|
|
32
|
+
requiredSecrets: [],
|
|
33
|
+
runtimeDeps: serverRuntimeDeps(options, NODE_ADAPTER_PACKAGE),
|
|
34
|
+
});
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
|
|
3
|
+
import type { AdapterDescriptor, JsonValue } from "../../core/adapter.ts";
|
|
4
|
+
import { cloudflare, cloudflareAdapterSchema } from "./cloudflare.ts";
|
|
5
|
+
import type { CloudflareAdapter } from "./cloudflare.ts";
|
|
6
|
+
import { netlify, netlifyAdapterSchema } from "./netlify.ts";
|
|
7
|
+
import type { NetlifyAdapter } from "./netlify.ts";
|
|
8
|
+
import { node, nodeAdapterSchema } from "./node.ts";
|
|
9
|
+
import type { NodeAdapter } from "./node.ts";
|
|
10
|
+
import type { DeployOutput, StaticDeployment } from "./types.ts";
|
|
11
|
+
import { vercel, vercelAdapterSchema } from "./vercel.ts";
|
|
12
|
+
import type { VercelAdapter } from "./vercel.ts";
|
|
13
|
+
|
|
14
|
+
/** Every descriptor a host adapter factory can return. */
|
|
15
|
+
export type AnyDeployAdapter =
|
|
16
|
+
| CloudflareAdapter
|
|
17
|
+
| NetlifyAdapter
|
|
18
|
+
| NodeAdapter
|
|
19
|
+
| VercelAdapter;
|
|
20
|
+
|
|
21
|
+
/** Every adapter identity, including the resolved `static` default. */
|
|
22
|
+
export type DeployAdapterKind = "static" | AnyDeployAdapter["kind"];
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* A resolved deployment's options: `output` is always present (a host adapter
|
|
26
|
+
* defaults to `server`, the static form is `static`), and anything else the
|
|
27
|
+
* adapter was given rides along for the `@astrojs/*` constructor.
|
|
28
|
+
*/
|
|
29
|
+
export type ResolvedDeployOptions = {
|
|
30
|
+
base?: string;
|
|
31
|
+
output: DeployOutput;
|
|
32
|
+
site?: string;
|
|
33
|
+
} & { [option: string]: JsonValue };
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* What `config.deployment` resolves to: the descriptor the factory returned
|
|
37
|
+
* with `output` filled in, or the `static` descriptor for the plain form.
|
|
38
|
+
*/
|
|
39
|
+
export type ResolvedDeployment = AdapterDescriptor<
|
|
40
|
+
DeployAdapterKind,
|
|
41
|
+
ResolvedDeployOptions
|
|
42
|
+
>;
|
|
43
|
+
|
|
44
|
+
/** What `blume.config.ts` accepts under `deployment`. */
|
|
45
|
+
export type DeploymentInput = AnyDeployAdapter | StaticDeployment;
|
|
46
|
+
|
|
47
|
+
const HINT =
|
|
48
|
+
'deployment takes a host adapter from "blume/deploy" — e.g. `deployment: vercel()`, `netlify({ output: "static" })`, `node({ site })` — or `{ site, base }` for a static build on any host. The 1.x `adapter`/`output` fields were removed.';
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* The static form, `{ site?, base? }`. Its discriminator is optional so the
|
|
52
|
+
* union resolves a plain object (and `{}`) to it; the 1.x object form fails
|
|
53
|
+
* here on its unrecognized `adapter`/`output` keys with the adapter hint.
|
|
54
|
+
*/
|
|
55
|
+
const staticDeploymentSchema = z.strictObject(
|
|
56
|
+
{
|
|
57
|
+
base: z.string().optional(),
|
|
58
|
+
kind: z.literal("static").optional(),
|
|
59
|
+
site: z.url().optional(),
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
error: (issue) => (issue.code === "unrecognized_keys" ? HINT : undefined),
|
|
63
|
+
}
|
|
64
|
+
);
|
|
65
|
+
|
|
66
|
+
/** The union `deployment` is validated against, before resolution. */
|
|
67
|
+
const deploymentInputSchema = z.discriminatedUnion(
|
|
68
|
+
"kind",
|
|
69
|
+
[
|
|
70
|
+
cloudflareAdapterSchema,
|
|
71
|
+
netlifyAdapterSchema,
|
|
72
|
+
nodeAdapterSchema,
|
|
73
|
+
vercelAdapterSchema,
|
|
74
|
+
staticDeploymentSchema,
|
|
75
|
+
],
|
|
76
|
+
{
|
|
77
|
+
error: (issue) =>
|
|
78
|
+
issue.code === "invalid_union" || issue.code === "invalid_type"
|
|
79
|
+
? HINT
|
|
80
|
+
: undefined,
|
|
81
|
+
}
|
|
82
|
+
);
|
|
83
|
+
|
|
84
|
+
/** A host adapter with `output` resolved: unset means a server build. */
|
|
85
|
+
const resolveHost = (adapter: AnyDeployAdapter): ResolvedDeployment => ({
|
|
86
|
+
...adapter,
|
|
87
|
+
options: { ...adapter.options, output: adapter.options.output ?? "server" },
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Validates what a factory returned (or the plain static form) and resolves
|
|
92
|
+
* it to the canonical descriptor, re-derived through the factory so a
|
|
93
|
+
* descriptor that went through JSON carries the same metadata Blume ships.
|
|
94
|
+
* `static` is internal: `kind: "static"` is admitted but never needed.
|
|
95
|
+
*/
|
|
96
|
+
export const resolvedDeploymentSchema = deploymentInputSchema.transform(
|
|
97
|
+
(value): ResolvedDeployment => {
|
|
98
|
+
switch (value.kind) {
|
|
99
|
+
case "cloudflare": {
|
|
100
|
+
return resolveHost(cloudflare(value.options));
|
|
101
|
+
}
|
|
102
|
+
case "netlify": {
|
|
103
|
+
return resolveHost(netlify(value.options));
|
|
104
|
+
}
|
|
105
|
+
case "node": {
|
|
106
|
+
return resolveHost(node(value.options));
|
|
107
|
+
}
|
|
108
|
+
case "vercel": {
|
|
109
|
+
return resolveHost(vercel(value.options));
|
|
110
|
+
}
|
|
111
|
+
default: {
|
|
112
|
+
// The static form (`kind` unset or "static") is resolved after the
|
|
113
|
+
// switch rather than in this block: Bun 1.4.0's line coverage never
|
|
114
|
+
// credits the closing brace of a switch's final block.
|
|
115
|
+
break;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
const options: ResolvedDeployOptions = { output: "static" };
|
|
119
|
+
if (value.base !== undefined) {
|
|
120
|
+
options.base = value.base;
|
|
121
|
+
}
|
|
122
|
+
if (value.site !== undefined) {
|
|
123
|
+
options.site = value.site;
|
|
124
|
+
}
|
|
125
|
+
return { kind: "static", options, requiredSecrets: [], runtimeDeps: [] };
|
|
126
|
+
}
|
|
127
|
+
);
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
|
|
3
|
+
import type { AdapterDescriptor, JsonValue } from "../../core/adapter.ts";
|
|
4
|
+
|
|
5
|
+
/** Build output mode: prerendered HTML only, or a server that can also answer requests. */
|
|
6
|
+
export type DeployOutput = "static" | "server";
|
|
7
|
+
|
|
8
|
+
/** The options every host adapter maps itself. */
|
|
9
|
+
export interface DeployNamedOptions {
|
|
10
|
+
/** Base path when the site is served from a subdirectory (`/docs`). */
|
|
11
|
+
base?: string;
|
|
12
|
+
/**
|
|
13
|
+
* Build output mode. Defaults to `server`: naming a host adapter is how a
|
|
14
|
+
* site opts into server rendering. Pass `"static"` to keep a static build
|
|
15
|
+
* on that host, with its site detection and platform files.
|
|
16
|
+
*/
|
|
17
|
+
output?: DeployOutput;
|
|
18
|
+
/**
|
|
19
|
+
* Canonical site URL. Needed for absolute links, the sitemap, and OG images;
|
|
20
|
+
* detected from the platform's env at build time when unset.
|
|
21
|
+
*/
|
|
22
|
+
site?: string;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Options for a host adapter: the named options plus anything else, forwarded
|
|
27
|
+
* verbatim to the underlying `@astrojs/*` adapter's constructor. JSON values
|
|
28
|
+
* only — the descriptor is inlined into the generated `astro.config.mjs`.
|
|
29
|
+
*/
|
|
30
|
+
export type DeployOptions = DeployNamedOptions & {
|
|
31
|
+
[option: string]: JsonValue;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* The descriptor a host adapter factory returns and `blume.config.ts` carries
|
|
36
|
+
* under `deployment`: the shared {@link AdapterDescriptor} contract, with the
|
|
37
|
+
* options a host takes. Plain data, never an Astro integration — the generated
|
|
38
|
+
* config imports the real adapter package itself.
|
|
39
|
+
*/
|
|
40
|
+
export type DeployAdapter<
|
|
41
|
+
Kind extends string,
|
|
42
|
+
Options extends DeployOptions = DeployOptions,
|
|
43
|
+
> = AdapterDescriptor<Kind, Options>;
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* A static build for any host — the form `deployment` takes when no adapter is
|
|
47
|
+
* named: `{ site, base }`, or nothing at all. `kind` is the resolved
|
|
48
|
+
* discriminator; leave it unset.
|
|
49
|
+
*/
|
|
50
|
+
export interface StaticDeployment {
|
|
51
|
+
/** Base path when the site is served from a subdirectory (`/docs`). */
|
|
52
|
+
base?: string;
|
|
53
|
+
/** The resolved kind; never needed in a config. */
|
|
54
|
+
kind?: "static";
|
|
55
|
+
/**
|
|
56
|
+
* Canonical site URL. Needed for absolute links, the sitemap, and OG images;
|
|
57
|
+
* detected from the platform's env at build time when unset.
|
|
58
|
+
*/
|
|
59
|
+
site?: string;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/** The named options' schema; every host adapter extends it with `z.json()` passthrough. */
|
|
63
|
+
export const deployOptionsSchema = z
|
|
64
|
+
.object({
|
|
65
|
+
base: z.string().optional(),
|
|
66
|
+
output: z.enum(["static", "server"]).optional(),
|
|
67
|
+
site: z.url().optional(),
|
|
68
|
+
})
|
|
69
|
+
.catchall(z.json());
|
|
70
|
+
|
|
71
|
+
const NAMED_OPTIONS = new Set(["base", "output", "site"]);
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* The options Blume does not name — what reaches the `@astrojs/*` adapter's
|
|
75
|
+
* constructor verbatim.
|
|
76
|
+
*/
|
|
77
|
+
export const deployPassthrough = (
|
|
78
|
+
options: DeployOptions
|
|
79
|
+
): Record<string, JsonValue> =>
|
|
80
|
+
Object.fromEntries(
|
|
81
|
+
Object.entries(options).filter(([key]) => !NAMED_OPTIONS.has(key))
|
|
82
|
+
);
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* The runtime dependency a host adapter declares: its `@astrojs/*` package,
|
|
86
|
+
* which the generated `astro.config.mjs` imports for a server build and
|
|
87
|
+
* nothing imports for a static one. Unset `output` means server.
|
|
88
|
+
*/
|
|
89
|
+
export const serverRuntimeDeps = (
|
|
90
|
+
options: DeployNamedOptions,
|
|
91
|
+
adapterPackage: string
|
|
92
|
+
): string[] => (options.output === "static" ? [] : [adapterPackage]);
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { adapterDescriptorSchema } from "../../core/adapter.ts";
|
|
2
|
+
import type { DeployAdapter, DeployOptions } from "./types.ts";
|
|
3
|
+
import { deployOptionsSchema, serverRuntimeDeps } from "./types.ts";
|
|
4
|
+
|
|
5
|
+
/** The Astro adapter package a Vercel server build imports. */
|
|
6
|
+
export const VERCEL_ADAPTER_PACKAGE = "@astrojs/vercel";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Options for {@link vercel}: `output`, `site`, and `base`, plus any option of
|
|
10
|
+
* `@astrojs/vercel` forwarded verbatim (`isr`, `maxDuration`, `imageService`,
|
|
11
|
+
* `webAnalytics`, …).
|
|
12
|
+
*/
|
|
13
|
+
export type VercelOptions = DeployOptions;
|
|
14
|
+
|
|
15
|
+
export type VercelAdapter = DeployAdapter<"vercel">;
|
|
16
|
+
|
|
17
|
+
export const vercelOptionsSchema = deployOptionsSchema;
|
|
18
|
+
|
|
19
|
+
export const vercelAdapterSchema = adapterDescriptorSchema(
|
|
20
|
+
"vercel",
|
|
21
|
+
vercelOptionsSchema
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Vercel. A server build writes the Build Output tree to `.vercel/output`,
|
|
26
|
+
* audits the function bundle for imports the platform's dependency trace
|
|
27
|
+
* dropped, and wires `Accept: text/markdown` negotiation into the routing
|
|
28
|
+
* config. `@astrojs/vercel` is one of Blume's own dependencies.
|
|
29
|
+
*/
|
|
30
|
+
export const vercel = (options: VercelOptions = {}): VercelAdapter => ({
|
|
31
|
+
kind: "vercel",
|
|
32
|
+
options,
|
|
33
|
+
requiredSecrets: [],
|
|
34
|
+
runtimeDeps: serverRuntimeDeps(options, VERCEL_ADAPTER_PACKAGE),
|
|
35
|
+
});
|