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.
- package/.eslintrc.json +25 -0
- package/.prettierrc +8 -0
- package/README.md +94 -0
- package/bin/base.js +494 -0
- package/dist/ai/fix-manager.d.ts +67 -0
- package/dist/ai/fix-manager.d.ts.map +1 -0
- package/dist/ai/fix-manager.js +326 -0
- package/dist/ai/fix-manager.js.map +1 -0
- package/dist/ai/gemini-analyzer.d.ts +116 -0
- package/dist/ai/gemini-analyzer.d.ts.map +1 -0
- package/dist/ai/gemini-analyzer.js +572 -0
- package/dist/ai/gemini-analyzer.js.map +1 -0
- package/dist/ai/index.d.ts +4 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +5 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/jules-implementer.d.ts +115 -0
- package/dist/ai/jules-implementer.d.ts.map +1 -0
- package/dist/ai/jules-implementer.js +387 -0
- package/dist/ai/jules-implementer.js.map +1 -0
- package/dist/commands/automation.d.ts +5 -0
- package/dist/commands/automation.d.ts.map +1 -0
- package/dist/commands/automation.js +305 -0
- package/dist/commands/automation.js.map +1 -0
- package/dist/commands/check.d.ts +9 -0
- package/dist/commands/check.d.ts.map +1 -0
- package/dist/commands/check.js +113 -0
- package/dist/commands/check.js.map +1 -0
- package/dist/commands/config.d.ts +11 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +324 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/fix.d.ts +9 -0
- package/dist/commands/fix.d.ts.map +1 -0
- package/dist/commands/fix.js +207 -0
- package/dist/commands/fix.js.map +1 -0
- package/dist/commands/index.d.ts +6 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +7 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/init.d.ts +9 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +125 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/core/api-key-manager.d.ts +83 -0
- package/dist/core/api-key-manager.d.ts.map +1 -0
- package/dist/core/api-key-manager.js +244 -0
- package/dist/core/api-key-manager.js.map +1 -0
- package/dist/core/baseguard.d.ts +46 -0
- package/dist/core/baseguard.d.ts.map +1 -0
- package/dist/core/baseguard.js +132 -0
- package/dist/core/baseguard.js.map +1 -0
- package/dist/core/baseline-checker.d.ts +63 -0
- package/dist/core/baseline-checker.d.ts.map +1 -0
- package/dist/core/baseline-checker.js +502 -0
- package/dist/core/baseline-checker.js.map +1 -0
- package/dist/core/cache-manager.d.ts +88 -0
- package/dist/core/cache-manager.d.ts.map +1 -0
- package/dist/core/cache-manager.js +213 -0
- package/dist/core/cache-manager.js.map +1 -0
- package/dist/core/configuration.d.ts +140 -0
- package/dist/core/configuration.d.ts.map +1 -0
- package/dist/core/configuration.js +474 -0
- package/dist/core/configuration.js.map +1 -0
- package/dist/core/directory-filter.d.ts +90 -0
- package/dist/core/directory-filter.d.ts.map +1 -0
- package/dist/core/directory-filter.js +319 -0
- package/dist/core/directory-filter.js.map +1 -0
- package/dist/core/error-handler.d.ts +110 -0
- package/dist/core/error-handler.d.ts.map +1 -0
- package/dist/core/error-handler.js +392 -0
- package/dist/core/error-handler.js.map +1 -0
- package/dist/core/file-processor.d.ts +80 -0
- package/dist/core/file-processor.d.ts.map +1 -0
- package/dist/core/file-processor.js +259 -0
- package/dist/core/file-processor.js.map +1 -0
- package/dist/core/gitignore-manager.d.ts +44 -0
- package/dist/core/gitignore-manager.d.ts.map +1 -0
- package/dist/core/gitignore-manager.js +147 -0
- package/dist/core/gitignore-manager.js.map +1 -0
- package/dist/core/index.d.ts +13 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +13 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/lazy-loader.d.ts +68 -0
- package/dist/core/lazy-loader.d.ts.map +1 -0
- package/dist/core/lazy-loader.js +260 -0
- package/dist/core/lazy-loader.js.map +1 -0
- package/dist/core/memory-manager.d.ts +1 -0
- package/dist/core/memory-manager.d.ts.map +1 -0
- package/dist/core/memory-manager.js +2 -0
- package/dist/core/memory-manager.js.map +1 -0
- package/dist/core/startup-optimizer.d.ts +45 -0
- package/dist/core/startup-optimizer.d.ts.map +1 -0
- package/dist/core/startup-optimizer.js +140 -0
- package/dist/core/startup-optimizer.js.map +1 -0
- package/dist/git/automation-engine.d.ts +58 -0
- package/dist/git/automation-engine.d.ts.map +1 -0
- package/dist/git/automation-engine.js +318 -0
- package/dist/git/automation-engine.js.map +1 -0
- package/dist/git/github-manager.d.ts +71 -0
- package/dist/git/github-manager.d.ts.map +1 -0
- package/dist/git/github-manager.js +226 -0
- package/dist/git/github-manager.js.map +1 -0
- package/dist/git/hook-manager.d.ts +43 -0
- package/dist/git/hook-manager.d.ts.map +1 -0
- package/dist/git/hook-manager.js +191 -0
- package/dist/git/hook-manager.js.map +1 -0
- package/dist/git/index.d.ts +4 -0
- package/dist/git/index.d.ts.map +1 -0
- package/dist/git/index.js +5 -0
- package/dist/git/index.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/parsers/feature-validator.d.ts +60 -0
- package/dist/parsers/feature-validator.d.ts.map +1 -0
- package/dist/parsers/feature-validator.js +483 -0
- package/dist/parsers/feature-validator.js.map +1 -0
- package/dist/parsers/index.d.ts +8 -0
- package/dist/parsers/index.d.ts.map +1 -0
- package/dist/parsers/index.js +9 -0
- package/dist/parsers/index.js.map +1 -0
- package/dist/parsers/parser-manager.d.ts +103 -0
- package/dist/parsers/parser-manager.d.ts.map +1 -0
- package/dist/parsers/parser-manager.js +321 -0
- package/dist/parsers/parser-manager.js.map +1 -0
- package/dist/parsers/parser.d.ts +23 -0
- package/dist/parsers/parser.d.ts.map +1 -0
- package/dist/parsers/parser.js +6 -0
- package/dist/parsers/parser.js.map +1 -0
- package/dist/parsers/react-parser.d.ts +22 -0
- package/dist/parsers/react-parser.d.ts.map +1 -0
- package/dist/parsers/react-parser.js +307 -0
- package/dist/parsers/react-parser.js.map +1 -0
- package/dist/parsers/svelte-parser.d.ts +33 -0
- package/dist/parsers/svelte-parser.d.ts.map +1 -0
- package/dist/parsers/svelte-parser.js +408 -0
- package/dist/parsers/svelte-parser.js.map +1 -0
- package/dist/parsers/vanilla-parser.d.ts +31 -0
- package/dist/parsers/vanilla-parser.d.ts.map +1 -0
- package/dist/parsers/vanilla-parser.js +590 -0
- package/dist/parsers/vanilla-parser.js.map +1 -0
- package/dist/parsers/vue-parser.d.ts +9 -0
- package/dist/parsers/vue-parser.d.ts.map +1 -0
- package/dist/parsers/vue-parser.js +16 -0
- package/dist/parsers/vue-parser.js.map +1 -0
- package/dist/terminal-header.d.ts +12 -0
- package/dist/terminal-header.js +45 -0
- package/dist/types/index.d.ts +83 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +5 -0
- package/dist/types/index.js.map +1 -0
- package/dist/ui/components.d.ts +133 -0
- package/dist/ui/components.d.ts.map +1 -0
- package/dist/ui/components.js +482 -0
- package/dist/ui/components.js.map +1 -0
- package/dist/ui/help.d.ts +11 -0
- package/dist/ui/help.d.ts.map +1 -0
- package/dist/ui/help.js +161 -0
- package/dist/ui/help.js.map +1 -0
- package/dist/ui/index.d.ts +5 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +5 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/prompts.d.ts +63 -0
- package/dist/ui/prompts.d.ts.map +1 -0
- package/dist/ui/prompts.js +611 -0
- package/dist/ui/prompts.js.map +1 -0
- package/dist/ui/terminal-header.d.ts +13 -0
- package/dist/ui/terminal-header.d.ts.map +1 -0
- package/dist/ui/terminal-header.js +46 -0
- package/dist/ui/terminal-header.js.map +1 -0
- package/package.json +80 -0
- package/src/ai/__tests__/gemini-analyzer.test.ts +181 -0
- package/src/ai/fix-manager.ts +362 -0
- package/src/ai/gemini-analyzer.ts +671 -0
- package/src/ai/index.ts +4 -0
- package/src/ai/jules-implementer.ts +459 -0
- package/src/commands/automation.ts +344 -0
- package/src/commands/check.ts +299 -0
- package/src/commands/config.ts +365 -0
- package/src/commands/fix.ts +234 -0
- package/src/commands/index.ts +6 -0
- package/src/commands/init.ts +142 -0
- package/src/commands/status.ts +0 -0
- package/src/core/api-key-manager.ts +298 -0
- package/src/core/baseguard.ts +742 -0
- package/src/core/baseline-checker.ts +563 -0
- package/src/core/cache-manager.ts +270 -0
- package/src/core/configuration-recovery.ts +676 -0
- package/src/core/configuration.ts +559 -0
- package/src/core/debug-logger.ts +590 -0
- package/src/core/directory-filter.ts +421 -0
- package/src/core/error-handler.ts +517 -0
- package/src/core/file-processor.ts +331 -0
- package/src/core/gitignore-manager.ts +169 -0
- package/src/core/graceful-degradation-manager.ts +596 -0
- package/src/core/index.ts +13 -0
- package/src/core/lazy-loader.ts +307 -0
- package/src/core/logger.ts +0 -0
- package/src/core/memory-manager.ts +294 -0
- package/src/core/startup-optimizer.ts +173 -0
- package/src/core/system-error-handler.ts +746 -0
- package/src/git/automation-engine.ts +361 -0
- package/src/git/github-manager.ts +260 -0
- package/src/git/hook-manager.ts +210 -0
- package/src/git/index.ts +4 -0
- package/src/index.ts +8 -0
- package/src/parsers/feature-validator.ts +559 -0
- package/src/parsers/index.ts +8 -0
- package/src/parsers/parser-manager.ts +419 -0
- package/src/parsers/parser.ts +26 -0
- package/src/parsers/react-parser-optimized.ts +161 -0
- package/src/parsers/react-parser.ts +359 -0
- package/src/parsers/svelte-parser.ts +506 -0
- package/src/parsers/vanilla-parser.ts +682 -0
- package/src/parsers/vue-parser.ts +472 -0
- package/src/types/index.ts +92 -0
- package/src/ui/components.ts +567 -0
- package/src/ui/help.ts +193 -0
- package/src/ui/index.ts +4 -0
- package/src/ui/prompts.ts +688 -0
- package/src/ui/terminal-header.ts +59 -0
- package/test-config-commands.js +56 -0
- package/test-header-simple.js +33 -0
- package/test-terminal-header.js +12 -0
- package/test-ui.js +29 -0
- package/tests/e2e/baseguard.e2e.test.ts +516 -0
- package/tests/e2e/cross-platform.e2e.test.ts +420 -0
- package/tests/e2e/git-integration.e2e.test.ts +487 -0
- package/tests/fixtures/react-project/package.json +14 -0
- package/tests/fixtures/react-project/src/App.css +76 -0
- package/tests/fixtures/react-project/src/App.tsx +77 -0
- package/tests/fixtures/svelte-project/package.json +11 -0
- package/tests/fixtures/svelte-project/src/App.svelte +369 -0
- package/tests/fixtures/vanilla-project/index.html +76 -0
- package/tests/fixtures/vanilla-project/script.js +331 -0
- package/tests/fixtures/vanilla-project/styles.css +359 -0
- package/tests/fixtures/vue-project/package.json +12 -0
- package/tests/fixtures/vue-project/src/App.vue +216 -0
- package/tsconfig.json +36 -0
- package/vitest.config.ts +10 -0
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
import { readdir, stat } from 'fs/promises';
|
|
2
|
+
import { join, basename, extname } from 'path';
|
|
3
|
+
import { glob } from 'glob';
|
|
4
|
+
/**
|
|
5
|
+
* Smart directory filtering to skip node_modules and build outputs
|
|
6
|
+
*/
|
|
7
|
+
export class DirectoryFilter {
|
|
8
|
+
defaultExcludePatterns = [
|
|
9
|
+
'node_modules',
|
|
10
|
+
'.git',
|
|
11
|
+
'.svn',
|
|
12
|
+
'.hg',
|
|
13
|
+
'dist',
|
|
14
|
+
'build',
|
|
15
|
+
'out',
|
|
16
|
+
'.next',
|
|
17
|
+
'.nuxt',
|
|
18
|
+
'.output',
|
|
19
|
+
'coverage',
|
|
20
|
+
'.nyc_output',
|
|
21
|
+
'.cache',
|
|
22
|
+
'.parcel-cache',
|
|
23
|
+
'.vscode',
|
|
24
|
+
'.idea',
|
|
25
|
+
'*.log',
|
|
26
|
+
'*.tmp',
|
|
27
|
+
'*.temp',
|
|
28
|
+
'.DS_Store',
|
|
29
|
+
'Thumbs.db'
|
|
30
|
+
];
|
|
31
|
+
defaultIncludeExtensions = [
|
|
32
|
+
'.js',
|
|
33
|
+
'.jsx',
|
|
34
|
+
'.ts',
|
|
35
|
+
'.tsx',
|
|
36
|
+
'.vue',
|
|
37
|
+
'.svelte',
|
|
38
|
+
'.css',
|
|
39
|
+
'.scss',
|
|
40
|
+
'.sass',
|
|
41
|
+
'.less',
|
|
42
|
+
'.html',
|
|
43
|
+
'.htm'
|
|
44
|
+
];
|
|
45
|
+
excludePatterns;
|
|
46
|
+
includeExtensions;
|
|
47
|
+
maxDepth;
|
|
48
|
+
maxFiles;
|
|
49
|
+
constructor(options = {}) {
|
|
50
|
+
this.excludePatterns = new Set([
|
|
51
|
+
...this.defaultExcludePatterns,
|
|
52
|
+
...(options.excludePatterns || [])
|
|
53
|
+
]);
|
|
54
|
+
this.includeExtensions = new Set(options.includeExtensions || this.defaultIncludeExtensions);
|
|
55
|
+
this.maxDepth = options.maxDepth || 10;
|
|
56
|
+
this.maxFiles = options.maxFiles || 10000;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Find files recursively with smart filtering
|
|
60
|
+
*/
|
|
61
|
+
async findFiles(directories, options = {}) {
|
|
62
|
+
const { patterns = [], excludePatterns = [], includeHidden = false } = options;
|
|
63
|
+
const allExcludePatterns = new Set([
|
|
64
|
+
...this.excludePatterns,
|
|
65
|
+
...excludePatterns
|
|
66
|
+
]);
|
|
67
|
+
const files = [];
|
|
68
|
+
const processedDirs = new Set();
|
|
69
|
+
for (const directory of directories) {
|
|
70
|
+
try {
|
|
71
|
+
await this.findFilesRecursive(directory, files, allExcludePatterns, patterns, includeHidden, 0, processedDirs);
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
console.warn(`Could not scan directory ${directory}: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
75
|
+
}
|
|
76
|
+
// Stop if we've found too many files
|
|
77
|
+
if (files.length >= this.maxFiles) {
|
|
78
|
+
console.warn(`Reached maximum file limit (${this.maxFiles}). Some files may be skipped.`);
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return files.slice(0, this.maxFiles);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Find files using glob patterns (faster for specific patterns)
|
|
86
|
+
*/
|
|
87
|
+
async findFilesWithGlob(patterns, options = {}) {
|
|
88
|
+
const { cwd = process.cwd(), excludePatterns = [] } = options;
|
|
89
|
+
try {
|
|
90
|
+
const allFiles = await glob(patterns, {
|
|
91
|
+
cwd,
|
|
92
|
+
ignore: [
|
|
93
|
+
...Array.from(this.excludePatterns),
|
|
94
|
+
...excludePatterns
|
|
95
|
+
],
|
|
96
|
+
absolute: true,
|
|
97
|
+
nodir: true
|
|
98
|
+
});
|
|
99
|
+
// Filter by supported extensions
|
|
100
|
+
return allFiles.filter(file => this.isSupportedFile(file));
|
|
101
|
+
}
|
|
102
|
+
catch (error) {
|
|
103
|
+
console.error(`Glob search failed: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
104
|
+
return [];
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Check if a file should be processed
|
|
109
|
+
*/
|
|
110
|
+
isSupportedFile(filePath) {
|
|
111
|
+
const extension = extname(filePath).toLowerCase();
|
|
112
|
+
return this.includeExtensions.has(extension);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Check if a directory should be excluded
|
|
116
|
+
*/
|
|
117
|
+
isExcludedDirectory(dirPath) {
|
|
118
|
+
const dirName = basename(dirPath);
|
|
119
|
+
// Check exact matches
|
|
120
|
+
if (this.excludePatterns.has(dirName)) {
|
|
121
|
+
return true;
|
|
122
|
+
}
|
|
123
|
+
// Check pattern matches
|
|
124
|
+
for (const pattern of this.excludePatterns) {
|
|
125
|
+
if (pattern.includes('*') || pattern.includes('?')) {
|
|
126
|
+
// Simple glob pattern matching
|
|
127
|
+
const regex = new RegExp(pattern
|
|
128
|
+
.replace(/\*/g, '.*')
|
|
129
|
+
.replace(/\?/g, '.'));
|
|
130
|
+
if (regex.test(dirName)) {
|
|
131
|
+
return true;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Get file statistics for a directory
|
|
139
|
+
*/
|
|
140
|
+
async getDirectoryStats(directoryPath) {
|
|
141
|
+
const stats = {
|
|
142
|
+
totalFiles: 0,
|
|
143
|
+
supportedFiles: 0,
|
|
144
|
+
directories: 0,
|
|
145
|
+
excludedDirectories: 0,
|
|
146
|
+
largestFiles: []
|
|
147
|
+
};
|
|
148
|
+
try {
|
|
149
|
+
await this.collectStats(directoryPath, stats, 0);
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
console.warn(`Could not collect stats for ${directoryPath}: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
153
|
+
}
|
|
154
|
+
// Sort largest files
|
|
155
|
+
stats.largestFiles.sort((a, b) => b.size - a.size);
|
|
156
|
+
stats.largestFiles = stats.largestFiles.slice(0, 10);
|
|
157
|
+
return stats;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Recursive file finding with smart filtering
|
|
161
|
+
*/
|
|
162
|
+
async findFilesRecursive(currentPath, results, excludePatterns, includePatterns, includeHidden, currentDepth, processedDirs) {
|
|
163
|
+
// Prevent infinite loops with symlinks
|
|
164
|
+
if (processedDirs.has(currentPath)) {
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
processedDirs.add(currentPath);
|
|
168
|
+
// Check depth limit
|
|
169
|
+
if (currentDepth >= this.maxDepth) {
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
// Check file limit
|
|
173
|
+
if (results.length >= this.maxFiles) {
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
try {
|
|
177
|
+
const entries = await readdir(currentPath);
|
|
178
|
+
for (const entry of entries) {
|
|
179
|
+
// Skip hidden files/directories unless explicitly included
|
|
180
|
+
if (!includeHidden && entry.startsWith('.')) {
|
|
181
|
+
continue;
|
|
182
|
+
}
|
|
183
|
+
const fullPath = join(currentPath, entry);
|
|
184
|
+
try {
|
|
185
|
+
const stats = await stat(fullPath);
|
|
186
|
+
if (stats.isDirectory()) {
|
|
187
|
+
// Check if directory should be excluded
|
|
188
|
+
if (this.isExcludedDirectory(fullPath)) {
|
|
189
|
+
continue;
|
|
190
|
+
}
|
|
191
|
+
// Recurse into directory
|
|
192
|
+
await this.findFilesRecursive(fullPath, results, excludePatterns, includePatterns, includeHidden, currentDepth + 1, processedDirs);
|
|
193
|
+
}
|
|
194
|
+
else if (stats.isFile()) {
|
|
195
|
+
// Check if file matches patterns
|
|
196
|
+
if (this.shouldIncludeFile(fullPath, includePatterns)) {
|
|
197
|
+
results.push(fullPath);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
catch (error) {
|
|
202
|
+
// Skip files/directories that can't be accessed
|
|
203
|
+
continue;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
catch (error) {
|
|
208
|
+
console.warn(`Could not read directory ${currentPath}: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Check if file should be included based on patterns
|
|
213
|
+
*/
|
|
214
|
+
shouldIncludeFile(filePath, includePatterns) {
|
|
215
|
+
// If no specific patterns, use extension filtering
|
|
216
|
+
if (includePatterns.length === 0) {
|
|
217
|
+
return this.isSupportedFile(filePath);
|
|
218
|
+
}
|
|
219
|
+
// Check against include patterns
|
|
220
|
+
const fileName = basename(filePath);
|
|
221
|
+
return includePatterns.some(pattern => {
|
|
222
|
+
if (pattern.includes('*') || pattern.includes('?')) {
|
|
223
|
+
const regex = new RegExp(pattern
|
|
224
|
+
.replace(/\*/g, '.*')
|
|
225
|
+
.replace(/\?/g, '.'));
|
|
226
|
+
return regex.test(fileName);
|
|
227
|
+
}
|
|
228
|
+
return fileName === pattern;
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Collect directory statistics recursively
|
|
233
|
+
*/
|
|
234
|
+
async collectStats(currentPath, stats, currentDepth) {
|
|
235
|
+
if (currentDepth >= this.maxDepth) {
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
try {
|
|
239
|
+
const entries = await readdir(currentPath);
|
|
240
|
+
for (const entry of entries) {
|
|
241
|
+
const fullPath = join(currentPath, entry);
|
|
242
|
+
try {
|
|
243
|
+
const fileStat = await stat(fullPath);
|
|
244
|
+
if (fileStat.isDirectory()) {
|
|
245
|
+
stats.directories++;
|
|
246
|
+
if (this.isExcludedDirectory(fullPath)) {
|
|
247
|
+
stats.excludedDirectories++;
|
|
248
|
+
continue;
|
|
249
|
+
}
|
|
250
|
+
await this.collectStats(fullPath, stats, currentDepth + 1);
|
|
251
|
+
}
|
|
252
|
+
else if (fileStat.isFile()) {
|
|
253
|
+
stats.totalFiles++;
|
|
254
|
+
if (this.isSupportedFile(fullPath)) {
|
|
255
|
+
stats.supportedFiles++;
|
|
256
|
+
}
|
|
257
|
+
// Track largest files
|
|
258
|
+
if (stats.largestFiles.length < 100) {
|
|
259
|
+
stats.largestFiles.push({
|
|
260
|
+
path: fullPath,
|
|
261
|
+
size: fileStat.size
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
catch (error) {
|
|
267
|
+
// Skip files/directories that can't be accessed
|
|
268
|
+
continue;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
catch (error) {
|
|
273
|
+
// Skip directories that can't be read
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Get supported extensions
|
|
278
|
+
*/
|
|
279
|
+
getSupportedExtensions() {
|
|
280
|
+
return Array.from(this.includeExtensions);
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Get exclude patterns
|
|
284
|
+
*/
|
|
285
|
+
getExcludePatterns() {
|
|
286
|
+
return Array.from(this.excludePatterns);
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Add custom exclude pattern
|
|
290
|
+
*/
|
|
291
|
+
addExcludePattern(pattern) {
|
|
292
|
+
this.excludePatterns.add(pattern);
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Remove exclude pattern
|
|
296
|
+
*/
|
|
297
|
+
removeExcludePattern(pattern) {
|
|
298
|
+
this.excludePatterns.delete(pattern);
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Add supported extension
|
|
302
|
+
*/
|
|
303
|
+
addSupportedExtension(extension) {
|
|
304
|
+
if (!extension.startsWith('.')) {
|
|
305
|
+
extension = '.' + extension;
|
|
306
|
+
}
|
|
307
|
+
this.includeExtensions.add(extension.toLowerCase());
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Remove supported extension
|
|
311
|
+
*/
|
|
312
|
+
removeSupportedExtension(extension) {
|
|
313
|
+
if (!extension.startsWith('.')) {
|
|
314
|
+
extension = '.' + extension;
|
|
315
|
+
}
|
|
316
|
+
this.includeExtensions.delete(extension.toLowerCase());
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
//# sourceMappingURL=directory-filter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"directory-filter.js","sourceRoot":"","sources":["../../src/core/directory-filter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error types for different API operations
|
|
3
|
+
*/
|
|
4
|
+
export declare enum ErrorType {
|
|
5
|
+
NETWORK = "network",
|
|
6
|
+
AUTHENTICATION = "authentication",
|
|
7
|
+
RATE_LIMIT = "rate_limit",
|
|
8
|
+
QUOTA_EXCEEDED = "quota_exceeded",
|
|
9
|
+
INVALID_REQUEST = "invalid_request",
|
|
10
|
+
SERVER_ERROR = "server_error",
|
|
11
|
+
TIMEOUT = "timeout",
|
|
12
|
+
CONFIGURATION = "configuration",
|
|
13
|
+
VALIDATION = "validation",
|
|
14
|
+
UNKNOWN = "unknown"
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Retry configuration for different error types
|
|
18
|
+
*/
|
|
19
|
+
export interface RetryConfig {
|
|
20
|
+
maxRetries: number;
|
|
21
|
+
baseDelay: number;
|
|
22
|
+
maxDelay: number;
|
|
23
|
+
backoffMultiplier: number;
|
|
24
|
+
retryableErrors: ErrorType[];
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Default retry configuration
|
|
28
|
+
*/
|
|
29
|
+
export declare const DEFAULT_RETRY_CONFIG: RetryConfig;
|
|
30
|
+
/**
|
|
31
|
+
* API operation error with context and recovery suggestions
|
|
32
|
+
*/
|
|
33
|
+
export declare class APIError extends Error {
|
|
34
|
+
readonly type: ErrorType;
|
|
35
|
+
readonly statusCode?: number;
|
|
36
|
+
readonly retryAfter?: number;
|
|
37
|
+
readonly quotaReset?: Date;
|
|
38
|
+
readonly suggestions: string[];
|
|
39
|
+
readonly context: Record<string, any>;
|
|
40
|
+
constructor(message: string, type: ErrorType, options?: {
|
|
41
|
+
statusCode?: number;
|
|
42
|
+
retryAfter?: number;
|
|
43
|
+
quotaReset?: Date;
|
|
44
|
+
suggestions?: string[];
|
|
45
|
+
context?: Record<string, any>;
|
|
46
|
+
cause?: Error;
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Comprehensive error handler for API operations
|
|
51
|
+
*/
|
|
52
|
+
export declare class ErrorHandler {
|
|
53
|
+
/**
|
|
54
|
+
* Handle and classify API errors
|
|
55
|
+
*/
|
|
56
|
+
static handleAPIError(error: any, context?: Record<string, any>): APIError;
|
|
57
|
+
/**
|
|
58
|
+
* Handle HTTP status code errors
|
|
59
|
+
*/
|
|
60
|
+
private static handleHTTPError;
|
|
61
|
+
/**
|
|
62
|
+
* Check if error is a network/connection error
|
|
63
|
+
*/
|
|
64
|
+
private static isNetworkError;
|
|
65
|
+
/**
|
|
66
|
+
* Check if error is a timeout error
|
|
67
|
+
*/
|
|
68
|
+
private static isTimeoutError;
|
|
69
|
+
/**
|
|
70
|
+
* Check if error is a configuration error
|
|
71
|
+
*/
|
|
72
|
+
private static isConfigurationError;
|
|
73
|
+
/**
|
|
74
|
+
* Parse retry-after header
|
|
75
|
+
*/
|
|
76
|
+
private static parseRetryAfter;
|
|
77
|
+
/**
|
|
78
|
+
* Parse quota reset time from headers
|
|
79
|
+
*/
|
|
80
|
+
private static parseQuotaReset;
|
|
81
|
+
/**
|
|
82
|
+
* Retry operation with exponential backoff
|
|
83
|
+
*/
|
|
84
|
+
static withRetry<T>(operation: () => Promise<T>, config?: Partial<RetryConfig>): Promise<T>;
|
|
85
|
+
/**
|
|
86
|
+
* Display error to user with helpful information
|
|
87
|
+
*/
|
|
88
|
+
static displayError(error: APIError): void;
|
|
89
|
+
/**
|
|
90
|
+
* Get fallback mode suggestions when APIs are unavailable
|
|
91
|
+
*/
|
|
92
|
+
static getFallbackSuggestions(errorType: ErrorType): string[];
|
|
93
|
+
/**
|
|
94
|
+
* Check if operation should continue in fallback mode
|
|
95
|
+
*/
|
|
96
|
+
static shouldUseFallbackMode(error: APIError): boolean;
|
|
97
|
+
/**
|
|
98
|
+
* Sleep for specified milliseconds
|
|
99
|
+
*/
|
|
100
|
+
private static sleep;
|
|
101
|
+
/**
|
|
102
|
+
* Validate API response structure
|
|
103
|
+
*/
|
|
104
|
+
static validateAPIResponse(response: any, expectedFields: string[]): void;
|
|
105
|
+
/**
|
|
106
|
+
* Create context object for error reporting
|
|
107
|
+
*/
|
|
108
|
+
static createContext(operation: string, params?: Record<string, any>): Record<string, any>;
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=error-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../../src/core/error-handler.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,oBAAY,SAAS;IACnB,OAAO,YAAY;IACnB,cAAc,mBAAmB;IACjC,UAAU,eAAe;IACzB,cAAc,mBAAmB;IACjC,eAAe,oBAAoB;IACnC,YAAY,iBAAiB;IAC7B,OAAO,YAAY;IACnB,aAAa,kBAAkB;IAC/B,UAAU,eAAe;IACzB,OAAO,YAAY;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,SAAS,EAAE,CAAC;CAC9B;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,WAWlC,CAAC;AAEF;;GAEG;AACH,qBAAa,QAAS,SAAQ,KAAK;IACjC,SAAgB,IAAI,EAAE,SAAS,CAAC;IAChC,SAAgB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpC,SAAgB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpC,SAAgB,UAAU,CAAC,EAAE,IAAI,CAAC;IAClC,SAAgB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtC,SAAgB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;gBAG3C,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,SAAS,EACf,OAAO,GAAE;QACP,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,IAAI,CAAC;QAClB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QACvB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC9B,KAAK,CAAC,EAAE,KAAK,CAAC;KACV;CAeT;AAED;;GAEG;AACH,qBAAa,YAAY;IACvB;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAAG,QAAQ;IA8E9E;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IA0G9B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAW7B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAQ7B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAQnC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAS9B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAS9B;;OAEG;WACU,SAAS,CAAC,CAAC,EACtB,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,MAAM,GAAE,OAAO,CAAC,WAAW,CAAM,GAChC,OAAO,CAAC,CAAC,CAAC;IAsCb;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IA6B1C;;OAEG;IACH,MAAM,CAAC,sBAAsB,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,EAAE;IAkC7D;;OAEG;IACH,MAAM,CAAC,qBAAqB,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO;IAUtD;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,KAAK;IAIpB;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,IAAI;IAgCzE;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;CAQ3F"}
|