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 +2 -0
- package/dist/cli.js +67 -0
- package/dist/cli.js.map +1 -1
- package/dist/validator/index.d.ts +27 -0
- package/dist/validator/index.d.ts.map +1 -0
- package/dist/validator/index.js +539 -0
- package/dist/validator/index.js.map +1 -0
- package/package.json +2 -2
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":";AAEA,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EACL,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,qBAAqB,CAAC;AAoB7B,SAAS,SAAS,CAAC,IAAc;IAC/B,MAAM,IAAI,GAAe;QACvB,GAAG,EAAE,GAAG;QACR,YAAY,EAAE,KAAK;QACnB,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,KAAK;QACX,MAAM,EAAE,KAAK;QACb,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,KAAK;QACf,UAAU,EAAE,KAAK;QACjB,OAAO,EAAE,KAAK;QACd,aAAa,EAAE,IAAI;QACnB,MAAM,EAAE,IAAI;QACZ,OAAO,EAAE,KAAK;KACf,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAEpB,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACrC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACnB,CAAC;aAAM,IAAI,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAC/C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,CAAC;aAAM,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACtB,IAAI,GAAG;gBAAE,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACzC,CAAC;aAAM,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACtB,IAAI,GAAG;gBAAE,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;QAC3B,CAAC;aAAM,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAC5C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACnB,CAAC;aAAM,IAAI,GAAG,KAAK,UAAU,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAC9C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACrB,CAAC;aAAM,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACnB,CAAC;aAAM,IAAI,GAAG,KAAK,YAAY,EAAE,CAAC;YAChC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACvB,CAAC;aAAM,IAAI,GAAG,KAAK,eAAe,EAAE,CAAC;YACnC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACzB,CAAC;aAAM,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;YAC/B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,CAAC;aAAM,IAAI,GAAG,KAAK,YAAY,EAAE,CAAC;YAChC,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC7B,CAAC;aAAM,IAAI,GAAG,KAAK,UAAU,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACtB,uEAAuE;YACvE,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAChC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;YACpB,CAAC;iBAAM,CAAC;gBACN,IAAI,GAAG;oBAAE,CAAC,EAAE,CAAC,CAAC,0BAA0B;gBACxC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,gCAAgC;YACtD,CAAC;QACH,CAAC;aAAM,IAAI,GAAG,KAAK,YAAY,EAAE,CAAC;YAChC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,CAAC;aAAM,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzD,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;YACf,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8Bb,CAAC,CAAC;AACH,CAAC;AAED,KAAK,UAAU,UAAU;IACvB,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QAC3D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QACzD,OAAO,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,GAAW;IACpC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAClC,MAAM,GAAG,GACP,QAAQ,KAAK,QAAQ;QACnB,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,QAAQ,KAAK,OAAO;YACpB,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,UAAU,CAAC;IACnB,IAAI,CAAC,GAAG,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC;AAC1B,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,GAAW;IACrC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC;IAC5D,MAAM,eAAe,GAAG,uBAAuB,EAAE,CAAC;IAClD,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,MAAM,SAAS,CACb,YAAY,EACZ,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC,EACxC,OAAO,CACR,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAE9C,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,SAAS,EAAE,CAAC;QACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,MAAM,OAAO,GAAG,MAAM,UAAU,EAAE,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC;QACjC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,0DAA0D;IAC1D,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;IACnB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;QACvB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/D,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAEtC,gBAAgB;IAChB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,IAAI,CAAC;YACH,MAAM,YAAY,CAAC,WAAW,CAAC,CAAC;YAChC,OAAO,CAAC,GAAG,CACT,iBAAiB,IAAI,CAAC,GAAG,qCAAqC,CAC/D,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,CAAC,GAAG,eAAe,CAAC,CAAC;YAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,oBAAoB;IACpB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,WAAW,CAAC,CAAC;YACvD,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;gBACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;gBACtD,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;gBACzD,OAAO,CAAC,GAAG,EAAE,CAAC;gBACd,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,uBAAuB;IACvB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;YAClE,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC;gBACpC,OAAO,EAAE,WAAW;gBACpB,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,UAAU,EAAE,IAAI;gBAChB,cAAc,EAAE,IAAI;gBACpB,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC;YAEH,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;gBACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CACT,eAAe,MAAM,CAAC,MAAM,CAAC,MAAM,uBAAuB,CAC3D,CAAC;gBAEF,uBAAuB;gBACvB,MAAM,YAAY,GAAG,IAAI,GAAG,EAAE,CAAC;gBAC/B,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;oBAC1B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;wBAC9B,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;oBAC/B,CAAC;oBACD,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACnC,CAAC,CAAC,CAAC;gBAEH,IAAI,UAAU,GAAG,CAAC,CAAC;gBACnB,YAAY,CAAC,OAAO,CAAC,CAAC,MAAa,EAAE,IAAY,EAAE,EAAE;oBACnD,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;oBAC9B,MAAM,CAAC,OAAO,CAAC,CAAC,CAAM,EAAE,EAAE;wBACxB,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC;wBAC5B,OAAO,CAAC,GAAG,CAAC,OAAO,UAAU,KAAK,IAAI,SAAS,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;wBACpE,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;4BAC7B,OAAO,CAAC,GAAG,CACT,UAAU,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAC5D,CAAC;wBACJ,CAAC;6BAAM,CAAC;4BACN,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;wBACrC,CAAC;wBACD,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;4BACjB,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;wBAC1C,CAAC;wBACD,UAAU,EAAE,CAAC;oBACf,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;gBAEH,IAAI,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;oBACrC,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,CAAC,KAAK,aAAa,CAAC,CAAC;gBAC7D,CAAC;gBACD,OAAO,CAAC,GAAG,EAAE,CAAC;gBACd,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,kBAAkB;IAClB,IACE,IAAI,CAAC,MAAM,KAAK,IAAI;QACpB,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;QACjC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAC3B,CAAC;QACD,IAAI,CAAC;YACH,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;YAC7D,MAAM,EAAE,gBAAgB,EAAE,GACxB,MAAM,MAAM,CAAC,+BAA+B,CAAC,CAAC;YAEhD,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,WAAW,CAAC,CAAC;YACjD,2EAA2E;YAC3E,MAAM,SAAS,GACb,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;YAC3D,MAAM,gBAAgB,CAAC;gBACrB,OAAO,EAAE,WAAW;gBACpB,SAAS;gBACT,QAAQ;gBACR,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB,CAAC,CAAC;YAEH,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CAAC,kCAAkC,SAAS,IAAI,CAAC,CAAC;YAC/D,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE;YACrC,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,MAAM,UAAU,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAEjC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,cAAc,OAAO,IAAI,CAAC,CAAC;YACvC,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;YAEzC,MAAM,WAAW,GAAG,iBAAiB,EAAE,CAAC;YACxC,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,WAAW,EAAE,CAAC;gBAC7C,OAAO,CAAC,GAAG,CAAC,sBAAsB,WAAW,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YAClE,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,gBAAgB,WAAW,EAAE,CAAC,CAAC;YAC3C,OAAO,CAAC,GAAG,CACT,cAAc,QAAQ,CAAC,IAAI,CAAC,KAAK,KAAK,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,gBAAgB,EAAE,CACnF,CAAC;YACF,OAAO,CAAC,GAAG,CACT,cAAc,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,CAC9D,CAAC;YACF,OAAO,CAAC,GAAG,CACT,cAAc,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,CACjE,CAAC;YACF,IAAI,QAAQ,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;gBACjC,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,GAAG,cAAc,CAAC,CAAC;YACtD,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QAC3C,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,MAAM,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAChC,CAAC;QAED,wEAAwE;QACxE,IAAI,cAAc,GAAG,KAAK,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;YAChC,IAAI,cAAc;gBAAE,OAAO;YAC3B,cAAc,GAAG,IAAI,CAAC;YACtB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;YACpC,CAAC;YACD,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC"}
|
|
@@ -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 
|
|
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: 
|
|
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":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mdsvr",
|
|
3
|
-
"version": "2.2.
|
|
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": "
|
|
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",
|