Skip to content

Commit

Permalink
decorators and drivers refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
Umed Khudoiberdiev committed Apr 24, 2017
1 parent 45e6c7f commit 906fe8d
Show file tree
Hide file tree
Showing 73 changed files with 562 additions and 580 deletions.
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
build/
node_modules/
typings/
coverage/
npm-debug.log
4 changes: 4 additions & 0 deletions doc/release-notes.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# Release notes

**0.7.0** *[BREAKING CHANGES]*

*

**0.6.10**

* added integration with `class-transform-validator` for deserialization and auto validation request parameters
Expand Down
4 changes: 2 additions & 2 deletions src/RoutingControllersOptions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ export interface RoutingControllersOptions {
middlewares?: Function[]|string[];

/**
* Indicates if constructor-utils should be used to perform serialization / deserialization.
* Indicates if class-transformer should be used to perform serialization / deserialization.
*/
classTransformer?: boolean;

Expand All @@ -40,7 +40,7 @@ export interface RoutingControllersOptions {

/**
* Indicates if class-validator should be used to auto validate objects injected into params.
* You can also directory pass validator options to enable validator with a given options.
* You can also directly pass validator options to enable validator with a given options.
*/
validator?: boolean|ValidatorOptions;

Expand Down
7 changes: 6 additions & 1 deletion src/decorator-options/BodyOptions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ export interface BodyOptions {

/**
* If set to true then request body will become required.
* If user performs a request and required parameter is not set then routing-controllers will throw an error.
* If user performs a request and body is not in a request then routing-controllers will throw an error.
*/
required?: boolean;

Expand All @@ -26,5 +26,10 @@ export interface BodyOptions {
* @see https://github.com/pleerock/class-validator
*/
validate?: boolean|ValidatorOptions;

/**
* Extra options to be passed to body-parser middleware.
*/
options?: any;

}
11 changes: 0 additions & 11 deletions src/decorator-options/ErrorHandlerOptions.ts

This file was deleted.

3 changes: 2 additions & 1 deletion src/decorator-options/ParamOptions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,13 @@ export interface ParamOptions {

/**
* If set to true then parameter will be required.
* If user performs a request and required parameter is not set then routing-controllers will throw an error.
* If user performs a request and required parameter is not in a request then routing-controllers will throw an error.
*/
required?: boolean;

/**
* If set to true then parameter will be parsed to json.
* Parsing is automatically done if parameter type is a class type.
*/
parse?: boolean;

Expand Down
4 changes: 2 additions & 2 deletions src/decorator-options/UploadOptions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
export interface UploadOptions {

/**
* If set to true then uploaded file will become required.
* If user performs a request and file is not set then routing-controllers will throw an error.
* If set to true then uploaded file become required.
* If user performs a request and file is not in a request then routing-controllers will throw an error.
*/
required?: boolean;

Expand Down
17 changes: 7 additions & 10 deletions src/decorator/Body.ts
Original file line number Diff line number Diff line change
@@ -1,25 +1,22 @@
import {defaultMetadataArgsStorage} from "../index";
import {ParamMetadataArgs} from "../metadata/args/ParamMetadataArgs";
import {BodyOptions} from "../decorator-options/BodyOptions";
import {defaultMetadataArgsStorage} from "../metadata-builder/MetadataArgsStorage";

/**
* Allows to inject a request body value to the controller action parameter.
* Must be applied on a controller action parameters.
* Must be applied on a controller action parameter.
*/
export function Body(options?: BodyOptions): Function {
return function (object: Object, methodName: string, index: number) {
const format = (Reflect as any).getMetadata("design:paramtypes", object, methodName)[index];
const metadata: ParamMetadataArgs = {
target: object.constructor,
defaultMetadataArgsStorage.params.push({
type: "body",
object: object,
method: methodName,
index: index,
type: "body",
targetType: format,
parse: false,
required: options ? options.required : false,
classTransform: options ? options.transform : undefined,
validate: options ? options.validate : undefined,
};
defaultMetadataArgsStorage().params.push(metadata);
extraOptions: options ? options.options : undefined
});
};
}
18 changes: 7 additions & 11 deletions src/decorator/BodyParam.ts
Original file line number Diff line number Diff line change
@@ -1,26 +1,22 @@
import {defaultMetadataArgsStorage} from "../index";
import {ParamMetadataArgs} from "../metadata/args/ParamMetadataArgs";
import {defaultMetadataArgsStorage} from "../metadata-builder/MetadataArgsStorage";
import {ParamOptions} from "../decorator-options/ParamOptions";

/**
* Takes partial data of the request body.
* Must be applied on a controller action parameters.
* Must be applied on a controller action parameter.
*/
export function BodyParam(name: string, options?: ParamOptions): Function {
return function (object: Object, methodName: string, index: number) {
const format = (Reflect as any).getMetadata("design:paramtypes", object, methodName)[index];
const metadata: ParamMetadataArgs = {
target: object.constructor,
defaultMetadataArgsStorage.params.push({
type: "body",
object: object,
method: methodName,
index: index,
type: "body",
name: name,
targetType: format,
parse: options ? options.parse : false,
required: options ? options.required : false,
classTransform: options ? options.transform : undefined,
validate: options ? options.validate : undefined,
};
defaultMetadataArgsStorage().params.push(metadata);
validate: options ? options.validate : undefined
});
};
}
12 changes: 5 additions & 7 deletions src/decorator/ContentType.ts
Original file line number Diff line number Diff line change
@@ -1,18 +1,16 @@
import {defaultMetadataArgsStorage} from "../index";
import {ResponseHandlerMetadataArgs} from "../metadata/args/ResponseHandleMetadataArgs";
import {defaultMetadataArgsStorage} from "../metadata-builder/MetadataArgsStorage";

/**
* Sets response Content-Type.
* Must be applied on a controller action.
*/
export function ContentType(contentType: string): Function {
return function (object: Object, methodName: string) {
const metadata: ResponseHandlerMetadataArgs = {
value: contentType,
defaultMetadataArgsStorage.responseHandlers.push({
type: "content-type",
target: object.constructor,
method: methodName,
type: "content-type"
};
defaultMetadataArgsStorage().responseHandlers.push(metadata);
value: contentType
});
};
}
14 changes: 7 additions & 7 deletions src/decorator/Controller.ts
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
import {defaultMetadataArgsStorage} from "../index";
import {ControllerMetadataArgs} from "../metadata/args/ControllerMetadataArgs";
import {defaultMetadataArgsStorage} from "../metadata-builder/MetadataArgsStorage";

/**
* Defines a class as a controller.
* Each decorated controller method is served as a controller action.
* Controller actions are executed when request come.
*
* @param baseRoute Extra path you can apply as a base route to all controller actions
*/
export function Controller(baseRoute?: string): Function {
return function (object: Function) {
const metadata: ControllerMetadataArgs = {
route: baseRoute,
defaultMetadataArgsStorage.controllers.push({
type: "default",
target: object,
type: "default"
};
defaultMetadataArgsStorage().controllers.push(metadata);
route: baseRoute
});
};
}
18 changes: 7 additions & 11 deletions src/decorator/CookieParam.ts
Original file line number Diff line number Diff line change
@@ -1,26 +1,22 @@
import {defaultMetadataArgsStorage} from "../index";
import {defaultMetadataArgsStorage} from "../metadata-builder/MetadataArgsStorage";
import {ParamOptions} from "../decorator-options/ParamOptions";
import {ParamMetadataArgs} from "../metadata/args/ParamMetadataArgs";

/**
* Injects a request's cookie value to the controller action parameter.
* Must be applied on a controller action parameters.
* Must be applied on a controller action parameter.
*/
export function CookieParam(name: string, options?: ParamOptions) {
return function (object: Object, methodName: string, index: number) {
const format = (Reflect as any).getMetadata("design:paramtypes", object, methodName)[index];
const metadata: ParamMetadataArgs = {
target: object.constructor,
defaultMetadataArgsStorage.params.push({
type: "cookie",
object: object,
method: methodName,
index: index,
type: "cookie",
name: name,
targetType: format,
parse: options ? options.parse : false,
required: options ? options.required : false,
classTransform: options ? options.transform : undefined,
validate: options ? options.validate : undefined,
};
defaultMetadataArgsStorage().params.push(metadata);
validate: options ? options.validate : undefined
});
};
}
18 changes: 7 additions & 11 deletions src/decorator/CookieParams.ts
Original file line number Diff line number Diff line change
@@ -1,22 +1,18 @@
import {defaultMetadataArgsStorage} from "../index";
import {ParamMetadataArgs} from "../metadata/args/ParamMetadataArgs";
import {defaultMetadataArgsStorage} from "../metadata-builder/MetadataArgsStorage";

/**
* Injects all request's cookies to the controller action parameter.
* Must be applied on a controller action parameters.
* Must be applied on a controller action parameter.
*/
export function CookieParams() {
return function (object: Object, methodName: string, index: number) {
const format = (Reflect as any).getMetadata("design:paramtypes", object, methodName)[index];
const metadata: ParamMetadataArgs = {
target: object.constructor,
defaultMetadataArgsStorage.params.push({
type: "cookie",
object: object,
method: methodName,
index: index,
type: "cookie",
targetType: format,
parse: false,
required: false,
};
defaultMetadataArgsStorage().params.push(metadata);
required: false
});
};
}
12 changes: 5 additions & 7 deletions src/decorator/Delete.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import {defaultMetadataArgsStorage} from "../index";
import {ActionMetadataArgs} from "../metadata/args/ActionMetadataArgs";
import {defaultMetadataArgsStorage} from "../metadata-builder/MetadataArgsStorage";

/**
* Registers a controller method to be executed when DELETE request comes on a given route.
Expand All @@ -19,12 +18,11 @@ export function Delete(route?: string): Function;
*/
export function Delete(route?: string|RegExp): Function {
return function (object: Object, methodName: string) {
const metadata: ActionMetadataArgs = {
route: route,
defaultMetadataArgsStorage.actions.push({
type: "delete",
target: object.constructor,
method: methodName,
type: "delete"
};
defaultMetadataArgsStorage().actions.push(metadata);
route: route
});
};
}
12 changes: 5 additions & 7 deletions src/decorator/Get.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import {defaultMetadataArgsStorage} from "../index";
import {ActionMetadataArgs} from "../metadata/args/ActionMetadataArgs";
import {defaultMetadataArgsStorage} from "../metadata-builder/MetadataArgsStorage";

/**
* Registers an action to be executed when GET request comes on a given route.
Expand All @@ -19,12 +18,11 @@ export function Get(route?: string): Function;
*/
export function Get(route?: string|RegExp): Function {
return function (object: Object, methodName: string) {
const metadata: ActionMetadataArgs = {
route: route,
defaultMetadataArgsStorage.actions.push({
type: "get",
target: object.constructor,
method: methodName,
type: "get"
};
defaultMetadataArgsStorage().actions.push(metadata);
route: route
});
};
}
12 changes: 5 additions & 7 deletions src/decorator/Head.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import {defaultMetadataArgsStorage} from "../index";
import {ActionMetadataArgs} from "../metadata/args/ActionMetadataArgs";
import {defaultMetadataArgsStorage} from "../metadata-builder/MetadataArgsStorage";

/**
* Registers an action to be executed when HEAD request comes on a given route.
Expand All @@ -19,12 +18,11 @@ export function Head(route?: string): Function;
*/
export function Head(route?: string|RegExp): Function {
return function (object: Object, methodName: string) {
const metadata: ActionMetadataArgs = {
route: route,
defaultMetadataArgsStorage.actions.push({
type: "head",
target: object.constructor,
method: methodName,
type: "head"
};
defaultMetadataArgsStorage().actions.push(metadata);
route: route
});
};
}
14 changes: 6 additions & 8 deletions src/decorator/Header.ts
Original file line number Diff line number Diff line change
@@ -1,19 +1,17 @@
import {defaultMetadataArgsStorage} from "../index";
import {ResponseHandlerMetadataArgs} from "../metadata/args/ResponseHandleMetadataArgs";
import {defaultMetadataArgsStorage} from "../metadata-builder/MetadataArgsStorage";

/**
* Sets response header.
* Must be applied on a controller action.
*/
export function Header(name: string, value: string): Function {
return function (object: Object, methodName: string) {
const metadata: ResponseHandlerMetadataArgs = {
value: name,
secondaryValue: value,
defaultMetadataArgsStorage.responseHandlers.push({
type: "header",
target: object.constructor,
method: methodName,
type: "header"
};
defaultMetadataArgsStorage().responseHandlers.push(metadata);
value: name,
secondaryValue: value
});
};
}

0 comments on commit 906fe8d

Please sign in to comment.