damex 2.0.16 → 2.0.18

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 CHANGED
@@ -34,25 +34,25 @@ Used on classes that required DI. If the class Already has a decorator (as @Cont
34
34
  #### Example
35
35
 
36
36
  ```typescript
37
- @Controller("/users")
37
+ @Controller('/users')
38
38
  @GlobalMiddleware([auth])
39
39
  export class UsersController {
40
- constructor(private userService: UserService) {}
40
+ constructor(private userService: UserService) {}
41
41
 
42
- @Get()
43
- @Middleware([logger])
44
- async getAll(req: Request, res: Response) {
45
- const users = await this.userService.all();
42
+ @Get()
43
+ @Middleware([logger])
44
+ async getAll(req: Request, res: Response) {
45
+ const users = await this.userService.all();
46
46
 
47
- res.status(200).send(users);
48
- }
47
+ res.status(200).send(users);
48
+ }
49
49
 
50
- @Get("/:id")
51
- @Middleware([anotherLogger])
52
- async getById(req: Request, res: Response) {
53
- const users = await this.userService.findById(req.params.id!);
50
+ @Get('/:id')
51
+ @Middleware([anotherLogger])
52
+ async getById(req: Request, res: Response) {
53
+ const users = await this.userService.findById(req.params.id!);
54
54
 
55
- res.status(200).send(users);
56
- }
55
+ res.status(200).send(users);
56
+ }
57
57
  }
58
58
  ```
package/consts.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ export declare const CONTROLLER_METHOD = "controller:method";
2
+ export declare const CONTROLLER_PATH = "controller:path";
3
+ export declare const CONTROLLER_CLASS_MIDDLEWARE = "controller:class_middleware";
4
+ export declare const CONTROLLER_MIDDLEWARE = "controller:middleware";
5
+ export declare const SERVER_CONTROLLERS = "server:controllers";
6
+ export declare const SERVER_ROUTER = "server:router";
package/consts.js ADDED
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SERVER_ROUTER = exports.SERVER_CONTROLLERS = exports.CONTROLLER_MIDDLEWARE = exports.CONTROLLER_CLASS_MIDDLEWARE = exports.CONTROLLER_PATH = exports.CONTROLLER_METHOD = void 0;
4
+ exports.CONTROLLER_METHOD = "controller:method";
5
+ exports.CONTROLLER_PATH = "controller:path";
6
+ exports.CONTROLLER_CLASS_MIDDLEWARE = "controller:class_middleware";
7
+ exports.CONTROLLER_MIDDLEWARE = "controller:middleware";
8
+ exports.SERVER_CONTROLLERS = "server:controllers";
9
+ exports.SERVER_ROUTER = "server:router";
10
+ //# sourceMappingURL=consts.js.map
package/consts.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consts.js","sourceRoot":"","sources":["../src/consts.ts"],"names":[],"mappings":";;;AAAa,QAAA,iBAAiB,GAAG,mBAAmB,CAAC;AACxC,QAAA,eAAe,GAAG,iBAAiB,CAAC;AACpC,QAAA,2BAA2B,GAAG,6BAA6B,CAAC;AAC5D,QAAA,qBAAqB,GAAG,uBAAuB,CAAC;AAChD,QAAA,kBAAkB,GAAG,oBAAoB,CAAC;AAC1C,QAAA,aAAa,GAAG,eAAe,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { RequestHandler } from "express";
2
+ export declare function Controller(controllerPath?: string): (target: any) => any;
3
+ export declare function Middleware(handlers: RequestHandler[]): (target: any, propertyKey: any) => any;
4
+ export declare function ClassMiddleware(handlers: RequestHandler[]): (target: any) => void;
5
+ export declare const Get: (path?: string) => (target: any, propertyKey: any) => any;
6
+ export declare const Post: (path?: string) => (target: any, propertyKey: any) => any;
7
+ export declare const Put: (path?: string) => (target: any, propertyKey: any) => any;
8
+ export declare const Patch: (path?: string) => (target: any, propertyKey: any) => any;
9
+ export declare const Delete: (path?: string) => (target: any, propertyKey: any) => any;
package/decorators.js ADDED
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Delete = exports.Patch = exports.Put = exports.Post = exports.Get = void 0;
4
+ exports.Controller = Controller;
5
+ exports.Middleware = Middleware;
6
+ exports.ClassMiddleware = ClassMiddleware;
7
+ const consts_1 = require("./consts");
8
+ const http_core_1 = require("./http-core");
9
+ const di_1 = require("./di");
10
+ function Controller(controllerPath) {
11
+ const router = http_core_1.AppRouter.get();
12
+ return (target) => {
13
+ const instance = di_1.DI.new(target);
14
+ const prototype = Object.getPrototypeOf(target);
15
+ const [, ...actionsNames] = Object.getOwnPropertyNames(prototype);
16
+ actionsNames.forEach((action) => {
17
+ const controllerActionReader = new http_core_1.ControllerActionReader(action, prototype, target);
18
+ const actionPath = controllerActionReader.getPath();
19
+ const method = controllerActionReader.getMethod();
20
+ const middlewares = controllerActionReader.getMiddlewares();
21
+ const classMiddleware = controllerActionReader.getControllerClassMiddleware();
22
+ router[method](`${controllerPath}/${actionPath}`, ...middlewares, ...classMiddleware, instance[action]);
23
+ http_core_1.Server.appendControllerMetadata(target, router);
24
+ });
25
+ };
26
+ }
27
+ function Middleware(handlers) {
28
+ return function (target, propertyKey) {
29
+ Reflect.defineMetadata(propertyKey, handlers, target, consts_1.CONTROLLER_MIDDLEWARE);
30
+ };
31
+ }
32
+ function ClassMiddleware(handlers) {
33
+ return function (target) {
34
+ Reflect.defineMetadata(consts_1.CONTROLLER_CLASS_MIDDLEWARE, handlers, target);
35
+ };
36
+ }
37
+ function createHttpMethod(method) {
38
+ return function (path) {
39
+ return function (target, propertyKey) {
40
+ Reflect.defineMetadata(propertyKey, method, target, consts_1.CONTROLLER_METHOD);
41
+ Reflect.defineMetadata(propertyKey, path, target, consts_1.CONTROLLER_PATH);
42
+ };
43
+ };
44
+ }
45
+ exports.Get = createHttpMethod("get");
46
+ exports.Post = createHttpMethod("post");
47
+ exports.Put = createHttpMethod("put");
48
+ exports.Patch = createHttpMethod("patch");
49
+ exports.Delete = createHttpMethod("delete");
50
+ //# sourceMappingURL=decorators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorators.js","sourceRoot":"","sources":["../src/decorators.ts"],"names":[],"mappings":";;;AAUA,gCAgCC;AAED,gCASC;AAED,0CAIC;AA1DD,qCAKkB;AAClB,2CAAwE;AACxE,6BAA0B;AAE1B,SAAgB,UAAU,CAAC,cAAuB;IAChD,MAAM,MAAM,GAAG,qBAAS,CAAC,GAAG,EAAE,CAAC;IAE/B,OAAO,CAAC,MAAW,EAAO,EAAE;QAC1B,MAAM,QAAQ,GAAG,OAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAChC,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,CAAC,EAAE,GAAG,YAAY,CAAC,GAAG,MAAM,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;QAElE,YAAY,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YAC9B,MAAM,sBAAsB,GAAG,IAAI,kCAAsB,CACvD,MAAM,EACN,SAAS,EACT,MAAM,CACP,CAAC;YAEF,MAAM,UAAU,GAAG,sBAAsB,CAAC,OAAO,EAAE,CAAC;YACpD,MAAM,MAAM,GAAG,sBAAsB,CAAC,SAAS,EAAE,CAAC;YAClD,MAAM,WAAW,GAAG,sBAAsB,CAAC,cAAc,EAAE,CAAC;YAC5D,MAAM,eAAe,GACnB,sBAAsB,CAAC,4BAA4B,EAAE,CAAC;YAGxD,MAAM,CAAC,MAAM,CAAC,CACZ,GAAG,cAAc,IAAI,UAAU,EAAE,EACjC,GAAG,WAAW,EACd,GAAG,eAAe,EAClB,QAAQ,CAAC,MAAM,CAAC,CACjB,CAAC;YAEF,kBAAM,CAAC,wBAAwB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAED,SAAgB,UAAU,CAAC,QAA0B;IACnD,OAAO,UAAU,MAAW,EAAE,WAAgB;QAC5C,OAAO,CAAC,cAAc,CACpB,WAAW,EACX,QAAQ,EACR,MAAM,EACN,8BAAqB,CACtB,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,SAAgB,eAAe,CAAC,QAA0B;IACxD,OAAO,UAAU,MAAW;QAC1B,OAAO,CAAC,cAAc,CAAC,oCAA2B,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IACxE,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAmD;IAC3E,OAAO,UAAU,IAAa;QAC5B,OAAO,UAAU,MAAW,EAAE,WAAgB;YAC5C,OAAO,CAAC,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,0BAAiB,CAAC,CAAC;YACvE,OAAO,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,wBAAe,CAAC,CAAC;QACrE,CAAC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAEY,QAAA,GAAG,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;AAC9B,QAAA,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAChC,QAAA,GAAG,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;AAC9B,QAAA,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAClC,QAAA,MAAM,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC"}
package/di.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ export declare class DI {
2
+ static new(target: any): any;
3
+ private static instantiateAndDIParam;
4
+ private static getParams;
5
+ }
package/di.js ADDED
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DI = void 0;
4
+ class DI {
5
+ static new(target) {
6
+ const params = DI.getParams(target);
7
+ if (!params) {
8
+ return Reflect.construct(target, []);
9
+ }
10
+ const instantiatedParams = params.map(DI.instantiateAndDIParam);
11
+ return Reflect.construct(target, instantiatedParams);
12
+ }
13
+ static instantiateAndDIParam(param) {
14
+ if (!param)
15
+ return;
16
+ const hasParams = DI.getParams(param);
17
+ if (hasParams) {
18
+ return DI.new(param);
19
+ }
20
+ return Reflect.construct(param, []);
21
+ }
22
+ static getParams(target) {
23
+ return Reflect.getMetadata("design:paramtypes", target);
24
+ }
25
+ }
26
+ exports.DI = DI;
27
+ //# sourceMappingURL=di.js.map
package/di.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"di.js","sourceRoot":"","sources":["../src/di.ts"],"names":[],"mappings":";;;AAAA,MAAa,EAAE;IACb,MAAM,CAAC,GAAG,CAAC,MAAW;QACpB,MAAM,MAAM,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAEpC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACvC,CAAC;QAED,MAAM,kBAAkB,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,qBAAqB,CAAC,CAAC;QAEhE,OAAO,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IACvD,CAAC;IAEO,MAAM,CAAC,qBAAqB,CAAC,KAAU;QAC7C,IAAI,CAAC,KAAK;YAAE,OAAO;QAEnB,MAAM,SAAS,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAEtC,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;QAED,OAAO,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACtC,CAAC;IAEO,MAAM,CAAC,SAAS,CAAC,MAAW;QAClC,OAAO,OAAO,CAAC,WAAW,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;IAC1D,CAAC;CACF;AA5BD,gBA4BC"}
package/http-core.d.ts ADDED
@@ -0,0 +1,28 @@
1
+ import { type RequestHandler } from "express";
2
+ export declare class AppRouter {
3
+ private static instance;
4
+ static get(): import("express-serve-static-core").Router;
5
+ }
6
+ export declare class Server {
7
+ private readonly app;
8
+ constructor();
9
+ start(port?: number): void;
10
+ use(...handlers: RequestHandler[]): void;
11
+ private setupControllers;
12
+ private appendControllerRouterToApp;
13
+ private getControllers;
14
+ private getControllerRouter;
15
+ static appendControllerMetadata(newController: any, controllerRouter: any): void;
16
+ private static getPrevControllers;
17
+ }
18
+ export declare class ControllerActionReader {
19
+ private actionName;
20
+ private targetPrototype;
21
+ private controllerTarget;
22
+ constructor(actionName: string, targetPrototype: any, controllerTarget: any);
23
+ getMethod(): string;
24
+ getMiddlewares(): any[];
25
+ getPath(): string;
26
+ private normalizePath;
27
+ getControllerClassMiddleware(): any;
28
+ }
package/http-core.js ADDED
@@ -0,0 +1,113 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.ControllerActionReader = exports.Server = exports.AppRouter = void 0;
37
+ const express_1 = __importStar(require("express"));
38
+ const consts_1 = require("./consts");
39
+ class AppRouter {
40
+ static get() {
41
+ return AppRouter.instance;
42
+ }
43
+ }
44
+ exports.AppRouter = AppRouter;
45
+ AppRouter.instance = (0, express_1.Router)();
46
+ class Server {
47
+ constructor() {
48
+ this.app = (0, express_1.default)();
49
+ this.app.use(express_1.default.json());
50
+ this.setupControllers(this.app);
51
+ }
52
+ start(port = 3000) {
53
+ this.app.listen(port, () => {
54
+ console.log(`Application running on port ${port} 🟢`);
55
+ });
56
+ }
57
+ use(...handlers) {
58
+ this.app.use(handlers);
59
+ }
60
+ setupControllers(app) {
61
+ const controllers = this.getControllers();
62
+ controllers.forEach((controller) => this.appendControllerRouterToApp(controller, app));
63
+ }
64
+ appendControllerRouterToApp(controller, app) {
65
+ const router = this.getControllerRouter(controller);
66
+ app.use(router);
67
+ }
68
+ getControllers() {
69
+ return Reflect.getMetadata(consts_1.SERVER_CONTROLLERS, Server);
70
+ }
71
+ getControllerRouter(controller) {
72
+ return Reflect.getMetadata(consts_1.SERVER_ROUTER, controller);
73
+ }
74
+ static appendControllerMetadata(newController, controllerRouter) {
75
+ const prevControllers = this.getPrevControllers();
76
+ Reflect.defineMetadata(consts_1.SERVER_CONTROLLERS, [...prevControllers, newController], Server);
77
+ Reflect.defineMetadata(consts_1.SERVER_ROUTER, controllerRouter, newController);
78
+ }
79
+ static getPrevControllers() {
80
+ return Reflect.getMetadata(consts_1.SERVER_CONTROLLERS, Server) || [];
81
+ }
82
+ }
83
+ exports.Server = Server;
84
+ class ControllerActionReader {
85
+ constructor(actionName, targetPrototype, controllerTarget) {
86
+ this.actionName = actionName;
87
+ this.targetPrototype = targetPrototype;
88
+ this.controllerTarget = controllerTarget;
89
+ }
90
+ getMethod() {
91
+ var _a;
92
+ return ((_a = Reflect.getMetadata(this.actionName, this.targetPrototype, consts_1.CONTROLLER_METHOD)) !== null && _a !== void 0 ? _a : "");
93
+ }
94
+ getMiddlewares() {
95
+ var _a;
96
+ return ((_a = Reflect.getMetadata(this.actionName, this.targetPrototype, consts_1.CONTROLLER_MIDDLEWARE)) !== null && _a !== void 0 ? _a : []);
97
+ }
98
+ getPath() {
99
+ var _a;
100
+ const path = (_a = Reflect.getOwnMetadata(this.actionName, this.targetPrototype, consts_1.CONTROLLER_PATH)) !== null && _a !== void 0 ? _a : "";
101
+ return this.normalizePath(path);
102
+ }
103
+ normalizePath(path) {
104
+ if (!path.startsWith("/"))
105
+ return `/${path}`;
106
+ return path;
107
+ }
108
+ getControllerClassMiddleware() {
109
+ return Reflect.getMetadata(consts_1.CONTROLLER_CLASS_MIDDLEWARE, this.controllerTarget);
110
+ }
111
+ }
112
+ exports.ControllerActionReader = ControllerActionReader;
113
+ //# sourceMappingURL=http-core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-core.js","sourceRoot":"","sources":["../src/http-core.ts"],"names":[],"mappings":"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"}
package/index.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ import 'reflect-metadata';
2
+ import './di';
3
+ export * from './decorators';
4
+ export { Server } from './http-core';
package/index.js ADDED
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.Server = void 0;
18
+ require("reflect-metadata");
19
+ require("./di");
20
+ __exportStar(require("./decorators"), exports);
21
+ var http_core_1 = require("./http-core");
22
+ Object.defineProperty(exports, "Server", { enumerable: true, get: function () { return http_core_1.Server; } });
23
+ //# sourceMappingURL=index.js.map
package/index.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,4BAA0B;AAC1B,gBAAc;AAEd,+CAA6B;AAC7B,yCAAqC;AAA5B,mGAAA,MAAM,OAAA"}
package/package.json CHANGED
@@ -1,17 +1,25 @@
1
1
  {
2
- "name": "damex",
3
- "version": "2.0.16",
4
- "module": "src/index.ts",
5
- "type": "module",
6
- "devDependencies": {
7
- "@types/bun": "latest",
8
- "@types/express": "^5.0.3"
9
- },
10
- "peerDependencies": {
11
- "typescript": "^5"
12
- },
13
- "dependencies": {
14
- "express": "^5.1.0",
15
- "reflect-metadata": "^0.2.2"
16
- }
2
+ "name": "damex",
3
+ "module": "./index.js",
4
+ "version": "2.0.18",
5
+ "author": {
6
+ "email": "matusalem.dev@gmail.com",
7
+ "name": "Matusal3m",
8
+ "url": "https://github.com/matusal3m"
9
+ },
10
+ "main": "./index.js",
11
+ "exports": {
12
+ ".": "./index.js"
13
+ },
14
+ "scripts": {
15
+ "build": "node --trace-warnings build.js && tsc"
16
+ },
17
+ "devDependencies": {
18
+ "@types/express": "^5.0.3"
19
+ },
20
+ "dependencies": {
21
+ "express": "^5.1.0",
22
+ "reflect-metadata": "^0.2.2",
23
+ "typescript": "^5.8.3"
24
+ }
17
25
  }
package/src/consts.ts DELETED
@@ -1,6 +0,0 @@
1
- export const CONTROLLER_METHOD = "controller:method";
2
- export const CONTROLLER_PATH = "controller:path";
3
- export const CONTROLLER_CLASS_MIDDLEWARE = "controller:class_middleware";
4
- export const CONTROLLER_MIDDLEWARE = "controller:middleware";
5
- export const SERVER_CONTROLLERS = "server:controllers";
6
- export const SERVER_ROUTER = "server:router";
package/src/decorators.ts DELETED
@@ -1,75 +0,0 @@
1
- import type { RequestHandler } from "express";
2
- import {
3
- CONTROLLER_METHOD,
4
- CONTROLLER_PATH,
5
- CONTROLLER_CLASS_MIDDLEWARE,
6
- CONTROLLER_MIDDLEWARE,
7
- } from "./consts";
8
- import { AppRouter, ControllerActionReader, Server } from "./http-core";
9
- import { DI } from "./di";
10
-
11
- export function Controller(controllerPath?: string) {
12
- const router = AppRouter.get();
13
-
14
- return (target: any): any => {
15
- const instance = DI.new(target);
16
- const prototype = Object.getPrototypeOf(target);
17
- const [, ...actionsNames] = Object.getOwnPropertyNames(prototype);
18
-
19
- actionsNames.forEach((action) => {
20
- const controllerActionReader = new ControllerActionReader(
21
- action,
22
- prototype,
23
- target,
24
- );
25
-
26
- const actionPath = controllerActionReader.getPath();
27
- const method = controllerActionReader.getMethod();
28
- const middlewares = controllerActionReader.getMiddlewares();
29
- const classMiddleware =
30
- controllerActionReader.getControllerClassMiddleware();
31
-
32
- // @ts-ignore
33
- router[method](
34
- `${controllerPath}/${actionPath}`,
35
- ...middlewares,
36
- ...classMiddleware,
37
- instance[action],
38
- );
39
-
40
- Server.appendControllerMetadata(target, router);
41
- });
42
- };
43
- }
44
-
45
- export function Middleware(handlers: RequestHandler[]) {
46
- return function (target: any, propertyKey: any): any {
47
- Reflect.defineMetadata(
48
- propertyKey,
49
- handlers,
50
- target,
51
- CONTROLLER_MIDDLEWARE,
52
- );
53
- };
54
- }
55
-
56
- export function ClassMiddleware(handlers: RequestHandler[]) {
57
- return function (target: any): void {
58
- Reflect.defineMetadata(CONTROLLER_CLASS_MIDDLEWARE, handlers, target);
59
- };
60
- }
61
-
62
- function createHttpMethod(method: "get" | "post" | "put" | "delete" | "patch") {
63
- return function (path?: string) {
64
- return function (target: any, propertyKey: any): any {
65
- Reflect.defineMetadata(propertyKey, method, target, CONTROLLER_METHOD);
66
- Reflect.defineMetadata(propertyKey, path, target, CONTROLLER_PATH);
67
- };
68
- };
69
- }
70
-
71
- export const Get = createHttpMethod("get");
72
- export const Post = createHttpMethod("post");
73
- export const Put = createHttpMethod("put");
74
- export const Patch = createHttpMethod("patch");
75
- export const Delete = createHttpMethod("delete");
package/src/di.ts DELETED
@@ -1,29 +0,0 @@
1
- export class DI {
2
- static new(target: any): any {
3
- const params = DI.getParams(target);
4
-
5
- if (!params) {
6
- return Reflect.construct(target, []);
7
- }
8
-
9
- const instantiatedParams = params.map(DI.instantiateAndDIParam);
10
-
11
- return Reflect.construct(target, instantiatedParams);
12
- }
13
-
14
- private static instantiateAndDIParam(param: any) {
15
- if (!param) return;
16
-
17
- const hasParams = DI.getParams(param);
18
-
19
- if (hasParams) {
20
- return DI.new(param);
21
- }
22
-
23
- return Reflect.construct(param, []);
24
- }
25
-
26
- private static getParams(target: any): Array<any> {
27
- return Reflect.getMetadata("design:paramtypes", target);
28
- }
29
- }
package/src/http-core.ts DELETED
@@ -1,127 +0,0 @@
1
- import express, { Router, type RequestHandler } from "express";
2
- import {
3
- CONTROLLER_CLASS_MIDDLEWARE,
4
- CONTROLLER_METHOD,
5
- CONTROLLER_MIDDLEWARE,
6
- CONTROLLER_PATH,
7
- SERVER_CONTROLLERS,
8
- SERVER_ROUTER,
9
- } from "./consts";
10
-
11
- type HttpClient = express.Application;
12
-
13
- export class AppRouter {
14
- private static instance = Router();
15
-
16
- static get() {
17
- return AppRouter.instance;
18
- }
19
- }
20
-
21
- export class Server {
22
- private readonly app: HttpClient;
23
-
24
- constructor() {
25
- this.app = express();
26
- this.app.use(express.json());
27
- this.setupControllers(this.app);
28
- }
29
-
30
- start(port: number = 3000) {
31
- this.app.listen(port, () => {
32
- console.log(`Application running on port ${port} 🟢`);
33
- });
34
- }
35
-
36
- use(...handlers: RequestHandler[]) {
37
- this.app.use(handlers);
38
- }
39
-
40
- private setupControllers(app: HttpClient) {
41
- const controllers = this.getControllers();
42
-
43
- controllers.forEach((controller: any) =>
44
- this.appendControllerRouterToApp(controller, app),
45
- );
46
- }
47
-
48
- private appendControllerRouterToApp(controller: any, app: any) {
49
- const router = this.getControllerRouter(controller);
50
- app.use(router);
51
- }
52
-
53
- private getControllers(): Array<any> {
54
- return Reflect.getMetadata(SERVER_CONTROLLERS, Server);
55
- }
56
-
57
- private getControllerRouter(controller: any) {
58
- return Reflect.getMetadata(SERVER_ROUTER, controller);
59
- }
60
-
61
- static appendControllerMetadata(newController: any, controllerRouter: any) {
62
- const prevControllers = this.getPrevControllers();
63
-
64
- Reflect.defineMetadata(
65
- SERVER_CONTROLLERS,
66
- [...prevControllers, newController],
67
- Server,
68
- );
69
-
70
- Reflect.defineMetadata(SERVER_ROUTER, controllerRouter, newController);
71
- }
72
-
73
- private static getPrevControllers() {
74
- return Reflect.getMetadata(SERVER_CONTROLLERS, Server) || [];
75
- }
76
- }
77
-
78
- export class ControllerActionReader {
79
- constructor(
80
- private actionName: string,
81
- private targetPrototype: any,
82
- private controllerTarget: any,
83
- ) {}
84
-
85
- getMethod() {
86
- return (
87
- (Reflect.getMetadata(
88
- this.actionName,
89
- this.targetPrototype,
90
- CONTROLLER_METHOD,
91
- ) as string) ?? ""
92
- );
93
- }
94
-
95
- getMiddlewares() {
96
- return (
97
- (Reflect.getMetadata(
98
- this.actionName,
99
- this.targetPrototype,
100
- CONTROLLER_MIDDLEWARE,
101
- ) as Array<any>) ?? []
102
- );
103
- }
104
-
105
- getPath() {
106
- const path =
107
- Reflect.getOwnMetadata(
108
- this.actionName,
109
- this.targetPrototype,
110
- CONTROLLER_PATH,
111
- ) ?? "";
112
-
113
- return this.normalizePath(path);
114
- }
115
-
116
- private normalizePath(path: string) {
117
- if (!path.startsWith("/")) return `/${path}`;
118
- return path;
119
- }
120
-
121
- getControllerClassMiddleware() {
122
- return Reflect.getMetadata(
123
- CONTROLLER_CLASS_MIDDLEWARE,
124
- this.controllerTarget,
125
- );
126
- }
127
- }
package/src/index.ts DELETED
@@ -1,5 +0,0 @@
1
- import "reflect-metadata";
2
- import "./di.ts";
3
-
4
- export * from "./decorators.ts";
5
- export { Server } from "./http-core.ts";
package/tsconfig.json DELETED
@@ -1,28 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- // Environment setup & latest features
4
- "lib": ["ESNext"],
5
- "target": "ESNext",
6
- "module": "ESNext",
7
- "moduleDetection": "force",
8
- "jsx": "react-jsx",
9
- "allowJs": true,
10
-
11
- // Bundler mode
12
- "moduleResolution": "bundler",
13
- "allowImportingTsExtensions": true,
14
- "verbatimModuleSyntax": true,
15
- "noEmit": true,
16
-
17
- // Best practices
18
- "strict": true,
19
- "skipLibCheck": true,
20
- "noFallthroughCasesInSwitch": true,
21
- "noUncheckedIndexedAccess": true,
22
-
23
- // Some stricter flags (disabled by default)
24
- "noUnusedLocals": false,
25
- "noUnusedParameters": false,
26
- "noPropertyAccessFromIndexSignature": false
27
- }
28
- }