import type { QueryStage } from "./query-stage.js"; import type { MatchBody } from "./query-stage.js"; import type { SQLPreparedStatement } from "./query-base.js"; export default abstract class QueryStep { body: any; hash(): string; static fromStage(stage: QueryStage, unwind?: boolean, rehash?: boolean): QueryStep[]; static hashBody(body: any): string; abstract getUsedFields(): string[]; abstract getCost(): number; abstract negate(): QueryStep; abstract prefix(prefix: string): QueryStep; abstract toPipeline(): QueryStage[]; abstract toPreparedStatement(): SQLPreparedStatement; abstract renameField(old_name: string, new_name: string): void; } export declare class Match extends QueryStep { body: MatchBody; constructor(body: MatchBody); toPipeline(): [QueryStage]; toPreparedStatement(): SQLPreparedStatement; pushStage(pipeline: QueryStage[]): QueryStage[]; getUsedFields(): string[]; getCost(): number; negate(): Match; prefix(prefix: string): Match; renameField(old_name: string, new_name: string): void; } export type SimpleLookupBodyInput = { from: string; localField: string; foreignField: string; unwind?: boolean; as?: string; }; export type SimpleLookupBody = SimpleLookupBodyInput & { as: string; }; export type ComplexLookupBodyInput = { from: string; let: Record; pipeline: QueryStage[]; unwind?: boolean; as?: string; }; export type ComplexLookupBody = ComplexLookupBodyInput & { as: string; }; export type LookupBody = ComplexLookupBody | SimpleLookupBody; export type LookupBodyInput = ComplexLookupBodyInput | SimpleLookupBodyInput; export declare abstract class Lookup extends QueryStep { abstract getUsedFields(): string[]; body: LookupBody; unwind: boolean; constructor(body: SimpleLookupBodyInput | ComplexLookupBodyInput, rehash?: boolean); static hashBody(body: LookupBodyInput): string; getCost(): number; negate(): QueryStep; hash(): string; static isComplexBody(body: ComplexLookupBodyInput | SimpleLookupBodyInput): body is ComplexLookupBodyInput; static fromBody(body: ComplexLookupBodyInput | SimpleLookupBodyInput, rehash?: boolean): Lookup; toPipeline(): QueryStage[]; toPreparedStatement(): SQLPreparedStatement; renameField(old_name: string, new_name: string): void; } export declare class SimpleLookup extends Lookup { unwind: boolean; body: SimpleLookupBody; used_fields: string[]; getUsedFields(): string[]; prefix(prefix: string): SimpleLookup; } export declare class ComplexLookup extends Lookup { body: ComplexLookupBody; getUsedFields(): string[]; prefix(prefix: string): Lookup; } declare abstract class SimpleQueryStep { body: T; abstract getStageName: () => string; constructor(body: T); prefix(): SimpleQueryStep; getCost(): number; toPipeline(): QueryStage[]; toPreparedStatement(): SQLPreparedStatement; hash(): string; getUsedFields(): never[]; negate(): this; renameField(_: string, __: string): void; } export declare class Group extends SimpleQueryStep<{ _id: any; [key: string]: any; }> { getStageName: () => string; } export declare class Unwind extends SimpleQueryStep { getStageName: () => string; renameField(old_name: string, new_name: string): void; } export {};