Files
lcbp3/fix-parseInt.cjs
admin 11984bfa29
CI Pipeline / build (push) Failing after 12m41s
Build and Deploy / deploy (push) Failing after 2m44s
260322:1648 Correct Coresspondence / Doing RFA / Correct CI
2026-03-22 16:48:12 +07:00

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');
}
});
});