@redocly/recheck 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +544 -0
- package/dist/assertions/bullet-style.d.ts +3 -0
- package/dist/assertions/bullet-style.d.ts.map +1 -0
- package/dist/assertions/bullet-style.js +60 -0
- package/dist/assertions/bullet-style.js.map +1 -0
- package/dist/assertions/index.d.ts +21 -0
- package/dist/assertions/index.d.ts.map +1 -0
- package/dist/assertions/index.js +30 -0
- package/dist/assertions/index.js.map +1 -0
- package/dist/assertions/max-image-size.d.ts +3 -0
- package/dist/assertions/max-image-size.d.ts.map +1 -0
- package/dist/assertions/max-image-size.js +73 -0
- package/dist/assertions/max-image-size.js.map +1 -0
- package/dist/assertions/max-line-length.d.ts +3 -0
- package/dist/assertions/max-line-length.d.ts.map +1 -0
- package/dist/assertions/max-line-length.js +68 -0
- package/dist/assertions/max-line-length.js.map +1 -0
- package/dist/assertions/no-broken-fragment-links.d.ts +3 -0
- package/dist/assertions/no-broken-fragment-links.d.ts.map +1 -0
- package/dist/assertions/no-broken-fragment-links.js +79 -0
- package/dist/assertions/no-broken-fragment-links.js.map +1 -0
- package/dist/assertions/no-duplicate-headings.d.ts +3 -0
- package/dist/assertions/no-duplicate-headings.d.ts.map +1 -0
- package/dist/assertions/no-duplicate-headings.js +66 -0
- package/dist/assertions/no-duplicate-headings.js.map +1 -0
- package/dist/assertions/no-hard-tabs.d.ts +3 -0
- package/dist/assertions/no-hard-tabs.d.ts.map +1 -0
- package/dist/assertions/no-hard-tabs.js +63 -0
- package/dist/assertions/no-hard-tabs.js.map +1 -0
- package/dist/assertions/no-trailing-spaces.d.ts +3 -0
- package/dist/assertions/no-trailing-spaces.d.ts.map +1 -0
- package/dist/assertions/no-trailing-spaces.js +72 -0
- package/dist/assertions/no-trailing-spaces.js.map +1 -0
- package/dist/assertions/pattern.d.ts +3 -0
- package/dist/assertions/pattern.d.ts.map +1 -0
- package/dist/assertions/pattern.js +39 -0
- package/dist/assertions/pattern.js.map +1 -0
- package/dist/assertions/semantic-line-breaks.d.ts +3 -0
- package/dist/assertions/semantic-line-breaks.d.ts.map +1 -0
- package/dist/assertions/semantic-line-breaks.js +152 -0
- package/dist/assertions/semantic-line-breaks.js.map +1 -0
- package/dist/assertions/swap.d.ts +3 -0
- package/dist/assertions/swap.d.ts.map +1 -0
- package/dist/assertions/swap.js +39 -0
- package/dist/assertions/swap.js.map +1 -0
- package/dist/assertions/utils.d.ts +8 -0
- package/dist/assertions/utils.d.ts.map +1 -0
- package/dist/assertions/utils.js +57 -0
- package/dist/assertions/utils.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +125 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/run.d.ts +20 -0
- package/dist/commands/run.d.ts.map +1 -0
- package/dist/commands/run.js +115 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/commands/validate.d.ts +8 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +43 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/config/load.d.ts +20 -0
- package/dist/config/load.d.ts.map +1 -0
- package/dist/config/load.js +85 -0
- package/dist/config/load.js.map +1 -0
- package/dist/config/schema.d.ts +109 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +103 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/config/validate.d.ts +10 -0
- package/dist/config/validate.d.ts.map +1 -0
- package/dist/config/validate.js +129 -0
- package/dist/config/validate.js.map +1 -0
- package/dist/core/auto-fix.d.ts +16 -0
- package/dist/core/auto-fix.d.ts.map +1 -0
- package/dist/core/auto-fix.js +82 -0
- package/dist/core/auto-fix.js.map +1 -0
- package/dist/core/files.d.ts +6 -0
- package/dist/core/files.d.ts.map +1 -0
- package/dist/core/files.js +75 -0
- package/dist/core/files.js.map +1 -0
- package/dist/core/rule-filters.d.ts +28 -0
- package/dist/core/rule-filters.d.ts.map +1 -0
- package/dist/core/rule-filters.js +54 -0
- package/dist/core/rule-filters.js.map +1 -0
- package/dist/core/runner.d.ts +4 -0
- package/dist/core/runner.d.ts.map +1 -0
- package/dist/core/runner.js +135 -0
- package/dist/core/runner.js.map +1 -0
- package/dist/core/scope-parser.d.ts +26 -0
- package/dist/core/scope-parser.d.ts.map +1 -0
- package/dist/core/scope-parser.js +110 -0
- package/dist/core/scope-parser.js.map +1 -0
- package/dist/core/timing.d.ts +24 -0
- package/dist/core/timing.d.ts.map +1 -0
- package/dist/core/timing.js +39 -0
- package/dist/core/timing.js.map +1 -0
- package/dist/files.d.ts +2 -0
- package/dist/files.d.ts.map +1 -0
- package/dist/files.js +39 -0
- package/dist/files.js.map +1 -0
- package/dist/load-config.d.ts +25 -0
- package/dist/load-config.d.ts.map +1 -0
- package/dist/load-config.js +104 -0
- package/dist/load-config.js.map +1 -0
- package/dist/load.d.ts +25 -0
- package/dist/load.d.ts.map +1 -0
- package/dist/load.js +112 -0
- package/dist/load.js.map +1 -0
- package/dist/reporter/fixes.d.ts +3 -0
- package/dist/reporter/fixes.d.ts.map +1 -0
- package/dist/reporter/fixes.js +20 -0
- package/dist/reporter/fixes.js.map +1 -0
- package/dist/reporter/formats/github-actions.d.ts +6 -0
- package/dist/reporter/formats/github-actions.d.ts.map +1 -0
- package/dist/reporter/formats/github-actions.js +20 -0
- package/dist/reporter/formats/github-actions.js.map +1 -0
- package/dist/reporter/formats/json.d.ts +6 -0
- package/dist/reporter/formats/json.d.ts.map +1 -0
- package/dist/reporter/formats/json.js +24 -0
- package/dist/reporter/formats/json.js.map +1 -0
- package/dist/reporter/formats/sarif.d.ts +10 -0
- package/dist/reporter/formats/sarif.d.ts.map +1 -0
- package/dist/reporter/formats/sarif.js +66 -0
- package/dist/reporter/formats/sarif.js.map +1 -0
- package/dist/reporter/formats/table.d.ts +6 -0
- package/dist/reporter/formats/table.d.ts.map +1 -0
- package/dist/reporter/formats/table.js +38 -0
- package/dist/reporter/formats/table.js.map +1 -0
- package/dist/reporter/index.d.ts +10 -0
- package/dist/reporter/index.d.ts.map +1 -0
- package/dist/reporter/index.js +42 -0
- package/dist/reporter/index.js.map +1 -0
- package/dist/reporter/prioritize-problems.d.ts +7 -0
- package/dist/reporter/prioritize-problems.d.ts.map +1 -0
- package/dist/reporter/prioritize-problems.js +29 -0
- package/dist/reporter/prioritize-problems.js.map +1 -0
- package/dist/reporter/statistics.d.ts +17 -0
- package/dist/reporter/statistics.d.ts.map +1 -0
- package/dist/reporter/statistics.js +52 -0
- package/dist/reporter/statistics.js.map +1 -0
- package/dist/reporter/summary.d.ts +10 -0
- package/dist/reporter/summary.d.ts.map +1 -0
- package/dist/reporter/summary.js +48 -0
- package/dist/reporter/summary.js.map +1 -0
- package/dist/scope.d.ts +26 -0
- package/dist/scope.d.ts.map +1 -0
- package/dist/scope.js +110 -0
- package/dist/scope.js.map +1 -0
- package/dist/types/assertions.d.ts +56 -0
- package/dist/types/assertions.d.ts.map +1 -0
- package/dist/types/assertions.js +2 -0
- package/dist/types/assertions.js.map +1 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +6 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/problems.d.ts +21 -0
- package/dist/types/problems.d.ts.map +1 -0
- package/dist/types/problems.js +2 -0
- package/dist/types/problems.js.map +1 -0
- package/dist/types/reporting.d.ts +23 -0
- package/dist/types/reporting.d.ts.map +1 -0
- package/dist/types/reporting.js +2 -0
- package/dist/types/reporting.js.map +1 -0
- package/dist/types/rules.d.ts +43 -0
- package/dist/types/rules.d.ts.map +1 -0
- package/dist/types/rules.js +2 -0
- package/dist/types/rules.js.map +1 -0
- package/dist/types/validation.d.ts +6 -0
- package/dist/types/validation.d.ts.map +1 -0
- package/dist/types/validation.js +2 -0
- package/dist/types/validation.js.map +1 -0
- package/dist/types.d.ts +109 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/validate.d.ts +31 -0
- package/dist/validate.d.ts.map +1 -0
- package/dist/validate.js +154 -0
- package/dist/validate.js.map +1 -0
- package/package.json +43 -0
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import * as fs from 'fs/promises';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import picomatch from 'picomatch';
|
|
4
|
+
const SKIP_DIRS = ['node_modules', 'dist', 'build'];
|
|
5
|
+
export async function discoverMarkdownFiles(inputPath) {
|
|
6
|
+
async function walkDir(dir) {
|
|
7
|
+
const files = [];
|
|
8
|
+
try {
|
|
9
|
+
const entries = await fs.readdir(dir, { withFileTypes: true });
|
|
10
|
+
for (const entry of entries) {
|
|
11
|
+
const fullPath = path.join(dir, entry.name);
|
|
12
|
+
if (entry.isDirectory()) {
|
|
13
|
+
if (entry.name.startsWith('.') || SKIP_DIRS.includes(entry.name)) {
|
|
14
|
+
continue;
|
|
15
|
+
}
|
|
16
|
+
files.push(...(await walkDir(fullPath)));
|
|
17
|
+
}
|
|
18
|
+
else if (entry.isFile() &&
|
|
19
|
+
picomatch.isMatch(entry.name, '*.{md,markdown}', { nocase: true })) {
|
|
20
|
+
files.push(fullPath);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return [];
|
|
26
|
+
}
|
|
27
|
+
return files;
|
|
28
|
+
}
|
|
29
|
+
const stat = await fs.stat(inputPath);
|
|
30
|
+
if (stat.isFile()) {
|
|
31
|
+
return [inputPath];
|
|
32
|
+
}
|
|
33
|
+
else if (stat.isDirectory()) {
|
|
34
|
+
return walkDir(inputPath);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
return [];
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Load list of changed files from either a file path or stdin
|
|
42
|
+
*/
|
|
43
|
+
export async function loadChangedFiles(changedListPath) {
|
|
44
|
+
// 1) Prefer explicit file path
|
|
45
|
+
if (changedListPath && changedListPath.length > 0) {
|
|
46
|
+
try {
|
|
47
|
+
const content = await fs.readFile(changedListPath, 'utf8');
|
|
48
|
+
return content
|
|
49
|
+
.split(/\r?\n/)
|
|
50
|
+
.map((s) => s.trim())
|
|
51
|
+
.filter(Boolean);
|
|
52
|
+
}
|
|
53
|
+
catch (_err) {
|
|
54
|
+
return [];
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// 2) Otherwise try to read from stdin if piped
|
|
58
|
+
if (process.stdin.isTTY)
|
|
59
|
+
return [];
|
|
60
|
+
const chunks = [];
|
|
61
|
+
return await new Promise((resolve) => {
|
|
62
|
+
process.stdin.setEncoding('utf8');
|
|
63
|
+
process.stdin.on('data', (d) => chunks.push(String(d)));
|
|
64
|
+
process.stdin.on('end', () => {
|
|
65
|
+
const text = chunks.join('');
|
|
66
|
+
const lines = text
|
|
67
|
+
.split(/\r?\n/)
|
|
68
|
+
.map((s) => s.trim())
|
|
69
|
+
.filter(Boolean);
|
|
70
|
+
resolve(lines);
|
|
71
|
+
});
|
|
72
|
+
process.stdin.resume();
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/core/files.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,SAAS,MAAM,WAAW,CAAC;AAElC,MAAM,SAAS,GAAG,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAEpD,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,SAAiB;IAC3D,KAAK,UAAU,OAAO,CAAC,GAAW;QAChC,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YAE/D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBAE5C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;oBACxB,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;wBACjE,SAAS;oBACX,CAAC;oBACD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC3C,CAAC;qBAAM,IACL,KAAK,CAAC,MAAM,EAAE;oBACd,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,iBAAiB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAClE,CAAC;oBACD,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtC,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;QAClB,OAAO,CAAC,SAAS,CAAC,CAAC;IACrB,CAAC;SAAM,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QAC9B,OAAO,OAAO,CAAC,SAAS,CAAC,CAAC;IAC5B,CAAC;SAAM,CAAC;QACN,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,eAAwB;IAC7D,+BAA+B;IAC/B,IAAI,eAAe,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;YAC3D,OAAO,OAAO;iBACX,KAAK,CAAC,OAAO,CAAC;iBACd,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;iBACpB,MAAM,CAAC,OAAO,CAAC,CAAC;QACrB,CAAC;QAAC,OAAO,IAAI,EAAE,CAAC;YACd,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IACD,+CAA+C;IAC/C,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACnC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,OAAO,MAAM,IAAI,OAAO,CAAW,CAAC,OAAO,EAAE,EAAE;QAC7C,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAClC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxD,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YAC3B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,KAAK,GAAG,IAAI;iBACf,KAAK,CAAC,OAAO,CAAC;iBACd,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;iBACpB,MAAM,CAAC,OAAO,CAAC,CAAC;YACnB,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { NormalizedRule } from '../types/index.js';
|
|
2
|
+
export interface FilterOptions {
|
|
3
|
+
severity?: 'off' | 'info' | 'warn' | 'warning' | 'error';
|
|
4
|
+
tags?: (string | number)[];
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Filter out disabled rules (severity: 'off')
|
|
8
|
+
*/
|
|
9
|
+
export declare function filterEnabledRules(rules: NormalizedRule[]): {
|
|
10
|
+
enabled: NormalizedRule[];
|
|
11
|
+
disabledCount: number;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Filter rules by minimum severity level
|
|
15
|
+
*/
|
|
16
|
+
export declare function filterBySeverity(rules: NormalizedRule[], minSeverity: string): NormalizedRule[];
|
|
17
|
+
/**
|
|
18
|
+
* Filter rules by tags
|
|
19
|
+
*/
|
|
20
|
+
export declare function filterByTags(rules: NormalizedRule[], tags: (string | number)[]): NormalizedRule[];
|
|
21
|
+
/**
|
|
22
|
+
* Apply all filters to rules
|
|
23
|
+
*/
|
|
24
|
+
export declare function applyFilters(rules: NormalizedRule[], options: FilterOptions): {
|
|
25
|
+
filtered: NormalizedRule[];
|
|
26
|
+
disabledCount: number;
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=rule-filters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rule-filters.d.ts","sourceRoot":"","sources":["../../src/core/rule-filters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;IACzD,IAAI,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;CAC5B;AAUD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG;IAC3D,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;CACvB,CAIA;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,cAAc,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,cAAc,EAAE,CAS/F;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,cAAc,EAAE,CAIjG;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,cAAc,EAAE,EACvB,OAAO,EAAE,aAAa,GACrB;IACD,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;CACvB,CAgBA"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
const SEVERITY_LEVELS = {
|
|
2
|
+
off: -1,
|
|
3
|
+
info: 0,
|
|
4
|
+
warn: 1,
|
|
5
|
+
warning: 1,
|
|
6
|
+
error: 2,
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Filter out disabled rules (severity: 'off')
|
|
10
|
+
*/
|
|
11
|
+
export function filterEnabledRules(rules) {
|
|
12
|
+
const enabled = rules.filter((rule) => rule.severity !== 'off');
|
|
13
|
+
const disabledCount = rules.length - enabled.length;
|
|
14
|
+
return { enabled, disabledCount };
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Filter rules by minimum severity level
|
|
18
|
+
*/
|
|
19
|
+
export function filterBySeverity(rules, minSeverity) {
|
|
20
|
+
const minLevel = SEVERITY_LEVELS[minSeverity];
|
|
21
|
+
if (minLevel === undefined)
|
|
22
|
+
return rules;
|
|
23
|
+
return rules.filter((rule) => {
|
|
24
|
+
const ruleSeverity = rule.severity === 'warning' ? 'warn' : rule.severity;
|
|
25
|
+
const ruleLevel = SEVERITY_LEVELS[ruleSeverity];
|
|
26
|
+
return ruleLevel >= minLevel;
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Filter rules by tags
|
|
31
|
+
*/
|
|
32
|
+
export function filterByTags(rules, tags) {
|
|
33
|
+
if (!tags.length)
|
|
34
|
+
return rules;
|
|
35
|
+
return rules.filter((rule) => rule.tags?.some((tag) => tags.includes(tag)));
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Apply all filters to rules
|
|
39
|
+
*/
|
|
40
|
+
export function applyFilters(rules, options) {
|
|
41
|
+
// Filter out disabled rules first
|
|
42
|
+
const { enabled, disabledCount } = filterEnabledRules(rules);
|
|
43
|
+
let filtered = enabled;
|
|
44
|
+
// Filter by severity if specified
|
|
45
|
+
if (options.severity) {
|
|
46
|
+
filtered = filterBySeverity(filtered, options.severity);
|
|
47
|
+
}
|
|
48
|
+
// Filter by tags if specified
|
|
49
|
+
if (options.tags?.length) {
|
|
50
|
+
filtered = filterByTags(filtered, options.tags);
|
|
51
|
+
}
|
|
52
|
+
return { filtered, disabledCount };
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=rule-filters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rule-filters.js","sourceRoot":"","sources":["../../src/core/rule-filters.ts"],"names":[],"mappings":"AAOA,MAAM,eAAe,GAA2B;IAC9C,GAAG,EAAE,CAAC,CAAC;IACP,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,OAAO,EAAE,CAAC;IACV,KAAK,EAAE,CAAC;CACT,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAuB;IAIxD,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC;IAChE,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IACpD,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAuB,EAAE,WAAmB;IAC3E,MAAM,QAAQ,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAC9C,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAEzC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QAC3B,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,KAAM,SAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;QACnF,MAAM,SAAS,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;QAChD,OAAO,SAAS,IAAI,QAAQ,CAAC;IAC/B,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,KAAuB,EAAE,IAAyB;IAC7E,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAE/B,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAa,CAAC,CAAC,CAAC,CAAC;AACxF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAC1B,KAAuB,EACvB,OAAsB;IAKtB,kCAAkC;IAClC,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC7D,IAAI,QAAQ,GAAG,OAAO,CAAC;IAEvB,kCAAkC;IAClC,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC1D,CAAC;IAED,8BAA8B;IAC9B,IAAI,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;QACzB,QAAQ,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Problem, NormalizedRule } from '../types/index.js';
|
|
2
|
+
import type { RunOptions } from '../commands/run.js';
|
|
3
|
+
export declare function runRecheck(files: string[], rules: NormalizedRule[], options?: RunOptions): Promise<Problem[]>;
|
|
4
|
+
//# sourceMappingURL=runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/core/runner.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AA0DrD,wBAAsB,UAAU,CAC9B,KAAK,EAAE,MAAM,EAAE,EACf,KAAK,EAAE,cAAc,EAAE,EACvB,OAAO,GAAE,UAAe,GACvB,OAAO,CAAC,OAAO,EAAE,CAAC,CAsGpB"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import * as fs from 'fs/promises';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { cyan, green, red, yellow } from 'colorette';
|
|
4
|
+
import { shouldProcessFile, shouldSkipLine } from '../assertions/utils.js';
|
|
5
|
+
import { getAssertion } from '../assertions/index.js';
|
|
6
|
+
import { MarkdownScopeParser } from './scope-parser.js';
|
|
7
|
+
import { reportFixes } from '../reporter/fixes.js';
|
|
8
|
+
import { applyFixes, collectFixes } from './auto-fix.js';
|
|
9
|
+
function needsImageMetadata(rules) {
|
|
10
|
+
return rules.some((rule) => Object.keys(rule.assertions).includes('max-image-size'));
|
|
11
|
+
}
|
|
12
|
+
function extractImageReferences(content) {
|
|
13
|
+
const images = [];
|
|
14
|
+
const imageRegex = /!\[([^\]]*)\]\(([^)\s]+)(?:[^\)]*)?\)/g;
|
|
15
|
+
let match;
|
|
16
|
+
while ((match = imageRegex.exec(content)) !== null) {
|
|
17
|
+
const imagePath = match[2];
|
|
18
|
+
if (imagePath.startsWith('http://') || imagePath.startsWith('https://')) {
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
images.push(imagePath);
|
|
22
|
+
}
|
|
23
|
+
return images;
|
|
24
|
+
}
|
|
25
|
+
async function loadImageMetadata(file, content) {
|
|
26
|
+
const images = new Map();
|
|
27
|
+
const baseDir = path.dirname(file);
|
|
28
|
+
const imageReferences = extractImageReferences(content);
|
|
29
|
+
for (const imagePath of imageReferences) {
|
|
30
|
+
const fullPath = path.resolve(baseDir, imagePath);
|
|
31
|
+
try {
|
|
32
|
+
const stats = await fs.stat(fullPath);
|
|
33
|
+
images.set(imagePath, {
|
|
34
|
+
path: imagePath,
|
|
35
|
+
size: stats.size,
|
|
36
|
+
exists: true,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
images.set(imagePath, {
|
|
41
|
+
path: imagePath,
|
|
42
|
+
size: 0,
|
|
43
|
+
exists: false,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return images.size > 0 ? { images } : undefined;
|
|
48
|
+
}
|
|
49
|
+
export async function runRecheck(files, rules, options = {}) {
|
|
50
|
+
const allProblems = [];
|
|
51
|
+
const scopeParser = new MarkdownScopeParser();
|
|
52
|
+
const segmentsByFile = {};
|
|
53
|
+
const contentsByFile = {};
|
|
54
|
+
const metadataByFile = {};
|
|
55
|
+
// Check if we need to load image metadata
|
|
56
|
+
const loadImageMeta = needsImageMetadata(rules);
|
|
57
|
+
for (const file of files) {
|
|
58
|
+
try {
|
|
59
|
+
const content = await fs.readFile(file, 'utf8');
|
|
60
|
+
contentsByFile[file] = content;
|
|
61
|
+
segmentsByFile[file] = scopeParser.parse(content);
|
|
62
|
+
// Load image metadata if needed
|
|
63
|
+
if (loadImageMeta) {
|
|
64
|
+
metadataByFile[file] = await loadImageMetadata(file, content);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
catch (_error) {
|
|
68
|
+
console.log(yellow(` Warning: Could not read file ${file}`));
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
for (const file of files) {
|
|
73
|
+
for (const rule of rules) {
|
|
74
|
+
if (!shouldProcessFile(file, rule))
|
|
75
|
+
continue;
|
|
76
|
+
if (options.verbose) {
|
|
77
|
+
console.log(` Checking rule: ${rule.shortName} on ${file}...`);
|
|
78
|
+
}
|
|
79
|
+
for (const [assertionType] of Object.entries(rule.assertions)) {
|
|
80
|
+
const assertion = getAssertion(assertionType);
|
|
81
|
+
if (assertion) {
|
|
82
|
+
try {
|
|
83
|
+
const content = contentsByFile[file];
|
|
84
|
+
const segments = segmentsByFile[file];
|
|
85
|
+
const fileMetadata = metadataByFile[file];
|
|
86
|
+
if (rule.scope && rule.scope !== 'all') {
|
|
87
|
+
const scopedSegments = segments.filter((segment) => segment.scope === rule.scope);
|
|
88
|
+
for (const segment of scopedSegments) {
|
|
89
|
+
if (shouldSkipLine(segment.content, rule)) {
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
const segmentProblems = await assertion.execute(rule, file, {
|
|
93
|
+
content: segment.content,
|
|
94
|
+
segments: [segment],
|
|
95
|
+
fileMetadata,
|
|
96
|
+
});
|
|
97
|
+
const adjustedProblems = segmentProblems.map((problem) => ({
|
|
98
|
+
...problem,
|
|
99
|
+
line: problem.line + segment.startLine - 1,
|
|
100
|
+
}));
|
|
101
|
+
allProblems.push(...adjustedProblems);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
const problems = await assertion.execute(rule, file, {
|
|
106
|
+
content,
|
|
107
|
+
segments,
|
|
108
|
+
fileMetadata,
|
|
109
|
+
});
|
|
110
|
+
allProblems.push(...problems);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
catch (err) {
|
|
114
|
+
console.error(red(`Error executing assertion ${assertionType} on ${file}: ${err.message}`));
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
if (options.fix) {
|
|
122
|
+
console.log(cyan(`\n🔧 Auto-fixing issues...`));
|
|
123
|
+
const allFixes = await collectFixes(files, rules, contentsByFile, segmentsByFile, metadataByFile);
|
|
124
|
+
if (allFixes.length > 0) {
|
|
125
|
+
await applyFixes(allFixes);
|
|
126
|
+
console.log(green(`✅ Auto-fixed ${allFixes.length} issue(s)!`));
|
|
127
|
+
reportFixes(allFixes);
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
console.log(yellow(`⚠️ No auto-fixable issues found.`));
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return allProblems;
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/core/runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAMrD,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAEzD,SAAS,kBAAkB,CAAC,KAAuB;IACjD,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC;AACvF,CAAC;AAED,SAAS,sBAAsB,CAAC,OAAe;IAC7C,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,UAAU,GAAG,wCAAwC,CAAC;IAC5D,IAAI,KAA6B,CAAC;IAElC,OAAO,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACnD,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAE3B,IAAI,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACxE,SAAS;QACX,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,IAAY,EAAE,OAAe;IAC5D,MAAM,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;IACzB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,eAAe,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAExD,KAAK,MAAM,SAAS,IAAI,eAAe,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAElD,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE;gBACpB,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,MAAM,EAAE,IAAI;aACb,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE;gBACpB,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,CAAC;gBACP,MAAM,EAAE,KAAK;aACd,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAClD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,KAAe,EACf,KAAuB,EACvB,UAAsB,EAAE;IAExB,MAAM,WAAW,GAAc,EAAE,CAAC;IAClC,MAAM,WAAW,GAAG,IAAI,mBAAmB,EAAE,CAAC;IAC9C,MAAM,cAAc,GAA6D,EAAE,CAAC;IACpF,MAAM,cAAc,GAA2B,EAAE,CAAC;IAClD,MAAM,cAAc,GAA4C,EAAE,CAAC;IAEnE,0CAA0C;IAC1C,MAAM,aAAa,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAEhD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAChD,cAAc,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;YAC/B,cAAc,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAElD,gCAAgC;YAChC,IAAI,aAAa,EAAE,CAAC;gBAClB,cAAc,CAAC,IAAI,CAAC,GAAG,MAAM,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;QAAC,OAAO,MAAM,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,mCAAmC,IAAI,EAAE,CAAC,CAAC,CAAC;YAC/D,SAAS;QACX,CAAC;IACH,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC;gBAAE,SAAS;YAE7C,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,CAAC,SAAS,OAAO,IAAI,KAAK,CAAC,CAAC;YACnE,CAAC;YAED,KAAK,MAAM,CAAC,aAAa,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC9D,MAAM,SAAS,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;gBAC9C,IAAI,SAAS,EAAE,CAAC;oBACd,IAAI,CAAC;wBACH,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;wBACrC,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;wBACtC,MAAM,YAAY,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;wBAE1C,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;4BACvC,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC;4BAClF,KAAK,MAAM,OAAO,IAAI,cAAc,EAAE,CAAC;gCACrC,IAAI,cAAc,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC;oCAC1C,SAAS;gCACX,CAAC;gCAED,MAAM,eAAe,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE;oCAC1D,OAAO,EAAE,OAAO,CAAC,OAAO;oCACxB,QAAQ,EAAE,CAAC,OAAO,CAAC;oCACnB,YAAY;iCACb,CAAC,CAAC;gCAEH,MAAM,gBAAgB,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;oCACzD,GAAG,OAAO;oCACV,IAAI,EAAE,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,SAAS,GAAG,CAAC;iCAC3C,CAAC,CAAC,CAAC;gCAEJ,WAAW,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,CAAC;4BACxC,CAAC;wBACH,CAAC;6BAAM,CAAC;4BACN,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE;gCACnD,OAAO;gCACP,QAAQ;gCACR,YAAY;6BACb,CAAC,CAAC;4BACH,WAAW,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;wBAChC,CAAC;oBACH,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,OAAO,CAAC,KAAK,CACX,GAAG,CAAC,6BAA6B,aAAa,OAAO,IAAI,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAC7E,CAAC;wBACF,SAAS;oBACX,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC;QAEhD,MAAM,QAAQ,GAAG,MAAM,YAAY,CACjC,KAAK,EACL,KAAK,EACL,cAAc,EACd,cAAc,EACd,cAAc,CACf,CAAC;QAEF,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,gBAAgB,QAAQ,CAAC,MAAM,YAAY,CAAC,CAAC,CAAC;YAChE,WAAW,CAAC,QAAQ,CAAC,CAAC;QACxB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,mCAAmC,CAAC,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Markdown scope types for semantic content linting
|
|
3
|
+
*/
|
|
4
|
+
export type ScopeType = 'all' | 'heading' | 'paragraph' | 'sentence' | 'code' | 'default' | 'table' | 'frontmatter' | 'raw';
|
|
5
|
+
/**
|
|
6
|
+
* Represents a scoped segment of markdown content
|
|
7
|
+
*/
|
|
8
|
+
export interface ScopedSegment {
|
|
9
|
+
/** The type of scope this segment represents */
|
|
10
|
+
scope: ScopeType;
|
|
11
|
+
/** The text content of this segment */
|
|
12
|
+
content: string;
|
|
13
|
+
/** Starting line number (1-based) */
|
|
14
|
+
startLine: number;
|
|
15
|
+
/** Ending line number (1-based) */
|
|
16
|
+
endLine: number;
|
|
17
|
+
/** Additional metadata specific to scope type */
|
|
18
|
+
metadata?: Record<string, any>;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Parses markdown content into scoped segments
|
|
22
|
+
*/
|
|
23
|
+
export declare class MarkdownScopeParser {
|
|
24
|
+
parse(content: string): ScopedSegment[];
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=scope-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-parser.d.ts","sourceRoot":"","sources":["../../src/core/scope-parser.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,SAAS,GACjB,KAAK,GACL,SAAS,GACT,WAAW,GACX,UAAU,GACV,MAAM,GACN,SAAS,GACT,OAAO,GACP,aAAa,GACb,KAAK,CAAC;AAEV;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,gDAAgD;IAChD,KAAK,EAAE,SAAS,CAAC;IAEjB,uCAAuC;IACvC,OAAO,EAAE,MAAM,CAAC;IAEhB,qCAAqC;IACrC,SAAS,EAAE,MAAM,CAAC;IAElB,mCAAmC;IACnC,OAAO,EAAE,MAAM,CAAC;IAEhB,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,EAAE;CAgHxC"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parses markdown content into scoped segments
|
|
3
|
+
*/
|
|
4
|
+
export class MarkdownScopeParser {
|
|
5
|
+
parse(content) {
|
|
6
|
+
const segments = [];
|
|
7
|
+
const lines = content.split('\n');
|
|
8
|
+
let lineIndex = 0;
|
|
9
|
+
while (lineIndex < lines.length) {
|
|
10
|
+
const line = lines[lineIndex];
|
|
11
|
+
const lineNumber = lineIndex + 1;
|
|
12
|
+
// Frontmatter
|
|
13
|
+
if (lineNumber === 1 && line === '---') {
|
|
14
|
+
let endIndex = lineIndex + 1;
|
|
15
|
+
while (endIndex < lines.length && lines[endIndex] !== '---') {
|
|
16
|
+
endIndex++;
|
|
17
|
+
}
|
|
18
|
+
if (endIndex < lines.length) {
|
|
19
|
+
segments.push({
|
|
20
|
+
scope: 'frontmatter',
|
|
21
|
+
startLine: lineNumber,
|
|
22
|
+
endLine: endIndex + 1,
|
|
23
|
+
content: lines.slice(lineIndex, endIndex + 1).join('\n'),
|
|
24
|
+
});
|
|
25
|
+
lineIndex = endIndex + 1;
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
// Code blocks
|
|
30
|
+
if (line.startsWith('```') || line.startsWith('~~~')) {
|
|
31
|
+
const fenceType = line.substring(0, 3);
|
|
32
|
+
let endIndex = lineIndex + 1;
|
|
33
|
+
while (endIndex < lines.length && !lines[endIndex].startsWith(fenceType)) {
|
|
34
|
+
endIndex++;
|
|
35
|
+
}
|
|
36
|
+
segments.push({
|
|
37
|
+
scope: 'code',
|
|
38
|
+
startLine: lineNumber,
|
|
39
|
+
endLine: endIndex + 1,
|
|
40
|
+
content: lines.slice(lineIndex, endIndex + 1).join('\n'),
|
|
41
|
+
metadata: { language: line.substring(3) },
|
|
42
|
+
});
|
|
43
|
+
lineIndex = endIndex + 1;
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
// Tables
|
|
47
|
+
if (line.includes('|')) {
|
|
48
|
+
let endIndex = lineIndex;
|
|
49
|
+
while (endIndex < lines.length && lines[endIndex].includes('|')) {
|
|
50
|
+
endIndex++;
|
|
51
|
+
}
|
|
52
|
+
segments.push({
|
|
53
|
+
scope: 'table',
|
|
54
|
+
startLine: lineNumber,
|
|
55
|
+
endLine: endIndex,
|
|
56
|
+
content: lines.slice(lineIndex, endIndex).join('\n'),
|
|
57
|
+
});
|
|
58
|
+
lineIndex = endIndex;
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
// Headings
|
|
62
|
+
const headingMatch = line.match(/^(#{1,6})\s/);
|
|
63
|
+
if (headingMatch) {
|
|
64
|
+
segments.push({
|
|
65
|
+
scope: 'heading',
|
|
66
|
+
startLine: lineNumber,
|
|
67
|
+
endLine: lineNumber,
|
|
68
|
+
content: line,
|
|
69
|
+
metadata: { level: headingMatch[1].length },
|
|
70
|
+
});
|
|
71
|
+
lineIndex++;
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
// HTML comments
|
|
75
|
+
if (line.trim().startsWith('<!--')) {
|
|
76
|
+
let endIndex = lineIndex;
|
|
77
|
+
while (endIndex < lines.length && !lines[endIndex].trim().endsWith('-->')) {
|
|
78
|
+
endIndex++;
|
|
79
|
+
}
|
|
80
|
+
segments.push({
|
|
81
|
+
scope: 'code',
|
|
82
|
+
startLine: lineNumber,
|
|
83
|
+
endLine: endIndex + 1,
|
|
84
|
+
content: lines.slice(lineIndex, endIndex + 1).join('\n'),
|
|
85
|
+
metadata: { language: 'html-comment' },
|
|
86
|
+
});
|
|
87
|
+
lineIndex = endIndex + 1;
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
// Paragraphs (simple version)
|
|
91
|
+
if (line.trim() !== '') {
|
|
92
|
+
let endIndex = lineIndex;
|
|
93
|
+
while (endIndex + 1 < lines.length && lines[endIndex + 1].trim() !== '') {
|
|
94
|
+
endIndex++;
|
|
95
|
+
}
|
|
96
|
+
segments.push({
|
|
97
|
+
scope: 'paragraph',
|
|
98
|
+
startLine: lineNumber,
|
|
99
|
+
endLine: endIndex + 1,
|
|
100
|
+
content: lines.slice(lineIndex, endIndex + 1).join('\n'),
|
|
101
|
+
});
|
|
102
|
+
lineIndex = endIndex + 1;
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
lineIndex++;
|
|
106
|
+
}
|
|
107
|
+
return segments;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=scope-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-parser.js","sourceRoot":"","sources":["../../src/core/scope-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Format elapsed time in milliseconds to a human readable string
|
|
3
|
+
*/
|
|
4
|
+
export declare function formatElapsedTime(elapsedMs: number): string;
|
|
5
|
+
/**
|
|
6
|
+
* Simple timer utility for measuring execution time
|
|
7
|
+
*/
|
|
8
|
+
export declare class Timer {
|
|
9
|
+
private startTime;
|
|
10
|
+
constructor();
|
|
11
|
+
/**
|
|
12
|
+
* Get elapsed time since timer creation
|
|
13
|
+
*/
|
|
14
|
+
elapsed(): number;
|
|
15
|
+
/**
|
|
16
|
+
* Get formatted elapsed time string
|
|
17
|
+
*/
|
|
18
|
+
elapsedString(): string;
|
|
19
|
+
/**
|
|
20
|
+
* Reset the timer
|
|
21
|
+
*/
|
|
22
|
+
reset(): void;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=timing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timing.d.ts","sourceRoot":"","sources":["../../src/core/timing.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED;;GAEG;AACH,qBAAa,KAAK;IAChB,OAAO,CAAC,SAAS,CAAS;;IAM1B;;OAEG;IACH,OAAO,IAAI,MAAM;IAIjB;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Format elapsed time in milliseconds to a human readable string
|
|
3
|
+
*/
|
|
4
|
+
export function formatElapsedTime(elapsedMs) {
|
|
5
|
+
return elapsedMs < 1000 ? `${elapsedMs}ms` : `${(elapsedMs / 1000).toFixed(1)}s`;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Simple timer utility for measuring execution time
|
|
9
|
+
*/
|
|
10
|
+
export class Timer {
|
|
11
|
+
constructor() {
|
|
12
|
+
Object.defineProperty(this, "startTime", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
configurable: true,
|
|
15
|
+
writable: true,
|
|
16
|
+
value: void 0
|
|
17
|
+
});
|
|
18
|
+
this.startTime = Date.now();
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Get elapsed time since timer creation
|
|
22
|
+
*/
|
|
23
|
+
elapsed() {
|
|
24
|
+
return Date.now() - this.startTime;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Get formatted elapsed time string
|
|
28
|
+
*/
|
|
29
|
+
elapsedString() {
|
|
30
|
+
return formatElapsedTime(this.elapsed());
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Reset the timer
|
|
34
|
+
*/
|
|
35
|
+
reset() {
|
|
36
|
+
this.startTime = Date.now();
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=timing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timing.js","sourceRoot":"","sources":["../../src/core/timing.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,SAAiB;IACjD,OAAO,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,SAAS,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AACnF,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,KAAK;IAGhB;QAFQ;;;;;WAAkB;QAGxB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,OAAO;QACL,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC9B,CAAC;CACF"}
|
package/dist/files.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"AAMA,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAkC3E"}
|
package/dist/files.js
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import * as fs from 'fs/promises';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { minimatch } from 'minimatch';
|
|
4
|
+
const SKIP_DIRS = ['node_modules', 'dist', 'build'];
|
|
5
|
+
export async function getMarkdownFiles(inputPath) {
|
|
6
|
+
async function walkDir(dir) {
|
|
7
|
+
const files = [];
|
|
8
|
+
try {
|
|
9
|
+
const entries = await fs.readdir(dir, { withFileTypes: true });
|
|
10
|
+
for (const entry of entries) {
|
|
11
|
+
const fullPath = path.join(dir, entry.name);
|
|
12
|
+
if (entry.isDirectory()) {
|
|
13
|
+
if (entry.name.startsWith('.') || SKIP_DIRS.includes(entry.name)) {
|
|
14
|
+
continue;
|
|
15
|
+
}
|
|
16
|
+
files.push(...(await walkDir(fullPath)));
|
|
17
|
+
}
|
|
18
|
+
else if (entry.isFile() && minimatch(entry.name, '*.{md,markdown}', { nocase: true })) {
|
|
19
|
+
files.push(fullPath);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return [];
|
|
25
|
+
}
|
|
26
|
+
return files;
|
|
27
|
+
}
|
|
28
|
+
const stat = await fs.stat(inputPath);
|
|
29
|
+
if (stat.isFile()) {
|
|
30
|
+
return [inputPath];
|
|
31
|
+
}
|
|
32
|
+
else if (stat.isDirectory()) {
|
|
33
|
+
return walkDir(inputPath);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
return [];
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,SAAS,GAAG,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAEpD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,SAAiB;IACtD,KAAK,UAAU,OAAO,CAAC,GAAW;QAChC,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YAE/D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBAE5C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;oBACxB,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;wBACjE,SAAS;oBACX,CAAC;oBACD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC3C,CAAC;qBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,iBAAiB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;oBACxF,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtC,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;QAClB,OAAO,CAAC,SAAS,CAAC,CAAC;IACrB,CAAC;SAAM,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QAC9B,OAAO,OAAO,CAAC,SAAS,CAAC,CAAC;IAC5B,CAAC;SAAM,CAAC;QACN,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { NormalizedRule, ValidationError } from './types.js';
|
|
2
|
+
export interface LoadResult {
|
|
3
|
+
success: boolean;
|
|
4
|
+
rules: NormalizedRule[];
|
|
5
|
+
errors: ValidationError[];
|
|
6
|
+
configPath?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare class ConfigLoader {
|
|
9
|
+
private validator;
|
|
10
|
+
private constructor();
|
|
11
|
+
static create(): Promise<ConfigLoader>;
|
|
12
|
+
/**
|
|
13
|
+
* Loads and validates a recheck configuration file
|
|
14
|
+
*/
|
|
15
|
+
loadConfig(configPath: string): Promise<LoadResult>;
|
|
16
|
+
/**
|
|
17
|
+
* Finds a recheck configuration file in the current directory or parent directories
|
|
18
|
+
*/
|
|
19
|
+
findConfigFile(startDir?: string): Promise<string | null>;
|
|
20
|
+
/**
|
|
21
|
+
* Loads configuration with automatic discovery
|
|
22
|
+
*/
|
|
23
|
+
loadConfigAuto(configPath?: string): Promise<LoadResult>;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=load-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load-config.d.ts","sourceRoot":"","sources":["../src/load-config.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAIlE,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,SAAS,CAAkB;IAEnC,OAAO;WAIM,MAAM,IAAI,OAAO,CAAC,YAAY,CAAC;IAK5C;;OAEG;IACG,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAwCzD;;OAEG;IACG,cAAc,CAAC,QAAQ,GAAE,MAAsB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IA2B9E;;OAEG;IACG,cAAc,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;CAkB/D"}
|