import { Mutation } from "../../messages/mutate"; export declare namespace ArrayItemMutationTypes { const INSERT = "insert"; const UPDATE = "update"; const DELETE = "delete"; } export declare abstract class ArraItemMutation extends Mutation { constructor(type: string); abstract accept(visitor: IArrayMutationVisitor): any; } export declare class ArrayInsertMutation extends ArraItemMutation { readonly index: number; readonly value: T; constructor(index: number, value: T); accept(visitor: IArrayMutationVisitor): any; } export declare class ArrayRemoveMutation extends ArraItemMutation { readonly value: any; readonly index: number; constructor(value: any, index: number); accept(visitor: IArrayMutationVisitor): any; } export declare class ArrayUpdateMutation extends ArraItemMutation { readonly originalOldIndex: number; readonly patchedOldIndex: number; readonly newValue: T; readonly index: number; constructor(originalOldIndex: number, patchedOldIndex: number, newValue: T, index: number); accept(visitor: IArrayMutationVisitor): any; } export interface IArrayMutationVisitor { visitRemove(del: ArrayRemoveMutation): any; visitInsert(insert: ArrayInsertMutation): any; visitUpdate(update: ArrayUpdateMutation): any; } export declare class ArrayMutation extends Mutation { readonly mutations: ArraItemMutation[]; static readonly ARRAY_DIFF: string; readonly count: number; constructor(mutations: ArraItemMutation[]); accept(visitor: IArrayMutationVisitor): Promise; } export declare function diffArray(oldArray: Array, newArray: Array, countDiffs: (a: T, b: T) => number): ArrayMutation; export declare function patchArray(target: Array, diff: ArrayMutation, mapUpdate: (a: T, b: T) => T, mapInsert?: (b: T) => T): void;