import { Task, TaskCallerType } from "./index";
import Collection from "../Collection";
import { NextFn, onAnyChangeEventType } from "../ObservableCollection";
export declare type JoinDefinitionsTraveler = {
    as?: string;
    thisKey?: string;
    foreignKey?: string;
    isArray?: boolean;
    primaryCollection?: Collection;
    joinedCollection?: Collection;
};
export declare class Joiner implements Task {
    params: JoinDefinitionsTraveler;
    wasChangedEvent: onAnyChangeEventType;
    collectionNames: string[];
    index: number;
    constructor(params: JoinDefinitionsTraveler);
    doReceive(nextTask: NextFn): void;
    doJoinedReceive(nextJoinedEvent: NextFn, nextTask: NextFn): void;
    doJoinedInsert(newJoined: any, nextJoinedEvent: NextFn, nextTask: NextFn): void;
    doJoinedUpdate(newJoined: any, selector: any, nextJoinedEvent: NextFn, nextTask: NextFn): void;
    doJoinedRemove(selector: any, nextJoinedEvent: NextFn, nextTask: NextFn): void;
    doInsert(newPrimary: any, nextTask: NextFn): void;
    doUpdate(newPrimary: any, selector: any, nextTask: NextFn): void;
    doRemove(selector: any, nextTask: NextFn): void;
    run(caller: TaskCallerType, next: NextFn): void;
}
