@lastlight/typeorm-cursor-pagination
Version:
[FORK] Cursor-based pagination works with TypeORM.
63 lines (62 loc) • 1.94 kB
TypeScript
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;
}