mdsvr 2.3.2 → 2.3.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.
@@ -0,0 +1,142 @@
1
+ import { promises as fs } from "node:fs";
2
+ import path from "node:path";
3
+ import { renderMarkdown, } from "./renderer/markdown.js";
4
+ import { renderMdx } from "./renderer/mdx.js";
5
+ import { renderPage } from "./template/index.js";
6
+ import { buildSidebar } from "./template/sidebar.js";
7
+ import { renderDirectory } from "./directory.js";
8
+ import { convertMarkdownLinks } from "./link-transform.js";
9
+ export async function renderPageService(input) {
10
+ const { sourcePath, urlPath, rootDir, settings, mode } = input;
11
+ const isStatic = mode === "static";
12
+ const content = await fs.readFile(sourcePath, "utf-8");
13
+ const ext = path.extname(sourcePath).toLowerCase();
14
+ let result;
15
+ if (ext === ".mdx" && settings.mdx.enabled) {
16
+ result = await renderMdx(content, settings);
17
+ }
18
+ else {
19
+ result = renderMarkdown(content, settings);
20
+ }
21
+ const title = result.frontmatter.title ||
22
+ extractFirstHeading(content) ||
23
+ humanizeFilename(path.basename(sourcePath, ext));
24
+ let sidebar = [];
25
+ if (settings.navigation.sidebar.enabled) {
26
+ sidebar = await buildSidebar(rootDir, urlPath, settings, isStatic);
27
+ }
28
+ let body = result.html;
29
+ if (isStatic) {
30
+ body = convertMarkdownLinks(fixAssetPaths(body, urlPath));
31
+ }
32
+ else if (settings.generate.cleanUrls) {
33
+ // Preview static-export output: rewrite .md/.mdx links to clean URLs
34
+ body = convertMarkdownLinks(body);
35
+ }
36
+ const html = renderPage({
37
+ title,
38
+ body,
39
+ filePath: urlPath,
40
+ settings,
41
+ frontmatter: result.frontmatter,
42
+ toc: result.toc,
43
+ sidebar,
44
+ urlPath,
45
+ isStaticExport: isStatic,
46
+ });
47
+ return {
48
+ html,
49
+ title,
50
+ frontmatter: result.frontmatter,
51
+ toc: result.toc,
52
+ description: result.frontmatter.description,
53
+ };
54
+ }
55
+ export async function renderDirectoryPage(input) {
56
+ const { listDir, urlPath, rootDir, settings, mode, isEntryVisible, title: titleOverride, } = input;
57
+ const isStatic = mode === "static";
58
+ const entries = await fs.readdir(listDir, { withFileTypes: true });
59
+ const visibleEntries = entries.filter((entry) => !isHidden(entry.name, settings) && (isEntryVisible?.(entry) ?? true));
60
+ const entriesWithSize = await Promise.all(visibleEntries.map(async (entry) => {
61
+ if (entry.isFile()) {
62
+ const fullPath = path.join(listDir, entry.name);
63
+ const stat = await fs.stat(fullPath);
64
+ return Object.assign(entry, { size: stat.size });
65
+ }
66
+ return Object.assign(entry, { size: 0 });
67
+ }));
68
+ let sidebar = [];
69
+ if (settings.navigation.sidebar.enabled) {
70
+ sidebar = await buildSidebar(rootDir, urlPath, settings, isStatic);
71
+ }
72
+ const dirName = urlPath
73
+ ? path.basename(urlPath.replace(/\/+$/, "")) || urlPath
74
+ : "";
75
+ const title = titleOverride ?? (dirName ? humanizeFilename(dirName) : "Index");
76
+ const html = renderPage({
77
+ title,
78
+ body: renderDirectory({ urlPath, entries: entriesWithSize }),
79
+ filePath: urlPath,
80
+ settings,
81
+ urlPath,
82
+ sidebar,
83
+ isStaticExport: isStatic,
84
+ });
85
+ return { html, title, frontmatter: {}, toc: [] };
86
+ }
87
+ export function isHidden(filename, settings) {
88
+ for (const pattern of settings.files.extensions.hidden) {
89
+ if (filename === pattern)
90
+ return true;
91
+ if (pattern.startsWith("*") && filename.endsWith(pattern.slice(1)))
92
+ return true;
93
+ }
94
+ if (filename.startsWith("_"))
95
+ return true;
96
+ return false;
97
+ }
98
+ export function isBlocked(ext, settings) {
99
+ return settings.files.extensions.block.includes(ext);
100
+ }
101
+ export function isAllowedExtension(ext, settings) {
102
+ return settings.files.extensions.serve.includes(ext);
103
+ }
104
+ export function extractFirstHeading(content) {
105
+ const h1Match = content.match(/^#\s+(.+)$/m);
106
+ if (h1Match) {
107
+ return h1Match[1].trim();
108
+ }
109
+ return null;
110
+ }
111
+ export function humanizeFilename(filename) {
112
+ return filename
113
+ .replace(/^\d+\./, "")
114
+ .replace(/[-_]/g, " ")
115
+ .trim()
116
+ .replace(/^\w/, (c) => c.toUpperCase());
117
+ }
118
+ export function fixAssetPaths(html, urlPath) {
119
+ // Calculate the root path for assets (everything up to the current directory)
120
+ const pathSegments = urlPath.split("/").filter(Boolean);
121
+ // Build the absolute assets path based on the current directory structure
122
+ let absoluteAssetsPath = "";
123
+ if (pathSegments.length === 0) {
124
+ // Root level: /assets/
125
+ absoluteAssetsPath = "/assets/";
126
+ }
127
+ else {
128
+ // Subdirectory: assets are at the root level of the project
129
+ // Use all segments except the last one to build the path to assets
130
+ // For /k8s/LFS158-docs/12/, assets should be at /k8s/LFS158-docs/assets/
131
+ const rootSegments = pathSegments.slice(0, -1);
132
+ if (rootSegments.length > 0) {
133
+ absoluteAssetsPath = "/" + rootSegments.join("/") + "/assets/";
134
+ }
135
+ else {
136
+ absoluteAssetsPath = "/assets/";
137
+ }
138
+ }
139
+ // Replace all relative assets/ paths with absolute paths
140
+ return html.replace(/(src|href|data-src|poster|content)="assets\//g, `$1="${absoluteAssetsPath}`);
141
+ }
142
+ //# sourceMappingURL=render-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-page.js","sourceRoot":"","sources":["../src/render-page.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAU5D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AA8BpD,wBAAsB,KAAK,CACzB,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,QAAQ,EAClB,gBAAgB,EAAE,OAAO,GACxB,OAAO,CAAC,IAAI,CAAC,CAiGf"}
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAa5D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AA8BpD,wBAAsB,KAAK,CACzB,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,QAAQ,EAClB,gBAAgB,EAAE,OAAO,GACxB,OAAO,CAAC,IAAI,CAAC,CA8Jf"}
package/dist/router.js CHANGED
@@ -1,12 +1,9 @@
1
1
  import { promises as fs, createReadStream } from "node:fs";
2
2
  import path from "node:path";
3
- import { renderMarkdown } from "./renderer/markdown.js";
4
- import { renderMdx } from "./renderer/mdx.js";
5
3
  import { renderPage } from "./template/index.js";
6
- import { renderDirectory } from "./directory.js";
7
4
  import { generateSitemap } from "./generators/sitemap.js";
8
5
  import { generateFeed } from "./generators/feed.js";
9
- import { buildSidebar } from "./template/sidebar.js";
6
+ import { renderPageService, renderDirectoryPage, isHidden, isBlocked, isAllowedExtension, } from "./render-page.js";
10
7
  const MIME = {
11
8
  ".html": "text/html",
12
9
  ".css": "text/css",
@@ -64,10 +61,24 @@ export async function route(req, res, rootDir, settings, searchIndexCache) {
64
61
  res.end(JSON.stringify(searchIndexCache ?? []));
65
62
  return;
66
63
  }
64
+ // When cleanUrls is enabled, .md/.mdx URLs redirect to canonical clean URLs
65
+ // (README.md maps to the directory URL, matching static export structure)
66
+ if (settings.generate.cleanUrls && /\.mdx?$/i.test(urlPath)) {
67
+ const queryIndex = url.indexOf("?");
68
+ const rawQuery = queryIndex === -1 ? "" : url.slice(queryIndex);
69
+ const baseName = path.posix.basename(urlPath).replace(/\.mdx?$/i, "");
70
+ const cleanUrl = baseName.toLowerCase() === "readme"
71
+ ? urlPath.replace(/[^/]+$/, "")
72
+ : urlPath.replace(/\.mdx?$/i, "");
73
+ res.writeHead(308, { Location: `${cleanUrl}${rawQuery}` });
74
+ res.end();
75
+ return;
76
+ }
67
77
  // Resolve path and check for path traversal
68
78
  const cleanUrlPath = urlPath.replace(/^\/+/, "");
69
- const resolvedPath = path.resolve(path.join(rootDir, cleanUrlPath));
70
- if (!resolvedPath.startsWith(rootDir)) {
79
+ const resolvedRootPath = path.resolve(rootDir);
80
+ const resolvedPath = path.resolve(path.join(resolvedRootPath, cleanUrlPath));
81
+ if (!isPathWithinRoot(resolvedRootPath, resolvedPath)) {
71
82
  sendError(res, 403, "Forbidden", settings);
72
83
  return;
73
84
  }
@@ -83,15 +94,34 @@ export async function route(req, res, rootDir, settings, searchIndexCache) {
83
94
  return;
84
95
  }
85
96
  try {
86
- const stat = await fs.stat(resolvedPath);
97
+ const realPath = await resolveContainedRealPath(resolvedRootPath, resolvedPath);
98
+ if (realPath === null) {
99
+ sendError(res, 403, "Forbidden", settings);
100
+ return;
101
+ }
102
+ const stat = await fs.stat(realPath);
87
103
  if (stat.isDirectory()) {
88
- await serveDirectory(res, resolvedPath, urlPath, rootDir, settings);
104
+ const encodedPath = urlPath
105
+ .split("/")
106
+ .filter((segment) => segment.length > 0)
107
+ .map(encodeURIComponent)
108
+ .join("/");
109
+ const canonicalPath = encodedPath ? `/${encodedPath}/` : "/";
110
+ const queryIndex = url.indexOf("?");
111
+ const requestPath = queryIndex === -1 ? url : url.slice(0, queryIndex);
112
+ const rawQuery = queryIndex === -1 ? "" : url.slice(queryIndex);
113
+ if (requestPath !== canonicalPath) {
114
+ res.writeHead(308, { Location: `${canonicalPath}${rawQuery}` });
115
+ res.end();
116
+ return;
117
+ }
118
+ await serveDirectory(res, realPath, urlPath, rootDir, settings);
89
119
  }
90
120
  else if (ext === ".md" || (ext === ".mdx" && settings.mdx.enabled)) {
91
- await serveMarkdownOrMdx(res, resolvedPath, urlPath, rootDir, settings);
121
+ await serveMarkdownOrMdx(res, realPath, urlPath, rootDir, settings);
92
122
  }
93
123
  else if (isAllowedExtension(ext, settings)) {
94
- await serveStatic(req, res, resolvedPath, ext);
124
+ await serveStatic(req, res, realPath, ext);
95
125
  }
96
126
  else {
97
127
  sendError(res, 403, "Forbidden", settings);
@@ -105,16 +135,24 @@ export async function route(req, res, rootDir, settings, searchIndexCache) {
105
135
  const mdPath = resolvedPath + ".md";
106
136
  const mdxPath = resolvedPath + ".mdx";
107
137
  try {
108
- await fs.access(mdPath);
109
- await serveMarkdownOrMdx(res, mdPath, urlPath, rootDir, settings);
138
+ const realMdPath = await resolveContainedRealPath(resolvedRootPath, mdPath);
139
+ if (realMdPath === null) {
140
+ sendError(res, 403, "Forbidden", settings);
141
+ return;
142
+ }
143
+ await serveMarkdownOrMdx(res, realMdPath, urlPath, rootDir, settings);
110
144
  return;
111
145
  }
112
146
  catch {
113
147
  // Try .mdx
114
148
  if (settings.mdx.enabled) {
115
149
  try {
116
- await fs.access(mdxPath);
117
- await serveMarkdownOrMdx(res, mdxPath, urlPath, rootDir, settings);
150
+ const realMdxPath = await resolveContainedRealPath(resolvedRootPath, mdxPath);
151
+ if (realMdxPath === null) {
152
+ sendError(res, 403, "Forbidden", settings);
153
+ return;
154
+ }
155
+ await serveMarkdownOrMdx(res, realMdxPath, urlPath, rootDir, settings);
118
156
  return;
119
157
  }
120
158
  catch {
@@ -130,15 +168,34 @@ export async function route(req, res, rootDir, settings, searchIndexCache) {
130
168
  }
131
169
  }
132
170
  }
171
+ async function resolveContainedRealPath(rootPath, candidatePath) {
172
+ const [realRootPath, realCandidatePath] = await Promise.all([
173
+ fs.realpath(rootPath),
174
+ fs.realpath(candidatePath),
175
+ ]);
176
+ return isPathWithinRoot(realRootPath, realCandidatePath)
177
+ ? realCandidatePath
178
+ : null;
179
+ }
180
+ function isPathWithinRoot(rootPath, candidatePath) {
181
+ const relativePath = path.relative(rootPath, candidatePath);
182
+ return (relativePath !== ".." &&
183
+ !relativePath.startsWith(`..${path.sep}`) &&
184
+ !path.isAbsolute(relativePath));
185
+ }
133
186
  async function serveDirectory(res, dirPath, urlPath, rootDir, settings) {
134
187
  // Try to find index files from settings
135
188
  for (const indexFile of settings.files.indexFiles) {
136
189
  const indexPath = path.join(dirPath, indexFile);
137
190
  try {
138
- await fs.access(indexPath);
191
+ const realIndexPath = await resolveContainedRealPath(rootDir, indexPath);
192
+ if (realIndexPath === null) {
193
+ sendError(res, 403, "Forbidden", settings);
194
+ return;
195
+ }
139
196
  const ext = path.extname(indexFile).toLowerCase();
140
197
  if (ext === ".md" || (ext === ".mdx" && settings.mdx.enabled)) {
141
- await serveMarkdownOrMdx(res, indexPath, path.join(urlPath, indexFile), rootDir, settings);
198
+ await serveMarkdownOrMdx(res, realIndexPath, path.join(urlPath, indexFile), rootDir, settings);
142
199
  return;
143
200
  }
144
201
  }
@@ -149,77 +206,38 @@ async function serveDirectory(res, dirPath, urlPath, rootDir, settings) {
149
206
  // Try index.html
150
207
  const indexHtml = path.join(dirPath, "index.html");
151
208
  try {
152
- await fs.access(indexHtml);
153
- await serveStatic({ method: "GET", url: urlPath }, res, indexHtml, ".html");
209
+ const realIndexHtml = await resolveContainedRealPath(rootDir, indexHtml);
210
+ if (realIndexHtml === null) {
211
+ sendError(res, 403, "Forbidden", settings);
212
+ return;
213
+ }
214
+ await serveStatic({ method: "GET", url: urlPath }, res, realIndexHtml, ".html");
154
215
  return;
155
216
  }
156
217
  catch {
157
218
  // Continue to directory listing
158
219
  }
159
- // Read directory contents
160
- const entries = await fs.readdir(dirPath, { withFileTypes: true });
161
- // Filter hidden entries
162
- const visibleEntries = entries.filter((entry) => !isHidden(entry.name, settings));
163
- // Add size information to entries
164
- const entriesWithSize = await Promise.all(visibleEntries.map(async (entry) => {
165
- if (entry.isFile()) {
166
- const fullPath = path.join(dirPath, entry.name);
167
- const stat = await fs.stat(fullPath);
168
- return Object.assign(entry, { size: stat.size });
169
- }
170
- return Object.assign(entry, { size: 0 });
171
- }));
172
- // Build sidebar if enabled
173
- let sidebar = [];
174
- if (settings.navigation.sidebar.enabled) {
175
- sidebar = await buildSidebar(rootDir, urlPath, settings, false);
176
- }
177
- const dirName = urlPath
178
- ? path.basename(urlPath.replace(/\/+$/, "")) || urlPath
179
- : "";
180
- const html = renderPage({
181
- title: dirName ? humanizeFilename(dirName) : "Index",
182
- body: renderDirectory({ urlPath, entries: entriesWithSize }),
183
- filePath: urlPath,
184
- settings,
220
+ // Render directory listing through the shared page service
221
+ const page = await renderDirectoryPage({
222
+ listDir: dirPath,
185
223
  urlPath,
186
- sidebar,
187
- isStaticExport: false,
224
+ rootDir,
225
+ settings,
226
+ mode: "dynamic",
188
227
  });
189
228
  res.writeHead(200, { "Content-Type": "text/html; charset=utf-8" });
190
- res.end(html);
229
+ res.end(page.html);
191
230
  }
192
231
  async function serveMarkdownOrMdx(res, filePath, urlPath, rootDir, settings) {
193
- const content = await fs.readFile(filePath, "utf-8");
194
- const ext = path.extname(filePath).toLowerCase();
195
- let result;
196
- if (ext === ".mdx" && settings.mdx.enabled) {
197
- result = await renderMdx(content, settings);
198
- }
199
- else {
200
- result = renderMarkdown(content, settings);
201
- }
202
- const title = result.frontmatter.title ||
203
- extractFirstHeading(content) ||
204
- humanizeFilename(path.basename(filePath, ext));
205
- // Build sidebar if enabled
206
- let sidebar = [];
207
- if (settings.navigation.sidebar.enabled) {
208
- sidebar = await buildSidebar(rootDir, urlPath, settings, false);
209
- }
210
- const html = renderPage({
211
- title,
212
- body: result.html,
213
- filePath: urlPath,
214
- settings,
215
- frontmatter: result.frontmatter,
216
- toc: result.toc,
217
- sidebar,
232
+ const page = await renderPageService({
233
+ sourcePath: filePath,
218
234
  urlPath,
219
- isStaticExport: false,
235
+ rootDir,
236
+ settings,
237
+ mode: "dynamic",
220
238
  });
221
239
  res.writeHead(200, { "Content-Type": "text/html; charset=utf-8" });
222
- res.end(html);
240
+ res.end(page.html);
223
241
  }
224
242
  function serveStatic(req, res, filePath, ext) {
225
243
  const contentType = MIME[ext] || "application/octet-stream";
@@ -246,35 +264,4 @@ function sendError(res, code, message, settings) {
246
264
  res.writeHead(code, { "Content-Type": "text/html; charset=utf-8" });
247
265
  res.end(html);
248
266
  }
249
- function isHidden(filename, settings) {
250
- for (const pattern of settings.files.extensions.hidden) {
251
- if (filename === pattern)
252
- return true;
253
- if (pattern.startsWith("*") && filename.endsWith(pattern.slice(1)))
254
- return true;
255
- }
256
- if (filename.startsWith("_"))
257
- return true;
258
- return false;
259
- }
260
- function isBlocked(ext, settings) {
261
- return settings.files.extensions.block.includes(ext);
262
- }
263
- function isAllowedExtension(ext, settings) {
264
- return settings.files.extensions.serve.includes(ext);
265
- }
266
- function extractFirstHeading(content) {
267
- const h1Match = content.match(/^#\s+(.+)$/m);
268
- if (h1Match) {
269
- return h1Match[1].trim();
270
- }
271
- return null;
272
- }
273
- function humanizeFilename(filename) {
274
- return filename
275
- .replace(/^\d+\./, "")
276
- .replace(/[-_]/g, " ")
277
- .trim()
278
- .replace(/^\w/, (c) => c.toUpperCase());
279
- }
280
267
  //# sourceMappingURL=router.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"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"}
package/dist/server.d.ts CHANGED
@@ -1,8 +1,9 @@
1
1
  import type { ServeOptions, ServerInstance } from "./types.js";
2
2
  import { type Settings } from "./settings/index.js";
3
- declare let currentSettings: Settings;
4
- declare let searchIndexCache: unknown;
3
+ export interface ServerContext {
4
+ settings: Settings;
5
+ searchIndexCache: unknown;
6
+ }
5
7
  export declare function createServer(rootDir: string, options?: ServeOptions): Promise<ServerInstance>;
6
8
  export declare function getNetworkAddress(): string | undefined;
7
- export { currentSettings, searchIndexCache };
8
9
  //# sourceMappingURL=server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE/D,OAAO,EAGL,KAAK,QAAQ,EACd,MAAM,qBAAqB,CAAC;AAI7B,QAAA,IAAI,eAAe,EAAE,QAAQ,CAAC;AAC9B,QAAA,IAAI,gBAAgB,EAAE,OAAc,CAAC;AAErC,wBAAsB,YAAY,CAChC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,cAAc,CAAC,CA8JzB;AAED,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,SAAS,CAYtD;AAGD,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,CAAC"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE/D,OAAO,EAGL,KAAK,QAAQ,EACd,MAAM,qBAAqB,CAAC;AAK7B,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,QAAQ,CAAC;IACnB,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAsB,YAAY,CAChC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,cAAc,CAAC,CAuKzB;AAED,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,SAAS,CAYtD"}
package/dist/server.js CHANGED
@@ -5,9 +5,6 @@ import os from "node:os";
5
5
  import { route } from "./router.js";
6
6
  import { loadSettings, watchSettings, } from "./settings/index.js";
7
7
  import { buildSearchIndex } from "./generators/search-index.js";
8
- // Global state for the server
9
- let currentSettings;
10
- let searchIndexCache = null;
11
8
  export async function createServer(rootDir, options = {}) {
12
9
  // Resolve rootDir to absolute path
13
10
  const absoluteRoot = path.resolve(rootDir);
@@ -21,11 +18,13 @@ export async function createServer(rootDir, options = {}) {
21
18
  catch (err) {
22
19
  throw new Error(`Directory does not exist: ${absoluteRoot}`);
23
20
  }
24
- // Load settings
25
- currentSettings = await loadSettings(absoluteRoot);
21
+ const ctx = {
22
+ settings: await loadSettings(absoluteRoot),
23
+ searchIndexCache: null,
24
+ };
26
25
  // Build search index
27
- if (currentSettings.search.enabled) {
28
- searchIndexCache = await buildSearchIndex(absoluteRoot, currentSettings);
26
+ if (ctx.settings.search.enabled) {
27
+ ctx.searchIndexCache = await buildSearchIndex(absoluteRoot, ctx.settings);
29
28
  }
30
29
  const port = options.port ?? 1800;
31
30
  const host = options.host ?? "localhost";
@@ -34,9 +33,10 @@ export async function createServer(rootDir, options = {}) {
34
33
  return new Promise((resolve, reject) => {
35
34
  let currentPort = port;
36
35
  let retryCount = 0;
36
+ let settingsWatcher = null;
37
37
  const tryListen = () => {
38
38
  const server = http.createServer((req, res) => {
39
- route(req, res, absoluteRoot, currentSettings, searchIndexCache).catch((err) => {
39
+ route(req, res, absoluteRoot, ctx.settings, ctx.searchIndexCache).catch((err) => {
40
40
  console.error("Routing error:", err);
41
41
  res.writeHead(500, { "Content-Type": "text/plain" });
42
42
  res.end("Internal Server Error");
@@ -80,10 +80,10 @@ export async function createServer(rootDir, options = {}) {
80
80
  try {
81
81
  const settingsPath = path.join(absoluteRoot, "_mdsvr/settings.json");
82
82
  await fs.access(settingsPath);
83
- watchSettings(absoluteRoot, async (newSettings) => {
84
- currentSettings = newSettings;
85
- if (currentSettings.search.enabled) {
86
- searchIndexCache = await buildSearchIndex(absoluteRoot, currentSettings);
83
+ settingsWatcher = watchSettings(absoluteRoot, async (newSettings) => {
84
+ ctx.settings = newSettings;
85
+ if (ctx.settings.search.enabled) {
86
+ ctx.searchIndexCache = await buildSearchIndex(absoluteRoot, ctx.settings);
87
87
  }
88
88
  if (!options.silent) {
89
89
  console.log("[mdsvr] Settings reloaded");
@@ -99,8 +99,11 @@ export async function createServer(rootDir, options = {}) {
99
99
  port: actualPort,
100
100
  host,
101
101
  url,
102
- settings: currentSettings,
102
+ get settings() {
103
+ return ctx.settings;
104
+ },
103
105
  close: () => new Promise((res, rej) => {
106
+ settingsWatcher?.close();
104
107
  server.close((err) => {
105
108
  if (err)
106
109
  rej(err);
@@ -109,9 +112,9 @@ export async function createServer(rootDir, options = {}) {
109
112
  });
110
113
  }),
111
114
  reloadSettings: async () => {
112
- currentSettings = await loadSettings(absoluteRoot);
113
- if (currentSettings.search.enabled) {
114
- searchIndexCache = await buildSearchIndex(absoluteRoot, currentSettings);
115
+ ctx.settings = await loadSettings(absoluteRoot);
116
+ if (ctx.settings.search.enabled) {
117
+ ctx.searchIndexCache = await buildSearchIndex(absoluteRoot, ctx.settings);
115
118
  }
116
119
  },
117
120
  };
@@ -153,6 +156,4 @@ export function getNetworkAddress() {
153
156
  }
154
157
  return undefined;
155
158
  }
156
- // Export for use by router
157
- export { currentSettings, searchIndexCache };
158
159
  //# sourceMappingURL=server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,MAAM,SAAS,CAAC;AAGzB,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EACL,YAAY,EACZ,aAAa,GAEd,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE,8BAA8B;AAC9B,IAAI,eAAyB,CAAC;AAC9B,IAAI,gBAAgB,GAAY,IAAI,CAAC;AAErC,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,OAAe,EACf,UAAwB,EAAE;IAE1B,mCAAmC;IACnC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAE3C,4BAA4B;IAC5B,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,4BAA4B,YAAY,EAAE,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,6BAA6B,YAAY,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,gBAAgB;IAChB,eAAe,GAAG,MAAM,YAAY,CAAC,YAAY,CAAC,CAAC;IAEnD,qBAAqB;IACrB,IAAI,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACnC,gBAAgB,GAAG,MAAM,gBAAgB,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;IAC3E,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC;IAClC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,WAAW,CAAC;IACzC,MAAM,oBAAoB,GAAG,OAAO,CAAC,aAAa,IAAI,IAAI,CAAC;IAC3D,MAAM,UAAU,GAAG,EAAE,CAAC;IAEtB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,WAAW,GAAG,IAAI,CAAC;QACvB,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,MAAM,SAAS,GAAG,GAAG,EAAE;YACrB,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;gBAC5C,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,YAAY,EAAE,eAAe,EAAE,gBAAgB,CAAC,CAAC,KAAK,CACpE,CAAC,GAAG,EAAE,EAAE;oBACN,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;oBACrC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC,CAAC;oBACrD,GAAG,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;gBACnC,CAAC,CACF,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,mEAAmE;YACnE,qFAAqF;YACrF,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YACvC,UAAU,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YAC1C,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBAC/B,IAAK,GAA6B,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;oBACzD,wDAAwD;oBACxD,UAAU,EAAE,CAAC;oBACb,IAAI,UAAU,IAAI,UAAU,EAAE,CAAC;wBAC7B,WAAW,EAAE,CAAC;wBACd,UAAU,CAAC,KAAK,EAAE,CAAC;wBACnB,SAAS,EAAE,CAAC;oBACd,CAAC;yBAAM,CAAC;wBACN,UAAU,CAAC,KAAK,EAAE,CAAC;wBACnB,MAAM,CACJ,IAAI,KAAK,CACP,QAAQ,IAAI,aAAa,UAAU,uBAAuB,CAC3D,CACF,CAAC;oBACJ,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,UAAU,CAAC,KAAK,EAAE,CAAC;oBACnB,MAAM,CAAC,GAAG,CAAC,CAAC;gBACd,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE;gBAChC,sEAAsE;gBACtE,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE;oBACpB,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,EAAE,GAAG,EAAE;wBACpC,MAAM,UAAU,GAAI,MAAM,CAAC,OAAO,EAAuB,CAAC,IAAI,CAAC;wBAC/D,MAAM,GAAG,GAAG,UAAU,IAAI,IAAI,UAAU,EAAE,CAAC;wBAE3C,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;4BACzB,OAAO,CAAC,IAAI,CACV,gBAAgB,IAAI,gCAAgC,WAAW,EAAE,CAClE,CAAC;wBACJ,CAAC;wBAED,kCAAkC;wBAClC,IAAI,oBAAoB,EAAE,CAAC;4BACzB,CAAC,KAAK,IAAI,EAAE;gCACV,IAAI,CAAC;oCACH,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAC5B,YAAY,EACZ,sBAAsB,CACvB,CAAC;oCACF,MAAM,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;oCAC9B,aAAa,CAAC,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE;wCAChD,eAAe,GAAG,WAAW,CAAC;wCAC9B,IAAI,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;4CACnC,gBAAgB,GAAG,MAAM,gBAAgB,CACvC,YAAY,EACZ,eAAe,CAChB,CAAC;wCACJ,CAAC;wCACD,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;4CACpB,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;wCAC3C,CAAC;oCACH,CAAC,CAAC,CAAC;gCACL,CAAC;gCAAC,MAAM,CAAC;oCACP,gDAAgD;gCAClD,CAAC;4BACH,CAAC,CAAC,EAAE,CAAC;wBACP,CAAC;wBAED,MAAM,QAAQ,GAAmB;4BAC/B,IAAI,EAAE,UAAU;4BAChB,IAAI;4BACJ,GAAG;4BACH,QAAQ,EAAE,eAAe;4BACzB,KAAK,EAAE,GAAG,EAAE,CACV,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;gCACvB,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;oCACnB,IAAI,GAAG;wCAAE,GAAG,CAAC,GAAG,CAAC,CAAC;;wCACb,GAAG,EAAE,CAAC;gCACb,CAAC,CAAC,CAAC;4BACL,CAAC,CAAC;4BACJ,cAAc,EAAE,KAAK,IAAI,EAAE;gCACzB,eAAe,GAAG,MAAM,YAAY,CAAC,YAAY,CAAC,CAAC;gCACnD,IAAI,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;oCACnC,gBAAgB,GAAG,MAAM,gBAAgB,CACvC,YAAY,EACZ,eAAe,CAChB,CAAC;gCACJ,CAAC;4BACH,CAAC;yBACF,CAAC;wBAEF,OAAO,CAAC,QAAQ,CAAC,CAAC;oBACpB,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBACzB,IAAK,GAA6B,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;oBACzD,UAAU,EAAE,CAAC;oBACb,IAAI,UAAU,IAAI,UAAU,EAAE,CAAC;wBAC7B,WAAW,EAAE,CAAC;wBACd,MAAM,CAAC,KAAK,EAAE,CAAC;wBACf,SAAS,EAAE,CAAC;oBACd,CAAC;yBAAM,CAAC;wBACN,MAAM,CACJ,IAAI,KAAK,CACP,QAAQ,IAAI,aAAa,UAAU,uBAAuB,CAC3D,CACF,CAAC;oBACJ,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,GAAG,CAAC,CAAC;gBACd,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,SAAS,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,MAAM,UAAU,GAAG,EAAE,CAAC,iBAAiB,EAAE,CAAC;IAC1C,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC7C,OAAO,IAAI,CAAC,OAAO,CAAC;YACtB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,2BAA2B;AAC3B,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,CAAC"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
+ import { type FSWatcher } from "node:fs";
1
2
  import { type Settings } from "./schema.js";
2
3
  export declare function loadSettings(rootDir: string): Promise<Settings>;
3
- export declare function watchSettings(rootDir: string, onChange: (s: Settings) => void): void;
4
+ export declare function watchSettings(rootDir: string, onChange: (s: Settings) => void): FSWatcher;
4
5
  export declare function validateSettingsFile(rootDir: string): Promise<{
5
6
  valid: boolean;
6
7
  errors?: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/settings/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5D,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAiBrE;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,CAAC,CAAC,EAAE,QAAQ,KAAK,IAAI,GAC9B,IAAI,CAMN;AAED,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAuBhD;AAED,wBAAgB,uBAAuB,IAAI,MAAM,CAoChD;AAED,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,YAAY,EACV,QAAQ,EACR,IAAI,EACJ,IAAI,EACJ,UAAU,EACV,UAAU,EACV,MAAM,EACN,GAAG,EACH,KAAK,EACL,GAAG,EACH,MAAM,EACN,QAAQ,GACT,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/settings/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,SAAS,EAAE,MAAM,SAAS,CAAC;AAGhD,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5D,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAiBrE;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,CAAC,CAAC,EAAE,QAAQ,KAAK,IAAI,GAC9B,SAAS,CAMX;AAED,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAuBhD;AAED,wBAAgB,uBAAuB,IAAI,MAAM,CAoChD;AAED,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,YAAY,EACV,QAAQ,EACR,IAAI,EACJ,IAAI,EACJ,UAAU,EACV,UAAU,EACV,MAAM,EACN,GAAG,EACH,KAAK,EACL,GAAG,EACH,MAAM,EACN,QAAQ,GACT,MAAM,aAAa,CAAC"}
@@ -20,7 +20,7 @@ export async function loadSettings(rootDir) {
20
20
  }
21
21
  export function watchSettings(rootDir, onChange) {
22
22
  // Re-load on file change without restarting server
23
- watch(path.join(rootDir, "_mdsvr/settings.json"), async () => {
23
+ return watch(path.join(rootDir, "_mdsvr/settings.json"), async () => {
24
24
  const newSettings = await loadSettings(rootDir);
25
25
  onChange(newSettings);
26
26
  });