equipped 4.3.2 → 4.4.1
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/CHANGELOG.md +9 -0
- package/lib/logger/index.js +3 -1
- package/lib/server/app.d.ts +2 -1
- package/lib/server/app.js +19 -9
- package/lib/server/controllers/index.d.ts +6 -15
- package/lib/server/controllers/index.js +13 -20
- package/lib/server/controllers/request.d.ts +8 -3
- package/lib/server/controllers/request.js +14 -3
- package/lib/server/controllers/response.d.ts +14 -0
- package/lib/server/controllers/response.js +16 -0
- package/lib/server/index.d.ts +2 -1
- package/lib/server/index.js +3 -1
- package/lib/server/middlewares/errorHandler.js +10 -10
- package/lib/server/routes.d.ts +19 -3
- package/lib/server/routes.js +64 -31
- package/package.json +7 -7
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
### [4.4.1](https://github.com/kevinand11/equipped/compare/v4.4.0...v4.4.1) (2024-02-24)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
* error handler routes ([421ca8a](https://github.com/kevinand11/equipped/commit/421ca8a6fa94af55570d1c0d549ae2238de07db2))
|
|
11
|
+
|
|
12
|
+
## [4.4.0](https://github.com/kevinand11/equipped/compare/v4.3.2...v4.4.0) (2024-02-23)
|
|
13
|
+
|
|
5
14
|
### [4.3.2](https://github.com/kevinand11/equipped/compare/v4.3.1...v4.3.2) (2024-02-21)
|
|
6
15
|
|
|
7
16
|
### [4.3.1](https://github.com/kevinand11/equipped/compare/v4.3.0...v4.3.1) (2024-02-17)
|
package/lib/logger/index.js
CHANGED
|
@@ -35,5 +35,7 @@ class ConsoleLogger extends Logger {
|
|
|
35
35
|
}
|
|
36
36
|
exports.ConsoleLogger = ConsoleLogger;
|
|
37
37
|
_ConsoleLogger_log = new WeakMap(), _ConsoleLogger_instances = new WeakSet(), _ConsoleLogger_getTime = function _ConsoleLogger_getTime() {
|
|
38
|
-
|
|
38
|
+
const date = new Date().toJSON();
|
|
39
|
+
const split = date.split('T');
|
|
40
|
+
return [split[0], split[1].slice(0, 8)].join('T');
|
|
39
41
|
};
|
package/lib/server/app.d.ts
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import supertest from 'supertest';
|
|
2
2
|
import { Listener } from '../listeners';
|
|
3
|
-
import { Route } from './routes';
|
|
3
|
+
import { Route, Router } from './routes';
|
|
4
4
|
export declare class Server {
|
|
5
5
|
#private;
|
|
6
6
|
constructor();
|
|
7
7
|
get listener(): Listener;
|
|
8
8
|
set routes(routes: Route[]);
|
|
9
|
+
register(router: Router): void;
|
|
9
10
|
test(): import("supertest/lib/agent")<supertest.SuperTestStatic.Test>;
|
|
10
11
|
start(port: number): Promise<boolean>;
|
|
11
12
|
}
|
package/lib/server/app.js
CHANGED
|
@@ -31,6 +31,7 @@ const supertest_1 = __importDefault(require("supertest"));
|
|
|
31
31
|
const exit_1 = require("../exit");
|
|
32
32
|
const instance_1 = require("../instance");
|
|
33
33
|
const listeners_1 = require("../listeners");
|
|
34
|
+
const middlewares_1 = require("./middlewares");
|
|
34
35
|
const parseAuthUser_1 = require("./middlewares/parseAuthUser");
|
|
35
36
|
const routes_1 = require("./routes");
|
|
36
37
|
const statusCodes_1 = require("./statusCodes");
|
|
@@ -43,8 +44,7 @@ class Server {
|
|
|
43
44
|
__classPrivateFieldSet(this, _Server_expressApp, (0, express_1.default)(), "f");
|
|
44
45
|
__classPrivateFieldGet(this, _Server_expressApp, "f").disable('x-powered-by');
|
|
45
46
|
__classPrivateFieldSet(this, _Server_httpServer, http_1.default.createServer(__classPrivateFieldGet(this, _Server_expressApp, "f")), "f");
|
|
46
|
-
|
|
47
|
-
__classPrivateFieldGet(this, _Server_expressApp, "f").use((0, morgan_1.default)('dev'));
|
|
47
|
+
__classPrivateFieldGet(this, _Server_expressApp, "f").use((0, morgan_1.default)((tokens, req, res) => `${tokens.method(req, res)}(${tokens.status(req, res)}) ${tokens.url(req, res)} ${tokens.res(req, res, 'content-length')}b - ${tokens['response-time'](req, res)}ms`));
|
|
48
48
|
__classPrivateFieldGet(this, _Server_expressApp, "f").use(express_1.default.json());
|
|
49
49
|
__classPrivateFieldGet(this, _Server_expressApp, "f").use((0, cookie_parser_1.default)());
|
|
50
50
|
__classPrivateFieldGet(this, _Server_expressApp, "f").use(helmet_1.default.crossOriginResourcePolicy({ policy: 'cross-origin' }));
|
|
@@ -77,11 +77,19 @@ class Server {
|
|
|
77
77
|
return __classPrivateFieldGet(this, _Server_listener, "f");
|
|
78
78
|
}
|
|
79
79
|
set routes(routes) {
|
|
80
|
-
|
|
81
|
-
allRoutes.forEach(({ method, path, controllers }) => {
|
|
80
|
+
routes.forEach(({ method, path, global, controllers }) => {
|
|
82
81
|
controllers = [parseAuthUser_1.parseAuthUser, ...controllers];
|
|
83
|
-
if (
|
|
84
|
-
__classPrivateFieldGet(this, _Server_expressApp, "f")[method]?.(formatPath(path), ...controllers);
|
|
82
|
+
if (!global)
|
|
83
|
+
__classPrivateFieldGet(this, _Server_expressApp, "f")[method]?.((0, routes_1.formatPath)(path), ...controllers);
|
|
84
|
+
else
|
|
85
|
+
__classPrivateFieldGet(this, _Server_expressApp, "f").use(...controllers);
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
register(router) {
|
|
89
|
+
router.routes.forEach(({ method, path, global, controllers }) => {
|
|
90
|
+
controllers = [parseAuthUser_1.parseAuthUser, ...controllers];
|
|
91
|
+
if (!global)
|
|
92
|
+
__classPrivateFieldGet(this, _Server_expressApp, "f")[method]?.(path, ...controllers);
|
|
85
93
|
else
|
|
86
94
|
__classPrivateFieldGet(this, _Server_expressApp, "f").use(...controllers);
|
|
87
95
|
});
|
|
@@ -90,6 +98,11 @@ class Server {
|
|
|
90
98
|
return (0, supertest_1.default)(__classPrivateFieldGet(this, _Server_httpServer, "f"));
|
|
91
99
|
}
|
|
92
100
|
async start(port) {
|
|
101
|
+
const postRoutesRouter = new routes_1.Router();
|
|
102
|
+
postRoutesRouter.get({ path: '__health' })(async () => `${instance_1.Instance.get().settings.appId} service running`);
|
|
103
|
+
postRoutesRouter.all({ global: true, middlewares: [middlewares_1.notFoundHandler] })();
|
|
104
|
+
postRoutesRouter.all({ global: true, middlewares: [middlewares_1.errorHandler] })();
|
|
105
|
+
this.register(postRoutesRouter);
|
|
93
106
|
return await new Promise((resolve, reject) => {
|
|
94
107
|
try {
|
|
95
108
|
const app = __classPrivateFieldGet(this, _Server_httpServer, "f").listen(port, async () => {
|
|
@@ -106,6 +119,3 @@ class Server {
|
|
|
106
119
|
}
|
|
107
120
|
exports.Server = Server;
|
|
108
121
|
_Server_expressApp = new WeakMap(), _Server_httpServer = new WeakMap(), _Server_listener = new WeakMap();
|
|
109
|
-
const formatPath = (path) => `/${path}/`
|
|
110
|
-
.replaceAll('///', '/')
|
|
111
|
-
.replaceAll('//', '/');
|
|
@@ -1,19 +1,10 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
1
|
import { ErrorRequestHandler, Handler } from 'express';
|
|
3
|
-
import { Writable } from 'stream';
|
|
4
|
-
import { SupportedStatusCodes } from '../statusCodes';
|
|
5
2
|
import { Request as CustomRequest } from './request';
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
status?: SupportedStatusCodes;
|
|
9
|
-
headers?: Record<string, any>;
|
|
10
|
-
piped?: boolean;
|
|
11
|
-
};
|
|
12
|
-
type ExtraArgs = {
|
|
13
|
-
pipeThrough?: Writable;
|
|
14
|
-
};
|
|
3
|
+
import { Response } from './response';
|
|
4
|
+
type CustomResponse<T> = Response<T> | T;
|
|
15
5
|
export type Controller = Handler | ErrorRequestHandler;
|
|
16
|
-
export
|
|
17
|
-
export declare const
|
|
18
|
-
export declare const
|
|
6
|
+
export type RouteHandler<T> = (req: CustomRequest) => Promise<CustomResponse<T>>;
|
|
7
|
+
export declare const makeController: <T>(cb: RouteHandler<T>) => Controller;
|
|
8
|
+
export declare const makeMiddleware: <T>(cb: RouteHandler<T>) => Controller;
|
|
9
|
+
export declare const makeErrorMiddleware: <T>(cb: (_: CustomRequest, __: Error) => Promise<CustomResponse<T>>) => Controller;
|
|
19
10
|
export {};
|
|
@@ -3,18 +3,16 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.makeErrorMiddleware = exports.makeMiddleware = exports.makeController = void 0;
|
|
4
4
|
const statusCodes_1 = require("../statusCodes");
|
|
5
5
|
const request_1 = require("./request");
|
|
6
|
-
const
|
|
6
|
+
const response_1 = require("./response");
|
|
7
7
|
const makeController = (cb) => {
|
|
8
8
|
return async (req, res, next) => {
|
|
9
9
|
try {
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
const type = result === null || result == undefined ? 'json' : 'send';
|
|
17
|
-
res.status(status)[type](result).end();
|
|
10
|
+
const rawResponse = await cb(await request_1.Request.make(req, res));
|
|
11
|
+
const response = rawResponse instanceof response_1.Response ? rawResponse : new response_1.Response({ body: rawResponse });
|
|
12
|
+
if (!response.piped) {
|
|
13
|
+
Object.entries(response.headers).forEach(([key, value]) => res.header(key, value));
|
|
14
|
+
const type = response.shouldJSONify ? 'json' : 'send';
|
|
15
|
+
res.status(response.status)[type](response.body).end();
|
|
18
16
|
}
|
|
19
17
|
}
|
|
20
18
|
catch (e) {
|
|
@@ -26,10 +24,7 @@ exports.makeController = makeController;
|
|
|
26
24
|
const makeMiddleware = (cb) => {
|
|
27
25
|
return async (req, res, next) => {
|
|
28
26
|
try {
|
|
29
|
-
|
|
30
|
-
pipeThrough: res
|
|
31
|
-
};
|
|
32
|
-
await cb(await request_1.Request.make(req), extras);
|
|
27
|
+
await cb(await request_1.Request.make(req, res));
|
|
33
28
|
return next();
|
|
34
29
|
}
|
|
35
30
|
catch (e) {
|
|
@@ -40,13 +35,11 @@ const makeMiddleware = (cb) => {
|
|
|
40
35
|
exports.makeMiddleware = makeMiddleware;
|
|
41
36
|
const makeErrorMiddleware = (cb) => {
|
|
42
37
|
return async (err, req, res, _) => {
|
|
43
|
-
const
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
Object.entries(headers).forEach(([key, value]) => res.header(key, value));
|
|
49
|
-
res.status(status).send(result).end();
|
|
38
|
+
const rawResponse = await cb(await request_1.Request.make(req, res), err);
|
|
39
|
+
const response = rawResponse instanceof response_1.Response ? rawResponse : new response_1.Response({ body: rawResponse, status: statusCodes_1.StatusCodes.BadRequest });
|
|
40
|
+
if (!response.piped) {
|
|
41
|
+
Object.entries(response.headers).forEach(([key, value]) => res.header(key, value));
|
|
42
|
+
res.status(response.status).send(response.body).end();
|
|
50
43
|
}
|
|
51
44
|
};
|
|
52
45
|
};
|
|
@@ -1,10 +1,14 @@
|
|
|
1
|
-
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { Request as ExpressRequest, Response as ExpressResponse } from 'express';
|
|
3
|
+
import { Writable } from 'stream';
|
|
2
4
|
import { CustomError } from '../../errors';
|
|
3
5
|
import { StorageFile } from '../../storage';
|
|
4
6
|
import { AuthUser, RefreshUser } from '../../utils/authUser';
|
|
7
|
+
import { Response } from './response';
|
|
5
8
|
type HeaderKeys = 'AccessToken' | 'RefreshToken' | 'Referer' | 'ContentType' | 'UserAgent';
|
|
6
9
|
export declare class Request {
|
|
7
10
|
#private;
|
|
11
|
+
private readonly rawRes;
|
|
8
12
|
readonly ip: string | undefined;
|
|
9
13
|
readonly method: string;
|
|
10
14
|
readonly path: string;
|
|
@@ -29,7 +33,8 @@ export declare class Request {
|
|
|
29
33
|
method: string;
|
|
30
34
|
path: string;
|
|
31
35
|
data: Record<string, any>;
|
|
32
|
-
});
|
|
33
|
-
static make(req: ExpressRequest): Promise<Request>;
|
|
36
|
+
}, rawRes: ExpressResponse);
|
|
37
|
+
static make(req: ExpressRequest, res: ExpressResponse): Promise<Request>;
|
|
38
|
+
pipe(cb: (stream: Writable) => void): Response<ExpressResponse<any, Record<string, any>>>;
|
|
34
39
|
}
|
|
35
40
|
export {};
|
|
@@ -9,9 +9,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
9
9
|
exports.Request = void 0;
|
|
10
10
|
const json_1 = require("../../utils/json");
|
|
11
11
|
const media_1 = require("../../utils/media");
|
|
12
|
+
const statusCodes_1 = require("../statusCodes");
|
|
13
|
+
const response_1 = require("./response");
|
|
12
14
|
class Request {
|
|
13
|
-
constructor({ ip, body, cookies, params, query, method, path, headers, files, data }) {
|
|
15
|
+
constructor({ ip, body, cookies, params, query, method, path, headers, files, data }, rawRes) {
|
|
14
16
|
_Request_instances.add(this);
|
|
17
|
+
this.rawRes = rawRes;
|
|
15
18
|
this.authUser = null;
|
|
16
19
|
this.refreshUser = null;
|
|
17
20
|
this.pendingError = null;
|
|
@@ -25,12 +28,16 @@ class Request {
|
|
|
25
28
|
this.params = params;
|
|
26
29
|
this.query = Object.fromEntries(Object.entries(query ?? {})
|
|
27
30
|
.map(([key, val]) => [key, __classPrivateFieldGet(this, _Request_instances, "m", _Request_parseQueryStrings).call(this, val)]));
|
|
31
|
+
if (this.query['auth'])
|
|
32
|
+
delete this.query['auth'];
|
|
33
|
+
if (this.query['authType'])
|
|
34
|
+
delete this.query['authType'];
|
|
28
35
|
this.headers = headers;
|
|
29
36
|
this.files = files;
|
|
30
37
|
this.authUser = data.authUser ?? null;
|
|
31
38
|
this.refreshUser = data.refreshUser ?? null;
|
|
32
39
|
}
|
|
33
|
-
static async make(req) {
|
|
40
|
+
static async make(req, res) {
|
|
34
41
|
const allHeaders = Object.fromEntries(Object.entries(req.headers).map(([key, val]) => [key, val ?? null]));
|
|
35
42
|
const headers = {
|
|
36
43
|
...allHeaders,
|
|
@@ -63,7 +70,11 @@ class Request {
|
|
|
63
70
|
path: req.path,
|
|
64
71
|
headers, files,
|
|
65
72
|
data: {}
|
|
66
|
-
}));
|
|
73
|
+
}, res));
|
|
74
|
+
}
|
|
75
|
+
pipe(cb) {
|
|
76
|
+
cb(this.rawRes);
|
|
77
|
+
return new response_1.Response({ piped: true, status: statusCodes_1.StatusCodes.Ok, body: this.rawRes });
|
|
67
78
|
}
|
|
68
79
|
}
|
|
69
80
|
exports.Request = Request;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { SupportedStatusCodes } from '../statusCodes';
|
|
2
|
+
export declare class Response<T> {
|
|
3
|
+
readonly body: T | undefined;
|
|
4
|
+
readonly status: SupportedStatusCodes;
|
|
5
|
+
readonly headers: Record<string, any>;
|
|
6
|
+
readonly piped: boolean;
|
|
7
|
+
constructor({ body, status, headers, piped }: {
|
|
8
|
+
body?: T;
|
|
9
|
+
status?: SupportedStatusCodes;
|
|
10
|
+
headers?: Record<string, any>;
|
|
11
|
+
piped?: boolean;
|
|
12
|
+
});
|
|
13
|
+
get shouldJSONify(): boolean;
|
|
14
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Response = void 0;
|
|
4
|
+
const statusCodes_1 = require("../statusCodes");
|
|
5
|
+
class Response {
|
|
6
|
+
constructor({ body, status = statusCodes_1.StatusCodes.Ok, headers = { 'Content-Type': 'application/json' }, piped = false }) {
|
|
7
|
+
this.body = body;
|
|
8
|
+
this.status = status;
|
|
9
|
+
this.headers = headers;
|
|
10
|
+
this.piped = piped;
|
|
11
|
+
}
|
|
12
|
+
get shouldJSONify() {
|
|
13
|
+
return this.body === null || this.body === undefined;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
exports.Response = Response;
|
package/lib/server/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export * from './controllers';
|
|
2
2
|
export * from './controllers/request';
|
|
3
|
+
export * from './controllers/response';
|
|
3
4
|
export * from './middlewares';
|
|
4
|
-
export { groupRoutes } from './routes';
|
|
5
|
+
export { Router, groupRoutes } from './routes';
|
|
5
6
|
export type { Route } from './routes';
|
|
6
7
|
export * from './statusCodes';
|
package/lib/server/index.js
CHANGED
|
@@ -14,10 +14,12 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.groupRoutes = void 0;
|
|
17
|
+
exports.groupRoutes = exports.Router = void 0;
|
|
18
18
|
__exportStar(require("./controllers"), exports);
|
|
19
19
|
__exportStar(require("./controllers/request"), exports);
|
|
20
|
+
__exportStar(require("./controllers/response"), exports);
|
|
20
21
|
__exportStar(require("./middlewares"), exports);
|
|
21
22
|
var routes_1 = require("./routes");
|
|
23
|
+
Object.defineProperty(exports, "Router", { enumerable: true, get: function () { return routes_1.Router; } });
|
|
22
24
|
Object.defineProperty(exports, "groupRoutes", { enumerable: true, get: function () { return routes_1.groupRoutes; } });
|
|
23
25
|
__exportStar(require("./statusCodes"), exports);
|
|
@@ -3,20 +3,20 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.errorHandler = void 0;
|
|
4
4
|
const instance_1 = require("../../instance");
|
|
5
5
|
const controllers_1 = require("../controllers");
|
|
6
|
+
const response_1 = require("../controllers/response");
|
|
6
7
|
const statusCodes_1 = require("../statusCodes");
|
|
7
8
|
exports.errorHandler = (0, controllers_1.makeErrorMiddleware)(async (_, err) => {
|
|
8
9
|
const error = err;
|
|
9
|
-
if (error.isCustomError)
|
|
10
|
-
return {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
};
|
|
14
|
-
}
|
|
10
|
+
if (error.isCustomError)
|
|
11
|
+
return new response_1.Response({
|
|
12
|
+
body: error.serializedErrors,
|
|
13
|
+
status: error.statusCode
|
|
14
|
+
});
|
|
15
15
|
else {
|
|
16
16
|
await instance_1.Instance.get().logger.error(err);
|
|
17
|
-
return {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
};
|
|
17
|
+
return new response_1.Response({
|
|
18
|
+
body: [{ message: 'Something went wrong', data: err.message }],
|
|
19
|
+
status: statusCodes_1.StatusCodes.BadRequest
|
|
20
|
+
});
|
|
21
21
|
}
|
|
22
22
|
});
|
package/lib/server/routes.d.ts
CHANGED
|
@@ -1,10 +1,26 @@
|
|
|
1
|
-
import { Controller } from './controllers';
|
|
2
|
-
type MethodTypes = 'get' | 'post' | 'put' | 'delete' | 'all';
|
|
1
|
+
import { Controller, RouteHandler } from './controllers';
|
|
2
|
+
type MethodTypes = 'get' | 'post' | 'put' | 'patch' | 'delete' | 'all';
|
|
3
3
|
export type Route = {
|
|
4
4
|
path: string;
|
|
5
5
|
method: MethodTypes;
|
|
6
6
|
controllers: Controller[];
|
|
7
|
+
global?: boolean;
|
|
7
8
|
};
|
|
8
|
-
export declare const
|
|
9
|
+
export declare const formatPath: (path: string) => string;
|
|
9
10
|
export declare const groupRoutes: (parent: string, routes: Route[]) => Route[];
|
|
11
|
+
type RouteConfig = Partial<Omit<Route, 'method' | 'controllers'>> & {
|
|
12
|
+
middlewares?: Route['controllers'];
|
|
13
|
+
};
|
|
14
|
+
export declare class Router {
|
|
15
|
+
#private;
|
|
16
|
+
readonly routes: Route[];
|
|
17
|
+
constructor(config?: RouteConfig);
|
|
18
|
+
get(route: RouteConfig): <T>(handler?: RouteHandler<T> | undefined) => void;
|
|
19
|
+
post(route: RouteConfig): <T>(handler?: RouteHandler<T> | undefined) => void;
|
|
20
|
+
put(route: RouteConfig): <T>(handler?: RouteHandler<T> | undefined) => void;
|
|
21
|
+
patch(route: RouteConfig): <T>(handler?: RouteHandler<T> | undefined) => void;
|
|
22
|
+
delete(route: RouteConfig): <T>(handler?: RouteHandler<T> | undefined) => void;
|
|
23
|
+
all(route: RouteConfig): <T>(handler?: RouteHandler<T> | undefined) => void;
|
|
24
|
+
include(router: Router): void;
|
|
25
|
+
}
|
|
10
26
|
export {};
|
package/lib/server/routes.js
CHANGED
|
@@ -1,36 +1,69 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
3
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
4
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
5
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
6
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
7
|
+
};
|
|
8
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
9
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
10
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
11
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
12
|
+
};
|
|
13
|
+
var _Router_instances, _Router_config, _Router_addRoute;
|
|
2
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.groupRoutes = exports.
|
|
4
|
-
const instance_1 = require("../instance");
|
|
15
|
+
exports.Router = exports.groupRoutes = exports.formatPath = void 0;
|
|
5
16
|
const controllers_1 = require("./controllers");
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
{
|
|
11
|
-
path: '__health',
|
|
12
|
-
method: 'get',
|
|
13
|
-
controllers: [
|
|
14
|
-
(0, controllers_1.makeController)(async () => {
|
|
15
|
-
return {
|
|
16
|
-
status: statusCodes_1.StatusCodes.Ok,
|
|
17
|
-
result: `${instance_1.Instance.get().settings.appId} service running`
|
|
18
|
-
};
|
|
19
|
-
})
|
|
20
|
-
]
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
path: '',
|
|
24
|
-
method: 'all',
|
|
25
|
-
controllers: [notFoundHandler_1.notFoundHandler]
|
|
26
|
-
},
|
|
27
|
-
{
|
|
28
|
-
path: '',
|
|
29
|
-
method: 'all',
|
|
30
|
-
controllers: [errorHandler_1.errorHandler]
|
|
31
|
-
}
|
|
32
|
-
];
|
|
33
|
-
exports.PostRoutes = PostRoutes;
|
|
17
|
+
const formatPath = (path) => `/${path}`
|
|
18
|
+
.replaceAll('///', '/')
|
|
19
|
+
.replaceAll('//', '/');
|
|
20
|
+
exports.formatPath = formatPath;
|
|
34
21
|
const groupRoutes = (parent, routes) => routes
|
|
35
|
-
.map((route) => ({ ...route, path: `${parent}/${route.path}` }));
|
|
22
|
+
.map((route) => ({ ...route, path: (0, exports.formatPath)(`${parent}/${route.path}`) }));
|
|
36
23
|
exports.groupRoutes = groupRoutes;
|
|
24
|
+
class Router {
|
|
25
|
+
constructor(config) {
|
|
26
|
+
_Router_instances.add(this);
|
|
27
|
+
_Router_config.set(this, void 0);
|
|
28
|
+
this.routes = [];
|
|
29
|
+
__classPrivateFieldSet(this, _Router_config, config, "f");
|
|
30
|
+
}
|
|
31
|
+
get(route) {
|
|
32
|
+
return __classPrivateFieldGet(this, _Router_instances, "m", _Router_addRoute).call(this, 'get', route);
|
|
33
|
+
}
|
|
34
|
+
post(route) {
|
|
35
|
+
return __classPrivateFieldGet(this, _Router_instances, "m", _Router_addRoute).call(this, 'post', route);
|
|
36
|
+
}
|
|
37
|
+
put(route) {
|
|
38
|
+
return __classPrivateFieldGet(this, _Router_instances, "m", _Router_addRoute).call(this, 'put', route);
|
|
39
|
+
}
|
|
40
|
+
patch(route) {
|
|
41
|
+
return __classPrivateFieldGet(this, _Router_instances, "m", _Router_addRoute).call(this, 'patch', route);
|
|
42
|
+
}
|
|
43
|
+
delete(route) {
|
|
44
|
+
return __classPrivateFieldGet(this, _Router_instances, "m", _Router_addRoute).call(this, 'delete', route);
|
|
45
|
+
}
|
|
46
|
+
all(route) {
|
|
47
|
+
return __classPrivateFieldGet(this, _Router_instances, "m", _Router_addRoute).call(this, 'all', route);
|
|
48
|
+
}
|
|
49
|
+
include(router) {
|
|
50
|
+
router.routes.forEach((route) => {
|
|
51
|
+
__classPrivateFieldGet(this, _Router_instances, "m", _Router_addRoute).call(this, route.method, route)();
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
exports.Router = Router;
|
|
56
|
+
_Router_config = new WeakMap(), _Router_instances = new WeakSet(), _Router_addRoute = function _Router_addRoute(method, route) {
|
|
57
|
+
return (handler) => {
|
|
58
|
+
const controllers = [...(__classPrivateFieldGet(this, _Router_config, "f")?.middlewares ?? []), ...(route.middlewares ?? [])];
|
|
59
|
+
if (handler)
|
|
60
|
+
controllers.push((0, controllers_1.makeController)(handler));
|
|
61
|
+
this.routes.push({
|
|
62
|
+
...__classPrivateFieldGet(this, _Router_config, "f"),
|
|
63
|
+
...route,
|
|
64
|
+
method,
|
|
65
|
+
controllers,
|
|
66
|
+
path: (0, exports.formatPath)(`${__classPrivateFieldGet(this, _Router_config, "f")?.path ?? ''}/${route.path ?? ''}`),
|
|
67
|
+
});
|
|
68
|
+
};
|
|
69
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "equipped",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.4.1",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "",
|
|
6
6
|
"main": "lib/index.js",
|
|
@@ -25,12 +25,12 @@
|
|
|
25
25
|
"@types/express-fileupload": "^1.4.4",
|
|
26
26
|
"@types/jsonwebtoken": "^9.0.5",
|
|
27
27
|
"@types/morgan": "^1.9.9",
|
|
28
|
-
"@types/node": "^20.11.
|
|
28
|
+
"@types/node": "^20.11.20",
|
|
29
29
|
"@types/pug": "^2.0.10",
|
|
30
30
|
"@types/supertest": "^6.0.2",
|
|
31
|
-
"@typescript-eslint/eslint-plugin": "^7.0.
|
|
32
|
-
"@typescript-eslint/parser": "^7.0.
|
|
33
|
-
"eslint": "^8.
|
|
31
|
+
"@typescript-eslint/eslint-plugin": "^7.0.2",
|
|
32
|
+
"@typescript-eslint/parser": "^7.0.2",
|
|
33
|
+
"eslint": "^8.57.0",
|
|
34
34
|
"eslint-plugin-promise": "^6.1.1",
|
|
35
35
|
"husky": "^9.0.11",
|
|
36
36
|
"standard-version": "^9.5.0",
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
"compression": "^1.7.4",
|
|
47
47
|
"cookie-parser": "^1.4.6",
|
|
48
48
|
"cors": "^2.8.5",
|
|
49
|
-
"dotenv": "^16.4.
|
|
49
|
+
"dotenv": "^16.4.5",
|
|
50
50
|
"express": "^4.18.2",
|
|
51
51
|
"express-fileupload": "^1.4.3",
|
|
52
52
|
"express-rate-limit": "^7.1.5",
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
"jsonwebtoken": "^9.0.2",
|
|
56
56
|
"jwks-rsa": "^3.1.0",
|
|
57
57
|
"kafkajs": "^2.2.4",
|
|
58
|
-
"mongoose": "^8.
|
|
58
|
+
"mongoose": "^8.2.0",
|
|
59
59
|
"mongoose-lean-defaults": "^2.2.1",
|
|
60
60
|
"mongoose-lean-getters": "^1.1.0",
|
|
61
61
|
"mongoose-lean-virtuals": "^0.9.1",
|