blume 1.7.1 → 1.7.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 +8 -0
- package/dist/cli/{chunk-mfm4sjwx.js → chunk-12dxjqk7.js} +32 -43
- package/dist/cli/{chunk-mfm4sjwx.js.map → chunk-12dxjqk7.js.map} +2 -2
- package/dist/cli/{chunk-vyqj481z.js → chunk-196vjxp9.js} +64 -64
- package/dist/cli/chunk-196vjxp9.js.map +13 -0
- package/dist/cli/{chunk-27gtm2ym.js → chunk-2mzebbbz.js} +1 -1
- package/dist/cli/{chunk-s5e5jt53.js → chunk-2z47ypj8.js} +1 -1
- package/dist/cli/{chunk-52cwcqvp.js → chunk-30e87n55.js} +15 -24
- package/dist/cli/{chunk-52cwcqvp.js.map → chunk-30e87n55.js.map} +2 -2
- package/dist/cli/{chunk-4trphnvy.js → chunk-3w7b2vcx.js} +10 -13
- package/dist/cli/{chunk-4trphnvy.js.map → chunk-3w7b2vcx.js.map} +2 -2
- package/dist/cli/{chunk-kmx2mydj.js → chunk-450a7rcr.js} +8 -8
- package/dist/cli/{chunk-kmx2mydj.js.map → chunk-450a7rcr.js.map} +1 -1
- package/dist/cli/{chunk-x1wvw7a8.js → chunk-5n7t497w.js} +129 -131
- package/dist/cli/{chunk-x1wvw7a8.js.map → chunk-5n7t497w.js.map} +4 -4
- package/dist/cli/{chunk-r99hynxh.js → chunk-61j18dwk.js} +36 -9
- package/dist/cli/{chunk-r99hynxh.js.map → chunk-61j18dwk.js.map} +3 -3
- package/dist/cli/{chunk-3r94j3tc.js → chunk-688e0dde.js} +2 -2
- package/dist/cli/{chunk-vxv4x1n8.js → chunk-88by27n5.js} +2 -2
- package/dist/cli/{chunk-h9ekmtz7.js → chunk-8cd8tj54.js} +28 -35
- package/dist/cli/{chunk-h9ekmtz7.js.map → chunk-8cd8tj54.js.map} +2 -2
- package/dist/cli/{chunk-8gnpdsn1.js → chunk-9bkjd11x.js} +2 -2
- package/dist/cli/{chunk-k0v1f8bb.js → chunk-9he6crym.js} +21 -28
- package/dist/cli/{chunk-k0v1f8bb.js.map → chunk-9he6crym.js.map} +2 -2
- package/dist/cli/{chunk-aqjvpd03.js → chunk-aztttvb3.js} +27 -33
- package/dist/cli/{chunk-aqjvpd03.js.map → chunk-aztttvb3.js.map} +2 -2
- package/dist/cli/{chunk-6mq7qkve.js → chunk-cvky9gb2.js} +18 -24
- package/dist/cli/{chunk-6mq7qkve.js.map → chunk-cvky9gb2.js.map} +2 -2
- package/dist/cli/{chunk-90pdhkpm.js → chunk-eevwt1sc.js} +23 -32
- package/dist/cli/{chunk-90pdhkpm.js.map → chunk-eevwt1sc.js.map} +2 -2
- package/dist/cli/{chunk-4ae4f395.js → chunk-ejjx8znq.js} +53 -34
- package/dist/cli/chunk-ejjx8znq.js.map +15 -0
- package/dist/cli/{chunk-8p3xe5jv.js → chunk-exeeb35e.js} +3 -3
- package/dist/cli/{chunk-q56730e0.js → chunk-fmceyezb.js} +41 -50
- package/dist/cli/{chunk-q56730e0.js.map → chunk-fmceyezb.js.map} +2 -2
- package/dist/cli/{chunk-12dzsn9b.js → chunk-hdm2dkd2.js} +72 -77
- package/dist/cli/{chunk-12dzsn9b.js.map → chunk-hdm2dkd2.js.map} +2 -2
- package/dist/cli/{chunk-j5f2wrj5.js → chunk-hs3gbh8p.js} +10 -15
- package/dist/cli/{chunk-j5f2wrj5.js.map → chunk-hs3gbh8p.js.map} +2 -2
- package/dist/cli/{chunk-ywn7t0pb.js → chunk-jbj4qhfw.js} +3 -3
- package/dist/cli/{chunk-ev67ycx0.js → chunk-jq5n4avg.js} +1 -1
- package/dist/cli/{chunk-he2zfgah.js → chunk-mqb2ka8m.js} +22 -30
- package/dist/cli/{chunk-he2zfgah.js.map → chunk-mqb2ka8m.js.map} +2 -2
- package/dist/cli/{chunk-5gfw0q4j.js → chunk-mt76t7dj.js} +26 -34
- package/dist/cli/{chunk-5gfw0q4j.js.map → chunk-mt76t7dj.js.map} +2 -2
- package/dist/cli/{chunk-jtb45atp.js → chunk-n9sra6sy.js} +13 -13
- package/dist/cli/{chunk-jtb45atp.js.map → chunk-n9sra6sy.js.map} +1 -1
- package/dist/cli/{chunk-x66c5yjn.js → chunk-ppfvdcd4.js} +2 -2
- package/dist/cli/{chunk-wd27zjcz.js → chunk-q4rae3bg.js} +1 -1
- package/dist/cli/{chunk-pxj10x8y.js → chunk-ra1v2nc2.js} +1 -1
- package/dist/cli/{chunk-np8dmfb0.js → chunk-t3tj0dgr.js} +26 -33
- package/dist/cli/{chunk-np8dmfb0.js.map → chunk-t3tj0dgr.js.map} +2 -2
- package/dist/cli/{chunk-qvvpnwaz.js → chunk-tqa1s0k8.js} +4 -4
- package/dist/cli/{chunk-cbjnx4s8.js → chunk-vh9w1sgp.js} +1 -1
- package/dist/cli/{chunk-82atea4k.js → chunk-vkrsvbr5.js} +13 -17
- package/dist/cli/{chunk-82atea4k.js.map → chunk-vkrsvbr5.js.map} +2 -2
- package/dist/cli/{chunk-sbdqrjbb.js → chunk-vrfp10qk.js} +1 -1
- package/dist/cli/{chunk-ka5k7cz9.js → chunk-wjt80jps.js} +27 -27
- package/dist/cli/{chunk-ka5k7cz9.js.map → chunk-wjt80jps.js.map} +2 -2
- package/dist/cli/{chunk-pdwg3q9g.js → chunk-xhtpx3ff.js} +21 -30
- package/dist/cli/{chunk-pdwg3q9g.js.map → chunk-xhtpx3ff.js.map} +2 -2
- package/dist/cli/{chunk-5hs6gb7n.js → chunk-yzhm0j9q.js} +1 -1
- package/dist/cli/index.js +397 -34
- package/dist/cli/index.js.map +12 -4
- package/dist/types/core/config-input.d.ts +26 -0
- package/dist/types/core/schema.d.ts +27 -3
- package/docs/configuration/ask-ai.mdx +47 -0
- package/package.json +1 -1
- package/src/ai/cors.ts +87 -0
- package/src/astro/generate.ts +2 -0
- package/src/astro/templates.ts +88 -23
- package/src/components/layout/NavTree.astro +75 -66
- package/src/components/layout/RootLayout.astro +4 -1
- package/src/components/layout/nav-utils.ts +17 -3
- package/src/core/adapter.ts +61 -0
- package/src/core/config-input.ts +26 -0
- package/src/core/schema.ts +56 -0
- package/src/registry/eject.ts +2 -0
- package/dist/cli/chunk-2aj8ddew.js +0 -72
- package/dist/cli/chunk-2aj8ddew.js.map +0 -10
- package/dist/cli/chunk-4ae4f395.js.map +0 -15
- package/dist/cli/chunk-4xyggvgf.js +0 -21
- package/dist/cli/chunk-4xyggvgf.js.map +0 -10
- package/dist/cli/chunk-6kzzpsx8.js +0 -26
- package/dist/cli/chunk-6kzzpsx8.js.map +0 -10
- package/dist/cli/chunk-bcy492zc.js +0 -16
- package/dist/cli/chunk-bcy492zc.js.map +0 -10
- package/dist/cli/chunk-btfr9yvw.js +0 -41
- package/dist/cli/chunk-btfr9yvw.js.map +0 -10
- package/dist/cli/chunk-ey89bjj1.js +0 -209
- package/dist/cli/chunk-ey89bjj1.js.map +0 -11
- package/dist/cli/chunk-vt8fgygt.js +0 -23
- package/dist/cli/chunk-vt8fgygt.js.map +0 -10
- package/dist/cli/chunk-vyqj481z.js.map +0 -13
- /package/dist/cli/{chunk-27gtm2ym.js.map → chunk-2mzebbbz.js.map} +0 -0
- /package/dist/cli/{chunk-s5e5jt53.js.map → chunk-2z47ypj8.js.map} +0 -0
- /package/dist/cli/{chunk-3r94j3tc.js.map → chunk-688e0dde.js.map} +0 -0
- /package/dist/cli/{chunk-vxv4x1n8.js.map → chunk-88by27n5.js.map} +0 -0
- /package/dist/cli/{chunk-8gnpdsn1.js.map → chunk-9bkjd11x.js.map} +0 -0
- /package/dist/cli/{chunk-8p3xe5jv.js.map → chunk-exeeb35e.js.map} +0 -0
- /package/dist/cli/{chunk-ywn7t0pb.js.map → chunk-jbj4qhfw.js.map} +0 -0
- /package/dist/cli/{chunk-ev67ycx0.js.map → chunk-jq5n4avg.js.map} +0 -0
- /package/dist/cli/{chunk-x66c5yjn.js.map → chunk-ppfvdcd4.js.map} +0 -0
- /package/dist/cli/{chunk-wd27zjcz.js.map → chunk-q4rae3bg.js.map} +0 -0
- /package/dist/cli/{chunk-pxj10x8y.js.map → chunk-ra1v2nc2.js.map} +0 -0
- /package/dist/cli/{chunk-qvvpnwaz.js.map → chunk-tqa1s0k8.js.map} +0 -0
- /package/dist/cli/{chunk-cbjnx4s8.js.map → chunk-vh9w1sgp.js.map} +0 -0
- /package/dist/cli/{chunk-sbdqrjbb.js.map → chunk-vrfp10qk.js.map} +0 -0
- /package/dist/cli/{chunk-5hs6gb7n.js.map → chunk-yzhm0j9q.js.map} +0 -0
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
|
+
nextFenceState,
|
|
3
4
|
INLINE_CODE,
|
|
4
5
|
MD_IMAGE,
|
|
5
|
-
|
|
6
|
+
targetOffsetIn,
|
|
6
7
|
hasIncludeStatements,
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
} from "./chunk-12dzsn9b.js";
|
|
8
|
+
expandIncludes,
|
|
9
|
+
hashText
|
|
10
|
+
} from "./chunk-hdm2dkd2.js";
|
|
11
11
|
import {
|
|
12
12
|
normalizeBasePath
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-2mzebbbz.js";
|
|
14
14
|
|
|
15
15
|
// src/core/sources/read.ts
|
|
16
16
|
import { readFile } from "node:fs/promises";
|
|
@@ -181,5 +181,5 @@ var collectContentAssets = async (project) => {
|
|
|
181
181
|
|
|
182
182
|
export { readExpandedEntryText, isRelativeImageTarget, resolveRelativeImage, rewriteRelativeImages, collectContentAssets };
|
|
183
183
|
|
|
184
|
-
//# debugId=
|
|
185
|
-
//# sourceMappingURL=chunk-
|
|
184
|
+
//# debugId=A36E1E08EE90A10064756E2164756E21
|
|
185
|
+
//# sourceMappingURL=chunk-450a7rcr.js.map
|
|
@@ -6,6 +6,6 @@
|
|
|
6
6
|
"import { readdirSync, statSync } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\n\nimport {\n basename,\n dirname,\n extname,\n normalize,\n relative,\n resolve,\n} from \"pathe\";\n\nimport { normalizeBasePath } from \"./base-path.ts\";\nimport { nextFenceState } from \"./code-fences.ts\";\nimport type { FenceState } from \"./code-fences.ts\";\nimport { hashText } from \"./sources/cache.ts\";\nimport { INLINE_CODE, MD_IMAGE, targetOffsetIn } from \"./sources/normalize.ts\";\nimport { readExpandedEntryText } from \"./sources/read.ts\";\nimport type { ContentSource } from \"./sources/types.ts\";\nimport type { PageRecord } from \"./types.ts\";\n\n/**\n * Colocated content images — `` next to the page that\n * references it. The HTML render optimizes these through `astro:assets` into\n * hashed `_astro/` files, but that mapping doesn't exist yet when the raw\n * agent-facing Markdown (`/<route>.md`, llms-full.txt, MCP) is snapshotted at\n * generate time — so a verbatim relative path would 404 for every agent\n * fetching the page by URL. Instead, the originals are served at\n * `/blume-assets/content/<project-relative path>` by a generated endpoint (see\n * `contentAssetsEndpointTemplate`), and these helpers rewrite the relative\n * references in agent-facing output to that URL.\n */\n\n/** The endpoint route prefix colocated content images are served under. */\nexport const CONTENT_ASSETS_PREFIX = \"/blume-assets/content\";\n\n// The formats Astro's image pipeline accepts, plus the web-safe pass-throughs;\n// anything else referenced relatively (a `.pdf`, a source file) is left alone.\nconst IMAGE_EXTENSIONS = new Set([\n \".apng\",\n \".avif\",\n \".bmp\",\n \".gif\",\n \".ico\",\n \".jpeg\",\n \".jpg\",\n \".png\",\n \".svg\",\n \".tiff\",\n \".webp\",\n]);\n\n/** Whether a link target is a relative filesystem path (not URL/absolute/hash). */\nconst isRelativeTarget = (target: string): boolean =>\n !(target.startsWith(\"/\") || target.startsWith(\"#\")) && !URL.canParse(target);\n\n/**\n * The endpoint param a colocated image is served under: its project-relative\n * path (readable, collision-free — it mirrors the source tree). A file outside\n * the project root can't be addressed that way (`..` segments don't survive a\n * URL), so it falls back to a content-addressed name.\n */\nexport const contentAssetParam = (\n projectRoot: string,\n absPath: string\n): string => {\n const rel = relative(projectRoot, absPath);\n if (rel.startsWith(\"..\")) {\n return `_/${hashText(absPath)}${extname(absPath)}`;\n }\n return rel;\n};\n\n/** Percent-decode an image target; malformed escapes stay verbatim. */\nconst decodeTarget = (target: string): string => {\n try {\n return decodeURI(target);\n } catch {\n return target;\n }\n};\n\n/**\n * Whether a target is *shaped* like a colocated image reference: a relative\n * filesystem path with an image extension. Exported so link validation can\n * tell \"not a colocated candidate\" apart from \"a candidate that resolves\n * nowhere\" — the former falls through to the public-dir probe, the latter is\n * a broken reference beside the page source.\n */\nexport const isRelativeImageTarget = (target: string): boolean =>\n isRelativeTarget(target) &&\n IMAGE_EXTENSIONS.has(extname(decodeTarget(target)).toLowerCase());\n\n/**\n * Whether `abs` is a file whose trailing `segments` names match the on-disk\n * entries exactly. A bare `existsSync` accepts `./Diagram.PNG` for\n * `diagram.png` (or a directory named like an image) on a case-insensitive\n * filesystem — the reference then validates and serves locally but breaks on\n * the case-sensitive Linux build.\n */\nconst existsAsWritten = (abs: string, segments: number): boolean => {\n let current = abs;\n for (let i = 0; i < segments; i += 1) {\n const parent = dirname(current);\n let entries: string[];\n try {\n entries = readdirSync(parent);\n } catch {\n return false;\n }\n if (!entries.includes(basename(current))) {\n return false;\n }\n current = parent;\n }\n const stat = statSync(abs, { throwIfNoEntry: false });\n return stat !== undefined && stat.isFile();\n};\n\n/**\n * Resolve one image target against its page's directory. Returns the absolute\n * file path when the target is relative, is an image, and exists on disk —\n * anything else (remote URLs, `public/` absolutes, broken refs, code-block\n * examples that happen to look like paths) is null and left untouched. Shared\n * with link validation, so what counts as a colocated image is decided once.\n */\nexport const resolveRelativeImage = (\n sourceDir: string,\n target: string\n): string | null => {\n if (!isRelativeImageTarget(target)) {\n return null;\n }\n const decoded = decodeTarget(target);\n // Only the segments the author wrote are checked against on-disk names;\n // `sourceDir`'s own casing is the filesystem's business, not the target's.\n const segments = normalize(decoded)\n .split(\"/\")\n .filter((part) => part !== \"\" && part !== \"..\").length;\n const abs = resolve(sourceDir, decoded);\n return existsAsWritten(abs, segments) ? abs : null;\n};\n\n/** Encode an endpoint param for use in a Markdown URL, keeping `/` separators. */\nconst encodedParam = (param: string): string =>\n param.split(\"/\").map(encodeURIComponent).join(\"/\");\n\n/**\n * Rewrite one line's relative image targets. Matches run on a copy with inline\n * code blanked out (a `` `` `` span is syntax being *shown*, not\n * an image), while replacements splice into the real line by index — the mask\n * preserves length, so the indices line up.\n */\nconst rewriteLine = (\n line: string,\n toUrl: (target: string) => string | null\n): string => {\n const masked = line.replaceAll(INLINE_CODE, (span) =>\n \" \".repeat(span.length)\n );\n let out = \"\";\n let cursor = 0;\n for (const match of masked.matchAll(MD_IMAGE)) {\n const target = match.groups?.target ?? \"\";\n const url = toUrl(target);\n if (url === null) {\n continue;\n }\n const offset =\n (match.index ?? 0) +\n targetOffsetIn(match[0], target, match.groups?.title);\n out += line.slice(cursor, offset) + url;\n cursor = offset + target.length;\n }\n return out + line.slice(cursor);\n};\n\n/**\n * Rewrite a page's relative image references to their served\n * `/blume-assets/content/…` URLs (under `deployment.base` when set). Fenced\n * code blocks and inline code are skipped; only references whose file actually\n * exists next to the source are touched. `register` observes each rewritten\n * asset so a caller can accumulate the files the endpoint must serve.\n */\nexport const rewriteRelativeImages = (options: {\n source: string;\n sourcePath: string;\n projectRoot: string;\n deployBase?: string;\n register?: (param: string, absPath: string) => void;\n}): string => {\n const { source, sourcePath, projectRoot, deployBase, register } = options;\n const sourceDir = dirname(sourcePath);\n const prefix = `${normalizeBasePath(deployBase)}${CONTENT_ASSETS_PREFIX}`;\n const toUrl = (target: string): string | null => {\n const abs = resolveRelativeImage(sourceDir, target);\n if (abs === null) {\n return null;\n }\n const param = contentAssetParam(projectRoot, abs);\n register?.(param, abs);\n return `${prefix}/${encodedParam(param)}`;\n };\n\n let fence: FenceState = null;\n const lines = source.split(\"\\n\").map((line) => {\n const next = nextFenceState(line, fence);\n const inFence = fence !== null || next !== null;\n fence = next;\n return inFence ? line : rewriteLine(line, toUrl);\n });\n return lines.join(\"\\n\");\n};\n\n/**\n * Every colocated image the project's pages reference, keyed by endpoint param.\n * Serialized to `generated/content-assets.json`, which the\n * `/blume-assets/[...asset]` endpoint reads to serve the original files. Runs\n * the same rewrite the agent-Markdown builders apply — over the same\n * include-expanded text, so a partial's colocated images (rebased into the\n * including page by the expander) are served too — keeping the served set and\n * the rewritten URLs from drifting apart.\n */\nexport const collectContentAssets = async (project: {\n context: { root: string };\n manifest: { routes: { id: string; sourcePath?: string }[] };\n graph: { pages: PageRecord[] };\n sources?: ContentSource[];\n}): Promise<Record<string, string>> => {\n const pageById = new Map(project.graph.pages.map((page) => [page.id, page]));\n const files: Record<string, string> = {};\n await Promise.all(\n project.manifest.routes.map(async (route) => {\n if (!route.sourcePath) {\n return;\n }\n const page = pageById.get(route.id);\n let source: string;\n try {\n source = page\n ? await readExpandedEntryText(project, page)\n : await readFile(route.sourcePath, \"utf-8\");\n } catch {\n return;\n }\n rewriteRelativeImages({\n projectRoot: project.context.root,\n register: (param, abs) => {\n files[param] = abs;\n },\n source,\n sourcePath: route.sourcePath,\n });\n })\n );\n return files;\n};\n"
|
|
7
7
|
],
|
|
8
8
|
"mappings": "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",
|
|
9
|
-
"debugId": "
|
|
9
|
+
"debugId": "A36E1E08EE90A10064756E2164756E21",
|
|
10
10
|
"names": []
|
|
11
11
|
}
|
|
@@ -1,131 +1,127 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
renderRssFeed
|
|
9
|
-
} from "./chunk-ka5k7cz9.js";
|
|
3
|
+
packageRoot,
|
|
4
|
+
getBlumeVersion,
|
|
5
|
+
BlumeError,
|
|
6
|
+
enrichDiagnostic
|
|
7
|
+
} from "./index.js";
|
|
10
8
|
import {
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
resolveReferences,
|
|
10
|
+
referenceRoutes,
|
|
11
|
+
hasScalarReferences,
|
|
12
|
+
builtinProxyKinds,
|
|
13
|
+
needsPlaygroundProxy,
|
|
14
|
+
GOOGLE_FONTS,
|
|
15
|
+
isFontSlug,
|
|
16
|
+
fontLocaleCodes,
|
|
17
|
+
buildFontsCss,
|
|
18
|
+
configuredFonts,
|
|
19
|
+
repoUrl,
|
|
20
|
+
editBaseUrl,
|
|
21
|
+
apiUrl,
|
|
22
|
+
EN_UI,
|
|
23
|
+
resolveUIStrings
|
|
24
|
+
} from "./chunk-61j18dwk.js";
|
|
13
25
|
import {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
26
|
+
resolveFallbackLocale,
|
|
27
|
+
validateSearchPopularIcons,
|
|
28
|
+
validateNavTargets,
|
|
29
|
+
buildIncludeGraph,
|
|
30
|
+
apiNamePhrase,
|
|
31
|
+
isOpenApiSource,
|
|
32
|
+
resolveDocsCollection
|
|
33
|
+
} from "./chunk-hdm2dkd2.js";
|
|
19
34
|
import {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
} from "./chunk-
|
|
35
|
+
siteRoot,
|
|
36
|
+
absoluteUrl
|
|
37
|
+
} from "./chunk-88by27n5.js";
|
|
23
38
|
import {
|
|
24
|
-
|
|
25
|
-
|
|
39
|
+
buildRssFeeds,
|
|
40
|
+
renderRssFeed,
|
|
41
|
+
buildRawMarkdown,
|
|
42
|
+
markdownRoutePaths,
|
|
43
|
+
buildSearchDocuments,
|
|
44
|
+
buildMcpData
|
|
45
|
+
} from "./chunk-wjt80jps.js";
|
|
26
46
|
import {
|
|
27
|
-
|
|
28
|
-
|
|
47
|
+
OPENAPI_PATH,
|
|
48
|
+
API_PAGES_PATH,
|
|
49
|
+
API_PAGE_PATH,
|
|
50
|
+
API_NAVIGATION_PATH,
|
|
51
|
+
API_SEARCH_PATH
|
|
52
|
+
} from "./chunk-tqa1s0k8.js";
|
|
29
53
|
import {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
54
|
+
rewriteRelativeImages,
|
|
55
|
+
collectContentAssets
|
|
56
|
+
} from "./chunk-450a7rcr.js";
|
|
57
|
+
import {
|
|
58
|
+
resolveAskBackend,
|
|
35
59
|
askBackendRuntimeDep,
|
|
36
|
-
askComponentTemplate,
|
|
37
|
-
askEndpointTemplate,
|
|
38
|
-
astroConfigTemplate,
|
|
39
60
|
buildHomeLinkHeader,
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
61
|
+
publishRuntimeModules,
|
|
62
|
+
runtimeDependencies,
|
|
63
|
+
astroConfigTemplate,
|
|
64
|
+
stagedContentDir,
|
|
43
65
|
contentConfigTemplate,
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
examplesPageTemplate,
|
|
66
|
+
askEndpointTemplate,
|
|
67
|
+
askComponentTemplate,
|
|
68
|
+
searchEndpointTemplate,
|
|
48
69
|
featuresTemplate,
|
|
49
|
-
|
|
50
|
-
islandWrapperTemplate,
|
|
51
|
-
mcpEndpointTemplate,
|
|
52
|
-
mcpPageFile,
|
|
70
|
+
searchClientTemplate,
|
|
53
71
|
mixedbreadSearchEndpointTemplate,
|
|
54
|
-
navFragmentTemplate,
|
|
55
|
-
notFoundJsonTemplate,
|
|
56
|
-
notFoundMarkdownTemplate,
|
|
57
|
-
notFoundPageTemplate,
|
|
58
|
-
ogEndpointTemplate,
|
|
59
|
-
playgroundProxyTemplate,
|
|
60
|
-
publishRuntimeModules,
|
|
61
72
|
rawMarkdownEndpointTemplate,
|
|
62
|
-
|
|
73
|
+
contentAssetsEndpointTemplate,
|
|
74
|
+
mcpPageFile,
|
|
75
|
+
mcpEndpointTemplate,
|
|
76
|
+
playgroundProxyTemplate,
|
|
77
|
+
staticJsonEndpointTemplate,
|
|
63
78
|
rssEndpointTemplate,
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
runtimeTsconfigTemplate,
|
|
79
|
+
navFragmentTemplate,
|
|
80
|
+
ogEndpointTemplate,
|
|
67
81
|
scalarReferenceTemplate,
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
82
|
+
catchAllPageTemplate,
|
|
83
|
+
changelogIndexTemplate,
|
|
84
|
+
notFoundPageTemplate,
|
|
85
|
+
notFoundMarkdownTemplate,
|
|
86
|
+
notFoundJsonTemplate,
|
|
87
|
+
apiPagesIndexTemplate,
|
|
88
|
+
apiPageTemplate,
|
|
89
|
+
apiNavigationTemplate,
|
|
90
|
+
apiSearchTemplate,
|
|
91
|
+
apiNotFoundTemplate,
|
|
92
|
+
islandWrapperTemplate,
|
|
93
|
+
islandMapTemplate,
|
|
94
|
+
exampleSlug,
|
|
95
|
+
exampleWrapperTemplate,
|
|
96
|
+
exampleMapTemplate,
|
|
97
|
+
examplesPageTemplate,
|
|
98
|
+
runtimePackageTemplate,
|
|
99
|
+
runtimeTsconfigTemplate
|
|
100
|
+
} from "./chunk-ejjx8znq.js";
|
|
73
101
|
import {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
} from "./chunk-qvvpnwaz.js";
|
|
102
|
+
discoverPages,
|
|
103
|
+
routeIsTaken,
|
|
104
|
+
hasGeneratedChangelog,
|
|
105
|
+
customOgRoutes
|
|
106
|
+
} from "./chunk-vrfp10qk.js";
|
|
80
107
|
import {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
} from "./chunk-vxv4x1n8.js";
|
|
108
|
+
writeTextAtomic
|
|
109
|
+
} from "./chunk-jq5n4avg.js";
|
|
84
110
|
import {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
} from "./chunk-wd27zjcz.js";
|
|
111
|
+
registry
|
|
112
|
+
} from "./chunk-688e0dde.js";
|
|
88
113
|
import {
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
isOpenApiSource,
|
|
92
|
-
resolveDocsCollection,
|
|
93
|
-
resolveFallbackLocale,
|
|
94
|
-
validateNavTargets,
|
|
95
|
-
validateSearchPopularIcons
|
|
96
|
-
} from "./chunk-12dzsn9b.js";
|
|
114
|
+
MCP_TOOLS
|
|
115
|
+
} from "./chunk-ra1v2nc2.js";
|
|
97
116
|
import {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
buildFontsCss,
|
|
102
|
-
builtinProxyKinds,
|
|
103
|
-
configuredFonts,
|
|
104
|
-
editBaseUrl,
|
|
105
|
-
fontLocaleCodes,
|
|
106
|
-
hasScalarReferences,
|
|
107
|
-
isFontSlug,
|
|
108
|
-
needsPlaygroundProxy,
|
|
109
|
-
referenceRoutes,
|
|
110
|
-
repoUrl,
|
|
111
|
-
resolveReferences,
|
|
112
|
-
resolveUIStrings
|
|
113
|
-
} from "./chunk-r99hynxh.js";
|
|
117
|
+
searchProviderMeta,
|
|
118
|
+
servesStaticIndex
|
|
119
|
+
} from "./chunk-q4rae3bg.js";
|
|
114
120
|
import {
|
|
115
|
-
normalizeBasePath,
|
|
116
121
|
trimChar,
|
|
122
|
+
normalizeBasePath,
|
|
117
123
|
withBasePath
|
|
118
|
-
} from "./chunk-
|
|
119
|
-
import {
|
|
120
|
-
getBlumeVersion
|
|
121
|
-
} from "./chunk-4xyggvgf.js";
|
|
122
|
-
import {
|
|
123
|
-
packageRoot
|
|
124
|
-
} from "./chunk-6kzzpsx8.js";
|
|
125
|
-
import {
|
|
126
|
-
BlumeError,
|
|
127
|
-
enrichDiagnostic
|
|
128
|
-
} from "./chunk-ey89bjj1.js";
|
|
124
|
+
} from "./chunk-2mzebbbz.js";
|
|
129
125
|
|
|
130
126
|
// src/ai/web-bot-auth.ts
|
|
131
127
|
var SIGNATURES_DIRECTORY_PATH = "/.well-known/http-message-signatures-directory";
|
|
@@ -1054,10 +1050,10 @@ var probeExtension = (base) => {
|
|
|
1054
1050
|
return null;
|
|
1055
1051
|
};
|
|
1056
1052
|
var toImport = (specifier, imported, dir) => {
|
|
1057
|
-
const
|
|
1053
|
+
const relative = specifier.startsWith(".") || isAbsolute(specifier);
|
|
1058
1054
|
let path = specifier;
|
|
1059
1055
|
let extension = extname(specifier).slice(1).toLowerCase();
|
|
1060
|
-
if (
|
|
1056
|
+
if (relative) {
|
|
1061
1057
|
const absolute = isAbsolute(specifier) ? specifier : resolve3(dir, specifier);
|
|
1062
1058
|
if (extension) {
|
|
1063
1059
|
path = absolute;
|
|
@@ -1577,10 +1573,10 @@ var resolveOgLogo = (project, source) => {
|
|
|
1577
1573
|
if (!source?.toLowerCase().endsWith(".svg")) {
|
|
1578
1574
|
return;
|
|
1579
1575
|
}
|
|
1580
|
-
const
|
|
1576
|
+
const relative = source.replace(/^\//u, "");
|
|
1581
1577
|
const file = [
|
|
1582
|
-
join7(project.context.root, "public",
|
|
1583
|
-
join7(project.context.root,
|
|
1578
|
+
join7(project.context.root, "public", relative),
|
|
1579
|
+
join7(project.context.root, relative)
|
|
1584
1580
|
].find((path) => existsSync5(path));
|
|
1585
1581
|
return file ? readFileSync(file, "utf-8") : undefined;
|
|
1586
1582
|
};
|
|
@@ -1693,52 +1689,52 @@ var specConfiguration = async (spec, root) => {
|
|
|
1693
1689
|
};
|
|
1694
1690
|
}
|
|
1695
1691
|
};
|
|
1696
|
-
var acceptScalarReference = (
|
|
1697
|
-
if (
|
|
1692
|
+
var acceptScalarReference = (ref, seen, contentRoutes, warnings) => {
|
|
1693
|
+
if (ref.renderer !== "scalar") {
|
|
1698
1694
|
return null;
|
|
1699
1695
|
}
|
|
1700
|
-
if (seen.has(
|
|
1701
|
-
warnings.push(`Two API reference sources resolve to ${
|
|
1696
|
+
if (seen.has(ref.route)) {
|
|
1697
|
+
warnings.push(`Two API reference sources resolve to ${ref.route}; keeping the first.`);
|
|
1702
1698
|
return null;
|
|
1703
1699
|
}
|
|
1704
|
-
if (contentRoutes.has(
|
|
1705
|
-
warnings.push(`API reference route ${
|
|
1700
|
+
if (contentRoutes.has(ref.route)) {
|
|
1701
|
+
warnings.push(`API reference route ${ref.route} collides with a content page; skipping the reference there.`);
|
|
1706
1702
|
return null;
|
|
1707
1703
|
}
|
|
1708
|
-
seen.add(
|
|
1709
|
-
return
|
|
1704
|
+
seen.add(ref.route);
|
|
1705
|
+
return ref;
|
|
1710
1706
|
};
|
|
1711
1707
|
var buildReferenceFiles = async (options) => {
|
|
1712
1708
|
const { config, root, contentRoutes } = options;
|
|
1713
1709
|
const warnings = [];
|
|
1714
1710
|
const seen = new Set;
|
|
1715
1711
|
const accepted = [];
|
|
1716
|
-
for (const
|
|
1717
|
-
const next = acceptScalarReference(
|
|
1712
|
+
for (const ref of resolveReferences(config)) {
|
|
1713
|
+
const next = acceptScalarReference(ref, seen, contentRoutes, warnings);
|
|
1718
1714
|
if (next) {
|
|
1719
1715
|
accepted.push(next);
|
|
1720
1716
|
}
|
|
1721
1717
|
}
|
|
1722
|
-
const built = await Promise.all(accepted.map(async (
|
|
1723
|
-
ref
|
|
1724
|
-
spec: await specConfiguration(
|
|
1718
|
+
const built = await Promise.all(accepted.map(async (ref) => ({
|
|
1719
|
+
ref,
|
|
1720
|
+
spec: await specConfiguration(ref.spec, root)
|
|
1725
1721
|
})));
|
|
1726
1722
|
const files = [];
|
|
1727
|
-
for (const { ref
|
|
1723
|
+
for (const { ref, spec } of built) {
|
|
1728
1724
|
if (spec.warning) {
|
|
1729
1725
|
warnings.push(spec.warning);
|
|
1730
1726
|
}
|
|
1731
|
-
const pagePath = referencePagePath(
|
|
1727
|
+
const pagePath = referencePagePath(ref.route);
|
|
1732
1728
|
files.push({
|
|
1733
1729
|
content: scalarReferenceTemplate({
|
|
1734
1730
|
configuration: {
|
|
1735
1731
|
...spec.config,
|
|
1736
|
-
...themeConfiguration(config,
|
|
1737
|
-
...
|
|
1732
|
+
...themeConfiguration(config, ref.theme),
|
|
1733
|
+
...ref.scalar
|
|
1738
1734
|
},
|
|
1739
|
-
noindex:
|
|
1740
|
-
route:
|
|
1741
|
-
title:
|
|
1735
|
+
noindex: ref.noindex,
|
|
1736
|
+
route: ref.route,
|
|
1737
|
+
title: ref.label
|
|
1742
1738
|
}),
|
|
1743
1739
|
pagePath
|
|
1744
1740
|
});
|
|
@@ -3762,7 +3758,9 @@ var writeAskFiles = async (project, srcDir, write, modules) => {
|
|
|
3762
3758
|
modules.set("blume:ask-data", JSON.stringify(await buildAskData(project)));
|
|
3763
3759
|
}
|
|
3764
3760
|
await write(join11(srcDir, "pages", "api", "ask.ts"), askEndpointTemplate(resolveAskBackend(ask), grounded, {
|
|
3761
|
+
cors: ask.cors,
|
|
3765
3762
|
instructions: ask.instructions,
|
|
3763
|
+
reasoning: ask.reasoning,
|
|
3766
3764
|
retrieval: ask.retrieval
|
|
3767
3765
|
}));
|
|
3768
3766
|
};
|
|
@@ -4070,5 +4068,5 @@ var generateRuntime = async (project) => {
|
|
|
4070
4068
|
|
|
4071
4069
|
export { SIGNATURES_DIRECTORY_PATH, SIGNATURES_DIRECTORY_TYPE, publishBuildProject, refreshBlumeContent, showBlumeErrorOverlay, ogCacheDir, pruneCardCache, cardCacheTally, buildAskData, buildMcpDiscovery, buildMcpServerCard, buildThemeCss, buildReferenceFiles, tailwindEntryTemplate, examplesEntryTemplate, rebaseSourceDirectives, twoslashCss, planComponentSlots, discoverIslands, EXAMPLE_SCAN_GLOB, exampleScanRoots, discoverExamples, exampleMarkdownLookup, detectNeedsReact, detectUsesMath, collectStaged, buildRuntimeData, languageIconCssFor, clientFeaturesFor, generateRuntime };
|
|
4072
4070
|
|
|
4073
|
-
//# debugId=
|
|
4074
|
-
//# sourceMappingURL=chunk-
|
|
4071
|
+
//# debugId=851B0C91E17092DD64756E2164756E21
|
|
4072
|
+
//# sourceMappingURL=chunk-5n7t497w.js.map
|