schema.ts — drizzle-orm Source File
Architecture documentation for schema.ts, a typescript file in the drizzle-orm codebase. 8 imports, 0 dependents.
Entity Profile
Dependency Diagram
graph LR b3de3d3d_2c66_6c17_9e29_4ae6af2ae68f["schema.ts"] 03d2f7f9_4592_2641_ed27_5e125e89d737["column.ts"] b3de3d3d_2c66_6c17_9e29_4ae6af2ae68f --> 03d2f7f9_4592_2641_ed27_5e125e89d737 b1c074f5_2da3_d41e_58f2_747e87ddff7d["columnToSchema"] b3de3d3d_2c66_6c17_9e29_4ae6af2ae68f --> b1c074f5_2da3_d41e_58f2_747e87ddff7d d530d59d_be0a_6412_1cd0_197b9709fc36["schema.types.internal.ts"] b3de3d3d_2c66_6c17_9e29_4ae6af2ae68f --> d530d59d_be0a_6412_1cd0_197b9709fc36 28b925d4_7f31_9845_f7d2_ae4d3d15f3ee["schema.types.ts"] b3de3d3d_2c66_6c17_9e29_4ae6af2ae68f --> 28b925d4_7f31_9845_f7d2_ae4d3d15f3ee 6926d326_babb_b38d_98de_f0d261e6df93["utils.ts"] b3de3d3d_2c66_6c17_9e29_4ae6af2ae68f --> 6926d326_babb_b38d_98de_f0d261e6df93 4859a2e0_4bd3_506a_e7e6_bf4316983bb5["arktype"] b3de3d3d_2c66_6c17_9e29_4ae6af2ae68f --> 4859a2e0_4bd3_506a_e7e6_bf4316983bb5 690f7dfc_0aea_9ee8_d6e7_26bbb3689031["drizzle-orm"] b3de3d3d_2c66_6c17_9e29_4ae6af2ae68f --> 690f7dfc_0aea_9ee8_d6e7_26bbb3689031 53497908_16e7_977d_e97d_7414884a88a6["pg-core"] b3de3d3d_2c66_6c17_9e29_4ae6af2ae68f --> 53497908_16e7_977d_e97d_7414884a88a6 style b3de3d3d_2c66_6c17_9e29_4ae6af2ae68f fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
import { Type, type } from 'arktype';
import { Column, getTableColumns, getViewSelectedFields, is, isTable, isView, SQL } from 'drizzle-orm';
import type { Table, View } from 'drizzle-orm';
import type { PgEnum } from 'drizzle-orm/pg-core';
import { columnToSchema } from './column.ts';
import type { Conditions } from './schema.types.internal.ts';
import type { CreateInsertSchema, CreateSelectSchema, CreateUpdateSchema } from './schema.types.ts';
import { isPgEnum } from './utils.ts';
function getColumns(tableLike: Table | View) {
return isTable(tableLike) ? getTableColumns(tableLike) : getViewSelectedFields(tableLike);
}
function handleColumns(
columns: Record<string, any>,
refinements: Record<string, any>,
conditions: Conditions,
): Type {
const columnSchemas: Record<string, Type> = {};
for (const [key, selected] of Object.entries(columns)) {
if (!is(selected, Column) && !is(selected, SQL) && !is(selected, SQL.Aliased) && typeof selected === 'object') {
const columns = isTable(selected) || isView(selected) ? getColumns(selected) : selected;
columnSchemas[key] = handleColumns(columns, refinements[key] ?? {}, conditions);
continue;
}
const refinement = refinements[key];
if (
refinement !== undefined
&& (typeof refinement !== 'function' || (typeof refinement === 'function' && refinement.expression !== undefined))
) {
columnSchemas[key] = refinement;
continue;
}
const column = is(selected, Column) ? selected : undefined;
const schema = column ? columnToSchema(column) : type.unknown;
const refined = typeof refinement === 'function' ? refinement(schema) : schema;
if (conditions.never(column)) {
continue;
} else {
columnSchemas[key] = refined;
}
if (column) {
if (conditions.nullable(column)) {
columnSchemas[key] = columnSchemas[key]!.or(type.null);
}
if (conditions.optional(column)) {
columnSchemas[key] = columnSchemas[key]!.optional() as any;
}
}
}
return type(columnSchemas);
}
export const createSelectSchema = ((
entity: Table | View | PgEnum<[string, ...string[]]>,
refine?: Record<string, any>,
) => {
if (isPgEnum(entity)) {
return type.enumerated(...entity.enumValues);
}
const columns = getColumns(entity);
return handleColumns(columns, refine ?? {}, {
never: () => false,
optional: () => false,
nullable: (column) => !column.notNull,
}) as any;
}) as CreateSelectSchema;
export const createInsertSchema = ((
entity: Table,
refine?: Record<string, any>,
) => {
const columns = getColumns(entity);
return handleColumns(columns, refine ?? {}, {
never: (column) => column?.generated?.type === 'always' || column?.generatedIdentity?.type === 'always',
optional: (column) => !column.notNull || (column.notNull && column.hasDefault),
nullable: (column) => !column.notNull,
}) as any;
}) as CreateInsertSchema;
export const createUpdateSchema = ((
entity: Table,
refine?: Record<string, any>,
) => {
const columns = getColumns(entity);
return handleColumns(columns, refine ?? {}, {
never: (column) => column?.generated?.type === 'always' || column?.generatedIdentity?.type === 'always',
optional: () => true,
nullable: (column) => !column.notNull,
}) as any;
}) as CreateUpdateSchema;
Domain
Subdomains
Dependencies
- arktype
- column.ts
- columnToSchema
- drizzle-orm
- pg-core
- schema.types.internal.ts
- schema.types.ts
- utils.ts
Source
Frequently Asked Questions
What does schema.ts do?
schema.ts is a source file in the drizzle-orm codebase, written in typescript. It belongs to the ValidationAdapters domain, SchemaRefinement subdomain.
What functions are defined in schema.ts?
schema.ts defines 5 function(s): createInsertSchema, createSelectSchema, createUpdateSchema, getColumns, handleColumns.
What does schema.ts depend on?
schema.ts imports 8 module(s): arktype, column.ts, columnToSchema, drizzle-orm, pg-core, schema.types.internal.ts, schema.types.ts, utils.ts.
Where is schema.ts in the architecture?
schema.ts is located at drizzle-arktype/src/schema.ts (domain: ValidationAdapters, subdomain: SchemaRefinement, directory: drizzle-arktype/src).
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free