UNPKG

@riao/dbal

Version:
200 lines (199 loc) 5.76 kB
import { DatabaseDriver } from './driver'; import { DatabaseEnv } from '../config'; import { DataDefinitionBuilder, DataDefinitionRepository } from '../ddl'; import { DatabaseConnectionOptions } from './connection-options'; import { DatabaseRecord } from '../record'; import { DatabaseQueryBuilder, QueryRepository, QueryRepositoryOptions } from '../dml'; import { SchemaQueryRepository } from '../schema/schema-query-repository'; import { Schema } from '../schema'; import { Transaction } from './transaction'; /** * Represents a single database instance, including a driver, * configuration, connection, etc. */ export declare abstract class Database { /** * Reconstructors will be used to re-initialize repositories * after the database has been initialized. * * This allows repositories to be created in global scope * before the database is init()'d */ protected queryRepoInitQueue: QueryRepository[]; protected ddlRepoInitQueue: DataDefinitionRepository[]; protected schemaRepoInitQueue: SchemaQueryRepository[]; isLoaded: boolean; /** * Database driver class */ driverType: typeof DatabaseDriver; /** * Database driver intance */ driver: DatabaseDriver; /** * Database configuration class */ envType: typeof DatabaseEnv; /** * Database configuration */ env: DatabaseEnv; /** * Parent path (database path) */ databasePath: string; /** * Database name (must match folder name!) */ name: string; /** * Migrations directory, relative to this database * e.g. If the migrations are in `database/main/migrations`, * set this to `migrations` */ migrations: string; /** * Seeds directory, relative to this database * e.g. If the seeds are in `database/main/seeds`, * set this to `seeds` */ seeds: string; /** * Schema storage directory, relative to this database * e.g. If the schema is in `database/main/.schema`, * set this to `.schema` */ schemaDirectory: string; /** * Query builder class type used to create new query builders */ queryBuilderType: typeof DatabaseQueryBuilder; /** * Query repository class type used to create new repos */ queryRepositoryType: typeof QueryRepository; /** * Query repository */ query: QueryRepository; /** * DDL builder class type used to create new builders */ ddlBuilderType: typeof DataDefinitionBuilder; /** * DDL repository class type used to create new repos */ ddlRepositoryType: typeof DataDefinitionRepository; /** * Data definition repository */ ddl: DataDefinitionRepository; /** * Schema Query repository class type used to create new repos */ schemaQueryRepositoryType: typeof SchemaQueryRepository; /** * Schema query repository */ schemaQuery: SchemaQueryRepository; /** * Database schema */ protected schema: Schema; /** * Initialize the database * * @param options Database options */ init(options?: { connectionOptions?: DatabaseConnectionOptions; }): Promise<void>; /** * Load the configuration .env */ configureFromEnv(): void; /** * Connect to the database */ connect(): Promise<void>; /** * Disconnect from the database */ disconnect(): Promise<void>; /** * Get the full relative path to this database's migrations folder * * @returns Returns the relative file path */ getMigrationsDirectory(): string; /** * Get the full relative path to this database's seeds folder * * @returns Returns the relative file path */ getSeedsDirectory(): string; /** * Get the full relative path to this database's schema folder * * @returns Returns the relative file path */ getSchemaDirectory(): string; /** * Get a new DDL builder * * @returns DDL builder */ getDataDefinitionBuilder(): DataDefinitionBuilder; /** * Get a new DDL repository * * @param options Repository options * @returns Returns the DDL repository */ getDataDefinitionRepository(): DataDefinitionRepository; /** * Get a new query builder * * @returns Query builder */ getQueryBuilder(): DatabaseQueryBuilder; /** * Get a new query repository * * @param options Repository options * @returns Returns the query repository */ getQueryRepository<T extends DatabaseRecord = DatabaseRecord>(options?: Omit<QueryRepositoryOptions, 'driver' | 'queryBuilderType' | 'functions'>): QueryRepository<T>; /** * Get a new schema query repository * * @returns Schema Query Repository */ getSchemaQueryRepository(): SchemaQueryRepository; /** * Build & save the database schema */ buildSchema(): Promise<void>; /** * Save the database schema */ saveSchema(): Promise<void>; /** * Load the database schema */ loadSchema(): Promise<void>; /** * Get schema metadata * * @returns Schema */ getSchema(): Promise<Schema>; /** * Run a transaction * * @param fn Transaction callback * @returns Passes the return from the transaction callback */ transaction<T>(fn: (transaction: Transaction) => Promise<T>): Promise<T>; }