Home / File/ utils.ts — drizzle-orm Source File

utils.ts — drizzle-orm Source File

Architecture documentation for utils.ts, a typescript file in the drizzle-orm codebase. 23 imports, 4 dependents.

File typescript DrizzleORM DatabaseDrivers 23 imports 4 dependents 4 functions

Entity Profile

Dependency Diagram

graph LR
  ce49a5a3_688d_ddce_fd32_28428e51cae2["utils.ts"]
  3bdeabbe_470c_395a_6e44_2d024fc8ee9d["checks.ts"]
  ce49a5a3_688d_ddce_fd32_28428e51cae2 --> 3bdeabbe_470c_395a_6e44_2d024fc8ee9d
  08243fdb_3dc2_b239_6b9b_1f6aa8b95ee7["CheckBuilder"]
  ce49a5a3_688d_ddce_fd32_28428e51cae2 --> 08243fdb_3dc2_b239_6b9b_1f6aa8b95ee7
  b5f68e91_0c18_4699_4724_dcbb5d28898e["index.ts"]
  ce49a5a3_688d_ddce_fd32_28428e51cae2 --> b5f68e91_0c18_4699_4724_dcbb5d28898e
  b9d8b4e3_8c35_6c97_3af0_a74313048074["foreign-keys.ts"]
  ce49a5a3_688d_ddce_fd32_28428e51cae2 --> b9d8b4e3_8c35_6c97_3af0_a74313048074
  958f881b_7907_5e7e_0e91_d68d49a8af1b["ForeignKeyBuilder"]
  ce49a5a3_688d_ddce_fd32_28428e51cae2 --> 958f881b_7907_5e7e_0e91_d68d49a8af1b
  a406baef_d8bd_9bc9_efcd_e7c1450622b0["indexes.ts"]
  ce49a5a3_688d_ddce_fd32_28428e51cae2 --> a406baef_d8bd_9bc9_efcd_e7c1450622b0
  5a25fdd1_f316_6702_af4d_9a37c66d3845["IndexBuilder"]
  ce49a5a3_688d_ddce_fd32_28428e51cae2 --> 5a25fdd1_f316_6702_af4d_9a37c66d3845
  2d548801_9ef1_e43f_f06e_6ae63ec95d34["IndexBuilder"]
  ce49a5a3_688d_ddce_fd32_28428e51cae2 --> 2d548801_9ef1_e43f_f06e_6ae63ec95d34
  85575027_808b_f07e_b2a8_8d47e8b3189b["policies.ts"]
  ce49a5a3_688d_ddce_fd32_28428e51cae2 --> 85575027_808b_f07e_b2a8_8d47e8b3189b
  fb5adfe9_0485_7f32_8c4e_5c81265ae2e4["PgPolicy"]
  ce49a5a3_688d_ddce_fd32_28428e51cae2 --> fb5adfe9_0485_7f32_8c4e_5c81265ae2e4
  87a357d2_c2ec_b04d_8912_3b8be2a92815["primary-keys.ts"]
  ce49a5a3_688d_ddce_fd32_28428e51cae2 --> 87a357d2_c2ec_b04d_8912_3b8be2a92815
  35be54b0_979d_726f_b396_86ad54fdbc25["PrimaryKeyBuilder"]
  ce49a5a3_688d_ddce_fd32_28428e51cae2 --> 35be54b0_979d_726f_b396_86ad54fdbc25
  85e88cbd_e923_5f37_9238_698bcacc84af["unique-constraint.ts"]
  ce49a5a3_688d_ddce_fd32_28428e51cae2 --> 85e88cbd_e923_5f37_9238_698bcacc84af
  a87bb5cd_be6a_e10b_3473_4ced57da2173["UniqueConstraintBuilder"]
  ce49a5a3_688d_ddce_fd32_28428e51cae2 --> a87bb5cd_be6a_e10b_3473_4ced57da2173
  style ce49a5a3_688d_ddce_fd32_28428e51cae2 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

import { is } from '~/entity.ts';
import { PgTable } from '~/pg-core/table.ts';
import { SQL } from '~/sql/sql.ts';
import { Subquery } from '~/subquery.ts';
import { Schema, Table } from '~/table.ts';
import { ViewBaseConfig } from '~/view-common.ts';
import { type Check, CheckBuilder } from './checks.ts';
import type { AnyPgColumn } from './columns/index.ts';
import { type ForeignKey, ForeignKeyBuilder } from './foreign-keys.ts';
import type { Index } from './indexes.ts';
import { IndexBuilder } from './indexes.ts';
import { PgPolicy } from './policies.ts';
import { type PrimaryKey, PrimaryKeyBuilder } from './primary-keys.ts';
import { type UniqueConstraint, UniqueConstraintBuilder } from './unique-constraint.ts';
import type { PgViewBase } from './view-base.ts';
import { PgViewConfig } from './view-common.ts';
import { type PgMaterializedView, PgMaterializedViewConfig, type PgView } from './view.ts';

export function getTableConfig<TTable extends PgTable>(table: TTable) {
	const columns = Object.values(table[Table.Symbol.Columns]);
	const indexes: Index[] = [];
	const checks: Check[] = [];
	const primaryKeys: PrimaryKey[] = [];
	const foreignKeys: ForeignKey[] = Object.values(table[PgTable.Symbol.InlineForeignKeys]);
	const uniqueConstraints: UniqueConstraint[] = [];
	const name = table[Table.Symbol.Name];
	const schema = table[Table.Symbol.Schema];
	const policies: PgPolicy[] = [];
	const enableRLS: boolean = table[PgTable.Symbol.EnableRLS];

	const extraConfigBuilder = table[PgTable.Symbol.ExtraConfigBuilder];

	if (extraConfigBuilder !== undefined) {
		const extraConfig = extraConfigBuilder(table[Table.Symbol.ExtraConfigColumns]);
		const extraValues = Array.isArray(extraConfig) ? extraConfig.flat(1) as any[] : Object.values(extraConfig);
		for (const builder of extraValues) {
			if (is(builder, IndexBuilder)) {
				indexes.push(builder.build(table));
			} else if (is(builder, CheckBuilder)) {
				checks.push(builder.build(table));
			} else if (is(builder, UniqueConstraintBuilder)) {
				uniqueConstraints.push(builder.build(table));
			} else if (is(builder, PrimaryKeyBuilder)) {
				primaryKeys.push(builder.build(table));
			} else if (is(builder, ForeignKeyBuilder)) {
				foreignKeys.push(builder.build(table));
			} else if (is(builder, PgPolicy)) {
				policies.push(builder);
			}
		}
	}

	return {
		columns,
		indexes,
		foreignKeys,
		checks,
		primaryKeys,
		uniqueConstraints,
		name,
		schema,
		policies,
		enableRLS,
	};
}

export function extractUsedTable(table: PgTable | Subquery | PgViewBase | SQL): string[] {
	if (is(table, PgTable)) {
		return [table[Schema] ? `${table[Schema]}.${table[Table.Symbol.BaseName]}` : table[Table.Symbol.BaseName]];
	}
	if (is(table, Subquery)) {
		return table._.usedTables ?? [];
	}
	if (is(table, SQL)) {
		return table.usedTables ?? [];
	}
	return [];
}

export function getViewConfig<
	TName extends string = string,
	TExisting extends boolean = boolean,
>(view: PgView<TName, TExisting>) {
	return {
		...view[ViewBaseConfig],
		...view[PgViewConfig],
	};
}

export function getMaterializedViewConfig<
	TName extends string = string,
	TExisting extends boolean = boolean,
>(view: PgMaterializedView<TName, TExisting>) {
	return {
		...view[ViewBaseConfig],
		...view[PgMaterializedViewConfig],
	};
}

export type ColumnsWithTable<
	TTableName extends string,
	TForeignTableName extends string,
	TColumns extends AnyPgColumn<{ tableName: TTableName }>[],
> = { [Key in keyof TColumns]: AnyPgColumn<{ tableName: TForeignTableName }> };

Domain

Subdomains

Frequently Asked Questions

What does utils.ts do?
utils.ts is a source file in the drizzle-orm codebase, written in typescript. It belongs to the DrizzleORM domain, DatabaseDrivers subdomain.
What functions are defined in utils.ts?
utils.ts defines 4 function(s): extractUsedTable, getMaterializedViewConfig, getTableConfig, getViewConfig.
What does utils.ts depend on?
utils.ts imports 23 module(s): CheckBuilder, ForeignKeyBuilder, IndexBuilder, IndexBuilder, PgPolicy, PrimaryKeyBuilder, UniqueConstraintBuilder, checks.ts, and 15 more.
What files import utils.ts?
utils.ts is imported by 4 file(s): delete.ts, insert.ts, select.ts, update.ts.
Where is utils.ts in the architecture?
utils.ts is located at drizzle-orm/src/pg-core/utils.ts (domain: DrizzleORM, subdomain: DatabaseDrivers, directory: drizzle-orm/src/pg-core).

Analyze Your Own Codebase

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

Try Supermodel Free