77 lines
2.6 KiB
JavaScript
77 lines
2.6 KiB
JavaScript
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
function getAllFiles(dirPath, arrayOfFiles) {
|
|
const files = fs.readdirSync(dirPath);
|
|
arrayOfFiles = arrayOfFiles || [];
|
|
|
|
files.forEach(function (file) {
|
|
const fullPath = path.join(dirPath, file);
|
|
if (fs.statSync(fullPath).isDirectory()) {
|
|
arrayOfFiles = getAllFiles(fullPath, arrayOfFiles);
|
|
} else {
|
|
if (file.endsWith('.ts') || file.endsWith('.tsx')) {
|
|
arrayOfFiles.push(fullPath);
|
|
}
|
|
}
|
|
});
|
|
|
|
return arrayOfFiles;
|
|
}
|
|
|
|
const paths = ['backend/src', 'frontend/app', 'frontend/components'];
|
|
paths.forEach((p) => {
|
|
const fullPath = path.resolve(process.cwd(), p);
|
|
if (!fs.existsSync(fullPath)) return;
|
|
const files = getAllFiles(fullPath);
|
|
files.forEach((file) => {
|
|
let content = fs.readFileSync(file, 'utf8');
|
|
let changed = false;
|
|
|
|
// 1. Handle parseInt(expression, 10) -> Number(expression)
|
|
// Using a more greedy approach for expression
|
|
const newContent1 = content.replace(/parseInt\s*\(([\s\S]+?),\s*10\s*\)/g, (match, p1) => {
|
|
return `Number(${p1.trim()})`;
|
|
});
|
|
if (newContent1 !== content) {
|
|
content = newContent1;
|
|
changed = true;
|
|
}
|
|
|
|
// 2. Handle parseInt(expression) -> Number(expression)
|
|
const newContent2 = content.replace(/parseInt\s*\(([\s\S]+?)\)/g, (match, p1) => {
|
|
if (p1.trim().startsWith('Number(')) return match;
|
|
return `Number(${p1.trim()})`;
|
|
});
|
|
if (newContent2 !== content) {
|
|
content = newContent2;
|
|
changed = true;
|
|
}
|
|
|
|
// 3. Handle +expression -> Number(expression)
|
|
// Only if it's NOT part of a larger number literal or addition/subtraction
|
|
// This is tricky with regex, so we'll look for common patterns like @Param() id: string -> +id
|
|
// But the lint error message said "+value is forbidden", so it's likely single variable prefix
|
|
// We'll target patterns like: = +someVar, ( +someVar ), [ +someVar ], : +someVar, return +someVar
|
|
const patterns = [/(=|\(|\{|\[|:|,|\s|!)\+([a-zA-Z0-0_.]+(?:\([^)]*\))?)/g];
|
|
|
|
patterns.forEach((regex) => {
|
|
const newContent = content.replace(regex, (match, prefix, expr) => {
|
|
// Avoid replacing things like '1 + 2' or 'string + string'
|
|
// We only replace if the prefix is a delimiter or space and it's a unary '+'
|
|
if (expr.match(/^[0-9]/)) return match; // skip +1, +0.5
|
|
return `${prefix}Number(${expr})`;
|
|
});
|
|
if (newContent !== content) {
|
|
content = newContent;
|
|
changed = true;
|
|
}
|
|
});
|
|
|
|
if (changed) {
|
|
console.log(`Fixed: ${file}`);
|
|
fs.writeFileSync(file, content, 'utf8');
|
|
}
|
|
});
|
|
});
|