UNPKG

sucrase

Version:

Super-fast alternative to Babel for when you can target modern JS runtimes

64 lines (63 loc) 2.64 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); /* eslint-disable no-console */ const commander = require("commander"); const fs_1 = require("mz/fs"); const path_1 = require("path"); const index_1 = require("./index"); function run() { commander .description(`Sucrase: super-fast Babel alternative.`) .usage("[options] <srcDir>") .option("-d, --out-dir <out>", "Compile an input directory of modules into an output directory.") .option("--exclude-dirs <paths>", "Names of directories that should not be traversed.") .option("-t, --transforms <transforms>", "Comma-separated list of transforms to run.") .parse(process.argv); if (!commander.outDir) { console.error("Out directory is required"); process.exit(1); } if (!commander.transforms) { console.error("Transforms option is required."); process.exit(1); } if (!commander.args[0]) { console.error("Source directory is required."); process.exit(1); } const outDir = commander.outDir; const transforms = commander.transforms.split(","); const srcDir = commander.args[0]; const excludeDirs = commander.excludeDirs ? commander.excludeDirs.split(",") : []; buildDirectory(srcDir, outDir, excludeDirs, transforms).catch((e) => { process.exitCode = 1; console.error(e); }); } exports.default = run; async function buildDirectory(srcDirPath, outDirPath, excludeDirs, transforms) { const extension = transforms.includes("typescript") ? ".ts" : ".js"; if (!await fs_1.exists(outDirPath)) { await fs_1.mkdir(outDirPath); } for (const child of await fs_1.readdir(srcDirPath)) { if (["node_modules", ".git"].includes(child) || excludeDirs.includes(child)) { continue; } const srcChildPath = path_1.join(srcDirPath, child); const outChildPath = path_1.join(outDirPath, child); if ((await fs_1.stat(srcChildPath)).isDirectory()) { await buildDirectory(srcChildPath, outChildPath, excludeDirs, transforms); } else if (srcChildPath.endsWith(extension)) { const outPath = `${outChildPath.substr(0, outChildPath.length - 3)}.js`; await buildFile(srcChildPath, outPath, transforms); } } } async function buildFile(srcPath, outPath, transforms) { console.log(`${srcPath} -> ${outPath}`); const code = (await fs_1.readFile(srcPath)).toString(); const transformedCode = index_1.transform(code, { transforms }); await fs_1.writeFile(outPath, transformedCode); }