@devbro/neko-router 0.1.0

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.
Files changed (58) hide show
  1. package/README.md +47 -0
  2. package/dist/CompiledRoute.d.mts +23 -0
  3. package/dist/CompiledRoute.d.ts +23 -0
  4. package/dist/CompiledRoute.js +162 -0
  5. package/dist/CompiledRoute.js.map +1 -0
  6. package/dist/CompiledRoute.mjs +138 -0
  7. package/dist/CompiledRoute.mjs.map +1 -0
  8. package/dist/Controller.d.mts +38 -0
  9. package/dist/Controller.d.ts +38 -0
  10. package/dist/Controller.js +146 -0
  11. package/dist/Controller.js.map +1 -0
  12. package/dist/Controller.mjs +115 -0
  13. package/dist/Controller.mjs.map +1 -0
  14. package/dist/Middleware-BjWt0Uml.d.mts +29 -0
  15. package/dist/Middleware-BjWt0Uml.d.ts +29 -0
  16. package/dist/Middleware.d.mts +2 -0
  17. package/dist/Middleware.d.ts +2 -0
  18. package/dist/Middleware.js +35 -0
  19. package/dist/Middleware.js.map +1 -0
  20. package/dist/Middleware.mjs +11 -0
  21. package/dist/Middleware.mjs.map +1 -0
  22. package/dist/MiddlewareFactory.d.mts +8 -0
  23. package/dist/MiddlewareFactory.d.ts +8 -0
  24. package/dist/MiddlewareFactory.js +42 -0
  25. package/dist/MiddlewareFactory.js.map +1 -0
  26. package/dist/MiddlewareFactory.mjs +18 -0
  27. package/dist/MiddlewareFactory.mjs.map +1 -0
  28. package/dist/Route.d.mts +39 -0
  29. package/dist/Route.d.ts +39 -0
  30. package/dist/Route.js +135 -0
  31. package/dist/Route.js.map +1 -0
  32. package/dist/Route.mjs +111 -0
  33. package/dist/Route.mjs.map +1 -0
  34. package/dist/Router.d.mts +17 -0
  35. package/dist/Router.d.ts +17 -0
  36. package/dist/Router.js +106 -0
  37. package/dist/Router.js.map +1 -0
  38. package/dist/Router.mjs +72 -0
  39. package/dist/Router.mjs.map +1 -0
  40. package/dist/helpers.d.mts +6 -0
  41. package/dist/helpers.d.ts +6 -0
  42. package/dist/helpers.js +70 -0
  43. package/dist/helpers.js.map +1 -0
  44. package/dist/helpers.mjs +46 -0
  45. package/dist/helpers.mjs.map +1 -0
  46. package/dist/index.d.mts +8 -0
  47. package/dist/index.d.ts +8 -0
  48. package/dist/index.js +37 -0
  49. package/dist/index.js.map +1 -0
  50. package/dist/index.mjs +9 -0
  51. package/dist/index.mjs.map +1 -0
  52. package/dist/types.d.mts +2 -0
  53. package/dist/types.d.ts +2 -0
  54. package/dist/types.js +17 -0
  55. package/dist/types.js.map +1 -0
  56. package/dist/types.mjs +1 -0
  57. package/dist/types.mjs.map +1 -0
  58. package/package.json +63 -0
package/README.md ADDED
@@ -0,0 +1,47 @@
1
+ # @devbro/neko-router
2
+
3
+ cool routing solution for choosing the code that runs for a given URI.
4
+
5
+ ## supported features
6
+
7
+ - support controller and function as main executor
8
+ - middleware support both as class and function
9
+ - singleton middleware and new instance per request middleware
10
+ - support route variables
11
+
12
+ ## example
13
+
14
+ ```ts
15
+ import {Router, Request, Response} from '@devbro/neko-router';
16
+ const router: Router = new Router();
17
+
18
+ router.addRoute(['GET', 'HEAD'], '/api/v1/countries', async (req: Request, res: Response) => {
19
+ return 'GET countries';
20
+ });
21
+
22
+ router
23
+ .addRoute(['POST'], '/api/v1/countries', async (req: Request, res: Response) => {
24
+ return 'POST countries';
25
+ })
26
+ .addMiddleware([m1, m2]);
27
+
28
+ router.addRoute(
29
+ ['GET'],
30
+ '/api/v1/countries/:countryId',
31
+ async (req: Request, res: Response) => {
32
+ return 'GET PARAM countries ' + req.params?.countryId;
33
+ }
34
+ ).addMiddleware((req,res,next) => {
35
+ console.log('request.params:', req.params);
36
+ await next();
37
+ console.log('final result:', res.statusCode);
38
+ });
39
+
40
+ let req = { url: '/api/v1/countries', method: 'GET' } as Request;
41
+ let res = { ??? } as Response;
42
+ let resolved = router.resolve(req);
43
+
44
+ let compiled_route = router.getCompiledRoute(req,res);
45
+ await compiled_route.run();
46
+ console.log(res.statusCode);
47
+ ```
@@ -0,0 +1,23 @@
1
+ import { R as Request, a as Response, M as MiddlewareProvider, b as Middleware } from './Middleware-BjWt0Uml.mjs';
2
+ import { Route } from './Route.mjs';
3
+ import 'http';
4
+
5
+ declare class CompiledRoute {
6
+ route: Route;
7
+ match: any;
8
+ request: Request;
9
+ response: Response;
10
+ globalMiddlewares: MiddlewareProvider[];
11
+ constructor(route: Route, match: any, request: Request, response: Response, globalMiddlewares?: MiddlewareProvider[]);
12
+ private middlewares;
13
+ getMiddlewares(): Middleware[];
14
+ private prepareMiddlewares;
15
+ isClass(func: any): boolean;
16
+ run(): Promise<void>;
17
+ prepareOutputJsonFormat<T>(obj: object | Array<any>): T;
18
+ convertToString(obj: any): string;
19
+ processResponseBody(res: Response, controller_rc: any): void;
20
+ runMiddlewares(middlewares: Middleware[], req: Request, res: Response): Promise<void>;
21
+ }
22
+
23
+ export { CompiledRoute };
@@ -0,0 +1,23 @@
1
+ import { R as Request, a as Response, M as MiddlewareProvider, b as Middleware } from './Middleware-BjWt0Uml.js';
2
+ import { Route } from './Route.js';
3
+ import 'http';
4
+
5
+ declare class CompiledRoute {
6
+ route: Route;
7
+ match: any;
8
+ request: Request;
9
+ response: Response;
10
+ globalMiddlewares: MiddlewareProvider[];
11
+ constructor(route: Route, match: any, request: Request, response: Response, globalMiddlewares?: MiddlewareProvider[]);
12
+ private middlewares;
13
+ getMiddlewares(): Middleware[];
14
+ private prepareMiddlewares;
15
+ isClass(func: any): boolean;
16
+ run(): Promise<void>;
17
+ prepareOutputJsonFormat<T>(obj: object | Array<any>): T;
18
+ convertToString(obj: any): string;
19
+ processResponseBody(res: Response, controller_rc: any): void;
20
+ runMiddlewares(middlewares: Middleware[], req: Request, res: Response): Promise<void>;
21
+ }
22
+
23
+ export { CompiledRoute };
@@ -0,0 +1,162 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var __async = (__this, __arguments, generator) => {
20
+ return new Promise((resolve, reject) => {
21
+ var fulfilled = (value) => {
22
+ try {
23
+ step(generator.next(value));
24
+ } catch (e) {
25
+ reject(e);
26
+ }
27
+ };
28
+ var rejected = (value) => {
29
+ try {
30
+ step(generator.throw(value));
31
+ } catch (e) {
32
+ reject(e);
33
+ }
34
+ };
35
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
36
+ step((generator = generator.apply(__this, __arguments)).next());
37
+ });
38
+ };
39
+ var CompiledRoute_exports = {};
40
+ __export(CompiledRoute_exports, {
41
+ CompiledRoute: () => CompiledRoute
42
+ });
43
+ module.exports = __toCommonJS(CompiledRoute_exports);
44
+ var import_Middleware = require("./Middleware");
45
+ var import_MiddlewareFactory = require("./MiddlewareFactory");
46
+ class CompiledRoute {
47
+ constructor(route, match, request, response, globalMiddlewares = []) {
48
+ this.route = route;
49
+ this.match = match;
50
+ this.request = request;
51
+ this.response = response;
52
+ this.globalMiddlewares = globalMiddlewares;
53
+ this.middlewares = [];
54
+ this.prepareMiddlewares();
55
+ }
56
+ getMiddlewares() {
57
+ return this.middlewares;
58
+ }
59
+ prepareMiddlewares() {
60
+ this.middlewares = [];
61
+ for (const middleware of [...this.globalMiddlewares, ...this.route.getMiddlewares()]) {
62
+ if (middleware instanceof import_Middleware.Middleware) {
63
+ this.middlewares.push(middleware);
64
+ } else if (this.isClass(middleware)) {
65
+ this.middlewares.push(middleware.getInstance({}));
66
+ } else if (typeof middleware === "function") {
67
+ this.middlewares.push(import_MiddlewareFactory.MiddlewareFactory.create(middleware));
68
+ } else {
69
+ throw new Error("Invalid middleware type");
70
+ }
71
+ }
72
+ }
73
+ isClass(func) {
74
+ return typeof func === "function" && /^class\s/.test(Function.prototype.toString.call(func));
75
+ }
76
+ run() {
77
+ return __async(this, null, function* () {
78
+ return yield this.runMiddlewares(this.middlewares, this.request, this.response);
79
+ });
80
+ }
81
+ prepareOutputJsonFormat(obj) {
82
+ function traverse(value) {
83
+ if (!value || typeof value !== "object") {
84
+ return value;
85
+ }
86
+ if (typeof value.toJson === "function") {
87
+ return traverse(value.toJson());
88
+ }
89
+ if (Array.isArray(value)) {
90
+ return value.map(traverse);
91
+ }
92
+ const result = {};
93
+ for (const key in value) {
94
+ if (Object.prototype.hasOwnProperty.call(value, key)) {
95
+ result[key] = traverse(value[key]);
96
+ }
97
+ }
98
+ return result;
99
+ }
100
+ return traverse(obj);
101
+ }
102
+ convertToString(obj) {
103
+ if (typeof obj === "string") {
104
+ return obj;
105
+ } else if (obj instanceof Buffer) {
106
+ return obj.toString();
107
+ } else if (typeof obj === "object") {
108
+ return JSON.stringify(this.prepareOutputJsonFormat(obj));
109
+ }
110
+ return String(obj);
111
+ }
112
+ processResponseBody(res, controller_rc) {
113
+ if (controller_rc && res.writableEnded) {
114
+ throw new Error("cannot write to response, response has already ended");
115
+ }
116
+ if (res.writableEnded) {
117
+ return;
118
+ }
119
+ if (controller_rc) {
120
+ const header_content_type = res.getHeader("Content-Type");
121
+ if (!header_content_type && typeof controller_rc === "object") {
122
+ res.setHeader("Content-Type", "application/json");
123
+ } else if (!header_content_type) {
124
+ res.setHeader("Content-Type", "text/plain");
125
+ }
126
+ res.end(this.convertToString(controller_rc));
127
+ return;
128
+ } else {
129
+ res.statusCode = [200].includes(res.statusCode) ? 204 : res.statusCode;
130
+ res.end();
131
+ }
132
+ }
133
+ runMiddlewares(middlewares, req, res) {
134
+ return __async(this, null, function* () {
135
+ let index = 0;
136
+ const me = this;
137
+ function next() {
138
+ return __async(this, null, function* () {
139
+ if (index >= middlewares.length) {
140
+ const controller_rc = yield me.route.callHanlder(req, res);
141
+ yield me.processResponseBody(res, controller_rc);
142
+ return;
143
+ }
144
+ const middleware = middlewares[index++];
145
+ if (middleware instanceof import_Middleware.Middleware) {
146
+ yield middleware.call(req, res, next);
147
+ } else if (typeof middleware === "function") {
148
+ yield middleware(req, res, next);
149
+ } else {
150
+ throw new Error("does not know how to run middleware");
151
+ }
152
+ });
153
+ }
154
+ yield next();
155
+ });
156
+ }
157
+ }
158
+ // Annotate the CommonJS export names for ESM import in node:
159
+ 0 && (module.exports = {
160
+ CompiledRoute
161
+ });
162
+ //# sourceMappingURL=CompiledRoute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/CompiledRoute.ts"],"sourcesContent":["import { Middleware } from './Middleware';\nimport { MiddlewareFactory } from './MiddlewareFactory';\nimport { Route } from './Route';\nimport { HandlerType, MiddlewareProvider } from './types';\nimport { LexerToken, Request, Response } from './types';\n\nexport class CompiledRoute {\n constructor(\n public route: Route,\n public match: any,\n public request: Request,\n public response: Response,\n public globalMiddlewares: MiddlewareProvider[] = []\n ) {\n this.prepareMiddlewares();\n }\n\n private middlewares: Middleware[] = [];\n\n getMiddlewares() {\n return this.middlewares;\n }\n\n private prepareMiddlewares() {\n this.middlewares = [];\n for (const middleware of [...this.globalMiddlewares, ...this.route.getMiddlewares()]) {\n if (middleware instanceof Middleware) {\n this.middlewares.push(middleware);\n } else if (this.isClass(middleware)) {\n this.middlewares.push((middleware as any).getInstance({}));\n } else if (typeof middleware === 'function') {\n this.middlewares.push(MiddlewareFactory.create(middleware as HandlerType));\n } else {\n throw new Error('Invalid middleware type');\n }\n }\n }\n\n isClass(func: any) {\n return typeof func === 'function' && /^class\\s/.test(Function.prototype.toString.call(func));\n }\n\n async run() {\n return await this.runMiddlewares(this.middlewares, this.request, this.response);\n }\n\n prepareOutputJsonFormat<T>(obj: object | Array<any>): T {\n function traverse(value: any): any {\n if (!value || typeof value !== 'object') {\n return value;\n }\n\n if (typeof value.toJson === 'function') {\n return traverse(value.toJson());\n }\n\n if (Array.isArray(value)) {\n return value.map(traverse);\n }\n\n const result: Record<string, any> = {};\n for (const key in value) {\n if (Object.prototype.hasOwnProperty.call(value, key)) {\n result[key] = traverse(value[key]);\n }\n }\n return result;\n }\n\n return traverse(obj);\n }\n\n convertToString(obj: any) {\n if (typeof obj === 'string') {\n return obj;\n } else if (obj instanceof Buffer) {\n return obj.toString();\n } else if (typeof obj === 'object') {\n return JSON.stringify(this.prepareOutputJsonFormat(obj));\n }\n return String(obj);\n }\n\n processResponseBody(res: Response, controller_rc: any) {\n if (controller_rc && res.writableEnded) {\n throw new Error('cannot write to response, response has already ended');\n }\n\n if (res.writableEnded) {\n return;\n }\n\n if (controller_rc) {\n const header_content_type = res.getHeader('Content-Type');\n if (!header_content_type && typeof controller_rc === 'object') {\n res.setHeader('Content-Type', 'application/json');\n } else if (!header_content_type) {\n res.setHeader('Content-Type', 'text/plain');\n }\n\n res.end(this.convertToString(controller_rc));\n return;\n } else {\n res.statusCode = [200].includes(res.statusCode) ? 204 : res.statusCode;\n res.end();\n }\n }\n\n async runMiddlewares(middlewares: Middleware[], req: Request, res: Response) {\n let index = 0;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n\n async function next() {\n if (index >= middlewares.length) {\n const controller_rc = await me.route.callHanlder(req, res);\n await me.processResponseBody(res, controller_rc);\n return;\n }\n\n const middleware: Middleware | any = middlewares[index++];\n\n if (middleware instanceof Middleware) {\n await middleware.call(req, res, next);\n } else if (typeof middleware === 'function') {\n await middleware(req, res, next);\n } else {\n throw new Error('does not know how to run middleware');\n }\n }\n\n await next();\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,138 @@
1
+ var __async = (__this, __arguments, generator) => {
2
+ return new Promise((resolve, reject) => {
3
+ var fulfilled = (value) => {
4
+ try {
5
+ step(generator.next(value));
6
+ } catch (e) {
7
+ reject(e);
8
+ }
9
+ };
10
+ var rejected = (value) => {
11
+ try {
12
+ step(generator.throw(value));
13
+ } catch (e) {
14
+ reject(e);
15
+ }
16
+ };
17
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
18
+ step((generator = generator.apply(__this, __arguments)).next());
19
+ });
20
+ };
21
+ import { Middleware } from "./Middleware";
22
+ import { MiddlewareFactory } from "./MiddlewareFactory";
23
+ class CompiledRoute {
24
+ constructor(route, match, request, response, globalMiddlewares = []) {
25
+ this.route = route;
26
+ this.match = match;
27
+ this.request = request;
28
+ this.response = response;
29
+ this.globalMiddlewares = globalMiddlewares;
30
+ this.middlewares = [];
31
+ this.prepareMiddlewares();
32
+ }
33
+ getMiddlewares() {
34
+ return this.middlewares;
35
+ }
36
+ prepareMiddlewares() {
37
+ this.middlewares = [];
38
+ for (const middleware of [...this.globalMiddlewares, ...this.route.getMiddlewares()]) {
39
+ if (middleware instanceof Middleware) {
40
+ this.middlewares.push(middleware);
41
+ } else if (this.isClass(middleware)) {
42
+ this.middlewares.push(middleware.getInstance({}));
43
+ } else if (typeof middleware === "function") {
44
+ this.middlewares.push(MiddlewareFactory.create(middleware));
45
+ } else {
46
+ throw new Error("Invalid middleware type");
47
+ }
48
+ }
49
+ }
50
+ isClass(func) {
51
+ return typeof func === "function" && /^class\s/.test(Function.prototype.toString.call(func));
52
+ }
53
+ run() {
54
+ return __async(this, null, function* () {
55
+ return yield this.runMiddlewares(this.middlewares, this.request, this.response);
56
+ });
57
+ }
58
+ prepareOutputJsonFormat(obj) {
59
+ function traverse(value) {
60
+ if (!value || typeof value !== "object") {
61
+ return value;
62
+ }
63
+ if (typeof value.toJson === "function") {
64
+ return traverse(value.toJson());
65
+ }
66
+ if (Array.isArray(value)) {
67
+ return value.map(traverse);
68
+ }
69
+ const result = {};
70
+ for (const key in value) {
71
+ if (Object.prototype.hasOwnProperty.call(value, key)) {
72
+ result[key] = traverse(value[key]);
73
+ }
74
+ }
75
+ return result;
76
+ }
77
+ return traverse(obj);
78
+ }
79
+ convertToString(obj) {
80
+ if (typeof obj === "string") {
81
+ return obj;
82
+ } else if (obj instanceof Buffer) {
83
+ return obj.toString();
84
+ } else if (typeof obj === "object") {
85
+ return JSON.stringify(this.prepareOutputJsonFormat(obj));
86
+ }
87
+ return String(obj);
88
+ }
89
+ processResponseBody(res, controller_rc) {
90
+ if (controller_rc && res.writableEnded) {
91
+ throw new Error("cannot write to response, response has already ended");
92
+ }
93
+ if (res.writableEnded) {
94
+ return;
95
+ }
96
+ if (controller_rc) {
97
+ const header_content_type = res.getHeader("Content-Type");
98
+ if (!header_content_type && typeof controller_rc === "object") {
99
+ res.setHeader("Content-Type", "application/json");
100
+ } else if (!header_content_type) {
101
+ res.setHeader("Content-Type", "text/plain");
102
+ }
103
+ res.end(this.convertToString(controller_rc));
104
+ return;
105
+ } else {
106
+ res.statusCode = [200].includes(res.statusCode) ? 204 : res.statusCode;
107
+ res.end();
108
+ }
109
+ }
110
+ runMiddlewares(middlewares, req, res) {
111
+ return __async(this, null, function* () {
112
+ let index = 0;
113
+ const me = this;
114
+ function next() {
115
+ return __async(this, null, function* () {
116
+ if (index >= middlewares.length) {
117
+ const controller_rc = yield me.route.callHanlder(req, res);
118
+ yield me.processResponseBody(res, controller_rc);
119
+ return;
120
+ }
121
+ const middleware = middlewares[index++];
122
+ if (middleware instanceof Middleware) {
123
+ yield middleware.call(req, res, next);
124
+ } else if (typeof middleware === "function") {
125
+ yield middleware(req, res, next);
126
+ } else {
127
+ throw new Error("does not know how to run middleware");
128
+ }
129
+ });
130
+ }
131
+ yield next();
132
+ });
133
+ }
134
+ }
135
+ export {
136
+ CompiledRoute
137
+ };
138
+ //# sourceMappingURL=CompiledRoute.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/CompiledRoute.ts"],"sourcesContent":["import { Middleware } from './Middleware';\nimport { MiddlewareFactory } from './MiddlewareFactory';\nimport { Route } from './Route';\nimport { HandlerType, MiddlewareProvider } from './types';\nimport { LexerToken, Request, Response } from './types';\n\nexport class CompiledRoute {\n constructor(\n public route: Route,\n public match: any,\n public request: Request,\n public response: Response,\n public globalMiddlewares: MiddlewareProvider[] = []\n ) {\n this.prepareMiddlewares();\n }\n\n private middlewares: Middleware[] = [];\n\n getMiddlewares() {\n return this.middlewares;\n }\n\n private prepareMiddlewares() {\n this.middlewares = [];\n for (const middleware of [...this.globalMiddlewares, ...this.route.getMiddlewares()]) {\n if (middleware instanceof Middleware) {\n this.middlewares.push(middleware);\n } else if (this.isClass(middleware)) {\n this.middlewares.push((middleware as any).getInstance({}));\n } else if (typeof middleware === 'function') {\n this.middlewares.push(MiddlewareFactory.create(middleware as HandlerType));\n } else {\n throw new Error('Invalid middleware type');\n }\n }\n }\n\n isClass(func: any) {\n return typeof func === 'function' && /^class\\s/.test(Function.prototype.toString.call(func));\n }\n\n async run() {\n return await this.runMiddlewares(this.middlewares, this.request, this.response);\n }\n\n prepareOutputJsonFormat<T>(obj: object | Array<any>): T {\n function traverse(value: any): any {\n if (!value || typeof value !== 'object') {\n return value;\n }\n\n if (typeof value.toJson === 'function') {\n return traverse(value.toJson());\n }\n\n if (Array.isArray(value)) {\n return value.map(traverse);\n }\n\n const result: Record<string, any> = {};\n for (const key in value) {\n if (Object.prototype.hasOwnProperty.call(value, key)) {\n result[key] = traverse(value[key]);\n }\n }\n return result;\n }\n\n return traverse(obj);\n }\n\n convertToString(obj: any) {\n if (typeof obj === 'string') {\n return obj;\n } else if (obj instanceof Buffer) {\n return obj.toString();\n } else if (typeof obj === 'object') {\n return JSON.stringify(this.prepareOutputJsonFormat(obj));\n }\n return String(obj);\n }\n\n processResponseBody(res: Response, controller_rc: any) {\n if (controller_rc && res.writableEnded) {\n throw new Error('cannot write to response, response has already ended');\n }\n\n if (res.writableEnded) {\n return;\n }\n\n if (controller_rc) {\n const header_content_type = res.getHeader('Content-Type');\n if (!header_content_type && typeof controller_rc === 'object') {\n res.setHeader('Content-Type', 'application/json');\n } else if (!header_content_type) {\n res.setHeader('Content-Type', 'text/plain');\n }\n\n res.end(this.convertToString(controller_rc));\n return;\n } else {\n res.statusCode = [200].includes(res.statusCode) ? 204 : res.statusCode;\n res.end();\n }\n }\n\n async runMiddlewares(middlewares: Middleware[], req: Request, res: Response) {\n let index = 0;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n\n async function next() {\n if (index >= middlewares.length) {\n const controller_rc = await me.route.callHanlder(req, res);\n await me.processResponseBody(res, controller_rc);\n return;\n }\n\n const middleware: Middleware | any = middlewares[index++];\n\n if (middleware instanceof Middleware) {\n await middleware.call(req, res, next);\n } else if (typeof middleware === 'function') {\n await middleware(req, res, next);\n } else {\n throw new Error('does not know how to run middleware');\n }\n }\n\n await next();\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,38 @@
1
+ import { M as MiddlewareProvider, C as ControllerDecoratorOptions } from './Middleware-BjWt0Uml.mjs';
2
+ import 'http';
3
+
4
+ declare class BaseController {
5
+ static routes: {
6
+ methods: string[];
7
+ path: string;
8
+ handler: string;
9
+ middlewares: MiddlewareProvider[];
10
+ }[];
11
+ static basePath: string;
12
+ static baseMiddlewares: MiddlewareProvider[];
13
+ static getInstance(): BaseController;
14
+ }
15
+ declare function Controller(path: string, options?: ControllerDecoratorOptions): ClassDecorator;
16
+ declare function Get(data?: {
17
+ path?: string;
18
+ middlewares?: MiddlewareProvider[];
19
+ }): MethodDecorator;
20
+ declare function Post(data?: {
21
+ path?: string;
22
+ middlewares?: MiddlewareProvider[];
23
+ }): MethodDecorator;
24
+ declare function Put(data?: {
25
+ path?: string;
26
+ middlewares?: MiddlewareProvider[];
27
+ }): MethodDecorator;
28
+ declare function Patch(data?: {
29
+ path?: string;
30
+ middlewares?: MiddlewareProvider[];
31
+ }): MethodDecorator;
32
+ declare function Delete(data?: {
33
+ path?: string;
34
+ middlewares?: MiddlewareProvider[];
35
+ }): MethodDecorator;
36
+ declare function createParamDecorator(func: () => Promise<any> | (() => any)): ParameterDecorator;
37
+
38
+ export { BaseController, Controller, Delete, Get, Patch, Post, Put, createParamDecorator };
@@ -0,0 +1,38 @@
1
+ import { M as MiddlewareProvider, C as ControllerDecoratorOptions } from './Middleware-BjWt0Uml.js';
2
+ import 'http';
3
+
4
+ declare class BaseController {
5
+ static routes: {
6
+ methods: string[];
7
+ path: string;
8
+ handler: string;
9
+ middlewares: MiddlewareProvider[];
10
+ }[];
11
+ static basePath: string;
12
+ static baseMiddlewares: MiddlewareProvider[];
13
+ static getInstance(): BaseController;
14
+ }
15
+ declare function Controller(path: string, options?: ControllerDecoratorOptions): ClassDecorator;
16
+ declare function Get(data?: {
17
+ path?: string;
18
+ middlewares?: MiddlewareProvider[];
19
+ }): MethodDecorator;
20
+ declare function Post(data?: {
21
+ path?: string;
22
+ middlewares?: MiddlewareProvider[];
23
+ }): MethodDecorator;
24
+ declare function Put(data?: {
25
+ path?: string;
26
+ middlewares?: MiddlewareProvider[];
27
+ }): MethodDecorator;
28
+ declare function Patch(data?: {
29
+ path?: string;
30
+ middlewares?: MiddlewareProvider[];
31
+ }): MethodDecorator;
32
+ declare function Delete(data?: {
33
+ path?: string;
34
+ middlewares?: MiddlewareProvider[];
35
+ }): MethodDecorator;
36
+ declare function createParamDecorator(func: () => Promise<any> | (() => any)): ParameterDecorator;
37
+
38
+ export { BaseController, Controller, Delete, Get, Patch, Post, Put, createParamDecorator };
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var __async = (__this, __arguments, generator) => {
20
+ return new Promise((resolve, reject) => {
21
+ var fulfilled = (value) => {
22
+ try {
23
+ step(generator.next(value));
24
+ } catch (e) {
25
+ reject(e);
26
+ }
27
+ };
28
+ var rejected = (value) => {
29
+ try {
30
+ step(generator.throw(value));
31
+ } catch (e) {
32
+ reject(e);
33
+ }
34
+ };
35
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
36
+ step((generator = generator.apply(__this, __arguments)).next());
37
+ });
38
+ };
39
+ var Controller_exports = {};
40
+ __export(Controller_exports, {
41
+ BaseController: () => BaseController,
42
+ Controller: () => Controller,
43
+ Delete: () => Delete,
44
+ Get: () => Get,
45
+ Patch: () => Patch,
46
+ Post: () => Post,
47
+ Put: () => Put,
48
+ createParamDecorator: () => createParamDecorator
49
+ });
50
+ module.exports = __toCommonJS(Controller_exports);
51
+ class BaseController {
52
+ static getInstance() {
53
+ return new this();
54
+ }
55
+ }
56
+ BaseController.routes = [];
57
+ BaseController.basePath = "";
58
+ function Controller(path, options = {}) {
59
+ return function(target) {
60
+ target.routes = target.routes || [];
61
+ target.basePath = path;
62
+ target.baseMiddlewares = options.middlewares || [];
63
+ };
64
+ }
65
+ function createHttpDecorator(data) {
66
+ return function(target, propertyKey, descriptor) {
67
+ if (!target.constructor.routes) {
68
+ target.constructor.routes = [];
69
+ }
70
+ target.constructor.routes.push({
71
+ methods: data.methods,
72
+ path: data.path,
73
+ handler: propertyKey,
74
+ middlewares: data.middlewares || []
75
+ });
76
+ const originalMethod = descriptor.value;
77
+ const paramKeys = Reflect.ownKeys(target);
78
+ descriptor.value = function(...args) {
79
+ return __async(this, null, function* () {
80
+ const paramCustomKeys = paramKeys.filter(
81
+ (key) => typeof key === "string" && key.endsWith(":custom")
82
+ );
83
+ for (const paramKey of paramCustomKeys) {
84
+ const paramIndex = parseInt(paramKey.split(":")[1]);
85
+ let method = Reflect.get(target, paramKey.toString());
86
+ if (typeof paramIndex === "number" && typeof method === "function") {
87
+ args[paramIndex] = yield method();
88
+ }
89
+ }
90
+ return originalMethod.apply(this, args);
91
+ });
92
+ };
93
+ };
94
+ }
95
+ function Get(data = {}) {
96
+ return createHttpDecorator({
97
+ methods: ["GET", "HEAD"],
98
+ path: data.path || "/",
99
+ middlewares: data.middlewares || []
100
+ });
101
+ }
102
+ function Post(data = {}) {
103
+ return createHttpDecorator({
104
+ methods: ["POST"],
105
+ path: data.path || "/",
106
+ middlewares: data.middlewares || []
107
+ });
108
+ }
109
+ function Put(data = {}) {
110
+ return createHttpDecorator({
111
+ methods: ["PUT"],
112
+ path: data.path || "/",
113
+ middlewares: data.middlewares || []
114
+ });
115
+ }
116
+ function Patch(data = {}) {
117
+ return createHttpDecorator({
118
+ methods: ["PATCH"],
119
+ path: data.path || "/",
120
+ middlewares: data.middlewares || []
121
+ });
122
+ }
123
+ function Delete(data = {}) {
124
+ return createHttpDecorator({
125
+ methods: ["DELETE"],
126
+ path: data.path || "/",
127
+ middlewares: data.middlewares || []
128
+ });
129
+ }
130
+ function createParamDecorator(func) {
131
+ return function MyParamDecorator(target, propertyKey, parameterIndex) {
132
+ Reflect.set(target, `${propertyKey == null ? void 0 : propertyKey.toString()}:${parameterIndex}:custom`, func);
133
+ };
134
+ }
135
+ // Annotate the CommonJS export names for ESM import in node:
136
+ 0 && (module.exports = {
137
+ BaseController,
138
+ Controller,
139
+ Delete,
140
+ Get,
141
+ Patch,
142
+ Post,
143
+ Put,
144
+ createParamDecorator
145
+ });
146
+ //# sourceMappingURL=Controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/Controller.ts"],"sourcesContent":["import { ControllerDecoratorOptions, MiddlewareProvider } from './types';\nimport { Middleware } from './Middleware';\n\nexport class BaseController {\n static routes: {\n methods: string[];\n path: string;\n handler: string;\n middlewares: MiddlewareProvider[];\n }[] = [];\n static basePath: string = '';\n static baseMiddlewares: MiddlewareProvider[];\n\n static getInstance() {\n return new this();\n }\n}\n\nexport function Controller(path: string, options: ControllerDecoratorOptions = {}): ClassDecorator {\n return function (target: any) {\n (target as any).routes = (target as any).routes || [];\n (target as any).basePath = path;\n (target as any).baseMiddlewares = options.middlewares || [];\n };\n}\n\nfunction createHttpDecorator(data: {\n methods: string[];\n path: string;\n middlewares: MiddlewareProvider[];\n}): MethodDecorator {\n return function (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) {\n if (!target.constructor.routes) {\n target.constructor.routes = [];\n }\n target.constructor.routes.push({\n methods: data.methods,\n path: data.path,\n handler: propertyKey,\n middlewares: data.middlewares || [],\n });\n\n const originalMethod = descriptor.value!;\n const paramKeys = Reflect.ownKeys(target);\n\n descriptor.value = async function (...args: any[]) {\n const paramCustomKeys = paramKeys.filter(\n (key) => typeof key === 'string' && key.endsWith(':custom')\n );\n for (const paramKey of paramCustomKeys) {\n const paramIndex = parseInt((paramKey as string).split(':')[1]);\n let method = Reflect.get(target, paramKey.toString());\n if (typeof paramIndex === 'number' && typeof method === 'function') {\n args[paramIndex] = await method();\n }\n }\n\n return originalMethod.apply(this, args);\n };\n };\n}\n\nexport function Get(\n data: { path?: string; middlewares?: MiddlewareProvider[] } = {}\n): MethodDecorator {\n return createHttpDecorator({\n methods: ['GET', 'HEAD'],\n path: data.path || '/',\n middlewares: data.middlewares || [],\n });\n}\n\nexport function Post(\n data: { path?: string; middlewares?: MiddlewareProvider[] } = {}\n): MethodDecorator {\n return createHttpDecorator({\n methods: ['POST'],\n path: data.path || '/',\n middlewares: data.middlewares || [],\n });\n}\n\nexport function Put(\n data: { path?: string; middlewares?: MiddlewareProvider[] } = {}\n): MethodDecorator {\n return createHttpDecorator({\n methods: ['PUT'],\n path: data.path || '/',\n middlewares: data.middlewares || [],\n });\n}\n\nexport function Patch(\n data: { path?: string; middlewares?: MiddlewareProvider[] } = {}\n): MethodDecorator {\n return createHttpDecorator({\n methods: ['PATCH'],\n path: data.path || '/',\n middlewares: data.middlewares || [],\n });\n}\n\nexport function Delete(\n data: { path?: string; middlewares?: MiddlewareProvider[] } = {}\n): MethodDecorator {\n return createHttpDecorator({\n methods: ['DELETE'],\n path: data.path || '/',\n middlewares: data.middlewares || [],\n });\n}\n\nexport function createParamDecorator(func: () => Promise<any> | (() => any)): ParameterDecorator {\n return function MyParamDecorator(\n target: Object,\n propertyKey: string | symbol | undefined,\n parameterIndex: number\n ) {\n Reflect.set(target, `${propertyKey?.toString()}:${parameterIndex}:custom`, func);\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGO,MAAM,eAAe;AAAA,EAU1B,OAAO,cAAc;AACnB,WAAO,IAAI,KAAK;AAAA,EAClB;AACF;AAba,eACJ,SAKD,CAAC;AANI,eAOJ,WAAmB;AAQrB,SAAS,WAAW,MAAc,UAAsC,CAAC,GAAmB;AACjG,SAAO,SAAU,QAAa;AAC5B,IAAC,OAAe,SAAU,OAAe,UAAU,CAAC;AACpD,IAAC,OAAe,WAAW;AAC3B,IAAC,OAAe,kBAAkB,QAAQ,eAAe,CAAC;AAAA,EAC5D;AACF;AAEA,SAAS,oBAAoB,MAIT;AAClB,SAAO,SAAU,QAAa,aAA8B,YAAgC;AAC1F,QAAI,CAAC,OAAO,YAAY,QAAQ;AAC9B,aAAO,YAAY,SAAS,CAAC;AAAA,IAC/B;AACA,WAAO,YAAY,OAAO,KAAK;AAAA,MAC7B,SAAS,KAAK;AAAA,MACd,MAAM,KAAK;AAAA,MACX,SAAS;AAAA,MACT,aAAa,KAAK,eAAe,CAAC;AAAA,IACpC,CAAC;AAED,UAAM,iBAAiB,WAAW;AAClC,UAAM,YAAY,QAAQ,QAAQ,MAAM;AAExC,eAAW,QAAQ,YAAmB,MAAa;AAAA;AACjD,cAAM,kBAAkB,UAAU;AAAA,UAChC,CAAC,QAAQ,OAAO,QAAQ,YAAY,IAAI,SAAS,SAAS;AAAA,QAC5D;AACA,mBAAW,YAAY,iBAAiB;AACtC,gBAAM,aAAa,SAAU,SAAoB,MAAM,GAAG,EAAE,CAAC,CAAC;AAC9D,cAAI,SAAS,QAAQ,IAAI,QAAQ,SAAS,SAAS,CAAC;AACpD,cAAI,OAAO,eAAe,YAAY,OAAO,WAAW,YAAY;AAClE,iBAAK,UAAU,IAAI,MAAM,OAAO;AAAA,UAClC;AAAA,QACF;AAEA,eAAO,eAAe,MAAM,MAAM,IAAI;AAAA,MACxC;AAAA;AAAA,EACF;AACF;AAEO,SAAS,IACd,OAA8D,CAAC,GAC9C;AACjB,SAAO,oBAAoB;AAAA,IACzB,SAAS,CAAC,OAAO,MAAM;AAAA,IACvB,MAAM,KAAK,QAAQ;AAAA,IACnB,aAAa,KAAK,eAAe,CAAC;AAAA,EACpC,CAAC;AACH;AAEO,SAAS,KACd,OAA8D,CAAC,GAC9C;AACjB,SAAO,oBAAoB;AAAA,IACzB,SAAS,CAAC,MAAM;AAAA,IAChB,MAAM,KAAK,QAAQ;AAAA,IACnB,aAAa,KAAK,eAAe,CAAC;AAAA,EACpC,CAAC;AACH;AAEO,SAAS,IACd,OAA8D,CAAC,GAC9C;AACjB,SAAO,oBAAoB;AAAA,IACzB,SAAS,CAAC,KAAK;AAAA,IACf,MAAM,KAAK,QAAQ;AAAA,IACnB,aAAa,KAAK,eAAe,CAAC;AAAA,EACpC,CAAC;AACH;AAEO,SAAS,MACd,OAA8D,CAAC,GAC9C;AACjB,SAAO,oBAAoB;AAAA,IACzB,SAAS,CAAC,OAAO;AAAA,IACjB,MAAM,KAAK,QAAQ;AAAA,IACnB,aAAa,KAAK,eAAe,CAAC;AAAA,EACpC,CAAC;AACH;AAEO,SAAS,OACd,OAA8D,CAAC,GAC9C;AACjB,SAAO,oBAAoB;AAAA,IACzB,SAAS,CAAC,QAAQ;AAAA,IAClB,MAAM,KAAK,QAAQ;AAAA,IACnB,aAAa,KAAK,eAAe,CAAC;AAAA,EACpC,CAAC;AACH;AAEO,SAAS,qBAAqB,MAA4D;AAC/F,SAAO,SAAS,iBACd,QACA,aACA,gBACA;AACA,YAAQ,IAAI,QAAQ,GAAG,2CAAa,UAAU,IAAI,cAAc,WAAW,IAAI;AAAA,EACjF;AACF;","names":[]}