UNPKG

@lastlight/typeorm-cursor-pagination

Version:
63 lines (62 loc) 1.94 kB
import { FindManyOptions, ObjectLiteral, ObjectType, SelectQueryBuilder } from 'typeorm'; export declare enum Order { ASC = "ASC", DESC = "DESC" } export declare type EscapeFn = (name: string) => string; export interface CursorParam { [key: string]: any; } export interface Cursor { beforeCursor: string | null; afterCursor: string | null; } export interface PagingResult<Entity> { data: Entity[]; cursor: Cursor; } export interface Paginated<Entity> { items: Entity[]; count: number; beforeCursor: string | null; afterCursor: string | null; } export declare type PaginationKey<Entity> = Extract<keyof Entity, string>; export declare type PaginationOrder = { [key: string]: Order; }; export default class CursorPaginator<Entity extends ObjectLiteral> { private entity; private paginationKeys; private afterCursor; private beforeCursor; private nextAfterCursor; private nextBeforeCursor; private alias; private limit; private order; private findOptions; private paginationOrderForKeys; constructor(entity: ObjectType<Entity>, paginationKeys: PaginationKey<Entity>[]); setAlias(alias: string): void; setAfterCursor(cursor: string): void; setBeforeCursor(cursor: string): void; setLimit(limit: number): void; setOrder(order: Order): void; setFindOptions(options: FindManyOptions<Entity>): void; setPaginationKeys(keys: PaginationKey<Entity>[]): void; setPaginationOrderByKeys(paginationOrder: PaginationOrder): void; paginate(builder: SelectQueryBuilder<Entity>): Promise<Paginated<Entity>>; private getCursor; private appendPagingQuery; private buildCursorQuery; private getOperator; private buildOrder; private hasAfterCursor; private hasBeforeCursor; private encode; private decode; private getEntityPropertyType; private flipOrder; private toPagingResult; }