import { HasTag, InferKind, SomeSpec, Spec, SpecsTags, SpecSuccess, SpectypesError } from './types.js' import { error } from './error.js' /** * Creates a union validator spec. * * @param specs Specs to validate union cases */ export const union: ( ...specs: Specs & { readonly [Index in keyof Specs]: Specs[Index] extends Spec ? HasTag extends true ? SpectypesError<'optional', 'union'> : HasTag extends true ? SpectypesError<'filter', 'union'> : HasTag extends true ? SpectypesError<'unknown', 'union'> : HasTag extends true ? SpectypesError<'union', 'union'> : HasTag extends true ? SpectypesError<'lazy', 'union'> : Specs[Index] : never } ) => Spec< ['union', ...SpecsTags], InferKind, { readonly [Index in keyof Specs]: Specs[Index] extends Spec ? SpecSuccess : never }[number] > = error