import { RefOrExpression } from "./Expression";
import { OneOf } from "./Polyfill";
export declare const EXPRESSION_PREFIX = "$expr";
export declare type NodeId = `node-${number}`;
export declare type ExpressionKey = '$expr' | '$expr1' | '$expr2' | '$expr3' | '$expr4' | '$expr5' | '$expr6' | '$expr7' | '$expr8' | '$expr9' | '$expr10' | '$expr11' | '$expr12' | '$expr13' | '$expr14' | '$expr15' | '$expr16' | '$expr17' | '$expr18' | '$expr19' | '$expr20';
export declare type ExprOp = {
[K in ExpressionKey]: RefOrExpression;
};
export declare type Q_NumberComparisonValue = number | OneOf<{
$gt: number;
$lt: number;
$gte: number;
$lte: number;
$eq: number;
$ne: number;
$in: number[];
$nin: number[];
$between: [number, number];
}>;
export declare type Q_StringComparisonValue = string | OneOf<{
$gt: string;
$lt: string;
$gte: string;
$lte: string;
$eq: string;
$ne: string;
$startsWith: string;
$endsWith: string;
$includes: string;
$in: string[];
$nin: string[];
}>;
export declare type Q_BooleanComparisonValue = boolean;
export declare type Q_DateComparisonValue = Q_NumberComparisonValue;
export declare type Q_EnumComparisonValue = E | OneOf<{
$in: E[];
$nin: E[];
}>;
export declare type Q_ExistsValue = {
$exists: boolean;
};
export declare type Q_NumberValue = Q_NumberComparisonValue | Q_ExistsValue;
export declare type Q_StringValue = Q_StringComparisonValue | Q_ExistsValue;
export declare type Q_BooleanValue = Q_BooleanComparisonValue | Q_ExistsValue;
export declare type Q_DateValue = Q_DateComparisonValue | Q_ExistsValue;
export declare type Q_EnumValue = Q_EnumComparisonValue | Q_ExistsValue;
export declare type Q_State = S | {
$in: S[];
} | {
$nin: S[];
} | Q_ExistsValue;
export declare type Q_FullTextValue = {
$search: string;
$language?: 'zh_CN' | 'en_US';
};
export declare type Q_FullTextKey = '$text';
export declare type FulltextFilter = {
[F in Q_FullTextKey]?: Q_FullTextValue;
};
declare type Q_LogicKey = '$and' | '$or';
declare type Q_LinearLogicKey = '$not';
export declare type MakeFilterWrapper = {
[Q in Q_LogicKey]?: Array>;
} & {
[Q in Q_LinearLogicKey]?: MakeFilterWrapper;
} & Partial;
export declare type MakeFilter = {
'#id'?: NodeId;
} & MakeFilterWrapper;
export declare type RefAttr = {
'#attr': A;
} | {
'#refId': NodeId;
'#refAttr': string;
};
export declare function isRefAttrNode(node: any): node is RefAttr;
export {};