blume 2.0.1 → 2.0.2
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/CHANGELOG.md +82 -0
- package/dist/cli/{chunk-vtk4a6dg.js → chunk-00gs3wqs.js} +1 -1
- package/dist/cli/{chunk-fa25z98p.js → chunk-273ygyr4.js} +4 -3
- package/dist/cli/chunk-273ygyr4.js.map +11 -0
- package/dist/cli/{chunk-yw7dm696.js → chunk-3yce002v.js} +21 -8
- package/dist/cli/{chunk-yw7dm696.js.map → chunk-3yce002v.js.map} +3 -3
- package/dist/cli/{chunk-yt5n7ppj.js → chunk-4e9b9ra6.js} +17 -7
- package/dist/cli/chunk-4e9b9ra6.js.map +10 -0
- package/dist/cli/{chunk-fs23ddbb.js → chunk-5r8g91qn.js} +352 -676
- package/dist/cli/chunk-5r8g91qn.js.map +34 -0
- package/dist/cli/{chunk-6vm74dry.js → chunk-6dtt0zfn.js} +8 -8
- package/dist/cli/{chunk-qwsrynx5.js → chunk-6k4ftwze.js} +38 -19
- package/dist/cli/{chunk-qwsrynx5.js.map → chunk-6k4ftwze.js.map} +4 -4
- package/dist/cli/{chunk-qs4q5p4e.js → chunk-7mbqtmgb.js} +16 -7
- package/dist/cli/chunk-7mbqtmgb.js.map +10 -0
- package/dist/cli/{chunk-q5163e60.js → chunk-7vtckvaw.js} +21 -19
- package/dist/cli/chunk-7vtckvaw.js.map +11 -0
- package/dist/cli/{chunk-kdp5q7ke.js → chunk-8g8ytmgx.js} +17 -18
- package/dist/cli/{chunk-kdp5q7ke.js.map → chunk-8g8ytmgx.js.map} +2 -2
- package/dist/cli/{chunk-epjnccmv.js → chunk-91ws1n6j.js} +18 -15
- package/dist/cli/chunk-91ws1n6j.js.map +10 -0
- package/dist/cli/{chunk-fxypxtvm.js → chunk-bbnwccaz.js} +2 -2
- package/dist/cli/{chunk-m3vmjgmq.js → chunk-bfwp9vp6.js} +16 -8
- package/dist/cli/chunk-bfwp9vp6.js.map +10 -0
- package/dist/cli/{chunk-f2z5v128.js → chunk-d1v5rhy0.js} +14 -15
- package/dist/cli/{chunk-f2z5v128.js.map → chunk-d1v5rhy0.js.map} +2 -2
- package/dist/cli/{chunk-6crbhc3x.js → chunk-ddndchfr.js} +21 -6
- package/dist/cli/chunk-ddndchfr.js.map +14 -0
- package/dist/cli/{chunk-ce574jw2.js → chunk-esh98wmb.js} +1 -1
- package/dist/cli/{chunk-zxcczpyx.js → chunk-fsmrqk8a.js} +1 -1
- package/dist/cli/{chunk-hdpx1tax.js → chunk-g698a744.js} +5 -5
- package/dist/cli/{chunk-jts8mvcz.js → chunk-gs7r695n.js} +9 -3
- package/dist/cli/{chunk-jts8mvcz.js.map → chunk-gs7r695n.js.map} +3 -3
- package/dist/cli/{chunk-zxh4d9vy.js → chunk-h2ez8dzb.js} +4 -4
- package/dist/cli/{chunk-5shv93fd.js → chunk-h7k3nq3v.js} +2 -2
- package/dist/cli/{chunk-79jhk4py.js → chunk-hqp2ajnh.js} +251 -122
- package/dist/cli/chunk-hqp2ajnh.js.map +35 -0
- package/dist/cli/{chunk-2hn4b8z7.js → chunk-hr8ne106.js} +109 -40
- package/dist/cli/chunk-hr8ne106.js.map +13 -0
- package/dist/cli/{chunk-6hsn950k.js → chunk-j85scx15.js} +62 -18
- package/dist/cli/chunk-j85scx15.js.map +10 -0
- package/dist/cli/{chunk-s1p84fyh.js → chunk-k7pj68a8.js} +63 -22
- package/dist/cli/chunk-k7pj68a8.js.map +11 -0
- package/dist/cli/{chunk-ah61y8py.js → chunk-mqc662a6.js} +2 -2
- package/dist/cli/{chunk-ch6g3ar0.js → chunk-n1yg3tj3.js} +4 -4
- package/dist/cli/{chunk-mb2919y2.js → chunk-nfcyttvj.js} +17 -6
- package/dist/cli/chunk-nfcyttvj.js.map +10 -0
- package/dist/cli/{chunk-kpf8rrjc.js → chunk-pbg5a4s3.js} +56 -24
- package/dist/cli/chunk-pbg5a4s3.js.map +19 -0
- package/dist/cli/{chunk-jwyddg7y.js → chunk-ppzjqwx2.js} +21 -14
- package/dist/cli/{chunk-jwyddg7y.js.map → chunk-ppzjqwx2.js.map} +4 -4
- package/dist/cli/{chunk-dh8cwk36.js → chunk-qkb5a8sa.js} +24 -9
- package/dist/cli/chunk-qkb5a8sa.js.map +10 -0
- package/dist/cli/{chunk-wm7js3j9.js → chunk-sqw4ekg1.js} +2 -2
- package/dist/cli/{chunk-qkqwkpte.js → chunk-v6ya5kcb.js} +3083 -953
- package/dist/cli/chunk-v6ya5kcb.js.map +189 -0
- package/dist/cli/{chunk-fz5wtpmh.js → chunk-w4bxdvsa.js} +18 -15
- package/dist/cli/chunk-w4bxdvsa.js.map +10 -0
- package/dist/cli/{chunk-27g6wdth.js → chunk-wdrt2k2v.js} +2 -2
- package/dist/cli/{chunk-wgm7m9qk.js → chunk-xh43dwgw.js} +158 -43
- package/dist/cli/chunk-xh43dwgw.js.map +36 -0
- package/dist/cli/{chunk-s6jhgk0q.js → chunk-zp79m0ts.js} +2 -2
- package/dist/cli/index.js +160 -35
- package/dist/cli/index.js.map +4 -4
- package/dist/types/ai/agent-surface.d.ts +32 -0
- package/dist/types/ai/api-catalog.d.ts +7 -1
- package/dist/types/ai/ask-context.d.ts +7 -0
- package/dist/types/ai/component-markdown.d.ts +4 -4
- package/dist/types/ai/relative-links.d.ts +9 -4
- package/dist/types/ai/static-expression.d.ts +28 -0
- package/dist/types/analytics/databuddy.d.ts +43 -0
- package/dist/types/analytics/index.d.ts +2 -0
- package/dist/types/analytics/schema.d.ts +14 -0
- package/dist/types/cli/env.d.ts +5 -0
- package/dist/types/cli/init/scaffold.d.ts +19 -3
- package/dist/types/cli/init/starter-spec.d.ts +11 -0
- package/dist/types/core/base-path.d.ts +9 -0
- package/dist/types/core/config-input.d.ts +4 -4
- package/dist/types/core/config.d.ts +2 -2
- package/dist/types/core/graph.d.ts +2 -0
- package/dist/types/core/i18n-ui.d.ts +31 -0
- package/dist/types/core/i18n.d.ts +7 -1
- package/dist/types/core/links.d.ts +3 -1
- package/dist/types/core/load-module.d.ts +10 -0
- package/dist/types/core/locale-links.d.ts +12 -2
- package/dist/types/core/meta.d.ts +5 -1
- package/dist/types/core/nav-diagnostics.d.ts +10 -0
- package/dist/types/core/navigation.d.ts +38 -0
- package/dist/types/core/ordering-prefix.d.ts +4 -0
- package/dist/types/core/safe-links.d.ts +3 -1
- package/dist/types/core/schema.d.ts +52 -13
- package/dist/types/core/sources/github-releases.d.ts +5 -0
- package/dist/types/core/sources/lower.d.ts +14 -2
- package/dist/types/core/sources/normalize.d.ts +10 -1
- package/dist/types/core/sources/remote.d.ts +11 -1
- package/dist/types/core/sources/resolve.d.ts +12 -0
- package/dist/types/core/sources/types.d.ts +31 -0
- package/dist/types/core/types.d.ts +9 -0
- package/dist/types/deploy/adapters/node.d.ts +5 -2
- package/dist/types/deploy/adapters/types.d.ts +7 -0
- package/dist/types/deploy/cloudflare-negotiation.d.ts +3 -2
- package/dist/types/deploy/headers.d.ts +31 -7
- package/dist/types/deploy/node-headers.d.ts +43 -8
- package/dist/types/deploy/platforms/netlify.d.ts +27 -2
- package/dist/types/deploy/platforms/node.d.ts +6 -5
- package/dist/types/deploy/platforms/types.d.ts +7 -0
- package/dist/types/deploy/platforms/vercel.d.ts +3 -2
- package/dist/types/deploy/redirects.d.ts +7 -2
- package/dist/types/deploy/vercel-negotiation.d.ts +3 -2
- package/dist/types/openapi/model.d.ts +20 -6
- package/dist/types/search/sync/algolia.d.ts +3 -1
- package/docs/01-quickstart.mdx +3 -2
- package/docs/02-deployment.mdx +17 -8
- package/docs/08-faq.mdx +9 -2
- package/docs/advanced/changelog.mdx +1 -1
- package/docs/advanced/custom-pages.mdx +4 -2
- package/docs/cli/audit.mdx +2 -2
- package/docs/cli/doctor.mdx +2 -2
- package/docs/cli/evals.mdx +2 -2
- package/docs/cli/index.mdx +4 -1
- package/docs/cli/translate.mdx +1 -1
- package/docs/configuration/analytics.mdx +23 -2
- package/docs/configuration/assistant.mdx +1 -1
- package/docs/configuration/customization.mdx +4 -3
- package/docs/configuration/index.mdx +5 -3
- package/docs/configuration/search.mdx +1 -1
- package/docs/content/components.mdx +1 -1
- package/docs/content/frontmatter.mdx +5 -1
- package/docs/content/i18n.mdx +1 -1
- package/docs/content/index.mdx +4 -2
- package/docs/content/meta.mdx +5 -3
- package/docs/content/navigation.mdx +29 -4
- package/docs/content/sources.mdx +18 -12
- package/docs/content/versioning.mdx +1 -0
- package/docs/discoverability/agent-discovery.mdx +21 -7
- package/docs/discoverability/index.mdx +2 -2
- package/docs/discoverability/llms-txt.mdx +2 -5
- package/docs/discoverability/markdown.mdx +5 -3
- package/docs/discoverability/mcp.mdx +4 -0
- package/docs/discoverability/metadata.mdx +3 -2
- package/docs/discoverability/open-graph.mdx +6 -4
- package/docs/discoverability/rss.mdx +3 -1
- package/docs/references/asyncapi.mdx +1 -1
- package/docs/references/graphql.mdx +2 -2
- package/docs/references/openapi.mdx +3 -3
- package/package.json +1 -1
- package/skills/blume-migrate/SKILL.md +6 -6
- package/skills/blume-migrate/references/docusaurus.md +6 -6
- package/skills/blume-migrate/references/mintlify.md +3 -3
- package/skills/blume-migrate/references/monorepo.md +1 -1
- package/skills/blume-migrate/references/nextra.md +1 -1
- package/skills/blume-migrate/references/starlight.md +5 -5
- package/skills/blume-migrate/scripts/mintlify-codemod.mjs +2 -2
- package/skills/blume-update-docs/references/audit-checklist.md +1 -1
- package/src/ai/agent-surface.ts +56 -0
- package/src/ai/api/spec.ts +15 -2
- package/src/ai/api-catalog.ts +7 -1
- package/src/ai/ask-context.ts +14 -2
- package/src/ai/ask-data.ts +26 -12
- package/src/ai/component-markdown.ts +43 -37
- package/src/ai/link-headers.ts +8 -3
- package/src/ai/llms.ts +4 -3
- package/src/ai/markdown.ts +23 -11
- package/src/ai/mcp/server.ts +78 -7
- package/src/ai/relative-links.ts +78 -10
- package/src/ai/static-expression.ts +416 -0
- package/src/ai/visibility.ts +45 -14
- package/src/analytics/databuddy.ts +67 -0
- package/src/analytics/head.ts +4 -0
- package/src/analytics/index.ts +2 -0
- package/src/analytics/posthog.ts +21 -3
- package/src/analytics/schema.ts +2 -0
- package/src/astro/generate.ts +71 -27
- package/src/astro/templates.ts +61 -23
- package/src/audit/catalog.ts +2 -2
- package/src/audit/checks/assets.ts +25 -5
- package/src/audit/checks/content.ts +20 -2
- package/src/audit/checks/i18n.ts +46 -8
- package/src/audit/checks/indexability.ts +39 -19
- package/src/audit/checks/links.ts +14 -0
- package/src/audit/checks/llms.ts +6 -3
- package/src/audit/checks/network.ts +3 -1
- package/src/audit/checks/og-image.ts +10 -0
- package/src/audit/checks/robots.ts +6 -1
- package/src/audit/checks/sitemap.ts +56 -31
- package/src/audit/checks/social.ts +21 -2
- package/src/audit/crawl.ts +88 -15
- package/src/audit/report.ts +54 -17
- package/src/audit/run.ts +1 -0
- package/src/audit/types.ts +18 -0
- package/src/audit/url.ts +37 -6
- package/src/cli/build-failure.ts +50 -0
- package/src/cli/commands/audit.ts +7 -0
- package/src/cli/commands/build.ts +19 -5
- package/src/cli/commands/check.ts +2 -0
- package/src/cli/commands/eval.ts +1 -7
- package/src/cli/commands/init.ts +15 -5
- package/src/cli/commands/preview.ts +15 -0
- package/src/cli/commands/sync.ts +2 -0
- package/src/cli/commands/translate.ts +9 -6
- package/src/cli/commands/upgrade.ts +11 -0
- package/src/cli/eject-scripts.ts +32 -7
- package/src/cli/env.ts +12 -1
- package/src/cli/init/scaffold.ts +117 -11
- package/src/cli/init/starter-spec.ts +235 -0
- package/src/components/content/AccordionItem.astro +26 -22
- package/src/components/content/Badge.astro +2 -9
- package/src/components/content/Card.astro +2 -2
- package/src/components/content/Component.astro +9 -3
- package/src/components/content/Expandable.astro +5 -1
- package/src/components/content/Frame.astro +2 -7
- package/src/components/content/GithubInfo.astro +12 -2
- package/src/components/content/Prompt.astro +2 -7
- package/src/components/content/Tabs.astro +54 -5
- package/src/components/content/Tile.astro +1 -1
- package/src/components/content/Tooltip.astro +69 -7
- package/src/components/content/Tree.astro +7 -2
- package/src/components/content/TypeTable.astro +10 -5
- package/src/components/content/Update.astro +8 -2
- package/src/components/content/auto-type-table.ts +4 -1
- package/src/components/content/badge-color.ts +17 -0
- package/src/components/content/base-href.ts +18 -3
- package/src/components/content/inline-markdown.ts +27 -7
- package/src/components/copy-feedback.ts +35 -8
- package/src/components/islands/assistant.tsx +16 -2
- package/src/components/islands/hooks.ts +7 -2
- package/src/components/islands/webmcp.ts +12 -8
- package/src/components/layout/Banner.astro +23 -4
- package/src/components/layout/Header.astro +22 -9
- package/src/components/layout/Logo.astro +5 -0
- package/src/components/layout/NavSelector.astro +6 -1
- package/src/components/layout/NavTabMenu.astro +133 -0
- package/src/components/layout/NavTree.astro +15 -6
- package/src/components/layout/NavTreeCache.astro +5 -2
- package/src/components/layout/NavTreeScript.astro +45 -5
- package/src/components/layout/PageLayout.astro +22 -8
- package/src/components/layout/ReferenceLayout.astro +4 -1
- package/src/components/layout/RootLayout.astro +21 -8
- package/src/components/layout/Search.astro +5 -1
- package/src/components/layout/analytics-client.ts +2 -0
- package/src/components/openapi/GraphqlType.astro +11 -3
- package/src/components/openapi/MessageComposer.astro +1 -1
- package/src/components/openapi/Operation.astro +21 -5
- package/src/components/openapi/PanelTabs.astro +4 -1
- package/src/components/openapi/Playground.astro +8 -2
- package/src/components/openapi/RequestPanel.astro +9 -5
- package/src/components/openapi/SchemaProperty.astro +11 -33
- package/src/components/openapi/SchemaTable.astro +27 -52
- package/src/components/openapi/helpers.ts +90 -12
- package/src/components/openapi/message-composer.ts +8 -0
- package/src/components/openapi/message-model.ts +12 -2
- package/src/components/openapi/message.ts +4 -1
- package/src/components/openapi/operation-model.ts +40 -8
- package/src/components/openapi/panel.ts +29 -5
- package/src/components/openapi/playground-client.ts +37 -7
- package/src/components/openapi/playground-schema.ts +25 -6
- package/src/components/openapi/request.ts +2 -0
- package/src/components/openapi/schema-tree.ts +203 -0
- package/src/components/openapi/snippets.ts +30 -15
- package/src/components/openapi/validate-json.ts +1 -1
- package/src/core/base-path.ts +15 -0
- package/src/core/config-input.ts +4 -4
- package/src/core/config.ts +18 -4
- package/src/core/diagnostics.ts +217 -30
- package/src/core/graph.ts +120 -11
- package/src/core/i18n-ui.ts +39 -2
- package/src/core/i18n.ts +13 -2
- package/src/core/links.ts +7 -4
- package/src/core/load-module.ts +20 -0
- package/src/core/locale-links.ts +17 -17
- package/src/core/manifest.ts +3 -2
- package/src/core/meta.ts +69 -6
- package/src/core/nav-diagnostics.ts +56 -1
- package/src/core/navigation.ts +245 -76
- package/src/core/ordering-prefix.ts +27 -0
- package/src/core/project-graph.ts +23 -1
- package/src/core/safe-href.ts +53 -1
- package/src/core/safe-links.ts +11 -2
- package/src/core/schema.ts +70 -14
- package/src/core/sources/assets.ts +83 -41
- package/src/core/sources/contentful-rich-text.ts +3 -2
- package/src/core/sources/contentful.ts +25 -12
- package/src/core/sources/filesystem.ts +5 -1
- package/src/core/sources/github-releases.ts +106 -5
- package/src/core/sources/lexical.ts +9 -4
- package/src/core/sources/lower.ts +79 -26
- package/src/core/sources/mdx-remote.ts +1 -0
- package/src/core/sources/normalize.ts +132 -30
- package/src/core/sources/notion.ts +26 -10
- package/src/core/sources/obsidian.ts +17 -3
- package/src/core/sources/payload.ts +1 -0
- package/src/core/sources/portable-text.ts +63 -44
- package/src/core/sources/remote.ts +18 -2
- package/src/core/sources/resolve.ts +52 -33
- package/src/core/sources/sanity.ts +1 -0
- package/src/core/sources/strapi-blocks.ts +9 -4
- package/src/core/sources/strapi.ts +1 -0
- package/src/core/sources/types.ts +31 -0
- package/src/core/types.ts +9 -0
- package/src/core/ui-packs/ar.ts +13 -0
- package/src/core/ui-packs/bg.ts +13 -0
- package/src/core/ui-packs/bn.ts +13 -0
- package/src/core/ui-packs/ca.ts +13 -0
- package/src/core/ui-packs/cs.ts +13 -0
- package/src/core/ui-packs/da.ts +13 -0
- package/src/core/ui-packs/de.ts +13 -0
- package/src/core/ui-packs/el.ts +13 -0
- package/src/core/ui-packs/es.ts +13 -0
- package/src/core/ui-packs/fa.ts +13 -0
- package/src/core/ui-packs/fi.ts +13 -0
- package/src/core/ui-packs/fr.ts +13 -0
- package/src/core/ui-packs/he.ts +13 -0
- package/src/core/ui-packs/hi.ts +13 -0
- package/src/core/ui-packs/hr.ts +13 -0
- package/src/core/ui-packs/hu.ts +13 -0
- package/src/core/ui-packs/id.ts +13 -0
- package/src/core/ui-packs/it.ts +13 -0
- package/src/core/ui-packs/ja.ts +13 -0
- package/src/core/ui-packs/ko.ts +13 -0
- package/src/core/ui-packs/nl.ts +13 -0
- package/src/core/ui-packs/no.ts +13 -0
- package/src/core/ui-packs/pl.ts +13 -0
- package/src/core/ui-packs/pt-br.ts +13 -0
- package/src/core/ui-packs/pt.ts +13 -0
- package/src/core/ui-packs/ro.ts +13 -0
- package/src/core/ui-packs/ru.ts +13 -0
- package/src/core/ui-packs/sk.ts +13 -0
- package/src/core/ui-packs/sr.ts +13 -0
- package/src/core/ui-packs/sv.ts +13 -0
- package/src/core/ui-packs/th.ts +13 -0
- package/src/core/ui-packs/tr.ts +13 -0
- package/src/core/ui-packs/uk.ts +13 -0
- package/src/core/ui-packs/vi.ts +13 -0
- package/src/core/ui-packs/zh-tw.ts +13 -0
- package/src/core/ui-packs/zh.ts +13 -0
- package/src/core/version-cut.ts +17 -2
- package/src/core/versions.ts +4 -1
- package/src/deploy/adapters/node.ts +5 -2
- package/src/deploy/adapters/registry.ts +2 -1
- package/src/deploy/adapters/types.ts +13 -1
- package/src/deploy/artifacts.ts +25 -5
- package/src/deploy/cloudflare-negotiation.ts +23 -4
- package/src/deploy/headers.ts +67 -51
- package/src/deploy/node-headers.ts +148 -27
- package/src/deploy/platforms/cloudflare.ts +1 -0
- package/src/deploy/platforms/netlify.ts +82 -5
- package/src/deploy/platforms/node.ts +7 -5
- package/src/deploy/platforms/static.ts +1 -0
- package/src/deploy/platforms/types.ts +7 -0
- package/src/deploy/platforms/vercel.ts +9 -3
- package/src/deploy/redirects.ts +14 -3
- package/src/deploy/vercel-negotiation.ts +35 -3
- package/src/eval/agents.ts +10 -2
- package/src/eval/run.ts +25 -0
- package/src/markdown/base-links.ts +55 -8
- package/src/markdown/index.ts +6 -3
- package/src/markdown/relative-links.ts +3 -23
- package/src/markdown/route-snapshot.ts +37 -0
- package/src/og/card.ts +20 -4
- package/src/og/derive.ts +145 -4
- package/src/openapi/graphql-build.ts +28 -2
- package/src/openapi/model.ts +77 -13
- package/src/openapi/render-mdx.ts +10 -1
- package/src/registry/eject.ts +119 -22
- package/src/search/documents.ts +22 -1
- package/src/search/sync/algolia.ts +36 -2
- package/src/sources/registry.ts +5 -0
- package/src/theme/entry.ts +11 -4
- package/src/translate/agents.ts +6 -1
- package/src/translate/ledger.ts +26 -3
- package/src/translate/meta.ts +11 -3
- package/src/translate/run.ts +11 -5
- package/src/translate/validate.ts +10 -1
- package/src/translate/work-list.ts +36 -3
- package/src/upgrade/upgrade.ts +36 -4
- package/dist/cli/chunk-2hn4b8z7.js.map +0 -12
- package/dist/cli/chunk-6crbhc3x.js.map +0 -14
- package/dist/cli/chunk-6hsn950k.js.map +0 -10
- package/dist/cli/chunk-79jhk4py.js.map +0 -35
- package/dist/cli/chunk-82bbrxdn.js +0 -51
- package/dist/cli/chunk-82bbrxdn.js.map +0 -10
- package/dist/cli/chunk-abh8yjkn.js +0 -31
- package/dist/cli/chunk-abh8yjkn.js.map +0 -10
- package/dist/cli/chunk-dh8cwk36.js.map +0 -10
- package/dist/cli/chunk-epjnccmv.js.map +0 -10
- package/dist/cli/chunk-fa25z98p.js.map +0 -11
- package/dist/cli/chunk-fs23ddbb.js.map +0 -35
- package/dist/cli/chunk-fz5wtpmh.js.map +0 -10
- package/dist/cli/chunk-kpf8rrjc.js.map +0 -19
- package/dist/cli/chunk-m3vmjgmq.js.map +0 -10
- package/dist/cli/chunk-mb2919y2.js.map +0 -10
- package/dist/cli/chunk-q5163e60.js.map +0 -11
- package/dist/cli/chunk-qkqwkpte.js.map +0 -182
- package/dist/cli/chunk-qs4q5p4e.js.map +0 -10
- package/dist/cli/chunk-s1p84fyh.js.map +0 -10
- package/dist/cli/chunk-wgm7m9qk.js.map +0 -36
- package/dist/cli/chunk-yt5n7ppj.js.map +0 -10
- /package/dist/cli/{chunk-vtk4a6dg.js.map → chunk-00gs3wqs.js.map} +0 -0
- /package/dist/cli/{chunk-6vm74dry.js.map → chunk-6dtt0zfn.js.map} +0 -0
- /package/dist/cli/{chunk-fxypxtvm.js.map → chunk-bbnwccaz.js.map} +0 -0
- /package/dist/cli/{chunk-ce574jw2.js.map → chunk-esh98wmb.js.map} +0 -0
- /package/dist/cli/{chunk-zxcczpyx.js.map → chunk-fsmrqk8a.js.map} +0 -0
- /package/dist/cli/{chunk-hdpx1tax.js.map → chunk-g698a744.js.map} +0 -0
- /package/dist/cli/{chunk-zxh4d9vy.js.map → chunk-h2ez8dzb.js.map} +0 -0
- /package/dist/cli/{chunk-5shv93fd.js.map → chunk-h7k3nq3v.js.map} +0 -0
- /package/dist/cli/{chunk-ah61y8py.js.map → chunk-mqc662a6.js.map} +0 -0
- /package/dist/cli/{chunk-ch6g3ar0.js.map → chunk-n1yg3tj3.js.map} +0 -0
- /package/dist/cli/{chunk-wm7js3j9.js.map → chunk-sqw4ekg1.js.map} +0 -0
- /package/dist/cli/{chunk-27g6wdth.js.map → chunk-wdrt2k2v.js.map} +0 -0
- /package/dist/cli/{chunk-s6jhgk0q.js.map → chunk-zp79m0ts.js.map} +0 -0
|
@@ -6,38 +6,39 @@ import {
|
|
|
6
6
|
TEMPLATES,
|
|
7
7
|
PACKAGE_MANAGERS,
|
|
8
8
|
commandsFor,
|
|
9
|
+
cdCommand,
|
|
9
10
|
detectPackageManager,
|
|
10
11
|
validateContentDir,
|
|
11
12
|
titleize,
|
|
13
|
+
outsidePnpmWorkspace,
|
|
12
14
|
workspaceNote,
|
|
13
15
|
buildPlan,
|
|
14
16
|
applyPlan,
|
|
15
17
|
readExistingPackage,
|
|
16
18
|
nextSteps
|
|
17
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-v6ya5kcb.js";
|
|
18
20
|
import {
|
|
19
21
|
commandMeta,
|
|
20
22
|
logger
|
|
21
23
|
} from "./index.js";
|
|
22
|
-
import"./chunk-
|
|
23
|
-
import"./chunk-
|
|
24
|
-
import"./chunk-
|
|
25
|
-
import"./chunk-
|
|
26
|
-
import"./chunk-
|
|
27
|
-
import"./chunk-
|
|
28
|
-
import"./chunk-vtk4a6dg.js";
|
|
24
|
+
import"./chunk-ddndchfr.js";
|
|
25
|
+
import"./chunk-gs7r695n.js";
|
|
26
|
+
import"./chunk-hr8ne106.js";
|
|
27
|
+
import"./chunk-sqw4ekg1.js";
|
|
28
|
+
import"./chunk-xh43dwgw.js";
|
|
29
|
+
import"./chunk-00gs3wqs.js";
|
|
29
30
|
import"./chunk-jq5n4avg.js";
|
|
30
|
-
import"./chunk-
|
|
31
|
-
import"./chunk-
|
|
31
|
+
import"./chunk-5r8g91qn.js";
|
|
32
|
+
import"./chunk-fsmrqk8a.js";
|
|
32
33
|
import {
|
|
33
34
|
eject
|
|
34
|
-
} from "./chunk-
|
|
35
|
+
} from "./chunk-j85scx15.js";
|
|
35
36
|
import {
|
|
36
37
|
updatePackageScripts
|
|
37
|
-
} from "./chunk-
|
|
38
|
+
} from "./chunk-4e9b9ra6.js";
|
|
38
39
|
import {
|
|
39
40
|
installDependencies
|
|
40
|
-
} from "./chunk-
|
|
41
|
+
} from "./chunk-h7k3nq3v.js";
|
|
41
42
|
|
|
42
43
|
// src/cli/commands/init.ts
|
|
43
44
|
import * as clack from "@clack/prompts";
|
|
@@ -137,7 +138,7 @@ var collectAnswers = async (prompter, flags, defaults) => {
|
|
|
137
138
|
};
|
|
138
139
|
|
|
139
140
|
// src/cli/commands/init.ts
|
|
140
|
-
var cdStep = (answers) => answers.directory === "." ? [] : [
|
|
141
|
+
var cdStep = (answers) => answers.directory === "." ? [] : [cdCommand(answers.directory)];
|
|
141
142
|
var installScaffold = async (root, answers, interactive) => {
|
|
142
143
|
const command = commandsFor(answers.packageManager).install;
|
|
143
144
|
const spinner2 = interactive ? clack.spinner() : undefined;
|
|
@@ -191,7 +192,8 @@ var ejectScaffold = async (root, answers, needsInstall) => {
|
|
|
191
192
|
${steps.join(`
|
|
192
193
|
`)}`);
|
|
193
194
|
} catch (error) {
|
|
194
|
-
|
|
195
|
+
const { message } = error;
|
|
196
|
+
logger.warn(needsInstall ? `Scaffolded, but eject needs the project's dependencies installed to load blume.config.ts: ${message}` : `Scaffolded, but eject failed: ${message}`);
|
|
195
197
|
const steps = [...cd, ...install, `${commands.exec} blume eject --yes`];
|
|
196
198
|
logger.box(`Next steps:
|
|
197
199
|
|
|
@@ -271,7 +273,7 @@ var initCommand = defineCommand({
|
|
|
271
273
|
template
|
|
272
274
|
}, { cwd, userAgent: process.env.npm_config_user_agent });
|
|
273
275
|
if (collected === null) {
|
|
274
|
-
clack.cancel("
|
|
276
|
+
clack.cancel("Canceled — nothing was written.");
|
|
275
277
|
process.exit(0);
|
|
276
278
|
}
|
|
277
279
|
answers = collected;
|
|
@@ -302,7 +304,7 @@ var initCommand = defineCommand({
|
|
|
302
304
|
if (ignored.length > 0) {
|
|
303
305
|
sink.success(`Added ${ignored.join(", ")} to .gitignore`);
|
|
304
306
|
}
|
|
305
|
-
const shouldInstall = createdPackage && args.install;
|
|
307
|
+
const shouldInstall = createdPackage && args.install && !outsidePnpmWorkspace(root, answers);
|
|
306
308
|
if (note) {
|
|
307
309
|
(interactive ? clack.log : logger).warn(note);
|
|
308
310
|
}
|
|
@@ -326,5 +328,5 @@ export {
|
|
|
326
328
|
initCommand
|
|
327
329
|
};
|
|
328
330
|
|
|
329
|
-
//# debugId=
|
|
330
|
-
//# sourceMappingURL=chunk-
|
|
331
|
+
//# debugId=5DDACDA0D27BF37E64756E2164756E21
|
|
332
|
+
//# sourceMappingURL=chunk-7vtckvaw.js.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/cli/commands/init.ts", "../src/cli/init/questions.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import * as clack from \"@clack/prompts\";\nimport { defineCommand } from \"citty\";\nimport { resolve } from \"pathe\";\n\nimport { ensureGitignore } from \"../../core/gitignore.ts\";\nimport { eject } from \"../../registry/eject.ts\";\nimport { commandMeta } from \"../command-meta.ts\";\nimport { updatePackageScripts } from \"../eject-scripts.ts\";\nimport { installDependencies } from \"../init/install.ts\";\nimport { collectAnswers } from \"../init/questions.ts\";\nimport {\n applyPlan,\n buildPlan,\n cdCommand,\n commandsFor,\n detectPackageManager,\n nextSteps,\n outsidePnpmWorkspace,\n PACKAGE_MANAGERS,\n readExistingPackage,\n TEMPLATES,\n validateContentDir,\n workspaceNote,\n} from \"../init/scaffold.ts\";\nimport type { InitAnswers } from \"../init/scaffold.ts\";\nimport { logger } from \"../log.ts\";\n\n/** The `cd` line that opens every next-steps hint, when one is needed. */\nconst cdStep = (answers: InitAnswers): string[] =>\n answers.directory === \".\" ? [] : [cdCommand(answers.directory)];\n\n/**\n * Install the scaffolded project's dependencies. Interactive runs hide the\n * package manager's output behind a spinner; `--yes`/CI runs stream it. On\n * failure the scaffold is left intact and the exact retry command is printed\n * before exiting non-zero, so a CI wrapper can tell the two outcomes apart.\n */\nconst installScaffold = async (\n root: string,\n answers: InitAnswers,\n interactive: boolean\n): Promise<void> => {\n const command = commandsFor(answers.packageManager).install;\n const spinner = interactive ? clack.spinner() : undefined;\n if (spinner) {\n spinner.start(`Installing dependencies (${command})`);\n } else {\n logger.info(`Installing dependencies (${command})…`);\n }\n const outcome = await installDependencies(root, answers.packageManager, {\n quiet: interactive,\n });\n if (outcome.failure === undefined) {\n if (spinner) {\n spinner.stop(\"Installed dependencies\");\n } else {\n logger.success(\"Installed dependencies\");\n }\n return;\n }\n const retry = [...cdStep(answers), command];\n const hint = `Project created successfully, but dependency installation failed.\\n\\nRetry with:\\n\\n ${retry.join(\"\\n \")}\\n`;\n if (spinner) {\n spinner.stop(\"Dependency installation failed\");\n clack.log.error(outcome.failure);\n clack.note(hint.trimEnd());\n clack.outro(\"Scaffolded without dependencies.\");\n } else {\n logger.error(outcome.failure);\n logger.box(hint.trimEnd());\n }\n process.exit(1);\n};\n\n/**\n * Eject the freshly scaffolded project, or print the install-then-eject path.\n * Eject jiti-loads the scaffolded blume.config.ts, whose `import { defineConfig }\n * from \"blume\"` only resolves once dependencies are installed (or blume is\n * hoisted from an ancestor node_modules, as in a monorepo) — so the fallback\n * below is the common path when the install step was skipped.\n */\nconst ejectScaffold = async (\n root: string,\n answers: InitAnswers,\n needsInstall: boolean\n): Promise<void> => {\n const commands = commandsFor(answers.packageManager);\n const cd = cdStep(answers);\n const install = needsInstall ? [commands.install] : [];\n try {\n const { dependencies } = await eject(root);\n // The scaffolded scripts point at the Blume CLI; the ejected app runs\n // Astro directly (mirroring the standalone `blume eject` command).\n const added = await updatePackageScripts(root, dependencies);\n logger.success(\"Ejected to a standalone Astro project.\");\n // The packages eject added aren't installed yet, even when the scaffold's\n // own install already ran, so install comes first either way.\n const ejectInstall = added.length > 0 ? [commands.install] : install;\n const steps = [...cd, ...ejectInstall, commands.dev];\n logger.box(`Next steps:\\n\\n ${steps.join(\"\\n \")}`);\n } catch (error) {\n // SAFETY: eject and the script rewrite throw Error instances; only the\n // message is surfaced in the fallback hint.\n const { message } = error as Error;\n // Only a skipped install explains the failure; after an install that ran,\n // the error itself is the reason.\n logger.warn(\n needsInstall\n ? `Scaffolded, but eject needs the project's dependencies installed to load blume.config.ts: ${message}`\n : `Scaffolded, but eject failed: ${message}`\n );\n const steps = [...cd, ...install, `${commands.exec} blume eject --yes`];\n logger.box(`Next steps:\\n\\n ${steps.join(\"\\n \")}`);\n }\n};\n\n/**\n * Print the closing next steps. An existing package.json was left alone, so\n * the steps add what it lacks; a workspace `note` already printed ahead of an\n * install that ran, so it closes the steps only when the install is still the\n * user's to run.\n */\nconst printNextSteps = async (\n root: string,\n answers: InitAnswers,\n outcome: {\n createdPackage: boolean;\n interactive: boolean;\n needsInstall: boolean;\n note: string | undefined;\n }\n): Promise<void> => {\n const existing = outcome.createdPackage\n ? undefined\n : await readExistingPackage(root);\n const steps = nextSteps(\n answers,\n outcome.needsInstall,\n existing,\n outcome.needsInstall ? outcome.note : undefined\n );\n if (outcome.interactive) {\n clack.note(steps.trimEnd());\n clack.outro(\"You're all set.\");\n } else {\n // consola's box pads its content itself; a trailing newline would add\n // blank rows at the bottom.\n logger.box(steps.trimEnd());\n }\n};\n\n/**\n * Validate the enum-valued flags up front, exiting with the accepted values\n * on a typo so a bad flag never reaches the prompts.\n */\nconst resolveFlags = (args: {\n \"package-manager\"?: string;\n template?: string;\n}) => {\n const template = TEMPLATES.find((candidate) => candidate === args.template);\n if (args.template !== undefined && template === undefined) {\n logger.error(\n `Unknown template \"${args.template}\" (use ${TEMPLATES.join(\" | \")}).`\n );\n process.exit(1);\n }\n const pm = PACKAGE_MANAGERS.find(\n (candidate) => candidate === args[\"package-manager\"]\n );\n if (args[\"package-manager\"] !== undefined && pm === undefined) {\n logger.error(\n `Unknown package manager \"${args[\"package-manager\"]}\" (use ${PACKAGE_MANAGERS.join(\" | \")}).`\n );\n process.exit(1);\n }\n return { pm, template };\n};\n\nexport const initCommand = defineCommand({\n args: {\n \"content-dir\": {\n description: \"Content directory.\",\n type: \"string\",\n },\n dir: {\n description: \"Directory to scaffold into (default: current directory).\",\n required: false,\n type: \"positional\",\n },\n eject: {\n description: \"Eject to a standalone Astro project after scaffolding.\",\n type: \"boolean\",\n },\n install: {\n default: true,\n description: \"Install dependencies after scaffolding.\",\n negativeDescription: \"Skip installing dependencies after scaffolding.\",\n type: \"boolean\",\n },\n \"package-manager\": {\n description:\n \"Package manager to install with and print in the next steps (npm|pnpm|yarn|bun).\",\n type: \"string\",\n },\n template: {\n description: \"Starter template: docs | api | sdk | changelog.\",\n type: \"string\",\n },\n yes: {\n description: \"Skip prompts and scaffold with defaults.\",\n type: \"boolean\",\n },\n },\n meta: commandMeta.init,\n async run({ args }) {\n const cwd = process.cwd();\n const { pm, template } = resolveFlags(args);\n\n const interactive =\n !args.yes &&\n process.stdin.isTTY === true &&\n clack.isTTY(process.stdout) &&\n !clack.isCI();\n\n let answers: InitAnswers;\n if (interactive) {\n clack.intro(\"blume init\");\n const collected = await collectAnswers(\n clack,\n {\n contentDir: args[\"content-dir\"],\n directory: args.dir,\n packageManager: pm,\n template,\n },\n { cwd, userAgent: process.env.npm_config_user_agent }\n );\n if (collected === null) {\n clack.cancel(\"Canceled — nothing was written.\");\n process.exit(0);\n }\n answers = collected;\n } else {\n answers = {\n contentDir: args[\"content-dir\"] ?? \"docs\",\n directory: args.dir ?? \".\",\n packageManager:\n pm ?? detectPackageManager(process.env.npm_config_user_agent),\n sources: [\"filesystem\"],\n template: template ?? \"docs\",\n title: \"My Docs\",\n };\n }\n\n const root = resolve(cwd, answers.directory);\n // Interactive runs validate this inline, but an explicit --content-dir\n // flag skips that prompt, so guard here in both modes.\n if (validateContentDir(root, answers.contentDir) !== undefined) {\n logger.error(\n `Invalid --content-dir \"${answers.contentDir}\" (must be a path inside the project).`\n );\n process.exit(1);\n }\n\n const sink = interactive ? clack.log : logger;\n const env = { userAgent: process.env.npm_config_user_agent };\n const { createdPackage } = await applyPlan(\n buildPlan(root, answers, env),\n sink\n );\n // A workspace the project joins keeps its own package-manager config,\n // which `init` leaves alone; say what it still needs before installing.\n const note = workspaceNote(root, answers, env);\n\n // Keep installed dependencies, Blume's generated runtime (`.blume/`), and\n // build output (`dist/`) out of version control. Idempotent: creates\n // `.gitignore` when absent and skips entries already present\n // (trailing-slash agnostic).\n const ignored = await ensureGitignore(root, [\n \"node_modules/\",\n \".blume/\",\n \"dist/\",\n ]);\n if (ignored.length > 0) {\n sink.success(`Added ${ignored.join(\", \")} to .gitignore`);\n }\n\n // A newly written package.json is the only one `init` knows lists blume;\n // an existing one is left alone, and so are its dependencies. In a pnpm\n // workspace that doesn't list the folder, an install would exit 0 without\n // installing it, so that one waits until the note's change is made.\n const shouldInstall =\n createdPackage && args.install && !outsidePnpmWorkspace(root, answers);\n if (note) {\n (interactive ? clack.log : logger).warn(note);\n }\n if (shouldInstall) {\n await installScaffold(root, answers, interactive);\n }\n const needsInstall = createdPackage && !shouldInstall;\n\n if (args.eject) {\n await ejectScaffold(root, answers, needsInstall);\n return;\n }\n\n await printNextSteps(root, answers, {\n createdPackage,\n interactive,\n needsInstall,\n note,\n });\n },\n});\n",
|
|
6
|
+
"import { basename, resolve } from \"pathe\";\n\nimport {\n detectPackageManager,\n titleize,\n validateContentDir,\n} from \"./scaffold.ts\";\nimport type {\n InitAnswers,\n PackageManager,\n SourceKind,\n Template,\n} from \"./scaffold.ts\";\n\n/** One prompt option: value plus display label and optional hint. */\ninterface PromptOption<Value> {\n hint?: string;\n label: string;\n value: Value;\n}\n\n/**\n * The prompt surface `collectAnswers` needs — structurally satisfied by the\n * `@clack/prompts` module itself, and by plain fakes in tests. Every prompt\n * resolves to a cancel symbol when the user aborts.\n */\nexport interface Prompter {\n multiselect: (opts: {\n initialValues?: SourceKind[];\n message: string;\n options: PromptOption<SourceKind>[];\n required?: boolean;\n }) => Promise<SourceKind[] | symbol>;\n select: (opts: {\n message: string;\n options: PromptOption<Template>[];\n }) => Promise<Template | symbol>;\n text: (opts: {\n defaultValue?: string;\n initialValue?: string;\n message: string;\n placeholder?: string;\n validate?: (value: string | undefined) => string | undefined;\n }) => Promise<string | symbol>;\n}\n\n/** Flag values the user passed explicitly; each one skips its question. */\nexport interface InitFlags {\n contentDir?: string;\n directory?: string;\n packageManager?: PackageManager;\n template?: Template;\n}\n\nconst cancelled = (value: string | string[] | symbol): value is symbol =>\n typeof value === \"symbol\";\n\n/**\n * Run the interactive init flow, returning the collected answers or `null`\n * when the user cancels. All questions run before anything is written, so a\n * cancel never leaves a partial scaffold behind.\n */\nexport const collectAnswers = async (\n prompter: Prompter,\n flags: InitFlags,\n defaults: { cwd: string; userAgent?: string }\n): Promise<InitAnswers | null> => {\n const directory =\n flags.directory ??\n (await prompter.text({\n defaultValue: \".\",\n message: \"Where should we create your project?\",\n placeholder: \"./my-docs\",\n }));\n if (cancelled(directory)) {\n return null;\n }\n\n const root = resolve(defaults.cwd, directory);\n const title = await prompter.text({\n initialValue: titleize(basename(root)),\n message: \"What's your docs site called?\",\n validate: (value) =>\n value?.trim() ? undefined : \"Give your docs site a name.\",\n });\n if (cancelled(title)) {\n return null;\n }\n\n const template =\n flags.template ??\n (await prompter.select({\n message: \"Which template?\",\n options: [\n { hint: \"Markdown docs site\", label: \"docs\", value: \"docs\" },\n { hint: \"OpenAPI reference at /api\", label: \"api\", value: \"api\" },\n { hint: \"SDK docs with an install page\", label: \"sdk\", value: \"sdk\" },\n {\n hint: \"Docs plus a changelog tab\",\n label: \"changelog\",\n value: \"changelog\",\n },\n ],\n }));\n if (cancelled(template)) {\n return null;\n }\n\n const picked = await prompter.multiselect({\n initialValues: [\"filesystem\"],\n message: \"Where does your content live?\",\n options: [\n { hint: \"Local .mdx files\", label: \"filesystem\", value: \"filesystem\" },\n { hint: \"An Obsidian vault\", label: \"obsidian\", value: \"obsidian\" },\n {\n hint: \"Changelog from GitHub Releases\",\n label: \"github-releases\",\n value: \"github-releases\",\n },\n { hint: \"A Notion database\", label: \"notion\", value: \"notion\" },\n { hint: \"A Sanity dataset\", label: \"sanity\", value: \"sanity\" },\n {\n hint: \"A Contentful content type\",\n label: \"contentful\",\n value: \"contentful\",\n },\n { hint: \"A Payload collection\", label: \"payload\", value: \"payload\" },\n { hint: \"A Strapi content type\", label: \"strapi\", value: \"strapi\" },\n {\n hint: \"MDX fetched from a GitHub repo\",\n label: \"mdx-remote\",\n value: \"mdx-remote\",\n },\n ],\n required: false,\n });\n if (cancelled(picked)) {\n return null;\n }\n // No selection desugars to the implicit local source, same as the schema.\n const sources: SourceKind[] = picked.length === 0 ? [\"filesystem\"] : picked;\n\n let contentDir = flags.contentDir ?? \"docs\";\n if (flags.contentDir === undefined && sources.includes(\"filesystem\")) {\n const answer = await prompter.text({\n defaultValue: \"docs\",\n message: \"Content directory?\",\n placeholder: \"docs\",\n validate: (value) => validateContentDir(root, value || \"docs\"),\n });\n if (cancelled(answer)) {\n return null;\n }\n contentDir = answer;\n }\n\n return {\n contentDir,\n directory,\n packageManager:\n flags.packageManager ?? detectPackageManager(defaults.userAgent),\n sources,\n template,\n title,\n };\n};\n"
|
|
7
|
+
],
|
|
8
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA,oBAAS;;;ACFT;AAsDA,IAAM,YAAY,CAAC,UACjB,OAAO,UAAU;AAOZ,IAAM,iBAAiB,OAC5B,UACA,OACA,aACgC;AAAA,EAChC,MAAM,YACJ,MAAM,aACL,MAAM,SAAS,KAAK;AAAA,IACnB,cAAc;AAAA,IACd,SAAS;AAAA,IACT,aAAa;AAAA,EACf,CAAC;AAAA,EACH,IAAI,UAAU,SAAS,GAAG;AAAA,IACxB,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,OAAO,QAAQ,SAAS,KAAK,SAAS;AAAA,EAC5C,MAAM,QAAQ,MAAM,SAAS,KAAK;AAAA,IAChC,cAAc,SAAS,SAAS,IAAI,CAAC;AAAA,IACrC,SAAS;AAAA,IACT,UAAU,CAAC,UACT,OAAO,KAAK,IAAI,YAAY;AAAA,EAChC,CAAC;AAAA,EACD,IAAI,UAAU,KAAK,GAAG;AAAA,IACpB,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,WACJ,MAAM,YACL,MAAM,SAAS,OAAO;AAAA,IACrB,SAAS;AAAA,IACT,SAAS;AAAA,MACP,EAAE,MAAM,sBAAsB,OAAO,QAAQ,OAAO,OAAO;AAAA,MAC3D,EAAE,MAAM,6BAA6B,OAAO,OAAO,OAAO,MAAM;AAAA,MAChE,EAAE,MAAM,iCAAiC,OAAO,OAAO,OAAO,MAAM;AAAA,MACpE;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF,CAAC;AAAA,EACH,IAAI,UAAU,QAAQ,GAAG;AAAA,IACvB,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,SAAS,MAAM,SAAS,YAAY;AAAA,IACxC,eAAe,CAAC,YAAY;AAAA,IAC5B,SAAS;AAAA,IACT,SAAS;AAAA,MACP,EAAE,MAAM,oBAAoB,OAAO,cAAc,OAAO,aAAa;AAAA,MACrE,EAAE,MAAM,qBAAqB,OAAO,YAAY,OAAO,WAAW;AAAA,MAClE;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,OAAO;AAAA,MACT;AAAA,MACA,EAAE,MAAM,qBAAqB,OAAO,UAAU,OAAO,SAAS;AAAA,MAC9D,EAAE,MAAM,oBAAoB,OAAO,UAAU,OAAO,SAAS;AAAA,MAC7D;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,OAAO;AAAA,MACT;AAAA,MACA,EAAE,MAAM,wBAAwB,OAAO,WAAW,OAAO,UAAU;AAAA,MACnE,EAAE,MAAM,yBAAyB,OAAO,UAAU,OAAO,SAAS;AAAA,MAClE;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,UAAU;AAAA,EACZ,CAAC;AAAA,EACD,IAAI,UAAU,MAAM,GAAG;AAAA,IACrB,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,UAAwB,OAAO,WAAW,IAAI,CAAC,YAAY,IAAI;AAAA,EAErE,IAAI,aAAa,MAAM,cAAc;AAAA,EACrC,IAAI,MAAM,eAAe,aAAa,QAAQ,SAAS,YAAY,GAAG;AAAA,IACpE,MAAM,SAAS,MAAM,SAAS,KAAK;AAAA,MACjC,cAAc;AAAA,MACd,SAAS;AAAA,MACT,aAAa;AAAA,MACb,UAAU,CAAC,UAAU,mBAAmB,MAAM,SAAS,MAAM;AAAA,IAC/D,CAAC;AAAA,IACD,IAAI,UAAU,MAAM,GAAG;AAAA,MACrB,OAAO;AAAA,IACT;AAAA,IACA,aAAa;AAAA,EACf;AAAA,EAEA,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,gBACE,MAAM,kBAAkB,qBAAqB,SAAS,SAAS;AAAA,IACjE;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA;;;ADxIF,IAAM,SAAS,CAAC,YACd,QAAQ,cAAc,MAAM,CAAC,IAAI,CAAC,UAAU,QAAQ,SAAS,CAAC;AAQhE,IAAM,kBAAkB,OACtB,MACA,SACA,gBACkB;AAAA,EAClB,MAAM,UAAU,YAAY,QAAQ,cAAc,EAAE;AAAA,EACpD,MAAM,WAAU,cAAoB,cAAQ,IAAI;AAAA,EAChD,IAAI,UAAS;AAAA,IACX,SAAQ,MAAM,4BAA4B,UAAU;AAAA,EACtD,EAAO;AAAA,IACL,OAAO,KAAK,4BAA4B,WAAW;AAAA;AAAA,EAErD,MAAM,UAAU,MAAM,oBAAoB,MAAM,QAAQ,gBAAgB;AAAA,IACtE,OAAO;AAAA,EACT,CAAC;AAAA,EACD,IAAI,QAAQ,YAAY,WAAW;AAAA,IACjC,IAAI,UAAS;AAAA,MACX,SAAQ,KAAK,wBAAwB;AAAA,IACvC,EAAO;AAAA,MACL,OAAO,QAAQ,wBAAwB;AAAA;AAAA,IAEzC;AAAA,EACF;AAAA,EACA,MAAM,QAAQ,CAAC,GAAG,OAAO,OAAO,GAAG,OAAO;AAAA,EAC1C,MAAM,OAAO;AAAA;AAAA;AAAA;AAAA,IAAyF,MAAM,KAAK;AAAA,GAAM;AAAA;AAAA,EACvH,IAAI,UAAS;AAAA,IACX,SAAQ,KAAK,gCAAgC;AAAA,IACvC,UAAI,MAAM,QAAQ,OAAO;AAAA,IACzB,WAAK,KAAK,QAAQ,CAAC;AAAA,IACnB,YAAM,kCAAkC;AAAA,EAChD,EAAO;AAAA,IACL,OAAO,MAAM,QAAQ,OAAO;AAAA,IAC5B,OAAO,IAAI,KAAK,QAAQ,CAAC;AAAA;AAAA,EAE3B,QAAQ,KAAK,CAAC;AAAA;AAUhB,IAAM,gBAAgB,OACpB,MACA,SACA,iBACkB;AAAA,EAClB,MAAM,WAAW,YAAY,QAAQ,cAAc;AAAA,EACnD,MAAM,KAAK,OAAO,OAAO;AAAA,EACzB,MAAM,UAAU,eAAe,CAAC,SAAS,OAAO,IAAI,CAAC;AAAA,EACrD,IAAI;AAAA,IACF,QAAQ,iBAAiB,MAAM,MAAM,IAAI;AAAA,IAGzC,MAAM,QAAQ,MAAM,qBAAqB,MAAM,YAAY;AAAA,IAC3D,OAAO,QAAQ,wCAAwC;AAAA,IAGvD,MAAM,eAAe,MAAM,SAAS,IAAI,CAAC,SAAS,OAAO,IAAI;AAAA,IAC7D,MAAM,QAAQ,CAAC,GAAG,IAAI,GAAG,cAAc,SAAS,GAAG;AAAA,IACnD,OAAO,IAAI;AAAA;AAAA,IAAoB,MAAM,KAAK;AAAA,GAAM,GAAG;AAAA,IACnD,OAAO,OAAO;AAAA,IAGd,QAAQ,YAAY;AAAA,IAGpB,OAAO,KACL,eACI,6FAA6F,YAC7F,iCAAiC,SACvC;AAAA,IACA,MAAM,QAAQ,CAAC,GAAG,IAAI,GAAG,SAAS,GAAG,SAAS,wBAAwB;AAAA,IACtE,OAAO,IAAI;AAAA;AAAA,IAAoB,MAAM,KAAK;AAAA,GAAM,GAAG;AAAA;AAAA;AAUvD,IAAM,iBAAiB,OACrB,MACA,SACA,YAMkB;AAAA,EAClB,MAAM,WAAW,QAAQ,iBACrB,YACA,MAAM,oBAAoB,IAAI;AAAA,EAClC,MAAM,QAAQ,UACZ,SACA,QAAQ,cACR,UACA,QAAQ,eAAe,QAAQ,OAAO,SACxC;AAAA,EACA,IAAI,QAAQ,aAAa;AAAA,IACjB,WAAK,MAAM,QAAQ,CAAC;AAAA,IACpB,YAAM,iBAAiB;AAAA,EAC/B,EAAO;AAAA,IAGL,OAAO,IAAI,MAAM,QAAQ,CAAC;AAAA;AAAA;AAQ9B,IAAM,eAAe,CAAC,SAGhB;AAAA,EACJ,MAAM,WAAW,UAAU,KAAK,CAAC,cAAc,cAAc,KAAK,QAAQ;AAAA,EAC1E,IAAI,KAAK,aAAa,aAAa,aAAa,WAAW;AAAA,IACzD,OAAO,MACL,qBAAqB,KAAK,kBAAkB,UAAU,KAAK,KAAK,KAClE;AAAA,IACA,QAAQ,KAAK,CAAC;AAAA,EAChB;AAAA,EACA,MAAM,KAAK,iBAAiB,KAC1B,CAAC,cAAc,cAAc,KAAK,kBACpC;AAAA,EACA,IAAI,KAAK,uBAAuB,aAAa,OAAO,WAAW;AAAA,IAC7D,OAAO,MACL,4BAA4B,KAAK,4BAA4B,iBAAiB,KAAK,KAAK,KAC1F;AAAA,IACA,QAAQ,KAAK,CAAC;AAAA,EAChB;AAAA,EACA,OAAO,EAAE,IAAI,SAAS;AAAA;AAGjB,IAAM,cAAc,cAAc;AAAA,EACvC,MAAM;AAAA,IACJ,eAAe;AAAA,MACb,aAAa;AAAA,MACb,MAAM;AAAA,IACR;AAAA,IACA,KAAK;AAAA,MACH,aAAa;AAAA,MACb,UAAU;AAAA,MACV,MAAM;AAAA,IACR;AAAA,IACA,OAAO;AAAA,MACL,aAAa;AAAA,MACb,MAAM;AAAA,IACR;AAAA,IACA,SAAS;AAAA,MACP,SAAS;AAAA,MACT,aAAa;AAAA,MACb,qBAAqB;AAAA,MACrB,MAAM;AAAA,IACR;AAAA,IACA,mBAAmB;AAAA,MACjB,aACE;AAAA,MACF,MAAM;AAAA,IACR;AAAA,IACA,UAAU;AAAA,MACR,aAAa;AAAA,MACb,MAAM;AAAA,IACR;AAAA,IACA,KAAK;AAAA,MACH,aAAa;AAAA,MACb,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EACA,MAAM,YAAY;AAAA,OACZ,IAAG,GAAG,QAAQ;AAAA,IAClB,MAAM,MAAM,QAAQ,IAAI;AAAA,IACxB,QAAQ,IAAI,aAAa,aAAa,IAAI;AAAA,IAE1C,MAAM,cACJ,CAAC,KAAK,OACN,QAAQ,MAAM,UAAU,QAClB,YAAM,QAAQ,MAAM,KAC1B,CAAO,WAAK;AAAA,IAEd,IAAI;AAAA,IACJ,IAAI,aAAa;AAAA,MACT,YAAM,YAAY;AAAA,MACxB,MAAM,YAAY,MAAM,eACtB,OACA;AAAA,QACE,YAAY,KAAK;AAAA,QACjB,WAAW,KAAK;AAAA,QAChB,gBAAgB;AAAA,QAChB;AAAA,MACF,GACA,EAAE,KAAK,WAAW,QAAQ,IAAI,sBAAsB,CACtD;AAAA,MACA,IAAI,cAAc,MAAM;AAAA,QAChB,aAAO,iCAAiC;AAAA,QAC9C,QAAQ,KAAK,CAAC;AAAA,MAChB;AAAA,MACA,UAAU;AAAA,IACZ,EAAO;AAAA,MACL,UAAU;AAAA,QACR,YAAY,KAAK,kBAAkB;AAAA,QACnC,WAAW,KAAK,OAAO;AAAA,QACvB,gBACE,MAAM,qBAAqB,QAAQ,IAAI,qBAAqB;AAAA,QAC9D,SAAS,CAAC,YAAY;AAAA,QACtB,UAAU,YAAY;AAAA,QACtB,OAAO;AAAA,MACT;AAAA;AAAA,IAGF,MAAM,OAAO,SAAQ,KAAK,QAAQ,SAAS;AAAA,IAG3C,IAAI,mBAAmB,MAAM,QAAQ,UAAU,MAAM,WAAW;AAAA,MAC9D,OAAO,MACL,0BAA0B,QAAQ,kDACpC;AAAA,MACA,QAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,IAEA,MAAM,OAAO,cAAoB,YAAM;AAAA,IACvC,MAAM,MAAM,EAAE,WAAW,QAAQ,IAAI,sBAAsB;AAAA,IAC3D,QAAQ,mBAAmB,MAAM,UAC/B,UAAU,MAAM,SAAS,GAAG,GAC5B,IACF;AAAA,IAGA,MAAM,OAAO,cAAc,MAAM,SAAS,GAAG;AAAA,IAM7C,MAAM,UAAU,MAAM,gBAAgB,MAAM;AAAA,MAC1C;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACD,IAAI,QAAQ,SAAS,GAAG;AAAA,MACtB,KAAK,QAAQ,SAAS,QAAQ,KAAK,IAAI,iBAAiB;AAAA,IAC1D;AAAA,IAMA,MAAM,gBACJ,kBAAkB,KAAK,WAAW,CAAC,qBAAqB,MAAM,OAAO;AAAA,IACvE,IAAI,MAAM;AAAA,OACP,cAAoB,YAAM,QAAQ,KAAK,IAAI;AAAA,IAC9C;AAAA,IACA,IAAI,eAAe;AAAA,MACjB,MAAM,gBAAgB,MAAM,SAAS,WAAW;AAAA,IAClD;AAAA,IACA,MAAM,eAAe,kBAAkB,CAAC;AAAA,IAExC,IAAI,KAAK,OAAO;AAAA,MACd,MAAM,cAAc,MAAM,SAAS,YAAY;AAAA,MAC/C;AAAA,IACF;AAAA,IAEA,MAAM,eAAe,MAAM,SAAS;AAAA,MAClC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA;AAEL,CAAC;",
|
|
9
|
+
"debugId": "5DDACDA0D27BF37E64756E2164756E21",
|
|
10
|
+
"names": []
|
|
11
|
+
}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import"./chunk-
|
|
2
|
+
import"./chunk-gs7r695n.js";
|
|
3
3
|
import {
|
|
4
4
|
resolveRuntimeDir
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-v6ya5kcb.js";
|
|
6
6
|
import {
|
|
7
7
|
refreshBlumeContent,
|
|
8
8
|
showBlumeErrorOverlay,
|
|
9
9
|
generateRuntime
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-xh43dwgw.js";
|
|
11
11
|
import {
|
|
12
12
|
commandMeta,
|
|
13
13
|
normalizeHost,
|
|
@@ -15,32 +15,31 @@ import {
|
|
|
15
15
|
logger,
|
|
16
16
|
reportDiagnostics
|
|
17
17
|
} from "./index.js";
|
|
18
|
-
import"./chunk-
|
|
18
|
+
import"./chunk-ddndchfr.js";
|
|
19
|
+
import"./chunk-00gs3wqs.js";
|
|
20
|
+
import"./chunk-jq5n4avg.js";
|
|
19
21
|
import {
|
|
20
22
|
scanProject
|
|
21
|
-
} from "./chunk-
|
|
22
|
-
import"./chunk-
|
|
23
|
-
import"./chunk-
|
|
24
|
-
import"./chunk-
|
|
25
|
-
import"./chunk-zxcczpyx.js";
|
|
26
|
-
import"./chunk-wm7js3j9.js";
|
|
27
|
-
import"./chunk-82bbrxdn.js";
|
|
23
|
+
} from "./chunk-5r8g91qn.js";
|
|
24
|
+
import"./chunk-hr8ne106.js";
|
|
25
|
+
import"./chunk-fsmrqk8a.js";
|
|
26
|
+
import"./chunk-sqw4ekg1.js";
|
|
28
27
|
import {
|
|
29
28
|
DevLockHeldError,
|
|
30
29
|
acquireDevLock,
|
|
31
30
|
updateDevLockPort,
|
|
32
31
|
describeDevLock
|
|
33
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-wdrt2k2v.js";
|
|
34
33
|
import {
|
|
35
34
|
refuseIfEjected
|
|
36
|
-
} from "./chunk-
|
|
35
|
+
} from "./chunk-4e9b9ra6.js";
|
|
37
36
|
import {
|
|
38
37
|
prepareProject
|
|
39
|
-
} from "./chunk-
|
|
38
|
+
} from "./chunk-h2ez8dzb.js";
|
|
40
39
|
import {
|
|
41
40
|
parsePort
|
|
42
|
-
} from "./chunk-
|
|
43
|
-
import"./chunk-
|
|
41
|
+
} from "./chunk-esh98wmb.js";
|
|
42
|
+
import"./chunk-mqc662a6.js";
|
|
44
43
|
|
|
45
44
|
// src/cli/commands/dev.ts
|
|
46
45
|
import { dev } from "astro";
|
|
@@ -184,5 +183,5 @@ export {
|
|
|
184
183
|
devCommand
|
|
185
184
|
};
|
|
186
185
|
|
|
187
|
-
//# debugId=
|
|
188
|
-
//# sourceMappingURL=chunk-
|
|
186
|
+
//# debugId=E6DA8A8FE27E0E6164756E2164756E21
|
|
187
|
+
//# sourceMappingURL=chunk-8g8ytmgx.js.map
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import { dev } from \"astro\";\nimport { watch } from \"chokidar\";\nimport { defineCommand } from \"citty\";\nimport { debounce } from \"perfect-debounce\";\n\nimport { generateRuntime } from \"../../astro/generate.ts\";\nimport {\n refreshBlumeContent,\n showBlumeErrorOverlay,\n} from \"../../astro/integration.ts\";\nimport { BlumeError } from \"../../core/diagnostics.ts\";\nimport { scanProject } from \"../../core/project-graph.ts\";\nimport { resolveRuntimeDir } from \"../../core/project.ts\";\nimport { parsePort } from \"../args.ts\";\nimport { commandMeta } from \"../command-meta.ts\";\nimport {\n acquireDevLock,\n describeDevLock,\n DevLockHeldError,\n updateDevLockPort,\n} from \"../dev-lock.ts\";\nimport { refuseIfEjected } from \"../eject-scripts.ts\";\nimport { normalizeHost } from \"../host-args.ts\";\nimport { logger, reportDiagnostics } from \"../log.ts\";\nimport { prepareProject } from \"../prepare.ts\";\n\n/**\n * A fingerprint of the route set: the sorted `path entryId` pairs. It changes\n * when a page is added, removed, or renamed (a folder rename shifts many at\n * once) but stays equal across pure body edits — so the dev loop can tell a\n * \"structural\" change (needs a content re-sync) from a hot-reloadable one.\n */\nconst routeSignature = (\n routes: readonly { entryId: string; path: string }[]\n): string =>\n routes\n .map((route) => `${route.path} ${route.entryId}`)\n .toSorted()\n .join(\"\\n\");\n\n/**\n * The port the dev server actually bound. Astro snapshots `address` when the\n * server first listens, but a config restart that lands during startup leaves\n * that snapshot null: the `astro.config.mjs` written just before the server\n * started can reach Astro's watcher late, and Astro restarts in place before\n * it ever listens. The live resolved URLs follow the restarted server, so read\n * the port from those, then fall back to the one that was asked for.\n */\nconst boundPortOf = (\n server: Awaited<ReturnType<typeof dev>>,\n requested: number\n): number => {\n // SAFETY: Astro types `address` as always set, but it is null at runtime\n // when a restart replaced the server before its first listen (see above).\n const address = server.address as typeof server.address | null;\n if (address) {\n return address.port;\n }\n for (const url of server.resolvedUrls.local) {\n const port = Number(new URL(url).port);\n if (port > 0) {\n return port;\n }\n }\n return requested;\n};\n\nexport const devCommand = defineCommand({\n args: {\n \"content-dir\": {\n description: \"Content folder to scan, overriding config (content.root).\",\n type: \"string\",\n },\n debug: {\n description: \"Verbose Astro/Vite logging for troubleshooting.\",\n type: \"boolean\",\n },\n host: { description: \"Network host to bind.\", type: \"string\" },\n open: { description: \"Open the browser on start.\", type: \"boolean\" },\n port: { description: \"Port to listen on.\", type: \"string\" },\n preview: {\n description: \"Include drafts and unpublished CMS content.\",\n type: \"boolean\",\n },\n strict: { description: \"Fail on diagnostics.\", type: \"boolean\" },\n },\n meta: commandMeta.dev,\n async run({ args }) {\n const root = process.cwd();\n await refuseIfEjected(root, \"dev\");\n const preview = args.preview ?? false;\n const overrides = args[\"content-dir\"]\n ? { contentRoot: args[\"content-dir\"] }\n : undefined;\n // Astro's dev server defaults to 4321 when no port is passed. Feeding the\n // resolved URL in as the `deployment.site` fallback lets site-gated features\n // (OG images, canonicals, sitemap) work locally without configuring a site.\n const explicitPort = parsePort(args.port);\n const port = explicitPort ?? 4321;\n let devServerUrl = `http://localhost:${port}`;\n\n // Claim the shared `.blume` dir BEFORE preparing: `prepareProject`\n // regenerates the runtime, so even a refused second dev server would\n // otherwise clobber the running one's generated tree (with this\n // invocation's port baked in) on its way out. The claim is atomic, so two\n // simultaneous starts can't both win. Dev never relocates the runtime dir,\n // so the lock always lives at `<root>/.blume`.\n const outDir = resolveRuntimeDir(root);\n let releaseLock: () => void;\n try {\n releaseLock = acquireDevLock(outDir, port);\n } catch (error) {\n if (error instanceof DevLockHeldError) {\n logger.error(\n `A \\`blume dev\\` server is already running${describeDevLock(error.lock)} in this project. Reuse that server instead of starting a second one — two dev servers would corrupt the shared .blume dir. If it crashed, delete .blume/dev.lock.`\n );\n process.exit(1);\n }\n throw error;\n }\n process.on(\"exit\", releaseLock);\n\n const project = await prepareProject({\n devServerUrl,\n mode: \"dev\",\n overrides,\n preview,\n root,\n strict: args.strict,\n });\n\n // A factory so the regenerate loop can recreate the server when a\n // structural (route-set) change can't be re-synced in place (see below).\n // `open` is honored on first boot only — a restart must not reopen the\n // browser.\n const createServer = (listenPort: number | undefined, open: boolean) =>\n dev({\n logLevel: args.debug ? \"debug\" : \"info\",\n root: project.context.outDir,\n server: { host: normalizeHost(args.host), open, port: listenPort },\n });\n\n let server = await createServer(explicitPort, args.open ?? false);\n\n // Vite bumps to the next free port when the default is taken, so record\n // the port the server actually bound — the lock's URL is what a refused\n // second invocation tells its caller to reuse. The site fallback baked\n // into the runtime also carries the port, so it must follow suit (below,\n // once the regeneration closure exists).\n const boundPort = boundPortOf(server, port);\n if (boundPort !== port) {\n updateDevLockPort(outDir, boundPort);\n devServerUrl = `http://localhost:${boundPort}`;\n }\n\n // Mirror any initial diagnostics into the browser overlay now the server\n // (and its HMR channel) is up.\n showBlumeErrorOverlay(project.diagnostics);\n\n let lastSignature = routeSignature(project.manifest.routes);\n\n // Watch user inputs and regenerate the runtime data on change. A body edit\n // hot-reloads via Vite (fast path). A route-set change also needs Astro's\n // content store re-synced: its glob watcher misses directory renames, so a\n // renamed page would 404 (`getEntry` reads a stale store). Astro hands the\n // integration `refreshContent` for exactly that — a full loader run\n // against the live server, after which Astro's own store watcher clears\n // the route cache and reloads the browser. Only a server that registered\n // no refresh (none since Astro 5) falls back to a cold restart: stop,\n // then bring up a fresh container whose cold sync re-globs everything.\n // perfect-debounce both debounces the watch burst (80ms) and\n // single-flights the scan: a\n // trigger during a run never starts a second run, only marks one trailing\n // rerun after the current settles. Both halves are load-bearing — a plain\n // debounce once let bursts stack overlapping scans until the heap was\n // exhausted (observed as an OOM after minutes of looping). The contract is\n // pinned by test/dev-debounce.test.ts. The task must not reject (the\n // library re-invokes it from an unhandled .finally), so the body catches\n // its own errors and always resolves.\n const regenerate = debounce(async () => {\n try {\n const next = await scanProject(root, {\n devServerUrl,\n mode: \"dev\",\n overrides,\n preview,\n });\n const nextSignature = routeSignature(next.manifest.routes);\n const structural = nextSignature !== lastSignature;\n // Generate first: the new runtime data (and any staged remote content)\n // is on disk and published before the store re-syncs against it.\n await generateRuntime(next);\n if (structural && !(await refreshBlumeContent())) {\n await server.stop();\n server = await createServer(boundPort, false);\n }\n // Commit the signature only after the (re)generation succeeded. If the\n // re-sync or restart above throws mid-sequence, the signature stays\n // stale so the next watch event retries the structural path.\n lastSignature = nextSignature;\n // Surface any content/config errors in the terminal AND the browser\n // overlay. The terminal report is not redundant: the overlay only\n // shows once the browser has connected, and it clears on the next HMR\n // update.\n reportDiagnostics(next.diagnostics, root);\n showBlumeErrorOverlay(next.diagnostics);\n } catch (error) {\n // A config error the generator raised (an unplannable `components.ts`\n // override, a missing font file) is a diagnostic: report it in the\n // terminal and the browser overlay like a scan-time error, so the fix\n // is visible where the edit happened.\n if (error instanceof BlumeError) {\n reportDiagnostics([error.diagnostic], root);\n showBlumeErrorOverlay([error.diagnostic]);\n return;\n }\n // SAFETY: regeneration failures come from the generator and Astro's\n // server API, which raise Error instances; only the message is shown.\n logger.error(`Regeneration failed: ${(error as Error).message}`);\n }\n }, 80);\n\n // The runtime prepared above baked the *requested* port into the site\n // fallback; if Vite bumped it, regenerate so OG images, canonicals, and\n // other site-gated URLs point at the port actually serving.\n if (boundPort !== port) {\n void regenerate();\n }\n\n // Content is watched per source (filesystem uses fs.watch; remote sources\n // are frozen for the session). The remaining project inputs — user pages,\n // config, theme, and component overrides — are watched directly.\n const dirTargets = [project.context.pagesRoot].filter(\n (target) => target !== null\n );\n const fileTargets = [\n project.context.configFile,\n project.context.themeFile,\n project.context.componentsFile,\n ].filter((target) => target !== null);\n\n // chokidar handles what raw fs.watch made us hand-roll: recursive\n // directory watching on every platform, and single files surviving a\n // rename-replace save (vim and most \"atomic save\" editors), which orphans\n // an inode-tracking fs.watch watcher after the first write.\n const projectWatcher = watch([...dirTargets, ...fileTargets], {\n ignoreInitial: true,\n }).on(\"all\", regenerate);\n const disposers = [\n ...project.sources.map((source) => source.watch?.(regenerate)),\n () => {\n void projectWatcher.close();\n },\n ].filter((dispose) => dispose !== undefined);\n\n const shutdown = async () => {\n for (const dispose of disposers) {\n dispose();\n }\n releaseLock();\n await server.stop();\n process.exit(0);\n };\n\n process.on(\"SIGINT\", shutdown);\n process.on(\"SIGTERM\", shutdown);\n },\n});\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": "
|
|
8
|
-
"debugId": "
|
|
7
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AA6BA,IAAM,iBAAiB,CACrB,WAEA,OACG,IAAI,CAAC,UAAU,GAAG,MAAM,QAAQ,MAAM,SAAS,EAC/C,SAAS,EACT,KAAK;AAAA,CAAI;AAUd,IAAM,cAAc,CAClB,QACA,cACW;AAAA,EAGX,MAAM,UAAU,OAAO;AAAA,EACvB,IAAI,SAAS;AAAA,IACX,OAAO,QAAQ;AAAA,EACjB;AAAA,EACA,WAAW,OAAO,OAAO,aAAa,OAAO;AAAA,IAC3C,MAAM,OAAO,OAAO,IAAI,IAAI,GAAG,EAAE,IAAI;AAAA,IACrC,IAAI,OAAO,GAAG;AAAA,MACZ,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,OAAO;AAAA;AAGF,IAAM,aAAa,cAAc;AAAA,EACtC,MAAM;AAAA,IACJ,eAAe;AAAA,MACb,aAAa;AAAA,MACb,MAAM;AAAA,IACR;AAAA,IACA,OAAO;AAAA,MACL,aAAa;AAAA,MACb,MAAM;AAAA,IACR;AAAA,IACA,MAAM,EAAE,aAAa,yBAAyB,MAAM,SAAS;AAAA,IAC7D,MAAM,EAAE,aAAa,8BAA8B,MAAM,UAAU;AAAA,IACnE,MAAM,EAAE,aAAa,sBAAsB,MAAM,SAAS;AAAA,IAC1D,SAAS;AAAA,MACP,aAAa;AAAA,MACb,MAAM;AAAA,IACR;AAAA,IACA,QAAQ,EAAE,aAAa,wBAAwB,MAAM,UAAU;AAAA,EACjE;AAAA,EACA,MAAM,YAAY;AAAA,OACZ,IAAG,GAAG,QAAQ;AAAA,IAClB,MAAM,OAAO,QAAQ,IAAI;AAAA,IACzB,MAAM,gBAAgB,MAAM,KAAK;AAAA,IACjC,MAAM,UAAU,KAAK,WAAW;AAAA,IAChC,MAAM,YAAY,KAAK,iBACnB,EAAE,aAAa,KAAK,eAAe,IACnC;AAAA,IAIJ,MAAM,eAAe,UAAU,KAAK,IAAI;AAAA,IACxC,MAAM,OAAO,gBAAgB;AAAA,IAC7B,IAAI,eAAe,oBAAoB;AAAA,IAQvC,MAAM,SAAS,kBAAkB,IAAI;AAAA,IACrC,IAAI;AAAA,IACJ,IAAI;AAAA,MACF,cAAc,eAAe,QAAQ,IAAI;AAAA,MACzC,OAAO,OAAO;AAAA,MACd,IAAI,iBAAiB,kBAAkB;AAAA,QACrC,OAAO,MACL,4CAA4C,gBAAgB,MAAM,IAAI,qKACxE;AAAA,QACA,QAAQ,KAAK,CAAC;AAAA,MAChB;AAAA,MACA,MAAM;AAAA;AAAA,IAER,QAAQ,GAAG,QAAQ,WAAW;AAAA,IAE9B,MAAM,UAAU,MAAM,eAAe;AAAA,MACnC;AAAA,MACA,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAQ,KAAK;AAAA,IACf,CAAC;AAAA,IAMD,MAAM,eAAe,CAAC,YAAgC,SACpD,IAAI;AAAA,MACF,UAAU,KAAK,QAAQ,UAAU;AAAA,MACjC,MAAM,QAAQ,QAAQ;AAAA,MACtB,QAAQ,EAAE,MAAM,cAAc,KAAK,IAAI,GAAG,MAAM,MAAM,WAAW;AAAA,IACnE,CAAC;AAAA,IAEH,IAAI,SAAS,MAAM,aAAa,cAAc,KAAK,QAAQ,KAAK;AAAA,IAOhE,MAAM,YAAY,YAAY,QAAQ,IAAI;AAAA,IAC1C,IAAI,cAAc,MAAM;AAAA,MACtB,kBAAkB,QAAQ,SAAS;AAAA,MACnC,eAAe,oBAAoB;AAAA,IACrC;AAAA,IAIA,sBAAsB,QAAQ,WAAW;AAAA,IAEzC,IAAI,gBAAgB,eAAe,QAAQ,SAAS,MAAM;AAAA,IAoB1D,MAAM,aAAa,SAAS,YAAY;AAAA,MACtC,IAAI;AAAA,QACF,MAAM,OAAO,MAAM,YAAY,MAAM;AAAA,UACnC;AAAA,UACA,MAAM;AAAA,UACN;AAAA,UACA;AAAA,QACF,CAAC;AAAA,QACD,MAAM,gBAAgB,eAAe,KAAK,SAAS,MAAM;AAAA,QACzD,MAAM,aAAa,kBAAkB;AAAA,QAGrC,MAAM,gBAAgB,IAAI;AAAA,QAC1B,IAAI,cAAc,CAAE,MAAM,oBAAoB,GAAI;AAAA,UAChD,MAAM,OAAO,KAAK;AAAA,UAClB,SAAS,MAAM,aAAa,WAAW,KAAK;AAAA,QAC9C;AAAA,QAIA,gBAAgB;AAAA,QAKhB,kBAAkB,KAAK,aAAa,IAAI;AAAA,QACxC,sBAAsB,KAAK,WAAW;AAAA,QACtC,OAAO,OAAO;AAAA,QAKd,IAAI,iBAAiB,YAAY;AAAA,UAC/B,kBAAkB,CAAC,MAAM,UAAU,GAAG,IAAI;AAAA,UAC1C,sBAAsB,CAAC,MAAM,UAAU,CAAC;AAAA,UACxC;AAAA,QACF;AAAA,QAGA,OAAO,MAAM,wBAAyB,MAAgB,SAAS;AAAA;AAAA,OAEhE,EAAE;AAAA,IAKL,IAAI,cAAc,MAAM;AAAA,MACjB,WAAW;AAAA,IAClB;AAAA,IAKA,MAAM,aAAa,CAAC,QAAQ,QAAQ,SAAS,EAAE,OAC7C,CAAC,WAAW,WAAW,IACzB;AAAA,IACA,MAAM,cAAc;AAAA,MAClB,QAAQ,QAAQ;AAAA,MAChB,QAAQ,QAAQ;AAAA,MAChB,QAAQ,QAAQ;AAAA,IAClB,EAAE,OAAO,CAAC,WAAW,WAAW,IAAI;AAAA,IAMpC,MAAM,iBAAiB,MAAM,CAAC,GAAG,YAAY,GAAG,WAAW,GAAG;AAAA,MAC5D,eAAe;AAAA,IACjB,CAAC,EAAE,GAAG,OAAO,UAAU;AAAA,IACvB,MAAM,YAAY;AAAA,MAChB,GAAG,QAAQ,QAAQ,IAAI,CAAC,WAAW,OAAO,QAAQ,UAAU,CAAC;AAAA,MAC7D,MAAM;AAAA,QACC,eAAe,MAAM;AAAA;AAAA,IAE9B,EAAE,OAAO,CAAC,YAAY,YAAY,SAAS;AAAA,IAE3C,MAAM,WAAW,YAAY;AAAA,MAC3B,WAAW,WAAW,WAAW;AAAA,QAC/B,QAAQ;AAAA,MACV;AAAA,MACA,YAAY;AAAA,MACZ,MAAM,OAAO,KAAK;AAAA,MAClB,QAAQ,KAAK,CAAC;AAAA;AAAA,IAGhB,QAAQ,GAAG,UAAU,QAAQ;AAAA,IAC7B,QAAQ,GAAG,WAAW,QAAQ;AAAA;AAElC,CAAC;",
|
|
8
|
+
"debugId": "E6DA8A8FE27E0E6164756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -2,28 +2,30 @@
|
|
|
2
2
|
import {
|
|
3
3
|
ensureGitignore
|
|
4
4
|
} from "./chunk-yzhm0j9q.js";
|
|
5
|
-
import"./chunk-
|
|
5
|
+
import"./chunk-v6ya5kcb.js";
|
|
6
6
|
import {
|
|
7
7
|
commandMeta,
|
|
8
8
|
logger
|
|
9
9
|
} from "./index.js";
|
|
10
10
|
import {
|
|
11
11
|
refuseIfDevRunning
|
|
12
|
-
} from "./chunk-
|
|
13
|
-
import"./chunk-
|
|
14
|
-
import"./chunk-
|
|
15
|
-
import
|
|
16
|
-
|
|
17
|
-
|
|
12
|
+
} from "./chunk-wdrt2k2v.js";
|
|
13
|
+
import"./chunk-gs7r695n.js";
|
|
14
|
+
import"./chunk-hr8ne106.js";
|
|
15
|
+
import {
|
|
16
|
+
refuseIfEjected
|
|
17
|
+
} from "./chunk-4e9b9ra6.js";
|
|
18
|
+
import"./chunk-xh43dwgw.js";
|
|
19
|
+
import"./chunk-ddndchfr.js";
|
|
20
|
+
import"./chunk-00gs3wqs.js";
|
|
18
21
|
import"./chunk-jq5n4avg.js";
|
|
19
|
-
import"./chunk-
|
|
20
|
-
import"./chunk-
|
|
21
|
-
import"./chunk-
|
|
22
|
-
import"./chunk-82bbrxdn.js";
|
|
22
|
+
import"./chunk-5r8g91qn.js";
|
|
23
|
+
import"./chunk-fsmrqk8a.js";
|
|
24
|
+
import"./chunk-sqw4ekg1.js";
|
|
23
25
|
import {
|
|
24
26
|
prepareProject
|
|
25
|
-
} from "./chunk-
|
|
26
|
-
import"./chunk-
|
|
27
|
+
} from "./chunk-h2ez8dzb.js";
|
|
28
|
+
import"./chunk-mqc662a6.js";
|
|
27
29
|
|
|
28
30
|
// src/cli/commands/check.ts
|
|
29
31
|
import { existsSync } from "node:fs";
|
|
@@ -49,6 +51,7 @@ var checkCommand = defineCommand({
|
|
|
49
51
|
meta: commandMeta.check,
|
|
50
52
|
async run({ args }) {
|
|
51
53
|
const root = process.cwd();
|
|
54
|
+
await refuseIfEjected(root, "check");
|
|
52
55
|
const runtimeDir = args.isolated ? ".blume-verify" : process.env.BLUME_RUNTIME_DIR;
|
|
53
56
|
refuseIfDevRunning(root, "checking", { isolatedHint: true, runtimeDir });
|
|
54
57
|
if (args.isolated) {
|
|
@@ -84,5 +87,5 @@ export {
|
|
|
84
87
|
checkCommand
|
|
85
88
|
};
|
|
86
89
|
|
|
87
|
-
//# debugId=
|
|
88
|
-
//# sourceMappingURL=chunk-
|
|
90
|
+
//# debugId=779F976E3FDFA13264756E2164756E21
|
|
91
|
+
//# sourceMappingURL=chunk-91ws1n6j.js.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/cli/commands/check.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import { existsSync } from \"node:fs\";\n\nimport { check } from \"@astrojs/check\";\nimport { sync } from \"astro\";\nimport { defineCommand } from \"citty\";\nimport { join } from \"pathe\";\n\nimport { ensureGitignore } from \"../../core/gitignore.ts\";\nimport { commandMeta } from \"../command-meta.ts\";\nimport { refuseIfDevRunning } from \"../dev-lock.ts\";\nimport { refuseIfEjected } from \"../eject-scripts.ts\";\nimport { logger } from \"../log.ts\";\nimport { prepareProject } from \"../prepare.ts\";\n\nexport const checkCommand = defineCommand({\n args: {\n isolated: {\n description:\n \"Type-check in an isolated .blume-verify runtime so a running dev server is untouched. For verifying changes while `blume dev` runs.\",\n type: \"boolean\",\n },\n preview: {\n description: \"Include drafts and unpublished CMS content.\",\n type: \"boolean\",\n },\n strict: {\n description: \"Fail on content diagnostics as well as type errors.\",\n type: \"boolean\",\n },\n },\n meta: commandMeta.check,\n async run({ args }) {\n const root = process.cwd();\n await refuseIfEjected(root, \"check\");\n\n // `blume check` regenerates `.blume` just like `build`, so it must refuse a\n // live dev server unless isolated. `--isolated` (or BLUME_RUNTIME_DIR)\n // relocates the runtime to `.blume-verify`, which dev never locks.\n const runtimeDir = args.isolated\n ? \".blume-verify\"\n : process.env.BLUME_RUNTIME_DIR;\n refuseIfDevRunning(root, \"checking\", { isolatedHint: true, runtimeDir });\n if (args.isolated) {\n await ensureGitignore(root, [\".blume-verify/\"]);\n }\n\n const project = await prepareProject({\n mode: \"build\",\n preview: args.preview,\n root,\n runtimeDir,\n strict: args.strict,\n strictOptIn: true,\n });\n\n const { outDir } = project.context;\n\n // Generate Astro's content/collection and font types into `.blume/.astro`\n // so `astro:*` virtual modules resolve during the check.\n await sync({ logLevel: \"warn\", root: outDir });\n\n // The project-root tsconfig is what covers the authored `pages/` and config;\n // without it astro check only sees the generated `.blume` project. Falls back\n // to the generated project's own tsconfig when the project has none.\n const tsconfig = join(root, \"tsconfig.json\");\n\n logger.start(`Type-checking ${project.graph.pages.length} page(s)`);\n const failed = await check({\n minimumFailingSeverity: \"error\",\n minimumSeverity: \"hint\",\n root: outDir,\n tsconfig: existsSync(tsconfig) ? tsconfig : undefined,\n watch: false,\n });\n\n if (failed) {\n logger.error(\"Type check failed.\");\n process.exit(1);\n }\n\n logger.success(\"No type errors.\");\n },\n});\n"
|
|
6
|
+
],
|
|
7
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAEA;AACA;AACA;AACA;AASO,IAAM,eAAe,cAAc;AAAA,EACxC,MAAM;AAAA,IACJ,UAAU;AAAA,MACR,aACE;AAAA,MACF,MAAM;AAAA,IACR;AAAA,IACA,SAAS;AAAA,MACP,aAAa;AAAA,MACb,MAAM;AAAA,IACR;AAAA,IACA,QAAQ;AAAA,MACN,aAAa;AAAA,MACb,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EACA,MAAM,YAAY;AAAA,OACZ,IAAG,GAAG,QAAQ;AAAA,IAClB,MAAM,OAAO,QAAQ,IAAI;AAAA,IACzB,MAAM,gBAAgB,MAAM,OAAO;AAAA,IAKnC,MAAM,aAAa,KAAK,WACpB,kBACA,QAAQ,IAAI;AAAA,IAChB,mBAAmB,MAAM,YAAY,EAAE,cAAc,MAAM,WAAW,CAAC;AAAA,IACvE,IAAI,KAAK,UAAU;AAAA,MACjB,MAAM,gBAAgB,MAAM,CAAC,gBAAgB,CAAC;AAAA,IAChD;AAAA,IAEA,MAAM,UAAU,MAAM,eAAe;AAAA,MACnC,MAAM;AAAA,MACN,SAAS,KAAK;AAAA,MACd;AAAA,MACA;AAAA,MACA,QAAQ,KAAK;AAAA,MACb,aAAa;AAAA,IACf,CAAC;AAAA,IAED,QAAQ,WAAW,QAAQ;AAAA,IAI3B,MAAM,KAAK,EAAE,UAAU,QAAQ,MAAM,OAAO,CAAC;AAAA,IAK7C,MAAM,WAAW,KAAK,MAAM,eAAe;AAAA,IAE3C,OAAO,MAAM,iBAAiB,QAAQ,MAAM,MAAM,gBAAgB;AAAA,IAClE,MAAM,SAAS,MAAM,MAAM;AAAA,MACzB,wBAAwB;AAAA,MACxB,iBAAiB;AAAA,MACjB,MAAM;AAAA,MACN,UAAU,WAAW,QAAQ,IAAI,WAAW;AAAA,MAC5C,OAAO;AAAA,IACT,CAAC;AAAA,IAED,IAAI,QAAQ;AAAA,MACV,OAAO,MAAM,oBAAoB;AAAA,MACjC,QAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,IAEA,OAAO,QAAQ,iBAAiB;AAAA;AAEpC,CAAC;",
|
|
8
|
+
"debugId": "779F976E3FDFA13264756E2164756E21",
|
|
9
|
+
"names": []
|
|
10
|
+
}
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
packageSrc,
|
|
8
8
|
registry,
|
|
9
9
|
findItem
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-fsmrqk8a.js";
|
|
11
11
|
|
|
12
12
|
// src/cli/commands/add.ts
|
|
13
13
|
import { existsSync } from "node:fs";
|
|
@@ -96,4 +96,4 @@ export {
|
|
|
96
96
|
};
|
|
97
97
|
|
|
98
98
|
//# debugId=B640E77C94BA0A0364756E2164756E21
|
|
99
|
-
//# sourceMappingURL=chunk-
|
|
99
|
+
//# sourceMappingURL=chunk-bbnwccaz.js.map
|
|
@@ -10,24 +10,25 @@ import {
|
|
|
10
10
|
import {
|
|
11
11
|
AGENTS,
|
|
12
12
|
launchInstalledAgent
|
|
13
|
-
} from "./chunk-
|
|
14
|
-
import"./chunk-
|
|
13
|
+
} from "./chunk-6k4ftwze.js";
|
|
14
|
+
import"./chunk-00gs3wqs.js";
|
|
15
15
|
import {
|
|
16
16
|
commandsFor,
|
|
17
17
|
detectProjectPackageManager
|
|
18
|
-
} from "./chunk-
|
|
19
|
-
import"./chunk-
|
|
18
|
+
} from "./chunk-v6ya5kcb.js";
|
|
19
|
+
import"./chunk-gs7r695n.js";
|
|
20
20
|
import {
|
|
21
21
|
UPGRADE_GUIDE_URL,
|
|
22
22
|
UPGRADE_GUIDE_FILE,
|
|
23
|
+
manualBumpAdvice,
|
|
23
24
|
bumpBlumeDependency,
|
|
24
25
|
isOutsideBlumeProject,
|
|
25
26
|
collectUpgradeFindings,
|
|
26
27
|
upgradePrompt
|
|
27
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-qkb5a8sa.js";
|
|
28
29
|
import {
|
|
29
30
|
installDependencies
|
|
30
|
-
} from "./chunk-
|
|
31
|
+
} from "./chunk-h7k3nq3v.js";
|
|
31
32
|
|
|
32
33
|
// src/cli/commands/upgrade.ts
|
|
33
34
|
import { defineCommand } from "citty";
|
|
@@ -81,9 +82,16 @@ ${outcome.failure}`);
|
|
|
81
82
|
}
|
|
82
83
|
} else if (bump.status === "missing") {
|
|
83
84
|
logger.warn(`No \`blume\` dependency in ./package.json; add blume@^${version} to the package that uses it.`);
|
|
85
|
+
} else if (bump.status === "manual") {
|
|
86
|
+
logger.warn(manualBumpAdvice(bump.range, version));
|
|
84
87
|
}
|
|
85
88
|
const findings = await collectUpgradeFindings(root);
|
|
86
89
|
if (findings.length === 0) {
|
|
90
|
+
if (bump.status === "manual") {
|
|
91
|
+
process.stderr.write(` The config, components.ts, and pages check out for Blume ${version}. Update blume's version as above, reinstall, then run \`${runner} blume build\` to confirm.
|
|
92
|
+
`);
|
|
93
|
+
process.exit(1);
|
|
94
|
+
}
|
|
87
95
|
process.stderr.write(` Ready for Blume ${version}: the config, components.ts, and pages check out. Run \`${runner} blume build\` to confirm.
|
|
88
96
|
`);
|
|
89
97
|
return;
|
|
@@ -129,5 +137,5 @@ export {
|
|
|
129
137
|
upgradeCommand
|
|
130
138
|
};
|
|
131
139
|
|
|
132
|
-
//# debugId=
|
|
133
|
-
//# sourceMappingURL=chunk-
|
|
140
|
+
//# debugId=38BC7BC8832D718964756E2164756E21
|
|
141
|
+
//# sourceMappingURL=chunk-bfwp9vp6.js.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/cli/commands/upgrade.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import { defineCommand } from \"citty\";\nimport { join } from \"pathe\";\n\nimport { AGENTS, launchInstalledAgent } from \"../../audit/agent.ts\";\nimport type { AgentKind } from \"../../audit/agent.ts\";\nimport { formatDiagnostic } from \"../../core/diagnostics.ts\";\nimport { packageRoot } from \"../../core/package-root.ts\";\nimport { getBlumeVersion } from \"../../core/version.ts\";\nimport {\n UPGRADE_GUIDE_FILE,\n UPGRADE_GUIDE_URL,\n bumpBlumeDependency,\n collectUpgradeFindings,\n isOutsideBlumeProject,\n manualBumpAdvice,\n upgradePrompt,\n} from \"../../upgrade/upgrade.ts\";\nimport { commandMeta } from \"../command-meta.ts\";\nimport { installDependencies } from \"../init/install.ts\";\nimport { commandsFor, detectProjectPackageManager } from \"../init/scaffold.ts\";\nimport { reportInternalError } from \"../internal-error.ts\";\nimport { logger } from \"../log.ts\";\n\n/**\n * `blume upgrade` — move a project to this version of Blume. Run it through the\n * package runner (`npx blume@latest upgrade`), since a project on the previous\n * major doesn't have the command yet: it bumps `blume` in `package.json`,\n * installs, then checks the config, `components.ts`, and each page's front\n * matter against this version and lists what's left, or hands the list to\n * Claude Code or Codex the way\n * `blume audit --claude` does. Status lines go straight to stderr, like the\n * audit's: consola drops info-level lines in test and CI environments.\n */\nexport const upgradeCommand = defineCommand({\n args: {\n claude: {\n description: \"Hand the remaining changes to Claude Code.\",\n type: \"boolean\",\n },\n codex: {\n description: \"Hand the remaining changes to Codex.\",\n type: \"boolean\",\n },\n install: {\n default: true,\n description: \"Install dependencies after bumping blume.\",\n negativeDescription: \"Bump package.json without installing.\",\n type: \"boolean\",\n },\n },\n meta: commandMeta.upgrade,\n async run({ args }) {\n const root = process.cwd();\n // SAFETY: AGENTS is a closed record keyed by AgentKind, so its keys are\n // exactly the agent kinds.\n const agents = (Object.keys(AGENTS) as AgentKind[]).filter(\n (kind) => args[kind]\n );\n if (agents.length > 1) {\n logger.error(\"Pass at most one of --codex or --claude.\");\n process.exit(1);\n }\n const [agent] = agents;\n const version = getBlumeVersion();\n\n try {\n const bump = await bumpBlumeDependency(root, version);\n // With neither a config nor a `blume` dependency there is nothing to\n // check: the defaults would always pass and report the folder ready.\n if (isOutsideBlumeProject(root, bump)) {\n logger.error(\n \"No blume.config.ts or `blume` dependency here. Run `blume upgrade` from the folder with blume.config.ts — in a monorepo, the package that depends on blume.\"\n );\n process.exit(1);\n }\n const pm = await detectProjectPackageManager(root);\n // A local install puts no `blume` on PATH, so every command this\n // prints (or hands the agent) runs through the project's runner.\n const runner = commandsFor(pm).exec;\n if (bump.status === \"bumped\") {\n process.stderr.write(\n ` Bumped blume ${bump.from} → ${bump.to} in package.json.\\n`\n );\n if (args.install) {\n const outcome = await installDependencies(root, pm, {\n quiet: false,\n });\n if (outcome.failure) {\n logger.warn(\n `Installing failed; run \\`${outcome.command}\\` yourself.\\n${outcome.failure}`\n );\n }\n }\n } else if (bump.status === \"missing\") {\n logger.warn(\n `No \\`blume\\` dependency in ./package.json; add blume@^${version} to the package that uses it.`\n );\n } else if (bump.status === \"manual\") {\n logger.warn(manualBumpAdvice(bump.range, version));\n }\n\n const findings = await collectUpgradeFindings(root);\n if (findings.length === 0) {\n // Until the range the bump couldn't rewrite moves, the project still\n // installs the old Blume, so it isn't ready yet.\n if (bump.status === \"manual\") {\n process.stderr.write(\n ` The config, components.ts, and pages check out for Blume ${version}. Update blume's version as above, reinstall, then run \\`${runner} blume build\\` to confirm.\\n`\n );\n process.exit(1);\n }\n process.stderr.write(\n ` Ready for Blume ${version}: the config, components.ts, and pages check out. Run \\`${runner} blume build\\` to confirm.\\n`\n );\n return;\n }\n process.stderr.write(\n `\\n${findings.map((finding) => formatDiagnostic(finding, root)).join(\"\\n\\n\")}\\n\\n`\n );\n\n if (!agent) {\n process.stderr.write(\n ` Each change is covered in the upgrade guide: ${UPGRADE_GUIDE_URL}\\n Rerun with --codex or --claude to hand them to a coding agent.\\n`\n );\n process.exit(1);\n }\n\n const cli = AGENTS[agent];\n process.stderr.write(` Handing the upgrade to ${cli.name}…\\n\\n`);\n const prompt = upgradePrompt({\n findings,\n guidePath: join(packageRoot(), UPGRADE_GUIDE_FILE),\n root,\n runner,\n version,\n });\n const code = await launchInstalledAgent(cli.bin, prompt);\n if (code === null) {\n logger.error(\n `${cli.name} (\\`${cli.bin}\\`) was not found on PATH. Install it with \\`${cli.install}\\`.`\n );\n process.exit(1);\n }\n if (code !== 0) {\n process.exit(code);\n }\n } catch (error) {\n reportInternalError(error);\n process.exit(1);\n }\n },\n});\n"
|
|
6
|
+
],
|
|
7
|
+
"mappings": "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",
|
|
8
|
+
"debugId": "38BC7BC8832D718964756E2164756E21",
|
|
9
|
+
"names": []
|
|
10
|
+
}
|
|
@@ -8,27 +8,26 @@ import {
|
|
|
8
8
|
import {
|
|
9
9
|
commandsFor,
|
|
10
10
|
detectProjectPackageManager
|
|
11
|
-
} from "./chunk-
|
|
12
|
-
import"./chunk-
|
|
13
|
-
import"./chunk-
|
|
14
|
-
import"./chunk-
|
|
15
|
-
import"./chunk-
|
|
16
|
-
import"./chunk-
|
|
17
|
-
import"./chunk-
|
|
18
|
-
import"./chunk-vtk4a6dg.js";
|
|
11
|
+
} from "./chunk-v6ya5kcb.js";
|
|
12
|
+
import"./chunk-ddndchfr.js";
|
|
13
|
+
import"./chunk-gs7r695n.js";
|
|
14
|
+
import"./chunk-hr8ne106.js";
|
|
15
|
+
import"./chunk-sqw4ekg1.js";
|
|
16
|
+
import"./chunk-xh43dwgw.js";
|
|
17
|
+
import"./chunk-00gs3wqs.js";
|
|
19
18
|
import"./chunk-jq5n4avg.js";
|
|
20
|
-
import"./chunk-
|
|
21
|
-
import"./chunk-
|
|
19
|
+
import"./chunk-5r8g91qn.js";
|
|
20
|
+
import"./chunk-fsmrqk8a.js";
|
|
22
21
|
import {
|
|
23
22
|
eject
|
|
24
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-j85scx15.js";
|
|
25
24
|
import {
|
|
26
25
|
refuseIfDevRunning
|
|
27
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-wdrt2k2v.js";
|
|
28
27
|
import {
|
|
29
28
|
updatePackageScripts,
|
|
30
29
|
isEjectedProject
|
|
31
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-4e9b9ra6.js";
|
|
32
31
|
|
|
33
32
|
// src/cli/commands/eject.ts
|
|
34
33
|
import { defineCommand } from "citty";
|
|
@@ -93,5 +92,5 @@ export {
|
|
|
93
92
|
ejectCommand
|
|
94
93
|
};
|
|
95
94
|
|
|
96
|
-
//# debugId=
|
|
97
|
-
//# sourceMappingURL=chunk-
|
|
95
|
+
//# debugId=3D94285342361B2D64756E2164756E21
|
|
96
|
+
//# sourceMappingURL=chunk-d1v5rhy0.js.map
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import { defineCommand } from \"citty\";\nimport { relative } from \"pathe\";\n\nimport { BlumeError } from \"../../core/diagnostics.ts\";\nimport { eject } from \"../../registry/eject.ts\";\nimport { commandMeta } from \"../command-meta.ts\";\nimport { refuseIfDevRunning } from \"../dev-lock.ts\";\nimport { isEjectedProject, updatePackageScripts } from \"../eject-scripts.ts\";\nimport { commandsFor, detectProjectPackageManager } from \"../init/scaffold.ts\";\nimport { logger, reportDiagnostics } from \"../log.ts\";\n\n/**\n * Eject the project, reporting a config or `components.ts` error as the same\n * diagnostic other commands print (a Blume 1 config, say) instead of a stack.\n */\nconst ejectOrExit = async (\n root: string\n): Promise<Awaited<ReturnType<typeof eject>>> => {\n try {\n return await eject(root);\n } catch (error) {\n if (error instanceof BlumeError) {\n reportDiagnostics([error.diagnostic], root);\n process.exit(1);\n }\n throw error;\n }\n};\n\nexport const ejectCommand = defineCommand({\n args: {\n force: {\n description:\n \"Eject again over an already-ejected app, overwriting astro.config.mjs and src/.\",\n type: \"boolean\",\n },\n yes: { description: \"Skip the confirmation prompt.\", type: \"boolean\" },\n },\n meta: commandMeta.eject,\n async run({ args }) {\n const root = process.cwd();\n refuseIfDevRunning(root, \"ejecting\");\n\n // A second eject rewrites the app from blume.config.ts, discarding every\n // edit made to it since the first, so it takes an explicit --force.\n if (isEjectedProject(root) && !args.force) {\n logger.error(\n \"This project is already ejected: ejecting again would overwrite astro.config.mjs and src/ with a fresh copy, discarding your edits to them. Pass --force to overwrite them anyway.\"\n );\n process.exit(1);\n }\n\n if (!args.yes) {\n logger.warn(\n \"Eject is one-way: it writes astro.config.mjs, src/, and (if absent) tsconfig.json, rewrites your package.json scripts, adds the packages the Astro app imports to its dependencies, and removes .blume. An existing tsconfig.json is left untouched.\"\n );\n logger.info(\"Re-run with --yes to proceed.\");\n return;\n }\n\n const { dependencies, files, warnings } = await ejectOrExit(root);\n const added = await updatePackageScripts(root, dependencies);\n\n // The same surface as the generated-runtime path (prepare.ts): one warn\n // per generation warning, e.g. a Scalar reference spec that wasn't found.\n for (const warning of warnings) {\n logger.warn(warning);\n }\n\n logger.success(`Ejected ${files.length} file(s):`);\n for (const file of files) {\n process.stdout.write(` ${relative(root, file)}\\n`);\n }\n // Print run commands matching the project's package manager (lockfile\n // detection, since eject runs inside an existing project).\n const pm = await detectProjectPackageManager(root);\n const { build, dev, install } = commandsFor(pm);\n // Newly added dependencies aren't installed yet, so install comes first.\n const run = added.length > 0 ? [install, dev, build] : [dev, build];\n const addedNote =\n added.length > 0 ? `Added to package.json: ${added.join(\", \")}.\\n\\n` : \"\";\n logger.box(\n `Your project is now a standalone Astro app.\\n\\n${addedNote}${run.map((command) => ` ${command}`).join(\"\\n\")}\\n\\nThe blume package remains importable.`\n );\n },\n});\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": "
|
|
8
|
-
"debugId": "
|
|
7
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AAcA,IAAM,cAAc,OAClB,SAC+C;AAAA,EAC/C,IAAI;AAAA,IACF,OAAO,MAAM,MAAM,IAAI;AAAA,IACvB,OAAO,OAAO;AAAA,IACd,IAAI,iBAAiB,YAAY;AAAA,MAC/B,kBAAkB,CAAC,MAAM,UAAU,GAAG,IAAI;AAAA,MAC1C,QAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,IACA,MAAM;AAAA;AAAA;AAIH,IAAM,eAAe,cAAc;AAAA,EACxC,MAAM;AAAA,IACJ,OAAO;AAAA,MACL,aACE;AAAA,MACF,MAAM;AAAA,IACR;AAAA,IACA,KAAK,EAAE,aAAa,iCAAiC,MAAM,UAAU;AAAA,EACvE;AAAA,EACA,MAAM,YAAY;AAAA,OACZ,IAAG,GAAG,QAAQ;AAAA,IAClB,MAAM,OAAO,QAAQ,IAAI;AAAA,IACzB,mBAAmB,MAAM,UAAU;AAAA,IAInC,IAAI,iBAAiB,IAAI,KAAK,CAAC,KAAK,OAAO;AAAA,MACzC,OAAO,MACL,oLACF;AAAA,MACA,QAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,IAEA,IAAI,CAAC,KAAK,KAAK;AAAA,MACb,OAAO,KACL,sPACF;AAAA,MACA,OAAO,KAAK,+BAA+B;AAAA,MAC3C;AAAA,IACF;AAAA,IAEA,QAAQ,cAAc,OAAO,aAAa,MAAM,YAAY,IAAI;AAAA,IAChE,MAAM,QAAQ,MAAM,qBAAqB,MAAM,YAAY;AAAA,IAI3D,WAAW,WAAW,UAAU;AAAA,MAC9B,OAAO,KAAK,OAAO;AAAA,IACrB;AAAA,IAEA,OAAO,QAAQ,WAAW,MAAM,iBAAiB;AAAA,IACjD,WAAW,QAAQ,OAAO;AAAA,MACxB,QAAQ,OAAO,MAAM,KAAK,SAAS,MAAM,IAAI;AAAA,CAAK;AAAA,IACpD;AAAA,IAGA,MAAM,KAAK,MAAM,4BAA4B,IAAI;AAAA,IACjD,QAAQ,OAAO,KAAK,YAAY,YAAY,EAAE;AAAA,IAE9C,MAAM,MAAM,MAAM,SAAS,IAAI,CAAC,SAAS,KAAK,KAAK,IAAI,CAAC,KAAK,KAAK;AAAA,IAClE,MAAM,YACJ,MAAM,SAAS,IAAI,0BAA0B,MAAM,KAAK,IAAI;AAAA;AAAA,IAAW;AAAA,IACzE,OAAO,IACL;AAAA;AAAA,EAAkD,YAAY,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE,KAAK;AAAA,CAAI;AAAA;AAAA,sCAC9G;AAAA;AAEJ,CAAC;",
|
|
8
|
+
"debugId": "3D94285342361B2D64756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
import {
|
|
3
3
|
frontmatter_default,
|
|
4
4
|
parseHeadingMarkers,
|
|
5
|
+
EN_UI,
|
|
6
|
+
resolveUIStrings,
|
|
5
7
|
HTML_COMMENT,
|
|
6
8
|
readExpandedEntryText,
|
|
7
9
|
MARKDOWN_FEATURES,
|
|
@@ -13,13 +15,13 @@ import {
|
|
|
13
15
|
applyAudienceVisibility,
|
|
14
16
|
agentMarkdown,
|
|
15
17
|
buildRawMarkdown
|
|
16
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-v6ya5kcb.js";
|
|
17
19
|
import {
|
|
18
20
|
normalizeBasePath
|
|
19
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-gs7r695n.js";
|
|
20
22
|
import {
|
|
21
23
|
contentIndexable
|
|
22
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-5r8g91qn.js";
|
|
23
25
|
|
|
24
26
|
// src/search/documents.ts
|
|
25
27
|
import { markdownToMdast, mdxToMdast } from "satteri";
|
|
@@ -257,6 +259,19 @@ var buildSearchDocuments = async (project, options) => {
|
|
|
257
259
|
return page ? contentIndexable(page, project.config) : false;
|
|
258
260
|
});
|
|
259
261
|
const components = projectComponentSerializers(project);
|
|
262
|
+
const { i18n } = project.config;
|
|
263
|
+
const docsSections = new Map;
|
|
264
|
+
const docsSection = (locale) => {
|
|
265
|
+
let label = docsSections.get(locale);
|
|
266
|
+
if (label === undefined) {
|
|
267
|
+
label = (i18n ? resolveUIStrings(locale, {
|
|
268
|
+
defaultLocale: i18n.defaultLocale,
|
|
269
|
+
overrides: i18n.ui
|
|
270
|
+
}) : EN_UI).search.docs;
|
|
271
|
+
docsSections.set(locale, label);
|
|
272
|
+
}
|
|
273
|
+
return label;
|
|
274
|
+
};
|
|
260
275
|
return await Promise.all(indexable.map(async (route) => {
|
|
261
276
|
const page = pageById.get(route.id);
|
|
262
277
|
const body = await pageBody(project, page, options, components);
|
|
@@ -270,7 +285,7 @@ var buildSearchDocuments = async (project, options) => {
|
|
|
270
285
|
description: page?.description ?? "",
|
|
271
286
|
locale: route.locale,
|
|
272
287
|
route: route.path,
|
|
273
|
-
section: crumb?.section ||
|
|
288
|
+
section: crumb?.section || docsSection(route.locale),
|
|
274
289
|
tags: tags && tags.length > 0 ? tags : undefined,
|
|
275
290
|
title: route.title,
|
|
276
291
|
version: route.version
|
|
@@ -357,5 +372,5 @@ var buildMcpData = async (project) => {
|
|
|
357
372
|
|
|
358
373
|
export { buildSearchDocuments, buildMcpData };
|
|
359
374
|
|
|
360
|
-
//# debugId=
|
|
361
|
-
//# sourceMappingURL=chunk-
|
|
375
|
+
//# debugId=6B5368C907DDDAAC64756E2164756E21
|
|
376
|
+
//# sourceMappingURL=chunk-ddndchfr.js.map
|