ts-flex-query
Version:
Flexible and type-safe data queries
53 lines (52 loc) • 5.02 kB
TypeScript
import { Expression } from '../core/expression';
import { DataType } from '../types/data-type';
import { EvaluationContext } from '../types/evaluation-context';
import { FunctionContainer } from '../types/function-container';
import { ExpressionArray, FuncFields } from '../types/utils';
export declare class FunctionApplicationExpression implements Expression {
readonly container: FunctionContainer;
readonly member: string;
readonly args: Expression[];
readonly dataType: DataType;
constructor(container: FunctionContainer, member: string, args: Expression[]);
evaluate(context: EvaluationContext): any;
}
export declare function func<TContainer extends FunctionContainer, TMember extends FuncFields<TContainer> & string>(container: TContainer, member: TMember, ...args: TContainer extends Record<TMember, (...xs: any) => any> ? ExpressionArray<Parameters<TContainer[TMember]>> : never): TContainer extends Record<TMember, (...xs: any) => any> ? Expression<ReturnType<TContainer[TMember]>> : never;
export declare const funcs: {
concat: (args_0: Expression<string | undefined>, args_1: Expression<string | undefined>) => Expression<string>;
indexOf: (args_0: Expression<string | undefined>, args_1: Expression<string | undefined>) => Expression<number>;
endsWith: (args_0: Expression<string | undefined>, args_1: Expression<string | undefined>) => Expression<boolean>;
startsWith: (args_0: Expression<string | undefined>, args_1: Expression<string | undefined>) => Expression<boolean>;
lower: (args_0: Expression<number | bigint | Date | undefined>, args_1: Expression<number | bigint | Date | undefined>) => Expression<boolean>;
add: (args_0: Expression<number | undefined>, args_1: Expression<number | undefined>) => Expression<number | undefined>;
sum: (args_0: Expression<(number | undefined)[]>) => Expression<number>;
multiply: (args_0: Expression<number | undefined>, args_1: Expression<number | undefined>) => Expression<number | undefined>;
xor: (args_0: Expression<boolean | undefined>, args_1: Expression<boolean | undefined>) => Expression<boolean>;
contains: (args_0: Expression<string | undefined>, args_1: Expression<string | undefined>) => Expression<boolean>;
count: (args_0: Expression<unknown[] | undefined>) => Expression<number>;
countDistinct: (args_0: Expression<unknown[] | undefined>) => Expression<number>;
maximum: (args_0: Expression<(number | undefined)[]>) => Expression<number | undefined>;
minimum: (args_0: Expression<(number | undefined)[]>) => Expression<number | undefined>;
average: (args_0: Expression<(number | undefined)[]>) => Expression<number | undefined>;
and: (args_0: Expression<boolean | undefined>, args_1: Expression<boolean | undefined>) => Expression<boolean>;
or: (args_0: Expression<boolean | undefined>, args_1: Expression<boolean | undefined>) => Expression<boolean>;
not: (args_0: Expression<boolean | undefined>) => Expression<boolean>;
distinct: (args_0: Expression<unknown[]>) => Expression<unknown[]>;
in: (args_0: Expression<unknown>, args_1: Expression<unknown[] | undefined>) => Expression<boolean>;
first: (args_0: Expression<unknown[] | undefined>) => Expression<unknown>;
equal: (args_0: Expression<unknown>, args_1: Expression<unknown>) => Expression<boolean>;
notEqual: (args_0: Expression<unknown>, args_1: Expression<unknown>) => Expression<boolean>;
greater: (args_0: Expression<number | bigint | Date | undefined>, args_1: Expression<number | bigint | Date | undefined>) => Expression<boolean>;
greaterOrEqual: (args_0: Expression<number | bigint | Date | undefined>, args_1: Expression<number | bigint | Date | undefined>) => Expression<boolean>;
lowerOrEqual: (args_0: Expression<number | bigint | Date | undefined>, args_1: Expression<number | bigint | Date | undefined>) => Expression<boolean>;
has: (args_0: Expression<unknown>, args_1: Expression<unknown>) => Expression<boolean>;
subtract: (args_0: Expression<number | undefined>, args_1: Expression<number | undefined>) => Expression<number | undefined>;
divide: (args_0: Expression<number | undefined>, args_1: Expression<number | undefined>) => Expression<number | undefined>;
divideInteger: (args_0: Expression<number | undefined>, args_1: Expression<number | undefined>) => Expression<number | undefined>;
modulo: (args_0: Expression<number | undefined>, args_1: Expression<number | undefined>) => Expression<number | undefined>;
upperCase: (args_0: Expression<string | undefined>) => Expression<string | undefined>;
lowerCase: (args_0: Expression<string | undefined>) => Expression<string | undefined>;
getLength: (args_0: Expression<string | undefined>) => Expression<number>;
asString: (args_0: Expression<unknown>) => Expression<string | undefined>;
};
export declare function isFunctionApplication<TContainer>(expr: Expression, container: TContainer, member: keyof TContainer): expr is FunctionApplicationExpression;