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,321 @@
|
|
|
1
|
+
import { FeatureValidator } from './feature-validator.js';
|
|
2
|
+
import { MemoryManager } from '../core/memory-manager.js';
|
|
3
|
+
import { readFile, stat } from 'fs/promises';
|
|
4
|
+
import { join } from 'path';
|
|
5
|
+
/**
|
|
6
|
+
* Parser manager that coordinates all parsers and provides concurrent processing
|
|
7
|
+
* for large codebases with advanced web APIs using lazy loading
|
|
8
|
+
*/
|
|
9
|
+
export class ParserManager {
|
|
10
|
+
parsers = new Map();
|
|
11
|
+
validator;
|
|
12
|
+
maxConcurrency;
|
|
13
|
+
initialized = false;
|
|
14
|
+
constructor(maxConcurrency = 10) {
|
|
15
|
+
this.validator = new FeatureValidator();
|
|
16
|
+
this.maxConcurrency = maxConcurrency;
|
|
17
|
+
// Don't initialize parsers immediately - use lazy loading
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Lazy load parsers only when needed
|
|
21
|
+
*/
|
|
22
|
+
async ensureParsersLoaded() {
|
|
23
|
+
if (this.initialized) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
try {
|
|
27
|
+
// Dynamically import parsers to reduce startup time
|
|
28
|
+
const [{ ReactParser }, { VueParser }, { SvelteParser }, { VanillaParser }] = await Promise.all([
|
|
29
|
+
import('./react-parser.js'),
|
|
30
|
+
import('./vue-parser.js'),
|
|
31
|
+
import('./svelte-parser.js'),
|
|
32
|
+
import('./vanilla-parser.js')
|
|
33
|
+
]);
|
|
34
|
+
this.parsers.set('react', new ReactParser());
|
|
35
|
+
this.parsers.set('vue', new VueParser());
|
|
36
|
+
this.parsers.set('svelte', new SvelteParser());
|
|
37
|
+
this.parsers.set('vanilla', new VanillaParser());
|
|
38
|
+
this.initialized = true;
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
console.warn('Failed to load some parsers:', error);
|
|
42
|
+
this.initialized = true;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Get parser for file type with lazy loading
|
|
47
|
+
*/
|
|
48
|
+
async getParserForFile(filePath) {
|
|
49
|
+
await this.ensureParsersLoaded();
|
|
50
|
+
for (const parser of this.parsers.values()) {
|
|
51
|
+
if (parser.canParse(filePath)) {
|
|
52
|
+
return parser;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Parse multiple files concurrently with error handling
|
|
59
|
+
*/
|
|
60
|
+
async parseFiles(filePaths) {
|
|
61
|
+
const allFeatures = [];
|
|
62
|
+
// Filter out unsupported files
|
|
63
|
+
const supportedFiles = filePaths.filter(filePath => this.canParseFile(filePath));
|
|
64
|
+
if (supportedFiles.length === 0) {
|
|
65
|
+
return [];
|
|
66
|
+
}
|
|
67
|
+
// Process files in batches for better performance
|
|
68
|
+
const batches = this.createBatches(supportedFiles, this.maxConcurrency);
|
|
69
|
+
for (const batch of batches) {
|
|
70
|
+
try {
|
|
71
|
+
const batchResults = await Promise.allSettled(batch.map(filePath => this.parseFile(filePath)));
|
|
72
|
+
batchResults.forEach((result, index) => {
|
|
73
|
+
if (result.status === 'fulfilled') {
|
|
74
|
+
allFeatures.push(...result.value);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
console.warn(`Failed to parse ${batch[index]}: ${result.reason}`);
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
// Small delay between batches to prevent overwhelming the system
|
|
81
|
+
if (batches.length > 1) {
|
|
82
|
+
await this.sleep(10);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
console.error(`Error processing batch: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// Validate and filter features
|
|
90
|
+
return this.validator.validateFeatures(allFeatures, this.maxConcurrency);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Parse a single file with memory optimization
|
|
94
|
+
*/
|
|
95
|
+
async parseFile(filePath) {
|
|
96
|
+
try {
|
|
97
|
+
// Find appropriate parser
|
|
98
|
+
const parser = await this.getParserForFile(filePath);
|
|
99
|
+
if (!parser) {
|
|
100
|
+
return [];
|
|
101
|
+
}
|
|
102
|
+
// Check file size and use streaming for large files
|
|
103
|
+
const fileStats = await stat(filePath);
|
|
104
|
+
if (MemoryManager.shouldStream(fileStats.size)) {
|
|
105
|
+
return await this.parseFileStreaming(filePath, parser);
|
|
106
|
+
}
|
|
107
|
+
// Read file content for smaller files
|
|
108
|
+
const content = await readFile(filePath, 'utf-8');
|
|
109
|
+
// Parse features
|
|
110
|
+
const features = await parser.parseFeatures(content, filePath);
|
|
111
|
+
// Add file path to features for tracking and optimize memory
|
|
112
|
+
return features.map(feature => MemoryManager.optimizeObject({
|
|
113
|
+
...feature,
|
|
114
|
+
file: filePath
|
|
115
|
+
}));
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
// Graceful error handling for unsupported files and syntax errors
|
|
119
|
+
if (error instanceof Error) {
|
|
120
|
+
if (error.message.includes('ENOENT')) {
|
|
121
|
+
console.warn(`File not found: ${filePath}`);
|
|
122
|
+
}
|
|
123
|
+
else if (error.message.includes('SyntaxError') || error.message.includes('Unexpected token')) {
|
|
124
|
+
console.warn(`Syntax error in ${filePath}: ${error.message}`);
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
console.warn(`Error parsing ${filePath}: ${error.message}`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
console.warn(`Unknown error parsing ${filePath}`);
|
|
132
|
+
}
|
|
133
|
+
return [];
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Parse large files using streaming to reduce memory usage
|
|
138
|
+
*/
|
|
139
|
+
async parseFileStreaming(filePath, parser) {
|
|
140
|
+
const features = [];
|
|
141
|
+
await MemoryManager.readFileStreaming(filePath, async (chunk, startLine) => {
|
|
142
|
+
try {
|
|
143
|
+
const chunkFeatures = await parser.parseFeatures(chunk, filePath);
|
|
144
|
+
// Adjust line numbers for chunk offset
|
|
145
|
+
const adjustedFeatures = chunkFeatures.map(feature => ({
|
|
146
|
+
...feature,
|
|
147
|
+
line: feature.line + startLine - 1,
|
|
148
|
+
file: filePath
|
|
149
|
+
}));
|
|
150
|
+
features.push(...adjustedFeatures);
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
// Continue processing other chunks even if one fails
|
|
154
|
+
console.warn(`Error parsing chunk in ${filePath}: ${error}`);
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
return features;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Check if a file can be parsed by any available parser
|
|
161
|
+
*/
|
|
162
|
+
async canParseFile(filePath) {
|
|
163
|
+
await this.ensureParsersLoaded();
|
|
164
|
+
for (const parser of this.parsers.values()) {
|
|
165
|
+
if (parser.canParse(filePath)) {
|
|
166
|
+
return true;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
return false;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Get all supported file extensions
|
|
173
|
+
*/
|
|
174
|
+
async getSupportedExtensions() {
|
|
175
|
+
await this.ensureParsersLoaded();
|
|
176
|
+
const extensions = new Set();
|
|
177
|
+
this.parsers.forEach(parser => {
|
|
178
|
+
parser.getSupportedExtensions().forEach(ext => extensions.add(ext));
|
|
179
|
+
});
|
|
180
|
+
return Array.from(extensions);
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Get parser information for debugging
|
|
184
|
+
*/
|
|
185
|
+
async getParserInfo() {
|
|
186
|
+
await this.ensureParsersLoaded();
|
|
187
|
+
return Array.from(this.parsers.values()).map(parser => ({
|
|
188
|
+
name: parser.getName(),
|
|
189
|
+
extensions: parser.getSupportedExtensions()
|
|
190
|
+
}));
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Filter files by supported extensions
|
|
194
|
+
*/
|
|
195
|
+
async filterSupportedFiles(filePaths) {
|
|
196
|
+
const supportedExtensions = await this.getSupportedExtensions();
|
|
197
|
+
return filePaths.filter(filePath => {
|
|
198
|
+
const extension = this.getFileExtension(filePath);
|
|
199
|
+
return supportedExtensions.includes(extension);
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Scan directory for supported files (recursive)
|
|
204
|
+
*/
|
|
205
|
+
async scanDirectory(directoryPath, options = {}) {
|
|
206
|
+
const { recursive = true, excludePatterns = ['node_modules', '.git', 'dist', 'build', '.next', '.nuxt'], maxDepth = 10 } = options;
|
|
207
|
+
const supportedFiles = [];
|
|
208
|
+
try {
|
|
209
|
+
await this.scanDirectoryRecursive(directoryPath, supportedFiles, excludePatterns, recursive, 0, maxDepth);
|
|
210
|
+
}
|
|
211
|
+
catch (error) {
|
|
212
|
+
console.error(`Error scanning directory ${directoryPath}: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
213
|
+
}
|
|
214
|
+
return supportedFiles;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Recursive directory scanning helper
|
|
218
|
+
*/
|
|
219
|
+
async scanDirectoryRecursive(currentPath, results, excludePatterns, recursive, currentDepth, maxDepth) {
|
|
220
|
+
if (currentDepth >= maxDepth) {
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
try {
|
|
224
|
+
const { readdir, stat } = await import('fs/promises');
|
|
225
|
+
const entries = await readdir(currentPath);
|
|
226
|
+
for (const entry of entries) {
|
|
227
|
+
const fullPath = join(currentPath, entry);
|
|
228
|
+
// Skip excluded patterns
|
|
229
|
+
if (excludePatterns.some(pattern => entry.includes(pattern))) {
|
|
230
|
+
continue;
|
|
231
|
+
}
|
|
232
|
+
try {
|
|
233
|
+
const stats = await stat(fullPath);
|
|
234
|
+
if (stats.isFile()) {
|
|
235
|
+
if (await this.canParseFile(fullPath)) {
|
|
236
|
+
results.push(fullPath);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
else if (stats.isDirectory() && recursive) {
|
|
240
|
+
await this.scanDirectoryRecursive(fullPath, results, excludePatterns, recursive, currentDepth + 1, maxDepth);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
catch (error) {
|
|
244
|
+
// Skip files/directories that can't be accessed
|
|
245
|
+
continue;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
catch (error) {
|
|
250
|
+
console.warn(`Could not read directory ${currentPath}: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Get processing statistics
|
|
255
|
+
*/
|
|
256
|
+
async getProcessingStats(filePaths) {
|
|
257
|
+
const supportedFiles = await this.filterSupportedFiles(filePaths);
|
|
258
|
+
const filesByType = {};
|
|
259
|
+
supportedFiles.forEach(filePath => {
|
|
260
|
+
const extension = this.getFileExtension(filePath);
|
|
261
|
+
filesByType[extension] = (filesByType[extension] || 0) + 1;
|
|
262
|
+
});
|
|
263
|
+
// Rough estimation: 10ms per file on average
|
|
264
|
+
const estimatedProcessingTime = Math.ceil(supportedFiles.length * 10 / this.maxConcurrency);
|
|
265
|
+
// Memory estimate: ~50KB per file on average
|
|
266
|
+
const memoryEstimate = `${Math.round(supportedFiles.length * 50 / 1024)}MB`;
|
|
267
|
+
return {
|
|
268
|
+
totalFiles: filePaths.length,
|
|
269
|
+
supportedFiles: supportedFiles.length,
|
|
270
|
+
filesByType,
|
|
271
|
+
estimatedProcessingTime,
|
|
272
|
+
memoryEstimate
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Get memory and performance statistics
|
|
277
|
+
*/
|
|
278
|
+
getStats() {
|
|
279
|
+
return {
|
|
280
|
+
parsersLoaded: this.parsers.size,
|
|
281
|
+
maxConcurrency: this.maxConcurrency,
|
|
282
|
+
memoryStats: MemoryManager.getMemoryStats()
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Create batches for concurrent processing
|
|
287
|
+
*/
|
|
288
|
+
createBatches(items, batchSize) {
|
|
289
|
+
const batches = [];
|
|
290
|
+
for (let i = 0; i < items.length; i += batchSize) {
|
|
291
|
+
batches.push(items.slice(i, i + batchSize));
|
|
292
|
+
}
|
|
293
|
+
return batches;
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Get file extension
|
|
297
|
+
*/
|
|
298
|
+
getFileExtension(filePath) {
|
|
299
|
+
const match = filePath.match(/\.[^.]+$/);
|
|
300
|
+
return match ? match[0] : '';
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Sleep utility for batch processing
|
|
304
|
+
*/
|
|
305
|
+
sleep(ms) {
|
|
306
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Get feature validator instance
|
|
310
|
+
*/
|
|
311
|
+
getValidator() {
|
|
312
|
+
return this.validator;
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Validate features without parsing (for external use)
|
|
316
|
+
*/
|
|
317
|
+
async validateFeatures(features) {
|
|
318
|
+
return this.validator.validateFeatures(features, this.maxConcurrency);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
//# sourceMappingURL=parser-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser-manager.js","sourceRoot":"","sources":["../../src/parsers/parser-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { DetectedFeature } from '../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Abstract base class for all code parsers
|
|
4
|
+
*/
|
|
5
|
+
export declare abstract class Parser {
|
|
6
|
+
/**
|
|
7
|
+
* Check if this parser can handle the given file
|
|
8
|
+
*/
|
|
9
|
+
abstract canParse(filePath: string): boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Parse features from file content
|
|
12
|
+
*/
|
|
13
|
+
abstract parseFeatures(content: string, filePath: string): Promise<DetectedFeature[]>;
|
|
14
|
+
/**
|
|
15
|
+
* Get supported file extensions for this parser
|
|
16
|
+
*/
|
|
17
|
+
abstract getSupportedExtensions(): string[];
|
|
18
|
+
/**
|
|
19
|
+
* Get parser name for identification
|
|
20
|
+
*/
|
|
21
|
+
abstract getName(): string;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/parsers/parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD;;GAEG;AACH,8BAAsB,MAAM;IAC1B;;OAEG;IACH,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAE5C;;OAEG;IACH,QAAQ,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAErF;;OAEG;IACH,QAAQ,CAAC,sBAAsB,IAAI,MAAM,EAAE;IAE3C;;OAEG;IACH,QAAQ,CAAC,OAAO,IAAI,MAAM;CAC3B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/parsers/parser.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,OAAgB,MAAM;CAoB3B"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Parser } from './parser.js';
|
|
2
|
+
import type { DetectedFeature } from '../types/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* React/JSX parser using Babel - extracts ALL web platform features
|
|
5
|
+
* while ignoring React-specific APIs
|
|
6
|
+
*/
|
|
7
|
+
export declare class ReactParser extends Parser {
|
|
8
|
+
private readonly REACT_SPECIFIC_APIS;
|
|
9
|
+
private readonly WEB_PLATFORM_APIS;
|
|
10
|
+
private readonly CSS_PROPERTIES;
|
|
11
|
+
canParse(filePath: string): boolean;
|
|
12
|
+
parseFeatures(content: string, filePath: string): Promise<DetectedFeature[]>;
|
|
13
|
+
private extractWebAPIFeature;
|
|
14
|
+
private extractWebAPICall;
|
|
15
|
+
private extractInlineCSS;
|
|
16
|
+
private getMemberExpressionName;
|
|
17
|
+
private isTopLevelAwait;
|
|
18
|
+
private getContext;
|
|
19
|
+
getSupportedExtensions(): string[];
|
|
20
|
+
getName(): string;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=react-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react-parser.d.ts","sourceRoot":"","sources":["../../src/parsers/react-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGzD;;;GAGG;AACH,qBAAa,WAAY,SAAQ,MAAM;IACrC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAiBjC;IAEH,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAwC/B;IAEH,OAAO,CAAC,QAAQ,CAAC,cAAc,CAuB5B;IAEH,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAI7B,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAiIlF,OAAO,CAAC,oBAAoB;IAoB5B,OAAO,CAAC,iBAAiB;IA0BzB,OAAO,CAAC,gBAAgB;IAwCxB,OAAO,CAAC,uBAAuB;IAkB/B,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,UAAU;IAMlB,sBAAsB,IAAI,MAAM,EAAE;IAIlC,OAAO,IAAI,MAAM;CAGlB"}
|