import { Getter, Predicate } from '../types';
/**
 * Functions to be used in {@link Array.prototype.filter} as a callback.
 * @see https://pavel-surinin.github.io/declarativejs/#/?id=filters
 */
export declare namespace toBe {
    /**
     * Function to be used in {@link Array.prototype.filter} as a callback.
     * Filters out items that are not present ({@code undefined} and {@code null}) in array
     *
     * @returns {boolean}
     * @see https://pavel-surinin.github.io/declarativejs/#/?id=tobepresent
     */
    function present<T>(value: T): boolean;
    /**
     * Function to be used in {@link Array.prototype.filter} as a callback.
     * Filters out items that are empty
     *
     * @returns {boolean}
     * @see https://pavel-surinin.github.io/declarativejs/#/?id=tobenotempty
     */
    function notEmpty<T>(value: T): boolean;
    /**
     * Function to be used in {@link Array.prototype.filter} as a callback.
     * Filters out items, that are not equal to provided item in parameters.
     * Objects are compared to be deep equal.
     *
     * @returns {function}
     * @see https://pavel-surinin.github.io/declarativejs/#/?id=tobeequal
     */
    function equal<T>(valueToMatch: T): (value: T) => boolean;
    /**
     * Function to be used in {@link Array.prototype.filter} as a callback.
     * Filters out items, that are equal to provided item in parameters.
     * Objects are compared to be deep equal.
     *
     * @returns {function}
     * @see https://pavel-surinin.github.io/declarativejs/#/?id=tobenotequal
     */
    function notEqual<T>(valueToMatch: T): (value: T) => boolean;
    /**
     * Function to be used in {@link Array.prototype.filter} as a callback.
     * Determines uniqueness of an objects in array. Be aware that if value
     * is not primitive, deep object equality will be checked to determine
     * uniqueness.
     *
     * @returns () => {boolean}
     * @see https://pavel-surinin.github.io/declarativejs/#/?id=tobeunique
     */
    function unique(): <T>(value: T) => boolean;
    /**
     * Function to be used in {@link Array.prototype.filter} as a callback.
     * Determines uniqueness by value from callback. This value must be
     * comparable with strict equals
     * @param { Function } getValue     callback to resolve comparable value
     * @see https://pavel-surinin.github.io/declarativejs/#/?id=tobeuniqueby
     */
    function uniqueBy<T, R>(getValue: Getter<T, R>): (value: T, index: number, arr: T[]) => boolean;
    /**
     * Function to be used in {@link Array} filter function as a callback.
     * Determines uniqueness by value resolved by objects key. This value must be
     * comparable with strict equals
     *
     * @param { string } key    objects key to resolve comparable value
     * @see https://pavel-surinin.github.io/declarativejs/#/?id=tobeuniqueby
     */
    function uniqueBy<T, K extends keyof T>(key: K): (value: T, index: number, arr: T[]) => boolean;
    /**
     * @deprecated use Filter object
     */
    function takeWhile<T>(predicate: Predicate<T>): (value: T, index: number) => boolean;
}
/**
 * Functions to be used in {@link Array.prototype.filter} as a callback.
 * @see https://pavel-surinin.github.io/declarativejs/#/?id=filters
 */
export declare namespace Filter {
    /**
     * Function to be used in {@link Array} filter function as a callback.
     * It will pass items from array, while predicate matches. When predicate
     * returns {@code false} none of the items will pass.
     *
     * @param {function} predicate callback function that returns boolean
     * @see https://pavel-surinin.github.io/declarativejs/#/?id=takewhile
     * @deprecated use Filters object
     */
    function takeWhile<T>(predicate: Predicate<T>): (value: T, index: number) => boolean;
    /**
     * Function to be used in {@link Array} filter function as a callback.
     * It will skip items from array, while predicate matches. When predicate
     * returns {@code false}, other items will be returned form that point.
     *
     * @param {function} predicate callback function that returns boolean
     * @see https://pavel-surinin.github.io/declarativejs/#/?id=skipwhile
     */
    function skipWhile<T>(predicate: Predicate<T>): (value: T, index: number) => boolean;
    /**
     * Skips an element, if predicate is resolving to false or
     * an error occurred, predicate will also resolve to false.
     * Error will be catched
     * @param {function} predicate to filter elements
     * @param {function} onError callback to be called on error occurred
     * @see https://pavel-surinin.github.io/declarativejs/#/?id=skiponerror
     */
    function skipOnError<T>(predicate: Predicate<T>, onError?: (error: Error, element: T, index: number) => void): (value: T, index: number) => boolean;
}
