UNPKG

1.28 kBPlain TextView Raw
1import { CliCommandDefinitionParameter, CliValue, CliValueValidatorFunction } from './types';
2import { coerceCliValue, isFunction, isRegExp } from './utils';
3
4export const getCommandDefinitionParameterValue = (
5 value: CliValue,
6 defParam: CliCommandDefinitionParameter,
7 wasPassed = true
8): CliValue => {
9 let v = coerceCliValue(value || defParam.default, defParam.valueType);
10 if (wasPassed && isFunction(defParam.transform)) {
11 v = defParam.transform(v);
12 }
13 return v;
14};
15
16export const validateCommandDefinitionParameterValue = (
17 value: CliValue,
18 defParam: CliCommandDefinitionParameter
19): boolean | string => {
20 if (defParam.validate) {
21 if (isFunction(defParam.valueType)) {
22 const validator = defParam.validate as CliValueValidatorFunction;
23 return validator(value);
24 } else if (isRegExp(defParam.validate)) {
25 const m = (defParam.validate as RegExp).exec(value as string);
26 return !!m || `'${value}' fails RegExp validation: '${defParam.validate}'`;
27 } else {
28 // should have been caught in def validation
29 // tslint:disable-next-line: no-console
30 console.assert(false);
31 }
32 }
33 return true;
34};