export type GenericEnumType = { [key in keyof T]: Partial; }; export type Unboxed = T extends (infer U)[] ? U : T; export type Validator = { validators?: ((args: Unboxed, context: C) => boolean | Promise)[]; enabled: boolean; attributes?: GenericEnumType, boolean>; }; export type Union< Roles, Resolvers, Actions, Context = unknown, > = GenericEnumType< Roles, { [resolver in keyof Resolvers]: Partial< Record> >; } >;