UNPKG

@gmjs/cli-wrapper

Version:
94 lines (93 loc) 3.26 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.normalizeOptionName = exports.getOptionsFromString = exports.isValidOptionString = exports.getOptionShortToLongNameMap = exports.getOptionNameMap = exports.createErrorParseResult = exports.createSuccessParseResult = void 0; const util_1 = require("../util"); function createSuccessParseResult(options) { return { success: true, options, }; } exports.createSuccessParseResult = createSuccessParseResult; function createErrorParseResult(message) { return { success: false, message, }; } exports.createErrorParseResult = createErrorParseResult; function getOptionNameMap(options) { const optionNameMap = new Map(); for (const [key, option] of Object.entries(options)) { const name = (0, util_1.camelCaseToKebabCase)(key); optionNameMap.set(name, option); } return optionNameMap; } exports.getOptionNameMap = getOptionNameMap; function getOptionShortToLongNameMap(options) { const optionShortToLongNameMap = new Map(); for (const [key, option] of Object.entries(options)) { if (option.short) { optionShortToLongNameMap.set(option.short, (0, util_1.camelCaseToKebabCase)(key)); } } return optionShortToLongNameMap; } exports.getOptionShortToLongNameMap = getOptionShortToLongNameMap; function isValidOptionString(optionStr) { if (optionStr.startsWith('--')) { if (optionStr.startsWith('--no-') ? optionStr.length <= 6 : optionStr.length <= 3) { return false; } return LONG_FORM_OPTION_NAME_REGEX.test(optionStr); } else if (optionStr.startsWith('-')) { return SHORT_FORM_OPTION_NAME_REGEX.test(optionStr); } else { return false; } } exports.isValidOptionString = isValidOptionString; const LONG_FORM_OPTION_NAME_REGEX = /^--(?:no-)?[a-z][\da-z]*(?:-[a-z][\da-z]*)*$/; const SHORT_FORM_OPTION_NAME_REGEX = /^-[A-Za-z]+$/; function getOptionsFromString(optionsStr) { return optionsStr.startsWith('--') ? [optionsStr.slice(2)] : // eslint-disable-next-line unicorn/no-useless-spread [...optionsStr.slice(1)]; } exports.getOptionsFromString = getOptionsFromString; function normalizeOptionName(optionName, optionShortToLongNameMap) { const isShortName = optionName.length === 1; let negated; let longOptionName; if (isShortName) { negated = isUpperCase(optionName); const positiveOptionName = negated ? optionName.toLowerCase() : optionName; longOptionName = optionShortToLongNameMap.get(positiveOptionName); if (!longOptionName) { return { unknownOption: true, name: positiveOptionName, negated, }; } } else { negated = optionName.startsWith('no-'); longOptionName = negated ? optionName.slice(3) : optionName; } return { unknownOption: false, name: longOptionName, negated, }; } exports.normalizeOptionName = normalizeOptionName; function isUpperCase(value) { return value.toUpperCase() === value && value.toLowerCase() !== value; }