UNPKG

@pothos/plugin-zod

Version:

A Pothos plugin for adding argument validation

61 lines 3.13 kB
import type { MaybePromise, SchemaTypes } from '@pothos/core'; import type { GraphQLResolveInfo } from 'graphql'; import type { ZodError, ZodType } from 'zod'; export interface ValidationPluginOptions<Types extends SchemaTypes> { validationError?: ValidationErrorFn<Types>; } export type ValidationErrorFn<Types extends SchemaTypes> = (error: ZodError, args: Record<string, unknown>, context: Types['Context'], info: GraphQLResolveInfo) => Error | string; export type Constraint<T> = T | (T extends object ? [value: T, options: { message?: string; path?: string[]; }] : [value: T, options: { message?: string; }]); export type RefineConstraint<T = unknown> = Constraint<(value: T) => MaybePromise<boolean>> | Constraint<(value: T) => MaybePromise<boolean>>[]; export interface BaseValidationOptions<T = unknown> { refine?: RefineConstraint<T>; schema?: ZodType<T>; type?: string; } export interface NumberValidationOptions<T extends number = number> extends BaseValidationOptions<T> { type?: 'number'; min?: Constraint<number>; max?: Constraint<number>; positive?: Constraint<boolean>; nonnegative?: Constraint<boolean>; negative?: Constraint<boolean>; nonpositive?: Constraint<boolean>; int?: Constraint<boolean>; } export interface BigIntValidationOptions<T extends bigint = bigint> extends BaseValidationOptions<T> { type?: 'bigint'; } export interface BooleanValidationOptions<T extends boolean = boolean> extends BaseValidationOptions<T> { type?: 'boolean'; } export interface DateValidationOptions<T extends Date = Date> extends BaseValidationOptions<T> { type?: 'date'; } export interface StringValidationOptions<T extends string = string> extends BaseValidationOptions<T> { type?: 'string'; minLength?: Constraint<number>; maxLength?: Constraint<number>; length?: Constraint<number>; url?: Constraint<boolean>; uuid?: Constraint<boolean>; email?: Constraint<boolean>; regex?: Constraint<RegExp>; } export interface ObjectValidationOptions<T extends object = object> extends BaseValidationOptions<T> { type?: 'object'; } export interface ArrayValidationOptions<T extends unknown[] = unknown[]> extends BaseValidationOptions<T> { type?: 'array'; items?: ValidationOptions<T[number]>; minLength?: Constraint<number>; maxLength?: Constraint<number>; length?: Constraint<number>; } export type ValidationOptions<T> = RefineConstraint<T> | RefineConstraint<T>[] | (T extends number ? NumberValidationOptions<T> : T extends bigint ? BigIntValidationOptions<T> : T extends boolean ? BooleanValidationOptions<T> : T extends string ? StringValidationOptions<T> : T extends Date ? DateValidationOptions<T> : T extends unknown[] ? ArrayValidationOptions<T> : T extends object ? ObjectValidationOptions<T> : BaseValidationOptions<T>); export type ValidationOptionUnion = ArrayValidationOptions | BaseValidationOptions | BigIntValidationOptions | BooleanValidationOptions | DateValidationOptions | NumberValidationOptions | ObjectValidationOptions | StringValidationOptions; //# sourceMappingURL=types.d.ts.map