61 lines
1.6 KiB
JavaScript
Executable File
61 lines
1.6 KiB
JavaScript
Executable File
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
// Get all TypeScript files in a directory recursively
|
|
function getTypeScriptFiles(dir) {
|
|
const files = [];
|
|
|
|
function traverse(currentDir) {
|
|
const entries = fs.readdirSync(currentDir, { withFileTypes: true });
|
|
|
|
for (const entry of entries) {
|
|
const fullPath = path.join(currentDir, entry.name);
|
|
|
|
if (entry.isDirectory()) {
|
|
traverse(fullPath);
|
|
} else if (entry.isFile() && entry.name.endsWith('.ts')) {
|
|
files.push(fullPath);
|
|
}
|
|
}
|
|
}
|
|
|
|
traverse(dir);
|
|
return files;
|
|
}
|
|
|
|
// Fix imports in a file
|
|
function fixImportsInFile(filePath) {
|
|
console.log(`Processing ${filePath}`);
|
|
let content = fs.readFileSync(filePath, 'utf8');
|
|
|
|
// Regular expression to match relative imports without file extensions
|
|
const importRegex = /(import\s+(?:[^'"]*\s+from\s+)?['"])(\.\.[^'"]*?)(['"])/g;
|
|
|
|
// Add .js extension to relative imports
|
|
content = content.replace(importRegex, (match, start, importPath, end) => {
|
|
// Don't add extension if it already has one or ends with a directory
|
|
if (importPath.endsWith('.js') || importPath.endsWith('/')) {
|
|
return match;
|
|
}
|
|
return `${start}${importPath}.js${end}`;
|
|
});
|
|
|
|
fs.writeFileSync(filePath, content);
|
|
}
|
|
|
|
// Main function
|
|
function main() {
|
|
const srcDir = path.join(__dirname, '..', 'src');
|
|
const files = getTypeScriptFiles(srcDir);
|
|
|
|
console.log(`Found ${files.length} TypeScript files`);
|
|
|
|
for (const file of files) {
|
|
fixImportsInFile(file);
|
|
}
|
|
|
|
console.log('Done');
|
|
}
|
|
|
|
main();
|