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,388 @@
1
+ /**
2
+ * Variant Manager - Manages intentional deviations from patterns
3
+ *
4
+ * Variants allow developers to mark code as intentionally deviating from
5
+ * established patterns. Once a variant is created, the enforcement system
6
+ * will stop flagging matching code.
7
+ *
8
+ * @requirements 26.1 - THE Variant_System SHALL allow creating named variants of patterns
9
+ * @requirements 26.2 - THE Variant SHALL specify scope: global, directory, or file
10
+ * @requirements 26.3 - THE Variant SHALL include a reason explaining why it's intentional
11
+ * @requirements 26.5 - THE Variant_System SHALL store variants in .drift/patterns/variants/
12
+ */
13
+ import { EventEmitter } from 'node:events';
14
+ import type { PatternVariant, VariantScope, PatternLocation } from '../store/types.js';
15
+ /**
16
+ * Input for creating a new variant
17
+ *
18
+ * @requirements 26.1 - Create named variants
19
+ * @requirements 26.2 - Specify scope
20
+ * @requirements 26.3 - Include reason
21
+ */
22
+ export interface CreateVariantInput {
23
+ /** Pattern ID this variant applies to */
24
+ patternId: string;
25
+ /** Human-readable name for the variant */
26
+ name: string;
27
+ /** Reason explaining why this deviation is intentional */
28
+ reason: string;
29
+ /** Scope of the variant */
30
+ scope: VariantScope;
31
+ /** Scope value (directory path or file path, depending on scope) */
32
+ scopeValue?: string;
33
+ /** Locations covered by this variant */
34
+ locations: PatternLocation[];
35
+ /** User who created the variant (optional) */
36
+ createdBy?: string;
37
+ /** Description of the variant (optional) */
38
+ description?: string;
39
+ }
40
+ /**
41
+ * Input for updating an existing variant
42
+ */
43
+ export interface UpdateVariantInput {
44
+ /** Human-readable name for the variant */
45
+ name?: string;
46
+ /** Reason explaining why this deviation is intentional */
47
+ reason?: string;
48
+ /** Scope of the variant */
49
+ scope?: VariantScope;
50
+ /** Scope value (directory path or file path, depending on scope) */
51
+ scopeValue?: string;
52
+ /** Locations covered by this variant */
53
+ locations?: PatternLocation[];
54
+ /** Whether the variant is active */
55
+ active?: boolean;
56
+ }
57
+ /**
58
+ * Query options for filtering variants
59
+ */
60
+ export interface VariantQuery {
61
+ /** Filter by pattern ID */
62
+ patternId?: string;
63
+ /** Filter by pattern IDs */
64
+ patternIds?: string[];
65
+ /** Filter by scope */
66
+ scope?: VariantScope | VariantScope[];
67
+ /** Filter by active status */
68
+ active?: boolean;
69
+ /** Filter by file path (variants that cover this file) */
70
+ file?: string;
71
+ /** Filter by directory path (variants that cover this directory) */
72
+ directory?: string;
73
+ /** Search in name and reason */
74
+ search?: string;
75
+ /** Filter by creator */
76
+ createdBy?: string;
77
+ }
78
+ /**
79
+ * Configuration options for the variant manager
80
+ */
81
+ export interface VariantManagerConfig {
82
+ /** Root directory for .drift folder (defaults to project root) */
83
+ rootDir: string;
84
+ /** Whether to auto-save changes */
85
+ autoSave: boolean;
86
+ /** Debounce time for auto-save in milliseconds */
87
+ autoSaveDebounce: number;
88
+ /** Whether to create backup before save */
89
+ createBackup: boolean;
90
+ /** Maximum number of backups to keep */
91
+ maxBackups: number;
92
+ }
93
+ /**
94
+ * Default variant manager configuration
95
+ */
96
+ export declare const DEFAULT_VARIANT_MANAGER_CONFIG: VariantManagerConfig;
97
+ /**
98
+ * Events emitted by the variant manager
99
+ */
100
+ export type VariantManagerEventType = 'variant:created' | 'variant:updated' | 'variant:deleted' | 'variant:activated' | 'variant:deactivated' | 'file:loaded' | 'file:saved' | 'error';
101
+ /**
102
+ * Event payload for variant manager events
103
+ */
104
+ export interface VariantManagerEvent {
105
+ /** Event type */
106
+ type: VariantManagerEventType;
107
+ /** Variant ID (if applicable) */
108
+ variantId?: string;
109
+ /** Pattern ID (if applicable) */
110
+ patternId?: string;
111
+ /** Additional event data */
112
+ data?: Record<string, unknown>;
113
+ /** ISO timestamp of the event */
114
+ timestamp: string;
115
+ }
116
+ /**
117
+ * Error thrown when a variant is not found
118
+ */
119
+ export declare class VariantNotFoundError extends Error {
120
+ readonly variantId: string;
121
+ constructor(variantId: string);
122
+ }
123
+ /**
124
+ * Error thrown when a variant operation fails
125
+ */
126
+ export declare class VariantManagerError extends Error {
127
+ readonly errorCause: Error | undefined;
128
+ constructor(message: string, errorCause?: Error);
129
+ }
130
+ /**
131
+ * Error thrown when variant input is invalid
132
+ */
133
+ export declare class InvalidVariantInputError extends Error {
134
+ readonly field?: string | undefined;
135
+ constructor(message: string, field?: string | undefined);
136
+ }
137
+ /**
138
+ * Variant Manager - Manages intentional deviations from patterns
139
+ *
140
+ * Variants are stored in .drift/patterns/variants/ directory.
141
+ * Each variant specifies a scope (global, directory, or file) and
142
+ * includes a reason explaining why the deviation is intentional.
143
+ *
144
+ * @requirements 26.1 - Create named variants of patterns
145
+ * @requirements 26.2 - Variants specify scope: global, directory, or file
146
+ * @requirements 26.3 - Variants include reason for deviation
147
+ * @requirements 26.5 - Variants stored in .drift/patterns/variants/
148
+ */
149
+ export declare class VariantManager extends EventEmitter {
150
+ private readonly config;
151
+ private readonly variantsDir;
152
+ private variants;
153
+ private loaded;
154
+ private dirty;
155
+ private saveTimeout;
156
+ constructor(config?: Partial<VariantManagerConfig>);
157
+ /**
158
+ * Initialize the variant manager
159
+ *
160
+ * Creates necessary directories and loads existing variants.
161
+ */
162
+ initialize(): Promise<void>;
163
+ /**
164
+ * Ensure the directory structure exists
165
+ *
166
+ * @requirements 26.5 - Store variants in .drift/patterns/variants/
167
+ */
168
+ private ensureDirectoryStructure;
169
+ /**
170
+ * Check if the manager is initialized
171
+ */
172
+ isInitialized(): boolean;
173
+ /**
174
+ * Load all variants from disk
175
+ *
176
+ * @requirements 26.5 - Load variants from .drift/patterns/variants/
177
+ */
178
+ loadAll(): Promise<void>;
179
+ /**
180
+ * Save all variants to disk
181
+ *
182
+ * @requirements 26.5 - Persist variants in .drift/patterns/variants/
183
+ */
184
+ saveAll(): Promise<void>;
185
+ /**
186
+ * Create a backup of a file
187
+ */
188
+ private createBackup;
189
+ /**
190
+ * Clean up old backups, keeping only the most recent ones
191
+ */
192
+ private cleanupBackups;
193
+ /**
194
+ * Schedule an auto-save if enabled
195
+ */
196
+ private scheduleAutoSave;
197
+ /**
198
+ * Create a new variant
199
+ *
200
+ * @requirements 26.1 - Create named variants of patterns
201
+ * @requirements 26.2 - Specify scope: global, directory, or file
202
+ * @requirements 26.3 - Include reason explaining why it's intentional
203
+ *
204
+ * @param input - Variant creation input
205
+ * @returns The created variant
206
+ */
207
+ create(input: CreateVariantInput): PatternVariant;
208
+ /**
209
+ * Validate create input
210
+ */
211
+ private validateCreateInput;
212
+ /**
213
+ * Get a variant by ID
214
+ *
215
+ * @param id - Variant ID
216
+ * @returns The variant or undefined if not found
217
+ */
218
+ get(id: string): PatternVariant | undefined;
219
+ /**
220
+ * Get a variant by ID, throwing if not found
221
+ *
222
+ * @param id - Variant ID
223
+ * @returns The variant
224
+ * @throws VariantNotFoundError if variant not found
225
+ */
226
+ getOrThrow(id: string): PatternVariant;
227
+ /**
228
+ * Check if a variant exists
229
+ *
230
+ * @param id - Variant ID
231
+ * @returns True if variant exists
232
+ */
233
+ has(id: string): boolean;
234
+ /**
235
+ * Update an existing variant
236
+ *
237
+ * @param id - Variant ID
238
+ * @param updates - Partial variant updates
239
+ * @returns The updated variant
240
+ * @throws VariantNotFoundError if variant not found
241
+ */
242
+ update(id: string, updates: UpdateVariantInput): PatternVariant;
243
+ /**
244
+ * Delete a variant
245
+ *
246
+ * @param id - Variant ID
247
+ * @returns True if variant was deleted
248
+ */
249
+ delete(id: string): boolean;
250
+ /**
251
+ * Activate a variant
252
+ *
253
+ * @param id - Variant ID
254
+ * @returns The updated variant
255
+ */
256
+ activate(id: string): PatternVariant;
257
+ /**
258
+ * Deactivate a variant
259
+ *
260
+ * @param id - Variant ID
261
+ * @returns The updated variant
262
+ */
263
+ deactivate(id: string): PatternVariant;
264
+ /**
265
+ * Query variants with filtering
266
+ *
267
+ * @param query - Query options
268
+ * @returns Matching variants
269
+ */
270
+ query(query?: VariantQuery): PatternVariant[];
271
+ /**
272
+ * Check if a variant covers a specific file
273
+ */
274
+ private variantCoversFile;
275
+ /**
276
+ * Check if a variant covers a specific directory
277
+ */
278
+ private variantCoversDirectory;
279
+ /**
280
+ * Get all variants
281
+ */
282
+ getAll(): PatternVariant[];
283
+ /**
284
+ * Get all active variants
285
+ */
286
+ getActive(): PatternVariant[];
287
+ /**
288
+ * Get all inactive variants
289
+ */
290
+ getInactive(): PatternVariant[];
291
+ /**
292
+ * Get variants for a specific pattern
293
+ *
294
+ * @param patternId - Pattern ID
295
+ * @returns Variants for the pattern
296
+ */
297
+ getByPatternId(patternId: string): PatternVariant[];
298
+ /**
299
+ * Get active variants for a specific pattern
300
+ *
301
+ * @param patternId - Pattern ID
302
+ * @returns Active variants for the pattern
303
+ */
304
+ getActiveByPatternId(patternId: string): PatternVariant[];
305
+ /**
306
+ * Get variants by scope
307
+ *
308
+ * @param scope - Variant scope
309
+ * @returns Variants with the specified scope
310
+ */
311
+ getByScope(scope: VariantScope): PatternVariant[];
312
+ /**
313
+ * Get variants that cover a specific file
314
+ *
315
+ * @param filePath - File path
316
+ * @returns Variants that cover the file
317
+ */
318
+ getByFile(filePath: string): PatternVariant[];
319
+ /**
320
+ * Get active variants that cover a specific file
321
+ *
322
+ * @param filePath - File path
323
+ * @returns Active variants that cover the file
324
+ */
325
+ getActiveByFile(filePath: string): PatternVariant[];
326
+ /**
327
+ * Check if a location is covered by any active variant for a pattern
328
+ *
329
+ * This is the primary method used by the enforcement system to determine
330
+ * if a violation should be suppressed.
331
+ *
332
+ * @requirements 26.4 - WHEN a variant is created, THE Enforcement_System SHALL stop flagging matching code
333
+ *
334
+ * @param patternId - Pattern ID
335
+ * @param location - Location to check
336
+ * @returns True if the location is covered by an active variant
337
+ */
338
+ isLocationCovered(patternId: string, location: PatternLocation): boolean;
339
+ /**
340
+ * Check if a variant covers a specific location
341
+ *
342
+ * A variant covers a location if:
343
+ * 1. The file is within the variant's scope (global, directory, or file)
344
+ * 2. AND either:
345
+ * a. The variant has only one location (the "anchor" location used for validation)
346
+ * which means it covers the entire scope
347
+ * b. The variant has multiple locations that include this specific location
348
+ */
349
+ private variantCoversLocation;
350
+ /**
351
+ * Get the variant that covers a specific location (if any)
352
+ *
353
+ * @param patternId - Pattern ID
354
+ * @param location - Location to check
355
+ * @returns The covering variant or undefined
356
+ */
357
+ getCoveringVariant(patternId: string, location: PatternLocation): PatternVariant | undefined;
358
+ /**
359
+ * Get statistics about variants
360
+ */
361
+ getStats(): VariantStats;
362
+ /**
363
+ * Emit a variant manager event
364
+ */
365
+ private emitEvent;
366
+ /**
367
+ * Clean up resources
368
+ */
369
+ dispose(): void;
370
+ }
371
+ /**
372
+ * Statistics about variants
373
+ */
374
+ export interface VariantStats {
375
+ /** Total number of variants */
376
+ total: number;
377
+ /** Number of active variants */
378
+ active: number;
379
+ /** Number of inactive variants */
380
+ inactive: number;
381
+ /** Variants by scope */
382
+ byScope: Record<VariantScope, number>;
383
+ /** Variants by pattern ID */
384
+ byPattern: Record<string, number>;
385
+ /** Number of patterns with variants */
386
+ patternsWithVariants: number;
387
+ }
388
+ //# sourceMappingURL=variant-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"variant-manager.d.ts","sourceRoot":"","sources":["../../src/rules/variant-manager.ts"],"names":[],"mappings":"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"}