@maioradv/nestjs-core 1.0.1 → 1.0.3

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.
Files changed (108) hide show
  1. package/README.md +7 -0
  2. package/dist/decorators/api-response-with-rels.decorator.d.ts +16 -0
  3. package/dist/decorators/api-response-with-rels.decorator.js +58 -0
  4. package/dist/decorators/index.d.ts +1 -0
  5. package/dist/decorators/index.js +17 -0
  6. package/dist/dto/clauses/index.d.ts +2 -0
  7. package/dist/dto/clauses/index.js +18 -0
  8. package/dist/dto/clauses/model.d.ts +12 -0
  9. package/dist/dto/clauses/model.js +2 -0
  10. package/dist/dto/clauses/standard-clauses.decorator.d.ts +5 -0
  11. package/dist/dto/clauses/standard-clauses.decorator.js +47 -0
  12. package/dist/dto/index.d.ts +3 -0
  13. package/dist/dto/index.js +19 -0
  14. package/dist/dto/pagination/cursor-meta.dto.d.ts +12 -0
  15. package/dist/dto/pagination/cursor-meta.dto.js +48 -0
  16. package/dist/dto/pagination/cursor-paginated.dto.d.ts +24 -0
  17. package/dist/dto/pagination/cursor-paginated.dto.js +71 -0
  18. package/dist/dto/pagination/cursor-query.dto.d.ts +11 -0
  19. package/dist/dto/pagination/cursor-query.dto.js +82 -0
  20. package/{lib/dto/pagination/index.ts → dist/dto/pagination/index.d.ts} +8 -16
  21. package/dist/dto/pagination/index.js +32 -0
  22. package/dist/dto/pagination/model.d.ts +6 -0
  23. package/dist/dto/pagination/model.js +2 -0
  24. package/dist/dto/pagination/paginated-meta.dto.d.ts +13 -0
  25. package/dist/dto/pagination/paginated-meta.dto.js +47 -0
  26. package/dist/dto/pagination/paginated-query.dto.d.ts +7 -0
  27. package/dist/dto/pagination/paginated-query.dto.js +55 -0
  28. package/dist/dto/pagination/paginated-response.decorator.d.ts +5 -0
  29. package/dist/dto/pagination/paginated-response.decorator.js +44 -0
  30. package/dist/dto/pagination/paginated.dto.d.ts +6 -0
  31. package/dist/dto/pagination/paginated.dto.js +31 -0
  32. package/dist/dto/pagination/pagination-params.decorator.d.ts +3 -0
  33. package/dist/dto/pagination/pagination-params.decorator.js +21 -0
  34. package/dist/dto/sorting/enums.d.ts +4 -0
  35. package/dist/dto/sorting/enums.js +8 -0
  36. package/dist/dto/sorting/index.d.ts +3 -0
  37. package/dist/dto/sorting/index.js +19 -0
  38. package/dist/dto/sorting/models.d.ts +25 -0
  39. package/dist/dto/sorting/models.js +46 -0
  40. package/dist/dto/sorting/sorting-params.decorator.d.ts +3 -0
  41. package/dist/dto/sorting/sorting-params.decorator.js +25 -0
  42. package/dist/errors/index.d.ts +1 -0
  43. package/dist/errors/index.js +17 -0
  44. package/dist/errors/validation.error.d.ts +5 -0
  45. package/dist/errors/validation.error.js +11 -0
  46. package/dist/filters/all-exception.filter.d.ts +4 -0
  47. package/dist/filters/all-exception.filter.js +40 -0
  48. package/dist/filters/http-exception.filter.d.ts +4 -0
  49. package/dist/filters/http-exception.filter.js +39 -0
  50. package/dist/filters/index.d.ts +3 -0
  51. package/dist/filters/index.js +19 -0
  52. package/dist/filters/validation-exception.filter.d.ts +4 -0
  53. package/dist/filters/validation-exception.filter.js +27 -0
  54. package/dist/index.d.ts +6 -0
  55. package/dist/index.js +22 -0
  56. package/dist/logger/index.d.ts +1 -0
  57. package/dist/logger/index.js +17 -0
  58. package/dist/logger/logger-factory.d.ts +4 -0
  59. package/dist/logger/logger-factory.js +43 -0
  60. package/dist/utils/chunk.helper.d.ts +1 -0
  61. package/dist/utils/chunk.helper.js +5 -0
  62. package/dist/utils/index.d.ts +5 -0
  63. package/dist/utils/index.js +21 -0
  64. package/dist/utils/path.helper.d.ts +2 -0
  65. package/dist/utils/path.helper.js +7 -0
  66. package/dist/utils/slug.helper.d.ts +8 -0
  67. package/dist/utils/slug.helper.js +23 -0
  68. package/dist/utils/storage.helper.d.ts +9 -0
  69. package/dist/utils/storage.helper.js +62 -0
  70. package/dist/utils/types.helper.d.ts +7 -0
  71. package/dist/utils/types.helper.js +2 -0
  72. package/package.json +12 -8
  73. package/index.ts +0 -1
  74. package/lib/decorators/api-response-with-rels.decorator.ts +0 -75
  75. package/lib/decorators/index.ts +0 -1
  76. package/lib/dto/clauses/index.ts +0 -2
  77. package/lib/dto/clauses/model.ts +0 -15
  78. package/lib/dto/clauses/standard-clauses.decorator.ts +0 -80
  79. package/lib/dto/index.ts +0 -3
  80. package/lib/dto/pagination/cursor-meta.dto.ts +0 -38
  81. package/lib/dto/pagination/cursor-paginated.dto.ts +0 -68
  82. package/lib/dto/pagination/cursor-query.dto.ts +0 -64
  83. package/lib/dto/pagination/model.ts +0 -7
  84. package/lib/dto/pagination/paginated-meta.dto.ts +0 -37
  85. package/lib/dto/pagination/paginated-query.dto.ts +0 -40
  86. package/lib/dto/pagination/paginated-response.decorator.ts +0 -49
  87. package/lib/dto/pagination/paginated.dto.ts +0 -15
  88. package/lib/dto/pagination/pagination-params.decorator.ts +0 -21
  89. package/lib/dto/sorting/enums.ts +0 -4
  90. package/lib/dto/sorting/index.ts +0 -3
  91. package/lib/dto/sorting/models.ts +0 -47
  92. package/lib/dto/sorting/sorting-params.decorator.ts +0 -35
  93. package/lib/errors/index.ts +0 -1
  94. package/lib/errors/validation.error.ts +0 -9
  95. package/lib/filters/all-exception.filter.ts +0 -33
  96. package/lib/filters/http-exception.filter.ts +0 -32
  97. package/lib/filters/index.ts +0 -3
  98. package/lib/filters/validation-exception.filter.ts +0 -21
  99. package/lib/index.ts +0 -6
  100. package/lib/logger/index.ts +0 -1
  101. package/lib/logger/logger-factory.ts +0 -42
  102. package/lib/utils/chunk.helper.ts +0 -4
  103. package/lib/utils/index.ts +0 -5
  104. package/lib/utils/path.helper.ts +0 -5
  105. package/lib/utils/slug.helper.ts +0 -22
  106. package/lib/utils/storage.helper.ts +0 -39
  107. package/lib/utils/types.helper.ts +0 -3
  108. package/tsconfig.json +0 -21
package/README.md CHANGED
@@ -1 +1,8 @@
1
+ ```
2
+ # build
3
+ $ yarn build
1
4
 
5
+ # publish
6
+ $ npm publish --access public
7
+
8
+ ```
@@ -0,0 +1,16 @@
1
+ import { Type } from "@nestjs/common";
2
+ import { ApiResponseMetadata } from "@nestjs/swagger";
3
+ import { WithRequired } from "../utils/types.helper";
4
+ import { ReferenceObject, SchemaObject } from "@nestjs/swagger/dist/interfaces/open-api-spec.interface";
5
+ export type TModel = Type<any> | [string, Type<any>];
6
+ export type RelationDefs = {
7
+ oneToOne?: TModel[];
8
+ oneToMany?: TModel[];
9
+ manyToMany?: [TModel, TModel | TModel[]][];
10
+ };
11
+ export type ApiReponseWithRelsOptions = WithRequired<ApiResponseMetadata, 'type'>;
12
+ export declare const ApiResponseWithRels: (options: ApiReponseWithRelsOptions, relations: RelationDefs) => <TFunction extends Function, Y>(target: object | TFunction, propertyKey?: string | symbol, descriptor?: TypedPropertyDescriptor<Y>) => void;
13
+ export declare function handleRelationsForSwagger(relations: RelationDefs): {
14
+ properties: Record<string, SchemaObject | ReferenceObject>;
15
+ extraModels: Type<any>[];
16
+ };
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleRelationsForSwagger = exports.ApiResponseWithRels = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ const swagger_1 = require("@nestjs/swagger");
6
+ const ApiResponseWithRels = (options, relations) => {
7
+ const { type, ...rest } = options;
8
+ const Model = type;
9
+ const { properties, extraModels } = handleRelationsForSwagger(relations);
10
+ return (0, common_1.applyDecorators)((0, swagger_1.ApiExtraModels)(...extraModels), (0, swagger_1.ApiResponse)({
11
+ ...rest,
12
+ schema: {
13
+ title: `${Model.name}`,
14
+ allOf: [
15
+ { $ref: (0, swagger_1.getSchemaPath)(Model) },
16
+ {
17
+ properties: properties
18
+ }
19
+ ],
20
+ }
21
+ }));
22
+ };
23
+ exports.ApiResponseWithRels = ApiResponseWithRels;
24
+ function handleRelationsForSwagger(relations) {
25
+ let properties = {};
26
+ let extraModels = [];
27
+ relations.oneToMany?.forEach((T) => {
28
+ const [name, schema] = Array.isArray(T) ? T : [T.name, T];
29
+ properties[`${name}`] = {
30
+ type: 'array',
31
+ items: { $ref: (0, swagger_1.getSchemaPath)(schema) }
32
+ };
33
+ extraModels.push(schema);
34
+ });
35
+ relations.oneToOne?.forEach((T) => {
36
+ const [name, schema] = Array.isArray(T) ? T : [T.name, T];
37
+ properties[`${name}`] = { $ref: (0, swagger_1.getSchemaPath)(schema) };
38
+ extraModels.push(schema);
39
+ });
40
+ relations.manyToMany?.forEach((TCouple) => {
41
+ const [T, S] = TCouple;
42
+ const [name, schema] = Array.isArray(T) ? T : [T.name, T];
43
+ const models = Array.isArray(S) ? S : [S];
44
+ let rels = {};
45
+ models.forEach(M => {
46
+ const [name, schema] = Array.isArray(M) ? M : [M.name, M];
47
+ rels[`${name}`] = { $ref: (0, swagger_1.getSchemaPath)(schema) };
48
+ extraModels.push(schema);
49
+ });
50
+ properties[`${name}`] = {
51
+ type: 'array',
52
+ items: { $ref: (0, swagger_1.getSchemaPath)(schema), properties: rels }
53
+ };
54
+ extraModels.push(schema);
55
+ });
56
+ return { properties, extraModels };
57
+ }
58
+ exports.handleRelationsForSwagger = handleRelationsForSwagger;
@@ -0,0 +1 @@
1
+ export * from './api-response-with-rels.decorator';
@@ -0,0 +1,17 @@
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-response-with-rels.decorator"), exports);
@@ -0,0 +1,2 @@
1
+ export * from './standard-clauses.decorator';
2
+ export * from './model';
@@ -0,0 +1,18 @@
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("./standard-clauses.decorator"), exports);
18
+ __exportStar(require("./model"), exports);
@@ -0,0 +1,12 @@
1
+ export interface DefaultClausesI {
2
+ id?: number[];
3
+ createdAt?: Date;
4
+ updatedAt?: Date;
5
+ minCreatedAt?: Date;
6
+ maxCreatedAt?: Date;
7
+ minUpdatedAt?: Date;
8
+ maxUpdatedAt?: Date;
9
+ }
10
+ export type WhereClausesOf<T, P extends keyof T = Exclude<keyof T, keyof DefaultClausesI | 'metafields' | 'translations'>> = {
11
+ [K in P]?: T[K] | T[K][];
12
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,5 @@
1
+ export declare const IsStringClause: () => <TFunction extends Function, Y>(target: object | TFunction, propertyKey?: string | symbol, descriptor?: TypedPropertyDescriptor<Y>) => void;
2
+ export declare const IsEnumClause: (model: object) => <TFunction extends Function, Y>(target: object | TFunction, propertyKey?: string | symbol, descriptor?: TypedPropertyDescriptor<Y>) => void;
3
+ export declare const IsNumberClause: () => <TFunction extends Function, Y>(target: object | TFunction, propertyKey?: string | symbol, descriptor?: TypedPropertyDescriptor<Y>) => void;
4
+ export declare const IsBooleanClause: () => <TFunction extends Function, Y>(target: object | TFunction, propertyKey?: string | symbol, descriptor?: TypedPropertyDescriptor<Y>) => void;
5
+ export declare const IsDateStringClause: () => <TFunction extends Function, Y>(target: object | TFunction, propertyKey?: string | symbol, descriptor?: TypedPropertyDescriptor<Y>) => void;
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IsDateStringClause = exports.IsBooleanClause = exports.IsNumberClause = exports.IsEnumClause = exports.IsStringClause = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ const swagger_1 = require("@nestjs/swagger");
6
+ const class_transformer_1 = require("class-transformer");
7
+ const class_validator_1 = require("class-validator");
8
+ const IsStringClause = () => {
9
+ return (0, common_1.applyDecorators)((0, swagger_1.ApiPropertyOptional)({
10
+ type: String,
11
+ description: 'Check if field contains the string'
12
+ }), (0, class_validator_1.IsOptional)(), (0, class_validator_1.IsString)());
13
+ };
14
+ exports.IsStringClause = IsStringClause;
15
+ const IsEnumClause = (model) => {
16
+ return (0, common_1.applyDecorators)((0, swagger_1.ApiPropertyOptional)({
17
+ enum: model,
18
+ description: 'A string or a comma-separated list of strings'
19
+ }), (0, class_transformer_1.Transform)(({ value }) => value.split(',')), (0, class_validator_1.IsOptional)(), (0, class_validator_1.IsEnum)(model, { each: true }), (0, class_validator_1.IsArray)());
20
+ };
21
+ exports.IsEnumClause = IsEnumClause;
22
+ const IsNumberClause = () => {
23
+ return (0, common_1.applyDecorators)((0, swagger_1.ApiPropertyOptional)({
24
+ type: Number,
25
+ description: 'A number or a comma-separated list of numbers'
26
+ }), (0, class_transformer_1.Transform)(({ value }) => value.split(',').map(str => +str)), (0, class_validator_1.IsOptional)(), (0, class_validator_1.IsNumber)({ allowNaN: false }, { each: true }), (0, class_validator_1.IsArray)());
27
+ };
28
+ exports.IsNumberClause = IsNumberClause;
29
+ const IsBooleanClause = () => {
30
+ return (0, common_1.applyDecorators)((0, swagger_1.ApiPropertyOptional)({
31
+ type: Boolean,
32
+ }), (0, class_transformer_1.Transform)(({ value }) => {
33
+ return value === 'true' ? true :
34
+ value === 'false' ? false :
35
+ value === '1' ? true :
36
+ value === '0' ? false :
37
+ value ? true : false;
38
+ }), (0, class_validator_1.IsOptional)(), (0, class_validator_1.IsBoolean)());
39
+ };
40
+ exports.IsBooleanClause = IsBooleanClause;
41
+ const IsDateStringClause = () => {
42
+ return (0, common_1.applyDecorators)((0, swagger_1.ApiPropertyOptional)({
43
+ type: Date,
44
+ description: 'A date string in ISO8601 format',
45
+ }), (0, class_transformer_1.Type)(() => Date), (0, class_validator_1.IsOptional)(), (0, class_validator_1.IsDate)());
46
+ };
47
+ exports.IsDateStringClause = IsDateStringClause;
@@ -0,0 +1,3 @@
1
+ export * from './clauses';
2
+ export * from './sorting';
3
+ export * from './pagination';
@@ -0,0 +1,19 @@
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("./clauses"), exports);
18
+ __exportStar(require("./sorting"), exports);
19
+ __exportStar(require("./pagination"), exports);
@@ -0,0 +1,12 @@
1
+ export default class CursorMetaDto {
2
+ readonly startCursor: number;
3
+ readonly endCursor: number;
4
+ readonly hasPreviousPage: boolean;
5
+ readonly hasNextPage: boolean;
6
+ constructor({ first, last, start, end }: {
7
+ first: number | undefined;
8
+ last: number | undefined;
9
+ start: number | undefined;
10
+ end: number | undefined;
11
+ });
12
+ }
@@ -0,0 +1,48 @@
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
+ const swagger_1 = require("@nestjs/swagger");
13
+ const graphql_1 = require("@nestjs/graphql");
14
+ let CursorMetaDto = class CursorMetaDto {
15
+ constructor({ first, last, start, end }) {
16
+ if (start)
17
+ this.startCursor = start;
18
+ if (end)
19
+ this.endCursor = end;
20
+ this.hasPreviousPage = start ? (start !== first) : false;
21
+ this.hasNextPage = end ? (end !== last) : false;
22
+ }
23
+ };
24
+ __decorate([
25
+ (0, swagger_1.ApiProperty)(),
26
+ (0, graphql_1.Field)(() => graphql_1.Int, { nullable: true }),
27
+ __metadata("design:type", Number)
28
+ ], CursorMetaDto.prototype, "startCursor", void 0);
29
+ __decorate([
30
+ (0, swagger_1.ApiProperty)(),
31
+ (0, graphql_1.Field)(() => graphql_1.Int, { nullable: true }),
32
+ __metadata("design:type", Number)
33
+ ], CursorMetaDto.prototype, "endCursor", void 0);
34
+ __decorate([
35
+ (0, swagger_1.ApiProperty)(),
36
+ (0, graphql_1.Field)(),
37
+ __metadata("design:type", Boolean)
38
+ ], CursorMetaDto.prototype, "hasPreviousPage", void 0);
39
+ __decorate([
40
+ (0, swagger_1.ApiProperty)(),
41
+ (0, graphql_1.Field)(),
42
+ __metadata("design:type", Boolean)
43
+ ], CursorMetaDto.prototype, "hasNextPage", void 0);
44
+ CursorMetaDto = __decorate([
45
+ (0, graphql_1.ObjectType)(),
46
+ __metadata("design:paramtypes", [Object])
47
+ ], CursorMetaDto);
48
+ exports.default = CursorMetaDto;
@@ -0,0 +1,24 @@
1
+ import { Type } from '@nestjs/common';
2
+ import CursorMetaDto from './cursor-meta.dto';
3
+ interface IEdgeType<T> {
4
+ cursor: string;
5
+ node: T;
6
+ }
7
+ export interface IPaginatedType<T> {
8
+ edges: IEdgeType<T>[];
9
+ nodes: T[];
10
+ meta: CursorMetaDto;
11
+ }
12
+ export declare function PaginatedGQL<T>(classRef: Type<T>): Type<IPaginatedType<T>>;
13
+ export type CursorMeta = {
14
+ first: number | undefined;
15
+ last: number | undefined;
16
+ };
17
+ export declare class PaginatedGQLDto<T> implements IPaginatedType<T> {
18
+ readonly edges: IEdgeType<T>[];
19
+ readonly nodes: T[];
20
+ readonly meta: CursorMetaDto;
21
+ constructor(data: T[], meta: CursorMeta);
22
+ private getEdges;
23
+ }
24
+ export {};
@@ -0,0 +1,71 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.PaginatedGQLDto = exports.PaginatedGQL = void 0;
16
+ const graphql_1 = require("@nestjs/graphql");
17
+ const cursor_meta_dto_1 = __importDefault(require("./cursor-meta.dto"));
18
+ function PaginatedGQL(classRef) {
19
+ let EdgeType = class EdgeType {
20
+ };
21
+ __decorate([
22
+ (0, graphql_1.Field)(() => String),
23
+ __metadata("design:type", String)
24
+ ], EdgeType.prototype, "cursor", void 0);
25
+ __decorate([
26
+ (0, graphql_1.Field)(() => classRef),
27
+ __metadata("design:type", Object)
28
+ ], EdgeType.prototype, "node", void 0);
29
+ EdgeType = __decorate([
30
+ (0, graphql_1.ObjectType)(`${classRef.name}Edge`)
31
+ ], EdgeType);
32
+ let PaginatedType = class PaginatedType {
33
+ };
34
+ __decorate([
35
+ (0, graphql_1.Field)(() => [EdgeType], { nullable: true }),
36
+ __metadata("design:type", Array)
37
+ ], PaginatedType.prototype, "edges", void 0);
38
+ __decorate([
39
+ (0, graphql_1.Field)(() => [classRef], { nullable: true }),
40
+ __metadata("design:type", Array)
41
+ ], PaginatedType.prototype, "nodes", void 0);
42
+ __decorate([
43
+ (0, graphql_1.Field)(() => cursor_meta_dto_1.default, { nullable: true }),
44
+ __metadata("design:type", cursor_meta_dto_1.default)
45
+ ], PaginatedType.prototype, "meta", void 0);
46
+ PaginatedType = __decorate([
47
+ (0, graphql_1.ObjectType)({ isAbstract: true })
48
+ ], PaginatedType);
49
+ return PaginatedType;
50
+ }
51
+ exports.PaginatedGQL = PaginatedGQL;
52
+ class PaginatedGQLDto {
53
+ constructor(data, meta) {
54
+ this.edges = this.getEdges(data);
55
+ this.nodes = data;
56
+ this.meta = new cursor_meta_dto_1.default({
57
+ ...meta,
58
+ start: +this.edges[0]?.cursor,
59
+ end: +this.edges[this.edges.length - 1]?.cursor
60
+ });
61
+ }
62
+ getEdges(data) {
63
+ return data.map((value) => {
64
+ return {
65
+ node: value,
66
+ cursor: value.id,
67
+ };
68
+ });
69
+ }
70
+ }
71
+ exports.PaginatedGQLDto = PaginatedGQLDto;
@@ -0,0 +1,11 @@
1
+ export default class CursorQueryDto {
2
+ readonly after?: number;
3
+ readonly before?: number;
4
+ readonly limit?: number;
5
+ get skip(): number;
6
+ get take(): number;
7
+ get order(): Record<string, any>;
8
+ get cursor(): {
9
+ id: number;
10
+ };
11
+ }
@@ -0,0 +1,82 @@
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
+ const swagger_1 = require("@nestjs/swagger");
13
+ const class_transformer_1 = require("class-transformer");
14
+ const class_validator_1 = require("class-validator");
15
+ const graphql_1 = require("@nestjs/graphql");
16
+ let CursorQueryDto = class CursorQueryDto {
17
+ constructor() {
18
+ this.limit = 50;
19
+ }
20
+ get skip() {
21
+ if (this.after || this.before)
22
+ return 1;
23
+ return 0;
24
+ }
25
+ get take() {
26
+ if (this.before)
27
+ return -this.limit;
28
+ return this.limit;
29
+ }
30
+ get order() {
31
+ return {
32
+ id: 'asc'
33
+ };
34
+ }
35
+ get cursor() {
36
+ return this.after || this.before ? {
37
+ id: this.after ?? this.before
38
+ } : undefined;
39
+ }
40
+ };
41
+ __decorate([
42
+ (0, swagger_1.ApiProperty)({
43
+ required: false,
44
+ }),
45
+ (0, graphql_1.Field)(() => graphql_1.Int, { nullable: true }),
46
+ (0, class_validator_1.IsNumber)(),
47
+ (0, class_validator_1.IsOptional)(),
48
+ (0, class_validator_1.IsInt)(),
49
+ (0, class_transformer_1.Type)(() => Number),
50
+ __metadata("design:type", Number)
51
+ ], CursorQueryDto.prototype, "after", void 0);
52
+ __decorate([
53
+ (0, swagger_1.ApiProperty)({
54
+ required: false,
55
+ }),
56
+ (0, graphql_1.Field)(() => graphql_1.Int, { nullable: true }),
57
+ (0, class_validator_1.IsNumber)(),
58
+ (0, class_validator_1.IsOptional)(),
59
+ (0, class_validator_1.IsInt)(),
60
+ (0, class_transformer_1.Type)(() => Number),
61
+ __metadata("design:type", Number)
62
+ ], CursorQueryDto.prototype, "before", void 0);
63
+ __decorate([
64
+ (0, swagger_1.ApiProperty)({
65
+ required: false,
66
+ minimum: 1,
67
+ maximum: 250,
68
+ default: 50,
69
+ }),
70
+ (0, graphql_1.Field)(() => graphql_1.Int, { nullable: true }),
71
+ (0, class_validator_1.IsNumber)(),
72
+ (0, class_validator_1.IsOptional)(),
73
+ (0, class_validator_1.IsInt)(),
74
+ (0, class_validator_1.Min)(1),
75
+ (0, class_validator_1.Max)(250),
76
+ (0, class_transformer_1.Type)(() => Number),
77
+ __metadata("design:type", Number)
78
+ ], CursorQueryDto.prototype, "limit", void 0);
79
+ CursorQueryDto = __decorate([
80
+ (0, graphql_1.ArgsType)()
81
+ ], CursorQueryDto);
82
+ exports.default = CursorQueryDto;
@@ -1,16 +1,8 @@
1
- import ApiPaginatedResponse from "./paginated-response.decorator";
2
- import PaginatedMetaDto from "./paginated-meta.dto";
3
- import PaginatedQueryDto from "./paginated-query.dto";
4
- import PaginatedDto from "./paginated.dto";
5
- import CursorQueryDto from "./cursor-query.dto";
6
- export * from './cursor-paginated.dto'
7
-
8
- export * from './model'
9
-
10
- export {
11
- ApiPaginatedResponse,
12
- PaginatedMetaDto,
13
- PaginatedQueryDto,
14
- CursorQueryDto,
15
- PaginatedDto
16
- }
1
+ import ApiPaginatedResponse from "./paginated-response.decorator";
2
+ import PaginatedMetaDto from "./paginated-meta.dto";
3
+ import PaginatedQueryDto from "./paginated-query.dto";
4
+ import PaginatedDto from "./paginated.dto";
5
+ import CursorQueryDto from "./cursor-query.dto";
6
+ export * from './cursor-paginated.dto';
7
+ export * from './model';
8
+ export { ApiPaginatedResponse, PaginatedMetaDto, PaginatedQueryDto, CursorQueryDto, PaginatedDto };
@@ -0,0 +1,32 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
17
+ return (mod && mod.__esModule) ? mod : { "default": mod };
18
+ };
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.PaginatedDto = exports.CursorQueryDto = exports.PaginatedQueryDto = exports.PaginatedMetaDto = exports.ApiPaginatedResponse = void 0;
21
+ const paginated_response_decorator_1 = __importDefault(require("./paginated-response.decorator"));
22
+ exports.ApiPaginatedResponse = paginated_response_decorator_1.default;
23
+ const paginated_meta_dto_1 = __importDefault(require("./paginated-meta.dto"));
24
+ exports.PaginatedMetaDto = paginated_meta_dto_1.default;
25
+ const paginated_query_dto_1 = __importDefault(require("./paginated-query.dto"));
26
+ exports.PaginatedQueryDto = paginated_query_dto_1.default;
27
+ const paginated_dto_1 = __importDefault(require("./paginated.dto"));
28
+ exports.PaginatedDto = paginated_dto_1.default;
29
+ const cursor_query_dto_1 = __importDefault(require("./cursor-query.dto"));
30
+ exports.CursorQueryDto = cursor_query_dto_1.default;
31
+ __exportStar(require("./cursor-paginated.dto"), exports);
32
+ __exportStar(require("./model"), exports);
@@ -0,0 +1,6 @@
1
+ export interface PaginatedQueryI {
2
+ readonly page?: number;
3
+ readonly limit?: number;
4
+ get skip(): number;
5
+ get take(): number;
6
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,13 @@
1
+ import PaginatedQueryDto from "./paginated-query.dto";
2
+ export default class PaginatedMetaDto {
3
+ readonly page: number;
4
+ readonly take: number;
5
+ readonly itemCount: number;
6
+ readonly pageCount: number;
7
+ readonly hasPreviousPage: boolean;
8
+ readonly hasNextPage: boolean;
9
+ constructor({ paginatedQueryDto, itemCount }: {
10
+ paginatedQueryDto: PaginatedQueryDto;
11
+ itemCount: number;
12
+ });
13
+ }
@@ -0,0 +1,47 @@
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
+ const swagger_1 = require("@nestjs/swagger");
13
+ class PaginatedMetaDto {
14
+ constructor({ paginatedQueryDto, itemCount }) {
15
+ this.page = paginatedQueryDto.page;
16
+ this.take = paginatedQueryDto.take;
17
+ this.itemCount = itemCount;
18
+ this.pageCount = Math.ceil(this.itemCount / this.take);
19
+ this.hasPreviousPage = this.page > 1;
20
+ this.hasNextPage = this.page < this.pageCount;
21
+ }
22
+ }
23
+ exports.default = PaginatedMetaDto;
24
+ __decorate([
25
+ (0, swagger_1.ApiProperty)(),
26
+ __metadata("design:type", Number)
27
+ ], PaginatedMetaDto.prototype, "page", void 0);
28
+ __decorate([
29
+ (0, swagger_1.ApiProperty)(),
30
+ __metadata("design:type", Number)
31
+ ], PaginatedMetaDto.prototype, "take", void 0);
32
+ __decorate([
33
+ (0, swagger_1.ApiProperty)(),
34
+ __metadata("design:type", Number)
35
+ ], PaginatedMetaDto.prototype, "itemCount", void 0);
36
+ __decorate([
37
+ (0, swagger_1.ApiProperty)(),
38
+ __metadata("design:type", Number)
39
+ ], PaginatedMetaDto.prototype, "pageCount", void 0);
40
+ __decorate([
41
+ (0, swagger_1.ApiProperty)(),
42
+ __metadata("design:type", Boolean)
43
+ ], PaginatedMetaDto.prototype, "hasPreviousPage", void 0);
44
+ __decorate([
45
+ (0, swagger_1.ApiProperty)(),
46
+ __metadata("design:type", Boolean)
47
+ ], PaginatedMetaDto.prototype, "hasNextPage", void 0);
@@ -0,0 +1,7 @@
1
+ import { PaginatedQueryI } from "./model";
2
+ export default class PaginatedQueryDto implements PaginatedQueryI {
3
+ readonly page?: number;
4
+ readonly limit?: number;
5
+ get skip(): number;
6
+ get take(): number;
7
+ }