baseguard 1.0.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 (244) hide show
  1. package/.eslintrc.json +25 -0
  2. package/.prettierrc +8 -0
  3. package/README.md +94 -0
  4. package/bin/base.js +494 -0
  5. package/dist/ai/fix-manager.d.ts +67 -0
  6. package/dist/ai/fix-manager.d.ts.map +1 -0
  7. package/dist/ai/fix-manager.js +326 -0
  8. package/dist/ai/fix-manager.js.map +1 -0
  9. package/dist/ai/gemini-analyzer.d.ts +116 -0
  10. package/dist/ai/gemini-analyzer.d.ts.map +1 -0
  11. package/dist/ai/gemini-analyzer.js +572 -0
  12. package/dist/ai/gemini-analyzer.js.map +1 -0
  13. package/dist/ai/index.d.ts +4 -0
  14. package/dist/ai/index.d.ts.map +1 -0
  15. package/dist/ai/index.js +5 -0
  16. package/dist/ai/index.js.map +1 -0
  17. package/dist/ai/jules-implementer.d.ts +115 -0
  18. package/dist/ai/jules-implementer.d.ts.map +1 -0
  19. package/dist/ai/jules-implementer.js +387 -0
  20. package/dist/ai/jules-implementer.js.map +1 -0
  21. package/dist/commands/automation.d.ts +5 -0
  22. package/dist/commands/automation.d.ts.map +1 -0
  23. package/dist/commands/automation.js +305 -0
  24. package/dist/commands/automation.js.map +1 -0
  25. package/dist/commands/check.d.ts +9 -0
  26. package/dist/commands/check.d.ts.map +1 -0
  27. package/dist/commands/check.js +113 -0
  28. package/dist/commands/check.js.map +1 -0
  29. package/dist/commands/config.d.ts +11 -0
  30. package/dist/commands/config.d.ts.map +1 -0
  31. package/dist/commands/config.js +324 -0
  32. package/dist/commands/config.js.map +1 -0
  33. package/dist/commands/fix.d.ts +9 -0
  34. package/dist/commands/fix.d.ts.map +1 -0
  35. package/dist/commands/fix.js +207 -0
  36. package/dist/commands/fix.js.map +1 -0
  37. package/dist/commands/index.d.ts +6 -0
  38. package/dist/commands/index.d.ts.map +1 -0
  39. package/dist/commands/index.js +7 -0
  40. package/dist/commands/index.js.map +1 -0
  41. package/dist/commands/init.d.ts +9 -0
  42. package/dist/commands/init.d.ts.map +1 -0
  43. package/dist/commands/init.js +125 -0
  44. package/dist/commands/init.js.map +1 -0
  45. package/dist/core/api-key-manager.d.ts +83 -0
  46. package/dist/core/api-key-manager.d.ts.map +1 -0
  47. package/dist/core/api-key-manager.js +244 -0
  48. package/dist/core/api-key-manager.js.map +1 -0
  49. package/dist/core/baseguard.d.ts +46 -0
  50. package/dist/core/baseguard.d.ts.map +1 -0
  51. package/dist/core/baseguard.js +132 -0
  52. package/dist/core/baseguard.js.map +1 -0
  53. package/dist/core/baseline-checker.d.ts +63 -0
  54. package/dist/core/baseline-checker.d.ts.map +1 -0
  55. package/dist/core/baseline-checker.js +502 -0
  56. package/dist/core/baseline-checker.js.map +1 -0
  57. package/dist/core/cache-manager.d.ts +88 -0
  58. package/dist/core/cache-manager.d.ts.map +1 -0
  59. package/dist/core/cache-manager.js +213 -0
  60. package/dist/core/cache-manager.js.map +1 -0
  61. package/dist/core/configuration.d.ts +140 -0
  62. package/dist/core/configuration.d.ts.map +1 -0
  63. package/dist/core/configuration.js +474 -0
  64. package/dist/core/configuration.js.map +1 -0
  65. package/dist/core/directory-filter.d.ts +90 -0
  66. package/dist/core/directory-filter.d.ts.map +1 -0
  67. package/dist/core/directory-filter.js +319 -0
  68. package/dist/core/directory-filter.js.map +1 -0
  69. package/dist/core/error-handler.d.ts +110 -0
  70. package/dist/core/error-handler.d.ts.map +1 -0
  71. package/dist/core/error-handler.js +392 -0
  72. package/dist/core/error-handler.js.map +1 -0
  73. package/dist/core/file-processor.d.ts +80 -0
  74. package/dist/core/file-processor.d.ts.map +1 -0
  75. package/dist/core/file-processor.js +259 -0
  76. package/dist/core/file-processor.js.map +1 -0
  77. package/dist/core/gitignore-manager.d.ts +44 -0
  78. package/dist/core/gitignore-manager.d.ts.map +1 -0
  79. package/dist/core/gitignore-manager.js +147 -0
  80. package/dist/core/gitignore-manager.js.map +1 -0
  81. package/dist/core/index.d.ts +13 -0
  82. package/dist/core/index.d.ts.map +1 -0
  83. package/dist/core/index.js +13 -0
  84. package/dist/core/index.js.map +1 -0
  85. package/dist/core/lazy-loader.d.ts +68 -0
  86. package/dist/core/lazy-loader.d.ts.map +1 -0
  87. package/dist/core/lazy-loader.js +260 -0
  88. package/dist/core/lazy-loader.js.map +1 -0
  89. package/dist/core/memory-manager.d.ts +1 -0
  90. package/dist/core/memory-manager.d.ts.map +1 -0
  91. package/dist/core/memory-manager.js +2 -0
  92. package/dist/core/memory-manager.js.map +1 -0
  93. package/dist/core/startup-optimizer.d.ts +45 -0
  94. package/dist/core/startup-optimizer.d.ts.map +1 -0
  95. package/dist/core/startup-optimizer.js +140 -0
  96. package/dist/core/startup-optimizer.js.map +1 -0
  97. package/dist/git/automation-engine.d.ts +58 -0
  98. package/dist/git/automation-engine.d.ts.map +1 -0
  99. package/dist/git/automation-engine.js +318 -0
  100. package/dist/git/automation-engine.js.map +1 -0
  101. package/dist/git/github-manager.d.ts +71 -0
  102. package/dist/git/github-manager.d.ts.map +1 -0
  103. package/dist/git/github-manager.js +226 -0
  104. package/dist/git/github-manager.js.map +1 -0
  105. package/dist/git/hook-manager.d.ts +43 -0
  106. package/dist/git/hook-manager.d.ts.map +1 -0
  107. package/dist/git/hook-manager.js +191 -0
  108. package/dist/git/hook-manager.js.map +1 -0
  109. package/dist/git/index.d.ts +4 -0
  110. package/dist/git/index.d.ts.map +1 -0
  111. package/dist/git/index.js +5 -0
  112. package/dist/git/index.js.map +1 -0
  113. package/dist/index.d.ts +8 -0
  114. package/dist/index.d.ts.map +1 -0
  115. package/dist/index.js +9 -0
  116. package/dist/index.js.map +1 -0
  117. package/dist/parsers/feature-validator.d.ts +60 -0
  118. package/dist/parsers/feature-validator.d.ts.map +1 -0
  119. package/dist/parsers/feature-validator.js +483 -0
  120. package/dist/parsers/feature-validator.js.map +1 -0
  121. package/dist/parsers/index.d.ts +8 -0
  122. package/dist/parsers/index.d.ts.map +1 -0
  123. package/dist/parsers/index.js +9 -0
  124. package/dist/parsers/index.js.map +1 -0
  125. package/dist/parsers/parser-manager.d.ts +103 -0
  126. package/dist/parsers/parser-manager.d.ts.map +1 -0
  127. package/dist/parsers/parser-manager.js +321 -0
  128. package/dist/parsers/parser-manager.js.map +1 -0
  129. package/dist/parsers/parser.d.ts +23 -0
  130. package/dist/parsers/parser.d.ts.map +1 -0
  131. package/dist/parsers/parser.js +6 -0
  132. package/dist/parsers/parser.js.map +1 -0
  133. package/dist/parsers/react-parser.d.ts +22 -0
  134. package/dist/parsers/react-parser.d.ts.map +1 -0
  135. package/dist/parsers/react-parser.js +307 -0
  136. package/dist/parsers/react-parser.js.map +1 -0
  137. package/dist/parsers/svelte-parser.d.ts +33 -0
  138. package/dist/parsers/svelte-parser.d.ts.map +1 -0
  139. package/dist/parsers/svelte-parser.js +408 -0
  140. package/dist/parsers/svelte-parser.js.map +1 -0
  141. package/dist/parsers/vanilla-parser.d.ts +31 -0
  142. package/dist/parsers/vanilla-parser.d.ts.map +1 -0
  143. package/dist/parsers/vanilla-parser.js +590 -0
  144. package/dist/parsers/vanilla-parser.js.map +1 -0
  145. package/dist/parsers/vue-parser.d.ts +9 -0
  146. package/dist/parsers/vue-parser.d.ts.map +1 -0
  147. package/dist/parsers/vue-parser.js +16 -0
  148. package/dist/parsers/vue-parser.js.map +1 -0
  149. package/dist/terminal-header.d.ts +12 -0
  150. package/dist/terminal-header.js +45 -0
  151. package/dist/types/index.d.ts +83 -0
  152. package/dist/types/index.d.ts.map +1 -0
  153. package/dist/types/index.js +5 -0
  154. package/dist/types/index.js.map +1 -0
  155. package/dist/ui/components.d.ts +133 -0
  156. package/dist/ui/components.d.ts.map +1 -0
  157. package/dist/ui/components.js +482 -0
  158. package/dist/ui/components.js.map +1 -0
  159. package/dist/ui/help.d.ts +11 -0
  160. package/dist/ui/help.d.ts.map +1 -0
  161. package/dist/ui/help.js +161 -0
  162. package/dist/ui/help.js.map +1 -0
  163. package/dist/ui/index.d.ts +5 -0
  164. package/dist/ui/index.d.ts.map +1 -0
  165. package/dist/ui/index.js +5 -0
  166. package/dist/ui/index.js.map +1 -0
  167. package/dist/ui/prompts.d.ts +63 -0
  168. package/dist/ui/prompts.d.ts.map +1 -0
  169. package/dist/ui/prompts.js +611 -0
  170. package/dist/ui/prompts.js.map +1 -0
  171. package/dist/ui/terminal-header.d.ts +13 -0
  172. package/dist/ui/terminal-header.d.ts.map +1 -0
  173. package/dist/ui/terminal-header.js +46 -0
  174. package/dist/ui/terminal-header.js.map +1 -0
  175. package/package.json +80 -0
  176. package/src/ai/__tests__/gemini-analyzer.test.ts +181 -0
  177. package/src/ai/fix-manager.ts +362 -0
  178. package/src/ai/gemini-analyzer.ts +671 -0
  179. package/src/ai/index.ts +4 -0
  180. package/src/ai/jules-implementer.ts +459 -0
  181. package/src/commands/automation.ts +344 -0
  182. package/src/commands/check.ts +299 -0
  183. package/src/commands/config.ts +365 -0
  184. package/src/commands/fix.ts +234 -0
  185. package/src/commands/index.ts +6 -0
  186. package/src/commands/init.ts +142 -0
  187. package/src/commands/status.ts +0 -0
  188. package/src/core/api-key-manager.ts +298 -0
  189. package/src/core/baseguard.ts +742 -0
  190. package/src/core/baseline-checker.ts +563 -0
  191. package/src/core/cache-manager.ts +270 -0
  192. package/src/core/configuration-recovery.ts +676 -0
  193. package/src/core/configuration.ts +559 -0
  194. package/src/core/debug-logger.ts +590 -0
  195. package/src/core/directory-filter.ts +421 -0
  196. package/src/core/error-handler.ts +517 -0
  197. package/src/core/file-processor.ts +331 -0
  198. package/src/core/gitignore-manager.ts +169 -0
  199. package/src/core/graceful-degradation-manager.ts +596 -0
  200. package/src/core/index.ts +13 -0
  201. package/src/core/lazy-loader.ts +307 -0
  202. package/src/core/logger.ts +0 -0
  203. package/src/core/memory-manager.ts +294 -0
  204. package/src/core/startup-optimizer.ts +173 -0
  205. package/src/core/system-error-handler.ts +746 -0
  206. package/src/git/automation-engine.ts +361 -0
  207. package/src/git/github-manager.ts +260 -0
  208. package/src/git/hook-manager.ts +210 -0
  209. package/src/git/index.ts +4 -0
  210. package/src/index.ts +8 -0
  211. package/src/parsers/feature-validator.ts +559 -0
  212. package/src/parsers/index.ts +8 -0
  213. package/src/parsers/parser-manager.ts +419 -0
  214. package/src/parsers/parser.ts +26 -0
  215. package/src/parsers/react-parser-optimized.ts +161 -0
  216. package/src/parsers/react-parser.ts +359 -0
  217. package/src/parsers/svelte-parser.ts +506 -0
  218. package/src/parsers/vanilla-parser.ts +682 -0
  219. package/src/parsers/vue-parser.ts +472 -0
  220. package/src/types/index.ts +92 -0
  221. package/src/ui/components.ts +567 -0
  222. package/src/ui/help.ts +193 -0
  223. package/src/ui/index.ts +4 -0
  224. package/src/ui/prompts.ts +688 -0
  225. package/src/ui/terminal-header.ts +59 -0
  226. package/test-config-commands.js +56 -0
  227. package/test-header-simple.js +33 -0
  228. package/test-terminal-header.js +12 -0
  229. package/test-ui.js +29 -0
  230. package/tests/e2e/baseguard.e2e.test.ts +516 -0
  231. package/tests/e2e/cross-platform.e2e.test.ts +420 -0
  232. package/tests/e2e/git-integration.e2e.test.ts +487 -0
  233. package/tests/fixtures/react-project/package.json +14 -0
  234. package/tests/fixtures/react-project/src/App.css +76 -0
  235. package/tests/fixtures/react-project/src/App.tsx +77 -0
  236. package/tests/fixtures/svelte-project/package.json +11 -0
  237. package/tests/fixtures/svelte-project/src/App.svelte +369 -0
  238. package/tests/fixtures/vanilla-project/index.html +76 -0
  239. package/tests/fixtures/vanilla-project/script.js +331 -0
  240. package/tests/fixtures/vanilla-project/styles.css +359 -0
  241. package/tests/fixtures/vue-project/package.json +12 -0
  242. package/tests/fixtures/vue-project/src/App.vue +216 -0
  243. package/tsconfig.json +36 -0
  244. package/vitest.config.ts +10 -0
@@ -0,0 +1,474 @@
1
+ import { readFile, writeFile, access } from 'fs/promises';
2
+ import { constants } from 'fs';
3
+ import { GitignoreManager } from './gitignore-manager.js';
4
+ import { UIComponents } from '../ui/components.js';
5
+ // Preset browser target configurations
6
+ export const BROWSER_TARGET_PRESETS = {
7
+ 'baseline-widely': [
8
+ { browser: 'chrome', minVersion: 'baseline' },
9
+ { browser: 'firefox', minVersion: 'baseline' },
10
+ { browser: 'safari', minVersion: 'baseline' },
11
+ { browser: 'edge', minVersion: 'baseline' }
12
+ ],
13
+ 'baseline-newly': [
14
+ { browser: 'chrome', minVersion: 'baseline-newly' },
15
+ { browser: 'firefox', minVersion: 'baseline-newly' },
16
+ { browser: 'safari', minVersion: 'baseline-newly' },
17
+ { browser: 'edge', minVersion: 'baseline-newly' }
18
+ ],
19
+ 'last-2-years': [
20
+ { browser: 'chrome', minVersion: '100' },
21
+ { browser: 'firefox', minVersion: '100' },
22
+ { browser: 'safari', minVersion: '15' },
23
+ { browser: 'edge', minVersion: '100' }
24
+ ]
25
+ };
26
+ /**
27
+ * Configuration manager for BaseGuard settings
28
+ */
29
+ export class ConfigurationManager {
30
+ static CONFIG_FILE = '.baseguardrc.json';
31
+ /**
32
+ * Load configuration from file or create default
33
+ */
34
+ static async load() {
35
+ try {
36
+ await access(this.CONFIG_FILE, constants.F_OK);
37
+ const content = await readFile(this.CONFIG_FILE, 'utf-8');
38
+ const config = JSON.parse(content);
39
+ // Validate and migrate configuration if needed
40
+ return this.validateAndMigrate(config);
41
+ }
42
+ catch (error) {
43
+ // File doesn't exist or is invalid, return default
44
+ return this.createDefault();
45
+ }
46
+ }
47
+ /**
48
+ * Save configuration to file
49
+ */
50
+ static async save(config) {
51
+ const validatedConfig = this.validateAndMigrate(config);
52
+ const content = JSON.stringify(validatedConfig, null, 2);
53
+ await writeFile(this.CONFIG_FILE, content, 'utf-8');
54
+ // Ensure config file is in .gitignore for security
55
+ const gitignoreUpdated = await GitignoreManager.ensureConfigIgnored();
56
+ if (gitignoreUpdated) {
57
+ UIComponents.showInfoBox('Added .baseguardrc.json to .gitignore for security');
58
+ }
59
+ }
60
+ /**
61
+ * Create default configuration
62
+ */
63
+ static createDefault() {
64
+ return {
65
+ version: '1.0.0',
66
+ targets: BROWSER_TARGET_PRESETS['baseline-widely'],
67
+ apiKeys: {
68
+ jules: null,
69
+ gemini: null
70
+ },
71
+ automation: {
72
+ enabled: false,
73
+ trigger: 'pre-commit',
74
+ autoAnalyze: true,
75
+ autoFix: false,
76
+ blockCommit: true
77
+ }
78
+ };
79
+ }
80
+ /**
81
+ * Create configuration with preset browser targets
82
+ */
83
+ static createWithPreset(preset) {
84
+ const config = this.createDefault();
85
+ config.targets = [...BROWSER_TARGET_PRESETS[preset]];
86
+ return config;
87
+ }
88
+ /**
89
+ * Create configuration with custom browser targets
90
+ */
91
+ static createWithCustomTargets(targets) {
92
+ const config = this.createDefault();
93
+ config.targets = this.validateBrowserTargets(targets);
94
+ return config;
95
+ }
96
+ /**
97
+ * Validate and migrate configuration
98
+ */
99
+ static validateAndMigrate(config) {
100
+ const defaultConfig = this.createDefault();
101
+ // Ensure all required fields exist
102
+ const validatedConfig = {
103
+ version: config.version || defaultConfig.version,
104
+ targets: this.validateBrowserTargets(config.targets || defaultConfig.targets),
105
+ apiKeys: {
106
+ jules: config.apiKeys?.jules || null,
107
+ gemini: config.apiKeys?.gemini || null
108
+ },
109
+ automation: {
110
+ enabled: config.automation?.enabled ?? defaultConfig.automation.enabled,
111
+ trigger: this.validateTrigger(config.automation?.trigger) || defaultConfig.automation.trigger,
112
+ autoAnalyze: config.automation?.autoAnalyze ?? defaultConfig.automation.autoAnalyze,
113
+ autoFix: config.automation?.autoFix ?? defaultConfig.automation.autoFix,
114
+ blockCommit: config.automation?.blockCommit ?? defaultConfig.automation.blockCommit
115
+ }
116
+ };
117
+ return validatedConfig;
118
+ }
119
+ /**
120
+ * Validate browser targets
121
+ */
122
+ static validateBrowserTargets(targets) {
123
+ if (!Array.isArray(targets) || targets.length === 0) {
124
+ return BROWSER_TARGET_PRESETS['baseline-widely'];
125
+ }
126
+ const validTargets = [];
127
+ const supportedBrowsers = ['chrome', 'firefox', 'safari', 'edge', 'opera', 'samsung'];
128
+ for (const target of targets) {
129
+ if (typeof target !== 'object' || !target.browser || !target.minVersion) {
130
+ continue;
131
+ }
132
+ const browser = target.browser.toLowerCase();
133
+ if (!supportedBrowsers.includes(browser)) {
134
+ continue;
135
+ }
136
+ const minVersion = this.validateMinVersion(target.minVersion);
137
+ if (!minVersion) {
138
+ continue;
139
+ }
140
+ validTargets.push({ browser, minVersion });
141
+ }
142
+ return validTargets.length > 0 ? validTargets : BROWSER_TARGET_PRESETS['baseline-widely'];
143
+ }
144
+ /**
145
+ * Validate minimum version
146
+ */
147
+ static validateMinVersion(minVersion) {
148
+ if (typeof minVersion !== 'string') {
149
+ return null;
150
+ }
151
+ // Special baseline keywords
152
+ if (minVersion === 'baseline' || minVersion === 'baseline-newly') {
153
+ return minVersion;
154
+ }
155
+ // Version number validation (basic)
156
+ if (/^\d+(\.\d+)*$/.test(minVersion)) {
157
+ return minVersion;
158
+ }
159
+ return null;
160
+ }
161
+ /**
162
+ * Validate automation trigger
163
+ */
164
+ static validateTrigger(trigger) {
165
+ if (trigger === 'pre-commit' || trigger === 'pre-push') {
166
+ return trigger;
167
+ }
168
+ return null;
169
+ }
170
+ /**
171
+ * Parse browser target string (e.g., "chrome 100", "safari baseline")
172
+ */
173
+ static parseBrowserTarget(targetString) {
174
+ const parts = targetString.trim().toLowerCase().split(/\s+/);
175
+ if (parts.length !== 2) {
176
+ return null;
177
+ }
178
+ const browser = parts[0];
179
+ const version = parts[1];
180
+ if (!browser || !version) {
181
+ return null;
182
+ }
183
+ const supportedBrowsers = ['chrome', 'firefox', 'safari', 'edge', 'opera', 'samsung'];
184
+ if (!supportedBrowsers.includes(browser)) {
185
+ return null;
186
+ }
187
+ const minVersion = this.validateMinVersion(version);
188
+ if (!minVersion) {
189
+ return null;
190
+ }
191
+ return { browser, minVersion };
192
+ }
193
+ /**
194
+ * Parse multiple browser targets from strings
195
+ */
196
+ static parseBrowserTargets(targetStrings) {
197
+ const targets = [];
198
+ for (const targetString of targetStrings) {
199
+ const target = this.parseBrowserTarget(targetString);
200
+ if (target) {
201
+ targets.push(target);
202
+ }
203
+ }
204
+ return targets;
205
+ }
206
+ /**
207
+ * Get available preset names
208
+ */
209
+ static getAvailablePresets() {
210
+ return Object.keys(BROWSER_TARGET_PRESETS);
211
+ }
212
+ /**
213
+ * Get preset description
214
+ */
215
+ static getPresetDescription(preset) {
216
+ switch (preset) {
217
+ case 'baseline-widely':
218
+ return 'Features supported across all major browsers for 30+ months (Baseline Widely Available)';
219
+ case 'baseline-newly':
220
+ return 'Features newly available across all major browsers (Baseline Newly Available)';
221
+ case 'last-2-years':
222
+ return 'Browser versions from the last 2 years (Chrome 100+, Firefox 100+, Safari 15+, Edge 100+)';
223
+ default:
224
+ return 'Unknown preset';
225
+ }
226
+ }
227
+ /**
228
+ * Check if configuration file exists
229
+ */
230
+ static async exists() {
231
+ try {
232
+ await access(this.CONFIG_FILE, constants.F_OK);
233
+ return true;
234
+ }
235
+ catch {
236
+ return false;
237
+ }
238
+ }
239
+ /**
240
+ * Get configuration file path
241
+ */
242
+ static getConfigFilePath() {
243
+ return this.CONFIG_FILE;
244
+ }
245
+ /**
246
+ * Add browser target to existing configuration
247
+ */
248
+ static async addBrowserTarget(target) {
249
+ const config = await this.load();
250
+ // Remove existing target for the same browser
251
+ config.targets = config.targets.filter(t => t.browser !== target.browser);
252
+ // Add new target
253
+ config.targets.push(target);
254
+ await this.save(config);
255
+ }
256
+ /**
257
+ * Remove browser target from existing configuration
258
+ */
259
+ static async removeBrowserTarget(browser) {
260
+ const config = await this.load();
261
+ config.targets = config.targets.filter(t => t.browser !== browser.toLowerCase());
262
+ // Ensure at least one target remains
263
+ if (config.targets.length === 0) {
264
+ config.targets = BROWSER_TARGET_PRESETS['baseline-widely'];
265
+ }
266
+ await this.save(config);
267
+ }
268
+ /**
269
+ * Update browser targets with preset
270
+ */
271
+ static async updateWithPreset(preset) {
272
+ const config = await this.load();
273
+ config.targets = [...BROWSER_TARGET_PRESETS[preset]];
274
+ await this.save(config);
275
+ }
276
+ /**
277
+ * Update browser targets with custom targets
278
+ */
279
+ static async updateWithCustomTargets(targets) {
280
+ const config = await this.load();
281
+ config.targets = this.validateBrowserTargets(targets);
282
+ await this.save(config);
283
+ }
284
+ /**
285
+ * Update automation configuration
286
+ */
287
+ static async updateAutomation(automationConfig) {
288
+ const config = await this.load();
289
+ config.automation = {
290
+ ...config.automation,
291
+ ...automationConfig
292
+ };
293
+ // Validate trigger
294
+ if (automationConfig.trigger) {
295
+ const validatedTrigger = this.validateTrigger(automationConfig.trigger);
296
+ if (validatedTrigger) {
297
+ config.automation.trigger = validatedTrigger;
298
+ }
299
+ }
300
+ await this.save(config);
301
+ }
302
+ /**
303
+ * Enable automation
304
+ */
305
+ static async enableAutomation(trigger) {
306
+ const config = await this.load();
307
+ config.automation.enabled = true;
308
+ if (trigger) {
309
+ config.automation.trigger = trigger;
310
+ }
311
+ await this.save(config);
312
+ }
313
+ /**
314
+ * Disable automation
315
+ */
316
+ static async disableAutomation() {
317
+ const config = await this.load();
318
+ config.automation.enabled = false;
319
+ await this.save(config);
320
+ }
321
+ /**
322
+ * Update API keys
323
+ */
324
+ static async updateApiKeys(apiKeys) {
325
+ const config = await this.load();
326
+ config.apiKeys = {
327
+ ...config.apiKeys,
328
+ ...apiKeys
329
+ };
330
+ await this.save(config);
331
+ }
332
+ /**
333
+ * Validate configuration structure and data
334
+ */
335
+ static validateConfiguration(config) {
336
+ const errors = [];
337
+ // Check required fields
338
+ if (!config || typeof config !== 'object') {
339
+ errors.push('Configuration must be an object');
340
+ return { valid: false, errors };
341
+ }
342
+ // Validate version
343
+ if (!config.version || typeof config.version !== 'string') {
344
+ errors.push('Configuration version is required and must be a string');
345
+ }
346
+ // Validate targets
347
+ if (!Array.isArray(config.targets)) {
348
+ errors.push('Browser targets must be an array');
349
+ }
350
+ else {
351
+ config.targets.forEach((target, index) => {
352
+ if (!target || typeof target !== 'object') {
353
+ errors.push(`Target ${index} must be an object`);
354
+ return;
355
+ }
356
+ if (!target.browser || typeof target.browser !== 'string') {
357
+ errors.push(`Target ${index} must have a valid browser string`);
358
+ }
359
+ if (!target.minVersion || typeof target.minVersion !== 'string') {
360
+ errors.push(`Target ${index} must have a valid minVersion string`);
361
+ }
362
+ });
363
+ }
364
+ // Validate API keys
365
+ if (!config.apiKeys || typeof config.apiKeys !== 'object') {
366
+ errors.push('API keys configuration must be an object');
367
+ }
368
+ else {
369
+ if (config.apiKeys.jules !== null && typeof config.apiKeys.jules !== 'string') {
370
+ errors.push('Jules API key must be a string or null');
371
+ }
372
+ if (config.apiKeys.gemini !== null && typeof config.apiKeys.gemini !== 'string') {
373
+ errors.push('Gemini API key must be a string or null');
374
+ }
375
+ }
376
+ // Validate automation
377
+ if (!config.automation || typeof config.automation !== 'object') {
378
+ errors.push('Automation configuration must be an object');
379
+ }
380
+ else {
381
+ const automation = config.automation;
382
+ if (typeof automation.enabled !== 'boolean') {
383
+ errors.push('Automation enabled must be a boolean');
384
+ }
385
+ if (automation.trigger !== 'pre-commit' && automation.trigger !== 'pre-push') {
386
+ errors.push('Automation trigger must be "pre-commit" or "pre-push"');
387
+ }
388
+ if (typeof automation.autoAnalyze !== 'boolean') {
389
+ errors.push('Automation autoAnalyze must be a boolean');
390
+ }
391
+ if (typeof automation.autoFix !== 'boolean') {
392
+ errors.push('Automation autoFix must be a boolean');
393
+ }
394
+ if (typeof automation.blockCommit !== 'boolean') {
395
+ errors.push('Automation blockCommit must be a boolean');
396
+ }
397
+ }
398
+ return { valid: errors.length === 0, errors };
399
+ }
400
+ /**
401
+ * Migrate configuration from older versions
402
+ */
403
+ static migrateConfiguration(config) {
404
+ // Handle migration from version 0.x to 1.x
405
+ if (!config.version || config.version.startsWith('0.')) {
406
+ // Migrate old structure to new structure
407
+ const migratedConfig = this.createDefault();
408
+ // Preserve existing settings where possible
409
+ if (config.targets && Array.isArray(config.targets)) {
410
+ migratedConfig.targets = this.validateBrowserTargets(config.targets);
411
+ }
412
+ if (config.apiKeys) {
413
+ migratedConfig.apiKeys.jules = config.apiKeys.jules || null;
414
+ migratedConfig.apiKeys.gemini = config.apiKeys.gemini || null;
415
+ }
416
+ if (config.automation) {
417
+ migratedConfig.automation = {
418
+ ...migratedConfig.automation,
419
+ ...config.automation
420
+ };
421
+ }
422
+ migratedConfig.version = '1.0.0';
423
+ return migratedConfig;
424
+ }
425
+ return config;
426
+ }
427
+ /**
428
+ * Get configuration display information
429
+ */
430
+ static async getConfigurationDisplay() {
431
+ const config = await this.load();
432
+ const security = await GitignoreManager.isConfigSecure();
433
+ const validation = this.validateConfiguration(config);
434
+ return {
435
+ config,
436
+ security,
437
+ validation
438
+ };
439
+ }
440
+ /**
441
+ * Backup current configuration
442
+ */
443
+ static async backupConfiguration() {
444
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
445
+ const backupFile = `.baseguardrc.backup.${timestamp}.json`;
446
+ try {
447
+ const config = await this.load();
448
+ const content = JSON.stringify(config, null, 2);
449
+ await writeFile(backupFile, content, 'utf-8');
450
+ return backupFile;
451
+ }
452
+ catch (error) {
453
+ throw new Error(`Failed to create backup: ${error instanceof Error ? error.message : 'Unknown error'}`);
454
+ }
455
+ }
456
+ /**
457
+ * Restore configuration from backup
458
+ */
459
+ static async restoreConfiguration(backupFile) {
460
+ try {
461
+ const content = await readFile(backupFile, 'utf-8');
462
+ const config = JSON.parse(content);
463
+ const validation = this.validateConfiguration(config);
464
+ if (!validation.valid) {
465
+ throw new Error(`Invalid backup configuration: ${validation.errors.join(', ')}`);
466
+ }
467
+ await this.save(config);
468
+ }
469
+ catch (error) {
470
+ throw new Error(`Failed to restore backup: ${error instanceof Error ? error.message : 'Unknown error'}`);
471
+ }
472
+ }
473
+ }
474
+ //# sourceMappingURL=configuration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configuration.js","sourceRoot":"","sources":["../../src/core/configuration.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Smart directory filtering to skip node_modules and build outputs
3
+ */
4
+ export declare class DirectoryFilter {
5
+ private readonly defaultExcludePatterns;
6
+ private readonly defaultIncludeExtensions;
7
+ private readonly excludePatterns;
8
+ private readonly includeExtensions;
9
+ private readonly maxDepth;
10
+ private readonly maxFiles;
11
+ constructor(options?: {
12
+ excludePatterns?: string[];
13
+ includeExtensions?: string[];
14
+ maxDepth?: number;
15
+ maxFiles?: number;
16
+ });
17
+ /**
18
+ * Find files recursively with smart filtering
19
+ */
20
+ findFiles(directories: string[], options?: {
21
+ patterns?: string[];
22
+ excludePatterns?: string[];
23
+ includeHidden?: boolean;
24
+ }): Promise<string[]>;
25
+ /**
26
+ * Find files using glob patterns (faster for specific patterns)
27
+ */
28
+ findFilesWithGlob(patterns: string[], options?: {
29
+ cwd?: string;
30
+ excludePatterns?: string[];
31
+ }): Promise<string[]>;
32
+ /**
33
+ * Check if a file should be processed
34
+ */
35
+ isSupportedFile(filePath: string): boolean;
36
+ /**
37
+ * Check if a directory should be excluded
38
+ */
39
+ isExcludedDirectory(dirPath: string): boolean;
40
+ /**
41
+ * Get file statistics for a directory
42
+ */
43
+ getDirectoryStats(directoryPath: string): Promise<{
44
+ totalFiles: number;
45
+ supportedFiles: number;
46
+ directories: number;
47
+ excludedDirectories: number;
48
+ largestFiles: Array<{
49
+ path: string;
50
+ size: number;
51
+ }>;
52
+ }>;
53
+ /**
54
+ * Recursive file finding with smart filtering
55
+ */
56
+ private findFilesRecursive;
57
+ /**
58
+ * Check if file should be included based on patterns
59
+ */
60
+ private shouldIncludeFile;
61
+ /**
62
+ * Collect directory statistics recursively
63
+ */
64
+ private collectStats;
65
+ /**
66
+ * Get supported extensions
67
+ */
68
+ getSupportedExtensions(): string[];
69
+ /**
70
+ * Get exclude patterns
71
+ */
72
+ getExcludePatterns(): string[];
73
+ /**
74
+ * Add custom exclude pattern
75
+ */
76
+ addExcludePattern(pattern: string): void;
77
+ /**
78
+ * Remove exclude pattern
79
+ */
80
+ removeExcludePattern(pattern: string): void;
81
+ /**
82
+ * Add supported extension
83
+ */
84
+ addSupportedExtension(extension: string): void;
85
+ /**
86
+ * Remove supported extension
87
+ */
88
+ removeSupportedExtension(extension: string): void;
89
+ }
90
+ //# sourceMappingURL=directory-filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"directory-filter.d.ts","sourceRoot":"","sources":["../../src/core/directory-filter.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAsBrC;IAEF,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAavC;IAEF,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAc;IAC9C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAc;IAChD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEtB,OAAO,GAAE;QACnB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;QAC3B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;QAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACd;IAcN;;OAEG;IACG,SAAS,CACb,WAAW,EAAE,MAAM,EAAE,EACrB,OAAO,GAAE;QACP,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;QAC3B,aAAa,CAAC,EAAE,OAAO,CAAC;KACpB,GACL,OAAO,CAAC,MAAM,EAAE,CAAC;IAwCpB;;OAEG;IACG,iBAAiB,CACrB,QAAQ,EAAE,MAAM,EAAE,EAClB,OAAO,GAAE;QACP,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;KACvB,GACL,OAAO,CAAC,MAAM,EAAE,CAAC;IAsBpB;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAK1C;;OAEG;IACH,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IA0B7C;;OAEG;IACG,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC;QACtD,UAAU,EAAE,MAAM,CAAC;QACnB,cAAc,EAAE,MAAM,CAAC;QACvB,WAAW,EAAE,MAAM,CAAC;QACpB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,YAAY,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACrD,CAAC;IAsBF;;OAEG;YACW,kBAAkB;IAuEhC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAqBzB;;OAEG;YACW,YAAY;IAoD1B;;OAEG;IACH,sBAAsB,IAAI,MAAM,EAAE;IAIlC;;OAEG;IACH,kBAAkB,IAAI,MAAM,EAAE;IAI9B;;OAEG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIxC;;OAEG;IACH,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI3C;;OAEG;IACH,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAO9C;;OAEG;IACH,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;CAMlD"}