nestjs-paginate 4.9.3 → 4.11.0
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 +2 -1
- package/lib/__tests__/cat-home-pillow.entity.d.ts +7 -0
- package/lib/__tests__/cat-home-pillow.entity.js +37 -0
- package/lib/__tests__/cat-home-pillow.entity.js.map +1 -0
- package/lib/__tests__/cat-home.entity.d.ts +2 -0
- package/lib/__tests__/cat-home.entity.js +5 -0
- package/lib/__tests__/cat-home.entity.js.map +1 -1
- package/lib/decorator.d.ts +1 -0
- package/lib/decorator.js +29 -23
- package/lib/decorator.js.map +1 -1
- package/lib/decorator.spec.js +6 -0
- package/lib/decorator.spec.js.map +1 -1
- package/lib/filter.js +1 -1
- package/lib/filter.js.map +1 -1
- package/lib/paginate.d.ts +2 -2
- package/lib/paginate.js +36 -14
- package/lib/paginate.js.map +1 -1
- package/lib/paginate.spec.js +83 -1
- package/lib/paginate.spec.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -13,6 +13,7 @@ Pagination and filtering helper method for TypeORM repositories or query builder
|
|
|
13
13
|
- Pagination conforms to [JSON:API](https://jsonapi.org/)
|
|
14
14
|
- Sort by multiple columns
|
|
15
15
|
- Search across columns
|
|
16
|
+
- Select columns
|
|
16
17
|
- Filter using operators (`$eq`, `$not`, `$null`, `$in`, `$gt`, `$gte`, `$lt`, `$lte`, `$btw`, `$ilike`, `$sw`)
|
|
17
18
|
- Include relations
|
|
18
19
|
- Virtual column support
|
|
@@ -32,7 +33,7 @@ The following code exposes a route that can be utilized like so:
|
|
|
32
33
|
#### Endpoint
|
|
33
34
|
|
|
34
35
|
```url
|
|
35
|
-
http://localhost:3000/cats?limit=5&page=2&sortBy=color:DESC&search=i&filter.age=$gte:3
|
|
36
|
+
http://localhost:3000/cats?limit=5&page=2&sortBy=color:DESC&search=i&filter.age=$gte:3&select=id,name,color,age
|
|
36
37
|
```
|
|
37
38
|
|
|
38
39
|
#### Result
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.CatHomePillowEntity = void 0;
|
|
13
|
+
const typeorm_1 = require("typeorm");
|
|
14
|
+
const cat_home_entity_1 = require("./cat-home.entity");
|
|
15
|
+
let CatHomePillowEntity = class CatHomePillowEntity {
|
|
16
|
+
};
|
|
17
|
+
__decorate([
|
|
18
|
+
(0, typeorm_1.PrimaryGeneratedColumn)(),
|
|
19
|
+
__metadata("design:type", Number)
|
|
20
|
+
], CatHomePillowEntity.prototype, "id", void 0);
|
|
21
|
+
__decorate([
|
|
22
|
+
(0, typeorm_1.ManyToOne)(() => cat_home_entity_1.CatHomeEntity, (home) => home.pillows),
|
|
23
|
+
__metadata("design:type", cat_home_entity_1.CatHomeEntity)
|
|
24
|
+
], CatHomePillowEntity.prototype, "home", void 0);
|
|
25
|
+
__decorate([
|
|
26
|
+
(0, typeorm_1.Column)(),
|
|
27
|
+
__metadata("design:type", String)
|
|
28
|
+
], CatHomePillowEntity.prototype, "color", void 0);
|
|
29
|
+
__decorate([
|
|
30
|
+
(0, typeorm_1.CreateDateColumn)(),
|
|
31
|
+
__metadata("design:type", String)
|
|
32
|
+
], CatHomePillowEntity.prototype, "createdAt", void 0);
|
|
33
|
+
CatHomePillowEntity = __decorate([
|
|
34
|
+
(0, typeorm_1.Entity)()
|
|
35
|
+
], CatHomePillowEntity);
|
|
36
|
+
exports.CatHomePillowEntity = CatHomePillowEntity;
|
|
37
|
+
//# sourceMappingURL=cat-home-pillow.entity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cat-home-pillow.entity.js","sourceRoot":"","sources":["../../src/__tests__/cat-home-pillow.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAA6F;AAC7F,uDAAiD;AAG1C,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;CAY/B,CAAA;AAXG;IAAC,IAAA,gCAAsB,GAAE;;+CACf;AAEV;IAAC,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,+BAAa,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC;8BACjD,+BAAa;iDAAA;AAEnB;IAAC,IAAA,gBAAM,GAAE;;kDACI;AAEb;IAAC,IAAA,0BAAgB,GAAE;;sDACF;AAXR,mBAAmB;IAD/B,IAAA,gBAAM,GAAE;GACI,mBAAmB,CAY/B;AAZY,kDAAmB"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { CatEntity } from './cat.entity';
|
|
2
|
+
import { CatHomePillowEntity } from './cat-home-pillow.entity';
|
|
2
3
|
export declare class CatHomeEntity {
|
|
3
4
|
id: number;
|
|
4
5
|
name: string;
|
|
5
6
|
cat: CatEntity;
|
|
7
|
+
pillows: CatHomePillowEntity[];
|
|
6
8
|
createdAt: string;
|
|
7
9
|
countCat: number;
|
|
8
10
|
}
|
|
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
12
12
|
exports.CatHomeEntity = void 0;
|
|
13
13
|
const typeorm_1 = require("typeorm");
|
|
14
14
|
const cat_entity_1 = require("./cat.entity");
|
|
15
|
+
const cat_home_pillow_entity_1 = require("./cat-home-pillow.entity");
|
|
15
16
|
let CatHomeEntity = class CatHomeEntity {
|
|
16
17
|
};
|
|
17
18
|
__decorate([
|
|
@@ -26,6 +27,10 @@ __decorate([
|
|
|
26
27
|
(0, typeorm_1.OneToOne)(() => cat_entity_1.CatEntity, (cat) => cat.home),
|
|
27
28
|
__metadata("design:type", cat_entity_1.CatEntity)
|
|
28
29
|
], CatHomeEntity.prototype, "cat", void 0);
|
|
30
|
+
__decorate([
|
|
31
|
+
(0, typeorm_1.OneToMany)(() => cat_home_pillow_entity_1.CatHomePillowEntity, (pillow) => pillow.home),
|
|
32
|
+
__metadata("design:type", Array)
|
|
33
|
+
], CatHomeEntity.prototype, "pillows", void 0);
|
|
29
34
|
__decorate([
|
|
30
35
|
(0, typeorm_1.CreateDateColumn)(),
|
|
31
36
|
__metadata("design:type", String)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cat-home.entity.js","sourceRoot":"","sources":["../../src/__tests__/cat-home.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"cat-home.entity.js","sourceRoot":"","sources":["../../src/__tests__/cat-home.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAAsH;AACtH,6CAAwC;AACxC,qEAA8D;AAGvD,IAAM,aAAa,GAAnB,MAAM,aAAa;CAoBzB,CAAA;AAnBG;IAAC,IAAA,gCAAsB,GAAE;;yCACf;AAEV;IAAC,IAAA,gBAAM,GAAE;;2CACG;AAEZ;IAAC,IAAA,kBAAQ,EAAC,GAAG,EAAE,CAAC,sBAAS,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC;8BACxC,sBAAS;0CAAA;AAEd;IAAC,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,4CAAmB,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;;8CAChC;AAE9B;IAAC,IAAA,0BAAgB,GAAE;;gDACF;AAEjB;IAAC,IAAA,uBAAa,EAAC;QACX,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,mEAAmE,KAAK,KAAK;KAClG,CAAC;;+CACc;AAnBP,aAAa;IADzB,IAAA,gBAAM,GAAE;GACI,aAAa,CAoBzB;AApBY,sCAAa"}
|
package/lib/decorator.d.ts
CHANGED
package/lib/decorator.js
CHANGED
|
@@ -3,6 +3,29 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.Paginate = void 0;
|
|
4
4
|
const common_1 = require("@nestjs/common");
|
|
5
5
|
const lodash_1 = require("lodash");
|
|
6
|
+
const singleSplit = (param, res) => res.push(param);
|
|
7
|
+
const multipleSplit = (param, res) => {
|
|
8
|
+
const items = param.split(':');
|
|
9
|
+
if (items.length === 2) {
|
|
10
|
+
res.push(items);
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
const multipleAndCommaSplit = (param, res) => {
|
|
14
|
+
const set = new Set(param.split(','));
|
|
15
|
+
set.forEach((item) => res.push(item));
|
|
16
|
+
};
|
|
17
|
+
function parseParam(queryParam, parserLogic) {
|
|
18
|
+
const res = [];
|
|
19
|
+
if (queryParam) {
|
|
20
|
+
const params = !Array.isArray(queryParam) ? [queryParam] : queryParam;
|
|
21
|
+
for (const param of params) {
|
|
22
|
+
if ((0, lodash_1.isString)(param)) {
|
|
23
|
+
parserLogic(param, res);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return res.length ? res : undefined;
|
|
28
|
+
}
|
|
6
29
|
exports.Paginate = (0, common_1.createParamDecorator)((_data, ctx) => {
|
|
7
30
|
const request = ctx.switchToHttp().getRequest();
|
|
8
31
|
const { query } = request;
|
|
@@ -16,36 +39,19 @@ exports.Paginate = (0, common_1.createParamDecorator)((_data, ctx) => {
|
|
|
16
39
|
}
|
|
17
40
|
const urlParts = new URL(originalUrl);
|
|
18
41
|
const path = urlParts.protocol + '//' + urlParts.host + urlParts.pathname;
|
|
19
|
-
const
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
const params = !Array.isArray(query.sortBy) ? [query.sortBy] : query.sortBy;
|
|
23
|
-
for (const param of params) {
|
|
24
|
-
if ((0, lodash_1.isString)(param)) {
|
|
25
|
-
const items = param.split(':');
|
|
26
|
-
if (items.length === 2) {
|
|
27
|
-
sortBy.push(items);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
if (query.searchBy) {
|
|
33
|
-
const params = !Array.isArray(query.searchBy) ? [query.searchBy] : query.searchBy;
|
|
34
|
-
for (const param of params) {
|
|
35
|
-
if ((0, lodash_1.isString)(param)) {
|
|
36
|
-
searchBy.push(param);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
}
|
|
42
|
+
const searchBy = parseParam(query.searchBy, singleSplit);
|
|
43
|
+
const sortBy = parseParam(query.sortBy, multipleSplit);
|
|
44
|
+
const select = parseParam(query.select, multipleAndCommaSplit);
|
|
40
45
|
const filter = (0, lodash_1.mapKeys)((0, lodash_1.pickBy)(query, (param, name) => name.includes('filter.') &&
|
|
41
46
|
((0, lodash_1.isString)(param) || (Array.isArray(param) && param.every((p) => (0, lodash_1.isString)(p))))), (_param, name) => name.replace('filter.', ''));
|
|
42
47
|
return {
|
|
43
48
|
page: query.page ? parseInt(query.page.toString(), 10) : undefined,
|
|
44
49
|
limit: query.limit ? parseInt(query.limit.toString(), 10) : undefined,
|
|
45
|
-
sortBy
|
|
50
|
+
sortBy,
|
|
46
51
|
search: query.search ? query.search.toString() : undefined,
|
|
47
|
-
searchBy
|
|
52
|
+
searchBy,
|
|
48
53
|
filter: Object.keys(filter).length ? filter : undefined,
|
|
54
|
+
select,
|
|
49
55
|
path,
|
|
50
56
|
};
|
|
51
57
|
});
|
package/lib/decorator.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decorator.js","sourceRoot":"","sources":["../src/decorator.ts"],"names":[],"mappings":";;;AAAA,2CAAuE;AAEvE,mCAA8D;
|
|
1
|
+
{"version":3,"file":"decorator.js","sourceRoot":"","sources":["../src/decorator.ts"],"names":[],"mappings":"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"}
|
package/lib/decorator.spec.js
CHANGED
|
@@ -68,6 +68,7 @@ describe('Decorator', () => {
|
|
|
68
68
|
search: undefined,
|
|
69
69
|
searchBy: undefined,
|
|
70
70
|
filter: undefined,
|
|
71
|
+
select: undefined,
|
|
71
72
|
path: 'http://localhost/items',
|
|
72
73
|
});
|
|
73
74
|
});
|
|
@@ -81,6 +82,7 @@ describe('Decorator', () => {
|
|
|
81
82
|
search: undefined,
|
|
82
83
|
searchBy: undefined,
|
|
83
84
|
filter: undefined,
|
|
85
|
+
select: undefined,
|
|
84
86
|
path: 'http://localhost/items',
|
|
85
87
|
});
|
|
86
88
|
});
|
|
@@ -92,6 +94,7 @@ describe('Decorator', () => {
|
|
|
92
94
|
search: 'white',
|
|
93
95
|
'filter.name': '$not:$eq:Kitty',
|
|
94
96
|
'filter.createdAt': ['$gte:2020-01-01', '$lte:2020-12-31'],
|
|
97
|
+
select: ['name', 'createdAt'],
|
|
95
98
|
});
|
|
96
99
|
const result = decoratorfactory(null, context);
|
|
97
100
|
expect(result).toStrictEqual({
|
|
@@ -103,6 +106,7 @@ describe('Decorator', () => {
|
|
|
103
106
|
],
|
|
104
107
|
search: 'white',
|
|
105
108
|
searchBy: undefined,
|
|
109
|
+
select: ['name', 'createdAt'],
|
|
106
110
|
path: 'http://localhost/items',
|
|
107
111
|
filter: {
|
|
108
112
|
name: '$not:$eq:Kitty',
|
|
@@ -118,6 +122,7 @@ describe('Decorator', () => {
|
|
|
118
122
|
search: 'white',
|
|
119
123
|
'filter.name': '$not:$eq:Kitty',
|
|
120
124
|
'filter.createdAt': ['$gte:2020-01-01', '$lte:2020-12-31'],
|
|
125
|
+
select: ['name', 'createdAt'],
|
|
121
126
|
});
|
|
122
127
|
const result = decoratorfactory(null, context);
|
|
123
128
|
expect(result).toStrictEqual({
|
|
@@ -134,6 +139,7 @@ describe('Decorator', () => {
|
|
|
134
139
|
name: '$not:$eq:Kitty',
|
|
135
140
|
createdAt: ['$gte:2020-01-01', '$lte:2020-12-31'],
|
|
136
141
|
},
|
|
142
|
+
select: ['name', 'createdAt'],
|
|
137
143
|
});
|
|
138
144
|
});
|
|
139
145
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decorator.spec.js","sourceRoot":"","sources":["../src/decorator.spec.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"decorator.spec.js","sourceRoot":"","sources":["../src/decorator.spec.ts"],"names":[],"mappings":"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"}
|
package/lib/filter.js
CHANGED
|
@@ -47,9 +47,9 @@ function addWhereCondition(qb, column, filter) {
|
|
|
47
47
|
const { isVirtualProperty, query: virtualQuery } = (0, helper_1.extractVirtualProperty)(qb, columnProperties);
|
|
48
48
|
const isRelation = (0, helper_1.checkIsRelation)(qb, columnProperties.propertyPath);
|
|
49
49
|
const isEmbedded = (0, helper_1.checkIsEmbedded)(qb, columnProperties.propertyPath);
|
|
50
|
+
const alias = (0, helper_1.fixColumnAlias)(columnProperties, qb.alias, isRelation, isVirtualProperty, isEmbedded, virtualQuery);
|
|
50
51
|
filter[column].forEach((columnFilter, index) => {
|
|
51
52
|
const columnNamePerIteration = `${column}${index}`;
|
|
52
|
-
const alias = (0, helper_1.fixColumnAlias)(columnProperties, qb.alias, isRelation, isVirtualProperty, isEmbedded, virtualQuery);
|
|
53
53
|
const condition = generatePredicateCondition(qb, column, columnFilter, alias, isVirtualProperty);
|
|
54
54
|
const parameters = fixQueryParam(alias, columnNamePerIteration, columnFilter, condition, {
|
|
55
55
|
[columnNamePerIteration]: columnFilter.findOperator.value,
|
package/lib/filter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter.js","sourceRoot":"","sources":["../src/filter.ts"],"names":[],"mappings":";;;AAAA,qCAAoE;AAGpE,qCAMiB;AACjB,yCAQmB;AAanB,uGAAuG;AACvG,oFAAoF;AACpF,SAAgB,aAAa,CACzB,KAAa,EACb,MAAc,EACd,MAAc,EACd,SAAiC,EACjC,UAAqC;IAErC,MAAM,aAAa,GAAI,SAAS,CAAC,QAAmB,KAAK,KAAK,CAAA;IAE9D,MAAM,cAAc,GAAG,CACnB,KAAa,EACb,MAAc,EACd,MAAc,EACd,QAA4C,EAC5C,UAAqC,EACC,EAAE;QACxC,IAAI,gBAAgB,GAAQ,SAAS,CAAA;QACrC,IAAI,MAAM,GAAG,UAAU,CAAA;QACvB,QAAQ,QAAQ,EAAE;YACd,KAAK,SAAS;gBACV,gBAAgB,GAAG,CAAC,KAAK,EAAE,IAAI,MAAM,OAAO,EAAE,IAAI,MAAM,KAAK,CAAC,CAAA;gBAC9D,MAAM,GAAG;oBACL,CAAC,MAAM,GAAG,OAAO,CAAC,EAAE,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;oBAChD,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;iBACjD,CAAA;gBACD,MAAK;YACT,KAAK,IAAI;gBACL,gBAAgB,GAAG,CAAC,KAAK,EAAE,OAAO,MAAM,EAAE,CAAC,CAAA;gBAC3C,MAAK;YACT;gBACI,gBAAgB,GAAG,CAAC,KAAK,EAAE,IAAI,MAAM,EAAE,CAAC,CAAA;gBACxC,MAAK;SACZ;QACD,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAA;IACvC,CAAC,CAAA;IAED,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,cAAc,CAC/C,KAAK,EACL,MAAM,EACN,MAAM,EACN,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,EACvE,UAAU,CACb,CAAA;IAED,IAAI,aAAa,EAAE;QACf,SAAS,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC,GAAG,gBAAgB,CAAA;KAC1D;SAAM;QACH,SAAS,CAAC,UAAU,GAAG,gBAAgB,CAAA;KAC1C;IAED,OAAO,MAAM,CAAA;AACjB,CAAC;AAnDD,sCAmDC;AAED,SAAgB,0BAA0B,CACtC,EAA+B,EAC/B,MAAc,EACd,MAAc,EACd,KAAa,EACb,iBAAiB,GAAG,KAAK;IAEzB,OAAO,EAAE,CAAC,4BAA4B,CAAC,CACnC,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAClC,MAAM,CAAC,YAAY,CACI,CAAA;AAC/B,CAAC;AAXD,gEAWC;AAED,SAAgB,iBAAiB,CAAI,EAAyB,EAAE,MAAc,EAAE,MAAsB;IAClG,MAAM,gBAAgB,GAAG,IAAA,kCAAyB,EAAC,MAAM,CAAC,CAAA;IAC1D,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,IAAA,+BAAsB,EAAC,EAAE,EAAE,gBAAgB,CAAC,CAAA;IAC/F,MAAM,UAAU,GAAG,IAAA,wBAAe,EAAC,EAAE,EAAE,gBAAgB,CAAC,YAAY,CAAC,CAAA;IACrE,MAAM,UAAU,GAAG,IAAA,wBAAe,EAAC,EAAE,EAAE,gBAAgB,CAAC,YAAY,CAAC,CAAA;IACrE,MAAM,
|
|
1
|
+
{"version":3,"file":"filter.js","sourceRoot":"","sources":["../src/filter.ts"],"names":[],"mappings":"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"}
|
package/lib/paginate.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Repository, SelectQueryBuilder, FindOptionsWhere, ObjectLiteral } from 'typeorm';
|
|
1
|
+
import { Repository, SelectQueryBuilder, FindOptionsWhere, FindOptionsRelations, ObjectLiteral } from 'typeorm';
|
|
2
2
|
import { PaginateQuery } from './decorator';
|
|
3
3
|
import { Column, RelationColumn, SortBy } from './helper';
|
|
4
4
|
import { FilterOperator, FilterSuffix } from './operator';
|
|
@@ -25,7 +25,7 @@ export declare class Paginated<T> {
|
|
|
25
25
|
};
|
|
26
26
|
}
|
|
27
27
|
export interface PaginateConfig<T> {
|
|
28
|
-
relations?: RelationColumn<T>[];
|
|
28
|
+
relations?: FindOptionsRelations<T> | RelationColumn<T>[];
|
|
29
29
|
sortableColumns: Column<T>[];
|
|
30
30
|
nullSort?: 'first' | 'last';
|
|
31
31
|
searchableColumns?: Column<T>[];
|
package/lib/paginate.js
CHANGED
|
@@ -15,7 +15,6 @@ exports.DEFAULT_MAX_LIMIT = 100;
|
|
|
15
15
|
exports.DEFAULT_LIMIT = 20;
|
|
16
16
|
exports.NO_PAGINATION = 0;
|
|
17
17
|
async function paginate(query, repo, config) {
|
|
18
|
-
var _a, _b;
|
|
19
18
|
const page = (0, helper_1.positiveNumberOrDefault)(query.page, 1, 1);
|
|
20
19
|
const defaultLimit = config.defaultLimit || exports.DEFAULT_LIMIT;
|
|
21
20
|
const maxLimit = (0, helper_1.positiveNumberOrDefault)(config.maxLimit, exports.DEFAULT_MAX_LIMIT);
|
|
@@ -75,7 +74,7 @@ async function paginate(query, repo, config) {
|
|
|
75
74
|
}
|
|
76
75
|
}
|
|
77
76
|
let [items, totalItems] = [[], 0];
|
|
78
|
-
const queryBuilder = repo instanceof typeorm_1.Repository ? repo.createQueryBuilder('
|
|
77
|
+
const queryBuilder = repo instanceof typeorm_1.Repository ? repo.createQueryBuilder('__root') : repo;
|
|
79
78
|
if (isPaginated) {
|
|
80
79
|
// Switch from take and skip to limit and offset
|
|
81
80
|
// due to this problem https://github.com/typeorm/typeorm/issues/5670
|
|
@@ -83,10 +82,27 @@ async function paginate(query, repo, config) {
|
|
|
83
82
|
// queryBuilder.limit(limit).offset((page - 1) * limit)
|
|
84
83
|
queryBuilder.take(limit).skip((page - 1) * limit);
|
|
85
84
|
}
|
|
86
|
-
if (
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
85
|
+
if (config.relations) {
|
|
86
|
+
// relations: ["relation"]
|
|
87
|
+
if (Array.isArray(config.relations)) {
|
|
88
|
+
config.relations.forEach((relation) => {
|
|
89
|
+
queryBuilder.leftJoinAndSelect(`${queryBuilder.alias}.${relation}`, `${queryBuilder.alias}_${relation}`);
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
// relations: {relation:true}
|
|
94
|
+
const createQueryBuilderRelations = (prefix, relations, alias) => {
|
|
95
|
+
Object.keys(relations).forEach((relationName) => {
|
|
96
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
97
|
+
const relationSchema = relations[relationName];
|
|
98
|
+
queryBuilder.leftJoinAndSelect(`${alias !== null && alias !== void 0 ? alias : prefix}.${relationName}`, `${alias !== null && alias !== void 0 ? alias : prefix}_${relationName}`);
|
|
99
|
+
if (typeof relationSchema === 'object') {
|
|
100
|
+
createQueryBuilderRelations(relationName, relationSchema, `${prefix}_${relationName}`);
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
};
|
|
104
|
+
createQueryBuilderRelations(queryBuilder.alias, config.relations);
|
|
105
|
+
}
|
|
90
106
|
}
|
|
91
107
|
let nullSort = undefined;
|
|
92
108
|
if (config.nullSort) {
|
|
@@ -100,15 +116,21 @@ async function paginate(query, repo, config) {
|
|
|
100
116
|
const alias = (0, helper_1.fixColumnAlias)(columnProperties, queryBuilder.alias, isRelation, isVirtualProperty, isEmbeded);
|
|
101
117
|
queryBuilder.addOrderBy(alias, order[1], nullSort);
|
|
102
118
|
}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
119
|
+
// When we partial select the columns (main or relation) we must add the primary key column otherwise
|
|
120
|
+
// typeorm will not be able to map the result TODO: write it in the docs
|
|
121
|
+
const selectParams = config.select || query.select;
|
|
122
|
+
if ((selectParams === null || selectParams === void 0 ? void 0 : selectParams.length) > 0) {
|
|
123
|
+
const cols = selectParams.reduce((cols, currentCol) => {
|
|
124
|
+
var _a, _b;
|
|
125
|
+
if ((_b = (_a = query.select) === null || _a === void 0 ? void 0 : _a.includes(currentCol)) !== null && _b !== void 0 ? _b : true) {
|
|
126
|
+
const columnProperties = (0, helper_1.getPropertiesByColumnName)(currentCol);
|
|
127
|
+
const isRelation = (0, helper_1.checkIsRelation)(queryBuilder, columnProperties.propertyPath);
|
|
128
|
+
// here we can avoid to manually fix and add the query of virtual columns
|
|
129
|
+
cols.push((0, helper_1.fixColumnAlias)(columnProperties, queryBuilder.alias, isRelation));
|
|
108
130
|
}
|
|
109
|
-
return
|
|
110
|
-
});
|
|
111
|
-
queryBuilder.select(
|
|
131
|
+
return cols;
|
|
132
|
+
}, []);
|
|
133
|
+
queryBuilder.select(cols);
|
|
112
134
|
}
|
|
113
135
|
if (config.where) {
|
|
114
136
|
queryBuilder.andWhere(new typeorm_1.Brackets((qb) => qb.andWhere(config.where)));
|
package/lib/paginate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paginate.js","sourceRoot":"","sources":["../src/paginate.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"paginate.js","sourceRoot":"","sources":["../src/paginate.ts"],"names":[],"mappings":"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"}
|
package/lib/paginate.spec.js
CHANGED
|
@@ -6,6 +6,7 @@ const common_1 = require("@nestjs/common");
|
|
|
6
6
|
const cat_entity_1 = require("./__tests__/cat.entity");
|
|
7
7
|
const cat_toy_entity_1 = require("./__tests__/cat-toy.entity");
|
|
8
8
|
const cat_home_entity_1 = require("./__tests__/cat-home.entity");
|
|
9
|
+
const cat_home_pillow_entity_1 = require("./__tests__/cat-home-pillow.entity");
|
|
9
10
|
const lodash_1 = require("lodash");
|
|
10
11
|
const operator_1 = require("./operator");
|
|
11
12
|
const filter_1 = require("./filter");
|
|
@@ -14,21 +15,24 @@ describe('paginate', () => {
|
|
|
14
15
|
let catRepo;
|
|
15
16
|
let catToyRepo;
|
|
16
17
|
let catHomeRepo;
|
|
18
|
+
let catHomePillowRepo;
|
|
17
19
|
let cats;
|
|
18
20
|
let catToys;
|
|
19
21
|
let catHomes;
|
|
22
|
+
let catHomePillows;
|
|
20
23
|
beforeAll(async () => {
|
|
21
24
|
dataSource = new typeorm_1.DataSource({
|
|
22
25
|
type: 'sqlite',
|
|
23
26
|
database: ':memory:',
|
|
24
27
|
synchronize: true,
|
|
25
28
|
logging: false,
|
|
26
|
-
entities: [cat_entity_1.CatEntity, cat_toy_entity_1.CatToyEntity, cat_home_entity_1.CatHomeEntity],
|
|
29
|
+
entities: [cat_entity_1.CatEntity, cat_toy_entity_1.CatToyEntity, cat_home_entity_1.CatHomeEntity, cat_home_pillow_entity_1.CatHomePillowEntity],
|
|
27
30
|
});
|
|
28
31
|
await dataSource.initialize();
|
|
29
32
|
catRepo = dataSource.getRepository(cat_entity_1.CatEntity);
|
|
30
33
|
catToyRepo = dataSource.getRepository(cat_toy_entity_1.CatToyEntity);
|
|
31
34
|
catHomeRepo = dataSource.getRepository(cat_home_entity_1.CatHomeEntity);
|
|
35
|
+
catHomePillowRepo = dataSource.getRepository(cat_home_pillow_entity_1.CatHomePillowEntity);
|
|
32
36
|
cats = await catRepo.save([
|
|
33
37
|
catRepo.create({ name: 'Milo', color: 'brown', age: 6, size: { height: 25, width: 10, length: 40 } }),
|
|
34
38
|
catRepo.create({ name: 'Garfield', color: 'ginger', age: 5, size: { height: 30, width: 15, length: 45 } }),
|
|
@@ -46,6 +50,14 @@ describe('paginate', () => {
|
|
|
46
50
|
catHomeRepo.create({ name: 'Box', cat: cats[0] }),
|
|
47
51
|
catHomeRepo.create({ name: 'House', cat: cats[1] }),
|
|
48
52
|
]);
|
|
53
|
+
catHomePillows = await catHomePillowRepo.save([
|
|
54
|
+
catHomePillowRepo.create({ color: 'red', home: catHomes[0] }),
|
|
55
|
+
catHomePillowRepo.create({ color: 'yellow', home: catHomes[0] }),
|
|
56
|
+
catHomePillowRepo.create({ color: 'blue', home: catHomes[0] }),
|
|
57
|
+
catHomePillowRepo.create({ color: 'pink', home: catHomes[1] }),
|
|
58
|
+
catHomePillowRepo.create({ color: 'purple', home: catHomes[1] }),
|
|
59
|
+
catHomePillowRepo.create({ color: 'teal', home: catHomes[1] }),
|
|
60
|
+
]);
|
|
49
61
|
// add friends to Milo
|
|
50
62
|
catRepo.save(Object.assign(Object.assign({}, cats[0]), { friends: cats.slice(1) }));
|
|
51
63
|
});
|
|
@@ -457,6 +469,49 @@ describe('paginate', () => {
|
|
|
457
469
|
expect(result.data).toStrictEqual([catHomesClone]);
|
|
458
470
|
expect(result.links.current).toBe('?page=1&limit=20&sortBy=id:ASC&search=Garfield');
|
|
459
471
|
});
|
|
472
|
+
it('should load nested relations', async () => {
|
|
473
|
+
const config = {
|
|
474
|
+
relations: { home: { pillows: true } },
|
|
475
|
+
sortableColumns: ['id', 'name'],
|
|
476
|
+
searchableColumns: ['name'],
|
|
477
|
+
};
|
|
478
|
+
const query = {
|
|
479
|
+
path: '',
|
|
480
|
+
search: 'Garfield',
|
|
481
|
+
};
|
|
482
|
+
const result = await (0, paginate_1.paginate)(query, catRepo, config);
|
|
483
|
+
const cat = (0, lodash_1.clone)(cats[1]);
|
|
484
|
+
const catHomesClone = (0, lodash_1.clone)(catHomes[1]);
|
|
485
|
+
const catHomePillowsClone3 = (0, lodash_1.clone)(catHomePillows[3]);
|
|
486
|
+
delete catHomePillowsClone3.home;
|
|
487
|
+
const catHomePillowsClone4 = (0, lodash_1.clone)(catHomePillows[4]);
|
|
488
|
+
delete catHomePillowsClone4.home;
|
|
489
|
+
const catHomePillowsClone5 = (0, lodash_1.clone)(catHomePillows[5]);
|
|
490
|
+
delete catHomePillowsClone5.home;
|
|
491
|
+
catHomesClone.countCat = cats.filter((cat) => cat.id === catHomesClone.cat.id).length;
|
|
492
|
+
catHomesClone.pillows = [catHomePillowsClone3, catHomePillowsClone4, catHomePillowsClone5];
|
|
493
|
+
cat.home = catHomesClone;
|
|
494
|
+
delete cat.home.cat;
|
|
495
|
+
expect(result.meta.search).toStrictEqual('Garfield');
|
|
496
|
+
expect(result.data).toStrictEqual([cat]);
|
|
497
|
+
expect(result.data[0].home).toBeDefined();
|
|
498
|
+
expect(result.data[0].home.pillows).toStrictEqual(cat.home.pillows);
|
|
499
|
+
});
|
|
500
|
+
it('should throw an error when nonexistent relation loaded', async () => {
|
|
501
|
+
const config = {
|
|
502
|
+
relations: ['homee'],
|
|
503
|
+
sortableColumns: ['id'],
|
|
504
|
+
};
|
|
505
|
+
const query = {
|
|
506
|
+
path: '',
|
|
507
|
+
};
|
|
508
|
+
try {
|
|
509
|
+
await (0, paginate_1.paginate)(query, catRepo, config);
|
|
510
|
+
}
|
|
511
|
+
catch (err) {
|
|
512
|
+
expect(err).toBeInstanceOf(typeorm_1.TypeORMError);
|
|
513
|
+
}
|
|
514
|
+
});
|
|
460
515
|
it('should return result based on search term and searchBy columns', async () => {
|
|
461
516
|
const config = {
|
|
462
517
|
sortableColumns: ['id', 'name', 'color'],
|
|
@@ -1585,6 +1640,33 @@ describe('paginate', () => {
|
|
|
1585
1640
|
});
|
|
1586
1641
|
});
|
|
1587
1642
|
});
|
|
1643
|
+
it('should return selected columns', async () => {
|
|
1644
|
+
const config = {
|
|
1645
|
+
sortableColumns: ['id', 'name'],
|
|
1646
|
+
select: ['id', 'name', 'toys.name', 'toys.size.height', 'toys.size.length'],
|
|
1647
|
+
relations: ['toys'],
|
|
1648
|
+
};
|
|
1649
|
+
const query = {
|
|
1650
|
+
path: '',
|
|
1651
|
+
select: ['id', 'toys.size.height'],
|
|
1652
|
+
};
|
|
1653
|
+
const result = await (0, paginate_1.paginate)(query, catRepo, config);
|
|
1654
|
+
result.data.forEach((cat) => {
|
|
1655
|
+
expect(cat.id).toBeDefined();
|
|
1656
|
+
expect(cat.name).not.toBeDefined();
|
|
1657
|
+
});
|
|
1658
|
+
result.data.forEach((cat) => {
|
|
1659
|
+
if (cat.id === 1 || cat.id === 2) {
|
|
1660
|
+
const toy = cat.toys[0];
|
|
1661
|
+
expect(toy.name).not.toBeDefined();
|
|
1662
|
+
expect(toy.id).not.toBeDefined();
|
|
1663
|
+
expect(toy.size.height).toBeDefined();
|
|
1664
|
+
}
|
|
1665
|
+
else {
|
|
1666
|
+
expect(cat.toys).toHaveLength(0);
|
|
1667
|
+
}
|
|
1668
|
+
});
|
|
1669
|
+
});
|
|
1588
1670
|
it('should return the right amount of results if a many to many relation is involved', async () => {
|
|
1589
1671
|
const config = {
|
|
1590
1672
|
sortableColumns: ['id'],
|