xiaofu-ruoyi-vue/node_modules/microcli/lib/index.js

69 lines
2.8 KiB
JavaScript

"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