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.
Files changed (221) hide show
  1. package/dist/analyzers/ast-analyzer.d.ts +251 -0
  2. package/dist/analyzers/ast-analyzer.d.ts.map +1 -0
  3. package/dist/analyzers/ast-analyzer.js +548 -0
  4. package/dist/analyzers/ast-analyzer.js.map +1 -0
  5. package/dist/analyzers/flow-analyzer.d.ts +241 -0
  6. package/dist/analyzers/flow-analyzer.d.ts.map +1 -0
  7. package/dist/analyzers/flow-analyzer.js +1219 -0
  8. package/dist/analyzers/flow-analyzer.js.map +1 -0
  9. package/dist/analyzers/index.d.ts +18 -0
  10. package/dist/analyzers/index.d.ts.map +1 -0
  11. package/dist/analyzers/index.js +19 -0
  12. package/dist/analyzers/index.js.map +1 -0
  13. package/dist/analyzers/semantic-analyzer.d.ts +252 -0
  14. package/dist/analyzers/semantic-analyzer.d.ts.map +1 -0
  15. package/dist/analyzers/semantic-analyzer.js +1182 -0
  16. package/dist/analyzers/semantic-analyzer.js.map +1 -0
  17. package/dist/analyzers/type-analyzer.d.ts +289 -0
  18. package/dist/analyzers/type-analyzer.d.ts.map +1 -0
  19. package/dist/analyzers/type-analyzer.js +1269 -0
  20. package/dist/analyzers/type-analyzer.js.map +1 -0
  21. package/dist/analyzers/types.d.ts +537 -0
  22. package/dist/analyzers/types.d.ts.map +1 -0
  23. package/dist/analyzers/types.js +11 -0
  24. package/dist/analyzers/types.js.map +1 -0
  25. package/dist/config/config-loader.d.ts +166 -0
  26. package/dist/config/config-loader.d.ts.map +1 -0
  27. package/dist/config/config-loader.js +429 -0
  28. package/dist/config/config-loader.js.map +1 -0
  29. package/dist/config/config-validator.d.ts +204 -0
  30. package/dist/config/config-validator.d.ts.map +1 -0
  31. package/dist/config/config-validator.js +632 -0
  32. package/dist/config/config-validator.js.map +1 -0
  33. package/dist/config/defaults.d.ts +8 -0
  34. package/dist/config/defaults.d.ts.map +1 -0
  35. package/dist/config/defaults.js +26 -0
  36. package/dist/config/defaults.js.map +1 -0
  37. package/dist/config/index.d.ts +10 -0
  38. package/dist/config/index.d.ts.map +1 -0
  39. package/dist/config/index.js +10 -0
  40. package/dist/config/index.js.map +1 -0
  41. package/dist/config/types.d.ts +47 -0
  42. package/dist/config/types.d.ts.map +1 -0
  43. package/dist/config/types.js +7 -0
  44. package/dist/config/types.js.map +1 -0
  45. package/dist/index.d.ts +37 -0
  46. package/dist/index.d.ts.map +1 -0
  47. package/dist/index.js +39 -0
  48. package/dist/index.js.map +1 -0
  49. package/dist/manifest/exporter.d.ts +21 -0
  50. package/dist/manifest/exporter.d.ts.map +1 -0
  51. package/dist/manifest/exporter.js +339 -0
  52. package/dist/manifest/exporter.js.map +1 -0
  53. package/dist/manifest/index.d.ts +14 -0
  54. package/dist/manifest/index.d.ts.map +1 -0
  55. package/dist/manifest/index.js +15 -0
  56. package/dist/manifest/index.js.map +1 -0
  57. package/dist/manifest/manifest-store.d.ts +111 -0
  58. package/dist/manifest/manifest-store.d.ts.map +1 -0
  59. package/dist/manifest/manifest-store.js +418 -0
  60. package/dist/manifest/manifest-store.js.map +1 -0
  61. package/dist/manifest/types.d.ts +238 -0
  62. package/dist/manifest/types.d.ts.map +1 -0
  63. package/dist/manifest/types.js +11 -0
  64. package/dist/manifest/types.js.map +1 -0
  65. package/dist/matcher/confidence-scorer.d.ts +188 -0
  66. package/dist/matcher/confidence-scorer.d.ts.map +1 -0
  67. package/dist/matcher/confidence-scorer.js +302 -0
  68. package/dist/matcher/confidence-scorer.js.map +1 -0
  69. package/dist/matcher/index.d.ts +24 -0
  70. package/dist/matcher/index.d.ts.map +1 -0
  71. package/dist/matcher/index.js +26 -0
  72. package/dist/matcher/index.js.map +1 -0
  73. package/dist/matcher/outlier-detector.d.ts +252 -0
  74. package/dist/matcher/outlier-detector.d.ts.map +1 -0
  75. package/dist/matcher/outlier-detector.js +544 -0
  76. package/dist/matcher/outlier-detector.js.map +1 -0
  77. package/dist/matcher/pattern-matcher.d.ts +169 -0
  78. package/dist/matcher/pattern-matcher.d.ts.map +1 -0
  79. package/dist/matcher/pattern-matcher.js +692 -0
  80. package/dist/matcher/pattern-matcher.js.map +1 -0
  81. package/dist/matcher/types.d.ts +476 -0
  82. package/dist/matcher/types.d.ts.map +1 -0
  83. package/dist/matcher/types.js +36 -0
  84. package/dist/matcher/types.js.map +1 -0
  85. package/dist/parsers/base-parser.d.ts +282 -0
  86. package/dist/parsers/base-parser.d.ts.map +1 -0
  87. package/dist/parsers/base-parser.js +421 -0
  88. package/dist/parsers/base-parser.js.map +1 -0
  89. package/dist/parsers/css-parser.d.ts +225 -0
  90. package/dist/parsers/css-parser.d.ts.map +1 -0
  91. package/dist/parsers/css-parser.js +477 -0
  92. package/dist/parsers/css-parser.js.map +1 -0
  93. package/dist/parsers/index.d.ts +15 -0
  94. package/dist/parsers/index.d.ts.map +1 -0
  95. package/dist/parsers/index.js +15 -0
  96. package/dist/parsers/index.js.map +1 -0
  97. package/dist/parsers/json-parser.d.ts +219 -0
  98. package/dist/parsers/json-parser.d.ts.map +1 -0
  99. package/dist/parsers/json-parser.js +602 -0
  100. package/dist/parsers/json-parser.js.map +1 -0
  101. package/dist/parsers/markdown-parser.d.ts +276 -0
  102. package/dist/parsers/markdown-parser.d.ts.map +1 -0
  103. package/dist/parsers/markdown-parser.js +731 -0
  104. package/dist/parsers/markdown-parser.js.map +1 -0
  105. package/dist/parsers/parser-manager.d.ts +294 -0
  106. package/dist/parsers/parser-manager.d.ts.map +1 -0
  107. package/dist/parsers/parser-manager.js +738 -0
  108. package/dist/parsers/parser-manager.js.map +1 -0
  109. package/dist/parsers/python-parser.d.ts +204 -0
  110. package/dist/parsers/python-parser.d.ts.map +1 -0
  111. package/dist/parsers/python-parser.js +517 -0
  112. package/dist/parsers/python-parser.js.map +1 -0
  113. package/dist/parsers/types.d.ts +43 -0
  114. package/dist/parsers/types.d.ts.map +1 -0
  115. package/dist/parsers/types.js +7 -0
  116. package/dist/parsers/types.js.map +1 -0
  117. package/dist/parsers/typescript-parser.d.ts +264 -0
  118. package/dist/parsers/typescript-parser.d.ts.map +1 -0
  119. package/dist/parsers/typescript-parser.js +658 -0
  120. package/dist/parsers/typescript-parser.js.map +1 -0
  121. package/dist/rules/evaluator.d.ts +305 -0
  122. package/dist/rules/evaluator.d.ts.map +1 -0
  123. package/dist/rules/evaluator.js +579 -0
  124. package/dist/rules/evaluator.js.map +1 -0
  125. package/dist/rules/index.d.ts +13 -0
  126. package/dist/rules/index.d.ts.map +1 -0
  127. package/dist/rules/index.js +13 -0
  128. package/dist/rules/index.js.map +1 -0
  129. package/dist/rules/quick-fix-generator.d.ts +334 -0
  130. package/dist/rules/quick-fix-generator.d.ts.map +1 -0
  131. package/dist/rules/quick-fix-generator.js +1075 -0
  132. package/dist/rules/quick-fix-generator.js.map +1 -0
  133. package/dist/rules/rule-engine.d.ts +241 -0
  134. package/dist/rules/rule-engine.d.ts.map +1 -0
  135. package/dist/rules/rule-engine.js +585 -0
  136. package/dist/rules/rule-engine.js.map +1 -0
  137. package/dist/rules/severity-manager.d.ts +394 -0
  138. package/dist/rules/severity-manager.d.ts.map +1 -0
  139. package/dist/rules/severity-manager.js +619 -0
  140. package/dist/rules/severity-manager.js.map +1 -0
  141. package/dist/rules/types.d.ts +370 -0
  142. package/dist/rules/types.d.ts.map +1 -0
  143. package/dist/rules/types.js +133 -0
  144. package/dist/rules/types.js.map +1 -0
  145. package/dist/rules/variant-manager.d.ts +388 -0
  146. package/dist/rules/variant-manager.d.ts.map +1 -0
  147. package/dist/rules/variant-manager.js +777 -0
  148. package/dist/rules/variant-manager.js.map +1 -0
  149. package/dist/scanner/change-detector.d.ts +164 -0
  150. package/dist/scanner/change-detector.d.ts.map +1 -0
  151. package/dist/scanner/change-detector.js +263 -0
  152. package/dist/scanner/change-detector.js.map +1 -0
  153. package/dist/scanner/dependency-graph.d.ts +270 -0
  154. package/dist/scanner/dependency-graph.d.ts.map +1 -0
  155. package/dist/scanner/dependency-graph.js +436 -0
  156. package/dist/scanner/dependency-graph.js.map +1 -0
  157. package/dist/scanner/file-walker.d.ts +127 -0
  158. package/dist/scanner/file-walker.d.ts.map +1 -0
  159. package/dist/scanner/file-walker.js +526 -0
  160. package/dist/scanner/file-walker.js.map +1 -0
  161. package/dist/scanner/index.d.ts +12 -0
  162. package/dist/scanner/index.d.ts.map +1 -0
  163. package/dist/scanner/index.js +12 -0
  164. package/dist/scanner/index.js.map +1 -0
  165. package/dist/scanner/types.d.ts +218 -0
  166. package/dist/scanner/types.d.ts.map +1 -0
  167. package/dist/scanner/types.js +10 -0
  168. package/dist/scanner/types.js.map +1 -0
  169. package/dist/scanner/worker-pool.d.ts +317 -0
  170. package/dist/scanner/worker-pool.d.ts.map +1 -0
  171. package/dist/scanner/worker-pool.js +571 -0
  172. package/dist/scanner/worker-pool.js.map +1 -0
  173. package/dist/store/cache-manager.d.ts +179 -0
  174. package/dist/store/cache-manager.d.ts.map +1 -0
  175. package/dist/store/cache-manager.js +391 -0
  176. package/dist/store/cache-manager.js.map +1 -0
  177. package/dist/store/history-store.d.ts +314 -0
  178. package/dist/store/history-store.d.ts.map +1 -0
  179. package/dist/store/history-store.js +707 -0
  180. package/dist/store/history-store.js.map +1 -0
  181. package/dist/store/index.d.ts +20 -0
  182. package/dist/store/index.d.ts.map +1 -0
  183. package/dist/store/index.js +26 -0
  184. package/dist/store/index.js.map +1 -0
  185. package/dist/store/lock-file-manager.d.ts +202 -0
  186. package/dist/store/lock-file-manager.d.ts.map +1 -0
  187. package/dist/store/lock-file-manager.js +475 -0
  188. package/dist/store/lock-file-manager.js.map +1 -0
  189. package/dist/store/pattern-store.d.ts +289 -0
  190. package/dist/store/pattern-store.d.ts.map +1 -0
  191. package/dist/store/pattern-store.js +936 -0
  192. package/dist/store/pattern-store.js.map +1 -0
  193. package/dist/store/schema-validator.d.ts +159 -0
  194. package/dist/store/schema-validator.d.ts.map +1 -0
  195. package/dist/store/schema-validator.js +1096 -0
  196. package/dist/store/schema-validator.js.map +1 -0
  197. package/dist/store/types.d.ts +585 -0
  198. package/dist/store/types.d.ts.map +1 -0
  199. package/dist/store/types.js +82 -0
  200. package/dist/store/types.js.map +1 -0
  201. package/dist/types/analysis.d.ts +19 -0
  202. package/dist/types/analysis.d.ts.map +1 -0
  203. package/dist/types/analysis.js +5 -0
  204. package/dist/types/analysis.js.map +1 -0
  205. package/dist/types/common.d.ts +7 -0
  206. package/dist/types/common.d.ts.map +1 -0
  207. package/dist/types/common.js +5 -0
  208. package/dist/types/common.js.map +1 -0
  209. package/dist/types/index.d.ts +12 -0
  210. package/dist/types/index.d.ts.map +1 -0
  211. package/dist/types/index.js +10 -0
  212. package/dist/types/index.js.map +1 -0
  213. package/dist/types/patterns.d.ts +40 -0
  214. package/dist/types/patterns.d.ts.map +1 -0
  215. package/dist/types/patterns.js +7 -0
  216. package/dist/types/patterns.js.map +1 -0
  217. package/dist/types/violations.d.ts +7 -0
  218. package/dist/types/violations.d.ts.map +1 -0
  219. package/dist/types/violations.js +7 -0
  220. package/dist/types/violations.js.map +1 -0
  221. 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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"}