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,182 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
|
|
3
|
+
import { contentful, contentfulAdapterSchema } from "./contentful.ts";
|
|
4
|
+
import type { ContentfulAdapter } from "./contentful.ts";
|
|
5
|
+
import { custom, customAdapterSchema } from "./custom.ts";
|
|
6
|
+
import type { CustomAdapter } from "./custom.ts";
|
|
7
|
+
import { filesystem, filesystemAdapterSchema } from "./filesystem.ts";
|
|
8
|
+
import type { FilesystemAdapter } from "./filesystem.ts";
|
|
9
|
+
import {
|
|
10
|
+
githubReleases,
|
|
11
|
+
githubReleasesAdapterSchema,
|
|
12
|
+
} from "./github-releases.ts";
|
|
13
|
+
import type { GithubReleasesAdapter } from "./github-releases.ts";
|
|
14
|
+
import { mdxRemote, mdxRemoteAdapterSchema } from "./mdx-remote.ts";
|
|
15
|
+
import type { MdxRemoteAdapter } from "./mdx-remote.ts";
|
|
16
|
+
import { notion, notionAdapterSchema } from "./notion.ts";
|
|
17
|
+
import type { NotionAdapter } from "./notion.ts";
|
|
18
|
+
import { obsidian, obsidianAdapterSchema } from "./obsidian.ts";
|
|
19
|
+
import type { ObsidianAdapter } from "./obsidian.ts";
|
|
20
|
+
import { payload, payloadAdapterSchema } from "./payload.ts";
|
|
21
|
+
import type { PayloadAdapter } from "./payload.ts";
|
|
22
|
+
import { sanity, sanityAdapterSchema } from "./sanity.ts";
|
|
23
|
+
import type { SanityAdapter } from "./sanity.ts";
|
|
24
|
+
import { strapi, strapiAdapterSchema } from "./strapi.ts";
|
|
25
|
+
import type { StrapiAdapter } from "./strapi.ts";
|
|
26
|
+
|
|
27
|
+
/** Every descriptor a `blume/sources` factory can return. */
|
|
28
|
+
export type AnySourceAdapter =
|
|
29
|
+
| FilesystemAdapter
|
|
30
|
+
| MdxRemoteAdapter
|
|
31
|
+
| GithubReleasesAdapter
|
|
32
|
+
| SanityAdapter
|
|
33
|
+
| NotionAdapter
|
|
34
|
+
| ContentfulAdapter
|
|
35
|
+
| PayloadAdapter
|
|
36
|
+
| StrapiAdapter
|
|
37
|
+
| ObsidianAdapter
|
|
38
|
+
| CustomAdapter;
|
|
39
|
+
|
|
40
|
+
/** Every adapter identity. */
|
|
41
|
+
export type SourceAdapterKind = AnySourceAdapter["kind"];
|
|
42
|
+
|
|
43
|
+
/** One variant per public adapter factory. */
|
|
44
|
+
const adapterVariants = [
|
|
45
|
+
filesystemAdapterSchema,
|
|
46
|
+
mdxRemoteAdapterSchema,
|
|
47
|
+
githubReleasesAdapterSchema,
|
|
48
|
+
sanityAdapterSchema,
|
|
49
|
+
notionAdapterSchema,
|
|
50
|
+
contentfulAdapterSchema,
|
|
51
|
+
payloadAdapterSchema,
|
|
52
|
+
strapiAdapterSchema,
|
|
53
|
+
obsidianAdapterSchema,
|
|
54
|
+
customAdapterSchema,
|
|
55
|
+
] as const;
|
|
56
|
+
|
|
57
|
+
const sourceAdapterUnion = z.discriminatedUnion("kind", adapterVariants);
|
|
58
|
+
|
|
59
|
+
/** What a public factory returns, as the config schema accepts it. */
|
|
60
|
+
export type SourceAdapterInput = z.input<typeof sourceAdapterUnion>;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* A validated descriptor: the adapter's options with their defaults applied
|
|
64
|
+
* (a `filesystem()` entry always carries `root`/`include`/`exclude`), and the
|
|
65
|
+
* metadata lists re-derived from the factory so every consumer reads the
|
|
66
|
+
* `runtimeDeps` and `requiredSecrets` this version of Blume ships.
|
|
67
|
+
*/
|
|
68
|
+
export type ContentSourceAdapter = z.output<typeof sourceAdapterUnion>;
|
|
69
|
+
|
|
70
|
+
/** The factory name the 1.x `type` discriminator maps to, for the hint below. */
|
|
71
|
+
const FACTORY_FOR_TYPE = new Map([
|
|
72
|
+
["custom", "custom"],
|
|
73
|
+
["filesystem", "filesystem"],
|
|
74
|
+
["github-releases", "githubReleases"],
|
|
75
|
+
["mdx-remote", "mdxRemote"],
|
|
76
|
+
["notion", "notion"],
|
|
77
|
+
["obsidian", "obsidian"],
|
|
78
|
+
["sanity", "sanity"],
|
|
79
|
+
]);
|
|
80
|
+
|
|
81
|
+
const FACTORIES_HINT =
|
|
82
|
+
'content.sources takes adapters imported from "blume/sources" — filesystem({ root }), mdxRemote({ github }), githubReleases({ owner, repo }), sanity({ projectId, dataset, query }), notion({ database }), contentful({ space, contentType }), payload({ url, collection }), strapi({ url, contentType }), obsidian({ vault }), or custom(source).';
|
|
83
|
+
|
|
84
|
+
const ARRAY_HINT = `content.sources is a list of adapters — e.g. \`sources: [filesystem({ root: "docs" }), githubReleases({ owner, repo, prefix: "changelog" })]\`, imported from "blume/sources".`;
|
|
85
|
+
|
|
86
|
+
const isObjectLike = (value: unknown): value is object =>
|
|
87
|
+
typeof value === "object" && value !== null;
|
|
88
|
+
|
|
89
|
+
/** The 1.x object form's discriminator, when an entry carries one. */
|
|
90
|
+
const legacyEntrySchema = z.looseObject({ type: z.string() });
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* The message for an entry that is not a descriptor. A 1.x `{ type: "…" }`
|
|
94
|
+
* object names the factory that replaces it, so the fix is a rename plus
|
|
95
|
+
* moving the remaining fields into the call.
|
|
96
|
+
*/
|
|
97
|
+
const entryHint = (type: string | undefined): string => {
|
|
98
|
+
if (type === undefined) {
|
|
99
|
+
return FACTORIES_HINT;
|
|
100
|
+
}
|
|
101
|
+
const factory = FACTORY_FOR_TYPE.get(type);
|
|
102
|
+
if (!factory) {
|
|
103
|
+
return `${FACTORIES_HINT} The 1.x { type: "${type}" } object form was removed.`;
|
|
104
|
+
}
|
|
105
|
+
const call =
|
|
106
|
+
type === "custom"
|
|
107
|
+
? "custom(source) with the source you passed as `source`"
|
|
108
|
+
: `${factory}({ … }) with the other fields as its options`;
|
|
109
|
+
return `${FACTORIES_HINT} The 1.x { type: "${type}", … } object was removed: replace it with ${call}.`;
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Validates a descriptor a factory returned and resolves it to the canonical
|
|
114
|
+
* form, so a descriptor that went through JSON (or was edited by hand)
|
|
115
|
+
* resolves to the same metadata Blume ships.
|
|
116
|
+
*/
|
|
117
|
+
export const resolvedSourceAdapterSchema = sourceAdapterUnion.transform(
|
|
118
|
+
(value): ContentSourceAdapter => {
|
|
119
|
+
switch (value.kind) {
|
|
120
|
+
case "filesystem": {
|
|
121
|
+
return { ...filesystem(value.options), options: value.options };
|
|
122
|
+
}
|
|
123
|
+
case "github-releases": {
|
|
124
|
+
return { ...githubReleases(value.options), options: value.options };
|
|
125
|
+
}
|
|
126
|
+
case "mdx-remote": {
|
|
127
|
+
return { ...mdxRemote(value.options), options: value.options };
|
|
128
|
+
}
|
|
129
|
+
case "notion": {
|
|
130
|
+
return { ...notion(value.options), options: value.options };
|
|
131
|
+
}
|
|
132
|
+
case "contentful": {
|
|
133
|
+
return { ...contentful(value.options), options: value.options };
|
|
134
|
+
}
|
|
135
|
+
case "payload": {
|
|
136
|
+
return { ...payload(value.options), options: value.options };
|
|
137
|
+
}
|
|
138
|
+
case "strapi": {
|
|
139
|
+
return { ...strapi(value.options), options: value.options };
|
|
140
|
+
}
|
|
141
|
+
case "obsidian": {
|
|
142
|
+
return { ...obsidian(value.options), options: value.options };
|
|
143
|
+
}
|
|
144
|
+
case "sanity": {
|
|
145
|
+
return { ...sanity(value.options), options: value.options };
|
|
146
|
+
}
|
|
147
|
+
default: {
|
|
148
|
+
// Only `custom` is left, and TypeScript has narrowed `value` to it.
|
|
149
|
+
// It returns after the switch rather than from a last case block:
|
|
150
|
+
// Bun 1.4.0's line coverage never credits the closing brace of a
|
|
151
|
+
// switch's final block, which would fail the 100% gate in CI.
|
|
152
|
+
break;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return custom(value.options);
|
|
156
|
+
}
|
|
157
|
+
);
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* One `content.sources` entry. Anything without a `kind` — the 1.x `{ type }`
|
|
161
|
+
* object, a string, `null` — fails here with the factory hint instead of the
|
|
162
|
+
* union's opaque "invalid discriminator" message.
|
|
163
|
+
*/
|
|
164
|
+
const sourceEntrySchema = z
|
|
165
|
+
.custom<SourceAdapterInput>(
|
|
166
|
+
(value) => isObjectLike(value) && "kind" in value,
|
|
167
|
+
{
|
|
168
|
+
error: (issue) => {
|
|
169
|
+
const legacy = legacyEntrySchema.safeParse(issue.input);
|
|
170
|
+
return entryHint(legacy.success ? legacy.data.type : undefined);
|
|
171
|
+
},
|
|
172
|
+
}
|
|
173
|
+
)
|
|
174
|
+
.pipe(resolvedSourceAdapterSchema);
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* `content.sources`: the adapters to read, in order. A non-array (the 1.x
|
|
178
|
+
* object form, say) fails with the list hint; entry errors keep their own.
|
|
179
|
+
*/
|
|
180
|
+
export const contentSourcesSchema = z.array(sourceEntrySchema, {
|
|
181
|
+
error: (issue) => (issue.code === "invalid_type" ? ARRAY_HINT : undefined),
|
|
182
|
+
});
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
|
|
3
|
+
import type { AdapterDescriptor } from "../core/adapter.ts";
|
|
4
|
+
import { adapterDescriptorSchema } from "../core/adapter.ts";
|
|
5
|
+
import type { SharedSourceOptions } from "./shared.ts";
|
|
6
|
+
import { sharedSourceOptionsSchema } from "./shared.ts";
|
|
7
|
+
|
|
8
|
+
/** Options for {@link sanity}. */
|
|
9
|
+
export interface SanityOptions extends SharedSourceOptions {
|
|
10
|
+
/** Sanity API version (a date). Defaults to `2024-01-01`. */
|
|
11
|
+
apiVersion?: string;
|
|
12
|
+
/** Dataset name to query. */
|
|
13
|
+
dataset: string;
|
|
14
|
+
/** Field paths mapping a document onto Blume meta + body. */
|
|
15
|
+
fields?: {
|
|
16
|
+
/** Field holding the renderable body (Portable Text or Markdown). */
|
|
17
|
+
body?: string;
|
|
18
|
+
/** Field holding the page description. */
|
|
19
|
+
description?: string;
|
|
20
|
+
/** Field holding the last-modified date. */
|
|
21
|
+
lastModified?: string;
|
|
22
|
+
/** Field holding the page slug. */
|
|
23
|
+
slug?: string;
|
|
24
|
+
/** Field holding the page title. */
|
|
25
|
+
title?: string;
|
|
26
|
+
};
|
|
27
|
+
/** Sanity project id. */
|
|
28
|
+
projectId: string;
|
|
29
|
+
/** GROQ query selecting the documents to import. */
|
|
30
|
+
query: string;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export const sanityOptionsSchema = sharedSourceOptionsSchema.extend({
|
|
34
|
+
apiVersion: z.string().optional(),
|
|
35
|
+
dataset: z.string(),
|
|
36
|
+
fields: z
|
|
37
|
+
.strictObject({
|
|
38
|
+
body: z.string().optional(),
|
|
39
|
+
description: z.string().optional(),
|
|
40
|
+
lastModified: z.string().optional(),
|
|
41
|
+
slug: z.string().optional(),
|
|
42
|
+
title: z.string().optional(),
|
|
43
|
+
})
|
|
44
|
+
.optional(),
|
|
45
|
+
projectId: z.string(),
|
|
46
|
+
query: z.string(),
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
export type SanityAdapter = AdapterDescriptor<"sanity", SanityOptions>;
|
|
50
|
+
|
|
51
|
+
export const sanityAdapterSchema = adapterDescriptorSchema(
|
|
52
|
+
"sanity",
|
|
53
|
+
sanityOptionsSchema
|
|
54
|
+
);
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* A Sanity dataset queried with GROQ; Portable Text bodies become Markdown.
|
|
58
|
+
* `@sanity/client` is the declared runtime dependency, and a private dataset's
|
|
59
|
+
* read token comes from `SANITY_TOKEN`.
|
|
60
|
+
*/
|
|
61
|
+
export const sanity = (options: SanityOptions): SanityAdapter => ({
|
|
62
|
+
kind: "sanity",
|
|
63
|
+
options,
|
|
64
|
+
requiredSecrets: ["SANITY_TOKEN"],
|
|
65
|
+
runtimeDeps: ["@sanity/client"],
|
|
66
|
+
});
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
|
|
3
|
+
/** The glob every content-reading adapter defaults `include` to. */
|
|
4
|
+
export const DEFAULT_CONTENT_GLOB = "**/*.{md,mdx}";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Options every built-in content source shares. They ride on the descriptor
|
|
8
|
+
* beside the adapter's own options, so an adapter declares only what is
|
|
9
|
+
* specific to it.
|
|
10
|
+
*/
|
|
11
|
+
export interface SharedSourceOptions {
|
|
12
|
+
/**
|
|
13
|
+
* Opt-in dev polling interval (seconds) for a remote source; omit to fetch
|
|
14
|
+
* once and freeze for the session. Local sources (`filesystem()`,
|
|
15
|
+
* `obsidian()`) watch the filesystem instead and ignore it.
|
|
16
|
+
*/
|
|
17
|
+
pollInterval?: number;
|
|
18
|
+
/** Namespaces the source's routes under `/<prefix>/`. */
|
|
19
|
+
prefix?: string;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/** The schema for {@link SharedSourceOptions}; each adapter extends it. */
|
|
23
|
+
export const sharedSourceOptionsSchema = z.strictObject({
|
|
24
|
+
pollInterval: z.number().positive().optional(),
|
|
25
|
+
prefix: z.string().optional(),
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
/** Field paths mapping a CMS document onto Blume meta + body. */
|
|
29
|
+
export interface SourceFieldMap {
|
|
30
|
+
/** Field holding the renderable body (rich text, or a Markdown string). */
|
|
31
|
+
body?: string;
|
|
32
|
+
/** Field holding the page description. */
|
|
33
|
+
description?: string;
|
|
34
|
+
/** Field holding the last-modified date. */
|
|
35
|
+
lastModified?: string;
|
|
36
|
+
/** Field holding the page slug. */
|
|
37
|
+
slug?: string;
|
|
38
|
+
/** Field holding the page title. */
|
|
39
|
+
title?: string;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/** The schema for {@link SourceFieldMap}. */
|
|
43
|
+
export const sourceFieldMapSchema = z.strictObject({
|
|
44
|
+
body: z.string().optional(),
|
|
45
|
+
description: z.string().optional(),
|
|
46
|
+
lastModified: z.string().optional(),
|
|
47
|
+
slug: z.string().optional(),
|
|
48
|
+
title: z.string().optional(),
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
/** Extra query parameters a REST-backed adapter appends to its request. */
|
|
52
|
+
export const queryParamsSchema = z.record(z.string(), z.string());
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
|
|
3
|
+
import type { AdapterDescriptor } from "../core/adapter.ts";
|
|
4
|
+
import { adapterDescriptorSchema } from "../core/adapter.ts";
|
|
5
|
+
import type { SharedSourceOptions, SourceFieldMap } from "./shared.ts";
|
|
6
|
+
import {
|
|
7
|
+
queryParamsSchema,
|
|
8
|
+
sharedSourceOptionsSchema,
|
|
9
|
+
sourceFieldMapSchema,
|
|
10
|
+
} from "./shared.ts";
|
|
11
|
+
|
|
12
|
+
/** Options for {@link strapi}. */
|
|
13
|
+
export interface StrapiOptions extends SharedSourceOptions {
|
|
14
|
+
/** The content type's plural API id (`articles`). */
|
|
15
|
+
contentType: string;
|
|
16
|
+
/**
|
|
17
|
+
* Field paths mapping an entry onto Blume meta + body. Defaults to
|
|
18
|
+
* `title` / `description` / `slug` / `content` / `updatedAt`.
|
|
19
|
+
*/
|
|
20
|
+
fields?: SourceFieldMap;
|
|
21
|
+
/** Locale code to fetch, for a localized content type. */
|
|
22
|
+
locale?: string;
|
|
23
|
+
/** Extra query parameters for the request (`"filters[section][$eq]": "sdk"`). */
|
|
24
|
+
params?: Record<string, string>;
|
|
25
|
+
/** The `populate` parameter. Defaults to `*`, which fills media and relations. */
|
|
26
|
+
populate?: string;
|
|
27
|
+
/** The Strapi origin (`https://cms.acme.dev`); its REST API is at `/api`. */
|
|
28
|
+
url: string;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export const strapiOptionsSchema = sharedSourceOptionsSchema.extend({
|
|
32
|
+
contentType: z.string(),
|
|
33
|
+
fields: sourceFieldMapSchema.optional(),
|
|
34
|
+
locale: z.string().optional(),
|
|
35
|
+
params: queryParamsSchema.optional(),
|
|
36
|
+
populate: z.string().optional(),
|
|
37
|
+
url: z.string(),
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
export type StrapiAdapter = AdapterDescriptor<"strapi", StrapiOptions>;
|
|
41
|
+
|
|
42
|
+
export const strapiAdapterSchema = adapterDescriptorSchema(
|
|
43
|
+
"strapi",
|
|
44
|
+
strapiOptionsSchema
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* A Strapi content type read through its REST API; Blocks bodies become
|
|
49
|
+
* Markdown. The API token comes from `STRAPI_API_TOKEN`, and `--preview`
|
|
50
|
+
* reads drafts. Nothing to install: the adapter speaks the REST API
|
|
51
|
+
* directly.
|
|
52
|
+
*/
|
|
53
|
+
export const strapi = (options: StrapiOptions): StrapiAdapter => ({
|
|
54
|
+
kind: "strapi",
|
|
55
|
+
options,
|
|
56
|
+
requiredSecrets: ["STRAPI_API_TOKEN"],
|
|
57
|
+
runtimeDeps: [],
|
|
58
|
+
});
|
package/src/theme/entry.ts
CHANGED
|
@@ -8,6 +8,9 @@ import { CODE_PADDING_BLOCK_REM } from "./code-block-padding.ts";
|
|
|
8
8
|
*/
|
|
9
9
|
const CODE_SCROLL_INSET_REM = 0.375;
|
|
10
10
|
|
|
11
|
+
/** Lucide's arrow-up-right (the featured-link icon) as a `mask` data URI. */
|
|
12
|
+
const EXTERNAL_LINK_MASK = `url("data:image/svg+xml,${encodeURIComponent('<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><path d="M7 7h10v10M7 17L17 7"/></svg>')}")`;
|
|
13
|
+
|
|
11
14
|
interface TailwindEntryOptions {
|
|
12
15
|
/**
|
|
13
16
|
* Globs to scan for utility classes. Typically the Blume package source and
|
|
@@ -274,10 +277,13 @@ ${THEME_MAPPING}
|
|
|
274
277
|
@apply -my-1 flex flex-1 items-center gap-1.5 rounded py-1 transition-colors aria-[current=page]:text-foreground aria-[current=page]:font-semibold;
|
|
275
278
|
}
|
|
276
279
|
@utility blume-nav-heading {
|
|
277
|
-
@apply mb-
|
|
280
|
+
@apply mb-1 flex items-center gap-1.5 px-2.5 py-1.5 font-medium text-foreground text-sm;
|
|
278
281
|
}
|
|
282
|
+
/* The linked heading fills the heading's own box with negative margins, so
|
|
283
|
+
its hover/active pill is the page row's exactly (same padding and radius)
|
|
284
|
+
and an unlinked heading beside it keeps the same text position. */
|
|
279
285
|
@utility blume-nav-heading-link {
|
|
280
|
-
@apply -
|
|
286
|
+
@apply -mx-2.5 -my-1.5 flex flex-1 items-center gap-1.5 rounded-[0.65rem] px-2.5 py-1.5 text-foreground transition-colors hover:bg-muted aria-[current=page]:bg-muted;
|
|
281
287
|
}
|
|
282
288
|
|
|
283
289
|
/* Theme Tailwind Typography (prose) with Blume tokens. */
|
|
@@ -413,6 +419,22 @@ ${THEME_MAPPING}
|
|
|
413
419
|
text-decoration: none;
|
|
414
420
|
}
|
|
415
421
|
|
|
422
|
+
/* External Markdown links (markdown.externalLinks) open in a new tab and trail
|
|
423
|
+
the same Lucide arrow-up-right the featured sidebar links use, as a mask so it
|
|
424
|
+
takes the link's color. A link wrapping only an image (a badge, a logo)
|
|
425
|
+
skips the arrow. */
|
|
426
|
+
.prose :where(a[data-blume-external]:not(:has(img, svg)))::after {
|
|
427
|
+
background-color: currentColor;
|
|
428
|
+
content: "";
|
|
429
|
+
display: inline-block;
|
|
430
|
+
height: 0.75em;
|
|
431
|
+
margin-inline-start: 0.125em;
|
|
432
|
+
-webkit-mask: ${EXTERNAL_LINK_MASK} center / contain no-repeat;
|
|
433
|
+
mask: ${EXTERNAL_LINK_MASK} center / contain no-repeat;
|
|
434
|
+
opacity: 0.6;
|
|
435
|
+
width: 0.75em;
|
|
436
|
+
}
|
|
437
|
+
|
|
416
438
|
.prose :where(hr) {
|
|
417
439
|
margin: 2.5rem 0;
|
|
418
440
|
}
|
package/src/translate/report.ts
CHANGED
|
@@ -137,26 +137,57 @@ export const diagnosticLines = (diagnostics: Diagnostic[]): string[] =>
|
|
|
137
137
|
(diagnostic) => ` ${colors.yellow("⚠")} ${colors.dim(diagnostic.message)}`
|
|
138
138
|
);
|
|
139
139
|
|
|
140
|
+
/** One (source, locale) pair a `--check` run flags. */
|
|
141
|
+
interface DriftRow {
|
|
142
|
+
/** Absolute path of the default-locale source. */
|
|
143
|
+
file: string;
|
|
144
|
+
locale: string;
|
|
145
|
+
sourceRel: string;
|
|
146
|
+
status: WorkStatus;
|
|
147
|
+
}
|
|
148
|
+
|
|
140
149
|
/** Every (source, locale, status) drift row in a work list, pages then meta. */
|
|
141
|
-
const driftRows = (
|
|
142
|
-
workList: TranslateWorkList
|
|
143
|
-
): { locale: string; sourceRel: string; status: WorkStatus }[] =>
|
|
150
|
+
const driftRows = (workList: TranslateWorkList): DriftRow[] =>
|
|
144
151
|
workList.items.flatMap((item) =>
|
|
145
152
|
item.kind === "page"
|
|
146
153
|
? [
|
|
147
154
|
{
|
|
155
|
+
file: item.sourcePath,
|
|
148
156
|
locale: item.locale,
|
|
149
157
|
sourceRel: item.sourceRel,
|
|
150
158
|
status: item.status,
|
|
151
159
|
},
|
|
152
160
|
]
|
|
153
161
|
: item.entries.map((entry: MetaWorkEntry) => ({
|
|
162
|
+
file: entry.meta.file,
|
|
154
163
|
locale: item.locale,
|
|
155
164
|
sourceRel: entry.meta.sourceRel,
|
|
156
165
|
status: entry.status,
|
|
157
166
|
}))
|
|
158
167
|
);
|
|
159
168
|
|
|
169
|
+
/**
|
|
170
|
+
* Each missing or stale translation as an error diagnostic, so the `--check`
|
|
171
|
+
* JSON's `summary` counts the drift that fails the gate — the exit-code
|
|
172
|
+
* contract `blume validate/audit/eval --json` keep, where a non-zero exit
|
|
173
|
+
* always shows as a non-zero `summary.error`.
|
|
174
|
+
*/
|
|
175
|
+
const driftDiagnostics = (workList: TranslateWorkList): Diagnostic[] =>
|
|
176
|
+
driftRows(workList).map((row) => ({
|
|
177
|
+
code:
|
|
178
|
+
row.status === "missing"
|
|
179
|
+
? "BLUME_TRANSLATE_MISSING"
|
|
180
|
+
: "BLUME_TRANSLATE_STALE",
|
|
181
|
+
file: row.file,
|
|
182
|
+
message:
|
|
183
|
+
row.status === "missing"
|
|
184
|
+
? `${row.sourceRel} has no "${row.locale}" translation.`
|
|
185
|
+
: `The "${row.locale}" translation of ${row.sourceRel} is stale: its source changed since it was translated.`,
|
|
186
|
+
severity: "error",
|
|
187
|
+
suggestion:
|
|
188
|
+
"Run `blume translate --codex` (or `--claude`) to bring the translations up to date.",
|
|
189
|
+
}));
|
|
190
|
+
|
|
160
191
|
/** One line per missing/stale pair, plus dim lines for untracked adoptions. */
|
|
161
192
|
export const checkLines = (workList: TranslateWorkList): string[] => [
|
|
162
193
|
...driftRows(workList).map(
|
|
@@ -191,10 +222,12 @@ export const hasDrift = (workList: TranslateWorkList): boolean =>
|
|
|
191
222
|
|
|
192
223
|
/**
|
|
193
224
|
* The machine-readable `--check` report. The `diagnostics` + `summary` shape
|
|
194
|
-
* matches `blume validate/audit/eval --json` exactly
|
|
195
|
-
*
|
|
225
|
+
* matches `blume validate/audit/eval --json` exactly — every missing or stale
|
|
226
|
+
* translation is an error diagnostic there, so `summary.error` agrees with the
|
|
227
|
+
* exit code — with the drift report grouped by locale under `translate`.
|
|
196
228
|
*/
|
|
197
229
|
export const checkReportJson = (workList: TranslateWorkList): string => {
|
|
230
|
+
const diagnostics = [...workList.diagnostics, ...driftDiagnostics(workList)];
|
|
198
231
|
const locales: Record<
|
|
199
232
|
string,
|
|
200
233
|
{ missing: string[]; stale: string[]; untracked: string[] }
|
|
@@ -210,8 +243,8 @@ export const checkReportJson = (workList: TranslateWorkList): string => {
|
|
|
210
243
|
}
|
|
211
244
|
return `${JSON.stringify(
|
|
212
245
|
{
|
|
213
|
-
diagnostics
|
|
214
|
-
summary: countBySeverity(
|
|
246
|
+
diagnostics,
|
|
247
|
+
summary: countBySeverity(diagnostics),
|
|
215
248
|
translate: { locales, upToDate: workList.upToDate },
|
|
216
249
|
},
|
|
217
250
|
null,
|