import * as fs from "fs"; import * as path from "path"; async function* walk(dir: string): AsyncGenerator { for await (const d of await fs.promises.opendir(dir)) { const entry = path.join(dir, d.name); if (d.isDirectory()) yield* walk(entry); else if (d.isFile()) yield entry; } } // Then, use it with a simple async for loop async function main() { // TODO: Generalize path for await (const f of walk("src/jsx/fixture")) { if (!f.endsWith(".json")) { continue; } const obj = JSON.parse( await fs.promises.readFile(f, { encoding: "utf-8" }) ); const dir = path.dirname(f); if (obj.throws) { await fs.promises.writeFile( path.join(dir, "output.stderr"), obj.throws ); } console.log(f); if (obj.plugins) { if (obj.plugins.includes("transform-react-jsx")) { const newObj = { ...obj, }; delete newObj.sourceType; delete newObj.plugins; await fs.promises.writeFile(f, JSON.stringify(newObj), { encoding: "utf-8", }); continue; } for (const [plugin, config] of obj.plugins) { if (plugin === "transform-react-jsx") { console.log(plugin, config); const newObj = { ...obj, ...config, }; delete newObj.sourceType; delete newObj.plugins; await fs.promises.writeFile(f, JSON.stringify(newObj), { encoding: "utf-8", }); break; } } } } } main();