@sqb/connect
Version:
Multi-dialect database connection framework written with TypeScript
51 lines (50 loc) • 3.65 kB
TypeScript
import { Maybe, Type } from 'ts-gems';
import { Ctor, TypeThunk } from '../orm.type.js';
import { Association } from './association.js';
import { AssociationFieldMetadata, AssociationFieldOptions } from './association-field-metadata.js';
import { AssociationNode } from './association-node.js';
import { ColumnFieldMetadata, ColumnFieldOptions } from './column-field-metadata.js';
import { EmbeddedFieldMetadata, EmbeddedFieldOptions } from './embedded-field-metadata.js';
import { IndexMetadata } from './index-metadata.js';
export type AnyFieldMetadata = ColumnFieldMetadata | EmbeddedFieldMetadata | AssociationFieldMetadata;
export type EntityOptions = Partial<Pick<EntityMetadata, 'name' | 'schema' | 'comment' | 'tableName'>>;
export interface EntityMetadata {
readonly ctor: Type;
readonly name: string;
tableName?: string;
schema?: string;
comment?: string;
fields: Record<string, AnyFieldMetadata>;
indexes: IndexMetadata[];
foreignKeys: Association[];
eventListeners: Record<string, Function[]>;
}
export declare namespace EntityMetadata {
function define(ctor: Ctor): EntityMetadata;
function get(ctor: Ctor): Maybe<EntityMetadata>;
function getOwn(ctor: Ctor): Maybe<EntityMetadata>;
function getField(entity: EntityMetadata, fieldName: string): Maybe<AnyFieldMetadata>;
function getColumnField(entity: EntityMetadata, fieldName: string): Maybe<ColumnFieldMetadata>;
function getEmbeddedField(entity: EntityMetadata, fieldName: string): Maybe<EmbeddedFieldMetadata>;
function getAssociationField(entity: EntityMetadata, fieldName: string): Maybe<AssociationFieldMetadata>;
function findField(entity: EntityMetadata, predicate: (el: AnyFieldMetadata) => boolean): Maybe<AnyFieldMetadata>;
function getColumnFieldByFieldName(entity: EntityMetadata, fieldName: string): Maybe<ColumnFieldMetadata>;
function getFieldNames(entity: EntityMetadata, filter?: (el: AnyFieldMetadata) => boolean): string[];
function getColumnFieldNames(entity: EntityMetadata): string[];
function getEmbeddedFieldNames(entity: EntityMetadata): string[];
function getAssociationFieldNames(entity: EntityMetadata): string[];
function getNonAssociationFieldNames(entity: EntityMetadata): string[];
function getInsertColumnNames(entity: EntityMetadata): string[];
function getUpdateColumnNames(entity: EntityMetadata): string[];
function getPrimaryIndex(entity: EntityMetadata): Maybe<IndexMetadata>;
function getPrimaryIndexColumns(entity: EntityMetadata): ColumnFieldMetadata[];
function getForeignKeyFor(src: EntityMetadata, trg: EntityMetadata): Promise<Maybe<Association>>;
function addIndex(entity: EntityMetadata, index: IndexMetadata): void;
function addForeignKey(entity: EntityMetadata, propertyKey: string, target: TypeThunk, targetKey?: string): void;
function addEventListener(entity: EntityMetadata, event: string, fn: Function): void;
function defineColumnField(entity: EntityMetadata, name: string, options?: ColumnFieldOptions): ColumnFieldMetadata;
function defineEmbeddedField(entity: EntityMetadata, name: string, type: TypeThunk, options?: EmbeddedFieldOptions): EmbeddedFieldMetadata;
function defineAssociationField(entity: EntityMetadata, propertyKey: string, association: AssociationNode, options?: AssociationFieldOptions): AssociationFieldMetadata;
function setPrimaryKeys(entity: EntityMetadata, column: string | string[], options?: Omit<IndexMetadata, 'columns' | 'unique' | 'primary'>): void;
function mixin(derived: EntityMetadata, base: EntityMetadata, filter?: (n: string) => boolean): void;
}