/// <reference types="node" />
import { ITreeNode, IReversibleJsonPatch, MosxTracker, IListener, IChange } from "../internal";
export declare abstract class Serializer<T = any> {
    nodes: WeakMap<any, ITreeNode>;
    listeneres: Set<IListener<T>>;
    root: T;
    constructor(tracker: MosxTracker);
    onCreate(): void;
    beforeChange(change: IChange, parent: ITreeNode): void;
    afterChange(change: IChange, parent: ITreeNode): void;
    onCreateNode(entry: ITreeNode, target: any): void;
    onDeleteNode(entry: ITreeNode): void;
    abstract encodeSnapshot(value: any): Buffer;
    abstract decodeSnapshot(value: Buffer): any;
    abstract encodePatch(patch: IReversibleJsonPatch, target: any): Buffer;
    abstract decodePatch(buffer: Buffer): IReversibleJsonPatch;
}
