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 {};