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,392 @@
1
+ import { UIComponents } from '../ui/components.js';
2
+ /**
3
+ * Error types for different API operations
4
+ */
5
+ export var ErrorType;
6
+ (function (ErrorType) {
7
+ ErrorType["NETWORK"] = "network";
8
+ ErrorType["AUTHENTICATION"] = "authentication";
9
+ ErrorType["RATE_LIMIT"] = "rate_limit";
10
+ ErrorType["QUOTA_EXCEEDED"] = "quota_exceeded";
11
+ ErrorType["INVALID_REQUEST"] = "invalid_request";
12
+ ErrorType["SERVER_ERROR"] = "server_error";
13
+ ErrorType["TIMEOUT"] = "timeout";
14
+ ErrorType["CONFIGURATION"] = "configuration";
15
+ ErrorType["VALIDATION"] = "validation";
16
+ ErrorType["UNKNOWN"] = "unknown";
17
+ })(ErrorType || (ErrorType = {}));
18
+ /**
19
+ * Default retry configuration
20
+ */
21
+ export const DEFAULT_RETRY_CONFIG = {
22
+ maxRetries: 3,
23
+ baseDelay: 1000, // 1 second
24
+ maxDelay: 30000, // 30 seconds
25
+ backoffMultiplier: 2,
26
+ retryableErrors: [
27
+ ErrorType.NETWORK,
28
+ ErrorType.TIMEOUT,
29
+ ErrorType.SERVER_ERROR,
30
+ ErrorType.RATE_LIMIT
31
+ ]
32
+ };
33
+ /**
34
+ * API operation error with context and recovery suggestions
35
+ */
36
+ export class APIError extends Error {
37
+ type;
38
+ statusCode;
39
+ retryAfter;
40
+ quotaReset;
41
+ suggestions;
42
+ context;
43
+ constructor(message, type, options = {}) {
44
+ super(message);
45
+ this.name = 'APIError';
46
+ this.type = type;
47
+ this.statusCode = options.statusCode;
48
+ this.retryAfter = options.retryAfter;
49
+ this.quotaReset = options.quotaReset;
50
+ this.suggestions = options.suggestions || [];
51
+ this.context = options.context || {};
52
+ if (options.cause) {
53
+ this.cause = options.cause;
54
+ }
55
+ }
56
+ }
57
+ /**
58
+ * Comprehensive error handler for API operations
59
+ */
60
+ export class ErrorHandler {
61
+ /**
62
+ * Handle and classify API errors
63
+ */
64
+ static handleAPIError(error, context = {}) {
65
+ // If already an APIError, return as-is
66
+ if (error instanceof APIError) {
67
+ return error;
68
+ }
69
+ // Network/connection errors
70
+ if (this.isNetworkError(error)) {
71
+ return new APIError('Network connection failed. Please check your internet connection.', ErrorType.NETWORK, {
72
+ suggestions: [
73
+ 'Check your internet connection',
74
+ 'Verify firewall settings allow outbound HTTPS connections',
75
+ 'Try again in a few moments'
76
+ ],
77
+ context,
78
+ cause: error
79
+ });
80
+ }
81
+ // HTTP status code errors
82
+ if (error.response?.status) {
83
+ return this.handleHTTPError(error, context);
84
+ }
85
+ // Timeout errors
86
+ if (this.isTimeoutError(error)) {
87
+ return new APIError('Request timed out. The API service may be experiencing high load.', ErrorType.TIMEOUT, {
88
+ suggestions: [
89
+ 'Try again in a few moments',
90
+ 'Check if the API service is experiencing issues',
91
+ 'Consider increasing timeout settings'
92
+ ],
93
+ context,
94
+ cause: error
95
+ });
96
+ }
97
+ // Configuration errors
98
+ if (this.isConfigurationError(error)) {
99
+ return new APIError('Configuration error. Please check your API keys and settings.', ErrorType.CONFIGURATION, {
100
+ suggestions: [
101
+ 'Run "base config" to verify your API keys',
102
+ 'Check that API keys are valid and not expired',
103
+ 'Ensure you have proper permissions for the API'
104
+ ],
105
+ context,
106
+ cause: error
107
+ });
108
+ }
109
+ // Generic error
110
+ return new APIError(error.message || 'An unexpected error occurred', ErrorType.UNKNOWN, {
111
+ suggestions: [
112
+ 'Try the operation again',
113
+ 'Check the BaseGuard documentation for troubleshooting',
114
+ 'Report this issue if it persists'
115
+ ],
116
+ context,
117
+ cause: error
118
+ });
119
+ }
120
+ /**
121
+ * Handle HTTP status code errors
122
+ */
123
+ static handleHTTPError(error, context) {
124
+ const status = error.response.status;
125
+ const data = error.response.data;
126
+ switch (status) {
127
+ case 401:
128
+ return new APIError('Authentication failed. Your API key may be invalid or expired.', ErrorType.AUTHENTICATION, {
129
+ statusCode: status,
130
+ suggestions: [
131
+ 'Check that your API key is correct',
132
+ 'Verify the API key has not expired',
133
+ 'Run "base config" to update your API keys',
134
+ 'Ensure you have proper permissions'
135
+ ],
136
+ context
137
+ });
138
+ case 403:
139
+ return new APIError('Access forbidden. You may not have permission for this operation.', ErrorType.AUTHENTICATION, {
140
+ statusCode: status,
141
+ suggestions: [
142
+ 'Check your API key permissions',
143
+ 'Verify you have access to the requested resource',
144
+ 'Contact support if you believe this is an error'
145
+ ],
146
+ context
147
+ });
148
+ case 429:
149
+ const retryAfter = this.parseRetryAfter(error.response.headers);
150
+ const quotaReset = this.parseQuotaReset(error.response.headers);
151
+ return new APIError('Rate limit exceeded. Please wait before making more requests.', ErrorType.RATE_LIMIT, {
152
+ statusCode: status,
153
+ retryAfter,
154
+ quotaReset,
155
+ suggestions: [
156
+ retryAfter ? `Wait ${retryAfter} seconds before retrying` : 'Wait before retrying',
157
+ 'Consider reducing the frequency of requests',
158
+ quotaReset ? `Quota resets at ${quotaReset.toLocaleString()}` : 'Check your quota limits'
159
+ ],
160
+ context
161
+ });
162
+ case 400:
163
+ return new APIError(data?.message || 'Invalid request. Please check your input parameters.', ErrorType.INVALID_REQUEST, {
164
+ statusCode: status,
165
+ suggestions: [
166
+ 'Check the request parameters',
167
+ 'Verify the data format is correct',
168
+ 'Review the API documentation for requirements'
169
+ ],
170
+ context
171
+ });
172
+ case 500:
173
+ case 502:
174
+ case 503:
175
+ case 504:
176
+ return new APIError('Server error. The API service is experiencing issues.', ErrorType.SERVER_ERROR, {
177
+ statusCode: status,
178
+ suggestions: [
179
+ 'Try again in a few moments',
180
+ 'Check the API service status page',
181
+ 'Report the issue if it persists'
182
+ ],
183
+ context
184
+ });
185
+ default:
186
+ return new APIError(data?.message || `HTTP ${status}: ${error.message}`, ErrorType.UNKNOWN, {
187
+ statusCode: status,
188
+ suggestions: [
189
+ 'Check the API documentation',
190
+ 'Try the request again',
191
+ 'Report this issue if it persists'
192
+ ],
193
+ context
194
+ });
195
+ }
196
+ }
197
+ /**
198
+ * Check if error is a network/connection error
199
+ */
200
+ static isNetworkError(error) {
201
+ return (error.code === 'ECONNREFUSED' ||
202
+ error.code === 'ENOTFOUND' ||
203
+ error.code === 'ECONNRESET' ||
204
+ error.code === 'ENETUNREACH' ||
205
+ error.message?.includes('network') ||
206
+ error.message?.includes('connection'));
207
+ }
208
+ /**
209
+ * Check if error is a timeout error
210
+ */
211
+ static isTimeoutError(error) {
212
+ return (error.code === 'ETIMEDOUT' ||
213
+ error.code === 'TIMEOUT' ||
214
+ error.message?.includes('timeout'));
215
+ }
216
+ /**
217
+ * Check if error is a configuration error
218
+ */
219
+ static isConfigurationError(error) {
220
+ return (error.message?.includes('API key') ||
221
+ error.message?.includes('configuration') ||
222
+ error.message?.includes('invalid key'));
223
+ }
224
+ /**
225
+ * Parse retry-after header
226
+ */
227
+ static parseRetryAfter(headers) {
228
+ const retryAfter = headers?.['retry-after'] || headers?.['Retry-After'];
229
+ if (retryAfter) {
230
+ const seconds = parseInt(retryAfter, 10);
231
+ return isNaN(seconds) ? undefined : seconds;
232
+ }
233
+ return undefined;
234
+ }
235
+ /**
236
+ * Parse quota reset time from headers
237
+ */
238
+ static parseQuotaReset(headers) {
239
+ const reset = headers?.['x-ratelimit-reset'] || headers?.['X-RateLimit-Reset'];
240
+ if (reset) {
241
+ const timestamp = parseInt(reset, 10);
242
+ return isNaN(timestamp) ? undefined : new Date(timestamp * 1000);
243
+ }
244
+ return undefined;
245
+ }
246
+ /**
247
+ * Retry operation with exponential backoff
248
+ */
249
+ static async withRetry(operation, config = {}) {
250
+ const retryConfig = { ...DEFAULT_RETRY_CONFIG, ...config };
251
+ let lastError;
252
+ for (let attempt = 0; attempt <= retryConfig.maxRetries; attempt++) {
253
+ try {
254
+ return await operation();
255
+ }
256
+ catch (error) {
257
+ const apiError = this.handleAPIError(error);
258
+ lastError = apiError;
259
+ // Don't retry if this is the last attempt
260
+ if (attempt === retryConfig.maxRetries) {
261
+ break;
262
+ }
263
+ // Don't retry if error type is not retryable
264
+ if (!retryConfig.retryableErrors.includes(apiError.type)) {
265
+ break;
266
+ }
267
+ // Calculate delay with exponential backoff
268
+ const delay = Math.min(retryConfig.baseDelay * Math.pow(retryConfig.backoffMultiplier, attempt), retryConfig.maxDelay);
269
+ // Use retry-after header if available
270
+ const actualDelay = apiError.retryAfter ? apiError.retryAfter * 1000 : delay;
271
+ console.log(`Retrying in ${Math.ceil(actualDelay / 1000)} seconds... (attempt ${attempt + 1}/${retryConfig.maxRetries})`);
272
+ await this.sleep(actualDelay);
273
+ }
274
+ }
275
+ throw lastError;
276
+ }
277
+ /**
278
+ * Display error to user with helpful information
279
+ */
280
+ static displayError(error) {
281
+ UIComponents.showErrorBox(error.message);
282
+ if (error.suggestions.length > 0) {
283
+ console.log('\nSuggestions:');
284
+ UIComponents.showList(error.suggestions);
285
+ }
286
+ // Show additional context for specific error types
287
+ switch (error.type) {
288
+ case ErrorType.RATE_LIMIT:
289
+ if (error.retryAfter) {
290
+ UIComponents.showWarningBox(`Rate limited. Retry after ${error.retryAfter} seconds.`);
291
+ }
292
+ if (error.quotaReset) {
293
+ UIComponents.showInfoBox(`Quota resets at: ${error.quotaReset.toLocaleString()}`);
294
+ }
295
+ break;
296
+ case ErrorType.AUTHENTICATION:
297
+ UIComponents.showWarningBox('Run "base config" to update your API keys.');
298
+ break;
299
+ case ErrorType.NETWORK:
300
+ UIComponents.showWarningBox('Check your internet connection and try again.');
301
+ break;
302
+ }
303
+ }
304
+ /**
305
+ * Get fallback mode suggestions when APIs are unavailable
306
+ */
307
+ static getFallbackSuggestions(errorType) {
308
+ switch (errorType) {
309
+ case ErrorType.NETWORK:
310
+ case ErrorType.TIMEOUT:
311
+ return [
312
+ 'Use offline mode for basic compatibility checking',
313
+ 'Review violations manually using browser compatibility tables',
314
+ 'Try again when network connection is restored'
315
+ ];
316
+ case ErrorType.RATE_LIMIT:
317
+ case ErrorType.QUOTA_EXCEEDED:
318
+ return [
319
+ 'Continue with basic violation detection without AI analysis',
320
+ 'Review violations manually',
321
+ 'Try AI features again later when quota resets'
322
+ ];
323
+ case ErrorType.AUTHENTICATION:
324
+ return [
325
+ 'Use BaseGuard without AI features',
326
+ 'Update API keys when available',
327
+ 'Review violations manually using web compatibility resources'
328
+ ];
329
+ default:
330
+ return [
331
+ 'Continue with basic compatibility checking',
332
+ 'Review violations manually',
333
+ 'Try AI features again later'
334
+ ];
335
+ }
336
+ }
337
+ /**
338
+ * Check if operation should continue in fallback mode
339
+ */
340
+ static shouldUseFallbackMode(error) {
341
+ return [
342
+ ErrorType.NETWORK,
343
+ ErrorType.TIMEOUT,
344
+ ErrorType.AUTHENTICATION,
345
+ ErrorType.RATE_LIMIT,
346
+ ErrorType.QUOTA_EXCEEDED
347
+ ].includes(error.type);
348
+ }
349
+ /**
350
+ * Sleep for specified milliseconds
351
+ */
352
+ static sleep(ms) {
353
+ return new Promise(resolve => setTimeout(resolve, ms));
354
+ }
355
+ /**
356
+ * Validate API response structure
357
+ */
358
+ static validateAPIResponse(response, expectedFields) {
359
+ if (!response || typeof response !== 'object') {
360
+ throw new APIError('Invalid API response format', ErrorType.VALIDATION, {
361
+ suggestions: [
362
+ 'Check API service status',
363
+ 'Verify API version compatibility',
364
+ 'Try the request again'
365
+ ]
366
+ });
367
+ }
368
+ const missingFields = expectedFields.filter(field => !(field in response));
369
+ if (missingFields.length > 0) {
370
+ throw new APIError(`API response missing required fields: ${missingFields.join(', ')}`, ErrorType.VALIDATION, {
371
+ suggestions: [
372
+ 'Check API documentation for response format',
373
+ 'Verify API version compatibility',
374
+ 'Report this issue if it persists'
375
+ ],
376
+ context: { missingFields, response }
377
+ });
378
+ }
379
+ }
380
+ /**
381
+ * Create context object for error reporting
382
+ */
383
+ static createContext(operation, params) {
384
+ return {
385
+ operation,
386
+ timestamp: new Date().toISOString(),
387
+ params: params || {},
388
+ version: process.env.npm_package_version || 'unknown'
389
+ };
390
+ }
391
+ }
392
+ //# sourceMappingURL=error-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../src/core/error-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ import type { DetectedFeature } from '../types/index.js';
2
+ import { CacheManager } from './cache-manager.js';
3
+ /**
4
+ * File processor with concurrent parsing using worker threads
5
+ */
6
+ export declare class FileProcessor {
7
+ private readonly maxWorkers;
8
+ private readonly cacheManager;
9
+ private workers;
10
+ private taskQueue;
11
+ private pendingTasks;
12
+ private isProcessing;
13
+ constructor(options?: {
14
+ maxWorkers?: number;
15
+ cacheManager?: CacheManager;
16
+ });
17
+ /**
18
+ * Process multiple files concurrently with caching
19
+ */
20
+ processFiles(filePaths: string[]): Promise<DetectedFeature[]>;
21
+ /**
22
+ * Process files using worker threads
23
+ */
24
+ private processFilesWithWorkers;
25
+ /**
26
+ * Process a single task
27
+ */
28
+ private processTask;
29
+ /**
30
+ * Start worker processing
31
+ */
32
+ private startProcessing;
33
+ /**
34
+ * Initialize worker threads
35
+ */
36
+ private initializeWorkers;
37
+ /**
38
+ * Process a batch of tasks with available workers
39
+ */
40
+ private processBatch;
41
+ /**
42
+ * Assign task to worker
43
+ */
44
+ private assignTaskToWorker;
45
+ /**
46
+ * Handle worker result
47
+ */
48
+ private handleWorkerResult;
49
+ /**
50
+ * Handle worker error
51
+ */
52
+ private handleWorkerError;
53
+ /**
54
+ * Terminate all workers
55
+ */
56
+ private terminateWorkers;
57
+ /**
58
+ * Get worker script path
59
+ */
60
+ private getWorkerScriptPath;
61
+ /**
62
+ * Sleep utility
63
+ */
64
+ private sleep;
65
+ /**
66
+ * Get processing statistics
67
+ */
68
+ getStats(): {
69
+ maxWorkers: number;
70
+ activeWorkers: number;
71
+ queuedTasks: number;
72
+ pendingTasks: number;
73
+ cacheStats: any;
74
+ };
75
+ /**
76
+ * Cleanup resources
77
+ */
78
+ cleanup(): Promise<void>;
79
+ }
80
+ //# sourceMappingURL=file-processor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-processor.d.ts","sourceRoot":"","sources":["../../src/core/file-processor.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAoBlD;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,YAAY,CAGf;IACL,OAAO,CAAC,YAAY,CAAS;gBAEjB,OAAO,GAAE;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,YAAY,CAAC,EAAE,YAAY,CAAC;KACxB;IAKN;;OAEG;IACG,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAwBnE;;OAEG;YACW,uBAAuB;IA8CrC;;OAEG;YACW,WAAW;IAuBzB;;OAEG;YACW,eAAe;IAuB7B;;OAEG;YACW,iBAAiB;IAuB/B;;OAEG;YACW,YAAY;IAiB1B;;OAEG;YACW,kBAAkB;IAqBhC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAe1B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAQzB;;OAEG;YACW,gBAAgB;IAO9B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAQ3B;;OAEG;IACH,OAAO,CAAC,KAAK;IAIb;;OAEG;IACH,QAAQ,IAAI;QACV,UAAU,EAAE,MAAM,CAAC;QACnB,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,GAAG,CAAC;KACjB;IAUD;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAM/B"}