v4-api.ts•1.58 kB
import { z } from 'zod'
type V4ErrorSchema = typeof V4ErrorSchema
const V4ErrorSchema = z.array(
	z.object({
		code: z.number().optional(),
		message: z.string(),
	})
)
export type V4Schema<TResultType extends z.ZodType> = z.ZodObject<{
	result: z.ZodNullable<TResultType>
	success: z.ZodBoolean
	errors: V4ErrorSchema
	messages: z.ZodArray<z.ZodAny>
}>
export type V4SchemaWithResultInfo<
	TResultType extends z.ZodType,
	TResultInfoType extends z.ZodType,
> = z.ZodObject<{
	result: z.ZodNullable<TResultType>
	success: z.ZodBoolean
	errors: V4ErrorSchema
	messages: z.ZodArray<z.ZodAny>
	result_info: z.ZodOptional<z.ZodNullable<TResultInfoType>>
}>
export function V4Schema<TResultType extends z.ZodType>(
	resultType: TResultType
): V4Schema<TResultType>
export function V4Schema<TResultType extends z.ZodType, TResultInfoType extends z.ZodType>(
	resultType: TResultType,
	resultInfoType: TResultInfoType
): V4SchemaWithResultInfo<TResultType, TResultInfoType>
export function V4Schema<TResultType extends z.ZodType, TResultInfoType extends z.ZodType>(
	resultType: TResultType,
	resultInfoType?: TResultInfoType
): V4Schema<TResultType> | V4SchemaWithResultInfo<TResultType, TResultInfoType> {
	if (resultInfoType) {
		return z.object({
			result: resultType.nullable(),
			result_info: resultInfoType.nullable().optional(),
			success: z.boolean(),
			errors: V4ErrorSchema,
			messages: z.array(z.any()),
		})
	} else {
		return z.object({
			result: resultType.nullable(),
			success: z.boolean(),
			errors: V4ErrorSchema,
			messages: z.array(z.any()),
		})
	}
}