crapifyme
Version:
Ultra-fast developer productivity CLI tools - remove comments, logs, and more
122 lines • 5.87 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.logsCommand = void 0;
const commander_1 = require("commander");
const shared_1 = require("../../shared");
const logic_1 = require("./logic");
exports.logsCommand = new commander_1.Command('logs')
.description('Remove console.log statements while preserving important ones')
.argument('[paths...]', 'Files or directories to process', ['.'])
.option('-k, --keep <patterns>', 'Comma-separated patterns to preserve')
.option('-e, --extensions <ext>', 'File extensions to process', 'js,ts,jsx,tsx,vue,svelte,astro')
.option('-x, --exclude <patterns>', 'Glob patterns to exclude')
.option('--no-preserve-debug', 'Remove console.debug statements')
.option('--no-preserve-error', 'Remove console.error statements')
.option('--no-preserve-warn', 'Remove console.warn statements')
.action(async (paths, options, command) => {
const globalOptions = command.parent?.opts() || {};
const logger = new shared_1.Logger(globalOptions.verbose, globalOptions.quiet, globalOptions.json);
if (!globalOptions.force) {
const vcsResult = (0, shared_1.detectVersionControl)();
if (!vcsResult.detected) {
logger.error('No version control system detected in this project or its parent directories.');
logger.error('This tool removes console.log statements from your code, which is a potentially destructive operation.');
logger.error('Use --force to proceed without version control.');
process.exit(shared_1.ExitCode.Error);
}
if (globalOptions.verbose) {
logger.info(`Version control detected: ${vcsResult.type} at ${vcsResult.path}`);
}
}
try {
const extensions = options.extensions.split(',').map((e) => e.trim());
const patterns = (0, shared_1.createFilePatterns)(paths, extensions);
const excludePatterns = options.exclude
?.split(',')
.map((p) => p.trim())
.filter(Boolean) || [];
logger.info(`Search patterns: ${patterns.join(', ')}`);
if (excludePatterns.length > 0) {
logger.info(`Exclude patterns: ${excludePatterns.join(', ')}`);
}
const files = await (0, shared_1.findFiles)(patterns, excludePatterns);
if (files.length === 0) {
logger.warn('No files found to process');
logger.info(`Searched in: ${paths.join(', ')}`);
logger.info(`Extensions: ${extensions.join(', ')}`);
process.exit(shared_1.ExitCode.Success);
}
logger.info(`Found ${files.length} file${files.length === 1 ? '' : 's'} to process`);
if (globalOptions.dryRun) {
logger.info('DRY RUN - No files will be modified');
}
const processor = new logic_1.LogsProcessor({
keep: options.keep?.split(',').map((p) => p.trim()) || [],
preserveDebug: options.preserveDebug,
preserveError: options.preserveError,
preserveWarn: options.preserveWarn
});
const stats = {
filesProcessed: 0,
itemsRemoved: 0,
itemsPreserved: 0,
errors: []
};
for (const file of files) {
try {
const content = await (0, shared_1.readFile)(file);
const result = processor.processFile(content);
if (result.modified && !globalOptions.dryRun) {
await (0, shared_1.writeFile)(file, result.content);
}
stats.filesProcessed++;
stats.itemsRemoved += result.removed;
stats.itemsPreserved += result.preserved;
if (result.modified) {
logger.success(`${file}`);
console.log(` ┣ Console logs removed: ${result.removed}`);
console.log(` ┣ Console logs preserved: ${result.preserved}`);
console.log(` ┗ Status: ${globalOptions.dryRun ? 'DRY RUN - would be modified' : 'Modified'}`);
}
else if (globalOptions.verbose) {
logger.info(`${file} - No console.log statements found`);
}
}
catch (error) {
stats.errors.push({ file, error: error.message });
logger.error(`Failed to process ${file}`, error);
}
}
if (globalOptions.json) {
logger.json(stats);
}
else {
(0, shared_1.showComplete)();
if (stats.errors.length > 0) {
logger.error(`Processing completed with ${stats.errors.length} error${stats.errors.length === 1 ? '' : 's'}`);
}
else {
logger.success('Processing completed successfully');
}
const filesModified = stats.itemsRemoved > 0 ? 'with changes' : 'no changes needed';
logger.info(`Files processed: ${stats.filesProcessed} (${filesModified})`);
logger.info(`Console logs removed: ${stats.itemsRemoved}`);
logger.info(`Console logs preserved: ${stats.itemsPreserved}`);
if (globalOptions.dryRun && stats.itemsRemoved > 0) {
logger.warn('DRY RUN MODE - No files were actually modified');
logger.info('Remove --dry-run to apply changes');
}
}
const exitCode = stats.errors.length > 0
? shared_1.ExitCode.Error
: stats.itemsRemoved > 0
? shared_1.ExitCode.IssuesFound
: shared_1.ExitCode.Success;
process.exit(exitCode);
}
catch (error) {
logger.error('Fatal error', error);
process.exit(shared_1.ExitCode.Error);
}
});
//# sourceMappingURL=index.js.map