import "./DisposePolyfill.js";
import { Observable } from "rxjs";
import { ECSqlBinding, ECSqlQueryDef, ECSqlQueryExecutor, ECSqlQueryRow } from "@itwin/presentation-shared";
/**
 * Forms ECSql bindings from given ID's.
 * @internal
 */
export declare function formIdBindings(property: string, ids: string[], bindings: ECSqlBinding[]): string;
/**
 * Executes given ECSql query and extracts data from rows. Additionally handles main thread releasing.
 * @internal
 */
export declare function genericExecuteQuery<T>(queryExecutor: ECSqlQueryExecutor, query: ECSqlQueryDef, parseQueryRow: (row: ECSqlQueryRow) => T): 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