super-productivity/scripts/fix-duplicate-imports.ts
Johannes Millan fd099ed4a1 fix: remove duplicate Log imports
- Fixed duplicate imports in 3 files:
  - language.service.ts
  - indexed-db-adapter.service.ts
  - global-theme.service.ts
- Created script to detect and fix duplicate imports automatically
- Build errors resolved
2025-07-10 14:28:03 +02:00

92 lines
2.2 KiB
TypeScript
Executable file

#!/usr/bin/env ts-node
import * as fs from 'fs';
import * as path from 'path';
import * as glob from 'glob';
// Pattern to find duplicate imports
const findDuplicateImports = (content: string): string[] => {
const importRegex = /^import\s+.*?;$/gm;
const imports = content.match(importRegex) || [];
const seen = new Set<string>();
const duplicates: string[] = [];
for (const imp of imports) {
const normalized = imp.trim();
if (seen.has(normalized)) {
duplicates.push(normalized);
} else {
seen.add(normalized);
}
}
return duplicates;
};
// Remove duplicate imports from content
const removeDuplicateImports = (content: string): string => {
const lines = content.split('\n');
const seenImports = new Set<string>();
const resultLines: string[] = [];
for (const line of lines) {
const trimmedLine = line.trim();
// Check if it's an import statement
if (trimmedLine.startsWith('import ') && trimmedLine.endsWith(';')) {
if (seenImports.has(trimmedLine)) {
// Skip duplicate import
continue;
}
seenImports.add(trimmedLine);
}
resultLines.push(line);
}
return resultLines.join('\n');
};
function processFile(filePath: string): boolean {
try {
const content = fs.readFileSync(filePath, 'utf8');
const duplicates = findDuplicateImports(content);
if (duplicates.length > 0) {
console.log(
`Found ${duplicates.length} duplicate imports in ${path.relative(process.cwd(), filePath)}:`,
);
duplicates.forEach((dup) => console.log(` - ${dup}`));
const fixedContent = removeDuplicateImports(content);
fs.writeFileSync(filePath, fixedContent, 'utf8');
return true;
}
return false;
} catch (error) {
console.error(`Error processing ${filePath}:`, error);
return false;
}
}
function main() {
console.log('Searching for duplicate imports...\n');
const files = glob.sync('src/**/*.ts', {
ignore: ['**/node_modules/**', '**/dist/**', '**/build/**'],
absolute: true,
});
let fixedCount = 0;
for (const file of files) {
if (processFile(file)) {
fixedCount++;
}
}
console.log(`\nFixed duplicate imports in ${fixedCount} files.`);
}
main();