import { Collection } from '../collection.js';
import { QueryBuilder } from './query-builder.js';
import { Context, Schema } from './types.js';
export declare function compileQuery<TContext extends Context<Schema>>(queryBuilder: QueryBuilder<TContext>): CompiledQuery<((TContext["result"] extends object ? TContext["result"] : TContext["hasJoin"] extends true ? TContext["schema"] : TContext["default"] extends keyof TContext["schema"] ? TContext["schema"][TContext["default"]] : never) extends infer T ? { [K in keyof T]: (TContext["result"] extends object ? TContext["result"] : TContext["hasJoin"] extends true ? TContext["schema"] : TContext["default"] extends keyof TContext["schema"] ? TContext["schema"][TContext["default"]] : never)[K]; } : never) & {
    _key?: string | number;
}>;
export declare class CompiledQuery<TResults extends object = Record<string, unknown>> {
    private graph;
    private inputs;
    private inputCollections;
    private resultCollection;
    state: `compiled` | `running` | `stopped`;
    private unsubscribeCallbacks;
    constructor(queryBuilder: QueryBuilder<Context<Schema>>);
    get results(): Collection<TResults, string | number, {}>;
    private sendChangesToInput;
    private runGraph;
    start(): () => void;
    stop(): void;
}
