viject
Version:
A tool for migrating your React app from react-scripts (Create React App) to Vite
36 lines (35 loc) • 1.06 kB
JavaScript
import { readFileSync, readdirSync, renameSync } from "node:fs";
import { Parser } from "acorn";
import jsx from "acorn-jsx";
const parser = Parser.extend(jsx());
function isJsx(source) {
try {
const ast = parser.parse(source, {
ecmaVersion: "latest",
sourceType: "module",
});
return JSON.stringify(ast).includes("JSX");
}
catch (_) {
return true;
}
}
export const convertJS2JSX = () => {
const files = readdirSyncRecursively("src").filter((file) => /\.js$/.test(file));
for (const file of files) {
const code = readFileSync(file, "utf-8");
if (isJsx(code)) {
renameSync(file, `${file}x`);
}
}
};
const readdirSyncRecursively = (directory) => {
const dirents = readdirSync(directory, { withFileTypes: true });
return dirents.flatMap((dirent) => {
const path = `${directory}/${dirent.name}`;
if (dirent.isDirectory()) {
return readdirSyncRecursively(path);
}
return [path];
});
};