sucrase
Version:
Super-fast alternative to Babel for when you can target modern JS runtimes
64 lines (63 loc) • 2.64 kB
JavaScript
;
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);
}