UNPKG

@decaf-ts/fabric-weaver

Version:
118 lines 13.7 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.BaseCLI = void 0; const commander_1 = require("commander"); const index_1 = require("../../index.cjs"); const logging_1 = require("@decaf-ts/logging"); const path_1 = require("../../utils-old/path.cjs"); const env_vars_1 = require("../constants/env-vars.cjs"); const banner_1 = require("../../utils-old/banner.cjs"); const fs_1 = __importDefault(require("fs")); const path_2 = __importDefault(require("path")); const parsers_1 = require("../../utils/parsers.cjs"); /** * @class BaseCLI * @description Base class for creating command-line interfaces using Commander * @summary This class provides a foundation for building CLIs in the Fabric Weaver project. * It sets up a Commander program with basic configuration and logging. * * @example * class MyCLI extends BaseCLI { * constructor() { * super("my-cli", "My CLI description"); * this.setupCommands(); * } * * private setupCommands() { * this.program * .command("hello") * .description("Say hello") * .action(() => console.log("Hello, world!")); * } * } * * const cli = new MyCLI(); * cli.run(); */ class BaseCLI { /** * @constructor * @param {string} name - The name of the CLI program * @param {string} description - A brief description of the CLI program */ constructor(name, description) { this.program = new commander_1.Command(); this.log = logging_1.Logging.for(this.constructor.name); this.program .name(name) .description(description) .version(index_1.VERSION) .option("-s, --skip-banner", "Suppress the Fabric Weaver banner") .option("-l, --limiter", "Supress the line after the command output") .hook("preAction", (cmd) => { const skipBanner = cmd.opts().skipBanner === true; const skipLimiter = cmd.opts().limiter === true; (0, banner_1.printBanner)(skipBanner); this.log.debug(`Skip banner: ${skipBanner}`); this.log.debug(`Skip Limiter: ${skipLimiter}`); this.log.debug(`Starting ${this.program.name()} v${index_1.VERSION}`); (0, path_1.addFabricToPath)(process.env[env_vars_1.EnvVars.FABRIC_BIN_FOLDER]); }) .hook("postAction", (cmd) => { const skipLimiter = cmd.opts().limiter === true; (0, banner_1.printBorder)(skipLimiter); }); this.sleep(); this.copy(); } sleep() { this.program .command("sleep") .option("--time <number>", "sleep time in seconds", parsers_1.safeParseInt) .action(async () => { const time = this.program.opts().time || 120; const ms = time * 1000; await new Promise((resolve) => setTimeout(resolve, ms)); }); } copy() { this.program .command("copy") .description("Copy a file from origin to destination") .requiredOption("--origin <string>", "Origin file path") .requiredOption("--dest <string>", "Destination file path") .action(async (options) => { try { const { origin, dest } = options; // Check if the origin file exists if (!fs_1.default.existsSync(origin)) { this.log.error(`Origin file does not exist: ${origin}`); return; } // Ensure the destination directory exists const destDir = path_2.default.dirname(dest); if (!fs_1.default.existsSync(destDir)) { fs_1.default.mkdirSync(destDir, { recursive: true }); } // Copy the file fs_1.default.copyFileSync(origin, dest); this.log.info(`File copied successfully from ${origin} to ${dest}`); } catch (error) { this.log.error(`Error copying file: ${error.message}`); } }); } /** * @method run * @description Parses the command-line arguments and executes the appropriate command */ run() { this.program.parse(process.argv); } } exports.BaseCLI = BaseCLI; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1jbGkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29yZS9jbGkvYmFzZS1jbGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEseUNBQW9DO0FBQ3BDLHVDQUFzQztBQUN0QywrQ0FBb0Q7QUFDcEQsK0NBQXVEO0FBQ3ZELG9EQUFnRDtBQUNoRCxtREFBa0U7QUFDbEUsNENBQW9CO0FBQ3BCLGdEQUF3QjtBQUN4QixpREFBbUQ7QUFFbkQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUJHO0FBQ0gsTUFBc0IsT0FBTztJQUkzQjs7OztPQUlHO0lBQ0gsWUFBWSxJQUFZLEVBQUUsV0FBbUI7UUFDM0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLG1CQUFPLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsR0FBRyxHQUFHLGlCQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFOUMsSUFBSSxDQUFDLE9BQU87YUFDVCxJQUFJLENBQUMsSUFBSSxDQUFDO2FBQ1YsV0FBVyxDQUFDLFdBQVcsQ0FBQzthQUN4QixPQUFPLENBQUMsZUFBTyxDQUFDO2FBQ2hCLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxtQ0FBbUMsQ0FBQzthQUNoRSxNQUFNLENBQUMsZUFBZSxFQUFFLDJDQUEyQyxDQUFDO2FBQ3BFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUN6QixNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQztZQUNsRCxNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQztZQUNoRCxJQUFBLG9CQUFXLEVBQUMsVUFBVSxDQUFDLENBQUM7WUFDeEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLFVBQVUs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QUNQLENBQUM7SUFFRDs7O09BR0c7SUFDSSxHQUFHO1FBQ1IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25DLENBQUM7Q0FDRjtBQXhGRCwwQkF3RkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tYW5kIH0gZnJvbSBcImNvbW1hbmRlclwiO1xuaW1wb3J0IHsgVkVSU0lPTiB9IGZyb20gXCIuLi8uLi9pbmRleFwiO1xuaW1wb3J0IHsgTG9nZ2VyLCBMb2dnaW5nIH0gZnJvbSBcIkBkZWNhZi10cy9sb2dnaW5nXCI7XG5pbXBvcnQgeyBhZGRGYWJyaWNUb1BhdGggfSBmcm9tIFwiLi4vLi4vdXRpbHMtb2xkL3BhdGhcIjtcbmltcG9ydCB7IEVudlZhcnMgfSBmcm9tIFwiLi4vY29uc3RhbnRzL2Vudi12YXJzXCI7XG5pbXBvcnQgeyBwcmludEJhbm5lciwgcHJpbnRCb3JkZXIgfSBmcm9tIFwiLi4vLi4vdXRpbHMtb2xkL2Jhbm5lclwiO1xuaW1wb3J0IGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IHNhZmVQYXJzZUludCB9IGZyb20gXCIuLi8uLi91dGlscy9wYXJzZXJzXCI7XG5cbi8qKlxuICogQGNsYXNzIEJhc2VDTElcbiAqIEBkZXNjcmlwdGlvbiBCYXNlIGNsYXNzIGZvciBjcmVhdGluZyBjb21tYW5kLWxpbmUgaW50ZXJmYWNlcyB1c2luZyBDb21tYW5kZXJcbiAqIEBzdW1tYXJ5IFRoaXMgY2xhc3MgcHJvdmlkZXMgYSBmb3VuZGF0aW9uIGZvciBidWlsZGluZyBDTElzIGluIHRoZSBGYWJyaWMgV2VhdmVyIHByb2plY3QuXG4gKiBJdCBzZXRzIHVwIGEgQ29tbWFuZGVyIHByb2dyYW0gd2l0aCBiYXNpYyBjb25maWd1cmF0aW9uIGFuZCBsb2dnaW5nLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjbGFzcyBNeUNMSSBleHRlbmRzIEJhc2VDTEkge1xuICogICBjb25zdHJ1Y3RvcigpIHtcbiAqICAgICBzdXBlcihcIm15LWNsaVwiLCBcIk15IENMSSBkZXNjcmlwdGlvblwiKTtcbiAqICAgICB0aGlzLnNldHVwQ29tbWFuZHMoKTtcbiAqICAgfVxuICpcbiAqICAgcHJpdmF0ZSBzZXR1cENvbW1hbmRzKCkge1xuICogICAgIHRoaXMucHJvZ3JhbVxuICogICAgICAgLmNvbW1hbmQoXCJoZWxsb1wiKVxuICogICAgICAgLmRlc2NyaXB0aW9uKFwiU2F5IGhlbGxvXCIpXG4gKiAgICAgICAuYWN0aW9uKCgpID0+IGNvbnNvbGUubG9nKFwiSGVsbG8sIHdvcmxkIVwiKSk7XG4gKiAgIH1cbiAqIH1cbiAqXG4gKiBjb25zdCBjbGkgPSBuZXcgTXlDTEkoKTtcbiAqIGNsaS5ydW4oKTtcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VDTEkge1xuICBwcm90ZWN0ZWQgcHJvZ3JhbTogQ29tbWFuZDtcbiAgcHJvdGVjdGVkIGxvZzogTG9nZ2VyO1xuXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgQ0xJIHByb2dyYW1cbiAgICogQHBhcmFtIHtzdHJpbmd9IGRlc2NyaXB0aW9uIC0gQSBicmllZiBkZXNjcmlwdGlvbiBvZiB0aGUgQ0xJIHByb2dyYW1cbiAgICovXG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZykge1xuICAgIHRoaXMucHJvZ3JhbSA9IG5ldyBDb21tYW5kKCk7XG4gICAgdGhpcy5sb2cgPSBMb2dnaW5nLmZvcih0aGlzLmNvbnN0cnVjdG9yLm5hbWUpO1xuXG4gICAgdGhpcy5wcm9ncmFtXG4gICAgICAubmFtZShuYW1lKVxuICAgICAgLmRlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKVxuICAgICAgLnZlcnNpb24oVkVSU0lPTilcbiAgICAgIC5vcHRpb24oXCItcywgLS1za2lwLWJhbm5lclwiLCBcIlN1cHByZXNzIHRoZSBGYWJyaWMgV2VhdmVyIGJhbm5lclwiKVxuICAgICAgLm9wdGlvbihcIi1sLCAtLWxpbWl0ZXJcIiwgXCJTdXByZXNzIHRoZSBsaW5lIGFmdGVyIHRoZSBjb21tYW5kIG91dHB1dFwiKVxuICAgICAgLmhvb2soXCJwcmVBY3Rpb25cIiwgKGNtZCkgPT4ge1xuICAgICAgICBjb25zdCBza2lwQmFubmVyID0gY21kLm9wdHMoKS5za2lwQmFubmVyID09PSB0cnVlO1xuICAgICAgICBjb25zdCBza2lwTGltaXRlciA9IGNtZC5vcHRzKCkubGltaXRlciA9PT0gdHJ1ZTtcbiAgICAgICAgcHJpbnRCYW5uZXIoc2tpcEJhbm5lcik7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKGBTa2lwIGJhbm5lcjogJHtza2lwQmFubmVyfWApO1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgU2tpcCBMaW1pdGVyOiAke3NraXBMaW1pdGVyfWApO1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgU3RhcnRpbmcgJHt0aGlzLnByb2dyYW0ubmFtZSgpfSB2JHtWRVJTSU9OfWApO1xuICAgICAgICBhZGRGYWJyaWNUb1BhdGgocHJvY2Vzcy5lbnZbRW52VmFycy5GQUJSSUNfQklOX0ZPTERFUl0pO1xuICAgICAgfSlcbiAgICAgIC5ob29rKFwicG9zdEFjdGlvblwiLCAoY21kKSA9PiB7XG4gICAgICAgIGNvbnN0IHNraXBMaW1pdGVyID0gY21kLm9wdHMoKS5saW1pdGVyID09PSB0cnVlO1xuICAgICAgICBwcmludEJvcmRlcihza2lwTGltaXRlcik7XG4gICAgICB9KTtcblxuICAgIHRoaXMuc2xlZXAoKTtcbiAgICB0aGlzLmNvcHkoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2xlZXAoKSB7XG4gICAgdGhpcy5wcm9ncmFtXG4gICAgICAuY29tbWFuZChcInNsZWVwXCIpXG4gICAgICAub3B0aW9uKFwiLS10aW1lIDxudW1iZXI+XCIsIFwic2xlZXAgdGltZSBpbiBzZWNvbmRzXCIsIHNhZmVQYXJzZUludClcbiAgICAgIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0aW1lID0gdGhpcy5wcm9ncmFtLm9wdHMoKS50aW1lIHx8IDEyMDtcbiAgICAgICAgY29uc3QgbXMgPSB0aW1lICogMTAwMDtcblxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNvcHkoKSB7XG4gICAgdGhpcy5wcm9ncmFtXG4gICAgICAuY29tbWFuZChcImNvcHlcIilcbiAgICAgIC5kZXNjcmlwdGlvbihcIkNvcHkgYSBmaWxlIGZyb20gb3JpZ2luIHRvIGRlc3RpbmF0aW9uXCIpXG4gICAgICAucmVxdWlyZWRPcHRpb24oXCItLW9yaWdpbiA8c3RyaW5nPlwiLCBcIk9yaWdpbiBmaWxlIHBhdGhcIilcbiAgICAgIC5yZXF1aXJlZE9wdGlvbihcIi0tZGVzdCA8c3RyaW5nPlwiLCBcIkRlc3RpbmF0aW9uIGZpbGUgcGF0aFwiKVxuICAgICAgLmFjdGlvbihhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHsgb3JpZ2luLCBkZXN0IH0gPSBvcHRpb25zO1xuXG4gICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIG9yaWdpbiBmaWxlIGV4aXN0c1xuICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhvcmlnaW4pKSB7XG4gICAgICAgICAgICB0aGlzLmxvZy5lcnJvcihgT3JpZ2luIGZpbGUgZG9lcyBub3QgZXhpc3Q6ICR7b3JpZ2lufWApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEVuc3VyZSB0aGUgZGVzdGluYXRpb24gZGlyZWN0b3J5IGV4aXN0c1xuICAgICAgICAgIGNvbnN0IGRlc3REaXIgPSBwYXRoLmRpcm5hbWUoZGVzdCk7XG4gICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKGRlc3REaXIpKSB7XG4gICAgICAgICAgICBmcy5ta2RpclN5bmMoZGVzdERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQ29weSB0aGUgZmlsZVxuICAgICAgICAgIGZzLmNvcHlGaWxlU3luYyhvcmlnaW4sIGRlc3QpO1xuXG4gICAgICAgICAgdGhpcy5sb2cuaW5mbyhgRmlsZSBjb3BpZWQgc3VjY2Vzc2Z1bGx5IGZyb20gJHtvcmlnaW59IHRvICR7ZGVzdH1gKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgICB0aGlzLmxvZy5lcnJvcihgRXJyb3IgY29weWluZyBmaWxlOiAkeyhlcnJvciBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQG1ldGhvZCBydW5cbiAgICogQGRlc2NyaXB0aW9uIFBhcnNlcyB0aGUgY29tbWFuZC1saW5lIGFyZ3VtZW50cyBhbmQgZXhlY3V0ZXMgdGhlIGFwcHJvcHJpYXRlIGNvbW1hbmRcbiAgICovXG4gIHB1YmxpYyBydW4oKTogdm9pZCB7XG4gICAgdGhpcy5wcm9ncmFtLnBhcnNlKHByb2Nlc3MuYXJndik7XG4gIH1cbn1cbiJdfQ==