import DatabaseAdapter from "./adapter-base.mjs";
import { EnvironmentVariables, RuntimeArtifactProvider } from "../runtime/types.mjs";

//#region src/libs/db/adapter-factory.d.ts
type DatabaseAdapterOptionsFactory<TOptions> = (env: EnvironmentVariables) => TOptions | Promise<TOptions>;
type DatabaseAdapterFactory<TAdapter extends DatabaseAdapter = DatabaseAdapter> = {
  adapter: string;
  resolve: (env: EnvironmentVariables) => TAdapter | Promise<TAdapter>;
  hooks?: {
    runtime?: RuntimeArtifactProvider;
  };
};
type DatabaseAdapterCreator<TAdapter extends DatabaseAdapter = DatabaseAdapter> = DatabaseAdapterFactory<TAdapter> & {
  __lucidDatabaseAdapterCreator: true;
};
declare const createDatabaseAdapterFactory: <TAdapter extends DatabaseAdapter = DatabaseAdapter>(props: {
  adapter: string;
  resolve: (env: EnvironmentVariables) => TAdapter | Promise<TAdapter>;
  hooks?: DatabaseAdapterFactory<TAdapter>["hooks"];
}) => DatabaseAdapterFactory<TAdapter>;
declare const createDatabaseAdapterCreator: <TCreator extends (...args: any[]) => unknown, TAdapter extends DatabaseAdapter = DatabaseAdapter>(creator: TCreator, props: {
  adapter: string;
  resolve: (env: EnvironmentVariables) => TAdapter | Promise<TAdapter>;
  hooks?: DatabaseAdapterFactory<TAdapter>["hooks"];
}) => TCreator & DatabaseAdapterCreator<TAdapter>;
//#endregion
export { DatabaseAdapterCreator, DatabaseAdapterFactory, DatabaseAdapterOptionsFactory, createDatabaseAdapterCreator, createDatabaseAdapterFactory };
//# sourceMappingURL=adapter-factory.d.mts.map