@koalarx/nest 0.1.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. package/core/backgroud-services/cron-service/cron-job.d.ts +14 -0
  2. package/{common → core}/backgroud-services/cron-service/cron-job.js +18 -16
  3. package/core/backgroud-services/cron-service/cron-job.spec.d.ts +8 -0
  4. package/core/backgroud-services/cron-service/cron-job.spec.js +33 -0
  5. package/core/backgroud-services/event-service/event-class.d.ts +5 -0
  6. package/{common → core}/backgroud-services/event-service/event-class.js +3 -3
  7. package/core/backgroud-services/event-service/event-handler.d.ts +5 -0
  8. package/core/backgroud-services/event-service/event-job.d.ts +13 -0
  9. package/{common → core}/backgroud-services/event-service/event-job.js +4 -2
  10. package/{common → core}/backgroud-services/event-service/event-queue.js +7 -4
  11. package/core/backgroud-services/event-service/event-queue.spec.d.ts +1 -0
  12. package/core/backgroud-services/event-service/event-queue.spec.js +34 -0
  13. package/core/controllers/created-registre-response.base.d.ts +4 -0
  14. package/core/controllers/schemas/boolean.schema.d.ts +2 -0
  15. package/core/controllers/schemas/boolean.schema.js +15 -0
  16. package/core/database/entity.base.d.ts +9 -0
  17. package/core/database/entity.base.js +39 -0
  18. package/core/database/repository.base.d.ts +6 -11
  19. package/core/database/repository.base.js +24 -21
  20. package/core/koala-app.d.ts +10 -8
  21. package/core/koala-app.js +41 -8
  22. package/core/koala-global-vars.d.ts +7 -0
  23. package/core/koala-global-vars.js +9 -0
  24. package/core/koala-nest-database.module.js +2 -2
  25. package/core/koala-nest-http.module.d.ts +3 -3
  26. package/core/koala-nest-http.module.js +5 -9
  27. package/core/koala-nest.module.js +4 -3
  28. package/core/mapping/auto-mapping-class-context.d.ts +15 -0
  29. package/core/mapping/auto-mapping-class-context.js +18 -0
  30. package/core/mapping/auto-mapping-context.d.ts +11 -0
  31. package/core/mapping/auto-mapping-context.js +24 -0
  32. package/core/mapping/auto-mapping-list.d.ts +18 -0
  33. package/core/mapping/auto-mapping-list.js +46 -0
  34. package/core/mapping/auto-mapping-profile.d.ts +3 -0
  35. package/core/mapping/auto-mapping-profile.js +6 -0
  36. package/core/mapping/auto-mapping.decorator.d.ts +9 -0
  37. package/core/mapping/auto-mapping.decorator.js +27 -0
  38. package/core/mapping/auto-mapping.module.d.ts +5 -0
  39. package/core/mapping/auto-mapping.module.js +28 -0
  40. package/core/mapping/auto-mapping.service.d.ts +10 -0
  41. package/core/mapping/auto-mapping.service.js +93 -0
  42. package/core/mapping/create-map.d.ts +3 -0
  43. package/core/mapping/create-map.js +8 -0
  44. package/core/mapping/for-member.d.ts +5 -0
  45. package/core/mapping/for-member.js +9 -0
  46. package/{common → core}/models/pagination-params.d.ts +3 -0
  47. package/{common/mediator → core/request-overflow}/request-handler.base.d.ts +1 -1
  48. package/core/request-overflow/request-result.spec.d.ts +1 -0
  49. package/core/request-overflow/request-result.spec.js +21 -0
  50. package/{common/mediator → core/request-overflow}/request-validator.base.d.ts +1 -1
  51. package/core/utils/assing-object.d.ts +2 -0
  52. package/core/utils/assing-object.js +7 -0
  53. package/core/utils/list.d.ts +10 -7
  54. package/core/utils/list.js +31 -9
  55. package/core/utils/list.spec.d.ts +1 -0
  56. package/core/utils/list.spec.js +42 -0
  57. package/{services/env → env}/env.d.ts +6 -6
  58. package/{services/env → env}/env.js +2 -2
  59. package/{services/env → env}/env.service.d.ts +2 -2
  60. package/filters/domain-errors.filter.d.ts +7 -7
  61. package/filters/domain-errors.filter.js +7 -7
  62. package/package.json +10 -27
  63. package/services/redis/redis.service.d.ts +1 -1
  64. package/services/redis/redis.service.js +1 -1
  65. package/test/koala-app-test-dependencies.d.ts +10 -0
  66. package/test/koala-app-test-dependencies.js +13 -0
  67. package/test/koala-app-test.d.ts +20 -0
  68. package/test/koala-app-test.js +66 -0
  69. package/test/repositories/in-memory-base.repository.d.ts +16 -0
  70. package/test/repositories/in-memory-base.repository.js +55 -0
  71. package/test/services/fake-logging.service.d.ts +4 -0
  72. package/test/services/fake-logging.service.js +9 -0
  73. package/test/services/fake-red-lock.service.d.ts +5 -0
  74. package/test/services/fake-red-lock.service.js +11 -0
  75. package/test/utils/create-e2e-database.d.ts +2 -0
  76. package/test/utils/create-e2e-database.js +27 -0
  77. package/test/utils/drop-e2e-database.d.ts +1 -0
  78. package/test/utils/drop-e2e-database.js +8 -0
  79. package/test/utils/wait-for.d.ts +1 -0
  80. package/test/utils/wait-for.js +22 -0
  81. package/tsconfig.lib.tsbuildinfo +1 -1
  82. package/common/backgroud-services/cron-service/cron-job.d.ts +0 -15
  83. package/common/backgroud-services/event-service/event-class.d.ts +0 -5
  84. package/common/backgroud-services/event-service/event-handler.d.ts +0 -5
  85. package/common/backgroud-services/event-service/event-job.d.ts +0 -10
  86. package/common/controllers/created-registre-response.base.d.ts +0 -4
  87. package/core/database/entity.d.ts +0 -8
  88. package/core/database/entity.js +0 -28
  89. package/decorators/is-cnpj.decorator.d.ts +0 -2
  90. package/decorators/is-cnpj.decorator.js +0 -71
  91. /package/{common → core}/backgroud-services/event-service/event-handler.js +0 -0
  92. /package/{common → core}/backgroud-services/event-service/event-is-trigger.d.ts +0 -0
  93. /package/{common → core}/backgroud-services/event-service/event-is-trigger.js +0 -0
  94. /package/{common → core}/backgroud-services/event-service/event-queue.d.ts +0 -0
  95. /package/{common → core}/controllers/base.controller.d.ts +0 -0
  96. /package/{common → core}/controllers/base.controller.js +0 -0
  97. /package/{common → core}/controllers/created-registre-response.base.js +0 -0
  98. /package/{common → core}/controllers/list-response.base.d.ts +0 -0
  99. /package/{common → core}/controllers/list-response.base.js +0 -0
  100. /package/{common → core}/controllers/router-config.base.d.ts +0 -0
  101. /package/{common → core}/controllers/router-config.base.js +0 -0
  102. /package/{common → core}/controllers/schemas/document-number.schema.d.ts +0 -0
  103. /package/{common → core}/controllers/schemas/document-number.schema.js +0 -0
  104. /package/{common → core}/controllers/schemas/email.schema.d.ts +0 -0
  105. /package/{common → core}/controllers/schemas/email.schema.js +0 -0
  106. /package/{common → core}/controllers/schemas/list-query.schema.d.ts +0 -0
  107. /package/{common → core}/controllers/schemas/list-query.schema.js +0 -0
  108. /package/{common → core}/controllers/schemas/native-enum.schema.d.ts +0 -0
  109. /package/{common → core}/controllers/schemas/native-enum.schema.js +0 -0
  110. /package/{services/prisma → core/database}/prisma-client-with-custom-transaction.interface.d.ts +0 -0
  111. /package/{services/prisma → core/database}/prisma-client-with-custom-transaction.interface.js +0 -0
  112. /package/{services/prisma → core/database}/prisma-transactional-client.d.ts +0 -0
  113. /package/{services/prisma → core/database}/prisma-transactional-client.js +0 -0
  114. /package/{services/prisma → core/database}/prisma.service.d.ts +0 -0
  115. /package/{services/prisma → core/database}/prisma.service.js +0 -0
  116. /package/{common → core}/errors/bad-request.error.d.ts +0 -0
  117. /package/{common → core}/errors/bad-request.error.js +0 -0
  118. /package/{common → core}/errors/conflict.error.d.ts +0 -0
  119. /package/{common → core}/errors/conflict.error.js +0 -0
  120. /package/{common → core}/errors/no-content.error.d.ts +0 -0
  121. /package/{common → core}/errors/no-content.error.js +0 -0
  122. /package/{common → core}/errors/not-allowed.error.d.ts +0 -0
  123. /package/{common → core}/errors/not-allowed.error.js +0 -0
  124. /package/{common → core}/errors/resource-not-found.error.d.ts +0 -0
  125. /package/{common → core}/errors/resource-not-found.error.js +0 -0
  126. /package/{common → core}/errors/use-case-error.d.ts +0 -0
  127. /package/{common → core}/errors/use-case-error.js +0 -0
  128. /package/{common → core}/errors/user-already-exist.error.d.ts +0 -0
  129. /package/{common → core}/errors/user-already-exist.error.js +0 -0
  130. /package/{common → core}/errors/wrong-credentials.error.d.ts +0 -0
  131. /package/{common → core}/errors/wrong-credentials.error.js +0 -0
  132. /package/{common → core}/models/pagination-params.js +0 -0
  133. /package/{common/mediator → core/request-overflow}/request-handler.base.js +0 -0
  134. /package/{common/mediator → core/request-overflow}/request-result.d.ts +0 -0
  135. /package/{common/mediator → core/request-overflow}/request-result.js +0 -0
  136. /package/{common/mediator → core/request-overflow}/request-validator.base.js +0 -0
  137. /package/{services/env → env}/env.module.d.ts +0 -0
  138. /package/{services/env → env}/env.module.js +0 -0
  139. /package/{services/env → env}/env.service.js +0 -0
@@ -9,9 +9,8 @@ var KoalaNestHttpModule_1;
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
10
  exports.KoalaNestHttpModule = void 0;
11
11
  const common_1 = require("@nestjs/common");
12
- const automapper_classes_1 = require("automapper-classes");
13
- const automapper_nestjs_1 = require("automapper-nestjs");
14
- const env_service_1 = require("../services/env/env.service");
12
+ const env_service_1 = require("../env/env.service");
13
+ const auto_mapping_module_1 = require("./mapping/auto-mapping.module");
15
14
  let KoalaNestHttpModule = exports.KoalaNestHttpModule = class KoalaNestHttpModule {
16
15
  static { KoalaNestHttpModule_1 = this; }
17
16
  static _config;
@@ -19,12 +18,9 @@ let KoalaNestHttpModule = exports.KoalaNestHttpModule = class KoalaNestHttpModul
19
18
  this._config = config;
20
19
  return {
21
20
  module: KoalaNestHttpModule_1,
22
- imports: [
23
- automapper_nestjs_1.AutomapperModule.forRoot({
24
- strategyInitializer: (0, automapper_classes_1.classes)(),
25
- }),
26
- ],
27
- providers: [config.automapperProfile, env_service_1.EnvService],
21
+ imports: [auto_mapping_module_1.AutoMappingModule.register(config.automapperProfile)],
22
+ providers: [env_service_1.EnvService],
23
+ exports: [auto_mapping_module_1.AutoMappingModule],
28
24
  };
29
25
  }
30
26
  configure(consumer) {
@@ -10,9 +10,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
10
10
  exports.KoalaNestModule = void 0;
11
11
  const common_1 = require("@nestjs/common");
12
12
  const config_1 = require("@nestjs/config");
13
- const env_1 = require("../services/env/env");
14
- const env_module_1 = require("../services/env/env.module");
15
- const env_service_1 = require("../services/env/env.service");
13
+ const env_1 = require("../env/env");
14
+ const env_module_1 = require("../env/env.module");
15
+ const env_service_1 = require("../env/env.service");
16
16
  const ilogging_service_1 = require("../services/logging/ilogging.service");
17
17
  const logging_service_1 = require("../services/logging/logging.service");
18
18
  const iredis_service_1 = require("../services/redis/iredis.service");
@@ -39,6 +39,7 @@ let KoalaNestModule = exports.KoalaNestModule = KoalaNestModule_1 = class KoalaN
39
39
  { provide: ired_lock_service_1.IRedLockService, useClass: red_lock_service_1.RedLockService },
40
40
  env_service_1.EnvService,
41
41
  ],
42
+ exports: [ilogging_service_1.ILoggingService, iredis_service_1.IRedisService, ired_lock_service_1.IRedLockService],
42
43
  };
43
44
  }
44
45
  };
@@ -0,0 +1,15 @@
1
+ import { Type } from '@nestjs/common';
2
+ import { IComparable, IComparableId } from '../utils/interfaces/icomparable';
3
+ import { List } from '../utils/list';
4
+ export declare class AutoMappingClassContext implements IComparable<AutoMappingClassContext> {
5
+ _id: IComparableId;
6
+ source: Type<any>;
7
+ props: List<{
8
+ name: string;
9
+ type: any;
10
+ compositionType?: Type<any> | undefined;
11
+ compositionAction?: "onlySet" | "addTo" | undefined;
12
+ }>;
13
+ constructor(source: Type<any>);
14
+ equals(obj: AutoMappingClassContext): boolean;
15
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AutoMappingClassContext = void 0;
4
+ const list_1 = require("../utils/list");
5
+ const crypto_1 = require("crypto");
6
+ class AutoMappingClassContext {
7
+ _id;
8
+ source;
9
+ props = new list_1.List();
10
+ constructor(source) {
11
+ this._id = (0, crypto_1.randomUUID)();
12
+ this.source = source;
13
+ }
14
+ equals(obj) {
15
+ return obj._id === this._id && this.source instanceof obj.source;
16
+ }
17
+ }
18
+ exports.AutoMappingClassContext = AutoMappingClassContext;
@@ -0,0 +1,11 @@
1
+ import { Type } from '@nestjs/common';
2
+ import { IComparable, IComparableId } from '../utils/interfaces/icomparable';
3
+ import { ForMemberDefinition } from './for-member';
4
+ export declare class AutoMappingContext implements IComparable<AutoMappingContext> {
5
+ source: Type<any>;
6
+ target: Type<any>;
7
+ forMemberDifinitions: ForMemberDefinition<any, any>;
8
+ _id: IComparableId;
9
+ constructor(source: Type<any>, target: Type<any>, forMemberDifinitions: ForMemberDefinition<any, any>);
10
+ equals(obj: AutoMappingContext): boolean;
11
+ }
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AutoMappingContext = void 0;
4
+ const node_crypto_1 = require("node:crypto");
5
+ class AutoMappingContext {
6
+ source;
7
+ target;
8
+ forMemberDifinitions;
9
+ _id;
10
+ constructor(source, target, forMemberDifinitions) {
11
+ this.source = source;
12
+ this.target = target;
13
+ this.forMemberDifinitions = forMemberDifinitions;
14
+ this._id = (0, node_crypto_1.randomUUID)();
15
+ this.source = source;
16
+ this.target = target;
17
+ }
18
+ equals(obj) {
19
+ return (obj._id === this._id &&
20
+ this.source instanceof obj.source &&
21
+ this.target instanceof obj.target);
22
+ }
23
+ }
24
+ exports.AutoMappingContext = AutoMappingContext;
@@ -0,0 +1,18 @@
1
+ import { Type } from '@nestjs/common';
2
+ import { AutoMappingContext } from './auto-mapping-context';
3
+ import { AutoMappingClassContext } from './auto-mapping-class-context';
4
+ import { ForMemberDefinition } from './for-member';
5
+ interface AutoMappingGetContext {
6
+ mapContext: AutoMappingContext | null;
7
+ propSourceContext: AutoMappingClassContext | null;
8
+ propTargetContext: AutoMappingClassContext | null;
9
+ }
10
+ export declare class AutoMappingList {
11
+ private static _mappedPropList;
12
+ private static _mappingProfileList;
13
+ static add(source: Type<any>, target: Type<any>, ...forMember: ForMemberDefinition<any, any>): void;
14
+ static get(source: Type<any>, target: Type<any>): AutoMappingGetContext;
15
+ static getTargets(source: Type<any>): Type<any>[];
16
+ static addMappedProp(source: Type<any>, propName: string): void;
17
+ }
18
+ export {};
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AutoMappingList = void 0;
4
+ const list_1 = require("../utils/list");
5
+ const auto_mapping_context_1 = require("./auto-mapping-context");
6
+ const auto_mapping_class_context_1 = require("./auto-mapping-class-context");
7
+ class AutoMappingList {
8
+ static _mappedPropList = new list_1.List(auto_mapping_class_context_1.AutoMappingClassContext);
9
+ static _mappingProfileList = new list_1.List(auto_mapping_context_1.AutoMappingContext);
10
+ static add(source, target, ...forMember) {
11
+ this._mappingProfileList.add(new auto_mapping_context_1.AutoMappingContext(source, target, forMember));
12
+ this._mappedPropList.add(new auto_mapping_class_context_1.AutoMappingClassContext(source));
13
+ this._mappedPropList.add(new auto_mapping_class_context_1.AutoMappingClassContext(target));
14
+ }
15
+ static get(source, target) {
16
+ return {
17
+ mapContext: this._mappingProfileList.find((mp) => mp.source === source && mp.target === target),
18
+ propSourceContext: this._mappedPropList.find((mp) => mp.source === source),
19
+ propTargetContext: this._mappedPropList.find((mp) => mp.source === target),
20
+ };
21
+ }
22
+ static getTargets(source) {
23
+ return this._mappingProfileList
24
+ .filter((mp) => mp.source === source)
25
+ .map((mp) => mp.target)
26
+ .toArray();
27
+ }
28
+ static addMappedProp(source, propName) {
29
+ let mappedClass = this._mappedPropList.find((mp) => mp.source === source);
30
+ if (!mappedClass) {
31
+ mappedClass = new auto_mapping_class_context_1.AutoMappingClassContext(source);
32
+ this._mappedPropList.add(mappedClass);
33
+ }
34
+ const metadata = Reflect.getMetadata('design:type', source.prototype, propName);
35
+ const compositionType = Reflect.getMetadata('composition:type', source.prototype, propName);
36
+ const compositionAction = Reflect.getMetadata('composition:action', source.prototype, propName);
37
+ const type = metadata?.name;
38
+ mappedClass.props.add({
39
+ name: propName,
40
+ type,
41
+ compositionType,
42
+ compositionAction,
43
+ });
44
+ }
45
+ }
46
+ exports.AutoMappingList = AutoMappingList;
@@ -0,0 +1,3 @@
1
+ export declare abstract class AutoMappingProfile {
2
+ abstract profile(): void;
3
+ }
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AutoMappingProfile = void 0;
4
+ class AutoMappingProfile {
5
+ }
6
+ exports.AutoMappingProfile = AutoMappingProfile;
@@ -0,0 +1,9 @@
1
+ import { Type } from '@nestjs/common';
2
+ interface AutoMapConfig<T> {
3
+ type?: Type<T>;
4
+ isArray?: boolean | {
5
+ addTo: boolean;
6
+ };
7
+ }
8
+ export declare function AutoMap<T>(config?: AutoMapConfig<T>): (target: any, propertyKey: string) => void;
9
+ export {};
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AutoMap = void 0;
4
+ const auto_mapping_list_1 = require("./auto-mapping-list");
5
+ function AutoMap(config) {
6
+ return function (target, propertyKey) {
7
+ const isArray = config?.isArray;
8
+ let customMetadata = config?.type;
9
+ if (!customMetadata) {
10
+ customMetadata = isArray ? Array : undefined;
11
+ }
12
+ if (customMetadata) {
13
+ if (isArray) {
14
+ Reflect.defineMetadata('composition:type', customMetadata, target, propertyKey);
15
+ Reflect.defineMetadata('composition:action', `${isArray === true || !isArray.addTo ? 'onlySet' : 'addTo'}`, target, propertyKey);
16
+ if (customMetadata !== Array) {
17
+ customMetadata = Array;
18
+ }
19
+ }
20
+ if (!Reflect.getMetadata('design:type', target, propertyKey) || !isArray) {
21
+ Reflect.defineMetadata('design:type', customMetadata, target, propertyKey);
22
+ }
23
+ }
24
+ auto_mapping_list_1.AutoMappingList.addMappedProp(target.constructor, propertyKey);
25
+ };
26
+ }
27
+ exports.AutoMap = AutoMap;
@@ -0,0 +1,5 @@
1
+ import { DynamicModule, Type } from '@nestjs/common';
2
+ import { AutoMappingProfile } from './auto-mapping-profile';
3
+ export declare class AutoMappingModule {
4
+ static register(profile: Type<AutoMappingProfile>): DynamicModule;
5
+ }
@@ -0,0 +1,28 @@
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 AutoMappingModule_1;
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.AutoMappingModule = void 0;
11
+ const common_1 = require("@nestjs/common");
12
+ const auto_mapping_profile_1 = require("./auto-mapping-profile");
13
+ const auto_mapping_service_1 = require("./auto-mapping.service");
14
+ let AutoMappingModule = exports.AutoMappingModule = AutoMappingModule_1 = class AutoMappingModule {
15
+ static register(profile) {
16
+ return {
17
+ module: AutoMappingModule_1,
18
+ providers: [
19
+ { provide: auto_mapping_profile_1.AutoMappingProfile, useClass: profile },
20
+ auto_mapping_service_1.AutoMappingService,
21
+ ],
22
+ exports: [auto_mapping_service_1.AutoMappingService],
23
+ };
24
+ }
25
+ };
26
+ exports.AutoMappingModule = AutoMappingModule = AutoMappingModule_1 = __decorate([
27
+ (0, common_1.Module)({})
28
+ ], AutoMappingModule);
@@ -0,0 +1,10 @@
1
+ import { Type } from '@nestjs/common';
2
+ import { AutoMappingProfile } from './auto-mapping-profile';
3
+ export declare class AutoMappingService {
4
+ private readonly _contextList;
5
+ constructor(automappingProfile: AutoMappingProfile);
6
+ map<S, T>(data: any, source: Type<S>, target: Type<T>): T;
7
+ private mapNestedProp;
8
+ private mapListToArray;
9
+ private mapArrayToList;
10
+ }
@@ -0,0 +1,93 @@
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.AutoMappingService = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const list_1 = require("../utils/list");
15
+ const auto_mapping_list_1 = require("./auto-mapping-list");
16
+ const auto_mapping_profile_1 = require("./auto-mapping-profile");
17
+ let AutoMappingService = exports.AutoMappingService = class AutoMappingService {
18
+ _contextList = auto_mapping_list_1.AutoMappingList;
19
+ constructor(automappingProfile) {
20
+ automappingProfile.profile();
21
+ }
22
+ map(data, source, target) {
23
+ const { mapContext, propSourceContext, propTargetContext } = this._contextList.get(source, target);
24
+ if (!mapContext) {
25
+ throw new Error(`No mapping context found for ${source.name} to ${target.name}`);
26
+ }
27
+ const mappedTarget = new target.prototype.constructor();
28
+ propSourceContext?.props.forEach((propSource) => {
29
+ const value = data[propSource.name];
30
+ const compositionType = propSource.compositionType;
31
+ const compositionAction = propSource.compositionAction;
32
+ if (value) {
33
+ const targetProp = propTargetContext?.props.find((tp) => tp.name === propSource.name);
34
+ if (targetProp) {
35
+ const listToArray = propSource.type === list_1.List.name &&
36
+ targetProp.type === Array.name &&
37
+ value instanceof list_1.List;
38
+ const arrayToList = propSource.type === Array.name &&
39
+ targetProp.type === list_1.List.name &&
40
+ value instanceof Array &&
41
+ !!compositionType;
42
+ let mappedValue = value;
43
+ if (listToArray) {
44
+ mappedValue = this.mapListToArray(value);
45
+ }
46
+ else if (arrayToList) {
47
+ mappedValue = this.mapArrayToList(value, compositionType, compositionAction === 'onlySet');
48
+ }
49
+ mappedTarget[targetProp.name] = mappedValue;
50
+ }
51
+ }
52
+ });
53
+ Object.keys(mappedTarget).forEach((key) => {
54
+ const formMemberDefinition = mapContext.forMemberDifinitions?.find((def) => def[key])?.[key];
55
+ if (formMemberDefinition) {
56
+ mappedTarget[key] = formMemberDefinition(data);
57
+ }
58
+ });
59
+ return mappedTarget;
60
+ }
61
+ mapNestedProp(data, source) {
62
+ const targets = this._contextList.getTargets(source.prototype.constructor);
63
+ if (targets.length >= 1) {
64
+ return this.map(data, source.prototype.constructor, targets[0]);
65
+ }
66
+ }
67
+ mapListToArray(value) {
68
+ return value
69
+ .toArray()
70
+ .map((item) => {
71
+ const entityOnList = value.entityType?.prototype.constructor;
72
+ if (entityOnList) {
73
+ return this.mapNestedProp(item, entityOnList) ?? {};
74
+ }
75
+ return {};
76
+ });
77
+ }
78
+ mapArrayToList(value, compositionType, onlySet = true) {
79
+ const list = new list_1.List(compositionType.prototype.constructor);
80
+ const mappedValue = value.map((item) => this.mapNestedProp(item, compositionType.prototype.constructor) ?? {});
81
+ if (onlySet) {
82
+ list.setList(mappedValue);
83
+ }
84
+ else {
85
+ list.update(mappedValue);
86
+ }
87
+ return list;
88
+ }
89
+ };
90
+ exports.AutoMappingService = AutoMappingService = __decorate([
91
+ (0, common_1.Injectable)(),
92
+ __metadata("design:paramtypes", [auto_mapping_profile_1.AutoMappingProfile])
93
+ ], AutoMappingService);
@@ -0,0 +1,3 @@
1
+ import { Type } from '@nestjs/common';
2
+ import { ForMemberDefinition } from './for-member';
3
+ export declare function createMap<TSource, TTarget>(source: Type<TSource>, target: Type<TTarget>, ...formMember: ForMemberDefinition<TTarget, TSource>): void;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createMap = void 0;
4
+ const auto_mapping_list_1 = require("./auto-mapping-list");
5
+ function createMap(source, target, ...formMember) {
6
+ auto_mapping_list_1.AutoMappingList.add(source, target, ...formMember);
7
+ }
8
+ exports.createMap = createMap;
@@ -0,0 +1,5 @@
1
+ export type ForMemberResult<TTarget, TSource> = {
2
+ [Key in keyof TTarget]: (source: TSource) => TTarget[Key];
3
+ };
4
+ export type ForMemberDefinition<TTarget, TSource> = Array<Partial<ForMemberResult<TTarget, TSource>>>;
5
+ export declare function forMember<TTarget, TSource>(targetProp: keyof TTarget, map: (source: TSource) => TTarget[keyof TTarget]): Partial<ForMemberResult<TTarget, TSource>>;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.forMember = void 0;
4
+ function forMember(targetProp, map) {
5
+ return {
6
+ [targetProp]: map,
7
+ };
8
+ }
9
+ exports.forMember = forMember;
@@ -4,6 +4,9 @@ export declare const QueryFilterParams: {
4
4
  page: number;
5
5
  limit: number;
6
6
  };
7
+ export type PaginatedRequestProps<T extends PaginationParams> = Omit<{
8
+ [K in keyof T as T[K] extends Function ? never : K]: T[K];
9
+ }, '_id'>;
7
10
  export declare class PaginationParams {
8
11
  page?: number;
9
12
  limit?: number;
@@ -1,4 +1,4 @@
1
- import { RequestResult } from '../../common/mediator/request-result';
1
+ import { RequestResult } from './request-result';
2
2
  export declare abstract class RequestHandlerBase<TRequest, TResponse extends RequestResult<Error, any>> {
3
3
  abstract handle(req: TRequest): Promise<TResponse>;
4
4
  }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const request_result_1 = require("./request-result");
4
+ function doSometing(shouldSuccess) {
5
+ if (shouldSuccess) {
6
+ return (0, request_result_1.ok)(10);
7
+ }
8
+ else {
9
+ return (0, request_result_1.failure)('error');
10
+ }
11
+ }
12
+ test('success result', () => {
13
+ const result = doSometing(true);
14
+ expect(result.isOk()).toBe(true);
15
+ expect(result.isFailure()).toBe(false);
16
+ });
17
+ test('error result', () => {
18
+ const result = doSometing(false);
19
+ expect(result.isFailure()).toBe(true);
20
+ expect(result.isOk()).toBe(false);
21
+ });
@@ -2,6 +2,6 @@ import { ZodType } from 'zod';
2
2
  export declare abstract class RequestValidatorBase<TRequest> {
3
3
  private _request;
4
4
  constructor(_request: TRequest);
5
- validate(): any;
5
+ validate(): TRequest;
6
6
  protected abstract get schema(): ZodType;
7
7
  }
@@ -0,0 +1,2 @@
1
+ import { Type } from "@nestjs/common";
2
+ export declare function assignObject<T>(target: Type<T>, source: T): T;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.assignObject = void 0;
4
+ function assignObject(target, source) {
5
+ return Object.assign(new target(), source);
6
+ }
7
+ exports.assignObject = assignObject;
@@ -1,4 +1,5 @@
1
1
  import { Type } from '@nestjs/common';
2
+ import 'reflect-metadata';
2
3
  import { IComparableId } from './interfaces/icomparable';
3
4
  export type ListActionType = 'added' | 'updated' | 'removed';
4
5
  export interface ListProps<T> {
@@ -15,18 +16,20 @@ export declare class List<T> {
15
16
  get length(): number;
16
17
  findById(id: IComparableId): T | null;
17
18
  findByValue(value: any): T | null;
18
- setList(list: T[]): void;
19
- add(item: T): void;
20
- remove(item: T): void;
21
- update(items: T[]): void;
22
- clear(): void;
23
- forEach(callback: (item: T, index: number) => void): void;
24
- forEachAsync(callback: (item: T, index: number) => Promise<void>): Promise<void[]>;
19
+ setList(list: T[]): this;
20
+ add(item: T): this | undefined;
21
+ remove(item: T): this;
22
+ update(items: T[]): this;
23
+ clear(): this;
24
+ forEach(callback: (item: T, index: number) => void): this;
25
+ forEachAsync(callback: (item: T, index: number) => Promise<void>): Promise<this>;
25
26
  map<U>(callback: (item: T, index: number) => U): List<U>;
26
27
  mapAsync<U>(callback: (item: T, index: number) => Promise<U>): Promise<List<U>>;
27
28
  filter(callback: (item: T, index: number) => boolean): List<T>;
28
29
  filterAsync(callback: (item: T, index: number) => Promise<boolean>): Promise<List<T>>;
30
+ find(callback: (item: T, index: number) => boolean): T | null;
29
31
  toArray(type?: ListActionType): T[];
30
32
  private indexOf;
31
33
  private contains;
34
+ private mapInternalIdIfIsEmpty;
32
35
  }
@@ -1,7 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.List = void 0;
4
- const entity_1 = require("../database/entity");
4
+ require("reflect-metadata");
5
+ const entity_base_1 = require("../database/entity.base");
5
6
  class List {
6
7
  entityType;
7
8
  _list = [];
@@ -16,14 +17,16 @@ class List {
16
17
  }
17
18
  findById(id) {
18
19
  return (this._list
19
- .filter((item) => item instanceof entity_1.Entity)
20
- .find((item) => item.id === id) ?? null);
20
+ .filter((item) => item instanceof entity_base_1.EntityBase)
21
+ .find((item) => item._id === id || item.id === id) ??
22
+ null);
21
23
  }
22
24
  findByValue(value) {
23
25
  return this._list.find((item) => item === value) ?? null;
24
26
  }
25
27
  setList(list) {
26
- this._list = list;
28
+ this._list = this.mapInternalIdIfIsEmpty(list);
29
+ return this;
27
30
  }
28
31
  add(item) {
29
32
  if (this.contains(item)) {
@@ -35,6 +38,7 @@ class List {
35
38
  }
36
39
  this._list.push(item);
37
40
  this._addedItemsList.push(item);
41
+ return this;
38
42
  }
39
43
  remove(item) {
40
44
  const index = this.indexOf(item);
@@ -44,22 +48,29 @@ class List {
44
48
  this._removedItemsList.push(item);
45
49
  }
46
50
  }
51
+ return this;
47
52
  }
48
53
  update(items) {
54
+ items = this.mapInternalIdIfIsEmpty(items);
49
55
  items.forEach((item) => this.add(item));
50
56
  this._list
51
57
  .filter((item) => !this.contains(item, items))
52
58
  .forEach((item) => this.remove(item));
59
+ return this;
53
60
  }
54
61
  clear() {
62
+ this._addedItemsList = [];
63
+ this._updatedItemsList = [];
55
64
  this._removedItemsList = this._list;
56
65
  this._list = [];
66
+ return this;
57
67
  }
58
68
  forEach(callback) {
59
69
  this._list.forEach(callback);
70
+ return this;
60
71
  }
61
- forEachAsync(callback) {
62
- return Promise.all(this._list.map(callback));
72
+ async forEachAsync(callback) {
73
+ return Promise.all(this._list.map(callback)).then(() => this);
63
74
  }
64
75
  map(callback) {
65
76
  const mappedItems = this._list.map(callback);
@@ -89,6 +100,9 @@ class List {
89
100
  return list;
90
101
  });
91
102
  }
103
+ find(callback) {
104
+ return this._list.find(callback) ?? null;
105
+ }
92
106
  toArray(type) {
93
107
  switch (type) {
94
108
  case 'added':
@@ -102,18 +116,26 @@ class List {
102
116
  }
103
117
  }
104
118
  indexOf(item, list = this._list) {
105
- if (item instanceof entity_1.Entity) {
119
+ if (item instanceof entity_base_1.EntityBase) {
106
120
  return list
107
- .filter((i) => i instanceof entity_1.Entity)
121
+ .filter((i) => i instanceof entity_base_1.EntityBase)
108
122
  .findIndex((i) => item._id === i._id ||
109
123
  item.id === i.id);
110
124
  }
111
125
  return list
112
- .filter((i) => !(i instanceof entity_1.Entity))
126
+ .filter((i) => !(i instanceof entity_base_1.EntityBase))
113
127
  .findIndex((i) => item === i);
114
128
  }
115
129
  contains(item, list = this._list) {
116
130
  return this.indexOf(item, list) > -1;
117
131
  }
132
+ mapInternalIdIfIsEmpty(list) {
133
+ return list.map((item) => {
134
+ if (item instanceof entity_base_1.EntityBase && !item._id) {
135
+ item._id = item.id;
136
+ }
137
+ return item;
138
+ });
139
+ }
118
140
  }
119
141
  exports.List = List;
@@ -0,0 +1 @@
1
+ export {};