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

File typescript DrizzleORM SQLDialects 21 imports 4 dependents 5 functions

Entity Profile

Dependency Diagram

graph LR
  af63b8b3_1221_118f_75ac_f0b56c078499["utils.ts"]
  7b63b5bd_ea98_c5c2_5af8_ff11f417af24["checks.ts"]
  af63b8b3_1221_118f_75ac_f0b56c078499 --> 7b63b5bd_ea98_c5c2_5af8_ff11f417af24
  e8a962a5_1f90_9c53_a878_0f99b6ec8795["CheckBuilder"]
  af63b8b3_1221_118f_75ac_f0b56c078499 --> e8a962a5_1f90_9c53_a878_0f99b6ec8795
  5ab311c5_4977_231c_634b_5190e6ed4054["foreign-keys.ts"]
  af63b8b3_1221_118f_75ac_f0b56c078499 --> 5ab311c5_4977_231c_634b_5190e6ed4054
  46597bc3_9b07_1c82_2d4e_eaf86f61d36f["ForeignKeyBuilder"]
  af63b8b3_1221_118f_75ac_f0b56c078499 --> 46597bc3_9b07_1c82_2d4e_eaf86f61d36f
  a5a9f725_34b6_8a98_a70a_5e7133d7ec60["indexes.ts"]
  af63b8b3_1221_118f_75ac_f0b56c078499 --> a5a9f725_34b6_8a98_a70a_5e7133d7ec60
  364d9794_128b_45bd_2573_e354dc5f2c3a["IndexBuilder"]
  af63b8b3_1221_118f_75ac_f0b56c078499 --> 364d9794_128b_45bd_2573_e354dc5f2c3a
  63d21212_2bf5_401e_92eb_15e737e0575b["primary-keys.ts"]
  af63b8b3_1221_118f_75ac_f0b56c078499 --> 63d21212_2bf5_401e_92eb_15e737e0575b
  3deb220b_61cc_e661_7d0d_e70e532fee18["PrimaryKeyBuilder"]
  af63b8b3_1221_118f_75ac_f0b56c078499 --> 3deb220b_61cc_e661_7d0d_e70e532fee18
  beabf465_fa9a_6d7b_17f0_933ae73209d6["select.ts"]
  af63b8b3_1221_118f_75ac_f0b56c078499 --> beabf465_fa9a_6d7b_17f0_933ae73209d6
  62c695d3_7eff_3822_db70_ce6b25ccdb04["table.ts"]
  af63b8b3_1221_118f_75ac_f0b56c078499 --> 62c695d3_7eff_3822_db70_ce6b25ccdb04
  3982449f_087b_16c6_e2b7_ca7b5dd4f1b7["MySqlTable"]
  af63b8b3_1221_118f_75ac_f0b56c078499 --> 3982449f_087b_16c6_e2b7_ca7b5dd4f1b7
  a9239128_c513_6b37_89dd_e9bbc3987391["unique-constraint.ts"]
  af63b8b3_1221_118f_75ac_f0b56c078499 --> a9239128_c513_6b37_89dd_e9bbc3987391
  ffc3a7da_7e9a_5d76_084d_1b70d444f4ce["UniqueConstraintBuilder"]
  af63b8b3_1221_118f_75ac_f0b56c078499 --> ffc3a7da_7e9a_5d76_084d_1b70d444f4ce
  a79cf58d_7307_4b51_46d7_0b6063316314["view-base.ts"]
  af63b8b3_1221_118f_75ac_f0b56c078499 --> a79cf58d_7307_4b51_46d7_0b6063316314
  style af63b8b3_1221_118f_75ac_f0b56c078499 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

import { is } from '~/entity.ts';
import { SQL } from '~/index.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 type { IndexForHint } from './query-builders/select.ts';
import { MySqlTable } from './table.ts';
import { type UniqueConstraint, UniqueConstraintBuilder } from './unique-constraint.ts';
import type { MySqlViewBase } from './view-base.ts';
import { MySqlViewConfig } from './view-common.ts';
import type { MySqlView } from './view.ts';

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

export function getTableConfig(table: MySqlTable) {
	const columns = Object.values(table[MySqlTable.Symbol.Columns]);
	const indexes: Index[] = [];
	const checks: Check[] = [];
	const primaryKeys: PrimaryKey[] = [];
	const uniqueConstraints: UniqueConstraint[] = [];
	const foreignKeys: ForeignKey[] = Object.values(table[MySqlTable.Symbol.InlineForeignKeys]);
	const name = table[Table.Symbol.Name];
	const schema = table[Table.Symbol.Schema];
	const baseName = table[Table.Symbol.BaseName];

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

	if (extraConfigBuilder !== undefined) {
		const extraConfig = extraConfigBuilder(table[MySqlTable.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,
		schema,
		baseName,
	};
}

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

export function convertIndexToString(indexes: IndexForHint[]) {
	return indexes.map((idx) => {
		return typeof idx === 'object' ? idx.config.name : idx;
	});
}

export function toArray<T>(value: T | T[]): T[] {
	return Array.isArray(value) ? value : [value];
}

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

Analyze Your Own Codebase

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

Try Supermodel Free