graphql-connections
Version:
Build and handle Relay-like GraphQL connections using a Knex query builder
98 lines (97 loc) • 3.07 kB
TypeScript
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>;
}