import { error } from '../lib/result'; import { ValidationType } from '../lib/types'; // export let enumType = < // A extends string | number | boolean, // Rest extends (string | number | boolean)[] // >( // ...values: [A, ...Rest] // ): ValidationType => ({ // type: 'enum', // examples: values, // validate: value => { // if (!values.includes(value)) { // return error([ // { // code: 'invalid_enum', // message: `Invalid input, expected one of ${values.join(', ')}, received ${value}`, // received: value, // expected: values // } // ]); // } // return { success: true, value }; // } // }); export let enumOf = < const A extends string | number | boolean, Rest extends (string | number | boolean)[] >( values: [A, ...Rest], opts?: { name?: string; description?: string; } ): ValidationType => ({ type: 'enum', examples: values, name: opts?.name, description: opts?.description, validate: value => { if (!values.includes(value)) { return error([ { code: 'invalid_enum', message: `Invalid input, expected one of ${values.join(', ')}, received ${value}`, received: value, expected: values } ]); } return { success: true, value }; } });