UNPKG

barro

Version:

Flexible barrel file generation for Javascript and Typescript with watching built-in.

86 lines 3.78 kB
#!/usr/bin/env node "use strict"; 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