UNPKG

budgie-cli

Version:
90 lines 4.82 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const commander = require("commander"); const codes_1 = require("../codes"); const fileSystem_1 = require("../fileSystem"); const logger_1 = require("../logger"); const main_1 = require("../main"); const glob_1 = require("../utils/glob"); const values_1 = require("../utils/values"); const exclude_1 = require("./exclude"); const version_1 = require("./version"); /** * Parses raw string arguments and, if they're valid, calls to a main method. * * @param dependencies Raw string arguments and any system dependency overrides. * @returns Promise for the result of the main method. */ exports.cli = (dependencies) => __awaiter(void 0, void 0, void 0, function* () { const { argv } = dependencies; const fileSystem = values_1.defaultValue(dependencies.fileSystem, () => new fileSystem_1.FileSystem()); const globber = values_1.defaultValue(dependencies.globber, () => glob_1.globAllAsync); const logger = values_1.defaultValue(dependencies.logger, () => console); const mainExecutor = values_1.defaultValue(dependencies.main, () => main_1.main); const command = new commander.Command() .usage("[options] <file ...> --language [language]") .option("-b, --base-directory [base-directory]", "base directory to ignore from the beginning of file paths") .option("-e, --exclude [exclude...]", "file glob(s) to exclude") .option("-l, --language [language...]", "language(s) to convert to") .option("-l, --project [project]", "budgie.json project metadata file") .option("-n, --namespace [namespace]", "namespace before output path names") .option("-t, --tsconfig [tsconfig]", "(TypeScript only) configuration project") .option("-v, --verbosity [verbosity]", `Minimum logged verbosity level: "error" (default) or "log"`) .option("-V, --version", "output the CLI and Budgie version numbers") .on("--help", () => { logger.log(); logger.log(" Basic Budgie conversion:"); logger.log(); logger.log(" $ budgie --language Python file.bg"); logger.log(); logger.log(" Converting a TypeScript project to Budgie, then to Python and Ruby:"); logger.log(); logger.log(" $ budgie --language Python --language Ruby --tsconfig ./tsconfig ./*.ts"); logger.log(); logger.log(" Converting a TypeScript project to Budgie, then to C#, replacing the 'src' path with 'Budgie':"); logger.log(); logger.log(" $ budgie --base-directory src/ --language C# --namespace Budgie --tsconfig ./tsconfig ./**/*.ts"); logger.log(); }) .parse(argv); if ({}.hasOwnProperty.call(command, "version")) { yield version_1.printCliVersions(logger); return codes_1.ExitCode.Ok; } if (command.args.length === 0) { command.help(); return codes_1.ExitCode.Ok; } const [includes, excludes] = yield Promise.all([globber(command.args), exclude_1.getExcludes(command.exclude, globber)]); const filePaths = new Set(includes); for (const exclude of excludes) { filePaths.delete(exclude); } const languageNames = command.language !== undefined && typeof command.language === "string" ? [command.language] : command.language; const project = command.project === "false" ? undefined : command.project === undefined ? "budgie.json" : command.project; const verbosity = logger_1.parseVerbosity(command.verbosity); if (verbosity === undefined) { logger.error(`Unknown verbosity requested: '${command.verbosity}'.`); return codes_1.ExitCode.Error; } return mainExecutor({ baseDirectory: command.baseDirectory, filePaths, fileSystem, languageNames, logger: logger_1.wrapLoggerForVerbosity(logger, verbosity), namespace: command.namespace, project, typescriptConfig: command.tsconfig, }); }); //# sourceMappingURL=cli.js.map