sourcey 3.6.0 → 3.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -2
- package/dist/adapters/index.d.ts +3 -2
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +35 -3
- package/dist/adapters/types.d.ts +8 -2
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/cli.js +28 -34
- package/dist/client/search.js +181 -119
- package/dist/client/tabs.js +23 -0
- package/dist/components/layout/Head.js +2 -2
- package/dist/components/openapi/Introduction.d.ts.map +1 -1
- package/dist/components/openapi/Introduction.js +16 -1
- package/dist/components/openapi/Security.d.ts.map +1 -1
- package/dist/components/openapi/Security.js +18 -2
- package/dist/config.d.ts +63 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +21 -7
- package/dist/core/api-rendering.d.ts +47 -0
- package/dist/core/api-rendering.d.ts.map +1 -0
- package/dist/core/api-rendering.js +76 -0
- package/dist/core/doxygen-loader.d.ts.map +1 -1
- package/dist/core/doxygen-loader.js +35 -18
- package/dist/core/godoc-loader.d.ts.map +1 -1
- package/dist/core/godoc-loader.js +17 -6
- package/dist/core/markdown-loader.d.ts.map +1 -1
- package/dist/core/markdown-loader.js +8 -5
- package/dist/core/mcp-normalizer.d.ts.map +1 -1
- package/dist/core/mcp-normalizer.js +48 -34
- package/dist/core/parser.d.ts.map +1 -1
- package/dist/core/parser.js +75 -4
- package/dist/core/rustdoc-introspector.d.ts +29 -0
- package/dist/core/rustdoc-introspector.d.ts.map +1 -0
- package/dist/core/rustdoc-introspector.js +236 -0
- package/dist/core/rustdoc-loader.d.ts +25 -0
- package/dist/core/rustdoc-loader.d.ts.map +1 -0
- package/dist/core/rustdoc-loader.js +469 -0
- package/dist/core/rustdoc-render.d.ts +76 -0
- package/dist/core/rustdoc-render.d.ts.map +1 -0
- package/dist/core/rustdoc-render.js +785 -0
- package/dist/core/rustdoc-types.d.ts +314 -0
- package/dist/core/rustdoc-types.d.ts.map +1 -0
- package/dist/core/rustdoc-types.js +18 -0
- package/dist/core/search-indexer.js +1 -1
- package/dist/core/sourcey-rustdoc/Cargo.lock +705 -0
- package/dist/core/sourcey-rustdoc/Cargo.toml +38 -0
- package/dist/core/sourcey-rustdoc/README.md +59 -0
- package/dist/core/sourcey-rustdoc/src/diagnostics.rs +42 -0
- package/dist/core/sourcey-rustdoc/src/doctest.rs +268 -0
- package/dist/core/sourcey-rustdoc/src/extract.rs +492 -0
- package/dist/core/sourcey-rustdoc/src/lib.rs +58 -0
- package/dist/core/sourcey-rustdoc/src/links.rs +126 -0
- package/dist/core/sourcey-rustdoc/src/main.rs +256 -0
- package/dist/core/sourcey-rustdoc/src/signature.rs +415 -0
- package/dist/core/sourcey-rustdoc/src/spec.rs +390 -0
- package/dist/core/sourcey-rustdoc/tests/format_version.rs +45 -0
- package/dist/dev-server.d.ts.map +1 -1
- package/dist/dev-server.js +49 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +22 -13
- package/dist/init.js +2 -2
- package/dist/renderer/changelog-feed.d.ts.map +1 -1
- package/dist/renderer/changelog-feed.js +27 -19
- package/dist/renderer/html-builder.d.ts.map +1 -1
- package/dist/renderer/html-builder.js +4 -3
- package/dist/renderer/llms.js +57 -2
- package/dist/site-assembly.d.ts +5 -0
- package/dist/site-assembly.d.ts.map +1 -1
- package/dist/site-assembly.js +55 -1
- package/dist/themes/default/sourcey.css +300 -0
- package/dist/utils/code-samples.d.ts +1 -0
- package/dist/utils/code-samples.d.ts.map +1 -1
- package/dist/utils/code-samples.js +30 -22
- package/dist/utils/html.d.ts +10 -0
- package/dist/utils/html.d.ts.map +1 -0
- package/dist/utils/html.js +152 -0
- package/dist/utils/http.d.ts +0 -2
- package/dist/utils/http.d.ts.map +1 -1
- package/dist/utils/http.js +19 -34
- package/dist/utils/markdown.d.ts.map +1 -1
- package/dist/utils/markdown.js +102 -37
- package/package.json +9 -4
package/dist/config.d.ts
CHANGED
|
@@ -136,6 +136,63 @@ export interface GodocGoEnv {
|
|
|
136
136
|
GOARCH?: string;
|
|
137
137
|
tags?: string[];
|
|
138
138
|
}
|
|
139
|
+
export type RustdocMode = "auto" | "live" | "snapshot";
|
|
140
|
+
export interface RustdocFeatures {
|
|
141
|
+
/** Use the crate's default features. Defaults to `true`. */
|
|
142
|
+
default?: boolean;
|
|
143
|
+
/** Extra features to enable. */
|
|
144
|
+
list?: string[];
|
|
145
|
+
/** Enable every feature. Overrides `default` and `list`. */
|
|
146
|
+
all?: boolean;
|
|
147
|
+
}
|
|
148
|
+
export interface RustdocConfig {
|
|
149
|
+
/** Cargo manifest path. Either a Cargo.toml or a directory that contains one. */
|
|
150
|
+
manifest?: string;
|
|
151
|
+
/** Crates to document. Defaults to the manifest's own package. */
|
|
152
|
+
crates?: string[];
|
|
153
|
+
/** Optional path to a committed v1 RustdocSpec snapshot (rustdoc.json). */
|
|
154
|
+
snapshot?: string;
|
|
155
|
+
/**
|
|
156
|
+
* Source mode.
|
|
157
|
+
* - "live": invoke the bundled Rust helper at build time (requires nightly).
|
|
158
|
+
* - "snapshot": read the committed snapshot file; no Rust toolchain required.
|
|
159
|
+
* - "auto" (default): prefer live when nightly is available; fall back to snapshot.
|
|
160
|
+
*/
|
|
161
|
+
mode?: RustdocMode;
|
|
162
|
+
/** Feature selection. Defaults to `{ default: true }`. */
|
|
163
|
+
features?: RustdocFeatures;
|
|
164
|
+
/** Include `pub(crate)` and private items (default: false). */
|
|
165
|
+
includePrivate?: boolean;
|
|
166
|
+
/** Include items marked `#[doc(hidden)]` (default: false). */
|
|
167
|
+
includeHidden?: boolean;
|
|
168
|
+
/** Target triple to build docs for. */
|
|
169
|
+
target?: string;
|
|
170
|
+
/** rustup toolchain name. Defaults to `nightly`. */
|
|
171
|
+
toolchain?: string;
|
|
172
|
+
/**
|
|
173
|
+
* Repository-relative base path for source links. Leave empty when the
|
|
174
|
+
* configured manifest is at the repository root.
|
|
175
|
+
*/
|
|
176
|
+
sourceBasePath?: string;
|
|
177
|
+
/** Render a dedicated doctests index page. Defaults to `true`. */
|
|
178
|
+
doctestsIndex?: boolean;
|
|
179
|
+
}
|
|
180
|
+
export interface ResolvedRustdocConfig {
|
|
181
|
+
/** Absolute path to the Cargo manifest file. */
|
|
182
|
+
manifest: string;
|
|
183
|
+
/** Crates to document. Always at least one entry. */
|
|
184
|
+
crates: string[];
|
|
185
|
+
/** Absolute path to a snapshot file when configured. */
|
|
186
|
+
snapshot?: string;
|
|
187
|
+
mode: RustdocMode;
|
|
188
|
+
features: Required<RustdocFeatures>;
|
|
189
|
+
includePrivate: boolean;
|
|
190
|
+
includeHidden: boolean;
|
|
191
|
+
target?: string;
|
|
192
|
+
toolchain: string;
|
|
193
|
+
sourceBasePath: string;
|
|
194
|
+
doctestsIndex: boolean;
|
|
195
|
+
}
|
|
139
196
|
export interface GodocConfig {
|
|
140
197
|
/** Module root (directory containing go.mod). Defaults to the directory containing sourcey.config.ts. */
|
|
141
198
|
module?: string;
|
|
@@ -187,6 +244,11 @@ export interface TabConfig {
|
|
|
187
244
|
* `{ module: <value>, packages: ["./..."], mode: "auto", includeTests: true }`.
|
|
188
245
|
*/
|
|
189
246
|
godoc?: GodocConfig | string;
|
|
247
|
+
/**
|
|
248
|
+
* Native Rust API documentation. String shorthand expands to
|
|
249
|
+
* `{ manifest: <value>, mode: "auto", doctestsIndex: true }`.
|
|
250
|
+
*/
|
|
251
|
+
rustdoc?: RustdocConfig | string;
|
|
190
252
|
}
|
|
191
253
|
export interface GroupConfig {
|
|
192
254
|
group: string;
|
|
@@ -293,6 +355,7 @@ export interface ResolvedTab {
|
|
|
293
355
|
doxygen?: ResolvedDoxygenConfig;
|
|
294
356
|
mcp?: string;
|
|
295
357
|
godoc?: ResolvedGodocConfig;
|
|
358
|
+
rustdoc?: ResolvedRustdocConfig;
|
|
296
359
|
}
|
|
297
360
|
export interface ResolvedPage {
|
|
298
361
|
/** Original config slug (e.g. "run/index") */
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/config.js
CHANGED
|
@@ -2,7 +2,8 @@ import { access } from "node:fs/promises";
|
|
|
2
2
|
import { resolve, dirname } from "node:path";
|
|
3
3
|
import { createJiti } from "jiti";
|
|
4
4
|
import { normalizeBaseUrl, normalizeSiteUrl } from "./site-url.js";
|
|
5
|
-
import { doxygen as doxygenSource, godoc as godocSource, markdown as markdownSource, mcp as mcpSource, mkdocs as mkdocsSource, openapi as openapiSource, } from "./adapters/index.js";
|
|
5
|
+
import { doxygen as doxygenSource, godoc as godocSource, markdown as markdownSource, mcp as mcpSource, mkdocs as mkdocsSource, openapi as openapiSource, rustdoc as rustdocSource, } from "./adapters/index.js";
|
|
6
|
+
import { DEFAULT_CODE_SAMPLE_LANGS, SUPPORTED_CODE_SAMPLE_LANGS } from "./utils/code-samples.js";
|
|
6
7
|
export function defineConfig(config) {
|
|
7
8
|
return config;
|
|
8
9
|
}
|
|
@@ -108,7 +109,7 @@ export async function resolveConfigFromRaw(raw, configDir) {
|
|
|
108
109
|
repo: raw.repo,
|
|
109
110
|
editBranch: raw.editBranch,
|
|
110
111
|
editBasePath: raw.editBasePath,
|
|
111
|
-
codeSamples: raw.codeSamples
|
|
112
|
+
codeSamples: resolveCodeSamples(raw.codeSamples),
|
|
112
113
|
tabs,
|
|
113
114
|
navbar: {
|
|
114
115
|
links: raw.navbar?.links ?? [],
|
|
@@ -188,16 +189,17 @@ async function resolveTabs(tabs, configDir) {
|
|
|
188
189
|
tab.source,
|
|
189
190
|
tab.openapi,
|
|
190
191
|
tab.mkdocs,
|
|
191
|
-
tab.groups,
|
|
192
|
+
tab.groups?.length ? tab.groups : undefined,
|
|
192
193
|
tab.doxygen,
|
|
193
194
|
tab.mcp,
|
|
194
195
|
tab.godoc,
|
|
196
|
+
tab.rustdoc,
|
|
195
197
|
].filter(Boolean).length;
|
|
196
198
|
if (sources > 1) {
|
|
197
|
-
throw new Error(`Tab "${tab.tab}" has multiple sources; use only one of "source", "openapi", "mkdocs", "groups", "doxygen", "mcp", or "
|
|
199
|
+
throw new Error(`Tab "${tab.tab}" has multiple sources; use only one of "source", "openapi", "mkdocs", "groups", "doxygen", "mcp", "godoc", or "rustdoc"`);
|
|
198
200
|
}
|
|
199
201
|
if (sources === 0) {
|
|
200
|
-
throw new Error(`Tab "${tab.tab}" needs one of "source", "openapi", "mkdocs", "groups", "doxygen", "mcp", or "
|
|
202
|
+
throw new Error(`Tab "${tab.tab}" needs one of "source", "openapi", "mkdocs", "groups", "doxygen", "mcp", "godoc", or "rustdoc"`);
|
|
201
203
|
}
|
|
202
204
|
const adapter = tab.source ?? legacySourceAdapter(tab);
|
|
203
205
|
const source = await adapter.resolve({
|
|
@@ -223,6 +225,8 @@ function legacySourceAdapter(tab) {
|
|
|
223
225
|
return doxygenSource(tab.doxygen);
|
|
224
226
|
if (tab.godoc)
|
|
225
227
|
return godocSource(tab.godoc);
|
|
228
|
+
if (tab.rustdoc)
|
|
229
|
+
return rustdocSource(tab.rustdoc);
|
|
226
230
|
return markdownSource({ groups: tab.groups });
|
|
227
231
|
}
|
|
228
232
|
function resolvedTabFromSource(label, slug, source) {
|
|
@@ -242,6 +246,8 @@ function resolvedTabFromSource(label, slug, source) {
|
|
|
242
246
|
return { ...base, doxygen: source.config };
|
|
243
247
|
case "godoc":
|
|
244
248
|
return { ...base, godoc: source.config };
|
|
249
|
+
case "rustdoc":
|
|
250
|
+
return { ...base, rustdoc: source.config };
|
|
245
251
|
}
|
|
246
252
|
}
|
|
247
253
|
// ---------------------------------------------------------------------------
|
|
@@ -291,14 +297,22 @@ function resolvePrettyUrls(value) {
|
|
|
291
297
|
throw new Error(`Invalid prettyUrls "${String(value)}". Expected false, "slash", or "strip".`);
|
|
292
298
|
}
|
|
293
299
|
export function hexToRgb(hex) {
|
|
294
|
-
const h = hex.replace(
|
|
295
|
-
if (h
|
|
300
|
+
const h = hex.replace(/^#/, "");
|
|
301
|
+
if (!/^[0-9a-fA-F]{6}$/.test(h))
|
|
296
302
|
throw new Error(`Invalid hex color: "${hex}"`);
|
|
297
303
|
const r = parseInt(h.slice(0, 2), 16);
|
|
298
304
|
const g = parseInt(h.slice(2, 4), 16);
|
|
299
305
|
const b = parseInt(h.slice(4, 6), 16);
|
|
300
306
|
return `${r} ${g} ${b}`;
|
|
301
307
|
}
|
|
308
|
+
function resolveCodeSamples(value) {
|
|
309
|
+
const langs = value ?? DEFAULT_CODE_SAMPLE_LANGS;
|
|
310
|
+
const unsupported = langs.filter((lang) => !SUPPORTED_CODE_SAMPLE_LANGS.includes(lang));
|
|
311
|
+
if (unsupported.length) {
|
|
312
|
+
throw new Error(`Invalid codeSamples value "${unsupported[0]}". Must be one of: ${SUPPORTED_CODE_SAMPLE_LANGS.join(", ")}`);
|
|
313
|
+
}
|
|
314
|
+
return [...langs];
|
|
315
|
+
}
|
|
302
316
|
async function assertExists(filePath, label) {
|
|
303
317
|
try {
|
|
304
318
|
await access(filePath);
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared API-documentation rendering primitives.
|
|
3
|
+
*
|
|
4
|
+
* Introduced by the rustdoc adapter and designed to be reusable by the godoc
|
|
5
|
+
* and doxygen adapters in a follow-on retrofit. Class names mirror rustdoc's
|
|
6
|
+
* DOM so deep-links from a rustdoc URL line up with sourcey output.
|
|
7
|
+
*/
|
|
8
|
+
export interface ApiStabilityCalloutInput {
|
|
9
|
+
kind: "unstable" | "deprecated" | "portability" | "non_exhaustive" | "must_use";
|
|
10
|
+
since?: string | null;
|
|
11
|
+
reason?: string | null;
|
|
12
|
+
featureName?: string | null;
|
|
13
|
+
issueId?: number | null;
|
|
14
|
+
/** Tracking-issue URL prefix; defaults to rust-lang issues. */
|
|
15
|
+
issueBaseUrl?: string;
|
|
16
|
+
}
|
|
17
|
+
export declare function apiStabilityCallout(input: ApiStabilityCalloutInput): string;
|
|
18
|
+
export interface ApiItemInfoRowInput {
|
|
19
|
+
since?: string | null;
|
|
20
|
+
sourceHref?: string | null;
|
|
21
|
+
sourceLabel?: string;
|
|
22
|
+
}
|
|
23
|
+
export declare function apiItemInfoRow(input: ApiItemInfoRowInput): string;
|
|
24
|
+
export interface ApiSymbolLinkInput {
|
|
25
|
+
kind: string;
|
|
26
|
+
href: string;
|
|
27
|
+
text: string;
|
|
28
|
+
title?: string;
|
|
29
|
+
}
|
|
30
|
+
export declare function apiSymbolLink(input: ApiSymbolLinkInput): string;
|
|
31
|
+
export interface ApiToggleInput {
|
|
32
|
+
open?: boolean;
|
|
33
|
+
summary: string;
|
|
34
|
+
body: string;
|
|
35
|
+
cssClass: string;
|
|
36
|
+
}
|
|
37
|
+
export declare function apiImplToggle(input: Omit<ApiToggleInput, "cssClass">): string;
|
|
38
|
+
export interface ApiSectionAnchorInput {
|
|
39
|
+
level: 2 | 3 | 4 | 5;
|
|
40
|
+
id: string;
|
|
41
|
+
text: string;
|
|
42
|
+
className?: string;
|
|
43
|
+
}
|
|
44
|
+
export declare function apiSectionAnchor(input: ApiSectionAnchorInput): string;
|
|
45
|
+
export declare function escapeHtml(value: string): string;
|
|
46
|
+
export declare function escapeAttr(value: string): string;
|
|
47
|
+
//# sourceMappingURL=api-rendering.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-rendering.d.ts","sourceRoot":"","sources":["../../src/core/api-rendering.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,UAAU,GAAG,YAAY,GAAG,aAAa,GAAG,gBAAgB,GAAG,UAAU,CAAC;IAChF,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,+DAA+D;IAC/D,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,GAAG,MAAM,CA8B3E;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,MAAM,CAcjE;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,CAK/D;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,GAAG,MAAM,CAK7E;AASD,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,MAAM,CAQrE;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared API-documentation rendering primitives.
|
|
3
|
+
*
|
|
4
|
+
* Introduced by the rustdoc adapter and designed to be reusable by the godoc
|
|
5
|
+
* and doxygen adapters in a follow-on retrofit. Class names mirror rustdoc's
|
|
6
|
+
* DOM so deep-links from a rustdoc URL line up with sourcey output.
|
|
7
|
+
*/
|
|
8
|
+
import { escapeAttr as sharedEscapeAttr, escapeHtml as sharedEscapeHtml } from "../utils/html.js";
|
|
9
|
+
export function apiStabilityCallout(input) {
|
|
10
|
+
switch (input.kind) {
|
|
11
|
+
case "unstable": {
|
|
12
|
+
const issue = input.issueId
|
|
13
|
+
? ` (<a href="${escapeAttr((input.issueBaseUrl ?? "https://github.com/rust-lang/rust/issues/") +
|
|
14
|
+
String(input.issueId))}">#${input.issueId}</a>)`
|
|
15
|
+
: "";
|
|
16
|
+
const feature = input.featureName ? ` <code>${escapeHtml(input.featureName)}</code>` : "";
|
|
17
|
+
return `<div class="stab unstable api-stab api-stab-unstable">🔬 This is a nightly-only experimental API.${feature}${issue}</div>`;
|
|
18
|
+
}
|
|
19
|
+
case "deprecated": {
|
|
20
|
+
const since = input.since ? ` since ${escapeHtml(input.since)}` : "";
|
|
21
|
+
const reason = input.reason ? `: ${escapeHtml(input.reason)}` : "";
|
|
22
|
+
return `<div class="stab deprecated api-stab api-stab-deprecated">👎 Deprecated${since}${reason}</div>`;
|
|
23
|
+
}
|
|
24
|
+
case "portability": {
|
|
25
|
+
const feature = input.featureName
|
|
26
|
+
? ` crate feature <code>${escapeHtml(input.featureName)}</code>`
|
|
27
|
+
: "";
|
|
28
|
+
return `<div class="stab portability api-stab api-stab-portability">Available on${feature} only.</div>`;
|
|
29
|
+
}
|
|
30
|
+
case "non_exhaustive":
|
|
31
|
+
return `<div class="stab api-stab api-stab-non-exhaustive">This is marked <code>#[non_exhaustive]</code>; new variants or fields may be added in future versions.</div>`;
|
|
32
|
+
case "must_use": {
|
|
33
|
+
const reason = input.reason ? `: ${escapeHtml(input.reason)}` : "";
|
|
34
|
+
return `<div class="stab api-stab api-stab-must-use"><code>#[must_use]</code>${reason}</div>`;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
export function apiItemInfoRow(input) {
|
|
39
|
+
const parts = [];
|
|
40
|
+
if (input.since) {
|
|
41
|
+
parts.push(`<span class="since api-since">${escapeHtml(input.since)}</span>`);
|
|
42
|
+
}
|
|
43
|
+
if (input.sourceHref) {
|
|
44
|
+
parts.push(`<a class="srclink api-srclink" href="${escapeAttr(input.sourceHref)}">${escapeHtml(input.sourceLabel ?? "Source")}</a>`);
|
|
45
|
+
}
|
|
46
|
+
if (parts.length === 0)
|
|
47
|
+
return "";
|
|
48
|
+
return `<div class="rightside api-rightside">${parts.join(" · ")}</div>`;
|
|
49
|
+
}
|
|
50
|
+
export function apiSymbolLink(input) {
|
|
51
|
+
const title = input.title ? ` title="${escapeAttr(input.title)}"` : "";
|
|
52
|
+
return `<a class="${escapeAttr(input.kind)} api-symbol-link"${title} href="${escapeAttr(input.href)}">${escapeHtml(input.text)}</a>`;
|
|
53
|
+
}
|
|
54
|
+
export function apiImplToggle(input) {
|
|
55
|
+
return apiToggle({
|
|
56
|
+
...input,
|
|
57
|
+
cssClass: "api-toggle api-impl-toggle",
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
function apiToggle(input) {
|
|
61
|
+
const openAttr = input.open === false ? "" : " open";
|
|
62
|
+
return `<details class="${escapeAttr(input.cssClass)}"${openAttr}><summary class="api-toggle-summary">${input.summary}</summary><div class="api-toggle-body">${input.body}</div></details>`;
|
|
63
|
+
}
|
|
64
|
+
export function apiSectionAnchor(input) {
|
|
65
|
+
const cls = input.className ? ` ${input.className}` : "";
|
|
66
|
+
return (`<h${input.level} id="${escapeAttr(input.id)}" class="section-header api-section-header${cls}">` +
|
|
67
|
+
`${escapeHtml(input.text)}` +
|
|
68
|
+
` <a class="anchor api-anchor" href="#${escapeAttr(input.id)}">§</a>` +
|
|
69
|
+
`</h${input.level}>`);
|
|
70
|
+
}
|
|
71
|
+
export function escapeHtml(value) {
|
|
72
|
+
return sharedEscapeHtml(value);
|
|
73
|
+
}
|
|
74
|
+
export function escapeAttr(value) {
|
|
75
|
+
return sharedEscapeAttr(value);
|
|
76
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doxygen-loader.d.ts","sourceRoot":"","sources":["../../src/core/doxygen-loader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAqB,qBAAqB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"doxygen-loader.d.ts","sourceRoot":"","sources":["../../src/core/doxygen-loader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAqB,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAO7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,EAA6B,MAAM,iBAAiB,CAAC;AAM1E,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACjC,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAMzF;AAED,wBAAgB,kCAAkC,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAoB9E;AAED,wBAAgB,+BAA+B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAOxE;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOhE;AAED,wBAAgB,gCAAgC,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAoBrE;AAED,wBAAsB,cAAc,CAClC,MAAM,EAAE,qBAAqB,EAC7B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,aAAa,CAAC,CA4GxB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { generate } from "moxygen";
|
|
2
|
-
import { renderMarkdown, extractHeadings, extractFirstParagraph, stripMarkdownLinks } from "../utils/markdown.js";
|
|
2
|
+
import { renderMarkdown, extractHeadings, extractFirstParagraph, stripMarkdownLinks, } from "../utils/markdown.js";
|
|
3
3
|
export function normalizeDoxygenDescription(description, markdown) {
|
|
4
4
|
if (!description)
|
|
5
5
|
return "";
|
|
@@ -35,9 +35,7 @@ export function rewriteGeneratedDoxygenHref(href) {
|
|
|
35
35
|
const [path, hash] = href.split("#", 2);
|
|
36
36
|
if (!path.startsWith("api_") || !path.endsWith(".md"))
|
|
37
37
|
return href;
|
|
38
|
-
const slug = path
|
|
39
|
-
.slice("api_".length, -".md".length)
|
|
40
|
-
.replace(/--/g, "-");
|
|
38
|
+
const slug = path.slice("api_".length, -".md".length).replace(/--/g, "-");
|
|
41
39
|
return `${slug}.html${hash ? `#${hash}` : ""}`;
|
|
42
40
|
}
|
|
43
41
|
export function rewriteGeneratedDoxygenHtmlLinks(html) {
|
|
@@ -56,12 +54,19 @@ export function rewriteGeneratedDoxygenHtmlLinks(html) {
|
|
|
56
54
|
});
|
|
57
55
|
}
|
|
58
56
|
export async function loadDoxygenTab(config, tabSlug, tabLabel) {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
57
|
+
let generated;
|
|
58
|
+
try {
|
|
59
|
+
generated = await generate({
|
|
60
|
+
directory: config.xml,
|
|
61
|
+
language: config.language,
|
|
62
|
+
sourceUrl: config.sourceUrl,
|
|
63
|
+
quiet: true,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
68
|
+
throw new Error(`Failed to load Doxygen XML from ${config.xml}: ${message}`);
|
|
69
|
+
}
|
|
65
70
|
const pages = new Map();
|
|
66
71
|
const groupMap = new Map();
|
|
67
72
|
for (const page of generated) {
|
|
@@ -200,7 +205,9 @@ function buildRichIndex(groupMap, pages) {
|
|
|
200
205
|
cards.push(`<a href="${href}" class="card-item">` +
|
|
201
206
|
`<div class="card-item-inner">` +
|
|
202
207
|
`<h3 class="card-item-title">${escHtml(page.title)}</h3>` +
|
|
203
|
-
(desc
|
|
208
|
+
(desc
|
|
209
|
+
? `<div class="card-item-content"><p>${escHtml(desc)}</p>${meta}</div>`
|
|
210
|
+
: `<div class="card-item-content">${meta}</div>`) +
|
|
204
211
|
`</div></a>`);
|
|
205
212
|
}
|
|
206
213
|
// Also include groups without a group page (orphan namespaces)
|
|
@@ -280,15 +287,25 @@ function lastSegment(name) {
|
|
|
280
287
|
return parts[parts.length - 1] || name;
|
|
281
288
|
}
|
|
282
289
|
function escHtml(s) {
|
|
283
|
-
return s
|
|
290
|
+
return s
|
|
291
|
+
.replace(/&/g, "&")
|
|
292
|
+
.replace(/</g, "<")
|
|
293
|
+
.replace(/>/g, ">")
|
|
294
|
+
.replace(/"/g, """);
|
|
284
295
|
}
|
|
285
296
|
function kindLabel(kind) {
|
|
286
297
|
switch (kind) {
|
|
287
|
-
case "class":
|
|
288
|
-
|
|
289
|
-
case "
|
|
290
|
-
|
|
291
|
-
case "
|
|
292
|
-
|
|
298
|
+
case "class":
|
|
299
|
+
return "Classes";
|
|
300
|
+
case "struct":
|
|
301
|
+
return "Structs";
|
|
302
|
+
case "enum":
|
|
303
|
+
return "Enums";
|
|
304
|
+
case "union":
|
|
305
|
+
return "Unions";
|
|
306
|
+
case "typedef":
|
|
307
|
+
return "Type Aliases";
|
|
308
|
+
default:
|
|
309
|
+
return kind.charAt(0).toUpperCase() + kind.slice(1) + "s";
|
|
293
310
|
}
|
|
294
311
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"godoc-loader.d.ts","sourceRoot":"","sources":["../../src/core/godoc-loader.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"godoc-loader.d.ts","sourceRoot":"","sources":["../../src/core/godoc-loader.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAaxD,OAAO,KAAK,EAAE,YAAY,EAAmB,MAAM,sBAAsB,CAAC;AAC1E,OAAO,KAAK,EAAE,OAAO,EAA6B,MAAM,iBAAiB,CAAC;AAE1E,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACjC,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,qBAAqB,EAAE,CAAC;CACtC;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,mBAAmB,EAC3B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,GAAE,sBAA2B,GACvC,OAAO,CAAC,iBAAiB,CAAC,CAG5B"}
|
|
@@ -2,7 +2,7 @@ import { readFile } from "node:fs/promises";
|
|
|
2
2
|
import { spawnSync } from "node:child_process";
|
|
3
3
|
import { GODOC_SCHEMA_VERSION } from "./godoc-types.js";
|
|
4
4
|
import { runIntrospector, GodocIntrospectorError } from "./godoc-introspector.js";
|
|
5
|
-
import { renderCodeBlock, renderMarkdown
|
|
5
|
+
import { renderCodeBlock, renderMarkdown } from "../utils/markdown.js";
|
|
6
6
|
/**
|
|
7
7
|
* Resolve a configured godoc tab into pre-rendered Sourcey pages plus a
|
|
8
8
|
* navigation tab. Honours `mode: "live" | "snapshot" | "auto"`:
|
|
@@ -32,7 +32,18 @@ async function loadSpec(config) {
|
|
|
32
32
|
return runIntrospector({ config });
|
|
33
33
|
}
|
|
34
34
|
if (config.snapshot) {
|
|
35
|
-
|
|
35
|
+
const spec = await loadSnapshot(config.snapshot, config.module);
|
|
36
|
+
return {
|
|
37
|
+
...spec,
|
|
38
|
+
diagnostics: [
|
|
39
|
+
{
|
|
40
|
+
severity: "info",
|
|
41
|
+
code: "GODOC_AUTO_FELL_BACK_TO_SNAPSHOT",
|
|
42
|
+
message: "godoc auto mode did not find Go on PATH and used the configured snapshot.",
|
|
43
|
+
},
|
|
44
|
+
...spec.diagnostics,
|
|
45
|
+
],
|
|
46
|
+
};
|
|
36
47
|
}
|
|
37
48
|
throw new GodocIntrospectorError("GO_NOT_FOUND", "godoc mode is 'auto' and Go is not on PATH. Install Go or set " +
|
|
38
49
|
"mode: 'snapshot' with a committed godoc.json.");
|
|
@@ -455,7 +466,9 @@ function sourceURL(position, sourceLinks) {
|
|
|
455
466
|
if (!position || !sourceLinks.repo || !sourceLinks.editBranch)
|
|
456
467
|
return undefined;
|
|
457
468
|
const repoBase = sourceLinks.repo.replace(/\/$/, "");
|
|
458
|
-
const basePath = sourceLinks.editBasePath
|
|
469
|
+
const basePath = sourceLinks.editBasePath
|
|
470
|
+
? `${sourceLinks.editBasePath.replace(/^\/|\/$/g, "")}/`
|
|
471
|
+
: "";
|
|
459
472
|
return `${repoBase}/blob/${sourceLinks.editBranch}/${basePath}${position.file}#L${position.line}`;
|
|
460
473
|
}
|
|
461
474
|
function renderExample(ex) {
|
|
@@ -472,9 +485,7 @@ function renderExample(ex) {
|
|
|
472
485
|
return parts.join("\n");
|
|
473
486
|
}
|
|
474
487
|
function humaniseSuffix(suffix) {
|
|
475
|
-
return suffix
|
|
476
|
-
.replace(/_/g, " ")
|
|
477
|
-
.replace(/\b\w/g, (c) => c.toUpperCase());
|
|
488
|
+
return suffix.replace(/_/g, " ").replace(/\b\w/g, (c) => c.toUpperCase());
|
|
478
489
|
}
|
|
479
490
|
function renderDoc(input) {
|
|
480
491
|
return renderMarkdown(input).trim();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown-loader.d.ts","sourceRoot":"","sources":["../../src/core/markdown-loader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"markdown-loader.d.ts","sourceRoot":"","sources":["../../src/core/markdown-loader.ts"],"names":[],"mappings":"AAOA,OAAO,EAOL,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAMtD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,UAAU,CAAC;IACjB,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,yBAAyB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,sEAAsE;IACtE,UAAU,EAAE,MAAM,CAAC;IACnB,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,8FAA8F;IAC9F,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,kFAAkF;IAClF,aAAa,CAAC,EAAE,eAAe,EAAE,CAAC;IAClC,0EAA0E;IAC1E,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,mBAAmB,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,iFAAiF;IACjF,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,MAAM,QAAQ,GAAG,YAAY,GAAG,aAAa,CAAC;AAEpD,YAAY,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAUxD,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,oBAAoB,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,oBAAoB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,yBAAyB,KAAK,MAAM,CAAC;AAonChG;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAK5F;AAED,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,QAAQ,CAAC,CAgCnB;AA+DD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAOrD"}
|
|
@@ -3,6 +3,7 @@ import { basename, extname, relative } from "node:path";
|
|
|
3
3
|
import { load as parseYaml } from "js-yaml";
|
|
4
4
|
import { normalizeChangelog } from "./changelog-normalizer.js";
|
|
5
5
|
import { htmlId } from "../utils/html-id.js";
|
|
6
|
+
import { escapeAttr, safeUrl } from "../utils/html.js";
|
|
6
7
|
import { renderIcon } from "../utils/icons.js";
|
|
7
8
|
import { renderCodeBlock, renderMarkdown, renderMarkdownInline, extractHeadings, extractFirstParagraph, stripMarkdownLinks, } from "../utils/markdown.js";
|
|
8
9
|
// ---------------------------------------------------------------------------
|
|
@@ -453,8 +454,9 @@ ${body}
|
|
|
453
454
|
const cols = node.attrs.cols || "2";
|
|
454
455
|
const cardHtml = cards
|
|
455
456
|
.map((card) => {
|
|
456
|
-
const
|
|
457
|
-
const
|
|
457
|
+
const safeHref = card.attrs.href ? safeUrl(card.attrs.href) : null;
|
|
458
|
+
const tag = safeHref ? "a" : "div";
|
|
459
|
+
const href = safeHref ? ` href="${escapeHtmlAttr(safeHref)}"` : "";
|
|
458
460
|
const iconHtml = renderIcon(card.attrs.icon || "");
|
|
459
461
|
const title = renderMarkdownInline(card.attrs.title || "").trim();
|
|
460
462
|
const body = renderComponentChildrenToHtml(card.children);
|
|
@@ -565,7 +567,7 @@ function escapeRegExp(value) {
|
|
|
565
567
|
return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
566
568
|
}
|
|
567
569
|
function escapeHtmlAttr(value) {
|
|
568
|
-
return value
|
|
570
|
+
return escapeAttr(value);
|
|
569
571
|
}
|
|
570
572
|
function stripDirectiveIndent(line) {
|
|
571
573
|
return line.replace(/^ {0,3}/, "");
|
|
@@ -824,8 +826,9 @@ ${body}
|
|
|
824
826
|
if (type === "card-group") {
|
|
825
827
|
const cols = parseAttrs(meta.match(/^\{([^}]*)\}$/)?.[1] ?? "").cols || "2";
|
|
826
828
|
const cards = splitChildren(content, "card").map((child) => {
|
|
827
|
-
const
|
|
828
|
-
const
|
|
829
|
+
const safeHref = child.attrs.href ? safeUrl(child.attrs.href) : null;
|
|
830
|
+
const tag = safeHref ? "a" : "div";
|
|
831
|
+
const href = safeHref ? ` href="${escapeHtmlAttr(safeHref)}"` : "";
|
|
829
832
|
const iconHtml = renderIcon(child.attrs.icon || "");
|
|
830
833
|
const title = renderMarkdownInline(child.attrs.title || "").trim();
|
|
831
834
|
const body = renderDirectiveMarkdown(child.body);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-normalizer.d.ts","sourceRoot":"","sources":["../../src/core/mcp-normalizer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"mcp-normalizer.d.ts","sourceRoot":"","sources":["../../src/core/mcp-normalizer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,OAAO,EAMR,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EACV,cAAc,EASf,MAAM,YAAY,CAAC;AAKpB,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,cAAc,CAwD9D"}
|