import {BaseConfig, PropertyFormatter, PropertyResult} from './types'; function tryToFormat( value: string, formatter: PropertyFormatter, ): PropertyResult { try { return {error: false, value: formatter(value)}; } catch (error) { return {error: error as Error, value: undefined}; } } export default function formatProperty( propertyResult: PropertyResult, propertyConfig: BaseConfig, ): PropertyResult { const {defaultValue, format, required = true} = propertyConfig; const hasDefaultValue = typeof defaultValue !== 'undefined'; const hasError = propertyResult.error !== false; const hasFormat = typeof format !== 'undefined'; const hasValue = typeof propertyResult.value !== 'undefined'; if (hasError ? required && !hasDefaultValue : hasValue && !hasFormat) { return propertyResult; } return hasValue && hasFormat ? tryToFormat( propertyResult.value as string, format as PropertyFormatter, ) : {error: false, value: defaultValue}; }