UNPKG

@sqb/connect

Version:

Multi-dialect database connection framework written with TypeScript

51 lines (50 loc) 3.65 kB
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; }