/*!
 * Copyright 2019 VMware, Inc.
 * SPDX-License-Identifier: BSD-2-Clause
 */
/**
 * TODO: Remove FilterBuilder from VCD-UI https://jira.eng.vmware.com/browse/VDUCC-115
 */
export declare const Operators: {
    [key: string]: string;
};
export declare type Primitives = boolean | string | number;
/**
 * Utility to reduce the verbosity required when creating complex query filter expressions.
 *
 * Usage:
 * const builder = new FilterBuilder();
 * const filter = builder
 *          .is("isVappTemplate").equalTo(true)
 *          .and()
 *          .is("vcd").equalTo(vcdId)
 *          .and().or(
 *              builder.is("created").before(userInputDate),
 *              builder.is("uptime").greaterThan(user)
 *          );
 *
 * Will produce:
 * isVappTemplate==true;vcd==some-urn-here;(created=lt=DATETIME,uptime=gt=3600000)
 */
export declare class FilterBuilder {
    private result;
    private parent;
    private currentOperator;
    constructor(parent?: FilterBuilder);
    /**
     * Initialize a filter expression
     *  property
     * @returns The created FilterBuilder instance
     */
    is(property: string): FilterBuilder;
    /**
     * Create a string representing the filter parameter to be used in a query
     * @returns the filter expression
     */
    getString(): string;
    /**
     * Conjunct expressions
     *  conditions
     * @returns The FilterBuilder instance
     */
    and(...conditions: FilterBuilder[]): FilterBuilder;
    /**
     * Top level AND operator
     *  conditions
     * @returns The FilterBuilder instance
     */
    all(...conditions: FilterBuilder[]): FilterBuilder;
    /**
     * Disjunct expressions
     *  conditions
     * @returns The FilterBuilder instance
     */
    or(...conditions: FilterBuilder[]): FilterBuilder;
    /**
     * Top level OR operator
     * conditions
     * @returns The FilterBuilder instance
     */
    any(...conditions: FilterBuilder[]): FilterBuilder;
    /**
     * Wrap the current expression in ()
     * @returns The FilterBuilder instance
     */
    wrap(): FilterBuilder;
    /**
     * Match a filter expression to be equal to a value
     * @returns The FilterBuilder instance
     */
    equalTo(value: Primitives, ...moreValues: Primitives[]): FilterBuilder;
    /**
     * Match a filter expression to be different to a value
     * @returns The FilterBuilder instance
     */
    notEqualTo(value: Primitives, ...moreValues: Primitives[]): FilterBuilder;
    /**
     * Match a filter expression to be less than a value
     * @returns The FilterBuilder instance
     */
    lessThan(value: number): FilterBuilder;
    /**
     * Match a filter expression to be less than or equal to a value
     * @returns The FilterBuilder instance
     */
    lessThanOrEqualTo(value: number): FilterBuilder;
    /**
     * Match a filter expression to be greater than a value
     * @returns The FilterBuilder instance
     */
    greaterThan(value: number): FilterBuilder;
    /**
     * Match a filter expression to be greater than or equal to a value
     * @returns The FilterBuilder instance
     */
    greaterThanOrEqualTo(value: number): FilterBuilder;
    /**
     * Match a filter expression to be before a date
     * @returns The FilterBuilder instance
     */
    before(date: Date): FilterBuilder;
    /**
     * Match a filter expression to be after a date
     * @returns The FilterBuilder instance
     */
    after(date: Date): FilterBuilder;
    /**
     * Match a filter expression to be between two numbers.
     * Lower limit is greater or equal and upper limit is less or equal.
     * If for either of the limit is not provided value, the limit is not included in the filter expression.
     * @returns The FilterBuilder instance
     */
    betweenNumbers(values: number[]): FilterBuilder;
    private condition;
    private clear;
    private buildPartial;
}
