blume 1.7.2 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +19 -0
- package/CHANGELOG.md +227 -0
- package/README.md +34 -21
- package/dist/cli/chunk-11j0384y.js +148 -0
- package/dist/cli/chunk-11j0384y.js.map +10 -0
- package/dist/cli/{chunk-xhtpx3ff.js → chunk-1w8dp3qb.js} +17 -16
- package/dist/cli/{chunk-xhtpx3ff.js.map → chunk-1w8dp3qb.js.map} +3 -3
- package/dist/cli/chunk-2q1dwty4.js +75 -0
- package/dist/cli/chunk-2q1dwty4.js.map +11 -0
- package/dist/cli/chunk-41za066z.js +122 -0
- package/dist/cli/chunk-41za066z.js.map +11 -0
- package/dist/cli/chunk-5a2z0198.js +133 -0
- package/dist/cli/chunk-5a2z0198.js.map +10 -0
- package/dist/cli/{chunk-9he6crym.js → chunk-6k8vp3ta.js} +25 -13
- package/dist/cli/{chunk-9he6crym.js.map → chunk-6k8vp3ta.js.map} +4 -4
- package/dist/cli/{chunk-mt76t7dj.js → chunk-79njf86q.js} +133 -54
- package/dist/cli/chunk-79njf86q.js.map +11 -0
- package/dist/cli/{chunk-3w7b2vcx.js → chunk-7ez8ny0t.js} +2 -2
- package/dist/cli/{chunk-688e0dde.js → chunk-88cpgt6h.js} +1 -1
- package/dist/cli/chunk-a9kptbw5.js +361 -0
- package/dist/cli/chunk-a9kptbw5.js.map +14 -0
- package/dist/cli/chunk-abh8yjkn.js +31 -0
- package/dist/cli/chunk-abh8yjkn.js.map +10 -0
- package/dist/cli/chunk-b5aj94ah.js +91 -0
- package/dist/cli/chunk-b5aj94ah.js.map +10 -0
- package/dist/cli/{chunk-hs3gbh8p.js → chunk-bctazmbk.js} +9 -5
- package/dist/cli/chunk-bctazmbk.js.map +10 -0
- package/dist/cli/chunk-beat36xx.js +279 -0
- package/dist/cli/chunk-beat36xx.js.map +10 -0
- package/dist/cli/chunk-bnbmcwfb.js +145 -0
- package/dist/cli/chunk-bnbmcwfb.js.map +11 -0
- package/dist/cli/{chunk-9bkjd11x.js → chunk-bw22s759.js} +15 -5
- package/dist/cli/{chunk-9bkjd11x.js.map → chunk-bw22s759.js.map} +4 -4
- package/dist/cli/chunk-by2290sx.js +39 -0
- package/dist/cli/chunk-by2290sx.js.map +10 -0
- package/dist/cli/chunk-d1tadaw7.js +79 -0
- package/dist/cli/chunk-d1tadaw7.js.map +10 -0
- package/dist/cli/{chunk-t3tj0dgr.js → chunk-d80hr03s.js} +24 -19
- package/dist/cli/chunk-d80hr03s.js.map +15 -0
- package/dist/cli/chunk-ernrthtr.js +97 -0
- package/dist/cli/chunk-ernrthtr.js.map +10 -0
- package/dist/cli/chunk-f2972sbt.js +374 -0
- package/dist/cli/chunk-f2972sbt.js.map +10 -0
- package/dist/cli/{chunk-exeeb35e.js → chunk-f7t03s3g.js} +2 -2
- package/dist/cli/{chunk-2z47ypj8.js → chunk-fa25z98p.js} +16 -3
- package/dist/cli/chunk-fa25z98p.js.map +11 -0
- package/dist/cli/{chunk-12dxjqk7.js → chunk-fh5hj5jt.js} +44 -21
- package/dist/cli/chunk-fh5hj5jt.js.map +10 -0
- package/dist/cli/{chunk-8cd8tj54.js → chunk-j8mw0za6.js} +86 -57
- package/dist/cli/chunk-j8mw0za6.js.map +35 -0
- package/dist/cli/chunk-jts8mvcz.js +106 -0
- package/dist/cli/{chunk-2mzebbbz.js.map → chunk-jts8mvcz.js.map} +6 -4
- package/dist/cli/{chunk-ejjx8znq.js → chunk-mnqj32sj.js} +505 -536
- package/dist/cli/chunk-mnqj32sj.js.map +12 -0
- package/dist/cli/{chunk-196vjxp9.js → chunk-mwt1k8n7.js} +100 -372
- package/dist/cli/chunk-mwt1k8n7.js.map +10 -0
- package/dist/cli/chunk-nk3ts2xk.js +51 -0
- package/dist/cli/chunk-nk3ts2xk.js.map +10 -0
- package/dist/cli/{chunk-n9sra6sy.js → chunk-pat2zzwc.js} +10 -14
- package/dist/cli/{chunk-n9sra6sy.js.map → chunk-pat2zzwc.js.map} +2 -2
- package/dist/cli/chunk-pnnvybbk.js +176 -0
- package/dist/cli/chunk-pnnvybbk.js.map +11 -0
- package/dist/cli/{chunk-cvky9gb2.js → chunk-sqn5t4q0.js} +81 -87
- package/dist/cli/chunk-sqn5t4q0.js.map +10 -0
- package/dist/cli/{chunk-eevwt1sc.js → chunk-tzne8qfq.js} +15 -15
- package/dist/cli/{chunk-eevwt1sc.js.map → chunk-tzne8qfq.js.map} +1 -1
- package/dist/cli/chunk-xaz13gwg.js +12449 -0
- package/dist/cli/chunk-xaz13gwg.js.map +182 -0
- package/dist/cli/chunk-y3e45rc8.js +102 -0
- package/dist/cli/chunk-y3e45rc8.js.map +10 -0
- package/dist/cli/chunk-z01ze5c1.js +261 -0
- package/dist/cli/chunk-z01ze5c1.js.map +10 -0
- package/dist/cli/{chunk-5n7t497w.js → chunk-z1f5arsg.js} +247 -755
- package/dist/cli/chunk-z1f5arsg.js.map +36 -0
- package/dist/cli/{chunk-hdm2dkd2.js → chunk-zg2gtj10.js} +1086 -2596
- package/dist/cli/chunk-zg2gtj10.js.map +35 -0
- package/dist/cli/{chunk-ppfvdcd4.js → chunk-zxccj738.js} +1 -1
- package/dist/cli/index.js +214 -57
- package/dist/cli/index.js.map +8 -7
- package/dist/types/ai/agent-readability.d.ts +52 -0
- package/dist/types/ai/ai-catalog.d.ts +42 -0
- package/dist/types/ai/api/paths.d.ts +17 -0
- package/dist/types/ai/api-catalog.d.ts +18 -0
- package/dist/types/ai/ask.d.ts +368 -0
- package/dist/types/ai/changelog-markdown.d.ts +2 -0
- package/dist/types/ai/component-markdown.d.ts +2 -2
- package/dist/types/ai/index.d.ts +24 -0
- package/dist/types/ai/link-headers.d.ts +24 -0
- package/dist/types/ai/llms.d.ts +25 -0
- package/dist/types/ai/markdown.d.ts +45 -0
- package/dist/types/ai/mcp/discovery.d.ts +68 -0
- package/dist/types/ai/mcp/tools.d.ts +16 -0
- package/dist/types/ai/openapi-components.d.ts +43 -0
- package/dist/types/ai/relative-links.d.ts +26 -0
- package/dist/types/ai/serializers.d.ts +15 -0
- package/dist/types/ai/skills.d.ts +42 -0
- package/dist/types/ai/tar.d.ts +25 -0
- package/dist/types/ai/visibility.d.ts +17 -0
- package/dist/types/ai/web-bot-auth.d.ts +16 -0
- package/dist/types/analytics/adobe.d.ts +35 -0
- package/dist/types/analytics/amplitude.d.ts +50 -0
- package/dist/types/analytics/clarity.d.ts +31 -0
- package/dist/types/analytics/clearbit.d.ts +29 -0
- package/dist/types/analytics/cloudflare.d.ts +41 -0
- package/dist/types/analytics/fathom.d.ts +41 -0
- package/dist/types/analytics/google-analytics.d.ts +44 -0
- package/dist/types/analytics/google-tag-manager.d.ts +40 -0
- package/dist/types/analytics/head.d.ts +30 -0
- package/dist/types/analytics/heap.d.ts +40 -0
- package/dist/types/analytics/hightouch.d.ts +44 -0
- package/dist/types/analytics/hotjar.d.ts +33 -0
- package/dist/types/analytics/index.d.ts +61 -0
- package/dist/types/analytics/inline.d.ts +17 -0
- package/dist/types/analytics/logrocket.d.ts +44 -0
- package/dist/types/analytics/mixpanel.d.ts +67 -0
- package/dist/types/analytics/pirsch.d.ts +42 -0
- package/dist/types/analytics/plausible.d.ts +56 -0
- package/dist/types/analytics/posthog.d.ts +45 -0
- package/dist/types/analytics/schema.d.ts +320 -0
- package/dist/types/analytics/script.d.ts +46 -0
- package/dist/types/analytics/segment.d.ts +50 -0
- package/dist/types/analytics/vercel.d.ts +48 -0
- package/dist/types/astro/integration.d.ts +76 -0
- package/dist/types/astro/markdown-negotiation.d.ts +23 -0
- package/dist/types/astro/module-types.d.ts +14 -0
- package/dist/types/astro/pages.d.ts +44 -0
- package/dist/types/cli/env.d.ts +12 -0
- package/dist/types/cli/init/scaffold.d.ts +154 -0
- package/dist/types/components/layout/nav-utils.d.ts +11 -0
- package/dist/types/core/adapter.d.ts +47 -0
- package/dist/types/core/api-name.d.ts +7 -0
- package/dist/types/core/changelog-index.d.ts +13 -0
- package/dist/types/core/config-input.d.ts +209 -505
- package/dist/types/core/config.d.ts +60 -34
- package/dist/types/core/content-assets.d.ts +76 -0
- package/dist/types/core/custom-pages.d.ts +33 -0
- package/dist/types/core/data.d.ts +28 -11
- package/dist/types/core/define-components.d.ts +12 -9
- package/dist/types/core/deployment-env.d.ts +6 -11
- package/dist/types/core/frontmatter.d.ts +10 -0
- package/dist/types/core/graph.d.ts +18 -0
- package/dist/types/core/heading-markers.d.ts +54 -0
- package/dist/types/core/i18n-ui.d.ts +6 -2
- package/dist/types/core/i18n.d.ts +87 -0
- package/dist/types/core/includes.d.ts +138 -0
- package/dist/types/core/last-modified.d.ts +47 -0
- package/dist/types/core/links.d.ts +95 -0
- package/dist/types/core/locale-links.d.ts +60 -0
- package/dist/types/core/manifest.d.ts +17 -0
- package/dist/types/core/meta.d.ts +38 -0
- package/dist/types/core/nav-diagnostics.d.ts +26 -0
- package/dist/types/core/navigation.d.ts +6 -0
- package/dist/types/core/node-require.d.ts +19 -0
- package/dist/types/core/package-json.d.ts +13 -0
- package/dist/types/core/probe.d.ts +42 -0
- package/dist/types/core/project-graph.d.ts +51 -0
- package/dist/types/core/project.d.ts +2 -0
- package/dist/types/core/safe-href.d.ts +2 -0
- package/dist/types/core/safe-links.d.ts +26 -0
- package/dist/types/core/schema.d.ts +2291 -441
- package/dist/types/core/site-url.d.ts +16 -0
- package/dist/types/core/sources/assets.d.ts +36 -0
- package/dist/types/core/sources/cache.d.ts +37 -0
- package/dist/types/core/sources/collection.d.ts +28 -0
- package/dist/types/core/sources/contentful-rich-text.d.ts +31 -0
- package/dist/types/core/sources/contentful.d.ts +40 -0
- package/dist/types/core/sources/filesystem.d.ts +24 -0
- package/dist/types/core/sources/github-releases.d.ts +31 -0
- package/dist/types/core/sources/json.d.ts +30 -0
- package/dist/types/core/sources/lexical.d.ts +19 -0
- package/dist/types/core/sources/lower.d.ts +75 -0
- package/dist/types/core/sources/mdx-remote.d.ts +28 -0
- package/dist/types/core/sources/normalize.d.ts +147 -0
- package/dist/types/core/sources/notion.d.ts +131 -0
- package/dist/types/core/sources/obsidian.d.ts +46 -0
- package/dist/types/core/sources/payload.d.ts +39 -0
- package/dist/types/core/sources/portable-text.d.ts +42 -0
- package/dist/types/core/sources/read.d.ts +23 -0
- package/dist/types/core/sources/remote.d.ts +74 -0
- package/dist/types/core/sources/resolve.d.ts +19 -0
- package/dist/types/core/sources/sanity.d.ts +43 -0
- package/dist/types/core/sources/strapi-blocks.d.ts +12 -0
- package/dist/types/core/sources/strapi.d.ts +33 -0
- package/dist/types/core/sources/types.d.ts +7 -0
- package/dist/types/core/sources/watch.d.ts +45 -0
- package/dist/types/core/text-width.d.ts +11 -0
- package/dist/types/core/types.d.ts +20 -1
- package/dist/types/core/unrecognized-keys.d.ts +7 -0
- package/dist/types/core/versions.d.ts +72 -0
- package/dist/types/core/yaml.d.ts +9 -0
- package/dist/types/deploy/adapter-output.d.ts +45 -0
- package/dist/types/deploy/adapters/cloudflare.d.ts +40 -0
- package/dist/types/deploy/adapters/index.d.ts +29 -0
- package/dist/types/deploy/adapters/netlify.d.ts +37 -0
- package/dist/types/deploy/adapters/node.d.ts +37 -0
- package/dist/types/deploy/adapters/registry.d.ts +133 -0
- package/dist/types/deploy/adapters/types.d.ts +71 -0
- package/dist/types/deploy/adapters/vercel.d.ts +38 -0
- package/dist/types/deploy/artifacts.d.ts +65 -0
- package/dist/types/deploy/cloudflare-negotiation.d.ts +196 -0
- package/dist/types/deploy/function-bundle.d.ts +80 -0
- package/dist/types/deploy/headers.d.ts +50 -0
- package/dist/types/deploy/node-headers.d.ts +42 -0
- package/dist/types/deploy/platforms/cloudflare.d.ts +40 -0
- package/dist/types/deploy/platforms/index.d.ts +18 -0
- package/dist/types/deploy/platforms/netlify.d.ts +13 -0
- package/dist/types/deploy/platforms/node.d.ts +11 -0
- package/dist/types/deploy/platforms/paths.d.ts +27 -0
- package/dist/types/deploy/platforms/static.d.ts +10 -0
- package/dist/types/deploy/platforms/types.d.ts +104 -0
- package/dist/types/deploy/platforms/vercel.d.ts +32 -0
- package/dist/types/deploy/redirects.d.ts +53 -0
- package/dist/types/deploy/robots.d.ts +8 -0
- package/dist/types/deploy/rss.d.ts +31 -0
- package/dist/types/deploy/sitemap.d.ts +21 -0
- package/dist/types/deploy/vercel-negotiation.d.ts +109 -0
- package/dist/types/markdown/code-title.d.ts +32 -0
- package/dist/types/markdown/fence-meta.d.ts +23 -0
- package/dist/types/markdown/themes.d.ts +3 -3
- package/dist/types/openapi/asyncapi.d.ts +129 -0
- package/dist/types/openapi/graphql-build.d.ts +8 -0
- package/dist/types/openapi/graphql.d.ts +122 -0
- package/dist/types/openapi/model.d.ts +158 -0
- package/dist/types/openapi/parse.d.ts +57 -0
- package/dist/types/openapi/references.d.ts +37 -25
- package/dist/types/openapi/render-mdx.d.ts +33 -0
- package/dist/types/openapi/sentence.d.ts +7 -0
- package/dist/types/openapi/signature.d.ts +10 -0
- package/dist/types/openapi/source.d.ts +22 -0
- package/dist/types/openapi/spec-dependency-error.d.ts +10 -0
- package/dist/types/reference/asyncapi.d.ts +166 -0
- package/dist/types/reference/graphql.d.ts +181 -0
- package/dist/types/reference/index.d.ts +32 -0
- package/dist/types/reference/openapi.d.ts +165 -0
- package/dist/types/reference/options.d.ts +157 -0
- package/dist/types/reference/scalar.d.ts +136 -0
- package/dist/types/reference/schema.d.ts +630 -0
- package/dist/types/search/adapters/algolia.d.ts +32 -0
- package/dist/types/search/adapters/flexsearch.d.ts +12 -0
- package/dist/types/search/adapters/index.d.ts +31 -0
- package/dist/types/search/adapters/mixedbread.d.ts +22 -0
- package/dist/types/search/adapters/orama-cloud.d.ts +33 -0
- package/dist/types/search/adapters/orama.d.ts +13 -0
- package/dist/types/search/adapters/pagefind.d.ts +12 -0
- package/dist/types/search/adapters/registry.d.ts +228 -0
- package/dist/types/search/adapters/types.d.ts +34 -0
- package/dist/types/search/adapters/typesense.d.ts +42 -0
- package/dist/types/search/build.d.ts +23 -0
- package/dist/types/search/documents.d.ts +90 -0
- package/dist/types/search/facets.d.ts +3 -0
- package/dist/types/search/sync/algolia.d.ts +14 -0
- package/dist/types/search/sync/index.d.ts +14 -0
- package/dist/types/search/sync/orama-cloud.d.ts +10 -0
- package/dist/types/search/sync/typesense.d.ts +14 -0
- package/dist/types/sources/contentful.d.ts +68 -0
- package/dist/types/sources/custom.d.ts +20 -0
- package/dist/types/sources/filesystem.d.ts +42 -0
- package/dist/types/sources/github-releases.d.ts +46 -0
- package/dist/types/sources/index.d.ts +48 -0
- package/dist/types/sources/mdx-remote.d.ts +63 -0
- package/dist/types/sources/notion.d.ts +65 -0
- package/dist/types/sources/obsidian.d.ts +34 -0
- package/dist/types/sources/payload.d.ts +68 -0
- package/dist/types/sources/registry.d.ts +1414 -0
- package/dist/types/sources/sanity.d.ts +69 -0
- package/dist/types/sources/shared.d.ts +46 -0
- package/dist/types/sources/strapi.d.ts +66 -0
- package/dist/types/theme/icon-kind.d.ts +11 -0
- package/dist/types/theme/icons.d.ts +20 -0
- package/docs/01-quickstart.mdx +18 -18
- package/docs/02-deployment.mdx +50 -26
- package/docs/03-upgrading.mdx +351 -0
- package/docs/04-migrating.mdx +58 -0
- package/docs/08-faq.mdx +3 -3
- package/docs/advanced/blog.mdx +13 -6
- package/docs/advanced/changelog.mdx +23 -35
- package/docs/advanced/custom-pages.mdx +20 -8
- package/docs/advanced/meta.ts +1 -8
- package/docs/advanced/skills.mdx +8 -0
- package/docs/cli/audit.mdx +646 -0
- package/docs/cli/doctor.mdx +29 -0
- package/docs/{reference/eval.mdx → cli/evals.mdx} +9 -8
- package/docs/cli/index.mdx +105 -0
- package/docs/cli/meta.ts +7 -0
- package/docs/{reference → cli}/translate.mdx +1 -1
- package/docs/cli/validate.mdx +41 -0
- package/docs/cli/version.mdx +40 -0
- package/docs/configuration/analytics.mdx +350 -59
- package/docs/configuration/ask-ai.mdx +176 -61
- package/docs/configuration/customization.mdx +15 -9
- package/docs/configuration/index.mdx +52 -31
- package/docs/configuration/search.mdx +75 -54
- package/docs/configuration/theming.mdx +24 -15
- package/docs/content/components.mdx +21 -5
- package/docs/{reference → content}/frontmatter.mdx +37 -1
- package/docs/content/i18n.mdx +8 -6
- package/docs/content/includes.mdx +2 -4
- package/docs/content/index.mdx +1 -1
- package/docs/content/islands.mdx +10 -5
- package/docs/content/meta.mdx +1 -1
- package/docs/content/meta.ts +1 -0
- package/docs/content/navigation.mdx +12 -7
- package/docs/content/sources.mdx +145 -50
- package/docs/content/syntax.mdx +26 -12
- package/docs/content/versioning.mdx +3 -3
- package/docs/discoverability/agent-discovery.mdx +91 -10
- package/docs/discoverability/index.mdx +5 -5
- package/docs/discoverability/json-api.mdx +4 -4
- package/docs/discoverability/llms-txt.mdx +6 -6
- package/docs/discoverability/markdown.mdx +4 -4
- package/docs/discoverability/mcp.mdx +11 -11
- package/docs/discoverability/sitemap-and-robots.mdx +3 -3
- package/docs/index.mdx +2 -2
- package/docs/references/asyncapi.mdx +59 -0
- package/docs/{advanced → references}/graphql.mdx +45 -32
- package/docs/{reference → references}/meta.ts +2 -2
- package/docs/references/openapi.mdx +171 -0
- package/docs/references/scalar.mdx +64 -0
- package/package.json +42 -8
- package/skills/blume/SKILL.md +21 -8
- package/skills/blume-migrate/SKILL.md +22 -21
- package/skills/blume-migrate/assets/oxfmt@0.67.0.patch +49 -0
- package/skills/blume-migrate/references/docusaurus.md +5 -4
- package/skills/blume-migrate/references/fumadocs.md +4 -4
- package/skills/blume-migrate/references/mintlify.md +23 -8
- package/skills/blume-migrate/references/monorepo.md +6 -6
- package/skills/blume-migrate/references/starlight.md +4 -4
- package/src/ai/agent-readability.ts +26 -22
- package/src/ai/ai-catalog.ts +259 -0
- package/src/ai/api/handlers.ts +46 -11
- package/src/ai/api-catalog.ts +8 -8
- package/src/ai/ask-data.ts +1 -1
- package/src/ai/ask.ts +624 -100
- package/src/ai/changelog-markdown.ts +91 -0
- package/src/ai/component-markdown.ts +328 -12
- package/src/ai/index.ts +45 -0
- package/src/ai/link-headers.ts +19 -6
- package/src/ai/llms.ts +26 -15
- package/src/ai/markdown.ts +35 -5
- package/src/ai/mcp/data.ts +9 -5
- package/src/ai/mcp/discovery.ts +1 -1
- package/src/ai/openapi-components.ts +4 -1
- package/src/ai/relative-links.ts +170 -0
- package/src/ai/serializers.ts +2 -2
- package/src/ai/skills.ts +1 -1
- package/src/ai/web-bot-auth.ts +2 -2
- package/src/analytics/adobe.ts +46 -0
- package/src/analytics/amplitude.ts +79 -0
- package/src/analytics/clarity.ts +46 -0
- package/src/analytics/clearbit.ts +47 -0
- package/src/analytics/cloudflare.ts +67 -0
- package/src/analytics/fathom.ts +64 -0
- package/src/analytics/google-analytics.ts +84 -0
- package/src/analytics/google-tag-manager.ts +61 -0
- package/src/analytics/head.ts +130 -0
- package/src/analytics/heap.ts +65 -0
- package/src/analytics/hightouch.ts +77 -0
- package/src/analytics/hotjar.ts +47 -0
- package/src/analytics/index.ts +71 -0
- package/src/analytics/inline.ts +21 -0
- package/src/analytics/logrocket.ts +71 -0
- package/src/analytics/mixpanel.ts +92 -0
- package/src/analytics/pirsch.ts +66 -0
- package/src/analytics/plausible.ts +83 -0
- package/src/analytics/posthog.ts +78 -0
- package/src/analytics/schema.ts +60 -0
- package/src/analytics/script.ts +60 -0
- package/src/analytics/segment.ts +85 -0
- package/src/analytics/vercel.ts +50 -0
- package/src/astro/adapter-root.ts +7 -9
- package/src/astro/component-slots.ts +131 -91
- package/src/astro/generate.ts +114 -345
- package/src/astro/integration.ts +2 -6
- package/src/astro/pages.ts +13 -101
- package/src/astro/render-deps.ts +379 -0
- package/src/astro/runtime-deps.ts +201 -0
- package/src/astro/templates.ts +554 -541
- package/src/audit/agent.ts +24 -0
- package/src/audit/catalog.ts +2 -2
- package/src/audit/checks/assets.ts +2 -2
- package/src/audit/checks/dns-aid.ts +1 -1
- package/src/audit/checks/duplicates.ts +3 -1
- package/src/audit/checks/i18n.ts +1 -1
- package/src/audit/checks/indexability.ts +7 -7
- package/src/audit/checks/links.ts +2 -2
- package/src/audit/checks/llms.ts +6 -6
- package/src/audit/checks/network.ts +3 -3
- package/src/audit/checks/og-image.ts +2 -2
- package/src/audit/checks/robots.ts +1 -1
- package/src/audit/checks/sitemap.ts +2 -2
- package/src/audit/checks/social.ts +1 -1
- package/src/audit/run.ts +4 -3
- package/src/audit/terms.ts +31 -0
- package/src/audit/url.ts +13 -13
- package/src/cli/command-meta.ts +10 -0
- package/src/cli/commands/audit.ts +39 -20
- package/src/cli/commands/build.ts +71 -314
- package/src/cli/commands/check.ts +1 -0
- package/src/cli/commands/dev.ts +40 -1
- package/src/cli/commands/doctor.ts +90 -14
- package/src/cli/commands/eject.ts +44 -7
- package/src/cli/commands/eval.ts +2 -2
- package/src/cli/commands/init.ts +161 -41
- package/src/cli/commands/migrate.ts +121 -0
- package/src/cli/commands/preview.ts +7 -1
- package/src/cli/commands/translate.ts +2 -2
- package/src/cli/commands/upgrade.ts +141 -0
- package/src/cli/commands/version.ts +57 -44
- package/src/cli/eject-scripts.ts +121 -6
- package/src/cli/index.ts +11 -1
- package/src/cli/init/install.ts +70 -0
- package/src/cli/init/questions.ts +7 -0
- package/src/cli/init/scaffold.ts +459 -75
- package/src/cli/lazy-command.ts +37 -1
- package/src/cli/prepare.ts +40 -6
- package/src/cli/required-secrets.ts +38 -11
- package/src/cli/unknown-flags.ts +266 -0
- package/src/cli/yarn-pnp.ts +52 -0
- package/src/components/content/AccordionItem.astro +7 -1
- package/src/components/content/Card.astro +4 -3
- package/src/components/content/ColorItem.astro +22 -4
- package/src/components/content/GithubInfo.astro +2 -2
- package/src/components/content/Prompt.astro +25 -25
- package/src/components/content/Tabs.astro +3 -1
- package/src/components/content/Tile.astro +2 -3
- package/src/components/content/Tooltip.astro +57 -9
- package/src/components/content/content-strings.ts +34 -0
- package/src/components/content/diff.ts +1 -1
- package/src/components/content/mermaid-element.ts +13 -2
- package/src/components/content/prompt-markdown.ts +292 -0
- package/src/components/content/tooltip-id.ts +41 -0
- package/src/components/islands/hooks.ts +75 -3
- package/src/components/layout/Analytics.astro +21 -79
- package/src/components/layout/Banner.astro +3 -1
- package/src/components/layout/DiscoveryLinks.astro +69 -0
- package/src/components/layout/Header.astro +83 -20
- package/src/components/layout/LanguageSwitcher.astro +4 -1
- package/src/components/layout/Logo.astro +23 -2
- package/src/components/layout/NavSelector.astro +13 -2
- package/src/components/layout/NavTree.astro +12 -3
- package/src/components/layout/NavTreeScript.astro +17 -3
- package/src/components/layout/PageActions.astro +3 -3
- package/src/components/layout/PageFeedback.astro +11 -1
- package/src/components/layout/PageLayout.astro +52 -5
- package/src/components/layout/ReferenceLayout.astro +21 -12
- package/src/components/layout/RootLayout.astro +69 -43
- package/src/components/layout/Search.astro +30 -6
- package/src/components/layout/WebMcp.astro +1 -1
- package/src/components/layout/analytics-client.ts +101 -15
- package/src/components/layout/drawer-inert.ts +113 -15
- package/src/components/layout/dropdown-clamp.ts +105 -0
- package/src/components/layout/head-scripts.ts +15 -6
- package/src/components/layout/nav-utils.ts +17 -0
- package/src/components/layout/search/algolia.ts +8 -8
- package/src/components/layout/search/orama-cloud.ts +9 -7
- package/src/components/layout/search/typesense.ts +11 -17
- package/src/components/openapi/MessageComposer.astro +2 -2
- package/src/components/openapi/Playground.astro +2 -2
- package/src/components/openapi/playground-client.ts +79 -10
- package/src/core/changelog-index.ts +24 -0
- package/src/core/component-overrides.ts +399 -154
- package/src/core/config-input.ts +212 -543
- package/src/core/config.ts +130 -41
- package/src/core/custom-pages.ts +105 -0
- package/src/core/data.ts +32 -11
- package/src/core/define-components.ts +12 -9
- package/src/core/deployment-env.ts +18 -74
- package/src/core/diagnostics.ts +14 -7
- package/src/core/graph.ts +69 -25
- package/src/core/i18n-ui.ts +6 -2
- package/src/core/i18n.ts +17 -0
- package/src/core/includes.ts +156 -38
- package/src/core/last-modified.ts +6 -11
- package/src/core/links.ts +166 -2
- package/src/core/manifest.ts +10 -3
- package/src/core/navigation.ts +137 -19
- package/src/core/new-tab.ts +35 -0
- package/src/core/node-require.ts +21 -0
- package/src/core/project-graph.ts +42 -26
- package/src/core/project.ts +9 -4
- package/src/core/request-body.ts +61 -0
- package/src/core/safe-href.ts +28 -0
- package/src/core/safe-links.ts +68 -0
- package/src/core/schema.ts +531 -721
- package/src/core/server-features.ts +8 -9
- package/src/core/sources/assets.ts +47 -11
- package/src/core/sources/collection.ts +67 -0
- package/src/core/sources/contentful-rich-text.ts +285 -0
- package/src/core/sources/contentful.ts +173 -0
- package/src/core/sources/github-releases.ts +51 -1
- package/src/core/sources/json.ts +71 -0
- package/src/core/sources/lexical.ts +195 -0
- package/src/core/sources/lower.ts +226 -0
- package/src/core/sources/normalize.ts +52 -2
- package/src/core/sources/notion.ts +39 -28
- package/src/core/sources/payload.ts +135 -0
- package/src/core/sources/portable-text.ts +11 -16
- package/src/core/sources/remote.ts +226 -0
- package/src/core/sources/resolve.ts +104 -166
- package/src/core/sources/sanity.ts +16 -49
- package/src/core/sources/strapi-blocks.ts +124 -0
- package/src/core/sources/strapi.ts +191 -0
- package/src/core/sources/types.ts +12 -1
- package/src/core/types.ts +20 -1
- package/src/core/ui-packs/ar.ts +6 -2
- package/src/core/ui-packs/bg.ts +6 -2
- package/src/core/ui-packs/bn.ts +6 -2
- package/src/core/ui-packs/ca.ts +3 -1
- package/src/core/ui-packs/cs.ts +6 -2
- package/src/core/ui-packs/da.ts +6 -2
- package/src/core/ui-packs/de.ts +6 -2
- package/src/core/ui-packs/el.ts +3 -1
- package/src/core/ui-packs/es.ts +3 -1
- package/src/core/ui-packs/fa.ts +6 -2
- package/src/core/ui-packs/fi.ts +6 -2
- package/src/core/ui-packs/fr.ts +3 -1
- package/src/core/ui-packs/he.ts +6 -2
- package/src/core/ui-packs/hi.ts +6 -2
- package/src/core/ui-packs/hr.ts +6 -2
- package/src/core/ui-packs/hu.ts +6 -2
- package/src/core/ui-packs/id.ts +6 -2
- package/src/core/ui-packs/it.ts +3 -1
- package/src/core/ui-packs/ja.ts +3 -1
- package/src/core/ui-packs/ko.ts +3 -1
- package/src/core/ui-packs/nl.ts +6 -2
- package/src/core/ui-packs/no.ts +6 -2
- package/src/core/ui-packs/pl.ts +6 -2
- package/src/core/ui-packs/pt-br.ts +3 -1
- package/src/core/ui-packs/pt.ts +3 -1
- package/src/core/ui-packs/ro.ts +6 -2
- package/src/core/ui-packs/ru.ts +6 -2
- package/src/core/ui-packs/sk.ts +6 -2
- package/src/core/ui-packs/sr.ts +6 -2
- package/src/core/ui-packs/sv.ts +6 -2
- package/src/core/ui-packs/th.ts +3 -1
- package/src/core/ui-packs/tr.ts +6 -2
- package/src/core/ui-packs/uk.ts +6 -2
- package/src/core/ui-packs/vi.ts +3 -1
- package/src/core/ui-packs/zh-tw.ts +3 -1
- package/src/core/ui-packs/zh.ts +3 -1
- package/src/core/unrecognized-keys.ts +10 -0
- package/src/core/version-cut.ts +116 -8
- package/src/deploy/adapter-output.ts +57 -97
- package/src/deploy/adapters/cloudflare.ts +39 -0
- package/src/deploy/adapters/index.ts +41 -0
- package/src/deploy/adapters/netlify.ts +34 -0
- package/src/deploy/adapters/node.ts +34 -0
- package/src/deploy/adapters/registry.ts +127 -0
- package/src/deploy/adapters/types.ts +92 -0
- package/src/deploy/adapters/vercel.ts +35 -0
- package/src/deploy/artifacts.ts +67 -28
- package/src/deploy/cloudflare-negotiation.ts +179 -100
- package/src/deploy/function-bundle.ts +18 -3
- package/src/deploy/headers.ts +129 -22
- package/src/deploy/node-headers.ts +198 -0
- package/src/deploy/platforms/cloudflare.ts +312 -0
- package/src/deploy/platforms/index.ts +67 -0
- package/src/deploy/platforms/netlify.ts +52 -0
- package/src/deploy/platforms/node.ts +40 -0
- package/src/deploy/platforms/paths.ts +42 -0
- package/src/deploy/platforms/static.ts +29 -0
- package/src/deploy/platforms/types.ts +112 -0
- package/src/deploy/platforms/vercel.ts +193 -0
- package/src/deploy/redirects.ts +30 -18
- package/src/deploy/robots.ts +3 -3
- package/src/deploy/rss.ts +2 -2
- package/src/deploy/sitemap.ts +2 -2
- package/src/deploy/vercel-negotiation.ts +27 -4
- package/src/eval/agents.ts +32 -1
- package/src/eval/findings.ts +19 -11
- package/src/eval/report.ts +10 -2
- package/src/markdown/external-links.ts +65 -0
- package/src/markdown/include.ts +45 -27
- package/src/markdown/index.ts +34 -9
- package/src/markdown/inline-code.ts +12 -6
- package/src/markdown/relative-links.ts +324 -0
- package/src/markdown/themes.ts +3 -3
- package/src/migrate/migrate.ts +149 -0
- package/src/openapi/parse.ts +64 -16
- package/src/openapi/proxy.ts +62 -10
- package/src/openapi/references.ts +147 -147
- package/src/openapi/render-mdx.ts +32 -10
- package/src/openapi/scalar.ts +15 -13
- package/src/openapi/sentence.ts +14 -0
- package/src/openapi/source.ts +37 -21
- package/src/openapi/spec-dependency-error.ts +15 -0
- package/src/reference/asyncapi.ts +83 -0
- package/src/reference/graphql.ts +89 -0
- package/src/reference/index.ts +40 -0
- package/src/reference/openapi.ts +83 -0
- package/src/reference/options.ts +201 -0
- package/src/reference/scalar.ts +136 -0
- package/src/reference/schema.ts +88 -0
- package/src/registry/eject.ts +97 -42
- package/src/search/adapters/algolia.ts +46 -0
- package/src/search/adapters/flexsearch.ts +29 -0
- package/src/search/adapters/index.ts +39 -0
- package/src/search/adapters/mixedbread.ts +39 -0
- package/src/search/adapters/orama-cloud.ts +51 -0
- package/src/search/adapters/orama.ts +24 -0
- package/src/search/adapters/pagefind.ts +27 -0
- package/src/search/adapters/registry.ts +131 -0
- package/src/search/adapters/types.ts +46 -0
- package/src/search/adapters/typesense.ts +57 -0
- package/src/search/build.ts +33 -7
- package/src/search/documents.ts +6 -0
- package/src/search/sync/algolia.ts +12 -11
- package/src/search/sync/index.ts +35 -20
- package/src/search/sync/orama-cloud.ts +12 -9
- package/src/search/sync/typesense.ts +15 -13
- package/src/sources/contentful.ts +63 -0
- package/src/sources/custom.ts +38 -0
- package/src/sources/filesystem.ts +51 -0
- package/src/sources/github-releases.ts +52 -0
- package/src/sources/index.ts +60 -0
- package/src/sources/mdx-remote.ts +76 -0
- package/src/sources/notion.ts +63 -0
- package/src/sources/obsidian.ts +38 -0
- package/src/sources/payload.ts +60 -0
- package/src/sources/registry.ts +182 -0
- package/src/sources/sanity.ts +66 -0
- package/src/sources/shared.ts +52 -0
- package/src/sources/strapi.ts +58 -0
- package/src/theme/entry.ts +47 -2
- package/src/translate/report.ts +40 -7
- package/src/upgrade/upgrade.ts +499 -0
- package/dist/cli/chunk-12dxjqk7.js.map +0 -10
- package/dist/cli/chunk-196vjxp9.js.map +0 -13
- package/dist/cli/chunk-2mzebbbz.js +0 -69
- package/dist/cli/chunk-2z47ypj8.js.map +0 -11
- package/dist/cli/chunk-30e87n55.js +0 -108
- package/dist/cli/chunk-30e87n55.js.map +0 -10
- package/dist/cli/chunk-450a7rcr.js +0 -185
- package/dist/cli/chunk-450a7rcr.js.map +0 -11
- package/dist/cli/chunk-5n7t497w.js.map +0 -40
- package/dist/cli/chunk-61j18dwk.js +0 -5342
- package/dist/cli/chunk-61j18dwk.js.map +0 -58
- package/dist/cli/chunk-88by27n5.js +0 -17
- package/dist/cli/chunk-88by27n5.js.map +0 -10
- package/dist/cli/chunk-8cd8tj54.js.map +0 -34
- package/dist/cli/chunk-aztttvb3.js +0 -381
- package/dist/cli/chunk-aztttvb3.js.map +0 -12
- package/dist/cli/chunk-cvky9gb2.js.map +0 -11
- package/dist/cli/chunk-ejjx8znq.js.map +0 -15
- package/dist/cli/chunk-fmceyezb.js +0 -1007
- package/dist/cli/chunk-fmceyezb.js.map +0 -13
- package/dist/cli/chunk-hdm2dkd2.js.map +0 -48
- package/dist/cli/chunk-hs3gbh8p.js.map +0 -10
- package/dist/cli/chunk-jbj4qhfw.js +0 -30
- package/dist/cli/chunk-jbj4qhfw.js.map +0 -10
- package/dist/cli/chunk-mqb2ka8m.js +0 -68
- package/dist/cli/chunk-mqb2ka8m.js.map +0 -10
- package/dist/cli/chunk-mt76t7dj.js.map +0 -11
- package/dist/cli/chunk-q4rae3bg.js +0 -60
- package/dist/cli/chunk-q4rae3bg.js.map +0 -10
- package/dist/cli/chunk-ra1v2nc2.js +0 -35
- package/dist/cli/chunk-ra1v2nc2.js.map +0 -10
- package/dist/cli/chunk-t3tj0dgr.js.map +0 -15
- package/dist/cli/chunk-tqa1s0k8.js +0 -69
- package/dist/cli/chunk-tqa1s0k8.js.map +0 -11
- package/dist/cli/chunk-vh9w1sgp.js +0 -73
- package/dist/cli/chunk-vh9w1sgp.js.map +0 -10
- package/dist/cli/chunk-vkrsvbr5.js +0 -107
- package/dist/cli/chunk-vkrsvbr5.js.map +0 -11
- package/dist/cli/chunk-vrfp10qk.js +0 -81
- package/dist/cli/chunk-vrfp10qk.js.map +0 -10
- package/dist/cli/chunk-wjt80jps.js +0 -1049
- package/dist/cli/chunk-wjt80jps.js.map +0 -24
- package/docs/advanced/api-reference.mdx +0 -240
- package/docs/reference/cli.mdx +0 -197
- package/skills/blume-migrate/assets/oxfmt@0.55.0.patch +0 -20
- package/src/components/content/changelog-element.ts +0 -69
- package/src/search/providers.ts +0 -91
- /package/dist/cli/{chunk-3w7b2vcx.js.map → chunk-7ez8ny0t.js.map} +0 -0
- /package/dist/cli/{chunk-688e0dde.js.map → chunk-88cpgt6h.js.map} +0 -0
- /package/dist/cli/{chunk-exeeb35e.js.map → chunk-f7t03s3g.js.map} +0 -0
- /package/dist/cli/{chunk-ppfvdcd4.js.map → chunk-zxccj738.js.map} +0 -0
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import type { ContentSource, SourceContext } from "./types.ts";
|
|
2
|
+
interface NotionRichText {
|
|
3
|
+
plain_text: string;
|
|
4
|
+
href?: string | null;
|
|
5
|
+
annotations?: {
|
|
6
|
+
bold?: boolean;
|
|
7
|
+
italic?: boolean;
|
|
8
|
+
code?: boolean;
|
|
9
|
+
strikethrough?: boolean;
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
interface NotionProperty {
|
|
13
|
+
type: string;
|
|
14
|
+
title?: NotionRichText[];
|
|
15
|
+
rich_text?: NotionRichText[];
|
|
16
|
+
select?: {
|
|
17
|
+
name: string;
|
|
18
|
+
} | null;
|
|
19
|
+
status?: {
|
|
20
|
+
name: string;
|
|
21
|
+
} | null;
|
|
22
|
+
number?: number | null;
|
|
23
|
+
}
|
|
24
|
+
interface NotionPage {
|
|
25
|
+
id: string;
|
|
26
|
+
properties: Record<string, NotionProperty>;
|
|
27
|
+
last_edited_time?: string;
|
|
28
|
+
}
|
|
29
|
+
/** The per-type payload a block carries under the key matching its `type`. */
|
|
30
|
+
interface NotionBlockPayload {
|
|
31
|
+
caption?: NotionRichText[];
|
|
32
|
+
checked?: boolean;
|
|
33
|
+
external?: {
|
|
34
|
+
url: string;
|
|
35
|
+
};
|
|
36
|
+
file?: {
|
|
37
|
+
url: string;
|
|
38
|
+
};
|
|
39
|
+
language?: string;
|
|
40
|
+
rich_text?: NotionRichText[];
|
|
41
|
+
}
|
|
42
|
+
interface NotionBlock {
|
|
43
|
+
id: string;
|
|
44
|
+
type: string;
|
|
45
|
+
has_children?: boolean;
|
|
46
|
+
[key: string]: NotionBlockPayload | boolean | string | undefined;
|
|
47
|
+
}
|
|
48
|
+
interface NotionList<T> {
|
|
49
|
+
results: T[];
|
|
50
|
+
has_more: boolean;
|
|
51
|
+
next_cursor: string | null;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* The slice of `@notionhq/client` (v5+) this adapter relies on, so it's
|
|
55
|
+
* mockable. Since API version 2025-09-03 a database's rows live in a data
|
|
56
|
+
* source: `databases.retrieve` names the data sources and
|
|
57
|
+
* `dataSources.query` pages through one of them.
|
|
58
|
+
*/
|
|
59
|
+
export interface NotionClientLike {
|
|
60
|
+
databases: {
|
|
61
|
+
retrieve: (args: {
|
|
62
|
+
database_id: string;
|
|
63
|
+
}) => Promise<{
|
|
64
|
+
data_sources: {
|
|
65
|
+
id: string;
|
|
66
|
+
name: string;
|
|
67
|
+
}[];
|
|
68
|
+
}>;
|
|
69
|
+
};
|
|
70
|
+
dataSources: {
|
|
71
|
+
query: (args: {
|
|
72
|
+
data_source_id: string;
|
|
73
|
+
start_cursor?: string;
|
|
74
|
+
}) => Promise<NotionList<NotionPage>>;
|
|
75
|
+
};
|
|
76
|
+
blocks: {
|
|
77
|
+
children: {
|
|
78
|
+
list: (args: {
|
|
79
|
+
block_id: string;
|
|
80
|
+
start_cursor?: string;
|
|
81
|
+
}) => Promise<NotionList<NotionBlock>>;
|
|
82
|
+
};
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
/** Notion property names mapped onto Blume meta. */
|
|
86
|
+
export interface NotionPropertyMap {
|
|
87
|
+
/** Title property name; defaults to the database's `title`-typed property. */
|
|
88
|
+
title?: string;
|
|
89
|
+
/** Description property (rich_text); default `Description`. */
|
|
90
|
+
description?: string;
|
|
91
|
+
/** Slug property (rich_text); default `Slug`, else the slugified title. */
|
|
92
|
+
slug?: string;
|
|
93
|
+
/** Status property (select/status); default `Status`. */
|
|
94
|
+
status?: string;
|
|
95
|
+
/** Sidebar order property (number); default `Order`. */
|
|
96
|
+
order?: string;
|
|
97
|
+
}
|
|
98
|
+
export interface NotionSourceOptions {
|
|
99
|
+
name: string;
|
|
100
|
+
prefix?: string;
|
|
101
|
+
/** The Notion database id. */
|
|
102
|
+
database: string;
|
|
103
|
+
/**
|
|
104
|
+
* Maximum concurrent Notion API requests. Notion allows an average of 3
|
|
105
|
+
* requests per second per integration, so a large database must pace its
|
|
106
|
+
* block-tree fan-out or every request 429s. Default 3.
|
|
107
|
+
*/
|
|
108
|
+
concurrency?: number;
|
|
109
|
+
/** Integration token; defaults to `NOTION_TOKEN`. */
|
|
110
|
+
token?: string;
|
|
111
|
+
properties?: NotionPropertyMap;
|
|
112
|
+
/**
|
|
113
|
+
* The `Status` property is treated as a publish signal: any value other than
|
|
114
|
+
* this maps to `draft: true`. Defaults to `Published`; pages without a
|
|
115
|
+
* Status/select property are always imported as published.
|
|
116
|
+
*/
|
|
117
|
+
publishedValue?: string;
|
|
118
|
+
/** Opt-in dev polling interval (seconds); omit to freeze for the session. */
|
|
119
|
+
pollInterval?: number;
|
|
120
|
+
/** Injected for tests; otherwise built from `@notionhq/client`. */
|
|
121
|
+
client?: NotionClientLike;
|
|
122
|
+
/** Injected for tests; used to download images. */
|
|
123
|
+
fetchImpl?: typeof fetch;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Notion content source. Maps a database to a collection: each page becomes an
|
|
127
|
+
* entry, its properties become frontmatter, and its block tree is converted to
|
|
128
|
+
* MDX with Blume components. Images are materialized so signed URLs don't rot.
|
|
129
|
+
*/
|
|
130
|
+
export declare const notionSource: (options: NotionSourceOptions, ctx?: SourceContext) => ContentSource;
|
|
131
|
+
export {};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { ResolvedI18nConfig, ResolvedVersionsConfig } from "../schema.ts";
|
|
2
|
+
import type { ContentSource, SourceContext } from "./types.ts";
|
|
3
|
+
/** Options for the built-in Obsidian vault source. */
|
|
4
|
+
export interface ObsidianSourceOptions {
|
|
5
|
+
/**
|
|
6
|
+
* The project's default content type (`content.defaultType`), which a note
|
|
7
|
+
* without a `type` resolves to when {@link typeFrontmatterKeys} are picked.
|
|
8
|
+
*/
|
|
9
|
+
defaultType?: string;
|
|
10
|
+
/** Vault folder names to skip at any depth, in addition to dot-folders. */
|
|
11
|
+
exclude?: string[];
|
|
12
|
+
/**
|
|
13
|
+
* Frontmatter keys the project declares site-wide beyond Blume's page meta
|
|
14
|
+
* (`frontmatter.extend`). Any other Obsidian property is dropped when a note
|
|
15
|
+
* is lowered, since the strict meta schema would reject it and fail the
|
|
16
|
+
* build.
|
|
17
|
+
*/
|
|
18
|
+
frontmatterKeys?: readonly string[];
|
|
19
|
+
/** The project's i18n config, when locale directories place vault notes. */
|
|
20
|
+
i18n?: ResolvedI18nConfig;
|
|
21
|
+
/** Stable source name; namespaces ids and diagnostics. */
|
|
22
|
+
name: string;
|
|
23
|
+
/** Namespaces the source's routes under `/<prefix>/`; e.g. `vault`. */
|
|
24
|
+
prefix?: string;
|
|
25
|
+
/**
|
|
26
|
+
* Frontmatter keys each content type declares (`content.types.<type>.frontmatter`),
|
|
27
|
+
* keyed by type. A note keeps only the keys of its own type — the meta parse
|
|
28
|
+
* merges only that type's schema, so a key another type declares would still
|
|
29
|
+
* reach the strict page schema and fail.
|
|
30
|
+
*/
|
|
31
|
+
typeFrontmatterKeys?: Readonly<Record<string, readonly string[]>>;
|
|
32
|
+
/** Vault directory, absolute or relative to `projectRoot`. */
|
|
33
|
+
vault: string;
|
|
34
|
+
/** The project's versions config, when snapshot directories hold notes. */
|
|
35
|
+
versions?: ResolvedVersionsConfig;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* The built-in Obsidian vault source: read a vault directly — no export step,
|
|
39
|
+
* no generated files in the user's repo — lowering Obsidian's dialect to
|
|
40
|
+
* Blume-ready Markdown at load time.
|
|
41
|
+
*
|
|
42
|
+
* Staged, since the body is rewritten before Blume sees it; `sourcePath` still
|
|
43
|
+
* points at the note, so diagnostics and relative image checks name the real
|
|
44
|
+
* file. A wikilink Blume cannot resolve degrades rather than failing the build.
|
|
45
|
+
*/
|
|
46
|
+
export declare const obsidianSource: (options: ObsidianSourceOptions, ctx: SourceContext) => ContentSource;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { JsonObject } from "./json.ts";
|
|
2
|
+
import type { RemoteFieldMap } from "./remote.ts";
|
|
3
|
+
import type { ContentSource, SourceContext } from "./types.ts";
|
|
4
|
+
export interface PayloadSourceOptions {
|
|
5
|
+
name: string;
|
|
6
|
+
prefix?: string;
|
|
7
|
+
/** The Payload app's origin (`https://cms.acme.dev`); its REST API is at `/api`. */
|
|
8
|
+
url: string;
|
|
9
|
+
/** The collection slug whose documents become pages. */
|
|
10
|
+
collection: string;
|
|
11
|
+
/**
|
|
12
|
+
* The auth-enabled collection the API key belongs to; default `users`. It
|
|
13
|
+
* names the scheme in the `Authorization` header (`users API-Key <key>`).
|
|
14
|
+
*/
|
|
15
|
+
authCollection?: string;
|
|
16
|
+
/** Relationship depth to populate; default `1`, enough for upload URLs. */
|
|
17
|
+
depth?: number;
|
|
18
|
+
/**
|
|
19
|
+
* Field paths mapping a document onto Blume meta + body. Defaults:
|
|
20
|
+
* `title`, `description`, `slug`, `content`, `updatedAt`.
|
|
21
|
+
*/
|
|
22
|
+
fields?: RemoteFieldMap;
|
|
23
|
+
/** Extra query parameters for the collection request (`where[...]`, `sort`). */
|
|
24
|
+
params?: Record<string, string>;
|
|
25
|
+
/** Serializers for `block`/`inlineBlock` nodes, keyed by `blockType`. */
|
|
26
|
+
serializers?: Record<string, (fields: JsonObject) => string>;
|
|
27
|
+
/** API key; defaults to `PAYLOAD_API_KEY`. */
|
|
28
|
+
token?: string;
|
|
29
|
+
/** Opt-in dev polling interval (seconds); omit to freeze for the session. */
|
|
30
|
+
pollInterval?: number;
|
|
31
|
+
/** Injected for tests; defaults to the global `fetch`. */
|
|
32
|
+
fetchImpl?: typeof fetch;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Payload content source. Pages through a collection's REST endpoint, maps
|
|
36
|
+
* each document's fields to frontmatter, and lowers its Lexical body to
|
|
37
|
+
* Markdown. Published documents only, unless `--preview` asks for drafts.
|
|
38
|
+
*/
|
|
39
|
+
export declare const payloadSource: (options: PayloadSourceOptions, ctx?: SourceContext) => ContentSource;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A field value on a Portable Text node: the arbitrary JSON the CMS query
|
|
3
|
+
* returned (custom blocks carry whatever fields the studio schema defines).
|
|
4
|
+
* Spans and mark defs appear as members so the block's typed fields conform
|
|
5
|
+
* to its index signature.
|
|
6
|
+
*/
|
|
7
|
+
export type PortableTextValue = string | number | boolean | null | undefined | PortableTextSpan | PortableTextMarkDef | PortableTextValue[] | {
|
|
8
|
+
[key: string]: PortableTextValue;
|
|
9
|
+
};
|
|
10
|
+
/** A single Portable Text node (block, image, or a custom type). */
|
|
11
|
+
export interface PortableTextBlock {
|
|
12
|
+
_type: string;
|
|
13
|
+
_key?: string;
|
|
14
|
+
style?: string;
|
|
15
|
+
listItem?: string;
|
|
16
|
+
level?: number;
|
|
17
|
+
children?: PortableTextSpan[];
|
|
18
|
+
markDefs?: PortableTextMarkDef[];
|
|
19
|
+
[key: string]: PortableTextValue;
|
|
20
|
+
}
|
|
21
|
+
interface PortableTextSpan {
|
|
22
|
+
_type: string;
|
|
23
|
+
text?: string;
|
|
24
|
+
marks?: string[];
|
|
25
|
+
}
|
|
26
|
+
interface PortableTextMarkDef {
|
|
27
|
+
_key: string;
|
|
28
|
+
_type: string;
|
|
29
|
+
href?: string;
|
|
30
|
+
}
|
|
31
|
+
export interface PortableTextOptions {
|
|
32
|
+
/** Resolve an image block to a URL (the adapter knows project/dataset). */
|
|
33
|
+
imageUrl?: (block: PortableTextBlock) => string | null;
|
|
34
|
+
/**
|
|
35
|
+
* Custom block-type serializers, keyed by `_type`; return Markdown or MDX.
|
|
36
|
+
* Setting any writes the source's entries as MDX.
|
|
37
|
+
*/
|
|
38
|
+
serializers?: Record<string, (block: PortableTextBlock) => string>;
|
|
39
|
+
}
|
|
40
|
+
/** Serialize a Portable Text array into a Markdown string. */
|
|
41
|
+
export declare const portableTextToMarkdown: (blocks: PortableTextBlock[], options?: PortableTextOptions) => string;
|
|
42
|
+
export {};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { PageRecord } from "../types.ts";
|
|
2
|
+
import type { ContentSource } from "./types.ts";
|
|
3
|
+
/** The subset of a scanned project the entry reader needs. */
|
|
4
|
+
export interface EntryReadContext {
|
|
5
|
+
/** The instantiated sources, keyed for `read()` lookups. */
|
|
6
|
+
sources?: ContentSource[];
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Read an entry's raw body text without assuming a filesystem path. Prefers the
|
|
10
|
+
* body captured at scan time (staged sources), then the owning source's lazy
|
|
11
|
+
* `read()`, then the back-compat `sourcePath` (any local file). Returns `""` when an
|
|
12
|
+
* entry can't be resolved, so callers degrade gracefully.
|
|
13
|
+
*/
|
|
14
|
+
export declare const readEntryText: (ctx: EntryReadContext, page: PageRecord) => Promise<string>;
|
|
15
|
+
/**
|
|
16
|
+
* Read an entry's raw body with `<include>` statements expanded — what search
|
|
17
|
+
* indexing, the `.md`/`.mdx` mirrors, and llms-full.txt should see, matching
|
|
18
|
+
* the spliced content the rendered page shows. Filesystem entries only
|
|
19
|
+
* (includes resolve as filesystem paths); everything else passes through
|
|
20
|
+
* verbatim. Expansion errors were already surfaced as scan diagnostics, so
|
|
21
|
+
* unresolvable statements simply stay verbatim here.
|
|
22
|
+
*/
|
|
23
|
+
export declare const readExpandedEntryText: (ctx: EntryReadContext, page: PageRecord) => Promise<string>;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import type { JsonObject, JsonValue } from "./json.ts";
|
|
2
|
+
import type { ContentSource, SourceContext, SourceEntry } from "./types.ts";
|
|
3
|
+
/** What every REST-backed CMS source needs to be a staged, cached source. */
|
|
4
|
+
export interface RemoteSourceOptions {
|
|
5
|
+
/** Pull every entry from the API; called on refresh and on each poll. */
|
|
6
|
+
fetchEntries: () => Promise<SourceEntry[]>;
|
|
7
|
+
name: string;
|
|
8
|
+
/** Opt-in dev polling interval (seconds); omit to freeze for the session. */
|
|
9
|
+
pollInterval?: number;
|
|
10
|
+
prefix?: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* The staged-source scaffolding a CMS adapter shares: a snapshot cache under
|
|
14
|
+
* `.blume/cache/<source>/` (or a name-derived dir when constructed directly
|
|
15
|
+
* as a custom source, without a context), cache-first dev loads, offline
|
|
16
|
+
* fallback, `read()` for raw export, and an opt-in polling `watch`.
|
|
17
|
+
*/
|
|
18
|
+
export declare const remoteSource: (options: RemoteSourceOptions, ctx?: SourceContext) => ContentSource;
|
|
19
|
+
/** The frontmatter a CMS document maps to. */
|
|
20
|
+
export interface RemoteFrontmatter {
|
|
21
|
+
description?: string;
|
|
22
|
+
draft?: boolean;
|
|
23
|
+
title?: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* A staged entry: Markdown body plus the frontmatter it was mapped from,
|
|
27
|
+
* written as `.mdx` when the body carries serializer output (see
|
|
28
|
+
* `writesMdx`).
|
|
29
|
+
*/
|
|
30
|
+
export declare const stagedEntry: (slug: string, data: RemoteFrontmatter, markdown: string, lastModified: string | undefined, format?: "md" | "mdx") => SourceEntry;
|
|
31
|
+
/** How a source calls its CMS: the API's auth headers and an injectable fetch. */
|
|
32
|
+
export interface RestClient {
|
|
33
|
+
/** Injected for tests; defaults to the global `fetch`. */
|
|
34
|
+
fetchImpl?: typeof fetch;
|
|
35
|
+
headers?: Record<string, string>;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* How long one CMS request may take before the source gives up on it. A
|
|
39
|
+
* stalled CMS would otherwise hold `scanProject()` — and every `blume dev`
|
|
40
|
+
* rescan — indefinitely, and the cache fallback can only kick in once the
|
|
41
|
+
* request rejects.
|
|
42
|
+
*/
|
|
43
|
+
export declare const REMOTE_TIMEOUT_MS = 30000;
|
|
44
|
+
/**
|
|
45
|
+
* GET a JSON endpoint. A non-2xx response is an error naming the status, so
|
|
46
|
+
* the source's cache fallback reports why (`401 Unauthorized`) instead of a
|
|
47
|
+
* parse failure on an error body; a request past {@link REMOTE_TIMEOUT_MS}
|
|
48
|
+
* rejects with a `TimeoutError`.
|
|
49
|
+
*/
|
|
50
|
+
export declare const fetchJson: (url: string, client: RestClient) => Promise<JsonValue>;
|
|
51
|
+
/** A query string from the fixed params plus a user's extra ones. */
|
|
52
|
+
export declare const queryString: (params: Record<string, string | undefined>) => string;
|
|
53
|
+
/** Field paths mapping a CMS document onto Blume meta + body. */
|
|
54
|
+
export interface RemoteFieldMap {
|
|
55
|
+
/** Field holding the renderable body (rich text, or a Markdown string). */
|
|
56
|
+
body?: string;
|
|
57
|
+
/** Field holding the page description. */
|
|
58
|
+
description?: string;
|
|
59
|
+
/** Field holding the last-modified ISO date. */
|
|
60
|
+
lastModified?: string;
|
|
61
|
+
/** Field holding the route slug. */
|
|
62
|
+
slug?: string;
|
|
63
|
+
/** Field holding the page title. */
|
|
64
|
+
title?: string;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Map a document to a staged entry. The slug falls back to the document's id
|
|
68
|
+
* when the slug field is missing or slugifies to nothing (pure punctuation),
|
|
69
|
+
* so distinct documents never collapse onto one `untitled.md`; a slashed
|
|
70
|
+
* slug keeps its segments. A string body is Markdown and passes through as
|
|
71
|
+
* `.md`; any other shape goes to the CMS's lowerer, and is written as `.mdx`
|
|
72
|
+
* when `lowersToMdx` (the source has serializers, see `writesMdx`).
|
|
73
|
+
*/
|
|
74
|
+
export declare const documentEntry: (doc: JsonObject, fields: Required<RemoteFieldMap>, id: string, lower: (body: JsonValue) => string, draft?: boolean, lowersToMdx?: boolean) => SourceEntry;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { ResolvedConfig } from "../schema.ts";
|
|
2
|
+
import type { ProjectContext } from "../types.ts";
|
|
3
|
+
import type { ContentSource } from "./types.ts";
|
|
4
|
+
export { resolveDocsCollection, resolveSourceRoot, sourcesOfKind, } from "./collection.ts";
|
|
5
|
+
export type { DocsCollection } from "./collection.ts";
|
|
6
|
+
/** Runtime knobs for a scan: dev/build mode, preview, and cache refresh. */
|
|
7
|
+
export interface SourceRuntime {
|
|
8
|
+
mode: "dev" | "build";
|
|
9
|
+
preview?: boolean;
|
|
10
|
+
refresh?: boolean;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Build the ordered list of content sources for a project. The config schema
|
|
14
|
+
* already desugared the zero-config shorthand into a single `filesystem()`
|
|
15
|
+
* descriptor, so every project has at least one entry here. A Blume-rendered
|
|
16
|
+
* OpenAPI reference contributes an internal staged source that lowers each
|
|
17
|
+
* operation into a real content page (routing/nav/search/OG).
|
|
18
|
+
*/
|
|
19
|
+
export declare const resolveSources: (config: ResolvedConfig, context: ProjectContext, runtime: SourceRuntime) => ContentSource[];
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { PortableTextBlock } from "./portable-text.ts";
|
|
2
|
+
import type { ContentSource, SourceContext } from "./types.ts";
|
|
3
|
+
/** The slice of `@sanity/client` this adapter relies on (so it's mockable). */
|
|
4
|
+
export interface SanityClientLike {
|
|
5
|
+
fetch: <T = unknown>(query: string) => Promise<T>;
|
|
6
|
+
}
|
|
7
|
+
/** Field paths mapping a Sanity document onto Blume meta + body. */
|
|
8
|
+
export interface SanityFieldMap {
|
|
9
|
+
/** Frontmatter title; default `title`. */
|
|
10
|
+
title?: string;
|
|
11
|
+
/** Frontmatter description; default `description`. */
|
|
12
|
+
description?: string;
|
|
13
|
+
/** Route slug (dot path); default `slug.current`. */
|
|
14
|
+
slug?: string;
|
|
15
|
+
/** Portable Text body field; default `body`. */
|
|
16
|
+
body?: string;
|
|
17
|
+
/** Last-modified ISO date; default `_updatedAt`. */
|
|
18
|
+
lastModified?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface SanitySourceOptions {
|
|
21
|
+
name: string;
|
|
22
|
+
prefix?: string;
|
|
23
|
+
projectId: string;
|
|
24
|
+
dataset: string;
|
|
25
|
+
/** Sanity API version (a date); default `2024-01-01`. */
|
|
26
|
+
apiVersion?: string;
|
|
27
|
+
/** GROQ query selecting the documents to import. */
|
|
28
|
+
query: string;
|
|
29
|
+
fields?: SanityFieldMap;
|
|
30
|
+
/** Custom Portable Text block serializers, keyed by `_type`. */
|
|
31
|
+
serializers?: Record<string, (block: PortableTextBlock) => string>;
|
|
32
|
+
/** Read token for private datasets; defaults to `SANITY_TOKEN`. */
|
|
33
|
+
token?: string;
|
|
34
|
+
/** Opt-in dev polling interval (seconds); omit to freeze for the session. */
|
|
35
|
+
pollInterval?: number;
|
|
36
|
+
/** Injected for tests; otherwise built from `@sanity/client`. */
|
|
37
|
+
client?: SanityClientLike;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Sanity content source. Runs a GROQ query, maps each document's fields to Blume
|
|
41
|
+
* frontmatter and its Portable Text body to Markdown, and stages the result.
|
|
42
|
+
*/
|
|
43
|
+
export declare const sanitySource: (options: SanitySourceOptions, ctx?: SourceContext) => ContentSource;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Strapi's Rich text (Blocks) field → Markdown. Covers every block the
|
|
3
|
+
* editor emits: paragraphs, headings, lists (nested), quotes, code, images,
|
|
4
|
+
* and links with the text modifiers.
|
|
5
|
+
*/
|
|
6
|
+
import type { JsonValue } from "./json.ts";
|
|
7
|
+
export interface StrapiBlocksOptions {
|
|
8
|
+
/** The Strapi origin a relative upload URL (`/uploads/x.png`) resolves against. */
|
|
9
|
+
baseUrl?: string;
|
|
10
|
+
}
|
|
11
|
+
/** Serialize a Blocks field value (an array of block nodes) to Markdown. */
|
|
12
|
+
export declare const strapiBlocksToMarkdown: (blocks: JsonValue, options?: StrapiBlocksOptions) => string;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { RemoteFieldMap } from "./remote.ts";
|
|
2
|
+
import type { ContentSource, SourceContext } from "./types.ts";
|
|
3
|
+
export interface StrapiSourceOptions {
|
|
4
|
+
name: string;
|
|
5
|
+
prefix?: string;
|
|
6
|
+
/** The Strapi origin (`https://cms.acme.dev`); its REST API is at `/api`. */
|
|
7
|
+
url: string;
|
|
8
|
+
/** The content type's plural API id (`articles`). */
|
|
9
|
+
contentType: string;
|
|
10
|
+
/** Locale code to fetch, for a localized content type. */
|
|
11
|
+
locale?: string;
|
|
12
|
+
/** The `populate` parameter; default `*`, which fills media and relations. */
|
|
13
|
+
populate?: string;
|
|
14
|
+
/**
|
|
15
|
+
* Field paths mapping an entry onto Blume meta + body. Defaults:
|
|
16
|
+
* `title`, `description`, `slug`, `content`, `updatedAt`.
|
|
17
|
+
*/
|
|
18
|
+
fields?: RemoteFieldMap;
|
|
19
|
+
/** Extra query parameters for the request (`filters[...]`, `sort`). */
|
|
20
|
+
params?: Record<string, string>;
|
|
21
|
+
/** API token; defaults to `STRAPI_API_TOKEN`. */
|
|
22
|
+
token?: string;
|
|
23
|
+
/** Opt-in dev polling interval (seconds); omit to freeze for the session. */
|
|
24
|
+
pollInterval?: number;
|
|
25
|
+
/** Injected for tests; defaults to the global `fetch`. */
|
|
26
|
+
fetchImpl?: typeof fetch;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Strapi content source. Pages through a content type's REST endpoint, maps
|
|
30
|
+
* each entry's fields to frontmatter, and lowers its Blocks body to
|
|
31
|
+
* Markdown. Published entries only, unless `--preview` asks for drafts.
|
|
32
|
+
*/
|
|
33
|
+
export declare const strapiSource: (options: StrapiSourceOptions, ctx?: SourceContext) => ContentSource;
|
|
@@ -113,6 +113,12 @@ export interface ContentSource {
|
|
|
113
113
|
readonly staged: boolean;
|
|
114
114
|
/** Optional route prefix; the source's routes namespace under `/<prefix>/`. */
|
|
115
115
|
readonly prefix?: string;
|
|
116
|
+
/**
|
|
117
|
+
* True for a source whose entries exist in one language and can never be
|
|
118
|
+
* translated (GitHub Releases). Its pages render without a language
|
|
119
|
+
* switcher, since every other locale would only repeat the same text.
|
|
120
|
+
*/
|
|
121
|
+
readonly monolingual?: boolean;
|
|
116
122
|
/**
|
|
117
123
|
* Resolved on-disk root, set by sources whose entries live on disk. For
|
|
118
124
|
* filesystem sources it drives folder-meta discovery (scan under this root)
|
|
@@ -137,6 +143,7 @@ export interface ContentSource {
|
|
|
137
143
|
/** Context passed to `normalizeEntry`, describing the owning source. */
|
|
138
144
|
export interface NormalizeContext {
|
|
139
145
|
source: {
|
|
146
|
+
monolingual?: boolean;
|
|
140
147
|
name: string;
|
|
141
148
|
prefix?: string;
|
|
142
149
|
staged: boolean;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { WatchListener } from "node:fs";
|
|
2
|
+
/**
|
|
3
|
+
* Directory segments that are never authored content: VCS, dependency trees,
|
|
4
|
+
* Blume's own generated project and build output, and framework/deploy caches.
|
|
5
|
+
* Both the content scan and the dev watcher skip these unconditionally, on top
|
|
6
|
+
* of the user's `content.exclude`.
|
|
7
|
+
*
|
|
8
|
+
* The scan needs them because a broadly-scoped `content.root` — `"."` or an app
|
|
9
|
+
* dir that also holds `node_modules`/`dist`, the common shape when migrating a
|
|
10
|
+
* docs app that lives at the repo or app root — would otherwise glob thousands
|
|
11
|
+
* of stray markdown files out of dependencies and build artifacts. `content.root`
|
|
12
|
+
* defaults to `docs/` where this rarely bites, but any wider root hits it.
|
|
13
|
+
*
|
|
14
|
+
* The watcher needs them because a recursive `fs.watch` rooted at the project
|
|
15
|
+
* also sees Blume's own `.blume/` output, which the dev server rewrites on every
|
|
16
|
+
* render (e.g. `.blume/.astro/data-store.json`). Left unfiltered, each such write
|
|
17
|
+
* re-triggers a rescan + runtime regeneration whose writes land back under
|
|
18
|
+
* `.blume/` and fire the watcher again: a self-sustaining loop that stalls page
|
|
19
|
+
* renders and floods the console. `fs.watch` has no ignore option, so we filter
|
|
20
|
+
* by the changed path in the callback.
|
|
21
|
+
*/
|
|
22
|
+
export declare const BLUME_IGNORE_DIRS: string[];
|
|
23
|
+
/**
|
|
24
|
+
* Baseline scan-ignore globs applied to every filesystem source, unioned with
|
|
25
|
+
* the user's `content.exclude`. Kept in sync with the watcher via the shared
|
|
26
|
+
* {@link BLUME_IGNORE_DIRS} so `load()` and `watch()` never disagree on what is
|
|
27
|
+
* content. `**\/<dir>/**` matches the directory at the content root or nested.
|
|
28
|
+
*/
|
|
29
|
+
export declare const baselineScanIgnore: () => string[];
|
|
30
|
+
/**
|
|
31
|
+
* Alias retained for the dev watcher's call site and its tests; the watcher and
|
|
32
|
+
* the scan share the same never-content directory set.
|
|
33
|
+
*/
|
|
34
|
+
export declare const BLUME_WATCH_IGNORE_DIRS: string[];
|
|
35
|
+
/** Extract single-segment ignore dirs (`foo`) from `foo/**`-style excludes. */
|
|
36
|
+
export declare const excludeDirSegments: (patterns: readonly string[]) => string[];
|
|
37
|
+
/**
|
|
38
|
+
* Build a recursive-watch listener that fires `onChange` for content changes but
|
|
39
|
+
* ignores events whose path crosses an ignored directory segment — one in
|
|
40
|
+
* `ignoreDirs`, or one `ignoreSegment` rejects, for a scan whose skip rule is
|
|
41
|
+
* a shape (every dot-name) rather than a list. A missing `filename` — rare;
|
|
42
|
+
* the platform couldn't name the changed path — falls through to `onChange`
|
|
43
|
+
* rather than silently dropping a real edit. Exported for testing.
|
|
44
|
+
*/
|
|
45
|
+
export declare const ignoringWatchListener: (onChange: () => void, ignoreDirs?: Iterable<string>, ignoreSegment?: (segment: string) => boolean) => WatchListener<string>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The longest prefix of `text` that renders within `max` display columns
|
|
3
|
+
* without cutting inside a grapheme cluster. Columns are `string-width`'s: a
|
|
4
|
+
* fullwidth or wide character counts 2, a combining mark 0, everything else 1
|
|
5
|
+
* — the same measure `blume audit` grades titles and meta descriptions with,
|
|
6
|
+
* so text cut here stays inside the audit's thresholds for every script, not
|
|
7
|
+
* just Latin. Grapheme segmentation is rule-based (UAX #29), so unlike word
|
|
8
|
+
* segmentation it does not drift across ICU builds, and it can never split a
|
|
9
|
+
* surrogate pair or halve an emoji sequence.
|
|
10
|
+
*/
|
|
11
|
+
export declare const columnsPrefix: (text: string, max: number) => string;
|
|
@@ -147,6 +147,11 @@ export interface PageRecord {
|
|
|
147
147
|
* checks skip these.
|
|
148
148
|
*/
|
|
149
149
|
fallback?: boolean;
|
|
150
|
+
/**
|
|
151
|
+
* True for pages from a source that publishes one language only (GitHub
|
|
152
|
+
* Releases): they render without a language switcher.
|
|
153
|
+
*/
|
|
154
|
+
monolingual?: boolean;
|
|
150
155
|
/**
|
|
151
156
|
* Content-relative path with the leading locale directory stripped, used for
|
|
152
157
|
* sidebar grouping so the locale dir is not surfaced as a nav group. Equals
|
|
@@ -208,6 +213,11 @@ export type NavNode = {
|
|
|
208
213
|
*/
|
|
209
214
|
display: SidebarDisplay;
|
|
210
215
|
icon?: string;
|
|
216
|
+
/**
|
|
217
|
+
* The group row's link: an explicit-config group's `root`, or the
|
|
218
|
+
* generated folder's index page route. Absent when there is no page at
|
|
219
|
+
* the group's own path, so the row never links to a 404.
|
|
220
|
+
*/
|
|
211
221
|
route?: string;
|
|
212
222
|
/**
|
|
213
223
|
* The group's URL path (its folder route prefix), even when the folder
|
|
@@ -289,6 +299,13 @@ export interface Navigation {
|
|
|
289
299
|
featured: FeaturedLink[];
|
|
290
300
|
/** Repo URL for the header link, or null when hidden (`navigation.repo`). */
|
|
291
301
|
repoUrl?: string | null;
|
|
302
|
+
/**
|
|
303
|
+
* Where the header's brand link points in this locale: `logo.href` moved
|
|
304
|
+
* into the locale's prefix when the locale serves that route, else left on
|
|
305
|
+
* the default route (a custom home page exists only at `/`). Set on i18n
|
|
306
|
+
* locale trees.
|
|
307
|
+
*/
|
|
308
|
+
brandHref?: string;
|
|
292
309
|
}
|
|
293
310
|
/** The full content graph: the source of truth for generated modules. */
|
|
294
311
|
export interface ContentGraph {
|
|
@@ -373,6 +390,8 @@ export interface RouteManifestEntry {
|
|
|
373
390
|
versionAlternates: VersionAlternate[];
|
|
374
391
|
/** True when this route renders fallback content for a missing translation. */
|
|
375
392
|
fallback?: boolean;
|
|
393
|
+
/** True when the page's source publishes one language only (no switcher). */
|
|
394
|
+
monolingual?: boolean;
|
|
376
395
|
/** Resolved "last updated" ISO date, when the feature is enabled. */
|
|
377
396
|
lastModified?: string;
|
|
378
397
|
}
|
|
@@ -382,7 +401,7 @@ export interface BlumeManifest {
|
|
|
382
401
|
blumeVersion: string;
|
|
383
402
|
projectRoot: string;
|
|
384
403
|
contentRoot: string;
|
|
385
|
-
output: ResolvedConfig["deployment"]["output"];
|
|
404
|
+
output: ResolvedConfig["deployment"]["options"]["output"];
|
|
386
405
|
routes: RouteManifestEntry[];
|
|
387
406
|
}
|
|
388
407
|
export {};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zod's own wording for unknown keys no removed-key hint covers, appended to
|
|
3
|
+
* a hint so an unrelated typo isn't silently dropped from the diagnostic
|
|
4
|
+
* beside it. Shared by every config object that names a removed field's
|
|
5
|
+
* replacement (the root config, `ai.ask`, `openapi()`/`asyncapi()`, …).
|
|
6
|
+
*/
|
|
7
|
+
export declare const unrecognizedKeysMessage: (keys: string[]) => string;
|