@palmares/databases
Version:
Add support for working with databases with palmares framework
96 lines • 5.7 kB
TypeScript
import type { DatabaseAdapter } from './engine';
import type { DatabaseDomainInterface } from './interfaces';
import type { model } from './models/model';
import type { DatabaseConfigurationType, DatabaseSettingsType, FoundModelType, InitializedEngineInstanceWithModelsType, InitializedEngineInstancesType, OptionalMakemigrationsArgsType } from './types';
declare global {
var $PDatabaseInstance: Databases | undefined;
}
export declare class Databases {
#private;
settings: DatabaseSettingsType;
isInitializing: boolean;
isInitialized: boolean;
initializedEngineInstances: Partial<InitializedEngineInstancesType>;
obligatoryModels: ReturnType<typeof model>[];
managers: Map<any, any>;
constructor();
/**
* This will lazy initialize the hole engine instance with all of the models before using it.
* Generally this is not needed but for example on cases like serverless. We need to guarantee that
* the database will work without the need of the default domain lifecycle. That's because
* on certain environments we can't guarantee that the hole domain lifecycle will be called and executed,
* this is why we need to lazy initialize it.
*
* We initialize the hole engine AND NOT JUST THE MODELS because there is no way to know before hand about relations.
* Yeah we can guarantee direct relations, for example `Post` that are related to a `User`. But we cannot
* guarantee indirect relations, for example, that `User` is related to `Post`. This is because of the architecture
* that we choose to keep all relations in the models themselves. If we change this architecture we are able to lazy
* load just certain models as well as their relations so it can be even more efficient. Right now we thinks
* that this is efficient enough.
*
* @param engineName - The name of the engine that we want to lazy initialize.
* @param settings - The settings that we want to use.
* @param domains - The domains of the application.
*/
lazyInitializeEngine(engineName: string, settings: DatabaseSettingsType, domains: DatabaseDomainInterface[]): Promise<void>;
/**
* Initializes the database connection and load the models to their respective engines.
*
* @param settings - The settings object from the file itself.
*/
init(settings: DatabaseSettingsType, domains: DatabaseDomainInterface[]): Promise<void>;
/**
* Responsible for handling the `makemigrations` command. For this command we must initialize the database first.
* The user can pass --empty to create a new empty migration file.
*
* @param settings - The settings defined by the user in settings.js/ts file.
* @param domains - The domains defined by the user so we can fetch all of the models and migrations.
*/
makeMigrations(settings: DatabaseSettingsType, domains: DatabaseDomainInterface[], optionalArgs: OptionalMakemigrationsArgsType): Promise<void>;
/**
* Responsible for handling the `migrate` command. For this command we must initialize the database first.
*
* @param settings - The settings defined by the user in settings.js/ts file.
* @param domains - The domains defined by the user so we can fetch all of the models and migrations.
*/
migrate(settings: DatabaseSettingsType, domains: DatabaseDomainInterface[]): Promise<void>;
/**
* Closes the database connection on all of the initialized engine instances.
*/
close(): Promise<void>;
/**
* Initializes the database connection and load the models to their respective engines.
*
* @param engineName - A custom name of the engine that we are using.
* @param databaseSettings - The settings object for the database.
*/
initializeDatabase(engineName: string, databaseSettings: DatabaseConfigurationType, domains: DatabaseDomainInterface[]): Promise<void>;
/**
* Initializes the models to the engine instance, the engine instance will convert the models to something it
* can understand. For example on sequelize engine we will convert the models to a sequelize model. On a Prisma
* engine for example we could interpret the models as a Prisma schema, and we could build the file after.
*
* @param engineInstance - The engine instance that we will be using.
* @param projectModels - The models from the project (not the default ones that we create).
*
* @returns - Returns the engine instance that we are using to build run everything over returns the project models
* and the internal models.
*/
initializeModels(engineInstance: DatabaseAdapter, projectModels: FoundModelType[]): Promise<InitializedEngineInstanceWithModelsType>;
/**
* Retrieves the models on all of the installed domains. By default we will look for the models
* in the `models` file in the path of the domain. You can also define your domain app implementing
* the `DatabaseDomainInterface` interface. With this type of domain you are able to export your models by defining
* the `getModels` method. When this method is defined we bypass the lookup of the models in the `models`
* file or folder, for complex projects you might want to use this method.
*
* @param domains - The domains where we want to retrieve the models from. Those are all of the
* domains installed with INSTALLED_DOMAINS.
*
* @returns - Returns an array of models.
*/
getModels(engineInstance: DatabaseAdapter, domains?: DatabaseDomainInterface[]): Promise<{
[modelName: string]: FoundModelType;
}>;
}
//# sourceMappingURL=databases.d.ts.map