UNPKG

graphql-connections

Version:

Build and handle Relay-like GraphQL connections using a Knex query builder

98 lines (97 loc) 3.07 kB
import { ORDER_DIRECTION } from './enums'; export interface IFilter { value: string | boolean | number | null; operator: string; field: string; } export interface ICompoundFilter { and?: IInputFilter[]; or?: IInputFilter[]; not?: IInputFilter[]; } export declare type IInputFilter = IFilter | ICompoundFilter; export declare type FilterTransformer = (filter: IFilter) => IFilter; export interface ICursorObj<PublicAttributes> { orderDir: keyof typeof ORDER_DIRECTION; orderBy: PublicAttributes; position: number; filters: IInputFilter; search?: string; } export interface IInputArgs { before?: string; after?: string; first?: number; last?: number; orderBy?: string; orderDir?: keyof typeof ORDER_DIRECTION; filter?: IInputFilter; search?: string; } export interface IInAttributeMap { [nodeField: string]: string; } export interface IFilterMap { [nodeField: string]: string; } export interface IQueryContext { limit: number; orderDir: keyof typeof ORDER_DIRECTION; orderBy: string; filters: IInputFilter; offset: number; search?: string; inputArgs: IInputArgs; previousCursor?: string; indexPosition: number; isPagingBackwards: boolean; } export interface IQueryContextOptions<CursorObj> { defaultLimit?: number; cursorEncoder?: ICursorEncoder<CursorObj>; } export interface ICursorEncoder<CursorObj> { encodeToCursor: (cursorObj: CursorObj) => string; decodeFromCursor: (cursor: string) => CursorObj; } export interface IQueryBuilder<Builder> { createQuery: (queryBuilder: Builder) => Builder; } export declare type QueryBuilderOptions = IKnexQueryBuilderOptions | IKnexMySQLQueryBuilderOptions; export interface IKnexQueryBuilderOptions { filterMap?: { [operator: string]: string; }; /** * If given with `useSuggestedValueLiteralTransforms` * note that coercion happens FIRST, and then filterTransformer. */ filterTransformer?: FilterTransformer; useSuggestedValueLiteralTransforms?: boolean; } export interface IKnexMySQLQueryBuilderOptions extends IKnexQueryBuilderOptions { filterMap?: { [operator: string]: string; }; filterTransformer?: FilterTransformer; useSuggestedValueLiteralTransforms?: boolean; searchColumns?: string[]; searchModifier?: 'IN NATURAL LANGUAGE MODE' | 'IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION' | 'IN BOOLEAN MODE' | 'WITH QUERY EXPANSION' | string; } export interface IQueryResult<Node> { edges: Array<{ cursor: string; node: Node; }>; pageInfo: { hasNextPage: boolean; hasPreviousPage: boolean; startCursor: string; endCursor: string; }; } export declare type NodeTransformer<Node> = (node: any) => Node; export interface IQueryResultOptions<CursorObj, Node> { cursorEncoder?: ICursorEncoder<CursorObj>; nodeTransformer?: NodeTransformer<Node>; }