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

view.ts — drizzle-orm Source File

Architecture documentation for view.ts, a typescript file in the drizzle-orm codebase. 14 imports, 2 dependents.

File typescript DrizzleORM RelationalQuery 14 imports 2 dependents 3 classes

Entity Profile

Dependency Diagram

graph LR
  257a76b8_a6d7_188d_c192_237373f7f9c0["view.ts"]
  a74dd48d_d5e3_6bb4_19c7_1954c9126816["common.ts"]
  257a76b8_a6d7_188d_c192_237373f7f9c0 --> a74dd48d_d5e3_6bb4_19c7_1954c9126816
  642c8c4e_4b43_0739_f7ae_558dc2a5794f["query-builder.ts"]
  257a76b8_a6d7_188d_c192_237373f7f9c0 --> 642c8c4e_4b43_0739_f7ae_558dc2a5794f
  7498c38a_7ddb_9cb7_5098_8006515160fd["QueryBuilder"]
  257a76b8_a6d7_188d_c192_237373f7f9c0 --> 7498c38a_7ddb_9cb7_5098_8006515160fd
  cbe7af57_41be_454d_306f_02d0e6f81949["table.ts"]
  257a76b8_a6d7_188d_c192_237373f7f9c0 --> cbe7af57_41be_454d_306f_02d0e6f81949
  7b24d348_515e_8ca0_dc7c_1010e8553868["gelTable"]
  257a76b8_a6d7_188d_c192_237373f7f9c0 --> 7b24d348_515e_8ca0_dc7c_1010e8553868
  be86042a_e0e2_e322_228e_e182ac8bd699["view-base.ts"]
  257a76b8_a6d7_188d_c192_237373f7f9c0 --> be86042a_e0e2_e322_228e_e182ac8bd699
  082f0d6d_10c2_1f75_17f8_e0522479b67f["view-common.ts"]
  257a76b8_a6d7_188d_c192_237373f7f9c0 --> 082f0d6d_10c2_1f75_17f8_e0522479b67f
  2dc784c6_95e9_4e28_ec81_7caf4acbd426["column-builder.ts"]
  257a76b8_a6d7_188d_c192_237373f7f9c0 --> 2dc784c6_95e9_4e28_ec81_7caf4acbd426
  27705a9d_afe9_57dd_8c97_e52d8a67d426["entity.ts"]
  257a76b8_a6d7_188d_c192_237373f7f9c0 --> 27705a9d_afe9_57dd_8c97_e52d8a67d426
  d31ad410_b8fc_5d88_a194_70aa7419676a["query-builder.ts"]
  257a76b8_a6d7_188d_c192_237373f7f9c0 --> d31ad410_b8fc_5d88_a194_70aa7419676a
  8fb028b7_6ce0_27fa_29b6_39545ba11529["select.types.ts"]
  257a76b8_a6d7_188d_c192_237373f7f9c0 --> 8fb028b7_6ce0_27fa_29b6_39545ba11529
  591617cf_1376_c0a1_4ba1_ecd59ca13a5b["selection-proxy.ts"]
  257a76b8_a6d7_188d_c192_237373f7f9c0 --> 591617cf_1376_c0a1_4ba1_ecd59ca13a5b
  be483a7f_d5d7_7a9b_9a13_44a4a6aafbbd["sql.ts"]
  257a76b8_a6d7_188d_c192_237373f7f9c0 --> be483a7f_d5d7_7a9b_9a13_44a4a6aafbbd
  ecce3253_1e75_a87f_27b3_ca87e81a3024["utils.ts"]
  257a76b8_a6d7_188d_c192_237373f7f9c0 --> ecce3253_1e75_a87f_27b3_ca87e81a3024
  style 257a76b8_a6d7_188d_c192_237373f7f9c0 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

import type { BuildColumns } from '~/column-builder.ts';
import { entityKind, is } from '~/entity.ts';
import type { TypedQueryBuilder } from '~/query-builders/query-builder.ts';
import type { AddAliasToSelection } from '~/query-builders/select.types.ts';
import { SelectionProxyHandler } from '~/selection-proxy.ts';
import type { ColumnsSelection, SQL } from '~/sql/sql.ts';
import { getTableColumns } from '~/utils.ts';
import type { RequireAtLeastOne } from '~/utils.ts';
import type { GelColumn, GelColumnBuilderBase } from './columns/common.ts';
import { QueryBuilder } from './query-builders/query-builder.ts';
import { gelTable } from './table.ts';
import { GelViewBase } from './view-base.ts';
import { GelViewConfig } from './view-common.ts';

export type ViewWithConfig = RequireAtLeastOne<{
	checkOption: 'local' | 'cascaded';
	securityBarrier: boolean;
	securityInvoker: boolean;
}>;

export class DefaultViewBuilderCore<TConfig extends { name: string; columns?: unknown }> {
	static readonly [entityKind]: string = 'GelDefaultViewBuilderCore';

	declare readonly _: {
		readonly name: TConfig['name'];
		readonly columns: TConfig['columns'];
	};

	constructor(
		protected name: TConfig['name'],
		protected schema: string | undefined,
	) {}

	protected config: {
		with?: ViewWithConfig;
	} = {};

	with(config: ViewWithConfig): this {
		this.config.with = config;
		return this;
	}
}

export class ViewBuilder<TName extends string = string> extends DefaultViewBuilderCore<{ name: TName }> {
	static override readonly [entityKind]: string = 'GelViewBuilder';

	as<TSelectedFields extends ColumnsSelection>(
		qb: TypedQueryBuilder<TSelectedFields> | ((qb: QueryBuilder) => TypedQueryBuilder<TSelectedFields>),
	): GelViewWithSelection<TName, false, AddAliasToSelection<TSelectedFields, TName, 'gel'>> {
		if (typeof qb === 'function') {
			qb = qb(new QueryBuilder());
		}
		const selectionProxy = new SelectionProxyHandler<TSelectedFields>({
			alias: this.name,
			sqlBehavior: 'error',
			sqlAliasedBehavior: 'alias',
			replaceOriginalName: true,
		});
		const aliasedSelection = new Proxy(qb.getSelectedFields(), selectionProxy);
		return new Proxy(
// ... (380 more lines)

Domain

Subdomains

Dependencies

Frequently Asked Questions

What does view.ts do?
view.ts is a source file in the drizzle-orm codebase, written in typescript. It belongs to the DrizzleORM domain, RelationalQuery subdomain.
What does view.ts depend on?
view.ts imports 14 module(s): QueryBuilder, column-builder.ts, common.ts, entity.ts, gelTable, query-builder.ts, query-builder.ts, select.types.ts, and 6 more.
What files import view.ts?
view.ts is imported by 2 file(s): dialect.ts, utils.ts.
Where is view.ts in the architecture?
view.ts is located at drizzle-orm/src/gel-core/view.ts (domain: DrizzleORM, subdomain: RelationalQuery, directory: drizzle-orm/src/gel-core).

Analyze Your Own Codebase

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

Try Supermodel Free