export interface DynamicQueryStructure { select: string[] | "*"; table: string; where?: Array; join?: Array; orderBy?: Array; } export type ConditionStructure = ( | { structureType: "condition"; column: string; operation: WhereOperation; value: ConditionValue; } | { structureType: "nested"; invert?: boolean; conditions: Array; } ) & { concat: WhereType; structureType: "condition" | "nested"; }; export type ConditionValue = FieldType | Array | { start: FieldType; end: FieldType }; export type FieldType = number | string | Date | boolean; export type WhereType = "OR" | "AND" | "_"; // _ represents initial where in (sub-)query export type WhereOperation = | "eq" // Equal | "neq" // Not equal | "lt" // Less than | "lte" // Less than or equal to | "gt" // Greater than | "gte" // Greater than or equal to | "in" // Included in an array | "notIn" // Not included in an array | "contains" // Contains | "notContains" // Does not contain | "null" // Is null | "notNull" // Is not null | "between" // Is between | "startsWith" // Starts with | "endsWith"; // Ends with export type OrderByStructure = { column: string; order: OrderByType; }; export type OrderByType = "ASC" | "DESC";