UNPKG

@vaadin/hilla-lit-form

Version:

Hilla form utils

104 lines 3.63 kB
import { getBinderNode } from './BinderNode.js'; import { AbstractModel } from './Models.js'; import { IsNumber, Required, ValidityStateValidator } from './Validators.js'; export class ValidationError extends Error { constructor(errors) { super([ 'There are validation errors in the form.', ...errors.map((e) => { const property = e.property instanceof AbstractModel ? String(getBinderNode(e.property).value) : e.property; return `${property} - ${e.validator.constructor.name}${e.message ? `: ${e.message}` : ''}`; }), ].join('\n - ')); Object.defineProperty(this, "errors", { enumerable: true, configurable: true, writable: true, value: void 0 }); this.errors = errors; this.name = this.constructor.name; } } export class ServerValidator { constructor(message) { Object.defineProperty(this, "name", { enumerable: true, configurable: true, writable: true, value: 'ServerValidator' }); Object.defineProperty(this, "message", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "validate", { enumerable: true, configurable: true, writable: true, value: () => false }); this.message = message; } } function setPropertyAbsolutePath(binderNodeName, result) { if (typeof result.property === 'string' && binderNodeName.length > 0) { result.property = `${binderNodeName}.${result.property}`; } return result; } export async function runValidator(model, validator, interpolateMessageCallback) { const binderNode = getBinderNode(model); const value = binderNode.value; const interpolateMessage = (message) => { if (!interpolateMessageCallback) { return message; } return interpolateMessageCallback(message, validator, binderNode); }; if (!binderNode.required && !new Required().validate(value) && !(validator instanceof IsNumber) && !(validator instanceof ValidityStateValidator)) { return []; } try { const result = await validator.validate(value, binderNode.binder); if (result === false) { return [ { message: interpolateMessage(validator.message), property: binderNode.name, validator, value, }, ]; } if (result === true || (Array.isArray(result) && result.length === 0)) { return []; } if (Array.isArray(result)) { return result.map((result2) => ({ message: interpolateMessage(validator.message), ...setPropertyAbsolutePath(binderNode.name, result2), validator, value, })); } return [ { message: interpolateMessage(validator.message), ...setPropertyAbsolutePath(binderNode.name, result), validator, value, }, ]; } catch (error) { console.error(`${binderNode.name} - Validator ${validator.constructor.name} threw an error:`, error); return [{ message: 'Validator threw an error', property: binderNode.name, validator, value }]; } } //# sourceMappingURL=Validation.js.map