driftdetect-core 0.6.1 → 0.7.1
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/LICENSE +21 -0
- package/dist/constants/analysis/categorizer.d.ts +27 -0
- package/dist/constants/analysis/categorizer.d.ts.map +1 -0
- package/dist/constants/analysis/categorizer.js +364 -0
- package/dist/constants/analysis/categorizer.js.map +1 -0
- package/dist/constants/analysis/consistency-analyzer.d.ts +77 -0
- package/dist/constants/analysis/consistency-analyzer.d.ts.map +1 -0
- package/dist/constants/analysis/consistency-analyzer.js +176 -0
- package/dist/constants/analysis/consistency-analyzer.js.map +1 -0
- package/dist/constants/analysis/dead-constant-detector.d.ts +79 -0
- package/dist/constants/analysis/dead-constant-detector.d.ts.map +1 -0
- package/dist/constants/analysis/dead-constant-detector.js +242 -0
- package/dist/constants/analysis/dead-constant-detector.js.map +1 -0
- package/dist/constants/analysis/magic-detector.d.ts +116 -0
- package/dist/constants/analysis/magic-detector.d.ts.map +1 -0
- package/dist/constants/analysis/magic-detector.js +425 -0
- package/dist/constants/analysis/magic-detector.js.map +1 -0
- package/dist/constants/analysis/reference-finder.d.ts +87 -0
- package/dist/constants/analysis/reference-finder.d.ts.map +1 -0
- package/dist/constants/analysis/reference-finder.js +269 -0
- package/dist/constants/analysis/reference-finder.js.map +1 -0
- package/dist/constants/analysis/security-scanner.d.ts +115 -0
- package/dist/constants/analysis/security-scanner.d.ts.map +1 -0
- package/dist/constants/analysis/security-scanner.js +429 -0
- package/dist/constants/analysis/security-scanner.js.map +1 -0
- package/dist/constants/extractors/base-extractor.d.ts +97 -0
- package/dist/constants/extractors/base-extractor.d.ts.map +1 -0
- package/dist/constants/extractors/base-extractor.js +285 -0
- package/dist/constants/extractors/base-extractor.js.map +1 -0
- package/dist/constants/extractors/regex/base-regex.d.ts +67 -0
- package/dist/constants/extractors/regex/base-regex.d.ts.map +1 -0
- package/dist/constants/extractors/regex/base-regex.js +209 -0
- package/dist/constants/extractors/regex/base-regex.js.map +1 -0
- package/dist/constants/extractors/regex/csharp-regex.d.ts +39 -0
- package/dist/constants/extractors/regex/csharp-regex.d.ts.map +1 -0
- package/dist/constants/extractors/regex/csharp-regex.js +316 -0
- package/dist/constants/extractors/regex/csharp-regex.js.map +1 -0
- package/dist/constants/extractors/regex/go-regex.d.ts +40 -0
- package/dist/constants/extractors/regex/go-regex.d.ts.map +1 -0
- package/dist/constants/extractors/regex/go-regex.js +297 -0
- package/dist/constants/extractors/regex/go-regex.js.map +1 -0
- package/dist/constants/extractors/regex/java-regex.d.ts +43 -0
- package/dist/constants/extractors/regex/java-regex.d.ts.map +1 -0
- package/dist/constants/extractors/regex/java-regex.js +276 -0
- package/dist/constants/extractors/regex/java-regex.js.map +1 -0
- package/dist/constants/extractors/regex/php-regex.d.ts +39 -0
- package/dist/constants/extractors/regex/php-regex.d.ts.map +1 -0
- package/dist/constants/extractors/regex/php-regex.js +270 -0
- package/dist/constants/extractors/regex/php-regex.js.map +1 -0
- package/dist/constants/extractors/regex/python-regex.d.ts +39 -0
- package/dist/constants/extractors/regex/python-regex.d.ts.map +1 -0
- package/dist/constants/extractors/regex/python-regex.js +287 -0
- package/dist/constants/extractors/regex/python-regex.js.map +1 -0
- package/dist/constants/extractors/regex/typescript-regex.d.ts +35 -0
- package/dist/constants/extractors/regex/typescript-regex.d.ts.map +1 -0
- package/dist/constants/extractors/regex/typescript-regex.js +313 -0
- package/dist/constants/extractors/regex/typescript-regex.js.map +1 -0
- package/dist/constants/index.d.ts +26 -0
- package/dist/constants/index.d.ts.map +1 -0
- package/dist/constants/index.js +36 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/constants/integration/callgraph-adapter.d.ts +167 -0
- package/dist/constants/integration/callgraph-adapter.d.ts.map +1 -0
- package/dist/constants/integration/callgraph-adapter.js +287 -0
- package/dist/constants/integration/callgraph-adapter.js.map +1 -0
- package/dist/constants/integration/index.d.ts +10 -0
- package/dist/constants/integration/index.d.ts.map +1 -0
- package/dist/constants/integration/index.js +13 -0
- package/dist/constants/integration/index.js.map +1 -0
- package/dist/constants/integration/pattern-adapter.d.ts +171 -0
- package/dist/constants/integration/pattern-adapter.d.ts.map +1 -0
- package/dist/constants/integration/pattern-adapter.js +331 -0
- package/dist/constants/integration/pattern-adapter.js.map +1 -0
- package/dist/constants/integration/scanner-adapter.d.ts +153 -0
- package/dist/constants/integration/scanner-adapter.d.ts.map +1 -0
- package/dist/constants/integration/scanner-adapter.js +337 -0
- package/dist/constants/integration/scanner-adapter.js.map +1 -0
- package/dist/constants/store/constant-store.d.ts +117 -0
- package/dist/constants/store/constant-store.d.ts.map +1 -0
- package/dist/constants/store/constant-store.js +367 -0
- package/dist/constants/store/constant-store.js.map +1 -0
- package/dist/constants/types.d.ts +423 -0
- package/dist/constants/types.d.ts.map +1 -0
- package/dist/constants/types.js +43 -0
- package/dist/constants/types.js.map +1 -0
- package/dist/constraints/store/constraint-store.d.ts.map +1 -1
- package/dist/constraints/store/constraint-store.js +37 -2
- package/dist/constraints/store/constraint-store.js.map +1 -1
- package/dist/environment/env-scanner.d.ts +53 -0
- package/dist/environment/env-scanner.d.ts.map +1 -0
- package/dist/environment/env-scanner.js +290 -0
- package/dist/environment/env-scanner.js.map +1 -0
- package/dist/environment/env-store.d.ts +70 -0
- package/dist/environment/env-store.d.ts.map +1 -0
- package/dist/environment/env-store.js +201 -0
- package/dist/environment/env-store.js.map +1 -0
- package/dist/environment/extractors/base-env-extractor.d.ts +56 -0
- package/dist/environment/extractors/base-env-extractor.d.ts.map +1 -0
- package/dist/environment/extractors/base-env-extractor.js +74 -0
- package/dist/environment/extractors/base-env-extractor.js.map +1 -0
- package/dist/environment/extractors/csharp-env-extractor.d.ts +49 -0
- package/dist/environment/extractors/csharp-env-extractor.d.ts.map +1 -0
- package/dist/environment/extractors/csharp-env-extractor.js +240 -0
- package/dist/environment/extractors/csharp-env-extractor.js.map +1 -0
- package/dist/environment/extractors/go-env-extractor.d.ts +53 -0
- package/dist/environment/extractors/go-env-extractor.d.ts.map +1 -0
- package/dist/environment/extractors/go-env-extractor.js +267 -0
- package/dist/environment/extractors/go-env-extractor.js.map +1 -0
- package/dist/environment/extractors/index.d.ts +13 -0
- package/dist/environment/extractors/index.d.ts.map +1 -0
- package/dist/environment/extractors/index.js +13 -0
- package/dist/environment/extractors/index.js.map +1 -0
- package/dist/environment/extractors/java-env-extractor.d.ts +58 -0
- package/dist/environment/extractors/java-env-extractor.d.ts.map +1 -0
- package/dist/environment/extractors/java-env-extractor.js +219 -0
- package/dist/environment/extractors/java-env-extractor.js.map +1 -0
- package/dist/environment/extractors/php-env-extractor.d.ts +58 -0
- package/dist/environment/extractors/php-env-extractor.d.ts.map +1 -0
- package/dist/environment/extractors/php-env-extractor.js +231 -0
- package/dist/environment/extractors/php-env-extractor.js.map +1 -0
- package/dist/environment/extractors/python-env-extractor.d.ts +50 -0
- package/dist/environment/extractors/python-env-extractor.d.ts.map +1 -0
- package/dist/environment/extractors/python-env-extractor.js +219 -0
- package/dist/environment/extractors/python-env-extractor.js.map +1 -0
- package/dist/environment/extractors/typescript-env-extractor.d.ts +54 -0
- package/dist/environment/extractors/typescript-env-extractor.d.ts.map +1 -0
- package/dist/environment/extractors/typescript-env-extractor.js +228 -0
- package/dist/environment/extractors/typescript-env-extractor.js.map +1 -0
- package/dist/environment/index.d.ts +11 -0
- package/dist/environment/index.d.ts.map +1 -0
- package/dist/environment/index.js +15 -0
- package/dist/environment/index.js.map +1 -0
- package/dist/environment/types.d.ts +145 -0
- package/dist/environment/types.d.ts.map +1 -0
- package/dist/environment/types.js +84 -0
- package/dist/environment/types.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +40 -0
- package/dist/index.js.map +1 -1
- package/package.json +13 -13
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pattern Adapter
|
|
3
|
+
*
|
|
4
|
+
* Feeds constant analysis into the pattern detection system.
|
|
5
|
+
* Creates patterns for constant consistency, magic values, and security issues.
|
|
6
|
+
*/
|
|
7
|
+
import { ConstantStore } from '../store/constant-store.js';
|
|
8
|
+
import { ConstantSecurityScanner } from '../analysis/security-scanner.js';
|
|
9
|
+
import { ConsistencyAnalyzer } from '../analysis/consistency-analyzer.js';
|
|
10
|
+
// ============================================================================
|
|
11
|
+
// Pattern Adapter
|
|
12
|
+
// ============================================================================
|
|
13
|
+
/**
|
|
14
|
+
* Adapter for feeding constant analysis into the pattern system
|
|
15
|
+
*/
|
|
16
|
+
export class ConstantPatternAdapter {
|
|
17
|
+
config;
|
|
18
|
+
store;
|
|
19
|
+
securityScanner;
|
|
20
|
+
consistencyAnalyzer;
|
|
21
|
+
constructor(config) {
|
|
22
|
+
this.config = {
|
|
23
|
+
rootDir: config.rootDir,
|
|
24
|
+
detectMagicValues: config.detectMagicValues ?? true,
|
|
25
|
+
detectSecrets: config.detectSecrets ?? true,
|
|
26
|
+
detectInconsistencies: config.detectInconsistencies ?? true,
|
|
27
|
+
detectDeadConstants: config.detectDeadConstants ?? true,
|
|
28
|
+
magicValueMinOccurrences: config.magicValueMinOccurrences ?? 2,
|
|
29
|
+
secretSeverityThreshold: config.secretSeverityThreshold ?? 'medium',
|
|
30
|
+
};
|
|
31
|
+
this.store = new ConstantStore({ rootDir: config.rootDir });
|
|
32
|
+
this.securityScanner = new ConstantSecurityScanner();
|
|
33
|
+
this.consistencyAnalyzer = new ConsistencyAnalyzer();
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Detect all constant-related patterns
|
|
37
|
+
*/
|
|
38
|
+
async detectPatterns() {
|
|
39
|
+
const startTime = performance.now();
|
|
40
|
+
const patterns = [];
|
|
41
|
+
// Get all constants
|
|
42
|
+
const constants = await this.store.getAllConstants();
|
|
43
|
+
// Detect magic values
|
|
44
|
+
if (this.config.detectMagicValues) {
|
|
45
|
+
const magicPatterns = await this.detectMagicValuePatterns(constants);
|
|
46
|
+
patterns.push(...magicPatterns);
|
|
47
|
+
}
|
|
48
|
+
// Detect secrets
|
|
49
|
+
if (this.config.detectSecrets) {
|
|
50
|
+
const secretPatterns = await this.detectSecretPatterns(constants);
|
|
51
|
+
patterns.push(...secretPatterns);
|
|
52
|
+
}
|
|
53
|
+
// Detect inconsistencies
|
|
54
|
+
if (this.config.detectInconsistencies) {
|
|
55
|
+
const inconsistencyPatterns = await this.detectInconsistencyPatterns(constants);
|
|
56
|
+
patterns.push(...inconsistencyPatterns);
|
|
57
|
+
}
|
|
58
|
+
// Detect dead constants
|
|
59
|
+
if (this.config.detectDeadConstants) {
|
|
60
|
+
const deadPatterns = await this.detectDeadConstantPatterns(constants);
|
|
61
|
+
patterns.push(...deadPatterns);
|
|
62
|
+
}
|
|
63
|
+
// Calculate statistics
|
|
64
|
+
const stats = this.calculateStats(patterns);
|
|
65
|
+
return {
|
|
66
|
+
patterns,
|
|
67
|
+
stats,
|
|
68
|
+
detectedAt: new Date().toISOString(),
|
|
69
|
+
duration: performance.now() - startTime,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Detect magic value patterns
|
|
74
|
+
*/
|
|
75
|
+
async detectMagicValuePatterns(constants) {
|
|
76
|
+
const patterns = [];
|
|
77
|
+
// Note: Magic value detection needs file content to scan for literals
|
|
78
|
+
// This is a placeholder that would be called with actual file content
|
|
79
|
+
// For now, we create patterns from constants that look like they might be magic values
|
|
80
|
+
const potentialMagicConstants = constants.filter((c) => {
|
|
81
|
+
// Constants with generic names might indicate magic values elsewhere
|
|
82
|
+
const genericNames = ['VALUE', 'NUMBER', 'COUNT', 'SIZE', 'LIMIT'];
|
|
83
|
+
return genericNames.some((name) => c.name.toUpperCase().includes(name));
|
|
84
|
+
});
|
|
85
|
+
if (potentialMagicConstants.length > 0) {
|
|
86
|
+
patterns.push({
|
|
87
|
+
id: 'constants/magic-value-candidates',
|
|
88
|
+
name: 'Potential Magic Value Constants',
|
|
89
|
+
category: 'maintenance',
|
|
90
|
+
subcategory: 'magic-values',
|
|
91
|
+
description: 'Constants with generic names that may indicate magic values in the codebase',
|
|
92
|
+
severity: 'info',
|
|
93
|
+
confidence: 0.6,
|
|
94
|
+
locations: potentialMagicConstants.map((c) => ({
|
|
95
|
+
file: c.file,
|
|
96
|
+
line: c.line,
|
|
97
|
+
column: c.column,
|
|
98
|
+
snippet: `${c.name} = ${c.value}`,
|
|
99
|
+
context: `Category: ${c.category}`,
|
|
100
|
+
})),
|
|
101
|
+
metadata: {
|
|
102
|
+
constantCount: potentialMagicConstants.length,
|
|
103
|
+
},
|
|
104
|
+
firstSeen: new Date().toISOString(),
|
|
105
|
+
lastSeen: new Date().toISOString(),
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
return patterns;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Detect secret patterns
|
|
112
|
+
*/
|
|
113
|
+
async detectSecretPatterns(constants) {
|
|
114
|
+
const patterns = [];
|
|
115
|
+
// Scan constants for potential secrets
|
|
116
|
+
const scanResult = this.securityScanner.scan(constants);
|
|
117
|
+
// Filter by severity threshold
|
|
118
|
+
const severityOrder = ['info', 'low', 'medium', 'high', 'critical'];
|
|
119
|
+
const thresholdIndex = severityOrder.indexOf(this.config.secretSeverityThreshold);
|
|
120
|
+
const filteredSecrets = scanResult.secrets.filter((secret) => {
|
|
121
|
+
const secretIndex = severityOrder.indexOf(secret.severity);
|
|
122
|
+
return secretIndex >= thresholdIndex;
|
|
123
|
+
});
|
|
124
|
+
if (filteredSecrets.length > 0) {
|
|
125
|
+
// Group by secret type
|
|
126
|
+
const byType = new Map();
|
|
127
|
+
for (const secret of filteredSecrets) {
|
|
128
|
+
const existing = byType.get(secret.secretType) ?? [];
|
|
129
|
+
existing.push(secret);
|
|
130
|
+
byType.set(secret.secretType, existing);
|
|
131
|
+
}
|
|
132
|
+
for (const [secretType, secrets] of byType) {
|
|
133
|
+
const maxSeverity = secrets.reduce((max, s) => {
|
|
134
|
+
const maxIndex = severityOrder.indexOf(max);
|
|
135
|
+
const currentIndex = severityOrder.indexOf(s.severity);
|
|
136
|
+
return currentIndex > maxIndex ? s.severity : max;
|
|
137
|
+
}, 'info');
|
|
138
|
+
patterns.push({
|
|
139
|
+
id: `constants/hardcoded-secret/${secretType}`,
|
|
140
|
+
name: `Hardcoded ${secretType.replace(/_/g, ' ')}`,
|
|
141
|
+
category: 'security',
|
|
142
|
+
subcategory: 'secrets',
|
|
143
|
+
description: `Potential hardcoded ${secretType.replace(/_/g, ' ')} detected in constants`,
|
|
144
|
+
severity: maxSeverity,
|
|
145
|
+
confidence: Math.max(...secrets.map((s) => s.confidence)),
|
|
146
|
+
locations: secrets.map((s) => ({
|
|
147
|
+
file: s.file,
|
|
148
|
+
line: s.line,
|
|
149
|
+
column: 0,
|
|
150
|
+
snippet: `${s.name} = ${s.maskedValue}`,
|
|
151
|
+
context: s.recommendation,
|
|
152
|
+
})),
|
|
153
|
+
metadata: {
|
|
154
|
+
secretType,
|
|
155
|
+
count: secrets.length,
|
|
156
|
+
recommendations: [...new Set(secrets.map((s) => s.recommendation))],
|
|
157
|
+
},
|
|
158
|
+
firstSeen: new Date().toISOString(),
|
|
159
|
+
lastSeen: new Date().toISOString(),
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
return patterns;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Detect inconsistency patterns
|
|
167
|
+
*/
|
|
168
|
+
async detectInconsistencyPatterns(constants) {
|
|
169
|
+
const patterns = [];
|
|
170
|
+
// Analyze consistency
|
|
171
|
+
const result = this.consistencyAnalyzer.analyze(constants);
|
|
172
|
+
if (result.inconsistencies.length > 0) {
|
|
173
|
+
for (const inconsistency of result.inconsistencies) {
|
|
174
|
+
const severity = this.getInconsistencySeverity(inconsistency);
|
|
175
|
+
patterns.push({
|
|
176
|
+
id: `constants/inconsistent-value/${inconsistency.name}`,
|
|
177
|
+
name: `Inconsistent Constant: ${inconsistency.name}`,
|
|
178
|
+
category: 'consistency',
|
|
179
|
+
subcategory: 'value-mismatch',
|
|
180
|
+
description: `Constant "${inconsistency.name}" has different values in different files`,
|
|
181
|
+
severity,
|
|
182
|
+
confidence: 0.9,
|
|
183
|
+
locations: inconsistency.instances.map((instance) => ({
|
|
184
|
+
file: instance.file,
|
|
185
|
+
line: instance.line,
|
|
186
|
+
column: 0,
|
|
187
|
+
snippet: `${inconsistency.name} = ${instance.value}`,
|
|
188
|
+
})),
|
|
189
|
+
metadata: {
|
|
190
|
+
constantName: inconsistency.name,
|
|
191
|
+
valueCount: new Set(inconsistency.instances.map((i) => String(i.value))).size,
|
|
192
|
+
recommendation: inconsistency.recommendation,
|
|
193
|
+
},
|
|
194
|
+
firstSeen: new Date().toISOString(),
|
|
195
|
+
lastSeen: new Date().toISOString(),
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
return patterns;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Detect dead constant patterns
|
|
203
|
+
*/
|
|
204
|
+
async detectDeadConstantPatterns(constants) {
|
|
205
|
+
const patterns = [];
|
|
206
|
+
// Note: Dead constant detection needs reference information
|
|
207
|
+
// This creates patterns for constants that look potentially unused
|
|
208
|
+
// Find constants that are not exported and have no obvious usage indicators
|
|
209
|
+
const potentiallyDead = constants.filter((c) => {
|
|
210
|
+
// Non-exported constants in files with few constants might be dead
|
|
211
|
+
return !c.isExported && c.category === 'uncategorized';
|
|
212
|
+
});
|
|
213
|
+
if (potentiallyDead.length > 0) {
|
|
214
|
+
patterns.push({
|
|
215
|
+
id: 'constants/potentially-dead',
|
|
216
|
+
name: 'Potentially Unused Constants',
|
|
217
|
+
category: 'maintenance',
|
|
218
|
+
subcategory: 'dead-code',
|
|
219
|
+
description: 'Non-exported constants that may be unused',
|
|
220
|
+
severity: 'info',
|
|
221
|
+
confidence: 0.5,
|
|
222
|
+
locations: potentiallyDead.map((c) => ({
|
|
223
|
+
file: c.file,
|
|
224
|
+
line: c.line,
|
|
225
|
+
column: c.column,
|
|
226
|
+
snippet: `${c.name} = ${c.value}`,
|
|
227
|
+
})),
|
|
228
|
+
metadata: {
|
|
229
|
+
count: potentiallyDead.length,
|
|
230
|
+
note: 'Requires reference analysis for accurate detection',
|
|
231
|
+
},
|
|
232
|
+
firstSeen: new Date().toISOString(),
|
|
233
|
+
lastSeen: new Date().toISOString(),
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
return patterns;
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Get severity for an inconsistency
|
|
240
|
+
*/
|
|
241
|
+
getInconsistencySeverity(inconsistency) {
|
|
242
|
+
// Higher severity for more instances
|
|
243
|
+
if (inconsistency.instances.length >= 5)
|
|
244
|
+
return 'high';
|
|
245
|
+
if (inconsistency.instances.length >= 3)
|
|
246
|
+
return 'medium';
|
|
247
|
+
return 'low';
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Calculate statistics from patterns
|
|
251
|
+
*/
|
|
252
|
+
calculateStats(patterns) {
|
|
253
|
+
const byCategory = {
|
|
254
|
+
config: 0,
|
|
255
|
+
security: 0,
|
|
256
|
+
consistency: 0,
|
|
257
|
+
maintenance: 0,
|
|
258
|
+
};
|
|
259
|
+
const bySeverity = {
|
|
260
|
+
info: 0,
|
|
261
|
+
low: 0,
|
|
262
|
+
medium: 0,
|
|
263
|
+
high: 0,
|
|
264
|
+
critical: 0,
|
|
265
|
+
};
|
|
266
|
+
for (const pattern of patterns) {
|
|
267
|
+
byCategory[pattern.category]++;
|
|
268
|
+
bySeverity[pattern.severity]++;
|
|
269
|
+
}
|
|
270
|
+
return {
|
|
271
|
+
totalPatterns: patterns.length,
|
|
272
|
+
byCategory,
|
|
273
|
+
bySeverity,
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Convert constant patterns to manifest format
|
|
278
|
+
*/
|
|
279
|
+
toManifestPatterns(patterns) {
|
|
280
|
+
return patterns.map((pattern) => ({
|
|
281
|
+
id: pattern.id,
|
|
282
|
+
name: pattern.name,
|
|
283
|
+
category: pattern.category,
|
|
284
|
+
subcategory: pattern.subcategory,
|
|
285
|
+
status: 'discovered',
|
|
286
|
+
confidence: pattern.confidence,
|
|
287
|
+
locations: pattern.locations.map((loc) => ({
|
|
288
|
+
file: loc.file,
|
|
289
|
+
hash: '',
|
|
290
|
+
range: { start: loc.line, end: loc.line },
|
|
291
|
+
type: 'constant',
|
|
292
|
+
name: pattern.name,
|
|
293
|
+
confidence: pattern.confidence,
|
|
294
|
+
language: 'typescript', // Would need to detect from file
|
|
295
|
+
})),
|
|
296
|
+
outliers: [],
|
|
297
|
+
description: pattern.description,
|
|
298
|
+
firstSeen: pattern.firstSeen,
|
|
299
|
+
lastSeen: pattern.lastSeen,
|
|
300
|
+
}));
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
// ============================================================================
|
|
304
|
+
// Factory Functions
|
|
305
|
+
// ============================================================================
|
|
306
|
+
/**
|
|
307
|
+
* Create a pattern adapter
|
|
308
|
+
*/
|
|
309
|
+
export function createPatternAdapter(config) {
|
|
310
|
+
return new ConstantPatternAdapter(config);
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Convert severity to numeric value for comparison
|
|
314
|
+
*/
|
|
315
|
+
export function severityToNumber(severity) {
|
|
316
|
+
const map = {
|
|
317
|
+
info: 0,
|
|
318
|
+
low: 1,
|
|
319
|
+
medium: 2,
|
|
320
|
+
high: 3,
|
|
321
|
+
critical: 4,
|
|
322
|
+
};
|
|
323
|
+
return map[severity];
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Compare severities
|
|
327
|
+
*/
|
|
328
|
+
export function compareSeverity(a, b) {
|
|
329
|
+
return severityToNumber(a) - severityToNumber(b);
|
|
330
|
+
}
|
|
331
|
+
//# sourceMappingURL=pattern-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pattern-adapter.js","sourceRoot":"","sources":["../../../src/constants/integration/pattern-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scanner Adapter
|
|
3
|
+
*
|
|
4
|
+
* Integrates constant extraction into the main scanning pipeline.
|
|
5
|
+
* Provides parallel extraction support and incremental updates.
|
|
6
|
+
*/
|
|
7
|
+
import type { ConstantLanguage, FileConstantResult, ConstantExtractionQuality, ConstantHybridConfig } from '../types.js';
|
|
8
|
+
import { ConstantStore } from '../store/constant-store.js';
|
|
9
|
+
/**
|
|
10
|
+
* Scanner adapter configuration
|
|
11
|
+
*/
|
|
12
|
+
export interface ConstantScannerConfig {
|
|
13
|
+
/** Root directory */
|
|
14
|
+
rootDir: string;
|
|
15
|
+
/** Enable constant extraction */
|
|
16
|
+
enabled?: boolean;
|
|
17
|
+
/** Enable incremental scanning */
|
|
18
|
+
incremental?: boolean;
|
|
19
|
+
/** Hybrid extractor config */
|
|
20
|
+
hybridConfig?: ConstantHybridConfig;
|
|
21
|
+
/** Verbose logging */
|
|
22
|
+
verbose?: boolean;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Scan result for a single file
|
|
26
|
+
*/
|
|
27
|
+
export interface ConstantScanResult {
|
|
28
|
+
/** File path */
|
|
29
|
+
file: string;
|
|
30
|
+
/** Extraction result */
|
|
31
|
+
result: FileConstantResult | null;
|
|
32
|
+
/** Whether file was skipped (cached) */
|
|
33
|
+
skipped: boolean;
|
|
34
|
+
/** Error if extraction failed */
|
|
35
|
+
error?: string;
|
|
36
|
+
/** Duration in ms */
|
|
37
|
+
duration: number;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Batch scan result
|
|
41
|
+
*/
|
|
42
|
+
export interface ConstantBatchScanResult {
|
|
43
|
+
/** Individual file results */
|
|
44
|
+
files: ConstantScanResult[];
|
|
45
|
+
/** Total constants extracted */
|
|
46
|
+
totalConstants: number;
|
|
47
|
+
/** Total enums extracted */
|
|
48
|
+
totalEnums: number;
|
|
49
|
+
/** Files processed */
|
|
50
|
+
filesProcessed: number;
|
|
51
|
+
/** Files skipped (cached) */
|
|
52
|
+
filesSkipped: number;
|
|
53
|
+
/** Files with errors */
|
|
54
|
+
filesWithErrors: number;
|
|
55
|
+
/** Total duration in ms */
|
|
56
|
+
duration: number;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Get language from file path
|
|
60
|
+
*/
|
|
61
|
+
export declare function getConstantLanguage(filePath: string): ConstantLanguage | null;
|
|
62
|
+
/**
|
|
63
|
+
* Hash content for change detection
|
|
64
|
+
*/
|
|
65
|
+
export declare function hashContent(content: string): string;
|
|
66
|
+
/**
|
|
67
|
+
* Adapter for integrating constant extraction into the scanner pipeline
|
|
68
|
+
*/
|
|
69
|
+
export declare class ConstantScannerAdapter {
|
|
70
|
+
private readonly config;
|
|
71
|
+
private readonly store;
|
|
72
|
+
private readonly extractors;
|
|
73
|
+
private initialized;
|
|
74
|
+
constructor(config: ConstantScannerConfig);
|
|
75
|
+
/**
|
|
76
|
+
* Initialize the adapter
|
|
77
|
+
*/
|
|
78
|
+
initialize(): Promise<void>;
|
|
79
|
+
/**
|
|
80
|
+
* Check if constant extraction is enabled
|
|
81
|
+
*/
|
|
82
|
+
isEnabled(): boolean;
|
|
83
|
+
/**
|
|
84
|
+
* Get the constant store
|
|
85
|
+
*/
|
|
86
|
+
getStore(): ConstantStore;
|
|
87
|
+
/**
|
|
88
|
+
* Extract constants from a single file
|
|
89
|
+
*/
|
|
90
|
+
extractFile(filePath: string, content: string): Promise<ConstantScanResult>;
|
|
91
|
+
/**
|
|
92
|
+
* Extract constants from multiple files
|
|
93
|
+
*/
|
|
94
|
+
extractFiles(files: Array<{
|
|
95
|
+
path: string;
|
|
96
|
+
content: string;
|
|
97
|
+
}>): Promise<ConstantBatchScanResult>;
|
|
98
|
+
/**
|
|
99
|
+
* Handle file deletion
|
|
100
|
+
*/
|
|
101
|
+
handleFileDeleted(filePath: string): Promise<void>;
|
|
102
|
+
/**
|
|
103
|
+
* Rebuild the index
|
|
104
|
+
*/
|
|
105
|
+
rebuildIndex(): Promise<void>;
|
|
106
|
+
/**
|
|
107
|
+
* Clear all constant data
|
|
108
|
+
*/
|
|
109
|
+
clear(): Promise<void>;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Task for constant extraction worker
|
|
113
|
+
*/
|
|
114
|
+
export interface ConstantWorkerTask {
|
|
115
|
+
/** Task type */
|
|
116
|
+
type: 'extract' | 'warmup';
|
|
117
|
+
/** File path */
|
|
118
|
+
file?: string;
|
|
119
|
+
/** File content */
|
|
120
|
+
content?: string;
|
|
121
|
+
/** Root directory */
|
|
122
|
+
rootDir?: string;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Result from constant extraction worker
|
|
126
|
+
*/
|
|
127
|
+
export interface ConstantWorkerResult {
|
|
128
|
+
/** File path */
|
|
129
|
+
file: string;
|
|
130
|
+
/** Language detected */
|
|
131
|
+
language: ConstantLanguage | null;
|
|
132
|
+
/** Extraction result */
|
|
133
|
+
result: FileConstantResult | null;
|
|
134
|
+
/** Content hash */
|
|
135
|
+
contentHash: string;
|
|
136
|
+
/** Error if failed */
|
|
137
|
+
error?: string;
|
|
138
|
+
/** Duration in ms */
|
|
139
|
+
duration: number;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Process a constant extraction task (for worker threads)
|
|
143
|
+
*/
|
|
144
|
+
export declare function processConstantTask(task: ConstantWorkerTask): ConstantWorkerResult;
|
|
145
|
+
/**
|
|
146
|
+
* Create a constant scanner adapter
|
|
147
|
+
*/
|
|
148
|
+
export declare function createConstantScanner(config: ConstantScannerConfig): ConstantScannerAdapter;
|
|
149
|
+
/**
|
|
150
|
+
* Create default extraction quality
|
|
151
|
+
*/
|
|
152
|
+
export declare function createDefaultConstantQuality(): ConstantExtractionQuality;
|
|
153
|
+
//# sourceMappingURL=scanner-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scanner-adapter.d.ts","sourceRoot":"","sources":["../../../src/constants/integration/scanner-adapter.ts"],"names":[],"mappings":"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"}
|