budgie-cli
Version:
Node CLI for Budgie.
90 lines • 4.82 kB
JavaScript
;
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