sourcey 2.1.0 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. package/README.md +128 -210
  2. package/dist/cli.js +18 -57
  3. package/dist/cli.js.map +1 -1
  4. package/dist/client/scroll-tracker.js +125 -40
  5. package/dist/client/search.js +27 -3
  6. package/dist/client/tabs.js +164 -24
  7. package/dist/components/App.d.ts +3 -2
  8. package/dist/components/App.d.ts.map +1 -1
  9. package/dist/components/App.js +3 -3
  10. package/dist/components/App.js.map +1 -1
  11. package/dist/components/layout/Head.d.ts.map +1 -1
  12. package/dist/components/layout/Head.js +30 -9
  13. package/dist/components/layout/Head.js.map +1 -1
  14. package/dist/components/layout/Header.d.ts +2 -7
  15. package/dist/components/layout/Header.d.ts.map +1 -1
  16. package/dist/components/layout/Header.js +12 -15
  17. package/dist/components/layout/Header.js.map +1 -1
  18. package/dist/components/layout/Page.d.ts.map +1 -1
  19. package/dist/components/layout/Page.js +54 -10
  20. package/dist/components/layout/Page.js.map +1 -1
  21. package/dist/components/layout/Sidebar.js +1 -1
  22. package/dist/components/layout/Sidebar.js.map +1 -1
  23. package/dist/components/layout/TableOfContents.d.ts.map +1 -1
  24. package/dist/components/layout/TableOfContents.js +1 -1
  25. package/dist/components/layout/TableOfContents.js.map +1 -1
  26. package/dist/components/openapi/CodeSamples.d.ts +4 -2
  27. package/dist/components/openapi/CodeSamples.d.ts.map +1 -1
  28. package/dist/components/openapi/CodeSamples.js +9 -5
  29. package/dist/components/openapi/CodeSamples.js.map +1 -1
  30. package/dist/components/openapi/Definition.js +1 -1
  31. package/dist/components/openapi/Definition.js.map +1 -1
  32. package/dist/components/openapi/EndpointBar.d.ts.map +1 -1
  33. package/dist/components/openapi/EndpointBar.js +3 -3
  34. package/dist/components/openapi/EndpointBar.js.map +1 -1
  35. package/dist/components/openapi/Introduction.d.ts.map +1 -1
  36. package/dist/components/openapi/Introduction.js +1 -1
  37. package/dist/components/openapi/Introduction.js.map +1 -1
  38. package/dist/components/openapi/Operation.d.ts.map +1 -1
  39. package/dist/components/openapi/Operation.js +5 -1
  40. package/dist/components/openapi/Operation.js.map +1 -1
  41. package/dist/components/openapi/Responses.d.ts +2 -1
  42. package/dist/components/openapi/Responses.d.ts.map +1 -1
  43. package/dist/components/openapi/Responses.js +17 -6
  44. package/dist/components/openapi/Responses.js.map +1 -1
  45. package/dist/components/openapi/Security.d.ts.map +1 -1
  46. package/dist/components/openapi/Security.js +3 -2
  47. package/dist/components/openapi/Security.js.map +1 -1
  48. package/dist/components/openapi/Tags.d.ts.map +1 -1
  49. package/dist/components/openapi/Tags.js +1 -1
  50. package/dist/components/openapi/Tags.js.map +1 -1
  51. package/dist/components/schema/ExampleView.d.ts +1 -1
  52. package/dist/components/schema/ExampleView.d.ts.map +1 -1
  53. package/dist/components/schema/ExampleView.js +3 -2
  54. package/dist/components/schema/ExampleView.js.map +1 -1
  55. package/dist/components/ui/CopyButton.d.ts +6 -0
  56. package/dist/components/ui/CopyButton.d.ts.map +1 -0
  57. package/dist/components/ui/CopyButton.js +10 -0
  58. package/dist/components/ui/CopyButton.js.map +1 -0
  59. package/dist/components/ui/Markdown.js +1 -1
  60. package/dist/components/ui/Markdown.js.map +1 -1
  61. package/dist/components/ui/SocialIcon.d.ts +5 -0
  62. package/dist/components/ui/SocialIcon.d.ts.map +1 -0
  63. package/dist/components/ui/SocialIcon.js +19 -0
  64. package/dist/components/ui/SocialIcon.js.map +1 -0
  65. package/dist/config.d.ts +133 -37
  66. package/dist/config.d.ts.map +1 -1
  67. package/dist/config.js +227 -73
  68. package/dist/config.js.map +1 -1
  69. package/dist/core/doxygen-loader.d.ts +9 -0
  70. package/dist/core/doxygen-loader.d.ts.map +1 -0
  71. package/dist/core/doxygen-loader.js +68 -0
  72. package/dist/core/doxygen-loader.js.map +1 -0
  73. package/dist/core/markdown-loader.d.ts +2 -5
  74. package/dist/core/markdown-loader.d.ts.map +1 -1
  75. package/dist/core/markdown-loader.js +218 -27
  76. package/dist/core/markdown-loader.js.map +1 -1
  77. package/dist/core/navigation.d.ts +2 -2
  78. package/dist/core/navigation.d.ts.map +1 -1
  79. package/dist/core/navigation.js +9 -10
  80. package/dist/core/navigation.js.map +1 -1
  81. package/dist/core/search-indexer.d.ts +1 -1
  82. package/dist/core/search-indexer.d.ts.map +1 -1
  83. package/dist/core/search-indexer.js +6 -5
  84. package/dist/core/search-indexer.js.map +1 -1
  85. package/dist/dev-server.d.ts +0 -12
  86. package/dist/dev-server.d.ts.map +1 -1
  87. package/dist/dev-server.js +101 -79
  88. package/dist/dev-server.js.map +1 -1
  89. package/dist/index.d.ts +2 -30
  90. package/dist/index.d.ts.map +1 -1
  91. package/dist/index.js +82 -70
  92. package/dist/index.js.map +1 -1
  93. package/dist/renderer/context.d.ts +29 -2
  94. package/dist/renderer/context.d.ts.map +1 -1
  95. package/dist/renderer/context.js +1 -1
  96. package/dist/renderer/context.js.map +1 -1
  97. package/dist/renderer/html-builder.d.ts +3 -16
  98. package/dist/renderer/html-builder.d.ts.map +1 -1
  99. package/dist/renderer/html-builder.js +6 -20
  100. package/dist/renderer/html-builder.js.map +1 -1
  101. package/dist/renderer/static-renderer.d.ts +2 -2
  102. package/dist/renderer/static-renderer.d.ts.map +1 -1
  103. package/dist/renderer/static-renderer.js +2 -2
  104. package/dist/renderer/static-renderer.js.map +1 -1
  105. package/dist/themes/default/main.css +13 -1
  106. package/dist/themes/default/sourcey.css +629 -41
  107. package/dist/utils/code-samples.d.ts +8 -3
  108. package/dist/utils/code-samples.d.ts.map +1 -1
  109. package/dist/utils/code-samples.js +188 -51
  110. package/dist/utils/code-samples.js.map +1 -1
  111. package/dist/utils/copy-svg.d.ts +9 -0
  112. package/dist/utils/copy-svg.d.ts.map +1 -0
  113. package/dist/utils/copy-svg.js +9 -0
  114. package/dist/utils/copy-svg.js.map +1 -0
  115. package/dist/utils/highlighter.d.ts.map +1 -1
  116. package/dist/utils/highlighter.js +18 -7
  117. package/dist/utils/highlighter.js.map +1 -1
  118. package/dist/utils/icons.d.ts +14 -0
  119. package/dist/utils/icons.d.ts.map +1 -0
  120. package/dist/utils/icons.js +59 -0
  121. package/dist/utils/icons.js.map +1 -0
  122. package/dist/utils/lang-icons.d.ts +17 -0
  123. package/dist/utils/lang-icons.d.ts.map +1 -0
  124. package/dist/utils/lang-icons.js +87 -0
  125. package/dist/utils/lang-icons.js.map +1 -0
  126. package/dist/utils/markdown.d.ts +17 -1
  127. package/dist/utils/markdown.d.ts.map +1 -1
  128. package/dist/utils/markdown.js +59 -2
  129. package/dist/utils/markdown.js.map +1 -1
  130. package/dist/vite-plugin.d.ts.map +1 -1
  131. package/dist/vite-plugin.js +4 -7
  132. package/dist/vite-plugin.js.map +1 -1
  133. package/package.json +5 -4
package/dist/config.js CHANGED
@@ -1,97 +1,251 @@
1
- import { readFile, access } from "node:fs/promises";
2
- import { resolve, dirname } from "node:path";
3
- /**
4
- * Returns true when the config defines explicit navigation.
5
- */
6
- export function hasNavigation(config) {
7
- return Array.isArray(config.navigation) && config.navigation.length > 0;
8
- }
9
- /**
10
- * Generate a minimal config for a standalone spec file.
11
- * Wraps the spec in a single "API Reference" tab so it renders
12
- * through the same modern layout as a multi-page site.
13
- */
14
- export function configFromSpec(specPath, options) {
15
- return {
16
- logo: options?.logo,
17
- favicon: options?.favicon,
18
- navigation: [
19
- {
20
- label: "API Reference",
21
- slug: "api",
22
- spec: specPath,
23
- },
24
- ],
25
- };
1
+ import { access, readdir } from "node:fs/promises";
2
+ import { resolve, dirname, basename, extname } from "node:path";
3
+ import { pathToFileURL } from "node:url";
4
+ export function defineConfig(config) {
5
+ return config;
26
6
  }
27
- /**
28
- * Load sourcey.json from the given directory (or cwd).
29
- * Returns an empty config if no file is found.
30
- * Throws on invalid config (parse errors, validation failures).
31
- */
7
+ // ---------------------------------------------------------------------------
8
+ // Config loading
9
+ // ---------------------------------------------------------------------------
10
+ const DEFAULT_COLORS = {
11
+ primary: "99 102 241",
12
+ light: "129 140 248",
13
+ dark: "79 70 229",
14
+ };
15
+ const DEFAULT_FONTS = {
16
+ sans: "'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif",
17
+ mono: "'JetBrains Mono', 'SF Mono', 'Fira Code', 'Cascadia Code', Consolas, monospace",
18
+ };
19
+ const DEFAULT_LAYOUT = {
20
+ sidebar: "18rem",
21
+ toc: "19rem",
22
+ content: "44rem",
23
+ };
32
24
  export async function loadConfig(cwd) {
33
25
  const dir = cwd ?? process.cwd();
34
- const configPath = resolve(dir, "sourcey.json");
35
- let raw;
26
+ const configPath = resolve(dir, "sourcey.config.ts");
36
27
  try {
37
- raw = await readFile(configPath, "utf-8");
28
+ await access(configPath);
38
29
  }
39
30
  catch {
40
- return {};
31
+ throw new Error(`No sourcey.config.ts found in ${dir}.\n` +
32
+ `Create one with:\n\n` +
33
+ ` import { defineConfig } from "sourcey";\n` +
34
+ ` export default defineConfig({ navigation: { tabs: [...] } });\n`);
41
35
  }
42
- const config = JSON.parse(raw);
43
- if (hasNavigation(config)) {
44
- await validateNavigation(config.navigation, dirname(configPath));
36
+ const mod = await import(pathToFileURL(configPath).href);
37
+ const raw = mod.default;
38
+ if (!raw?.navigation?.tabs) {
39
+ throw new Error("sourcey.config.ts must export default defineConfig({ navigation: { tabs: [...] } })");
45
40
  }
46
- return config;
41
+ return resolveConfig(raw, dirname(configPath));
47
42
  }
48
43
  /**
49
- * Validate navigation config. Throws descriptive errors on invalid input.
44
+ * Build a ResolvedConfig for a standalone spec file (no config file needed).
50
45
  */
51
- async function validateNavigation(tabs, configDir) {
52
- if (tabs.length === 0)
53
- return;
46
+ export function configFromSpec(specPath) {
47
+ const absSpec = resolve(specPath);
48
+ return {
49
+ name: "API Reference",
50
+ theme: {
51
+ preset: "default",
52
+ colors: { ...DEFAULT_COLORS },
53
+ fonts: { ...DEFAULT_FONTS },
54
+ layout: { ...DEFAULT_LAYOUT },
55
+ css: [],
56
+ },
57
+ codeSamples: ["curl", "javascript", "python"],
58
+ tabs: [{ label: "API Reference", slug: "api", openapi: absSpec }],
59
+ navbar: { links: [] },
60
+ footer: { links: [] },
61
+ };
62
+ }
63
+ // ---------------------------------------------------------------------------
64
+ // Resolution + validation
65
+ // ---------------------------------------------------------------------------
66
+ async function resolveConfig(raw, configDir) {
67
+ const theme = resolveTheme(raw, configDir);
68
+ const logo = resolveLogo(raw.logo);
69
+ const tabs = await resolveTabs(raw.navigation.tabs, configDir);
70
+ return {
71
+ name: raw.name ?? "",
72
+ theme,
73
+ logo,
74
+ favicon: raw.favicon,
75
+ repo: raw.repo,
76
+ codeSamples: raw.codeSamples ?? ["curl", "javascript", "python"],
77
+ tabs,
78
+ navbar: {
79
+ links: raw.navbar?.links ?? [],
80
+ primary: raw.navbar?.primary,
81
+ },
82
+ footer: {
83
+ links: raw.footer?.links ?? [],
84
+ },
85
+ };
86
+ }
87
+ const VALID_PRESETS = ["default", "minimal", "api-first"];
88
+ function resolveTheme(raw, configDir) {
89
+ const preset = raw.theme?.preset ?? "default";
90
+ if (!VALID_PRESETS.includes(preset)) {
91
+ throw new Error(`Invalid theme preset "${preset}". Must be one of: ${VALID_PRESETS.join(", ")}`);
92
+ }
93
+ const rawColors = raw.theme?.colors;
94
+ const colors = rawColors
95
+ ? {
96
+ primary: hexToRgb(rawColors.primary),
97
+ light: rawColors.light ? hexToRgb(rawColors.light) : hexToRgb(rawColors.primary),
98
+ dark: rawColors.dark ? hexToRgb(rawColors.dark) : hexToRgb(rawColors.primary),
99
+ }
100
+ : { ...DEFAULT_COLORS };
101
+ const userSans = raw.theme?.fonts?.sans;
102
+ const userMono = raw.theme?.fonts?.mono;
103
+ const fonts = {
104
+ sans: userSans
105
+ ? `'${userSans}', -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif`
106
+ : DEFAULT_FONTS.sans,
107
+ mono: userMono
108
+ ? `'${userMono}', 'SF Mono', 'Fira Code', Consolas, monospace`
109
+ : DEFAULT_FONTS.mono,
110
+ };
111
+ const layout = {
112
+ sidebar: raw.theme?.layout?.sidebar ?? DEFAULT_LAYOUT.sidebar,
113
+ toc: raw.theme?.layout?.toc ?? DEFAULT_LAYOUT.toc,
114
+ content: raw.theme?.layout?.content ?? DEFAULT_LAYOUT.content,
115
+ };
116
+ const css = (raw.theme?.css ?? []).map(p => resolve(configDir, p));
117
+ return { preset, colors, fonts, layout, css };
118
+ }
119
+ function resolveLogo(logo) {
120
+ if (!logo)
121
+ return undefined;
122
+ if (typeof logo === "string")
123
+ return { light: logo };
124
+ return { light: logo.light, dark: logo.dark, href: logo.href };
125
+ }
126
+ async function resolveTabs(tabs, configDir) {
54
127
  const slugs = new Set();
128
+ const resolved = [];
55
129
  for (const tab of tabs) {
56
- // Required fields
57
- if (!tab.label)
58
- throw new Error(`Navigation tab missing "label"`);
59
- if (!tab.slug)
60
- throw new Error(`Navigation tab "${tab.label}" missing "slug"`);
61
- // Unique slugs
62
- if (slugs.has(tab.slug)) {
63
- throw new Error(`Duplicate navigation tab slug "${tab.slug}"`);
130
+ if (!tab.tab)
131
+ throw new Error("Tab missing \"tab\" name");
132
+ const slug = slugify(tab.tab);
133
+ if (slugs.has(slug))
134
+ throw new Error(`Duplicate tab slug "${slug}" (from "${tab.tab}")`);
135
+ slugs.add(slug);
136
+ const sources = [tab.openapi, tab.groups, tab.doxygen].filter(Boolean).length;
137
+ if (sources > 1) {
138
+ throw new Error(`Tab "${tab.tab}" has multiple sources; use only one of "openapi", "groups", or "doxygen"`);
64
139
  }
65
- slugs.add(tab.slug);
66
- // Mutually exclusive: spec or groups, not both
67
- if (tab.spec && tab.groups) {
68
- throw new Error(`Tab "${tab.label}" has both "spec" and "groups"; use one or the other`);
140
+ if (sources === 0) {
141
+ throw new Error(`Tab "${tab.tab}" needs one of "openapi", "groups", or "doxygen"`);
69
142
  }
70
- if (!tab.spec && !tab.groups) {
71
- throw new Error(`Tab "${tab.label}" needs either "spec" or "groups"`);
143
+ if (tab.openapi) {
144
+ const absPath = resolve(configDir, tab.openapi);
145
+ await assertExists(absPath, `OpenAPI spec "${tab.openapi}" in tab "${tab.tab}"`);
146
+ resolved.push({ label: tab.tab, slug, openapi: absPath });
72
147
  }
73
- // Validate spec file exists
74
- if (tab.spec) {
75
- const specPath = resolve(configDir, tab.spec);
76
- await assertFileExists(specPath, `Spec file "${tab.spec}" in tab "${tab.label}"`);
148
+ else if (tab.doxygen) {
149
+ const absXml = resolve(configDir, tab.doxygen.xml);
150
+ await assertExists(absXml, `Doxygen XML directory "${tab.doxygen.xml}" in tab "${tab.tab}"`);
151
+ resolved.push({
152
+ label: tab.tab,
153
+ slug,
154
+ doxygen: {
155
+ xml: absXml,
156
+ language: tab.doxygen.language ?? "cpp",
157
+ groups: tab.doxygen.groups ?? false,
158
+ },
159
+ });
77
160
  }
78
- // Validate page files exist
79
- if (tab.groups) {
80
- for (const group of tab.groups) {
81
- if (!group.label)
82
- throw new Error(`Navigation group missing "label" in tab "${tab.label}"`);
83
- if (!Array.isArray(group.pages) || group.pages.length === 0) {
84
- throw new Error(`Navigation group "${group.label}" in tab "${tab.label}" has no pages`);
85
- }
86
- for (const pagePath of group.pages) {
87
- const fullPath = resolve(configDir, pagePath);
88
- await assertFileExists(fullPath, `Page "${pagePath}" in group "${group.label}"`);
89
- }
161
+ else {
162
+ const groups = await resolveGroups(tab.groups, tab.tab, configDir);
163
+ resolved.push({ label: tab.tab, slug, groups });
164
+ }
165
+ }
166
+ return resolved;
167
+ }
168
+ async function resolveGroups(groups, tabName, configDir) {
169
+ const resolved = [];
170
+ for (const group of groups) {
171
+ if (!group.group)
172
+ throw new Error(`Group missing "group" name in tab "${tabName}"`);
173
+ if (!group.pages?.length)
174
+ throw new Error(`Group "${group.group}" in tab "${tabName}" has no pages`);
175
+ const pages = [];
176
+ for (const pageSlug of group.pages) {
177
+ if (pageSlug.includes("*")) {
178
+ const expanded = await expandGlob(pageSlug, configDir);
179
+ pages.push(...expanded);
180
+ }
181
+ else {
182
+ const absPath = await resolvePagePath(pageSlug, configDir);
183
+ pages.push(absPath);
90
184
  }
91
185
  }
186
+ resolved.push({ label: group.group, pages });
187
+ }
188
+ return resolved;
189
+ }
190
+ /**
191
+ * Expand a simple glob pattern like "doc/api-*" into matching .md/.mdx files.
192
+ * Supports trailing * only (e.g. "doc/api-*", "guides/*").
193
+ */
194
+ async function expandGlob(pattern, configDir) {
195
+ const absPattern = resolve(configDir, pattern);
196
+ const dir = dirname(absPattern);
197
+ const prefix = basename(absPattern).replace("*", "");
198
+ try {
199
+ const entries = await readdir(dir);
200
+ const matches = entries
201
+ .filter((f) => {
202
+ const ext = extname(f);
203
+ if (ext !== ".md" && ext !== ".mdx")
204
+ return false;
205
+ const name = basename(f, ext);
206
+ return prefix ? name.startsWith(prefix) : true;
207
+ })
208
+ .sort()
209
+ .map((f) => resolve(dir, f));
210
+ if (!matches.length) {
211
+ throw new Error(`Glob "${pattern}" matched no files in ${dir}`);
212
+ }
213
+ return matches;
214
+ }
215
+ catch (err) {
216
+ if (err.code === "ENOENT") {
217
+ throw new Error(`Glob directory not found: ${dir}`);
218
+ }
219
+ throw err;
92
220
  }
93
221
  }
94
- async function assertFileExists(filePath, label) {
222
+ async function resolvePagePath(slug, configDir) {
223
+ for (const ext of [".md", ".mdx"]) {
224
+ const candidate = resolve(configDir, `${slug}${ext}`);
225
+ try {
226
+ await access(candidate);
227
+ return candidate;
228
+ }
229
+ catch { /* try next */ }
230
+ }
231
+ throw new Error(`Page "${slug}" not found (tried ${slug}.md, ${slug}.mdx in ${configDir})`);
232
+ }
233
+ // ---------------------------------------------------------------------------
234
+ // Utilities
235
+ // ---------------------------------------------------------------------------
236
+ export function slugify(name) {
237
+ return name.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "");
238
+ }
239
+ export function hexToRgb(hex) {
240
+ const h = hex.replace("#", "");
241
+ if (h.length !== 6)
242
+ throw new Error(`Invalid hex color: "${hex}"`);
243
+ const r = parseInt(h.slice(0, 2), 16);
244
+ const g = parseInt(h.slice(2, 4), 16);
245
+ const b = parseInt(h.slice(4, 6), 16);
246
+ return `${r} ${g} ${b}`;
247
+ }
248
+ async function assertExists(filePath, label) {
95
249
  try {
96
250
  await access(filePath);
97
251
  }
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { ResolvedDoxygenConfig } from "../config.js";
2
+ import type { MarkdownPage } from "./markdown-loader.js";
3
+ import type { SiteTab } from "./navigation.js";
4
+ export interface DoxygenResult {
5
+ pages: Map<string, MarkdownPage>;
6
+ navTab: SiteTab;
7
+ }
8
+ export declare function loadDoxygenTab(config: ResolvedDoxygenConfig, tabSlug: string, tabLabel: string): Promise<DoxygenResult>;
9
+ //# sourceMappingURL=doxygen-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doxygen-loader.d.ts","sourceRoot":"","sources":["../../src/core/doxygen-loader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAE1D,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,CAiExB"}
@@ -0,0 +1,68 @@
1
+ import { generate } from "moxygen";
2
+ import { renderMarkdown, extractHeadings } from "../utils/markdown.js";
3
+ export async function loadDoxygenTab(config, tabSlug, tabLabel) {
4
+ const generated = await generate({
5
+ directory: config.xml,
6
+ language: config.language,
7
+ quiet: true,
8
+ });
9
+ const pages = new Map();
10
+ const groupMap = new Map();
11
+ for (const page of generated) {
12
+ if (!page.markdown.trim())
13
+ continue;
14
+ const html = renderMarkdown(page.markdown);
15
+ const headings = extractHeadings(page.markdown);
16
+ pages.set(page.slug, {
17
+ title: page.title,
18
+ description: page.description,
19
+ slug: page.slug,
20
+ html,
21
+ headings,
22
+ sourcePath: config.xml,
23
+ });
24
+ // Group by the last segment of namespace (e.g. "icy::http" -> "http")
25
+ const groupKey = page.module ?? lastSegment(page.namespace) ?? "API";
26
+ if (!groupMap.has(groupKey)) {
27
+ groupMap.set(groupKey, []);
28
+ }
29
+ groupMap.get(groupKey).push({ slug: page.slug, title: page.title, kind: page.kind });
30
+ }
31
+ // Build navigation: namespace index pages first, then classes alphabetically
32
+ const groups = [];
33
+ for (const [label, items] of groupMap) {
34
+ const sorted = items.sort((a, b) => {
35
+ if (a.kind === "namespace" && b.kind !== "namespace")
36
+ return -1;
37
+ if (a.kind !== "namespace" && b.kind === "namespace")
38
+ return 1;
39
+ return a.title.localeCompare(b.title);
40
+ });
41
+ groups.push({
42
+ label,
43
+ items: sorted.map((p) => ({
44
+ label: p.title,
45
+ href: `${tabSlug}/${p.slug}.html`,
46
+ id: p.slug,
47
+ })),
48
+ });
49
+ }
50
+ const firstItem = groups[0]?.items[0];
51
+ return {
52
+ pages,
53
+ navTab: {
54
+ label: tabLabel,
55
+ slug: tabSlug,
56
+ href: firstItem?.href ?? `${tabSlug}/`,
57
+ kind: "docs",
58
+ groups,
59
+ },
60
+ };
61
+ }
62
+ function lastSegment(name) {
63
+ if (!name)
64
+ return undefined;
65
+ const parts = name.split("::");
66
+ return parts[parts.length - 1] || name;
67
+ }
68
+ //# sourceMappingURL=doxygen-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doxygen-loader.js","sourceRoot":"","sources":["../../src/core/doxygen-loader.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { type PageHeading } from "../utils/markdown.js";
1
2
  export interface MarkdownPage {
2
3
  /** Page title from frontmatter */
3
4
  title: string;
@@ -12,11 +13,7 @@ export interface MarkdownPage {
12
13
  /** Original file path (for error messages and dev server watching) */
13
14
  sourcePath: string;
14
15
  }
15
- export interface PageHeading {
16
- level: 2 | 3;
17
- text: string;
18
- id: string;
19
- }
16
+ export type { PageHeading } from "../utils/markdown.js";
20
17
  /**
21
18
  * Load a single markdown file and return a MarkdownPage.
22
19
  */
@@ -1 +1 @@
1
- {"version":3,"file":"markdown-loader.d.ts","sourceRoot":"","sources":["../../src/core/markdown-loader.ts"],"names":[],"mappings":"AAWA,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,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ;AA0DD;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,YAAY,CAAC,CAYvB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAErD"}
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;AAkTxD;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,YAAY,CAAC,CAavB;AAUD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAErD"}