mdsvr 2.2.21 → 2.2.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -159,6 +159,8 @@ Options:
159
159
  -e, --export [PATH] Export static HTML (default: _html/public)
160
160
  --init Create a starter _mdsvr/settings.json in [dir]
161
161
  --validate Validate _mdsvr/settings.json and exit
162
+ --validate-md Validate all markdown files and exit
163
+ --autofix Auto-fix markdown validation errors (use with --validate-md)
162
164
  --no-watch Disable _mdsvr/settings.json hot-reload
163
165
  -v, --version Print version
164
166
  -h, --help Print this help
package/dist/cli.js CHANGED
@@ -16,6 +16,8 @@ function parseArgs(argv) {
16
16
  help: false,
17
17
  init: false,
18
18
  validate: false,
19
+ validateMd: false,
20
+ autofix: false,
19
21
  watchSettings: true,
20
22
  export: null,
21
23
  forceOg: false,
@@ -50,6 +52,12 @@ function parseArgs(argv) {
50
52
  else if (arg === "--validate") {
51
53
  args.validate = true;
52
54
  }
55
+ else if (arg === "--validate-md") {
56
+ args.validateMd = true;
57
+ }
58
+ else if (arg === "--autofix") {
59
+ args.autofix = true;
60
+ }
53
61
  else if (arg === "--no-watch") {
54
62
  args.watchSettings = false;
55
63
  }
@@ -89,6 +97,8 @@ Options:
89
97
  --force-og Force full OG image regeneration (skip incremental)
90
98
  --init Create a starter _mdsvr/settings.json in [dir]
91
99
  --validate Validate _mdsvr/settings.json and exit
100
+ --validate-md Validate all markdown files and exit
101
+ --autofix Auto-fix markdown validation errors (use with --validate-md)
92
102
  --no-watch Disable _mdsvr/settings.json hot-reload
93
103
  -v, --version Print version
94
104
  -h, --help Print this help
@@ -102,6 +112,8 @@ Examples:
102
112
  mdsvr ./docs --export --force-og # Export with full OG regeneration
103
113
  mdsvr ./docs --init
104
114
  mdsvr ./docs --validate
115
+ mdsvr ./docs --validate-md
116
+ mdsvr ./docs --validate-md --autofix
105
117
  `);
106
118
  }
107
119
  async function getVersion() {
@@ -182,6 +194,61 @@ async function main() {
182
194
  process.exit(1);
183
195
  }
184
196
  }
197
+ // Handle --validate-md
198
+ if (args.validateMd) {
199
+ try {
200
+ const { validateMarkdown } = await import("./validator/index.js");
201
+ const result = await validateMarkdown({
202
+ rootDir: absoluteDir,
203
+ autofix: args.autofix,
204
+ checkLinks: true,
205
+ checkStructure: true,
206
+ checkAssets: true,
207
+ });
208
+ if (result.valid) {
209
+ console.log(`\n ✅ All markdown files are valid\n`);
210
+ process.exit(0);
211
+ }
212
+ else {
213
+ console.log(`\n ❌ Found ${result.errors.length} validation error(s):`);
214
+ // Group errors by file
215
+ const errorsByFile = new Map();
216
+ result.errors.forEach((e) => {
217
+ if (!errorsByFile.has(e.file)) {
218
+ errorsByFile.set(e.file, []);
219
+ }
220
+ errorsByFile.get(e.file).push(e);
221
+ });
222
+ let errorIndex = 1;
223
+ errorsByFile.forEach((errors, file) => {
224
+ console.log(`\n 📄 ${file}`);
225
+ errors.forEach((e) => {
226
+ const icon = e.icon || "⚠️";
227
+ console.log(` ${errorIndex}. ${icon} Line ${e.line}: ${e.type}`);
228
+ if (e.type === "broken-link") {
229
+ console.log(` ${e.message.split(": ")[1].replace(" -> ", " ➝ ")}`);
230
+ }
231
+ else {
232
+ console.log(` ${e.message}`);
233
+ }
234
+ if (e.suggestion) {
235
+ console.log(` ➤ ${e.suggestion}`);
236
+ }
237
+ errorIndex++;
238
+ });
239
+ });
240
+ if (args.autofix && result.fixed > 0) {
241
+ console.log(`\n ✨ Auto-fixed ${result.fixed} error(s)\n`);
242
+ }
243
+ console.log();
244
+ process.exit(1);
245
+ }
246
+ }
247
+ catch (err) {
248
+ console.error("Error:", err instanceof Error ? err.message : err);
249
+ process.exit(1);
250
+ }
251
+ }
185
252
  // Handle --export
186
253
  if (args.export !== null ||
187
254
  process.argv.includes("--export") ||
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ export interface ValidationError {
2
+ file: string;
3
+ line: number;
4
+ type: "broken-link" | "invalid-structure" | "missing-frontmatter" | "heading-hierarchy" | "missing-h1" | "missing-asset" | "absolute-path" | "broken-anchor";
5
+ message: string;
6
+ suggestion?: string;
7
+ autofix?: string;
8
+ original?: string;
9
+ icon?: string;
10
+ }
11
+ export interface ValidationResult {
12
+ valid: boolean;
13
+ errors: ValidationError[];
14
+ fixed: number;
15
+ }
16
+ export interface ValidateMarkdownOptions {
17
+ rootDir: string;
18
+ autofix?: boolean;
19
+ checkLinks?: boolean;
20
+ checkStructure?: boolean;
21
+ checkAssets?: boolean;
22
+ }
23
+ /**
24
+ * Main validation function
25
+ */
26
+ export declare function validateMarkdown(options: ValidateMarkdownOptions): Promise<ValidationResult>;
27
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/validator/index.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EACA,aAAa,GACb,mBAAmB,GACnB,qBAAqB,GACrB,mBAAmB,GACnB,YAAY,GACZ,eAAe,GACf,eAAe,GACf,eAAe,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAomBD;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,gBAAgB,CAAC,CA8D3B"}
@@ -0,0 +1,539 @@
1
+ import path from "node:path";
2
+ import { promises as fs } from "node:fs";
3
+ import { readdir } from "node:fs/promises";
4
+ /**
5
+ * Extract all internal markdown links from content
6
+ */
7
+ function extractInternalLinks(content, filePath) {
8
+ const links = [];
9
+ const lines = content.split("\n");
10
+ // Match markdown links: [text](path) and [text](path#anchor), and images ![text](path)
11
+ const linkRegex = /\[([^\]]+)\]\(([^)]+)\)/g;
12
+ let inCodeBlock = false;
13
+ lines.forEach((line, index) => {
14
+ const trimmedLine = line.trim();
15
+ // Check for code block boundaries (lines that start with ```)
16
+ if (trimmedLine.startsWith("```")) {
17
+ inCodeBlock = !inCodeBlock;
18
+ return;
19
+ }
20
+ // Skip links inside code blocks
21
+ if (inCodeBlock) {
22
+ return;
23
+ }
24
+ // Also skip inline code (links inside `code`)
25
+ if (trimmedLine.includes("`") && !trimmedLine.includes("```")) {
26
+ // Simple check: if line has backticks, skip it (conservative approach)
27
+ // This is a simplification - a proper parser would be more sophisticated
28
+ const codeCount = (trimmedLine.match(/`/g) || []).length;
29
+ if (codeCount >= 2) {
30
+ return;
31
+ }
32
+ }
33
+ let match;
34
+ // Reset regex lastIndex for each line
35
+ linkRegex.lastIndex = 0;
36
+ while ((match = linkRegex.exec(line)) !== null) {
37
+ const [, , url] = match;
38
+ const original = match[0];
39
+ const matchIndex = match.index;
40
+ // Skip image links (they have ! before the [)
41
+ if (matchIndex > 0 && line[matchIndex - 1] === "!") {
42
+ continue;
43
+ }
44
+ // Skip asset files (images, fonts, etc.) - they're optional/user-provided
45
+ if (/\.(png|jpg|jpeg|gif|svg|webp|ico|woff|woff2|ttf|eot|css|js)$/i.test(url)) {
46
+ continue;
47
+ }
48
+ // Skip links to /assets/ directory - they're optional/user-provided
49
+ if (url.startsWith("/assets/") || url.includes("/assets/")) {
50
+ continue;
51
+ }
52
+ // Skip external links
53
+ if (url.startsWith("http://") ||
54
+ url.startsWith("https://") ||
55
+ url.startsWith("//")) {
56
+ continue;
57
+ }
58
+ // Skip mailto, tel, and other protocols (but allow / for absolute path check)
59
+ if (/^[a-z]+:/i.test(url) && !url.startsWith("#")) {
60
+ continue;
61
+ }
62
+ links.push({
63
+ link: url,
64
+ line: index + 1,
65
+ original,
66
+ });
67
+ }
68
+ });
69
+ return links;
70
+ }
71
+ /**
72
+ * Extract all asset links (images, fonts, etc.) from content
73
+ */
74
+ function extractAssetLinks(content, filePath) {
75
+ const assets = [];
76
+ const lines = content.split("\n");
77
+ // Match markdown images: ![alt](path)
78
+ const imageRegex = /!\[([^\]]*)\]\(([^)]+)\)/g;
79
+ let inCodeBlock = false;
80
+ lines.forEach((line, index) => {
81
+ const trimmedLine = line.trim();
82
+ // Check for code block boundaries
83
+ if (trimmedLine.startsWith("```")) {
84
+ inCodeBlock = !inCodeBlock;
85
+ return;
86
+ }
87
+ // Skip links inside code blocks
88
+ if (inCodeBlock) {
89
+ return;
90
+ }
91
+ // Skip inline code
92
+ if (trimmedLine.includes("`") && !trimmedLine.includes("```")) {
93
+ const codeCount = (trimmedLine.match(/`/g) || []).length;
94
+ if (codeCount >= 2) {
95
+ return;
96
+ }
97
+ }
98
+ let match;
99
+ imageRegex.lastIndex = 0;
100
+ while ((match = imageRegex.exec(line)) !== null) {
101
+ const [, , url] = match;
102
+ const original = match[0];
103
+ // Skip external assets
104
+ if (url.startsWith("http://") ||
105
+ url.startsWith("https://") ||
106
+ url.startsWith("//")) {
107
+ continue;
108
+ }
109
+ // Only include asset files
110
+ if (/\.(png|jpg|jpeg|gif|svg|webp|ico|woff|woff2|ttf|eot|css|js)$/i.test(url)) {
111
+ assets.push({
112
+ link: url,
113
+ line: index + 1,
114
+ original,
115
+ });
116
+ }
117
+ }
118
+ });
119
+ return assets;
120
+ }
121
+ /**
122
+ * Resolve a link relative to the file it's in
123
+ */
124
+ async function resolveLink(link, filePath, rootDir) {
125
+ const fileDir = path.dirname(filePath);
126
+ let resolvedPath;
127
+ if (link.startsWith("/")) {
128
+ // Absolute path from root
129
+ resolvedPath = path.join(rootDir, link.slice(1));
130
+ }
131
+ else if (link.startsWith("#")) {
132
+ // Anchor - return the file itself
133
+ resolvedPath = filePath;
134
+ }
135
+ else {
136
+ // Relative path
137
+ resolvedPath = path.resolve(fileDir, link);
138
+ }
139
+ // Remove anchor if present
140
+ const anchorIndex = resolvedPath.indexOf("#");
141
+ if (anchorIndex !== -1) {
142
+ resolvedPath = resolvedPath.slice(0, anchorIndex);
143
+ }
144
+ // If no extension, check if it's a directory first
145
+ if (!path.extname(resolvedPath)) {
146
+ const readmePath = path.join(resolvedPath, "README.md");
147
+ const mdPath = resolvedPath + ".md";
148
+ const mdxPath = resolvedPath + ".mdx";
149
+ // First check if it's a directory
150
+ try {
151
+ const stats = await fs.stat(resolvedPath);
152
+ if (stats.isDirectory()) {
153
+ resolvedPath = readmePath;
154
+ }
155
+ else {
156
+ // Not a directory, try .md and .mdx
157
+ if (await fileExists(mdPath)) {
158
+ resolvedPath = mdPath;
159
+ }
160
+ else if (await fileExists(mdxPath)) {
161
+ resolvedPath = mdxPath;
162
+ }
163
+ else {
164
+ resolvedPath = mdPath;
165
+ }
166
+ }
167
+ }
168
+ catch {
169
+ // Path doesn't exist, try README.md, .md, and .mdx
170
+ if (await fileExists(readmePath)) {
171
+ resolvedPath = readmePath;
172
+ }
173
+ else if (await fileExists(mdPath)) {
174
+ resolvedPath = mdPath;
175
+ }
176
+ else if (await fileExists(mdxPath)) {
177
+ resolvedPath = mdxPath;
178
+ }
179
+ else {
180
+ // Default to .md for validation
181
+ resolvedPath = mdPath;
182
+ }
183
+ }
184
+ }
185
+ return resolvedPath;
186
+ }
187
+ /**
188
+ * Check if a file exists
189
+ */
190
+ async function fileExists(filePath) {
191
+ try {
192
+ await fs.access(filePath);
193
+ return true;
194
+ }
195
+ catch {
196
+ return false;
197
+ }
198
+ }
199
+ /**
200
+ * Extract all heading IDs from markdown content
201
+ * GitHub-flavored markdown heading IDs are generated by:
202
+ * - Converting to lowercase
203
+ * - Removing non-alphanumeric characters (except hyphens)
204
+ * - Replacing spaces with hyphens
205
+ * - Removing consecutive hyphens
206
+ */
207
+ function extractHeadingIds(content) {
208
+ const headingIds = new Set();
209
+ const lines = content.split("\n");
210
+ for (const line of lines) {
211
+ const headingMatch = line.match(/^(#{1,6})\s+(.+)$/);
212
+ if (headingMatch) {
213
+ const headingText = headingMatch[2];
214
+ // Generate GitHub-style heading ID
215
+ const headingId = headingText
216
+ .toLowerCase()
217
+ .replace(/[^\w\s-]/g, "") // Remove non-alphanumeric except space and hyphen
218
+ .replace(/\s+/g, "-") // Replace spaces with hyphens
219
+ .replace(/-+/g, "-") // Replace consecutive hyphens with single hyphen
220
+ .replace(/^-+|-+$/g, ""); // Remove leading/trailing hyphens
221
+ headingIds.add(headingId);
222
+ }
223
+ }
224
+ return headingIds;
225
+ }
226
+ /**
227
+ * Validate internal links in a markdown file
228
+ */
229
+ async function validateInternalLinks(content, filePath, rootDir) {
230
+ const errors = [];
231
+ const links = extractInternalLinks(content, filePath);
232
+ const headingIds = extractHeadingIds(content);
233
+ for (const { link, line, original } of links) {
234
+ // Check for absolute paths
235
+ if (link.startsWith("/")) {
236
+ errors.push({
237
+ file: path.relative(rootDir, filePath),
238
+ line,
239
+ type: "absolute-path",
240
+ message: `Absolute path detected: ${link}`,
241
+ suggestion: "Use relative paths instead (e.g., ./path or ../path)",
242
+ original,
243
+ icon: "⚠️",
244
+ });
245
+ continue;
246
+ }
247
+ // Extract anchor if present
248
+ const anchorIndex = link.indexOf("#");
249
+ const anchor = anchorIndex !== -1 ? link.slice(anchorIndex + 1) : null;
250
+ const linkWithoutAnchor = anchorIndex !== -1 ? link.slice(0, anchorIndex) : link;
251
+ // Handle anchor-only links (e.g., #section)
252
+ if (anchor && linkWithoutAnchor === "") {
253
+ if (!headingIds.has(anchor)) {
254
+ errors.push({
255
+ file: path.relative(rootDir, filePath),
256
+ line,
257
+ type: "broken-anchor",
258
+ message: `Broken anchor: #${anchor}`,
259
+ suggestion: `Check if heading exists. Available headings: ${Array.from(headingIds).slice(0, 5).join(", ")}${headingIds.size > 5 ? "..." : ""}`,
260
+ original,
261
+ icon: "🔗",
262
+ });
263
+ }
264
+ continue;
265
+ }
266
+ const resolvedPath = await resolveLink(linkWithoutAnchor, filePath, rootDir);
267
+ // Check anchor if present
268
+ if (anchor) {
269
+ // If link points to same file, check if anchor exists
270
+ if (resolvedPath === filePath) {
271
+ if (!headingIds.has(anchor)) {
272
+ errors.push({
273
+ file: path.relative(rootDir, filePath),
274
+ line,
275
+ type: "broken-anchor",
276
+ message: `Broken anchor: #${anchor}`,
277
+ suggestion: `Check if heading exists. Available headings: ${Array.from(headingIds).slice(0, 5).join(", ")}${headingIds.size > 5 ? "..." : ""}`,
278
+ original,
279
+ icon: "🔗",
280
+ });
281
+ }
282
+ continue; // Skip file existence check for self-link with anchor
283
+ }
284
+ // If link points to different file, we need to load that file's content
285
+ // For now, skip this check as it would require loading all linked files
286
+ // This is a limitation - we only validate anchors in the same file
287
+ }
288
+ // Skip self-links without anchor
289
+ if (resolvedPath === filePath) {
290
+ continue;
291
+ }
292
+ const exists = await fileExists(resolvedPath);
293
+ if (!exists) {
294
+ // Try to find similar files for suggestion
295
+ const fileDir = path.dirname(resolvedPath);
296
+ const fileName = path.basename(resolvedPath, ".md");
297
+ const suggestion = await findSimilarFile(fileDir, fileName, rootDir);
298
+ let autofix;
299
+ if (suggestion) {
300
+ const relativePath = path.relative(path.dirname(filePath), suggestion);
301
+ const newLink = relativePath.startsWith("..")
302
+ ? relativePath
303
+ : `./${relativePath}`;
304
+ autofix = original.replace(link, newLink);
305
+ }
306
+ errors.push({
307
+ file: path.relative(rootDir, filePath),
308
+ line,
309
+ type: "broken-link",
310
+ message: `Broken link: ${link} -> ${resolvedPath}`,
311
+ suggestion: suggestion
312
+ ? `Did you mean: ${path.relative(rootDir, suggestion)}?`
313
+ : undefined,
314
+ autofix,
315
+ original,
316
+ icon: "🔗",
317
+ });
318
+ }
319
+ }
320
+ return errors;
321
+ }
322
+ /**
323
+ * Validate asset links (images, fonts, etc.) in a markdown file
324
+ */
325
+ async function validateAssetLinks(content, filePath, rootDir) {
326
+ const errors = [];
327
+ const assets = extractAssetLinks(content, filePath);
328
+ for (const { link, line, original } of assets) {
329
+ // Check for absolute paths
330
+ if (link.startsWith("/")) {
331
+ errors.push({
332
+ file: path.relative(rootDir, filePath),
333
+ line,
334
+ type: "absolute-path",
335
+ message: `Absolute path detected: ${link}`,
336
+ suggestion: "Use relative paths instead (e.g., ./path or ../path)",
337
+ original,
338
+ icon: "⚠️",
339
+ });
340
+ continue;
341
+ }
342
+ const resolvedPath = path.resolve(path.dirname(filePath), link);
343
+ const exists = await fileExists(resolvedPath);
344
+ if (!exists) {
345
+ errors.push({
346
+ file: path.relative(rootDir, filePath),
347
+ line,
348
+ type: "missing-asset",
349
+ message: `Missing asset: ${link}`,
350
+ suggestion: "Create the assets folder and add the file, or remove the reference",
351
+ icon: "🖼️",
352
+ });
353
+ }
354
+ }
355
+ return errors;
356
+ }
357
+ /**
358
+ * Find similar files in the same directory
359
+ */
360
+ async function findSimilarFile(dir, fileName, rootDir) {
361
+ try {
362
+ const files = await readdir(dir);
363
+ const normalizedTarget = fileName.toLowerCase();
364
+ // Exact match with different case
365
+ const exactMatch = files.find((f) => f.toLowerCase() === normalizedTarget + ".md");
366
+ if (exactMatch) {
367
+ return path.join(dir, exactMatch);
368
+ }
369
+ // Fuzzy match (Levenshtein distance simplified)
370
+ let bestMatch = null;
371
+ let bestScore = 0;
372
+ for (const file of files) {
373
+ if (!file.endsWith(".md"))
374
+ continue;
375
+ const name = file.slice(0, -3).toLowerCase();
376
+ const score = calculateSimilarity(normalizedTarget, name);
377
+ if (score > 0.6 && score > bestScore) {
378
+ bestScore = score;
379
+ bestMatch = file;
380
+ }
381
+ }
382
+ return bestMatch ? path.join(dir, bestMatch) : null;
383
+ }
384
+ catch {
385
+ return null;
386
+ }
387
+ }
388
+ /**
389
+ * Calculate similarity between two strings (0-1)
390
+ */
391
+ function calculateSimilarity(a, b) {
392
+ if (a === b)
393
+ return 1;
394
+ if (a.length === 0 || b.length === 0)
395
+ return 0;
396
+ const longer = a.length > b.length ? a : b;
397
+ const shorter = a.length > b.length ? b : a;
398
+ if (longer.length === 0)
399
+ return 1;
400
+ const editDistance = levenshteinDistance(longer, shorter);
401
+ return (longer.length - editDistance) / longer.length;
402
+ }
403
+ /**
404
+ * Simple Levenshtein distance
405
+ */
406
+ function levenshteinDistance(a, b) {
407
+ const matrix = Array(b.length + 1)
408
+ .fill(null)
409
+ .map(() => Array(a.length + 1).fill(null));
410
+ for (let i = 0; i <= a.length; i++)
411
+ matrix[0][i] = i;
412
+ for (let j = 0; j <= b.length; j++)
413
+ matrix[j][0] = j;
414
+ for (let j = 1; j <= b.length; j++) {
415
+ for (let i = 1; i <= a.length; i++) {
416
+ const indicator = a[i - 1] === b[j - 1] ? 0 : 1;
417
+ matrix[j][i] = Math.min(matrix[j][i - 1] + 1, matrix[j - 1][i] + 1, matrix[j - 1][i - 1] + indicator);
418
+ }
419
+ }
420
+ return matrix[b.length][a.length];
421
+ }
422
+ /**
423
+ * Validate markdown structure
424
+ */
425
+ function validateStructure(content, filePath, rootDir) {
426
+ const errors = [];
427
+ const lines = content.split("\n");
428
+ // Check for frontmatter (optional - just skip check)
429
+ // Frontmatter is optional, so we don't add errors for missing it
430
+ // Check for missing H1
431
+ let hasH1 = false;
432
+ let lastLevel = 0;
433
+ lines.forEach((line, index) => {
434
+ const headingMatch = line.match(/^(#{1,6})\s+(.+)$/);
435
+ if (headingMatch) {
436
+ const level = headingMatch[1].length;
437
+ if (level === 1) {
438
+ hasH1 = true;
439
+ }
440
+ if (level > lastLevel + 1 && lastLevel > 0) {
441
+ errors.push({
442
+ file: path.relative(rootDir, filePath),
443
+ line: index + 1,
444
+ type: "heading-hierarchy",
445
+ message: `Heading level jumped from H${lastLevel} to H${level}`,
446
+ suggestion: `Use H${lastLevel + 1} instead of H${level}`,
447
+ icon: "📝",
448
+ });
449
+ }
450
+ lastLevel = level;
451
+ }
452
+ });
453
+ if (!hasH1) {
454
+ errors.push({
455
+ file: path.relative(rootDir, filePath),
456
+ line: 1,
457
+ type: "missing-h1",
458
+ message: "Missing H1 heading",
459
+ suggestion: "Add a top-level heading: # Your Title",
460
+ icon: "📌",
461
+ });
462
+ }
463
+ return errors;
464
+ }
465
+ /**
466
+ * Get all markdown files in a directory recursively
467
+ */
468
+ async function getAllMarkdownFiles(rootDir) {
469
+ const files = [];
470
+ async function walk(dir) {
471
+ const entries = await readdir(dir, { withFileTypes: true });
472
+ for (const entry of entries) {
473
+ const fullPath = path.join(dir, entry.name);
474
+ // Skip hidden files and directories
475
+ if (entry.name.startsWith(".") || entry.name === "_mdsvr") {
476
+ continue;
477
+ }
478
+ // Skip node_modules
479
+ if (entry.name === "node_modules") {
480
+ continue;
481
+ }
482
+ if (entry.isDirectory()) {
483
+ await walk(fullPath);
484
+ }
485
+ else if (entry.name.endsWith(".md") || entry.name.endsWith(".mdx")) {
486
+ files.push(fullPath);
487
+ }
488
+ }
489
+ }
490
+ await walk(rootDir);
491
+ return files;
492
+ }
493
+ /**
494
+ * Main validation function
495
+ */
496
+ export async function validateMarkdown(options) {
497
+ const { rootDir, autofix = false, checkLinks = true, checkStructure = true, checkAssets = true, } = options;
498
+ const errors = [];
499
+ let fixed = 0;
500
+ // Log root directory for debugging
501
+ console.log(`🔍 Validating markdown files in: ${rootDir}`);
502
+ const markdownFiles = await getAllMarkdownFiles(rootDir);
503
+ for (const filePath of markdownFiles) {
504
+ const content = await fs.readFile(filePath, "utf-8");
505
+ if (checkLinks) {
506
+ const linkErrors = await validateInternalLinks(content, filePath, rootDir);
507
+ errors.push(...linkErrors);
508
+ // Apply autofix if enabled
509
+ if (autofix) {
510
+ let newContent = content;
511
+ let hasFixes = false;
512
+ for (const error of linkErrors) {
513
+ if (error.autofix) {
514
+ newContent = newContent.replace(error.original, error.autofix);
515
+ hasFixes = true;
516
+ fixed++;
517
+ }
518
+ }
519
+ if (hasFixes) {
520
+ await fs.writeFile(filePath, newContent, "utf-8");
521
+ }
522
+ }
523
+ }
524
+ if (checkAssets) {
525
+ const assetErrors = await validateAssetLinks(content, filePath, rootDir);
526
+ errors.push(...assetErrors);
527
+ }
528
+ if (checkStructure) {
529
+ const structureErrors = validateStructure(content, filePath, rootDir);
530
+ errors.push(...structureErrors);
531
+ }
532
+ }
533
+ return {
534
+ valid: errors.length === 0,
535
+ errors,
536
+ fixed,
537
+ };
538
+ }
539
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/validator/index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAmC3C;;GAEG;AACH,SAAS,oBAAoB,CAC3B,OAAe,EACf,QAAgB;IAMhB,MAAM,KAAK,GAA4D,EAAE,CAAC;IAC1E,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,uFAAuF;IACvF,MAAM,SAAS,GAAG,0BAA0B,CAAC;IAE7C,IAAI,WAAW,GAAG,KAAK,CAAC;IAExB,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC5B,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAEhC,8DAA8D;QAC9D,IAAI,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAClC,WAAW,GAAG,CAAC,WAAW,CAAC;YAC3B,OAAO;QACT,CAAC;QAED,gCAAgC;QAChC,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO;QACT,CAAC;QAED,8CAA8C;QAC9C,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9D,uEAAuE;YACvE,yEAAyE;YACzE,MAAM,SAAS,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;YACzD,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;gBACnB,OAAO;YACT,CAAC;QACH,CAAC;QAED,IAAI,KAAK,CAAC;QACV,sCAAsC;QACtC,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC;QACxB,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC/C,MAAM,CAAC,EAAE,AAAD,EAAG,GAAG,CAAC,GAAG,KAAK,CAAC;YACxB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1B,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC;YAE/B,8CAA8C;YAC9C,IAAI,UAAU,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBACnD,SAAS;YACX,CAAC;YAED,0EAA0E;YAC1E,IACE,+DAA+D,CAAC,IAAI,CAClE,GAAG,CACJ,EACD,CAAC;gBACD,SAAS;YACX,CAAC;YAED,oEAAoE;YACpE,IAAI,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC3D,SAAS;YACX,CAAC;YAED,sBAAsB;YACtB,IACE,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC;gBACzB,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC;gBAC1B,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EACpB,CAAC;gBACD,SAAS;YACX,CAAC;YAED,8EAA8E;YAC9E,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClD,SAAS;YACX,CAAC;YAED,KAAK,CAAC,IAAI,CAAC;gBACT,IAAI,EAAE,GAAG;gBACT,IAAI,EAAE,KAAK,GAAG,CAAC;gBACf,QAAQ;aACT,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CACxB,OAAe,EACf,QAAgB;IAMhB,MAAM,MAAM,GAA4D,EAAE,CAAC;IAC3E,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,sCAAsC;IACtC,MAAM,UAAU,GAAG,2BAA2B,CAAC;IAE/C,IAAI,WAAW,GAAG,KAAK,CAAC;IAExB,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC5B,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAEhC,kCAAkC;QAClC,IAAI,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAClC,WAAW,GAAG,CAAC,WAAW,CAAC;YAC3B,OAAO;QACT,CAAC;QAED,gCAAgC;QAChC,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO;QACT,CAAC;QAED,mBAAmB;QACnB,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9D,MAAM,SAAS,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;YACzD,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;gBACnB,OAAO;YACT,CAAC;QACH,CAAC;QAED,IAAI,KAAK,CAAC;QACV,UAAU,CAAC,SAAS,GAAG,CAAC,CAAC;QACzB,OAAO,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAChD,MAAM,CAAC,EAAE,AAAD,EAAG,GAAG,CAAC,GAAG,KAAK,CAAC;YACxB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAE1B,uBAAuB;YACvB,IACE,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC;gBACzB,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC;gBAC1B,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EACpB,CAAC;gBACD,SAAS;YACX,CAAC;YAED,2BAA2B;YAC3B,IACE,+DAA+D,CAAC,IAAI,CAClE,GAAG,CACJ,EACD,CAAC;gBACD,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,KAAK,GAAG,CAAC;oBACf,QAAQ;iBACT,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,WAAW,CACxB,IAAY,EACZ,QAAgB,EAChB,OAAe;IAEf,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACvC,IAAI,YAAoB,CAAC;IAEzB,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,0BAA0B;QAC1B,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC;SAAM,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAChC,kCAAkC;QAClC,YAAY,GAAG,QAAQ,CAAC;IAC1B,CAAC;SAAM,CAAC;QACN,gBAAgB;QAChB,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,2BAA2B;IAC3B,MAAM,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC9C,IAAI,WAAW,KAAK,CAAC,CAAC,EAAE,CAAC;QACvB,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;IACpD,CAAC;IAED,mDAAmD;IACnD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QAChC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,YAAY,GAAG,KAAK,CAAC;QACpC,MAAM,OAAO,GAAG,YAAY,GAAG,MAAM,CAAC;QAEtC,kCAAkC;QAClC,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC1C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,YAAY,GAAG,UAAU,CAAC;YAC5B,CAAC;iBAAM,CAAC;gBACN,oCAAoC;gBACpC,IAAI,MAAM,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC7B,YAAY,GAAG,MAAM,CAAC;gBACxB,CAAC;qBAAM,IAAI,MAAM,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;oBACrC,YAAY,GAAG,OAAO,CAAC;gBACzB,CAAC;qBAAM,CAAC;oBACN,YAAY,GAAG,MAAM,CAAC;gBACxB,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,mDAAmD;YACnD,IAAI,MAAM,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBACjC,YAAY,GAAG,UAAU,CAAC;YAC5B,CAAC;iBAAM,IAAI,MAAM,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBACpC,YAAY,GAAG,MAAM,CAAC;YACxB,CAAC;iBAAM,IAAI,MAAM,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACrC,YAAY,GAAG,OAAO,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACN,gCAAgC;gBAChC,YAAY,GAAG,MAAM,CAAC;YACxB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,UAAU,CAAC,QAAgB;IACxC,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,iBAAiB,CAAC,OAAe;IACxC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACrD,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YACpC,mCAAmC;YACnC,MAAM,SAAS,GAAG,WAAW;iBAC1B,WAAW,EAAE;iBACb,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,kDAAkD;iBAC3E,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,8BAA8B;iBACnD,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,iDAAiD;iBACrE,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,kCAAkC;YAC9D,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,qBAAqB,CAClC,OAAe,EACf,QAAgB,EAChB,OAAe;IAEf,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,MAAM,KAAK,GAAG,oBAAoB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAE9C,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,KAAK,EAAE,CAAC;QAC7C,2BAA2B;QAC3B,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC;gBACtC,IAAI;gBACJ,IAAI,EAAE,eAAe;gBACrB,OAAO,EAAE,2BAA2B,IAAI,EAAE;gBAC1C,UAAU,EAAE,sDAAsD;gBAClE,QAAQ;gBACR,IAAI,EAAE,IAAI;aACX,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,4BAA4B;QAC5B,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACvE,MAAM,iBAAiB,GACrB,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAEzD,4CAA4C;QAC5C,IAAI,MAAM,IAAI,iBAAiB,KAAK,EAAE,EAAE,CAAC;YACvC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5B,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC;oBACtC,IAAI;oBACJ,IAAI,EAAE,eAAe;oBACrB,OAAO,EAAE,mBAAmB,MAAM,EAAE;oBACpC,UAAU,EAAE,gDAAgD,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;oBAC9I,QAAQ;oBACR,IAAI,EAAE,IAAI;iBACX,CAAC,CAAC;YACL,CAAC;YACD,SAAS;QACX,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,WAAW,CACpC,iBAAiB,EACjB,QAAQ,EACR,OAAO,CACR,CAAC;QAEF,0BAA0B;QAC1B,IAAI,MAAM,EAAE,CAAC;YACX,sDAAsD;YACtD,IAAI,YAAY,KAAK,QAAQ,EAAE,CAAC;gBAC9B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC5B,MAAM,CAAC,IAAI,CAAC;wBACV,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC;wBACtC,IAAI;wBACJ,IAAI,EAAE,eAAe;wBACrB,OAAO,EAAE,mBAAmB,MAAM,EAAE;wBACpC,UAAU,EAAE,gDAAgD,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;wBAC9I,QAAQ;wBACR,IAAI,EAAE,IAAI;qBACX,CAAC,CAAC;gBACL,CAAC;gBACD,SAAS,CAAC,sDAAsD;YAClE,CAAC;YACD,wEAAwE;YACxE,wEAAwE;YACxE,mEAAmE;QACrE,CAAC;QAED,iCAAiC;QACjC,IAAI,YAAY,KAAK,QAAQ,EAAE,CAAC;YAC9B,SAAS;QACX,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,YAAY,CAAC,CAAC;QAE9C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,2CAA2C;YAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;YACpD,MAAM,UAAU,GAAG,MAAM,eAAe,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YAErE,IAAI,OAA2B,CAAC;YAChC,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC,CAAC;gBACvE,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC;oBAC3C,CAAC,CAAC,YAAY;oBACd,CAAC,CAAC,KAAK,YAAY,EAAE,CAAC;gBACxB,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC5C,CAAC;YAED,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC;gBACtC,IAAI;gBACJ,IAAI,EAAE,aAAa;gBACnB,OAAO,EAAE,gBAAgB,IAAI,OAAO,YAAY,EAAE;gBAClD,UAAU,EAAE,UAAU;oBACpB,CAAC,CAAC,iBAAiB,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG;oBACxD,CAAC,CAAC,SAAS;gBACb,OAAO;gBACP,QAAQ;gBACR,IAAI,EAAE,IAAI;aACX,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,kBAAkB,CAC/B,OAAe,EACf,QAAgB,EAChB,OAAe;IAEf,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAEpD,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,MAAM,EAAE,CAAC;QAC9C,2BAA2B;QAC3B,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC;gBACtC,IAAI;gBACJ,IAAI,EAAE,eAAe;gBACrB,OAAO,EAAE,2BAA2B,IAAI,EAAE;gBAC1C,UAAU,EAAE,sDAAsD;gBAClE,QAAQ;gBACR,IAAI,EAAE,IAAI;aACX,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,MAAM,YAAY,GAAW,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC;QAExE,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,YAAY,CAAC,CAAC;QAE9C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC;gBACtC,IAAI;gBACJ,IAAI,EAAE,eAAe;gBACrB,OAAO,EAAE,kBAAkB,IAAI,EAAE;gBACjC,UAAU,EACR,oEAAoE;gBACtE,IAAI,EAAE,KAAK;aACZ,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,eAAe,CAC5B,GAAW,EACX,QAAgB,EAChB,OAAe;IAEf,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;QAEhD,kCAAkC;QAClC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAC3B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,gBAAgB,GAAG,KAAK,CACpD,CAAC;QACF,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QACpC,CAAC;QAED,gDAAgD;QAChD,IAAI,SAAS,GAAkB,IAAI,CAAC;QACpC,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,SAAS;YACpC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YAC7C,MAAM,KAAK,GAAG,mBAAmB,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;YAC1D,IAAI,KAAK,GAAG,GAAG,IAAI,KAAK,GAAG,SAAS,EAAE,CAAC;gBACrC,SAAS,GAAG,KAAK,CAAC;gBAClB,SAAS,GAAG,IAAI,CAAC;YACnB,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,CAAS,EAAE,CAAS;IAC/C,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACtB,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAE/C,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAElC,MAAM,YAAY,GAAG,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1D,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,YAAY,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;AACxD,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,CAAS,EAAE,CAAS;IAC/C,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;SAC/B,IAAI,CAAC,IAAI,CAAC;SACV,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAE7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACrD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAErD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACnC,MAAM,SAAS,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAChD,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CACrB,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EACpB,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EACpB,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CACjC,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CACxB,OAAe,EACf,QAAgB,EAChB,OAAe;IAEf,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,qDAAqD;IACrD,iEAAiE;IAEjE,uBAAuB;IACvB,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC5B,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACrD,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YAErC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;gBAChB,KAAK,GAAG,IAAI,CAAC;YACf,CAAC;YAED,IAAI,KAAK,GAAG,SAAS,GAAG,CAAC,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;gBAC3C,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC;oBACtC,IAAI,EAAE,KAAK,GAAG,CAAC;oBACf,IAAI,EAAE,mBAAmB;oBACzB,OAAO,EAAE,8BAA8B,SAAS,QAAQ,KAAK,EAAE;oBAC/D,UAAU,EAAE,QAAQ,SAAS,GAAG,CAAC,gBAAgB,KAAK,EAAE;oBACxD,IAAI,EAAE,IAAI;iBACX,CAAC,CAAC;YACL,CAAC;YACD,SAAS,GAAG,KAAK,CAAC;QACpB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC;YACtC,IAAI,EAAE,CAAC;YACP,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE,oBAAoB;YAC7B,UAAU,EAAE,uCAAuC;YACnD,IAAI,EAAE,IAAI;SACX,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,mBAAmB,CAAC,OAAe;IAChD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,UAAU,IAAI,CAAC,GAAW;QAC7B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAE5D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAE5C,oCAAoC;YACpC,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC1D,SAAS;YACX,CAAC;YAED,oBAAoB;YACpB,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;gBAClC,SAAS;YACX,CAAC;YAED,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvB,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACrE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC;IACpB,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAAgC;IAEhC,MAAM,EACJ,OAAO,EACP,OAAO,GAAG,KAAK,EACf,UAAU,GAAG,IAAI,EACjB,cAAc,GAAG,IAAI,EACrB,WAAW,GAAG,IAAI,GACnB,GAAG,OAAO,CAAC;IACZ,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,mCAAmC;IACnC,OAAO,CAAC,GAAG,CAAC,oCAAoC,OAAO,EAAE,CAAC,CAAC;IAE3D,MAAM,aAAa,GAAG,MAAM,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAEzD,KAAK,MAAM,QAAQ,IAAI,aAAa,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAErD,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,UAAU,GAAG,MAAM,qBAAqB,CAC5C,OAAO,EACP,QAAQ,EACR,OAAO,CACR,CAAC;YACF,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;YAE3B,2BAA2B;YAC3B,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAI,UAAU,GAAG,OAAO,CAAC;gBACzB,IAAI,QAAQ,GAAG,KAAK,CAAC;gBAErB,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;oBAC/B,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;wBAClB,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,QAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;wBAChE,QAAQ,GAAG,IAAI,CAAC;wBAChB,KAAK,EAAE,CAAC;oBACV,CAAC;gBACH,CAAC;gBAED,IAAI,QAAQ,EAAE,CAAC;oBACb,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;gBACpD,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,WAAW,GAAG,MAAM,kBAAkB,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YACzE,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;QAC9B,CAAC;QAED,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,eAAe,GAAG,iBAAiB,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YACtE,MAAM,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;QAC1B,MAAM;QACN,KAAK;KACN,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mdsvr",
3
- "version": "2.2.21",
3
+ "version": "2.2.22",
4
4
  "description": "Full-featured documentation website server with MDX support, site settings, SEO, and navigation",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -21,7 +21,7 @@
21
21
  "start": "node bin/mdsvr.js",
22
22
  "build:start": "npm run build && node bin/mdsvr.js",
23
23
  "test": "npm run build && npm run build:test && node --test dist-test/test/*.test.js",
24
- "docs:generate": "rm -rf ./gh-pages/docs && npm run start -- ./docs -e ./gh-pages/docs",
24
+ "docs:generate": "npm run start -- ./docs -e ./gh-pages/docs",
25
25
  "docs:deploy": "npm run docs:generate && gh-pages -d gh-pages",
26
26
  "prepublishOnly": "npm run build && npm test",
27
27
  "version:patch": "npm version patch",