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.
Files changed (45) hide show
  1. package/README.md +20 -96
  2. package/dist/adapters/index.d.ts +11 -0
  3. package/dist/adapters/index.d.ts.map +1 -0
  4. package/dist/adapters/index.js +98 -0
  5. package/dist/adapters/mkdocs.d.ts +5 -0
  6. package/dist/adapters/mkdocs.d.ts.map +1 -0
  7. package/dist/adapters/mkdocs.js +367 -0
  8. package/dist/adapters/shared.d.ts +12 -0
  9. package/dist/adapters/shared.d.ts.map +1 -0
  10. package/dist/adapters/shared.js +134 -0
  11. package/dist/adapters/types.d.ts +68 -0
  12. package/dist/adapters/types.d.ts.map +1 -0
  13. package/dist/adapters/types.js +1 -0
  14. package/dist/client/search.js +77 -8
  15. package/dist/components/layout/Head.js +16 -3
  16. package/dist/components/layout/TableOfContents.d.ts.map +1 -1
  17. package/dist/components/layout/TableOfContents.js +4 -2
  18. package/dist/config.d.ts +38 -0
  19. package/dist/config.d.ts.map +1 -1
  20. package/dist/config.js +79 -141
  21. package/dist/core/doxygen-loader.d.ts.map +1 -1
  22. package/dist/core/doxygen-loader.js +2 -0
  23. package/dist/core/markdown-loader.d.ts +14 -0
  24. package/dist/core/markdown-loader.d.ts.map +1 -1
  25. package/dist/core/markdown-loader.js +63 -22
  26. package/dist/core/navigation.d.ts.map +1 -1
  27. package/dist/core/navigation.js +8 -7
  28. package/dist/core/search-indexer.d.ts +10 -0
  29. package/dist/core/search-indexer.d.ts.map +1 -1
  30. package/dist/core/search-indexer.js +5 -0
  31. package/dist/dev-server.d.ts.map +1 -1
  32. package/dist/dev-server.js +60 -33
  33. package/dist/index.d.ts +2 -0
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +5 -2
  36. package/dist/init.d.ts.map +1 -1
  37. package/dist/init.js +19 -14
  38. package/dist/site-assembly.d.ts.map +1 -1
  39. package/dist/site-assembly.js +107 -25
  40. package/dist/utils/markdown.d.ts.map +1 -1
  41. package/dist/utils/markdown.js +15 -4
  42. package/dist/vite-plugin.d.ts +2 -0
  43. package/dist/vite-plugin.d.ts.map +1 -1
  44. package/dist/vite-plugin.js +71 -1
  45. 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 {};
@@ -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
- summary: e.title || '',
29
- tag: e.tab || '',
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
- searchText: [e.method || '', e.path || '', e.title || '', e.content || '', e.tab || ''].join(' ').toLowerCase()
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.filter(function (e) {
88
- return terms.every(function (t) { return e.searchText.indexOf(t) !== -1; });
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
- // Sort by category so groups stay together (only for search results)
91
- var categoryOrder = { Pages: 0, Sections: 1, Endpoints: 2, Models: 3 };
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
- return (categoryOrder[a.category] || 9) - (categoryOrder[b.category] || 9);
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
- ? (siteName ? `${page.markdown.title} — ${siteName}` : page.markdown.title)
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 siteName ? `${baseTitle} — ${siteName}` : baseTitle;
22
+ return composePageTitle(baseTitle, siteName);
23
23
  })()
24
- : `${siteName} API Reference`;
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;AAyCjE,wBAAgB,eAAe,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,WAAW,EAAE,CAAA;CAAE,uCAuBxE"}
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: each root heading (level 2) followed by its sub-headings (level 3+)
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 < 3) {
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;
@@ -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;AAEhD,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAMhD,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,eAAe;IAC9B,qFAAqF;IACrF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,uDAAuD;IACvD,IAAI,CAAC,EAAE,OAAO,GAAG;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1D,uDAAuD;IACvD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gHAAgH;IAChH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sFAAsF;IACtF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,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,iGAAiG;IACjG,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,SAAS,CAAC,EAAE,KAAK,GAAG,eAAe,CAAC;IACpC,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,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;AAErD,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,yGAAyG;IACzG,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mFAAmF;IACnF,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,gEAAgE;IAChE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,qEAAqE;IACrE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,mDAAmD;IACnD,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,8EAA8E;IAC9E,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB;;;OAGG;IACH,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;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;IACb;;;OAGG;IACH,KAAK,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;CAC9B;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,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1D,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,uBAAuB;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,KAAK,GAAG;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACvD,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,UAAU,CAAC;IACvB,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,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,SAAS,EAAE,uBAAuB,CAAC;IACnC,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,mBAAmB;IAClC,oEAAoE;IACpE,MAAM,EAAE,MAAM,CAAC;IACf,wEAAwE;IACxE,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,SAAS,CAAC;IAChB,YAAY,EAAE,OAAO,CAAC;IACtB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;CACxB;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;IACb,KAAK,CAAC,EAAE,mBAAmB,CAAC;CAC7B;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;AAsBD,wBAAsB,UAAU,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CA8B9E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CAqB/D;AAMD,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAgCzG;AAwND,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED,wEAAwE;AACxE,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAI7D;AAED,4DAA4D;AAC5D,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,MAAM,CAIlF;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,MAAM,CAQ5F;AAQD,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAO5C"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}