driftdetect-core 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/analyzers/ast-analyzer.d.ts +251 -0
- package/dist/analyzers/ast-analyzer.d.ts.map +1 -0
- package/dist/analyzers/ast-analyzer.js +548 -0
- package/dist/analyzers/ast-analyzer.js.map +1 -0
- package/dist/analyzers/flow-analyzer.d.ts +241 -0
- package/dist/analyzers/flow-analyzer.d.ts.map +1 -0
- package/dist/analyzers/flow-analyzer.js +1219 -0
- package/dist/analyzers/flow-analyzer.js.map +1 -0
- package/dist/analyzers/index.d.ts +18 -0
- package/dist/analyzers/index.d.ts.map +1 -0
- package/dist/analyzers/index.js +19 -0
- package/dist/analyzers/index.js.map +1 -0
- package/dist/analyzers/semantic-analyzer.d.ts +252 -0
- package/dist/analyzers/semantic-analyzer.d.ts.map +1 -0
- package/dist/analyzers/semantic-analyzer.js +1182 -0
- package/dist/analyzers/semantic-analyzer.js.map +1 -0
- package/dist/analyzers/type-analyzer.d.ts +289 -0
- package/dist/analyzers/type-analyzer.d.ts.map +1 -0
- package/dist/analyzers/type-analyzer.js +1269 -0
- package/dist/analyzers/type-analyzer.js.map +1 -0
- package/dist/analyzers/types.d.ts +537 -0
- package/dist/analyzers/types.d.ts.map +1 -0
- package/dist/analyzers/types.js +11 -0
- package/dist/analyzers/types.js.map +1 -0
- package/dist/config/config-loader.d.ts +166 -0
- package/dist/config/config-loader.d.ts.map +1 -0
- package/dist/config/config-loader.js +429 -0
- package/dist/config/config-loader.js.map +1 -0
- package/dist/config/config-validator.d.ts +204 -0
- package/dist/config/config-validator.d.ts.map +1 -0
- package/dist/config/config-validator.js +632 -0
- package/dist/config/config-validator.js.map +1 -0
- package/dist/config/defaults.d.ts +8 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +26 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/index.d.ts +10 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +10 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/types.d.ts +47 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +7 -0
- package/dist/config/types.js.map +1 -0
- package/dist/index.d.ts +37 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +39 -0
- package/dist/index.js.map +1 -0
- package/dist/manifest/exporter.d.ts +21 -0
- package/dist/manifest/exporter.d.ts.map +1 -0
- package/dist/manifest/exporter.js +339 -0
- package/dist/manifest/exporter.js.map +1 -0
- package/dist/manifest/index.d.ts +14 -0
- package/dist/manifest/index.d.ts.map +1 -0
- package/dist/manifest/index.js +15 -0
- package/dist/manifest/index.js.map +1 -0
- package/dist/manifest/manifest-store.d.ts +111 -0
- package/dist/manifest/manifest-store.d.ts.map +1 -0
- package/dist/manifest/manifest-store.js +418 -0
- package/dist/manifest/manifest-store.js.map +1 -0
- package/dist/manifest/types.d.ts +238 -0
- package/dist/manifest/types.d.ts.map +1 -0
- package/dist/manifest/types.js +11 -0
- package/dist/manifest/types.js.map +1 -0
- package/dist/matcher/confidence-scorer.d.ts +188 -0
- package/dist/matcher/confidence-scorer.d.ts.map +1 -0
- package/dist/matcher/confidence-scorer.js +302 -0
- package/dist/matcher/confidence-scorer.js.map +1 -0
- package/dist/matcher/index.d.ts +24 -0
- package/dist/matcher/index.d.ts.map +1 -0
- package/dist/matcher/index.js +26 -0
- package/dist/matcher/index.js.map +1 -0
- package/dist/matcher/outlier-detector.d.ts +252 -0
- package/dist/matcher/outlier-detector.d.ts.map +1 -0
- package/dist/matcher/outlier-detector.js +544 -0
- package/dist/matcher/outlier-detector.js.map +1 -0
- package/dist/matcher/pattern-matcher.d.ts +169 -0
- package/dist/matcher/pattern-matcher.d.ts.map +1 -0
- package/dist/matcher/pattern-matcher.js +692 -0
- package/dist/matcher/pattern-matcher.js.map +1 -0
- package/dist/matcher/types.d.ts +476 -0
- package/dist/matcher/types.d.ts.map +1 -0
- package/dist/matcher/types.js +36 -0
- package/dist/matcher/types.js.map +1 -0
- package/dist/parsers/base-parser.d.ts +282 -0
- package/dist/parsers/base-parser.d.ts.map +1 -0
- package/dist/parsers/base-parser.js +421 -0
- package/dist/parsers/base-parser.js.map +1 -0
- package/dist/parsers/css-parser.d.ts +225 -0
- package/dist/parsers/css-parser.d.ts.map +1 -0
- package/dist/parsers/css-parser.js +477 -0
- package/dist/parsers/css-parser.js.map +1 -0
- package/dist/parsers/index.d.ts +15 -0
- package/dist/parsers/index.d.ts.map +1 -0
- package/dist/parsers/index.js +15 -0
- package/dist/parsers/index.js.map +1 -0
- package/dist/parsers/json-parser.d.ts +219 -0
- package/dist/parsers/json-parser.d.ts.map +1 -0
- package/dist/parsers/json-parser.js +602 -0
- package/dist/parsers/json-parser.js.map +1 -0
- package/dist/parsers/markdown-parser.d.ts +276 -0
- package/dist/parsers/markdown-parser.d.ts.map +1 -0
- package/dist/parsers/markdown-parser.js +731 -0
- package/dist/parsers/markdown-parser.js.map +1 -0
- package/dist/parsers/parser-manager.d.ts +294 -0
- package/dist/parsers/parser-manager.d.ts.map +1 -0
- package/dist/parsers/parser-manager.js +738 -0
- package/dist/parsers/parser-manager.js.map +1 -0
- package/dist/parsers/python-parser.d.ts +204 -0
- package/dist/parsers/python-parser.d.ts.map +1 -0
- package/dist/parsers/python-parser.js +517 -0
- package/dist/parsers/python-parser.js.map +1 -0
- package/dist/parsers/types.d.ts +43 -0
- package/dist/parsers/types.d.ts.map +1 -0
- package/dist/parsers/types.js +7 -0
- package/dist/parsers/types.js.map +1 -0
- package/dist/parsers/typescript-parser.d.ts +264 -0
- package/dist/parsers/typescript-parser.d.ts.map +1 -0
- package/dist/parsers/typescript-parser.js +658 -0
- package/dist/parsers/typescript-parser.js.map +1 -0
- package/dist/rules/evaluator.d.ts +305 -0
- package/dist/rules/evaluator.d.ts.map +1 -0
- package/dist/rules/evaluator.js +579 -0
- package/dist/rules/evaluator.js.map +1 -0
- package/dist/rules/index.d.ts +13 -0
- package/dist/rules/index.d.ts.map +1 -0
- package/dist/rules/index.js +13 -0
- package/dist/rules/index.js.map +1 -0
- package/dist/rules/quick-fix-generator.d.ts +334 -0
- package/dist/rules/quick-fix-generator.d.ts.map +1 -0
- package/dist/rules/quick-fix-generator.js +1075 -0
- package/dist/rules/quick-fix-generator.js.map +1 -0
- package/dist/rules/rule-engine.d.ts +241 -0
- package/dist/rules/rule-engine.d.ts.map +1 -0
- package/dist/rules/rule-engine.js +585 -0
- package/dist/rules/rule-engine.js.map +1 -0
- package/dist/rules/severity-manager.d.ts +394 -0
- package/dist/rules/severity-manager.d.ts.map +1 -0
- package/dist/rules/severity-manager.js +619 -0
- package/dist/rules/severity-manager.js.map +1 -0
- package/dist/rules/types.d.ts +370 -0
- package/dist/rules/types.d.ts.map +1 -0
- package/dist/rules/types.js +133 -0
- package/dist/rules/types.js.map +1 -0
- package/dist/rules/variant-manager.d.ts +388 -0
- package/dist/rules/variant-manager.d.ts.map +1 -0
- package/dist/rules/variant-manager.js +777 -0
- package/dist/rules/variant-manager.js.map +1 -0
- package/dist/scanner/change-detector.d.ts +164 -0
- package/dist/scanner/change-detector.d.ts.map +1 -0
- package/dist/scanner/change-detector.js +263 -0
- package/dist/scanner/change-detector.js.map +1 -0
- package/dist/scanner/dependency-graph.d.ts +270 -0
- package/dist/scanner/dependency-graph.d.ts.map +1 -0
- package/dist/scanner/dependency-graph.js +436 -0
- package/dist/scanner/dependency-graph.js.map +1 -0
- package/dist/scanner/file-walker.d.ts +127 -0
- package/dist/scanner/file-walker.d.ts.map +1 -0
- package/dist/scanner/file-walker.js +526 -0
- package/dist/scanner/file-walker.js.map +1 -0
- package/dist/scanner/index.d.ts +12 -0
- package/dist/scanner/index.d.ts.map +1 -0
- package/dist/scanner/index.js +12 -0
- package/dist/scanner/index.js.map +1 -0
- package/dist/scanner/types.d.ts +218 -0
- package/dist/scanner/types.d.ts.map +1 -0
- package/dist/scanner/types.js +10 -0
- package/dist/scanner/types.js.map +1 -0
- package/dist/scanner/worker-pool.d.ts +317 -0
- package/dist/scanner/worker-pool.d.ts.map +1 -0
- package/dist/scanner/worker-pool.js +571 -0
- package/dist/scanner/worker-pool.js.map +1 -0
- package/dist/store/cache-manager.d.ts +179 -0
- package/dist/store/cache-manager.d.ts.map +1 -0
- package/dist/store/cache-manager.js +391 -0
- package/dist/store/cache-manager.js.map +1 -0
- package/dist/store/history-store.d.ts +314 -0
- package/dist/store/history-store.d.ts.map +1 -0
- package/dist/store/history-store.js +707 -0
- package/dist/store/history-store.js.map +1 -0
- package/dist/store/index.d.ts +20 -0
- package/dist/store/index.d.ts.map +1 -0
- package/dist/store/index.js +26 -0
- package/dist/store/index.js.map +1 -0
- package/dist/store/lock-file-manager.d.ts +202 -0
- package/dist/store/lock-file-manager.d.ts.map +1 -0
- package/dist/store/lock-file-manager.js +475 -0
- package/dist/store/lock-file-manager.js.map +1 -0
- package/dist/store/pattern-store.d.ts +289 -0
- package/dist/store/pattern-store.d.ts.map +1 -0
- package/dist/store/pattern-store.js +936 -0
- package/dist/store/pattern-store.js.map +1 -0
- package/dist/store/schema-validator.d.ts +159 -0
- package/dist/store/schema-validator.d.ts.map +1 -0
- package/dist/store/schema-validator.js +1096 -0
- package/dist/store/schema-validator.js.map +1 -0
- package/dist/store/types.d.ts +585 -0
- package/dist/store/types.d.ts.map +1 -0
- package/dist/store/types.js +82 -0
- package/dist/store/types.js.map +1 -0
- package/dist/types/analysis.d.ts +19 -0
- package/dist/types/analysis.d.ts.map +1 -0
- package/dist/types/analysis.js +5 -0
- package/dist/types/analysis.js.map +1 -0
- package/dist/types/common.d.ts +7 -0
- package/dist/types/common.d.ts.map +1 -0
- package/dist/types/common.js +5 -0
- package/dist/types/common.js.map +1 -0
- package/dist/types/index.d.ts +12 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +10 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/patterns.d.ts +40 -0
- package/dist/types/patterns.d.ts.map +1 -0
- package/dist/types/patterns.js +7 -0
- package/dist/types/patterns.js.map +1 -0
- package/dist/types/violations.d.ts +7 -0
- package/dist/types/violations.d.ts.map +1 -0
- package/dist/types/violations.js +7 -0
- package/dist/types/violations.js.map +1 -0
- package/package.json +46 -0
|
@@ -0,0 +1,619 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Severity Manager - Severity handling
|
|
3
|
+
*
|
|
4
|
+
* Manages default severity per category, config overrides,
|
|
5
|
+
* and severity escalation logic. Provides methods to get effective
|
|
6
|
+
* severity for patterns, check if severity blocks, apply escalation
|
|
7
|
+
* rules, and sort violations by severity.
|
|
8
|
+
*
|
|
9
|
+
* @requirements 24.1 - THE Enforcement_System SHALL support severity levels: error, warning, info, hint
|
|
10
|
+
* @requirements 24.2 - WHEN severity is error, THE Violation SHALL block commits and merges
|
|
11
|
+
* @requirements 24.3 - WHEN severity is warning, THE Violation SHALL be displayed but not block
|
|
12
|
+
* @requirements 24.4 - THE Enforcement_System SHALL allow severity overrides per pattern in config
|
|
13
|
+
* @requirements 24.5 - THE Enforcement_System SHALL support severity escalation after N violations
|
|
14
|
+
*/
|
|
15
|
+
import { SEVERITY_ORDER } from './types.js';
|
|
16
|
+
// ============================================================================
|
|
17
|
+
// Default Severity Configuration
|
|
18
|
+
// ============================================================================
|
|
19
|
+
/**
|
|
20
|
+
* Default severity levels per pattern category
|
|
21
|
+
*
|
|
22
|
+
* Security and auth patterns default to error (blocking)
|
|
23
|
+
* Most patterns default to warning (non-blocking)
|
|
24
|
+
* Documentation and hints default to info/hint
|
|
25
|
+
*
|
|
26
|
+
* @requirements 24.1 - Support severity levels: error, warning, info, hint
|
|
27
|
+
*/
|
|
28
|
+
export const DEFAULT_CATEGORY_SEVERITY = {
|
|
29
|
+
structural: 'warning',
|
|
30
|
+
components: 'warning',
|
|
31
|
+
styling: 'info',
|
|
32
|
+
api: 'warning',
|
|
33
|
+
auth: 'error',
|
|
34
|
+
errors: 'warning',
|
|
35
|
+
'data-access': 'warning',
|
|
36
|
+
testing: 'info',
|
|
37
|
+
logging: 'info',
|
|
38
|
+
security: 'error',
|
|
39
|
+
config: 'warning',
|
|
40
|
+
types: 'info',
|
|
41
|
+
performance: 'hint',
|
|
42
|
+
accessibility: 'warning',
|
|
43
|
+
documentation: 'hint',
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* Default escalation rules
|
|
47
|
+
*
|
|
48
|
+
* @requirements 24.5 - Support severity escalation after N violations
|
|
49
|
+
*/
|
|
50
|
+
export const DEFAULT_ESCALATION_RULES = [
|
|
51
|
+
{ from: 'hint', to: 'info', afterCount: 10 },
|
|
52
|
+
{ from: 'info', to: 'warning', afterCount: 10 },
|
|
53
|
+
{ from: 'warning', to: 'error', afterCount: 10 },
|
|
54
|
+
];
|
|
55
|
+
/**
|
|
56
|
+
* Default SeverityManager configuration
|
|
57
|
+
*/
|
|
58
|
+
export const DEFAULT_SEVERITY_MANAGER_CONFIG = {
|
|
59
|
+
defaultSeverity: 'warning',
|
|
60
|
+
patternOverrides: {},
|
|
61
|
+
categoryOverrides: {},
|
|
62
|
+
escalation: {
|
|
63
|
+
enabled: false,
|
|
64
|
+
threshold: 10,
|
|
65
|
+
rules: DEFAULT_ESCALATION_RULES,
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
// ============================================================================
|
|
69
|
+
// Severity Manager Class
|
|
70
|
+
// ============================================================================
|
|
71
|
+
/**
|
|
72
|
+
* SeverityManager class for managing severity levels for patterns.
|
|
73
|
+
*
|
|
74
|
+
* Provides functionality for:
|
|
75
|
+
* - Getting effective severity for a pattern (considering overrides)
|
|
76
|
+
* - Checking if a severity level blocks commits/merges
|
|
77
|
+
* - Applying severity escalation rules
|
|
78
|
+
* - Sorting violations by severity
|
|
79
|
+
*
|
|
80
|
+
* @requirements 24.1, 24.2, 24.3, 24.4, 24.5
|
|
81
|
+
*/
|
|
82
|
+
export class SeverityManager {
|
|
83
|
+
config;
|
|
84
|
+
violationCounts;
|
|
85
|
+
/**
|
|
86
|
+
* Create a new SeverityManager instance.
|
|
87
|
+
*
|
|
88
|
+
* @param config - Optional custom configuration
|
|
89
|
+
*/
|
|
90
|
+
constructor(config) {
|
|
91
|
+
this.config = {
|
|
92
|
+
defaultSeverity: config?.defaultSeverity ?? DEFAULT_SEVERITY_MANAGER_CONFIG.defaultSeverity,
|
|
93
|
+
patternOverrides: { ...DEFAULT_SEVERITY_MANAGER_CONFIG.patternOverrides, ...config?.patternOverrides },
|
|
94
|
+
categoryOverrides: { ...DEFAULT_SEVERITY_MANAGER_CONFIG.categoryOverrides, ...config?.categoryOverrides },
|
|
95
|
+
escalation: {
|
|
96
|
+
enabled: config?.escalation?.enabled ?? DEFAULT_SEVERITY_MANAGER_CONFIG.escalation.enabled,
|
|
97
|
+
threshold: config?.escalation?.threshold ?? DEFAULT_SEVERITY_MANAGER_CONFIG.escalation.threshold,
|
|
98
|
+
rules: config?.escalation?.rules
|
|
99
|
+
? [...config.escalation.rules]
|
|
100
|
+
: [...DEFAULT_SEVERITY_MANAGER_CONFIG.escalation.rules],
|
|
101
|
+
},
|
|
102
|
+
};
|
|
103
|
+
this.violationCounts = {
|
|
104
|
+
byPattern: {},
|
|
105
|
+
byCategory: {},
|
|
106
|
+
total: 0,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Get the effective severity for a pattern.
|
|
111
|
+
*
|
|
112
|
+
* Priority order:
|
|
113
|
+
* 1. Pattern-specific override (highest priority)
|
|
114
|
+
* 2. Category override
|
|
115
|
+
* 3. Default category severity
|
|
116
|
+
* 4. Default severity (lowest priority)
|
|
117
|
+
*
|
|
118
|
+
* @param patternId - The pattern ID
|
|
119
|
+
* @param category - The pattern category
|
|
120
|
+
* @returns The effective severity level
|
|
121
|
+
*
|
|
122
|
+
* @requirements 24.4 - Allow severity overrides per pattern in config
|
|
123
|
+
*/
|
|
124
|
+
getEffectiveSeverity(patternId, category) {
|
|
125
|
+
// 1. Check pattern-specific override
|
|
126
|
+
if (this.config.patternOverrides[patternId]) {
|
|
127
|
+
return this.config.patternOverrides[patternId];
|
|
128
|
+
}
|
|
129
|
+
// 2. Check category override
|
|
130
|
+
if (this.config.categoryOverrides[category]) {
|
|
131
|
+
return this.config.categoryOverrides[category];
|
|
132
|
+
}
|
|
133
|
+
// 3. Check default category severity
|
|
134
|
+
if (DEFAULT_CATEGORY_SEVERITY[category]) {
|
|
135
|
+
return DEFAULT_CATEGORY_SEVERITY[category];
|
|
136
|
+
}
|
|
137
|
+
// 4. Fall back to default severity
|
|
138
|
+
return this.config.defaultSeverity;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Get the effective severity with escalation applied.
|
|
142
|
+
*
|
|
143
|
+
* Applies escalation rules based on violation counts.
|
|
144
|
+
*
|
|
145
|
+
* @param patternId - The pattern ID
|
|
146
|
+
* @param category - The pattern category
|
|
147
|
+
* @returns The effective severity level (potentially escalated)
|
|
148
|
+
*
|
|
149
|
+
* @requirements 24.5 - Support severity escalation after N violations
|
|
150
|
+
*/
|
|
151
|
+
getEffectiveSeverityWithEscalation(patternId, category) {
|
|
152
|
+
const baseSeverity = this.getEffectiveSeverity(patternId, category);
|
|
153
|
+
if (!this.config.escalation.enabled) {
|
|
154
|
+
return baseSeverity;
|
|
155
|
+
}
|
|
156
|
+
return this.applyEscalation(baseSeverity, patternId, category);
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Check if a severity level blocks commits and merges.
|
|
160
|
+
*
|
|
161
|
+
* Only 'error' severity blocks.
|
|
162
|
+
*
|
|
163
|
+
* @param severity - The severity level to check
|
|
164
|
+
* @returns True if the severity blocks, false otherwise
|
|
165
|
+
*
|
|
166
|
+
* @requirements 24.2 - WHEN severity is error, THE Violation SHALL block commits and merges
|
|
167
|
+
* @requirements 24.3 - WHEN severity is warning, THE Violation SHALL be displayed but not block
|
|
168
|
+
*/
|
|
169
|
+
isBlocking(severity) {
|
|
170
|
+
return severity === 'error';
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Check if any violations in a list are blocking.
|
|
174
|
+
*
|
|
175
|
+
* @param violations - Array of violations to check
|
|
176
|
+
* @returns True if any violation has blocking severity
|
|
177
|
+
*
|
|
178
|
+
* @requirements 24.2 - Error severity blocks commits and merges
|
|
179
|
+
*/
|
|
180
|
+
hasBlockingViolations(violations) {
|
|
181
|
+
return violations.some((v) => this.isBlocking(v.severity));
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Get the count of blocking violations.
|
|
185
|
+
*
|
|
186
|
+
* @param violations - Array of violations to check
|
|
187
|
+
* @returns Number of violations with blocking severity
|
|
188
|
+
*/
|
|
189
|
+
getBlockingViolationCount(violations) {
|
|
190
|
+
return violations.filter((v) => this.isBlocking(v.severity)).length;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Apply escalation rules to a severity level.
|
|
194
|
+
*
|
|
195
|
+
* Checks violation counts and applies escalation rules if thresholds are met.
|
|
196
|
+
*
|
|
197
|
+
* @param baseSeverity - The base severity level
|
|
198
|
+
* @param patternId - The pattern ID
|
|
199
|
+
* @param category - The pattern category
|
|
200
|
+
* @returns The escalated severity level
|
|
201
|
+
*
|
|
202
|
+
* @requirements 24.5 - Support severity escalation after N violations
|
|
203
|
+
*/
|
|
204
|
+
applyEscalation(baseSeverity, patternId, category) {
|
|
205
|
+
if (!this.config.escalation.enabled) {
|
|
206
|
+
return baseSeverity;
|
|
207
|
+
}
|
|
208
|
+
// Get violation count for this pattern
|
|
209
|
+
const patternCount = this.violationCounts.byPattern[patternId] || 0;
|
|
210
|
+
const categoryCount = this.violationCounts.byCategory[category] || 0;
|
|
211
|
+
// Use the higher of pattern or category count
|
|
212
|
+
const violationCount = Math.max(patternCount, categoryCount);
|
|
213
|
+
// Find applicable escalation rule
|
|
214
|
+
const applicableRule = this.findApplicableEscalationRule(baseSeverity, violationCount);
|
|
215
|
+
if (applicableRule) {
|
|
216
|
+
return applicableRule.to;
|
|
217
|
+
}
|
|
218
|
+
return baseSeverity;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Find the applicable escalation rule for a severity and count.
|
|
222
|
+
*
|
|
223
|
+
* @param severity - The current severity level
|
|
224
|
+
* @param violationCount - The number of violations
|
|
225
|
+
* @returns The applicable escalation rule, or null if none applies
|
|
226
|
+
*/
|
|
227
|
+
findApplicableEscalationRule(severity, violationCount) {
|
|
228
|
+
// Find rules that match the current severity
|
|
229
|
+
const matchingRules = this.config.escalation.rules.filter((rule) => rule.from === severity && violationCount >= rule.afterCount);
|
|
230
|
+
if (matchingRules.length === 0) {
|
|
231
|
+
return null;
|
|
232
|
+
}
|
|
233
|
+
// Return the rule with the highest afterCount that still applies
|
|
234
|
+
// (most specific escalation)
|
|
235
|
+
return matchingRules.reduce((best, current) => current.afterCount > best.afterCount ? current : best);
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Record a violation for escalation tracking.
|
|
239
|
+
*
|
|
240
|
+
* @param patternId - The pattern ID
|
|
241
|
+
* @param category - The pattern category
|
|
242
|
+
*/
|
|
243
|
+
recordViolation(patternId, category) {
|
|
244
|
+
this.violationCounts.byPattern[patternId] =
|
|
245
|
+
(this.violationCounts.byPattern[patternId] || 0) + 1;
|
|
246
|
+
this.violationCounts.byCategory[category] =
|
|
247
|
+
(this.violationCounts.byCategory[category] || 0) + 1;
|
|
248
|
+
this.violationCounts.total += 1;
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Record multiple violations for escalation tracking.
|
|
252
|
+
*
|
|
253
|
+
* @param violations - Array of violations to record
|
|
254
|
+
* @param categoryMap - Map of pattern ID to category
|
|
255
|
+
*/
|
|
256
|
+
recordViolations(violations, categoryMap) {
|
|
257
|
+
for (const violation of violations) {
|
|
258
|
+
const category = categoryMap[violation.patternId];
|
|
259
|
+
if (category) {
|
|
260
|
+
this.recordViolation(violation.patternId, category);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Reset violation counts.
|
|
266
|
+
*/
|
|
267
|
+
resetViolationCounts() {
|
|
268
|
+
this.violationCounts = {
|
|
269
|
+
byPattern: {},
|
|
270
|
+
byCategory: {},
|
|
271
|
+
total: 0,
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Get current violation counts.
|
|
276
|
+
*
|
|
277
|
+
* @returns Copy of current violation counts
|
|
278
|
+
*/
|
|
279
|
+
getViolationCounts() {
|
|
280
|
+
return {
|
|
281
|
+
byPattern: { ...this.violationCounts.byPattern },
|
|
282
|
+
byCategory: { ...this.violationCounts.byCategory },
|
|
283
|
+
total: this.violationCounts.total,
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Sort violations by severity (most severe first).
|
|
288
|
+
*
|
|
289
|
+
* Errors come before warnings, warnings before info, info before hints.
|
|
290
|
+
*
|
|
291
|
+
* @param violations - Array of violations to sort
|
|
292
|
+
* @returns New array sorted by severity (descending)
|
|
293
|
+
*
|
|
294
|
+
* @requirements 24.1 - Support severity levels: error, warning, info, hint
|
|
295
|
+
*/
|
|
296
|
+
sortBySeverity(violations) {
|
|
297
|
+
return [...violations].sort((a, b) => {
|
|
298
|
+
const orderA = SEVERITY_ORDER[a.severity];
|
|
299
|
+
const orderB = SEVERITY_ORDER[b.severity];
|
|
300
|
+
return orderB - orderA; // Descending order (most severe first)
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Sort violations by severity (least severe first).
|
|
305
|
+
*
|
|
306
|
+
* @param violations - Array of violations to sort
|
|
307
|
+
* @returns New array sorted by severity (ascending)
|
|
308
|
+
*/
|
|
309
|
+
sortBySeverityAscending(violations) {
|
|
310
|
+
return [...violations].sort((a, b) => {
|
|
311
|
+
const orderA = SEVERITY_ORDER[a.severity];
|
|
312
|
+
const orderB = SEVERITY_ORDER[b.severity];
|
|
313
|
+
return orderA - orderB; // Ascending order (least severe first)
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Group violations by severity level.
|
|
318
|
+
*
|
|
319
|
+
* @param violations - Array of violations to group
|
|
320
|
+
* @returns Object with violations grouped by severity
|
|
321
|
+
*/
|
|
322
|
+
groupBySeverity(violations) {
|
|
323
|
+
const groups = {
|
|
324
|
+
error: [],
|
|
325
|
+
warning: [],
|
|
326
|
+
info: [],
|
|
327
|
+
hint: [],
|
|
328
|
+
};
|
|
329
|
+
for (const violation of violations) {
|
|
330
|
+
groups[violation.severity].push(violation);
|
|
331
|
+
}
|
|
332
|
+
return groups;
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Filter violations by minimum severity level.
|
|
336
|
+
*
|
|
337
|
+
* @param violations - Array of violations to filter
|
|
338
|
+
* @param minSeverity - Minimum severity level to include
|
|
339
|
+
* @returns Filtered array of violations
|
|
340
|
+
*/
|
|
341
|
+
filterByMinSeverity(violations, minSeverity) {
|
|
342
|
+
const minOrder = SEVERITY_ORDER[minSeverity];
|
|
343
|
+
return violations.filter((v) => SEVERITY_ORDER[v.severity] >= minOrder);
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Filter violations by maximum severity level.
|
|
347
|
+
*
|
|
348
|
+
* @param violations - Array of violations to filter
|
|
349
|
+
* @param maxSeverity - Maximum severity level to include
|
|
350
|
+
* @returns Filtered array of violations
|
|
351
|
+
*/
|
|
352
|
+
filterByMaxSeverity(violations, maxSeverity) {
|
|
353
|
+
const maxOrder = SEVERITY_ORDER[maxSeverity];
|
|
354
|
+
return violations.filter((v) => SEVERITY_ORDER[v.severity] <= maxOrder);
|
|
355
|
+
}
|
|
356
|
+
/**
|
|
357
|
+
* Compare two severity levels.
|
|
358
|
+
*
|
|
359
|
+
* @param a - First severity level
|
|
360
|
+
* @param b - Second severity level
|
|
361
|
+
* @returns Negative if a < b, positive if a > b, 0 if equal
|
|
362
|
+
*/
|
|
363
|
+
compareSeverity(a, b) {
|
|
364
|
+
return SEVERITY_ORDER[a] - SEVERITY_ORDER[b];
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
367
|
+
* Check if severity a is more severe than severity b.
|
|
368
|
+
*
|
|
369
|
+
* @param a - First severity level
|
|
370
|
+
* @param b - Second severity level
|
|
371
|
+
* @returns True if a is more severe than b
|
|
372
|
+
*/
|
|
373
|
+
isMoreSevere(a, b) {
|
|
374
|
+
return SEVERITY_ORDER[a] > SEVERITY_ORDER[b];
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* Check if severity a is less severe than severity b.
|
|
378
|
+
*
|
|
379
|
+
* @param a - First severity level
|
|
380
|
+
* @param b - Second severity level
|
|
381
|
+
* @returns True if a is less severe than b
|
|
382
|
+
*/
|
|
383
|
+
isLessSevere(a, b) {
|
|
384
|
+
return SEVERITY_ORDER[a] < SEVERITY_ORDER[b];
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* Get the most severe severity from a list.
|
|
388
|
+
*
|
|
389
|
+
* @param severities - Array of severity levels
|
|
390
|
+
* @returns The most severe level, or 'hint' if empty
|
|
391
|
+
*/
|
|
392
|
+
getMostSevere(severities) {
|
|
393
|
+
if (severities.length === 0) {
|
|
394
|
+
return 'hint';
|
|
395
|
+
}
|
|
396
|
+
return severities.reduce((most, current) => this.isMoreSevere(current, most) ? current : most);
|
|
397
|
+
}
|
|
398
|
+
/**
|
|
399
|
+
* Get the least severe severity from a list.
|
|
400
|
+
*
|
|
401
|
+
* @param severities - Array of severity levels
|
|
402
|
+
* @returns The least severe level, or 'error' if empty
|
|
403
|
+
*/
|
|
404
|
+
getLeastSevere(severities) {
|
|
405
|
+
if (severities.length === 0) {
|
|
406
|
+
return 'error';
|
|
407
|
+
}
|
|
408
|
+
return severities.reduce((least, current) => this.isLessSevere(current, least) ? current : least);
|
|
409
|
+
}
|
|
410
|
+
/**
|
|
411
|
+
* Set a pattern-specific severity override.
|
|
412
|
+
*
|
|
413
|
+
* @param patternId - The pattern ID
|
|
414
|
+
* @param severity - The severity level to set
|
|
415
|
+
*
|
|
416
|
+
* @requirements 24.4 - Allow severity overrides per pattern in config
|
|
417
|
+
*/
|
|
418
|
+
setPatternOverride(patternId, severity) {
|
|
419
|
+
this.config.patternOverrides[patternId] = severity;
|
|
420
|
+
}
|
|
421
|
+
/**
|
|
422
|
+
* Remove a pattern-specific severity override.
|
|
423
|
+
*
|
|
424
|
+
* @param patternId - The pattern ID
|
|
425
|
+
*/
|
|
426
|
+
removePatternOverride(patternId) {
|
|
427
|
+
delete this.config.patternOverrides[patternId];
|
|
428
|
+
}
|
|
429
|
+
/**
|
|
430
|
+
* Set a category severity override.
|
|
431
|
+
*
|
|
432
|
+
* @param category - The pattern category
|
|
433
|
+
* @param severity - The severity level to set
|
|
434
|
+
*
|
|
435
|
+
* @requirements 24.4 - Allow severity overrides per pattern in config
|
|
436
|
+
*/
|
|
437
|
+
setCategoryOverride(category, severity) {
|
|
438
|
+
this.config.categoryOverrides[category] = severity;
|
|
439
|
+
}
|
|
440
|
+
/**
|
|
441
|
+
* Remove a category severity override.
|
|
442
|
+
*
|
|
443
|
+
* @param category - The pattern category
|
|
444
|
+
*/
|
|
445
|
+
removeCategoryOverride(category) {
|
|
446
|
+
delete this.config.categoryOverrides[category];
|
|
447
|
+
}
|
|
448
|
+
/**
|
|
449
|
+
* Enable or disable escalation.
|
|
450
|
+
*
|
|
451
|
+
* @param enabled - Whether escalation should be enabled
|
|
452
|
+
*
|
|
453
|
+
* @requirements 24.5 - Support severity escalation after N violations
|
|
454
|
+
*/
|
|
455
|
+
setEscalationEnabled(enabled) {
|
|
456
|
+
this.config.escalation.enabled = enabled;
|
|
457
|
+
}
|
|
458
|
+
/**
|
|
459
|
+
* Set escalation threshold.
|
|
460
|
+
*
|
|
461
|
+
* @param threshold - Number of violations before escalation
|
|
462
|
+
*
|
|
463
|
+
* @requirements 24.5 - Support severity escalation after N violations
|
|
464
|
+
*/
|
|
465
|
+
setEscalationThreshold(threshold) {
|
|
466
|
+
this.config.escalation.threshold = threshold;
|
|
467
|
+
}
|
|
468
|
+
/**
|
|
469
|
+
* Set escalation rules.
|
|
470
|
+
*
|
|
471
|
+
* @param rules - Array of escalation rules
|
|
472
|
+
*
|
|
473
|
+
* @requirements 24.5 - Support severity escalation after N violations
|
|
474
|
+
*/
|
|
475
|
+
setEscalationRules(rules) {
|
|
476
|
+
this.config.escalation.rules = [...rules];
|
|
477
|
+
}
|
|
478
|
+
/**
|
|
479
|
+
* Add an escalation rule.
|
|
480
|
+
*
|
|
481
|
+
* @param rule - The escalation rule to add
|
|
482
|
+
*
|
|
483
|
+
* @requirements 24.5 - Support severity escalation after N violations
|
|
484
|
+
*/
|
|
485
|
+
addEscalationRule(rule) {
|
|
486
|
+
this.config.escalation.rules.push(rule);
|
|
487
|
+
}
|
|
488
|
+
/**
|
|
489
|
+
* Get the current configuration.
|
|
490
|
+
*
|
|
491
|
+
* @returns Copy of current configuration
|
|
492
|
+
*/
|
|
493
|
+
getConfig() {
|
|
494
|
+
return {
|
|
495
|
+
...this.config,
|
|
496
|
+
patternOverrides: { ...this.config.patternOverrides },
|
|
497
|
+
categoryOverrides: { ...this.config.categoryOverrides },
|
|
498
|
+
escalation: {
|
|
499
|
+
...this.config.escalation,
|
|
500
|
+
rules: [...this.config.escalation.rules],
|
|
501
|
+
},
|
|
502
|
+
};
|
|
503
|
+
}
|
|
504
|
+
/**
|
|
505
|
+
* Create a SeverityConfig object from current state.
|
|
506
|
+
*
|
|
507
|
+
* @returns SeverityConfig object
|
|
508
|
+
*/
|
|
509
|
+
toSeverityConfig() {
|
|
510
|
+
return {
|
|
511
|
+
default: this.config.defaultSeverity,
|
|
512
|
+
overrides: { ...this.config.patternOverrides },
|
|
513
|
+
categoryOverrides: { ...this.config.categoryOverrides },
|
|
514
|
+
escalation: {
|
|
515
|
+
...this.config.escalation,
|
|
516
|
+
rules: [...this.config.escalation.rules],
|
|
517
|
+
},
|
|
518
|
+
};
|
|
519
|
+
}
|
|
520
|
+
/**
|
|
521
|
+
* Create a SeverityManager from a SeverityConfig object.
|
|
522
|
+
*
|
|
523
|
+
* @param config - The SeverityConfig to use
|
|
524
|
+
* @returns New SeverityManager instance
|
|
525
|
+
*/
|
|
526
|
+
static fromSeverityConfig(config) {
|
|
527
|
+
const managerConfig = {
|
|
528
|
+
defaultSeverity: config.default,
|
|
529
|
+
patternOverrides: config.overrides,
|
|
530
|
+
categoryOverrides: config.categoryOverrides,
|
|
531
|
+
};
|
|
532
|
+
if (config.escalation) {
|
|
533
|
+
managerConfig.escalation = config.escalation;
|
|
534
|
+
}
|
|
535
|
+
return new SeverityManager(managerConfig);
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
// ============================================================================
|
|
539
|
+
// Utility Functions
|
|
540
|
+
// ============================================================================
|
|
541
|
+
/**
|
|
542
|
+
* Get the default severity for a category.
|
|
543
|
+
*
|
|
544
|
+
* @param category - The pattern category
|
|
545
|
+
* @returns The default severity for the category
|
|
546
|
+
*/
|
|
547
|
+
export function getDefaultCategorySeverity(category) {
|
|
548
|
+
return DEFAULT_CATEGORY_SEVERITY[category] || 'warning';
|
|
549
|
+
}
|
|
550
|
+
/**
|
|
551
|
+
* Check if a severity level is blocking.
|
|
552
|
+
*
|
|
553
|
+
* @param severity - The severity level to check
|
|
554
|
+
* @returns True if the severity blocks commits/merges
|
|
555
|
+
*
|
|
556
|
+
* @requirements 24.2 - Error severity blocks commits and merges
|
|
557
|
+
*/
|
|
558
|
+
export function isBlockingSeverity(severity) {
|
|
559
|
+
return severity === 'error';
|
|
560
|
+
}
|
|
561
|
+
/**
|
|
562
|
+
* Compare two severity levels.
|
|
563
|
+
*
|
|
564
|
+
* @param a - First severity level
|
|
565
|
+
* @param b - Second severity level
|
|
566
|
+
* @returns Negative if a < b, positive if a > b, 0 if equal
|
|
567
|
+
*/
|
|
568
|
+
export function compareSeverity(a, b) {
|
|
569
|
+
return SEVERITY_ORDER[a] - SEVERITY_ORDER[b];
|
|
570
|
+
}
|
|
571
|
+
/**
|
|
572
|
+
* Sort violations by severity (most severe first).
|
|
573
|
+
*
|
|
574
|
+
* @param violations - Array of violations to sort
|
|
575
|
+
* @returns New array sorted by severity (descending)
|
|
576
|
+
*/
|
|
577
|
+
export function sortViolationsBySeverity(violations) {
|
|
578
|
+
return [...violations].sort((a, b) => {
|
|
579
|
+
return SEVERITY_ORDER[b.severity] - SEVERITY_ORDER[a.severity];
|
|
580
|
+
});
|
|
581
|
+
}
|
|
582
|
+
/**
|
|
583
|
+
* Get severity summary from violations.
|
|
584
|
+
*
|
|
585
|
+
* @param violations - Array of violations
|
|
586
|
+
* @returns Object with counts by severity
|
|
587
|
+
*/
|
|
588
|
+
export function getSeveritySummary(violations) {
|
|
589
|
+
const summary = {
|
|
590
|
+
error: 0,
|
|
591
|
+
warning: 0,
|
|
592
|
+
info: 0,
|
|
593
|
+
hint: 0,
|
|
594
|
+
};
|
|
595
|
+
for (const violation of violations) {
|
|
596
|
+
summary[violation.severity]++;
|
|
597
|
+
}
|
|
598
|
+
return summary;
|
|
599
|
+
}
|
|
600
|
+
/**
|
|
601
|
+
* Create a SeverityManager with default configuration.
|
|
602
|
+
*
|
|
603
|
+
* @returns New SeverityManager instance with defaults
|
|
604
|
+
*/
|
|
605
|
+
export function createSeverityManager() {
|
|
606
|
+
return new SeverityManager();
|
|
607
|
+
}
|
|
608
|
+
/**
|
|
609
|
+
* Create a SeverityManager from DriftConfig severity settings.
|
|
610
|
+
*
|
|
611
|
+
* @param severityOverrides - Severity overrides from config
|
|
612
|
+
* @returns New SeverityManager instance
|
|
613
|
+
*/
|
|
614
|
+
export function createSeverityManagerFromConfig(severityOverrides) {
|
|
615
|
+
return new SeverityManager({
|
|
616
|
+
patternOverrides: severityOverrides || {},
|
|
617
|
+
});
|
|
618
|
+
}
|
|
619
|
+
//# sourceMappingURL=severity-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"severity-manager.js","sourceRoot":"","sources":["../../src/rules/severity-manager.ts"],"names":[],"mappings":"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"}
|