/*!
 * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
 * Licensed under the MIT License.
 */
import { PropertySet } from "../properties";
import { IMergeTreeOptions } from "..";
import { TestClient } from "./testClient";
type ClientMap<TClientName extends string> = Partial<Record<TClientName, TestClient>>;
export declare function createClientsAtInitialState<TClients extends ClientMap<TClientName>, TClientName extends string = string & keyof TClients>(opts: {
    initialState: string;
    options?: IMergeTreeOptions & PropertySet;
}, ...clientIds: TClientName[]): Record<keyof TClients, TestClient> & {
    all: TestClient[];
};
export declare class TestClientLogger {
    private readonly clients;
    private readonly title?;
    static toString(clients: readonly TestClient[]): string;
    private readonly incrementalLog;
    private readonly paddings;
    private readonly roundLogLines;
    private ackedLine;
    private localLine;
    private lastDeltaArgs;
    private readonly disposeCallbacks;
    /**
     * Unsubscribes this logger from its clients' events. Consider using this for tests with client lifetime
     * extending significantly past the logger's.
     */
    dispose(): void;
    constructor(clients: readonly TestClient[], title?: string | undefined);
    private addNewLogLine;
    validate(opts?: {
        clear?: boolean;
        baseText?: string;
        errorPrefix?: string;
    }): string;
    static validate(clients: readonly TestClient[], title?: string): string;
    toString(excludeHeader?: boolean): string;
    addLogsToError(e: unknown): Error;
    private static getSegString;
}
export {};
//# sourceMappingURL=testClientLogger.d.ts.map