@koalarx/nest 0.1.0 → 1.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/core/backgroud-services/cron-service/cron-job.d.ts +14 -0
- package/{common → core}/backgroud-services/cron-service/cron-job.js +18 -16
- package/core/backgroud-services/cron-service/cron-job.spec.d.ts +8 -0
- package/core/backgroud-services/cron-service/cron-job.spec.js +33 -0
- package/core/backgroud-services/event-service/event-class.d.ts +5 -0
- package/{common → core}/backgroud-services/event-service/event-class.js +3 -3
- package/core/backgroud-services/event-service/event-handler.d.ts +5 -0
- package/core/backgroud-services/event-service/event-job.d.ts +13 -0
- package/{common → core}/backgroud-services/event-service/event-job.js +4 -2
- package/{common → core}/backgroud-services/event-service/event-queue.js +7 -4
- package/core/backgroud-services/event-service/event-queue.spec.d.ts +1 -0
- package/core/backgroud-services/event-service/event-queue.spec.js +34 -0
- package/core/controllers/created-registre-response.base.d.ts +4 -0
- package/core/controllers/schemas/boolean.schema.d.ts +2 -0
- package/core/controllers/schemas/boolean.schema.js +15 -0
- package/core/database/entity.base.d.ts +9 -0
- package/core/database/entity.base.js +39 -0
- package/core/database/repository.base.d.ts +6 -11
- package/core/database/repository.base.js +23 -21
- package/core/koala-app.d.ts +10 -8
- package/core/koala-app.js +41 -8
- package/core/koala-global-vars.d.ts +7 -0
- package/core/koala-global-vars.js +9 -0
- package/core/koala-nest-database.module.js +2 -2
- package/core/koala-nest-http.module.d.ts +3 -3
- package/core/koala-nest-http.module.js +5 -9
- package/core/koala-nest.module.js +4 -3
- package/core/mapping/auto-mapping-class-context.d.ts +15 -0
- package/core/mapping/auto-mapping-class-context.js +18 -0
- package/core/mapping/auto-mapping-context.d.ts +11 -0
- package/core/mapping/auto-mapping-context.js +24 -0
- package/core/mapping/auto-mapping-list.d.ts +18 -0
- package/core/mapping/auto-mapping-list.js +46 -0
- package/core/mapping/auto-mapping-profile.d.ts +3 -0
- package/core/mapping/auto-mapping-profile.js +6 -0
- package/core/mapping/auto-mapping.decorator.d.ts +9 -0
- package/core/mapping/auto-mapping.decorator.js +27 -0
- package/core/mapping/auto-mapping.module.d.ts +5 -0
- package/core/mapping/auto-mapping.module.js +28 -0
- package/core/mapping/auto-mapping.service.d.ts +10 -0
- package/core/mapping/auto-mapping.service.js +93 -0
- package/core/mapping/create-map.d.ts +3 -0
- package/core/mapping/create-map.js +8 -0
- package/core/mapping/for-member.d.ts +5 -0
- package/core/mapping/for-member.js +9 -0
- package/{common → core}/models/pagination-params.d.ts +3 -0
- package/{common/mediator → core/request-overflow}/request-handler.base.d.ts +1 -1
- package/core/request-overflow/request-result.spec.d.ts +1 -0
- package/core/request-overflow/request-result.spec.js +21 -0
- package/{common/mediator → core/request-overflow}/request-validator.base.d.ts +1 -1
- package/core/utils/assing-object.d.ts +2 -0
- package/core/utils/assing-object.js +7 -0
- package/core/utils/list.d.ts +10 -7
- package/core/utils/list.js +31 -9
- package/core/utils/list.spec.d.ts +1 -0
- package/core/utils/list.spec.js +42 -0
- package/{services/env → env}/env.d.ts +6 -6
- package/{services/env → env}/env.js +2 -2
- package/{services/env → env}/env.service.d.ts +2 -2
- package/filters/domain-errors.filter.d.ts +7 -7
- package/filters/domain-errors.filter.js +7 -7
- package/package.json +10 -27
- package/services/redis/redis.service.d.ts +1 -1
- package/services/redis/redis.service.js +1 -1
- package/test/koala-app-test-dependencies.d.ts +10 -0
- package/test/koala-app-test-dependencies.js +13 -0
- package/test/koala-app-test.d.ts +20 -0
- package/test/koala-app-test.js +66 -0
- package/test/repositories/in-memory-base.repository.d.ts +16 -0
- package/test/repositories/in-memory-base.repository.js +55 -0
- package/test/services/fake-logging.service.d.ts +4 -0
- package/test/services/fake-logging.service.js +9 -0
- package/test/services/fake-red-lock.service.d.ts +5 -0
- package/test/services/fake-red-lock.service.js +11 -0
- package/test/utils/create-e2e-database.d.ts +2 -0
- package/test/utils/create-e2e-database.js +27 -0
- package/test/utils/drop-e2e-database.d.ts +1 -0
- package/test/utils/drop-e2e-database.js +8 -0
- package/test/utils/wait-for.d.ts +1 -0
- package/test/utils/wait-for.js +22 -0
- package/tsconfig.lib.tsbuildinfo +1 -1
- package/common/backgroud-services/cron-service/cron-job.d.ts +0 -15
- package/common/backgroud-services/event-service/event-class.d.ts +0 -5
- package/common/backgroud-services/event-service/event-handler.d.ts +0 -5
- package/common/backgroud-services/event-service/event-job.d.ts +0 -10
- package/common/controllers/created-registre-response.base.d.ts +0 -4
- package/core/database/entity.d.ts +0 -8
- package/core/database/entity.js +0 -28
- package/decorators/is-cnpj.decorator.d.ts +0 -2
- package/decorators/is-cnpj.decorator.js +0 -71
- /package/{common → core}/backgroud-services/event-service/event-handler.js +0 -0
- /package/{common → core}/backgroud-services/event-service/event-is-trigger.d.ts +0 -0
- /package/{common → core}/backgroud-services/event-service/event-is-trigger.js +0 -0
- /package/{common → core}/backgroud-services/event-service/event-queue.d.ts +0 -0
- /package/{common → core}/controllers/base.controller.d.ts +0 -0
- /package/{common → core}/controllers/base.controller.js +0 -0
- /package/{common → core}/controllers/created-registre-response.base.js +0 -0
- /package/{common → core}/controllers/list-response.base.d.ts +0 -0
- /package/{common → core}/controllers/list-response.base.js +0 -0
- /package/{common → core}/controllers/router-config.base.d.ts +0 -0
- /package/{common → core}/controllers/router-config.base.js +0 -0
- /package/{common → core}/controllers/schemas/document-number.schema.d.ts +0 -0
- /package/{common → core}/controllers/schemas/document-number.schema.js +0 -0
- /package/{common → core}/controllers/schemas/email.schema.d.ts +0 -0
- /package/{common → core}/controllers/schemas/email.schema.js +0 -0
- /package/{common → core}/controllers/schemas/list-query.schema.d.ts +0 -0
- /package/{common → core}/controllers/schemas/list-query.schema.js +0 -0
- /package/{common → core}/controllers/schemas/native-enum.schema.d.ts +0 -0
- /package/{common → core}/controllers/schemas/native-enum.schema.js +0 -0
- /package/{services/prisma → core/database}/prisma-client-with-custom-transaction.interface.d.ts +0 -0
- /package/{services/prisma → core/database}/prisma-client-with-custom-transaction.interface.js +0 -0
- /package/{services/prisma → core/database}/prisma-transactional-client.d.ts +0 -0
- /package/{services/prisma → core/database}/prisma-transactional-client.js +0 -0
- /package/{services/prisma → core/database}/prisma.service.d.ts +0 -0
- /package/{services/prisma → core/database}/prisma.service.js +0 -0
- /package/{common → core}/errors/bad-request.error.d.ts +0 -0
- /package/{common → core}/errors/bad-request.error.js +0 -0
- /package/{common → core}/errors/conflict.error.d.ts +0 -0
- /package/{common → core}/errors/conflict.error.js +0 -0
- /package/{common → core}/errors/no-content.error.d.ts +0 -0
- /package/{common → core}/errors/no-content.error.js +0 -0
- /package/{common → core}/errors/not-allowed.error.d.ts +0 -0
- /package/{common → core}/errors/not-allowed.error.js +0 -0
- /package/{common → core}/errors/resource-not-found.error.d.ts +0 -0
- /package/{common → core}/errors/resource-not-found.error.js +0 -0
- /package/{common → core}/errors/use-case-error.d.ts +0 -0
- /package/{common → core}/errors/use-case-error.js +0 -0
- /package/{common → core}/errors/user-already-exist.error.d.ts +0 -0
- /package/{common → core}/errors/user-already-exist.error.js +0 -0
- /package/{common → core}/errors/wrong-credentials.error.d.ts +0 -0
- /package/{common → core}/errors/wrong-credentials.error.js +0 -0
- /package/{common → core}/models/pagination-params.js +0 -0
- /package/{common/mediator → core/request-overflow}/request-handler.base.js +0 -0
- /package/{common/mediator → core/request-overflow}/request-result.d.ts +0 -0
- /package/{common/mediator → core/request-overflow}/request-result.js +0 -0
- /package/{common/mediator → core/request-overflow}/request-validator.base.js +0 -0
- /package/{services/env → env}/env.module.d.ts +0 -0
- /package/{services/env → env}/env.module.js +0 -0
- /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
|
|
13
|
-
const
|
|
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
|
-
|
|
24
|
-
|
|
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("../
|
|
14
|
-
const env_module_1 = require("../
|
|
15
|
-
const env_service_1 = require("../
|
|
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,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,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,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>>;
|
|
@@ -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 '
|
|
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
|
+
});
|
package/core/utils/list.d.ts
CHANGED
|
@@ -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[]):
|
|
19
|
-
add(item: T):
|
|
20
|
-
remove(item: T):
|
|
21
|
-
update(items: T[]):
|
|
22
|
-
clear():
|
|
23
|
-
forEach(callback: (item: T, index: number) => void):
|
|
24
|
-
forEachAsync(callback: (item: T, index: number) => Promise<void>): Promise<
|
|
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
|
}
|
package/core/utils/list.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.List = void 0;
|
|
4
|
-
|
|
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
|
|
20
|
-
.find((item) => item.id === id) ??
|
|
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
|
|
119
|
+
if (item instanceof entity_base_1.EntityBase) {
|
|
106
120
|
return list
|
|
107
|
-
.filter((i) => i instanceof
|
|
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
|
|
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 {};
|