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,632 @@
1
+ /**
2
+ * Config Validator - Configuration validation against JSON schema
3
+ *
4
+ * Provides comprehensive validation for DriftConfig objects with
5
+ * helpful, actionable error messages for invalid configurations.
6
+ *
7
+ * @requirements 36.6 - Configuration validation SHALL reject invalid values with helpful error messages
8
+ * @requirements 36.7 - Configuration SHALL support JSON schema validation
9
+ */
10
+ // ============================================================================
11
+ // Constants
12
+ // ============================================================================
13
+ /** Valid AI provider values */
14
+ const VALID_AI_PROVIDERS = ['openai', 'anthropic', 'ollama'];
15
+ /** Valid CI fail-on values */
16
+ const VALID_CI_FAIL_ON = ['error', 'warning', 'none'];
17
+ /** Valid report format values */
18
+ const VALID_REPORT_FORMATS = ['json', 'text', 'github', 'gitlab'];
19
+ /** Valid severity values */
20
+ const VALID_SEVERITIES = ['error', 'warning', 'info', 'hint'];
21
+ /**
22
+ * Custom error class for configuration validation failures
23
+ *
24
+ * @requirements 36.6 - Provide helpful error messages
25
+ */
26
+ export class ConfigValidationException extends Error {
27
+ errors;
28
+ constructor(message, errors) {
29
+ super(message);
30
+ this.errors = errors;
31
+ this.name = 'ConfigValidationException';
32
+ }
33
+ /**
34
+ * Format errors as a human-readable string with suggestions
35
+ */
36
+ formatErrors() {
37
+ if (this.errors.length === 0)
38
+ return 'No errors';
39
+ return this.errors
40
+ .map((e) => {
41
+ let msg = ` - ${e.path}: ${e.message}`;
42
+ if (e.expected)
43
+ msg += `\n Expected: ${e.expected}`;
44
+ if (e.actual !== undefined)
45
+ msg += `\n Got: ${JSON.stringify(e.actual)}`;
46
+ if (e.suggestion)
47
+ msg += `\n Suggestion: ${e.suggestion}`;
48
+ return msg;
49
+ })
50
+ .join('\n\n');
51
+ }
52
+ /**
53
+ * Get a summary of all errors
54
+ */
55
+ getSummary() {
56
+ const errorCount = this.errors.length;
57
+ const paths = this.errors.map((e) => e.path).join(', ');
58
+ return `${errorCount} validation error(s) in: ${paths}`;
59
+ }
60
+ }
61
+ // ============================================================================
62
+ // Helper Validation Functions
63
+ // ============================================================================
64
+ /**
65
+ * Check if a value is a non-null object
66
+ */
67
+ function isObject(value) {
68
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
69
+ }
70
+ /**
71
+ * Get a property from an object safely
72
+ */
73
+ function get(obj, key) {
74
+ return obj[key];
75
+ }
76
+ /**
77
+ * Check if a value is a number within a range
78
+ */
79
+ function isNumberInRange(value, min, max) {
80
+ return typeof value === 'number' && !isNaN(value) && value >= min && value <= max;
81
+ }
82
+ /**
83
+ * Check if a value is in a valid set
84
+ */
85
+ function isOneOf(value, validValues) {
86
+ return validValues.includes(value);
87
+ }
88
+ // ============================================================================
89
+ // Component Validators
90
+ // ============================================================================
91
+ /**
92
+ * Validate severity overrides
93
+ *
94
+ * @requirements 36.6 - Provide helpful error messages
95
+ */
96
+ function validateSeverityOverrides(severity, errors) {
97
+ if (severity === undefined)
98
+ return true;
99
+ if (!isObject(severity)) {
100
+ errors.push({
101
+ path: 'severity',
102
+ message: 'Severity overrides must be an object mapping pattern IDs to severity levels',
103
+ expected: 'Record<string, "error" | "warning" | "info" | "hint">',
104
+ actual: typeof severity,
105
+ suggestion: 'Use an object like: { "pattern-id": "warning" }',
106
+ });
107
+ return false;
108
+ }
109
+ let valid = true;
110
+ for (const [patternId, severityValue] of Object.entries(severity)) {
111
+ if (!isOneOf(severityValue, VALID_SEVERITIES)) {
112
+ errors.push({
113
+ path: `severity.${patternId}`,
114
+ message: `Invalid severity level for pattern "${patternId}"`,
115
+ expected: VALID_SEVERITIES.join(' | '),
116
+ actual: severityValue,
117
+ suggestion: `Use one of: ${VALID_SEVERITIES.join(', ')}`,
118
+ });
119
+ valid = false;
120
+ }
121
+ }
122
+ return valid;
123
+ }
124
+ /**
125
+ * Validate ignore patterns
126
+ *
127
+ * @requirements 36.6 - Provide helpful error messages
128
+ */
129
+ function validateIgnorePatterns(ignore, errors) {
130
+ if (ignore === undefined)
131
+ return true;
132
+ if (!Array.isArray(ignore)) {
133
+ errors.push({
134
+ path: 'ignore',
135
+ message: 'Ignore patterns must be an array of strings',
136
+ expected: 'string[]',
137
+ actual: typeof ignore,
138
+ suggestion: 'Use an array like: ["node_modules", "dist", "*.test.ts"]',
139
+ });
140
+ return false;
141
+ }
142
+ let valid = true;
143
+ for (let i = 0; i < ignore.length; i++) {
144
+ const pattern = ignore[i];
145
+ if (typeof pattern !== 'string') {
146
+ errors.push({
147
+ path: `ignore[${i}]`,
148
+ message: 'Each ignore pattern must be a string',
149
+ expected: 'string',
150
+ actual: typeof pattern,
151
+ suggestion: 'Ensure all patterns are strings (glob patterns or directory names)',
152
+ });
153
+ valid = false;
154
+ }
155
+ else if (pattern.length === 0) {
156
+ errors.push({
157
+ path: `ignore[${i}]`,
158
+ message: 'Ignore pattern cannot be empty',
159
+ expected: 'non-empty string',
160
+ actual: '""',
161
+ suggestion: 'Remove empty patterns or provide a valid glob pattern',
162
+ });
163
+ valid = false;
164
+ }
165
+ }
166
+ return valid;
167
+ }
168
+ /**
169
+ * Validate AI configuration
170
+ *
171
+ * @requirements 36.6 - Provide helpful error messages
172
+ */
173
+ function validateAIConfig(ai, errors) {
174
+ if (ai === undefined)
175
+ return true;
176
+ if (!isObject(ai)) {
177
+ errors.push({
178
+ path: 'ai',
179
+ message: 'AI configuration must be an object',
180
+ expected: '{ provider: "openai" | "anthropic" | "ollama", model?: string }',
181
+ actual: typeof ai,
182
+ suggestion: 'Configure AI like: { "provider": "openai", "model": "gpt-4" }',
183
+ });
184
+ return false;
185
+ }
186
+ let valid = true;
187
+ const provider = get(ai, 'provider');
188
+ const model = get(ai, 'model');
189
+ // Provider is required when ai config is present
190
+ if (provider === undefined) {
191
+ errors.push({
192
+ path: 'ai.provider',
193
+ message: 'AI provider is required when AI configuration is specified',
194
+ expected: VALID_AI_PROVIDERS.join(' | '),
195
+ actual: undefined,
196
+ suggestion: `Add a provider: ${VALID_AI_PROVIDERS.join(', ')}`,
197
+ });
198
+ valid = false;
199
+ }
200
+ else if (!isOneOf(provider, VALID_AI_PROVIDERS)) {
201
+ errors.push({
202
+ path: 'ai.provider',
203
+ message: `Invalid AI provider "${provider}"`,
204
+ expected: VALID_AI_PROVIDERS.join(' | '),
205
+ actual: provider,
206
+ suggestion: `Use one of the supported providers: ${VALID_AI_PROVIDERS.join(', ')}`,
207
+ });
208
+ valid = false;
209
+ }
210
+ // Model is optional but must be a string if provided
211
+ if (model !== undefined && typeof model !== 'string') {
212
+ errors.push({
213
+ path: 'ai.model',
214
+ message: 'AI model must be a string',
215
+ expected: 'string',
216
+ actual: typeof model,
217
+ suggestion: 'Specify a model name like "gpt-4", "claude-3-opus", or "llama2"',
218
+ });
219
+ valid = false;
220
+ }
221
+ return valid;
222
+ }
223
+ /**
224
+ * Validate CI configuration
225
+ *
226
+ * @requirements 36.6 - Provide helpful error messages
227
+ */
228
+ function validateCIConfig(ci, errors) {
229
+ if (ci === undefined)
230
+ return true;
231
+ if (!isObject(ci)) {
232
+ errors.push({
233
+ path: 'ci',
234
+ message: 'CI configuration must be an object',
235
+ expected: '{ failOn: "error" | "warning" | "none", reportFormat: "json" | "text" | "github" | "gitlab" }',
236
+ actual: typeof ci,
237
+ suggestion: 'Configure CI like: { "failOn": "error", "reportFormat": "github" }',
238
+ });
239
+ return false;
240
+ }
241
+ let valid = true;
242
+ const failOn = get(ci, 'failOn');
243
+ const reportFormat = get(ci, 'reportFormat');
244
+ // failOn validation
245
+ if (failOn !== undefined && !isOneOf(failOn, VALID_CI_FAIL_ON)) {
246
+ errors.push({
247
+ path: 'ci.failOn',
248
+ message: `Invalid failOn value "${failOn}"`,
249
+ expected: VALID_CI_FAIL_ON.join(' | '),
250
+ actual: failOn,
251
+ suggestion: `Use one of: ${VALID_CI_FAIL_ON.join(', ')}. "error" fails on errors only, "warning" fails on warnings and errors, "none" never fails.`,
252
+ });
253
+ valid = false;
254
+ }
255
+ // reportFormat validation
256
+ if (reportFormat !== undefined && !isOneOf(reportFormat, VALID_REPORT_FORMATS)) {
257
+ errors.push({
258
+ path: 'ci.reportFormat',
259
+ message: `Invalid report format "${reportFormat}"`,
260
+ expected: VALID_REPORT_FORMATS.join(' | '),
261
+ actual: reportFormat,
262
+ suggestion: `Use one of: ${VALID_REPORT_FORMATS.join(', ')}. Use "github" for GitHub Actions annotations, "gitlab" for GitLab Code Quality.`,
263
+ });
264
+ valid = false;
265
+ }
266
+ return valid;
267
+ }
268
+ /**
269
+ * Validate learning configuration
270
+ *
271
+ * @requirements 36.6 - Provide helpful error messages
272
+ */
273
+ function validateLearningConfig(learning, errors) {
274
+ if (learning === undefined)
275
+ return true;
276
+ if (!isObject(learning)) {
277
+ errors.push({
278
+ path: 'learning',
279
+ message: 'Learning configuration must be an object',
280
+ expected: '{ autoApproveThreshold: number (0-1), minOccurrences: number (>= 1) }',
281
+ actual: typeof learning,
282
+ suggestion: 'Configure learning like: { "autoApproveThreshold": 0.95, "minOccurrences": 3 }',
283
+ });
284
+ return false;
285
+ }
286
+ let valid = true;
287
+ const autoApproveThreshold = get(learning, 'autoApproveThreshold');
288
+ const minOccurrences = get(learning, 'minOccurrences');
289
+ // autoApproveThreshold validation
290
+ if (autoApproveThreshold !== undefined) {
291
+ if (typeof autoApproveThreshold !== 'number') {
292
+ errors.push({
293
+ path: 'learning.autoApproveThreshold',
294
+ message: 'Auto-approve threshold must be a number',
295
+ expected: 'number between 0 and 1',
296
+ actual: typeof autoApproveThreshold,
297
+ suggestion: 'Use a decimal value like 0.95 (95% confidence)',
298
+ });
299
+ valid = false;
300
+ }
301
+ else if (!isNumberInRange(autoApproveThreshold, 0, 1)) {
302
+ errors.push({
303
+ path: 'learning.autoApproveThreshold',
304
+ message: 'Auto-approve threshold must be between 0 and 1',
305
+ expected: '0 <= value <= 1',
306
+ actual: autoApproveThreshold,
307
+ suggestion: `Value ${autoApproveThreshold} is out of range. Use a value like 0.85 (85%) or 0.95 (95%).`,
308
+ });
309
+ valid = false;
310
+ }
311
+ }
312
+ // minOccurrences validation
313
+ if (minOccurrences !== undefined) {
314
+ if (typeof minOccurrences !== 'number') {
315
+ errors.push({
316
+ path: 'learning.minOccurrences',
317
+ message: 'Minimum occurrences must be a number',
318
+ expected: 'positive integer >= 1',
319
+ actual: typeof minOccurrences,
320
+ suggestion: 'Use an integer like 3 or 5',
321
+ });
322
+ valid = false;
323
+ }
324
+ else if (!Number.isInteger(minOccurrences) || minOccurrences < 1) {
325
+ errors.push({
326
+ path: 'learning.minOccurrences',
327
+ message: 'Minimum occurrences must be a positive integer (>= 1)',
328
+ expected: 'integer >= 1',
329
+ actual: minOccurrences,
330
+ suggestion: `Value ${minOccurrences} is invalid. Use a positive integer like 3 (detect patterns with at least 3 occurrences).`,
331
+ });
332
+ valid = false;
333
+ }
334
+ }
335
+ return valid;
336
+ }
337
+ /**
338
+ * Validate performance configuration
339
+ *
340
+ * @requirements 36.6 - Provide helpful error messages
341
+ */
342
+ function validatePerformanceConfig(performance, errors) {
343
+ if (performance === undefined)
344
+ return true;
345
+ if (!isObject(performance)) {
346
+ errors.push({
347
+ path: 'performance',
348
+ message: 'Performance configuration must be an object',
349
+ expected: '{ maxWorkers: number, cacheEnabled: boolean, incrementalAnalysis: boolean }',
350
+ actual: typeof performance,
351
+ suggestion: 'Configure performance like: { "maxWorkers": 4, "cacheEnabled": true, "incrementalAnalysis": true }',
352
+ });
353
+ return false;
354
+ }
355
+ let valid = true;
356
+ const maxWorkers = get(performance, 'maxWorkers');
357
+ const cacheEnabled = get(performance, 'cacheEnabled');
358
+ const incrementalAnalysis = get(performance, 'incrementalAnalysis');
359
+ // maxWorkers validation
360
+ if (maxWorkers !== undefined) {
361
+ if (typeof maxWorkers !== 'number') {
362
+ errors.push({
363
+ path: 'performance.maxWorkers',
364
+ message: 'Max workers must be a number',
365
+ expected: 'positive integer >= 1',
366
+ actual: typeof maxWorkers,
367
+ suggestion: 'Use an integer like 4 or 8 (number of parallel worker threads)',
368
+ });
369
+ valid = false;
370
+ }
371
+ else if (!Number.isInteger(maxWorkers) || maxWorkers < 1) {
372
+ errors.push({
373
+ path: 'performance.maxWorkers',
374
+ message: 'Max workers must be a positive integer (>= 1)',
375
+ expected: 'integer >= 1',
376
+ actual: maxWorkers,
377
+ suggestion: `Value ${maxWorkers} is invalid. Use a positive integer like 4 (typically matches CPU cores).`,
378
+ });
379
+ valid = false;
380
+ }
381
+ }
382
+ // cacheEnabled validation
383
+ if (cacheEnabled !== undefined && typeof cacheEnabled !== 'boolean') {
384
+ errors.push({
385
+ path: 'performance.cacheEnabled',
386
+ message: 'Cache enabled must be a boolean',
387
+ expected: 'true | false',
388
+ actual: typeof cacheEnabled,
389
+ suggestion: 'Use true to enable caching (recommended) or false to disable',
390
+ });
391
+ valid = false;
392
+ }
393
+ // incrementalAnalysis validation
394
+ if (incrementalAnalysis !== undefined && typeof incrementalAnalysis !== 'boolean') {
395
+ errors.push({
396
+ path: 'performance.incrementalAnalysis',
397
+ message: 'Incremental analysis must be a boolean',
398
+ expected: 'true | false',
399
+ actual: typeof incrementalAnalysis,
400
+ suggestion: 'Use true to enable incremental analysis (recommended) or false for full analysis on each change',
401
+ });
402
+ valid = false;
403
+ }
404
+ return valid;
405
+ }
406
+ // ============================================================================
407
+ // Main Validation Functions
408
+ // ============================================================================
409
+ /**
410
+ * Validate a DriftConfig object against the JSON schema
411
+ *
412
+ * @requirements 36.6 - Configuration validation SHALL reject invalid values with helpful error messages
413
+ * @requirements 36.7 - Configuration SHALL support JSON schema validation
414
+ *
415
+ * @param data - The data to validate
416
+ * @returns Validation result with typed data or errors
417
+ */
418
+ export function validateConfig(data) {
419
+ const errors = [];
420
+ // Root must be an object
421
+ if (!isObject(data)) {
422
+ errors.push({
423
+ path: '',
424
+ message: 'Configuration must be a JSON object',
425
+ expected: 'object',
426
+ actual: typeof data,
427
+ suggestion: 'Ensure your config.json contains a valid JSON object like: { "ignore": ["node_modules"] }',
428
+ });
429
+ return { valid: false, errors };
430
+ }
431
+ // Validate each section
432
+ validateSeverityOverrides(get(data, 'severity'), errors);
433
+ validateIgnorePatterns(get(data, 'ignore'), errors);
434
+ validateAIConfig(get(data, 'ai'), errors);
435
+ validateCIConfig(get(data, 'ci'), errors);
436
+ validateLearningConfig(get(data, 'learning'), errors);
437
+ validatePerformanceConfig(get(data, 'performance'), errors);
438
+ // Check for unknown top-level keys
439
+ const knownKeys = ['severity', 'ignore', 'ai', 'ci', 'learning', 'performance'];
440
+ for (const key of Object.keys(data)) {
441
+ if (!knownKeys.includes(key)) {
442
+ errors.push({
443
+ path: key,
444
+ message: `Unknown configuration option "${key}"`,
445
+ expected: knownKeys.join(' | '),
446
+ actual: key,
447
+ suggestion: `Remove "${key}" or check for typos. Valid options are: ${knownKeys.join(', ')}`,
448
+ });
449
+ }
450
+ }
451
+ if (errors.length > 0) {
452
+ return { valid: false, errors };
453
+ }
454
+ return { valid: true, data: data };
455
+ }
456
+ /**
457
+ * Validate a DriftConfig and throw if invalid
458
+ *
459
+ * @requirements 36.6 - Configuration validation SHALL reject invalid values with helpful error messages
460
+ * @requirements 36.7 - Configuration SHALL support JSON schema validation
461
+ *
462
+ * @param data - The data to validate
463
+ * @returns The validated DriftConfig
464
+ * @throws ConfigValidationException if validation fails
465
+ */
466
+ export function assertValidConfig(data) {
467
+ const result = validateConfig(data);
468
+ if (!result.valid) {
469
+ throw new ConfigValidationException(`Invalid configuration: ${result.errors.length} validation error(s)`, result.errors);
470
+ }
471
+ return result.data;
472
+ }
473
+ /**
474
+ * Validate a partial DriftConfig (for merging with defaults)
475
+ *
476
+ * This is more lenient than full validation - it allows missing required fields
477
+ * since they will be filled in from defaults.
478
+ *
479
+ * @requirements 36.6 - Configuration validation SHALL reject invalid values with helpful error messages
480
+ * @requirements 36.7 - Configuration SHALL support JSON schema validation
481
+ *
482
+ * @param data - The partial data to validate
483
+ * @returns Validation result with typed data or errors
484
+ */
485
+ export function validatePartialConfig(data) {
486
+ // For partial config, we use the same validation logic
487
+ // since all fields are already optional in DriftConfig
488
+ return validateConfig(data);
489
+ }
490
+ /**
491
+ * Format validation errors as a human-readable string
492
+ *
493
+ * @requirements 36.6 - Provide helpful error messages
494
+ *
495
+ * @param errors - Array of validation errors
496
+ * @returns Formatted error string
497
+ */
498
+ export function formatConfigErrors(errors) {
499
+ if (errors.length === 0)
500
+ return 'No errors';
501
+ const header = `Configuration validation failed with ${errors.length} error(s):\n`;
502
+ const body = errors
503
+ .map((e, i) => {
504
+ let msg = `\n${i + 1}. ${e.path || 'root'}: ${e.message}`;
505
+ if (e.expected)
506
+ msg += `\n Expected: ${e.expected}`;
507
+ if (e.actual !== undefined)
508
+ msg += `\n Got: ${JSON.stringify(e.actual)}`;
509
+ if (e.suggestion)
510
+ msg += `\n 💡 ${e.suggestion}`;
511
+ return msg;
512
+ })
513
+ .join('\n');
514
+ return header + body;
515
+ }
516
+ /**
517
+ * Get a quick summary of validation errors
518
+ *
519
+ * @param errors - Array of validation errors
520
+ * @returns Short summary string
521
+ */
522
+ export function getErrorSummary(errors) {
523
+ if (errors.length === 0)
524
+ return 'Configuration is valid';
525
+ const paths = errors.map((e) => e.path || 'root');
526
+ const uniquePaths = [...new Set(paths)];
527
+ return `${errors.length} error(s) in: ${uniquePaths.join(', ')}`;
528
+ }
529
+ // ============================================================================
530
+ // JSON Schema Definition (for documentation and external tools)
531
+ // ============================================================================
532
+ /**
533
+ * JSON Schema definition for DriftConfig
534
+ *
535
+ * This can be used by external tools for validation or IDE support.
536
+ *
537
+ * @requirements 36.7 - Configuration SHALL support JSON schema validation
538
+ */
539
+ export const DRIFT_CONFIG_SCHEMA = {
540
+ $schema: 'http://json-schema.org/draft-07/schema#',
541
+ title: 'DriftConfig',
542
+ description: 'Configuration schema for Drift architectural drift detection',
543
+ type: 'object',
544
+ properties: {
545
+ severity: {
546
+ type: 'object',
547
+ description: 'Severity overrides per pattern ID',
548
+ additionalProperties: {
549
+ type: 'string',
550
+ enum: ['error', 'warning', 'info', 'hint'],
551
+ },
552
+ },
553
+ ignore: {
554
+ type: 'array',
555
+ description: 'File/folder patterns to ignore',
556
+ items: {
557
+ type: 'string',
558
+ minLength: 1,
559
+ },
560
+ },
561
+ ai: {
562
+ type: 'object',
563
+ description: 'AI provider configuration (BYOK)',
564
+ properties: {
565
+ provider: {
566
+ type: 'string',
567
+ enum: ['openai', 'anthropic', 'ollama'],
568
+ description: 'AI provider to use',
569
+ },
570
+ model: {
571
+ type: 'string',
572
+ description: 'Model name to use',
573
+ },
574
+ },
575
+ required: ['provider'],
576
+ },
577
+ ci: {
578
+ type: 'object',
579
+ description: 'CI/CD mode settings',
580
+ properties: {
581
+ failOn: {
582
+ type: 'string',
583
+ enum: ['error', 'warning', 'none'],
584
+ description: 'Severity level that causes CI failure',
585
+ },
586
+ reportFormat: {
587
+ type: 'string',
588
+ enum: ['json', 'text', 'github', 'gitlab'],
589
+ description: 'Output format for CI reports',
590
+ },
591
+ },
592
+ },
593
+ learning: {
594
+ type: 'object',
595
+ description: 'Pattern learning settings',
596
+ properties: {
597
+ autoApproveThreshold: {
598
+ type: 'number',
599
+ minimum: 0,
600
+ maximum: 1,
601
+ description: 'Confidence threshold for auto-approving patterns',
602
+ },
603
+ minOccurrences: {
604
+ type: 'integer',
605
+ minimum: 1,
606
+ description: 'Minimum occurrences to detect a pattern',
607
+ },
608
+ },
609
+ },
610
+ performance: {
611
+ type: 'object',
612
+ description: 'Performance tuning settings',
613
+ properties: {
614
+ maxWorkers: {
615
+ type: 'integer',
616
+ minimum: 1,
617
+ description: 'Maximum worker threads for parallel processing',
618
+ },
619
+ cacheEnabled: {
620
+ type: 'boolean',
621
+ description: 'Enable analysis caching',
622
+ },
623
+ incrementalAnalysis: {
624
+ type: 'boolean',
625
+ description: 'Enable incremental analysis for changed files',
626
+ },
627
+ },
628
+ },
629
+ },
630
+ additionalProperties: false,
631
+ };
632
+ //# sourceMappingURL=config-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-validator.js","sourceRoot":"","sources":["../../src/config/config-validator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Config Defaults - Default configuration values
3
+ *
4
+ * @requirements 36.1
5
+ */
6
+ import type { DriftConfig } from './types.js';
7
+ export declare const DEFAULT_CONFIG: DriftConfig;
8
+ //# sourceMappingURL=defaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,eAAO,MAAM,cAAc,EAAE,WAmB5B,CAAC"}