Home / File/ schema.types.internal.ts — drizzle-orm Source File

schema.types.internal.ts — drizzle-orm Source File

Architecture documentation for schema.types.internal.ts, a typescript file in the drizzle-orm codebase. 4 imports, 2 dependents.

File typescript ValidationAdapters TypeMapping 4 imports 2 dependents 2 functions

Entity Profile

Dependency Diagram

graph LR
  8beb3c26_f68c_2b02_ad7a_a436848c5635["schema.types.internal.ts"]
  8f030d4f_790e_1311_a4f1_f0509f0c2d44["column.types.ts"]
  8beb3c26_f68c_2b02_ad7a_a436848c5635 --> 8f030d4f_790e_1311_a4f1_f0509f0c2d44
  a0d71e56_fdeb_c568_64e9_fb247617a17c["utils.ts"]
  8beb3c26_f68c_2b02_ad7a_a436848c5635 --> a0d71e56_fdeb_c568_64e9_fb247617a17c
  690f7dfc_0aea_9ee8_d6e7_26bbb3689031["drizzle-orm"]
  8beb3c26_f68c_2b02_ad7a_a436848c5635 --> 690f7dfc_0aea_9ee8_d6e7_26bbb3689031
  a9e31838_d52b_02c1_2b9d_c4354b2ad2fa["valibot"]
  8beb3c26_f68c_2b02_ad7a_a436848c5635 --> a9e31838_d52b_02c1_2b9d_c4354b2ad2fa
  a1e9a186_355d_5f4f_7cf0_889804754896["schema.ts"]
  a1e9a186_355d_5f4f_7cf0_889804754896 --> 8beb3c26_f68c_2b02_ad7a_a436848c5635
  e918a77e_1e35_56b9_adb6_5727c2a5b3ad["schema.types.ts"]
  e918a77e_1e35_56b9_adb6_5727c2a5b3ad --> 8beb3c26_f68c_2b02_ad7a_a436848c5635
  style 8beb3c26_f68c_2b02_ad7a_a436848c5635 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

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.ts';
import type { ColumnIsGeneratedAlwaysAs, GetSelection } from './utils.ts';

export interface Conditions {
	never: (column?: Column) => boolean;
	optional: (column: Column) => boolean;
	nullable: (column: Column) => boolean;
}

type BuildRefineField<T> = T extends v.GenericSchema ? ((schema: T) => v.GenericSchema) | v.GenericSchema : never;

export type BuildRefine<
	TColumns extends Record<string, any>,
> = {
	[K in keyof TColumns as TColumns[K] extends Column | SelectedFieldsFlat<Column> | Table | View ? K : never]?:
		TColumns[K] extends Column ? BuildRefineField<
				GetValibotType<
					TColumns[K]['_']['data'],
					TColumns[K]['_']['dataType'],
					TColumns[K]['_']['columnType'],
					TColumns[K]['_']['enumValues'],
					HasBaseColumn<TColumns[K]> extends true ? Assume<TColumns[K]['_']['baseColumn'], Column> : undefined,
					ExtractAdditionalProperties<TColumns[K]>
				>
			>
			: BuildRefine<GetSelection<TColumns[K]>>;
};

type HandleRefinement<
	TType extends 'select' | 'insert' | 'update',
	TRefinement,
	TColumn extends Column,
> = TRefinement extends (schema: any) => v.GenericSchema ? (
		TColumn['_']['notNull'] extends true ? ReturnType<TRefinement>
			: v.NullableSchema<ReturnType<TRefinement>, undefined>
	) extends infer TSchema ? TType extends 'update' ? v.OptionalSchema<Assume<TSchema, v.GenericSchema>, undefined>
		: TSchema
	: v.AnySchema
	: TRefinement;

type IsRefinementDefined<
	TRefinements extends Record<string | symbol | number, any> | undefined,
	TKey extends string | symbol | number,
> = TRefinements extends object ? TRefinements[TKey] extends v.GenericSchema | ((schema: any) => any) ? true
	: false
	: false;

export type BuildSchema<
	TType extends 'select' | 'insert' | 'update',
	TColumns extends Record<string, any>,
	TRefinements extends Record<string, any> | undefined,
> = v.ObjectSchema<
	Simplify<
		{
			readonly [K in keyof TColumns as ColumnIsGeneratedAlwaysAs<TColumns[K]> extends true ? never : K]:
				TColumns[K] extends infer TColumn extends Column
					? IsRefinementDefined<TRefinements, Assume<K, string>> extends true
						? Assume<HandleRefinement<TType, TRefinements[K & keyof TRefinements], TColumn>, v.GenericSchema>
					: HandleColumn<TType, TColumn>
					: TColumns[K] extends infer TObject extends SelectedFieldsFlat<Column> | Table | View ? BuildSchema<
							TType,
							GetSelection<TObject>,
							TRefinements extends object ? TRefinements[K & keyof TRefinements] : undefined
						>
					: v.AnySchema;
		}
	>,
	undefined
>;

export type NoUnknownKeys<
	TRefinement extends Record<string, any>,
	TCompare extends Record<string, any>,
> = {
	[K in keyof TRefinement]: K extends keyof TCompare
		? TRefinement[K] extends Record<string, v.GenericSchema> ? NoUnknownKeys<TRefinement[K], TCompare[K]>
		: TRefinement[K]
		: DrizzleTypeError<`Found unknown key in refinement: "${K & string}"`>;
};

Subdomains

Functions

Dependencies

Frequently Asked Questions

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

Analyze Your Own Codebase

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

Try Supermodel Free