import EventEmitter from 'events';
import Keyv, { KeyvStoreAdapter, StoredData } from 'keyv';

type DbQuery = (sqlString: string, ...parameter: unknown[]) => Promise<any>;
type DbClose = () => Promise<void>;
type KeyvSqliteOptions = {
    dialect?: string;
    uri?: string;
    busyTimeout?: number;
    table?: string;
    keySize?: number;
    db?: string;
    iterationLimit?: number | string;
    connect?: () => Promise<{
        query: DbQuery;
        close: DbClose;
    }>;
};

declare class KeyvSqlite extends EventEmitter implements KeyvStoreAdapter {
    ttlSupport: boolean;
    opts: KeyvSqliteOptions;
    namespace?: string;
    close: DbClose;
    query: DbQuery;
    constructor(keyvOptions?: KeyvSqliteOptions | string);
    get<Value>(key: string): Promise<Value | undefined>;
    getMany<Value>(keys: string[]): Promise<StoredData<Value | undefined>[]>;
    set(key: string, value: any): Promise<any>;
    delete(key: string): Promise<boolean>;
    deleteMany(keys: string[]): Promise<boolean>;
    clear(): Promise<void>;
    iterator(namespace?: string): AsyncGenerator<any, void, any>;
    has(key: string): Promise<boolean>;
    disconnect(): Promise<void>;
}
declare const createKeyv: (keyvOptions?: KeyvSqliteOptions | string) => Keyv<any>;

export { KeyvSqlite, type KeyvSqliteOptions, createKeyv, KeyvSqlite as default };
