Home / File/ column.types.ts — drizzle-orm Source File

column.types.ts — drizzle-orm Source File

Architecture documentation for column.types.ts, a typescript file in the drizzle-orm codebase. 3 imports, 2 dependents.

File typescript ValidationAdapters 3 imports 2 dependents

Entity Profile

Dependency Diagram

graph LR
  b348fe74_e713_8049_1ace_8787b971fb49["column.types.ts"]
  0dcff89a_a60f_bf80_037e_d24dd39456e3["utils.ts"]
  b348fe74_e713_8049_1ace_8787b971fb49 --> 0dcff89a_a60f_bf80_037e_d24dd39456e3
  26760edf_9a0c_0204_77e6_f8bffa96e354["typebox"]
  b348fe74_e713_8049_1ace_8787b971fb49 --> 26760edf_9a0c_0204_77e6_f8bffa96e354
  690f7dfc_0aea_9ee8_d6e7_26bbb3689031["drizzle-orm"]
  b348fe74_e713_8049_1ace_8787b971fb49 --> 690f7dfc_0aea_9ee8_d6e7_26bbb3689031
  224d090d_0385_ea0a_7fbe_57b37e55038e["schema.types.internal.ts"]
  224d090d_0385_ea0a_7fbe_57b37e55038e --> b348fe74_e713_8049_1ace_8787b971fb49
  b0f80f81_d8ca_1927_f5f8_c8088fb077bb["schema.types.ts"]
  b0f80f81_d8ca_1927_f5f8_c8088fb077bb --> b348fe74_e713_8049_1ace_8787b971fb49
  style b348fe74_e713_8049_1ace_8787b971fb49 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

import type * as t from '@sinclair/typebox';
import type { Assume, Column } from 'drizzle-orm';
import type { BufferSchema, IsEnumDefined, IsNever, JsonSchema } from './utils.ts';

type HasBaseColumn<TColumn> = TColumn extends { _: { baseColumn: Column | undefined } }
	? IsNever<TColumn['_']['baseColumn']> extends false ? true
	: false
	: false;

export type EnumValuesToEnum<TEnumValues extends [string, ...string[]]> = { [K in TEnumValues[number]]: K };

export interface GenericSchema<T> extends t.TSchema {
	static: T;
}

export type GetTypeboxType<
	TColumn extends Column,
> = 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<TColumn> extends true ? t.TArray<
			GetTypeboxType<Assume<TColumn['_']['baseColumn'], Column>>
		>
	: IsEnumDefined<TColumn['_']['enumValues']> extends true
		? t.TEnum<{ [K in Assume<TColumn['_']['enumValues'], string[]>[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<GetTypeboxPrimitiveType<Assume<TColumn['_']['data'], any[]>[number]>>
	: TColumn['_']['data'] extends Record<string, any>
		? TColumn['_']['columnType'] extends
			'PgJson' | 'PgJsonb' | 'MySqlJson' | 'SingleStoreJson' | 'SQLiteTextJson' | 'SQLiteBlobJson'
			? GenericSchema<TColumn['_']['data']>
		: t.TObject<{ [K in keyof TColumn['_']['data']]: GetTypeboxPrimitiveType<TColumn['_']['data'][K]> }>
	: TColumn['_']['dataType'] extends 'json' ? JsonSchema
	: GetTypeboxPrimitiveType<TColumn['_']['data']>;

type GetTypeboxPrimitiveType<TData> = TData extends number ? t.TNumber
	: TData extends bigint ? t.TBigInt
	: TData extends boolean ? t.TBoolean
	: TData extends string ? t.TString
	: t.TAny;

type HandleSelectColumn<
	TSchema extends t.TSchema,
	TColumn extends Column,
> = TColumn['_']['notNull'] extends true ? TSchema
	: t.Union<[TSchema, t.TNull]>;

type HandleInsertColumn<
	TSchema extends t.TSchema,
	TColumn extends Column,
> = TColumn['_']['notNull'] extends true ? TColumn['_']['hasDefault'] extends true ? t.TOptional<TSchema>
	: TSchema
	: t.TOptional<t.Union<[TSchema, t.TNull]>>;

type HandleUpdateColumn<
	TSchema extends t.TSchema,
	TColumn extends Column,
> = TColumn['_']['notNull'] extends true ? t.TOptional<TSchema>
	: t.TOptional<t.Union<[TSchema, t.TNull]>>;

export type HandleColumn<
	TType extends 'select' | 'insert' | 'update',
	TColumn extends Column,
> = TType extends 'select' ? HandleSelectColumn<GetTypeboxType<TColumn>, TColumn>
	: TType extends 'insert' ? HandleInsertColumn<GetTypeboxType<TColumn>, TColumn>
	: TType extends 'update' ? HandleUpdateColumn<GetTypeboxType<TColumn>, TColumn>
	: GetTypeboxType<TColumn>;

Dependencies

Frequently Asked Questions

What does column.types.ts do?
column.types.ts is a source file in the drizzle-orm codebase, written in typescript. It belongs to the ValidationAdapters domain.
What does column.types.ts depend on?
column.types.ts imports 3 module(s): drizzle-orm, typebox, utils.ts.
What files import column.types.ts?
column.types.ts is imported by 2 file(s): schema.types.internal.ts, schema.types.ts.
Where is column.types.ts in the architecture?
column.types.ts is located at drizzle-typebox/src/column.types.ts (domain: ValidationAdapters, directory: drizzle-typebox/src).

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free