import type { Assume, Column, DrizzleTypeError, SelectedFieldsFlat, Simplify, Table, View } from 'drizzle-orm'; import type * as v from 'valibot'; import type { ExtractAdditionalProperties, GetValibotType, HandleColumn, HasBaseColumn } from "./column.types.cjs"; import type { ColumnIsGeneratedAlwaysAs, GetSelection } from "./utils.cjs"; export interface Conditions { never: (column?: Column) => boolean; optional: (column: Column) => boolean; nullable: (column: Column) => boolean; } type BuildRefineField = T extends v.GenericSchema ? ((schema: T) => v.GenericSchema) | v.GenericSchema : never; export type BuildRefine> = { [K in keyof TColumns as TColumns[K] extends Column | SelectedFieldsFlat | Table | View ? K : never]?: TColumns[K] extends Column ? BuildRefineField extends true ? Assume : undefined, ExtractAdditionalProperties>> : BuildRefine>; }; type HandleRefinement = TRefinement extends (schema: any) => v.GenericSchema ? (TColumn['_']['notNull'] extends true ? ReturnType : v.NullableSchema, undefined>) extends infer TSchema ? TType extends 'update' ? v.OptionalSchema, undefined> : TSchema : v.AnySchema : TRefinement; type IsRefinementDefined | undefined, TKey extends string | symbol | number> = TRefinements extends object ? TRefinements[TKey] extends v.GenericSchema | ((schema: any) => any) ? true : false : false; export type BuildSchema, TRefinements extends Record | undefined> = v.ObjectSchema extends true ? never : K]: TColumns[K] extends infer TColumn extends Column ? IsRefinementDefined> extends true ? Assume, v.GenericSchema> : HandleColumn : TColumns[K] extends infer TObject extends SelectedFieldsFlat | Table | View ? BuildSchema, TRefinements extends object ? TRefinements[K & keyof TRefinements] : undefined> : v.AnySchema; }>, undefined>; 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 {};