import { CliCommandDefinitionParameter, CliValue, CliValueValidatorFunction } from './types'; import { coerceCliValue, isFunction, isRegExp } from './utils'; export const getCommandDefinitionParameterValue = ( value: CliValue, defParam: CliCommandDefinitionParameter, wasPassed = true ): CliValue => { let v = coerceCliValue(value || defParam.default, defParam.valueType); if (wasPassed && isFunction(defParam.transform)) { v = defParam.transform(v); } return v; }; export const validateCommandDefinitionParameterValue = ( value: CliValue, defParam: CliCommandDefinitionParameter ): boolean | string => { if (defParam.validate) { if (isFunction(defParam.valueType)) { const validator = defParam.validate as CliValueValidatorFunction; return validator(value); } else if (isRegExp(defParam.validate)) { const m = (defParam.validate as RegExp).exec(value as string); return !!m || `'${value}' fails RegExp validation: '${defParam.validate}'`; } else { // should have been caught in def validation // tslint:disable-next-line: no-console console.assert(false); } } return true; };