import { BreezeEvent } from './event';
import { EntityAspect } from './entity-aspect';
import { DataProperty } from './entity-metadata';
/** @hidden */
export interface ObservableArray {
    push: (...args: any[]) => number;
    _push: (...args: any[]) => number;
    unshift: (...args: any[]) => number;
    pop: () => any;
    shift: () => any;
    splice: (...args: any[]) => any[];
    slice: (a: number, b?: number) => any[];
    length: number;
    getEntityAspect: () => EntityAspect;
    arrayChanged: BreezeEvent<ArrayChangedArgs>;
    parent?: Object;
    parentProperty?: DataProperty;
    _getEventParent: () => Object;
    _getPendingPubs: () => any[];
    _beforeChange: () => void;
    _processAdds(items: any[]): void;
    _processRemoves(items: any[]): void;
    _origValues: any[];
    _pendingArgs: any;
}
export interface ArrayChangedArgs {
    array: any[];
    added?: any[];
    removed?: any[];
}
declare function updateEntityState(obsArray: ObservableArray): void;
declare function publish(publisher: ObservableArray, eventName: string, eventArgs: any): void;
declare function initializeParent(obsArray: any, parent: Object, parentProperty: DataProperty): void;
/** @hidden @internal */
export declare const observableArray: {
    mixin: {
        push: (...args: any[]) => any;
        _push: (...args: any[]) => any;
        unshift: (...args: any[]) => any;
        pop: () => any;
        shift: () => any;
        splice: (...args: any[]) => any;
        getEntityAspect: () => any;
        _getEventParent: () => any;
        _getPendingPubs: () => any;
        _beforeChange: () => void;
    };
    updateEntityState: typeof updateEntityState;
    publish: typeof publish;
    initializeParent: typeof initializeParent;
};
export {};
