import { type JsonNode } from '../nodes';
import type { PatchBuilder } from '../../json-crdt-patch/PatchBuilder';
import type { Path } from '@jsonjoy.com/json-pointer/lib/types';
import type { Model, NodeApi } from '../model';
import type { Operation } from '../../json-patch';
export declare class JsonPatch<N extends JsonNode = JsonNode<any>> {
    protected readonly model: Model<N>;
    protected readonly pfx: Path;
    protected readonly base?: NodeApi<any> | undefined;
    constructor(model: Model<N>, pfx?: Path, base?: NodeApi<any> | undefined);
    apply(ops: Operation[]): this;
    applyOp(op: Operation): this;
    protected builder(): PatchBuilder;
    toPath(path: string | Path): Path;
    add(path: string | Path, value: unknown): void;
    remove(path: string | Path): void;
    replace(path: string | Path, value: unknown): void;
    move(path: string | Path, from: string | Path): void;
    copy(path: string | Path, from: string | Path): void;
    test(path: string | Path, value: unknown): void;
    strIns(path: string | Path, pos: number, str: string): void;
    strDel(path: string | Path, pos: number, len: number, str?: string): void;
    get(path: string | Path): unknown;
    private json;
    private setRoot;
}
