export declare const Operation: {
    readonly ADD: "add";
    readonly REPLACE: "replace";
    readonly REMOVE: "remove";
    readonly MOVE: "move";
    readonly COPY: "copy";
    readonly TEST: "test";
};
export type Operation = (typeof Operation)[keyof typeof Operation];
interface BasePatch {
    op: Operation;
    path: string;
}
export interface TestPatch<Value> extends BasePatch {
    op: typeof Operation.TEST;
    value: Value;
}
export interface AddPatch<Value> extends BasePatch {
    op: typeof Operation.ADD;
    value: Value;
}
export interface ReplacePatch<Value> extends BasePatch {
    op: typeof Operation.REPLACE;
    value: Value;
}
export interface RemovePatch extends BasePatch {
    op: typeof Operation.REMOVE;
}
export interface CopyPatch extends BasePatch {
    op: typeof Operation.COPY;
    from: string;
}
export interface MovePatch extends BasePatch {
    op: typeof Operation.MOVE;
    from: string;
}
export type Patch = TestPatch<any> | AddPatch<any> | ReplacePatch<any> | RemovePatch | MovePatch | CopyPatch;
export {};
