import type { EncodedCBOR, EncodedJSON } from "@tai-kun/surrealdb/formatter";
import type { PreparedQueryLike, SlotLike } from "@tai-kun/surrealdb/types";
declare const NONE: unique symbol;
type None = typeof NONE;
export interface PreparedQueryOptions<TResults extends readonly unknown[] = any[], TTransformed = any> {
    readonly parse?: ((results: unknown[]) => TResults) | undefined;
    readonly trans?: ((results: TResults) => TTransformed) | undefined;
    readonly encodedText?: string | EncodedJSON<string> | EncodedCBOR<string> | undefined;
}
export default class PreparedQuery<TSlot extends SlotLike, TResults extends unknown[] = unknown[], TTransformed = None> implements PreparedQueryLike {
    readonly vars: {
        readonly [p: string]: unknown;
    };
    readonly slots: readonly TSlot[];
    readonly text: string | EncodedJSON<string> | EncodedCBOR<string>;
    readonly originalText: string;
    readonly __type: TTransformed extends None ? TResults : TTransformed;
    readonly _parse: (results: unknown[]) => TResults;
    readonly _trans: (results: TResults) => TTransformed;
    constructor(text: string, vars: {
        readonly [p: string]: unknown;
    }, slots: readonly TSlot[], options?: PreparedQueryOptions<TResults, TTransformed>);
    /**
     * @alias {@link type}
     */
    as<TResults extends unknown[] = unknown[]>(): PreparedQuery<TSlot, TResults, TTransformed>;
    /**
     * @alias {@link type}
     */
    as<TResults extends unknown[] = unknown[]>(parser: (results: unknown[]) => TResults): PreparedQuery<TSlot, TResults, TTransformed>;
    /**
     * @alias {@link as}
     */
    type<TResults extends unknown[] = unknown[]>(): PreparedQuery<TSlot, TResults, TTransformed>;
    /**
     * @alias {@link as}
     */
    type<TResults extends unknown[] = unknown[]>(parser: (results: unknown[]) => TResults): PreparedQuery<TSlot, TResults, TTransformed>;
    /**
     * @alias {@link transform}
     */
    to<TTransformed>(transformer: (results: TResults) => TTransformed): PreparedQuery<TSlot, TResults, TTransformed>;
    /**
     * @alias {@link to}
     */
    transform<TTransformed>(transformer: (results: TResults) => TTransformed): PreparedQuery<TSlot, TResults, TTransformed>;
}
export {};
//# sourceMappingURL=prepared-query.d.ts.map