UNPKG

@dwp/govuk-casa

Version:

Framework for creating basic GOVUK Collect-And-Submit-Applications

58 lines (49 loc) 1.54 kB
/* eslint-disable class-methods-use-this */ /** * Test is value is present. * * Value is required. The following values will fail this rule: * (all values that satisify `Util.isEmpty()`) plus '\s' */ const { isEmpty, isObjectType, isStringable, stringifyInput, } = require('../../Util.js'); const ValidatorFactory = require('../ValidatorFactory.js'); const ValidationError = require('../ValidationError.js'); class Required extends ValidatorFactory { validate(value, dataContext = {}) { const { errorMsg = { inline: 'validation:rule.required.inline', summary: 'validation:rule.required.summary', }, } = this.config; let result; if (!isEmpty(value, { regexRemove: /\s/g, })) { result = Promise.resolve(); } else { result = Promise.reject(ValidationError.make({ errorMsg, dataContext })); } return result; } sanitise(value) { const coerce = (val) => (stringifyInput(val, undefined)); if (isStringable(value)) { return stringifyInput(value); } // Coerce all elements to Strings. // This only supports one dimensional array, with stringable element. if (Array.isArray(value)) { return value.map(coerce); } // Coerce all elements to Strings. // This only supports a one dimensional object, with stringable elements. if (isObjectType(value)) { return Object.fromEntries(Object.entries(value).map(([k, v]) => ([k, coerce(v)]))); } return undefined; } } module.exports = Required;