import { type ITimestampStruct, type ITimespanStruct } from './clock';
import type { IJsonCrdtPatchEditOperation, IJsonCrdtPatchOperation } from './types';
import type { JsonCrdtPatchMnemonic } from './codec/verbose';
declare abstract class Op implements IJsonCrdtPatchOperation {
    readonly id: ITimestampStruct;
    constructor(id: ITimestampStruct);
    span(): number;
    abstract name(): JsonCrdtPatchMnemonic;
    toString(): string;
}
/**
 * Operation which creates a constant "con" data type.
 *
 * @category Operations
 */
export declare class NewConOp extends Op implements IJsonCrdtPatchOperation {
    readonly id: ITimestampStruct;
    readonly val: unknown | undefined | ITimestampStruct;
    constructor(id: ITimestampStruct, val: unknown | undefined | ITimestampStruct);
    name(): "new_con";
    toString(): string;
}
/**
 * Operation which creates a new value object.
 *
 * @category Operations
 */
export declare class NewValOp extends Op implements IJsonCrdtPatchOperation {
    name(): "new_val";
}
/**
 * Operation which creates a new object.
 *
 * @category Operations
 */
export declare class NewObjOp extends Op implements IJsonCrdtPatchOperation {
    name(): "new_obj";
}
/**
 * Operation which creates a new vector object.
 *
 * @category Operations
 */
export declare class NewVecOp extends Op implements IJsonCrdtPatchOperation {
    name(): "new_vec";
}
/**
 * Operation which creates a new string object.
 *
 * @category Operations
 */
export declare class NewStrOp extends Op implements IJsonCrdtPatchOperation {
    name(): "new_str";
}
/**
 * Operation which creates a new binary object.
 *
 * @category Operations
 */
export declare class NewBinOp extends Op implements IJsonCrdtPatchOperation {
    name(): "new_bin";
}
/**
 * Operation which creates a new array object.
 *
 * @category Operations
 */
export declare class NewArrOp extends Op implements IJsonCrdtPatchOperation {
    name(): "new_arr";
}
/**
 * Operation which writes a new value to a value "val" object.
 *
 * @category Operations
 */
export declare class InsValOp extends Op implements IJsonCrdtPatchEditOperation {
    readonly id: ITimestampStruct;
    readonly obj: ITimestampStruct;
    readonly val: ITimestampStruct;
    constructor(id: ITimestampStruct, obj: ITimestampStruct, val: ITimestampStruct);
    name(): "ins_val";
    toString(): string;
}
/**
 * Operation which sets object keys.
 *
 * @category Operations
 */
export declare class InsObjOp extends Op implements IJsonCrdtPatchEditOperation {
    readonly id: ITimestampStruct;
    readonly obj: ITimestampStruct;
    readonly data: [key: string, value: ITimestampStruct][];
    constructor(id: ITimestampStruct, obj: ITimestampStruct, data: [key: string, value: ITimestampStruct][]);
    name(): "ins_obj";
    toString(tab?: string): string;
}
/**
 * Operation which sets vector elements.
 *
 * @category Operations
 */
export declare class InsVecOp extends Op implements IJsonCrdtPatchEditOperation {
    readonly id: ITimestampStruct;
    readonly obj: ITimestampStruct;
    readonly data: [key: number, value: ITimestampStruct][];
    constructor(id: ITimestampStruct, obj: ITimestampStruct, data: [key: number, value: ITimestampStruct][]);
    name(): "ins_vec";
    toString(tab?: string): string;
}
/**
 * Operation which inserts text into a "str" string object.
 *
 * @category Operations
 */
export declare class InsStrOp extends Op implements IJsonCrdtPatchEditOperation {
    readonly id: ITimestampStruct;
    readonly obj: ITimestampStruct;
    readonly ref: ITimestampStruct;
    data: string;
    constructor(id: ITimestampStruct, obj: ITimestampStruct, ref: ITimestampStruct, data: string);
    span(): number;
    name(): "ins_str";
    toString(): string;
}
/**
 * Operations which inserts binary data into a "bin" binary object.
 *
 * @category Operations
 */
export declare class InsBinOp extends Op implements IJsonCrdtPatchEditOperation {
    readonly id: ITimestampStruct;
    readonly obj: ITimestampStruct;
    readonly ref: ITimestampStruct;
    readonly data: Uint8Array;
    constructor(id: ITimestampStruct, obj: ITimestampStruct, ref: ITimestampStruct, data: Uint8Array);
    span(): number;
    name(): "ins_bin";
    toString(): string;
}
/**
 * Operation which inserts elements into an array.
 *
 * @category Operations
 */
export declare class InsArrOp extends Op implements IJsonCrdtPatchEditOperation {
    readonly id: ITimestampStruct;
    readonly obj: ITimestampStruct;
    readonly ref: ITimestampStruct;
    readonly data: ITimestampStruct[];
    /**
     * @param id ID if the first operation in this compound operation.
     * @param obj ID of the array where to insert elements. In theory `arr` is
     *        not necessary as it is possible to find the `arr` just using the
     *        `after` property, however to efficiently be able to find `arr` just
     *        by `after` at runtime all operations would need to be indexed and
     *        also they each would need to store a pointer to array type, which
     *        would require additional dozens of bytes of RAM for each array
     *        insert operation.
     * @param ref ID of the element after which to insert elements.
     * @param data The elements to insert.
     */
    constructor(id: ITimestampStruct, obj: ITimestampStruct, ref: ITimestampStruct, data: ITimestampStruct[]);
    span(): number;
    name(): "ins_arr";
    toString(): string;
}
/**
 * Operation which updates an existing element in an array.
 *
 * @category Operations
 */
export declare class UpdArrOp extends Op implements IJsonCrdtPatchEditOperation {
    readonly id: ITimestampStruct;
    readonly obj: ITimestampStruct;
    readonly ref: ITimestampStruct;
    readonly val: ITimestampStruct;
    /**
     * @param id ID of this operation.
     * @param obj and "arr" object ID where to update an element.
     * @param ref ID of the element to update.
     * @param val ID of the new value to set.
     */
    constructor(id: ITimestampStruct, obj: ITimestampStruct, ref: ITimestampStruct, val: ITimestampStruct);
    name(): "upd_arr";
    toString(): string;
}
/**
 * Operation which deletes one or more ranges of values in some object.
 * The object could be a string, an array, or a binary.
 *
 * @category Operations
 */
export declare class DelOp extends Op implements IJsonCrdtPatchEditOperation {
    readonly id: ITimestampStruct;
    readonly obj: ITimestampStruct;
    readonly what: ITimespanStruct[];
    /**
     * @param id ID of this operation.
     * @param obj Object in which to delete something.
     * @param what ID of the first operation to be deleted.
     */
    constructor(id: ITimestampStruct, obj: ITimestampStruct, what: ITimespanStruct[]);
    name(): "del";
    toString(): string;
}
/**
 * Operation which does nothing. Useful for skipping clock cycles, so that
 * operations with a gap in clock can be included in the same patch.
 *
 * @category Operations
 */
export declare class NopOp extends Op implements IJsonCrdtPatchOperation {
    readonly id: ITimestampStruct;
    readonly len: number;
    constructor(id: ITimestampStruct, len: number);
    span(): number;
    name(): "nop";
}
export {};
