import { OptionDataValue, DimensionLoose, Dictionary } from './types.js'; 
 | 
import { HashMap } from 'zrender/lib/core/util.js'; 
 | 
import { RawValueParserType, RelationalOperator } from '../data/helper/dataValueHelper.js'; 
 | 
/** 
 | 
 * The structured expression considered: 
 | 
 * (1) Literal simplicity 
 | 
 * (2) Semantic displayed clearly 
 | 
 * 
 | 
 * Semantic supports: 
 | 
 * (1) relational expression 
 | 
 * (2) logical expression 
 | 
 * 
 | 
 * For example: 
 | 
 * ```js 
 | 
 * { 
 | 
 *     and: [{ 
 | 
 *         or: [{ 
 | 
 *             dimension: 'Year', gt: 2012, lt: 2019 
 | 
 *         }, { 
 | 
 *             dimension: 'Year', '>': 2002, '<=': 2009 
 | 
 *         }] 
 | 
 *     }, { 
 | 
 *         dimension: 'Product', eq: 'Tofu' 
 | 
 *     }] 
 | 
 * } 
 | 
 * 
 | 
 * { dimension: 'Product', eq: 'Tofu' } 
 | 
 * 
 | 
 * { 
 | 
 *     or: [ 
 | 
 *         { dimension: 'Product', value: 'Tofu' }, 
 | 
 *         { dimension: 'Product', value: 'Biscuit' } 
 | 
 *     ] 
 | 
 * } 
 | 
 * 
 | 
 * { 
 | 
 *     and: [true] 
 | 
 * } 
 | 
 * ``` 
 | 
 * 
 | 
 * [PARSER] 
 | 
 * In an relation expression object, we can specify some built-in parsers: 
 | 
 * ```js 
 | 
 * // Trim if string 
 | 
 * { 
 | 
 *     parser: 'trim', 
 | 
 *     eq: 'Flowers' 
 | 
 * } 
 | 
 * // Parse as time and enable arithmetic relation comparison. 
 | 
 * { 
 | 
 *     parser: 'time', 
 | 
 *     lt: '2012-12-12' 
 | 
 * } 
 | 
 * // Normalize number-like string and make '-' to Null. 
 | 
 * { 
 | 
 *     parser: 'time', 
 | 
 *     lt: '2012-12-12' 
 | 
 * } 
 | 
 * // Normalize to number: 
 | 
 * // + number-like string (like '  123  ') can be converted to a number. 
 | 
 * // + where null/undefined or other string will be converted to NaN. 
 | 
 * { 
 | 
 *     parser: 'number', 
 | 
 *     eq: 2011 
 | 
 * } 
 | 
 * // RegExp, include the feature in SQL: `like '%xxx%'`. 
 | 
 * { 
 | 
 *     reg: /^asdf$/ 
 | 
 * } 
 | 
 * { 
 | 
 *     reg: '^asdf$' // Serializable reg exp, will be `new RegExp(...)` 
 | 
 * } 
 | 
 * ``` 
 | 
 * 
 | 
 * 
 | 
 * [EMPTY_RULE] 
 | 
 * (1) If a relational expression set value as `null`/`undefined` like: 
 | 
 * `{ dimension: 'Product', lt: undefined }`, 
 | 
 * The result will be `false` rather than `true`. 
 | 
 * Consider the case like "filter condition", return all result when null/undefined 
 | 
 * is probably not expected and even dangours. 
 | 
 * (2) If a relational expression has no operator like: 
 | 
 * `{ dimension: 'Product' }`, 
 | 
 * An error will be thrown. Because it is probably a mistake. 
 | 
 * (3) If a logical expression has no children like 
 | 
 * `{ and: undefined }` or `{ and: [] }`, 
 | 
 * An error will be thrown. Because it is probably an mistake. 
 | 
 * (4) If intending have a condition that always `true` or always `false`, 
 | 
 * Use `true` or `flase`. 
 | 
 * The entire condition can be `true`/`false`, 
 | 
 * or also can be `{ and: [true] }`, `{ or: [false] }` 
 | 
 */ 
 | 
/** 
 | 
 * Date string and ordinal string can be accepted. 
 | 
 */ 
 | 
interface RelationalExpressionOptionByOp extends Record<RelationalOperator, OptionDataValue> { 
 | 
    reg?: RegExp | string; 
 | 
} 
 | 
declare const RELATIONAL_EXPRESSION_OP_ALIAS_MAP: { 
 | 
    readonly value: "eq"; 
 | 
    readonly '<': "lt"; 
 | 
    readonly '<=': "lte"; 
 | 
    readonly '>': "gt"; 
 | 
    readonly '>=': "gte"; 
 | 
    readonly '=': "eq"; 
 | 
    readonly '!=': "ne"; 
 | 
    readonly '<>': "ne"; 
 | 
}; 
 | 
declare type RelationalExpressionOptionByOpAlias = Record<keyof typeof RELATIONAL_EXPRESSION_OP_ALIAS_MAP, OptionDataValue>; 
 | 
interface RelationalExpressionOption extends RelationalExpressionOptionByOp, RelationalExpressionOptionByOpAlias { 
 | 
    dimension?: DimensionLoose; 
 | 
    parser?: RawValueParserType; 
 | 
} 
 | 
interface LogicalExpressionOption { 
 | 
    and?: LogicalExpressionSubOption[]; 
 | 
    or?: LogicalExpressionSubOption[]; 
 | 
    not?: LogicalExpressionSubOption; 
 | 
} 
 | 
declare type LogicalExpressionSubOption = LogicalExpressionOption | RelationalExpressionOption | TrueFalseExpressionOption; 
 | 
export declare type TrueExpressionOption = true; 
 | 
export declare type FalseExpressionOption = false; 
 | 
export declare type TrueFalseExpressionOption = TrueExpressionOption | FalseExpressionOption; 
 | 
export declare type ConditionalExpressionOption = LogicalExpressionOption | RelationalExpressionOption | TrueFalseExpressionOption; 
 | 
declare type ValueGetterParam = Dictionary<unknown>; 
 | 
export interface ConditionalExpressionValueGetterParamGetter<VGP extends ValueGetterParam = ValueGetterParam> { 
 | 
    (relExpOption: RelationalExpressionOption): VGP; 
 | 
} 
 | 
export interface ConditionalExpressionValueGetter<VGP extends ValueGetterParam = ValueGetterParam> { 
 | 
    (param: VGP): OptionDataValue; 
 | 
} 
 | 
declare class ConditionalExpressionParsed { 
 | 
    private _cond; 
 | 
    constructor(exprOption: ConditionalExpressionOption, getters: ConditionalGetters); 
 | 
    evaluate(): boolean; 
 | 
} 
 | 
interface ConditionalGetters<VGP extends ValueGetterParam = ValueGetterParam> { 
 | 
    prepareGetValue: ConditionalExpressionValueGetterParamGetter<VGP>; 
 | 
    getValue: ConditionalExpressionValueGetter<VGP>; 
 | 
    valueGetterAttrMap: HashMap<boolean, string>; 
 | 
} 
 | 
export declare function parseConditionalExpression<VGP extends ValueGetterParam = ValueGetterParam>(exprOption: ConditionalExpressionOption, getters: ConditionalGetters<VGP>): ConditionalExpressionParsed; 
 | 
export {}; 
 |