mdsvr 2.4.1 → 2.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/directory.d.ts +11 -0
- package/dist/directory.d.ts.map +1 -1
- package/dist/directory.js +31 -115
- package/dist/directory.js.map +1 -1
- package/dist/generators/feed.d.ts.map +1 -1
- package/dist/generators/feed.js +8 -1
- package/dist/generators/feed.js.map +1 -1
- package/dist/generators/llms.d.ts +14 -0
- package/dist/generators/llms.d.ts.map +1 -0
- package/dist/generators/llms.js +139 -0
- package/dist/generators/llms.js.map +1 -0
- package/dist/generators/search-index.d.ts.map +1 -1
- package/dist/generators/search-index.js +5 -4
- package/dist/generators/search-index.js.map +1 -1
- package/dist/generators/sitemap.js +5 -1
- package/dist/generators/sitemap.js.map +1 -1
- package/dist/generators/static-export.d.ts.map +1 -1
- package/dist/generators/static-export.js +29 -5
- package/dist/generators/static-export.js.map +1 -1
- package/dist/link-transform.d.ts +37 -5
- package/dist/link-transform.d.ts.map +1 -1
- package/dist/link-transform.js +120 -13
- package/dist/link-transform.js.map +1 -1
- package/dist/og/generator.d.ts +20 -0
- package/dist/og/generator.d.ts.map +1 -1
- package/dist/og/generator.js +30 -22
- package/dist/og/generator.js.map +1 -1
- package/dist/render-page.d.ts +0 -1
- package/dist/render-page.d.ts.map +1 -1
- package/dist/render-page.js +61 -34
- package/dist/render-page.js.map +1 -1
- package/dist/renderer/markdown.d.ts.map +1 -1
- package/dist/renderer/markdown.js +37 -52
- package/dist/renderer/markdown.js.map +1 -1
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +10 -0
- package/dist/router.js.map +1 -1
- package/dist/seo/extract.d.ts +4 -2
- package/dist/seo/extract.d.ts.map +1 -1
- package/dist/seo/extract.js +42 -15
- package/dist/seo/extract.js.map +1 -1
- package/dist/seo/jsonld.d.ts.map +1 -1
- package/dist/seo/jsonld.js +11 -0
- package/dist/seo/jsonld.js.map +1 -1
- package/dist/seo/metadata.d.ts +13 -0
- package/dist/seo/metadata.d.ts.map +1 -1
- package/dist/seo/metadata.js +15 -3
- package/dist/seo/metadata.js.map +1 -1
- package/dist/settings/index.d.ts.map +1 -1
- package/dist/settings/index.js +14 -0
- package/dist/settings/index.js.map +1 -1
- package/dist/settings/schema.d.ts +249 -0
- package/dist/settings/schema.d.ts.map +1 -1
- package/dist/settings/schema.js +39 -0
- package/dist/settings/schema.js.map +1 -1
- package/dist/template/analytics.d.ts +18 -0
- package/dist/template/analytics.d.ts.map +1 -0
- package/dist/template/analytics.js +83 -0
- package/dist/template/analytics.js.map +1 -0
- package/dist/template/index.d.ts +5 -0
- package/dist/template/index.d.ts.map +1 -1
- package/dist/template/index.js +46 -19
- package/dist/template/index.js.map +1 -1
- package/dist/template/search.d.ts.map +1 -1
- package/dist/template/search.js +9 -2
- package/dist/template/search.js.map +1 -1
- package/dist/template/seo.d.ts.map +1 -1
- package/dist/template/seo.js +83 -0
- package/dist/template/seo.js.map +1 -1
- package/dist/template/sidebar.d.ts.map +1 -1
- package/dist/template/sidebar.js +10 -7
- package/dist/template/sidebar.js.map +1 -1
- package/dist/validator/index.d.ts +1 -1
- package/dist/validator/index.d.ts.map +1 -1
- package/dist/validator/index.js +21 -0
- package/dist/validator/index.js.map +1 -1
- package/package.json +1 -1
package/dist/directory.d.ts
CHANGED
|
@@ -1,6 +1,17 @@
|
|
|
1
1
|
import type { Dirent } from "node:fs";
|
|
2
|
+
/**
|
|
3
|
+
* Render a directory listing as a body fragment for auto-index pages.
|
|
4
|
+
* The surrounding document (head, navigation, styles) comes from the page
|
|
5
|
+
* template — this returns only `<h1>` + the listing table.
|
|
6
|
+
*
|
|
7
|
+
* File links use the canonical clean-URL form: `.md`/`.mdx` entries point to
|
|
8
|
+
* the trailing-slash doc route; index files (README/index) are hidden because
|
|
9
|
+
* they are the page itself.
|
|
10
|
+
*/
|
|
2
11
|
export declare function renderDirectory(params: {
|
|
3
12
|
urlPath: string;
|
|
4
13
|
entries: Dirent[];
|
|
14
|
+
/** Heading text; defaults to a humanized form of the last URL segment. */
|
|
15
|
+
title?: string;
|
|
5
16
|
}): string;
|
|
6
17
|
//# sourceMappingURL=directory.d.ts.map
|
package/dist/directory.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directory.d.ts","sourceRoot":"","sources":["../src/directory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEtC,wBAAgB,eAAe,CAAC,MAAM,EAAE;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"directory.d.ts","sourceRoot":"","sources":["../src/directory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEtC;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,0EAA0E;IAC1E,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,MAAM,CA+DT"}
|
package/dist/directory.js
CHANGED
|
@@ -1,21 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Render a directory listing as a body fragment for auto-index pages.
|
|
3
|
+
* The surrounding document (head, navigation, styles) comes from the page
|
|
4
|
+
* template — this returns only `<h1>` + the listing table.
|
|
5
|
+
*
|
|
6
|
+
* File links use the canonical clean-URL form: `.md`/`.mdx` entries point to
|
|
7
|
+
* the trailing-slash doc route; index files (README/index) are hidden because
|
|
8
|
+
* they are the page itself.
|
|
9
|
+
*/
|
|
1
10
|
export function renderDirectory(params) {
|
|
2
11
|
const { urlPath, entries } = params;
|
|
12
|
+
const lastSegment = urlPath.replace(/\/+$/, "").split("/").pop() || "";
|
|
13
|
+
const title = params.title ??
|
|
14
|
+
(lastSegment
|
|
15
|
+
? decodeURIComponent(lastSegment).replace(/[-_]/g, " ")
|
|
16
|
+
: "Index");
|
|
3
17
|
// Sort: folders first, then files (alphabetically)
|
|
4
|
-
const sorted = [...entries]
|
|
18
|
+
const sorted = [...entries]
|
|
19
|
+
.filter((entry) => !isIndexEntry(entry.name))
|
|
20
|
+
.sort((a, b) => {
|
|
5
21
|
if (a.isDirectory() && !b.isDirectory())
|
|
6
22
|
return -1;
|
|
7
23
|
if (!a.isDirectory() && b.isDirectory())
|
|
8
24
|
return 1;
|
|
9
25
|
return a.name.localeCompare(b.name);
|
|
10
26
|
});
|
|
27
|
+
const base = urlPath.replace(/\/+$/, "") + "/";
|
|
11
28
|
const rows = sorted
|
|
12
29
|
.map((entry) => {
|
|
13
30
|
const name = entry.name;
|
|
14
31
|
const isDir = entry.isDirectory();
|
|
15
|
-
const
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
|
|
32
|
+
const isDoc = /\.(md|mdx)$/i.test(name);
|
|
33
|
+
const icon = isDir ? "📁" : isDoc ? "📄" : "📃";
|
|
34
|
+
const href = isDir || isDoc
|
|
35
|
+
? `${base}${encodeURIComponent(name.replace(/\.(md|mdx)$/i, ""))}/`
|
|
36
|
+
: `${base}${encodeURIComponent(name)}`;
|
|
19
37
|
const size = !isDir && entry.isFile()
|
|
20
38
|
? formatSize(entry.size || 0)
|
|
21
39
|
: "-";
|
|
@@ -25,104 +43,15 @@ export function renderDirectory(params) {
|
|
|
25
43
|
</tr>`;
|
|
26
44
|
})
|
|
27
45
|
.join("\n");
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
<script>
|
|
32
|
-
(function() {
|
|
33
|
-
var theme = localStorage.getItem('theme') || 'system';
|
|
34
|
-
if (theme === 'system') {
|
|
35
|
-
theme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
|
|
36
|
-
}
|
|
37
|
-
document.documentElement.setAttribute('data-theme', theme);
|
|
38
|
-
})();
|
|
39
|
-
</script>`;
|
|
40
|
-
return `<!DOCTYPE html>
|
|
41
|
-
<html lang="en" data-theme="light">
|
|
42
|
-
<head>
|
|
43
|
-
<meta charset="UTF-8">
|
|
44
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
45
|
-
<title>Index of ${escapeHtml(urlPath)}</title>
|
|
46
|
-
${themeScript}
|
|
47
|
-
<style>
|
|
48
|
-
:root {
|
|
49
|
-
--bg: #f6f8fa;
|
|
50
|
-
--bg-secondary: #ffffff;
|
|
51
|
-
--text: #24292f;
|
|
52
|
-
--text-muted: #656d76;
|
|
53
|
-
--border: #d0d7de;
|
|
54
|
-
--accent: #0969da;
|
|
55
|
-
--header-bg: #0d1117;
|
|
56
|
-
--header-text: #f0f6fc;
|
|
57
|
-
--header-border: #30363d;
|
|
58
|
-
}
|
|
59
|
-
:root[data-theme="dark"] {
|
|
60
|
-
--bg: #0d1117;
|
|
61
|
-
--bg-secondary: #161b22;
|
|
62
|
-
--text: #e6edf3;
|
|
63
|
-
--text-muted: #8d96a0;
|
|
64
|
-
--border: #30363d;
|
|
65
|
-
--accent: #58a6ff;
|
|
66
|
-
--header-bg: #161b22;
|
|
67
|
-
--header-text: #e6edf3;
|
|
68
|
-
--header-border: #30363d;
|
|
69
|
-
}
|
|
70
|
-
* { box-sizing: border-box; }
|
|
71
|
-
body {
|
|
72
|
-
margin: 0;
|
|
73
|
-
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Noto Sans', Helvetica, Arial, sans-serif;
|
|
74
|
-
font-size: 16px;
|
|
75
|
-
line-height: 1.6;
|
|
76
|
-
color: var(--text);
|
|
77
|
-
background: var(--bg);
|
|
78
|
-
}
|
|
79
|
-
.header {
|
|
80
|
-
background: var(--header-bg);
|
|
81
|
-
padding: 16px 24px;
|
|
82
|
-
border-bottom: 1px solid var(--header-border);
|
|
83
|
-
}
|
|
84
|
-
.header-logo {
|
|
85
|
-
color: var(--header-text);
|
|
86
|
-
font-weight: 600;
|
|
87
|
-
font-size: 14px;
|
|
88
|
-
text-decoration: none;
|
|
89
|
-
}
|
|
90
|
-
.container {
|
|
91
|
-
max-width: 860px;
|
|
92
|
-
margin: 32px auto;
|
|
93
|
-
padding: 32px;
|
|
94
|
-
background: var(--bg-secondary);
|
|
95
|
-
border: 1px solid var(--border);
|
|
96
|
-
border-radius: 6px;
|
|
97
|
-
}
|
|
98
|
-
h1 { font-size: 20px; font-weight: 600; margin: 0 0 16px; color: var(--text); }
|
|
99
|
-
.breadcrumb { font-size: 14px; color: var(--text-muted); margin-bottom: 20px; }
|
|
100
|
-
.breadcrumb a { color: var(--accent); text-decoration: none; }
|
|
101
|
-
.breadcrumb a:hover { text-decoration: underline; }
|
|
102
|
-
table { width: 100%; border-collapse: collapse; }
|
|
103
|
-
th, td { padding: 8px 12px; text-align: left; border-bottom: 1px solid var(--border); }
|
|
104
|
-
th { font-weight: 600; color: var(--text-muted); font-size: 14px; }
|
|
105
|
-
td { font-size: 14px; }
|
|
106
|
-
td a { color: var(--accent); text-decoration: none; }
|
|
107
|
-
td a:hover { text-decoration: underline; }
|
|
108
|
-
.size { color: var(--text-muted); text-align: right; width: 100px; }
|
|
109
|
-
.empty { color: var(--text-muted); font-style: italic; padding: 24px 0; }
|
|
110
|
-
@media (max-width: 900px) {
|
|
111
|
-
.container { margin: 16px; padding: 20px; }
|
|
112
|
-
.header { padding: 12px 16px; }
|
|
113
|
-
}
|
|
114
|
-
@media (max-width: 480px) {
|
|
115
|
-
.container { margin: 8px; padding: 16px; }
|
|
116
|
-
}
|
|
117
|
-
</style>
|
|
118
|
-
</head>
|
|
119
|
-
<body>
|
|
46
|
+
const hasParent = urlPath !== "" && urlPath !== "/";
|
|
47
|
+
return `<h1>${escapeHtml(title)}</h1>
|
|
48
|
+
<nav class="dir-listing" aria-label="Directory listing">
|
|
120
49
|
<table>
|
|
121
50
|
<thead>
|
|
122
51
|
<tr><th>Name</th><th class="size">Size</th></tr>
|
|
123
52
|
</thead>
|
|
124
53
|
<tbody>
|
|
125
|
-
${
|
|
54
|
+
${hasParent
|
|
126
55
|
? ` <tr>
|
|
127
56
|
<td>📁 <a href="../">../</a></td>
|
|
128
57
|
<td class="size">-</td>
|
|
@@ -131,24 +60,11 @@ ${urlPath
|
|
|
131
60
|
${rows || ' <tr><td colspan="2" class="empty">Empty directory</td></tr>'}
|
|
132
61
|
</tbody>
|
|
133
62
|
</table>
|
|
134
|
-
</
|
|
135
|
-
</html>`;
|
|
63
|
+
</nav>`;
|
|
136
64
|
}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
}
|
|
141
|
-
const parts = urlPath.split("/").filter(Boolean);
|
|
142
|
-
let accum = "";
|
|
143
|
-
const links = parts.map((part, i) => {
|
|
144
|
-
accum += "/" + part;
|
|
145
|
-
const isLast = i === parts.length - 1;
|
|
146
|
-
if (isLast) {
|
|
147
|
-
return `<strong>${escapeHtml(part)}</strong>`;
|
|
148
|
-
}
|
|
149
|
-
return `<a href="${accum}/">${escapeHtml(part)}</a>`;
|
|
150
|
-
});
|
|
151
|
-
return '<a href="/">home</a> / ' + links.join(" / ");
|
|
65
|
+
/** Index files render as the directory page itself — hide them in listings. */
|
|
66
|
+
function isIndexEntry(name) {
|
|
67
|
+
return /^(readme|index)\.(md|mdx|html?)$/i.test(name);
|
|
152
68
|
}
|
|
153
69
|
function formatSize(bytes) {
|
|
154
70
|
if (bytes === 0)
|
package/dist/directory.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directory.js","sourceRoot":"","sources":["../src/directory.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,eAAe,CAAC,
|
|
1
|
+
{"version":3,"file":"directory.js","sourceRoot":"","sources":["../src/directory.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAAC,MAK/B;IACC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IACpC,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;IACvE,MAAM,KAAK,GACT,MAAM,CAAC,KAAK;QACZ,CAAC,WAAW;YACV,CAAC,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;YACvD,CAAC,CAAC,OAAO,CAAC,CAAC;IAEf,mDAAmD;IACnD,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC;SACxB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;SAC5C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACb,IAAI,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE;YAAE,OAAO,CAAC,CAAC,CAAC;QACnD,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,WAAW,EAAE;YAAE,OAAO,CAAC,CAAC;QAClD,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEL,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;IAE/C,MAAM,IAAI,GAAG,MAAM;SAChB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACb,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACxB,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QAChD,MAAM,IAAI,GACR,KAAK,IAAI,KAAK;YACZ,CAAC,CAAC,GAAG,IAAI,GAAG,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,GAAG;YACnE,CAAC,CAAC,GAAG,IAAI,GAAG,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,GACR,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;YACtB,CAAC,CAAC,UAAU,CAAE,KAAqC,CAAC,IAAI,IAAI,CAAC,CAAC;YAC9D,CAAC,CAAC,GAAG,CAAC;QAEV,OAAO;cACC,IAAI,aAAa,IAAI,KAAK,UAAU,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;2BAChD,IAAI;YACnB,CAAC;IACT,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,MAAM,SAAS,GAAG,OAAO,KAAK,EAAE,IAAI,OAAO,KAAK,GAAG,CAAC;IAEpD,OAAO,OAAO,UAAU,CAAC,KAAK,CAAC;;;;;;;EAQ/B,SAAS;QACP,CAAC,CAAC;;;YAGM;QACR,CAAC,CAAC,EACN;EACE,IAAI,IAAI,mEAAmE;;;OAGtE,CAAC;AACR,CAAC;AAED,+EAA+E;AAC/E,SAAS,YAAY,CAAC,IAAY;IAChC,OAAO,mCAAmC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9B,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACtC,MAAM,CAAC,GAAG,IAAI,CAAC;IACf,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,OAAO,GAAG,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAC/B,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,MAAM,WAAW,GAA2B;QAC1C,GAAG,EAAE,OAAO;QACZ,GAAG,EAAE,MAAM;QACX,GAAG,EAAE,MAAM;QACX,GAAG,EAAE,QAAQ;QACb,GAAG,EAAE,QAAQ;KACd,CAAC;IACF,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;AACvE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feed.d.ts","sourceRoot":"","sources":["../../src/generators/feed.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"feed.d.ts","sourceRoot":"","sources":["../../src/generators/feed.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAuGrD,wBAAsB,YAAY,CAChC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,MAAM,CAAC,CA+CjB"}
|
package/dist/generators/feed.js
CHANGED
|
@@ -46,7 +46,14 @@ async function readDirRecursive(dirPath, rootDir, baseUrl, settings) {
|
|
|
46
46
|
if (isNaN(date.getTime()))
|
|
47
47
|
continue;
|
|
48
48
|
const relativePath = "/" + path.relative(rootDir, fullPath).replace(/\\/g, "/");
|
|
49
|
-
|
|
49
|
+
let urlPath = relativePath.replace(/\.(md|mdx)$/, "");
|
|
50
|
+
// Index files render at the directory URL; other docs are
|
|
51
|
+
// trailing-slash routes — both canonical clean-URL forms.
|
|
52
|
+
if (/^(readme|index)$/i.test(path.basename(urlPath))) {
|
|
53
|
+
urlPath = path.dirname(urlPath);
|
|
54
|
+
}
|
|
55
|
+
if (!urlPath.endsWith("/"))
|
|
56
|
+
urlPath += "/";
|
|
50
57
|
const fullUrl = `${baseUrl.replace(/\/$/, "")}${urlPath}`;
|
|
51
58
|
const title = parsed.data.title ||
|
|
52
59
|
parsed.content.match(/^#\s+(.+)$/m)?.[1] ||
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feed.js","sourceRoot":"","sources":["../../src/generators/feed.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"feed.js","sourceRoot":"","sources":["../../src/generators/feed.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Settings } from "../settings/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* Build `/llms.txt`: H1 site title, a blockquote summary, then link lists
|
|
4
|
+
* grouped by top-level section. Links are absolute when `site.baseUrl`
|
|
5
|
+
* (or the request `origin` in serve mode) is available, root-relative
|
|
6
|
+
* otherwise.
|
|
7
|
+
*/
|
|
8
|
+
export declare function generateLlmsTxt(rootDir: string, settings: Settings, origin?: string): Promise<string>;
|
|
9
|
+
/**
|
|
10
|
+
* Build `/llms-full.txt`: the full Markdown source of every page, each
|
|
11
|
+
* preceded by its title and canonical URL so chunks remain attributable.
|
|
12
|
+
*/
|
|
13
|
+
export declare function generateLlmsFullTxt(rootDir: string, settings: Settings, origin?: string): Promise<string>;
|
|
14
|
+
//# sourceMappingURL=llms.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llms.d.ts","sourceRoot":"","sources":["../../src/generators/llms.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AA6GrD;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,QAAQ,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,CAsCjB;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,QAAQ,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,CA4BjB"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { promises as fs } from "node:fs";
|
|
3
|
+
import matter from "gray-matter";
|
|
4
|
+
import { isHidden } from "../render-page.js";
|
|
5
|
+
import { extractFirstHeading, extractFirstParagraph, } from "../seo/extract.js";
|
|
6
|
+
import { buildSiteUrl } from "../seo/url.js";
|
|
7
|
+
function humanizeSegment(segment) {
|
|
8
|
+
return segment
|
|
9
|
+
.replace(/^\d+\./, "")
|
|
10
|
+
.replace(/[-_]/g, " ")
|
|
11
|
+
.trim()
|
|
12
|
+
.replace(/^\w/, (c) => c.toUpperCase());
|
|
13
|
+
}
|
|
14
|
+
async function collectPages(dirPath, rootDir, settings) {
|
|
15
|
+
const pages = [];
|
|
16
|
+
const items = (await fs.readdir(dirPath, { withFileTypes: true })).sort((a, b) => a.name.localeCompare(b.name));
|
|
17
|
+
for (const item of items) {
|
|
18
|
+
const fullPath = path.join(dirPath, item.name);
|
|
19
|
+
if (isHidden(item.name, settings))
|
|
20
|
+
continue;
|
|
21
|
+
if (item.isDirectory()) {
|
|
22
|
+
pages.push(...(await collectPages(fullPath, rootDir, settings)));
|
|
23
|
+
}
|
|
24
|
+
else if (item.name.endsWith(".md") ||
|
|
25
|
+
(item.name.endsWith(".mdx") && settings.mdx.enabled)) {
|
|
26
|
+
try {
|
|
27
|
+
const raw = await fs.readFile(fullPath, "utf-8");
|
|
28
|
+
const parsed = matter(raw);
|
|
29
|
+
const frontmatter = parsed.data;
|
|
30
|
+
if ((frontmatter.noindex ?? frontmatter.noIndex) === true)
|
|
31
|
+
continue;
|
|
32
|
+
const relativePath = "/" + path.relative(rootDir, fullPath).replace(/\\/g, "/");
|
|
33
|
+
let urlPath = relativePath.replace(/\.(md|mdx)$/, "");
|
|
34
|
+
// Index files render at the directory URL; other docs are
|
|
35
|
+
// trailing-slash routes — both canonical clean-URL forms.
|
|
36
|
+
if (/^(readme|index)$/i.test(path.basename(urlPath))) {
|
|
37
|
+
urlPath = path.dirname(urlPath);
|
|
38
|
+
}
|
|
39
|
+
if (!urlPath.endsWith("/"))
|
|
40
|
+
urlPath += "/";
|
|
41
|
+
const title = (typeof frontmatter.title === "string" && frontmatter.title) ||
|
|
42
|
+
extractFirstHeading(parsed.content) ||
|
|
43
|
+
item.name.replace(/\.\w+$/, "");
|
|
44
|
+
const description = (typeof frontmatter.description === "string" &&
|
|
45
|
+
frontmatter.description) ||
|
|
46
|
+
extractFirstParagraph(parsed.content) ||
|
|
47
|
+
undefined;
|
|
48
|
+
pages.push({
|
|
49
|
+
title,
|
|
50
|
+
urlPath,
|
|
51
|
+
description,
|
|
52
|
+
content: parsed.content.trim(),
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
// Skip files that can't be read
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return pages;
|
|
61
|
+
}
|
|
62
|
+
function pageUrl(urlPath, siteUrl) {
|
|
63
|
+
return siteUrl ? `${siteUrl.replace(/\/+$/, "")}${urlPath}` : urlPath;
|
|
64
|
+
}
|
|
65
|
+
async function readCustomFile(filePath) {
|
|
66
|
+
try {
|
|
67
|
+
const content = await fs.readFile(filePath, "utf-8");
|
|
68
|
+
return content.trim().length > 0 ? content : null;
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Build `/llms.txt`: H1 site title, a blockquote summary, then link lists
|
|
76
|
+
* grouped by top-level section. Links are absolute when `site.baseUrl`
|
|
77
|
+
* (or the request `origin` in serve mode) is available, root-relative
|
|
78
|
+
* otherwise.
|
|
79
|
+
*/
|
|
80
|
+
export async function generateLlmsTxt(rootDir, settings, origin) {
|
|
81
|
+
const custom = await readCustomFile(path.join(rootDir, "llms.txt"));
|
|
82
|
+
if (custom)
|
|
83
|
+
return custom;
|
|
84
|
+
const pages = await collectPages(rootDir, rootDir, settings);
|
|
85
|
+
const siteUrl = buildSiteUrl(settings, origin);
|
|
86
|
+
const lines = [`# ${settings.site.title || "Documentation"}`, ""];
|
|
87
|
+
if (settings.site.description) {
|
|
88
|
+
lines.push(`> ${settings.site.description}`, "");
|
|
89
|
+
}
|
|
90
|
+
// Group by top-level section; root pages first under "Docs".
|
|
91
|
+
const groups = new Map();
|
|
92
|
+
for (const page of pages) {
|
|
93
|
+
const section = page.urlPath.split("/").filter(Boolean)[0] ?? "";
|
|
94
|
+
const group = groups.get(section);
|
|
95
|
+
if (group)
|
|
96
|
+
group.push(page);
|
|
97
|
+
else
|
|
98
|
+
groups.set(section, [page]);
|
|
99
|
+
}
|
|
100
|
+
const sectionNames = [...groups.keys()].sort((a, b) => {
|
|
101
|
+
if (a === "")
|
|
102
|
+
return -1;
|
|
103
|
+
if (b === "")
|
|
104
|
+
return 1;
|
|
105
|
+
return a.localeCompare(b);
|
|
106
|
+
});
|
|
107
|
+
for (const section of sectionNames) {
|
|
108
|
+
const heading = section ? humanizeSegment(section) : "Docs";
|
|
109
|
+
lines.push(`## ${heading}`, "");
|
|
110
|
+
for (const page of groups.get(section)) {
|
|
111
|
+
const suffix = page.description ? `: ${page.description}` : "";
|
|
112
|
+
lines.push(`- [${page.title}](${pageUrl(page.urlPath, siteUrl)})${suffix}`);
|
|
113
|
+
}
|
|
114
|
+
lines.push("");
|
|
115
|
+
}
|
|
116
|
+
return `${lines.join("\n").trimEnd()}\n`;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Build `/llms-full.txt`: the full Markdown source of every page, each
|
|
120
|
+
* preceded by its title and canonical URL so chunks remain attributable.
|
|
121
|
+
*/
|
|
122
|
+
export async function generateLlmsFullTxt(rootDir, settings, origin) {
|
|
123
|
+
const custom = await readCustomFile(path.join(rootDir, "llms-full.txt"));
|
|
124
|
+
if (custom)
|
|
125
|
+
return custom;
|
|
126
|
+
const pages = await collectPages(rootDir, rootDir, settings);
|
|
127
|
+
const siteUrl = buildSiteUrl(settings, origin);
|
|
128
|
+
const parts = [
|
|
129
|
+
`# ${settings.site.title || "Documentation"}`,
|
|
130
|
+
];
|
|
131
|
+
if (settings.site.description) {
|
|
132
|
+
parts.push("", settings.site.description);
|
|
133
|
+
}
|
|
134
|
+
for (const page of pages) {
|
|
135
|
+
parts.push("", "---", "", `# ${page.title}`, "", `Source: ${pageUrl(page.urlPath, siteUrl)}`, "", page.content);
|
|
136
|
+
}
|
|
137
|
+
return `${parts.join("\n").trimEnd()}\n`;
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=llms.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llms.js","sourceRoot":"","sources":["../../src/generators/llms.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-index.d.ts","sourceRoot":"","sources":["../../src/generators/search-index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;
|
|
1
|
+
{"version":3,"file":"search-index.d.ts","sourceRoot":"","sources":["../../src/generators/search-index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAuGD,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,WAAW,EAAE,CAAC,CAMxB"}
|
|
@@ -59,12 +59,13 @@ async function readDirRecursive(dirPath, rootDir, settings) {
|
|
|
59
59
|
const parsed = matter(content);
|
|
60
60
|
const relativePath = "/" + path.relative(rootDir, fullPath).replace(/\\/g, "/");
|
|
61
61
|
let href = relativePath.replace(/\.(md|mdx)$/, "");
|
|
62
|
-
//
|
|
63
|
-
|
|
62
|
+
// Index files render at the directory URL; everything else is a
|
|
63
|
+
// trailing-slash doc route — both canonical clean-URL forms.
|
|
64
|
+
if (/^(readme|index)$/i.test(path.basename(href))) {
|
|
64
65
|
href = path.dirname(href);
|
|
65
|
-
if (!href.endsWith("/"))
|
|
66
|
-
href += "/";
|
|
67
66
|
}
|
|
67
|
+
if (!href.endsWith("/"))
|
|
68
|
+
href += "/";
|
|
68
69
|
const title = parsed.data.title ||
|
|
69
70
|
parsed.content.match(/^#\s+(.+)$/m)?.[1] ||
|
|
70
71
|
item.name.replace(/\.\w+$/, "");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-index.js","sourceRoot":"","sources":["../../src/generators/search-index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,MAAM,MAAM,aAAa,CAAC;AAWjC,SAAS,QAAQ,CAAC,QAAgB,EAAE,QAAkB;IACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAEzC,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;QACvD,IAAI,QAAQ,KAAK,OAAO;YAAE,OAAO,IAAI,CAAC;QACtC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAChE,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAEtE,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,aAAa,CAAC,OAAe;IACpC,OAAO,OAAO;SACX,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC,qBAAqB;SACnD,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC,qBAAqB;SACpD,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,qBAAqB;SACjD,OAAO,CAAC,wBAAwB,EAAE,IAAI,CAAC,CAAC,6BAA6B;SACrE,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,0BAA0B;SACjD,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,uBAAuB;SAC5C,IAAI,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,eAAe,CAAC,OAAe;IACtC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,KAAK,GAAG,mBAAmB,CAAC;IAClC,IAAI,KAAK,CAAC;IACV,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC9C,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,YAAY,CAAC,IAAY,EAAE,QAAkB;IACpD,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC;IAClD,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3B,MAAM,cAAc,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC;QAC3C,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACvB,CAAC,CAAC,QAAQ,CAAC;IACb,OAAO,cAAc,GAAG,IAAI,CAAC;AAC/B,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,OAAe,EACf,OAAe,EACf,QAAkB;IAElB,MAAM,OAAO,GAAkB,EAAE,CAAC;IAClC,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAEjE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAE/C,IAAI,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;YAAE,SAAS;QAE3C,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACvB,MAAM,UAAU,GAAG,MAAM,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;YACvE,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;QAC9B,CAAC;aAAM,IACL,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YACzB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EACpD,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBACrD,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC/B,MAAM,YAAY,GAChB,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC7D,IAAI,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;gBACnD,gEAAgE;gBAChE,
|
|
1
|
+
{"version":3,"file":"search-index.js","sourceRoot":"","sources":["../../src/generators/search-index.ts"],"names":[],"mappings":"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"}
|
|
@@ -107,7 +107,10 @@ async function scanDirectory(dirPath, rootDir, settings, pages) {
|
|
|
107
107
|
try {
|
|
108
108
|
const content = await fs.readFile(fullPath, "utf-8");
|
|
109
109
|
const parsed = matter(content);
|
|
110
|
-
lastmod = toIsoDate(parsed.data.dateModified ??
|
|
110
|
+
lastmod = toIsoDate(parsed.data.dateModified ??
|
|
111
|
+
parsed.data.lastmod ??
|
|
112
|
+
parsed.data.updated ??
|
|
113
|
+
parsed.data.date);
|
|
111
114
|
noIndex = (parsed.data.noindex ?? parsed.data.noIndex) === true;
|
|
112
115
|
}
|
|
113
116
|
catch {
|
|
@@ -132,6 +135,7 @@ async function scanDirectory(dirPath, rootDir, settings, pages) {
|
|
|
132
135
|
pages.push({
|
|
133
136
|
urlPath,
|
|
134
137
|
lastmod: stat.mtime.toISOString().split("T")[0],
|
|
138
|
+
noIndex: settings.seo.noIndexDirectoryPages,
|
|
135
139
|
});
|
|
136
140
|
}
|
|
137
141
|
catch {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sitemap.js","sourceRoot":"","sources":["../../src/generators/sitemap.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"sitemap.js","sourceRoot":"","sources":["../../src/generators/sitemap.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"static-export.d.ts","sourceRoot":"","sources":["../../src/generators/static-export.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"static-export.d.ts","sourceRoot":"","sources":["../../src/generators/static-export.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAkBrD,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAkBD,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAuP5E"}
|
|
@@ -6,6 +6,7 @@ import { buildSearchIndex } from "./search-index.js";
|
|
|
6
6
|
import { generateSitemapFromPages } from "./sitemap.js";
|
|
7
7
|
import { generateRobotsTxt } from "./robots.js";
|
|
8
8
|
import { generateFeed } from "./feed.js";
|
|
9
|
+
import { generateLlmsTxt, generateLlmsFullTxt } from "./llms.js";
|
|
9
10
|
import { generateOgImage, getOgImagePath, } from "../og/index.js";
|
|
10
11
|
import { loadExportState, saveExportState, migrateOldState, cleanupOrphanedFiles, calculateFileHash, calculateSettingsHash, } from "../export-state.js";
|
|
11
12
|
export async function exportStaticSite(options) {
|
|
@@ -64,7 +65,7 @@ export async function exportStaticSite(options) {
|
|
|
64
65
|
let autoIndexCount = 0;
|
|
65
66
|
for (const [dirPath, dirInfo] of dirMap) {
|
|
66
67
|
if (!dirInfo.hasIndex) {
|
|
67
|
-
await generateAutoIndex(dirInfo, rootDir, settings);
|
|
68
|
+
const page = await generateAutoIndex(dirInfo, rootDir, settings);
|
|
68
69
|
autoIndexCount++;
|
|
69
70
|
const autoIndexOutputPath = path.join(dirInfo.outputPath, "index.html");
|
|
70
71
|
// Add to pageInfos so OG images are generated for auto-index pages
|
|
@@ -72,9 +73,9 @@ export async function exportStaticSite(options) {
|
|
|
72
73
|
urlPath: dirInfo.urlPath,
|
|
73
74
|
outputPath: autoIndexOutputPath,
|
|
74
75
|
sourcePath: "", // Auto-index pages have no source file
|
|
75
|
-
title:
|
|
76
|
-
description: settings.site.description,
|
|
77
|
-
noIndex:
|
|
76
|
+
title: page.title,
|
|
77
|
+
description: page.description ?? settings.site.description,
|
|
78
|
+
noIndex: settings.seo.noIndexDirectoryPages,
|
|
78
79
|
lastmod: await directoryLastmod(absRootDir, dirInfo.urlPath),
|
|
79
80
|
});
|
|
80
81
|
if (!silent) {
|
|
@@ -165,6 +166,25 @@ export async function exportStaticSite(options) {
|
|
|
165
166
|
console.log(` ✓ feed.xml`);
|
|
166
167
|
}
|
|
167
168
|
}
|
|
169
|
+
// 8.5. Generate llms.txt and llms-full.txt if enabled
|
|
170
|
+
const llmsTxtPath = path.join(absOutputDir, "llms.txt");
|
|
171
|
+
const llmsFullPath = path.join(absOutputDir, "llms-full.txt");
|
|
172
|
+
if (settings.seo.generateLlmsTxt) {
|
|
173
|
+
const [llmsTxt, llmsFull] = await Promise.all([
|
|
174
|
+
generateLlmsTxt(absRootDir, settings),
|
|
175
|
+
generateLlmsFullTxt(absRootDir, settings),
|
|
176
|
+
]);
|
|
177
|
+
await fs.writeFile(llmsTxtPath, llmsTxt, "utf-8");
|
|
178
|
+
await fs.writeFile(llmsFullPath, llmsFull, "utf-8");
|
|
179
|
+
if (!silent) {
|
|
180
|
+
console.log(` ✓ llms.txt`);
|
|
181
|
+
console.log(` ✓ llms-full.txt`);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
await fs.rm(llmsTxtPath, { force: true });
|
|
186
|
+
await fs.rm(llmsFullPath, { force: true });
|
|
187
|
+
}
|
|
168
188
|
// 9. Save new export state (only OG state)
|
|
169
189
|
const finalState = {
|
|
170
190
|
settingsHash: currentSettingsHash,
|
|
@@ -324,6 +344,10 @@ function isExportableFile(fileName, settings) {
|
|
|
324
344
|
if (settings.seo.generateRobotsTxt && lowerName === "robots.txt") {
|
|
325
345
|
return true;
|
|
326
346
|
}
|
|
347
|
+
if (settings.seo.generateLlmsTxt &&
|
|
348
|
+
(lowerName === "llms.txt" || lowerName === "llms-full.txt")) {
|
|
349
|
+
return true;
|
|
350
|
+
}
|
|
327
351
|
return isAllowedExtension(path.extname(lowerName).toLowerCase(), settings);
|
|
328
352
|
}
|
|
329
353
|
async function copyFile(src, dest) {
|
|
@@ -525,10 +549,10 @@ async function generateAutoIndex(dirInfo, rootDir, settings) {
|
|
|
525
549
|
mode: "static",
|
|
526
550
|
isEntryVisible: (entry) => !entry.name.startsWith(".") &&
|
|
527
551
|
!(entry.isFile() && entry.name === "index.html"),
|
|
528
|
-
title: dirInfo.urlPath ? `Index of ${dirInfo.urlPath}` : "Index",
|
|
529
552
|
});
|
|
530
553
|
const indexPath = path.join(dirInfo.outputPath, "index.html");
|
|
531
554
|
await fs.writeFile(indexPath, page.html, "utf-8");
|
|
555
|
+
return page;
|
|
532
556
|
}
|
|
533
557
|
/**
|
|
534
558
|
* Clean up old HTML files (delete all HTML files before re-export)
|