import { entityKind } from "../../entity.cjs";
import { Query } from "../../sql/sql.cjs";
import { Logger } from "../../logger.cjs";
import { AnyRelations } from "../../relations.cjs";
import { WithCacheConfig } from "../../cache/core/types.cjs";
import { Cache } from "../../cache/core/cache.cjs";
import { SQLiteDialect } from "../../sqlite-core/dialect.cjs";
import { SQLiteExecuteMethod, SQLiteTransactionConfig } from "../../sqlite-core/session.cjs";
import { SQLiteAsyncPreparedQuery, SQLiteAsyncPreparedQueryConfig, SQLiteAsyncSession, SQLiteAsyncTransaction } from "../../sqlite-core/async/session.cjs";
import { SQLiteDatabase, SQLiteRunResult } from "expo-sqlite";

//#region src/expo-sqlite/async/session.d.ts
interface ExpoSQLiteAsyncSessionOptions {
  logger?: Logger;
  cache?: Cache;
}
type ExpoSQLiteAsyncRunResult = SQLiteRunResult;
type PreparedQueryConfig$1 = Omit<SQLiteAsyncPreparedQueryConfig, 'statement' | 'run'>;
declare class ExpoSQLiteAsyncSession<TRelations extends AnyRelations> extends SQLiteAsyncSession<'async', ExpoSQLiteAsyncRunResult, TRelations> {
  private client;
  private relations;
  private options;
  static readonly [entityKind]: string;
  private logger;
  private cache;
  constructor(client: SQLiteDatabase, dialect: SQLiteDialect, relations: TRelations, options?: ExpoSQLiteAsyncSessionOptions);
  prepareQuery<T extends Omit<PreparedQueryConfig$1, 'run'>>(query: Query, mode: 'arrays' | 'objects' | 'raw', _prepare: boolean, executeMethod?: SQLiteExecuteMethod, mapper?: (rows: any[]) => any, queryMetadata?: {
    type: 'select' | 'update' | 'delete' | 'insert';
    tables: string[];
  }, cacheConfig?: WithCacheConfig): SQLiteAsyncPreparedQuery<T & {
    run: ExpoSQLiteAsyncRunResult;
  }>;
  transaction<T>(transaction: (tx: ExpoSQLiteAsyncTransaction<TRelations>) => Promise<T>, config?: SQLiteTransactionConfig): Promise<T>;
}
declare class ExpoSQLiteAsyncTransaction<TRelations extends AnyRelations> extends SQLiteAsyncTransaction<'async', ExpoSQLiteAsyncRunResult, TRelations> {
  static readonly [entityKind]: string;
  transaction<T>(transaction: (tx: ExpoSQLiteAsyncTransaction<TRelations>) => Promise<T>): Promise<T>;
}
//#endregion
export { ExpoSQLiteAsyncRunResult, ExpoSQLiteAsyncSession, ExpoSQLiteAsyncSessionOptions, ExpoSQLiteAsyncTransaction };
//# sourceMappingURL=session.d.cts.map