///
///
import Command from "../Command";
import type { HimportFieldset } from "./types";
type HimportConnectionRole = "standalone" | "cluster" | "master" | "replica";
export interface HimportConnection {
sendCommand(command: Command): unknown;
}
interface HimportPipelineOwner extends HimportConnection {
slots?: readonly (readonly string[])[];
connectionPool?: {
getInstanceByKey(key: string): HimportConnection | undefined;
getSampleInstance(role: "master"): HimportConnection | undefined;
};
}
interface HimportPipelineInterception {
owner: HimportPipelineOwner;
commands: readonly Command[];
slot?: number;
preferredNodeKey?: string;
setDestination(connection: HimportConnection): void;
resume(): void;
reject(error: Error): void;
}
interface HimportDefinition {
readonly canonicalName: string;
readonly name: string | Buffer;
readonly fields: readonly (string | Buffer)[];
}
interface ManagedSetContext {
definition: HimportDefinition;
lastConnection?: HimportConnection;
resumeSend?: () => void;
recoveryAttempts: number;
recoveryInstalled: boolean;
sendWithoutPreparationOn?: HimportConnection;
}
export interface HimportBinding {
coordinator: HimportCoordinator;
role: HimportConnectionRole;
}
export declare const hasHimportCoordinator: unique symbol;
export declare function cloneHimportFieldsets(fieldsets: readonly HimportFieldset[] | undefined): readonly HimportFieldset[] | undefined;
export default class HimportCoordinator {
private readonly definitions;
private readonly definitionsByName;
private readonly sessions;
private readonly managedSets;
constructor(fieldsets: readonly HimportFieldset[]);
get size(): number;
beginSession(connection: HimportConnection): void;
detach(connection: HimportConnection): void;
invalidate(connection: HimportConnection): void;
getDefinitions(): readonly HimportDefinition[];
classify(command: Command): ManagedSetContext | undefined;
prepareCommand(connection: HimportConnection, command: Command): Promise | undefined;
hasManagedSet(commands: readonly Command[]): boolean;
prepareCommands(connection: HimportConnection, commands: readonly Command[]): Promise | undefined;
interceptCommand(connection: HimportConnection, command: Command, ready: boolean, resumeSend: () => void): boolean;
allowNextSend(connection: HimportConnection, command: Command): void;
consumeAllowedSend(connection: HimportConnection, command: Command): boolean;
installRecovery(connection: HimportConnection, command: Command, resumeSend: () => void): void;
ensurePrepared(connection: HimportConnection, definition: HimportDefinition): Promise | undefined;
private getSession;
private markUnprepared;
}
export declare function bindHimportCoordinator(owner: object, coordinator: HimportCoordinator, role: HimportConnectionRole): void;
export declare function getHimportBinding(owner: object): HimportBinding | undefined;
export declare function interceptHimportCommand(connection: HimportConnection, command: Command, ready: boolean, resumeSend: () => void): boolean;
export declare function interceptHimportPipeline({ owner, commands, slot, preferredNodeKey, setDestination, resume, reject, }: HimportPipelineInterception): boolean;
export declare function setHimportRole(owner: object, role: HimportConnectionRole): void;
export declare function unbindHimportCoordinator(owner: object): void;
export declare function isInternalHimportCommand(command: Command): boolean;
export declare function isHimportControlCommand(command: Command): boolean;
export declare function interceptHimportControlCommand(connections: readonly HimportConnection[], command: Command): boolean;
export {};