UNPKG

cogsbox-shape

Version:

A TypeScript library for creating type-safe database schemas with Zod validation, SQL type definitions, and automatic client/server transformations. Unifies client, server, and database types through a single schema definition, with built-in support for r

1,132 lines 228 kB
import { z } from "zod"; type CurrentTimestampConfig = { default: "CURRENT_TIMESTAMP"; defaultValue: Date; }; export declare const isFunction: (fn: unknown) => fn is Function; export declare function currentTimeStamp(): CurrentTimestampConfig; type SQLType = ({ type: "int"; nullable?: boolean; default?: number; } | { type: "boolean"; nullable?: boolean; default?: boolean; } | { type: "date" | "datetime"; nullable?: boolean; default?: "CURRENT_TIMESTAMP"; defaultValue?: Date; } | { type: "date" | "datetime"; nullable?: boolean; default?: Date; } | { type: "varchar" | "char" | "text" | "longtext"; nullable?: boolean; length?: number; default?: string; }) & { pk?: true; }; type BaseConfig = { nullable?: boolean; pk?: true; field?: string; }; type IntConfig = BaseConfig & { default?: number; }; type BooleanConfig = BaseConfig & { default?: boolean; }; type DateConfig = BaseConfig & { type?: "date" | "datetime"; default?: Date; }; type StringConfig = BaseConfig & { length?: number; default?: string; }; type SQLToZodType<T extends SQLType, TDefault extends boolean> = T["pk"] extends true ? TDefault extends true ? z.ZodString : z.ZodNumber : T["nullable"] extends true ? T["type"] extends "varchar" | "char" | "text" | "longtext" ? z.ZodNullable<z.ZodString> : T["type"] extends "int" ? z.ZodNullable<z.ZodNumber> : T["type"] extends "boolean" ? z.ZodNullable<z.ZodBoolean> : T["type"] extends "date" | "datetime" ? T extends { default: "CURRENT_TIMESTAMP"; } ? TDefault extends true ? never : z.ZodNullable<z.ZodDate> : z.ZodNullable<z.ZodDate> : never : T["type"] extends "varchar" | "char" | "text" | "longtext" ? z.ZodString : T["type"] extends "int" ? z.ZodNumber : T["type"] extends "boolean" ? z.ZodBoolean : T["type"] extends "date" | "datetime" ? T extends { default: "CURRENT_TIMESTAMP"; } ? TDefault extends true ? never : z.ZodDate : z.ZodDate : never; export declare const shape: { int: (config?: IntConfig) => { config: { sql: { nullable?: boolean; pk?: true; field?: string; default?: number; type: "int"; }; zodSqlSchema: z.ZodNumber; zodNewSchema: z.ZodNumber; initialValue: number; zodClientSchema: z.ZodNumber; zodValidationSchema: z.ZodNumber; }; validation: <TValidationNext extends z.ZodTypeAny>(schema: TValidationNext | ((tools: { sql: z.ZodNumber; initialState: z.ZodNumber; client: z.ZodNumber; }) => TValidationNext)) => { config: { sql: { nullable?: boolean; pk?: true; field?: string; default?: number; type: "int"; }; zodSqlSchema: z.ZodNumber; zodNewSchema: z.ZodNumber; initialValue: number; zodClientSchema: z.ZodNumber; zodValidationSchema: TValidationNext; }; transform: (transforms: { toClient: (dbValue: number) => number; toDb: (clientValue: number) => number; }) => { config: { sql: { nullable?: boolean; pk?: true; field?: string; default?: number; type: "int"; }; zodSqlSchema: z.ZodNumber; zodNewSchema: z.ZodNumber; initialValue: number; zodClientSchema: z.ZodNumber; zodValidationSchema: TValidationNext; } & { transforms: { toClient: (dbValue: number) => number; toDb: (clientValue: number) => number; }; }; }; }; client: <TClientNext extends z.ZodTypeAny>(schema: TClientNext | ((tools: { sql: z.ZodNumber; initialState: z.ZodNumber; }) => TClientNext)) => { config: { sql: { nullable?: boolean; pk?: true; field?: string; default?: number; type: "int"; }; zodSqlSchema: z.ZodNumber; zodNewSchema: z.ZodNumber; initialValue: number; zodClientSchema: TClientNext; zodValidationSchema: TClientNext; }; validation: <TValidationNext extends z.ZodTypeAny>(schema: TValidationNext | ((tools: { sql: z.ZodNumber; initialState: z.ZodNumber; client: TClientNext; }) => TValidationNext)) => { config: { sql: { nullable?: boolean; pk?: true; field?: string; default?: number; type: "int"; }; zodSqlSchema: z.ZodNumber; zodNewSchema: z.ZodNumber; initialValue: number; zodClientSchema: TClientNext; zodValidationSchema: TValidationNext; }; transform: (transforms: { toClient: (dbValue: number) => z.TypeOf<TClientNext>; toDb: (clientValue: z.TypeOf<TClientNext>) => number; }) => { config: { sql: { nullable?: boolean; pk?: true; field?: string; default?: number; type: "int"; }; zodSqlSchema: z.ZodNumber; zodNewSchema: z.ZodNumber; initialValue: number; zodClientSchema: TClientNext; zodValidationSchema: TValidationNext; } & { transforms: { toClient: (dbValue: number) => z.TypeOf<TClientNext>; toDb: (clientValue: z.TypeOf<TClientNext>) => number; }; }; }; }; transform: (transforms: { toClient: (dbValue: number) => z.TypeOf<TClientNext>; toDb: (clientValue: z.TypeOf<TClientNext>) => number; }) => { config: { sql: { nullable?: boolean; pk?: true; field?: string; default?: number; type: "int"; }; zodSqlSchema: z.ZodNumber; zodNewSchema: z.ZodNumber; initialValue: number; zodClientSchema: TClientNext; zodValidationSchema: TClientNext; } & { transforms: { toClient: (dbValue: number) => z.TypeOf<TClientNext>; toDb: (clientValue: z.TypeOf<TClientNext>) => number; }; }; }; }; transform: (transforms: { toClient: (dbValue: number) => number; toDb: (clientValue: number) => number; }) => { config: { sql: { nullable?: boolean; pk?: true; field?: string; default?: number; type: "int"; }; zodSqlSchema: z.ZodNumber; zodNewSchema: z.ZodNumber; initialValue: number; zodClientSchema: z.ZodNumber; zodValidationSchema: z.ZodNumber; } & { transforms: { toClient: (dbValue: number) => number; toDb: (clientValue: number) => number; }; }; }; initialState: { <TDefaultNext>(defaultValue: () => TDefaultNext): { config: { sql: { nullable?: boolean; pk?: true; field?: string; default?: number; type: "int"; }; zodSqlSchema: z.ZodNumber; zodNewSchema: z.ZodNumber; initialValue: TDefaultNext; zodClientSchema: z.ZodNumber; zodValidationSchema: z.ZodNumber; }; validation: <TValidationNext extends z.ZodTypeAny>(schema: TValidationNext | ((tools: { sql: z.ZodNumber; initialState: z.ZodNumber; client: z.ZodNumber; }) => TValidationNext)) => { config: { sql: { nullable?: boolean; pk?: true; field?: string; default?: number; type: "int"; }; zodSqlSchema: z.ZodNumber; zodNewSchema: z.ZodNumber; initialValue: TDefaultNext; zodClientSchema: z.ZodNumber; zodValidationSchema: TValidationNext; }; transform: (transforms: { toClient: (dbValue: number) => number; toDb: (clientValue: number) => number; }) => { config: { sql: { nullable?: boolean; pk?: true; field?: string; default?: number; type: "int"; }; zodSqlSchema: z.ZodNumber; zodNewSchema: z.ZodNumber; initialValue: TDefaultNext; zodClientSchema: z.ZodNumber; zodValidationSchema: TValidationNext; } & { transforms: { toClient: (dbValue: number) => number; toDb: (clientValue: number) => number; }; }; }; }; client: <TClientNext extends z.ZodTypeAny>(schema: TClientNext | ((tools: { sql: z.ZodNumber; initialState: z.ZodNumber; }) => TClientNext)) => { config: { sql: { nullable?: boolean; pk?: true; field?: string; default?: number; type: "int"; }; zodSqlSchema: z.ZodNumber; zodNewSchema: z.ZodNumber; initialValue: TDefaultNext; zodClientSchema: TClientNext; zodValidationSchema: TClientNext; }; validation: <TValidationNext extends z.ZodTypeAny>(schema: TValidationNext | ((tools: { sql: z.ZodNumber; initialState: z.ZodNumber; client: TClientNext; }) => TValidationNext)) => { config: { sql: { nullable?: boolean; pk?: true; field?: string; default?: number; type: "int"; }; zodSqlSchema: z.ZodNumber; zodNewSchema: z.ZodNumber; initialValue: TDefaultNext; zodClientSchema: TClientNext; zodValidationSchema: TValidationNext; }; transform: (transforms: { toClient: (dbValue: number) => z.TypeOf<TClientNext>; toDb: (clientValue: z.TypeOf<TClientNext>) => number; }) => { config: { sql: { nullable?: boolean; pk?: true; field?: string; default?: number; type: "int"; }; zodSqlSchema: z.ZodNumber; zodNewSchema: z.ZodNumber; initialValue: TDefaultNext; zodClientSchema: TClientNext; zodValidationSchema: TValidationNext; } & { transforms: { toClient: (dbValue: number) => z.TypeOf<TClientNext>; toDb: (clientValue: z.TypeOf<TClientNext>) => number; }; }; }; }; transform: (transforms: { toClient: (dbValue: number) => z.TypeOf<TClientNext>; toDb: (clientValue: z.TypeOf<TClientNext>) => number; }) => { config: { sql: { nullable?: boolean; pk?: true; field?: string; default?: number; type: "int"; }; zodSqlSchema: z.ZodNumber; zodNewSchema: z.ZodNumber; initialValue: TDefaultNext; zodClientSchema: TClientNext; zodValidationSchema: TClientNext; } & { transforms: { toClient: (dbValue: number) => z.TypeOf<TClientNext>; toDb: (clientValue: z.TypeOf<TClientNext>) => number; }; }; }; }; transform: (transforms: { toClient: (dbValue: number) => number; toDb: (clientValue: number) => number; }) => { config: { sql: { nullable?: boolean; pk?: true; field?: string; default?: number; type: "int"; }; zodSqlSchema: z.ZodNumber; zodNewSchema: z.ZodNumber; initialValue: TDefaultNext; zodClientSchema: z.ZodNumber; zodValidationSchema: z.ZodNumber; } & { transforms: { toClient: (dbValue: number) => number; toDb: (clientValue: number) => number; }; }; }; }; <TNewNext extends z.ZodTypeAny, TDefaultNext>(schema: TNewNext | ((tools: { sql: z.ZodNumber; }) => TNewNext), defaultValue: () => TDefaultNext): { config: { sql: { nullable?: boolean; pk?: true; field?: string; default?: number; type: "int"; }; zodSqlSchema: z.ZodNumber; zodNewSchema: TNewNext; initialValue: z.TypeOf<TNewNext>; zodClientSchema: InferSmartClientType<z.ZodNumber, TNewNext>; zodValidationSchema: InferSmartClientType<z.ZodNumber, TNewNext>; }; validation: <TValidationNext extends z.ZodTypeAny>(schema: TValidationNext | ((tools: { sql: z.ZodNumber; initialState: TNewNext; client: InferSmartClientType<z.ZodNumber, TNewNext>; }) => TValidationNext)) => { config: { sql: { nullable?: boolean; pk?: true; field?: string; default?: number; type: "int"; }; zodSqlSchema: z.ZodNumber; zodNewSchema: TNewNext; initialValue: z.TypeOf<TNewNext>; zodClientSchema: InferSmartClientType<z.ZodNumber, TNewNext>; zodValidationSchema: TValidationNext; }; transform: (transforms: { toClient: (dbValue: number) => z.TypeOf<InferSmartClientType<z.ZodNumber, TNewNext>>; toDb: (clientValue: z.TypeOf<InferSmartClientType<z.ZodNumber, TNewNext>>) => number; }) => { config: { sql: { nullable?: boolean; pk?: true; field?: string; default?: number; type: "int"; }; zodSqlSchema: z.ZodNumber; zodNewSchema: TNewNext; initialValue: z.TypeOf<TNewNext>; zodClientSchema: InferSmartClientType<z.ZodNumber, TNewNext>; zodValidationSchema: TValidationNext; } & { transforms: { toClient: (dbValue: number) => z.TypeOf<InferSmartClientType<z.ZodNumber, TNewNext>>; toDb: (clientValue: z.TypeOf<InferSmartClientType<z.ZodNumber, TNewNext>>) => number; }; }; }; }; client: <TClientNext extends z.ZodTypeAny>(schema: TClientNext | ((tools: { sql: z.ZodNumber; initialState: TNewNext; }) => TClientNext)) => { config: { sql: { nullable?: boolean; pk?: true; field?: string; default?: number; type: "int"; }; zodSqlSchema: z.ZodNumber; zodNewSchema: TNewNext; initialValue: z.TypeOf<TNewNext>; zodClientSchema: TClientNext; zodValidationSchema: TClientNext; }; validation: <TValidationNext extends z.ZodTypeAny>(schema: TValidationNext | ((tools: { sql: z.ZodNumber; initialState: TNewNext; client: TClientNext; }) => TValidationNext)) => { config: { sql: { nullable?: boolean; pk?: true; field?: string; default?: number; type: "int"; }; zodSqlSchema: z.ZodNumber; zodNewSchema: TNewNext; initialValue: z.TypeOf<TNewNext>; zodClientSchema: TClientNext; zodValidationSchema: TValidationNext; }; transform: (transforms: { toClient: (dbValue: number) => z.TypeOf<TClientNext>; toDb: (clientValue: z.TypeOf<TClientNext>) => number; }) => { config: { sql: { nullable?: boolean; pk?: true; field?: string; default?: number; type: "int"; }; zodSqlSchema: z.ZodNumber; zodNewSchema: TNewNext; initialValue: z.TypeOf<TNewNext>; zodClientSchema: TClientNext; zodValidationSchema: TValidationNext; } & { transforms: { toClient: (dbValue: number) => z.TypeOf<TClientNext>; toDb: (clientValue: z.TypeOf<TClientNext>) => number; }; }; }; }; transform: (transforms: { toClient: (dbValue: number) => z.TypeOf<TClientNext>; toDb: (clientValue: z.TypeOf<TClientNext>) => number; }) => { config: { sql: { nullable?: boolean; pk?: true; field?: string; default?: number; type: "int"; }; zodSqlSchema: z.ZodNumber; zodNewSchema: TNewNext; initialValue: z.TypeOf<TNewNext>; zodClientSchema: TClientNext; zodValidationSchema: TClientNext; } & { transforms: { toClient: (dbValue: number) => z.TypeOf<TClientNext>; toDb: (clientValue: z.TypeOf<TClientNext>) => number; }; }; }; }; transform: (transforms: { toClient: (dbValue: number) => z.TypeOf<InferSmartClientType<z.ZodNumber, TNewNext>>; toDb: (clientValue: z.TypeOf<InferSmartClientType<z.ZodNumber, TNewNext>>) => number; }) => { config: { sql: { nullable?: boolean; pk?: true; field?: string; default?: number; type: "int"; }; zodSqlSchema: z.ZodNumber; zodNewSchema: TNewNext; initialValue: z.TypeOf<TNewNext>; zodClientSchema: InferSmartClientType<z.ZodNumber, TNewNext>; zodValidationSchema: InferSmartClientType<z.ZodNumber, TNewNext>; } & { transforms: { toClient: (dbValue: number) => z.TypeOf<InferSmartClientType<z.ZodNumber, TNewNext>>; toDb: (clientValue: z.TypeOf<InferSmartClientType<z.ZodNumber, TNewNext>>) => number; }; }; }; }; }; }; varchar: (config?: Omit<StringConfig, "type">) => { config: { sql: { pk?: true; nullable?: boolean; default?: string; length?: number; field?: string; type: "varchar"; }; zodSqlSchema: z.ZodString; zodNewSchema: z.ZodString; initialValue: string; zodClientSchema: z.ZodString; zodValidationSchema: z.ZodString; }; validation: <TValidationNext extends z.ZodTypeAny>(schema: TValidationNext | ((tools: { sql: z.ZodString; initialState: z.ZodString; client: z.ZodString; }) => TValidationNext)) => { config: { sql: { pk?: true; nullable?: boolean; default?: string; length?: number; field?: string; type: "varchar"; }; zodSqlSchema: z.ZodString; zodNewSchema: z.ZodString; initialValue: string; zodClientSchema: z.ZodString; zodValidationSchema: TValidationNext; }; transform: (transforms: { toClient: (dbValue: string) => string; toDb: (clientValue: string) => string; }) => { config: { sql: { pk?: true; nullable?: boolean; default?: string; length?: number; field?: string; type: "varchar"; }; zodSqlSchema: z.ZodString; zodNewSchema: z.ZodString; initialValue: string; zodClientSchema: z.ZodString; zodValidationSchema: TValidationNext; } & { transforms: { toClient: (dbValue: string) => string; toDb: (clientValue: string) => string; }; }; }; }; client: <TClientNext extends z.ZodTypeAny>(schema: TClientNext | ((tools: { sql: z.ZodString; initialState: z.ZodString; }) => TClientNext)) => { config: { sql: { pk?: true; nullable?: boolean; default?: string; length?: number; field?: string; type: "varchar"; }; zodSqlSchema: z.ZodString; zodNewSchema: z.ZodString; initialValue: string; zodClientSchema: TClientNext; zodValidationSchema: TClientNext; }; validation: <TValidationNext extends z.ZodTypeAny>(schema: TValidationNext | ((tools: { sql: z.ZodString; initialState: z.ZodString; client: TClientNext; }) => TValidationNext)) => { config: { sql: { pk?: true; nullable?: boolean; default?: string; length?: number; field?: string; type: "varchar"; }; zodSqlSchema: z.ZodString; zodNewSchema: z.ZodString; initialValue: string; zodClientSchema: TClientNext; zodValidationSchema: TValidationNext; }; transform: (transforms: { toClient: (dbValue: string) => z.TypeOf<TClientNext>; toDb: (clientValue: z.TypeOf<TClientNext>) => string; }) => { config: { sql: { pk?: true; nullable?: boolean; default?: string; length?: number; field?: string; type: "varchar"; }; zodSqlSchema: z.ZodString; zodNewSchema: z.ZodString; initialValue: string; zodClientSchema: TClientNext; zodValidationSchema: TValidationNext; } & { transforms: { toClient: (dbValue: string) => z.TypeOf<TClientNext>; toDb: (clientValue: z.TypeOf<TClientNext>) => string; }; }; }; }; transform: (transforms: { toClient: (dbValue: string) => z.TypeOf<TClientNext>; toDb: (clientValue: z.TypeOf<TClientNext>) => string; }) => { config: { sql: { pk?: true; nullable?: boolean; default?: string; length?: number; field?: string; type: "varchar"; }; zodSqlSchema: z.ZodString; zodNewSchema: z.ZodString; initialValue: string; zodClientSchema: TClientNext; zodValidationSchema: TClientNext; } & { transforms: { toClient: (dbValue: string) => z.TypeOf<TClientNext>; toDb: (clientValue: z.TypeOf<TClientNext>) => string; }; }; }; }; transform: (transforms: { toClient: (dbValue: string) => string; toDb: (clientValue: string) => string; }) => { config: { sql: { pk?: true; nullable?: boolean; default?: string; length?: number; field?: string; type: "varchar"; }; zodSqlSchema: z.ZodString; zodNewSchema: z.ZodString; initialValue: string; zodClientSchema: z.ZodString; zodValidationSchema: z.ZodString; } & { transforms: { toClient: (dbValue: string) => string; toDb: (clientValue: string) => string; }; }; }; initialState: { <TDefaultNext>(defaultValue: () => TDefaultNext): { config: { sql: { pk?: true; nullable?: boolean; default?: string; length?: number; field?: string; type: "varchar"; }; zodSqlSchema: z.ZodString; zodNewSchema: z.ZodString; initialValue: TDefaultNext; zodClientSchema: z.ZodString; zodValidationSchema: z.ZodString; }; validation: <TValidationNext extends z.ZodTypeAny>(schema: TValidationNext | ((tools: { sql: z.ZodString; initialState: z.ZodString; client: z.ZodString; }) => TValidationNext)) => { config: { sql: { pk?: true; nullable?: boolean; default?: string; length?: number; field?: string; type: "varchar"; }; zodSqlSchema: z.ZodString; zodNewSchema: z.ZodString; initialValue: TDefaultNext; zodClientSchema: z.ZodString; zodValidationSchema: TValidationNext; }; transform: (transforms: { toClient: (dbValue: string) => string; toDb: (clientValue: string) => string; }) => { config: { sql: { pk?: true; nullable?: boolean; default?: string; length?: number; field?: string; type: "varchar"; }; zodSqlSchema: z.ZodString; zodNewSchema: z.ZodString; initialValue: TDefaultNext; zodClientSchema: z.ZodString; zodValidationSchema: TValidationNext; } & { transforms: { toClient: (dbValue: string) => string; toDb: (clientValue: string) => string; }; }; }; }; client: <TClientNext extends z.ZodTypeAny>(schema: TClientNext | ((tools: { sql: z.ZodString; initialState: z.ZodString; }) => TClientNext)) => { config: { sql: { pk?: true; nullable?: boolean; default?: string; length?: number; field?: string; type: "varchar"; }; zodSqlSchema: z.ZodString; zodNewSchema: z.ZodString; initialValue: TDefaultNext; zodClientSchema: TClientNext; zodValidationSchema: TClientNext; }; validation: <TValidationNext extends z.ZodTypeAny>(schema: TValidationNext | ((tools: { sql: z.ZodString; initialState: z.ZodString; client: TClientNext; }) => TValidationNext)) => { config: { sql: { pk?: true; nullable?: boolean; default?: string; length?: number; field?: string; type: "varchar"; }; zodSqlSchema: z.ZodString; zodNewSchema: z.ZodString; initialValue: TDefaultNext; zodClientSchema: TClientNext; zodValidationSchema: TValidationNext; }; transform: (transforms: { toClient: (dbValue: string) => z.TypeOf<TClientNext>; toDb: (clientValue: z.TypeOf<TClientNext>) => string; }) => { config: { sql: { pk?: true; nullable?: boolean; default?: string; length?: number; field?: string; type: "varchar"; }; zodSqlSchema: z.ZodString; zodNewSchema: z.ZodString; initialValue: TDefaultNext; zodClientSchema: TClientNext; zodValidationSchema: TValidationNext; } & { transforms: { toClient: (dbValue: string) => z.TypeOf<TClientNext>; toDb: (clientValue: z.TypeOf<TClientNext>) => string; }; }; }; }; transform: (transforms: { toClient: (dbValue: string) => z.TypeOf<TClientNext>; toDb: (clientValue: z.TypeOf<TClientNext>) => string; }) => { config: { sql: { pk?: true; nullable?: boolean; default?: string; length?: number; field?: string; type: "varchar"; }; zodSqlSchema: z.ZodString; zodNewSchema: z.ZodString; initialValue: TDefaultNext; zodClientSchema: TClientNext; zodValidationSchema: TClientNext; } & { transforms: { toClient: (dbValue: string) => z.TypeOf<TClientNext>; toDb: (clientValue: z.TypeOf<TClientNext>) => string; }; }; }; }; transform: (transforms: { toClient: (dbValue: string) => string; toDb: (clientValue: string) => string; }) => { config: { sql: { pk?: true; nullable?: boolean; default?: string; length?: number; field?: string; type: "varchar"; }; zodSqlSchema: z.ZodString; zodNewSchema: z.ZodString; initialValue: TDefaultNext; zodClientSchema: z.ZodString; zodValidationSchema: z.ZodString; } & { transforms: { toClient: (dbValue: string) => string; toDb: (clientValue: string) => string; }; }; }; }; <TNewNext extends z.ZodTypeAny, TDefaultNext>(schema: TNewNext | ((tools: { sql: z.ZodString; }) => TNewNext), defaultValue: () => TDefaultNext): { config: { sql: { pk?: true; nullable?: boolean; default?: string; length?: number; field?: string; type: "varchar"; }; zodSqlSchema: z.ZodString; zodNewSchema: TNewNext; initialValue: z.TypeOf<TNewNext>; zodClientSchema: InferSmartClientType<z.ZodString, TNewNext>; zodValidationSchema: InferSmartClientType<z.ZodString, TNewNext>; }; validation: <TValidationNext extends z.ZodTypeAny>(schema: TValidationNext | ((tools: { sql: z.ZodString; initialState: TNewNext; client: InferSmartClientType<z.ZodString, TNewNext>; }) => TValidationNext)) => { config: { sql: { pk?: true; nullable?: boolean; default?: string; length?: number; field?: string; type: "varchar"; }; zodSqlSchema: z.ZodString; zodNewSchema: TNewNext; initialValue: z.TypeOf<TNewNext>; zodClientSchema: InferSmartClientType<z.ZodString, TNewNext>; zodValidationSchema: TValidationNext; }; transform: (transforms: { toClient: (dbValue: string) => z.TypeOf<InferSmartClientType<z.ZodString, TNewNext>>; toDb: (clientValue: z.TypeOf<InferSmartClientType<z.ZodString, TNewNext>>) => string; }) => { config: { sql: { pk?: true; nullable?: boolean; default?: string; length?: number; field?: string; type: "varchar"; }; zodSqlSchema: z.ZodString; zodNewSchema: TNewNext; initialValue: z.TypeOf<TNewNext>; zodClientSchema: InferSmartClientType<z.ZodString, TNewNext>; zodValidationSchema: TValidationNext; } & { transforms: { toClient: (dbValue: string) => z.TypeOf<InferSmartClientType<z.ZodString, TNewNext>>; toDb: (clientValue: z.TypeOf<InferSmartClientType<z.ZodString, TNewNext>>) => string; }; }; }; }; client: <TClientNext extends z.ZodTypeAny>(schema: TClientNext | ((tools: { sql: z.ZodString; initialState: TNewNext; }) => TClientNext)) => { config: { sql: { pk?: true; nullable?: boolean; default?: string; length?: number; field?: string; type: "varchar"; }; zodSqlSchema: z.ZodString; zodNewSchema: TNewNext; initialValue: z.TypeOf<TNewNext>; zodClientSchema: TClientNext; zodValidationSchema: TClientNext; }; validation: <TValidationNext extends z.ZodTypeAny>(schema: TValidationNext | ((tools: { sql: z.ZodString; initialState: TNewNext; client: TClientNext; }) => TValidationNext)) => { config: { sql: { pk?: true; nullable?: boolean; default?: string; length?: number; field?: string; type: "varchar"; }; zodSqlSchema: z.ZodString; zodNewSchema: TNewNext; initialValue: z.TypeOf<TNewNext>; zodClientSchema: TClientNext; zodValidationSchema: TValidationNext; }; transform: (transforms: { toClient: (dbValue: string) => z.TypeOf<TClientNext>; toDb: (clientValue: z.TypeOf<TClientNext>) => string; }) => { config: { sql: { pk?: true; nullable?: boolean; default?: string; length?: number; field?: string; type: "varchar"; }; zodSqlSchema: z.ZodString; zodNewSchema: TNewNext; initialValue: z.TypeOf<TNewNext>; zodClientSchema: TClientNext; zodValidationSchema: TValidationNext; } & { transforms: { toClient: (dbValue: string) => z.TypeOf<TClientNext>; toDb: (clientValue: z.TypeOf<TClientNext>) => string; }; }; }; }; transform: (transforms: { toClient: (dbValue: string) => z.TypeOf<TClientNext>; toDb: (clientValue: z.TypeOf<TClientNext>) => string; }) => { config: { sql: { pk?: true; nullable?: boolean; default?: string; length?: number; field?: string; type: "varchar"; }; zodSqlSchema: z.ZodString; zodNewSchema: TNewNext; initialValue: z.TypeOf<TNewNext>; zodClientSchema: TClientNext; zodValidationSchema: TClientNext; } & { transforms: { toClient: (dbValue: string) => z.TypeOf<TClientNext>; toDb: (clientValue: z.TypeOf<TClientNext>) => string; }; }; }; }; transform: (transforms: { toClient: (dbValue: string) => z.TypeOf<InferSmartClientType<z.ZodString, TNewNext>>; toDb: (clientValue: z.TypeOf<InferSmartClientType<z.ZodString, TNewNext>>) => string; }) => { config: { sql: { pk?: true; nullable?: boolean; default?: string; length?: number; field?: string; type: "varchar"; }; zodSqlSchema: z.ZodString; zodNewSchema: TNewNext; initialValue: z.TypeOf<TNewNext>; zodClientSchema: InferSmartClientType<z.ZodString, TNewNext>; zodValidationSchema: InferSmartClientType<z.ZodString, TNewNext>; } & { transforms: { toClient: (dbValue: string) => z.TypeOf<InferSmartClientType<z.ZodString, TNewNext>>; toDb: (clientValue: z.TypeOf<InferSmartClientType<z.ZodString, TNewNext>>) => string; }; }; }; }; }; }; char: (config?: Omit<StringConfig, "type">) => { config: { sql: { pk?: true; nullable?: boolean; default?: string; length?: number; field?: string; type: "char"; }; zodSqlSchema: z.ZodString; zodNewSchema: z.ZodString; initialValue: string; zodClientSchema: z.ZodString; zodValidationSchema: z.ZodString; }; validation: <TValidationNext extends z.ZodTypeAny>(schema: TValidationNext | ((