import type { Assume, Column } from 'drizzle-orm'; import type * as v from 'valibot'; import type { IsEnumDefined, IsNever, Json, RemoveNeverElements } from "./utils.mjs"; export type HasBaseColumn = TColumn extends { _: { baseColumn: Column | undefined; }; } ? IsNever extends false ? true : false : false; export type EnumValuesToEnum = { readonly [K in TEnumValues[number]]: K; }; export type ExtractAdditionalProperties = { max: TColumn['_']['columnType'] extends 'PgVarchar' | 'SQLiteText' | 'PgChar' | 'MySqlChar' | 'SingleStoreChar' ? Assume['length'] : TColumn['_']['columnType'] extends 'MySqlText' | 'MySqlVarChar' | 'SingleStoreText' | 'SingleStoreVarChar' ? number : TColumn['_']['columnType'] extends 'PgBinaryVector' | 'PgHalfVector' | 'PgVector' ? Assume['dimensions'] : TColumn['_']['columnType'] extends 'PgArray' ? Assume['size'] : undefined; fixedLength: TColumn['_']['columnType'] extends 'PgChar' | 'PgHalfVector' | 'PgVector' | 'PgArray' | 'MySqlChar' | 'SingleStoreChar' ? true : false; }; type GetLengthAction, TType extends string | ArrayLike> = T['fixedLength'] extends true ? v.LengthAction : v.MaxLengthAction; type GetArraySchema = v.ArraySchema extends true ? Assume : undefined, ExtractAdditionalProperties>, undefined>; export type GetValibotType> = TColumnType extends 'PgHalfVector' | 'PgVector' ? TAdditionalProperties['max'] extends number ? v.SchemaWithPipe<[ v.ArraySchema, undefined>, GetLengthAction ]> : v.ArraySchema, undefined> : TColumnType extends 'PgUUID' ? v.SchemaWithPipe<[v.StringSchema, v.UuidAction]> : TColumnType extends 'PgBinaryVector' ? v.SchemaWithPipe, v.RegexAction, TAdditionalProperties['max'] extends number ? GetLengthAction : never ]>> : TBaseColumn extends Column ? TAdditionalProperties['max'] extends number ? v.SchemaWithPipe<[ GetArraySchema>, GetLengthAction['_']['data'][]> ]> : GetArraySchema> : IsEnumDefined extends true ? v.EnumSchema<{ readonly [K in Assume[number]]: K; }, undefined> : TColumnType extends 'PgGeometry' | 'PgPointTuple' ? v.TupleSchema<[v.NumberSchema, v.NumberSchema], undefined> : TColumnType extends 'PgLine' ? v.TupleSchema<[v.NumberSchema, v.NumberSchema, v.NumberSchema], undefined> : TData extends Date ? v.DateSchema : TData extends Buffer ? v.GenericSchema : TDataType extends 'array' ? v.ArraySchema[number], '', { noPipe: true; }>, undefined> : TData extends Record ? TColumnType extends 'PgJson' | 'PgJsonb' | 'MySqlJson' | 'SingleStoreJson' | 'SQLiteTextJson' | 'SQLiteBlobJson' ? v.GenericSchema : v.ObjectSchema<{ readonly [K in keyof TData]: GetValibotPrimitiveType; }, undefined> : TDataType extends 'json' ? v.GenericSchema : GetValibotPrimitiveType; type GetValibotPrimitiveType> = TData extends number ? TAdditionalProperties['noPipe'] extends true ? v.NumberSchema : v.SchemaWithPipe, v.MinValueAction, v.MaxValueAction, TColumnType extends 'MySqlTinyInt' | 'SingleStoreTinyInt' | 'PgSmallInt' | 'PgSmallSerial' | 'MySqlSmallInt' | 'MySqlMediumInt' | 'SingleStoreSmallInt' | 'SingleStoreMediumInt' | 'PgInteger' | 'PgSerial' | 'MySqlInt' | 'SingleStoreInt' | 'PgBigInt53' | 'PgBigSerial53' | 'MySqlBigInt53' | 'MySqlSerial' | 'SingleStoreBigInt53' | 'SingleStoreSerial' | 'SQLiteInteger' | 'MySqlYear' | 'SingleStoreYear' ? v.IntegerAction : never ]>> : TData extends bigint ? TAdditionalProperties['noPipe'] extends true ? v.BigintSchema : v.SchemaWithPipe<[ v.BigintSchema, v.MinValueAction, v.MaxValueAction ]> : TData extends boolean ? v.BooleanSchema : TData extends string ? TAdditionalProperties['max'] extends number ? v.SchemaWithPipe<[v.StringSchema, GetLengthAction]> : v.StringSchema : v.AnySchema; type HandleSelectColumn = TColumn['_']['notNull'] extends true ? TSchema : v.NullableSchema; type HandleInsertColumn = TColumn['_']['notNull'] extends true ? TColumn['_']['hasDefault'] extends true ? v.OptionalSchema : TSchema : v.OptionalSchema, undefined>; type HandleUpdateColumn = TColumn['_']['notNull'] extends true ? v.OptionalSchema : v.OptionalSchema, undefined>; export type HandleColumn = GetValibotType extends true ? Assume : undefined, ExtractAdditionalProperties> extends infer TSchema extends v.GenericSchema ? TSchema extends v.AnySchema ? v.AnySchema : TType extends 'select' ? HandleSelectColumn : TType extends 'insert' ? HandleInsertColumn : TType extends 'update' ? HandleUpdateColumn : TSchema : v.AnySchema; export {};