sourcey 3.5.10 → 3.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -96
- package/dist/adapters/index.d.ts +11 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +98 -0
- package/dist/adapters/mkdocs.d.ts +5 -0
- package/dist/adapters/mkdocs.d.ts.map +1 -0
- package/dist/adapters/mkdocs.js +367 -0
- package/dist/adapters/shared.d.ts +12 -0
- package/dist/adapters/shared.d.ts.map +1 -0
- package/dist/adapters/shared.js +134 -0
- package/dist/adapters/types.d.ts +68 -0
- package/dist/adapters/types.d.ts.map +1 -0
- package/dist/adapters/types.js +1 -0
- package/dist/client/search.js +77 -8
- package/dist/components/layout/Head.js +16 -3
- package/dist/components/layout/TableOfContents.d.ts.map +1 -1
- package/dist/components/layout/TableOfContents.js +4 -2
- package/dist/config.d.ts +38 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +79 -141
- package/dist/core/doxygen-loader.d.ts.map +1 -1
- package/dist/core/doxygen-loader.js +2 -0
- package/dist/core/markdown-loader.d.ts +14 -0
- package/dist/core/markdown-loader.d.ts.map +1 -1
- package/dist/core/markdown-loader.js +63 -22
- package/dist/core/navigation.d.ts.map +1 -1
- package/dist/core/navigation.js +8 -7
- package/dist/core/search-indexer.d.ts +10 -0
- package/dist/core/search-indexer.d.ts.map +1 -1
- package/dist/core/search-indexer.js +5 -0
- package/dist/dev-server.d.ts.map +1 -1
- package/dist/dev-server.js +60 -33
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -2
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +19 -14
- package/dist/site-assembly.d.ts.map +1 -1
- package/dist/site-assembly.js +107 -25
- package/dist/utils/markdown.d.ts.map +1 -1
- package/dist/utils/markdown.js +15 -4
- package/dist/vite-plugin.d.ts +2 -0
- package/dist/vite-plugin.d.ts.map +1 -1
- package/dist/vite-plugin.js +71 -1
- package/package.json +3 -2
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { access, readdir } from "node:fs/promises";
|
|
2
|
+
import { basename, dirname, extname, join, relative, resolve } from "node:path";
|
|
3
|
+
import { slugFromPath } from "../core/markdown-loader.js";
|
|
4
|
+
export const STATIC_ASSET_EXTENSIONS = new Set([
|
|
5
|
+
".apng",
|
|
6
|
+
".avif",
|
|
7
|
+
".bmp",
|
|
8
|
+
".css",
|
|
9
|
+
".gif",
|
|
10
|
+
".ico",
|
|
11
|
+
".jpeg",
|
|
12
|
+
".jpg",
|
|
13
|
+
".js",
|
|
14
|
+
".json",
|
|
15
|
+
".mjs",
|
|
16
|
+
".mp4",
|
|
17
|
+
".pdf",
|
|
18
|
+
".png",
|
|
19
|
+
".svg",
|
|
20
|
+
".txt",
|
|
21
|
+
".webm",
|
|
22
|
+
".webp",
|
|
23
|
+
".woff",
|
|
24
|
+
".woff2",
|
|
25
|
+
".zip",
|
|
26
|
+
]);
|
|
27
|
+
export async function resolveMarkdownGroups(groups, tabName, configDir, markdown) {
|
|
28
|
+
const resolved = [];
|
|
29
|
+
for (const group of groups) {
|
|
30
|
+
if (!group.group)
|
|
31
|
+
throw new Error(`Group missing "group" name in tab "${tabName}"`);
|
|
32
|
+
if (!group.pages?.length)
|
|
33
|
+
throw new Error(`Group "${group.group}" in tab "${tabName}" has no pages`);
|
|
34
|
+
const pages = [];
|
|
35
|
+
for (const pageSlug of group.pages) {
|
|
36
|
+
if (pageSlug.includes("*")) {
|
|
37
|
+
const expanded = await expandGlob(pageSlug, configDir);
|
|
38
|
+
for (const file of expanded) {
|
|
39
|
+
const rel = relative(configDir, file).replace(/\.[^.]+$/, "");
|
|
40
|
+
pages.push({ slug: rel, file, ...markdown });
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
const absPath = await resolvePagePath(pageSlug, configDir);
|
|
45
|
+
pages.push({ slug: pageSlug, file: absPath, ...markdown });
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
resolved.push({ label: group.group, pages });
|
|
49
|
+
}
|
|
50
|
+
return resolved;
|
|
51
|
+
}
|
|
52
|
+
export async function collectStaticAssets(sourceRoot) {
|
|
53
|
+
const assets = [];
|
|
54
|
+
async function walk(dir) {
|
|
55
|
+
const entries = await readdir(dir, { withFileTypes: true });
|
|
56
|
+
for (const entry of entries.sort((left, right) => left.name.localeCompare(right.name))) {
|
|
57
|
+
if (entry.name.startsWith("."))
|
|
58
|
+
continue;
|
|
59
|
+
const absolutePath = join(dir, entry.name);
|
|
60
|
+
if (entry.isDirectory()) {
|
|
61
|
+
await walk(absolutePath);
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
if (!entry.isFile())
|
|
65
|
+
continue;
|
|
66
|
+
if (!STATIC_ASSET_EXTENSIONS.has(extname(entry.name).toLowerCase()))
|
|
67
|
+
continue;
|
|
68
|
+
assets.push({
|
|
69
|
+
file: absolutePath,
|
|
70
|
+
outputPath: relative(sourceRoot, absolutePath).replace(/\\/g, "/"),
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
await walk(sourceRoot);
|
|
75
|
+
return assets;
|
|
76
|
+
}
|
|
77
|
+
export function toWatchPaths(paths) {
|
|
78
|
+
return paths.filter((path) => Boolean(path));
|
|
79
|
+
}
|
|
80
|
+
export function assertLocalPath(ctx, source, label) {
|
|
81
|
+
if (ctx.isUrl(source)) {
|
|
82
|
+
throw new Error(`${label} "${source}" in tab "${ctx.tabName}" must be a local file path`);
|
|
83
|
+
}
|
|
84
|
+
return ctx.resolvePath(source);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Expand a simple glob pattern like "doc/api-*" into matching .md/.mdx files.
|
|
88
|
+
* Supports trailing * only (e.g. "doc/api-*", "guides/*").
|
|
89
|
+
*/
|
|
90
|
+
async function expandGlob(pattern, configDir) {
|
|
91
|
+
const absPattern = resolve(configDir, pattern);
|
|
92
|
+
const dir = dirname(absPattern);
|
|
93
|
+
const prefix = basename(absPattern).replace("*", "");
|
|
94
|
+
let entries;
|
|
95
|
+
try {
|
|
96
|
+
entries = await readdir(dir, { withFileTypes: true });
|
|
97
|
+
}
|
|
98
|
+
catch (err) {
|
|
99
|
+
if (err.code === "ENOENT") {
|
|
100
|
+
throw new Error(`Glob directory not found: ${dir}`);
|
|
101
|
+
}
|
|
102
|
+
throw err;
|
|
103
|
+
}
|
|
104
|
+
const matches = entries
|
|
105
|
+
.filter((entry) => entry.isFile() && entry.name.startsWith(prefix) && /\.(md|mdx)$/i.test(entry.name))
|
|
106
|
+
.map((entry) => join(dir, entry.name))
|
|
107
|
+
.sort();
|
|
108
|
+
if (matches.length === 0) {
|
|
109
|
+
throw new Error(`Glob "${pattern}" matched no files in ${dir}`);
|
|
110
|
+
}
|
|
111
|
+
return matches;
|
|
112
|
+
}
|
|
113
|
+
async function resolvePagePath(pageSlug, configDir) {
|
|
114
|
+
const direct = resolve(configDir, pageSlug);
|
|
115
|
+
const candidates = extname(direct)
|
|
116
|
+
? [direct]
|
|
117
|
+
: [`${direct}.md`, `${direct}.mdx`, join(direct, "index.md"), join(direct, "index.mdx")];
|
|
118
|
+
for (const candidate of candidates) {
|
|
119
|
+
try {
|
|
120
|
+
await access(candidate);
|
|
121
|
+
return candidate;
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
// keep trying candidates
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
throw new Error(`Page "${pageSlug}" not found. Tried:\n` +
|
|
128
|
+
candidates.map((candidate) => ` - ${candidate}`).join("\n") +
|
|
129
|
+
`\n\nPages are referenced relative to sourcey.config.ts. ` +
|
|
130
|
+
`Use slugs like "getting-started" for getting-started.md or "run/index" for run/index.md.`);
|
|
131
|
+
}
|
|
132
|
+
export function outputSlugForPage(page) {
|
|
133
|
+
return slugFromPath(page.slug);
|
|
134
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type { MarkdownPreprocessor } from "../core/markdown-loader.js";
|
|
2
|
+
import type { DoxygenConfig, GodocConfig, GroupConfig, ResolvedDoxygenConfig, ResolvedGodocConfig, ResolvedGroup } from "../config.js";
|
|
3
|
+
export interface SourceAdapterContext {
|
|
4
|
+
configDir: string;
|
|
5
|
+
tabName: string;
|
|
6
|
+
tabSlug: string;
|
|
7
|
+
resolvePath(path: string): string;
|
|
8
|
+
assertExists(path: string, label: string): Promise<void>;
|
|
9
|
+
isUrl(source: string): boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface SourceAdapter<TResolved extends ResolvedTabSource = ResolvedTabSource> {
|
|
12
|
+
name: string;
|
|
13
|
+
resolve(ctx: SourceAdapterContext): Promise<TResolved>;
|
|
14
|
+
}
|
|
15
|
+
export interface ResolvedSourceAsset {
|
|
16
|
+
/** Absolute source file path. */
|
|
17
|
+
file: string;
|
|
18
|
+
/** Output path relative to the adapter tab root. */
|
|
19
|
+
outputPath: string;
|
|
20
|
+
}
|
|
21
|
+
export interface ResolvedOpenApiSource {
|
|
22
|
+
kind: "openapi";
|
|
23
|
+
spec: string;
|
|
24
|
+
watchPaths?: string[];
|
|
25
|
+
}
|
|
26
|
+
export interface ResolvedMcpSource {
|
|
27
|
+
kind: "mcp";
|
|
28
|
+
spec: string;
|
|
29
|
+
watchPaths?: string[];
|
|
30
|
+
}
|
|
31
|
+
export interface ResolvedMarkdownSource {
|
|
32
|
+
kind: "markdown";
|
|
33
|
+
adapter?: string;
|
|
34
|
+
configPath?: string;
|
|
35
|
+
groups: ResolvedGroup[];
|
|
36
|
+
assets?: ResolvedSourceAsset[];
|
|
37
|
+
watchPaths?: string[];
|
|
38
|
+
}
|
|
39
|
+
export interface ResolvedDoxygenSource {
|
|
40
|
+
kind: "doxygen";
|
|
41
|
+
config: ResolvedDoxygenConfig;
|
|
42
|
+
watchPaths?: string[];
|
|
43
|
+
}
|
|
44
|
+
export interface ResolvedGodocSource {
|
|
45
|
+
kind: "godoc";
|
|
46
|
+
config: ResolvedGodocConfig;
|
|
47
|
+
watchPaths?: string[];
|
|
48
|
+
}
|
|
49
|
+
export type ResolvedTabSource = ResolvedOpenApiSource | ResolvedMcpSource | ResolvedMarkdownSource | ResolvedDoxygenSource | ResolvedGodocSource;
|
|
50
|
+
export interface MarkdownSourceOptions {
|
|
51
|
+
groups: GroupConfig[];
|
|
52
|
+
}
|
|
53
|
+
export interface OpenApiSourceOptions {
|
|
54
|
+
spec: string;
|
|
55
|
+
}
|
|
56
|
+
export interface McpSourceOptions {
|
|
57
|
+
spec: string;
|
|
58
|
+
}
|
|
59
|
+
export interface MkDocsSourceOptions {
|
|
60
|
+
config: string;
|
|
61
|
+
}
|
|
62
|
+
export type DoxygenSourceOptions = DoxygenConfig;
|
|
63
|
+
export type GodocSourceOptions = GodocConfig | string;
|
|
64
|
+
export interface PageMarkdownOptions {
|
|
65
|
+
sourceRoot?: string;
|
|
66
|
+
preprocess?: MarkdownPreprocessor[];
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/adapters/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,KAAK,EACV,aAAa,EACb,WAAW,EACX,WAAW,EACX,qBAAqB,EACrB,mBAAmB,EACnB,aAAa,EACd,MAAM,cAAc,CAAC;AAEtB,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAClC,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,aAAa,CAAC,SAAS,SAAS,iBAAiB,GAAG,iBAAiB;IACpF,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,GAAG,EAAE,oBAAoB,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;CACxD;AAED,MAAM,WAAW,mBAAmB;IAClC,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,KAAK,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,qBAAqB,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,mBAAmB,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,MAAM,iBAAiB,GACzB,qBAAqB,GACrB,iBAAiB,GACjB,sBAAsB,GACtB,qBAAqB,GACrB,mBAAmB,CAAC;AAExB,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,oBAAoB,GAAG,aAAa,CAAC;AACjD,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,MAAM,CAAC;AAEtD,MAAM,WAAW,mBAAmB;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,oBAAoB,EAAE,CAAC;CACrC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/client/search.js
CHANGED
|
@@ -21,16 +21,41 @@
|
|
|
21
21
|
var url = searchMeta.getAttribute('content');
|
|
22
22
|
fetch(url).then(function (r) { return r.json(); }).then(function (data) {
|
|
23
23
|
entries = data.map(function (e) {
|
|
24
|
+
var title = e.title || '';
|
|
25
|
+
var qualifiedName = e.qualifiedName || '';
|
|
26
|
+
var owner = e.owner || '';
|
|
27
|
+
var tab = e.tab || '';
|
|
24
28
|
return {
|
|
25
29
|
url: e.url,
|
|
26
30
|
method: e.method || '',
|
|
27
31
|
path: e.path || '',
|
|
28
|
-
|
|
29
|
-
|
|
32
|
+
title: title,
|
|
33
|
+
summary: qualifiedName || title,
|
|
34
|
+
tag: owner ? owner : tab,
|
|
30
35
|
content: e.content || '',
|
|
31
36
|
category: e.category || '',
|
|
32
37
|
featured: !!e.featured,
|
|
33
|
-
|
|
38
|
+
symbolKind: e.symbolKind || '',
|
|
39
|
+
owner: owner,
|
|
40
|
+
ownerKind: e.ownerKind || '',
|
|
41
|
+
namespace: e.namespace || '',
|
|
42
|
+
qualifiedName: qualifiedName,
|
|
43
|
+
titleLower: title.toLowerCase(),
|
|
44
|
+
pathLower: (e.path || '').toLowerCase(),
|
|
45
|
+
qualifiedLower: qualifiedName.toLowerCase(),
|
|
46
|
+
ownerLower: owner.toLowerCase(),
|
|
47
|
+
searchText: [
|
|
48
|
+
e.method || '',
|
|
49
|
+
e.path || '',
|
|
50
|
+
title,
|
|
51
|
+
qualifiedName,
|
|
52
|
+
owner,
|
|
53
|
+
e.ownerKind || '',
|
|
54
|
+
e.namespace || '',
|
|
55
|
+
e.symbolKind || '',
|
|
56
|
+
e.content || '',
|
|
57
|
+
tab
|
|
58
|
+
].join(' ').toLowerCase()
|
|
34
59
|
};
|
|
35
60
|
});
|
|
36
61
|
indexLoaded = true;
|
|
@@ -84,20 +109,64 @@
|
|
|
84
109
|
filtered = featured.concat(rest).slice(0, 30);
|
|
85
110
|
} else {
|
|
86
111
|
var terms = q.split(/\s+/);
|
|
87
|
-
filtered = entries.
|
|
88
|
-
return
|
|
112
|
+
filtered = entries.map(function (e) {
|
|
113
|
+
return { entry: e, score: scoreEntry(e, q, terms) };
|
|
114
|
+
}).filter(function (result) {
|
|
115
|
+
return result.score > 0;
|
|
89
116
|
});
|
|
90
|
-
|
|
91
|
-
|
|
117
|
+
var categoryOrder = {
|
|
118
|
+
Pages: 0,
|
|
119
|
+
Endpoints: 1,
|
|
120
|
+
Models: 2,
|
|
121
|
+
Functions: 3,
|
|
122
|
+
Types: 4,
|
|
123
|
+
Enums: 5,
|
|
124
|
+
'Enum Values': 6,
|
|
125
|
+
Variables: 7,
|
|
126
|
+
Friends: 8,
|
|
127
|
+
Properties: 9,
|
|
128
|
+
Members: 10,
|
|
129
|
+
Sections: 20
|
|
130
|
+
};
|
|
92
131
|
filtered.sort(function (a, b) {
|
|
93
|
-
|
|
132
|
+
if (b.score !== a.score) return b.score - a.score;
|
|
133
|
+
return (categoryOrder[a.entry.category] || 19) - (categoryOrder[b.entry.category] || 19);
|
|
94
134
|
});
|
|
135
|
+
filtered = filtered.map(function (result) { return result.entry; }).slice(0, 50);
|
|
95
136
|
}
|
|
96
137
|
|
|
97
138
|
activeIndex = filtered.length ? 0 : -1;
|
|
98
139
|
render();
|
|
99
140
|
}
|
|
100
141
|
|
|
142
|
+
function scoreEntry(e, q, terms) {
|
|
143
|
+
if (!terms.every(function (t) { return e.searchText.indexOf(t) !== -1; })) return 0;
|
|
144
|
+
|
|
145
|
+
var compactQuery = q.replace(/\s+/g, '');
|
|
146
|
+
var qualified = e.qualifiedLower || '';
|
|
147
|
+
var title = e.titleLower || '';
|
|
148
|
+
var path = e.pathLower || '';
|
|
149
|
+
var owner = e.ownerLower || '';
|
|
150
|
+
var score = 1;
|
|
151
|
+
|
|
152
|
+
if (qualified && qualified === compactQuery) score += 1200;
|
|
153
|
+
if (title && title === q) score += 900;
|
|
154
|
+
if (path && path === q) score += 850;
|
|
155
|
+
if (qualified && qualified.endsWith('::' + compactQuery)) score += 780;
|
|
156
|
+
if (owner && compactQuery === owner + '::' + title) score += 760;
|
|
157
|
+
if (qualified && compactQuery.indexOf('::') !== -1 && qualified.indexOf(compactQuery) !== -1) score += 700;
|
|
158
|
+
if (title && title.indexOf(q) === 0) score += 500;
|
|
159
|
+
if (qualified && qualified.indexOf(compactQuery) !== -1) score += 420;
|
|
160
|
+
if (owner && owner.indexOf(compactQuery) !== -1) score += 240;
|
|
161
|
+
if (path && path.indexOf(q) !== -1) score += 180;
|
|
162
|
+
if (e.content.toLowerCase().indexOf(q) !== -1) score += 80;
|
|
163
|
+
|
|
164
|
+
if (e.category === 'Sections') score -= 70;
|
|
165
|
+
if (e.symbolKind) score += 35;
|
|
166
|
+
if (e.featured) score += 20;
|
|
167
|
+
return score;
|
|
168
|
+
}
|
|
169
|
+
|
|
101
170
|
function render() {
|
|
102
171
|
var html = '';
|
|
103
172
|
var lastCategory = '';
|
|
@@ -13,15 +13,15 @@ export function Head() {
|
|
|
13
13
|
: undefined;
|
|
14
14
|
const siteName = site.name || spec.info.title || "";
|
|
15
15
|
const pageTitle = page.kind === "markdown"
|
|
16
|
-
? (
|
|
16
|
+
? composePageTitle(page.markdown.title, siteName)
|
|
17
17
|
: page.kind === "changelog"
|
|
18
18
|
? (() => {
|
|
19
19
|
const baseTitle = changelogVersion
|
|
20
20
|
? `${changelogVersion.version ?? "Unreleased"} — ${page.changelog.title}`
|
|
21
21
|
: page.changelog.title;
|
|
22
|
-
return
|
|
22
|
+
return composePageTitle(baseTitle, siteName);
|
|
23
23
|
})()
|
|
24
|
-
:
|
|
24
|
+
: composePageTitle(siteName, "API Reference");
|
|
25
25
|
const pageDescription = page.kind === "markdown"
|
|
26
26
|
? page.markdown.description || pageTitle
|
|
27
27
|
: page.kind === "changelog"
|
|
@@ -58,3 +58,16 @@ export function Head() {
|
|
|
58
58
|
`;
|
|
59
59
|
return (_jsxs("head", { children: [_jsx("meta", { charset: "utf-8" }), _jsx("meta", { name: "viewport", content: "width=device-width, initial-scale=1" }), _jsx("title", { children: pageTitle }), _jsx("meta", { name: "description", content: pageDescription }), _jsx("meta", { name: "generator", content: `Sourcey ${pkg.version}` }), options.pageUrl && _jsx("link", { rel: "canonical", href: options.pageUrl }), _jsx("meta", { property: "og:title", content: pageTitle }), _jsx("meta", { property: "og:description", content: pageDescription }), _jsx("meta", { property: "og:type", content: "website" }), siteName && _jsx("meta", { property: "og:site_name", content: siteName }), options.pageUrl && _jsx("meta", { property: "og:url", content: options.pageUrl }), options.ogImageUrl && _jsx("meta", { property: "og:image", content: options.ogImageUrl }), options.ogImageUrl && _jsx("meta", { property: "og:image:width", content: "1200" }), options.ogImageUrl && _jsx("meta", { property: "og:image:height", content: "630" }), options.ogImageUrl && _jsx("meta", { property: "og:image:type", content: "image/png" }), _jsx("meta", { name: "twitter:card", content: options.ogImageUrl ? "summary_large_image" : "summary" }), _jsx("meta", { name: "twitter:title", content: pageTitle }), _jsx("meta", { name: "twitter:description", content: pageDescription }), options.ogImageUrl && _jsx("meta", { name: "twitter:image", content: options.ogImageUrl }), _jsx("meta", { name: "sourcey-search", content: `${options.assetBase}search-index.json` }), options.alternateLinks?.map((link) => (_jsx("link", { rel: "alternate", type: link.type, href: link.href, title: link.title }, `${link.type}-${link.href}`))), _jsx("link", { rel: "preconnect", href: "https://fonts.googleapis.com" }), _jsx("link", { rel: "preconnect", href: "https://fonts.gstatic.com", crossorigin: "anonymous" }), _jsx("link", { rel: "stylesheet", href: `https://fonts.googleapis.com/css2?family=${encodeURIComponent(fonts.googleFont)}:wght@100..900&display=swap` }), _jsx("style", { dangerouslySetInnerHTML: { __html: themeCSS } }), showLangIconCSS && _jsx("style", { dangerouslySetInnerHTML: { __html: langIconCSS() } }), site.customCSS && _jsx("style", { dangerouslySetInnerHTML: { __html: site.customCSS } }), _jsx("script", { dangerouslySetInnerHTML: { __html: `(function(){var t=localStorage.getItem('sourcey-theme');if(t==='dark')document.documentElement.classList.add('dark')})()` } }), _jsx("link", { rel: "stylesheet", href: `${options.assetBase}sourcey.css` }), site.favicon && _jsx("link", { rel: "icon", href: site.favicon })] }));
|
|
60
60
|
}
|
|
61
|
+
function composePageTitle(title, siteName) {
|
|
62
|
+
if (!siteName)
|
|
63
|
+
return title;
|
|
64
|
+
if (!title)
|
|
65
|
+
return siteName;
|
|
66
|
+
return sameTitle(title, siteName) ? title : `${title} — ${siteName}`;
|
|
67
|
+
}
|
|
68
|
+
function sameTitle(left, right) {
|
|
69
|
+
return normalizeTitle(left) === normalizeTitle(right);
|
|
70
|
+
}
|
|
71
|
+
function normalizeTitle(value) {
|
|
72
|
+
return value.trim().replace(/\s+/g, " ").toLowerCase();
|
|
73
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableOfContents.d.ts","sourceRoot":"","sources":["../../../src/components/layout/TableOfContents.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"TableOfContents.d.ts","sourceRoot":"","sources":["../../../src/components/layout/TableOfContents.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AA2CjE,wBAAgB,eAAe,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,WAAW,EAAE,CAAA;CAAE,uCAuBxE"}
|
|
@@ -7,10 +7,12 @@ import { iconPath } from "../../utils/icons.js";
|
|
|
7
7
|
*/
|
|
8
8
|
const tocLink = "toc-item break-words block hover:text-[rgb(var(--color-gray-900))] dark:hover:text-[rgb(var(--color-gray-300))] dark:text-[rgb(var(--color-gray-400))] transition-colors";
|
|
9
9
|
function TocList({ headings }) {
|
|
10
|
-
// Group
|
|
10
|
+
// Group by the shallowest heading present. Moxygen C++ pages often use
|
|
11
|
+
// h1 for the page title and h3 for sections, with no h2 in between.
|
|
12
|
+
const rootLevel = Math.min(...headings.map((h) => h.level));
|
|
11
13
|
const groups = [];
|
|
12
14
|
for (const h of headings) {
|
|
13
|
-
if (h.level
|
|
15
|
+
if (h.level <= rootLevel) {
|
|
14
16
|
groups.push({ root: h, children: [] });
|
|
15
17
|
}
|
|
16
18
|
else if (groups.length) {
|
package/dist/config.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { PrettyUrls } from "./site-url.js";
|
|
2
|
+
import type { MarkdownPreprocessor } from "./core/markdown-loader.js";
|
|
3
|
+
import type { ResolvedTabSource, SourceAdapter } from "./adapters/types.js";
|
|
2
4
|
export type { PrettyUrls } from "./site-url.js";
|
|
3
5
|
export type ThemePreset = "default" | "minimal" | "api-first";
|
|
4
6
|
export interface ThemeConfig {
|
|
@@ -88,6 +90,21 @@ export interface SourceyConfig {
|
|
|
88
90
|
};
|
|
89
91
|
}
|
|
90
92
|
export type DoxygenIndexStyle = "auto" | "rich" | "structured" | "flat" | "none";
|
|
93
|
+
export interface DoxygenSourceUrlInput {
|
|
94
|
+
path: string;
|
|
95
|
+
line?: string;
|
|
96
|
+
symbol?: string;
|
|
97
|
+
}
|
|
98
|
+
export interface DoxygenSourceUrlRoute {
|
|
99
|
+
/** Doxygen source path prefix. Longest matching prefix wins. */
|
|
100
|
+
prefix: string;
|
|
101
|
+
/**
|
|
102
|
+
* Base URL or template for this route. Omit or set false to suppress public
|
|
103
|
+
* links while still rendering the plain "Defined in path:line" location.
|
|
104
|
+
*/
|
|
105
|
+
url?: string | false;
|
|
106
|
+
}
|
|
107
|
+
export type DoxygenSourceUrlResolver = string | DoxygenSourceUrlRoute[] | ((input: DoxygenSourceUrlInput) => string | undefined);
|
|
91
108
|
export interface DoxygenConfig {
|
|
92
109
|
/** Path to Doxygen XML output directory */
|
|
93
110
|
xml: string;
|
|
@@ -104,6 +121,14 @@ export interface DoxygenConfig {
|
|
|
104
121
|
* - "none" or false: no index page, land on the first API page
|
|
105
122
|
*/
|
|
106
123
|
index?: DoxygenIndexStyle | false;
|
|
124
|
+
/**
|
|
125
|
+
* Base URL or template for source links in generated API pages.
|
|
126
|
+
* A plain URL is joined with the Doxygen file path and "#L<line>".
|
|
127
|
+
* Templates may use {path}, {fullPath}, and {line}. In route maps,
|
|
128
|
+
* {path} is the matched-prefix-relative path and {fullPath} is the original
|
|
129
|
+
* Doxygen path.
|
|
130
|
+
*/
|
|
131
|
+
sourceUrl?: DoxygenSourceUrlResolver;
|
|
107
132
|
}
|
|
108
133
|
export type GodocMode = "auto" | "live" | "snapshot";
|
|
109
134
|
export interface GodocGoEnv {
|
|
@@ -148,7 +173,11 @@ export interface TabConfig {
|
|
|
148
173
|
tab: string;
|
|
149
174
|
/** Custom URL slug for this tab. Defaults to slugified tab name. */
|
|
150
175
|
slug?: string;
|
|
176
|
+
/** Source adapter object, usually created with `mkdocs()`, `openapi()`, `markdown()`, `doxygen()`, `godoc()`, or `mcp()`. */
|
|
177
|
+
source?: SourceAdapter;
|
|
151
178
|
openapi?: string;
|
|
179
|
+
/** Path to a MkDocs mkdocs.yml/mkdocs.yaml file. Sourcey imports docs_dir and nav. */
|
|
180
|
+
mkdocs?: string;
|
|
152
181
|
groups?: GroupConfig[];
|
|
153
182
|
doxygen?: DoxygenConfig;
|
|
154
183
|
/** Path to an mcp.json file (MCP server snapshot). */
|
|
@@ -237,6 +266,7 @@ export interface ResolvedDoxygenConfig {
|
|
|
237
266
|
language: string;
|
|
238
267
|
groups: boolean;
|
|
239
268
|
index: DoxygenIndexStyle;
|
|
269
|
+
sourceUrl?: DoxygenSourceUrlResolver;
|
|
240
270
|
}
|
|
241
271
|
export interface ResolvedGodocConfig {
|
|
242
272
|
/** Absolute path to the Go module directory (containing go.mod). */
|
|
@@ -256,7 +286,9 @@ export interface ResolvedGodocConfig {
|
|
|
256
286
|
export interface ResolvedTab {
|
|
257
287
|
label: string;
|
|
258
288
|
slug: string;
|
|
289
|
+
source: ResolvedTabSource;
|
|
259
290
|
openapi?: string;
|
|
291
|
+
mkdocs?: string;
|
|
260
292
|
groups?: ResolvedGroup[];
|
|
261
293
|
doxygen?: ResolvedDoxygenConfig;
|
|
262
294
|
mcp?: string;
|
|
@@ -267,6 +299,12 @@ export interface ResolvedPage {
|
|
|
267
299
|
slug: string;
|
|
268
300
|
/** Absolute filesystem path to the .md/.mdx file */
|
|
269
301
|
file: string;
|
|
302
|
+
/** Optional navigation label supplied by a source format such as MkDocs. */
|
|
303
|
+
label?: string;
|
|
304
|
+
/** Optional source root used for source-format-relative includes and assets. */
|
|
305
|
+
sourceRoot?: string;
|
|
306
|
+
/** Optional source-adapter Markdown preprocessors. */
|
|
307
|
+
preprocess?: MarkdownPreprocessor[];
|
|
270
308
|
}
|
|
271
309
|
export interface ResolvedGroup {
|
|
272
310
|
label: string;
|
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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"}
|