sourcey 2.0.2

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 (191) hide show
  1. package/LICENSE +23 -0
  2. package/README.md +254 -0
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +197 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/client/copy.js +21 -0
  8. package/dist/client/index.d.ts +7 -0
  9. package/dist/client/index.d.ts.map +1 -0
  10. package/dist/client/index.js +8 -0
  11. package/dist/client/index.js.map +1 -0
  12. package/dist/client/scroll-tracker.js +88 -0
  13. package/dist/client/search.js +164 -0
  14. package/dist/client/sidebar.js +54 -0
  15. package/dist/client/tabs.js +51 -0
  16. package/dist/client/theme-toggle.js +36 -0
  17. package/dist/components/App.d.ts +15 -0
  18. package/dist/components/App.d.ts.map +1 -0
  19. package/dist/components/App.js +13 -0
  20. package/dist/components/App.js.map +1 -0
  21. package/dist/components/layout/Head.d.ts +2 -0
  22. package/dist/components/layout/Head.d.ts.map +1 -0
  23. package/dist/components/layout/Head.js +29 -0
  24. package/dist/components/layout/Head.js.map +1 -0
  25. package/dist/components/layout/Header.d.ts +13 -0
  26. package/dist/components/layout/Header.d.ts.map +1 -0
  27. package/dist/components/layout/Header.js +38 -0
  28. package/dist/components/layout/Header.js.map +1 -0
  29. package/dist/components/layout/Page.d.ts +2 -0
  30. package/dist/components/layout/Page.d.ts.map +1 -0
  31. package/dist/components/layout/Page.js +29 -0
  32. package/dist/components/layout/Page.js.map +1 -0
  33. package/dist/components/layout/Sidebar.d.ts +9 -0
  34. package/dist/components/layout/Sidebar.d.ts.map +1 -0
  35. package/dist/components/layout/Sidebar.js +41 -0
  36. package/dist/components/layout/Sidebar.js.map +1 -0
  37. package/dist/components/layout/TableOfContents.d.ts +10 -0
  38. package/dist/components/layout/TableOfContents.d.ts.map +1 -0
  39. package/dist/components/layout/TableOfContents.js +12 -0
  40. package/dist/components/layout/TableOfContents.js.map +1 -0
  41. package/dist/components/openapi/CodeSamples.d.ts +11 -0
  42. package/dist/components/openapi/CodeSamples.d.ts.map +1 -0
  43. package/dist/components/openapi/CodeSamples.js +16 -0
  44. package/dist/components/openapi/CodeSamples.js.map +1 -0
  45. package/dist/components/openapi/Definition.d.ts +11 -0
  46. package/dist/components/openapi/Definition.d.ts.map +1 -0
  47. package/dist/components/openapi/Definition.js +12 -0
  48. package/dist/components/openapi/Definition.js.map +1 -0
  49. package/dist/components/openapi/EndpointBar.d.ts +12 -0
  50. package/dist/components/openapi/EndpointBar.d.ts.map +1 -0
  51. package/dist/components/openapi/EndpointBar.js +22 -0
  52. package/dist/components/openapi/EndpointBar.js.map +1 -0
  53. package/dist/components/openapi/Introduction.d.ts +6 -0
  54. package/dist/components/openapi/Introduction.d.ts.map +1 -0
  55. package/dist/components/openapi/Introduction.js +14 -0
  56. package/dist/components/openapi/Introduction.js.map +1 -0
  57. package/dist/components/openapi/Operation.d.ts +13 -0
  58. package/dist/components/openapi/Operation.d.ts.map +1 -0
  59. package/dist/components/openapi/Operation.js +23 -0
  60. package/dist/components/openapi/Operation.js.map +1 -0
  61. package/dist/components/openapi/Parameters.d.ts +7 -0
  62. package/dist/components/openapi/Parameters.d.ts.map +1 -0
  63. package/dist/components/openapi/Parameters.js +10 -0
  64. package/dist/components/openapi/Parameters.js.map +1 -0
  65. package/dist/components/openapi/RequestBody.d.ts +17 -0
  66. package/dist/components/openapi/RequestBody.d.ts.map +1 -0
  67. package/dist/components/openapi/RequestBody.js +27 -0
  68. package/dist/components/openapi/RequestBody.js.map +1 -0
  69. package/dist/components/openapi/Responses.d.ts +14 -0
  70. package/dist/components/openapi/Responses.d.ts.map +1 -0
  71. package/dist/components/openapi/Responses.js +60 -0
  72. package/dist/components/openapi/Responses.js.map +1 -0
  73. package/dist/components/openapi/Security.d.ts +14 -0
  74. package/dist/components/openapi/Security.d.ts.map +1 -0
  75. package/dist/components/openapi/Security.js +32 -0
  76. package/dist/components/openapi/Security.js.map +1 -0
  77. package/dist/components/openapi/Tags.d.ts +8 -0
  78. package/dist/components/openapi/Tags.d.ts.map +1 -0
  79. package/dist/components/openapi/Tags.js +10 -0
  80. package/dist/components/openapi/Tags.js.map +1 -0
  81. package/dist/components/schema/ExampleView.d.ts +11 -0
  82. package/dist/components/schema/ExampleView.d.ts.map +1 -0
  83. package/dist/components/schema/ExampleView.js +15 -0
  84. package/dist/components/schema/ExampleView.js.map +1 -0
  85. package/dist/components/schema/SchemaDatatype.d.ts +11 -0
  86. package/dist/components/schema/SchemaDatatype.d.ts.map +1 -0
  87. package/dist/components/schema/SchemaDatatype.js +36 -0
  88. package/dist/components/schema/SchemaDatatype.js.map +1 -0
  89. package/dist/components/schema/SchemaView.d.ts +14 -0
  90. package/dist/components/schema/SchemaView.d.ts.map +1 -0
  91. package/dist/components/schema/SchemaView.js +44 -0
  92. package/dist/components/schema/SchemaView.js.map +1 -0
  93. package/dist/components/ui/Badge.d.ts +11 -0
  94. package/dist/components/ui/Badge.d.ts.map +1 -0
  95. package/dist/components/ui/Badge.js +14 -0
  96. package/dist/components/ui/Badge.js.map +1 -0
  97. package/dist/components/ui/Markdown.d.ts +8 -0
  98. package/dist/components/ui/Markdown.d.ts.map +1 -0
  99. package/dist/components/ui/Markdown.js +13 -0
  100. package/dist/components/ui/Markdown.js.map +1 -0
  101. package/dist/components/ui/SectionLabel.d.ts +10 -0
  102. package/dist/components/ui/SectionLabel.d.ts.map +1 -0
  103. package/dist/components/ui/SectionLabel.js +9 -0
  104. package/dist/components/ui/SectionLabel.js.map +1 -0
  105. package/dist/config.d.ts +46 -0
  106. package/dist/config.d.ts.map +1 -0
  107. package/dist/config.js +102 -0
  108. package/dist/config.js.map +1 -0
  109. package/dist/core/converter.d.ts +9 -0
  110. package/dist/core/converter.d.ts.map +1 -0
  111. package/dist/core/converter.js +29 -0
  112. package/dist/core/converter.js.map +1 -0
  113. package/dist/core/loader.d.ts +7 -0
  114. package/dist/core/loader.d.ts.map +1 -0
  115. package/dist/core/loader.js +92 -0
  116. package/dist/core/loader.js.map +1 -0
  117. package/dist/core/markdown-loader.d.ts +29 -0
  118. package/dist/core/markdown-loader.d.ts.map +1 -0
  119. package/dist/core/markdown-loader.js +65 -0
  120. package/dist/core/markdown-loader.js.map +1 -0
  121. package/dist/core/navigation.d.ts +51 -0
  122. package/dist/core/navigation.d.ts.map +1 -0
  123. package/dist/core/navigation.js +108 -0
  124. package/dist/core/navigation.js.map +1 -0
  125. package/dist/core/normalizer.d.ts +7 -0
  126. package/dist/core/normalizer.d.ts.map +1 -0
  127. package/dist/core/normalizer.js +472 -0
  128. package/dist/core/normalizer.js.map +1 -0
  129. package/dist/core/parser.d.ts +10 -0
  130. package/dist/core/parser.d.ts.map +1 -0
  131. package/dist/core/parser.js +34 -0
  132. package/dist/core/parser.js.map +1 -0
  133. package/dist/core/search-indexer.d.ts +25 -0
  134. package/dist/core/search-indexer.d.ts.map +1 -0
  135. package/dist/core/search-indexer.js +72 -0
  136. package/dist/core/search-indexer.js.map +1 -0
  137. package/dist/core/types.d.ts +236 -0
  138. package/dist/core/types.d.ts.map +1 -0
  139. package/dist/core/types.js +7 -0
  140. package/dist/core/types.js.map +1 -0
  141. package/dist/dev-server.d.ts +17 -0
  142. package/dist/dev-server.d.ts.map +1 -0
  143. package/dist/dev-server.js +202 -0
  144. package/dist/dev-server.js.map +1 -0
  145. package/dist/index.d.ts +62 -0
  146. package/dist/index.d.ts.map +1 -0
  147. package/dist/index.js +166 -0
  148. package/dist/index.js.map +1 -0
  149. package/dist/renderer/context.d.ts +46 -0
  150. package/dist/renderer/context.d.ts.map +1 -0
  151. package/dist/renderer/context.js +22 -0
  152. package/dist/renderer/context.js.map +1 -0
  153. package/dist/renderer/html-builder.d.ts +37 -0
  154. package/dist/renderer/html-builder.d.ts.map +1 -0
  155. package/dist/renderer/html-builder.js +87 -0
  156. package/dist/renderer/html-builder.js.map +1 -0
  157. package/dist/renderer/static-renderer.d.ts +10 -0
  158. package/dist/renderer/static-renderer.d.ts.map +1 -0
  159. package/dist/renderer/static-renderer.js +17 -0
  160. package/dist/renderer/static-renderer.js.map +1 -0
  161. package/dist/themes/default/main.css +61 -0
  162. package/dist/themes/default/sourcey.css +425 -0
  163. package/dist/utils/code-samples.d.ts +8 -0
  164. package/dist/utils/code-samples.d.ts.map +1 -0
  165. package/dist/utils/code-samples.js +84 -0
  166. package/dist/utils/code-samples.js.map +1 -0
  167. package/dist/utils/example-generator.d.ts +12 -0
  168. package/dist/utils/example-generator.d.ts.map +1 -0
  169. package/dist/utils/example-generator.js +123 -0
  170. package/dist/utils/example-generator.js.map +1 -0
  171. package/dist/utils/highlighter.d.ts +10 -0
  172. package/dist/utils/highlighter.d.ts.map +1 -0
  173. package/dist/utils/highlighter.js +51 -0
  174. package/dist/utils/highlighter.js.map +1 -0
  175. package/dist/utils/html-id.d.ts +6 -0
  176. package/dist/utils/html-id.d.ts.map +1 -0
  177. package/dist/utils/html-id.js +11 -0
  178. package/dist/utils/html-id.js.map +1 -0
  179. package/dist/utils/http.d.ts +14 -0
  180. package/dist/utils/http.d.ts.map +1 -0
  181. package/dist/utils/http.js +97 -0
  182. package/dist/utils/http.js.map +1 -0
  183. package/dist/utils/markdown.d.ts +9 -0
  184. package/dist/utils/markdown.d.ts.map +1 -0
  185. package/dist/utils/markdown.js +18 -0
  186. package/dist/utils/markdown.js.map +1 -0
  187. package/dist/vite-plugin.d.ts +16 -0
  188. package/dist/vite-plugin.d.ts.map +1 -0
  189. package/dist/vite-plugin.js +92 -0
  190. package/dist/vite-plugin.js.map +1 -0
  191. package/package.json +78 -0
@@ -0,0 +1,202 @@
1
+ import { createServer as createViteServer } from "vite";
2
+ import { resolve, dirname } from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { loadConfig, hasNavigation, configFromSpec } from "./config.js";
5
+ import { loadSpec } from "./core/loader.js";
6
+ import { convertToOpenApi3 } from "./core/converter.js";
7
+ import { parseSpec } from "./core/parser.js";
8
+ import { normalizeSpec } from "./core/normalizer.js";
9
+ import { buildNavFromSpec, buildNavFromPages, buildSiteNavigation, withActivePage } from "./core/navigation.js";
10
+ import { loadMarkdownPage, slugFromPath } from "./core/markdown-loader.js";
11
+ import { buildSearchIndex } from "./core/search-indexer.js";
12
+ import { sourceyPlugin } from "./vite-plugin.js";
13
+ import tailwindcss from "@tailwindcss/vite";
14
+ import preact from "@preact/preset-vite";
15
+ const __dirname = dirname(fileURLToPath(import.meta.url));
16
+ /**
17
+ * Start a Vite-powered dev server for Sourcey.
18
+ *
19
+ * Uses Vite's ssrLoadModule() to render TSX components from source,
20
+ * so component changes are reflected instantly without a build step.
21
+ * CSS uses native Vite HMR. Spec/markdown changes trigger full reload.
22
+ */
23
+ export async function startDevServer(options) {
24
+ const { specSource, port, logo, favicon } = options;
25
+ // Resolve config
26
+ let config = await loadConfig();
27
+ if (specSource && !hasNavigation(config)) {
28
+ config = configFromSpec(specSource, { logo, favicon });
29
+ }
30
+ else if (!hasNavigation(config) && !specSource) {
31
+ console.error("\nError: No spec file provided and no sourcey.json with navigation found.\n");
32
+ process.exit(1);
33
+ }
34
+ if (logo)
35
+ config.logo = logo;
36
+ if (favicon)
37
+ config.favicon = favicon;
38
+ const tabs = config.navigation;
39
+ // Collect watch paths
40
+ const watchPaths = [];
41
+ for (const tab of tabs) {
42
+ if (tab.spec)
43
+ watchPaths.push(resolve(tab.spec));
44
+ if (tab.groups) {
45
+ for (const group of tab.groups) {
46
+ for (const pagePath of group.pages) {
47
+ watchPaths.push(resolve(pagePath));
48
+ }
49
+ }
50
+ }
51
+ }
52
+ // Resolve source paths for Vite dev serving
53
+ const projectRoot = resolve(__dirname, "..");
54
+ const tailwindCssPath = resolve(projectRoot, "src/themes/default/main.css");
55
+ const sourceyCssPath = resolve(projectRoot, "src/themes/default/sourcey.css");
56
+ const clientEntry = resolve(projectRoot, "src/client/index.ts");
57
+ // Path to the SSR entry point (source TSX, loaded via Vite)
58
+ const ssrRendererPath = resolve(projectRoot, "src/renderer/static-renderer.ts");
59
+ // We'll store the vite server reference so the render function can use ssrLoadModule
60
+ let vite;
61
+ // SSR render function: loads the renderer from source via Vite on every call
62
+ async function render(url) {
63
+ const configDir = process.cwd();
64
+ // Load the renderer module from source TSX via Vite's SSR transform
65
+ const { renderPage } = await vite.ssrLoadModule(ssrRendererPath);
66
+ // Build site data (specs, pages, navigation)
67
+ const { siteTabs, primarySpec, pageMap } = await loadSiteData(tabs, configDir, config);
68
+ const navigation = buildSiteNavigation(siteTabs);
69
+ // Normalise URL to match page keys
70
+ let pagePath = url.replace(/^\//, "").replace(/\/$/, "");
71
+ if (!pagePath || pagePath === "index.html") {
72
+ const firstKey = pageMap.keys().next().value;
73
+ if (!firstKey)
74
+ return null;
75
+ pagePath = firstKey;
76
+ }
77
+ if (!pagePath.endsWith(".html")) {
78
+ pagePath += "/index.html";
79
+ }
80
+ const pageData = pageMap.get(pagePath);
81
+ if (!pageData)
82
+ return null;
83
+ const activeNav = withActivePage(navigation, pageData.tabSlug, pageData.pageSlug);
84
+ const renderOptions = { embeddable: false, singleFile: false, assetBase: "/" };
85
+ let html = renderPage(pageData.spec, renderOptions, activeNav, pageData.currentPage);
86
+ // Rewrite asset paths for Vite HMR
87
+ html = html.replace(/<link rel="stylesheet" href="[^"]*sourcey\.css"[^>]*\/>/, `<link rel="stylesheet" href="/@fs${tailwindCssPath}" />\n<link rel="stylesheet" href="/@fs${sourceyCssPath}" />`);
88
+ html = html.replace(/<script src="[^"]*sourcey\.js"[^>]*><\/script>/, `<script type="module" src="/@fs${clientEntry}"></script>`);
89
+ html = html.replace(/<script src="[^"]*sourcey\.js"[^>]*\/>/, `<script type="module" src="/@fs${clientEntry}"></script>`);
90
+ return html;
91
+ }
92
+ const viteConfig = {
93
+ root: process.cwd(),
94
+ server: {
95
+ port,
96
+ strictPort: true,
97
+ hmr: true,
98
+ },
99
+ plugins: [
100
+ preact(),
101
+ tailwindcss(),
102
+ sourceyPlugin({
103
+ watchPaths,
104
+ render,
105
+ searchIndex: () => buildSearchIndexForDev(config),
106
+ }),
107
+ ],
108
+ clearScreen: false,
109
+ logLevel: "warn",
110
+ optimizeDeps: {
111
+ exclude: ["sourcey"],
112
+ },
113
+ };
114
+ vite = await createViteServer(viteConfig);
115
+ await vite.listen();
116
+ console.log(`\n Sourcey dev server running at http://localhost:${port}`);
117
+ console.log(` Watching: ${watchPaths.length} content file${watchPaths.length === 1 ? "" : "s"} + components + CSS (HMR)`);
118
+ console.log(` Press Ctrl+C to stop\n`);
119
+ }
120
+ async function loadSiteData(tabs, configDir, config) {
121
+ const specsBySlug = new Map();
122
+ const siteTabs = [];
123
+ const pageMap = new Map();
124
+ for (const tabConfig of tabs) {
125
+ if (!tabConfig.spec)
126
+ continue;
127
+ const specPath = resolve(configDir, tabConfig.spec);
128
+ const loaded = await loadSpec(specPath);
129
+ const parsed = await parseSpec(loaded);
130
+ const openapi3 = await convertToOpenApi3(parsed);
131
+ const spec = normalizeSpec(openapi3);
132
+ if (config.logo)
133
+ spec.info.logo = config.logo;
134
+ if (config.favicon)
135
+ spec.info.favicon = config.favicon;
136
+ specsBySlug.set(tabConfig.slug, spec);
137
+ }
138
+ const primarySpec = specsBySlug.values().next().value ?? {
139
+ info: { title: "", version: "", description: "", logo: config.logo, favicon: config.favicon },
140
+ servers: [], tags: [], operations: [], schemas: {}, securitySchemes: {}, webhooks: [],
141
+ };
142
+ for (const tabConfig of tabs) {
143
+ if (tabConfig.spec) {
144
+ const spec = specsBySlug.get(tabConfig.slug);
145
+ const tab = buildNavFromSpec(spec, tabConfig.slug);
146
+ tab.label = tabConfig.label;
147
+ siteTabs.push(tab);
148
+ pageMap.set(`${tabConfig.slug}/index.html`, {
149
+ spec,
150
+ currentPage: { kind: "spec", spec },
151
+ tabSlug: tabConfig.slug,
152
+ pageSlug: "introduction",
153
+ });
154
+ }
155
+ else if (tabConfig.groups) {
156
+ const pagesByPath = new Map();
157
+ for (const group of tabConfig.groups) {
158
+ for (const pagePath of group.pages) {
159
+ const fullPath = resolve(configDir, pagePath);
160
+ const slug = slugFromPath(pagePath);
161
+ const page = await loadMarkdownPage(fullPath, slug);
162
+ pagesByPath.set(pagePath, page);
163
+ pageMap.set(`${tabConfig.slug}/${slug}.html`, {
164
+ spec: primarySpec,
165
+ currentPage: { kind: "markdown", markdown: page },
166
+ tabSlug: tabConfig.slug,
167
+ pageSlug: slug,
168
+ });
169
+ }
170
+ }
171
+ const tab = buildNavFromPages(tabConfig, pagesByPath);
172
+ siteTabs.push(tab);
173
+ }
174
+ }
175
+ return { siteTabs, primarySpec, pageMap };
176
+ }
177
+ async function buildSearchIndexForDev(config) {
178
+ const tabs = config.navigation;
179
+ const configDir = process.cwd();
180
+ const { siteTabs, pageMap } = await loadSiteData(tabs, configDir, config);
181
+ const navigation = buildSiteNavigation(siteTabs);
182
+ const specsBySlug = new Map();
183
+ const markdownPagesByTab = new Map();
184
+ for (const [, entry] of pageMap) {
185
+ if (entry.currentPage.kind === "spec") {
186
+ specsBySlug.set(entry.tabSlug, entry.spec);
187
+ }
188
+ }
189
+ for (const tabConfig of tabs) {
190
+ if (tabConfig.groups) {
191
+ const tabPages = [];
192
+ for (const [, entry] of pageMap) {
193
+ if (entry.tabSlug === tabConfig.slug && entry.currentPage.kind === "markdown") {
194
+ tabPages.push(entry.currentPage.markdown);
195
+ }
196
+ }
197
+ markdownPagesByTab.set(tabConfig.slug, tabPages);
198
+ }
199
+ }
200
+ return buildSearchIndex(specsBySlug, markdownPagesByTab, navigation);
201
+ }
202
+ //# sourceMappingURL=dev-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-server.js","sourceRoot":"","sources":["../src/dev-server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ import type { NormalizedSpec } from "./core/types.js";
2
+ import type { SourceyConfig } from "./config.js";
3
+ export interface ThemeOverrides {
4
+ /** CSS custom property overrides, e.g. { "--color-accent": "#e11d48" } */
5
+ [key: string]: string;
6
+ }
7
+ export interface BuildOptions {
8
+ /** Path or URL to the OpenAPI/Swagger spec file */
9
+ specSource: string;
10
+ /** Output directory (default: "dist") */
11
+ outputDir?: string;
12
+ /** Path to a custom logo file */
13
+ logo?: string;
14
+ /** Path to a custom favicon */
15
+ favicon?: string;
16
+ /** Generate embeddable output (no <html>/<body> wrapper) */
17
+ embeddable?: boolean;
18
+ /** Skip writing files to disk (useful for validation) */
19
+ skipWrite?: boolean;
20
+ /** CSS custom property overrides for theming */
21
+ themeOverrides?: ThemeOverrides;
22
+ }
23
+ export interface BuildResult {
24
+ /** The normalized spec that was processed */
25
+ spec: NormalizedSpec;
26
+ /** Output directory where files were written */
27
+ outputDir: string;
28
+ /** Number of pages generated */
29
+ pageCount: number;
30
+ }
31
+ /**
32
+ * Build API documentation from a single OpenAPI/Swagger spec.
33
+ * Wraps the spec in a single-tab site and renders through the modern layout.
34
+ */
35
+ export declare function buildDocs(options: BuildOptions): Promise<BuildResult>;
36
+ export interface SiteBuildOptions {
37
+ /** Path to directory containing sourcey.json (default: cwd) */
38
+ configDir?: string;
39
+ /** Output directory (default: "dist") */
40
+ outputDir?: string;
41
+ /** Pre-loaded config (skips loading from disk) */
42
+ config?: SourceyConfig;
43
+ /** Skip writing files to disk */
44
+ skipWrite?: boolean;
45
+ /** Generate embeddable output (no <html>/<body> wrapper) */
46
+ embeddable?: boolean;
47
+ }
48
+ export interface SiteBuildResult {
49
+ /** Output directory where files were written */
50
+ outputDir: string;
51
+ /** Number of pages generated */
52
+ pageCount: number;
53
+ /** @internal specs by tab slug, for buildDocs compat */
54
+ _specs?: Map<string, NormalizedSpec>;
55
+ }
56
+ /**
57
+ * Build a documentation site from a config.
58
+ * This is the single rendering path for all modes.
59
+ */
60
+ export declare function buildSiteDocs(options?: SiteBuildOptions): Promise<SiteBuildResult>;
61
+ export type { NormalizedSpec, NormalizedOperation, NormalizedTag, NormalizedSchema, NormalizedParameter, NormalizedRequestBody, NormalizedResponse, } from "./core/types.js";
62
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAiB,MAAM,aAAa,CAAC;AAQhE,MAAM,WAAW,cAAc;IAC7B,0EAA0E;IAC1E,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB;AAMD,MAAM,WAAW,YAAY;IAC3B,mDAAmD;IACnD,UAAU,EAAE,MAAM,CAAC;IACnB,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iCAAiC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+BAA+B;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4DAA4D;IAC5D,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,yDAAyD;IACzD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gDAAgD;IAChD,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAED,MAAM,WAAW,WAAW;IAC1B,6CAA6C;IAC7C,IAAI,EAAE,cAAc,CAAC;IACrB,gDAAgD;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAiB3E;AAMD,MAAM,WAAW,gBAAgB;IAC/B,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,iCAAiC;IACjC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,4DAA4D;IAC5D,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,gDAAgD;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,MAAM,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CACtC;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC,CAwG5F;AAwBD,YAAY,EACV,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,iBAAiB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,166 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { resolve, extname } from "node:path";
3
+ import { loadSpec } from "./core/loader.js";
4
+ import { convertToOpenApi3 } from "./core/converter.js";
5
+ import { parseSpec } from "./core/parser.js";
6
+ import { normalizeSpec } from "./core/normalizer.js";
7
+ import { buildSite as buildSiteHtml } from "./renderer/html-builder.js";
8
+ import { loadConfig, hasNavigation, configFromSpec } from "./config.js";
9
+ import { loadMarkdownPage, slugFromPath } from "./core/markdown-loader.js";
10
+ import { buildNavFromSpec, buildNavFromPages, buildSiteNavigation } from "./core/navigation.js";
11
+ import { buildSearchIndex } from "./core/search-indexer.js";
12
+ /**
13
+ * Build API documentation from a single OpenAPI/Swagger spec.
14
+ * Wraps the spec in a single-tab site and renders through the modern layout.
15
+ */
16
+ export async function buildDocs(options) {
17
+ const config = configFromSpec(options.specSource, {
18
+ logo: options.logo,
19
+ favicon: options.favicon,
20
+ });
21
+ config.theme = options.themeOverrides;
22
+ const result = await buildSiteDocs({
23
+ config,
24
+ outputDir: options.outputDir,
25
+ skipWrite: options.skipWrite,
26
+ embeddable: options.embeddable,
27
+ });
28
+ // Find the spec that was loaded for backward compat
29
+ const spec = result._specs?.values().next().value ?? createMinimalSpec(config);
30
+ return { spec, outputDir: result.outputDir, pageCount: result.pageCount };
31
+ }
32
+ /**
33
+ * Build a documentation site from a config.
34
+ * This is the single rendering path for all modes.
35
+ */
36
+ export async function buildSiteDocs(options = {}) {
37
+ const configDir = resolve(options.configDir ?? process.cwd());
38
+ const outputDir = resolve(options.outputDir ?? "dist");
39
+ // Load config from disk or use provided
40
+ const config = options.config ?? await loadConfig(configDir);
41
+ if (!hasNavigation(config)) {
42
+ throw new Error("No navigation config found. Provide a sourcey.json with navigation, or pass a spec file.");
43
+ }
44
+ const tabs = config.navigation;
45
+ const sitePages = [];
46
+ const siteTabs = [];
47
+ // Load all specs
48
+ const specsBySlug = new Map();
49
+ for (const tabConfig of tabs) {
50
+ if (!tabConfig.spec)
51
+ continue;
52
+ const specPath = resolve(configDir, tabConfig.spec);
53
+ const loaded = await loadSpec(specPath);
54
+ const parsed = await parseSpec(loaded);
55
+ const openapi3 = await convertToOpenApi3(parsed);
56
+ const spec = normalizeSpec(openapi3);
57
+ if (config.logo) {
58
+ spec.info.logo = await resolveAssetUrl(config.logo);
59
+ }
60
+ if (config.favicon) {
61
+ spec.info.favicon = config.favicon;
62
+ }
63
+ specsBySlug.set(tabConfig.slug, spec);
64
+ }
65
+ // Primary spec for SpecContext on markdown pages
66
+ const primarySpec = specsBySlug.values().next().value
67
+ ?? createMinimalSpec(config);
68
+ // Process all tabs, building pages and navigation
69
+ for (const tabConfig of tabs) {
70
+ if (tabConfig.spec) {
71
+ const spec = specsBySlug.get(tabConfig.slug);
72
+ const tab = buildNavFromSpec(spec, tabConfig.slug);
73
+ tab.label = tabConfig.label;
74
+ siteTabs.push(tab);
75
+ sitePages.push({
76
+ outputPath: `${tabConfig.slug}/index.html`,
77
+ currentPage: { kind: "spec", spec },
78
+ spec,
79
+ tabSlug: tabConfig.slug,
80
+ pageSlug: "introduction",
81
+ });
82
+ }
83
+ else if (tabConfig.groups) {
84
+ const pagesByPath = new Map();
85
+ for (const group of tabConfig.groups) {
86
+ for (const pagePath of group.pages) {
87
+ const fullPath = resolve(configDir, pagePath);
88
+ const slug = slugFromPath(pagePath);
89
+ const page = await loadMarkdownPage(fullPath, slug);
90
+ pagesByPath.set(pagePath, page);
91
+ sitePages.push({
92
+ outputPath: `${tabConfig.slug}/${slug}.html`,
93
+ currentPage: { kind: "markdown", markdown: page },
94
+ spec: primarySpec,
95
+ tabSlug: tabConfig.slug,
96
+ pageSlug: slug,
97
+ });
98
+ }
99
+ }
100
+ const tab = buildNavFromPages(tabConfig, pagesByPath);
101
+ siteTabs.push(tab);
102
+ }
103
+ }
104
+ // Build navigation
105
+ const navigation = buildSiteNavigation(siteTabs);
106
+ // Build search index
107
+ const markdownPagesByTab = new Map();
108
+ for (const tabConfig of tabs) {
109
+ if (tabConfig.groups) {
110
+ const tabPages = sitePages
111
+ .filter((p) => p.tabSlug === tabConfig.slug && p.currentPage.kind === "markdown")
112
+ .map((p) => p.currentPage.markdown);
113
+ markdownPagesByTab.set(tabConfig.slug, tabPages);
114
+ }
115
+ }
116
+ const searchIndex = buildSearchIndex(specsBySlug, markdownPagesByTab, navigation);
117
+ // Render all pages
118
+ if (!options.skipWrite) {
119
+ await buildSiteHtml(sitePages, navigation, outputDir, {
120
+ themeOverrides: config.theme,
121
+ searchIndex,
122
+ embeddable: options.embeddable,
123
+ });
124
+ }
125
+ return { outputDir, pageCount: sitePages.length, _specs: specsBySlug };
126
+ }
127
+ /**
128
+ * Create a minimal NormalizedSpec for markdown-only sites.
129
+ */
130
+ function createMinimalSpec(config) {
131
+ return {
132
+ info: {
133
+ title: "",
134
+ version: "",
135
+ description: "",
136
+ logo: config.logo,
137
+ favicon: config.favicon,
138
+ },
139
+ servers: [],
140
+ tags: [],
141
+ operations: [],
142
+ schemas: {},
143
+ securitySchemes: {},
144
+ webhooks: [],
145
+ };
146
+ }
147
+ const MIME_TYPES = {
148
+ ".png": "image/png",
149
+ ".jpg": "image/jpeg",
150
+ ".jpeg": "image/jpeg",
151
+ ".gif": "image/gif",
152
+ ".svg": "image/svg+xml",
153
+ ".webp": "image/webp",
154
+ ".ico": "image/x-icon",
155
+ };
156
+ async function resolveAssetUrl(pathOrUrl) {
157
+ if (pathOrUrl.startsWith("http://") || pathOrUrl.startsWith("https://") || pathOrUrl.startsWith("data:")) {
158
+ return pathOrUrl;
159
+ }
160
+ const abs = resolve(pathOrUrl);
161
+ const ext = extname(abs).toLowerCase();
162
+ const mime = MIME_TYPES[ext] ?? "application/octet-stream";
163
+ const data = await readFile(abs);
164
+ return `data:${mime};base64,${data.toString("base64")}`;
165
+ }
166
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import type { NormalizedSpec } from "../core/types.js";
2
+ import type { SiteNavigation } from "../core/navigation.js";
3
+ import type { MarkdownPage } from "../core/markdown-loader.js";
4
+ /**
5
+ * Options that control rendering behavior.
6
+ */
7
+ export interface RenderOptions {
8
+ /** Whether to generate embeddable output (no html/body wrapper) */
9
+ embeddable: boolean;
10
+ /** Whether to inline all assets into a single file */
11
+ singleFile: boolean;
12
+ /** Base URL for assets (CSS, JS) */
13
+ assetBase: string;
14
+ }
15
+ /**
16
+ * Full context available to all components during rendering.
17
+ */
18
+ export interface RenderContext {
19
+ spec: NormalizedSpec;
20
+ options: RenderOptions;
21
+ }
22
+ /**
23
+ * What the current page is rendering.
24
+ */
25
+ export interface CurrentPage {
26
+ kind: "spec" | "markdown";
27
+ spec?: NormalizedSpec;
28
+ markdown?: MarkdownPage;
29
+ }
30
+ /**
31
+ * Preact context for passing spec data to deeply nested components.
32
+ */
33
+ export declare const SpecContext: import("preact").Context<NormalizedSpec>;
34
+ /**
35
+ * Preact context for render options.
36
+ */
37
+ export declare const OptionsContext: import("preact").Context<RenderOptions>;
38
+ /**
39
+ * Preact context for site-wide navigation.
40
+ */
41
+ export declare const NavigationContext: import("preact").Context<SiteNavigation>;
42
+ /**
43
+ * Preact context for the current page being rendered.
44
+ */
45
+ export declare const PageContext: import("preact").Context<CurrentPage>;
46
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/renderer/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,mEAAmE;IACnE,UAAU,EAAE,OAAO,CAAC;IACpB,sDAAsD;IACtD,UAAU,EAAE,OAAO,CAAC;IACpB,oCAAoC;IACpC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,EAAE,aAAa,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC;IAC1B,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,QAAQ,CAAC,EAAE,YAAY,CAAC;CACzB;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,0CAA+C,CAAC;AAExE;;GAEG;AACH,eAAO,MAAM,cAAc,yCAIzB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,iBAAiB,0CAA+C,CAAC;AAE9E;;GAEG;AACH,eAAO,MAAM,WAAW,uCAA4C,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { createContext } from "preact";
2
+ /**
3
+ * Preact context for passing spec data to deeply nested components.
4
+ */
5
+ export const SpecContext = createContext(null);
6
+ /**
7
+ * Preact context for render options.
8
+ */
9
+ export const OptionsContext = createContext({
10
+ embeddable: false,
11
+ singleFile: false,
12
+ assetBase: "",
13
+ });
14
+ /**
15
+ * Preact context for site-wide navigation.
16
+ */
17
+ export const NavigationContext = createContext(null);
18
+ /**
19
+ * Preact context for the current page being rendered.
20
+ */
21
+ export const PageContext = createContext(null);
22
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/renderer/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAkCvC;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAiB,IAAa,CAAC,CAAC;AAExE;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,aAAa,CAAgB;IACzD,UAAU,EAAE,KAAK;IACjB,UAAU,EAAE,KAAK;IACjB,SAAS,EAAE,EAAE;CACd,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,aAAa,CAAiB,IAAa,CAAC,CAAC;AAE9E;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAc,IAAa,CAAC,CAAC"}
@@ -0,0 +1,37 @@
1
+ import type { NormalizedSpec } from "../core/types.js";
2
+ import type { RenderOptions, CurrentPage } from "./context.js";
3
+ import type { SiteNavigation } from "../core/navigation.js";
4
+ export interface HtmlBuildOptions extends Partial<RenderOptions> {
5
+ /** CSS custom property overrides, e.g. { "--color-accent": "#e11d48" } */
6
+ themeOverrides?: Record<string, string>;
7
+ }
8
+ export interface BuildOutput {
9
+ /** Path to the generated index.html */
10
+ htmlPath: string;
11
+ /** Output directory */
12
+ outputDir: string;
13
+ }
14
+ /**
15
+ * A single page to be rendered in a site.
16
+ */
17
+ export interface SitePage {
18
+ /** Output path relative to site root, e.g. "guides/quickstart.html" */
19
+ outputPath: string;
20
+ /** What this page renders */
21
+ currentPage: CurrentPage;
22
+ /** The spec to provide via SpecContext (can be a stub for markdown-only pages) */
23
+ spec: NormalizedSpec;
24
+ /** Which tab this page belongs to */
25
+ tabSlug: string;
26
+ /** This page's unique slug for active-state matching */
27
+ pageSlug: string;
28
+ }
29
+ /**
30
+ * Build a documentation site.
31
+ * Renders each page as a standalone HTML file with shared navigation,
32
+ * plus shared CSS, JS, and search index.
33
+ */
34
+ export declare function buildSite(pages: SitePage[], navigation: SiteNavigation, outputDir: string, options?: HtmlBuildOptions & {
35
+ searchIndex?: string;
36
+ }): Promise<BuildOutput>;
37
+ //# sourceMappingURL=html-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html-builder.d.ts","sourceRoot":"","sources":["../../src/renderer/html-builder.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAK5D,MAAM,WAAW,gBAAiB,SAAQ,OAAO,CAAC,aAAa,CAAC;IAC9D,0EAA0E;IAC1E,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,WAAW;IAC1B,uCAAuC;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,uBAAuB;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,uEAAuE;IACvE,UAAU,EAAE,MAAM,CAAC;IACnB,6BAA6B;IAC7B,WAAW,EAAE,WAAW,CAAC;IACzB,kFAAkF;IAClF,IAAI,EAAE,cAAc,CAAC;IACrB,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,wDAAwD;IACxD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAsB,SAAS,CAC7B,KAAK,EAAE,QAAQ,EAAE,EACjB,UAAU,EAAE,cAAc,EAC1B,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,gBAAgB,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GACpD,OAAO,CAAC,WAAW,CAAC,CAyCtB"}