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,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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"}
|