blume 1.7.2 → 2.0.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/AGENTS.md +19 -0
- package/CHANGELOG.md +227 -0
- package/README.md +34 -21
- package/dist/cli/chunk-11j0384y.js +148 -0
- package/dist/cli/chunk-11j0384y.js.map +10 -0
- package/dist/cli/{chunk-xhtpx3ff.js → chunk-1w8dp3qb.js} +17 -16
- package/dist/cli/{chunk-xhtpx3ff.js.map → chunk-1w8dp3qb.js.map} +3 -3
- package/dist/cli/chunk-2q1dwty4.js +75 -0
- package/dist/cli/chunk-2q1dwty4.js.map +11 -0
- package/dist/cli/chunk-41za066z.js +122 -0
- package/dist/cli/chunk-41za066z.js.map +11 -0
- package/dist/cli/chunk-5a2z0198.js +133 -0
- package/dist/cli/chunk-5a2z0198.js.map +10 -0
- package/dist/cli/{chunk-9he6crym.js → chunk-6k8vp3ta.js} +25 -13
- package/dist/cli/{chunk-9he6crym.js.map → chunk-6k8vp3ta.js.map} +4 -4
- package/dist/cli/{chunk-mt76t7dj.js → chunk-79njf86q.js} +133 -54
- package/dist/cli/chunk-79njf86q.js.map +11 -0
- package/dist/cli/{chunk-3w7b2vcx.js → chunk-7ez8ny0t.js} +2 -2
- package/dist/cli/{chunk-688e0dde.js → chunk-88cpgt6h.js} +1 -1
- package/dist/cli/chunk-a9kptbw5.js +361 -0
- package/dist/cli/chunk-a9kptbw5.js.map +14 -0
- package/dist/cli/chunk-abh8yjkn.js +31 -0
- package/dist/cli/chunk-abh8yjkn.js.map +10 -0
- package/dist/cli/chunk-b5aj94ah.js +91 -0
- package/dist/cli/chunk-b5aj94ah.js.map +10 -0
- package/dist/cli/{chunk-hs3gbh8p.js → chunk-bctazmbk.js} +9 -5
- package/dist/cli/chunk-bctazmbk.js.map +10 -0
- package/dist/cli/chunk-beat36xx.js +279 -0
- package/dist/cli/chunk-beat36xx.js.map +10 -0
- package/dist/cli/chunk-bnbmcwfb.js +145 -0
- package/dist/cli/chunk-bnbmcwfb.js.map +11 -0
- package/dist/cli/{chunk-9bkjd11x.js → chunk-bw22s759.js} +15 -5
- package/dist/cli/{chunk-9bkjd11x.js.map → chunk-bw22s759.js.map} +4 -4
- package/dist/cli/chunk-by2290sx.js +39 -0
- package/dist/cli/chunk-by2290sx.js.map +10 -0
- package/dist/cli/chunk-d1tadaw7.js +79 -0
- package/dist/cli/chunk-d1tadaw7.js.map +10 -0
- package/dist/cli/{chunk-t3tj0dgr.js → chunk-d80hr03s.js} +24 -19
- package/dist/cli/chunk-d80hr03s.js.map +15 -0
- package/dist/cli/chunk-ernrthtr.js +97 -0
- package/dist/cli/chunk-ernrthtr.js.map +10 -0
- package/dist/cli/chunk-f2972sbt.js +374 -0
- package/dist/cli/chunk-f2972sbt.js.map +10 -0
- package/dist/cli/{chunk-exeeb35e.js → chunk-f7t03s3g.js} +2 -2
- package/dist/cli/{chunk-2z47ypj8.js → chunk-fa25z98p.js} +16 -3
- package/dist/cli/chunk-fa25z98p.js.map +11 -0
- package/dist/cli/{chunk-12dxjqk7.js → chunk-fh5hj5jt.js} +44 -21
- package/dist/cli/chunk-fh5hj5jt.js.map +10 -0
- package/dist/cli/{chunk-8cd8tj54.js → chunk-j8mw0za6.js} +86 -57
- package/dist/cli/chunk-j8mw0za6.js.map +35 -0
- package/dist/cli/chunk-jts8mvcz.js +106 -0
- package/dist/cli/{chunk-2mzebbbz.js.map → chunk-jts8mvcz.js.map} +6 -4
- package/dist/cli/{chunk-ejjx8znq.js → chunk-mnqj32sj.js} +505 -536
- package/dist/cli/chunk-mnqj32sj.js.map +12 -0
- package/dist/cli/{chunk-196vjxp9.js → chunk-mwt1k8n7.js} +100 -372
- package/dist/cli/chunk-mwt1k8n7.js.map +10 -0
- package/dist/cli/chunk-nk3ts2xk.js +51 -0
- package/dist/cli/chunk-nk3ts2xk.js.map +10 -0
- package/dist/cli/{chunk-n9sra6sy.js → chunk-pat2zzwc.js} +10 -14
- package/dist/cli/{chunk-n9sra6sy.js.map → chunk-pat2zzwc.js.map} +2 -2
- package/dist/cli/chunk-pnnvybbk.js +176 -0
- package/dist/cli/chunk-pnnvybbk.js.map +11 -0
- package/dist/cli/{chunk-cvky9gb2.js → chunk-sqn5t4q0.js} +81 -87
- package/dist/cli/chunk-sqn5t4q0.js.map +10 -0
- package/dist/cli/{chunk-eevwt1sc.js → chunk-tzne8qfq.js} +15 -15
- package/dist/cli/{chunk-eevwt1sc.js.map → chunk-tzne8qfq.js.map} +1 -1
- package/dist/cli/chunk-xaz13gwg.js +12449 -0
- package/dist/cli/chunk-xaz13gwg.js.map +182 -0
- package/dist/cli/chunk-y3e45rc8.js +102 -0
- package/dist/cli/chunk-y3e45rc8.js.map +10 -0
- package/dist/cli/chunk-z01ze5c1.js +261 -0
- package/dist/cli/chunk-z01ze5c1.js.map +10 -0
- package/dist/cli/{chunk-5n7t497w.js → chunk-z1f5arsg.js} +247 -755
- package/dist/cli/chunk-z1f5arsg.js.map +36 -0
- package/dist/cli/{chunk-hdm2dkd2.js → chunk-zg2gtj10.js} +1086 -2596
- package/dist/cli/chunk-zg2gtj10.js.map +35 -0
- package/dist/cli/{chunk-ppfvdcd4.js → chunk-zxccj738.js} +1 -1
- 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.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 +209 -505
- package/dist/types/core/config.d.ts +60 -34
- 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 +28 -11
- 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 +6 -2
- 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 +2291 -441
- 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 +20 -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/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 +50 -26
- package/docs/03-upgrading.mdx +351 -0
- package/docs/04-migrating.mdx +58 -0
- package/docs/08-faq.mdx +3 -3
- package/docs/advanced/blog.mdx +13 -6
- package/docs/advanced/changelog.mdx +23 -35
- package/docs/advanced/custom-pages.mdx +20 -8
- 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} +9 -8
- package/docs/cli/index.mdx +105 -0
- package/docs/cli/meta.ts +7 -0
- package/docs/{reference → cli}/translate.mdx +1 -1
- package/docs/cli/validate.mdx +41 -0
- package/docs/cli/version.mdx +40 -0
- package/docs/configuration/analytics.mdx +350 -59
- package/docs/configuration/ask-ai.mdx +176 -61
- package/docs/configuration/customization.mdx +15 -9
- package/docs/configuration/index.mdx +52 -31
- package/docs/configuration/search.mdx +75 -54
- package/docs/configuration/theming.mdx +24 -15
- package/docs/content/components.mdx +21 -5
- package/docs/{reference → content}/frontmatter.mdx +37 -1
- package/docs/content/i18n.mdx +8 -6
- package/docs/content/includes.mdx +2 -4
- package/docs/content/index.mdx +1 -1
- package/docs/content/islands.mdx +10 -5
- package/docs/content/meta.mdx +1 -1
- package/docs/content/meta.ts +1 -0
- package/docs/content/navigation.mdx +12 -7
- package/docs/content/sources.mdx +145 -50
- package/docs/content/syntax.mdx +26 -12
- package/docs/content/versioning.mdx +3 -3
- package/docs/discoverability/agent-discovery.mdx +91 -10
- package/docs/discoverability/index.mdx +5 -5
- 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 +2 -2
- 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 +21 -8
- 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 +26 -22
- package/src/ai/ai-catalog.ts +259 -0
- package/src/ai/api/handlers.ts +46 -11
- package/src/ai/api-catalog.ts +8 -8
- package/src/ai/ask-data.ts +1 -1
- package/src/ai/ask.ts +624 -100
- package/src/ai/changelog-markdown.ts +91 -0
- package/src/ai/component-markdown.ts +328 -12
- package/src/ai/index.ts +45 -0
- package/src/ai/link-headers.ts +19 -6
- package/src/ai/llms.ts +26 -15
- package/src/ai/markdown.ts +35 -5
- package/src/ai/mcp/data.ts +9 -5
- package/src/ai/mcp/discovery.ts +1 -1
- package/src/ai/openapi-components.ts +4 -1
- package/src/ai/relative-links.ts +170 -0
- package/src/ai/serializers.ts +2 -2
- package/src/ai/skills.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 +114 -345
- package/src/astro/integration.ts +2 -6
- 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 +554 -541
- 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/cli/command-meta.ts +10 -0
- package/src/cli/commands/audit.ts +39 -20
- package/src/cli/commands/build.ts +71 -314
- package/src/cli/commands/check.ts +1 -0
- package/src/cli/commands/dev.ts +40 -1
- package/src/cli/commands/doctor.ts +90 -14
- package/src/cli/commands/eject.ts +44 -7
- package/src/cli/commands/eval.ts +2 -2
- 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 +2 -2
- 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 +38 -11
- 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/islands/hooks.ts +75 -3
- 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 +83 -20
- 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 +52 -5
- package/src/components/layout/ReferenceLayout.astro +21 -12
- package/src/components/layout/RootLayout.astro +69 -43
- package/src/components/layout/Search.astro +30 -6
- package/src/components/layout/WebMcp.astro +1 -1
- package/src/components/layout/analytics-client.ts +101 -15
- 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/playground-client.ts +79 -10
- package/src/core/changelog-index.ts +24 -0
- package/src/core/component-overrides.ts +399 -154
- package/src/core/config-input.ts +212 -543
- package/src/core/config.ts +130 -41
- package/src/core/custom-pages.ts +105 -0
- package/src/core/data.ts +32 -11
- 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 +6 -2
- 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 +137 -19
- 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 +531 -721
- package/src/core/server-features.ts +8 -9
- 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 +20 -1
- package/src/core/ui-packs/ar.ts +6 -2
- package/src/core/ui-packs/bg.ts +6 -2
- package/src/core/ui-packs/bn.ts +6 -2
- package/src/core/ui-packs/ca.ts +3 -1
- package/src/core/ui-packs/cs.ts +6 -2
- package/src/core/ui-packs/da.ts +6 -2
- package/src/core/ui-packs/de.ts +6 -2
- package/src/core/ui-packs/el.ts +3 -1
- package/src/core/ui-packs/es.ts +3 -1
- package/src/core/ui-packs/fa.ts +6 -2
- package/src/core/ui-packs/fi.ts +6 -2
- package/src/core/ui-packs/fr.ts +3 -1
- package/src/core/ui-packs/he.ts +6 -2
- package/src/core/ui-packs/hi.ts +6 -2
- package/src/core/ui-packs/hr.ts +6 -2
- package/src/core/ui-packs/hu.ts +6 -2
- package/src/core/ui-packs/id.ts +6 -2
- package/src/core/ui-packs/it.ts +3 -1
- package/src/core/ui-packs/ja.ts +3 -1
- package/src/core/ui-packs/ko.ts +3 -1
- package/src/core/ui-packs/nl.ts +6 -2
- package/src/core/ui-packs/no.ts +6 -2
- package/src/core/ui-packs/pl.ts +6 -2
- package/src/core/ui-packs/pt-br.ts +3 -1
- package/src/core/ui-packs/pt.ts +3 -1
- package/src/core/ui-packs/ro.ts +6 -2
- package/src/core/ui-packs/ru.ts +6 -2
- package/src/core/ui-packs/sk.ts +6 -2
- package/src/core/ui-packs/sr.ts +6 -2
- package/src/core/ui-packs/sv.ts +6 -2
- package/src/core/ui-packs/th.ts +3 -1
- package/src/core/ui-packs/tr.ts +6 -2
- package/src/core/ui-packs/uk.ts +6 -2
- package/src/core/ui-packs/vi.ts +3 -1
- package/src/core/ui-packs/zh-tw.ts +3 -1
- package/src/core/ui-packs/zh.ts +3 -1
- 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 +67 -28
- package/src/deploy/cloudflare-negotiation.ts +179 -100
- package/src/deploy/function-bundle.ts +18 -3
- package/src/deploy/headers.ts +129 -22
- 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 +27 -4
- 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 +97 -42
- 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 +33 -7
- package/src/search/documents.ts +6 -0
- 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 +47 -2
- package/src/translate/report.ts +40 -7
- package/src/upgrade/upgrade.ts +499 -0
- package/dist/cli/chunk-12dxjqk7.js.map +0 -10
- package/dist/cli/chunk-196vjxp9.js.map +0 -13
- package/dist/cli/chunk-2mzebbbz.js +0 -69
- package/dist/cli/chunk-2z47ypj8.js.map +0 -11
- package/dist/cli/chunk-30e87n55.js +0 -108
- package/dist/cli/chunk-30e87n55.js.map +0 -10
- package/dist/cli/chunk-450a7rcr.js +0 -185
- package/dist/cli/chunk-450a7rcr.js.map +0 -11
- package/dist/cli/chunk-5n7t497w.js.map +0 -40
- package/dist/cli/chunk-61j18dwk.js +0 -5342
- package/dist/cli/chunk-61j18dwk.js.map +0 -58
- package/dist/cli/chunk-88by27n5.js +0 -17
- package/dist/cli/chunk-88by27n5.js.map +0 -10
- package/dist/cli/chunk-8cd8tj54.js.map +0 -34
- package/dist/cli/chunk-aztttvb3.js +0 -381
- package/dist/cli/chunk-aztttvb3.js.map +0 -12
- package/dist/cli/chunk-cvky9gb2.js.map +0 -11
- package/dist/cli/chunk-ejjx8znq.js.map +0 -15
- package/dist/cli/chunk-fmceyezb.js +0 -1007
- package/dist/cli/chunk-fmceyezb.js.map +0 -13
- package/dist/cli/chunk-hdm2dkd2.js.map +0 -48
- package/dist/cli/chunk-hs3gbh8p.js.map +0 -10
- package/dist/cli/chunk-jbj4qhfw.js +0 -30
- package/dist/cli/chunk-jbj4qhfw.js.map +0 -10
- package/dist/cli/chunk-mqb2ka8m.js +0 -68
- package/dist/cli/chunk-mqb2ka8m.js.map +0 -10
- package/dist/cli/chunk-mt76t7dj.js.map +0 -11
- package/dist/cli/chunk-q4rae3bg.js +0 -60
- package/dist/cli/chunk-q4rae3bg.js.map +0 -10
- package/dist/cli/chunk-ra1v2nc2.js +0 -35
- package/dist/cli/chunk-ra1v2nc2.js.map +0 -10
- package/dist/cli/chunk-t3tj0dgr.js.map +0 -15
- package/dist/cli/chunk-tqa1s0k8.js +0 -69
- package/dist/cli/chunk-tqa1s0k8.js.map +0 -11
- package/dist/cli/chunk-vh9w1sgp.js +0 -73
- package/dist/cli/chunk-vh9w1sgp.js.map +0 -10
- package/dist/cli/chunk-vkrsvbr5.js +0 -107
- package/dist/cli/chunk-vkrsvbr5.js.map +0 -11
- package/dist/cli/chunk-vrfp10qk.js +0 -81
- package/dist/cli/chunk-vrfp10qk.js.map +0 -10
- package/dist/cli/chunk-wjt80jps.js +0 -1049
- package/dist/cli/chunk-wjt80jps.js.map +0 -24
- package/docs/advanced/api-reference.mdx +0 -240
- 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-3w7b2vcx.js.map → chunk-7ez8ny0t.js.map} +0 -0
- /package/dist/cli/{chunk-688e0dde.js.map → chunk-88cpgt6h.js.map} +0 -0
- /package/dist/cli/{chunk-exeeb35e.js.map → chunk-f7t03s3g.js.map} +0 -0
- /package/dist/cli/{chunk-ppfvdcd4.js.map → chunk-zxccj738.js.map} +0 -0
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `Accept: text/markdown` content negotiation for Cloudflare server builds.
|
|
3
|
+
*
|
|
4
|
+
* Blume prerenders every content page — even in a server build (`deployment:
|
|
5
|
+
* cloudflare()`) — and on Cloudflare the ASSETS binding serves those files before
|
|
6
|
+
* the Worker script runs, so no server-side code (Astro middleware included)
|
|
7
|
+
* ever sees a content-page request. Worse, even a content-page request that
|
|
8
|
+
* does reach the Worker is answered by `@astrojs/cloudflare`'s handler
|
|
9
|
+
* straight from the ASSETS binding, ahead of `app.render` — the only place
|
|
10
|
+
* middleware runs — because `app.match` resolves a prerendered route to
|
|
11
|
+
* nothing and the handler then falls back to the binding.
|
|
12
|
+
*
|
|
13
|
+
* Negotiation therefore needs two coordinated pieces, both applied to the
|
|
14
|
+
* adapter's emitted deploy bundle after `astro build`:
|
|
15
|
+
*
|
|
16
|
+
* 1. `assets.run_worker_first` in `dist/server/wrangler.json`, claiming every
|
|
17
|
+
* path except the static files that never negotiate, so the platform
|
|
18
|
+
* routes page requests — and requests for pages that do not exist — to
|
|
19
|
+
* the Worker instead of serving the static HTML directly (see
|
|
20
|
+
* `buildRunWorkerFirstRules`).
|
|
21
|
+
* 2. A generated entry Worker that fronts the adapter's: when the client
|
|
22
|
+
* prefers `text/markdown` it serves the page's prerendered `.md` mirror
|
|
23
|
+
* from the ASSETS binding, and it delegates everything else to the Astro
|
|
24
|
+
* Worker untouched.
|
|
25
|
+
*
|
|
26
|
+
* The prerendered per-page JSON documents (`/api/docs/pages/{route}.json`)
|
|
27
|
+
* are the one prerendered surface the adapter's fallback does *not* cover.
|
|
28
|
+
* They come from a prerendered *dynamic* route, and for those Astro's
|
|
29
|
+
* `matchRequest` returns the first non-prerendered route matching the same
|
|
30
|
+
* path — on a server build that is the `/api/[...path]` catch-all, which
|
|
31
|
+
* answers with a 404 problem document; `fallbackToAssets` never runs. The
|
|
32
|
+
* static-pathname endpoints (`pages.json`, `navigation.json`) are unaffected:
|
|
33
|
+
* they sit in the manifest's asset set, which the handler serves from the
|
|
34
|
+
* binding first. So whenever a worker-first rule claims a page JSON URL, the
|
|
35
|
+
* wrapper answers it from the binding itself, keyed by the exact set of
|
|
36
|
+
* documents the build emitted. The generated rule set claims them (a miss
|
|
37
|
+
* must reach the API's `PAGE_NOT_FOUND` answer, see `STATIC_EXEMPTIONS`), and
|
|
38
|
+
* so do user-configured rules or a bare `true`.
|
|
39
|
+
*
|
|
40
|
+
* Cloudflare does not apply `_headers` to worker-first routes, so the wrapper
|
|
41
|
+
* also re-stamps what the static layer would otherwise add on the routes it
|
|
42
|
+
* takes over: the homepage agent-discovery `Link` header and the Markdown
|
|
43
|
+
* `charset=utf-8` (see `deploy/headers.ts`). The raw `.md`/`.mdx` URLs are
|
|
44
|
+
* exempted from worker-first routing with negative rules, keeping their
|
|
45
|
+
* `_headers` treatment and their zero-Worker serving path.
|
|
46
|
+
*
|
|
47
|
+
* Configured redirects are baked into the wrapper as well, and answered there
|
|
48
|
+
* with their exact configured status. On a server build Blume routes
|
|
49
|
+
* `redirects` through Astro's own config, and `@astrojs/cloudflare` turns
|
|
50
|
+
* those into `_redirects` entries carrying the exact status — but only
|
|
51
|
+
* Cloudflare's static layer reads that file, and a worker-first route never
|
|
52
|
+
* reaches it. Astro's SSR redirect handler would answer instead, and it honors
|
|
53
|
+
* the configured status only when the destination resolves to a discrete
|
|
54
|
+
* route: Blume serves every page from `[...slug]`, so it never does, and
|
|
55
|
+
* `computeRedirectStatus` defaults a GET to **301** — a permanent redirect
|
|
56
|
+
* that browsers cache indefinitely. The wrapper checking its own redirect
|
|
57
|
+
* table before delegating closes that hole at zero rule cost: unlike negative
|
|
58
|
+
* `run_worker_first` exemptions, a baked-in table spends nothing against
|
|
59
|
+
* Wrangler's 100-rule / 100-character limits, cannot collide with
|
|
60
|
+
* user-configured rules (or a bare `true`), and needs no basing gymnastics —
|
|
61
|
+
* its keys are full served URLs, which is exactly what the Worker sees.
|
|
62
|
+
* Redirects outside every worker-first rule still never invoke the Worker;
|
|
63
|
+
* the static layer serves them from `_redirects` as before.
|
|
64
|
+
*
|
|
65
|
+
* Missing pages negotiate too. Under an explicit `run_worker_first` list the
|
|
66
|
+
* platform answers every request outside the rules from the static layer —
|
|
67
|
+
* an asset miss included, as the nearest `404.html` — which is why the rules
|
|
68
|
+
* claim every path: a request for a URL no page backs then reaches the
|
|
69
|
+
* Worker, and the Astro Worker answers it with the HTML 404 shell from the
|
|
70
|
+
* binding (`not_found_handling: "404-page"`). When the client prefers
|
|
71
|
+
* Markdown the wrapper swaps that shell for the prerendered `/404.md` twin,
|
|
72
|
+
* and when it prefers JSON for the `/404.json` problem document, keeping the
|
|
73
|
+
* 404 status either way — the counterpart of the miss-phase routes in
|
|
74
|
+
* `deploy/vercel-negotiation.ts`. A raw `.md` or `.json` URL no file backs
|
|
75
|
+
* asks for the same twin implicitly, but on this platform such a request only
|
|
76
|
+
* reaches the Worker for `.json` (the generated set keeps `.md` on the static
|
|
77
|
+
* layer for its `_headers`). Only an HTML 404 is swapped, so an API endpoint's
|
|
78
|
+
* own problem document is never overwritten.
|
|
79
|
+
*/
|
|
80
|
+
import type { NotFoundVariants } from "./vercel-negotiation.ts";
|
|
81
|
+
/** Filename of the generated wrapper Worker, next to the adapter's entry. */
|
|
82
|
+
export declare const NEGOTIATION_WORKER_FILE = "blume-worker.mjs";
|
|
83
|
+
/** A value as `JSON.parse` produces it (the wrangler config's value space). */
|
|
84
|
+
type JsonValue = string | number | boolean | null | JsonValue[] | {
|
|
85
|
+
[key: string]: JsonValue;
|
|
86
|
+
};
|
|
87
|
+
/**
|
|
88
|
+
* The `run_worker_first` rules: every path under the deployment base goes
|
|
89
|
+
* through the Worker except the {@link STATIC_EXEMPTIONS}. Claiming
|
|
90
|
+
* everything — rather than only the content routes — is what lets a
|
|
91
|
+
* *missing* page negotiate: under an explicit rule list the platform answers
|
|
92
|
+
* any request outside every rule from the static layer, an asset miss
|
|
93
|
+
* included (as the nearest `404.html`), so a rule set scoped to the content
|
|
94
|
+
* routes would never let the Worker see a request for a URL that has no
|
|
95
|
+
* page. The price is a Worker hop on every page request the site does serve.
|
|
96
|
+
* On a subpath deploy the base is claimed in both request spellings.
|
|
97
|
+
*
|
|
98
|
+
* Configured redirects need no exemption from these rules: the wrapper Worker
|
|
99
|
+
* answers any it claims from its baked-in redirect table with the configured
|
|
100
|
+
* status (see the module comment).
|
|
101
|
+
*/
|
|
102
|
+
export declare const buildRunWorkerFirstRules: (base?: string) => string[];
|
|
103
|
+
/**
|
|
104
|
+
* Merge the generated rules into a user-configured `run_worker_first` (which
|
|
105
|
+
* flows into the adapter's emitted config from the project's own wrangler
|
|
106
|
+
* file). `true` already routes everything through the Worker, so it is kept
|
|
107
|
+
* as-is; an array is unioned with the generated rules and then swept for
|
|
108
|
+
* redundancy, since coverage by a glob is equivalent routing but a hard
|
|
109
|
+
* validation error at deploy time.
|
|
110
|
+
*/
|
|
111
|
+
export declare const mergeRunWorkerFirstRules: (existing: JsonValue | undefined, added: readonly string[]) => string[] | true;
|
|
112
|
+
/** A configured redirect the wrapper Worker serves itself. */
|
|
113
|
+
export interface WorkerRedirect {
|
|
114
|
+
/**
|
|
115
|
+
* Served path of the redirect, based the way the host platform matches it
|
|
116
|
+
* (see `applyBaseToPlatformRedirects`) — the full URL path the Worker sees.
|
|
117
|
+
*/
|
|
118
|
+
from: string;
|
|
119
|
+
/** Configured HTTP status (301, 302, 307, or 308). */
|
|
120
|
+
status: number;
|
|
121
|
+
/** Destination, percent-encoded into the `Location` header. */
|
|
122
|
+
to: string;
|
|
123
|
+
}
|
|
124
|
+
export interface NegotiationWorkerOptions {
|
|
125
|
+
/** Import specifier of the adapter's built entry, relative to the Worker. */
|
|
126
|
+
mainSpecifier: string;
|
|
127
|
+
/** Content routes with a raw-Markdown mirror (see `markdownRoutePaths`). */
|
|
128
|
+
routePaths: readonly string[];
|
|
129
|
+
/** Name of the assets binding the wrapper serves the `.md` mirrors from. */
|
|
130
|
+
assetsBinding: string;
|
|
131
|
+
/** `deployment.base` for subpath deploys. */
|
|
132
|
+
base?: string;
|
|
133
|
+
/** Homepage agent-discovery `Link` header (see `ai/link-headers.ts`). */
|
|
134
|
+
homeLinkHeader?: string | null;
|
|
135
|
+
/** Estimated token count of the homepage Markdown mirror. */
|
|
136
|
+
homeTokens?: number;
|
|
137
|
+
/** Configured redirects the wrapper answers with their exact status. */
|
|
138
|
+
redirects?: readonly WorkerRedirect[];
|
|
139
|
+
/**
|
|
140
|
+
* Base-less served paths of the prerendered per-page JSON documents the
|
|
141
|
+
* build emitted (see `pageJsonPath`), decoded. The wrapper answers exactly
|
|
142
|
+
* these from the assets binding, since the Astro Worker would route them to
|
|
143
|
+
* the `/api/` catch-all (see the module comment).
|
|
144
|
+
*/
|
|
145
|
+
pageJsonPaths?: readonly string[];
|
|
146
|
+
/**
|
|
147
|
+
* Which prerendered 404 twins the build emitted (`404.md`, `404.json`), so
|
|
148
|
+
* the wrapper only substitutes a twin that exists. A project that owns
|
|
149
|
+
* `/404` emits neither and keeps the HTML answer.
|
|
150
|
+
*/
|
|
151
|
+
notFound?: NotFoundVariants;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* The wrapper Worker module. The negotiation helpers are a JavaScript copy of
|
|
155
|
+
* `astro/markdown-negotiation.ts` — the deploy bundle is uploaded with
|
|
156
|
+
* `no_bundle`, so the module must be self-contained; behavioral parity with
|
|
157
|
+
* the dev middleware is enforced by `test/cloudflare-negotiation.test.ts`.
|
|
158
|
+
*/
|
|
159
|
+
export declare const buildNegotiationWorker: (options: NegotiationWorkerOptions) => string;
|
|
160
|
+
export interface WorkerNegotiation {
|
|
161
|
+
/** Updated `wrangler.json` text (worker-first rules + swapped `main`). */
|
|
162
|
+
wrangler: string;
|
|
163
|
+
/** The wrapper Worker module, to write as {@link NEGOTIATION_WORKER_FILE}. */
|
|
164
|
+
worker: string;
|
|
165
|
+
}
|
|
166
|
+
export interface WorkerNegotiationOptions extends Omit<NegotiationWorkerOptions, "assetsBinding" | "mainSpecifier"> {
|
|
167
|
+
/**
|
|
168
|
+
* The manifest content routes, based like `routePaths` — the guard that
|
|
169
|
+
* keeps the wrapper's redirect table off real pages. Defaults to
|
|
170
|
+
* `routePaths`, which also carries the synthesized homepage mirror (see
|
|
171
|
+
* `markdownRoutePaths`); passing the manifest routes keeps that synthetic
|
|
172
|
+
* `/` from blocking a configured root redirect.
|
|
173
|
+
*/
|
|
174
|
+
contentRoutePaths?: readonly string[];
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Wire the negotiation into the adapter's emitted `dist/server/wrangler.json`:
|
|
178
|
+
* point `main` at the wrapper Worker and scope `assets.run_worker_first` to
|
|
179
|
+
* the content routes (merged with any user-configured rules). Returns the
|
|
180
|
+
* updated config text plus the wrapper module, or `null` when there is
|
|
181
|
+
* nothing to do or nowhere safe to do it: no routes, unparsable config, no
|
|
182
|
+
* usable `main` or assets binding (the wrapper serves the `.md` mirrors from
|
|
183
|
+
* it), an already-swapped `main` (the original entry is unrecoverable), or
|
|
184
|
+
* user-configured rules that push the set over Wrangler's limits.
|
|
185
|
+
*
|
|
186
|
+
* The configured redirects are baked into the wrapper, which answers any the
|
|
187
|
+
* worker-first rules claim with the exact configured status (see the module
|
|
188
|
+
* comment) — whichever rules do the claiming: the generated `/*`, or the
|
|
189
|
+
* user's own (including a bare `true`). A
|
|
190
|
+
* redirect at a content route's own path is never baked: the page owns it,
|
|
191
|
+
* and answering a redirect there would take a real page off the air. When
|
|
192
|
+
* `null` is returned no rule set is written at all, so every request stays on
|
|
193
|
+
* the static layer and `_redirects` serves the configured statuses as before.
|
|
194
|
+
*/
|
|
195
|
+
export declare const injectWorkerNegotiation: (wranglerText: string, options: WorkerNegotiationOptions) => WorkerNegotiation | null;
|
|
196
|
+
export {};
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Post-build audit of a Vercel serverless function bundle.
|
|
3
|
+
*
|
|
4
|
+
* The Vercel adapter traces the server entry with `@vercel/nft` and copies
|
|
5
|
+
* every file it reaches into `.vercel/output/functions/_render.func`. A bare
|
|
6
|
+
* import the trace cannot resolve — a package that isn't reachable by walking
|
|
7
|
+
* `node_modules` up from the chunk that imports it — is dropped *silently*,
|
|
8
|
+
* and the deployed function dies on its first request with
|
|
9
|
+
* `ERR_MODULE_NOT_FOUND` (Vercel reports it as `FUNCTION_INVOCATION_FAILED`).
|
|
10
|
+
* Under an isolated linker (pnpm, Bun's `isolated` mode) that is exactly the
|
|
11
|
+
* shape of Blume's own runtime dependencies: the SSR build leaves them
|
|
12
|
+
* external, and they live under `blume`'s store directory, not the project
|
|
13
|
+
* root. Nothing before deploy surfaces it — the build is green, a warm-cache
|
|
14
|
+
* preview is green — so the bundle is re-checked here with Node's own
|
|
15
|
+
* resolution rule: a package is present when some `node_modules/<name>` on
|
|
16
|
+
* the walk from the importing chunk up to the function root exists.
|
|
17
|
+
*/
|
|
18
|
+
/** A bare package import the function bundle cannot satisfy. */
|
|
19
|
+
export interface MissingPackage {
|
|
20
|
+
/** Function-relative paths of the chunks that import the package. */
|
|
21
|
+
importers: string[];
|
|
22
|
+
name: string;
|
|
23
|
+
}
|
|
24
|
+
/** One function directory's audit result. */
|
|
25
|
+
export interface FunctionBundleAudit {
|
|
26
|
+
/** Absolute path of the `*.func` directory. */
|
|
27
|
+
dir: string;
|
|
28
|
+
missing: MissingPackage[];
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* The package a bare specifier resolves through (`@scope/name` or `name`), or
|
|
32
|
+
* null for relative/absolute paths, Node builtins, and virtual ids.
|
|
33
|
+
*/
|
|
34
|
+
export declare const packageName: (specifier: string) => string | null;
|
|
35
|
+
/**
|
|
36
|
+
* Every bare package name a module's source imports. A module the lexer
|
|
37
|
+
* rejects (an unterminated string, an invalid escape in a specifier) falls
|
|
38
|
+
* back to the textual scan rather than going unaudited.
|
|
39
|
+
*/
|
|
40
|
+
export declare const importedPackages: (source: string, name?: string) => Promise<string[]>;
|
|
41
|
+
/**
|
|
42
|
+
* Audit one function directory: read its `.vc-config.json` handler, scan
|
|
43
|
+
* every module beside the handler (the adapter's `dist/server` tree) for bare
|
|
44
|
+
* imports, and report the packages no `node_modules` on the walk up to the
|
|
45
|
+
* function root provides. A function without a handler has nothing to check.
|
|
46
|
+
*/
|
|
47
|
+
export declare const auditFunctionBundle: (funcDir: string) => Promise<MissingPackage[]>;
|
|
48
|
+
/**
|
|
49
|
+
* Audit every function in a Vercel Build Output tree (`.vercel/output`).
|
|
50
|
+
* Functions with nothing missing are omitted; an output tree without a
|
|
51
|
+
* `functions/` directory (a static build) yields nothing.
|
|
52
|
+
*/
|
|
53
|
+
export declare const auditVercelFunctions: (outputDir: string) => Promise<FunctionBundleAudit[]>;
|
|
54
|
+
/** Blume's own runtime dependency names, from its published `package.json`. */
|
|
55
|
+
export declare const blumeDependencyNames: () => Set<string>;
|
|
56
|
+
/** What a build should do about an audit: nothing, warn, or fail. */
|
|
57
|
+
export interface FunctionBundleVerdict {
|
|
58
|
+
/**
|
|
59
|
+
* A missing package is one of Blume's own dependencies — the runtime Blume
|
|
60
|
+
* generated imports it, so the function is certain to crash. Anything else
|
|
61
|
+
* (a project's own external import) is reported but left to the author.
|
|
62
|
+
*/
|
|
63
|
+
fatal: boolean;
|
|
64
|
+
message: string;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* The command that adds a dev dependency with the project's package manager
|
|
68
|
+
* (`pnpm add -D`, `npm install -D`, …), for the fix a verdict prints. The
|
|
69
|
+
* missing packages are an isolated-linker problem, so the project is often
|
|
70
|
+
* not on npm at all.
|
|
71
|
+
*/
|
|
72
|
+
export declare const addDevDependencyCommand: (root: string) => Promise<string>;
|
|
73
|
+
/**
|
|
74
|
+
* Describe a function's missing packages and how to fix them. Vercel's trace
|
|
75
|
+
* only reaches packages resolvable from the project root, so the remedy is a
|
|
76
|
+
* root-level dependency entry for each — the same mirror rule Blume's native
|
|
77
|
+
* dependencies (`sharp`, `takumi-js`) already follow — added with
|
|
78
|
+
* `addDevCommand` (see {@link addDevDependencyCommand}).
|
|
79
|
+
*/
|
|
80
|
+
export declare const functionBundleVerdict: (audit: FunctionBundleAudit, root: string, ownDependencies: ReadonlySet<string>, addDevCommand?: string) => FunctionBundleVerdict;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { ResolvedConfig } from "../core/schema.ts";
|
|
2
|
+
/**
|
|
3
|
+
* The policy a content-source SVG is served with: an opaque origin with
|
|
4
|
+
* scripts off, so an uploaded SVG that carries a `<script>` stays inert when
|
|
5
|
+
* opened directly. The endpoint sends it from the server and dev runtimes;
|
|
6
|
+
* {@link headerRules} carries it to static hosts.
|
|
7
|
+
*/
|
|
8
|
+
export declare const SVG_ASSET_POLICY = "sandbox";
|
|
9
|
+
/**
|
|
10
|
+
* One static-host header rule: a served path (a `*` glob spanning path
|
|
11
|
+
* segments, or an exact path) and the header it sets there.
|
|
12
|
+
*/
|
|
13
|
+
export interface HeaderRule {
|
|
14
|
+
name: string;
|
|
15
|
+
path: string;
|
|
16
|
+
value: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* The header rules every static host should apply, in `_headers` glob syntax.
|
|
20
|
+
* The glob carries the served prefix (`{deployment.base}{basePath}` for the
|
|
21
|
+
* Markdown mirrors, `{deployment.base}` for the root `.txt` files) so the rules
|
|
22
|
+
* still match once the site is mounted under a subpath (`/docs/*.md`); the
|
|
23
|
+
* wildcard spans path segments, so a nested route like `/docs/ja/intro.md`
|
|
24
|
+
* matches too.
|
|
25
|
+
*
|
|
26
|
+
* When a homepage `Link` header is provided (see `ai/link-headers.ts`), an
|
|
27
|
+
* exact-path rule for the root page advertises the agent-discovery resources —
|
|
28
|
+
* the static-host counterpart of the Vercel routing-config injection.
|
|
29
|
+
*/
|
|
30
|
+
export declare const headerRules: (config: ResolvedConfig, homeLinkHeader?: string | null) => HeaderRule[];
|
|
31
|
+
/**
|
|
32
|
+
* `_headers` contents: each {@link headerRules} entry as its path with an
|
|
33
|
+
* indented header line, in the two-space format Netlify and Cloudflare read.
|
|
34
|
+
*/
|
|
35
|
+
export declare const buildNetlifyHeaders: (config: ResolvedConfig, homeLinkHeader?: string | null) => string;
|
|
36
|
+
/** One entry of `vercel.json`'s `headers` array. */
|
|
37
|
+
export interface VercelHeader {
|
|
38
|
+
headers: {
|
|
39
|
+
key: string;
|
|
40
|
+
value: string;
|
|
41
|
+
}[];
|
|
42
|
+
source: string;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* The {@link headerRules} as `vercel.json` `headers` entries. Vercel reads no
|
|
46
|
+
* `_headers` file, so a static deploy of `dist/` carries the same rules here —
|
|
47
|
+
* the charset on the raw Markdown and text files, the homepage `Link` header,
|
|
48
|
+
* and the media types and CORS header of the discovery files.
|
|
49
|
+
*/
|
|
50
|
+
export declare const buildVercelHeaders: (config: ResolvedConfig, homeLinkHeader?: string | null) => VercelHeader[];
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { BlumeProject } from "../core/project-graph.ts";
|
|
2
|
+
import type { ResolvedConfig } from "../core/schema.ts";
|
|
3
|
+
import type { BuildLog } from "./platforms/types.ts";
|
|
4
|
+
/**
|
|
5
|
+
* The response headers the Node standalone server can't set itself. Its static
|
|
6
|
+
* handler (`send`) types a file by its extension alone and sends no CORS
|
|
7
|
+
* header, so the extensionless well-known files go out as
|
|
8
|
+
* `application/octet-stream` and a registry reading the discovery documents
|
|
9
|
+
* from another origin is blocked — the half of the `_headers` rules
|
|
10
|
+
* (`deploy/headers.ts`) that a Node server has no file to read from. The Markdown
|
|
11
|
+
* and text charsets need no rule here: `send` already adds `charset=UTF-8` to
|
|
12
|
+
* `text/*` types.
|
|
13
|
+
*/
|
|
14
|
+
/** The headers one exact served path (deployment base included) gets. */
|
|
15
|
+
export interface NodeHeaderRule {
|
|
16
|
+
headers: Record<string, string>;
|
|
17
|
+
path: string;
|
|
18
|
+
}
|
|
19
|
+
/** The server entry `@astrojs/node` writes, which the wrapper takes over. */
|
|
20
|
+
export declare const NODE_ENTRY_FILE = "entry.mjs";
|
|
21
|
+
/** Where Astro's own entry moves, beside the wrapper that imports it. */
|
|
22
|
+
export declare const NODE_ASTRO_ENTRY_FILE = "astro-entry.mjs";
|
|
23
|
+
/** The header rules for this config, merged per path. */
|
|
24
|
+
export declare const nodeHeaderRules: (config: ResolvedConfig) => NodeHeaderRule[];
|
|
25
|
+
/**
|
|
26
|
+
* The entry that replaces Astro's: it stamps the rules' headers on the
|
|
27
|
+
* response, then hands the request to Astro's handler. `send` leaves a
|
|
28
|
+
* Content-Type that is already set alone, so the registered media type wins.
|
|
29
|
+
*
|
|
30
|
+
* It keeps Astro's contract — the `handler`, `options`, and `startServer`
|
|
31
|
+
* exports `astro preview` and a middleware-mode host import — and its
|
|
32
|
+
* autostart: Astro's entry is imported with autostart off (the env var is read
|
|
33
|
+
* when that module evaluates, so the import has to be dynamic), and the
|
|
34
|
+
* wrapper starts the server itself with its listener in front of Astro's.
|
|
35
|
+
*/
|
|
36
|
+
export declare const nodeEntryWrapper: (rules: readonly NodeHeaderRule[]) => string;
|
|
37
|
+
/**
|
|
38
|
+
* Put the header wrapper in front of a Node server build's entry. A build
|
|
39
|
+
* with no rule (no API catalog, AI catalog, MCP server, signatures directory,
|
|
40
|
+
* or downloaded content assets) leaves Astro's entry alone.
|
|
41
|
+
*/
|
|
42
|
+
export declare const wrapNodeEntry: (project: BlumeProject, log: BuildLog) => Promise<void>;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { BlumeProject } from "../../core/project-graph.ts";
|
|
2
|
+
import type { ProjectContext } from "../../core/types.ts";
|
|
3
|
+
import type { BuildLog, DeployPlatform } from "./types.ts";
|
|
4
|
+
/**
|
|
5
|
+
* Wire `Accept: text/markdown` negotiation into a server build. The ASSETS
|
|
6
|
+
* binding serves the prerendered content pages before the Worker runs — and
|
|
7
|
+
* even a request that reaches the Worker is answered by the adapter's handler
|
|
8
|
+
* from that binding, ahead of the only place middleware runs — so the
|
|
9
|
+
* negotiation lives in a generated wrapper Worker, routed to by
|
|
10
|
+
* `assets.run_worker_first` (see `deploy/cloudflare-negotiation.ts`). Both
|
|
11
|
+
* pieces are spliced into the adapter's emitted `dist/server` bundle.
|
|
12
|
+
*/
|
|
13
|
+
export declare const emitCloudflareNegotiation: (project: BlumeProject, log: BuildLog) => Promise<void>;
|
|
14
|
+
/**
|
|
15
|
+
* Point `wrangler deploy` run from the project root at the built Worker.
|
|
16
|
+
* The adapter's Vite plugin writes its redirect beside the Astro root — the
|
|
17
|
+
* hidden `.blume` runtime, where nobody runs wrangler — and wrangler only
|
|
18
|
+
* looks in the working directory and its parents, so from the project root it
|
|
19
|
+
* finds no config and fails with "Could not detect a directory containing
|
|
20
|
+
* static files". This writes the same redirect at the project root, its paths
|
|
21
|
+
* rebased there. A user wrangler config at the project root stays compatible:
|
|
22
|
+
* wrangler accepts a redirect in the same directory's `.wrangler/deploy/`.
|
|
23
|
+
*/
|
|
24
|
+
export declare const emitCloudflareDeployConfig: (context: ProjectContext) => Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* Name the built Worker after the project when it still carries the shared
|
|
27
|
+
* runtime name. A name set in the project's own wrangler config reaches the
|
|
28
|
+
* built config instead, and is left alone.
|
|
29
|
+
*/
|
|
30
|
+
export declare const nameCloudflareWorker: (project: BlumeProject, log: BuildLog) => Promise<void>;
|
|
31
|
+
/**
|
|
32
|
+
* Cloudflare Workers and Pages. A server build emits the Worker into
|
|
33
|
+
* `dist/server` and serves `dist/client` through the ASSETS binding, which
|
|
34
|
+
* honors `_headers` from that directory exactly as Pages does — so the file
|
|
35
|
+
* applies to both output modes here. Without a configured driver the adapter
|
|
36
|
+
* force-enables KV-backed sessions and declares a `SESSION` binding that
|
|
37
|
+
* `wrangler deploy` then demands a namespace for, even though Blume never
|
|
38
|
+
* reads `Astro.session`; `session: false` opts the project out.
|
|
39
|
+
*/
|
|
40
|
+
export declare const cloudflarePlatform: DeployPlatform;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ResolvedDeployment } from "../adapters/registry.ts";
|
|
2
|
+
import type { DeployPlatform } from "./types.ts";
|
|
3
|
+
/**
|
|
4
|
+
* Every platform, in the order their env detection is tried when a build's
|
|
5
|
+
* own adapter says nothing about where it runs (a static build on Vercel
|
|
6
|
+
* still gets its site URL from `VERCEL_URL`).
|
|
7
|
+
*/
|
|
8
|
+
export declare const DEPLOY_PLATFORMS: readonly DeployPlatform[];
|
|
9
|
+
/** The behaviors behind a resolved deployment descriptor. */
|
|
10
|
+
export declare const deployPlatform: (deployment: Pick<ResolvedDeployment, "kind">) => DeployPlatform;
|
|
11
|
+
/**
|
|
12
|
+
* The site URL the platform env implies, or null. The configured adapter's
|
|
13
|
+
* own platform is asked first, then the rest in registration order, so a
|
|
14
|
+
* static build (which names no host) still picks up the URL of whichever
|
|
15
|
+
* platform it is building on.
|
|
16
|
+
*/
|
|
17
|
+
export declare const inferDeploymentSite: (deployment: Pick<ResolvedDeployment, "kind">, env: NodeJS.ProcessEnv) => string | null;
|
|
18
|
+
export type { AstroAdapterSpec, BuildLog, DeployPlatform, FinalizeBuildOptions, HiddenRuntime, PlatformEnv, RedirectFile, } from "./types.ts";
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { DeployPlatform, RedirectFile } from "./types.ts";
|
|
2
|
+
/** `_redirects`, the format Netlify and Cloudflare Pages/Workers read. */
|
|
3
|
+
export declare const REDIRECTS_FILE: RedirectFile;
|
|
4
|
+
/**
|
|
5
|
+
* Netlify. A server build runs on Netlify Functions from the Frameworks API
|
|
6
|
+
* tree the adapter writes to `.netlify/v1`, relative to the Astro root —
|
|
7
|
+
* which for Blume is the hidden `.blume` runtime, so the tree is moved up to
|
|
8
|
+
* the project root after the build (the `.netlify/build` sibling is only the
|
|
9
|
+
* intermediate SSR bundle, already traced into `v1/functions`, and moving
|
|
10
|
+
* `v1` alone keeps the `.netlify/state.json` from `netlify link` intact).
|
|
11
|
+
* Static assets are served from `dist/` either way.
|
|
12
|
+
*/
|
|
13
|
+
export declare const netlifyPlatform: DeployPlatform;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { DeployPlatform } from "./types.ts";
|
|
2
|
+
/**
|
|
3
|
+
* A self-hosted Node server. The standalone server in `dist/server` serves
|
|
4
|
+
* `dist/client` through its own static handler, which has no `_headers` or
|
|
5
|
+
* `_redirects` support — redirects are answered at request time from the
|
|
6
|
+
* Astro config, and a header file written there would be inert. The headers
|
|
7
|
+
* the discovery files need come from a wrapper around the server entry
|
|
8
|
+
* instead (`deploy/node-headers.ts`). No platform env to detect: the site URL
|
|
9
|
+
* has to be configured.
|
|
10
|
+
*/
|
|
11
|
+
export declare const nodePlatform: DeployPlatform;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { ProjectContext } from "../../core/types.ts";
|
|
2
|
+
/** Astro's build output dir: the runtime's own `distDir`, else `<root>/dist`. */
|
|
3
|
+
export declare const distDir: (context: ProjectContext) => string;
|
|
4
|
+
/**
|
|
5
|
+
* The `client/` half of a server build that keeps Astro's `dist/client` +
|
|
6
|
+
* `dist/server` split and serves only the client half: the Node standalone
|
|
7
|
+
* server's static handler reads only `build.client`, and `@astrojs/cloudflare`
|
|
8
|
+
* declares `preserveBuildClientDir: true` and points the ASSETS binding in the
|
|
9
|
+
* `dist/server/wrangler.json` it generates at `../client`.
|
|
10
|
+
*/
|
|
11
|
+
export declare const clientDir: (context: ProjectContext) => string;
|
|
12
|
+
/**
|
|
13
|
+
* The root a deploy adapter is shown, in place of the `.blume` runtime Astro
|
|
14
|
+
* actually roots at. Adapters assume `outDir` is `<root>/dist` and resolve
|
|
15
|
+
* their own output (and Vercel's dependency trace) against `root`, so the
|
|
16
|
+
* root implied by Blume's `outDir` is the one that keeps that assumption
|
|
17
|
+
* true. See `withAdapterRoot`.
|
|
18
|
+
*
|
|
19
|
+
* For a normal build that is the project root (`<project>/dist` ->
|
|
20
|
+
* `<project>`). For a relocated runtime (`blume build --isolated`) it is the
|
|
21
|
+
* runtime dir itself (`<runtime>/dist` -> `<runtime>`), keeping a verify
|
|
22
|
+
* build's adapter output self-contained instead of overwriting the real
|
|
23
|
+
* `.vercel/output`.
|
|
24
|
+
*/
|
|
25
|
+
export declare const adapterRoot: (context: ProjectContext) => string;
|
|
26
|
+
/** Prefix a bare host with `https://`; pass values that are already absolute. */
|
|
27
|
+
export declare const toSiteUrl: (value: string | undefined) => string | null;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { DeployPlatform } from "./types.ts";
|
|
2
|
+
/**
|
|
3
|
+
* A static build for an unnamed host — the default. Nothing is known about
|
|
4
|
+
* where `dist/` ends up, so the build writes every platform's redirect file
|
|
5
|
+
* (`_redirects` for Netlify and Cloudflare, `vercel.json` for Vercel, plus the
|
|
6
|
+
* manifest for everything else) and the `_headers` file; a host that reads
|
|
7
|
+
* none of them ignores them harmlessly. The site URL is still inferred from
|
|
8
|
+
* whichever platform env the build runs in.
|
|
9
|
+
*/
|
|
10
|
+
export declare const staticPlatform: DeployPlatform;
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import type { JsonValue } from "../../core/adapter.ts";
|
|
2
|
+
import type { BlumeProject } from "../../core/project-graph.ts";
|
|
3
|
+
import type { ResolvedConfig } from "../../core/schema.ts";
|
|
4
|
+
import type { ProjectContext } from "../../core/types.ts";
|
|
5
|
+
import type { DeployAdapterKind } from "../adapters/registry.ts";
|
|
6
|
+
import type { DeployOutput } from "../adapters/types.ts";
|
|
7
|
+
/**
|
|
8
|
+
* Everything Blume does differently per deployment target, keyed by the
|
|
9
|
+
* descriptor's `kind`. The descriptor a `blume/deploy` factory returns is
|
|
10
|
+
* plain data (it is inlined into the generated project), so the behavior
|
|
11
|
+
* lives here, one module per adapter, and every consumer reads it through
|
|
12
|
+
* `deployPlatform()` instead of switching on an adapter name.
|
|
13
|
+
*/
|
|
14
|
+
/** How the generated `astro.config.mjs` constructs the `@astrojs/*` adapter. */
|
|
15
|
+
export interface AstroAdapterSpec {
|
|
16
|
+
/** Top-level `defineConfig` entries the adapter needs beside itself. */
|
|
17
|
+
config: Record<string, JsonValue>;
|
|
18
|
+
/** Blume's own constructor options; the user's passthrough is spread over them. */
|
|
19
|
+
options: (context: ProjectContext) => Record<string, JsonValue>;
|
|
20
|
+
/** The package the config imports the adapter from. */
|
|
21
|
+
package: string;
|
|
22
|
+
}
|
|
23
|
+
/** Platform env detection, for inferring `site` and the audit's wording. */
|
|
24
|
+
export interface PlatformEnv {
|
|
25
|
+
/** True when the env says the build is running on this platform. */
|
|
26
|
+
detect: (env: NodeJS.ProcessEnv) => boolean;
|
|
27
|
+
/** The canonical site URL from the platform's env vars, or null. */
|
|
28
|
+
site: (env: NodeJS.ProcessEnv) => string | null;
|
|
29
|
+
}
|
|
30
|
+
type Redirect = ResolvedConfig["redirects"][number];
|
|
31
|
+
/** A redirect file a static build writes for the host to read. */
|
|
32
|
+
export interface RedirectFile {
|
|
33
|
+
build: (redirects: Redirect[]) => string;
|
|
34
|
+
name: string;
|
|
35
|
+
}
|
|
36
|
+
/** The log surface a post-build step reports through (the CLI's logger). */
|
|
37
|
+
export interface BuildLog {
|
|
38
|
+
error: (message: string) => void;
|
|
39
|
+
info: (message: string) => void;
|
|
40
|
+
success: (message: string) => void;
|
|
41
|
+
warn: (message: string) => void;
|
|
42
|
+
}
|
|
43
|
+
export interface FinalizeBuildOptions {
|
|
44
|
+
/** A `blume build --isolated` verify: check the output, publish nothing. */
|
|
45
|
+
isolated: boolean;
|
|
46
|
+
log: BuildLog;
|
|
47
|
+
project: BlumeProject;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* What exists only because the Astro project lives in the hidden `.blume/`
|
|
51
|
+
* runtime instead of the project root. RFC #114 (integration-first) puts the
|
|
52
|
+
* Astro project at the root, after which this whole group goes: the platform
|
|
53
|
+
* then reads its bundle where the adapter wrote it, and the adapter sees the
|
|
54
|
+
* real root without being told.
|
|
55
|
+
*/
|
|
56
|
+
export interface HiddenRuntime {
|
|
57
|
+
/**
|
|
58
|
+
* The top-level directory the adapter's deploy bundle lands in, for
|
|
59
|
+
* `.gitignore`. The platform's own state lives beside the bundle
|
|
60
|
+
* (`.vercel/project.json`, `.netlify/state.json`), so the directory is
|
|
61
|
+
* ignored whole. Null when the bundle lands in `dist/`, already ignored.
|
|
62
|
+
*/
|
|
63
|
+
ignoreDir: string | null;
|
|
64
|
+
/**
|
|
65
|
+
* Hand the adapter the project root (`withAdapterRoot`) instead of the
|
|
66
|
+
* runtime: for an adapter that resolves its output tree, or a dependency
|
|
67
|
+
* trace, against `root`, which for Blume is the hidden runtime.
|
|
68
|
+
*/
|
|
69
|
+
showProjectRoot: boolean;
|
|
70
|
+
/**
|
|
71
|
+
* A bundle written relative to the Astro root, to move from
|
|
72
|
+
* `<root>/.blume/<path>` up to `<root>/<path>` after the build, where the
|
|
73
|
+
* platform looks for it. Null when nothing needs moving.
|
|
74
|
+
*/
|
|
75
|
+
surfacePath: string | null;
|
|
76
|
+
}
|
|
77
|
+
export interface DeployPlatform {
|
|
78
|
+
/** The `@astrojs/*` adapter a server build uses; null for the static kind. */
|
|
79
|
+
astro: AstroAdapterSpec | null;
|
|
80
|
+
/** Env detection, or null for a target with no platform env (Node, static). */
|
|
81
|
+
env: PlatformEnv | null;
|
|
82
|
+
/**
|
|
83
|
+
* The post-build step for a server build — Vercel's function-bundle audit
|
|
84
|
+
* and negotiation routes, Cloudflare's wrapper Worker. Resolves to false
|
|
85
|
+
* when the build must not ship.
|
|
86
|
+
*/
|
|
87
|
+
finalizeBuild: ((options: FinalizeBuildOptions) => Promise<boolean>) | null;
|
|
88
|
+
hiddenRuntime: HiddenRuntime;
|
|
89
|
+
kind: DeployAdapterKind;
|
|
90
|
+
/** Whether a server build honors `Accept: text/markdown` at the content URLs. */
|
|
91
|
+
negotiatesMarkdown: boolean;
|
|
92
|
+
/**
|
|
93
|
+
* Whether the platform applies a `_headers` file to the static assets it
|
|
94
|
+
* serves, per output mode.
|
|
95
|
+
*/
|
|
96
|
+
readsHeaderFiles: Record<DeployOutput, boolean>;
|
|
97
|
+
/** The redirect files a static build writes, beside the manifest. */
|
|
98
|
+
redirectFiles: RedirectFile[];
|
|
99
|
+
/** Where a server build's deploy bundle lands. */
|
|
100
|
+
serverOutputDir: (context: ProjectContext) => string;
|
|
101
|
+
/** The directory a server build serves as static files. */
|
|
102
|
+
serverStaticDir: (context: ProjectContext) => string;
|
|
103
|
+
}
|
|
104
|
+
export {};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { BlumeProject } from "../../core/project-graph.ts";
|
|
2
|
+
import type { BuildLog, DeployPlatform, RedirectFile } from "./types.ts";
|
|
3
|
+
/** `vercel.json` with a `redirects` array, for a static deploy of `dist/`. */
|
|
4
|
+
export declare const VERCEL_JSON_FILE: RedirectFile;
|
|
5
|
+
/**
|
|
6
|
+
* Refuse to ship a function bundle that would crash at runtime: a bare import
|
|
7
|
+
* the adapter's dependency trace silently dropped (see
|
|
8
|
+
* `deploy/function-bundle.ts`). A missing package that is one of Blume's own
|
|
9
|
+
* dependencies is fatal — the generated runtime imports it, so every request
|
|
10
|
+
* would die; a project's own external import is reported as a warning and
|
|
11
|
+
* left to the author. Resolves to whether the bundle may ship.
|
|
12
|
+
*/
|
|
13
|
+
export declare const checkVercelFunctionBundles: (outputDir: string, root: string, log: BuildLog) => Promise<boolean>;
|
|
14
|
+
/**
|
|
15
|
+
* Splice `Accept: text/markdown` negotiation routes into the adapter's Build
|
|
16
|
+
* Output config, so a content-page request that prefers Markdown gets the
|
|
17
|
+
* page's prerendered `.md` mirror (content pages are prerendered even in
|
|
18
|
+
* server output, so Astro middleware never sees them — the routing layer is
|
|
19
|
+
* the only request-time hook). The adapter writes the config straight to the
|
|
20
|
+
* root it was shown.
|
|
21
|
+
*/
|
|
22
|
+
export declare const emitVercelNegotiation: (project: BlumeProject, log: BuildLog) => Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* Vercel. A server build's Build Output tree lands at `.vercel/output` — at
|
|
25
|
+
* the project root, because the adapter is handed that root up front: its
|
|
26
|
+
* `@vercel/nft` dependency trace is rooted there too, and tracing from the
|
|
27
|
+
* hidden runtime silently drops the function's chunks and `node_modules`.
|
|
28
|
+
* Static assets are served from the tree's `static/` half, so the deploy
|
|
29
|
+
* artifacts are written there; headers arrive through the routing config
|
|
30
|
+
* rather than a `_headers` file, which Vercel never reads.
|
|
31
|
+
*/
|
|
32
|
+
export declare const vercelPlatform: DeployPlatform;
|