@empline/preflight 1.1.43 ā 1.1.45
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/dist/checks/react/state-update-during-render.d.ts +3 -5
- package/dist/checks/react/state-update-during-render.d.ts.map +1 -1
- package/dist/checks/react/state-update-during-render.js +77 -144
- package/dist/checks/react/state-update-during-render.js.map +1 -1
- package/dist/checks/system/preflight-metadata-validator.d.ts.map +1 -1
- package/dist/checks/system/preflight-metadata-validator.js +97 -2
- package/dist/checks/system/preflight-metadata-validator.js.map +1 -1
- package/dist/checks/ui/layout-overflow-containment.d.ts +23 -0
- package/dist/checks/ui/layout-overflow-containment.d.ts.map +1 -0
- package/dist/checks/ui/layout-overflow-containment.js +240 -0
- package/dist/checks/ui/layout-overflow-containment.js.map +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -4
- package/dist/index.js.map +1 -1
- package/dist/runner.d.ts +1 -0
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +36 -0
- package/dist/runner.js.map +1 -1
- package/dist/shared/concurrency-config.d.ts +2 -0
- package/dist/shared/concurrency-config.d.ts.map +1 -1
- package/dist/shared/concurrency-config.js +2 -0
- package/dist/shared/concurrency-config.js.map +1 -1
- package/dist/shared/consolidated-check-base.d.ts +112 -0
- package/dist/shared/consolidated-check-base.d.ts.map +1 -0
- package/dist/shared/consolidated-check-base.js +247 -0
- package/dist/shared/consolidated-check-base.js.map +1 -0
- package/dist/shared/exclusions.d.ts +31 -0
- package/dist/shared/exclusions.d.ts.map +1 -1
- package/dist/shared/exclusions.js +108 -0
- package/dist/shared/exclusions.js.map +1 -1
- package/dist/shared/performance-tracker.d.ts +103 -0
- package/dist/shared/performance-tracker.d.ts.map +1 -0
- package/dist/shared/performance-tracker.js +267 -0
- package/dist/shared/performance-tracker.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"concurrency-config.js","sourceRoot":"","sources":["../../src/shared/concurrency-config.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCH,oDA6DC;AAKD,4DAqBC;AAKD,oDAMC;AAUD,
|
|
1
|
+
{"version":3,"file":"concurrency-config.js","sourceRoot":"","sources":["../../src/shared/concurrency-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Consolidated Check Base
|
|
3
|
+
*
|
|
4
|
+
* Provides a standardized foundation for consolidated preflight checks.
|
|
5
|
+
* Handles common patterns like:
|
|
6
|
+
* - Concurrent file scanning
|
|
7
|
+
* - Result aggregation
|
|
8
|
+
* - Progress reporting
|
|
9
|
+
* - Error handling
|
|
10
|
+
* - Exclusion management
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* import { ConsolidatedCheckBase, SubCheck } from '../shared/consolidated-check-base';
|
|
14
|
+
*
|
|
15
|
+
* const checks: SubCheck[] = [
|
|
16
|
+
* { id: 'no-console', name: 'No Console Logs', fn: checkNoConsole },
|
|
17
|
+
* { id: 'no-debugger', name: 'No Debugger', fn: checkNoDebugger },
|
|
18
|
+
* ];
|
|
19
|
+
*
|
|
20
|
+
* const result = await runConsolidatedCheck({
|
|
21
|
+
* id: 'ui/console-checks',
|
|
22
|
+
* name: 'Console & Debug Statement Checks',
|
|
23
|
+
* checks,
|
|
24
|
+
* concurrency: 4,
|
|
25
|
+
* });
|
|
26
|
+
*/
|
|
27
|
+
import { PreflightCheckResult, PreflightFinding } from "../core/types";
|
|
28
|
+
/**
|
|
29
|
+
* A sub-check within a consolidated check
|
|
30
|
+
*/
|
|
31
|
+
export interface SubCheck {
|
|
32
|
+
/** Unique identifier for this sub-check */
|
|
33
|
+
id: string;
|
|
34
|
+
/** Human-readable name */
|
|
35
|
+
name: string;
|
|
36
|
+
/** The check function - receives files and returns findings */
|
|
37
|
+
fn: (files: string[]) => Promise<PreflightFinding[]>;
|
|
38
|
+
/** Whether this sub-check is blocking (default: true) */
|
|
39
|
+
blocking?: boolean;
|
|
40
|
+
/** File patterns to check (default: all TS/TSX) */
|
|
41
|
+
filePatterns?: string[];
|
|
42
|
+
/** Additional exclusion patterns for this sub-check */
|
|
43
|
+
exclusions?: string[];
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Result from a sub-check execution
|
|
47
|
+
*/
|
|
48
|
+
export interface SubCheckResult {
|
|
49
|
+
id: string;
|
|
50
|
+
name: string;
|
|
51
|
+
passed: boolean;
|
|
52
|
+
findings: PreflightFinding[];
|
|
53
|
+
duration: number;
|
|
54
|
+
filesChecked: number;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Options for running a consolidated check
|
|
58
|
+
*/
|
|
59
|
+
export interface ConsolidatedCheckOptions {
|
|
60
|
+
/** Check ID (e.g., "ui/console-checks") */
|
|
61
|
+
id: string;
|
|
62
|
+
/** Human-readable name */
|
|
63
|
+
name: string;
|
|
64
|
+
/** Array of sub-checks to run */
|
|
65
|
+
checks: SubCheck[];
|
|
66
|
+
/** Maximum concurrency for sub-checks (default: auto from config) */
|
|
67
|
+
concurrency?: number;
|
|
68
|
+
/** Whether to show progress output (default: true) */
|
|
69
|
+
showProgress?: boolean;
|
|
70
|
+
/** Whether any failure is blocking (default: based on sub-check settings) */
|
|
71
|
+
blocking?: boolean;
|
|
72
|
+
/** Custom file getter (default: fileCache.getAllTsTsx) */
|
|
73
|
+
getFiles?: () => Promise<string[]>;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Run a consolidated check with standardized handling
|
|
77
|
+
*/
|
|
78
|
+
export declare function runConsolidatedCheck(options: ConsolidatedCheckOptions): Promise<PreflightCheckResult>;
|
|
79
|
+
/**
|
|
80
|
+
* Helper to create a file-based check function
|
|
81
|
+
*
|
|
82
|
+
* @example
|
|
83
|
+
* const checkNoConsole = createFileChecker({
|
|
84
|
+
* pattern: /console\.(log|warn|error)\(/,
|
|
85
|
+
* message: 'Console statement found',
|
|
86
|
+
* level: 'error',
|
|
87
|
+
* });
|
|
88
|
+
*/
|
|
89
|
+
export declare function createFileChecker(options: {
|
|
90
|
+
pattern: RegExp;
|
|
91
|
+
message: string;
|
|
92
|
+
level: "error" | "warning" | "info";
|
|
93
|
+
ruleId?: string;
|
|
94
|
+
exclude?: RegExp;
|
|
95
|
+
suggestion?: string;
|
|
96
|
+
}): (files: string[]) => Promise<PreflightFinding[]>;
|
|
97
|
+
/**
|
|
98
|
+
* Helper to create an AST-based check (for more complex patterns)
|
|
99
|
+
* This is a placeholder - actual AST parsing would require ts-morph or similar
|
|
100
|
+
*/
|
|
101
|
+
export declare function createAstChecker(_options: {
|
|
102
|
+
check: (filePath: string, content: string) => PreflightFinding[];
|
|
103
|
+
}): (files: string[]) => Promise<PreflightFinding[]>;
|
|
104
|
+
/**
|
|
105
|
+
* Merge multiple check results into one
|
|
106
|
+
*/
|
|
107
|
+
export declare function mergeCheckResults(results: PreflightCheckResult[]): PreflightCheckResult;
|
|
108
|
+
/**
|
|
109
|
+
* Deduplicate findings by file + line + message
|
|
110
|
+
*/
|
|
111
|
+
export declare function deduplicateFindings(findings: PreflightFinding[]): PreflightFinding[];
|
|
112
|
+
//# sourceMappingURL=consolidated-check-base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consolidated-check-base.d.ts","sourceRoot":"","sources":["../../src/shared/consolidated-check-base.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAGH,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAMvE;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,2CAA2C;IAC3C,EAAE,EAAE,MAAM,CAAC;IACX,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,+DAA+D;IAC/D,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACrD,yDAAyD;IACzD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mDAAmD;IACnD,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,uDAAuD;IACvD,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,2CAA2C;IAC3C,EAAE,EAAE,MAAM,CAAC;IACX,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,MAAM,EAAE,QAAQ,EAAE,CAAC;IACnB,qEAAqE;IACrE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sDAAsD;IACtD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,oBAAoB,CAAC,CAsG/B;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAmCnD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE;IACzC,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,gBAAgB,EAAE,CAAC;CAClE,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAkBnD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,oBAAoB,EAAE,GAC9B,oBAAoB,CAgBtB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,gBAAgB,EAAE,GAC3B,gBAAgB,EAAE,CAapB"}
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Consolidated Check Base
|
|
4
|
+
*
|
|
5
|
+
* Provides a standardized foundation for consolidated preflight checks.
|
|
6
|
+
* Handles common patterns like:
|
|
7
|
+
* - Concurrent file scanning
|
|
8
|
+
* - Result aggregation
|
|
9
|
+
* - Progress reporting
|
|
10
|
+
* - Error handling
|
|
11
|
+
* - Exclusion management
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* import { ConsolidatedCheckBase, SubCheck } from '../shared/consolidated-check-base';
|
|
15
|
+
*
|
|
16
|
+
* const checks: SubCheck[] = [
|
|
17
|
+
* { id: 'no-console', name: 'No Console Logs', fn: checkNoConsole },
|
|
18
|
+
* { id: 'no-debugger', name: 'No Debugger', fn: checkNoDebugger },
|
|
19
|
+
* ];
|
|
20
|
+
*
|
|
21
|
+
* const result = await runConsolidatedCheck({
|
|
22
|
+
* id: 'ui/console-checks',
|
|
23
|
+
* name: 'Console & Debug Statement Checks',
|
|
24
|
+
* checks,
|
|
25
|
+
* concurrency: 4,
|
|
26
|
+
* });
|
|
27
|
+
*/
|
|
28
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
29
|
+
if (k2 === undefined) k2 = k;
|
|
30
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
31
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
32
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
33
|
+
}
|
|
34
|
+
Object.defineProperty(o, k2, desc);
|
|
35
|
+
}) : (function(o, m, k, k2) {
|
|
36
|
+
if (k2 === undefined) k2 = k;
|
|
37
|
+
o[k2] = m[k];
|
|
38
|
+
}));
|
|
39
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
40
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
41
|
+
}) : function(o, v) {
|
|
42
|
+
o["default"] = v;
|
|
43
|
+
});
|
|
44
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
45
|
+
var ownKeys = function(o) {
|
|
46
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
47
|
+
var ar = [];
|
|
48
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
49
|
+
return ar;
|
|
50
|
+
};
|
|
51
|
+
return ownKeys(o);
|
|
52
|
+
};
|
|
53
|
+
return function (mod) {
|
|
54
|
+
if (mod && mod.__esModule) return mod;
|
|
55
|
+
var result = {};
|
|
56
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
57
|
+
__setModuleDefault(result, mod);
|
|
58
|
+
return result;
|
|
59
|
+
};
|
|
60
|
+
})();
|
|
61
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
62
|
+
exports.runConsolidatedCheck = runConsolidatedCheck;
|
|
63
|
+
exports.createFileChecker = createFileChecker;
|
|
64
|
+
exports.createAstChecker = createAstChecker;
|
|
65
|
+
exports.mergeCheckResults = mergeCheckResults;
|
|
66
|
+
exports.deduplicateFindings = deduplicateFindings;
|
|
67
|
+
const fs = __importStar(require("node:fs"));
|
|
68
|
+
const concurrency_config_1 = require("./concurrency-config");
|
|
69
|
+
const exclusions_1 = require("./exclusions");
|
|
70
|
+
const file_cache_1 = require("./file-cache");
|
|
71
|
+
const console_chars_1 = require("../utils/console-chars");
|
|
72
|
+
/**
|
|
73
|
+
* Run a consolidated check with standardized handling
|
|
74
|
+
*/
|
|
75
|
+
async function runConsolidatedCheck(options) {
|
|
76
|
+
const startTime = Date.now();
|
|
77
|
+
const { id, name, checks, concurrency = (0, concurrency_config_1.getConcurrencyConfig)().maxConcurrency, showProgress = true, blocking = true, getFiles = () => file_cache_1.fileCache.getAllTsTsx(), } = options;
|
|
78
|
+
// Load exclusions for this check
|
|
79
|
+
const exclusions = await (0, exclusions_1.getExclusions)(id);
|
|
80
|
+
// Get and filter files
|
|
81
|
+
const allFiles = await getFiles();
|
|
82
|
+
const files = (0, exclusions_1.filterExcludedFiles)(allFiles, exclusions);
|
|
83
|
+
if (showProgress) {
|
|
84
|
+
console.log(`\n${console_chars_1.emoji.search} ${name}`);
|
|
85
|
+
console.log(` Checking ${files.length} files with ${checks.length} sub-checks...`);
|
|
86
|
+
}
|
|
87
|
+
// Run sub-checks with concurrency
|
|
88
|
+
const results = [];
|
|
89
|
+
const allFindings = [];
|
|
90
|
+
// Process in batches
|
|
91
|
+
for (let i = 0; i < checks.length; i += concurrency) {
|
|
92
|
+
const batch = checks.slice(i, i + concurrency);
|
|
93
|
+
const batchResults = await Promise.all(batch.map(async (check) => {
|
|
94
|
+
const checkStart = Date.now();
|
|
95
|
+
try {
|
|
96
|
+
// Apply check-specific exclusions if any
|
|
97
|
+
let checkFiles = files;
|
|
98
|
+
if (check.exclusions && check.exclusions.length > 0) {
|
|
99
|
+
checkFiles = (0, exclusions_1.filterExcludedFiles)(files, check.exclusions);
|
|
100
|
+
}
|
|
101
|
+
const findings = await check.fn(checkFiles);
|
|
102
|
+
const duration = Date.now() - checkStart;
|
|
103
|
+
return {
|
|
104
|
+
id: check.id,
|
|
105
|
+
name: check.name,
|
|
106
|
+
passed: findings.filter((f) => f.level === "error").length === 0,
|
|
107
|
+
findings,
|
|
108
|
+
duration,
|
|
109
|
+
filesChecked: checkFiles.length,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
const duration = Date.now() - checkStart;
|
|
114
|
+
return {
|
|
115
|
+
id: check.id,
|
|
116
|
+
name: check.name,
|
|
117
|
+
passed: false,
|
|
118
|
+
findings: [
|
|
119
|
+
{
|
|
120
|
+
message: `Check failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
121
|
+
level: "error",
|
|
122
|
+
ruleId: check.id,
|
|
123
|
+
},
|
|
124
|
+
],
|
|
125
|
+
duration,
|
|
126
|
+
filesChecked: 0,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
}));
|
|
130
|
+
results.push(...batchResults);
|
|
131
|
+
}
|
|
132
|
+
// Aggregate findings
|
|
133
|
+
for (const result of results) {
|
|
134
|
+
allFindings.push(...result.findings);
|
|
135
|
+
if (showProgress) {
|
|
136
|
+
const icon = result.passed ? console_chars_1.emoji.success : console_chars_1.emoji.error;
|
|
137
|
+
console.log(` ${icon} ${result.name} (${(result.duration / 1000).toFixed(2)}s)`);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
// Calculate overall pass/fail
|
|
141
|
+
const errorCount = allFindings.filter((f) => f.level === "error").length;
|
|
142
|
+
const warningCount = allFindings.filter((f) => f.level === "warning").length;
|
|
143
|
+
const passed = errorCount === 0;
|
|
144
|
+
if (showProgress) {
|
|
145
|
+
console.log(`\n Summary: ${errorCount} errors, ${warningCount} warnings`);
|
|
146
|
+
}
|
|
147
|
+
return {
|
|
148
|
+
passed,
|
|
149
|
+
findings: allFindings,
|
|
150
|
+
duration: Date.now() - startTime,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Helper to create a file-based check function
|
|
155
|
+
*
|
|
156
|
+
* @example
|
|
157
|
+
* const checkNoConsole = createFileChecker({
|
|
158
|
+
* pattern: /console\.(log|warn|error)\(/,
|
|
159
|
+
* message: 'Console statement found',
|
|
160
|
+
* level: 'error',
|
|
161
|
+
* });
|
|
162
|
+
*/
|
|
163
|
+
function createFileChecker(options) {
|
|
164
|
+
const { pattern, message, level, ruleId, exclude, suggestion } = options;
|
|
165
|
+
return async (files) => {
|
|
166
|
+
const findings = [];
|
|
167
|
+
for (const file of files) {
|
|
168
|
+
const content = fs.readFileSync(file, "utf-8");
|
|
169
|
+
if (!content)
|
|
170
|
+
continue;
|
|
171
|
+
const lines = content.split("\n");
|
|
172
|
+
for (let i = 0; i < lines.length; i++) {
|
|
173
|
+
const line = lines[i];
|
|
174
|
+
// Skip if excluded
|
|
175
|
+
if (exclude && exclude.test(line)) {
|
|
176
|
+
continue;
|
|
177
|
+
}
|
|
178
|
+
if (pattern.test(line)) {
|
|
179
|
+
findings.push({
|
|
180
|
+
message,
|
|
181
|
+
level,
|
|
182
|
+
file,
|
|
183
|
+
startLine: i + 1,
|
|
184
|
+
ruleId,
|
|
185
|
+
suggestion,
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
return findings;
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Helper to create an AST-based check (for more complex patterns)
|
|
195
|
+
* This is a placeholder - actual AST parsing would require ts-morph or similar
|
|
196
|
+
*/
|
|
197
|
+
function createAstChecker(_options) {
|
|
198
|
+
return async (files) => {
|
|
199
|
+
const findings = [];
|
|
200
|
+
for (const file of files) {
|
|
201
|
+
const content = fs.readFileSync(file, "utf-8");
|
|
202
|
+
if (!content)
|
|
203
|
+
continue;
|
|
204
|
+
try {
|
|
205
|
+
const fileFindings = _options.check(file, content);
|
|
206
|
+
findings.push(...fileFindings);
|
|
207
|
+
}
|
|
208
|
+
catch {
|
|
209
|
+
// Skip files that can't be parsed
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
return findings;
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Merge multiple check results into one
|
|
217
|
+
*/
|
|
218
|
+
function mergeCheckResults(results) {
|
|
219
|
+
const allFindings = [];
|
|
220
|
+
let totalDuration = 0;
|
|
221
|
+
for (const result of results) {
|
|
222
|
+
allFindings.push(...(result.findings || []));
|
|
223
|
+
totalDuration += result.duration || 0;
|
|
224
|
+
}
|
|
225
|
+
const passed = results.every((r) => r.passed);
|
|
226
|
+
return {
|
|
227
|
+
passed,
|
|
228
|
+
findings: allFindings,
|
|
229
|
+
duration: totalDuration,
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Deduplicate findings by file + line + message
|
|
234
|
+
*/
|
|
235
|
+
function deduplicateFindings(findings) {
|
|
236
|
+
const seen = new Set();
|
|
237
|
+
const unique = [];
|
|
238
|
+
for (const finding of findings) {
|
|
239
|
+
const key = `${finding.file || ""}:${finding.startLine || 0}:${finding.message}`;
|
|
240
|
+
if (!seen.has(key)) {
|
|
241
|
+
seen.add(key);
|
|
242
|
+
unique.push(finding);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
return unique;
|
|
246
|
+
}
|
|
247
|
+
//# sourceMappingURL=consolidated-check-base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consolidated-check-base.js","sourceRoot":"","sources":["../../src/shared/consolidated-check-base.ts"],"names":[],"mappings":"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"}
|
|
@@ -65,6 +65,37 @@ export declare function getExclusionsSync(checkId: string): string[];
|
|
|
65
65
|
* }
|
|
66
66
|
*/
|
|
67
67
|
export declare function shouldExcludeFile(filePath: string, patterns: string[]): boolean;
|
|
68
|
+
/**
|
|
69
|
+
* Debug exclusion matching - returns which pattern matched a file
|
|
70
|
+
*
|
|
71
|
+
* @param filePath - The file path to check
|
|
72
|
+
* @param patterns - Array of glob patterns
|
|
73
|
+
* @returns The matching pattern or null if no match
|
|
74
|
+
*/
|
|
75
|
+
export declare function getMatchingExclusionPattern(filePath: string, patterns: string[]): string | null;
|
|
76
|
+
/**
|
|
77
|
+
* Debug interface for exclusion analysis
|
|
78
|
+
*/
|
|
79
|
+
export interface ExclusionDebugInfo {
|
|
80
|
+
checkId: string;
|
|
81
|
+
totalFiles: number;
|
|
82
|
+
excludedFiles: number;
|
|
83
|
+
includedFiles: number;
|
|
84
|
+
exclusionsByPattern: Map<string, string[]>;
|
|
85
|
+
patternSources: Map<string, "global" | "category" | "check-specific">;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Get detailed debug info about exclusions for a check
|
|
89
|
+
*
|
|
90
|
+
* @param checkId - The check ID
|
|
91
|
+
* @param files - Array of files to analyze
|
|
92
|
+
* @returns Debug information about what was excluded and why
|
|
93
|
+
*/
|
|
94
|
+
export declare function getExclusionDebugInfo(checkId: string, files: string[]): Promise<ExclusionDebugInfo>;
|
|
95
|
+
/**
|
|
96
|
+
* Print debug info about exclusions (for --debug-exclusions flag)
|
|
97
|
+
*/
|
|
98
|
+
export declare function printExclusionDebugInfo(info: ExclusionDebugInfo): void;
|
|
68
99
|
/**
|
|
69
100
|
* Filter an array of files, removing those that match exclusion patterns
|
|
70
101
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exclusions.d.ts","sourceRoot":"","sources":["../../src/shared/exclusions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAmCH;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAG3C;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAqBtE;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAwB3D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAW/E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAMjF;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAG1F"}
|
|
1
|
+
{"version":3,"file":"exclusions.d.ts","sourceRoot":"","sources":["../../src/shared/exclusions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAmCH;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAG3C;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAqBtE;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAwB3D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAW/E;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAU/F;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC3C,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,GAAG,UAAU,GAAG,gBAAgB,CAAC,CAAC;CACvE;AAED;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EAAE,GACd,OAAO,CAAC,kBAAkB,CAAC,CA4D7B;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,kBAAkB,GAAG,IAAI,CAyBtE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAMjF;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAG1F"}
|
|
@@ -28,6 +28,9 @@ exports.clearExclusionsCache = clearExclusionsCache;
|
|
|
28
28
|
exports.getExclusions = getExclusions;
|
|
29
29
|
exports.getExclusionsSync = getExclusionsSync;
|
|
30
30
|
exports.shouldExcludeFile = shouldExcludeFile;
|
|
31
|
+
exports.getMatchingExclusionPattern = getMatchingExclusionPattern;
|
|
32
|
+
exports.getExclusionDebugInfo = getExclusionDebugInfo;
|
|
33
|
+
exports.printExclusionDebugInfo = printExclusionDebugInfo;
|
|
31
34
|
exports.filterExcludedFiles = filterExcludedFiles;
|
|
32
35
|
exports.getFilteredFiles = getFilteredFiles;
|
|
33
36
|
const config_1 = require("../core/config");
|
|
@@ -146,6 +149,111 @@ function shouldExcludeFile(filePath, patterns) {
|
|
|
146
149
|
}
|
|
147
150
|
return false;
|
|
148
151
|
}
|
|
152
|
+
/**
|
|
153
|
+
* Debug exclusion matching - returns which pattern matched a file
|
|
154
|
+
*
|
|
155
|
+
* @param filePath - The file path to check
|
|
156
|
+
* @param patterns - Array of glob patterns
|
|
157
|
+
* @returns The matching pattern or null if no match
|
|
158
|
+
*/
|
|
159
|
+
function getMatchingExclusionPattern(filePath, patterns) {
|
|
160
|
+
const normalizedPath = filePath.replace(/\\/g, "/");
|
|
161
|
+
for (const pattern of patterns) {
|
|
162
|
+
if (minimatch(normalizedPath, pattern, { matchBase: true })) {
|
|
163
|
+
return pattern;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return null;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Get detailed debug info about exclusions for a check
|
|
170
|
+
*
|
|
171
|
+
* @param checkId - The check ID
|
|
172
|
+
* @param files - Array of files to analyze
|
|
173
|
+
* @returns Debug information about what was excluded and why
|
|
174
|
+
*/
|
|
175
|
+
async function getExclusionDebugInfo(checkId, files) {
|
|
176
|
+
const config = await loadExclusionsConfig();
|
|
177
|
+
const category = checkId.split("/")[0];
|
|
178
|
+
const exclusionsByPattern = new Map();
|
|
179
|
+
const patternSources = new Map();
|
|
180
|
+
// Collect patterns with their sources
|
|
181
|
+
const allPatterns = [];
|
|
182
|
+
if (config.global) {
|
|
183
|
+
for (const pattern of config.global) {
|
|
184
|
+
allPatterns.push(pattern);
|
|
185
|
+
patternSources.set(pattern, "global");
|
|
186
|
+
exclusionsByPattern.set(pattern, []);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
if (category && config[category]) {
|
|
190
|
+
for (const pattern of config[category]) {
|
|
191
|
+
if (!patternSources.has(pattern)) {
|
|
192
|
+
allPatterns.push(pattern);
|
|
193
|
+
patternSources.set(pattern, "category");
|
|
194
|
+
exclusionsByPattern.set(pattern, []);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
if (config[checkId]) {
|
|
199
|
+
for (const pattern of config[checkId]) {
|
|
200
|
+
if (!patternSources.has(pattern)) {
|
|
201
|
+
allPatterns.push(pattern);
|
|
202
|
+
patternSources.set(pattern, "check-specific");
|
|
203
|
+
exclusionsByPattern.set(pattern, []);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
// Check each file against patterns
|
|
208
|
+
let excludedCount = 0;
|
|
209
|
+
for (const file of files) {
|
|
210
|
+
const normalizedPath = file.replace(/\\/g, "/");
|
|
211
|
+
for (const pattern of allPatterns) {
|
|
212
|
+
if (minimatch(normalizedPath, pattern, { matchBase: true })) {
|
|
213
|
+
exclusionsByPattern.get(pattern).push(file);
|
|
214
|
+
excludedCount++;
|
|
215
|
+
break; // Only count file once even if multiple patterns match
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
return {
|
|
220
|
+
checkId,
|
|
221
|
+
totalFiles: files.length,
|
|
222
|
+
excludedFiles: excludedCount,
|
|
223
|
+
includedFiles: files.length - excludedCount,
|
|
224
|
+
exclusionsByPattern,
|
|
225
|
+
patternSources,
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Print debug info about exclusions (for --debug-exclusions flag)
|
|
230
|
+
*/
|
|
231
|
+
function printExclusionDebugInfo(info) {
|
|
232
|
+
console.log(`\nš Exclusion Debug: ${info.checkId}`);
|
|
233
|
+
console.log(` Total files: ${info.totalFiles}`);
|
|
234
|
+
console.log(` Excluded: ${info.excludedFiles}`);
|
|
235
|
+
console.log(` Included: ${info.includedFiles}`);
|
|
236
|
+
if (info.exclusionsByPattern.size > 0) {
|
|
237
|
+
console.log(`\n Patterns:`);
|
|
238
|
+
for (const [pattern, files] of info.exclusionsByPattern) {
|
|
239
|
+
const source = info.patternSources.get(pattern);
|
|
240
|
+
const sourceTag = source === "global" ? "[global]" :
|
|
241
|
+
source === "category" ? "[category]" : "[check]";
|
|
242
|
+
console.log(` ${sourceTag} "${pattern}" ā ${files.length} files`);
|
|
243
|
+
if (files.length > 0 && files.length <= 5) {
|
|
244
|
+
for (const file of files) {
|
|
245
|
+
console.log(` - ${file}`);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
else if (files.length > 5) {
|
|
249
|
+
for (const file of files.slice(0, 3)) {
|
|
250
|
+
console.log(` - ${file}`);
|
|
251
|
+
}
|
|
252
|
+
console.log(` ... and ${files.length - 3} more`);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
149
257
|
/**
|
|
150
258
|
* Filter an array of files, removing those that match exclusion patterns
|
|
151
259
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exclusions.js","sourceRoot":"","sources":["../../src/shared/exclusions.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;;AAsCH,oDAGC;AAiBD,sCAqBC;AAUD,8CAwBC;AAeD,8CAWC;AAcD,kDAMC;AAaD,4CAGC;
|
|
1
|
+
{"version":3,"file":"exclusions.js","sourceRoot":"","sources":["../../src/shared/exclusions.ts"],"names":[],"mappings":"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"}
|