import type { PGliteWithLive } from '@electric-sql/pglite/live';
import { Repeater } from '@repeaterjs/repeater';
import type { ReferenceExpression } from 'kysely';
import { type SelectQueryBuilder } from 'kysely';
import type { Change } from './types.js';
/**
 * Wrapper for PGlite's Live Queries extension
 * @example
 * const pglive = new KyselyLive(pglite)
 * const query = db
 *   .selectFrom('sales')
 *   .select(['id', 'price'])
 *   .orderBy((eb) => eb.fn('rand'))
 * const liveQuery = pglive.query(query)
 *
 * for await (const data of liveQuery.subscribe) {
 *   const [sale] = data
 *   console.log(sale.id, sale.price)
}
 */
export declare class KyselyLive {
    private live;
    constructor(pglite: PGliteWithLive);
    query<DB, TB extends keyof DB, O>(builder: SelectQueryBuilder<DB, TB, O>): {
        subscribe: Repeater<O[], any, unknown>;
        refresh: () => Promise<void>;
        unsubscribe: () => Promise<void>;
    };
    changes<DB, TB extends keyof DB, O>(builder: SelectQueryBuilder<DB, TB, O>, ref: ReferenceExpression<DB, TB>): {
        subscribe: Repeater<Change<O>[], any, unknown>;
        refresh: () => Promise<void>;
        unsubscribe: () => Promise<void>;
    };
    incrementalQuery<DB, TB extends keyof DB, O>(builder: SelectQueryBuilder<DB, TB, O>, ref: ReferenceExpression<DB, TB>): {
        subscribe: Repeater<O[], any, unknown>;
        refresh: () => Promise<void>;
        unsubscribe: () => Promise<void>;
    };
    private createLiveRepeater;
}
