sourcey 3.5.2 → 3.5.4
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 +3 -12
- package/dist/config.d.ts +5 -3
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +14 -3
- package/dist/core/navigation.js +2 -2
- package/dist/core/search-indexer.d.ts.map +1 -1
- package/dist/core/search-indexer.js +4 -9
- package/dist/dev-server.d.ts.map +1 -1
- package/dist/dev-server.js +10 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -33
- package/dist/site-assembly.d.ts.map +1 -1
- package/dist/site-assembly.js +23 -10
- package/dist/site-url.d.ts.map +1 -1
- package/dist/site-url.js +3 -0
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -36,15 +36,6 @@ npx sourcey init
|
|
|
36
36
|
- **Static HTML output**: no framework runtime, no vendor lock-in. Deploy to GitHub Pages, Vercel, Netlify, S3, anywhere
|
|
37
37
|
- **Open source**: AGPL-3.0. Self-host, fork, extend. Your docs, your infrastructure
|
|
38
38
|
|
|
39
|
-
## OSS and Sourcey Cloud
|
|
40
|
-
|
|
41
|
-
This repository is the public, local-first Sourcey product. Sourcey Cloud
|
|
42
|
-
features that require hosted infrastructure, such as OAuth callbacks, CORS
|
|
43
|
-
proxying, secret vaulting, hosted analytics, billing, and tenant control-plane
|
|
44
|
-
APIs, are not implemented in this OSS package. When OSS features need a hosted
|
|
45
|
-
runtime, they expose documented provider-neutral extension points instead of
|
|
46
|
-
private Sourcey Cloud client code.
|
|
47
|
-
|
|
48
39
|
### Sourcey vs alternatives
|
|
49
40
|
|
|
50
41
|
| | Sourcey | Redocly | GitBook | Mintlify | Fern | ReadMe |
|
|
@@ -56,7 +47,7 @@ private Sourcey Cloud client code.
|
|
|
56
47
|
| Doxygen / C++ docs | Native | No | No | No | No | No |
|
|
57
48
|
| godoc / Go docs | Native | No | No | No | No | No |
|
|
58
49
|
| Config format | TypeScript | YAML | GUI | JSON | YAML | GUI |
|
|
59
|
-
| Local preview | Vite SSR | Local |
|
|
50
|
+
| Local preview | Vite SSR | Local | Hosted | Local | Local | Hosted |
|
|
60
51
|
| No account required | Yes | Partial | No | No | No | No |
|
|
61
52
|
| Self-hosted | Yes | Yes | No | No | Yes | No |
|
|
62
53
|
| Pricing | Free | $10–$24 | $65–$249 | $250+ | $150+ | $79–$3,000+ |
|
|
@@ -76,14 +67,14 @@ npx sourcey init
|
|
|
76
67
|
go install github.com/sourcey/sourcey/go/sourcey-godoc/cmd/sourcey-godoc@latest
|
|
77
68
|
```
|
|
78
69
|
|
|
79
|
-
### Homebrew
|
|
70
|
+
### Homebrew (Go docs generator)
|
|
80
71
|
|
|
81
72
|
```bash
|
|
82
73
|
brew tap sourcey/tap
|
|
83
74
|
brew install sourcey-godoc
|
|
84
75
|
```
|
|
85
76
|
|
|
86
|
-
### Scoop
|
|
77
|
+
### Scoop (Go docs generator)
|
|
87
78
|
|
|
88
79
|
```powershell
|
|
89
80
|
scoop bucket add sourcey https://github.com/sourcey/scoop-bucket
|
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;
|
|
@@ -281,10 +281,12 @@ export declare function resolveConfigFromRaw(raw: SourceyConfig, configDir: stri
|
|
|
281
281
|
export declare function slugify(name: string): string;
|
|
282
282
|
/** Build a path under a tab, handling empty slugs (root-level tabs). */
|
|
283
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;
|
|
284
286
|
/**
|
|
285
287
|
* Build the on-disk output path for a content page within a tab.
|
|
286
|
-
*
|
|
287
|
-
*
|
|
288
|
+
* `"slash"` emits directory indexes. `false` and `"strip"` emit `.html`
|
|
289
|
+
* files; `"strip"` only changes the public URL, not the file layout.
|
|
288
290
|
*/
|
|
289
291
|
export declare function pageOutputPath(tabSlug: string, slug: string, prettyUrls: PrettyUrls): string;
|
|
290
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
|
@@ -320,13 +320,24 @@ export function tabPath(tabSlug, file) {
|
|
|
320
320
|
return file;
|
|
321
321
|
return `${tabSlug}/${file}`;
|
|
322
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
|
+
}
|
|
323
331
|
/**
|
|
324
332
|
* Build the on-disk output path for a content page within a tab.
|
|
325
|
-
*
|
|
326
|
-
*
|
|
333
|
+
* `"slash"` emits directory indexes. `false` and `"strip"` emit `.html`
|
|
334
|
+
* files; `"strip"` only changes the public URL, not the file layout.
|
|
327
335
|
*/
|
|
328
336
|
export function pageOutputPath(tabSlug, slug, prettyUrls) {
|
|
329
|
-
if (
|
|
337
|
+
if (slug === "index") {
|
|
338
|
+
return tabIndexOutputPath(tabSlug, prettyUrls);
|
|
339
|
+
}
|
|
340
|
+
if (prettyUrls === "slash") {
|
|
330
341
|
return tabPath(tabSlug, `${slug}/index.html`);
|
|
331
342
|
}
|
|
332
343
|
return tabPath(tabSlug, `${slug}.html`);
|
package/dist/core/navigation.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { tagNavigationLabel } from "./tag-utils.js";
|
|
2
|
-
import { pageOutputPath,
|
|
2
|
+
import { pageOutputPath, tabIndexOutputPath } from "../config.js";
|
|
3
3
|
import { htmlId } from "../utils/html-id.js";
|
|
4
4
|
import { toPublicPath } from "../site-url.js";
|
|
5
5
|
/**
|
|
@@ -21,7 +21,7 @@ function navHref(outputPath, prettyUrls) {
|
|
|
21
21
|
* All hrefs are #anchor links (single-page spec rendering).
|
|
22
22
|
*/
|
|
23
23
|
export function buildNavFromSpec(spec, tabSlug, prettyUrls = false) {
|
|
24
|
-
const basePath = navHref(
|
|
24
|
+
const basePath = navHref(tabIndexOutputPath(tabSlug, prettyUrls), prettyUrls);
|
|
25
25
|
const groups = [];
|
|
26
26
|
// Intro group
|
|
27
27
|
const introItems = [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-indexer.d.ts","sourceRoot":"","sources":["../../src/core/search-indexer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"search-indexer.d.ts","sourceRoot":"","sources":["../../src/core/search-indexer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AASjD,MAAM,WAAW,WAAW;IAC1B,oBAAoB;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,gDAAgD;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,GAAG,EAAE,MAAM,CAAC;IACZ,qCAAqC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8BAA8B;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gCAAgC;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,oCAAoC;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAMD;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,EAClC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,EAC9B,UAAU,EAAE,cAAc,EAC1B,SAAS,SAAM,EACf,aAAa,GAAE,MAAM,EAAO,EAC5B,UAAU,GAAE,UAAkB,GAC7B,MAAM,CA4FR"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { toPublicPath } from "../site-url.js";
|
|
2
|
+
import { pageOutputPath, tabIndexOutputPath } from "../config.js";
|
|
1
3
|
import { htmlId } from "../utils/html-id.js";
|
|
2
4
|
// ---------------------------------------------------------------------------
|
|
3
5
|
// Index builder
|
|
@@ -10,19 +12,12 @@ export function buildSearchIndex(specs, pages, navigation, assetBase = "/", feat
|
|
|
10
12
|
const base = assetBase.endsWith("/") ? assetBase : assetBase + "/";
|
|
11
13
|
const featuredSet = new Set(featuredSlugs);
|
|
12
14
|
const entries = [];
|
|
13
|
-
const pageUrl = (tabSlug, slug) =>
|
|
14
|
-
const tabPrefix = tabSlug ? `${base}${tabSlug}/` : base;
|
|
15
|
-
if (prettyUrls === "strip")
|
|
16
|
-
return `${tabPrefix}${slug}`;
|
|
17
|
-
if (prettyUrls === "slash")
|
|
18
|
-
return `${tabPrefix}${slug}/`;
|
|
19
|
-
return `${tabPrefix}${slug}.html`;
|
|
20
|
-
};
|
|
15
|
+
const pageUrl = (tabSlug, slug) => toPublicPath(pageOutputPath(tabSlug, slug, prettyUrls), base, prettyUrls);
|
|
21
16
|
// Index OpenAPI specs
|
|
22
17
|
for (const [tabSlug, spec] of specs) {
|
|
23
18
|
const tab = navigation.tabs.find((t) => t.slug === tabSlug);
|
|
24
19
|
const tabLabel = tab?.label ?? tabSlug;
|
|
25
|
-
const tabBase = tabSlug
|
|
20
|
+
const tabBase = toPublicPath(tabIndexOutputPath(tabSlug, prettyUrls), base, prettyUrls);
|
|
26
21
|
// Operations
|
|
27
22
|
for (const op of spec.operations) {
|
|
28
23
|
entries.push({
|
package/dist/dev-server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev-server.d.ts","sourceRoot":"","sources":["../src/dev-server.ts"],"names":[],"mappings":"AA+CA,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAsB,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"dev-server.d.ts","sourceRoot":"","sources":["../src/dev-server.ts"],"names":[],"mappings":"AA+CA,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAsB,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuZ7E"}
|
package/dist/dev-server.js
CHANGED
|
@@ -2,7 +2,7 @@ import { createServer as createViteServer } from "vite";
|
|
|
2
2
|
import { resolve, dirname, extname, basename, relative } from "node:path";
|
|
3
3
|
import { access } from "node:fs/promises";
|
|
4
4
|
import { fileURLToPath } from "node:url";
|
|
5
|
-
import { loadConfig, pageOutputPath, resolveConfigFromRaw,
|
|
5
|
+
import { loadConfig, pageOutputPath, resolveConfigFromRaw, tabIndexOutputPath } from "./config.js";
|
|
6
6
|
import { loadSpec } from "./core/loader.js";
|
|
7
7
|
import { convertToOpenApi3 } from "./core/converter.js";
|
|
8
8
|
import { parseSpec } from "./core/parser.js";
|
|
@@ -233,7 +233,7 @@ export async function startDevServer(options) {
|
|
|
233
233
|
if (cache !== snapshot)
|
|
234
234
|
return;
|
|
235
235
|
data.specsBySlug.set(content.tabSlug, spec);
|
|
236
|
-
const pageKey =
|
|
236
|
+
const pageKey = tabIndexOutputPath(content.tabSlug, config.prettyUrls);
|
|
237
237
|
const existing = data.pageMap.get(pageKey);
|
|
238
238
|
if (existing) {
|
|
239
239
|
existing.currentPage = { kind: "spec", spec };
|
|
@@ -256,7 +256,7 @@ export async function startDevServer(options) {
|
|
|
256
256
|
if (cache !== snapshot)
|
|
257
257
|
return;
|
|
258
258
|
data.specsBySlug.set(content.tabSlug, spec);
|
|
259
|
-
const pageKey =
|
|
259
|
+
const pageKey = tabIndexOutputPath(content.tabSlug, config.prettyUrls);
|
|
260
260
|
const existing = data.pageMap.get(pageKey);
|
|
261
261
|
if (existing) {
|
|
262
262
|
existing.currentPage = { kind: "spec", spec };
|
|
@@ -292,10 +292,15 @@ export async function startDevServer(options) {
|
|
|
292
292
|
pagePath = firstKey;
|
|
293
293
|
}
|
|
294
294
|
if (!pagePath.endsWith(".html")) {
|
|
295
|
-
|
|
295
|
+
if (config.prettyUrls === "strip") {
|
|
296
|
+
pagePath += ".html";
|
|
297
|
+
}
|
|
298
|
+
else {
|
|
299
|
+
pagePath += "/index.html";
|
|
300
|
+
}
|
|
296
301
|
}
|
|
297
302
|
let pageData = data.pageMap.get(pagePath);
|
|
298
|
-
if (!pageData && pagePath.endsWith(".html") && !pagePath.endsWith("/index.html")) {
|
|
303
|
+
if (!pageData && config.prettyUrls === "slash" && pagePath.endsWith(".html") && !pagePath.endsWith("/index.html")) {
|
|
299
304
|
// Fallback for stale `.html` links when prettyUrls is enabled.
|
|
300
305
|
const pretty = pagePath.replace(/\.html$/, "/index.html");
|
|
301
306
|
pageData = data.pageMap.get(pretty);
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,mBAAmB,EAA8B,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACvG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,mBAAmB,EAA8B,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACvG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAiBlD,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,cAAc,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB,EAAE,mBAAmB,EAAE,CAAC;CAC7C;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAkB3E;AAMD,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB,EAAE,mBAAmB,EAAE,CAAC;IAC5C,gBAAgB,EAAE,OAAO,wBAAwB,EAAE,qBAAqB,EAAE,CAAC;IAC3E,wDAAwD;IACxD,MAAM,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CACtC;AAED,wBAAsB,aAAa,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC,CAoF5F;AA4CD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAG1D,YAAY,EACV,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,iBAAiB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -6,7 +6,6 @@ import { buildSiteNavigation } from "./core/navigation.js";
|
|
|
6
6
|
import { buildSearchIndex } from "./core/search-indexer.js";
|
|
7
7
|
import { generateLlmsTxt, generateLlmsFullTxt } from "./renderer/llms.js";
|
|
8
8
|
import { assembleSite, buildSiteConfig, collectDocsPagesByTab, createMinimalSpec, enforceChangelogDiagnostics, } from "./site-assembly.js";
|
|
9
|
-
import { toPublicPath } from "./site-url.js";
|
|
10
9
|
/**
|
|
11
10
|
* Build API documentation from a single OpenAPI/Swagger spec.
|
|
12
11
|
* Wraps the spec in a single-tab site and renders through the modern layout.
|
|
@@ -42,11 +41,6 @@ export async function buildSiteDocs(options = {}) {
|
|
|
42
41
|
const llmsFullTxt = generateLlmsFullTxt(sitePages, navigation, site);
|
|
43
42
|
const extraFiles = new Map(assembled.extraFiles);
|
|
44
43
|
const ogImages = new Map();
|
|
45
|
-
if (config.prettyUrls === "strip") {
|
|
46
|
-
const rules = buildStripRedirectRules(sitePages, config.baseUrl);
|
|
47
|
-
if (rules)
|
|
48
|
-
extraFiles.set("_redirects", rules);
|
|
49
|
-
}
|
|
50
44
|
if (!config.ogImage) {
|
|
51
45
|
const { generateOgImage } = await import("./og/generate-og-image.js");
|
|
52
46
|
const CONCURRENCY = 8;
|
|
@@ -129,33 +123,6 @@ function describePageForOg(page, defaultSiteName, changelogPermalinkOg) {
|
|
|
129
123
|
}
|
|
130
124
|
return { title: `${defaultSiteName} Reference` };
|
|
131
125
|
}
|
|
132
|
-
/**
|
|
133
|
-
* Build Netlify/Cloudflare-Pages redirect rules that canonicalise every page onto
|
|
134
|
-
* its extensionless, slash-less URL. Emitted only when `prettyUrls === "strip"`.
|
|
135
|
-
*
|
|
136
|
-
* For each page at `dir/slug/index.html` the user sees `/dir/slug`; redirect
|
|
137
|
-
* `/dir/slug/` and (for backwards compatibility with pre-rename bookmarks)
|
|
138
|
-
* `/dir/slug.html` onto it.
|
|
139
|
-
*/
|
|
140
|
-
function buildStripRedirectRules(pages, baseUrl) {
|
|
141
|
-
const lines = [
|
|
142
|
-
"# Generated by Sourcey: pretty URL canonicalisation",
|
|
143
|
-
];
|
|
144
|
-
const seen = new Set();
|
|
145
|
-
for (const page of pages) {
|
|
146
|
-
const canonical = toPublicPath(page.outputPath, baseUrl, "strip");
|
|
147
|
-
if (canonical === "/" || canonical === "")
|
|
148
|
-
continue;
|
|
149
|
-
if (seen.has(canonical))
|
|
150
|
-
continue;
|
|
151
|
-
seen.add(canonical);
|
|
152
|
-
// Trailing-slash variant (what the file system would naturally serve).
|
|
153
|
-
lines.push(`${canonical}/ ${canonical} 301`);
|
|
154
|
-
// Stale `.html` bookmarks from before the migration.
|
|
155
|
-
lines.push(`${canonical}.html ${canonical} 301`);
|
|
156
|
-
}
|
|
157
|
-
return lines.length > 1 ? `${lines.join("\n")}\n` : null;
|
|
158
|
-
}
|
|
159
126
|
function summarizeVersion(version) {
|
|
160
127
|
if (version.summary)
|
|
161
128
|
return version.summary;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"site-assembly.d.ts","sourceRoot":"","sources":["../src/site-assembly.ts"],"names":[],"mappings":"AASA,OAAO,EAAgB,KAAK,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAIlF,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC3E,OAAO,KAAK,EAAiB,QAAQ,EAAgB,MAAM,2BAA2B,CAAC;AACvF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAE,mBAAmB,EAA8B,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACvG,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGxD,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,WAAW,EAAE,cAAc,CAAC;IAC5B,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACzC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC/B,oBAAoB,EAAE,mBAAmB,EAAE,CAAC;IAC5C,gBAAgB,EAAE,qBAAqB,EAAE,CAAC;IAC1C,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;CAC1C;AAED,wBAAsB,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC,
|
|
1
|
+
{"version":3,"file":"site-assembly.d.ts","sourceRoot":"","sources":["../src/site-assembly.ts"],"names":[],"mappings":"AASA,OAAO,EAAgB,KAAK,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAIlF,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC3E,OAAO,KAAK,EAAiB,QAAQ,EAAgB,MAAM,2BAA2B,CAAC;AACvF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAE,mBAAmB,EAA8B,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACvG,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGxD,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,WAAW,EAAE,cAAc,CAAC;IAC5B,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACzC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC/B,oBAAoB,EAAE,mBAAmB,EAAE,CAAC;IAC5C,gBAAgB,EAAE,qBAAqB,EAAE,CAAC;IAC1C,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;CAC1C;AAED,wBAAsB,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC,CA2HhF;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,qBAAqB,GAAG,MAAM,CAKzE;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,EAC9B,IAAI,EAAE,WAAW,EAAE,GAClB,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAgBzB;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,EAC9B,QAAQ,EAAE,OAAO,EAAE,EACnB,IAAI,EAAE,WAAW,EAAE,EACnB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,UAAU,GACrB,IAAI,CAsBN;AAaD,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,mBAAmB,EAAE,EAClC,eAAe,UAAQ,GACtB,IAAI,CAYN;AAED,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,mBAAmB,GAAG,MAAM,CAIjF;AAED,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,mBAAmB,GAAG,MAAM,CAI9E;AAED,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,mBAAmB,EAAE,GAAG,MAAM,EAAE,CAEvF;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,CA4BjF;AAED,wBAAgB,iBAAiB,IAAI,cAAc,CAUlD;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CAuEpF"}
|
package/dist/site-assembly.js
CHANGED
|
@@ -10,7 +10,7 @@ import { loadDoxygenTab } from "./core/doxygen-loader.js";
|
|
|
10
10
|
import { loadGodocTab } from "./core/godoc-loader.js";
|
|
11
11
|
import { buildNavFromSpec, buildNavFromPages } from "./core/navigation.js";
|
|
12
12
|
import { generateChangelogFeeds } from "./renderer/changelog-feed.js";
|
|
13
|
-
import { pageOutputPath, tabPath } from "./config.js";
|
|
13
|
+
import { pageOutputPath, tabIndexOutputPath, tabPath } from "./config.js";
|
|
14
14
|
import { toPublicUrl } from "./site-url.js";
|
|
15
15
|
export async function assembleSite(config) {
|
|
16
16
|
const specsBySlug = await loadSpecs(config.tabs);
|
|
@@ -25,8 +25,9 @@ export async function assembleSite(config) {
|
|
|
25
25
|
const navTab = buildNavFromSpec(spec, tab.slug, config.prettyUrls);
|
|
26
26
|
navTab.label = tab.label;
|
|
27
27
|
siteTabs.push(navTab);
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
const outputPath = tabIndexOutputPath(tab.slug, config.prettyUrls);
|
|
29
|
+
pageMap.set(outputPath, {
|
|
30
|
+
outputPath,
|
|
30
31
|
currentPage: { kind: "spec", spec },
|
|
31
32
|
spec,
|
|
32
33
|
tabSlug: tab.slug,
|
|
@@ -104,8 +105,9 @@ export async function assembleSite(config) {
|
|
|
104
105
|
siteTabs.push(buildNavFromPages(tab, pagesByPath, config.prettyUrls));
|
|
105
106
|
}
|
|
106
107
|
if (config.changelog.permalinks) {
|
|
107
|
-
addPermalinkPages(pageMap);
|
|
108
|
+
addPermalinkPages(pageMap, config.prettyUrls);
|
|
108
109
|
}
|
|
110
|
+
normalizeNavigationHrefs(siteTabs, config.prettyUrls);
|
|
109
111
|
const sitePages = Array.from(pageMap.values());
|
|
110
112
|
resolveInternalLinks(sitePages, config);
|
|
111
113
|
const extraFiles = attachChangelogFeeds(sitePages, config);
|
|
@@ -164,6 +166,16 @@ export function rebuildMarkdownTabNavigation(pageMap, siteTabs, tabs, tabSlug, p
|
|
|
164
166
|
if (idx !== -1)
|
|
165
167
|
siteTabs[idx] = navTab;
|
|
166
168
|
}
|
|
169
|
+
function normalizeNavigationHrefs(siteTabs, prettyUrls) {
|
|
170
|
+
for (const tab of siteTabs) {
|
|
171
|
+
tab.href = toPrettyLink(tab.href, prettyUrls);
|
|
172
|
+
for (const group of tab.groups) {
|
|
173
|
+
for (const item of group.items) {
|
|
174
|
+
item.href = toPrettyLink(item.href, prettyUrls);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
167
179
|
export function enforceChangelogDiagnostics(diagnostics, strictChangelog = false) {
|
|
168
180
|
const error = diagnostics.find((diagnostic) => diagnostic.severity === "error");
|
|
169
181
|
if (error) {
|
|
@@ -285,7 +297,7 @@ function attachChangelogFeeds(pages, config) {
|
|
|
285
297
|
const changelog = page.currentPage.changelog;
|
|
286
298
|
const versionHref = (version) => {
|
|
287
299
|
if (config.changelog.permalinks) {
|
|
288
|
-
return toPublicUrl(
|
|
300
|
+
return toPublicUrl(pageOutputPath(page.tabSlug, `${changelog.slug}/${version.id}`, config.prettyUrls), config.siteUrl, config.baseUrl, config.prettyUrls);
|
|
289
301
|
}
|
|
290
302
|
return `${toPublicUrl(page.outputPath, config.siteUrl, config.baseUrl, config.prettyUrls)}#${version.id}`;
|
|
291
303
|
};
|
|
@@ -326,7 +338,7 @@ function attachChangelogFeeds(pages, config) {
|
|
|
326
338
|
}
|
|
327
339
|
return extraFiles;
|
|
328
340
|
}
|
|
329
|
-
function addPermalinkPages(pageMap) {
|
|
341
|
+
function addPermalinkPages(pageMap, prettyUrls) {
|
|
330
342
|
const changelogPages = Array.from(pageMap.values()).filter(isMainChangelogSitePage);
|
|
331
343
|
for (const page of changelogPages) {
|
|
332
344
|
const changelog = page.currentPage.changelog;
|
|
@@ -338,7 +350,7 @@ function addPermalinkPages(pageMap) {
|
|
|
338
350
|
headings: [],
|
|
339
351
|
permalinkVersionId: version.id,
|
|
340
352
|
};
|
|
341
|
-
const outputPath =
|
|
353
|
+
const outputPath = pageOutputPath(page.tabSlug, `${changelog.slug}/${version.id}`, prettyUrls);
|
|
342
354
|
pageMap.set(outputPath, {
|
|
343
355
|
outputPath,
|
|
344
356
|
currentPage: { kind: "changelog", changelog: permalinkPage },
|
|
@@ -436,9 +448,7 @@ function resolveInternalHref(href, outputPath, docsSourcePath, pathMap, sourceBa
|
|
|
436
448
|
const [path, hash] = href.split("#", 2);
|
|
437
449
|
const hashSuffix = hash ? `#${hash}` : "";
|
|
438
450
|
const sourcePath = path.replace(/\\/g, "/");
|
|
439
|
-
const clean = sourcePath.replace(/^\/+/, "").replace(/\/+$/, "").replace(/\.(md|mdx)$/, "");
|
|
440
|
-
if (clean.endsWith(".html"))
|
|
441
|
-
return null;
|
|
451
|
+
const clean = sourcePath.replace(/^\/+/, "").replace(/\/+$/, "").replace(/\.(md|mdx|html)$/, "");
|
|
442
452
|
const pageDir = outputPath.includes("/")
|
|
443
453
|
? outputPath.substring(0, outputPath.lastIndexOf("/"))
|
|
444
454
|
: "";
|
|
@@ -492,5 +502,8 @@ function toPrettyLink(target, prettyUrls) {
|
|
|
492
502
|
const withSlash = target.slice(0, -"index.html".length);
|
|
493
503
|
return prettyUrls === "strip" ? withSlash.slice(0, -1) : withSlash;
|
|
494
504
|
}
|
|
505
|
+
if (prettyUrls === "strip" && target.endsWith(".html")) {
|
|
506
|
+
return target.slice(0, -(".html".length));
|
|
507
|
+
}
|
|
495
508
|
return target;
|
|
496
509
|
}
|
package/dist/site-url.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"site-url.d.ts","sourceRoot":"","sources":["../src/site-url.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,OAAO,GAAG,OAAO,CAAC;AAEnD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAExD;AAED,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAMzD;AAED,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAoBrE;AAED,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,SAAK,EAAE,UAAU,GAAE,UAAkB,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"site-url.d.ts","sourceRoot":"","sources":["../src/site-url.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,OAAO,GAAG,OAAO,CAAC;AAEnD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAExD;AAED,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAMzD;AAED,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAoBrE;AAED,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,SAAK,EAAE,UAAU,GAAE,UAAkB,GAAG,MAAM,CAsBrG;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAK1E;AAED,wBAAgB,WAAW,CACzB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,SAAK,EACZ,UAAU,GAAE,UAAkB,GAC7B,MAAM,CAER;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,SAAK,GAAG,MAAM,CAcnE"}
|
package/dist/site-url.js
CHANGED
|
@@ -41,6 +41,9 @@ export function toPublicPath(outputPath, baseUrl = "", prettyUrls = false) {
|
|
|
41
41
|
}
|
|
42
42
|
return `${prefix}${withSlash}`;
|
|
43
43
|
}
|
|
44
|
+
if (prettyUrls === "strip" && cleanOutputPath.endsWith(".html")) {
|
|
45
|
+
return `${prefix}${cleanOutputPath.slice(0, -(".html".length))}`;
|
|
46
|
+
}
|
|
44
47
|
return `${prefix}${cleanOutputPath}`;
|
|
45
48
|
}
|
|
46
49
|
export function toAbsoluteUrl(publicPath, siteUrl) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sourcey",
|
|
3
|
-
"version": "3.5.
|
|
3
|
+
"version": "3.5.4",
|
|
4
4
|
"description": "Precision documentation from OpenAPI, MCP, Doxygen, godoc, and Markdown. Static HTML you own.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"engines": {
|
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
"format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
|
|
30
30
|
"godoc:go:test": "cd go/sourcey-godoc && go test ./...",
|
|
31
31
|
"godoc:go:vet": "cd go/sourcey-godoc && go vet ./...",
|
|
32
|
+
"godoc:packages:test": "packaging/sourcey-godoc/render-package-managers.test.sh",
|
|
32
33
|
"typecheck": "tsc --noEmit",
|
|
33
34
|
"prepublishOnly": "npm run build"
|
|
34
35
|
},
|