Skip to content

Commit

Permalink
use symbols for internal used properties.
Browse files Browse the repository at this point in the history
  • Loading branch information
joesonw committed Jul 22, 2016
1 parent defbbfc commit 8d174fd
Show file tree
Hide file tree
Showing 4 changed files with 115 additions and 124 deletions.
19 changes: 0 additions & 19 deletions src/controller.ts
Original file line number Diff line number Diff line change
@@ -1,24 +1,5 @@
import {MediaType } from './util';
abstract class Controller {
__routes:{ [key:string]: {
method?: string;
filter?: 'after' | 'before';
path?: string[];
produce?: MediaType;
consume?: MediaType;
parameters?: {
index: number;
type: Function;
key: string;
paramType: string;
}[];
}};
__properties: { [key:string] : {
key: string;
type: Function;
paramType: string;
}};
__path:string;
}

export default Controller;
193 changes: 98 additions & 95 deletions src/decorators.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,82 +3,85 @@ import {ReflectType, MediaType } from './util';
import Context from './context';
/// <reference path="../node_modules/reflect-metadata/reflect-metadata.d.ts"/>
import 'reflect-metadata';
import {
Routes,
Properties,
RoutePath,
} from './symbols';

export function Before(target:Controller, key:string) {
target.__routes = target.__routes || {};
target.__routes[key] = target.__routes[key] || {};
target.__routes[key].filter = 'before';
target[Routes] = target[Routes] || {};
target[Routes][key] = target[Routes][key] || {};
target[Routes][key].filter = 'before';
}
export function After(target:Controller, key:string) {
target.__routes = target.__routes || {};
target.__routes[key] = target.__routes[key] || {};
target.__routes[key].filter = 'after';
target[Routes] = target[Routes] || {};
target[Routes][key] = target[Routes][key] || {};
target[Routes][key].filter = 'after';
}
export function GET(target:Controller, key:string) {
target.__routes = target.__routes || {};
target.__routes[key] = target.__routes[key] || {};
target.__routes[key].method = 'GET';
target[Routes] = target[Routes] || {};
target[Routes][key] = target[Routes][key] || {};
target[Routes][key].method = 'GET';
}
export function POST(target:Controller, key:string) {
target.__routes = target.__routes || {};
target.__routes[key] = target.__routes[key] || {};
target.__routes[key].method = 'POST';
target[Routes] = target[Routes] || {};
target[Routes][key] = target[Routes][key] || {};
target[Routes][key].method = 'POST';
}
export function PUT(target:Controller, key:string) {
target.__routes = target.__routes || {};
target.__routes[key] = target.__routes[key] || {};
target.__routes[key].method = 'PUT';
target[Routes] = target[Routes] || {};
target[Routes][key] = target[Routes][key] || {};
target[Routes][key].method = 'PUT';
}
export function DELETE(target:Controller, key:string) {
target.__routes = target.__routes || {};
target.__routes[key] = target.__routes[key] || {};
target.__routes[key].method = 'DELETE';
target[Routes] = target[Routes] || {};
target[Routes][key] = target[Routes][key] || {};
target[Routes][key].method = 'DELETE';
}
export function Path(path:string) {
return (target:Controller | (new () => Controller), key?:string) => {
if (key) {
let type:Function = Reflect.getMetadata(ReflectType.PARAMETER_TYPE, target, key);
(target as Controller).__routes = (target as Controller).__routes || {};
(target as Controller).__routes[key] = (target as Controller).__routes[key] || {};
(target as Controller).__routes[key].path = (target as Controller).__routes[key].path || [];
(target as Controller).__routes[key].path.push(path);
(target as Controller)[Routes] = (target as Controller)[Routes] || {};
(target as Controller)[Routes][key] = (target as Controller)[Routes][key] || {};
(target as Controller)[Routes][key].path = (target as Controller)[Routes][key].path || [];
(target as Controller)[Routes][key].path.push(path);
} else {
Object.defineProperty((target as (new () => Controller)).prototype, '__path', {
value: path
});
(target as (new () => Controller)).prototype[RoutePath] = path;
}
}
}
export function Produce(type: MediaType) {
return (target:Controller, key:string) => {
target.__routes = target.__routes || {};
target.__routes[key] = target.__routes[key] || {};
target.__routes[key].produce = type;
target[Routes] = target[Routes] || {};
target[Routes][key] = target[Routes][key] || {};
target[Routes][key].produce = type;
}
}
export function Consume(type: MediaType) {
return (target:Controller, key:string) => {
target.__routes = target.__routes || {};
target.__routes[key] = target.__routes[key] || {};
target.__routes[key].consume = type;
target[Routes] = target[Routes] || {};
target[Routes][key] = target[Routes][key] || {};
target[Routes][key].consume = type;
}
}
export function QueryParam(param: string) {
return (target:Controller, key:string, index?:number) => {
if (index !== undefined) {
let type:Function = Reflect.getMetadata(ReflectType.PARAMETER_TYPE, target, key)[index];
target.__routes = target.__routes || {};
target.__routes[key] = target.__routes[key] || {};
target.__routes[key].parameters = target.__routes[key].parameters || [];
target.__routes[key].parameters[index] = {
target[Routes] = target[Routes] || {};
target[Routes][key] = target[Routes][key] || {};
target[Routes][key].parameters = target[Routes][key].parameters || [];
target[Routes][key].parameters[index] = {
index: index,
type: type,
key: param,
paramType: 'query-param'
};
} else {
target.__properties = target.__properties || {};
target.__properties[key] = {
target[Properties] = target[Properties] || {};
target[Properties][key] = {
key: param,
type: Reflect.getMetadata(ReflectType.TYPE, target, key),
paramType: 'query-param'
Expand All @@ -90,18 +93,18 @@ export function PathParam(param: string) {
return (target:Controller, key:string, index?:number) => {
if (index !== undefined) {
let type:Function = Reflect.getMetadata(ReflectType.PARAMETER_TYPE, target, key)[index];
target.__routes = target.__routes || {};
target.__routes[key] = target.__routes[key] || {};
target.__routes[key].parameters = target.__routes[key].parameters || [];
target.__routes[key].parameters[index] = {
target[Routes] = target[Routes] || {};
target[Routes][key] = target[Routes][key] || {};
target[Routes][key].parameters = target[Routes][key].parameters || [];
target[Routes][key].parameters[index] = {
index: index,
type: type,
key: param,
paramType: 'path-param'
};
} else {
target.__properties = target.__properties || {};
target.__properties[key] = {
target[Properties] = target[Properties] || {};
target[Properties][key] = {
key: param,
type: Reflect.getMetadata(ReflectType.TYPE, target, key),
paramType: 'path-param'
Expand All @@ -113,18 +116,18 @@ export function BodyParam(param:string) {
return (target:Controller, key:string, index?:number) => {
if (index !== undefined) {
let type:Function = Reflect.getMetadata(ReflectType.PARAMETER_TYPE, target, key)[index];
target.__routes = target.__routes || {};
target.__routes[key] = target.__routes[key] || {};
target.__routes[key].parameters = target.__routes[key].parameters || [];
target.__routes[key].parameters[index] = {
target[Routes] = target[Routes] || {};
target[Routes][key] = target[Routes][key] || {};
target[Routes][key].parameters = target[Routes][key].parameters || [];
target[Routes][key].parameters[index] = {
index: index,
type: type,
key: param,
paramType: 'body-param'
};
} else {
target.__properties = target.__properties || {};
target.__properties[key] = {
target[Properties] = target[Properties] || {};
target[Properties][key] = {
key: param,
type: Reflect.getMetadata(ReflectType.TYPE, target, key),
paramType: 'body-param'
Expand All @@ -136,18 +139,18 @@ export function HeaderParam(param:string) {
return (target:Controller, key:string, index?:number) => {
if (index !== undefined) {
let type:Function = Reflect.getMetadata(ReflectType.PARAMETER_TYPE, target, key)[index];
target.__routes = target.__routes || {};
target.__routes[key] = target.__routes[key] || {};
target.__routes[key].parameters = target.__routes[key].parameters || [];
target.__routes[key].parameters[index] = {
target[Routes] = target[Routes] || {};
target[Routes][key] = target[Routes][key] || {};
target[Routes][key].parameters = target[Routes][key].parameters || [];
target[Routes][key].parameters[index] = {
index: index,
type: type,
key: param,
paramType: 'header-param'
};
} else {
target.__properties = target.__properties || {};
target.__properties[key] = {
target[Properties] = target[Properties] || {};
target[Properties][key] = {
key: param,
type: Reflect.getMetadata(ReflectType.TYPE, target, key),
paramType: 'header-param'
Expand All @@ -158,18 +161,18 @@ export function HeaderParam(param:string) {
export function Query(target:Controller, key:string, index?:number) {
if (index !== undefined) {
let type:Function = Reflect.getMetadata(ReflectType.PARAMETER_TYPE, target, key)[index];
target.__routes = target.__routes || {};
target.__routes[key] = target.__routes[key] || {};
target.__routes[key].parameters = target.__routes[key].parameters || [];
target.__routes[key].parameters[index] = {
target[Routes] = target[Routes] || {};
target[Routes][key] = target[Routes][key] || {};
target[Routes][key].parameters = target[Routes][key].parameters || [];
target[Routes][key].parameters[index] = {
index: index,
type: type,
key: '',
paramType: 'query'
};
} else {
target.__properties = target.__properties || {};
target.__properties[key] = {
target[Properties] = target[Properties] || {};
target[Properties][key] = {
key: '',
type: Reflect.getMetadata(ReflectType.TYPE, target, key),
paramType: 'query'
Expand All @@ -179,18 +182,18 @@ export function Query(target:Controller, key:string, index?:number) {
export function Params(target:Controller, key:string, index?:number) {
if (index !== undefined) {
let type:Function = Reflect.getMetadata(ReflectType.PARAMETER_TYPE, target, key)[index];
target.__routes = target.__routes || {};
target.__routes[key] = target.__routes[key] || {};
target.__routes[key].parameters = target.__routes[key].parameters || [];
target.__routes[key].parameters[index] = {
target[Routes] = target[Routes] || {};
target[Routes][key] = target[Routes][key] || {};
target[Routes][key].parameters = target[Routes][key].parameters || [];
target[Routes][key].parameters[index] = {
index: index,
type: type,
key: '',
paramType: 'params'
};
} else {
target.__properties = target.__properties || {};
target.__properties[key] = {
target[Properties] = target[Properties] || {};
target[Properties][key] = {
key: '',
type: Reflect.getMetadata(ReflectType.TYPE, target, key),
paramType: 'params'
Expand All @@ -200,18 +203,18 @@ export function Params(target:Controller, key:string, index?:number) {
export function Body(target:Controller, key:string, index?:number) {
if (index !== undefined) {
let type:Function = Reflect.getMetadata(ReflectType.PARAMETER_TYPE, target, key)[index];
target.__routes = target.__routes || {};
target.__routes[key] = target.__routes[key] || {};
target.__routes[key].parameters = target.__routes[key].parameters || [];
target.__routes[key].parameters[index] = {
target[Routes] = target[Routes] || {};
target[Routes][key] = target[Routes][key] || {};
target[Routes][key].parameters = target[Routes][key].parameters || [];
target[Routes][key].parameters[index] = {
index: index,
type: type,
key: '',
paramType: 'body'
};
} else {
target.__properties = target.__properties || {};
target.__properties[key] = {
target[Properties] = target[Properties] || {};
target[Properties][key] = {
key: '',
type: Reflect.getMetadata(ReflectType.TYPE, target, key),
paramType: 'body'
Expand All @@ -221,18 +224,18 @@ export function Body(target:Controller, key:string, index?:number) {
export function Headers(target:Controller, key:string, index?:number) {
if (index !== undefined) {
let type:Function = Reflect.getMetadata(ReflectType.PARAMETER_TYPE, target, key)[index];
target.__routes = target.__routes || {};
target.__routes[key] = target.__routes[key] || {};
target.__routes[key].parameters = target.__routes[key].parameters || [];
target.__routes[key].parameters[index] = {
target[Routes] = target[Routes] || {};
target[Routes][key] = target[Routes][key] || {};
target[Routes][key].parameters = target[Routes][key].parameters || [];
target[Routes][key].parameters[index] = {
index: index,
type: type,
key: '',
paramType: 'headers'
};
} else {
target.__properties = target.__properties || {};
target.__properties[key] = {
target[Properties] = target[Properties] || {};
target[Properties][key] = {
key: '',
type: Reflect.getMetadata(ReflectType.TYPE, target, key),
paramType: 'headers'
Expand All @@ -242,18 +245,18 @@ export function Headers(target:Controller, key:string, index?:number) {
export function AppContext(target:Controller, key:string, index?:number) {
if (index !== undefined) {
let type:Function = Reflect.getMetadata(ReflectType.PARAMETER_TYPE, target, key)[index];
target.__routes = target.__routes || {};
target.__routes[key] = target.__routes[key] || {};
target.__routes[key].parameters = target.__routes[key].parameters || [];
target.__routes[key].parameters[index] = {
target[Routes] = target[Routes] || {};
target[Routes][key] = target[Routes][key] || {};
target[Routes][key].parameters = target[Routes][key].parameters || [];
target[Routes][key].parameters[index] = {
index: index,
type: type,
key: '',
paramType: 'app-context'
};
} else {
target.__properties = target.__properties || {};
target.__properties[key] = {
target[Properties] = target[Properties] || {};
target[Properties][key] = {
key: '',
type: Reflect.getMetadata(ReflectType.TYPE, target, key),
paramType: 'app-context'
Expand All @@ -263,18 +266,18 @@ export function AppContext(target:Controller, key:string, index?:number) {
export function HttpContext(target:Controller, key:string, index?:number) {
if (index !== undefined) {
let type:Function = Reflect.getMetadata(ReflectType.PARAMETER_TYPE, target, key)[index];
target.__routes = target.__routes || {};
target.__routes[key] = target.__routes[key] || {};
target.__routes[key].parameters = target.__routes[key].parameters || [];
target.__routes[key].parameters[index] = {
target[Routes] = target[Routes] || {};
target[Routes][key] = target[Routes][key] || {};
target[Routes][key].parameters = target[Routes][key].parameters || [];
target[Routes][key].parameters[index] = {
index: index,
type: type,
key: '',
paramType: 'http-context'
};
} else {
target.__properties = target.__properties || {};
target.__properties[key] = {
target[Properties] = target[Properties] || {};
target[Properties][key] = {
key: '',
type: Reflect.getMetadata(ReflectType.TYPE, target, key),
paramType: 'http-context'
Expand All @@ -283,10 +286,10 @@ export function HttpContext(target:Controller, key:string, index?:number) {
}
export function RouteResponse(target:Controller, key:string, index:number) {
let type:Function = Reflect.getMetadata(ReflectType.PARAMETER_TYPE, target, key)[index];
target.__routes = target.__routes || {};
target.__routes[key] = target.__routes[key] || {};
target.__routes[key].parameters = target.__routes[key].parameters || [];
target.__routes[key].parameters[index] = {
target[Routes] = target[Routes] || {};
target[Routes][key] = target[Routes][key] || {};
target[Routes][key].parameters = target[Routes][key].parameters || [];
target[Routes][key].parameters[index] = {
index: index,
type: type,
key: '',
Expand Down
Loading

0 comments on commit 8d174fd

Please sign in to comment.