mirror of
https://github.com/swc-project/swc.git
synced 2024-12-20 20:22:26 +03:00
0be20ff0ae
swc_ecma_transforms_react: - Implement new jsx transform. (#1103, denoland/deno#7993)
57 lines
1.7 KiB
TypeScript
57 lines
1.7 KiB
TypeScript
import * as fs from 'fs';
|
|
import * as path from 'path';
|
|
|
|
async function* walk(dir: string): AsyncGenerator<string> {
|
|
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() |