-
Notifications
You must be signed in to change notification settings - Fork 41
/
Copy pathindex.ts
50 lines (38 loc) · 1.01 KB
/
index.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import { ObjectType } from 'typeorm';
import Paginator, { Order, Cursor } from './Paginator';
export { Order, Cursor };
export interface PagingQuery {
afterCursor?: string;
beforeCursor?: string;
limit?: number;
order?: Order;
}
export interface PagniationOtions<Entity> {
entity: ObjectType<Entity>;
alias?: string;
query?: PagingQuery;
paginationKeys?: Extract<keyof Entity, string>[];
}
export function buildPaginator<Entity>(options: PagniationOtions<Entity>): Paginator<Entity> {
const {
entity,
query = {},
alias = entity.name.toLowerCase(),
paginationKeys = ['id' as any],
} = options;
const paginator = new Paginator(entity, paginationKeys);
paginator.setAlias(alias);
if (query.afterCursor) {
paginator.setAfterCursor(query.afterCursor);
}
if (query.beforeCursor) {
paginator.setBeforeCursor(query.beforeCursor);
}
if (query.limit) {
paginator.setLimit(query.limit);
}
if (query.order) {
paginator.setOrder(query.order);
}
return paginator;
}