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.
Files changed (141) hide show
  1. package/LICENSE +21 -0
  2. package/dist/constants/analysis/categorizer.d.ts +27 -0
  3. package/dist/constants/analysis/categorizer.d.ts.map +1 -0
  4. package/dist/constants/analysis/categorizer.js +364 -0
  5. package/dist/constants/analysis/categorizer.js.map +1 -0
  6. package/dist/constants/analysis/consistency-analyzer.d.ts +77 -0
  7. package/dist/constants/analysis/consistency-analyzer.d.ts.map +1 -0
  8. package/dist/constants/analysis/consistency-analyzer.js +176 -0
  9. package/dist/constants/analysis/consistency-analyzer.js.map +1 -0
  10. package/dist/constants/analysis/dead-constant-detector.d.ts +79 -0
  11. package/dist/constants/analysis/dead-constant-detector.d.ts.map +1 -0
  12. package/dist/constants/analysis/dead-constant-detector.js +242 -0
  13. package/dist/constants/analysis/dead-constant-detector.js.map +1 -0
  14. package/dist/constants/analysis/magic-detector.d.ts +116 -0
  15. package/dist/constants/analysis/magic-detector.d.ts.map +1 -0
  16. package/dist/constants/analysis/magic-detector.js +425 -0
  17. package/dist/constants/analysis/magic-detector.js.map +1 -0
  18. package/dist/constants/analysis/reference-finder.d.ts +87 -0
  19. package/dist/constants/analysis/reference-finder.d.ts.map +1 -0
  20. package/dist/constants/analysis/reference-finder.js +269 -0
  21. package/dist/constants/analysis/reference-finder.js.map +1 -0
  22. package/dist/constants/analysis/security-scanner.d.ts +115 -0
  23. package/dist/constants/analysis/security-scanner.d.ts.map +1 -0
  24. package/dist/constants/analysis/security-scanner.js +429 -0
  25. package/dist/constants/analysis/security-scanner.js.map +1 -0
  26. package/dist/constants/extractors/base-extractor.d.ts +97 -0
  27. package/dist/constants/extractors/base-extractor.d.ts.map +1 -0
  28. package/dist/constants/extractors/base-extractor.js +285 -0
  29. package/dist/constants/extractors/base-extractor.js.map +1 -0
  30. package/dist/constants/extractors/regex/base-regex.d.ts +67 -0
  31. package/dist/constants/extractors/regex/base-regex.d.ts.map +1 -0
  32. package/dist/constants/extractors/regex/base-regex.js +209 -0
  33. package/dist/constants/extractors/regex/base-regex.js.map +1 -0
  34. package/dist/constants/extractors/regex/csharp-regex.d.ts +39 -0
  35. package/dist/constants/extractors/regex/csharp-regex.d.ts.map +1 -0
  36. package/dist/constants/extractors/regex/csharp-regex.js +316 -0
  37. package/dist/constants/extractors/regex/csharp-regex.js.map +1 -0
  38. package/dist/constants/extractors/regex/go-regex.d.ts +40 -0
  39. package/dist/constants/extractors/regex/go-regex.d.ts.map +1 -0
  40. package/dist/constants/extractors/regex/go-regex.js +297 -0
  41. package/dist/constants/extractors/regex/go-regex.js.map +1 -0
  42. package/dist/constants/extractors/regex/java-regex.d.ts +43 -0
  43. package/dist/constants/extractors/regex/java-regex.d.ts.map +1 -0
  44. package/dist/constants/extractors/regex/java-regex.js +276 -0
  45. package/dist/constants/extractors/regex/java-regex.js.map +1 -0
  46. package/dist/constants/extractors/regex/php-regex.d.ts +39 -0
  47. package/dist/constants/extractors/regex/php-regex.d.ts.map +1 -0
  48. package/dist/constants/extractors/regex/php-regex.js +270 -0
  49. package/dist/constants/extractors/regex/php-regex.js.map +1 -0
  50. package/dist/constants/extractors/regex/python-regex.d.ts +39 -0
  51. package/dist/constants/extractors/regex/python-regex.d.ts.map +1 -0
  52. package/dist/constants/extractors/regex/python-regex.js +287 -0
  53. package/dist/constants/extractors/regex/python-regex.js.map +1 -0
  54. package/dist/constants/extractors/regex/typescript-regex.d.ts +35 -0
  55. package/dist/constants/extractors/regex/typescript-regex.d.ts.map +1 -0
  56. package/dist/constants/extractors/regex/typescript-regex.js +313 -0
  57. package/dist/constants/extractors/regex/typescript-regex.js.map +1 -0
  58. package/dist/constants/index.d.ts +26 -0
  59. package/dist/constants/index.d.ts.map +1 -0
  60. package/dist/constants/index.js +36 -0
  61. package/dist/constants/index.js.map +1 -0
  62. package/dist/constants/integration/callgraph-adapter.d.ts +167 -0
  63. package/dist/constants/integration/callgraph-adapter.d.ts.map +1 -0
  64. package/dist/constants/integration/callgraph-adapter.js +287 -0
  65. package/dist/constants/integration/callgraph-adapter.js.map +1 -0
  66. package/dist/constants/integration/index.d.ts +10 -0
  67. package/dist/constants/integration/index.d.ts.map +1 -0
  68. package/dist/constants/integration/index.js +13 -0
  69. package/dist/constants/integration/index.js.map +1 -0
  70. package/dist/constants/integration/pattern-adapter.d.ts +171 -0
  71. package/dist/constants/integration/pattern-adapter.d.ts.map +1 -0
  72. package/dist/constants/integration/pattern-adapter.js +331 -0
  73. package/dist/constants/integration/pattern-adapter.js.map +1 -0
  74. package/dist/constants/integration/scanner-adapter.d.ts +153 -0
  75. package/dist/constants/integration/scanner-adapter.d.ts.map +1 -0
  76. package/dist/constants/integration/scanner-adapter.js +337 -0
  77. package/dist/constants/integration/scanner-adapter.js.map +1 -0
  78. package/dist/constants/store/constant-store.d.ts +117 -0
  79. package/dist/constants/store/constant-store.d.ts.map +1 -0
  80. package/dist/constants/store/constant-store.js +367 -0
  81. package/dist/constants/store/constant-store.js.map +1 -0
  82. package/dist/constants/types.d.ts +423 -0
  83. package/dist/constants/types.d.ts.map +1 -0
  84. package/dist/constants/types.js +43 -0
  85. package/dist/constants/types.js.map +1 -0
  86. package/dist/constraints/store/constraint-store.d.ts.map +1 -1
  87. package/dist/constraints/store/constraint-store.js +37 -2
  88. package/dist/constraints/store/constraint-store.js.map +1 -1
  89. package/dist/environment/env-scanner.d.ts +53 -0
  90. package/dist/environment/env-scanner.d.ts.map +1 -0
  91. package/dist/environment/env-scanner.js +290 -0
  92. package/dist/environment/env-scanner.js.map +1 -0
  93. package/dist/environment/env-store.d.ts +70 -0
  94. package/dist/environment/env-store.d.ts.map +1 -0
  95. package/dist/environment/env-store.js +201 -0
  96. package/dist/environment/env-store.js.map +1 -0
  97. package/dist/environment/extractors/base-env-extractor.d.ts +56 -0
  98. package/dist/environment/extractors/base-env-extractor.d.ts.map +1 -0
  99. package/dist/environment/extractors/base-env-extractor.js +74 -0
  100. package/dist/environment/extractors/base-env-extractor.js.map +1 -0
  101. package/dist/environment/extractors/csharp-env-extractor.d.ts +49 -0
  102. package/dist/environment/extractors/csharp-env-extractor.d.ts.map +1 -0
  103. package/dist/environment/extractors/csharp-env-extractor.js +240 -0
  104. package/dist/environment/extractors/csharp-env-extractor.js.map +1 -0
  105. package/dist/environment/extractors/go-env-extractor.d.ts +53 -0
  106. package/dist/environment/extractors/go-env-extractor.d.ts.map +1 -0
  107. package/dist/environment/extractors/go-env-extractor.js +267 -0
  108. package/dist/environment/extractors/go-env-extractor.js.map +1 -0
  109. package/dist/environment/extractors/index.d.ts +13 -0
  110. package/dist/environment/extractors/index.d.ts.map +1 -0
  111. package/dist/environment/extractors/index.js +13 -0
  112. package/dist/environment/extractors/index.js.map +1 -0
  113. package/dist/environment/extractors/java-env-extractor.d.ts +58 -0
  114. package/dist/environment/extractors/java-env-extractor.d.ts.map +1 -0
  115. package/dist/environment/extractors/java-env-extractor.js +219 -0
  116. package/dist/environment/extractors/java-env-extractor.js.map +1 -0
  117. package/dist/environment/extractors/php-env-extractor.d.ts +58 -0
  118. package/dist/environment/extractors/php-env-extractor.d.ts.map +1 -0
  119. package/dist/environment/extractors/php-env-extractor.js +231 -0
  120. package/dist/environment/extractors/php-env-extractor.js.map +1 -0
  121. package/dist/environment/extractors/python-env-extractor.d.ts +50 -0
  122. package/dist/environment/extractors/python-env-extractor.d.ts.map +1 -0
  123. package/dist/environment/extractors/python-env-extractor.js +219 -0
  124. package/dist/environment/extractors/python-env-extractor.js.map +1 -0
  125. package/dist/environment/extractors/typescript-env-extractor.d.ts +54 -0
  126. package/dist/environment/extractors/typescript-env-extractor.d.ts.map +1 -0
  127. package/dist/environment/extractors/typescript-env-extractor.js +228 -0
  128. package/dist/environment/extractors/typescript-env-extractor.js.map +1 -0
  129. package/dist/environment/index.d.ts +11 -0
  130. package/dist/environment/index.d.ts.map +1 -0
  131. package/dist/environment/index.js +15 -0
  132. package/dist/environment/index.js.map +1 -0
  133. package/dist/environment/types.d.ts +145 -0
  134. package/dist/environment/types.d.ts.map +1 -0
  135. package/dist/environment/types.js +84 -0
  136. package/dist/environment/types.js.map +1 -0
  137. package/dist/index.d.ts +4 -0
  138. package/dist/index.d.ts.map +1 -1
  139. package/dist/index.js +40 -0
  140. package/dist/index.js.map +1 -1
  141. package/package.json +13 -13
@@ -0,0 +1,287 @@
1
+ /**
2
+ * Call Graph Adapter
3
+ *
4
+ * Links constant extraction to the call graph system.
5
+ * Enables tracking of constant usage through function calls.
6
+ */
7
+ import { ConstantStore } from '../store/constant-store.js';
8
+ // ============================================================================
9
+ // Call Graph Adapter
10
+ // ============================================================================
11
+ /**
12
+ * Adapter for linking constants to the call graph
13
+ */
14
+ export class ConstantCallGraphAdapter {
15
+ config;
16
+ store;
17
+ constructor(config) {
18
+ this.config = {
19
+ rootDir: config.rootDir,
20
+ maxDepth: config.maxDepth ?? 10,
21
+ includeTests: config.includeTests ?? false,
22
+ };
23
+ this.store = new ConstantStore({ rootDir: config.rootDir });
24
+ }
25
+ /**
26
+ * Get constant with call graph context
27
+ */
28
+ async getConstantWithContext(constantId, callGraph) {
29
+ const constant = await this.store.getConstantById(constantId);
30
+ if (!constant) {
31
+ return null;
32
+ }
33
+ // Get all references to this constant
34
+ const allConstants = await this.store.getAllConstants();
35
+ const references = await this.findReferencesForConstant(constant, allConstants);
36
+ // Build function usage list
37
+ const usedByFunctions = references.map((ref) => ({
38
+ functionName: ref.containingFunction ?? 'module-level',
39
+ file: ref.file,
40
+ line: ref.line,
41
+ usageType: ref.referenceType,
42
+ depth: 0, // Would need call graph to calculate
43
+ }));
44
+ // Get entry points if call graph is available
45
+ const reachableFromEntryPoints = [];
46
+ const dataFlowPaths = [];
47
+ if (callGraph) {
48
+ // Find entry points that can reach functions using this constant
49
+ for (const usage of usedByFunctions) {
50
+ const entryPoints = await this.findEntryPointsForFunction(usage.functionName, usage.file, callGraph);
51
+ reachableFromEntryPoints.push(...entryPoints);
52
+ }
53
+ }
54
+ return {
55
+ constant,
56
+ usedByFunctions,
57
+ reachableFromEntryPoints: [...new Set(reachableFromEntryPoints)],
58
+ dataFlowPaths,
59
+ };
60
+ }
61
+ /**
62
+ * Analyze impact of changing a constant
63
+ */
64
+ async analyzeConstantImpact(constantId, callGraph) {
65
+ const constant = await this.store.getConstantById(constantId);
66
+ if (!constant) {
67
+ return null;
68
+ }
69
+ // Get all references
70
+ const allConstants = await this.store.getAllConstants();
71
+ const directUsages = await this.findReferencesForConstant(constant, allConstants);
72
+ // Build affected functions list
73
+ const affectedFunctions = [];
74
+ const seenFunctions = new Set();
75
+ for (const usage of directUsages) {
76
+ const key = `${usage.file}:${usage.containingFunction ?? 'module'}`;
77
+ if (!seenFunctions.has(key)) {
78
+ seenFunctions.add(key);
79
+ affectedFunctions.push({
80
+ name: usage.containingFunction ?? 'module-level',
81
+ file: usage.file,
82
+ line: usage.line,
83
+ affectedBy: 'direct_usage',
84
+ depth: 0,
85
+ });
86
+ }
87
+ }
88
+ // Find affected entry points
89
+ const affectedEntryPoints = [];
90
+ if (callGraph) {
91
+ for (const func of affectedFunctions) {
92
+ const entryPoints = await this.findEntryPointsForFunction(func.name, func.file, callGraph);
93
+ affectedEntryPoints.push(...entryPoints);
94
+ }
95
+ }
96
+ // Calculate impact score
97
+ const impactScore = this.calculateImpactScore(directUsages.length, affectedFunctions.length, affectedEntryPoints.length, constant);
98
+ // Determine risk level
99
+ const riskLevel = this.determineRiskLevel(impactScore, constant);
100
+ return {
101
+ constant,
102
+ directUsages,
103
+ affectedFunctions,
104
+ affectedEntryPoints: [...new Set(affectedEntryPoints)],
105
+ impactScore,
106
+ riskLevel,
107
+ };
108
+ }
109
+ /**
110
+ * Find all constants used by a function
111
+ */
112
+ async findConstantsUsedByFunction(_functionName, filePath) {
113
+ const allConstants = await this.store.getAllConstants();
114
+ const usedConstants = [];
115
+ // Check which constants are referenced in the function
116
+ // This is a simplified check - full implementation would parse the function body
117
+ for (const constant of allConstants) {
118
+ // Check if constant is from same file or imported
119
+ if (constant.file === filePath || constant.isExported) {
120
+ usedConstants.push(constant);
121
+ }
122
+ }
123
+ return usedConstants;
124
+ }
125
+ /**
126
+ * Find constants that flow to a specific data sink
127
+ */
128
+ async findConstantsFlowingToSink(_sinkFunction, sinkFile, _callGraph) {
129
+ const flowingConstants = [];
130
+ // Find constants used in those functions
131
+ const fileConstants = await this.store.getConstantsByFile(sinkFile);
132
+ flowingConstants.push(...fileConstants);
133
+ return flowingConstants;
134
+ }
135
+ /**
136
+ * Get constants by entry point
137
+ */
138
+ async getConstantsByEntryPoint(entryPoint, callGraph) {
139
+ const allConstants = await this.store.getAllConstants();
140
+ if (!callGraph) {
141
+ // Without call graph, return all exported constants
142
+ return allConstants.filter((c) => c.isExported);
143
+ }
144
+ // With call graph, find all functions reachable from entry point
145
+ // and return constants used by those functions
146
+ const reachableFunctions = await this.getReachableFunctions(entryPoint, callGraph);
147
+ const usedConstants = [];
148
+ const seenIds = new Set();
149
+ for (const func of reachableFunctions) {
150
+ const funcConstants = await this.findConstantsUsedByFunction(func.name, func.file);
151
+ for (const constant of funcConstants) {
152
+ if (!seenIds.has(constant.id)) {
153
+ seenIds.add(constant.id);
154
+ usedConstants.push(constant);
155
+ }
156
+ }
157
+ }
158
+ return usedConstants;
159
+ }
160
+ // ============================================================================
161
+ // Private Methods
162
+ // ============================================================================
163
+ /**
164
+ * Find references for a specific constant
165
+ */
166
+ async findReferencesForConstant(_constant, _allConstants) {
167
+ // This would need file content to find actual references
168
+ // For now, return empty array - full implementation would scan files
169
+ return [];
170
+ }
171
+ /**
172
+ * Find entry points that can reach a function
173
+ */
174
+ async findEntryPointsForFunction(functionName, filePath, callGraph) {
175
+ // Use call graph to find entry points
176
+ const entryPoints = [];
177
+ try {
178
+ const callers = await callGraph.getCallers(functionName, filePath);
179
+ for (const caller of callers) {
180
+ if (caller.isEntryPoint) {
181
+ entryPoints.push(`${caller.file}:${caller.name}`);
182
+ }
183
+ else {
184
+ // Recursively find entry points
185
+ const parentEntryPoints = await this.findEntryPointsForFunction(caller.name, caller.file, callGraph);
186
+ entryPoints.push(...parentEntryPoints);
187
+ }
188
+ }
189
+ }
190
+ catch {
191
+ // Call graph not available or error
192
+ }
193
+ return entryPoints;
194
+ }
195
+ /**
196
+ * Get all functions reachable from an entry point
197
+ */
198
+ async getReachableFunctions(entryPoint, callGraph) {
199
+ const reachable = [];
200
+ const visited = new Set();
201
+ const traverse = async (funcName, filePath, depth) => {
202
+ if (depth > this.config.maxDepth)
203
+ return;
204
+ const key = `${filePath}:${funcName}`;
205
+ if (visited.has(key))
206
+ return;
207
+ visited.add(key);
208
+ reachable.push({ name: funcName, file: filePath });
209
+ try {
210
+ const callees = await callGraph.getCallees(funcName, filePath);
211
+ for (const callee of callees) {
212
+ await traverse(callee.name, callee.file, depth + 1);
213
+ }
214
+ }
215
+ catch {
216
+ // Ignore errors
217
+ }
218
+ };
219
+ const [file, name] = entryPoint.split(':');
220
+ if (file && name) {
221
+ await traverse(name, file, 0);
222
+ }
223
+ return reachable;
224
+ }
225
+ /**
226
+ * Calculate impact score for a constant
227
+ */
228
+ calculateImpactScore(directUsages, affectedFunctions, affectedEntryPoints, constant) {
229
+ let score = 0;
230
+ // Base score from usage count
231
+ score += Math.min(directUsages * 5, 30);
232
+ // Score from affected functions
233
+ score += Math.min(affectedFunctions * 3, 25);
234
+ // Score from affected entry points
235
+ score += Math.min(affectedEntryPoints * 10, 30);
236
+ // Bonus for exported constants
237
+ if (constant.isExported) {
238
+ score += 10;
239
+ }
240
+ // Bonus for security-sensitive categories
241
+ if (constant.category === 'security' || constant.category === 'api') {
242
+ score += 5;
243
+ }
244
+ return Math.min(score, 100);
245
+ }
246
+ /**
247
+ * Determine risk level from impact score
248
+ */
249
+ determineRiskLevel(impactScore, constant) {
250
+ // Security constants are always at least medium risk
251
+ if (constant.category === 'security') {
252
+ if (impactScore >= 50)
253
+ return 'critical';
254
+ if (impactScore >= 25)
255
+ return 'high';
256
+ return 'medium';
257
+ }
258
+ // API constants are higher risk
259
+ if (constant.category === 'api') {
260
+ if (impactScore >= 60)
261
+ return 'critical';
262
+ if (impactScore >= 40)
263
+ return 'high';
264
+ if (impactScore >= 20)
265
+ return 'medium';
266
+ return 'low';
267
+ }
268
+ // Standard risk levels
269
+ if (impactScore >= 70)
270
+ return 'critical';
271
+ if (impactScore >= 50)
272
+ return 'high';
273
+ if (impactScore >= 25)
274
+ return 'medium';
275
+ return 'low';
276
+ }
277
+ }
278
+ // ============================================================================
279
+ // Factory Functions
280
+ // ============================================================================
281
+ /**
282
+ * Create a call graph adapter
283
+ */
284
+ export function createCallGraphAdapter(config) {
285
+ return new ConstantCallGraphAdapter(config);
286
+ }
287
+ //# sourceMappingURL=callgraph-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"callgraph-adapter.js","sourceRoot":"","sources":["../../../src/constants/integration/callgraph-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Constants Integration Module
3
+ *
4
+ * Adapters for integrating constant extraction with the scanner,
5
+ * call graph, and pattern detection systems.
6
+ */
7
+ export { ConstantScannerAdapter, createConstantScanner, getConstantLanguage, hashContent, processConstantTask, createDefaultConstantQuality, type ConstantScannerConfig, type ConstantScanResult, type ConstantBatchScanResult, type ConstantWorkerTask, type ConstantWorkerResult, } from './scanner-adapter.js';
8
+ export { ConstantCallGraphAdapter, createCallGraphAdapter, type CallGraphAdapterConfig, type CallGraphInterface, type ConstantWithContext, type ConstantImpactAnalysis, type FunctionUsage, type DataFlowPath, type AffectedFunction, } from './callgraph-adapter.js';
9
+ export { ConstantPatternAdapter, createPatternAdapter, severityToNumber, compareSeverity, type PatternAdapterConfig, type ConstantPattern, type ConstantPatternCategory, type ConstantPatternResult, type PatternLocation, type ManifestPattern, } from './pattern-adapter.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/constants/integration/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,mBAAmB,EACnB,WAAW,EACX,mBAAmB,EACnB,4BAA4B,EAC5B,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,GAC1B,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,gBAAgB,GACtB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,EACf,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACpB,KAAK,eAAe,GACrB,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Constants Integration Module
3
+ *
4
+ * Adapters for integrating constant extraction with the scanner,
5
+ * call graph, and pattern detection systems.
6
+ */
7
+ // Scanner Adapter
8
+ export { ConstantScannerAdapter, createConstantScanner, getConstantLanguage, hashContent, processConstantTask, createDefaultConstantQuality, } from './scanner-adapter.js';
9
+ // Call Graph Adapter
10
+ export { ConstantCallGraphAdapter, createCallGraphAdapter, } from './callgraph-adapter.js';
11
+ // Pattern Adapter
12
+ export { ConstantPatternAdapter, createPatternAdapter, severityToNumber, compareSeverity, } from './pattern-adapter.js';
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/constants/integration/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,kBAAkB;AAClB,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,mBAAmB,EACnB,WAAW,EACX,mBAAmB,EACnB,4BAA4B,GAM7B,MAAM,sBAAsB,CAAC;AAE9B,qBAAqB;AACrB,OAAO,EACL,wBAAwB,EACxB,sBAAsB,GAQvB,MAAM,wBAAwB,CAAC;AAEhC,kBAAkB;AAClB,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,GAOhB,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,171 @@
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 type { IssueSeverity } from '../types.js';
8
+ /**
9
+ * A pattern detected from constant analysis
10
+ */
11
+ export interface ConstantPattern {
12
+ /** Pattern ID */
13
+ id: string;
14
+ /** Pattern name */
15
+ name: string;
16
+ /** Pattern category */
17
+ category: ConstantPatternCategory;
18
+ /** Subcategory */
19
+ subcategory: string;
20
+ /** Description */
21
+ description: string;
22
+ /** Severity */
23
+ severity: IssueSeverity;
24
+ /** Confidence (0-1) */
25
+ confidence: number;
26
+ /** Locations where pattern is found */
27
+ locations: PatternLocation[];
28
+ /** Metadata */
29
+ metadata: Record<string, unknown>;
30
+ /** First seen timestamp */
31
+ firstSeen: string;
32
+ /** Last seen timestamp */
33
+ lastSeen: string;
34
+ }
35
+ /**
36
+ * Pattern categories for constants
37
+ */
38
+ export type ConstantPatternCategory = 'config' | 'security' | 'consistency' | 'maintenance';
39
+ /**
40
+ * Location of a pattern
41
+ */
42
+ export interface PatternLocation {
43
+ /** File path */
44
+ file: string;
45
+ /** Line number */
46
+ line: number;
47
+ /** Column */
48
+ column: number;
49
+ /** Code snippet */
50
+ snippet?: string;
51
+ /** Additional context */
52
+ context?: string;
53
+ }
54
+ /**
55
+ * Pattern detection result
56
+ */
57
+ export interface ConstantPatternResult {
58
+ /** Detected patterns */
59
+ patterns: ConstantPattern[];
60
+ /** Statistics */
61
+ stats: {
62
+ totalPatterns: number;
63
+ byCategory: Record<ConstantPatternCategory, number>;
64
+ bySeverity: Record<IssueSeverity, number>;
65
+ };
66
+ /** Detection timestamp */
67
+ detectedAt: string;
68
+ /** Duration in ms */
69
+ duration: number;
70
+ }
71
+ /**
72
+ * Configuration for pattern adapter
73
+ */
74
+ export interface PatternAdapterConfig {
75
+ /** Root directory */
76
+ rootDir: string;
77
+ /** Enable magic value detection */
78
+ detectMagicValues?: boolean;
79
+ /** Enable security scanning */
80
+ detectSecrets?: boolean;
81
+ /** Enable consistency checking */
82
+ detectInconsistencies?: boolean;
83
+ /** Enable dead constant detection */
84
+ detectDeadConstants?: boolean;
85
+ /** Minimum occurrences for magic values */
86
+ magicValueMinOccurrences?: number;
87
+ /** Secret detection severity threshold */
88
+ secretSeverityThreshold?: IssueSeverity;
89
+ }
90
+ /**
91
+ * Adapter for feeding constant analysis into the pattern system
92
+ */
93
+ export declare class ConstantPatternAdapter {
94
+ private readonly config;
95
+ private readonly store;
96
+ private readonly securityScanner;
97
+ private readonly consistencyAnalyzer;
98
+ constructor(config: PatternAdapterConfig);
99
+ /**
100
+ * Detect all constant-related patterns
101
+ */
102
+ detectPatterns(): Promise<ConstantPatternResult>;
103
+ /**
104
+ * Detect magic value patterns
105
+ */
106
+ private detectMagicValuePatterns;
107
+ /**
108
+ * Detect secret patterns
109
+ */
110
+ private detectSecretPatterns;
111
+ /**
112
+ * Detect inconsistency patterns
113
+ */
114
+ private detectInconsistencyPatterns;
115
+ /**
116
+ * Detect dead constant patterns
117
+ */
118
+ private detectDeadConstantPatterns;
119
+ /**
120
+ * Get severity for an inconsistency
121
+ */
122
+ private getInconsistencySeverity;
123
+ /**
124
+ * Calculate statistics from patterns
125
+ */
126
+ private calculateStats;
127
+ /**
128
+ * Convert constant patterns to manifest format
129
+ */
130
+ toManifestPatterns(patterns: ConstantPattern[]): ManifestPattern[];
131
+ }
132
+ /**
133
+ * Pattern format for manifest storage
134
+ */
135
+ export interface ManifestPattern {
136
+ id: string;
137
+ name: string;
138
+ category: string;
139
+ subcategory: string;
140
+ status: 'discovered' | 'approved' | 'ignored';
141
+ confidence: number;
142
+ locations: Array<{
143
+ file: string;
144
+ hash: string;
145
+ range: {
146
+ start: number;
147
+ end: number;
148
+ };
149
+ type: string;
150
+ name: string;
151
+ confidence: number;
152
+ language: string;
153
+ }>;
154
+ outliers: unknown[];
155
+ description: string;
156
+ firstSeen: string;
157
+ lastSeen: string;
158
+ }
159
+ /**
160
+ * Create a pattern adapter
161
+ */
162
+ export declare function createPatternAdapter(config: PatternAdapterConfig): ConstantPatternAdapter;
163
+ /**
164
+ * Convert severity to numeric value for comparison
165
+ */
166
+ export declare function severityToNumber(severity: IssueSeverity): number;
167
+ /**
168
+ * Compare severities
169
+ */
170
+ export declare function compareSeverity(a: IssueSeverity, b: IssueSeverity): number;
171
+ //# sourceMappingURL=pattern-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern-adapter.d.ts","sourceRoot":"","sources":["../../../src/constants/integration/pattern-adapter.ts"],"names":[],"mappings":"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"}