import { error } from '../lib/result'; import { ValidationError, ValidationType, ValidationTypeValue, ValidatorOptions } from '../lib/types'; export let union = < A extends ValidationType, B extends ValidationType, Rest extends ValidationType[] >( validators: [A, B, ...Rest], opts?: ValidatorOptions< ValidationTypeValue | ValidationTypeValue | ValidationTypeValue > ): ValidationType< ValidationTypeValue | ValidationTypeValue | ValidationTypeValue > => ({ type: 'union', name: opts?.name, items: validators, description: opts?.description, examples: validators.flatMap(v => v.examples || []), validate: value => { let errors: ValidationError[] = []; for (let validator of validators) { let result = validator.validate(value); if (result.success) return result; errors.push(...result.errors); } return error(errors); } });