barro
Version:
Flexible barrel file generation for Javascript and Typescript with watching built-in.
86 lines • 3.78 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const path_1 = require("path");
const fs_1 = require("fs");
const handlebars_1 = __importDefault(require("handlebars"));
const compileBarrel_1 = require("./compileBarrel");
const watchBarrelFiles_1 = require("./watchBarrelFiles");
const parseBarrel_1 = require("./utils/parseBarrel");
const flags = {
watch: "--watch",
write: "--write",
version: "--version",
};
const allFlags = Object.values(flags);
main();
async function main() {
var _a;
try {
const { name: packageName, version: packageVersion, } = require("../package.json");
const args = process.argv.slice(2);
// Find first non-flag argument
const barrelConfigPath = (_a = args.find((arg) => !allFlags.includes(arg))) !== null && _a !== void 0 ? _a : "./barro.js";
const watch = args.includes(flags.watch);
const write = args.includes(flags.write);
const logVersion = args.includes(flags.version);
// Always log the version, but close immediately if the --version flag is used.
console.log(`${packageName} v${packageVersion}`);
if (logVersion) {
process.exit(0);
}
const barrelConfigFullPath = path_1.isAbsolute(barrelConfigPath)
? barrelConfigPath
: path_1.join(process.cwd(), barrelConfigPath);
if (!fs_1.existsSync(barrelConfigFullPath)) {
throw new Error(`Barrel config file not found: ${barrelConfigFullPath}`);
}
const barrelConfigDir = path_1.parse(barrelConfigFullPath).dir;
const barrelConfigExport = require(barrelConfigFullPath);
const barrelConfigs = parseBarrel_1.parseBarrels(
/**
* Allow the barrel config to export a function.
*/
typeof barrelConfigExport === "function"
? barrelConfigExport({ Handlebars: handlebars_1.default })
: barrelConfigExport).map((barrelConfig) => ({
...barrelConfig,
// Fix relative paths
out: maybeRelative(barrelConfig.out, barrelConfigDir),
matchDirectory: maybeRelative(barrelConfig.matchDirectory, barrelConfigDir),
}));
if (write) {
console.log("Building barrels");
await Promise.all(barrelConfigs.map(async (barrelConfig) => {
console.log(`${path_1.join(barrelConfig.matchDirectory, barrelConfig.match.toString())} -> ${barrelConfig.out}`);
const barrelSource = await compileBarrel_1.compileBarrel(barrelConfig);
if (write) {
fs_1.writeFileSync(barrelConfig.out, barrelSource, "utf8");
}
}));
}
if (watch) {
console.log("Watching barrels");
for (const barrelConfig of barrelConfigs) {
watchBarrelFiles_1.watchBarrelFiles(barrelConfig, async (eventType, path, isCancelled) => {
console.log(`Change detected: ${eventType} ${path} - compiling barrel file ${barrelConfig.out}`);
const barrelSource = await compileBarrel_1.compileBarrel(barrelConfig);
if (write && !isCancelled()) {
fs_1.writeFileSync(barrelConfig.out, barrelSource, "utf8");
}
});
}
}
}
catch (error) {
console.error(error);
process.exit(1);
}
}
function maybeRelative(filepath, root) {
return path_1.isAbsolute(filepath) ? filepath : path_1.join(root, filepath);
}
//# sourceMappingURL=cli.js.map