UNPKG

@gmjs/cli-wrapper

Version:
119 lines (118 loc) 4.66 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.mergeCliOptions = void 0; const util_1 = require("../util"); function mergeCliOptions(cliOptions, parseResultOptions) { const cliNameOptionList = Object.entries(cliOptions); const parseResultOptionsMap = new Map(parseResultOptions.map((o) => [o.name, o])); const parseResultOptionsObj = Object.fromEntries(parseResultOptions.map((o) => [(0, util_1.kebabCaseToCamelCase)(o.name), o])); const nameOptionPairs = []; for (const cliNameOption of cliNameOptionList) { const name = cliNameOption[0]; const cliOption = cliNameOption[1]; const parseResultOption = parseResultOptionsMap.get((0, util_1.camelCaseToKebabCase)(name)); if (parseResultOption) { if (cliOption.type === 'string') { assertOptionType(parseResultOption.type, 'string'); const choicesSet = new Set(cliOption.choices); if (parseResultOption.multiple) { for (const value of parseResultOption.value) { if (cliOption.choices && !choicesSet.has(value)) { return createInvalidChoiceOptionResult(value, cliOption.choices); } } nameOptionPairs.push([ name, { type: 'string', multiple: true, value: parseResultOption.value, }, ]); } else { if (cliOption.choices && !choicesSet.has(parseResultOption.value)) { return createInvalidChoiceOptionResult(parseResultOption.value, cliOption.choices); } nameOptionPairs.push([ name, { type: 'string', multiple: false, value: parseResultOption.value, }, ]); } } else if (cliOption.type === 'boolean') { assertOptionType(parseResultOption.type, 'boolean'); nameOptionPairs.push([ name, { type: 'boolean', value: parseResultOption.value, }, ]); } } else { if (cliOption.required === true || (cliOption.required instanceof Function && cliOption.required(parseResultOptionsObj) === true)) { return { success: false, message: `Missing required option '${name}'.`, }; } if (cliOption.defaultValue) { if (cliOption.type === 'string') { if (cliOption.multiple) { nameOptionPairs.push([ name, { type: 'string', multiple: true, value: cliOption.defaultValue, }, ]); } else { nameOptionPairs.push([ name, { type: 'string', multiple: false, value: cliOption.defaultValue, }, ]); } } else if (cliOption.type === 'boolean') { nameOptionPairs.push([ name, { type: 'boolean', value: cliOption.defaultValue, }, ]); } } } } return { success: true, nameOptionPairs, }; } exports.mergeCliOptions = mergeCliOptions; function assertOptionType(actual, expected) { if (actual !== expected) { throw new Error(`Invalid option type '${actual}', expected '${expected}'. This is a programming error.`); } } function createInvalidChoiceOptionResult(value, choices) { return { success: false, message: `Invalid option value: '${value}'. Valid choices are: ${choices}.`, }; }