import type * as t from '@sinclair/typebox'; import type { Assume, Column } from 'drizzle-orm'; import type { BufferSchema, IsEnumDefined, IsNever, JsonSchema } from './utils.js'; type HasBaseColumn = TColumn extends { _: { baseColumn: Column | undefined; }; } ? IsNever extends false ? true : false : false; export type EnumValuesToEnum = { [K in TEnumValues[number]]: K; }; export interface GenericSchema extends t.TSchema { static: T; } export type GetTypeboxType = TColumn['_']['columnType'] extends 'MySqlTinyInt' | 'SingleStoreTinyInt' | 'PgSmallInt' | 'PgSmallSerial' | 'MySqlSmallInt' | 'MySqlMediumInt' | 'SingleStoreSmallInt' | 'SingleStoreMediumInt' | 'PgInteger' | 'PgSerial' | 'MySqlInt' | 'SingleStoreInt' | 'PgBigInt53' | 'PgBigSerial53' | 'MySqlBigInt53' | 'MySqlSerial' | 'SingleStoreBigInt53' | 'SingleStoreSerial' | 'SQLiteInteger' | 'MySqlYear' | 'SingleStoreYear' ? t.TInteger : TColumn['_']['columnType'] extends 'PgBinaryVector' ? t.TRegExp : HasBaseColumn extends true ? t.TArray>> : IsEnumDefined extends true ? t.TEnum<{ [K in Assume[number]]: K; }> : TColumn['_']['columnType'] extends 'PgGeometry' | 'PgPointTuple' ? t.TTuple<[t.TNumber, t.TNumber]> : TColumn['_']['columnType'] extends 'PgLine' ? t.TTuple<[t.TNumber, t.TNumber, t.TNumber]> : TColumn['_']['data'] extends Date ? t.TDate : TColumn['_']['data'] extends Buffer ? BufferSchema : TColumn['_']['dataType'] extends 'array' ? t.TArray[number]>> : TColumn['_']['data'] extends Record ? TColumn['_']['columnType'] extends 'PgJson' | 'PgJsonb' | 'MySqlJson' | 'SingleStoreJson' | 'SQLiteTextJson' | 'SQLiteBlobJson' ? GenericSchema : t.TObject<{ [K in keyof TColumn['_']['data']]: GetTypeboxPrimitiveType; }> : TColumn['_']['dataType'] extends 'json' ? JsonSchema : GetTypeboxPrimitiveType; type GetTypeboxPrimitiveType = TData extends number ? t.TNumber : TData extends bigint ? t.TBigInt : TData extends boolean ? t.TBoolean : TData extends string ? t.TString : t.TAny; type HandleSelectColumn = TColumn['_']['notNull'] extends true ? TSchema : t.Union<[TSchema, t.TNull]>; type HandleInsertColumn = TColumn['_']['notNull'] extends true ? TColumn['_']['hasDefault'] extends true ? t.TOptional : TSchema : t.TOptional>; type HandleUpdateColumn = TColumn['_']['notNull'] extends true ? t.TOptional : t.TOptional>; export type HandleColumn = TType extends 'select' ? HandleSelectColumn, TColumn> : TType extends 'insert' ? HandleInsertColumn, TColumn> : TType extends 'update' ? HandleUpdateColumn, TColumn> : GetTypeboxType; export {};