Skip to content

Commit

Permalink
Following new linter
Browse files Browse the repository at this point in the history
  • Loading branch information
Anders Brams committed Oct 24, 2021
1 parent aa33852 commit 06f55d0
Show file tree
Hide file tree
Showing 6 changed files with 160 additions and 218 deletions.
10 changes: 5 additions & 5 deletions src/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@ export const TYPE = {
};

export const METADATA_KEY = {
controller: "inversify-express-utils:controller",
controllerMethod: "inversify-express-utils:controller-method",
controllerParameter: "inversify-express-utils:controller-parameter",
httpContext: "inversify-express-utils:httpcontext",
middleware: "inversify-express-utils:middleware"
controller: 'inversify-express-utils:controller',
controllerMethod: 'inversify-express-utils:controller-method',
controllerParameter: 'inversify-express-utils:controller-parameter',
httpContext: 'inversify-express-utils:httpcontext',
middleware: 'inversify-express-utils:middleware',
};

export enum PARAMETER_TYPE {
Expand Down
54 changes: 30 additions & 24 deletions src/decorators.ts
Original file line number Diff line number Diff line change
@@ -1,26 +1,32 @@
import * as express from "express";
import { inject, injectable, decorate } from "inversify";
import { Controller, ControllerMetadata, ControllerParameterMetadata, HandlerDecorator, interfaces, Middleware, ParameterMetadata } from "./index";
import { TYPE, METADATA_KEY, PARAMETER_TYPE } from "./constants";
import { getMiddlewareMetadata, getOrCreateMetadata } from "./utils";

import {inject, injectable, decorate} from 'inversify';
import {
Controller, ControllerMetadata, ControllerParameterMetadata,
HandlerDecorator, interfaces, Middleware, MiddlewareMetaData, ParameterMetadata,
} from './index';
import {TYPE, METADATA_KEY, PARAMETER_TYPE} from './constants';
import {getMiddlewareMetadata, getOrCreateMetadata} from './utils';

export const injectHttpContext = inject(TYPE.HttpContext);

function defineMiddlewareMetadata(target: any, metaDataKey: string, ...middleware: interfaces.Middleware[]) {
// We register decorated middleware meteadata in a map, e.g. { "TestController": [ your middleware here ] }
const middlewareMap: interfaces.MiddlewareMetaData = getOrCreateMetadata(METADATA_KEY.middleware, target, { });
function defineMiddlewareMetadata(
target: any, metaDataKey: string, ...middleware: Array<interfaces.Middleware>
): void {
// We register decorated middleware meteadata in a map, e.g. { "controller": [ middleware ] }
const middlewareMap: MiddlewareMetaData = getOrCreateMetadata(
METADATA_KEY.middleware, target,
{ },
);

if (!(metaDataKey in middlewareMap)) {
middlewareMap[metaDataKey] = [];
}

middlewareMap[metaDataKey].push(...middleware);
middlewareMap[metaDataKey]?.push(...middleware);
Reflect.defineMetadata(METADATA_KEY.middleware, middlewareMap, target);
}

export function withMiddleware(...middleware: interfaces.Middleware[]) {
return function(target: any, methodName?: string, descriptor?: PropertyDescriptor) {
export function withMiddleware(...middleware: Array<interfaces.Middleware>) {
return function (target: any, methodName?: string): void {
if (methodName) {
defineMiddlewareMetadata(target, methodName, ...middleware);
} else {
Expand All @@ -29,16 +35,15 @@ export function withMiddleware(...middleware: interfaces.Middleware[]) {
};
}

export function controller(path: string, ...middleware: interfaces.Middleware[]) {
return function (target: any) {

export function controller(path: string, ...middleware: Array<interfaces.Middleware>) {
return function (target: any): void {
// Get the list of middleware registered with @middleware() decorators
const decoratedMiddleware = getMiddlewareMetadata(target.constructor, target.name);

let currentMetadata: interfaces.ControllerMetadata = {
const currentMetadata: interfaces.ControllerMetadata = {
middleware: middleware.concat(decoratedMiddleware),
path: path,
target: target
path,
target,
};

decorate(injectable(), target);
Expand Down Expand Up @@ -93,23 +98,24 @@ export function httpDelete(path: string, ...middleware: Array<Middleware>): Hand
return httpMethod('delete', path, ...middleware);
}

export function httpMethod(method: string, path: string, ...middleware: interfaces.Middleware[]): interfaces.HandlerDecorator {
return function (target: any, key: string, value: any) {

export function httpMethod(
method: string, path: string, ...middleware: Array<interfaces.Middleware>
): interfaces.HandlerDecorator {
return function (target: any, key: string) {
const decoratedMiddleware = getMiddlewareMetadata(target, key);

let metadata: interfaces.ControllerMethodMetadata = {
const metadata: interfaces.ControllerMethodMetadata = {
key,
method,
middleware: middleware.concat(decoratedMiddleware),
path,
target,
};

let metadataList: interfaces.ControllerMethodMetadata[] = getOrCreateMetadata(
const metadataList: Array<interfaces.ControllerMethodMetadata> = getOrCreateMetadata(
METADATA_KEY.controllerMethod,
target.constructor,
[]
[],
);

metadataList.push(metadata);
Expand Down
23 changes: 9 additions & 14 deletions src/interfaces.ts
Original file line number Diff line number Diff line change
@@ -1,18 +1,17 @@
import * as express from "express";
import { interfaces as inversifyInterfaces } from "inversify";
import { PARAMETER_TYPE } from "./constants";
import { HttpResponseMessage } from "./httpResponseMessage";

import * as express from 'express';
import {interfaces as inversifyInterfaces} from 'inversify';
import {PARAMETER_TYPE} from './constants';
import {HttpResponseMessage} from './httpResponseMessage';

export type Middleware = (inversifyInterfaces.ServiceIdentifier<any> | express.RequestHandler);

export interface MiddlewareMetaData {
[identifier: string]: Middleware[];
[identifier: string]: Array<Middleware>;
}

export interface ControllerMetadata {
path: string;
middleware: Middleware[];
middleware: Array<Middleware>;
target: any;
}

Expand All @@ -22,7 +21,7 @@ export interface ControllerMethodMetadata extends ControllerMetadata {
}

export interface ControllerParameterMetadata {
[methodName: string]: ParameterMetadata[];
[methodName: string]: Array<ParameterMetadata>;
}

export interface ParameterMetadata {
Expand All @@ -34,13 +33,9 @@ export interface ParameterMetadata {

export interface Controller { }

export interface HandlerDecorator {
(target: any, key: string, value: any): void;
}
export type HandlerDecorator = (target: any, key: string, value: any) => void;

export interface ConfigFunction {
(app: express.Application): void;
}
export type ConfigFunction = (app: express.Application) => void;

export interface RoutingConfig {
rootPath: string;
Expand Down
11 changes: 5 additions & 6 deletions src/utils.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { interfaces } from 'inversify';
import {interfaces} from 'inversify';
import {
Controller,
ControllerMetadata,
Expand Down Expand Up @@ -27,16 +27,16 @@ export function getControllersFromMetadata(): Array<new() => Controller> {
Reflect,
) || [];

return arrayOfControllerMetadata.map((metadata) => metadata.target);
return arrayOfControllerMetadata.map(metadata => metadata.target);
}

export function getMiddlewareMetadata(constructor: any, key: string): interfaces.Middleware[] {
export function getMiddlewareMetadata(constructor: any, key: string): Array<interfaces.Middleware> {
const middlewareMetadata = Reflect.getMetadata(METADATA_KEY.middleware, constructor) || {};
return middlewareMetadata[key] || [];
}

export function getControllerMetadata(constructor: any) {
let controllerMetadata: ControllerMetadata = Reflect.getMetadata(
export function getControllerMetadata(constructor: any): ControllerMetadata {
const controllerMetadata: ControllerMetadata = Reflect.getMetadata(
METADATA_KEY.controller,
constructor,
);
Expand Down Expand Up @@ -101,4 +101,3 @@ export function getOrCreateMetadata<T>(key: string, target: object, defaultValue

return Reflect.getMetadata(key, target);
}

Loading

0 comments on commit 06f55d0

Please sign in to comment.