driftdetect 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/dist/bin/drift.d.ts +11 -0
- package/dist/bin/drift.d.ts.map +1 -0
- package/dist/bin/drift.js +83 -0
- package/dist/bin/drift.js.map +1 -0
- package/dist/commands/approve.d.ts +18 -0
- package/dist/commands/approve.d.ts.map +1 -0
- package/dist/commands/approve.js +271 -0
- package/dist/commands/approve.js.map +1 -0
- package/dist/commands/check.d.ts +39 -0
- package/dist/commands/check.d.ts.map +1 -0
- package/dist/commands/check.js +268 -0
- package/dist/commands/check.js.map +1 -0
- package/dist/commands/export.d.ts +14 -0
- package/dist/commands/export.d.ts.map +1 -0
- package/dist/commands/export.js +109 -0
- package/dist/commands/export.js.map +1 -0
- package/dist/commands/files.d.ts +13 -0
- package/dist/commands/files.d.ts.map +1 -0
- package/dist/commands/files.js +88 -0
- package/dist/commands/files.js.map +1 -0
- package/dist/commands/ignore.d.ts +18 -0
- package/dist/commands/ignore.d.ts.map +1 -0
- package/dist/commands/ignore.js +200 -0
- package/dist/commands/ignore.js.map +1 -0
- package/dist/commands/index.d.ts +16 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +16 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/init.d.ts +19 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +320 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/report.d.ts +20 -0
- package/dist/commands/report.d.ts.map +1 -0
- package/dist/commands/report.js +202 -0
- package/dist/commands/report.js.map +1 -0
- package/dist/commands/scan.d.ts +27 -0
- package/dist/commands/scan.d.ts.map +1 -0
- package/dist/commands/scan.js +444 -0
- package/dist/commands/scan.js.map +1 -0
- package/dist/commands/status.d.ts +18 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +199 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/where.d.ts +13 -0
- package/dist/commands/where.d.ts.map +1 -0
- package/dist/commands/where.js +80 -0
- package/dist/commands/where.js.map +1 -0
- package/dist/git/hooks.d.ts +108 -0
- package/dist/git/hooks.d.ts.map +1 -0
- package/dist/git/hooks.js +389 -0
- package/dist/git/hooks.js.map +1 -0
- package/dist/git/index.d.ts +6 -0
- package/dist/git/index.d.ts.map +1 -0
- package/dist/git/index.js +6 -0
- package/dist/git/index.js.map +1 -0
- package/dist/git/staged-files.d.ts +41 -0
- package/dist/git/staged-files.d.ts.map +1 -0
- package/dist/git/staged-files.js +118 -0
- package/dist/git/staged-files.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/reporters/github-reporter.d.ts +13 -0
- package/dist/reporters/github-reporter.d.ts.map +1 -0
- package/dist/reporters/github-reporter.js +59 -0
- package/dist/reporters/github-reporter.js.map +1 -0
- package/dist/reporters/gitlab-reporter.d.ts +16 -0
- package/dist/reporters/gitlab-reporter.d.ts.map +1 -0
- package/dist/reporters/gitlab-reporter.js +62 -0
- package/dist/reporters/gitlab-reporter.js.map +1 -0
- package/dist/reporters/index.d.ts +9 -0
- package/dist/reporters/index.d.ts.map +1 -0
- package/dist/reporters/index.js +9 -0
- package/dist/reporters/index.js.map +1 -0
- package/dist/reporters/json-reporter.d.ts +13 -0
- package/dist/reporters/json-reporter.d.ts.map +1 -0
- package/dist/reporters/json-reporter.js +44 -0
- package/dist/reporters/json-reporter.js.map +1 -0
- package/dist/reporters/text-reporter.d.ts +13 -0
- package/dist/reporters/text-reporter.d.ts.map +1 -0
- package/dist/reporters/text-reporter.js +96 -0
- package/dist/reporters/text-reporter.js.map +1 -0
- package/dist/reporters/types.d.ts +42 -0
- package/dist/reporters/types.d.ts.map +1 -0
- package/dist/reporters/types.js +5 -0
- package/dist/reporters/types.js.map +1 -0
- package/dist/services/scanner-service.d.ts +166 -0
- package/dist/services/scanner-service.d.ts.map +1 -0
- package/dist/services/scanner-service.js +453 -0
- package/dist/services/scanner-service.js.map +1 -0
- package/dist/types/index.d.ts +24 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +5 -0
- package/dist/types/index.js.map +1 -0
- package/dist/ui/index.d.ts +11 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +15 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/progress.d.ts +115 -0
- package/dist/ui/progress.d.ts.map +1 -0
- package/dist/ui/progress.js +232 -0
- package/dist/ui/progress.js.map +1 -0
- package/dist/ui/prompts.d.ts +91 -0
- package/dist/ui/prompts.d.ts.map +1 -0
- package/dist/ui/prompts.js +160 -0
- package/dist/ui/prompts.js.map +1 -0
- package/dist/ui/spinner.d.ts +109 -0
- package/dist/ui/spinner.d.ts.map +1 -0
- package/dist/ui/spinner.js +179 -0
- package/dist/ui/spinner.js.map +1 -0
- package/dist/ui/table.d.ts +118 -0
- package/dist/ui/table.d.ts.map +1 -0
- package/dist/ui/table.js +235 -0
- package/dist/ui/table.js.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1,453 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scanner Service - Enterprise-grade pattern detection
|
|
3
|
+
*
|
|
4
|
+
* Uses the real detectors from driftdetect-detectors to find
|
|
5
|
+
* high-value architectural patterns and violations.
|
|
6
|
+
*
|
|
7
|
+
* Now includes manifest generation for pattern location discovery.
|
|
8
|
+
*/
|
|
9
|
+
import * as fs from 'node:fs/promises';
|
|
10
|
+
import * as path from 'node:path';
|
|
11
|
+
import { createAllDetectorsArray, getDetectorCounts, } from 'driftdetect-detectors';
|
|
12
|
+
import { ManifestStore, hashContent, } from 'driftdetect-core';
|
|
13
|
+
// ============================================================================
|
|
14
|
+
// Language Detection
|
|
15
|
+
// ============================================================================
|
|
16
|
+
const EXTENSION_TO_LANGUAGE = {
|
|
17
|
+
ts: 'typescript',
|
|
18
|
+
tsx: 'typescript',
|
|
19
|
+
js: 'javascript',
|
|
20
|
+
jsx: 'javascript',
|
|
21
|
+
mjs: 'javascript',
|
|
22
|
+
cjs: 'javascript',
|
|
23
|
+
py: 'python',
|
|
24
|
+
pyw: 'python',
|
|
25
|
+
css: 'css',
|
|
26
|
+
scss: 'css',
|
|
27
|
+
sass: 'css',
|
|
28
|
+
less: 'css',
|
|
29
|
+
json: 'json',
|
|
30
|
+
yaml: 'yaml',
|
|
31
|
+
yml: 'yaml',
|
|
32
|
+
md: 'markdown',
|
|
33
|
+
mdx: 'markdown',
|
|
34
|
+
};
|
|
35
|
+
function getLanguage(filePath) {
|
|
36
|
+
const ext = path.extname(filePath).slice(1).toLowerCase();
|
|
37
|
+
return EXTENSION_TO_LANGUAGE[ext] || null;
|
|
38
|
+
}
|
|
39
|
+
function isDetectorApplicable(detector, language) {
|
|
40
|
+
if (!language)
|
|
41
|
+
return false;
|
|
42
|
+
const info = detector.getInfo();
|
|
43
|
+
return info.supportedLanguages.includes(language);
|
|
44
|
+
}
|
|
45
|
+
// ============================================================================
|
|
46
|
+
// Critical Detectors (highest value)
|
|
47
|
+
// ============================================================================
|
|
48
|
+
const CRITICAL_DETECTOR_IDS = new Set([
|
|
49
|
+
// Security - CRITICAL
|
|
50
|
+
'security/sql-injection',
|
|
51
|
+
'security/xss-prevention',
|
|
52
|
+
'security/secret-management',
|
|
53
|
+
'security/input-sanitization',
|
|
54
|
+
'security/csrf-protection',
|
|
55
|
+
// Auth - CRITICAL
|
|
56
|
+
'auth/middleware-usage',
|
|
57
|
+
'auth/token-handling',
|
|
58
|
+
// API - HIGH
|
|
59
|
+
'api/route-structure',
|
|
60
|
+
'api/error-format',
|
|
61
|
+
'api/response-envelope',
|
|
62
|
+
// Data Access - HIGH
|
|
63
|
+
'data-access/n-plus-one',
|
|
64
|
+
'data-access/query-patterns',
|
|
65
|
+
// Structural - HIGH
|
|
66
|
+
'structural/circular-deps',
|
|
67
|
+
'structural/module-boundaries',
|
|
68
|
+
// Errors - HIGH
|
|
69
|
+
'errors/exception-hierarchy',
|
|
70
|
+
'errors/try-catch-placement',
|
|
71
|
+
// Logging - HIGH
|
|
72
|
+
'logging/pii-redaction',
|
|
73
|
+
]);
|
|
74
|
+
// ============================================================================
|
|
75
|
+
// Scanner Service
|
|
76
|
+
// ============================================================================
|
|
77
|
+
/**
|
|
78
|
+
* Scanner Service
|
|
79
|
+
*
|
|
80
|
+
* Orchestrates pattern detection across files using real detectors
|
|
81
|
+
* from driftdetect-detectors package.
|
|
82
|
+
*/
|
|
83
|
+
export class ScannerService {
|
|
84
|
+
config;
|
|
85
|
+
detectors = [];
|
|
86
|
+
initialized = false;
|
|
87
|
+
manifestStore = null;
|
|
88
|
+
constructor(config) {
|
|
89
|
+
this.config = config;
|
|
90
|
+
if (config.generateManifest) {
|
|
91
|
+
this.manifestStore = new ManifestStore(config.rootDir);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Initialize the scanner service - loads all detectors
|
|
96
|
+
*/
|
|
97
|
+
async initialize() {
|
|
98
|
+
if (this.initialized)
|
|
99
|
+
return;
|
|
100
|
+
// Create all detectors
|
|
101
|
+
this.detectors = createAllDetectorsArray();
|
|
102
|
+
// Filter by category if specified
|
|
103
|
+
if (this.config.categories && this.config.categories.length > 0) {
|
|
104
|
+
const categories = new Set(this.config.categories);
|
|
105
|
+
this.detectors = this.detectors.filter(d => {
|
|
106
|
+
const info = d.getInfo();
|
|
107
|
+
return categories.has(info.category);
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
// Filter to critical only if specified
|
|
111
|
+
if (this.config.criticalOnly) {
|
|
112
|
+
this.detectors = this.detectors.filter(d => CRITICAL_DETECTOR_IDS.has(d.id));
|
|
113
|
+
}
|
|
114
|
+
// Load existing manifest for incremental scanning
|
|
115
|
+
if (this.manifestStore) {
|
|
116
|
+
await this.manifestStore.load();
|
|
117
|
+
}
|
|
118
|
+
this.initialized = true;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Get detector count
|
|
122
|
+
*/
|
|
123
|
+
getDetectorCount() {
|
|
124
|
+
return this.detectors.length;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Get detector counts by category
|
|
128
|
+
*/
|
|
129
|
+
getDetectorCounts() {
|
|
130
|
+
return getDetectorCounts();
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Scan files for patterns using real detectors
|
|
134
|
+
*/
|
|
135
|
+
async scanFiles(files, projectContext) {
|
|
136
|
+
const startTime = Date.now();
|
|
137
|
+
const fileResults = [];
|
|
138
|
+
const errors = [];
|
|
139
|
+
// Aggregation maps
|
|
140
|
+
const patternMap = new Map();
|
|
141
|
+
const allViolations = [];
|
|
142
|
+
// Manifest pattern aggregation
|
|
143
|
+
const manifestPatternMap = new Map();
|
|
144
|
+
let detectorsRan = 0;
|
|
145
|
+
let detectorsSkipped = 0;
|
|
146
|
+
// Filter to changed files if incremental
|
|
147
|
+
let filesToScan = files;
|
|
148
|
+
if (this.config.incremental && this.manifestStore) {
|
|
149
|
+
const fullPaths = files.map(f => path.join(this.config.rootDir, f));
|
|
150
|
+
const changedPaths = await this.manifestStore.getChangedFiles(fullPaths);
|
|
151
|
+
filesToScan = changedPaths.map(f => path.relative(this.config.rootDir, f));
|
|
152
|
+
// Clear patterns for changed files
|
|
153
|
+
for (const file of filesToScan) {
|
|
154
|
+
this.manifestStore.clearFilePatterns(path.join(this.config.rootDir, file));
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
for (const file of filesToScan) {
|
|
158
|
+
const fileStart = Date.now();
|
|
159
|
+
const filePath = path.join(this.config.rootDir, file);
|
|
160
|
+
const language = getLanguage(file);
|
|
161
|
+
// Skip files we can't detect language for
|
|
162
|
+
if (!language) {
|
|
163
|
+
fileResults.push({
|
|
164
|
+
file,
|
|
165
|
+
patterns: [],
|
|
166
|
+
violations: [],
|
|
167
|
+
duration: Date.now() - fileStart,
|
|
168
|
+
});
|
|
169
|
+
continue;
|
|
170
|
+
}
|
|
171
|
+
try {
|
|
172
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
173
|
+
const contentHash = hashContent(content);
|
|
174
|
+
const filePatterns = [];
|
|
175
|
+
const fileViolations = [];
|
|
176
|
+
// Create detection context
|
|
177
|
+
const context = {
|
|
178
|
+
file,
|
|
179
|
+
content,
|
|
180
|
+
language,
|
|
181
|
+
ast: null, // AST parsing is optional
|
|
182
|
+
imports: [], // Will be populated by detectors that need it
|
|
183
|
+
exports: [], // Will be populated by detectors that need it
|
|
184
|
+
extension: path.extname(file),
|
|
185
|
+
isTestFile: /\.(test|spec)\.[jt]sx?$/.test(file) || file.includes('__tests__'),
|
|
186
|
+
isTypeDefinition: file.endsWith('.d.ts'),
|
|
187
|
+
projectContext: {
|
|
188
|
+
rootDir: projectContext.rootDir,
|
|
189
|
+
files: projectContext.files,
|
|
190
|
+
config: projectContext.config,
|
|
191
|
+
},
|
|
192
|
+
};
|
|
193
|
+
// Run applicable detectors
|
|
194
|
+
for (const detector of this.detectors) {
|
|
195
|
+
if (!isDetectorApplicable(detector, language)) {
|
|
196
|
+
detectorsSkipped++;
|
|
197
|
+
continue;
|
|
198
|
+
}
|
|
199
|
+
detectorsRan++;
|
|
200
|
+
try {
|
|
201
|
+
const result = await detector.detect(context);
|
|
202
|
+
const info = detector.getInfo();
|
|
203
|
+
// Process patterns
|
|
204
|
+
for (const match of result.patterns) {
|
|
205
|
+
filePatterns.push({
|
|
206
|
+
patternId: match.patternId,
|
|
207
|
+
detectorId: detector.id,
|
|
208
|
+
confidence: match.confidence,
|
|
209
|
+
location: match.location,
|
|
210
|
+
});
|
|
211
|
+
// Aggregate pattern
|
|
212
|
+
const key = match.patternId;
|
|
213
|
+
const existing = patternMap.get(key);
|
|
214
|
+
if (existing) {
|
|
215
|
+
existing.locations.push(match.location);
|
|
216
|
+
existing.occurrences++;
|
|
217
|
+
existing.confidence = Math.max(existing.confidence, match.confidence);
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
patternMap.set(key, {
|
|
221
|
+
patternId: match.patternId,
|
|
222
|
+
detectorId: detector.id,
|
|
223
|
+
category: info.category,
|
|
224
|
+
subcategory: info.subcategory,
|
|
225
|
+
name: info.name,
|
|
226
|
+
description: info.description,
|
|
227
|
+
locations: [match.location],
|
|
228
|
+
confidence: match.confidence,
|
|
229
|
+
occurrences: 1,
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
// Build manifest pattern with semantic location
|
|
233
|
+
if (this.config.generateManifest) {
|
|
234
|
+
const semanticLoc = this.createSemanticLocation(match.location, content, contentHash, language);
|
|
235
|
+
const manifestKey = `${info.category}/${info.subcategory}/${match.patternId}`;
|
|
236
|
+
const existingManifest = manifestPatternMap.get(manifestKey);
|
|
237
|
+
if (existingManifest) {
|
|
238
|
+
existingManifest.locations.push(semanticLoc);
|
|
239
|
+
existingManifest.confidence = Math.max(existingManifest.confidence, match.confidence);
|
|
240
|
+
existingManifest.lastSeen = new Date().toISOString();
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
manifestPatternMap.set(manifestKey, {
|
|
244
|
+
id: manifestKey,
|
|
245
|
+
name: info.name,
|
|
246
|
+
category: info.category,
|
|
247
|
+
subcategory: info.subcategory,
|
|
248
|
+
status: 'discovered',
|
|
249
|
+
confidence: match.confidence,
|
|
250
|
+
locations: [semanticLoc],
|
|
251
|
+
outliers: [],
|
|
252
|
+
description: info.description,
|
|
253
|
+
firstSeen: new Date().toISOString(),
|
|
254
|
+
lastSeen: new Date().toISOString(),
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
// Process violations
|
|
260
|
+
for (const violation of result.violations) {
|
|
261
|
+
const aggViolation = {
|
|
262
|
+
patternId: violation.patternId,
|
|
263
|
+
detectorId: detector.id,
|
|
264
|
+
category: info.category,
|
|
265
|
+
severity: violation.severity,
|
|
266
|
+
file: violation.file,
|
|
267
|
+
line: violation.range.start.line + 1,
|
|
268
|
+
column: violation.range.start.character + 1,
|
|
269
|
+
message: violation.message,
|
|
270
|
+
explanation: violation.explanation,
|
|
271
|
+
suggestedFix: violation.expected,
|
|
272
|
+
};
|
|
273
|
+
fileViolations.push(aggViolation);
|
|
274
|
+
allViolations.push(aggViolation);
|
|
275
|
+
// Add violation as outlier to manifest
|
|
276
|
+
if (this.config.generateManifest) {
|
|
277
|
+
const outlierLoc = this.createSemanticLocation({
|
|
278
|
+
file: violation.file,
|
|
279
|
+
line: violation.range.start.line + 1,
|
|
280
|
+
column: violation.range.start.character + 1,
|
|
281
|
+
}, content, contentHash, language, violation.message);
|
|
282
|
+
const manifestKey = `${info.category}/${info.subcategory}/${violation.patternId}`;
|
|
283
|
+
const existingManifest = manifestPatternMap.get(manifestKey);
|
|
284
|
+
if (existingManifest) {
|
|
285
|
+
existingManifest.outliers.push(outlierLoc);
|
|
286
|
+
}
|
|
287
|
+
else {
|
|
288
|
+
manifestPatternMap.set(manifestKey, {
|
|
289
|
+
id: manifestKey,
|
|
290
|
+
name: info.name,
|
|
291
|
+
category: info.category,
|
|
292
|
+
subcategory: info.subcategory,
|
|
293
|
+
status: 'discovered',
|
|
294
|
+
confidence: 0.5,
|
|
295
|
+
locations: [],
|
|
296
|
+
outliers: [outlierLoc],
|
|
297
|
+
description: info.description,
|
|
298
|
+
firstSeen: new Date().toISOString(),
|
|
299
|
+
lastSeen: new Date().toISOString(),
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
catch (detectorError) {
|
|
306
|
+
if (this.config.verbose) {
|
|
307
|
+
errors.push(`Detector ${detector.id} failed on ${file}: ${detectorError.message}`);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
fileResults.push({
|
|
312
|
+
file,
|
|
313
|
+
patterns: filePatterns,
|
|
314
|
+
violations: fileViolations,
|
|
315
|
+
duration: Date.now() - fileStart,
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
catch (e) {
|
|
319
|
+
const error = `Failed to scan ${file}: ${e instanceof Error ? e.message : e}`;
|
|
320
|
+
errors.push(error);
|
|
321
|
+
fileResults.push({
|
|
322
|
+
file,
|
|
323
|
+
patterns: [],
|
|
324
|
+
violations: [],
|
|
325
|
+
duration: Date.now() - fileStart,
|
|
326
|
+
error,
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
// Convert pattern map to array
|
|
331
|
+
const patterns = Array.from(patternMap.values());
|
|
332
|
+
// Build and save manifest
|
|
333
|
+
let manifest;
|
|
334
|
+
if (this.config.generateManifest && this.manifestStore) {
|
|
335
|
+
const manifestPatterns = Array.from(manifestPatternMap.values());
|
|
336
|
+
this.manifestStore.updatePatterns(manifestPatterns);
|
|
337
|
+
await this.manifestStore.save();
|
|
338
|
+
manifest = await this.manifestStore.get();
|
|
339
|
+
}
|
|
340
|
+
const result = {
|
|
341
|
+
files: fileResults,
|
|
342
|
+
patterns,
|
|
343
|
+
violations: allViolations,
|
|
344
|
+
totalPatterns: patterns.reduce((sum, p) => sum + p.occurrences, 0),
|
|
345
|
+
totalViolations: allViolations.length,
|
|
346
|
+
totalFiles: files.length,
|
|
347
|
+
duration: Date.now() - startTime,
|
|
348
|
+
errors,
|
|
349
|
+
detectorStats: {
|
|
350
|
+
total: this.detectors.length,
|
|
351
|
+
ran: detectorsRan,
|
|
352
|
+
skipped: detectorsSkipped,
|
|
353
|
+
},
|
|
354
|
+
};
|
|
355
|
+
if (manifest) {
|
|
356
|
+
result.manifest = manifest;
|
|
357
|
+
}
|
|
358
|
+
return result;
|
|
359
|
+
}
|
|
360
|
+
/**
|
|
361
|
+
* Create a semantic location from a basic location
|
|
362
|
+
*/
|
|
363
|
+
createSemanticLocation(location, content, hash, language, name) {
|
|
364
|
+
const lines = content.split('\n');
|
|
365
|
+
const lineContent = lines[location.line - 1] || '';
|
|
366
|
+
// Try to extract semantic info from the line
|
|
367
|
+
const semanticInfo = this.extractSemanticInfo(lineContent, language);
|
|
368
|
+
const result = {
|
|
369
|
+
file: location.file,
|
|
370
|
+
hash,
|
|
371
|
+
range: {
|
|
372
|
+
start: location.line,
|
|
373
|
+
end: location.line,
|
|
374
|
+
},
|
|
375
|
+
type: semanticInfo.type,
|
|
376
|
+
name: name || semanticInfo.name || `line-${location.line}`,
|
|
377
|
+
confidence: 0.9,
|
|
378
|
+
snippet: lineContent.trim().substring(0, 100),
|
|
379
|
+
language,
|
|
380
|
+
};
|
|
381
|
+
if (semanticInfo.signature) {
|
|
382
|
+
result.signature = semanticInfo.signature;
|
|
383
|
+
}
|
|
384
|
+
return result;
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* Extract semantic information from a line of code
|
|
388
|
+
*/
|
|
389
|
+
extractSemanticInfo(line, language) {
|
|
390
|
+
const trimmed = line.trim();
|
|
391
|
+
// TypeScript/JavaScript patterns
|
|
392
|
+
if (language === 'typescript' || language === 'javascript') {
|
|
393
|
+
// Class
|
|
394
|
+
const classMatch = trimmed.match(/^(?:export\s+)?(?:abstract\s+)?class\s+(\w+)/);
|
|
395
|
+
if (classMatch && classMatch[1]) {
|
|
396
|
+
return { type: 'class', name: classMatch[1], signature: trimmed.substring(0, 80) };
|
|
397
|
+
}
|
|
398
|
+
// Function
|
|
399
|
+
const funcMatch = trimmed.match(/^(?:export\s+)?(?:async\s+)?function\s+(\w+)/);
|
|
400
|
+
if (funcMatch && funcMatch[1]) {
|
|
401
|
+
return { type: 'function', name: funcMatch[1], signature: trimmed.substring(0, 80) };
|
|
402
|
+
}
|
|
403
|
+
// Arrow function / const
|
|
404
|
+
const arrowMatch = trimmed.match(/^(?:export\s+)?const\s+(\w+)\s*=/);
|
|
405
|
+
if (arrowMatch && arrowMatch[1]) {
|
|
406
|
+
return { type: 'function', name: arrowMatch[1], signature: trimmed.substring(0, 80) };
|
|
407
|
+
}
|
|
408
|
+
// Interface
|
|
409
|
+
const interfaceMatch = trimmed.match(/^(?:export\s+)?interface\s+(\w+)/);
|
|
410
|
+
if (interfaceMatch && interfaceMatch[1]) {
|
|
411
|
+
return { type: 'interface', name: interfaceMatch[1], signature: trimmed.substring(0, 80) };
|
|
412
|
+
}
|
|
413
|
+
// Type
|
|
414
|
+
const typeMatch = trimmed.match(/^(?:export\s+)?type\s+(\w+)/);
|
|
415
|
+
if (typeMatch && typeMatch[1]) {
|
|
416
|
+
return { type: 'type', name: typeMatch[1], signature: trimmed.substring(0, 80) };
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
// Python patterns
|
|
420
|
+
if (language === 'python') {
|
|
421
|
+
// Class
|
|
422
|
+
const classMatch = trimmed.match(/^class\s+(\w+)/);
|
|
423
|
+
if (classMatch && classMatch[1]) {
|
|
424
|
+
return { type: 'class', name: classMatch[1], signature: trimmed.substring(0, 80) };
|
|
425
|
+
}
|
|
426
|
+
// Function/method
|
|
427
|
+
const defMatch = trimmed.match(/^(?:async\s+)?def\s+(\w+)/);
|
|
428
|
+
if (defMatch && defMatch[1]) {
|
|
429
|
+
return { type: 'function', name: defMatch[1], signature: trimmed.substring(0, 80) };
|
|
430
|
+
}
|
|
431
|
+
// Decorator
|
|
432
|
+
const decoratorMatch = trimmed.match(/^@(\w+)/);
|
|
433
|
+
if (decoratorMatch && decoratorMatch[1]) {
|
|
434
|
+
return { type: 'decorator', name: decoratorMatch[1], signature: trimmed };
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
// Default to block
|
|
438
|
+
return { type: 'block' };
|
|
439
|
+
}
|
|
440
|
+
/**
|
|
441
|
+
* Get the manifest store (for external access)
|
|
442
|
+
*/
|
|
443
|
+
getManifestStore() {
|
|
444
|
+
return this.manifestStore;
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
/**
|
|
448
|
+
* Create a scanner service
|
|
449
|
+
*/
|
|
450
|
+
export function createScannerService(config) {
|
|
451
|
+
return new ScannerService(config);
|
|
452
|
+
}
|
|
453
|
+
//# sourceMappingURL=scanner-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scanner-service.js","sourceRoot":"","sources":["../../src/services/scanner-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI type exports
|
|
3
|
+
*/
|
|
4
|
+
export interface CLIOptions {
|
|
5
|
+
/** Enable verbose output */
|
|
6
|
+
verbose?: boolean;
|
|
7
|
+
/** Output format */
|
|
8
|
+
format?: 'text' | 'json' | 'github' | 'gitlab';
|
|
9
|
+
/** CI mode */
|
|
10
|
+
ci?: boolean;
|
|
11
|
+
/** Check only staged files */
|
|
12
|
+
staged?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export interface CheckResult {
|
|
15
|
+
/** Number of violations */
|
|
16
|
+
violationCount: number;
|
|
17
|
+
/** Number of errors */
|
|
18
|
+
errorCount: number;
|
|
19
|
+
/** Number of warnings */
|
|
20
|
+
warningCount: number;
|
|
21
|
+
/** Exit code */
|
|
22
|
+
exitCode: number;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,UAAU;IACzB,4BAA4B;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oBAAoB;IACpB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC/C,cAAc;IACd,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,8BAA8B;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,2BAA2B;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,uBAAuB;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,yBAAyB;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UI module exports
|
|
3
|
+
*
|
|
4
|
+
* Provides CLI UI components for interactive prompts, spinners,
|
|
5
|
+
* tables, and progress bars.
|
|
6
|
+
*/
|
|
7
|
+
export { confirmPrompt, inputPrompt, selectPrompt, multiSelectPrompt, promptPatternAction, promptBatchPatternApproval, promptSeverity, promptVariantReason, promptVariantScope, promptInitOptions, promptIgnoreReason, promptReportFormat, promptCategorySelection, type PatternChoice, type PatternAction, type VariantScope, type InitPromptResult, type ReportFormat, } from './prompts.js';
|
|
8
|
+
export { Spinner, createSpinner, withSpinner, spinners, status, type SpinnerOptions, } from './spinner.js';
|
|
9
|
+
export { createTable, formatSeverity, formatConfidence, formatCount, formatPath, createPatternsTable, createViolationsTable, createSummaryTable, createStatusTable, createCategoryTable, type TableStyle, type TableOptions, type PatternRow, type ViolationRow, type SummaryRow, type StatusSummary, type CategoryBreakdown, } from './table.js';
|
|
10
|
+
export { Progress, MultiProgress, createScanProgress, createAnalysisProgress, createDetectionProgress, withProgress, logProgress, type ProgressOptions, } from './progress.js';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,aAAa,EACb,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACnB,0BAA0B,EAC1B,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,uBAAuB,EACvB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,YAAY,GAClB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,OAAO,EACP,aAAa,EACb,WAAW,EACX,QAAQ,EACR,MAAM,EACN,KAAK,cAAc,GACpB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,UAAU,EACV,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,iBAAiB,GACvB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,QAAQ,EACR,aAAa,EACb,kBAAkB,EAClB,sBAAsB,EACtB,uBAAuB,EACvB,YAAY,EACZ,WAAW,EACX,KAAK,eAAe,GACrB,MAAM,eAAe,CAAC"}
|
package/dist/ui/index.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UI module exports
|
|
3
|
+
*
|
|
4
|
+
* Provides CLI UI components for interactive prompts, spinners,
|
|
5
|
+
* tables, and progress bars.
|
|
6
|
+
*/
|
|
7
|
+
// Prompts
|
|
8
|
+
export { confirmPrompt, inputPrompt, selectPrompt, multiSelectPrompt, promptPatternAction, promptBatchPatternApproval, promptSeverity, promptVariantReason, promptVariantScope, promptInitOptions, promptIgnoreReason, promptReportFormat, promptCategorySelection, } from './prompts.js';
|
|
9
|
+
// Spinner
|
|
10
|
+
export { Spinner, createSpinner, withSpinner, spinners, status, } from './spinner.js';
|
|
11
|
+
// Table
|
|
12
|
+
export { createTable, formatSeverity, formatConfidence, formatCount, formatPath, createPatternsTable, createViolationsTable, createSummaryTable, createStatusTable, createCategoryTable, } from './table.js';
|
|
13
|
+
// Progress
|
|
14
|
+
export { Progress, MultiProgress, createScanProgress, createAnalysisProgress, createDetectionProgress, withProgress, logProgress, } from './progress.js';
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,UAAU;AACV,OAAO,EACL,aAAa,EACb,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACnB,0BAA0B,EAC1B,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,uBAAuB,GAMxB,MAAM,cAAc,CAAC;AAEtB,UAAU;AACV,OAAO,EACL,OAAO,EACP,aAAa,EACb,WAAW,EACX,QAAQ,EACR,MAAM,GAEP,MAAM,cAAc,CAAC;AAEtB,QAAQ;AACR,OAAO,EACL,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,UAAU,EACV,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,GAQpB,MAAM,YAAY,CAAC;AAEpB,WAAW;AACX,OAAO,EACL,QAAQ,EACR,aAAa,EACb,kBAAkB,EAClB,sBAAsB,EACtB,uBAAuB,EACvB,YAAY,EACZ,WAAW,GAEZ,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Progress - Progress bars for scanning
|
|
3
|
+
*
|
|
4
|
+
* Provides progress bars for long-running operations like scanning.
|
|
5
|
+
*
|
|
6
|
+
* @requirements 29.1
|
|
7
|
+
*/
|
|
8
|
+
import { SingleBar } from 'cli-progress';
|
|
9
|
+
/**
|
|
10
|
+
* Progress bar configuration options
|
|
11
|
+
*/
|
|
12
|
+
export interface ProgressOptions {
|
|
13
|
+
/** Total number of items */
|
|
14
|
+
total: number;
|
|
15
|
+
/** Format string for the progress bar */
|
|
16
|
+
format?: string;
|
|
17
|
+
/** Whether to show ETA */
|
|
18
|
+
showEta?: boolean;
|
|
19
|
+
/** Whether to show percentage */
|
|
20
|
+
showPercentage?: boolean;
|
|
21
|
+
/** Whether to show value/total */
|
|
22
|
+
showValue?: boolean;
|
|
23
|
+
/** Whether progress is enabled (false in CI mode) */
|
|
24
|
+
enabled?: boolean;
|
|
25
|
+
/** Clear the bar on complete */
|
|
26
|
+
clearOnComplete?: boolean;
|
|
27
|
+
/** Hide cursor during progress */
|
|
28
|
+
hideCursor?: boolean;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Progress bar wrapper for consistent CLI feedback
|
|
32
|
+
*/
|
|
33
|
+
export declare class Progress {
|
|
34
|
+
private bar;
|
|
35
|
+
private enabled;
|
|
36
|
+
private currentValue;
|
|
37
|
+
constructor(options: ProgressOptions);
|
|
38
|
+
/**
|
|
39
|
+
* Update progress with current value
|
|
40
|
+
*/
|
|
41
|
+
update(value: number, payload?: Record<string, string | number>): this;
|
|
42
|
+
/**
|
|
43
|
+
* Increment progress by amount
|
|
44
|
+
*/
|
|
45
|
+
increment(amount?: number, payload?: Record<string, string | number>): this;
|
|
46
|
+
/**
|
|
47
|
+
* Set the current task description
|
|
48
|
+
*/
|
|
49
|
+
task(description: string): this;
|
|
50
|
+
/**
|
|
51
|
+
* Set the total value
|
|
52
|
+
*/
|
|
53
|
+
setTotal(total: number): this;
|
|
54
|
+
/**
|
|
55
|
+
* Stop the progress bar
|
|
56
|
+
*/
|
|
57
|
+
stop(): this;
|
|
58
|
+
/**
|
|
59
|
+
* Get current value
|
|
60
|
+
*/
|
|
61
|
+
get value(): number;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Multi-progress bar for parallel operations
|
|
65
|
+
*/
|
|
66
|
+
export declare class MultiProgress {
|
|
67
|
+
private multiBar;
|
|
68
|
+
private bars;
|
|
69
|
+
private enabled;
|
|
70
|
+
constructor(enabled?: boolean);
|
|
71
|
+
/**
|
|
72
|
+
* Create a new progress bar
|
|
73
|
+
*/
|
|
74
|
+
create(name: string, total: number): SingleBar | null;
|
|
75
|
+
/**
|
|
76
|
+
* Update a specific bar
|
|
77
|
+
*/
|
|
78
|
+
update(name: string, value: number, payload?: Record<string, string | number>): this;
|
|
79
|
+
/**
|
|
80
|
+
* Increment a specific bar
|
|
81
|
+
*/
|
|
82
|
+
increment(name: string, amount?: number, payload?: Record<string, string | number>): this;
|
|
83
|
+
/**
|
|
84
|
+
* Remove a specific bar
|
|
85
|
+
*/
|
|
86
|
+
remove(name: string): this;
|
|
87
|
+
/**
|
|
88
|
+
* Stop all progress bars
|
|
89
|
+
*/
|
|
90
|
+
stop(): this;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Create a progress bar for scanning operations
|
|
94
|
+
*/
|
|
95
|
+
export declare function createScanProgress(totalFiles: number): Progress;
|
|
96
|
+
/**
|
|
97
|
+
* Create a progress bar for analysis operations
|
|
98
|
+
*/
|
|
99
|
+
export declare function createAnalysisProgress(totalItems: number): Progress;
|
|
100
|
+
/**
|
|
101
|
+
* Create a progress bar for pattern detection
|
|
102
|
+
*/
|
|
103
|
+
export declare function createDetectionProgress(totalDetectors: number): Progress;
|
|
104
|
+
/**
|
|
105
|
+
* Run an operation with progress tracking
|
|
106
|
+
*/
|
|
107
|
+
export declare function withProgress<T>(items: T[], operation: (item: T, index: number) => Promise<void>, options?: {
|
|
108
|
+
format?: string;
|
|
109
|
+
getTaskName?: (item: T) => string;
|
|
110
|
+
}): Promise<void>;
|
|
111
|
+
/**
|
|
112
|
+
* Simple percentage display for CI mode
|
|
113
|
+
*/
|
|
114
|
+
export declare function logProgress(current: number, total: number, message?: string): void;
|
|
115
|
+
//# sourceMappingURL=progress.d.ts.map
|