nestjs-paginate 5.1.1 → 6.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -25
- package/lib/helper.d.ts +4 -0
- package/lib/helper.js +16 -1
- package/lib/helper.js.map +1 -1
- package/lib/paginate.d.ts +0 -6
- package/lib/paginate.js +30 -57
- package/lib/paginate.js.map +1 -1
- package/lib/paginate.spec.js +33 -23
- package/lib/paginate.spec.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -231,6 +231,15 @@ const paginateConfig: PaginateConfig<CatEntity> {
|
|
|
231
231
|
*/
|
|
232
232
|
relations: [],
|
|
233
233
|
|
|
234
|
+
/**
|
|
235
|
+
* Required: false
|
|
236
|
+
* Type: boolean
|
|
237
|
+
* Default: false
|
|
238
|
+
* Description: Load eager relations using TypeORM's eager property.
|
|
239
|
+
* Only works if `relations` is not defined.
|
|
240
|
+
*/
|
|
241
|
+
loadEagerRelations: true
|
|
242
|
+
|
|
234
243
|
/**
|
|
235
244
|
* Required: false
|
|
236
245
|
* Type: boolean
|
|
@@ -253,28 +262,6 @@ const paginateConfig: PaginateConfig<CatEntity> {
|
|
|
253
262
|
* Description: Overrides the origin of absolute resource links if set.
|
|
254
263
|
*/
|
|
255
264
|
origin: 'http://cats.example',
|
|
256
|
-
|
|
257
|
-
/**
|
|
258
|
-
* Required: false
|
|
259
|
-
* Type: string
|
|
260
|
-
* Description: Allow user to choose between limit/offset and take/skip.
|
|
261
|
-
* Default: PaginationType.TAKE_AND_SKIP
|
|
262
|
-
*
|
|
263
|
-
* However, using limit/offset can return unexpected results.
|
|
264
|
-
* For more information see:
|
|
265
|
-
* [#477](https://github.com/ppetzold/nestjs-paginate/issues/477)
|
|
266
|
-
* [#4742](https://github.com/typeorm/typeorm/issues/4742)
|
|
267
|
-
* [#5670](https://github.com/typeorm/typeorm/issues/5670)
|
|
268
|
-
*/
|
|
269
|
-
paginationType: PaginationType.LIMIT_AND_OFFSET,
|
|
270
|
-
|
|
271
|
-
/**
|
|
272
|
-
* Required: false
|
|
273
|
-
* Type: boolean
|
|
274
|
-
* Default: false
|
|
275
|
-
* Description: Load eager relations using TypeORM's eager property.
|
|
276
|
-
*/
|
|
277
|
-
loadEagerRelations: true
|
|
278
265
|
}
|
|
279
266
|
```
|
|
280
267
|
|
|
@@ -406,9 +393,9 @@ Filter operators must be whitelisted per column in `PaginateConfig`.
|
|
|
406
393
|
|
|
407
394
|
`?filter.createdAt=$btw:2022-02-02,2022-02-10` where column `createdAt` is between the dates `2022-02-02` and `2022-02-10`
|
|
408
395
|
|
|
409
|
-
`?filter.roles=$contains:
|
|
396
|
+
`?filter.roles=$contains:moderator` where column `roles` is an array and contains the value `moderator`
|
|
410
397
|
|
|
411
|
-
`?filter.roles=$contains:
|
|
398
|
+
`?filter.roles=$contains:moderator,admin` where column `roles` is an array and contains the values `moderator` and `admin`
|
|
412
399
|
|
|
413
400
|
## Multi Filters
|
|
414
401
|
|
|
@@ -418,7 +405,7 @@ Multi filters are filters that can be applied to a single column with a comparat
|
|
|
418
405
|
|
|
419
406
|
`?filter.id=$gt:3&filter.id=$lt:5` where column `id` is greater than `3` **and** less than `5`
|
|
420
407
|
|
|
421
|
-
`?filter.id=$
|
|
408
|
+
`?filter.id=$contains:moderator&filter.id=$or:$contains:admin` where column `roles` is an array and contains `moderator` **or** `admin`
|
|
422
409
|
|
|
423
410
|
`?filter.id=$gt:3&filter.id=$and:$lt:5&filter.id=$or:$eq:7` where column `id` is greater than `3` **and** less than `5` **or** equal to `7`
|
|
424
411
|
|
package/lib/helper.d.ts
CHANGED
|
@@ -28,4 +28,8 @@ export declare function hasColumnWithPropertyPath(qb: SelectQueryBuilder<unknown
|
|
|
28
28
|
export declare function checkIsRelation(qb: SelectQueryBuilder<unknown>, propertyPath: string): boolean;
|
|
29
29
|
export declare function checkIsEmbedded(qb: SelectQueryBuilder<unknown>, propertyPath: string): boolean;
|
|
30
30
|
export declare function fixColumnAlias(properties: ColumnProperties, alias: string, isRelation?: boolean, isVirtualProperty?: boolean, isEmbedded?: boolean, query?: ColumnMetadata['query']): string;
|
|
31
|
+
export declare function getQueryUrlComponents(path: string): {
|
|
32
|
+
queryOrigin: string;
|
|
33
|
+
queryPath: string;
|
|
34
|
+
};
|
|
31
35
|
export {};
|
package/lib/helper.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.fixColumnAlias = exports.checkIsEmbedded = exports.checkIsRelation = exports.hasColumnWithPropertyPath = exports.includesAllPrimaryKeyColumns = exports.extractVirtualProperty = exports.getPropertiesByColumnName = exports.positiveNumberOrDefault = exports.isEntityKey = void 0;
|
|
3
|
+
exports.getQueryUrlComponents = exports.fixColumnAlias = exports.checkIsEmbedded = exports.checkIsRelation = exports.hasColumnWithPropertyPath = exports.includesAllPrimaryKeyColumns = exports.extractVirtualProperty = exports.getPropertiesByColumnName = exports.positiveNumberOrDefault = exports.isEntityKey = void 0;
|
|
4
4
|
function isEntityKey(entityColumns, column) {
|
|
5
5
|
return !!entityColumns.find((c) => c === column);
|
|
6
6
|
}
|
|
@@ -95,4 +95,19 @@ function fixColumnAlias(properties, alias, isRelation = false, isVirtualProperty
|
|
|
95
95
|
}
|
|
96
96
|
}
|
|
97
97
|
exports.fixColumnAlias = fixColumnAlias;
|
|
98
|
+
function getQueryUrlComponents(path) {
|
|
99
|
+
const r = new RegExp('^(?:[a-z+]+:)?//', 'i');
|
|
100
|
+
let queryOrigin = '';
|
|
101
|
+
let queryPath = '';
|
|
102
|
+
if (r.test(path)) {
|
|
103
|
+
const url = new URL(path);
|
|
104
|
+
queryOrigin = url.origin;
|
|
105
|
+
queryPath = url.pathname;
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
queryPath = path;
|
|
109
|
+
}
|
|
110
|
+
return { queryOrigin, queryPath };
|
|
111
|
+
}
|
|
112
|
+
exports.getQueryUrlComponents = getQueryUrlComponents;
|
|
98
113
|
//# sourceMappingURL=helper.js.map
|
package/lib/helper.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helper.js","sourceRoot":"","sources":["../src/helper.ts"],"names":[],"mappings":";;;AAoCA,SAAgB,WAAW,CAAI,aAA0B,EAAE,MAAc;IACrE,OAAO,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,CAAA;AACpD,CAAC;AAFD,kCAEC;AAEM,MAAM,uBAAuB,GAAG,CAAC,KAAyB,EAAE,YAAoB,EAAE,WAAkB,CAAC,EAAE,EAAE,CAC5G,KAAK,KAAK,SAAS,IAAI,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAA;AADrD,QAAA,uBAAuB,2BAC8B;AAIlE,SAAgB,yBAAyB,CAAC,MAAc;IACpD,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACtC,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;QACzB,MAAM,gBAAgB,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QAC9C,IAAI,QAAQ,GAAG,KAAK,EAChB,YAAY,GAAG,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAE7C,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE;YAC9D,QAAQ,GAAG,IAAI,CAAA;SAClB;QAED,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;QAE7D,OAAO;YACH,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC;YAC7B,YAAY;YACZ,QAAQ;YACR,MAAM,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,YAAY,EAAE;SAC/C,CAAA;KACJ;SAAM;QACH,OAAO,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAA;KACrF;AACL,CAAC;AAtBD,8DAsBC;AAED,SAAgB,sBAAsB,CAClC,EAA+B,EAC/B,gBAAkC;;IAElC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,YAAY;QAC1C,CAAC,CAAC,MAAA,MAAA,MAAA,MAAA,MAAA,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAE,aAAa,0CAAE,SAAS,0CAAE,QAAQ,0CAAE,0BAA0B,CAAC,gBAAgB,CAAC,YAAY,CAAC,0CAC3F,gBAAgB,0CAAE,cAAc,CAAC,cAAc;QACvD,CAAC,CAAC,MAAA,MAAA,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAE,aAAa,0CAAE,SAAS,0CAAE,QAAQ,CAAA;IAC5C,OAAO,CACH,CAAA,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,OAAO,0CAAE,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,KAAK,gBAAgB,CAAC,YAAY,CAAC,KAAI;QAC1F,iBAAiB,EAAE,KAAK;QACxB,KAAK,EAAE,SAAS;KACnB,CACJ,CAAA;AACL,CAAC;AAdD,wDAcC;AAED,SAAgB,4BAA4B,CAAC,EAA+B,EAAE,YAAsB;;IAChG,IAAI,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE;QACtB,OAAO,KAAK,CAAA;KACf;IACD,OAAO,MAAA,MAAA,EAAE,CAAC,aAAa,CAAC,SAAS,0CAAE,QAAQ,0CAAE,cAAc,CACtD,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,EACnC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAA;AACzD,CAAC;AAPD,oEAOC;AAED,SAAgB,yBAAyB,CACrC,EAA+B,EAC/B,gBAAkC;;IAElC,IAAI,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE;QAC1B,OAAO,KAAK,CAAA;KACf;IACD,OAAO,CAAC,CAAC,CAAA,MAAA,MAAA,EAAE,CAAC,aAAa,CAAC,SAAS,0CAAE,QAAQ,0CAAE,yBAAyB,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAA,CAAA;AAC3G,CAAC;AARD,8DAQC;AAED,SAAgB,eAAe,CAAC,EAA+B,EAAE,YAAoB;;IACjF,IAAI,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE;QACtB,OAAO,KAAK,CAAA;KACf;IACD,OAAO,CAAC,CAAC,CAAA,MAAA,MAAA,MAAA,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAE,aAAa,0CAAE,SAAS,0CAAE,QAAQ,0CAAE,2BAA2B,CAAC,YAAY,CAAC,CAAA,CAAA;AAC9F,CAAC;AALD,0CAKC;AAED,SAAgB,eAAe,CAAC,EAA+B,EAAE,YAAoB;;IACjF,IAAI,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE;QACtB,OAAO,KAAK,CAAA;KACf;IACD,OAAO,CAAC,CAAC,CAAA,MAAA,MAAA,MAAA,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAE,aAAa,0CAAE,SAAS,0CAAE,QAAQ,0CAAE,2BAA2B,CAAC,YAAY,CAAC,CAAA,CAAA;AAC9F,CAAC;AALD,0CAKC;AAED,oGAAoG;AACpG,SAAgB,cAAc,CAC1B,UAA4B,EAC5B,KAAa,EACb,UAAU,GAAG,KAAK,EAClB,iBAAiB,GAAG,KAAK,EACzB,UAAU,GAAG,KAAK,EAClB,KAA+B;IAE/B,IAAI,UAAU,EAAE;QACZ,IAAI,iBAAiB,IAAI,KAAK,EAAE;YAC5B,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,IAAI,UAAU,CAAC,YAAY,EAAE,CAAC,GAAG,CAAA,CAAC,2CAA2C;SACzG;aAAM,IAAI,CAAC,iBAAiB,IAAI,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,QAAQ,EAAE;YAC7D,OAAO,GAAG,KAAK,IAAI,UAAU,CAAC,YAAY,IAAI,UAAU,CAAC,YAAY,EAAE,CAAA;SAC1E;aAAM;YACH,OAAO,GAAG,KAAK,IAAI,UAAU,CAAC,YAAY,IAAI,UAAU,CAAC,YAAY,EAAE,CAAA;SAC1E;KACJ;SAAM,IAAI,iBAAiB,EAAE;QAC1B,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,UAAU,CAAC,YAAY,EAAE,CAAA;KAClF;SAAM,IAAI,UAAU,EAAE;QACnB,OAAO,GAAG,KAAK,IAAI,UAAU,CAAC,YAAY,IAAI,UAAU,CAAC,YAAY,EAAE,CAAA;KAC1E;SAAM;QACH,OAAO,GAAG,KAAK,IAAI,UAAU,CAAC,YAAY,EAAE,CAAA;KAC/C;AACL,CAAC;AAvBD,wCAuBC"}
|
|
1
|
+
{"version":3,"file":"helper.js","sourceRoot":"","sources":["../src/helper.ts"],"names":[],"mappings":"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"}
|
package/lib/paginate.d.ts
CHANGED
|
@@ -25,10 +25,6 @@ export declare class Paginated<T> {
|
|
|
25
25
|
last?: string;
|
|
26
26
|
};
|
|
27
27
|
}
|
|
28
|
-
export declare enum PaginationType {
|
|
29
|
-
LIMIT_AND_OFFSET = "limit",
|
|
30
|
-
TAKE_AND_SKIP = "take"
|
|
31
|
-
}
|
|
32
28
|
export interface PaginateConfig<T> {
|
|
33
29
|
relations?: FindOptionsRelations<T> | RelationColumn<T>[];
|
|
34
30
|
sortableColumns: Column<T>[];
|
|
@@ -46,10 +42,8 @@ export interface PaginateConfig<T> {
|
|
|
46
42
|
withDeleted?: boolean;
|
|
47
43
|
relativePath?: boolean;
|
|
48
44
|
origin?: string;
|
|
49
|
-
paginationType?: PaginationType;
|
|
50
45
|
}
|
|
51
46
|
export declare const DEFAULT_MAX_LIMIT = 100;
|
|
52
47
|
export declare const DEFAULT_LIMIT = 20;
|
|
53
48
|
export declare const NO_PAGINATION = 0;
|
|
54
|
-
export declare const DEFAULT_PAGINATE_TYPE = PaginationType.TAKE_AND_SKIP;
|
|
55
49
|
export declare function paginate<T extends ObjectLiteral>(query: PaginateQuery, repo: Repository<T> | SelectQueryBuilder<T>, config: PaginateConfig<T>): Promise<Paginated<T>>;
|
package/lib/paginate.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.paginate = exports.
|
|
3
|
+
exports.paginate = exports.NO_PAGINATION = exports.DEFAULT_LIMIT = exports.DEFAULT_MAX_LIMIT = exports.Paginated = exports.FilterSuffix = exports.FilterOperator = void 0;
|
|
4
4
|
const typeorm_1 = require("typeorm");
|
|
5
5
|
const common_1 = require("@nestjs/common");
|
|
6
6
|
const lodash_1 = require("lodash");
|
|
@@ -13,80 +13,28 @@ const logger = new common_1.Logger('nestjs-paginate');
|
|
|
13
13
|
class Paginated {
|
|
14
14
|
}
|
|
15
15
|
exports.Paginated = Paginated;
|
|
16
|
-
var PaginationType;
|
|
17
|
-
(function (PaginationType) {
|
|
18
|
-
PaginationType["LIMIT_AND_OFFSET"] = "limit";
|
|
19
|
-
PaginationType["TAKE_AND_SKIP"] = "take";
|
|
20
|
-
})(PaginationType = exports.PaginationType || (exports.PaginationType = {}));
|
|
21
16
|
exports.DEFAULT_MAX_LIMIT = 100;
|
|
22
17
|
exports.DEFAULT_LIMIT = 20;
|
|
23
18
|
exports.NO_PAGINATION = 0;
|
|
24
|
-
exports.DEFAULT_PAGINATE_TYPE = PaginationType.TAKE_AND_SKIP;
|
|
25
19
|
async function paginate(query, repo, config) {
|
|
26
20
|
const page = (0, helper_1.positiveNumberOrDefault)(query.page, 1, 1);
|
|
27
21
|
const defaultLimit = config.defaultLimit || exports.DEFAULT_LIMIT;
|
|
28
22
|
const maxLimit = (0, helper_1.positiveNumberOrDefault)(config.maxLimit, exports.DEFAULT_MAX_LIMIT);
|
|
29
23
|
const queryLimit = (0, helper_1.positiveNumberOrDefault)(query.limit, defaultLimit);
|
|
30
|
-
const paginationType = config.paginationType || exports.DEFAULT_PAGINATE_TYPE;
|
|
31
24
|
const isPaginated = !(queryLimit === exports.NO_PAGINATION && maxLimit === exports.NO_PAGINATION);
|
|
32
25
|
const limit = isPaginated ? Math.min(queryLimit || defaultLimit, maxLimit || exports.DEFAULT_MAX_LIMIT) : exports.NO_PAGINATION;
|
|
33
26
|
const sortBy = [];
|
|
34
27
|
const searchBy = [];
|
|
35
|
-
let path;
|
|
36
|
-
const r = new RegExp('^(?:[a-z+]+:)?//', 'i');
|
|
37
|
-
let queryOrigin = '';
|
|
38
|
-
let queryPath = '';
|
|
39
|
-
if (r.test(query.path)) {
|
|
40
|
-
const url = new URL(query.path);
|
|
41
|
-
queryOrigin = url.origin;
|
|
42
|
-
queryPath = url.pathname;
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
queryPath = query.path;
|
|
46
|
-
}
|
|
47
|
-
if (config.relativePath) {
|
|
48
|
-
path = queryPath;
|
|
49
|
-
}
|
|
50
|
-
else if (config.origin) {
|
|
51
|
-
path = config.origin + queryPath;
|
|
52
|
-
}
|
|
53
|
-
else {
|
|
54
|
-
path = queryOrigin + queryPath;
|
|
55
|
-
}
|
|
56
|
-
if (config.sortableColumns.length < 1) {
|
|
57
|
-
logger.debug("Missing required 'sortableColumns' config.");
|
|
58
|
-
throw new common_1.ServiceUnavailableException();
|
|
59
|
-
}
|
|
60
|
-
if (query.sortBy) {
|
|
61
|
-
for (const order of query.sortBy) {
|
|
62
|
-
if ((0, helper_1.isEntityKey)(config.sortableColumns, order[0]) && ['ASC', 'DESC'].includes(order[1])) {
|
|
63
|
-
sortBy.push(order);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
if (!sortBy.length) {
|
|
68
|
-
sortBy.push(...(config.defaultSortBy || [[config.sortableColumns[0], 'ASC']]));
|
|
69
|
-
}
|
|
70
28
|
let [items, totalItems] = [[], 0];
|
|
71
29
|
const queryBuilder = repo instanceof typeorm_1.Repository ? repo.createQueryBuilder('__root') : repo;
|
|
30
|
+
const isPostgres = ['postgres', 'cockroachdb'].includes(queryBuilder.connection.options.type);
|
|
72
31
|
if (repo instanceof typeorm_1.Repository && !config.relations && config.loadEagerRelations === true) {
|
|
73
32
|
if (!config.relations) {
|
|
74
33
|
typeorm_1.FindOptionsUtils.joinEagerRelations(queryBuilder, queryBuilder.alias, repo.metadata);
|
|
75
34
|
}
|
|
76
35
|
}
|
|
77
36
|
if (isPaginated) {
|
|
78
|
-
|
|
79
|
-
// However, using limit/offset can return unexpected results.
|
|
80
|
-
// For more information see:
|
|
81
|
-
// [#477](https://github.com/ppetzold/nestjs-paginate/issues/477)
|
|
82
|
-
// [#4742](https://github.com/typeorm/typeorm/issues/4742)
|
|
83
|
-
// [#5670](https://github.com/typeorm/typeorm/issues/5670)
|
|
84
|
-
if (paginationType === PaginationType.LIMIT_AND_OFFSET) {
|
|
85
|
-
queryBuilder.limit(limit).offset((page - 1) * limit);
|
|
86
|
-
}
|
|
87
|
-
else {
|
|
88
|
-
queryBuilder.take(limit).skip((page - 1) * limit);
|
|
89
|
-
}
|
|
37
|
+
queryBuilder.limit(limit).offset((page - 1) * limit);
|
|
90
38
|
}
|
|
91
39
|
if (config.relations) {
|
|
92
40
|
// relations: ["relation"]
|
|
@@ -110,10 +58,24 @@ async function paginate(query, repo, config) {
|
|
|
110
58
|
createQueryBuilderRelations(queryBuilder.alias, config.relations);
|
|
111
59
|
}
|
|
112
60
|
}
|
|
113
|
-
let nullSort = undefined;
|
|
61
|
+
let nullSort = isPostgres ? 'NULLS FIRST' : undefined;
|
|
114
62
|
if (config.nullSort) {
|
|
115
63
|
nullSort = config.nullSort === 'last' ? 'NULLS LAST' : 'NULLS FIRST';
|
|
116
64
|
}
|
|
65
|
+
if (config.sortableColumns.length < 1) {
|
|
66
|
+
logger.debug("Missing required 'sortableColumns' config.");
|
|
67
|
+
throw new common_1.ServiceUnavailableException();
|
|
68
|
+
}
|
|
69
|
+
if (query.sortBy) {
|
|
70
|
+
for (const order of query.sortBy) {
|
|
71
|
+
if ((0, helper_1.isEntityKey)(config.sortableColumns, order[0]) && ['ASC', 'DESC'].includes(order[1])) {
|
|
72
|
+
sortBy.push(order);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if (!sortBy.length) {
|
|
77
|
+
sortBy.push(...(config.defaultSortBy || [[config.sortableColumns[0], 'ASC']]));
|
|
78
|
+
}
|
|
117
79
|
for (const order of sortBy) {
|
|
118
80
|
const columnProperties = (0, helper_1.getPropertiesByColumnName)(order[0]);
|
|
119
81
|
const { isVirtualProperty } = (0, helper_1.extractVirtualProperty)(queryBuilder, columnProperties);
|
|
@@ -171,7 +133,7 @@ async function paginate(query, repo, config) {
|
|
|
171
133
|
operator: 'ilike',
|
|
172
134
|
parameters: [alias, `:${property.column}`],
|
|
173
135
|
};
|
|
174
|
-
if (
|
|
136
|
+
if (isPostgres) {
|
|
175
137
|
condition.parameters[0] = `CAST(${condition.parameters[0]} AS text)`;
|
|
176
138
|
}
|
|
177
139
|
qb.orWhere(qb['createWhereConditionExpression'](condition), {
|
|
@@ -190,6 +152,17 @@ async function paginate(query, repo, config) {
|
|
|
190
152
|
else {
|
|
191
153
|
items = await queryBuilder.getMany();
|
|
192
154
|
}
|
|
155
|
+
let path;
|
|
156
|
+
const { queryOrigin, queryPath } = (0, helper_1.getQueryUrlComponents)(query.path);
|
|
157
|
+
if (config.relativePath) {
|
|
158
|
+
path = queryPath;
|
|
159
|
+
}
|
|
160
|
+
else if (config.origin) {
|
|
161
|
+
path = config.origin + queryPath;
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
path = queryOrigin + queryPath;
|
|
165
|
+
}
|
|
193
166
|
const sortByQuery = sortBy.map((order) => `&sortBy=${order.join(':')}`).join('');
|
|
194
167
|
const searchQuery = query.search ? `&search=${query.search}` : '';
|
|
195
168
|
const searchByQuery = query.searchBy && searchBy.length ? searchBy.map((column) => `&searchBy=${column}`).join('') : '';
|
package/lib/paginate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paginate.js","sourceRoot":"","sources":["../src/paginate.ts"],"names":[],"mappings":";;;AAAA,qCAQgB;AAEhB,2CAAoE;AACpE,mCAAgC;AAChC,6CAAuC;AAEvC,
|
|
1
|
+
{"version":3,"file":"paginate.js","sourceRoot":"","sources":["../src/paginate.ts"],"names":[],"mappings":"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"}
|
package/lib/paginate.spec.js
CHANGED
|
@@ -96,29 +96,12 @@ describe('paginate', () => {
|
|
|
96
96
|
// add friends to Milo
|
|
97
97
|
await catRepo.save(Object.assign(Object.assign({}, cats[0]), { friends: cats.slice(1) }));
|
|
98
98
|
});
|
|
99
|
-
// TODO: Make all tests pass postgres driver.
|
|
100
99
|
if (process.env.DB === 'postgres') {
|
|
101
|
-
it('should return result based on search term including a camelcase named column', async () => {
|
|
102
|
-
const config = {
|
|
103
|
-
sortableColumns: ['id', 'name', 'color'],
|
|
104
|
-
searchableColumns: ['cutenessLevel'],
|
|
105
|
-
};
|
|
106
|
-
const query = {
|
|
107
|
-
path: '',
|
|
108
|
-
search: 'hi',
|
|
109
|
-
};
|
|
110
|
-
const result = await (0, paginate_1.paginate)(query, catRepo, config);
|
|
111
|
-
expect(result.meta.search).toStrictEqual('hi');
|
|
112
|
-
expect(result.data).toStrictEqual([cats[0], cats[2], cats[4]]);
|
|
113
|
-
expect(result.links.current).toBe('?page=1&limit=20&sortBy=id:ASC&search=hi');
|
|
114
|
-
});
|
|
115
100
|
afterAll(async () => {
|
|
116
101
|
const entities = dataSource.entityMetadatas;
|
|
117
102
|
const tableNames = entities.map((entity) => `"${entity.tableName}"`).join(', ');
|
|
118
103
|
await dataSource.query(`TRUNCATE ${tableNames} CASCADE;`);
|
|
119
104
|
});
|
|
120
|
-
// We end postgres coverage here. See TODO above.
|
|
121
|
-
return;
|
|
122
105
|
}
|
|
123
106
|
it('should return an instance of Paginated', async () => {
|
|
124
107
|
const config = {
|
|
@@ -412,6 +395,20 @@ describe('paginate', () => {
|
|
|
412
395
|
expect(result.data).toStrictEqual([cats[0], cats[1], cats[3], cats[4]]);
|
|
413
396
|
expect(result.links.current).toBe('?page=1&limit=20&sortBy=id:ASC&search=i');
|
|
414
397
|
});
|
|
398
|
+
it('should return result based on search term on a camelcase named column', async () => {
|
|
399
|
+
const config = {
|
|
400
|
+
sortableColumns: ['id', 'name', 'color'],
|
|
401
|
+
searchableColumns: ['cutenessLevel'],
|
|
402
|
+
};
|
|
403
|
+
const query = {
|
|
404
|
+
path: '',
|
|
405
|
+
search: 'hi',
|
|
406
|
+
};
|
|
407
|
+
const result = await (0, paginate_1.paginate)(query, catRepo, config);
|
|
408
|
+
expect(result.meta.search).toStrictEqual('hi');
|
|
409
|
+
expect(result.data).toStrictEqual([cats[0], cats[2], cats[4]]);
|
|
410
|
+
expect(result.links.current).toBe('?page=1&limit=20&sortBy=id:ASC&search=hi');
|
|
411
|
+
});
|
|
415
412
|
it('should not result in a sql syntax error when attempting a sql injection', async () => {
|
|
416
413
|
const config = {
|
|
417
414
|
sortableColumns: ['id', 'name', 'color'],
|
|
@@ -442,21 +439,25 @@ describe('paginate', () => {
|
|
|
442
439
|
it('should return result based on search term on one-to-many relation', async () => {
|
|
443
440
|
const config = {
|
|
444
441
|
relations: ['toys'],
|
|
445
|
-
sortableColumns: ['id', '
|
|
442
|
+
sortableColumns: ['id', 'toys.id'],
|
|
446
443
|
searchableColumns: ['name', 'toys.name'],
|
|
447
444
|
};
|
|
448
445
|
const query = {
|
|
449
446
|
path: '',
|
|
450
447
|
search: 'Mouse',
|
|
448
|
+
sortBy: [
|
|
449
|
+
['id', 'ASC'],
|
|
450
|
+
['toys.id', 'DESC'],
|
|
451
|
+
],
|
|
451
452
|
};
|
|
452
453
|
const result = await (0, paginate_1.paginate)(query, catRepo, config);
|
|
453
454
|
expect(result.meta.search).toStrictEqual('Mouse');
|
|
454
|
-
const toy = (0, lodash_1.clone)(catToys[
|
|
455
|
+
const toy = (0, lodash_1.clone)(catToys[1]);
|
|
455
456
|
delete toy.cat;
|
|
456
|
-
const toy2 = (0, lodash_1.clone)(catToys[
|
|
457
|
+
const toy2 = (0, lodash_1.clone)(catToys[2]);
|
|
457
458
|
delete toy2.cat;
|
|
458
459
|
expect(result.data).toStrictEqual([Object.assign((0, lodash_1.clone)(cats[0]), { toys: [toy2, toy] })]);
|
|
459
|
-
expect(result.links.current).toBe('?page=1&limit=20&sortBy=id:ASC&search=Mouse');
|
|
460
|
+
expect(result.links.current).toBe('?page=1&limit=20&sortBy=id:ASC&sortBy=toys.id:DESC&search=Mouse');
|
|
460
461
|
});
|
|
461
462
|
it('should return result based on search term on one-to-one relation', async () => {
|
|
462
463
|
const config = {
|
|
@@ -750,6 +751,11 @@ describe('paginate', () => {
|
|
|
750
751
|
expect(result.data).toStrictEqual(orderedCats);
|
|
751
752
|
expect(result.links.current).toBe('?page=1&limit=20&sortBy=size.height:ASC&sortBy=size.length:ASC');
|
|
752
753
|
});
|
|
754
|
+
// TODO: Make all tests pass postgres driver.
|
|
755
|
+
if (process.env.DB === 'postgres') {
|
|
756
|
+
// We end postgres coverage here. See TODO above.
|
|
757
|
+
return;
|
|
758
|
+
}
|
|
753
759
|
it('should return result based on sort on embedded entity when other relations loaded', async () => {
|
|
754
760
|
const config = {
|
|
755
761
|
sortableColumns: ['id', 'name', 'size.height', 'size.length', 'size.width'],
|
|
@@ -783,7 +789,7 @@ describe('paginate', () => {
|
|
|
783
789
|
delete copy.cat;
|
|
784
790
|
return copy;
|
|
785
791
|
});
|
|
786
|
-
copyCats[0].toys = [copyToys[0], copyToys[
|
|
792
|
+
copyCats[0].toys = [copyToys[0], copyToys[2], copyToys[1]];
|
|
787
793
|
copyCats[1].toys = [copyToys[3]];
|
|
788
794
|
const orderedCats = [copyCats[3], copyCats[1], copyCats[2], copyCats[0], copyCats[4]];
|
|
789
795
|
expect(result.data).toStrictEqual(orderedCats);
|
|
@@ -1664,6 +1670,7 @@ describe('paginate', () => {
|
|
|
1664
1670
|
await catRepo.softDelete({ id: cats[0].id });
|
|
1665
1671
|
const result = await (0, paginate_1.paginate)(query, catRepo, config);
|
|
1666
1672
|
expect(result.meta.totalItems).toBe(cats.length);
|
|
1673
|
+
await catRepo.restore({ id: cats[0].id });
|
|
1667
1674
|
});
|
|
1668
1675
|
it('should return only undeleted items', async () => {
|
|
1669
1676
|
const config = {
|
|
@@ -1676,6 +1683,7 @@ describe('paginate', () => {
|
|
|
1676
1683
|
await catRepo.softDelete({ id: cats[0].id });
|
|
1677
1684
|
const result = await (0, paginate_1.paginate)(query, catRepo, config);
|
|
1678
1685
|
expect(result.meta.totalItems).toBe(cats.length - 1);
|
|
1686
|
+
await catRepo.restore({ id: cats[0].id });
|
|
1679
1687
|
});
|
|
1680
1688
|
it('should return the specified columns only', async () => {
|
|
1681
1689
|
const config = {
|
|
@@ -1747,7 +1755,9 @@ describe('paginate', () => {
|
|
|
1747
1755
|
path: '',
|
|
1748
1756
|
};
|
|
1749
1757
|
const result = await (0, paginate_1.paginate)(query, catRepo, config);
|
|
1750
|
-
expect(result.
|
|
1758
|
+
expect(result.meta.totalItems).toBe(5);
|
|
1759
|
+
expect(result.data.length).toBe(5);
|
|
1760
|
+
expect(result.data[0].friends.length).toBe(4);
|
|
1751
1761
|
});
|
|
1752
1762
|
it('should return eager relations when set the property `loadEagerRelations` as true', async () => {
|
|
1753
1763
|
const config = {
|