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.
Files changed (77) hide show
  1. package/dist/directory.d.ts +11 -0
  2. package/dist/directory.d.ts.map +1 -1
  3. package/dist/directory.js +31 -115
  4. package/dist/directory.js.map +1 -1
  5. package/dist/generators/feed.d.ts.map +1 -1
  6. package/dist/generators/feed.js +8 -1
  7. package/dist/generators/feed.js.map +1 -1
  8. package/dist/generators/llms.d.ts +14 -0
  9. package/dist/generators/llms.d.ts.map +1 -0
  10. package/dist/generators/llms.js +139 -0
  11. package/dist/generators/llms.js.map +1 -0
  12. package/dist/generators/search-index.d.ts.map +1 -1
  13. package/dist/generators/search-index.js +5 -4
  14. package/dist/generators/search-index.js.map +1 -1
  15. package/dist/generators/sitemap.js +5 -1
  16. package/dist/generators/sitemap.js.map +1 -1
  17. package/dist/generators/static-export.d.ts.map +1 -1
  18. package/dist/generators/static-export.js +29 -5
  19. package/dist/generators/static-export.js.map +1 -1
  20. package/dist/link-transform.d.ts +37 -5
  21. package/dist/link-transform.d.ts.map +1 -1
  22. package/dist/link-transform.js +120 -13
  23. package/dist/link-transform.js.map +1 -1
  24. package/dist/og/generator.d.ts +20 -0
  25. package/dist/og/generator.d.ts.map +1 -1
  26. package/dist/og/generator.js +30 -22
  27. package/dist/og/generator.js.map +1 -1
  28. package/dist/render-page.d.ts +0 -1
  29. package/dist/render-page.d.ts.map +1 -1
  30. package/dist/render-page.js +61 -34
  31. package/dist/render-page.js.map +1 -1
  32. package/dist/renderer/markdown.d.ts.map +1 -1
  33. package/dist/renderer/markdown.js +37 -52
  34. package/dist/renderer/markdown.js.map +1 -1
  35. package/dist/router.d.ts.map +1 -1
  36. package/dist/router.js +10 -0
  37. package/dist/router.js.map +1 -1
  38. package/dist/seo/extract.d.ts +4 -2
  39. package/dist/seo/extract.d.ts.map +1 -1
  40. package/dist/seo/extract.js +42 -15
  41. package/dist/seo/extract.js.map +1 -1
  42. package/dist/seo/jsonld.d.ts.map +1 -1
  43. package/dist/seo/jsonld.js +11 -0
  44. package/dist/seo/jsonld.js.map +1 -1
  45. package/dist/seo/metadata.d.ts +13 -0
  46. package/dist/seo/metadata.d.ts.map +1 -1
  47. package/dist/seo/metadata.js +15 -3
  48. package/dist/seo/metadata.js.map +1 -1
  49. package/dist/settings/index.d.ts.map +1 -1
  50. package/dist/settings/index.js +14 -0
  51. package/dist/settings/index.js.map +1 -1
  52. package/dist/settings/schema.d.ts +249 -0
  53. package/dist/settings/schema.d.ts.map +1 -1
  54. package/dist/settings/schema.js +39 -0
  55. package/dist/settings/schema.js.map +1 -1
  56. package/dist/template/analytics.d.ts +18 -0
  57. package/dist/template/analytics.d.ts.map +1 -0
  58. package/dist/template/analytics.js +83 -0
  59. package/dist/template/analytics.js.map +1 -0
  60. package/dist/template/index.d.ts +5 -0
  61. package/dist/template/index.d.ts.map +1 -1
  62. package/dist/template/index.js +46 -19
  63. package/dist/template/index.js.map +1 -1
  64. package/dist/template/search.d.ts.map +1 -1
  65. package/dist/template/search.js +9 -2
  66. package/dist/template/search.js.map +1 -1
  67. package/dist/template/seo.d.ts.map +1 -1
  68. package/dist/template/seo.js +83 -0
  69. package/dist/template/seo.js.map +1 -1
  70. package/dist/template/sidebar.d.ts.map +1 -1
  71. package/dist/template/sidebar.js +10 -7
  72. package/dist/template/sidebar.js.map +1 -1
  73. package/dist/validator/index.d.ts +1 -1
  74. package/dist/validator/index.d.ts.map +1 -1
  75. package/dist/validator/index.js +21 -0
  76. package/dist/validator/index.js.map +1 -1
  77. package/package.json +1 -1
@@ -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
@@ -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;CACnB,GAAG,MAAM,CA+IT"}
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].sort((a, b) => {
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 icon = isDir ? "📁" : name.endsWith(".md") ? "📄" : "📃";
16
- const href = (urlPath ? urlPath.replace(/\/+$/, "") + "/" : "") +
17
- encodeURIComponent(name) +
18
- (isDir ? "/" : "");
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 breadcrumb = generateBreadcrumb(urlPath);
29
- // Theme script for dark mode support
30
- const themeScript = `
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
- ${urlPath
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
- </body>
135
- </html>`;
63
+ </nav>`;
136
64
  }
137
- function generateBreadcrumb(urlPath) {
138
- if (!urlPath || urlPath === "/") {
139
- return "<strong>home</strong>";
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)
@@ -1 +1 @@
1
- {"version":3,"file":"directory.js","sourceRoot":"","sources":["../src/directory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"directory.js","sourceRoot":"","sources":["../src/directory.ts"],"names":[],"mappings":"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"}
@@ -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;AAiGrD,wBAAsB,YAAY,CAChC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,MAAM,CAAC,CA+CjB"}
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"}
@@ -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
- const urlPath = relativePath.replace(/\.(md|mdx)$/, "");
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":"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,SAAS,CAAC,IAAY;IAC7B,OAAO,IAAI;SACR,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;SACrB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;SACrB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;AAC7B,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,OAAe,EACf,OAAe,EACf,OAAe,EACf,QAAkB;IAElB,MAAM,OAAO,GAAgB,EAAE,CAAC;IAChC,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,CACvC,QAAQ,EACR,OAAO,EACP,OAAO,EACP,QAAQ,CACT,CAAC;YACF,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;gBAE/B,sEAAsE;gBACtE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI;oBAAE,SAAS;gBAEhC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAc,CAAC,CAAC;gBAClD,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;oBAAE,SAAS;gBAEpC,MAAM,YAAY,GAChB,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC7D,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;gBACxD,MAAM,OAAO,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC;gBAE1D,MAAM,KAAK,GACR,MAAM,CAAC,IAAI,CAAC,KAAgB;oBAC7B,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;oBACxC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBAElC,OAAO,CAAC,IAAI,CAAC;oBACX,KAAK;oBACL,GAAG,EAAE,OAAO;oBACZ,IAAI;oBACJ,WAAW,EAAG,MAAM,CAAC,IAAI,CAAC,WAAsB,IAAI,EAAE;oBACtD,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;iBACjD,CAAC,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACP,gCAAgC;YAClC,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,OAAe,EACf,QAAkB;IAElB,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,IAAI,uBAAuB,CAAC;IACjE,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC;IAClD,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,IAAI,WAAW,CAAC;IACzD,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,IAAI,OAAO,GAAG,QAAQ,CAAC;IAChE,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,QAAQ,CAAC;IAE1D,MAAM,OAAO,GAAG,MAAM,gBAAgB,CACpC,OAAO,EACP,OAAO,EACP,WAAW,EACX,QAAQ,CACT,CAAC;IAEF,6BAA6B;IAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAE5D,sBAAsB;IACtB,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAE3C,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;IAChE,MAAM,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,IAAI,UAAU,CAAC;IAC/D,MAAM,aAAa,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAE/C,MAAM,YAAY,GAAG,aAAa;SAC/B,GAAG,CACF,CAAC,KAAK,EAAE,EAAE,CAAC;eACF,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC;cACvB,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC;iBACjB,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE;cAC3B,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC;QAC1B,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,gBAAgB,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE;YACjF,CACP;SACA,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,OAAO;;;aAGI,SAAS,CAAC,QAAQ,CAAC;YACpB,SAAS,CAAC,OAAO,CAAC;mBACX,SAAS,CAAC,cAAc,CAAC;qBACvB,aAAa;uBACX,SAAS,CAAC,OAAO,GAAG,OAAO,CAAC;EACjD,YAAY;;OAEP,CAAC;AACR,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,OAAO,IAAI;SACR,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC7B,CAAC"}
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;AAsGD,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,WAAW,EAAE,CAAC,CAMxB"}
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
- // README becomes directory index, so link to the directory path
63
- if (path.basename(href).toLowerCase() === "readme") {
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":"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"}
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 ?? parsed.data.date);
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":"AAcA,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,CAoO5E"}
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: dirInfo.urlPath ? `Index of ${dirInfo.urlPath}` : "Index",
76
- description: settings.site.description,
77
- noIndex: false,
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)