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. 19 imports, 4 dependents.

File typescript DrizzleORM SQLDialects 19 imports 4 dependents 3 functions

Entity Profile

Dependency Diagram

graph LR
  5eb95521_a13c_5ed6_36c8_8869eb8138fc["utils.ts"]
  7b4b19ff_e672_3a3d_638b_e876d01d7300["checks.ts"]
  5eb95521_a13c_5ed6_36c8_8869eb8138fc --> 7b4b19ff_e672_3a3d_638b_e876d01d7300
  e904f5f3_dc43_a9e1_42e5_12339b7c65ca["CheckBuilder"]
  5eb95521_a13c_5ed6_36c8_8869eb8138fc --> e904f5f3_dc43_a9e1_42e5_12339b7c65ca
  fab980e5_64f0_d7af_6cbf_9d6014d326a4["foreign-keys.ts"]
  5eb95521_a13c_5ed6_36c8_8869eb8138fc --> fab980e5_64f0_d7af_6cbf_9d6014d326a4
  75bd2780_4502_b790_c39c_65e09a1659d8["ForeignKeyBuilder"]
  5eb95521_a13c_5ed6_36c8_8869eb8138fc --> 75bd2780_4502_b790_c39c_65e09a1659d8
  8777ea5d_4a78_587f_df18_57c7aa59b8a6["indexes.ts"]
  5eb95521_a13c_5ed6_36c8_8869eb8138fc --> 8777ea5d_4a78_587f_df18_57c7aa59b8a6
  5ab4f9fa_d5b1_6dc6_127e_ac7fee1f3f79["IndexBuilder"]
  5eb95521_a13c_5ed6_36c8_8869eb8138fc --> 5ab4f9fa_d5b1_6dc6_127e_ac7fee1f3f79
  a7ff59de_fcfb_68fe_6665_16d01fc2937f["primary-keys.ts"]
  5eb95521_a13c_5ed6_36c8_8869eb8138fc --> a7ff59de_fcfb_68fe_6665_16d01fc2937f
  b78ef011_08f4_dea0_12fd_b8965170d74c["PrimaryKeyBuilder"]
  5eb95521_a13c_5ed6_36c8_8869eb8138fc --> b78ef011_08f4_dea0_12fd_b8965170d74c
  64ae061d_ed9a_c5f9_235a_3f31995a8d54["table.ts"]
  5eb95521_a13c_5ed6_36c8_8869eb8138fc --> 64ae061d_ed9a_c5f9_235a_3f31995a8d54
  173bb8b4_9ed6_8c4b_ec84_da0f0e14ceb2["SQLiteTable"]
  5eb95521_a13c_5ed6_36c8_8869eb8138fc --> 173bb8b4_9ed6_8c4b_ec84_da0f0e14ceb2
  45366305_acee_28e7_392a_dc8de75a63d3["unique-constraint.ts"]
  5eb95521_a13c_5ed6_36c8_8869eb8138fc --> 45366305_acee_28e7_392a_dc8de75a63d3
  8450748d_2297_7113_f679_df33158717b7["UniqueConstraintBuilder"]
  5eb95521_a13c_5ed6_36c8_8869eb8138fc --> 8450748d_2297_7113_f679_df33158717b7
  b06d3b34_7e4c_4558_fa21_f40ea239b8a4["view-base.ts"]
  5eb95521_a13c_5ed6_36c8_8869eb8138fc --> b06d3b34_7e4c_4558_fa21_f40ea239b8a4
  d25d55b4_d8a4_6f19_2b5c_2ef3a5375746["view.ts"]
  5eb95521_a13c_5ed6_36c8_8869eb8138fc --> d25d55b4_d8a4_6f19_2b5c_2ef3a5375746
  style 5eb95521_a13c_5ed6_36c8_8869eb8138fc fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

import { is } from '~/entity.ts';
import { SQL } from '~/sql/sql.ts';
import { Subquery } from '~/subquery.ts';
import { Table } from '~/table.ts';
import { ViewBaseConfig } from '~/view-common.ts';
import type { Check } from './checks.ts';
import { CheckBuilder } from './checks.ts';
import type { ForeignKey } from './foreign-keys.ts';
import { ForeignKeyBuilder } from './foreign-keys.ts';
import type { Index } from './indexes.ts';
import { IndexBuilder } from './indexes.ts';
import type { PrimaryKey } from './primary-keys.ts';
import { PrimaryKeyBuilder } from './primary-keys.ts';
import { SQLiteTable } from './table.ts';
import { type UniqueConstraint, UniqueConstraintBuilder } from './unique-constraint.ts';
import type { SQLiteViewBase } from './view-base.ts';
import type { SQLiteView } from './view.ts';

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

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

	if (extraConfigBuilder !== undefined) {
		const extraConfig = extraConfigBuilder(table[SQLiteTable.Symbol.Columns]);
		const extraValues = Array.isArray(extraConfig) ? extraConfig.flat(1) as any[] : Object.values(extraConfig);
		for (const builder of Object.values(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));
			}
		}
	}

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

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

export type OnConflict = 'rollback' | 'abort' | 'fail' | 'ignore' | 'replace';

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

Domain

Subdomains

Types

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, SQLDialects subdomain.
What functions are defined in utils.ts?
utils.ts defines 3 function(s): extractUsedTable, getTableConfig, getViewConfig.
What does utils.ts depend on?
utils.ts imports 19 module(s): CheckBuilder, ForeignKeyBuilder, IndexBuilder, PrimaryKeyBuilder, SQLiteTable, UniqueConstraintBuilder, checks.ts, entity.ts, and 11 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/sqlite-core/utils.ts (domain: DrizzleORM, subdomain: SQLDialects, directory: drizzle-orm/src/sqlite-core).

Analyze Your Own Codebase

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

Try Supermodel Free