framework-do-dede 1.0.24 → 1.0.26
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/dist/decorators/entity.d.ts +5 -0
- package/dist/decorators/entity.js +27 -3
- package/dist/decorators/index.d.ts +2 -2
- package/dist/decorators/index.js +2 -2
- package/dist/decorators/services.js +0 -6
- package/dist/domain/Entity.js +36 -3
- package/dist/handlers/controller.handler.js +1 -1
- package/dist/index.d.ts +2 -3
- package/dist/index.js +2 -3
- package/package.json +1 -1
- package/dist/utils/Testing.d.ts +0 -6
- package/dist/utils/Testing.js +0 -12
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
export declare function Restrict(): (target: any, propertyKey: string) => void;
|
|
2
|
+
export type ExposeConfig = {
|
|
3
|
+
mapping?: string | Record<string, string>;
|
|
4
|
+
deserialize?: (value: any) => any | Promise<any>;
|
|
5
|
+
};
|
|
6
|
+
export declare function Expose(configOrMapping: ExposeConfig | string): PropertyDecorator;
|
|
2
7
|
export declare function VirtualProperty(propertyName: string): (target: any, methodName: string, descriptor: PropertyDescriptor) => void;
|
|
3
8
|
type DbColumnConfig = {
|
|
4
9
|
mapping?: string | Record<string, string>;
|
|
@@ -6,13 +6,37 @@ export function Restrict() {
|
|
|
6
6
|
target.constructor._restrictedProperties.add(propertyKey);
|
|
7
7
|
};
|
|
8
8
|
}
|
|
9
|
+
export function Expose(configOrMapping) {
|
|
10
|
+
return function (target, propertyKey) {
|
|
11
|
+
const ctor = target.constructor;
|
|
12
|
+
const configs = ctor._exposeConfigs || (ctor._exposeConfigs = new Map());
|
|
13
|
+
if (typeof configOrMapping === "string") {
|
|
14
|
+
configs.set(propertyKey, [
|
|
15
|
+
...(configs.get(propertyKey) || []),
|
|
16
|
+
{
|
|
17
|
+
mapping: configOrMapping,
|
|
18
|
+
deserialize: (value) => value
|
|
19
|
+
}
|
|
20
|
+
]);
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
configs.set(propertyKey, [
|
|
24
|
+
...(configs.get(propertyKey) || []),
|
|
25
|
+
{
|
|
26
|
+
mapping: configOrMapping.mapping,
|
|
27
|
+
deserialize: configOrMapping.deserialize || ((value) => value)
|
|
28
|
+
}
|
|
29
|
+
]);
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
}
|
|
9
33
|
export function VirtualProperty(propertyName) {
|
|
10
34
|
return function (target, methodName, descriptor) {
|
|
11
35
|
const ctor = target.constructor;
|
|
12
|
-
if (!ctor.
|
|
13
|
-
ctor.
|
|
36
|
+
if (!ctor._virtualProperties) {
|
|
37
|
+
ctor._virtualProperties = new Map();
|
|
14
38
|
}
|
|
15
|
-
ctor.
|
|
39
|
+
ctor._virtualProperties.set(propertyName, methodName);
|
|
16
40
|
};
|
|
17
41
|
}
|
|
18
42
|
export function DbColumn(config) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Controller, Post, Get, Put, Delete, Patch, Validator, Middleware, Metrics, OffConsoleLog } from './controller';
|
|
2
2
|
import { Context } from './usecase';
|
|
3
3
|
import { Inject } from './di';
|
|
4
|
-
import { Restrict, DbColumn, VirtualProperty } from './entity';
|
|
4
|
+
import { Restrict, DbColumn, VirtualProperty, Expose } from './entity';
|
|
5
5
|
import { Storage } from './services';
|
|
6
|
-
export { Controller, Middleware, Validator, Metrics, OffConsoleLog, Post, Get, Put, Delete, Patch, Context, Inject, Restrict, DbColumn, Storage, VirtualProperty };
|
|
6
|
+
export { Controller, Middleware, Validator, Metrics, OffConsoleLog, Post, Get, Put, Delete, Patch, Context, Inject, Restrict, DbColumn, Storage, Expose, VirtualProperty };
|
package/dist/decorators/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Controller, Post, Get, Put, Delete, Patch, Validator, Middleware, Metrics, OffConsoleLog } from './controller';
|
|
2
2
|
import { Context } from './usecase';
|
|
3
3
|
import { Inject } from './di';
|
|
4
|
-
import { Restrict, DbColumn, VirtualProperty } from './entity';
|
|
4
|
+
import { Restrict, DbColumn, VirtualProperty, Expose } from './entity';
|
|
5
5
|
import { Storage } from './services';
|
|
6
|
-
export { Controller, Middleware, Validator, Metrics, OffConsoleLog, Post, Get, Put, Delete, Patch, Context, Inject, Restrict, DbColumn, Storage, VirtualProperty };
|
|
6
|
+
export { Controller, Middleware, Validator, Metrics, OffConsoleLog, Post, Get, Put, Delete, Patch, Context, Inject, Restrict, DbColumn, Storage, Expose, VirtualProperty };
|
|
@@ -1,13 +1,7 @@
|
|
|
1
1
|
import { Registry } from "../di/registry";
|
|
2
2
|
import { StorageGateway } from "../protocols/StorageGateway";
|
|
3
|
-
import { Log } from "../utils/Log";
|
|
4
|
-
import { Testing } from "../utils/Testing";
|
|
5
3
|
export function Storage(gatewayName) {
|
|
6
4
|
return function (target, propertyKey) {
|
|
7
|
-
if (Testing.isEnabled()) {
|
|
8
|
-
Log.info(`@Storage ${gatewayName} is ignored in testing mode`);
|
|
9
|
-
return;
|
|
10
|
-
}
|
|
11
5
|
// Verifica se a classe está registrada
|
|
12
6
|
if (!Registry.has(gatewayName)) {
|
|
13
7
|
throw new Error(`StorageGateway ${gatewayName} not registered`);
|
package/dist/domain/Entity.js
CHANGED
|
@@ -2,7 +2,8 @@ export class Entity {
|
|
|
2
2
|
async get() {
|
|
3
3
|
const ctor = this.constructor;
|
|
4
4
|
const restrictedProps = ctor._restrictedProperties || new Set();
|
|
5
|
-
const
|
|
5
|
+
const virtualProperties = ctor._virtualProperties || new Map();
|
|
6
|
+
const exposeConfigs = ctor._exposeConfigs || new Map();
|
|
6
7
|
const attributes = {};
|
|
7
8
|
await this.beforeGet();
|
|
8
9
|
for (const [key, value] of Object.entries(this)) {
|
|
@@ -10,11 +11,43 @@ export class Entity {
|
|
|
10
11
|
attributes[key] = value;
|
|
11
12
|
}
|
|
12
13
|
}
|
|
13
|
-
for (const [propName, methodName] of
|
|
14
|
+
for await (const [propName, methodName] of virtualProperties) {
|
|
14
15
|
// @ts-ignore
|
|
15
16
|
if (!restrictedProps.has(propName) && typeof this[methodName] === "function") {
|
|
16
17
|
// @ts-ignore
|
|
17
|
-
attributes[propName] = this[methodName]();
|
|
18
|
+
attributes[propName] = await this[methodName]();
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
for (const [propertyKey, configs] of exposeConfigs) {
|
|
22
|
+
if (restrictedProps.has(propertyKey))
|
|
23
|
+
continue;
|
|
24
|
+
const rawValue = this[propertyKey];
|
|
25
|
+
for (const config of configs) {
|
|
26
|
+
try {
|
|
27
|
+
let value = config.deserialize ? await config.deserialize(rawValue) : rawValue;
|
|
28
|
+
if (config.mapping) {
|
|
29
|
+
if (typeof config.mapping === "string") {
|
|
30
|
+
attributes[config.mapping] = value;
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
Object.entries(config.mapping).forEach(([srcKey, destKey]) => {
|
|
34
|
+
// @ts-ignore
|
|
35
|
+
attributes[destKey] = value[srcKey];
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
if (typeof value === "object" && value !== null) {
|
|
41
|
+
Object.assign(attributes, value);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
attributes[propertyKey] = value;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
console.error(`Error in @Expose for ${String(propertyKey)}:`, error);
|
|
50
|
+
}
|
|
18
51
|
}
|
|
19
52
|
}
|
|
20
53
|
return attributes;
|
|
@@ -112,7 +112,7 @@ export default class ControllerHandler {
|
|
|
112
112
|
if (middlewareData)
|
|
113
113
|
request.middlewareData = middlewareData;
|
|
114
114
|
try {
|
|
115
|
-
const response = await instance[instanceMethod](mergedParams, request);
|
|
115
|
+
const response = await instance[instanceMethod]({ input: mergedParams, request });
|
|
116
116
|
if (!offLogs) {
|
|
117
117
|
const endTime = performance.now();
|
|
118
118
|
Log.success(`✅ [LOG] Finish: "${logger.handler.instance}.${logger.handler.method}" - in: ${(endTime - startTime).toFixed(2)} ms`);
|
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { Dede, Register as DedeRegister, Options as DedeOptions } from './dede';
|
|
2
|
-
import { Controller, Post, Put, Get, Delete, Patch, Validator, Middleware, Context, Inject, Restrict, Metrics, DbColumn, VirtualProperty, OffConsoleLog, Storage } from './decorators';
|
|
2
|
+
import { Controller, Post, Put, Get, Delete, Patch, Validator, Middleware, Context, Inject, Restrict, Metrics, DbColumn, VirtualProperty, OffConsoleLog, Storage, Expose } from './decorators';
|
|
3
3
|
import { BadRequest, Conflict, Forbidden, HttpServer, NotFound, ServerError, Unauthorized, UnprocessableEntity } from './http';
|
|
4
4
|
import { Validation, HttpMiddleware, UseCase, CreateRepository, ExistsById, DeleteRepository, UpdateRepository, RestoreRepository, RestoreManyRepository, RequestMetricsHandler, RequestData, RequestMetrics, HttpServerError, StorageGateway } from './protocols';
|
|
5
5
|
import { Entity } from './domain/Entity';
|
|
6
|
-
import { Testing } from './utils/Testing';
|
|
7
6
|
declare class UseCaseHandler {
|
|
8
7
|
static load<T extends UseCase<any, any>>(useCaseClass: new (...args: any[]) => T, request?: RequestData): T;
|
|
9
8
|
}
|
|
10
|
-
export { UseCase, HttpMiddleware, Validation, RequestMetricsHandler, RequestMetrics, HttpServerError, CreateRepository, DeleteRepository, UpdateRepository, RestoreRepository, ExistsById, RestoreManyRepository, RequestData, Dede, DedeRegister, DedeOptions, UseCaseHandler, ServerError, BadRequest, Conflict, Forbidden, HttpServer, NotFound, Unauthorized, UnprocessableEntity, Controller, Post, Put, Get, Delete, Patch, Validator, Middleware, Context, Inject, Entity, Restrict, DbColumn, VirtualProperty, Metrics, OffConsoleLog, StorageGateway, Storage,
|
|
9
|
+
export { UseCase, HttpMiddleware, Validation, RequestMetricsHandler, RequestMetrics, HttpServerError, CreateRepository, DeleteRepository, UpdateRepository, RestoreRepository, ExistsById, RestoreManyRepository, RequestData, Dede, DedeRegister, DedeOptions, UseCaseHandler, ServerError, BadRequest, Conflict, Forbidden, HttpServer, NotFound, Unauthorized, UnprocessableEntity, Controller, Post, Put, Get, Delete, Patch, Validator, Middleware, Context, Inject, Entity, Restrict, DbColumn, VirtualProperty, Metrics, OffConsoleLog, StorageGateway, Storage, Expose };
|
package/dist/index.js
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { Dede } from './dede';
|
|
2
|
-
import { Controller, Post, Put, Get, Delete, Patch, Validator, Middleware, Context, Inject, Restrict, Metrics, DbColumn, VirtualProperty, OffConsoleLog, Storage } from './decorators';
|
|
2
|
+
import { Controller, Post, Put, Get, Delete, Patch, Validator, Middleware, Context, Inject, Restrict, Metrics, DbColumn, VirtualProperty, OffConsoleLog, Storage, Expose } from './decorators';
|
|
3
3
|
import { BadRequest, Conflict, Forbidden, HttpServer, NotFound, ServerError, Unauthorized, UnprocessableEntity } from './http';
|
|
4
4
|
import { Registry } from './di/registry';
|
|
5
5
|
import { Entity } from './domain/Entity';
|
|
6
|
-
import { Testing } from './utils/Testing';
|
|
7
6
|
class UseCaseHandler {
|
|
8
7
|
static load(useCaseClass, request) {
|
|
9
8
|
const instance = Registry.classLoader(useCaseClass);
|
|
@@ -17,4 +16,4 @@ class UseCaseHandler {
|
|
|
17
16
|
return instance;
|
|
18
17
|
}
|
|
19
18
|
}
|
|
20
|
-
export { Dede, UseCaseHandler, ServerError, BadRequest, Conflict, Forbidden, HttpServer, NotFound, Unauthorized, UnprocessableEntity, Controller, Post, Put, Get, Delete, Patch, Validator, Middleware, Context, Inject, Entity, Restrict, DbColumn, VirtualProperty, Metrics, OffConsoleLog, Storage,
|
|
19
|
+
export { Dede, UseCaseHandler, ServerError, BadRequest, Conflict, Forbidden, HttpServer, NotFound, Unauthorized, UnprocessableEntity, Controller, Post, Put, Get, Delete, Patch, Validator, Middleware, Context, Inject, Entity, Restrict, DbColumn, VirtualProperty, Metrics, OffConsoleLog, Storage, Expose };
|
package/package.json
CHANGED
package/dist/utils/Testing.d.ts
DELETED