sourcey 3.4.0 → 3.4.3
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/dist/client/scroll-tracker.js +168 -156
- package/dist/client/search.js +186 -160
- package/dist/client/sidebar.js +56 -48
- package/dist/client/tabs.js +154 -146
- package/dist/components/layout/Head.d.ts.map +1 -1
- package/dist/components/layout/Head.js +4 -12
- package/dist/components/layout/Header.d.ts.map +1 -1
- package/dist/components/layout/Header.js +3 -3
- package/dist/components/layout/Page.d.ts.map +1 -1
- package/dist/components/layout/Page.js +9 -9
- package/dist/components/layout/Sidebar.d.ts.map +1 -1
- package/dist/components/layout/Sidebar.js +18 -14
- package/dist/components/layout/TableOfContents.d.ts.map +1 -1
- package/dist/components/layout/TableOfContents.js +2 -1
- package/dist/components/openapi/EndpointBar.js +5 -5
- package/dist/components/openapi/Introduction.js +1 -1
- package/dist/components/openapi/Responses.js +4 -4
- package/dist/components/openapi/Security.js +1 -1
- package/dist/components/ui/SectionLabel.js +1 -1
- package/dist/config.d.ts +8 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +7 -3
- package/dist/core/doxygen-loader.d.ts +1 -0
- package/dist/core/doxygen-loader.d.ts.map +1 -1
- package/dist/core/doxygen-loader.js +12 -3
- package/dist/core/markdown-loader.d.ts.map +1 -1
- package/dist/core/markdown-loader.js +46 -2
- package/dist/core/search-indexer.d.ts +3 -1
- package/dist/core/search-indexer.d.ts.map +1 -1
- package/dist/core/search-indexer.js +7 -3
- package/dist/dev-server.js +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -2
- package/dist/init.js +1 -1
- package/dist/renderer/html-builder.d.ts +2 -0
- package/dist/renderer/html-builder.d.ts.map +1 -1
- package/dist/renderer/html-builder.js +6 -0
- package/dist/renderer/llms.d.ts +6 -0
- package/dist/renderer/llms.d.ts.map +1 -0
- package/dist/renderer/llms.js +247 -0
- package/dist/themes/default/main.css +6 -3
- package/dist/themes/default/sourcey.css +92 -58
- package/dist/utils/icons.d.ts +4 -0
- package/dist/utils/icons.d.ts.map +1 -1
- package/dist/utils/icons.js +6 -0
- package/dist/utils/markdown.d.ts +10 -0
- package/dist/utils/markdown.d.ts.map +1 -1
- package/dist/utils/markdown.js +82 -6
- package/package.json +1 -1
|
@@ -4,11 +4,11 @@ import { jsx as _jsx, jsxs as _jsxs } from "preact/jsx-runtime";
|
|
|
4
4
|
* Displayed at the top of each operation.
|
|
5
5
|
*/
|
|
6
6
|
const METHOD_COLORS = {
|
|
7
|
-
get: "bg-green-
|
|
8
|
-
post: "bg-blue-
|
|
9
|
-
put: "bg-
|
|
10
|
-
delete: "bg-red-
|
|
11
|
-
patch: "bg-orange-
|
|
7
|
+
get: "bg-green-100 dark:bg-green-400/20 text-green-800 dark:text-green-300",
|
|
8
|
+
post: "bg-blue-100 dark:bg-blue-400/20 text-blue-800 dark:text-blue-300",
|
|
9
|
+
put: "bg-amber-100 dark:bg-yellow-400/20 text-amber-900 dark:text-yellow-300",
|
|
10
|
+
delete: "bg-red-100 dark:bg-red-400/20 text-red-800 dark:text-red-300",
|
|
11
|
+
patch: "bg-orange-100 dark:bg-orange-400/20 text-orange-900 dark:text-orange-300",
|
|
12
12
|
};
|
|
13
13
|
export function EndpointBar({ method, path, serverUrl }) {
|
|
14
14
|
const m = method.toLowerCase();
|
|
@@ -9,5 +9,5 @@ import { Markdown } from "../ui/Markdown.js";
|
|
|
9
9
|
export function Introduction() {
|
|
10
10
|
const spec = useContext(SpecContext);
|
|
11
11
|
const { info, servers } = spec;
|
|
12
|
-
return (_jsxs("div", { id: "introduction", "data-traverse-target": "introduction", class: "mb-8", children: [info.description && (_jsx(Markdown, { content: info.description, class: "max-w-none" })), info.termsOfService && (_jsx("p", { class: "mt-4 text-sm text-[rgb(var(--color-gray-500))]", children: _jsx("a", { href: info.termsOfService, class: "text-[rgb(var(--color-primary))] dark:text-[rgb(var(--color-primary-light))]", children: "Terms of Service" }) })), info.contact?.email && (_jsxs("p", { class: "mt-2 text-sm text-[rgb(var(--color-gray-500))]", children: ["Contact: ", _jsx("a", { href: `mailto:${info.contact.email}`, class: "text-[rgb(var(--color-primary))] dark:text-[rgb(var(--color-primary-light))]", children: info.contact.email })] })), servers.length > 0 && (_jsxs("div", { class: "mt-6 rounded-[var(--radius)] border border-[rgb(var(--color-gray-200)/0.7)] dark:border-[rgb(var(--color-border-dark-subtle)/0.1)] overflow-x-auto", children: [_jsxs("div", { class: "px-4 py-2.5 text-xs font-semibold text-[rgb(var(--color-gray-600))] dark:text-[rgb(var(--color-gray-300))] border-b border-[rgb(var(--color-gray-200)/0.7)] dark:border-[rgb(var(--color-border-dark-subtle)/0.1)]", children: ["Base URL", servers.length > 1 ? "s" : ""] }), servers.map((s, i) => (_jsxs("div", { class: `flex items-baseline gap-3 px-4 py-2 ${i > 0 ? "border-t border-[rgb(var(--color-gray-100))] dark:border-[rgb(var(--color-gray-800))]" : ""}`, children: [_jsx("code", { class: "font-mono text-sm text-[rgb(var(--color-gray-800))] dark:text-[rgb(var(--color-gray-200))]", children: s.url }), s.description && (_jsx("span", { class: "text-xs text-[rgb(var(--color-gray-500))]", children: s.description }))] }, i)))] }))] }));
|
|
12
|
+
return (_jsxs("div", { id: "introduction", "data-traverse-target": "introduction", class: "mb-8", children: [info.description && (_jsx(Markdown, { content: info.description, class: "max-w-none" })), info.termsOfService && (_jsx("p", { class: "mt-4 text-sm text-[rgb(var(--color-gray-500))]", children: _jsx("a", { href: info.termsOfService, class: "text-[rgb(var(--color-primary-ink))] dark:text-[rgb(var(--color-primary-light))]", children: "Terms of Service" }) })), info.contact?.email && (_jsxs("p", { class: "mt-2 text-sm text-[rgb(var(--color-gray-500))]", children: ["Contact: ", _jsx("a", { href: `mailto:${info.contact.email}`, class: "text-[rgb(var(--color-primary-ink))] dark:text-[rgb(var(--color-primary-light))]", children: info.contact.email })] })), servers.length > 0 && (_jsxs("div", { class: "mt-6 rounded-[var(--radius)] border border-[rgb(var(--color-gray-200)/0.7)] dark:border-[rgb(var(--color-border-dark-subtle)/0.1)] overflow-x-auto", children: [_jsxs("div", { class: "px-4 py-2.5 text-xs font-semibold text-[rgb(var(--color-gray-600))] dark:text-[rgb(var(--color-gray-300))] border-b border-[rgb(var(--color-gray-200)/0.7)] dark:border-[rgb(var(--color-border-dark-subtle)/0.1)]", children: ["Base URL", servers.length > 1 ? "s" : ""] }), servers.map((s, i) => (_jsxs("div", { class: `flex items-baseline gap-3 px-4 py-2 ${i > 0 ? "border-t border-[rgb(var(--color-gray-100))] dark:border-[rgb(var(--color-gray-800))]" : ""}`, children: [_jsx("code", { class: "font-mono text-sm text-[rgb(var(--color-gray-800))] dark:text-[rgb(var(--color-gray-200))]", children: s.url }), s.description && (_jsx("span", { class: "text-xs text-[rgb(var(--color-gray-500))]", children: s.description }))] }, i)))] }))] }));
|
|
13
13
|
}
|
|
@@ -8,13 +8,13 @@ import { generateExample } from "../../utils/example-generator.js";
|
|
|
8
8
|
import { highlightCode } from "../../utils/highlighter.js";
|
|
9
9
|
function statusColorClass(code) {
|
|
10
10
|
if (code.startsWith("2"))
|
|
11
|
-
return "bg-green-
|
|
11
|
+
return "bg-green-100 text-green-800 dark:bg-green-400/20 dark:text-green-300";
|
|
12
12
|
if (code.startsWith("3"))
|
|
13
|
-
return "bg-blue-
|
|
13
|
+
return "bg-blue-100 text-blue-800 dark:bg-blue-400/20 dark:text-blue-300";
|
|
14
14
|
if (code.startsWith("4"))
|
|
15
|
-
return "bg-
|
|
15
|
+
return "bg-amber-100 text-amber-900 dark:bg-yellow-400/20 dark:text-yellow-300";
|
|
16
16
|
if (code.startsWith("5"))
|
|
17
|
-
return "bg-red-
|
|
17
|
+
return "bg-red-100 text-red-800 dark:bg-red-400/20 dark:text-red-300";
|
|
18
18
|
return "bg-gray-400/20 text-gray-700 dark:text-gray-400";
|
|
19
19
|
}
|
|
20
20
|
/**
|
|
@@ -28,5 +28,5 @@ export function SecurityDefinitions() {
|
|
|
28
28
|
return null;
|
|
29
29
|
return (_jsxs("div", { id: "authentication", class: "py-8 border-t border-[rgb(var(--color-gray-100))] dark:border-[rgb(var(--color-gray-800))]", "data-traverse-target": "authentication", children: [_jsx("h2", { class: "text-xl font-bold text-[rgb(var(--color-gray-900))] dark:text-[rgb(var(--color-gray-200))] mb-4", children: "Authentication" }), _jsx("div", { class: "params-list", children: schemes.map(([name, scheme]) => (_jsxs("div", { class: "param-item", children: [_jsxs("div", { class: "param-header", children: [_jsx("code", { class: "param-name", children: name }), _jsx("span", { class: "param-type", children: _jsx("span", { class: "json-property-type", children: scheme.type }) })] }), _jsxs("div", { class: "param-description", children: [scheme.description && _jsx(Markdown, { content: scheme.description }), scheme.type === "apiKey" && (_jsxs("p", { class: "mt-1", children: ["API Key: ", _jsx("code", { class: "text-xs font-medium", children: scheme.name }), " in ", scheme.in] })), scheme.type === "http" && (_jsxs("p", { class: "mt-1", children: ["Scheme: ", scheme.scheme, scheme.bearerFormat && ` (${scheme.bearerFormat})`] })), scheme.type === "oauth2" && scheme.flows && (_jsx("div", { class: "mt-2 space-y-2", children: Object.entries(scheme.flows).map(([flowType, flow]) => (_jsxs("div", { children: [_jsx("strong", { class: "text-[rgb(var(--color-gray-900))] dark:text-[rgb(var(--color-gray-200))]", children: flowType }), flow?.authorizationUrl && (_jsxs("p", { class: "mt-1", children: ["Authorization: ", _jsx("code", { class: "text-xs", children: flow.authorizationUrl })] })), flow?.tokenUrl && (_jsxs("p", { class: "mt-1", children: ["Token: ", _jsx("code", { class: "text-xs", children: flow.tokenUrl })] })), flow?.scopes && Object.keys(flow.scopes).length > 0 && (_jsxs("p", { class: "mt-1", children: ["Scopes:", " ", Object.entries(flow.scopes)
|
|
30
30
|
.map(([s, desc]) => `${s} — ${desc}`)
|
|
31
|
-
.join(", ")] }))] }, flowType))) })), scheme.type === "openIdConnect" && scheme.openIdConnectUrl && (_jsxs("p", { class: "mt-1", children: ["OpenID Connect:", " ", _jsx("a", { href: scheme.openIdConnectUrl, class: "text-[rgb(var(--color-primary))] dark:text-[rgb(var(--color-primary-light))]", children: scheme.openIdConnectUrl })] }))] })] }, name))) })] }));
|
|
31
|
+
.join(", ")] }))] }, flowType))) })), scheme.type === "openIdConnect" && scheme.openIdConnectUrl && (_jsxs("p", { class: "mt-1", children: ["OpenID Connect:", " ", _jsx("a", { href: scheme.openIdConnectUrl, class: "text-[rgb(var(--color-primary-ink))] dark:text-[rgb(var(--color-primary-light))]", children: scheme.openIdConnectUrl })] }))] })] }, name))) })] }));
|
|
32
32
|
}
|
|
@@ -4,5 +4,5 @@ import { jsx as _jsx, jsxs as _jsxs } from "preact/jsx-runtime";
|
|
|
4
4
|
* Used for "Body", "Parameters", "Response" sections.
|
|
5
5
|
*/
|
|
6
6
|
export function SectionLabel({ children, meta }) {
|
|
7
|
-
return (_jsxs("div", { class: "flex items-baseline border-b pb-2.5 border-[rgb(var(--color-gray-100))] dark:border-[rgb(var(--color-gray-800))] w-full mb-4", children: [_jsx("
|
|
7
|
+
return (_jsxs("div", { class: "flex items-baseline border-b pb-2.5 border-[rgb(var(--color-gray-100))] dark:border-[rgb(var(--color-gray-800))] w-full mb-4", children: [_jsx("h3", { class: "flex-1 mb-0 text-sm font-semibold text-[rgb(var(--color-gray-900))] dark:text-[rgb(var(--color-gray-200))]", children: children }), meta && (_jsx("div", { class: "flex items-center gap-2 text-xs font-medium font-mono text-[rgb(var(--color-gray-500))]", children: meta }))] }));
|
|
8
8
|
}
|
package/dist/config.d.ts
CHANGED
|
@@ -52,6 +52,11 @@ export interface SourceyConfig {
|
|
|
52
52
|
footer?: {
|
|
53
53
|
links?: NavbarLink[];
|
|
54
54
|
};
|
|
55
|
+
/** Search configuration. */
|
|
56
|
+
search?: {
|
|
57
|
+
/** Page slugs to feature at the top of search results when no query is entered. */
|
|
58
|
+
featured?: string[];
|
|
59
|
+
};
|
|
55
60
|
}
|
|
56
61
|
export type DoxygenIndexStyle = "auto" | "rich" | "structured" | "flat" | "none";
|
|
57
62
|
export interface DoxygenConfig {
|
|
@@ -135,6 +140,9 @@ export interface ResolvedConfig {
|
|
|
135
140
|
footer: {
|
|
136
141
|
links: NavbarLink[];
|
|
137
142
|
};
|
|
143
|
+
search: {
|
|
144
|
+
featured: string[];
|
|
145
|
+
};
|
|
138
146
|
}
|
|
139
147
|
export interface ResolvedDoxygenConfig {
|
|
140
148
|
xml: string;
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC;AAE9D,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,MAAM,CAAC,EAAE;QACP,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,KAAK,CAAC,EAAE;QACN,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,MAAM,CAAC,EAAE;QACP,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,GAAG;QACd,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sHAAsH;IACtH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iJAAiJ;IACjJ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,EAAE;QACV,IAAI,EAAE,SAAS,EAAE,CAAC;KACnB,CAAC;IACF,MAAM,CAAC,EAAE;QACP,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;QACrB,OAAO,CAAC,EAAE;YAAE,IAAI,EAAE,QAAQ,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC;KAC3D,CAAC;IACF,MAAM,CAAC,EAAE;QACP,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;KACtB,CAAC;IACF,4BAA4B;IAC5B,MAAM,CAAC,EAAE;QACP,mFAAmF;QACnF,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;CACH;AAED,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,MAAM,GAAG,YAAY,GAAG,MAAM,GAAG,MAAM,CAAC;AAEjF,MAAM,WAAW,aAAa;IAC5B,2CAA2C;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,iBAAiB,GAAG,KAAK,CAAC;CACnC;AAED,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,oEAAoE;IACpE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,sDAAsD;IACtD,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;AAEhJ,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa,CAEjE;AAMD,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACzD,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACtC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1D,GAAG,EAAE,MAAM,EAAE,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,aAAa,CAAC;IACrB,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACxD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,IAAI,EAAE,WAAW,EAAE,CAAC;IACpB,MAAM,EAAE;QAAE,KAAK,EAAE,UAAU,EAAE,CAAC;QAAC,OAAO,CAAC,EAAE;YAAE,IAAI,EAAE,QAAQ,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC;IAC3F,MAAM,EAAE;QAAE,KAAK,EAAE,UAAU,EAAE,CAAA;KAAE,CAAC;IAChC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CAChC;AAED,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,iBAAiB,CAAC;CAC1B;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;IACzB,OAAO,CAAC,EAAE,qBAAqB,CAAC;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB;AAuBD,wBAAsB,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAwBtE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CAiB/D;AAMD,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CA0BzG;AA6KD,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED,wEAAwE;AACxE,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAO5C"}
|
package/dist/config.js
CHANGED
|
@@ -13,8 +13,8 @@ const DEFAULT_COLORS = {
|
|
|
13
13
|
dark: "79 70 229",
|
|
14
14
|
};
|
|
15
15
|
const DEFAULT_FONTS = {
|
|
16
|
-
sans: "
|
|
17
|
-
mono: "
|
|
16
|
+
sans: "ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif",
|
|
17
|
+
mono: "ui-monospace, 'SF Mono', 'Cascadia Code', Consolas, 'Liberation Mono', Menlo, monospace",
|
|
18
18
|
};
|
|
19
19
|
const DEFAULT_LAYOUT = {
|
|
20
20
|
sidebar: "18rem",
|
|
@@ -59,6 +59,7 @@ export function configFromSpec(specPath) {
|
|
|
59
59
|
tabs: [{ label: "API Reference", slug: "api", openapi: absSpec }],
|
|
60
60
|
navbar: { links: [] },
|
|
61
61
|
footer: { links: [] },
|
|
62
|
+
search: { featured: [] },
|
|
62
63
|
};
|
|
63
64
|
}
|
|
64
65
|
// ---------------------------------------------------------------------------
|
|
@@ -72,7 +73,7 @@ export async function resolveConfigFromRaw(raw, configDir) {
|
|
|
72
73
|
name: raw.name ?? "",
|
|
73
74
|
theme,
|
|
74
75
|
logo,
|
|
75
|
-
favicon: raw.favicon,
|
|
76
|
+
favicon: raw.favicon && !raw.favicon.startsWith("http") && !raw.favicon.startsWith("data:") ? resolve(configDir, raw.favicon) : raw.favicon,
|
|
76
77
|
repo: raw.repo,
|
|
77
78
|
editBranch: raw.editBranch,
|
|
78
79
|
editBasePath: raw.editBasePath,
|
|
@@ -85,6 +86,9 @@ export async function resolveConfigFromRaw(raw, configDir) {
|
|
|
85
86
|
footer: {
|
|
86
87
|
links: raw.footer?.links ?? [],
|
|
87
88
|
},
|
|
89
|
+
search: {
|
|
90
|
+
featured: raw.search?.featured ?? [],
|
|
91
|
+
},
|
|
88
92
|
};
|
|
89
93
|
}
|
|
90
94
|
const VALID_PRESETS = ["default", "minimal", "api-first"];
|
|
@@ -5,5 +5,6 @@ export interface DoxygenResult {
|
|
|
5
5
|
pages: Map<string, MarkdownPage>;
|
|
6
6
|
navTab: SiteTab;
|
|
7
7
|
}
|
|
8
|
+
export declare function normalizeDoxygenDescription(description: string, markdown: string): string;
|
|
8
9
|
export declare function loadDoxygenTab(config: ResolvedDoxygenConfig, tabSlug: string, tabLabel: string): Promise<DoxygenResult>;
|
|
9
10
|
//# sourceMappingURL=doxygen-loader.d.ts.map
|
|
@@ -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;AAE7E,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,wBAAsB,cAAc,CAClC,MAAM,EAAE,qBAAqB,EAC7B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,aAAa,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;AAE7E,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,wBAAsB,cAAc,CAClC,MAAM,EAAE,qBAAqB,EAC7B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,aAAa,CAAC,CA6FxB"}
|
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
import { generate } from "moxygen";
|
|
2
|
-
import { renderMarkdown, extractHeadings } from "../utils/markdown.js";
|
|
2
|
+
import { renderMarkdown, extractHeadings, extractFirstParagraph, stripMarkdownLinks } from "../utils/markdown.js";
|
|
3
|
+
export function normalizeDoxygenDescription(description, markdown) {
|
|
4
|
+
if (!description)
|
|
5
|
+
return "";
|
|
6
|
+
if (!description.includes("{#ref "))
|
|
7
|
+
return description;
|
|
8
|
+
const firstParagraph = extractFirstParagraph(markdown);
|
|
9
|
+
return firstParagraph || description;
|
|
10
|
+
}
|
|
3
11
|
export async function loadDoxygenTab(config, tabSlug, tabLabel) {
|
|
4
12
|
const generated = await generate({
|
|
5
13
|
directory: config.xml,
|
|
@@ -11,11 +19,12 @@ export async function loadDoxygenTab(config, tabSlug, tabLabel) {
|
|
|
11
19
|
for (const page of generated) {
|
|
12
20
|
if (!page.markdown.trim())
|
|
13
21
|
continue;
|
|
22
|
+
const description = normalizeDoxygenDescription(page.description, page.markdown);
|
|
14
23
|
const html = renderMarkdown(page.markdown);
|
|
15
24
|
const headings = extractHeadings(page.markdown);
|
|
16
25
|
pages.set(page.slug, {
|
|
17
26
|
title: page.title,
|
|
18
|
-
description
|
|
27
|
+
description,
|
|
19
28
|
slug: page.slug,
|
|
20
29
|
html,
|
|
21
30
|
headings,
|
|
@@ -130,7 +139,7 @@ function buildRichIndex(groupMap, pages) {
|
|
|
130
139
|
continue;
|
|
131
140
|
const typeCount = items.filter((i) => i.kind !== "group" && i.kind !== "namespace").length;
|
|
132
141
|
const href = `${groupEntry.slug}.html`;
|
|
133
|
-
const desc = page.description || "";
|
|
142
|
+
const desc = stripMarkdownLinks(page.description || "");
|
|
134
143
|
const meta = typeCount > 0
|
|
135
144
|
? `<p style="margin:0.5rem 0 0;font-size:0.8rem;opacity:0.5">${typeCount} type${typeCount !== 1 ? "s" : ""}</p>`
|
|
136
145
|
: "";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown-loader.d.ts","sourceRoot":"","sources":["../../src/core/markdown-loader.ts"],"names":[],"mappings":"AAKA,OAAO,EAAmC,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAMzF,MAAM,WAAW,YAAY;IAC3B,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;CACpB;AAED,YAAY,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"markdown-loader.d.ts","sourceRoot":"","sources":["../../src/core/markdown-loader.ts"],"names":[],"mappings":"AAKA,OAAO,EAAmC,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAMzF,MAAM,WAAW,YAAY;IAC3B,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;CACpB;AAED,YAAY,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAwXxD;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,YAAY,CAAC,CAmBvB;AAUD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAIrD"}
|
|
@@ -56,6 +56,45 @@ function preprocessComponents(body) {
|
|
|
56
56
|
html = html.replace(/<Accordion\s+title="([^"]*)">\s*([\s\S]*?)\s*<\/Accordion>/g, (_m, title, content) => {
|
|
57
57
|
return `:::accordion{title="${title}"}\n${content.trim()}\n:::`;
|
|
58
58
|
});
|
|
59
|
+
// <Tabs> <Tab title="...">content</Tab> ... </Tabs> → :::tabs with ::tab children
|
|
60
|
+
html = html.replace(/<Tabs>\s*([\s\S]*?)\s*<\/Tabs>/g, (_m, inner) => {
|
|
61
|
+
const tabs = [];
|
|
62
|
+
inner.replace(/\s*<Tab\s+title="([^"]*)">\s*([\s\S]*?)\s*<\/Tab>/g, (_tm, title, content) => {
|
|
63
|
+
tabs.push(`::tab{title="${title}"}\n${content.trim()}\n::`);
|
|
64
|
+
return "";
|
|
65
|
+
});
|
|
66
|
+
return `:::tabs\n${tabs.join("\n")}\n:::`;
|
|
67
|
+
});
|
|
68
|
+
// <CodeGroup> with titled fenced code blocks → :::code-group
|
|
69
|
+
html = html.replace(/<CodeGroup>\s*([\s\S]*?)\s*<\/CodeGroup>/g, (_m, inner) => `:::code-group\n${inner.trim()}\n:::`);
|
|
70
|
+
// <Note>, <Warning>, <Tip>, <Info> → :::callout directives
|
|
71
|
+
for (const type of ["note", "warning", "tip", "info"]) {
|
|
72
|
+
const tag = type.charAt(0).toUpperCase() + type.slice(1);
|
|
73
|
+
html = html.replace(new RegExp(`<${tag}(?:\\s+title="([^"]*)")?\\s*>\\s*([\\s\\S]*?)\\s*<\\/${tag}>`, "g"), (_m, title, content) => {
|
|
74
|
+
const titleSuffix = title ? ` ${title}` : "";
|
|
75
|
+
return `:::${type}${titleSuffix}\n${content.trim()}\n:::`;
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
// <Video src="..." title="..." /> → ::video[url]{title="..."}
|
|
79
|
+
html = html.replace(/<Video\s+([^>]*?)\s*\/?\s*>/g, (_m, attrs) => {
|
|
80
|
+
const src = attrs.match(/src="([^"]*)"/)?.[1] ?? "";
|
|
81
|
+
const title = attrs.match(/title="([^"]*)"/)?.[1];
|
|
82
|
+
const titleAttr = title ? `{title="${title}"}` : "";
|
|
83
|
+
return `::video[${src}]${titleAttr}`;
|
|
84
|
+
});
|
|
85
|
+
// <Iframe src="..." title="..." height="..." /> → ::iframe[url]{attrs}
|
|
86
|
+
html = html.replace(/<Iframe\s+([^>]*?)\s*\/?\s*>/g, (_m, attrs) => {
|
|
87
|
+
const src = attrs.match(/src="([^"]*)"/)?.[1] ?? "";
|
|
88
|
+
const title = attrs.match(/title="([^"]*)"/)?.[1];
|
|
89
|
+
const height = attrs.match(/height="([^"]*)"/)?.[1];
|
|
90
|
+
const parts = [];
|
|
91
|
+
if (title)
|
|
92
|
+
parts.push(`title="${title}"`);
|
|
93
|
+
if (height)
|
|
94
|
+
parts.push(`height="${height}"`);
|
|
95
|
+
const attrStr = parts.length ? `{${parts.join(" ")}}` : "";
|
|
96
|
+
return `::iframe[${src}]${attrStr}`;
|
|
97
|
+
});
|
|
59
98
|
return html;
|
|
60
99
|
}
|
|
61
100
|
// ---------------------------------------------------------------------------
|
|
@@ -220,8 +259,13 @@ ${content.trim()}
|
|
|
220
259
|
</div>
|
|
221
260
|
</details>\n\n`;
|
|
222
261
|
});
|
|
223
|
-
// Auto-wrap consecutive accordion items in an accordion-group
|
|
224
|
-
html = html.replace(/(<details class="accordion-item">[\s\S]*?<\/details>\s*){2,}/g, (match) =>
|
|
262
|
+
// Auto-wrap consecutive accordion items in an accordion-group (skip already-wrapped)
|
|
263
|
+
html = html.replace(/(<details class="accordion-item">[\s\S]*?<\/details>\s*){2,}/g, (match, _p1, offset) => {
|
|
264
|
+
const before = html.slice(Math.max(0, offset - 40), offset);
|
|
265
|
+
if (before.includes("accordion-group"))
|
|
266
|
+
return match;
|
|
267
|
+
return `<div class="accordion-group not-prose">\n${match.trim()}\n</div>`;
|
|
268
|
+
});
|
|
225
269
|
return html;
|
|
226
270
|
}
|
|
227
271
|
// ---------------------------------------------------------------------------
|
|
@@ -16,10 +16,12 @@ export interface SearchEntry {
|
|
|
16
16
|
tab: string;
|
|
17
17
|
/** Category for grouping results */
|
|
18
18
|
category: string;
|
|
19
|
+
/** Featured in default search results */
|
|
20
|
+
featured?: boolean;
|
|
19
21
|
}
|
|
20
22
|
/**
|
|
21
23
|
* Build a search index from specs and markdown pages.
|
|
22
24
|
* Returns a JSON string ready to write to disk.
|
|
23
25
|
*/
|
|
24
|
-
export declare function buildSearchIndex(specs: Map<string, NormalizedSpec>, pages: Map<string, MarkdownPage[]>, navigation: SiteNavigation, assetBase?: string): string;
|
|
26
|
+
export declare function buildSearchIndex(specs: Map<string, NormalizedSpec>, pages: Map<string, MarkdownPage[]>, navigation: SiteNavigation, assetBase?: string, featuredSlugs?: string[]): string;
|
|
25
27
|
//# sourceMappingURL=search-indexer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-indexer.d.ts","sourceRoot":"","sources":["../../src/core/search-indexer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAOtD,MAAM,WAAW,WAAW;IAC1B,oBAAoB;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,gDAAgD;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,GAAG,EAAE,MAAM,CAAC;IACZ,qCAAqC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8BAA8B;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gCAAgC;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,oCAAoC;IACpC,QAAQ,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"search-indexer.d.ts","sourceRoot":"","sources":["../../src/core/search-indexer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAOtD,MAAM,WAAW,WAAW;IAC1B,oBAAoB;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,gDAAgD;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,GAAG,EAAE,MAAM,CAAC;IACZ,qCAAqC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8BAA8B;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gCAAgC;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,oCAAoC;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAMD;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,EAClC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,EAClC,UAAU,EAAE,cAAc,EAC1B,SAAS,SAAM,EACf,aAAa,GAAE,MAAM,EAAO,GAC3B,MAAM,CAoER"}
|
|
@@ -6,8 +6,9 @@ import { htmlId } from "../utils/html-id.js";
|
|
|
6
6
|
* Build a search index from specs and markdown pages.
|
|
7
7
|
* Returns a JSON string ready to write to disk.
|
|
8
8
|
*/
|
|
9
|
-
export function buildSearchIndex(specs, pages, navigation, assetBase = "/") {
|
|
9
|
+
export function buildSearchIndex(specs, pages, navigation, assetBase = "/", featuredSlugs = []) {
|
|
10
10
|
const base = assetBase.endsWith("/") ? assetBase : assetBase + "/";
|
|
11
|
+
const featuredSet = new Set(featuredSlugs);
|
|
11
12
|
const entries = [];
|
|
12
13
|
// Index OpenAPI specs
|
|
13
14
|
for (const [tabSlug, spec] of specs) {
|
|
@@ -43,19 +44,22 @@ export function buildSearchIndex(specs, pages, navigation, assetBase = "/") {
|
|
|
43
44
|
const tabLabel = tab?.label ?? tabSlug;
|
|
44
45
|
for (const page of tabPages) {
|
|
45
46
|
// Page itself
|
|
47
|
+
const pageBase = tabSlug ? `${base}${tabSlug}/` : base;
|
|
48
|
+
const isFeatured = featuredSet.has(page.slug);
|
|
46
49
|
entries.push({
|
|
47
50
|
title: page.title,
|
|
48
51
|
content: page.description || stripHtml(page.html).slice(0, 200),
|
|
49
|
-
url: `${
|
|
52
|
+
url: `${pageBase}${page.slug}.html`,
|
|
50
53
|
tab: tabLabel,
|
|
51
54
|
category: "Pages",
|
|
55
|
+
...(isFeatured && { featured: true }),
|
|
52
56
|
});
|
|
53
57
|
// Headings within page
|
|
54
58
|
for (const heading of page.headings) {
|
|
55
59
|
entries.push({
|
|
56
60
|
title: heading.text,
|
|
57
61
|
content: `${page.title} — ${heading.text}`,
|
|
58
|
-
url: `${
|
|
62
|
+
url: `${pageBase}${page.slug}.html#${heading.id}`,
|
|
59
63
|
tab: tabLabel,
|
|
60
64
|
category: "Sections",
|
|
61
65
|
});
|
package/dist/dev-server.js
CHANGED
|
@@ -286,7 +286,7 @@ export async function startDevServer(options) {
|
|
|
286
286
|
markdownPagesByTab.set(tab.slug, tabPages);
|
|
287
287
|
}
|
|
288
288
|
}
|
|
289
|
-
return buildSearchIndex(specsBySlug, markdownPagesByTab, navigation);
|
|
289
|
+
return buildSearchIndex(specsBySlug, markdownPagesByTab, navigation, "/", config.search.featured);
|
|
290
290
|
}
|
|
291
291
|
const viteConfig = {
|
|
292
292
|
root: process.cwd(),
|
|
@@ -439,7 +439,7 @@ async function buildSiteConfig(config) {
|
|
|
439
439
|
name: config.name,
|
|
440
440
|
theme: config.theme,
|
|
441
441
|
logo: logo?.light ? logo : undefined,
|
|
442
|
-
favicon: config.favicon,
|
|
442
|
+
favicon: config.favicon ? await resolveAssetUrl(config.favicon) : undefined,
|
|
443
443
|
repo: config.repo,
|
|
444
444
|
editBranch: config.editBranch,
|
|
445
445
|
editBasePath: config.editBasePath,
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD,OAAO,KAAK,EAAE,cAAc,EAAe,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD,OAAO,KAAK,EAAE,cAAc,EAAe,MAAM,aAAa,CAAC;AAe/D,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,cAAc,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAY3E;AAMD,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,MAAM,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CACtC;AAED,wBAAsB,aAAa,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC,CAoH5F;AAgKD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,YAAY,EACV,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,iBAAiB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -12,6 +12,7 @@ import { loadMarkdownPage, slugFromPath } from "./core/markdown-loader.js";
|
|
|
12
12
|
import { loadDoxygenTab } from "./core/doxygen-loader.js";
|
|
13
13
|
import { buildNavFromSpec, buildNavFromPages, buildSiteNavigation } from "./core/navigation.js";
|
|
14
14
|
import { buildSearchIndex } from "./core/search-indexer.js";
|
|
15
|
+
import { generateLlmsTxt, generateLlmsFullTxt } from "./renderer/llms.js";
|
|
15
16
|
/**
|
|
16
17
|
* Build API documentation from a single OpenAPI/Swagger spec.
|
|
17
18
|
* Wraps the spec in a single-tab site and renders through the modern layout.
|
|
@@ -117,10 +118,14 @@ export async function buildSiteDocs(options = {}) {
|
|
|
117
118
|
markdownPagesByTab.set(tab.slug, tabPages);
|
|
118
119
|
}
|
|
119
120
|
}
|
|
120
|
-
const searchIndex = buildSearchIndex(specsBySlug, markdownPagesByTab, navigation);
|
|
121
|
+
const searchIndex = buildSearchIndex(specsBySlug, markdownPagesByTab, navigation, "/", config.search.featured);
|
|
122
|
+
const llmsTxt = generateLlmsTxt(sitePages, navigation, site);
|
|
123
|
+
const llmsFullTxt = generateLlmsFullTxt(sitePages, navigation, site);
|
|
121
124
|
if (!options.skipWrite) {
|
|
122
125
|
await buildSiteHtml(sitePages, navigation, outputDir, site, {
|
|
123
126
|
searchIndex,
|
|
127
|
+
llmsTxt,
|
|
128
|
+
llmsFullTxt,
|
|
124
129
|
embeddable: options.embeddable,
|
|
125
130
|
});
|
|
126
131
|
}
|
|
@@ -153,7 +158,7 @@ async function buildSiteConfig(config) {
|
|
|
153
158
|
name: config.name,
|
|
154
159
|
theme: config.theme,
|
|
155
160
|
logo: logo?.light ? logo : undefined,
|
|
156
|
-
favicon: config.favicon,
|
|
161
|
+
favicon: config.favicon ? await resolveAssetUrl(config.favicon) : undefined,
|
|
157
162
|
repo: config.repo,
|
|
158
163
|
editBranch: config.editBranch,
|
|
159
164
|
editBasePath: config.editBasePath,
|
package/dist/init.js
CHANGED
|
@@ -18,5 +18,7 @@ export interface SitePage {
|
|
|
18
18
|
export declare function buildSite(pages: SitePage[], navigation: SiteNavigation, outputDir: string, site: SiteConfig, options?: {
|
|
19
19
|
embeddable?: boolean;
|
|
20
20
|
searchIndex?: string;
|
|
21
|
+
llmsTxt?: string;
|
|
22
|
+
llmsFullTxt?: string;
|
|
21
23
|
}): Promise<BuildOutput>;
|
|
22
24
|
//# sourceMappingURL=html-builder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html-builder.d.ts","sourceRoot":"","sources":["../../src/renderer/html-builder.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAiB,WAAW,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC3E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AA0B5D,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,QAAQ;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,WAAW,CAAC;IACzB,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,KAAK,EAAE,QAAQ,EAAE,EACjB,UAAU,EAAE,cAAc,EAC1B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,UAAU,EAChB,OAAO,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"html-builder.d.ts","sourceRoot":"","sources":["../../src/renderer/html-builder.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAiB,WAAW,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC3E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AA0B5D,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,QAAQ;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,WAAW,CAAC;IACzB,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,KAAK,EAAE,QAAQ,EAAE,EACjB,UAAU,EAAE,cAAc,EAC1B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,UAAU,EAChB,OAAO,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/F,OAAO,CAAC,WAAW,CAAC,CAsDtB"}
|
|
@@ -60,6 +60,12 @@ export async function buildSite(pages, navigation, outputDir, site, options) {
|
|
|
60
60
|
if (options?.searchIndex) {
|
|
61
61
|
await writeFile(resolve(resolvedDir, "search-index.json"), options.searchIndex, "utf-8");
|
|
62
62
|
}
|
|
63
|
+
if (options?.llmsTxt) {
|
|
64
|
+
await writeFile(resolve(resolvedDir, "llms.txt"), options.llmsTxt, "utf-8");
|
|
65
|
+
}
|
|
66
|
+
if (options?.llmsFullTxt) {
|
|
67
|
+
await writeFile(resolve(resolvedDir, "llms-full.txt"), options.llmsFullTxt, "utf-8");
|
|
68
|
+
}
|
|
63
69
|
const urls = pages.map(p => ` <url><loc>${p.outputPath}</loc></url>`);
|
|
64
70
|
const sitemap = [
|
|
65
71
|
`<?xml version="1.0" encoding="UTF-8"?>`,
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { SiteNavigation } from "../core/navigation.js";
|
|
2
|
+
import type { SiteConfig } from "./context.js";
|
|
3
|
+
import type { SitePage } from "./html-builder.js";
|
|
4
|
+
export declare function generateLlmsTxt(pages: SitePage[], navigation: SiteNavigation, site: SiteConfig): string;
|
|
5
|
+
export declare function generateLlmsFullTxt(pages: SitePage[], navigation: SiteNavigation, site: SiteConfig): string;
|
|
6
|
+
//# sourceMappingURL=llms.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llms.d.ts","sourceRoot":"","sources":["../../src/renderer/llms.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD,wBAAgB,eAAe,CAC7B,KAAK,EAAE,QAAQ,EAAE,EACjB,UAAU,EAAE,cAAc,EAC1B,IAAI,EAAE,UAAU,GACf,MAAM,CA4CR;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,QAAQ,EAAE,EACjB,UAAU,EAAE,cAAc,EAC1B,IAAI,EAAE,UAAU,GACf,MAAM,CA8BR"}
|