@gmjs/cli-wrapper
Version:
94 lines (93 loc) • 3.26 kB
JavaScript
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;
}
;