123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- "use strict";
- var __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
- };
- const lodash_1 = require("lodash");
- const microargs_1 = __importDefault(require("microargs"));
- const path_1 = __importDefault(require("path"));
- class CLIError extends Error {
- }
- function optionToString(optionName) {
- return optionName.length === 1 ? `-${optionName}` : `--${optionName}`;
- }
- function optionsToString(optionsKeys) {
- return optionsKeys.map(optionToString).join(" ");
- }
- function printHelp(scriptName, annotations, logger) {
- if (lodash_1.isEmpty(annotations)) {
- logger.log("Documentation not found");
- return null;
- }
- const { description, params, options } = annotations;
- const extra = lodash_1.omit(annotations, ["description", "params", "options"]);
- const usageOptions = lodash_1.isEmpty(options) ? "" : "[options]";
- const usageParams = !Array.isArray(params) || lodash_1.isEmpty(params) ? "" : `[${params.join(" ")}]`;
- logger.log(`Usage: ${path_1.default.basename(scriptName)} ${usageOptions} ${usageParams}\n`);
- if (description) {
- logger.log(`${description}\n`);
- }
- if (!lodash_1.isEmpty(options)) {
- logger.log("Options:\n");
- lodash_1.forEach(options, (value, key) => {
- logger.log(` ${lodash_1.padEnd(optionToString(key), 12)}${value}`);
- });
- }
- lodash_1.forEach(extra, (value, key) => {
- logger.log(`\n${lodash_1.capitalize(key)}:\n`);
- logger.log(`${value}\n`);
- });
- }
- const Cli = (argv, annotations = {}, help = printHelp, logger = console) => {
- return (callback) => {
- const { params, options } = microargs_1.default(argv.slice(2));
- const scriptName = path_1.default.basename(argv[1]);
- if (lodash_1.isString(annotations)) {
- annotations = {
- description: annotations
- };
- }
- if (options.help) {
- return help(scriptName, annotations, logger);
- }
- const annotatedOptionsKeys = (annotations &&
- annotations.options &&
- Object.keys(annotations.options)) ||
- [];
- const optionsKeys = Object.keys(options);
- const illegalOptionsKeys = lodash_1.difference(optionsKeys, annotatedOptionsKeys);
- if (annotatedOptionsKeys.length && illegalOptionsKeys.length) {
- const msg = `Illegal option: ${optionsToString(illegalOptionsKeys)}\n` +
- `Available options: ${optionsToString(annotatedOptionsKeys)}\n` +
- `Type "${scriptName} --help" for more information`;
- throw new CLIError(msg);
- }
- return callback(options, ...params);
- };
- };
- Cli.CliError = CLIError;
- module.exports = Cli;
- //# sourceMappingURL=index.js.map
|