framework-do-dede 5.4.11 → 5.5.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.
- package/README.md +33 -0
- package/dist/application/controller.d.ts +1 -0
- package/dist/application/controller.js +13 -0
- package/dist/application/index.d.ts +2 -2
- package/dist/application/index.js +2 -2
- package/dist/dede.d.ts +6 -2
- package/dist/dede.js +27 -6
- package/dist/http/controller.handler.d.ts +11 -1
- package/dist/http/controller.handler.js +40 -3
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/interface/validation/class-validator.d.ts +1 -1
- package/dist/interface/validation/class-validator.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -100,6 +100,7 @@ Decorators disponíveis:
|
|
|
100
100
|
|
|
101
101
|
- `@Controller(basePath?: string)`
|
|
102
102
|
- `@Get`, `@Post`, `@Put`, `@Patch`, `@Delete`
|
|
103
|
+
- `@Version(version: number)`
|
|
103
104
|
|
|
104
105
|
Opções de rota (comuns):
|
|
105
106
|
|
|
@@ -110,6 +111,38 @@ Opções de rota (comuns):
|
|
|
110
111
|
- `responseType`: `"json" | "text" | "html"`
|
|
111
112
|
- `validator`: pode ser uma classe com decorators do `class-validator` **ou** um objeto com `validate(data)` (sync/async)
|
|
112
113
|
|
|
114
|
+
### Versionamento e Prefixo
|
|
115
|
+
|
|
116
|
+
Você pode definir um prefixo e uma versão global ao criar a aplicação. A versão vira `v{numero}` logo após o prefixo (se existir):
|
|
117
|
+
|
|
118
|
+
```ts
|
|
119
|
+
const app = await Dede.create({
|
|
120
|
+
framework: { use: 'express', port: 3000 },
|
|
121
|
+
registries: [],
|
|
122
|
+
prefix: '/api',
|
|
123
|
+
version: 1
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
// rota final: /api/v1/users/list
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
Para sobrescrever a versão global em um controller ou método, use `@Version`:
|
|
130
|
+
|
|
131
|
+
```ts
|
|
132
|
+
import { Controller, Get, Version } from './src';
|
|
133
|
+
|
|
134
|
+
@Version(2)
|
|
135
|
+
@Controller('/users')
|
|
136
|
+
class UsersController {
|
|
137
|
+
@Get({ path: '/list' })
|
|
138
|
+
async list() {}
|
|
139
|
+
|
|
140
|
+
@Version(3)
|
|
141
|
+
@Get({ path: '/featured' })
|
|
142
|
+
async featured() {}
|
|
143
|
+
}
|
|
144
|
+
```
|
|
145
|
+
|
|
113
146
|
### Input, params e filtros
|
|
114
147
|
|
|
115
148
|
O framework compõe um objeto `request.data` a partir de:
|
|
@@ -29,6 +29,7 @@ export interface Input<T, K = any> {
|
|
|
29
29
|
type BodyFilter = "restrict" | "none";
|
|
30
30
|
export declare function Controller(basePath?: string): (target: any) => void;
|
|
31
31
|
export declare function Tracing<R>(tracer: Tracer<R>): (target: any, propertyKey?: string) => void;
|
|
32
|
+
export declare function Version(version: number): (target: any, propertyKey?: string) => void;
|
|
32
33
|
export declare function UseMiddleware(middlewareClass: MiddlewareDefinition): (target: any, propertyKey: string, descriptor: PropertyDescriptor) => void;
|
|
33
34
|
export declare function UseMiddlewares(middlewareClasses: MiddlewareDefinition[]): (target: any, propertyKey: string, descriptor: PropertyDescriptor) => void;
|
|
34
35
|
export declare function Post(config?: {
|
|
@@ -17,6 +17,19 @@ export function Tracing(tracer) {
|
|
|
17
17
|
}
|
|
18
18
|
};
|
|
19
19
|
}
|
|
20
|
+
export function Version(version) {
|
|
21
|
+
return function (target, propertyKey) {
|
|
22
|
+
if (!Number.isInteger(version) || version <= 0) {
|
|
23
|
+
throw new FrameworkError('Version must be a positive integer');
|
|
24
|
+
}
|
|
25
|
+
if (!propertyKey) {
|
|
26
|
+
Reflect.defineMetadata('version', version, target);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
Reflect.defineMetadata('version', version, target, propertyKey);
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
}
|
|
20
33
|
function isClass(fn) {
|
|
21
34
|
return /^\s*class\s/.test(Function.prototype.toString.call(fn));
|
|
22
35
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { Controller, Post, Get, Put, Delete, Patch, UseMiddleware, UseMiddlewares, Tracing, type Middleware, type Input, type Tracer, type TracerData } from './controller';
|
|
1
|
+
import { Controller, Post, Get, Put, Delete, Patch, UseMiddleware, UseMiddlewares, Tracing, Version, type Middleware, type Input, type Tracer, type TracerData } from './controller';
|
|
2
2
|
import { Entity, Restrict, VirtualProperty, GetterPrefix, Transform } from '../infra/serialization/entity';
|
|
3
3
|
import { Model, model, column } from '../infra/model/model';
|
|
4
4
|
import { DecorateUseCase, UseCase, Hook, BeforeHook, AfterHook, HookBefore, HookAfter } from './usecase';
|
|
5
|
-
export { Controller, UseMiddleware, UseMiddlewares, Post, Get, Put, Delete, Patch, Tracing, DecorateUseCase, UseCase, Hook, BeforeHook, AfterHook, HookBefore, HookAfter, Entity, Restrict, VirtualProperty, GetterPrefix, Transform, Model, model, column, };
|
|
5
|
+
export { Controller, UseMiddleware, UseMiddlewares, Post, Get, Put, Delete, Patch, Tracing, Version, DecorateUseCase, UseCase, Hook, BeforeHook, AfterHook, HookBefore, HookAfter, Entity, Restrict, VirtualProperty, GetterPrefix, Transform, Model, model, column, };
|
|
6
6
|
export { Storage, CacheGateway, EventDispatcher } from './services';
|
|
7
7
|
export type { Middleware, Input, Tracer, TracerData };
|
|
8
8
|
export type { StorageGateway } from './services';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Controller, Post, Get, Put, Delete, Patch, UseMiddleware, UseMiddlewares, Tracing } from './controller';
|
|
1
|
+
import { Controller, Post, Get, Put, Delete, Patch, UseMiddleware, UseMiddlewares, Tracing, Version } from './controller';
|
|
2
2
|
import { Entity, Restrict, VirtualProperty, GetterPrefix, Transform } from '../infra/serialization/entity';
|
|
3
3
|
import { Model, model, column } from '../infra/model/model';
|
|
4
4
|
import { DecorateUseCase, UseCase, Hook, BeforeHook, AfterHook, HookBefore, HookAfter, } from './usecase';
|
|
5
|
-
export { Controller, UseMiddleware, UseMiddlewares, Post, Get, Put, Delete, Patch, Tracing, DecorateUseCase, UseCase, Hook, BeforeHook, AfterHook, HookBefore, HookAfter, Entity, Restrict, VirtualProperty, GetterPrefix, Transform, Model, model, column, };
|
|
5
|
+
export { Controller, UseMiddleware, UseMiddlewares, Post, Get, Put, Delete, Patch, Tracing, Version, DecorateUseCase, UseCase, Hook, BeforeHook, AfterHook, HookBefore, HookAfter, Entity, Restrict, VirtualProperty, GetterPrefix, Transform, Model, model, column, };
|
|
6
6
|
export { Storage, CacheGateway, EventDispatcher } from './services';
|
package/dist/dede.d.ts
CHANGED
|
@@ -13,6 +13,8 @@ export type Options = {
|
|
|
13
13
|
registries: Register[];
|
|
14
14
|
defaultServerError?: string;
|
|
15
15
|
container?: Container;
|
|
16
|
+
prefix?: string;
|
|
17
|
+
version?: number;
|
|
16
18
|
};
|
|
17
19
|
export declare class Dede {
|
|
18
20
|
private readonly framework;
|
|
@@ -21,9 +23,11 @@ export declare class Dede {
|
|
|
21
23
|
private readonly httpServer;
|
|
22
24
|
private readonly port?;
|
|
23
25
|
private controllersRegistered;
|
|
26
|
+
private readonly prefix?;
|
|
27
|
+
private readonly version?;
|
|
24
28
|
private constructor();
|
|
25
|
-
static create({ framework, registries, defaultServerError, container }: Options): Promise<Dede>;
|
|
26
|
-
static start({ framework, registries, defaultServerError, container, controllers }: Options): Promise<Dede>;
|
|
29
|
+
static create({ framework, registries, defaultServerError, container, prefix, version }: Options): Promise<Dede>;
|
|
30
|
+
static start({ framework, registries, defaultServerError, container, controllers, prefix, version }: Options): Promise<Dede>;
|
|
27
31
|
stop(): Promise<void>;
|
|
28
32
|
registerControllers(controllers: any[]): void;
|
|
29
33
|
listen(port?: number): void;
|
package/dist/dede.js
CHANGED
|
@@ -2,13 +2,16 @@ import ControllerHandler from "./http/controller.handler";
|
|
|
2
2
|
import { ElysiaServerAdapter } from "./http/elysia-server.adapter";
|
|
3
3
|
import { ExpressServerAdapter } from "./http/express-server.adapter";
|
|
4
4
|
import { Container, DefaultContainer, setDefaultContainer } from "./infra/di/registry";
|
|
5
|
+
import { FrameworkError } from "./http/errors/framework";
|
|
5
6
|
export class Dede {
|
|
6
|
-
constructor(framework, defaultServerError, container = DefaultContainer) {
|
|
7
|
+
constructor(framework, defaultServerError, container = DefaultContainer, prefix, version) {
|
|
7
8
|
this.framework = framework;
|
|
8
9
|
this.defaultServerError = defaultServerError;
|
|
9
10
|
this.container = container;
|
|
10
11
|
this.controllersRegistered = false;
|
|
11
12
|
this.port = framework.port;
|
|
13
|
+
this.prefix = normalizePrefix(prefix);
|
|
14
|
+
this.version = version;
|
|
12
15
|
if (framework.use === 'elysia') {
|
|
13
16
|
this.httpServer = new ElysiaServerAdapter(framework.middlewares || []);
|
|
14
17
|
}
|
|
@@ -18,14 +21,15 @@ export class Dede {
|
|
|
18
21
|
if (defaultServerError)
|
|
19
22
|
this.httpServer.setDefaultMessageError(defaultServerError);
|
|
20
23
|
}
|
|
21
|
-
static async create({ framework, registries, defaultServerError, container }) {
|
|
24
|
+
static async create({ framework, registries, defaultServerError, container, prefix, version }) {
|
|
25
|
+
assertValidVersion(version);
|
|
22
26
|
const appContainer = container ?? new Container();
|
|
23
27
|
setDefaultContainer(appContainer);
|
|
24
28
|
await this.loadRegistries(appContainer, registries);
|
|
25
|
-
return new Dede(framework, defaultServerError, appContainer);
|
|
29
|
+
return new Dede(framework, defaultServerError, appContainer, prefix, version);
|
|
26
30
|
}
|
|
27
|
-
static async start({ framework, registries, defaultServerError, container, controllers }) {
|
|
28
|
-
const app = await Dede.create({ framework, registries, defaultServerError, container, controllers });
|
|
31
|
+
static async start({ framework, registries, defaultServerError, container, controllers, prefix, version }) {
|
|
32
|
+
const app = await Dede.create({ framework, registries, defaultServerError, container, controllers, prefix, version });
|
|
29
33
|
if (controllers && controllers.length > 0) {
|
|
30
34
|
app.registerControllers(controllers);
|
|
31
35
|
}
|
|
@@ -38,7 +42,7 @@ export class Dede {
|
|
|
38
42
|
registerControllers(controllers) {
|
|
39
43
|
if (this.controllersRegistered)
|
|
40
44
|
return;
|
|
41
|
-
new ControllerHandler(this.httpServer, controllers);
|
|
45
|
+
new ControllerHandler(this.httpServer, controllers, { prefix: this.prefix, version: this.version });
|
|
42
46
|
this.controllersRegistered = true;
|
|
43
47
|
}
|
|
44
48
|
listen(port) {
|
|
@@ -51,3 +55,20 @@ export class Dede {
|
|
|
51
55
|
});
|
|
52
56
|
}
|
|
53
57
|
}
|
|
58
|
+
function assertValidVersion(version) {
|
|
59
|
+
if (version === undefined)
|
|
60
|
+
return;
|
|
61
|
+
if (!Number.isInteger(version) || version <= 0) {
|
|
62
|
+
throw new FrameworkError('Version must be a positive integer');
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
function normalizePrefix(prefix) {
|
|
66
|
+
if (!prefix)
|
|
67
|
+
return undefined;
|
|
68
|
+
const trimmed = prefix.trim();
|
|
69
|
+
if (!trimmed)
|
|
70
|
+
return undefined;
|
|
71
|
+
if (trimmed === '/')
|
|
72
|
+
return '/';
|
|
73
|
+
return trimmed.endsWith('/') ? trimmed.slice(0, -1) : trimmed;
|
|
74
|
+
}
|
|
@@ -3,7 +3,17 @@ export default class ControllerHandler {
|
|
|
3
3
|
private readonly requestMapper;
|
|
4
4
|
private readonly middlewareExecutor;
|
|
5
5
|
private readonly errorMapper;
|
|
6
|
-
|
|
6
|
+
private readonly prefix?;
|
|
7
|
+
private readonly version?;
|
|
8
|
+
constructor(httpServer: HttpServer, controllers?: any[], options?: {
|
|
9
|
+
prefix?: string;
|
|
10
|
+
version?: number;
|
|
11
|
+
});
|
|
7
12
|
private registryControllers;
|
|
8
13
|
private resolveMiddleware;
|
|
14
|
+
private buildRoute;
|
|
15
|
+
private joinSegments;
|
|
16
|
+
private trimLeadingSlash;
|
|
17
|
+
private trimTrailingSlash;
|
|
18
|
+
private trimSlashes;
|
|
9
19
|
}
|
|
@@ -4,10 +4,12 @@ import { MiddlewareExecutor } from "../interface/http/middleware-executor";
|
|
|
4
4
|
import { HttpErrorMapper } from "../interface/errors/http-error-mapper";
|
|
5
5
|
import { validateWithClassValidator } from "../interface/validation/class-validator";
|
|
6
6
|
export default class ControllerHandler {
|
|
7
|
-
constructor(httpServer, controllers = []) {
|
|
7
|
+
constructor(httpServer, controllers = [], options = {}) {
|
|
8
8
|
this.requestMapper = new HttpRequestMapper();
|
|
9
9
|
this.middlewareExecutor = new MiddlewareExecutor();
|
|
10
10
|
this.errorMapper = new HttpErrorMapper();
|
|
11
|
+
this.prefix = options.prefix;
|
|
12
|
+
this.version = options.version;
|
|
11
13
|
for (const { handler, middlewares, validator, method, route, statusCode, params, query, headers, body, bodyFilter, responseType } of this.registryControllers(controllers)) {
|
|
12
14
|
httpServer.register({
|
|
13
15
|
method,
|
|
@@ -42,7 +44,7 @@ export default class ControllerHandler {
|
|
|
42
44
|
validatorLike = validator;
|
|
43
45
|
}
|
|
44
46
|
if (typeof validatorLike === 'function') {
|
|
45
|
-
await validateWithClassValidator(validatorLike, request.data, options);
|
|
47
|
+
request.data = await validateWithClassValidator(validatorLike, request.data, options);
|
|
46
48
|
}
|
|
47
49
|
else if (typeof validatorLike.validate === 'function') {
|
|
48
50
|
await validatorLike.validate(request.data);
|
|
@@ -94,15 +96,19 @@ export default class ControllerHandler {
|
|
|
94
96
|
const basePath = Reflect.getMetadata('basePath', controller);
|
|
95
97
|
const methodNames = Object.getOwnPropertyNames(controller.prototype).filter(method => method !== 'constructor');
|
|
96
98
|
let tracer = Reflect.getMetadata('tracer', controller) || null;
|
|
99
|
+
const controllerVersion = Reflect.getMetadata('version', controller);
|
|
97
100
|
const instance = new controller();
|
|
98
101
|
for (const methodName of methodNames) {
|
|
99
102
|
const routeConfig = Reflect.getMetadata('route', controller.prototype, methodName);
|
|
100
103
|
const middlewares = Reflect.getMetadata('middlewares', controller.prototype, methodName);
|
|
101
104
|
const responseType = Reflect.getMetadata('responseType', controller.prototype, methodName) || 'json';
|
|
102
105
|
tracer = Reflect.getMetadata('tracer', controller.prototype, methodName) || tracer;
|
|
106
|
+
const methodVersion = Reflect.getMetadata('version', controller.prototype, methodName);
|
|
107
|
+
const resolvedVersion = methodVersion ?? controllerVersion ?? this.version;
|
|
108
|
+
const route = this.buildRoute(basePath + routeConfig.path, resolvedVersion, this.prefix);
|
|
103
109
|
controllers.push({
|
|
104
110
|
method: routeConfig.method,
|
|
105
|
-
route
|
|
111
|
+
route,
|
|
106
112
|
params: routeConfig.params,
|
|
107
113
|
query: routeConfig.query,
|
|
108
114
|
headers: routeConfig.headers,
|
|
@@ -143,6 +149,37 @@ export default class ControllerHandler {
|
|
|
143
149
|
}
|
|
144
150
|
return middleware;
|
|
145
151
|
}
|
|
152
|
+
buildRoute(baseRoute, version, prefix) {
|
|
153
|
+
let route = baseRoute;
|
|
154
|
+
if (version !== undefined) {
|
|
155
|
+
route = this.joinSegments(`v${version}`, route);
|
|
156
|
+
}
|
|
157
|
+
if (prefix) {
|
|
158
|
+
route = this.joinSegments(prefix, route);
|
|
159
|
+
}
|
|
160
|
+
return route;
|
|
161
|
+
}
|
|
162
|
+
joinSegments(left, right) {
|
|
163
|
+
const normalizedLeft = this.trimSlashes(left);
|
|
164
|
+
const normalizedRight = this.trimLeadingSlash(right);
|
|
165
|
+
const combined = [normalizedLeft, normalizedRight].filter(Boolean).join('/');
|
|
166
|
+
return combined ? `/${combined}` : '/';
|
|
167
|
+
}
|
|
168
|
+
trimLeadingSlash(value) {
|
|
169
|
+
return value.startsWith('/') ? value.slice(1) : value;
|
|
170
|
+
}
|
|
171
|
+
trimTrailingSlash(value) {
|
|
172
|
+
if (value === '/')
|
|
173
|
+
return '';
|
|
174
|
+
return value.endsWith('/') ? value.slice(0, -1) : value;
|
|
175
|
+
}
|
|
176
|
+
trimSlashes(value) {
|
|
177
|
+
if (value === '/')
|
|
178
|
+
return '';
|
|
179
|
+
let trimmed = this.trimLeadingSlash(value);
|
|
180
|
+
trimmed = this.trimTrailingSlash(trimmed);
|
|
181
|
+
return trimmed;
|
|
182
|
+
}
|
|
146
183
|
}
|
|
147
184
|
function isValidatorDefinition(value) {
|
|
148
185
|
return !!value && typeof value === 'object' && 'validator' in value;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Post, Get, Put, Delete, Patch, Controller, Input, Middleware, UseMiddleware, UseMiddlewares, Tracer, Tracing, TracerData, Entity, Restrict, VirtualProperty, GetterPrefix, Transform, Model, model, column, UseCase, DecorateUseCase, Hook, BeforeHook, AfterHook, HookBefore, HookAfter, Storage, CacheGateway, EventDispatcher } from "./application";
|
|
1
|
+
import { Post, Get, Put, Delete, Patch, Controller, Input, Version, Middleware, UseMiddleware, UseMiddlewares, Tracer, Tracing, TracerData, Entity, Restrict, VirtualProperty, GetterPrefix, Transform, Model, model, column, UseCase, DecorateUseCase, Hook, BeforeHook, AfterHook, HookBefore, HookAfter, Storage, CacheGateway, EventDispatcher } from "./application";
|
|
2
2
|
import { Container, DefaultContainer, Inject, setDefaultContainer } from './infra/di/registry';
|
|
3
3
|
import { Dede, type Options, Register } from './dede';
|
|
4
4
|
import { ServerError, NotFound, Forbidden, Conflict, Unauthorized, UnprocessableEntity, BadRequest, InternalServerError, CustomServerError } from './http/errors/server';
|
|
@@ -6,5 +6,5 @@ import { AppError } from './domain/errors/app-error';
|
|
|
6
6
|
import type { ValidatorDefinition } from './interface/validation/validator';
|
|
7
7
|
import type { StorageGateway, Event, EventPayload } from './application';
|
|
8
8
|
import type { RepositoryCreate, RepositoryUpdate, RepositoryRemove, RepositoryRemoveBy, RepositoryExistsBy, RepositoryRestore, RepositoryRestoreBy, RepositoryNotExistsBy, RepositoryPagination } from './protocols/repository';
|
|
9
|
-
export { Controller, Post, Get, Put, Delete, Patch, Input, Middleware, UseMiddleware, UseMiddlewares, Tracer, Tracing, TracerData, Entity, Restrict, VirtualProperty, GetterPrefix, Transform, Model, model, column, UseCase, DecorateUseCase, Hook, BeforeHook, AfterHook, HookBefore, HookAfter, Storage, CacheGateway, EventDispatcher, Inject, Container, DefaultContainer, setDefaultContainer, Dede, Options, Register, ServerError, NotFound, Forbidden, Conflict, Unauthorized, UnprocessableEntity, BadRequest, InternalServerError, CustomServerError, AppError, RepositoryCreate, RepositoryUpdate, RepositoryRemove, RepositoryRemoveBy, RepositoryRestore, RepositoryExistsBy, RepositoryRestoreBy, RepositoryNotExistsBy, RepositoryPagination };
|
|
9
|
+
export { Controller, Post, Get, Put, Delete, Patch, Input, Version, Middleware, UseMiddleware, UseMiddlewares, Tracer, Tracing, TracerData, Entity, Restrict, VirtualProperty, GetterPrefix, Transform, Model, model, column, UseCase, DecorateUseCase, Hook, BeforeHook, AfterHook, HookBefore, HookAfter, Storage, CacheGateway, EventDispatcher, Inject, Container, DefaultContainer, setDefaultContainer, Dede, Options, Register, ServerError, NotFound, Forbidden, Conflict, Unauthorized, UnprocessableEntity, BadRequest, InternalServerError, CustomServerError, AppError, RepositoryCreate, RepositoryUpdate, RepositoryRemove, RepositoryRemoveBy, RepositoryRestore, RepositoryExistsBy, RepositoryRestoreBy, RepositoryNotExistsBy, RepositoryPagination };
|
|
10
10
|
export type { ValidatorDefinition, StorageGateway, Event, EventPayload };
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
// controller
|
|
3
|
-
Post, Get, Put, Delete, Patch, Controller, UseMiddleware, UseMiddlewares, Tracing,
|
|
3
|
+
Post, Get, Put, Delete, Patch, Controller, Version, UseMiddleware, UseMiddlewares, Tracing,
|
|
4
4
|
// controller
|
|
5
5
|
// entity
|
|
6
6
|
Entity, Restrict, VirtualProperty, GetterPrefix, Transform, Model, model, column,
|
|
@@ -16,4 +16,4 @@ import { Container, DefaultContainer, Inject, setDefaultContainer } from './infr
|
|
|
16
16
|
import { Dede } from './dede';
|
|
17
17
|
import { ServerError, NotFound, Forbidden, Conflict, Unauthorized, UnprocessableEntity, BadRequest, InternalServerError, CustomServerError } from './http/errors/server';
|
|
18
18
|
import { AppError } from './domain/errors/app-error';
|
|
19
|
-
export { Controller, Post, Get, Put, Delete, Patch, UseMiddleware, UseMiddlewares, Tracing, Entity, Restrict, VirtualProperty, GetterPrefix, Transform, Model, model, column, UseCase, DecorateUseCase, Hook, BeforeHook, AfterHook, HookBefore, HookAfter, Storage, CacheGateway, EventDispatcher, Inject, Container, DefaultContainer, setDefaultContainer, Dede, ServerError, NotFound, Forbidden, Conflict, Unauthorized, UnprocessableEntity, BadRequest, InternalServerError, CustomServerError, AppError };
|
|
19
|
+
export { Controller, Post, Get, Put, Delete, Patch, Version, UseMiddleware, UseMiddlewares, Tracing, Entity, Restrict, VirtualProperty, GetterPrefix, Transform, Model, model, column, UseCase, DecorateUseCase, Hook, BeforeHook, AfterHook, HookBefore, HookAfter, Storage, CacheGateway, EventDispatcher, Inject, Container, DefaultContainer, setDefaultContainer, Dede, ServerError, NotFound, Forbidden, Conflict, Unauthorized, UnprocessableEntity, BadRequest, InternalServerError, CustomServerError, AppError };
|
|
@@ -5,4 +5,4 @@ export type ValidationErrorOptions = {
|
|
|
5
5
|
errorName?: string;
|
|
6
6
|
validatorOptions?: ValidatorOptions;
|
|
7
7
|
};
|
|
8
|
-
export declare function validateWithClassValidator<T extends object>(dtoClass: new () => T, input: T, options?: ValidationErrorOptions): Promise<
|
|
8
|
+
export declare function validateWithClassValidator<T extends object>(dtoClass: new () => T, input: T, options?: ValidationErrorOptions): Promise<T>;
|
|
@@ -9,7 +9,7 @@ export async function validateWithClassValidator(dtoClass, input, options = {})
|
|
|
9
9
|
};
|
|
10
10
|
const errors = await validate(instance, validatorOptions);
|
|
11
11
|
if (errors.length === 0)
|
|
12
|
-
return;
|
|
12
|
+
return instance;
|
|
13
13
|
const details = flattenErrors(errors);
|
|
14
14
|
const statusCode = options.statusCode ?? 400;
|
|
15
15
|
const errorName = options.errorName ?? 'BadRequest';
|