nestjs-paginate 7.1.2 → 8.0.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 +17 -9
- package/lib/paginate.d.ts +1 -0
- package/lib/paginate.js +10 -8
- package/lib/paginate.js.map +1 -1
- package/lib/paginate.spec.js +50 -0
- package/lib/paginate.spec.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -98,7 +98,7 @@ http://localhost:3000/cats?limit=5&page=2&sortBy=color:DESC&search=i&filter.age=
|
|
|
98
98
|
```ts
|
|
99
99
|
import { Controller, Injectable, Get } from '@nestjs/common'
|
|
100
100
|
import { InjectRepository } from '@nestjs/typeorm'
|
|
101
|
-
import { FilterOperator, Paginate, PaginateQuery, paginate, Paginated } from 'nestjs-paginate'
|
|
101
|
+
import { FilterOperator, FilterSuffix, Paginate, PaginateQuery, paginate, Paginated } from 'nestjs-paginate'
|
|
102
102
|
import { Repository, Entity, PrimaryGeneratedColumn, Column } from 'typeorm'
|
|
103
103
|
|
|
104
104
|
@Entity()
|
|
@@ -114,6 +114,12 @@ export class CatEntity {
|
|
|
114
114
|
|
|
115
115
|
@Column('int')
|
|
116
116
|
age: number
|
|
117
|
+
|
|
118
|
+
@Column({ nullable: true })
|
|
119
|
+
lastVetVisit: Date | null
|
|
120
|
+
|
|
121
|
+
@CreateDateColumn()
|
|
122
|
+
createdAt: string
|
|
117
123
|
}
|
|
118
124
|
|
|
119
125
|
@Injectable()
|
|
@@ -127,10 +133,12 @@ export class CatsService {
|
|
|
127
133
|
return paginate(query, this.catsRepository, {
|
|
128
134
|
sortableColumns: ['id', 'name', 'color', 'age'],
|
|
129
135
|
nullSort: 'last',
|
|
130
|
-
searchableColumns: ['name', 'color', 'age'],
|
|
131
136
|
defaultSortBy: [['id', 'DESC']],
|
|
137
|
+
searchableColumns: ['name', 'color', 'age'],
|
|
138
|
+
select: ['id', 'name', 'color', 'age', 'lastVetVisit'],
|
|
132
139
|
filterableColumns: {
|
|
133
|
-
|
|
140
|
+
name: [FilterOperator.EQ, FilterSuffix.NOT],
|
|
141
|
+
age: true,
|
|
134
142
|
},
|
|
135
143
|
})
|
|
136
144
|
}
|
|
@@ -184,12 +192,13 @@ const paginateConfig: PaginateConfig<CatEntity> {
|
|
|
184
192
|
|
|
185
193
|
/**
|
|
186
194
|
* Required: false
|
|
187
|
-
* Type:
|
|
195
|
+
* Type: (keyof CatEntity)[]
|
|
188
196
|
* Default: None
|
|
197
|
+
* Description: TypeORM partial selection. Limit selection further by using `select` query param.
|
|
189
198
|
* https://typeorm.io/select-query-builder#partial-selection
|
|
190
199
|
* Note: You must include the primary key in the selection.
|
|
191
200
|
*/
|
|
192
|
-
select: ['name', 'color'],
|
|
201
|
+
select: ['id', 'name', 'color'],
|
|
193
202
|
|
|
194
203
|
/**
|
|
195
204
|
* Required: false
|
|
@@ -384,11 +393,10 @@ Filter operators must be whitelisted per column in `PaginateConfig`.
|
|
|
384
393
|
const config: PaginateConfig<CatEntity> = {
|
|
385
394
|
// ...
|
|
386
395
|
filterableColumns: {
|
|
387
|
-
//
|
|
396
|
+
// Enable individual operators on a column
|
|
388
397
|
id: [FilterOperator.EQ, FilterSuffix.NOT],
|
|
389
|
-
'toys.name': [FilterOperator.IN],
|
|
390
398
|
|
|
391
|
-
//
|
|
399
|
+
// Enable all operators on a column
|
|
392
400
|
age: true,
|
|
393
401
|
},
|
|
394
402
|
}
|
|
@@ -422,7 +430,7 @@ Multi filters are filters that can be applied to a single column with a comparat
|
|
|
422
430
|
|
|
423
431
|
### Examples
|
|
424
432
|
|
|
425
|
-
`?filter.createdAt=$gt:2022-02-02&filter.createdAt=$lt:2022-02-10` where column `createdAt` is after `2022-02-02` **and**
|
|
433
|
+
`?filter.createdAt=$gt:2022-02-02&filter.createdAt=$lt:2022-02-10` where column `createdAt` is after `2022-02-02` **and** before `2022-02-10`
|
|
426
434
|
|
|
427
435
|
`?filter.id=$contains:moderator&filter.id=$or:$contains:admin` where column `roles` is an array and contains `moderator` **or** `admin`
|
|
428
436
|
|
package/lib/paginate.d.ts
CHANGED
package/lib/paginate.js
CHANGED
|
@@ -17,6 +17,7 @@ exports.DEFAULT_MAX_LIMIT = 100;
|
|
|
17
17
|
exports.DEFAULT_LIMIT = 20;
|
|
18
18
|
exports.NO_PAGINATION = 0;
|
|
19
19
|
async function paginate(query, repo, config) {
|
|
20
|
+
var _a;
|
|
20
21
|
const page = (0, helper_1.positiveNumberOrDefault)(query.page, 1, 1);
|
|
21
22
|
const defaultLimit = config.defaultLimit || exports.DEFAULT_LIMIT;
|
|
22
23
|
const maxLimit = (0, helper_1.positiveNumberOrDefault)(config.maxLimit, exports.DEFAULT_MAX_LIMIT);
|
|
@@ -88,15 +89,12 @@ async function paginate(query, repo, config) {
|
|
|
88
89
|
}
|
|
89
90
|
// When we partial select the columns (main or relation) we must add the primary key column otherwise
|
|
90
91
|
// typeorm will not be able to map the result.
|
|
91
|
-
const selectParams = config.select
|
|
92
|
+
const selectParams = config.select && query.select ? config.select.filter((column) => query.select.includes(column)) : config.select;
|
|
92
93
|
if ((selectParams === null || selectParams === void 0 ? void 0 : selectParams.length) > 0 && (0, helper_1.includesAllPrimaryKeyColumns)(queryBuilder, selectParams)) {
|
|
93
94
|
const cols = selectParams.reduce((cols, currentCol) => {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
const isRelation = (0, helper_1.checkIsRelation)(queryBuilder, columnProperties.propertyPath);
|
|
98
|
-
cols.push((0, helper_1.fixColumnAlias)(columnProperties, queryBuilder.alias, isRelation));
|
|
99
|
-
}
|
|
95
|
+
const columnProperties = (0, helper_1.getPropertiesByColumnName)(currentCol);
|
|
96
|
+
const isRelation = (0, helper_1.checkIsRelation)(queryBuilder, columnProperties.propertyPath);
|
|
97
|
+
cols.push((0, helper_1.fixColumnAlias)(columnProperties, queryBuilder.alias, isRelation));
|
|
100
98
|
return cols;
|
|
101
99
|
}, []);
|
|
102
100
|
queryBuilder.select(cols);
|
|
@@ -164,11 +162,14 @@ async function paginate(query, repo, config) {
|
|
|
164
162
|
const sortByQuery = sortBy.map((order) => `&sortBy=${order.join(':')}`).join('');
|
|
165
163
|
const searchQuery = query.search ? `&search=${query.search}` : '';
|
|
166
164
|
const searchByQuery = query.searchBy && searchBy.length ? searchBy.map((column) => `&searchBy=${column}`).join('') : '';
|
|
165
|
+
// Only expose select in meta data if query select differs from config select
|
|
166
|
+
const isQuerySelected = (selectParams === null || selectParams === void 0 ? void 0 : selectParams.length) !== ((_a = config.select) === null || _a === void 0 ? void 0 : _a.length);
|
|
167
|
+
const selectQuery = isQuerySelected ? `&select=${selectParams.join(',')}` : '';
|
|
167
168
|
const filterQuery = query.filter
|
|
168
169
|
? '&' +
|
|
169
170
|
(0, querystring_1.stringify)((0, lodash_1.mapKeys)(query.filter, (_param, name) => 'filter.' + name), '&', '=', { encodeURIComponent: (str) => str })
|
|
170
171
|
: '';
|
|
171
|
-
const options = `&limit=${limit}${sortByQuery}${searchQuery}${searchByQuery}${filterQuery}`;
|
|
172
|
+
const options = `&limit=${limit}${sortByQuery}${searchQuery}${searchByQuery}${selectQuery}${filterQuery}`;
|
|
172
173
|
const buildLink = (p) => path + '?page=' + p + options;
|
|
173
174
|
const totalPages = isPaginated ? Math.ceil(totalItems / limit) : 1;
|
|
174
175
|
const results = {
|
|
@@ -181,6 +182,7 @@ async function paginate(query, repo, config) {
|
|
|
181
182
|
sortBy,
|
|
182
183
|
search: query.search,
|
|
183
184
|
searchBy: query.search ? searchBy : undefined,
|
|
185
|
+
select: isQuerySelected ? selectParams : undefined,
|
|
184
186
|
filter: query.filter,
|
|
185
187
|
},
|
|
186
188
|
links: {
|
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,qCAciB;AACjB,qCAAkE;AAIzD,+FAJW,uBAAc,OAIX;AAAE,6FAJW,qBAAY,OAIX;AAFrC,MAAM,MAAM,GAAW,IAAI,eAAM,CAAC,iBAAiB,CAAC,CAAA;AAIpD,MAAa,SAAS;
|
|
1
|
+
{"version":3,"file":"paginate.js","sourceRoot":"","sources":["../src/paginate.ts"],"names":[],"mappings":"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"}
|
package/lib/paginate.spec.js
CHANGED
|
@@ -1665,6 +1665,8 @@ describe('paginate', () => {
|
|
|
1665
1665
|
};
|
|
1666
1666
|
const result = await (0, paginate_1.paginate)(query, catRepo, config);
|
|
1667
1667
|
expect(result.data).toStrictEqual(cats);
|
|
1668
|
+
expect(result.meta.select).toStrictEqual(undefined);
|
|
1669
|
+
expect(result.links.current).toBe('?page=1&limit=20&sortBy=id:ASC');
|
|
1668
1670
|
});
|
|
1669
1671
|
it('should return all items even if deleted', async () => {
|
|
1670
1672
|
const config = {
|
|
@@ -1702,8 +1704,48 @@ describe('paginate', () => {
|
|
|
1702
1704
|
};
|
|
1703
1705
|
const result = await (0, paginate_1.paginate)(query, catRepo, config);
|
|
1704
1706
|
result.data.forEach((cat) => {
|
|
1707
|
+
expect(cat.id).toBeDefined();
|
|
1708
|
+
expect(cat.name).toBeDefined();
|
|
1705
1709
|
expect(cat.color).not.toBeDefined();
|
|
1706
1710
|
});
|
|
1711
|
+
expect(result.meta.select).toBe(undefined);
|
|
1712
|
+
expect(result.links.current).toBe('?page=1&limit=20&sortBy=id:ASC');
|
|
1713
|
+
});
|
|
1714
|
+
it('should ignore query select', async () => {
|
|
1715
|
+
const config = {
|
|
1716
|
+
sortableColumns: ['id'],
|
|
1717
|
+
};
|
|
1718
|
+
const query = {
|
|
1719
|
+
path: '',
|
|
1720
|
+
select: ['id', 'name'],
|
|
1721
|
+
};
|
|
1722
|
+
const result = await (0, paginate_1.paginate)(query, catRepo, config);
|
|
1723
|
+
result.data.forEach((cat) => {
|
|
1724
|
+
expect(cat.id).toBeDefined();
|
|
1725
|
+
expect(cat.name).toBeDefined();
|
|
1726
|
+
expect(cat.color).toBeDefined();
|
|
1727
|
+
});
|
|
1728
|
+
expect(result.meta.select).toEqual(undefined);
|
|
1729
|
+
expect(result.links.current).toBe('?page=1&limit=20&sortBy=id:ASC');
|
|
1730
|
+
});
|
|
1731
|
+
it('should only query select columns which have been config selected', async () => {
|
|
1732
|
+
const config = {
|
|
1733
|
+
sortableColumns: ['id'],
|
|
1734
|
+
select: ['id', 'name', 'color'],
|
|
1735
|
+
};
|
|
1736
|
+
const query = {
|
|
1737
|
+
path: '',
|
|
1738
|
+
select: ['id', 'color', 'age'],
|
|
1739
|
+
};
|
|
1740
|
+
const result = await (0, paginate_1.paginate)(query, catRepo, config);
|
|
1741
|
+
result.data.forEach((cat) => {
|
|
1742
|
+
expect(cat.id).toBeDefined();
|
|
1743
|
+
expect(cat.name).not.toBeDefined();
|
|
1744
|
+
expect(cat.color).toBeDefined();
|
|
1745
|
+
expect(cat.age).not.toBeDefined();
|
|
1746
|
+
});
|
|
1747
|
+
expect(result.meta.select).toEqual(['id', 'color']);
|
|
1748
|
+
expect(result.links.current).toBe('?page=1&limit=20&sortBy=id:ASC&select=id,color');
|
|
1707
1749
|
});
|
|
1708
1750
|
it('should return the specified relationship columns only', async () => {
|
|
1709
1751
|
const config = {
|
|
@@ -1724,6 +1766,8 @@ describe('paginate', () => {
|
|
|
1724
1766
|
expect(toy.id).not.toBeDefined();
|
|
1725
1767
|
});
|
|
1726
1768
|
});
|
|
1769
|
+
expect(result.meta.select).toBe(undefined);
|
|
1770
|
+
expect(result.links.current).toBe('?page=1&limit=20&sortBy=name:ASC');
|
|
1727
1771
|
});
|
|
1728
1772
|
it('should return selected columns', async () => {
|
|
1729
1773
|
const config = {
|
|
@@ -1751,6 +1795,8 @@ describe('paginate', () => {
|
|
|
1751
1795
|
expect(cat.toys).toHaveLength(0);
|
|
1752
1796
|
}
|
|
1753
1797
|
});
|
|
1798
|
+
expect(result.meta.select).toStrictEqual(['id', 'toys.(size.height)']);
|
|
1799
|
+
expect(result.links.current).toBe('?page=1&limit=20&sortBy=id:ASC&select=id,toys.(size.height)');
|
|
1754
1800
|
});
|
|
1755
1801
|
it('should only select columns via query which are selected in config', async () => {
|
|
1756
1802
|
const config = {
|
|
@@ -1773,6 +1819,8 @@ describe('paginate', () => {
|
|
|
1773
1819
|
expect(cat.home).toBeNull();
|
|
1774
1820
|
}
|
|
1775
1821
|
});
|
|
1822
|
+
expect(result.meta.select).toStrictEqual(['id', 'home.id']);
|
|
1823
|
+
expect(result.links.current).toBe('?page=1&limit=20&sortBy=id:ASC&select=id,home.id');
|
|
1776
1824
|
});
|
|
1777
1825
|
it('should return the specified nested relationship columns only', async () => {
|
|
1778
1826
|
const config = {
|
|
@@ -1800,6 +1848,8 @@ describe('paginate', () => {
|
|
|
1800
1848
|
expect(cat.home).toBeNull();
|
|
1801
1849
|
}
|
|
1802
1850
|
});
|
|
1851
|
+
expect(result.meta.select).toBe(undefined);
|
|
1852
|
+
expect(result.links.current).toBe('?page=1&limit=20&sortBy=id:ASC');
|
|
1803
1853
|
});
|
|
1804
1854
|
it('should return the right amount of results if a many to many relation is involved', async () => {
|
|
1805
1855
|
const config = {
|