import "./DisposePolyfill.js";
import { Observable } from "rxjs";
import { Id64Array, Id64Set } from "@itwin/core-bentley";
import { ECSqlBinding, ECSqlQueryDef, ECSqlQueryExecutor, ECSqlQueryReaderOptions, ECSqlQueryRow } from "@itwin/presentation-shared";
/**
 * Forms ECSql bindings from given ID's.
 * @internal
 */
export declare function formIdBindings(property: string, ids: Id64Array | Id64Set, bindings: ECSqlBinding[]): string;
/**
 * Executes given ECSql query and extracts data from rows. Additionally handles main thread releasing.
 * @internal
 */
export declare function genericExecuteQuery<T>({ queryExecutor, parseQueryRow, query, config, }: {
    queryExecutor: ECSqlQueryExecutor;
    query: ECSqlQueryDef;
    parseQueryRow: (row: ECSqlQueryRow) => T;
    config?: ECSqlQueryReaderOptions;
}): AsyncIterableIterator<T>;
/**
 * Emits a certain amount of values, then releases the main thread for other timers to use.
 * @internal
 */
export declare function releaseMainThreadOnItemsCount<T>(elementCount: number): (obs: Observable<T>) => Observable<T>;
/**
 * A helper that disposes the given object, if it's disposable.
 *
 * The first option is to dispose using the deprecated `dispose` method if it exists on the object.
 * If not, we use the new `Symbol.dispose` method. If that doesn't exist either, the object is
 * considered as non-disposable and nothing is done with it.
 *
 * @internal
 */
export declare function safeDispose(disposable: {} | {
    [Symbol.dispose]: () => void;
} | {
    dispose: () => void;
}): void;
//# sourceMappingURL=Utils.d.ts.map