import type { Assume, Column, DrizzleTypeError, SelectedFieldsFlat, Simplify, Table, View } from 'drizzle-orm'; import type { z } from 'zod/v4'; import type { GetZodType, HandleColumn } from './column.types.js'; import type { ColumnIsGeneratedAlwaysAs, GetSelection } from './utils.js'; export interface Conditions { never: (column?: Column) => boolean; optional: (column: Column) => boolean; nullable: (column: Column) => boolean; } type BuildRefineField = T extends z.ZodType ? ((schema: T) => z.ZodType) | z.ZodType : never; export type BuildRefine, TCoerce extends Partial> | true | undefined> = { [K in keyof TColumns as TColumns[K] extends Column | SelectedFieldsFlat | Table | View ? K : never]?: TColumns[K] extends Column ? BuildRefineField> : BuildRefine, TCoerce>; }; type HandleRefinement = TRefinement extends (schema: any) => z.ZodType ? (TColumn['_']['notNull'] extends true ? ReturnType : z.ZodNullable>) extends infer TSchema extends z.ZodType ? TType extends 'update' ? z.ZodOptional : TSchema : z.ZodType : TRefinement; type IsRefinementDefined | undefined, TKey extends string | symbol | number> = TRefinements extends object ? TRefinements[TKey] extends z.ZodType | ((schema: any) => any) ? true : false : false; export type BuildSchema, TRefinements extends Record | undefined, TCoerce extends Partial> | true | undefined> = z.ZodObject extends true ? TType extends 'select' ? K : never : K]: TColumns[K] extends infer TColumn extends Column ? IsRefinementDefined extends true ? Assume, z.ZodType> : HandleColumn : TColumns[K] extends infer TObject extends SelectedFieldsFlat | Table | View ? BuildSchema, TRefinements extends object ? TRefinements[K & keyof TRefinements] : undefined, TCoerce> : z.ZodAny; }>, { out: {}; in: {}; }>; export type NoUnknownKeys, TCompare extends Record> = { [K in keyof TRefinement]: K extends keyof TCompare ? TRefinement[K] extends Record ? NoUnknownKeys : TRefinement[K] : DrizzleTypeError<`Found unknown key in refinement: "${K & string}"`>; }; export {};