UNPKG

@fjell/core

Version:

Core Item and Key Framework for Fjell

63 lines (62 loc) 2.67 kB
import { References } from '../items'; export type QueryParams = Record<string, string | number | boolean | Date>; /** * The operator for a condition. This is the same as the operators used in the Firestore query language. */ export type ConditionOperator = '==' | '!=' | '>' | '>=' | '<' | '<=' | 'in' | 'not-in' | 'array-contains' | 'array-contains-any'; /** * A single property condition is defined with a column, value, and operator. * This is a condition that is used in a query. */ export type Condition = { column: string; value: string[] | string | number[] | number | boolean | Date; operator: ConditionOperator; }; /** * When applying a compound condition, the CompoundType defines the type of compound condition. */ export type CompoundType = 'AND' | 'OR'; /** * When configuring a CompoundCondition this can contain a collection of conditions * that will be applied to the query. By default, this is an AND conditiion that is associated * with an array of Condition objects OR an array of CompoundCondition objects. * * For example, I could have { compoundType: 'AND', conditions: [{column: 'name', value: 'test', operator: '=='}, * {column: 'age', value: 21, operator: '>='}]} which would filter the query to only include items * where the name is 'test' and the age is greater than or equal to 21. * * Or, I could have a { compoundType: 'OR', conditions: [{column: 'name', value: 'test', operator: '=='}, * {column: 'age', value: 21, operator: '>='}]} which would filter the query to only include items * where the name is 'test' OR the age is greater than or equal to 21. * * I could also nest an OR within an AND, like this: * ['AND', [{column: 'name', value: 'test', operator: '=='}, * { compoundType: 'OR', conditions: [{column: 'age', value: 21, operator: '<='}, * {column: 'age', value: 52, operator: '>='}]}]] which would filter the query to only include items where the * name is 'test' and the age is less than or equal to 21 or greater than or equal to 52. */ export type CompoundCondition = { compoundType: CompoundType; conditions: Array<Condition | CompoundCondition>; }; export declare const isCondition: (condition: any) => condition is Condition; export type EventQuery = { start?: Date; end?: Date; by?: string; }; export type OrderDirection = 'asc' | 'desc'; export type OrderBy = { field: string; direction: OrderDirection; }; export type ItemQuery = { refs?: References; compoundCondition?: CompoundCondition; limit?: number; offset?: number; aggs?: Record<string, ItemQuery>; events?: Record<string, EventQuery>; orderBy?: OrderBy[]; };