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,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config Loader - Configuration loading and merging
|
|
3
|
+
*
|
|
4
|
+
* Loads configuration from .drift/config.json and merges with defaults.
|
|
5
|
+
* Supports environment variable overrides and handles missing config gracefully.
|
|
6
|
+
*
|
|
7
|
+
* @requirements 36.1 - THE Config_System SHALL read from .drift/config.json
|
|
8
|
+
* @requirements 36.2 - THE Config_System SHALL support severity overrides per pattern
|
|
9
|
+
* @requirements 36.3 - THE Config_System SHALL support ignore patterns for files/folders
|
|
10
|
+
* @requirements 36.4 - THE Config_System SHALL support AI provider configuration
|
|
11
|
+
* @requirements 36.5 - THE Config_System SHALL support CI mode settings
|
|
12
|
+
*/
|
|
13
|
+
import type { DriftConfig } from './types.js';
|
|
14
|
+
/**
|
|
15
|
+
* Error thrown when configuration loading fails
|
|
16
|
+
*/
|
|
17
|
+
export declare class ConfigLoadError extends Error {
|
|
18
|
+
readonly filePath: string;
|
|
19
|
+
readonly errorCause: Error | undefined;
|
|
20
|
+
constructor(message: string, filePath: string, errorCause?: Error | undefined);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Error thrown when configuration parsing fails
|
|
24
|
+
*/
|
|
25
|
+
export declare class ConfigParseError extends Error {
|
|
26
|
+
readonly filePath: string;
|
|
27
|
+
readonly errorCause: Error | undefined;
|
|
28
|
+
constructor(message: string, filePath: string, errorCause?: Error | undefined);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Configuration loader options
|
|
32
|
+
*/
|
|
33
|
+
export interface ConfigLoaderOptions {
|
|
34
|
+
/** Root directory to search for .drift/config.json */
|
|
35
|
+
rootDir?: string | undefined;
|
|
36
|
+
/** Whether to apply environment variable overrides */
|
|
37
|
+
applyEnvOverrides?: boolean | undefined;
|
|
38
|
+
/** Whether to validate the loaded configuration */
|
|
39
|
+
validate?: boolean | undefined;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Result of loading configuration
|
|
43
|
+
*/
|
|
44
|
+
export interface ConfigLoadResult {
|
|
45
|
+
/** The loaded and merged configuration */
|
|
46
|
+
config: DriftConfig;
|
|
47
|
+
/** Path to the config file (if found) */
|
|
48
|
+
configPath?: string | undefined;
|
|
49
|
+
/** Whether the config file was found */
|
|
50
|
+
configFileFound: boolean;
|
|
51
|
+
/** Whether environment overrides were applied */
|
|
52
|
+
envOverridesApplied: boolean;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* ConfigLoader - Loads and manages Drift configuration
|
|
56
|
+
*
|
|
57
|
+
* Handles loading configuration from .drift/config.json, merging with defaults,
|
|
58
|
+
* and applying environment variable overrides.
|
|
59
|
+
*
|
|
60
|
+
* @requirements 36.1 - Read from .drift/config.json
|
|
61
|
+
* @requirements 36.2 - Support severity overrides per pattern
|
|
62
|
+
* @requirements 36.3 - Support ignore patterns for files/folders
|
|
63
|
+
* @requirements 36.4 - Support AI provider configuration
|
|
64
|
+
* @requirements 36.5 - Support CI mode settings
|
|
65
|
+
*/
|
|
66
|
+
export declare class ConfigLoader {
|
|
67
|
+
private readonly rootDir;
|
|
68
|
+
private readonly applyEnvOverrides;
|
|
69
|
+
private cachedConfig;
|
|
70
|
+
private configPath;
|
|
71
|
+
constructor(options?: ConfigLoaderOptions);
|
|
72
|
+
/**
|
|
73
|
+
* Load configuration from file, merge with defaults, and apply env overrides
|
|
74
|
+
*
|
|
75
|
+
* @requirements 36.1 - Read from .drift/config.json
|
|
76
|
+
*
|
|
77
|
+
* @returns The loaded configuration result
|
|
78
|
+
*/
|
|
79
|
+
load(): Promise<ConfigLoadResult>;
|
|
80
|
+
/**
|
|
81
|
+
* Get the cached configuration, loading if necessary
|
|
82
|
+
*
|
|
83
|
+
* @returns The configuration
|
|
84
|
+
*/
|
|
85
|
+
getConfig(): Promise<DriftConfig>;
|
|
86
|
+
/**
|
|
87
|
+
* Reload configuration from disk
|
|
88
|
+
*
|
|
89
|
+
* @returns The reloaded configuration result
|
|
90
|
+
*/
|
|
91
|
+
reload(): Promise<ConfigLoadResult>;
|
|
92
|
+
/**
|
|
93
|
+
* Check if a config file exists
|
|
94
|
+
*
|
|
95
|
+
* @returns True if config file exists
|
|
96
|
+
*/
|
|
97
|
+
configFileExists(): Promise<boolean>;
|
|
98
|
+
/**
|
|
99
|
+
* Get the path to the config file
|
|
100
|
+
*
|
|
101
|
+
* @returns The config file path
|
|
102
|
+
*/
|
|
103
|
+
getConfigPath(): string;
|
|
104
|
+
/**
|
|
105
|
+
* Save configuration to file
|
|
106
|
+
*
|
|
107
|
+
* @param config - Configuration to save
|
|
108
|
+
*/
|
|
109
|
+
save(config: DriftConfig): Promise<void>;
|
|
110
|
+
/**
|
|
111
|
+
* Clear the cached configuration
|
|
112
|
+
*/
|
|
113
|
+
clearCache(): void;
|
|
114
|
+
/**
|
|
115
|
+
* Load configuration from a JSON file
|
|
116
|
+
*
|
|
117
|
+
* @param filePath - Path to the config file
|
|
118
|
+
* @returns The parsed configuration
|
|
119
|
+
*/
|
|
120
|
+
private loadFromFile;
|
|
121
|
+
/**
|
|
122
|
+
* Merge loaded configuration with defaults
|
|
123
|
+
*
|
|
124
|
+
* @param loaded - Loaded configuration
|
|
125
|
+
* @param base - Base configuration (defaults to DEFAULT_CONFIG)
|
|
126
|
+
* @returns Merged configuration
|
|
127
|
+
*/
|
|
128
|
+
private mergeWithDefaults;
|
|
129
|
+
/**
|
|
130
|
+
* Get configuration overrides from environment variables
|
|
131
|
+
*
|
|
132
|
+
* @returns Configuration overrides from environment
|
|
133
|
+
*/
|
|
134
|
+
private getEnvOverrides;
|
|
135
|
+
/**
|
|
136
|
+
* Get AI configuration overrides from environment
|
|
137
|
+
*/
|
|
138
|
+
private getAIEnvOverrides;
|
|
139
|
+
/**
|
|
140
|
+
* Get CI configuration overrides from environment
|
|
141
|
+
*/
|
|
142
|
+
private getCIEnvOverrides;
|
|
143
|
+
/**
|
|
144
|
+
* Get performance configuration overrides from environment
|
|
145
|
+
*/
|
|
146
|
+
private getPerformanceEnvOverrides;
|
|
147
|
+
/**
|
|
148
|
+
* Get learning configuration overrides from environment
|
|
149
|
+
*/
|
|
150
|
+
private getLearningEnvOverrides;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Load configuration with default options
|
|
154
|
+
*
|
|
155
|
+
* @param rootDir - Root directory to search for config
|
|
156
|
+
* @returns The loaded configuration
|
|
157
|
+
*/
|
|
158
|
+
export declare function loadConfig(rootDir?: string): Promise<DriftConfig>;
|
|
159
|
+
/**
|
|
160
|
+
* Load configuration and return full result
|
|
161
|
+
*
|
|
162
|
+
* @param rootDir - Root directory to search for config
|
|
163
|
+
* @returns The configuration load result
|
|
164
|
+
*/
|
|
165
|
+
export declare function loadConfigWithResult(rootDir?: string): Promise<ConfigLoadResult>;
|
|
166
|
+
//# sourceMappingURL=config-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../src/config/config-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,KAAK,EACV,WAAW,EAKZ,MAAM,YAAY,CAAC;AAwCpB;;GAEG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IACxC,SAAgB,QAAQ,EAAE,MAAM,CAAC;IACjC,SAAgB,UAAU,EAAE,KAAK,GAAG,SAAS,CAAC;gBAG5C,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,KAAK,GAAG,SAAS;CAOjC;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,SAAgB,QAAQ,EAAE,MAAM,CAAC;IACjC,SAAgB,UAAU,EAAE,KAAK,GAAG,SAAS,CAAC;gBAG5C,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,KAAK,GAAG,SAAS;CAOjC;AA2FD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,sDAAsD;IACtD,iBAAiB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACxC,mDAAmD;IACnD,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,0CAA0C;IAC1C,MAAM,EAAE,WAAW,CAAC;IACpB,yCAAyC;IACzC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,wCAAwC;IACxC,eAAe,EAAE,OAAO,CAAC;IACzB,iDAAiD;IACjD,mBAAmB,EAAE,OAAO,CAAC;CAC9B;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAU;IAC5C,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,UAAU,CAAS;gBAEf,OAAO,GAAE,mBAAwB;IAU7C;;;;;;OAMG;IACG,IAAI,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAiCvC;;;;OAIG;IACG,SAAS,IAAI,OAAO,CAAC,WAAW,CAAC;IAQvC;;;;OAIG;IACG,MAAM,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAKzC;;;;OAIG;IACG,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC;IAI1C;;;;OAIG;IACH,aAAa,IAAI,MAAM;IAIvB;;;;OAIG;IACG,IAAI,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB9C;;OAEG;IACH,UAAU,IAAI,IAAI;IAQlB;;;;;OAKG;YACW,YAAY;IAqC1B;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;IAOzB;;;;OAIG;IACH,OAAO,CAAC,eAAe;IA8BvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAgBzB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAgBzB;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAqBlC;;OAEG;IACH,OAAO,CAAC,uBAAuB;CAehC;AAMD;;;;;GAKG;AACH,wBAAsB,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAQvE;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAOtF"}
|
|
@@ -0,0 +1,429 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config Loader - Configuration loading and merging
|
|
3
|
+
*
|
|
4
|
+
* Loads configuration from .drift/config.json and merges with defaults.
|
|
5
|
+
* Supports environment variable overrides and handles missing config gracefully.
|
|
6
|
+
*
|
|
7
|
+
* @requirements 36.1 - THE Config_System SHALL read from .drift/config.json
|
|
8
|
+
* @requirements 36.2 - THE Config_System SHALL support severity overrides per pattern
|
|
9
|
+
* @requirements 36.3 - THE Config_System SHALL support ignore patterns for files/folders
|
|
10
|
+
* @requirements 36.4 - THE Config_System SHALL support AI provider configuration
|
|
11
|
+
* @requirements 36.5 - THE Config_System SHALL support CI mode settings
|
|
12
|
+
*/
|
|
13
|
+
import * as fs from 'node:fs/promises';
|
|
14
|
+
import * as path from 'node:path';
|
|
15
|
+
import { DEFAULT_CONFIG } from './defaults.js';
|
|
16
|
+
// ============================================================================
|
|
17
|
+
// Constants
|
|
18
|
+
// ============================================================================
|
|
19
|
+
/** Directory name for drift configuration */
|
|
20
|
+
const DRIFT_DIR = '.drift';
|
|
21
|
+
/** Config file name */
|
|
22
|
+
const CONFIG_FILE = 'config.json';
|
|
23
|
+
/** Environment variable prefix for config overrides */
|
|
24
|
+
const ENV_PREFIX = 'DRIFT_';
|
|
25
|
+
/** Environment variable names for specific config options */
|
|
26
|
+
const ENV_VARS = {
|
|
27
|
+
// AI configuration
|
|
28
|
+
AI_PROVIDER: `${ENV_PREFIX}AI_PROVIDER`,
|
|
29
|
+
AI_MODEL: `${ENV_PREFIX}AI_MODEL`,
|
|
30
|
+
// CI configuration
|
|
31
|
+
CI_FAIL_ON: `${ENV_PREFIX}CI_FAIL_ON`,
|
|
32
|
+
CI_REPORT_FORMAT: `${ENV_PREFIX}CI_REPORT_FORMAT`,
|
|
33
|
+
// Performance configuration
|
|
34
|
+
MAX_WORKERS: `${ENV_PREFIX}MAX_WORKERS`,
|
|
35
|
+
CACHE_ENABLED: `${ENV_PREFIX}CACHE_ENABLED`,
|
|
36
|
+
INCREMENTAL_ANALYSIS: `${ENV_PREFIX}INCREMENTAL_ANALYSIS`,
|
|
37
|
+
// Learning configuration
|
|
38
|
+
AUTO_APPROVE_THRESHOLD: `${ENV_PREFIX}AUTO_APPROVE_THRESHOLD`,
|
|
39
|
+
MIN_OCCURRENCES: `${ENV_PREFIX}MIN_OCCURRENCES`,
|
|
40
|
+
};
|
|
41
|
+
// ============================================================================
|
|
42
|
+
// Error Classes
|
|
43
|
+
// ============================================================================
|
|
44
|
+
/**
|
|
45
|
+
* Error thrown when configuration loading fails
|
|
46
|
+
*/
|
|
47
|
+
export class ConfigLoadError extends Error {
|
|
48
|
+
filePath;
|
|
49
|
+
errorCause;
|
|
50
|
+
constructor(message, filePath, errorCause) {
|
|
51
|
+
super(message);
|
|
52
|
+
this.name = 'ConfigLoadError';
|
|
53
|
+
this.filePath = filePath;
|
|
54
|
+
this.errorCause = errorCause;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Error thrown when configuration parsing fails
|
|
59
|
+
*/
|
|
60
|
+
export class ConfigParseError extends Error {
|
|
61
|
+
filePath;
|
|
62
|
+
errorCause;
|
|
63
|
+
constructor(message, filePath, errorCause) {
|
|
64
|
+
super(message);
|
|
65
|
+
this.name = 'ConfigParseError';
|
|
66
|
+
this.filePath = filePath;
|
|
67
|
+
this.errorCause = errorCause;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// ============================================================================
|
|
71
|
+
// Helper Functions
|
|
72
|
+
// ============================================================================
|
|
73
|
+
/**
|
|
74
|
+
* Check if a file exists
|
|
75
|
+
*/
|
|
76
|
+
async function fileExists(filePath) {
|
|
77
|
+
try {
|
|
78
|
+
await fs.access(filePath);
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Deep merge two objects, with source values overriding target values
|
|
87
|
+
*/
|
|
88
|
+
function deepMerge(target, source) {
|
|
89
|
+
const result = { ...target };
|
|
90
|
+
for (const key of Object.keys(source)) {
|
|
91
|
+
const sourceValue = source[key];
|
|
92
|
+
const targetValue = target[key];
|
|
93
|
+
if (sourceValue === undefined) {
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
if (isPlainObject(sourceValue) &&
|
|
97
|
+
isPlainObject(targetValue)) {
|
|
98
|
+
result[key] = deepMerge(targetValue, sourceValue);
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
result[key] = sourceValue;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return result;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Check if a value is a plain object
|
|
108
|
+
*/
|
|
109
|
+
function isPlainObject(value) {
|
|
110
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Parse a boolean from an environment variable string
|
|
114
|
+
*/
|
|
115
|
+
function parseEnvBoolean(value) {
|
|
116
|
+
if (value === undefined)
|
|
117
|
+
return undefined;
|
|
118
|
+
const lower = value.toLowerCase();
|
|
119
|
+
if (lower === 'true' || lower === '1' || lower === 'yes')
|
|
120
|
+
return true;
|
|
121
|
+
if (lower === 'false' || lower === '0' || lower === 'no')
|
|
122
|
+
return false;
|
|
123
|
+
return undefined;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Parse a number from an environment variable string
|
|
127
|
+
*/
|
|
128
|
+
function parseEnvNumber(value) {
|
|
129
|
+
if (value === undefined)
|
|
130
|
+
return undefined;
|
|
131
|
+
const num = parseFloat(value);
|
|
132
|
+
return isNaN(num) ? undefined : num;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Parse an integer from an environment variable string
|
|
136
|
+
*/
|
|
137
|
+
function parseEnvInteger(value) {
|
|
138
|
+
if (value === undefined)
|
|
139
|
+
return undefined;
|
|
140
|
+
const num = parseInt(value, 10);
|
|
141
|
+
return isNaN(num) ? undefined : num;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* ConfigLoader - Loads and manages Drift configuration
|
|
145
|
+
*
|
|
146
|
+
* Handles loading configuration from .drift/config.json, merging with defaults,
|
|
147
|
+
* and applying environment variable overrides.
|
|
148
|
+
*
|
|
149
|
+
* @requirements 36.1 - Read from .drift/config.json
|
|
150
|
+
* @requirements 36.2 - Support severity overrides per pattern
|
|
151
|
+
* @requirements 36.3 - Support ignore patterns for files/folders
|
|
152
|
+
* @requirements 36.4 - Support AI provider configuration
|
|
153
|
+
* @requirements 36.5 - Support CI mode settings
|
|
154
|
+
*/
|
|
155
|
+
export class ConfigLoader {
|
|
156
|
+
rootDir;
|
|
157
|
+
applyEnvOverrides;
|
|
158
|
+
cachedConfig = null;
|
|
159
|
+
configPath;
|
|
160
|
+
constructor(options = {}) {
|
|
161
|
+
this.rootDir = options.rootDir ?? process.cwd();
|
|
162
|
+
this.applyEnvOverrides = options.applyEnvOverrides ?? true;
|
|
163
|
+
this.configPath = path.join(this.rootDir, DRIFT_DIR, CONFIG_FILE);
|
|
164
|
+
}
|
|
165
|
+
// ==========================================================================
|
|
166
|
+
// Public Methods
|
|
167
|
+
// ==========================================================================
|
|
168
|
+
/**
|
|
169
|
+
* Load configuration from file, merge with defaults, and apply env overrides
|
|
170
|
+
*
|
|
171
|
+
* @requirements 36.1 - Read from .drift/config.json
|
|
172
|
+
*
|
|
173
|
+
* @returns The loaded configuration result
|
|
174
|
+
*/
|
|
175
|
+
async load() {
|
|
176
|
+
// Start with defaults
|
|
177
|
+
let config = { ...DEFAULT_CONFIG };
|
|
178
|
+
let configFileFound = false;
|
|
179
|
+
let envOverridesApplied = false;
|
|
180
|
+
// Try to load from file
|
|
181
|
+
if (await fileExists(this.configPath)) {
|
|
182
|
+
const fileConfig = await this.loadFromFile(this.configPath);
|
|
183
|
+
config = this.mergeWithDefaults(fileConfig);
|
|
184
|
+
configFileFound = true;
|
|
185
|
+
}
|
|
186
|
+
// Apply environment variable overrides
|
|
187
|
+
if (this.applyEnvOverrides) {
|
|
188
|
+
const envConfig = this.getEnvOverrides();
|
|
189
|
+
if (Object.keys(envConfig).length > 0) {
|
|
190
|
+
config = this.mergeWithDefaults(envConfig, config);
|
|
191
|
+
envOverridesApplied = true;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
// Cache the config
|
|
195
|
+
this.cachedConfig = config;
|
|
196
|
+
return {
|
|
197
|
+
config,
|
|
198
|
+
configPath: configFileFound ? this.configPath : undefined,
|
|
199
|
+
configFileFound,
|
|
200
|
+
envOverridesApplied,
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Get the cached configuration, loading if necessary
|
|
205
|
+
*
|
|
206
|
+
* @returns The configuration
|
|
207
|
+
*/
|
|
208
|
+
async getConfig() {
|
|
209
|
+
if (this.cachedConfig) {
|
|
210
|
+
return this.cachedConfig;
|
|
211
|
+
}
|
|
212
|
+
const result = await this.load();
|
|
213
|
+
return result.config;
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Reload configuration from disk
|
|
217
|
+
*
|
|
218
|
+
* @returns The reloaded configuration result
|
|
219
|
+
*/
|
|
220
|
+
async reload() {
|
|
221
|
+
this.cachedConfig = null;
|
|
222
|
+
return this.load();
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Check if a config file exists
|
|
226
|
+
*
|
|
227
|
+
* @returns True if config file exists
|
|
228
|
+
*/
|
|
229
|
+
async configFileExists() {
|
|
230
|
+
return fileExists(this.configPath);
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Get the path to the config file
|
|
234
|
+
*
|
|
235
|
+
* @returns The config file path
|
|
236
|
+
*/
|
|
237
|
+
getConfigPath() {
|
|
238
|
+
return this.configPath;
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Save configuration to file
|
|
242
|
+
*
|
|
243
|
+
* @param config - Configuration to save
|
|
244
|
+
*/
|
|
245
|
+
async save(config) {
|
|
246
|
+
// Ensure .drift directory exists
|
|
247
|
+
const driftDir = path.dirname(this.configPath);
|
|
248
|
+
await fs.mkdir(driftDir, { recursive: true });
|
|
249
|
+
// Write config file
|
|
250
|
+
await fs.writeFile(this.configPath, JSON.stringify(config, null, 2), 'utf-8');
|
|
251
|
+
// Update cache
|
|
252
|
+
this.cachedConfig = config;
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Clear the cached configuration
|
|
256
|
+
*/
|
|
257
|
+
clearCache() {
|
|
258
|
+
this.cachedConfig = null;
|
|
259
|
+
}
|
|
260
|
+
// ==========================================================================
|
|
261
|
+
// Private Methods
|
|
262
|
+
// ==========================================================================
|
|
263
|
+
/**
|
|
264
|
+
* Load configuration from a JSON file
|
|
265
|
+
*
|
|
266
|
+
* @param filePath - Path to the config file
|
|
267
|
+
* @returns The parsed configuration
|
|
268
|
+
*/
|
|
269
|
+
async loadFromFile(filePath) {
|
|
270
|
+
try {
|
|
271
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
272
|
+
try {
|
|
273
|
+
const parsed = JSON.parse(content);
|
|
274
|
+
if (!isPlainObject(parsed)) {
|
|
275
|
+
throw new ConfigParseError('Configuration must be a JSON object', filePath);
|
|
276
|
+
}
|
|
277
|
+
return parsed;
|
|
278
|
+
}
|
|
279
|
+
catch (parseError) {
|
|
280
|
+
if (parseError instanceof ConfigParseError) {
|
|
281
|
+
throw parseError;
|
|
282
|
+
}
|
|
283
|
+
throw new ConfigParseError(`Failed to parse configuration file: ${parseError.message}`, filePath, parseError);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
catch (error) {
|
|
287
|
+
if (error instanceof ConfigParseError) {
|
|
288
|
+
throw error;
|
|
289
|
+
}
|
|
290
|
+
throw new ConfigLoadError(`Failed to read configuration file: ${error.message}`, filePath, error);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Merge loaded configuration with defaults
|
|
295
|
+
*
|
|
296
|
+
* @param loaded - Loaded configuration
|
|
297
|
+
* @param base - Base configuration (defaults to DEFAULT_CONFIG)
|
|
298
|
+
* @returns Merged configuration
|
|
299
|
+
*/
|
|
300
|
+
mergeWithDefaults(loaded, base = DEFAULT_CONFIG) {
|
|
301
|
+
return deepMerge(base, loaded);
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Get configuration overrides from environment variables
|
|
305
|
+
*
|
|
306
|
+
* @returns Configuration overrides from environment
|
|
307
|
+
*/
|
|
308
|
+
getEnvOverrides() {
|
|
309
|
+
const overrides = {};
|
|
310
|
+
// AI configuration overrides
|
|
311
|
+
const aiOverrides = this.getAIEnvOverrides();
|
|
312
|
+
if (Object.keys(aiOverrides).length > 0) {
|
|
313
|
+
overrides.ai = aiOverrides;
|
|
314
|
+
}
|
|
315
|
+
// CI configuration overrides
|
|
316
|
+
const ciOverrides = this.getCIEnvOverrides();
|
|
317
|
+
if (Object.keys(ciOverrides).length > 0) {
|
|
318
|
+
overrides.ci = ciOverrides;
|
|
319
|
+
}
|
|
320
|
+
// Performance configuration overrides
|
|
321
|
+
const perfOverrides = this.getPerformanceEnvOverrides();
|
|
322
|
+
if (Object.keys(perfOverrides).length > 0) {
|
|
323
|
+
overrides.performance = perfOverrides;
|
|
324
|
+
}
|
|
325
|
+
// Learning configuration overrides
|
|
326
|
+
const learningOverrides = this.getLearningEnvOverrides();
|
|
327
|
+
if (Object.keys(learningOverrides).length > 0) {
|
|
328
|
+
overrides.learning = learningOverrides;
|
|
329
|
+
}
|
|
330
|
+
return overrides;
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* Get AI configuration overrides from environment
|
|
334
|
+
*/
|
|
335
|
+
getAIEnvOverrides() {
|
|
336
|
+
const overrides = {};
|
|
337
|
+
const provider = process.env[ENV_VARS.AI_PROVIDER];
|
|
338
|
+
if (provider && ['openai', 'anthropic', 'ollama'].includes(provider)) {
|
|
339
|
+
overrides.provider = provider;
|
|
340
|
+
}
|
|
341
|
+
const model = process.env[ENV_VARS.AI_MODEL];
|
|
342
|
+
if (model) {
|
|
343
|
+
overrides.model = model;
|
|
344
|
+
}
|
|
345
|
+
return overrides;
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Get CI configuration overrides from environment
|
|
349
|
+
*/
|
|
350
|
+
getCIEnvOverrides() {
|
|
351
|
+
const overrides = {};
|
|
352
|
+
const failOn = process.env[ENV_VARS.CI_FAIL_ON];
|
|
353
|
+
if (failOn && ['error', 'warning', 'none'].includes(failOn)) {
|
|
354
|
+
overrides.failOn = failOn;
|
|
355
|
+
}
|
|
356
|
+
const reportFormat = process.env[ENV_VARS.CI_REPORT_FORMAT];
|
|
357
|
+
if (reportFormat && ['json', 'text', 'github', 'gitlab'].includes(reportFormat)) {
|
|
358
|
+
overrides.reportFormat = reportFormat;
|
|
359
|
+
}
|
|
360
|
+
return overrides;
|
|
361
|
+
}
|
|
362
|
+
/**
|
|
363
|
+
* Get performance configuration overrides from environment
|
|
364
|
+
*/
|
|
365
|
+
getPerformanceEnvOverrides() {
|
|
366
|
+
const overrides = {};
|
|
367
|
+
const maxWorkers = parseEnvInteger(process.env[ENV_VARS.MAX_WORKERS]);
|
|
368
|
+
if (maxWorkers !== undefined && maxWorkers > 0) {
|
|
369
|
+
overrides.maxWorkers = maxWorkers;
|
|
370
|
+
}
|
|
371
|
+
const cacheEnabled = parseEnvBoolean(process.env[ENV_VARS.CACHE_ENABLED]);
|
|
372
|
+
if (cacheEnabled !== undefined) {
|
|
373
|
+
overrides.cacheEnabled = cacheEnabled;
|
|
374
|
+
}
|
|
375
|
+
const incrementalAnalysis = parseEnvBoolean(process.env[ENV_VARS.INCREMENTAL_ANALYSIS]);
|
|
376
|
+
if (incrementalAnalysis !== undefined) {
|
|
377
|
+
overrides.incrementalAnalysis = incrementalAnalysis;
|
|
378
|
+
}
|
|
379
|
+
return overrides;
|
|
380
|
+
}
|
|
381
|
+
/**
|
|
382
|
+
* Get learning configuration overrides from environment
|
|
383
|
+
*/
|
|
384
|
+
getLearningEnvOverrides() {
|
|
385
|
+
const overrides = {};
|
|
386
|
+
const autoApproveThreshold = parseEnvNumber(process.env[ENV_VARS.AUTO_APPROVE_THRESHOLD]);
|
|
387
|
+
if (autoApproveThreshold !== undefined && autoApproveThreshold >= 0 && autoApproveThreshold <= 1) {
|
|
388
|
+
overrides.autoApproveThreshold = autoApproveThreshold;
|
|
389
|
+
}
|
|
390
|
+
const minOccurrences = parseEnvInteger(process.env[ENV_VARS.MIN_OCCURRENCES]);
|
|
391
|
+
if (minOccurrences !== undefined && minOccurrences > 0) {
|
|
392
|
+
overrides.minOccurrences = minOccurrences;
|
|
393
|
+
}
|
|
394
|
+
return overrides;
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
// ============================================================================
|
|
398
|
+
// Convenience Functions
|
|
399
|
+
// ============================================================================
|
|
400
|
+
/**
|
|
401
|
+
* Load configuration with default options
|
|
402
|
+
*
|
|
403
|
+
* @param rootDir - Root directory to search for config
|
|
404
|
+
* @returns The loaded configuration
|
|
405
|
+
*/
|
|
406
|
+
export async function loadConfig(rootDir) {
|
|
407
|
+
const options = {};
|
|
408
|
+
if (rootDir !== undefined) {
|
|
409
|
+
options.rootDir = rootDir;
|
|
410
|
+
}
|
|
411
|
+
const loader = new ConfigLoader(options);
|
|
412
|
+
const result = await loader.load();
|
|
413
|
+
return result.config;
|
|
414
|
+
}
|
|
415
|
+
/**
|
|
416
|
+
* Load configuration and return full result
|
|
417
|
+
*
|
|
418
|
+
* @param rootDir - Root directory to search for config
|
|
419
|
+
* @returns The configuration load result
|
|
420
|
+
*/
|
|
421
|
+
export async function loadConfigWithResult(rootDir) {
|
|
422
|
+
const options = {};
|
|
423
|
+
if (rootDir !== undefined) {
|
|
424
|
+
options.rootDir = rootDir;
|
|
425
|
+
}
|
|
426
|
+
const loader = new ConfigLoader(options);
|
|
427
|
+
return loader.load();
|
|
428
|
+
}
|
|
429
|
+
//# sourceMappingURL=config-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../../src/config/config-loader.ts"],"names":[],"mappings":"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"}
|