nestjs-paginate 8.1.6 → 8.2.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 CHANGED
@@ -458,6 +458,43 @@ is resolved to:
458
458
 
459
459
  `WHERE ... AND (id = 5 OR id = 7) AND name = 'Milo' AND ...`
460
460
 
461
+ ## Swagger
462
+
463
+ You can use two default decorators @ApiOkResponsePaginated and @ApiPagination to generate swagger documentation for your endpoints
464
+
465
+ `@ApiOkPaginatedResponse` is for response body, return http[](https://) status is 200
466
+
467
+ `@ApiPaginationQuery` is for query params
468
+
469
+
470
+ ```typescript
471
+ @Get()
472
+ @ApiOkPaginatedResponse(
473
+ UserDto,
474
+ USER_PAGINATION_CONFIG,
475
+ )
476
+ @ApiPaginationQuery(USER_PAGINATION_CONFIG)
477
+ async findAll(
478
+ @Paginate()
479
+ query: PaginateQuery,
480
+ ): Promise<Paginated<UserEntity>> {
481
+
482
+ }
483
+ ```
484
+
485
+ There is also some syntax sugar for this, and you can use only one decorator `@PaginatedSwaggerDocs` for both response body and query params
486
+
487
+ ```typescript
488
+ @Get()
489
+ @PaginatedSwaggerDocs(UserDto, USER_PAGINATION_CONFIG)
490
+ async findAll(
491
+ @Paginate()
492
+ query: PaginateQuery,
493
+ ): Promise<Paginated<UserEntity>> {
494
+
495
+ }
496
+ ```
497
+
461
498
  ## Troubleshooting
462
499
 
463
500
  The package does not report error reasons in the response bodies. They are instead
package/lib/decorator.js CHANGED
@@ -3,6 +3,12 @@ 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
+ function isRecord(data) {
7
+ return data !== null && typeof data === 'object' && !Array.isArray(data);
8
+ }
9
+ function isExpressRequest(request) {
10
+ return isRecord(request) && typeof request.get === 'function';
11
+ }
6
12
  const singleSplit = (param, res) => res.push(param);
7
13
  const multipleSplit = (param, res) => {
8
14
  const items = param.split(':');
@@ -28,10 +34,10 @@ function parseParam(queryParam, parserLogic) {
28
34
  }
29
35
  exports.Paginate = (0, common_1.createParamDecorator)((_data, ctx) => {
30
36
  const request = ctx.switchToHttp().getRequest();
31
- const { query } = request;
37
+ const query = request.query;
32
38
  // Determine if Express or Fastify to rebuild the original url and reduce down to protocol, host and base url
33
39
  let originalUrl;
34
- if (request.originalUrl) {
40
+ if (isExpressRequest(request)) {
35
41
  originalUrl = request.protocol + '://' + request.get('host') + request.originalUrl;
36
42
  }
37
43
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"decorator.js","sourceRoot":"","sources":["../src/decorator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"decorator.js","sourceRoot":"","sources":["../src/decorator.ts"],"names":[],"mappings":"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"}
@@ -51,6 +51,7 @@ function fastifyContextFactory(query) {
51
51
  protocol: 'http',
52
52
  hostname: 'localhost',
53
53
  url: '/items?search=2423',
54
+ originalUrl: '/items?search=2423',
54
55
  query: query,
55
56
  }),
56
57
  }),
@@ -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/index.d.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  export * from './decorator';
2
2
  export * from './paginate';
3
+ export * from './swagger';
package/lib/index.js CHANGED
@@ -16,4 +16,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./decorator"), exports);
18
18
  __exportStar(require("./paginate"), exports);
19
+ __exportStar(require("./swagger"), exports);
19
20
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA2B;AAC3B,6CAA0B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA2B;AAC3B,6CAA0B;AAC1B,4CAAyB"}
@@ -0,0 +1,3 @@
1
+ import { Type } from '@nestjs/common';
2
+ import { PaginateConfig } from '../paginate';
3
+ export declare const ApiOkPaginatedResponse: <DTO extends Type<unknown>>(dataDto: DTO, paginatedConfig: PaginateConfig<any>) => <TFunction extends Function, Y>(target: object | TFunction, propertyKey?: string | symbol, descriptor?: TypedPropertyDescriptor<Y>) => void;
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ApiOkPaginatedResponse = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ const swagger_1 = require("@nestjs/swagger");
6
+ const paginated_swagger_type_1 = require("./paginated-swagger.type");
7
+ const ApiOkPaginatedResponse = (dataDto,
8
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
9
+ paginatedConfig) => {
10
+ const cols = (paginatedConfig === null || paginatedConfig === void 0 ? void 0 : paginatedConfig.filterableColumns) || {};
11
+ return (0, common_1.applyDecorators)((0, swagger_1.ApiExtraModels)(paginated_swagger_type_1.PaginatedDocumented, dataDto), (0, swagger_1.ApiOkResponse)({
12
+ schema: {
13
+ allOf: [
14
+ { $ref: (0, swagger_1.getSchemaPath)(paginated_swagger_type_1.PaginatedDocumented) },
15
+ {
16
+ properties: {
17
+ data: {
18
+ type: 'array',
19
+ items: { $ref: (0, swagger_1.getSchemaPath)(dataDto) },
20
+ },
21
+ meta: {
22
+ properties: {
23
+ select: {
24
+ type: 'array',
25
+ items: {
26
+ type: 'string',
27
+ enum: paginatedConfig === null || paginatedConfig === void 0 ? void 0 : paginatedConfig.select,
28
+ },
29
+ },
30
+ filter: {
31
+ type: 'object',
32
+ properties: Object.keys(cols).reduce((acc, key) => {
33
+ acc[key] = {
34
+ oneOf: [
35
+ {
36
+ type: 'string',
37
+ },
38
+ {
39
+ type: 'array',
40
+ items: {
41
+ type: 'string',
42
+ },
43
+ },
44
+ ],
45
+ };
46
+ return acc;
47
+ }, {}),
48
+ },
49
+ },
50
+ },
51
+ },
52
+ },
53
+ ],
54
+ },
55
+ }));
56
+ };
57
+ exports.ApiOkPaginatedResponse = ApiOkPaginatedResponse;
58
+ //# sourceMappingURL=api-ok-paginated-response.decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-ok-paginated-response.decorator.js","sourceRoot":"","sources":["../../src/swagger/api-ok-paginated-response.decorator.ts"],"names":[],"mappings":";;;AAAA,2CAAsD;AACtD,6CAA8E;AAG9E,qEAA8D;AAEvD,MAAM,sBAAsB,GAAG,CAClC,OAAY;AACZ,8DAA8D;AAC9D,eAAoC,EACtC,EAAE;IACA,MAAM,IAAI,GAAG,CAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,iBAAiB,KAAI,EAAE,CAAA;IAErD,OAAO,IAAA,wBAAe,EAClB,IAAA,wBAAc,EAAC,4CAAmB,EAAE,OAAO,CAAC,EAC5C,IAAA,uBAAa,EAAC;QACV,MAAM,EAAE;YACJ,KAAK,EAAE;gBACH,EAAE,IAAI,EAAE,IAAA,uBAAa,EAAC,4CAAmB,CAAC,EAAE;gBAC5C;oBACI,UAAU,EAAE;wBACR,IAAI,EAAE;4BACF,IAAI,EAAE,OAAO;4BACb,KAAK,EAAE,EAAE,IAAI,EAAE,IAAA,uBAAa,EAAC,OAAO,CAAC,EAAE;yBAC1C;wBACD,IAAI,EAAE;4BACF,UAAU,EAAE;gCACR,MAAM,EAAE;oCACJ,IAAI,EAAE,OAAO;oCACb,KAAK,EAAE;wCACH,IAAI,EAAE,QAAQ;wCACd,IAAI,EAAE,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,MAAM;qCAChC;iCACJ;gCACD,MAAM,EAAE;oCACJ,IAAI,EAAE,QAAQ;oCACd,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAChC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;wCACT,GAAG,CAAC,GAAG,CAAC,GAAG;4CACP,KAAK,EAAE;gDACH;oDACI,IAAI,EAAE,QAAQ;iDACjB;gDACD;oDACI,IAAI,EAAE,OAAO;oDACb,KAAK,EAAE;wDACH,IAAI,EAAE,QAAQ;qDACjB;iDACJ;6CACJ;yCACJ,CAAA;wCACD,OAAO,GAAG,CAAA;oCACd,CAAC,EACD,EAAoD,CACvD;iCACJ;6BACJ;yBACJ;qBACJ;iBACJ;aACJ;SACJ;KACJ,CAAC,CACL,CAAA;AACL,CAAC,CAAA;AA1DY,QAAA,sBAAsB,0BA0DlC"}
@@ -0,0 +1,3 @@
1
+ import { PaginateConfig } from '../paginate';
2
+ export declare function SortBy(paginationConfig: PaginateConfig<any>): MethodDecorator;
3
+ export declare const ApiPaginationQuery: (paginationConfig: PaginateConfig<any>) => <TFunction extends Function, Y>(target: object | TFunction, propertyKey?: string | symbol, descriptor?: TypedPropertyDescriptor<Y>) => void;
@@ -0,0 +1,141 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ApiPaginationQuery = exports.SortBy = void 0;
4
+ const paginate_1 = require("../paginate");
5
+ const swagger_1 = require("@nestjs/swagger");
6
+ const filter_1 = require("../filter");
7
+ const common_1 = require("@nestjs/common");
8
+ const DEFAULT_VALUE_KEY = 'Default Value';
9
+ function p(key, value) {
10
+ return `<p>
11
+ <b>${key}: </b> ${value}
12
+ </p>`;
13
+ }
14
+ function li(key, values) {
15
+ return `<h4>${key}</h4><ul>${values.map((v) => `<li>${v}</li>`).join('\n')}</ul>`;
16
+ }
17
+ function SortBy(paginationConfig) {
18
+ const defaultSortMessage = paginationConfig.defaultSortBy
19
+ ? paginationConfig.defaultSortBy.map(([col, order]) => `${col}:${order}`).join(',')
20
+ : 'No default sorting specified, the result order is not guaranteed';
21
+ return (0, swagger_1.ApiQuery)({
22
+ name: 'sortBy',
23
+ isArray: true,
24
+ description: `Parameter to sort by.
25
+ <p>To sort by multiple fields, just provide query param multiple types. The order in url defines an order of sorting</p>
26
+ ${p('Format', 'fieldName:DIRECTION')}
27
+ ${p('Example', 'sortBy=id:DESC&sortBy=createdAt:ASC')}
28
+ ${p('Default Value', defaultSortMessage)}
29
+ ${li('Available Fields', paginationConfig.sortableColumns)}
30
+ `,
31
+ required: false,
32
+ type: 'string',
33
+ });
34
+ }
35
+ exports.SortBy = SortBy;
36
+ function Limit(paginationConfig) {
37
+ var _a, _b;
38
+ return (0, swagger_1.ApiQuery)({
39
+ name: 'limit',
40
+ description: `Number of records per page.
41
+ ${p('Example', '20')}
42
+ ${p(DEFAULT_VALUE_KEY, ((_a = paginationConfig === null || paginationConfig === void 0 ? void 0 : paginationConfig.defaultLimit) === null || _a === void 0 ? void 0 : _a.toString()) || paginate_1.DEFAULT_LIMIT.toString())}
43
+ ${p('Max Value', ((_b = paginationConfig.maxLimit) === null || _b === void 0 ? void 0 : _b.toString()) || paginate_1.DEFAULT_MAX_LIMIT.toString())}
44
+
45
+ If provided value is greater than max value, max value will be applied.
46
+ `,
47
+ required: false,
48
+ type: 'number',
49
+ });
50
+ }
51
+ function Select(paginationConfig) {
52
+ if (!paginationConfig.select) {
53
+ return;
54
+ }
55
+ return (0, swagger_1.ApiQuery)({
56
+ name: 'select',
57
+ description: `List of fields to select.
58
+ ${p('Example', paginationConfig.select.slice(0, Math.min(5, paginationConfig.select.length)).join(','))}
59
+ ${p(DEFAULT_VALUE_KEY, 'By default all fields returns. If you want to select only some fields, provide them in query param')}
60
+ `,
61
+ required: false,
62
+ type: 'string',
63
+ });
64
+ }
65
+ function Where(paginationConfig) {
66
+ if (!paginationConfig.filterableColumns)
67
+ return;
68
+ const allColumnsDecorators = Object.entries(paginationConfig.filterableColumns)
69
+ .map(([fieldName, filterOperations]) => {
70
+ const operations = filterOperations === true || filterOperations === undefined
71
+ ? [
72
+ ...Object.values(filter_1.FilterComparator),
73
+ ...Object.values(paginate_1.FilterSuffix),
74
+ ...Object.values(paginate_1.FilterOperator),
75
+ ]
76
+ : filterOperations.map((fo) => fo.toString());
77
+ return (0, swagger_1.ApiQuery)({
78
+ name: `filter.${fieldName}`,
79
+ description: `Filter by ${fieldName} query param.
80
+ ${p('Format', `filter.${fieldName}={$not}:OPERATION:VALUE`)}
81
+ ${p('Example', `filter.${fieldName}=$not:$like:John Doe&filter.${fieldName}=like:John`)}
82
+ ${li('Available Operations', operations)}`,
83
+ required: false,
84
+ type: 'string',
85
+ isArray: true,
86
+ });
87
+ })
88
+ .filter((v) => v !== undefined);
89
+ return (0, common_1.applyDecorators)(...allColumnsDecorators);
90
+ }
91
+ function Page() {
92
+ return (0, swagger_1.ApiQuery)({
93
+ name: 'page',
94
+ description: `Page number to retrieve.If you provide invalid value the default page number will applied
95
+ ${p('Example', '1')}
96
+ ${p(DEFAULT_VALUE_KEY, '1')}
97
+ `,
98
+ required: false,
99
+ type: 'number',
100
+ });
101
+ }
102
+ function Search(paginateConfig) {
103
+ if (!paginateConfig.searchableColumns)
104
+ return;
105
+ return (0, swagger_1.ApiQuery)({
106
+ name: 'search',
107
+ description: `Search term to filter result values
108
+ ${p('Example', 'John')}
109
+ ${p(DEFAULT_VALUE_KEY, 'No default value')}
110
+ `,
111
+ required: false,
112
+ type: 'string',
113
+ });
114
+ }
115
+ function SearchBy(paginateConfig) {
116
+ if (!paginateConfig.searchableColumns)
117
+ return;
118
+ return (0, swagger_1.ApiQuery)({
119
+ name: 'searchBy',
120
+ description: `List of fields to search by term to filter result values
121
+ ${p('Example', paginateConfig.searchableColumns.slice(0, Math.min(5, paginateConfig.searchableColumns.length)).join(','))}
122
+ ${p(DEFAULT_VALUE_KEY, 'By default all fields mentioned below will be used to search by term')}
123
+ ${li('Available Fields', paginateConfig.searchableColumns)}
124
+ `,
125
+ required: false,
126
+ type: 'string',
127
+ });
128
+ }
129
+ const ApiPaginationQuery = (paginationConfig) => {
130
+ return (0, common_1.applyDecorators)(...[
131
+ Page(),
132
+ Limit(paginationConfig),
133
+ Where(paginationConfig),
134
+ SortBy(paginationConfig),
135
+ Search(paginationConfig),
136
+ SearchBy(paginationConfig),
137
+ Select(paginationConfig),
138
+ ].filter((v) => v !== undefined));
139
+ };
140
+ exports.ApiPaginationQuery = ApiPaginationQuery;
141
+ //# sourceMappingURL=api-paginated-query.decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-paginated-query.decorator.js","sourceRoot":"","sources":["../../src/swagger/api-paginated-query.decorator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Type } from '@nestjs/common';
2
+ import { PaginateConfig } from '../paginate';
3
+ export declare function PaginatedSwaggerDocs<DTO extends Type<unknown>>(dto: DTO, paginatedConfig: PaginateConfig<any>): <TFunction extends Function, Y>(target: object | TFunction, propertyKey?: string | symbol, descriptor?: TypedPropertyDescriptor<Y>) => void;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PaginatedSwaggerDocs = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ const api_paginated_query_decorator_1 = require("./api-paginated-query.decorator");
6
+ const api_ok_paginated_response_decorator_1 = require("./api-ok-paginated-response.decorator");
7
+ function PaginatedSwaggerDocs(dto, paginatedConfig) {
8
+ return (0, common_1.applyDecorators)((0, api_ok_paginated_response_decorator_1.ApiOkPaginatedResponse)(dto, paginatedConfig), (0, api_paginated_query_decorator_1.ApiPaginationQuery)(paginatedConfig));
9
+ }
10
+ exports.PaginatedSwaggerDocs = PaginatedSwaggerDocs;
11
+ //# sourceMappingURL=api-paginated-swagger-docs.decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-paginated-swagger-docs.decorator.js","sourceRoot":"","sources":["../../src/swagger/api-paginated-swagger-docs.decorator.ts"],"names":[],"mappings":";;;AAAA,2CAAsD;AAEtD,mFAAoE;AACpE,+FAA8E;AAE9E,SAAgB,oBAAoB,CAA4B,GAAQ,EAAE,eAAoC;IAC1G,OAAO,IAAA,wBAAe,EAAC,IAAA,4DAAsB,EAAC,GAAG,EAAE,eAAe,CAAC,EAAE,IAAA,kDAAkB,EAAC,eAAe,CAAC,CAAC,CAAA;AAC7G,CAAC;AAFD,oDAEC"}
@@ -0,0 +1,4 @@
1
+ export * from './api-paginated-query.decorator';
2
+ export * from './api-ok-paginated-response.decorator';
3
+ export * from './paginated-swagger.type';
4
+ export * from './api-paginated-swagger-docs.decorator';
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./api-paginated-query.decorator"), exports);
18
+ __exportStar(require("./api-ok-paginated-response.decorator"), exports);
19
+ __exportStar(require("./paginated-swagger.type"), exports);
20
+ __exportStar(require("./api-paginated-swagger-docs.decorator"), exports);
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/swagger/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kEAA+C;AAC/C,wEAAqD;AACrD,2DAAwC;AACxC,yEAAsD"}
@@ -0,0 +1,28 @@
1
+ import { Column, SortBy } from '../helper';
2
+ import { Paginated } from '../paginate';
3
+ declare class PaginatedLinksDocumented {
4
+ first?: string;
5
+ previous?: string;
6
+ current: string;
7
+ next?: string;
8
+ last?: string;
9
+ }
10
+ export declare class PaginatedMetaDocumented<T> {
11
+ itemsPerPage: number;
12
+ totalItems: number;
13
+ currentPage: number;
14
+ totalPages: number;
15
+ sortBy: SortBy<T>;
16
+ searchBy: Column<T>[];
17
+ search: string;
18
+ select: string[];
19
+ filter?: {
20
+ [p: string]: string | string[];
21
+ };
22
+ }
23
+ export declare class PaginatedDocumented<T> extends Paginated<T> {
24
+ data: T[];
25
+ meta: PaginatedMetaDocumented<T>;
26
+ links: PaginatedLinksDocumented;
27
+ }
28
+ export {};
@@ -0,0 +1,174 @@
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.PaginatedDocumented = exports.PaginatedMetaDocumented = void 0;
13
+ const swagger_1 = require("@nestjs/swagger");
14
+ const paginate_1 = require("../paginate");
15
+ class PaginatedLinksDocumented {
16
+ }
17
+ __decorate([
18
+ (0, swagger_1.ApiProperty)({
19
+ title: 'Link to first page',
20
+ required: false,
21
+ type: 'string',
22
+ }),
23
+ __metadata("design:type", String)
24
+ ], PaginatedLinksDocumented.prototype, "first", void 0);
25
+ __decorate([
26
+ (0, swagger_1.ApiProperty)({
27
+ title: 'Link to previous page',
28
+ required: false,
29
+ type: 'string',
30
+ }),
31
+ __metadata("design:type", String)
32
+ ], PaginatedLinksDocumented.prototype, "previous", void 0);
33
+ __decorate([
34
+ (0, swagger_1.ApiProperty)({
35
+ title: 'Link to current page',
36
+ required: false,
37
+ type: 'string',
38
+ }),
39
+ __metadata("design:type", String)
40
+ ], PaginatedLinksDocumented.prototype, "current", void 0);
41
+ __decorate([
42
+ (0, swagger_1.ApiProperty)({
43
+ title: 'Link to next page',
44
+ required: false,
45
+ type: 'string',
46
+ }),
47
+ __metadata("design:type", String)
48
+ ], PaginatedLinksDocumented.prototype, "next", void 0);
49
+ __decorate([
50
+ (0, swagger_1.ApiProperty)({
51
+ title: 'Link to last page',
52
+ required: false,
53
+ type: 'string',
54
+ }),
55
+ __metadata("design:type", String)
56
+ ], PaginatedLinksDocumented.prototype, "last", void 0);
57
+ class PaginatedMetaDocumented {
58
+ }
59
+ exports.PaginatedMetaDocumented = PaginatedMetaDocumented;
60
+ __decorate([
61
+ (0, swagger_1.ApiProperty)({
62
+ title: 'Number of items per page',
63
+ required: true,
64
+ type: 'number',
65
+ }),
66
+ __metadata("design:type", Number)
67
+ ], PaginatedMetaDocumented.prototype, "itemsPerPage", void 0);
68
+ __decorate([
69
+ (0, swagger_1.ApiProperty)({
70
+ title: 'Total number of items',
71
+ required: true,
72
+ type: 'number',
73
+ }),
74
+ __metadata("design:type", Number)
75
+ ], PaginatedMetaDocumented.prototype, "totalItems", void 0);
76
+ __decorate([
77
+ (0, swagger_1.ApiProperty)({
78
+ title: 'Current requested page',
79
+ required: true,
80
+ type: 'number',
81
+ }),
82
+ __metadata("design:type", Number)
83
+ ], PaginatedMetaDocumented.prototype, "currentPage", void 0);
84
+ __decorate([
85
+ (0, swagger_1.ApiProperty)({
86
+ title: 'Total number of pages',
87
+ required: true,
88
+ type: 'number',
89
+ }),
90
+ __metadata("design:type", Number)
91
+ ], PaginatedMetaDocumented.prototype, "totalPages", void 0);
92
+ __decorate([
93
+ (0, swagger_1.ApiProperty)({
94
+ title: 'Sorting by columns',
95
+ required: false,
96
+ type: 'array',
97
+ items: {
98
+ type: 'array',
99
+ items: {
100
+ oneOf: [
101
+ {
102
+ type: 'string',
103
+ },
104
+ {
105
+ type: 'string',
106
+ enum: ['ASC', 'DESC'],
107
+ },
108
+ ],
109
+ },
110
+ },
111
+ }),
112
+ __metadata("design:type", Array)
113
+ ], PaginatedMetaDocumented.prototype, "sortBy", void 0);
114
+ __decorate([
115
+ (0, swagger_1.ApiProperty)({
116
+ title: 'Search by fields',
117
+ required: false,
118
+ isArray: true,
119
+ type: 'string',
120
+ }),
121
+ __metadata("design:type", Array)
122
+ ], PaginatedMetaDocumented.prototype, "searchBy", void 0);
123
+ __decorate([
124
+ (0, swagger_1.ApiProperty)({
125
+ title: 'Search term',
126
+ required: false,
127
+ type: 'string',
128
+ }),
129
+ __metadata("design:type", String)
130
+ ], PaginatedMetaDocumented.prototype, "search", void 0);
131
+ __decorate([
132
+ (0, swagger_1.ApiProperty)({
133
+ title: 'List of selected fields',
134
+ required: false,
135
+ isArray: true,
136
+ type: 'string',
137
+ }),
138
+ __metadata("design:type", Array)
139
+ ], PaginatedMetaDocumented.prototype, "select", void 0);
140
+ __decorate([
141
+ (0, swagger_1.ApiProperty)({
142
+ title: 'Filters that applied to the query',
143
+ required: false,
144
+ isArray: false,
145
+ type: 'object',
146
+ }),
147
+ __metadata("design:type", Object)
148
+ ], PaginatedMetaDocumented.prototype, "filter", void 0);
149
+ class PaginatedDocumented extends paginate_1.Paginated {
150
+ }
151
+ exports.PaginatedDocumented = PaginatedDocumented;
152
+ __decorate([
153
+ (0, swagger_1.ApiProperty)({
154
+ isArray: true,
155
+ required: true,
156
+ title: 'Array of entities',
157
+ }),
158
+ __metadata("design:type", Array)
159
+ ], PaginatedDocumented.prototype, "data", void 0);
160
+ __decorate([
161
+ (0, swagger_1.ApiProperty)({
162
+ title: 'Pagination Metadata',
163
+ required: true,
164
+ }),
165
+ __metadata("design:type", PaginatedMetaDocumented)
166
+ ], PaginatedDocumented.prototype, "meta", void 0);
167
+ __decorate([
168
+ (0, swagger_1.ApiProperty)({
169
+ title: 'Links to pages',
170
+ required: true,
171
+ }),
172
+ __metadata("design:type", PaginatedLinksDocumented)
173
+ ], PaginatedDocumented.prototype, "links", void 0);
174
+ //# sourceMappingURL=paginated-swagger.type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paginated-swagger.type.js","sourceRoot":"","sources":["../../src/swagger/paginated-swagger.type.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};