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
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
|
|
3
|
+
import type { AdapterDescriptor, JsonValue } from "../core/adapter.ts";
|
|
4
|
+
import { adapterDescriptorSchema } from "../core/adapter.ts";
|
|
5
|
+
import type { HeadScript } from "./head.ts";
|
|
6
|
+
import { inlineJson, spaPageviews } from "./inline.ts";
|
|
7
|
+
|
|
8
|
+
/** Segment's CDN, where `segment()` loads analytics.js from when `cdn` is unset. */
|
|
9
|
+
export const SEGMENT_DEFAULT_CDN = "https://cdn.segment.com";
|
|
10
|
+
|
|
11
|
+
/** The options {@link segment} maps itself. */
|
|
12
|
+
export interface SegmentNamedOptions {
|
|
13
|
+
/**
|
|
14
|
+
* Origin of a custom domain that proxies Segment's CDN, e.g.
|
|
15
|
+
* `https://cdn.example.com`. Defaults to Segment's own.
|
|
16
|
+
*/
|
|
17
|
+
cdn?: string;
|
|
18
|
+
/** Write key of the JavaScript source. */
|
|
19
|
+
key: string;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Options for {@link segment}: the named options plus any other
|
|
24
|
+
* `analytics.load` option, forwarded verbatim (`integrations`, …). JSON
|
|
25
|
+
* values only.
|
|
26
|
+
*/
|
|
27
|
+
export type SegmentOptions = SegmentNamedOptions & {
|
|
28
|
+
[option: string]: JsonValue;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export const segmentOptionsSchema = z
|
|
32
|
+
.object({
|
|
33
|
+
cdn: z.string().min(1).optional(),
|
|
34
|
+
key: z.string().min(1),
|
|
35
|
+
})
|
|
36
|
+
.catchall(z.json());
|
|
37
|
+
|
|
38
|
+
export type SegmentAdapter = AdapterDescriptor<"segment", SegmentOptions>;
|
|
39
|
+
|
|
40
|
+
export const segmentAdapterSchema = adapterDescriptorSchema(
|
|
41
|
+
"segment",
|
|
42
|
+
segmentOptionsSchema
|
|
43
|
+
);
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Segment (Twilio Segment) analytics.js. The write key is meant for the
|
|
47
|
+
* browser — it identifies the source the SDK reports to.
|
|
48
|
+
*/
|
|
49
|
+
export const segment = (options: SegmentOptions): SegmentAdapter => ({
|
|
50
|
+
kind: "segment",
|
|
51
|
+
options,
|
|
52
|
+
requiredSecrets: [],
|
|
53
|
+
runtimeDeps: [],
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
// The SDK sends one `page()` per real page load (the snippet's own call), so
|
|
57
|
+
// client-router swaps are sent here.
|
|
58
|
+
const SEGMENT_SPA_PAGEVIEWS = spaPageviews(
|
|
59
|
+
"__blumeSegmentPath",
|
|
60
|
+
"analytics.page();"
|
|
61
|
+
);
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* The install snippet, with `key` mapped to the write key, `cdn` mapped to
|
|
65
|
+
* the script origin (and `analytics._cdn`, so the library fetches its
|
|
66
|
+
* integrations from the same place), and everything else forwarded as the
|
|
67
|
+
* load options; the object is left off when there is nothing to pass, as the
|
|
68
|
+
* snippet prints it.
|
|
69
|
+
*/
|
|
70
|
+
export const segmentHead = (options: SegmentOptions): HeadScript[] => {
|
|
71
|
+
const { cdn, key, ...load } = options;
|
|
72
|
+
const origin = (cdn ?? SEGMENT_DEFAULT_CDN).replace(/\/+$/u, "");
|
|
73
|
+
const loadCall =
|
|
74
|
+
Object.keys(load).length === 0
|
|
75
|
+
? `analytics.load(${inlineJson(key)});`
|
|
76
|
+
: `analytics.load(${inlineJson(key)},${inlineJson(load)});`;
|
|
77
|
+
const cdnAssign =
|
|
78
|
+
cdn === undefined ? "" : `analytics._cdn=${inlineJson(origin)};`;
|
|
79
|
+
return [
|
|
80
|
+
{
|
|
81
|
+
attributes: {},
|
|
82
|
+
content: `!function(){var analytics=window.analytics=window.analytics||[];if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error("Segment snippet included twice.");else{analytics.invoked=!0;analytics.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","reset","group","track","ready","alias","debug","page","once","off","on","addSourceMiddleware","addIntegrationMiddleware","setAnonymousId","addDestinationMiddleware"];analytics.factory=function(e){return function(){var t=Array.prototype.slice.call(arguments);t.unshift(e);analytics.push(t);return analytics}};for(var e=0;e<analytics.methods.length;e++){var key=analytics.methods[e];analytics[key]=analytics.factory(key)}analytics.load=function(key,e){var t=document.createElement("script");t.type="text/javascript";t.async=!0;t.src=${inlineJson(`${origin}/analytics.js/v1/`)}+encodeURIComponent(key)+"/analytics.min.js";var n=document.getElementsByTagName("script")[0];n.parentNode.insertBefore(t,n);analytics._loadOptions=e};analytics._writeKey=${inlineJson(key)};${cdnAssign}analytics.SNIPPET_VERSION="4.15.3";${loadCall}analytics.page();}}();${SEGMENT_SPA_PAGEVIEWS}`,
|
|
83
|
+
},
|
|
84
|
+
];
|
|
85
|
+
};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
|
|
3
|
+
import type { AdapterDescriptor, JsonValue } from "../core/adapter.ts";
|
|
4
|
+
import { adapterDescriptorSchema } from "../core/adapter.ts";
|
|
5
|
+
|
|
6
|
+
/** The props of `@vercel/analytics/astro` that {@link vercel} documents. */
|
|
7
|
+
export interface VercelNamedOptions {
|
|
8
|
+
/** Log every event to the console. Defaults to the component's own rule (on outside production). */
|
|
9
|
+
debug?: boolean;
|
|
10
|
+
/** Force the script's environment instead of letting it detect one. */
|
|
11
|
+
mode?: "auto" | "development" | "production";
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Options for {@link vercel}: the documented props plus any other prop of the
|
|
16
|
+
* official component, forwarded verbatim (`endpoint`, `scriptSrc`, `dsn`, …).
|
|
17
|
+
* JSON values only; `beforeSend` is a function and can't travel through
|
|
18
|
+
* config — assign `window.webAnalyticsBeforeSend` from a `script()` adapter
|
|
19
|
+
* listed before `vercel()` instead.
|
|
20
|
+
*/
|
|
21
|
+
export type VercelOptions = VercelNamedOptions & {
|
|
22
|
+
[option: string]: JsonValue;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
export const vercelOptionsSchema = z
|
|
26
|
+
.object({
|
|
27
|
+
debug: z.boolean().optional(),
|
|
28
|
+
mode: z.enum(["auto", "development", "production"]).optional(),
|
|
29
|
+
})
|
|
30
|
+
.catchall(z.json());
|
|
31
|
+
|
|
32
|
+
export type VercelAdapter = AdapterDescriptor<"vercel", VercelOptions>;
|
|
33
|
+
|
|
34
|
+
export const vercelAdapterSchema = adapterDescriptorSchema(
|
|
35
|
+
"vercel",
|
|
36
|
+
vercelOptionsSchema
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Vercel Web Analytics, rendered through the official Astro component, which
|
|
41
|
+
* injects the first-party script Vercel serves at `/_vercel/insights` once Web
|
|
42
|
+
* Analytics is enabled for the project. Needs no keys. `@vercel/analytics` is
|
|
43
|
+
* one of Blume's own dependencies, so the adapter declares no runtime dep.
|
|
44
|
+
*/
|
|
45
|
+
export const vercel = (options: VercelOptions = {}): VercelAdapter => ({
|
|
46
|
+
kind: "vercel",
|
|
47
|
+
options,
|
|
48
|
+
requiredSecrets: [],
|
|
49
|
+
runtimeDeps: [],
|
|
50
|
+
});
|
|
@@ -35,21 +35,19 @@ import type { AstroIntegration } from "astro";
|
|
|
35
35
|
* `config`; an adapter reads `root` from one or both and closes over it for its
|
|
36
36
|
* later build hooks, so overriding it there covers the whole adapter.
|
|
37
37
|
*/
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
return value.slice(0, end);
|
|
38
|
+
const directoryUrl = (value: string): URL => {
|
|
39
|
+
const url = pathToFileURL(value);
|
|
40
|
+
// URL paths always use `/`, even when the input came from a Windows path.
|
|
41
|
+
// Keep the root itself intact while collapsing any extra directory slash.
|
|
42
|
+
url.pathname = `${url.pathname.replace(/\/+$/u, "")}/`;
|
|
43
|
+
return url;
|
|
46
44
|
};
|
|
47
45
|
|
|
48
46
|
export const withAdapterRoot = (
|
|
49
47
|
integration: AstroIntegration,
|
|
50
48
|
root: string
|
|
51
49
|
): AstroIntegration => {
|
|
52
|
-
const rootUrl =
|
|
50
|
+
const rootUrl = directoryUrl(root);
|
|
53
51
|
const setup = integration.hooks["astro:config:setup"];
|
|
54
52
|
const done = integration.hooks["astro:config:done"];
|
|
55
53
|
|
|
@@ -1,19 +1,22 @@
|
|
|
1
|
+
import { isAbsolute, join, relative } from "pathe";
|
|
2
|
+
|
|
1
3
|
import type {
|
|
2
4
|
ComponentOverrideAnalysis,
|
|
3
5
|
NormalizedOverride,
|
|
4
6
|
OverrideFramework,
|
|
5
7
|
} from "../core/component-overrides.ts";
|
|
8
|
+
import type { IslandSpec } from "./islands.ts";
|
|
6
9
|
|
|
7
10
|
/**
|
|
8
|
-
* Turn
|
|
11
|
+
* Turn the project's MDX/layout overrides into the generated `components.ts`
|
|
9
12
|
* module plus per-override hydration wrappers.
|
|
10
13
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
14
|
+
* Every override is imported statically so Vite can see it: a static override
|
|
15
|
+
* imports its file directly, while a hydrated one gets a wrapper `.astro` that
|
|
16
|
+
* applies the `client:*` directive (Astro directives must be written
|
|
17
|
+
* statically). The `islands/` folder convention feeds the same plan — each
|
|
18
|
+
* discovered island is an `mdx` entry with its client mode — so a
|
|
19
|
+
* `components.ts` `mdx` entry of the same name replaces the convention island.
|
|
17
20
|
*/
|
|
18
21
|
|
|
19
22
|
export interface ComponentSlotWrapper {
|
|
@@ -22,6 +25,17 @@ export interface ComponentSlotWrapper {
|
|
|
22
25
|
name: string;
|
|
23
26
|
}
|
|
24
27
|
|
|
28
|
+
export interface ComponentSlotOptions {
|
|
29
|
+
/**
|
|
30
|
+
* The directory the generated `components.ts` is written to. Set by
|
|
31
|
+
* `blume eject`, whose output has to build from any checkout: every
|
|
32
|
+
* absolute source path is then imported relative to the file importing it.
|
|
33
|
+
* The hidden runtime leaves it unset and keeps absolute paths, since it is
|
|
34
|
+
* regenerated on every run.
|
|
35
|
+
*/
|
|
36
|
+
relativeTo?: string;
|
|
37
|
+
}
|
|
38
|
+
|
|
25
39
|
export interface ComponentSlotPlan {
|
|
26
40
|
/** Frameworks used by resolved overrides; enable the matching Astro renderer. */
|
|
27
41
|
frameworks: Set<OverrideFramework>;
|
|
@@ -30,12 +44,6 @@ export interface ComponentSlotPlan {
|
|
|
30
44
|
wrappers: ComponentSlotWrapper[];
|
|
31
45
|
}
|
|
32
46
|
|
|
33
|
-
const EMPTY_MODULE = `// Generated by Blume. Do not edit.
|
|
34
|
-
import type { ComponentOverride } from "blume/core/define-components.ts";
|
|
35
|
-
export const mdxComponents: Record<string, ComponentOverride> = {};
|
|
36
|
-
export const layoutOverrides: Record<string, ComponentOverride> = {};
|
|
37
|
-
`;
|
|
38
|
-
|
|
39
47
|
// A user-supplied attribute value interpolated into a generated .astro tag: a
|
|
40
48
|
// stray quote or newline would produce a malformed component and an opaque
|
|
41
49
|
// Astro parse error pointing at the generated file, not the user's config.
|
|
@@ -46,7 +54,7 @@ const CLIENT_LOAD = "client:load";
|
|
|
46
54
|
|
|
47
55
|
/** Astro client directive for a hydrated override. */
|
|
48
56
|
const directiveFor = (override: NormalizedOverride): string => {
|
|
49
|
-
const framework = override.source
|
|
57
|
+
const { framework } = override.source;
|
|
50
58
|
switch (override.client) {
|
|
51
59
|
case "idle": {
|
|
52
60
|
return "client:idle";
|
|
@@ -70,29 +78,60 @@ const directiveFor = (override: NormalizedOverride): string => {
|
|
|
70
78
|
}
|
|
71
79
|
};
|
|
72
80
|
|
|
81
|
+
/**
|
|
82
|
+
* The specifier a generated file in `fromDir` imports `path` by: relative to
|
|
83
|
+
* that file when `fromDir` is set and the path is absolute, so the module
|
|
84
|
+
* resolves wherever the project is checked out; unchanged otherwise (a bare
|
|
85
|
+
* package specifier, or the hidden runtime's absolute paths).
|
|
86
|
+
*/
|
|
87
|
+
export const importSpecifier = (path: string, fromDir?: string): string => {
|
|
88
|
+
if (fromDir === undefined || !isAbsolute(path)) {
|
|
89
|
+
return path;
|
|
90
|
+
}
|
|
91
|
+
const specifier = relative(fromDir, path);
|
|
92
|
+
// A path on another Windows drive has no relative form; keep it absolute.
|
|
93
|
+
if (isAbsolute(specifier) || specifier.startsWith("../")) {
|
|
94
|
+
return specifier;
|
|
95
|
+
}
|
|
96
|
+
return `./${specifier}`;
|
|
97
|
+
};
|
|
98
|
+
|
|
73
99
|
const importClause = (variable: string, name: string, path: string): string =>
|
|
74
100
|
name === "default"
|
|
75
101
|
? `import ${variable} from ${JSON.stringify(path)};`
|
|
76
102
|
: `import { ${name} as ${variable} } from ${JSON.stringify(path)};`;
|
|
77
103
|
|
|
78
|
-
/**
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
104
|
+
/**
|
|
105
|
+
* Frontmatter `Props` alias mirroring the wrapped component's own props, so
|
|
106
|
+
* `{...Astro.props}` satisfies required props under `astro check` (the spread
|
|
107
|
+
* of an untyped `Astro.props` contributes nothing to the JSX props type).
|
|
108
|
+
* `infer P extends object` rather than `Record<string, unknown>` because
|
|
109
|
+
* interfaces have no implicit index signature and would miss the narrower
|
|
110
|
+
* constraint. Non-function component types (Vue/Svelte ambient modules) fall
|
|
111
|
+
* back to an open record, keeping the untyped permissiveness they had.
|
|
112
|
+
*/
|
|
113
|
+
export const wrapperPropsType = (name: string): string =>
|
|
114
|
+
`type Props = typeof ${name} extends (
|
|
115
|
+
props: infer P extends object,
|
|
116
|
+
...rest: never[]
|
|
117
|
+
) => unknown
|
|
118
|
+
? P
|
|
119
|
+
: Record<string, unknown>;`;
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* A wrapper `.astro` that statically imports a component and hydrates it.
|
|
123
|
+
* `fromDir` is the wrapper's own directory when imports must be relative.
|
|
124
|
+
*/
|
|
125
|
+
const wrapperContent = (
|
|
126
|
+
override: NormalizedOverride,
|
|
127
|
+
fromDir: string | undefined
|
|
128
|
+
): string => `---
|
|
90
129
|
// Generated by Blume. Do not edit.
|
|
91
|
-
${
|
|
130
|
+
${importClause("Component", override.source.name, importSpecifier(override.source.path, fromDir))}
|
|
131
|
+
${wrapperPropsType("Component")}
|
|
92
132
|
---
|
|
93
133
|
<Component ${directiveFor(override)} {...Astro.props}><slot /></Component>
|
|
94
134
|
`;
|
|
95
|
-
};
|
|
96
135
|
|
|
97
136
|
/**
|
|
98
137
|
* A filesystem-safe, injective token for an override key. Distinct keys must
|
|
@@ -107,82 +146,83 @@ const sanitize = (value: string): string =>
|
|
|
107
146
|
(char) => `_${(char.codePointAt(0) ?? 0).toString(16)}_`
|
|
108
147
|
);
|
|
109
148
|
|
|
149
|
+
/** A convention island as the `mdx` override it is equivalent to. */
|
|
150
|
+
const islandOverride = (island: IslandSpec): NormalizedOverride => ({
|
|
151
|
+
client: island.client,
|
|
152
|
+
key: island.name,
|
|
153
|
+
source: { framework: island.framework, name: "default", path: island.file },
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
/** An object-literal source for a group's `key: variable` entries. */
|
|
157
|
+
const record = (entries: string[]): string =>
|
|
158
|
+
entries.length ? `{ ${entries.join(", ")} }` : "{}";
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Plan the generated components module for the `islands/` convention plus the
|
|
162
|
+
* analyzed `components.ts` (empty when the project has none). Within a group
|
|
163
|
+
* the last entry for a key wins, so `components.ts` overrides a convention
|
|
164
|
+
* island.
|
|
165
|
+
*/
|
|
110
166
|
export const planComponentSlots = (
|
|
111
|
-
|
|
112
|
-
analysis: ComponentOverrideAnalysis
|
|
167
|
+
islands: IslandSpec[],
|
|
168
|
+
analysis: ComponentOverrideAnalysis,
|
|
169
|
+
options: ComponentSlotOptions = {}
|
|
113
170
|
): ComponentSlotPlan => {
|
|
171
|
+
const { relativeTo } = options;
|
|
172
|
+
const wrapperDir =
|
|
173
|
+
relativeTo === undefined ? undefined : join(relativeTo, "component-slots");
|
|
114
174
|
const frameworks = new Set<OverrideFramework>();
|
|
115
|
-
if (!componentsFile) {
|
|
116
|
-
return { frameworks, module: EMPTY_MODULE, wrappers: [] };
|
|
117
|
-
}
|
|
118
|
-
if (!analysis) {
|
|
119
|
-
return {
|
|
120
|
-
frameworks,
|
|
121
|
-
module: `// Generated by Blume. Do not edit.
|
|
122
|
-
import overrides from ${JSON.stringify(componentsFile)};
|
|
123
|
-
export const mdxComponents = overrides.mdx ?? {};
|
|
124
|
-
export const layoutOverrides = overrides.layout ?? {};
|
|
125
|
-
`,
|
|
126
|
-
wrappers: [],
|
|
127
|
-
};
|
|
128
|
-
}
|
|
129
|
-
|
|
130
175
|
const wrappers: ComponentSlotWrapper[] = [];
|
|
131
176
|
const importLines: string[] = [];
|
|
132
|
-
// Explicit `key: Variable` map entries, per surface.
|
|
133
|
-
const mdxEntries: string[] = [];
|
|
134
|
-
const layoutEntries: string[] = [];
|
|
135
177
|
let counter = 0;
|
|
136
178
|
|
|
137
|
-
// Islands are MDX components hydrated by default, so plan them alongside `mdx`.
|
|
138
|
-
const mdxOverrides = [...analysis.mdx, ...analysis.islands];
|
|
139
|
-
|
|
140
179
|
const plan = (
|
|
141
|
-
|
|
142
|
-
group: "mdx" | "layout"
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
const
|
|
146
|
-
|
|
147
|
-
frameworks.add(source.framework);
|
|
148
|
-
}
|
|
149
|
-
// Bare identifier, not hydrated: the runtime object already has it.
|
|
150
|
-
if (override.identifier && !override.client) {
|
|
151
|
-
return;
|
|
152
|
-
}
|
|
153
|
-
if (!source) {
|
|
154
|
-
// Unresolved (already warned): leave it on the runtime object.
|
|
155
|
-
return;
|
|
180
|
+
overrides: NormalizedOverride[],
|
|
181
|
+
group: "mdx" | "layout"
|
|
182
|
+
): string[] => {
|
|
183
|
+
const byKey = new Map<string, NormalizedOverride>();
|
|
184
|
+
for (const override of overrides) {
|
|
185
|
+
byKey.set(override.key, override);
|
|
156
186
|
}
|
|
157
|
-
const
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
187
|
+
const entries: string[] = [];
|
|
188
|
+
for (const override of byKey.values()) {
|
|
189
|
+
const { source } = override;
|
|
190
|
+
if (source.framework) {
|
|
191
|
+
frameworks.add(source.framework);
|
|
192
|
+
}
|
|
193
|
+
const variable = `__blumeSlot${counter}`;
|
|
194
|
+
counter += 1;
|
|
195
|
+
if (override.client) {
|
|
196
|
+
const name = `${group}-${sanitize(override.key)}`;
|
|
197
|
+
wrappers.push({ content: wrapperContent(override, wrapperDir), name });
|
|
198
|
+
importLines.push(
|
|
199
|
+
importClause(variable, "default", `./component-slots/${name}.astro`)
|
|
200
|
+
);
|
|
201
|
+
} else {
|
|
202
|
+
importLines.push(
|
|
203
|
+
importClause(
|
|
204
|
+
variable,
|
|
205
|
+
source.name,
|
|
206
|
+
importSpecifier(source.path, relativeTo)
|
|
207
|
+
)
|
|
208
|
+
);
|
|
209
|
+
}
|
|
210
|
+
entries.push(`${JSON.stringify(override.key)}: ${variable}`);
|
|
167
211
|
}
|
|
168
|
-
entries
|
|
212
|
+
return entries;
|
|
169
213
|
};
|
|
170
214
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
}
|
|
215
|
+
const mdxEntries = plan(
|
|
216
|
+
[...islands.map(islandOverride), ...analysis.mdx],
|
|
217
|
+
"mdx"
|
|
218
|
+
);
|
|
219
|
+
const layoutEntries = plan(analysis.layout, "layout");
|
|
177
220
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
import overrides from ${JSON.stringify(componentsFile)};
|
|
183
|
-
${importLines.join("\n")}${importLines.length ? "\n" : ""}export const mdxComponents = { ...(overrides.mdx ?? {})${mdxEntries.length ? `, ${mdxEntries.join(", ")}` : ""} };
|
|
184
|
-
export const layoutOverrides = { ...(overrides.layout ?? {})${layoutEntries.length ? `, ${layoutEntries.join(", ")}` : ""} };
|
|
221
|
+
const module = `// Generated by Blume. Do not edit.
|
|
222
|
+
import type { ComponentOverride } from "blume/core/define-components.ts";
|
|
223
|
+
${importLines.join("\n")}${importLines.length ? "\n" : ""}export const mdxComponents: Record<string, ComponentOverride> = ${record(mdxEntries)};
|
|
224
|
+
export const layoutOverrides: Record<string, ComponentOverride> = ${record(layoutEntries)};
|
|
185
225
|
`;
|
|
186
226
|
|
|
187
|
-
return { frameworks, module
|
|
227
|
+
return { frameworks, module, wrappers };
|
|
188
228
|
};
|