sourcey 3.5.1 → 3.5.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +82 -11
- package/dist/cli.js +122 -3
- package/dist/components/layout/Page.d.ts.map +1 -1
- package/dist/components/layout/Page.js +4 -1
- package/dist/config.d.ts +65 -3
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +42 -6
- package/dist/core/godoc-introspector.d.ts +26 -0
- package/dist/core/godoc-introspector.d.ts.map +1 -0
- package/dist/core/godoc-introspector.js +144 -0
- package/dist/core/godoc-loader.d.ts +34 -0
- package/dist/core/godoc-loader.d.ts.map +1 -0
- package/dist/core/godoc-loader.js +491 -0
- package/dist/core/godoc-types.d.ts +109 -0
- package/dist/core/godoc-types.d.ts.map +1 -0
- package/dist/core/godoc-types.js +8 -0
- package/dist/core/markdown-loader.d.ts +10 -0
- package/dist/core/markdown-loader.d.ts.map +1 -1
- package/dist/core/navigation.js +2 -2
- package/dist/core/search-indexer.d.ts.map +1 -1
- package/dist/core/search-indexer.js +13 -9
- package/dist/core/sourcey-godoc/cmd/sourcey-godoc/main.go +736 -0
- package/dist/core/sourcey-godoc/cmd/sourcey-godoc/site.go +497 -0
- package/dist/core/sourcey-godoc/cmd/sourcey-godoc/site_test.go +89 -0
- package/dist/core/sourcey-godoc/doc.go +11 -0
- package/dist/core/sourcey-godoc/go.mod +3 -0
- package/dist/dev-server.d.ts.map +1 -1
- package/dist/dev-server.js +52 -5
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -33
- package/dist/site-assembly.d.ts +3 -0
- package/dist/site-assembly.d.ts.map +1 -1
- package/dist/site-assembly.js +42 -11
- package/dist/site-url.d.ts.map +1 -1
- package/dist/site-url.js +3 -0
- package/dist/themes/default/sourcey.css +244 -0
- package/package.json +14 -4
package/README.md
CHANGED
|
@@ -2,11 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
> Your API docs shouldn't depend on someone else's SaaS.
|
|
4
4
|
|
|
5
|
-
Sourcey is an open source documentation platform. Point it at an OpenAPI spec, an MCP server,
|
|
5
|
+
Sourcey is an open source documentation platform. Point it at an OpenAPI spec, an MCP server, a Doxygen XML directory, or a Go module; add markdown guides; get a complete docs site. Static HTML you own; no dashboard, no monthly bill, no API calls to render your own documentation. Deploy anywhere.
|
|
6
6
|
|
|
7
7
|
[](https://www.npmjs.com/package/sourcey)
|
|
8
|
-
[](https://github.com/sourcey/sourcey/actions)
|
|
9
9
|
[](https://nodejs.org)
|
|
10
|
+
[](LICENSE)
|
|
11
|
+
[](https://pkg.go.dev/github.com/sourcey/sourcey/go/sourcey-godoc)
|
|
12
|
+
[](https://goreportcard.com/report/github.com/sourcey/sourcey/go/sourcey-godoc)
|
|
10
13
|
|
|
11
14
|
```bash
|
|
12
15
|
npx sourcey init
|
|
@@ -23,6 +26,7 @@ npx sourcey init
|
|
|
23
26
|
- **MCP server documentation**: tools, resources, prompts rendered as browsable reference with JSON-RPC, TypeScript, and Python code samples. Color-coded method types, annotation badges, connection config cards
|
|
24
27
|
- **Markdown guides with rich components**: steps, cards, accordions, syntax-highlighted code blocks; prose docs alongside your API reference
|
|
25
28
|
- **C++ and Doxygen**: feed Doxygen XML output, get modern searchable API docs. No new parser, no four-tool Breathe/Exhale/Sphinx pipeline
|
|
29
|
+
- **Go and godoc**: native package documentation extracted from Go source via the toolchain. Render Go modules as Sourcey tabs, generate standalone static Go docs sites, or commit `godoc.json` snapshots for JS-only docs hosts. No Doxygen detour
|
|
26
30
|
- **llms.txt generation**: auto-generate llms.txt and llms-full.txt alongside your HTML. Docs serve developers and AI agents from one build
|
|
27
31
|
- **TypeScript config**: `sourcey.config.ts` with `defineConfig()` autocomplete; theme, navbar, CTA buttons, footer
|
|
28
32
|
- **Theme presets**: default (sidebar + TOC), minimal (single column), api-first (Stripe-style three column); colors, fonts, layout dimensions, and custom CSS on top
|
|
@@ -41,26 +45,40 @@ npx sourcey init
|
|
|
41
45
|
| Zero JS shipped | Yes | No | No | No | No | No |
|
|
42
46
|
| MCP server docs | Native | No | No | No | No | No |
|
|
43
47
|
| Doxygen / C++ docs | Native | No | No | No | No | No |
|
|
48
|
+
| godoc / Go docs | Native | No | No | No | No | No |
|
|
44
49
|
| Config format | TypeScript | YAML | GUI | JSON | YAML | GUI |
|
|
45
|
-
| Local preview | Vite SSR | Local |
|
|
50
|
+
| Local preview | Vite SSR | Local | Hosted | Local | Local | Hosted |
|
|
46
51
|
| No account required | Yes | Partial | No | No | No | No |
|
|
47
52
|
| Self-hosted | Yes | Yes | No | No | Yes | No |
|
|
48
53
|
| Pricing | Free | $10–$24 | $65–$249 | $250+ | $150+ | $79–$3,000+ |
|
|
49
54
|
|
|
50
55
|
## Install
|
|
51
56
|
|
|
57
|
+
### Sourcey
|
|
58
|
+
|
|
52
59
|
```bash
|
|
53
|
-
|
|
60
|
+
npm install -g sourcey
|
|
54
61
|
npx sourcey init
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Go docs generator
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
go install github.com/sourcey/sourcey/go/sourcey-godoc/cmd/sourcey-godoc@latest
|
|
68
|
+
```
|
|
55
69
|
|
|
56
|
-
|
|
57
|
-
|
|
70
|
+
### Homebrew (Go docs generator)
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
brew tap sourcey/tap
|
|
74
|
+
brew install sourcey-godoc
|
|
75
|
+
```
|
|
58
76
|
|
|
59
|
-
|
|
60
|
-
docker run -v $(pwd):/docs sourcey/sourcey build
|
|
77
|
+
### Scoop (Go docs generator)
|
|
61
78
|
|
|
62
|
-
|
|
63
|
-
|
|
79
|
+
```powershell
|
|
80
|
+
scoop bucket add sourcey https://github.com/sourcey/scoop-bucket
|
|
81
|
+
scoop install sourcey-godoc
|
|
64
82
|
```
|
|
65
83
|
|
|
66
84
|
## Quick start
|
|
@@ -125,7 +143,57 @@ export default defineConfig({
|
|
|
125
143
|
});
|
|
126
144
|
```
|
|
127
145
|
|
|
128
|
-
Each tab is an `openapi` spec, an `mcp` snapshot, a `doxygen` directory, or `groups` of markdown pages. Pages are referenced by slug (e.g. `"quickstart"` resolves to `quickstart.md`).
|
|
146
|
+
Each tab is an `openapi` spec, an `mcp` snapshot, a `doxygen` directory, a `godoc` Go module, or `groups` of markdown pages. Pages are referenced by slug (e.g. `"quickstart"` resolves to `quickstart.md`).
|
|
147
|
+
|
|
148
|
+
### Go documentation (godoc)
|
|
149
|
+
|
|
150
|
+
Add a Go module as a tab and Sourcey extracts package docs natively (no Doxygen pipeline):
|
|
151
|
+
|
|
152
|
+
```typescript
|
|
153
|
+
{
|
|
154
|
+
tab: "Go API",
|
|
155
|
+
godoc: {
|
|
156
|
+
module: ".",
|
|
157
|
+
packages: ["./internal/core/...", "./cmd/..."],
|
|
158
|
+
// sourceBasePath: "go/my-module" // repo-relative prefix for source links when module is not at repo root
|
|
159
|
+
// mode: "auto" // default; live when Go is available, snapshot otherwise
|
|
160
|
+
// includeTests: true // examples from *_test.go (default)
|
|
161
|
+
// includeUnexported: false // hide unexported symbols (default)
|
|
162
|
+
},
|
|
163
|
+
}
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
The string shorthand is `godoc: "."` and expands to `{ module: ".", packages: ["./..."], mode: "auto", includeTests: true }`.
|
|
167
|
+
|
|
168
|
+
`editBasePath` remains the global base for Markdown "Edit this page" links.
|
|
169
|
+
Use `godoc.sourceBasePath` only when Go source files live under a different
|
|
170
|
+
repository prefix than the docs source.
|
|
171
|
+
|
|
172
|
+
Live mode invokes `go list` + `go/parser` + `go/doc` against the host Go toolchain. To pin a build environment for reproducibility, set `goEnv: { GOOS, GOARCH, tags }`.
|
|
173
|
+
|
|
174
|
+
Snapshot mode reads a committed `godoc.json` and needs no Go on the build host. Generate it with:
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
sourcey godoc --module . --packages './...' --out docs/godoc.json
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
then point the tab at it:
|
|
181
|
+
|
|
182
|
+
```typescript
|
|
183
|
+
{
|
|
184
|
+
tab: "Go API",
|
|
185
|
+
godoc: { mode: "snapshot", snapshot: "./docs/godoc.json" },
|
|
186
|
+
}
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
The extractor is also a standalone Go CLI for projects that want a native Go
|
|
190
|
+
docs generator without installing the full Sourcey npm package:
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
go install github.com/sourcey/sourcey/go/sourcey-godoc/cmd/sourcey-godoc@latest
|
|
194
|
+
sourcey-godoc generate --module . --packages './...' --out site
|
|
195
|
+
sourcey-godoc snapshot --module . --packages './...' --out docs/godoc.json
|
|
196
|
+
```
|
|
129
197
|
|
|
130
198
|
### Markdown components
|
|
131
199
|
|
|
@@ -171,6 +239,8 @@ sourcey dev Dev server (reads sourcey.config.ts)
|
|
|
171
239
|
sourcey build Build site (reads sourcey.config.ts)
|
|
172
240
|
sourcey build api.yaml Quick build from a single spec
|
|
173
241
|
sourcey validate api.yaml Validate a spec file
|
|
242
|
+
sourcey godoc --out godoc.json Snapshot a Go module's docs to JSON
|
|
243
|
+
sourcey-godoc generate --out site Standalone Go CLI for static godoc sites
|
|
174
244
|
```
|
|
175
245
|
|
|
176
246
|
| Command | Flag | Description |
|
|
@@ -186,6 +256,7 @@ sourcey validate api.yaml Validate a spec file
|
|
|
186
256
|
git clone https://github.com/sourcey/sourcey.git
|
|
187
257
|
cd sourcey && npm install
|
|
188
258
|
npm run build && npm test
|
|
259
|
+
cd go/sourcey-godoc && go test ./... && go vet ./...
|
|
189
260
|
|
|
190
261
|
# Run the demo site
|
|
191
262
|
cd demo && npx tsx ../src/cli.ts dev
|
package/dist/cli.js
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { defineCommand, runMain } from "citty";
|
|
3
|
+
import { mkdir, writeFile } from "node:fs/promises";
|
|
4
|
+
import { dirname, resolve } from "node:path";
|
|
3
5
|
import { buildDocs, buildSiteDocs } from "./index.js";
|
|
4
6
|
import { loadConfig } from "./config.js";
|
|
7
|
+
import { runIntrospector, GodocIntrospectorError } from "./core/godoc-introspector.js";
|
|
8
|
+
import { GODOC_SCHEMA_VERSION } from "./core/godoc-types.js";
|
|
5
9
|
import { init } from "./init.js";
|
|
6
|
-
import { formatChangelogDiagnostic } from "./site-assembly.js";
|
|
10
|
+
import { formatChangelogDiagnostic, formatGodocDiagnostic } from "./site-assembly.js";
|
|
7
11
|
import pkg from "../package.json" with { type: "json" };
|
|
8
12
|
const build = defineCommand({
|
|
9
13
|
meta: {
|
|
@@ -79,6 +83,7 @@ const build = defineCommand({
|
|
|
79
83
|
});
|
|
80
84
|
if (!args.quiet) {
|
|
81
85
|
logChangelogDiagnostics(result.changelogDiagnostics);
|
|
86
|
+
logGodocDiagnostics(result.godocDiagnostics);
|
|
82
87
|
const elapsed = ((Date.now() - startTime) / 1000).toFixed(1);
|
|
83
88
|
console.log(` Pages: ${result.pageCount}`);
|
|
84
89
|
console.log(` Output: ${result.outputDir}`);
|
|
@@ -155,17 +160,121 @@ const validate = defineCommand({
|
|
|
155
160
|
}
|
|
156
161
|
},
|
|
157
162
|
});
|
|
163
|
+
const godoc = defineCommand({
|
|
164
|
+
meta: {
|
|
165
|
+
name: "godoc",
|
|
166
|
+
description: "Snapshot a Go module's godoc data into a portable JSON file",
|
|
167
|
+
},
|
|
168
|
+
args: {
|
|
169
|
+
module: {
|
|
170
|
+
type: "string",
|
|
171
|
+
alias: ["m"],
|
|
172
|
+
description: "Go module directory (containing go.mod)",
|
|
173
|
+
default: ".",
|
|
174
|
+
},
|
|
175
|
+
packages: {
|
|
176
|
+
type: "string",
|
|
177
|
+
alias: ["p"],
|
|
178
|
+
description: "Package patterns (comma-separated)",
|
|
179
|
+
default: "./...",
|
|
180
|
+
},
|
|
181
|
+
exclude: {
|
|
182
|
+
type: "string",
|
|
183
|
+
description: "Import-path prefixes to exclude (comma-separated)",
|
|
184
|
+
required: false,
|
|
185
|
+
},
|
|
186
|
+
out: {
|
|
187
|
+
type: "string",
|
|
188
|
+
alias: ["o"],
|
|
189
|
+
description: "Output file path",
|
|
190
|
+
default: "godoc.json",
|
|
191
|
+
},
|
|
192
|
+
includeTests: {
|
|
193
|
+
type: "boolean",
|
|
194
|
+
description: "Include examples from *_test.go files",
|
|
195
|
+
default: true,
|
|
196
|
+
},
|
|
197
|
+
includeUnexported: {
|
|
198
|
+
type: "boolean",
|
|
199
|
+
description: "Include unexported symbols",
|
|
200
|
+
default: false,
|
|
201
|
+
},
|
|
202
|
+
quiet: {
|
|
203
|
+
type: "boolean",
|
|
204
|
+
alias: ["q"],
|
|
205
|
+
description: "Suppress output",
|
|
206
|
+
default: false,
|
|
207
|
+
},
|
|
208
|
+
},
|
|
209
|
+
async run({ args }) {
|
|
210
|
+
const moduleDir = resolve(process.cwd(), args.module);
|
|
211
|
+
const patterns = args.packages.split(",").map((p) => p.trim()).filter(Boolean);
|
|
212
|
+
const exclude = args.exclude
|
|
213
|
+
? args.exclude.split(",").map((p) => p.trim()).filter(Boolean)
|
|
214
|
+
: [];
|
|
215
|
+
const outputPath = resolve(process.cwd(), args.out);
|
|
216
|
+
try {
|
|
217
|
+
const spec = await runIntrospector({
|
|
218
|
+
config: {
|
|
219
|
+
module: moduleDir,
|
|
220
|
+
packages: patterns.length > 0 ? patterns : ["./..."],
|
|
221
|
+
mode: "live",
|
|
222
|
+
includeTests: args.includeTests,
|
|
223
|
+
includeUnexported: args.includeUnexported,
|
|
224
|
+
hideUndocumented: false,
|
|
225
|
+
exclude,
|
|
226
|
+
sourceBasePath: "",
|
|
227
|
+
},
|
|
228
|
+
});
|
|
229
|
+
const snapshot = {
|
|
230
|
+
schema_version: GODOC_SCHEMA_VERSION,
|
|
231
|
+
source: "sourcey-godoc",
|
|
232
|
+
module_path: spec.modulePath,
|
|
233
|
+
generated_at: spec.generatedAt,
|
|
234
|
+
packages: spec.packages,
|
|
235
|
+
diagnostics: spec.diagnostics.length > 0 ? spec.diagnostics : undefined,
|
|
236
|
+
};
|
|
237
|
+
await mkdir(dirname(outputPath), { recursive: true });
|
|
238
|
+
await writeFile(outputPath, JSON.stringify(snapshot, null, 2) + "\n", "utf8");
|
|
239
|
+
const errors = spec.diagnostics.filter((d) => d.severity === "error");
|
|
240
|
+
const warnings = spec.diagnostics.filter((d) => d.severity === "warning");
|
|
241
|
+
if (!args.quiet) {
|
|
242
|
+
console.log(`\nSourcey: wrote godoc snapshot for ${spec.modulePath}`);
|
|
243
|
+
console.log(` Packages: ${spec.packages.length}`);
|
|
244
|
+
console.log(` Output: ${outputPath}`);
|
|
245
|
+
if (warnings.length > 0)
|
|
246
|
+
console.log(` Warnings: ${warnings.length}`);
|
|
247
|
+
if (errors.length > 0)
|
|
248
|
+
console.log(` Errors: ${errors.length}`);
|
|
249
|
+
for (const diag of spec.diagnostics) {
|
|
250
|
+
const where = diag.package ? ` [${diag.package}]` : "";
|
|
251
|
+
console.log(` ${diag.severity}: ${diag.code}${where} ${diag.message}`);
|
|
252
|
+
}
|
|
253
|
+
console.log("");
|
|
254
|
+
}
|
|
255
|
+
if (errors.length > 0)
|
|
256
|
+
process.exit(1);
|
|
257
|
+
}
|
|
258
|
+
catch (error) {
|
|
259
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
260
|
+
const code = error instanceof GodocIntrospectorError ? ` (${error.code})` : "";
|
|
261
|
+
console.error(`\nError${code}: ${message}\n`);
|
|
262
|
+
process.exit(1);
|
|
263
|
+
}
|
|
264
|
+
},
|
|
265
|
+
});
|
|
158
266
|
const main = defineCommand({
|
|
159
267
|
meta: {
|
|
160
268
|
name: "sourcey",
|
|
161
269
|
version: pkg.version,
|
|
162
|
-
description: "Open source documentation platform for OpenAPI
|
|
270
|
+
description: "Open source documentation platform for OpenAPI, MCP, Doxygen, godoc, and Markdown",
|
|
163
271
|
},
|
|
164
272
|
subCommands: {
|
|
165
273
|
init,
|
|
166
274
|
build,
|
|
167
275
|
dev,
|
|
168
276
|
validate,
|
|
277
|
+
godoc,
|
|
169
278
|
},
|
|
170
279
|
args: {
|
|
171
280
|
spec: {
|
|
@@ -175,7 +284,11 @@ const main = defineCommand({
|
|
|
175
284
|
},
|
|
176
285
|
},
|
|
177
286
|
async run({ args, rawArgs }) {
|
|
178
|
-
if (rawArgs.includes("init") ||
|
|
287
|
+
if (rawArgs.includes("init") ||
|
|
288
|
+
rawArgs.includes("build") ||
|
|
289
|
+
rawArgs.includes("dev") ||
|
|
290
|
+
rawArgs.includes("validate") ||
|
|
291
|
+
rawArgs.includes("godoc"))
|
|
179
292
|
return;
|
|
180
293
|
if (args.spec) {
|
|
181
294
|
await build.run({
|
|
@@ -199,4 +312,10 @@ function logChangelogDiagnostics(diagnostics) {
|
|
|
199
312
|
console.log(` ${formatChangelogDiagnostic(diagnostic)}`);
|
|
200
313
|
}
|
|
201
314
|
}
|
|
315
|
+
function logGodocDiagnostics(diagnostics) {
|
|
316
|
+
for (const diagnostic of diagnostics) {
|
|
317
|
+
const writer = diagnostic.severity === "error" ? console.error : console.log;
|
|
318
|
+
writer(` ${formatGodocDiagnostic(diagnostic)}`);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
202
321
|
runMain(main);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Page.d.ts","sourceRoot":"","sources":["../../../src/components/layout/Page.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Page.d.ts","sourceRoot":"","sources":["../../../src/components/layout/Page.tsx"],"names":[],"mappings":"AAuRA,wBAAgB,IAAI,iCAqCnB"}
|
|
@@ -68,7 +68,10 @@ function ContentFooter() {
|
|
|
68
68
|
: undefined;
|
|
69
69
|
if (site.repo && site.editBranch && editPath) {
|
|
70
70
|
const repoBase = site.repo.replace(/\/$/, "");
|
|
71
|
-
const
|
|
71
|
+
const editBasePath = page.kind === "markdown" && page.markdown.editBasePath !== undefined
|
|
72
|
+
? page.markdown.editBasePath
|
|
73
|
+
: site.editBasePath;
|
|
74
|
+
const basePath = editBasePath ? `${editBasePath.replace(/^\/|\/$/g, "")}/` : "";
|
|
72
75
|
editUrl = `${repoBase}/edit/${site.editBranch}/${basePath}${editPath}`;
|
|
73
76
|
}
|
|
74
77
|
const linkStyle = "hover:text-[rgb(var(--color-gray-600))] dark:hover:text-[rgb(var(--color-gray-300))] transition-colors";
|
package/dist/config.d.ts
CHANGED
|
@@ -41,7 +41,7 @@ export interface SourceyConfig {
|
|
|
41
41
|
/**
|
|
42
42
|
* Clean URLs without `.html` extensions.
|
|
43
43
|
* - `"slash"`: emit `foo/index.html` and link as `/foo/`.
|
|
44
|
-
* - `"strip"`:
|
|
44
|
+
* - `"strip"`: emit `foo.html` and link as `/foo`.
|
|
45
45
|
* - `false` (default): keep `.html` extensions.
|
|
46
46
|
*/
|
|
47
47
|
prettyUrls?: PrettyUrls;
|
|
@@ -105,6 +105,45 @@ export interface DoxygenConfig {
|
|
|
105
105
|
*/
|
|
106
106
|
index?: DoxygenIndexStyle | false;
|
|
107
107
|
}
|
|
108
|
+
export type GodocMode = "auto" | "live" | "snapshot";
|
|
109
|
+
export interface GodocGoEnv {
|
|
110
|
+
GOOS?: string;
|
|
111
|
+
GOARCH?: string;
|
|
112
|
+
tags?: string[];
|
|
113
|
+
}
|
|
114
|
+
export interface GodocConfig {
|
|
115
|
+
/** Module root (directory containing go.mod). Defaults to the directory containing sourcey.config.ts. */
|
|
116
|
+
module?: string;
|
|
117
|
+
/** Package patterns passed to `go list`, e.g. "./..." or "./internal/core/...". */
|
|
118
|
+
packages?: string[];
|
|
119
|
+
/** Optional path to a committed godoc snapshot (godoc.json). */
|
|
120
|
+
snapshot?: string;
|
|
121
|
+
/**
|
|
122
|
+
* Source mode.
|
|
123
|
+
* - "live": run the Go toolchain at build time.
|
|
124
|
+
* - "snapshot": read the committed snapshot file; no Go required.
|
|
125
|
+
* - "auto" (default): prefer live when Go is available; fall back to snapshot.
|
|
126
|
+
*/
|
|
127
|
+
mode?: GodocMode;
|
|
128
|
+
/** Include package examples from *_test.go files (default: true). */
|
|
129
|
+
includeTests?: boolean;
|
|
130
|
+
/** Include unexported symbols (default: false). */
|
|
131
|
+
includeUnexported?: boolean;
|
|
132
|
+
/** Hide packages with no package comment from navigation (default: false). */
|
|
133
|
+
hideUndocumented?: boolean;
|
|
134
|
+
/** Package path prefixes to exclude after `go list` expansion. */
|
|
135
|
+
exclude?: string[];
|
|
136
|
+
/**
|
|
137
|
+
* Pin Go build environment for reproducible live-mode docs across hosts.
|
|
138
|
+
* When unset, live mode follows the host's GOOS/GOARCH and active tags.
|
|
139
|
+
*/
|
|
140
|
+
goEnv?: GodocGoEnv;
|
|
141
|
+
/**
|
|
142
|
+
* Repository-relative base path for Go source links. Leave empty when the
|
|
143
|
+
* configured Go module is at the repository root.
|
|
144
|
+
*/
|
|
145
|
+
sourceBasePath?: string;
|
|
146
|
+
}
|
|
108
147
|
export interface TabConfig {
|
|
109
148
|
tab: string;
|
|
110
149
|
/** Custom URL slug for this tab. Defaults to slugified tab name. */
|
|
@@ -114,6 +153,11 @@ export interface TabConfig {
|
|
|
114
153
|
doxygen?: DoxygenConfig;
|
|
115
154
|
/** Path to an mcp.json file (MCP server snapshot). */
|
|
116
155
|
mcp?: string;
|
|
156
|
+
/**
|
|
157
|
+
* Native Go documentation. String shorthand expands to
|
|
158
|
+
* `{ module: <value>, packages: ["./..."], mode: "auto", includeTests: true }`.
|
|
159
|
+
*/
|
|
160
|
+
godoc?: GodocConfig | string;
|
|
117
161
|
}
|
|
118
162
|
export interface GroupConfig {
|
|
119
163
|
group: string;
|
|
@@ -194,6 +238,21 @@ export interface ResolvedDoxygenConfig {
|
|
|
194
238
|
groups: boolean;
|
|
195
239
|
index: DoxygenIndexStyle;
|
|
196
240
|
}
|
|
241
|
+
export interface ResolvedGodocConfig {
|
|
242
|
+
/** Absolute path to the Go module directory (containing go.mod). */
|
|
243
|
+
module: string;
|
|
244
|
+
/** Package patterns to pass to `go list`. Always at least one entry. */
|
|
245
|
+
packages: string[];
|
|
246
|
+
/** Absolute path to a snapshot file when configured. */
|
|
247
|
+
snapshot?: string;
|
|
248
|
+
mode: GodocMode;
|
|
249
|
+
includeTests: boolean;
|
|
250
|
+
includeUnexported: boolean;
|
|
251
|
+
hideUndocumented: boolean;
|
|
252
|
+
exclude: string[];
|
|
253
|
+
goEnv?: GodocGoEnv;
|
|
254
|
+
sourceBasePath: string;
|
|
255
|
+
}
|
|
197
256
|
export interface ResolvedTab {
|
|
198
257
|
label: string;
|
|
199
258
|
slug: string;
|
|
@@ -201,6 +260,7 @@ export interface ResolvedTab {
|
|
|
201
260
|
groups?: ResolvedGroup[];
|
|
202
261
|
doxygen?: ResolvedDoxygenConfig;
|
|
203
262
|
mcp?: string;
|
|
263
|
+
godoc?: ResolvedGodocConfig;
|
|
204
264
|
}
|
|
205
265
|
export interface ResolvedPage {
|
|
206
266
|
/** Original config slug (e.g. "run/index") */
|
|
@@ -221,10 +281,12 @@ export declare function resolveConfigFromRaw(raw: SourceyConfig, configDir: stri
|
|
|
221
281
|
export declare function slugify(name: string): string;
|
|
222
282
|
/** Build a path under a tab, handling empty slugs (root-level tabs). */
|
|
223
283
|
export declare function tabPath(tabSlug: string, file: string): string;
|
|
284
|
+
/** Build the on-disk output path for a tab landing page. */
|
|
285
|
+
export declare function tabIndexOutputPath(tabSlug: string, prettyUrls: PrettyUrls): string;
|
|
224
286
|
/**
|
|
225
287
|
* Build the on-disk output path for a content page within a tab.
|
|
226
|
-
*
|
|
227
|
-
*
|
|
288
|
+
* `"slash"` emits directory indexes. `false` and `"strip"` emit `.html`
|
|
289
|
+
* files; `"strip"` only changes the public URL, not the file layout.
|
|
228
290
|
*/
|
|
229
291
|
export declare function pageOutputPath(tabSlug: string, slug: string, prettyUrls: PrettyUrls): string;
|
|
230
292
|
export declare function hexToRgb(hex: string): string;
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/config.js
CHANGED
|
@@ -168,12 +168,12 @@ async function resolveTabs(tabs, configDir) {
|
|
|
168
168
|
if (slugs.has(slug))
|
|
169
169
|
throw new Error(`Duplicate tab slug "${slug}" (from "${tab.tab}")`);
|
|
170
170
|
slugs.add(slug);
|
|
171
|
-
const sources = [tab.openapi, tab.groups, tab.doxygen, tab.mcp].filter(Boolean).length;
|
|
171
|
+
const sources = [tab.openapi, tab.groups, tab.doxygen, tab.mcp, tab.godoc].filter(Boolean).length;
|
|
172
172
|
if (sources > 1) {
|
|
173
|
-
throw new Error(`Tab "${tab.tab}" has multiple sources; use only one of "openapi", "groups", "doxygen", or "
|
|
173
|
+
throw new Error(`Tab "${tab.tab}" has multiple sources; use only one of "openapi", "groups", "doxygen", "mcp", or "godoc"`);
|
|
174
174
|
}
|
|
175
175
|
if (sources === 0) {
|
|
176
|
-
throw new Error(`Tab "${tab.tab}" needs one of "openapi", "groups", "doxygen", or "
|
|
176
|
+
throw new Error(`Tab "${tab.tab}" needs one of "openapi", "groups", "doxygen", "mcp", or "godoc"`);
|
|
177
177
|
}
|
|
178
178
|
if (tab.openapi) {
|
|
179
179
|
if (isUrl(tab.openapi)) {
|
|
@@ -209,6 +209,28 @@ async function resolveTabs(tabs, configDir) {
|
|
|
209
209
|
},
|
|
210
210
|
});
|
|
211
211
|
}
|
|
212
|
+
else if (tab.godoc) {
|
|
213
|
+
const cfg = typeof tab.godoc === "string" ? { module: tab.godoc } : tab.godoc;
|
|
214
|
+
const moduleAbs = resolve(configDir, cfg.module ?? ".");
|
|
215
|
+
await assertExists(moduleAbs, `Go module directory "${cfg.module ?? "."}" in tab "${tab.tab}"`);
|
|
216
|
+
const snapshotAbs = cfg.snapshot ? resolve(configDir, cfg.snapshot) : undefined;
|
|
217
|
+
resolved.push({
|
|
218
|
+
label: tab.tab,
|
|
219
|
+
slug,
|
|
220
|
+
godoc: {
|
|
221
|
+
module: moduleAbs,
|
|
222
|
+
packages: cfg.packages?.length ? cfg.packages : ["./..."],
|
|
223
|
+
snapshot: snapshotAbs,
|
|
224
|
+
mode: cfg.mode ?? "auto",
|
|
225
|
+
includeTests: cfg.includeTests ?? true,
|
|
226
|
+
includeUnexported: cfg.includeUnexported ?? false,
|
|
227
|
+
hideUndocumented: cfg.hideUndocumented ?? false,
|
|
228
|
+
exclude: cfg.exclude ?? [],
|
|
229
|
+
goEnv: cfg.goEnv,
|
|
230
|
+
sourceBasePath: trimSlashes(cfg.sourceBasePath ?? ""),
|
|
231
|
+
},
|
|
232
|
+
});
|
|
233
|
+
}
|
|
212
234
|
else {
|
|
213
235
|
const groups = await resolveGroups(tab.groups, tab.tab, configDir);
|
|
214
236
|
resolved.push({ label: tab.tab, slug, groups });
|
|
@@ -298,13 +320,24 @@ export function tabPath(tabSlug, file) {
|
|
|
298
320
|
return file;
|
|
299
321
|
return `${tabSlug}/${file}`;
|
|
300
322
|
}
|
|
323
|
+
/** Build the on-disk output path for a tab landing page. */
|
|
324
|
+
export function tabIndexOutputPath(tabSlug, prettyUrls) {
|
|
325
|
+
if (!tabSlug)
|
|
326
|
+
return "index.html";
|
|
327
|
+
if (prettyUrls === "slash")
|
|
328
|
+
return tabPath(tabSlug, "index.html");
|
|
329
|
+
return `${tabSlug}.html`;
|
|
330
|
+
}
|
|
301
331
|
/**
|
|
302
332
|
* Build the on-disk output path for a content page within a tab.
|
|
303
|
-
*
|
|
304
|
-
*
|
|
333
|
+
* `"slash"` emits directory indexes. `false` and `"strip"` emit `.html`
|
|
334
|
+
* files; `"strip"` only changes the public URL, not the file layout.
|
|
305
335
|
*/
|
|
306
336
|
export function pageOutputPath(tabSlug, slug, prettyUrls) {
|
|
307
|
-
if (
|
|
337
|
+
if (slug === "index") {
|
|
338
|
+
return tabIndexOutputPath(tabSlug, prettyUrls);
|
|
339
|
+
}
|
|
340
|
+
if (prettyUrls === "slash") {
|
|
308
341
|
return tabPath(tabSlug, `${slug}/index.html`);
|
|
309
342
|
}
|
|
310
343
|
return tabPath(tabSlug, `${slug}.html`);
|
|
@@ -325,6 +358,9 @@ export function hexToRgb(hex) {
|
|
|
325
358
|
const b = parseInt(h.slice(4, 6), 16);
|
|
326
359
|
return `${r} ${g} ${b}`;
|
|
327
360
|
}
|
|
361
|
+
function trimSlashes(path) {
|
|
362
|
+
return path.replace(/^\/+|\/+$/g, "");
|
|
363
|
+
}
|
|
328
364
|
async function assertExists(filePath, label) {
|
|
329
365
|
try {
|
|
330
366
|
await access(filePath);
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { ResolvedGodocConfig } from "../config.js";
|
|
2
|
+
import type { GodocSpec } from "./godoc-types.js";
|
|
3
|
+
export declare class GodocIntrospectorError extends Error {
|
|
4
|
+
readonly code: string;
|
|
5
|
+
readonly cause?: Error | undefined;
|
|
6
|
+
constructor(code: string, message: string, cause?: Error);
|
|
7
|
+
}
|
|
8
|
+
export interface IntrospectOptions {
|
|
9
|
+
config: ResolvedGodocConfig;
|
|
10
|
+
/** Override the Go executable; defaults to "go" on PATH. */
|
|
11
|
+
goBinary?: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Run the Go introspector and return a parsed GodocSpec.
|
|
15
|
+
*
|
|
16
|
+
* Live mode invokes `go run` against the bundled helper, with `GOOS`/`GOARCH`
|
|
17
|
+
* and build tags pinned by `goEnv` when configured. Throws a structured
|
|
18
|
+
* `GodocIntrospectorError` on failure so callers can surface the right
|
|
19
|
+
* diagnostic kind.
|
|
20
|
+
*/
|
|
21
|
+
export declare function runIntrospector(opts: IntrospectOptions): Promise<GodocSpec>;
|
|
22
|
+
/** Helper entry paths, exported for tests that pin the runtime. */
|
|
23
|
+
export declare const __helperEntryCandidatesForTests: string[];
|
|
24
|
+
/** Resolve the helper entry path relative to a given module directory. */
|
|
25
|
+
export declare function resolveHelperPath(fromDir: string): string;
|
|
26
|
+
//# sourceMappingURL=godoc-introspector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"godoc-introspector.d.ts","sourceRoot":"","sources":["../../src/core/godoc-introspector.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAQjE,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;gBACvB,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;CAMzD;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,mBAAmB,CAAC;IAC5B,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;GAOG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,SAAS,CAAC,CAgDjF;AAwGD,mEAAmE;AACnE,eAAO,MAAM,+BAA+B,UAG3C,CAAC;AAEF,2EAA2E;AAC3E,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEzD"}
|