| "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 |