@adaptivestone/framework 5.0.0-beta.4 → 5.0.0-beta.41
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 +1117 -528
- package/LICENCE +1 -1
- package/dist/Cli.d.ts +7 -0
- package/dist/Cli.js +19 -0
- package/dist/Cli.js.map +1 -0
- package/dist/cluster.d.ts +1 -0
- package/dist/cluster.js +18 -0
- package/dist/cluster.js.map +1 -0
- package/dist/commands/CreateUser.d.ts +32 -0
- package/dist/commands/CreateUser.js +83 -0
- package/dist/commands/CreateUser.js.map +1 -0
- package/dist/commands/Documentation.d.ts +5 -0
- package/dist/commands/Documentation.js +15 -0
- package/dist/commands/Documentation.js.map +1 -0
- package/dist/commands/DropIndex.d.ts +16 -0
- package/dist/commands/DropIndex.js +30 -0
- package/dist/commands/DropIndex.js.map +1 -0
- package/dist/commands/GenerateRandomBytes.d.ts +7 -0
- package/dist/commands/GenerateRandomBytes.js +18 -0
- package/dist/commands/GenerateRandomBytes.js.map +1 -0
- package/dist/commands/GenerateTypes.d.ts +11 -0
- package/dist/commands/GenerateTypes.js +52 -0
- package/dist/commands/GenerateTypes.js.map +1 -0
- package/dist/commands/GetOpenApiJson.d.ts +17 -0
- package/dist/commands/GetOpenApiJson.js +272 -0
- package/dist/commands/GetOpenApiJson.js.map +1 -0
- package/dist/commands/SyncIndexes.d.ts +6 -0
- package/dist/commands/SyncIndexes.js +31 -0
- package/dist/commands/SyncIndexes.js.map +1 -0
- package/dist/commands/migration/Create.d.ts +18 -0
- package/dist/commands/migration/Create.js +57 -0
- package/dist/commands/migration/Create.js.map +1 -0
- package/dist/commands/migration/Migrate.d.ts +6 -0
- package/dist/commands/migration/Migrate.js +43 -0
- package/dist/commands/migration/Migrate.js.map +1 -0
- package/dist/config/auth.d.ts +6 -0
- package/dist/config/auth.js +7 -0
- package/dist/config/auth.js.map +1 -0
- package/dist/config/http.d.ts +8 -0
- package/dist/config/http.js +10 -0
- package/dist/config/http.js.map +1 -0
- package/dist/config/i18n.d.ts +13 -0
- package/dist/config/i18n.js +13 -0
- package/dist/config/i18n.js.map +1 -0
- package/dist/config/ipDetector.d.ts +5 -0
- package/dist/config/ipDetector.js +15 -0
- package/dist/config/ipDetector.js.map +1 -0
- package/dist/config/log.d.ts +11 -0
- package/dist/config/log.js +20 -0
- package/dist/config/log.js.map +1 -0
- package/dist/config/mongo.d.ts +4 -0
- package/dist/config/mongo.js +4 -0
- package/dist/config/mongo.js.map +1 -0
- package/dist/config/rateLimiter.d.ts +13 -0
- package/dist/config/rateLimiter.js +17 -0
- package/dist/config/rateLimiter.js.map +1 -0
- package/dist/config/redis.d.ts +5 -0
- package/dist/config/redis.js +5 -0
- package/dist/config/redis.js.map +1 -0
- package/dist/config/validate.d.ts +4 -0
- package/dist/config/validate.js +4 -0
- package/dist/config/validate.js.map +1 -0
- package/dist/controllers/Auth.d.ts +131 -0
- package/dist/controllers/Auth.js +186 -0
- package/dist/controllers/Auth.js.map +1 -0
- package/dist/controllers/Home.d.ts +15 -0
- package/dist/controllers/Home.js +22 -0
- package/dist/controllers/Home.js.map +1 -0
- package/dist/controllers/index.d.ts +16 -0
- package/dist/controllers/index.js +59 -0
- package/dist/controllers/index.js.map +1 -0
- package/dist/folderConfig.d.ts +34 -0
- package/dist/folderConfig.js +14 -0
- package/dist/folderConfig.js.map +1 -0
- package/dist/helpers/appInstance.d.ts +3 -0
- package/dist/helpers/appInstance.js +8 -0
- package/dist/helpers/appInstance.js.map +1 -0
- package/dist/helpers/crypto.d.ts +3 -0
- package/dist/helpers/crypto.js +17 -0
- package/dist/helpers/crypto.js.map +1 -0
- package/dist/helpers/files.d.ts +16 -0
- package/dist/helpers/files.js +76 -0
- package/dist/helpers/files.js.map +1 -0
- package/dist/helpers/logger.d.ts +4 -0
- package/dist/helpers/logger.js +20 -0
- package/dist/helpers/logger.js.map +1 -0
- package/dist/helpers/redis/clearNamespace.d.ts +2 -0
- package/dist/helpers/redis/clearNamespace.js +14 -0
- package/dist/helpers/redis/clearNamespace.js.map +1 -0
- package/dist/helpers/redis/redisConnection.d.ts +6 -0
- package/dist/helpers/redis/redisConnection.js +48 -0
- package/dist/helpers/redis/redisConnection.js.map +1 -0
- package/dist/helpers/yup.d.ts +13 -0
- package/dist/helpers/yup.js +21 -0
- package/dist/helpers/yup.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/models/Lock.d.ts +90 -0
- package/dist/models/Lock.js +97 -0
- package/dist/models/Lock.js.map +1 -0
- package/dist/models/Migration.d.ts +13 -0
- package/dist/models/Migration.js +14 -0
- package/dist/models/Migration.js.map +1 -0
- package/dist/models/Sequence.d.ts +28 -0
- package/dist/models/Sequence.js +19 -0
- package/dist/models/Sequence.js.map +1 -0
- package/dist/models/User.d.ts +656 -0
- package/dist/models/User.js +291 -0
- package/dist/models/User.js.map +1 -0
- package/dist/models/UserOld.d.ts +179 -0
- package/dist/models/UserOld.js +230 -0
- package/dist/models/UserOld.js.map +1 -0
- package/dist/modules/AbstractCommand.d.ts +51 -0
- package/dist/modules/AbstractCommand.js +60 -0
- package/dist/modules/AbstractCommand.js.map +1 -0
- package/dist/modules/AbstractConnector.d.ts +5 -0
- package/dist/modules/AbstractConnector.js +8 -0
- package/dist/modules/AbstractConnector.js.map +1 -0
- package/dist/modules/AbstractController.d.ts +95 -0
- package/dist/modules/AbstractController.js +323 -0
- package/dist/modules/AbstractController.js.map +1 -0
- package/dist/modules/AbstractModel.d.ts +29 -0
- package/dist/modules/AbstractModel.js +42 -0
- package/dist/modules/AbstractModel.js.map +1 -0
- package/dist/modules/Base.d.ts +29 -0
- package/dist/modules/Base.js +58 -0
- package/dist/modules/Base.js.map +1 -0
- package/dist/modules/BaseCli.d.ts +25 -0
- package/dist/modules/BaseCli.js +147 -0
- package/dist/modules/BaseCli.js.map +1 -0
- package/dist/modules/BaseModel.d.ts +55 -0
- package/dist/modules/BaseModel.js +37 -0
- package/dist/modules/BaseModel.js.map +1 -0
- package/dist/server.d.ts +123 -0
- package/dist/server.js +468 -0
- package/dist/server.js.map +1 -0
- package/dist/services/cache/Cache.d.ts +31 -0
- package/dist/services/cache/Cache.js +102 -0
- package/dist/services/cache/Cache.js.map +1 -0
- package/dist/services/documentation/DocumentationGenerator.d.ts +11 -0
- package/dist/services/documentation/DocumentationGenerator.js +130 -0
- package/dist/services/documentation/DocumentationGenerator.js.map +1 -0
- package/dist/services/http/HttpServer.d.ts +35 -0
- package/dist/services/http/HttpServer.js +70 -0
- package/dist/services/http/HttpServer.js.map +1 -0
- package/dist/services/http/middleware/AbstractMiddleware.d.ts +26 -0
- package/dist/services/http/middleware/AbstractMiddleware.js +41 -0
- package/dist/services/http/middleware/AbstractMiddleware.js.map +1 -0
- package/dist/services/http/middleware/Auth.d.ts +9 -0
- package/dist/services/http/middleware/Auth.js +18 -0
- package/dist/services/http/middleware/Auth.js.map +1 -0
- package/dist/services/http/middleware/Cors.d.ts +12 -0
- package/dist/services/http/middleware/Cors.js +36 -0
- package/dist/services/http/middleware/Cors.js.map +1 -0
- package/dist/services/http/middleware/GetUserByToken.d.ts +27 -0
- package/dist/services/http/middleware/GetUserByToken.js +47 -0
- package/dist/services/http/middleware/GetUserByToken.js.map +1 -0
- package/dist/services/http/middleware/I18n.d.ts +23 -0
- package/dist/services/http/middleware/I18n.js +61 -0
- package/dist/services/http/middleware/I18n.js.map +1 -0
- package/dist/services/http/middleware/IpDetector.d.ts +14 -0
- package/dist/services/http/middleware/IpDetector.js +55 -0
- package/dist/services/http/middleware/IpDetector.js.map +1 -0
- package/dist/services/http/middleware/Pagination.d.ts +27 -0
- package/dist/services/http/middleware/Pagination.js +46 -0
- package/dist/services/http/middleware/Pagination.js.map +1 -0
- package/dist/services/http/middleware/PrepareAppInfo.d.ts +8 -0
- package/dist/services/http/middleware/PrepareAppInfo.js +17 -0
- package/dist/services/http/middleware/PrepareAppInfo.js.map +1 -0
- package/dist/services/http/middleware/RateLimiter.d.ts +26 -0
- package/dist/services/http/middleware/RateLimiter.js +102 -0
- package/dist/services/http/middleware/RateLimiter.js.map +1 -0
- package/dist/services/http/middleware/RequestLogger.d.ts +8 -0
- package/dist/services/http/middleware/RequestLogger.js +18 -0
- package/dist/services/http/middleware/RequestLogger.js.map +1 -0
- package/dist/services/http/middleware/RequestParser.d.ts +8 -0
- package/dist/services/http/middleware/RequestParser.js +35 -0
- package/dist/services/http/middleware/RequestParser.js.map +1 -0
- package/dist/services/http/middleware/Role.d.ts +12 -0
- package/dist/services/http/middleware/Role.js +24 -0
- package/dist/services/http/middleware/Role.js.map +1 -0
- package/dist/services/i18n/I18n.d.ts +15 -0
- package/dist/services/i18n/I18n.js +58 -0
- package/dist/services/i18n/I18n.js.map +1 -0
- package/dist/services/logging/SentryTransport.d.ts +13 -0
- package/dist/services/logging/SentryTransport.js +121 -0
- package/dist/services/logging/SentryTransport.js.map +1 -0
- package/dist/services/validate/ValidateService.d.ts +31 -0
- package/dist/services/validate/ValidateService.js +95 -0
- package/dist/services/validate/ValidateService.js.map +1 -0
- package/dist/services/validate/drivers/AbstractValidator.d.ts +14 -0
- package/dist/services/validate/drivers/AbstractValidator.js +29 -0
- package/dist/services/validate/drivers/AbstractValidator.js.map +1 -0
- package/dist/services/validate/drivers/CustomValidator.d.ts +14 -0
- package/dist/services/validate/drivers/CustomValidator.js +48 -0
- package/dist/services/validate/drivers/CustomValidator.js.map +1 -0
- package/dist/services/validate/drivers/YupValidator.d.ts +13 -0
- package/dist/services/validate/drivers/YupValidator.js +86 -0
- package/dist/services/validate/drivers/YupValidator.js.map +1 -0
- package/dist/tests/frameworkVitestSetup.d.ts +1 -0
- package/dist/tests/frameworkVitestSetup.js +9 -0
- package/dist/tests/frameworkVitestSetup.js.map +1 -0
- package/dist/tests/globalSetupVitest.d.ts +3 -0
- package/dist/tests/globalSetupVitest.js +29 -0
- package/dist/tests/globalSetupVitest.js.map +1 -0
- package/dist/tests/setupVitest.d.ts +1 -0
- package/dist/tests/setupVitest.js +91 -0
- package/dist/tests/setupVitest.js.map +1 -0
- package/dist/tests/testHelpers.d.ts +340 -0
- package/dist/tests/testHelpers.js +48 -0
- package/dist/tests/testHelpers.js.map +1 -0
- package/package.json +53 -40
- package/Cli.js +0 -22
- package/cluster.js +0 -27
- package/commands/CreateUser.js +0 -75
- package/commands/Documentation.js +0 -17
- package/commands/DropIndex.js +0 -29
- package/commands/GenerateRandomBytes.js +0 -21
- package/commands/GetOpenApiJson.js +0 -325
- package/commands/SyncIndexes.js +0 -39
- package/commands/migration/Create.js +0 -61
- package/commands/migration/Migrate.js +0 -55
- package/config/auth.js +0 -9
- package/config/http.js +0 -9
- package/config/i18n.js +0 -12
- package/config/ipDetector.js +0 -14
- package/config/log.js +0 -22
- package/config/mail.js +0 -29
- package/config/mongo.js +0 -3
- package/config/rateLimiter.js +0 -16
- package/config/redis.js +0 -4
- package/config/validate.js +0 -3
- package/controllers/Auth.js +0 -210
- package/controllers/Home.js +0 -28
- package/controllers/index.js +0 -60
- package/folderConfig.js +0 -14
- package/helpers/files.js +0 -79
- package/helpers/logger.js +0 -17
- package/helpers/redis/clearNamespace.js +0 -14
- package/helpers/yup.js +0 -24
- package/index.js +0 -8
- package/jsconfig.json +0 -9
- package/locales/en/translation.json +0 -27
- package/locales/ru/translation.json +0 -27
- package/migrations/.gitkeep +0 -0
- package/models/Migration.js +0 -15
- package/models/Sequence.js +0 -22
- package/models/User.js +0 -263
- package/modules/AbstractCommand.js +0 -43
- package/modules/AbstractConnector.js +0 -9
- package/modules/AbstractController.js +0 -413
- package/modules/AbstractModel.d.ts +0 -48
- package/modules/AbstractModel.js +0 -92
- package/modules/Base.d.ts +0 -37
- package/modules/Base.js +0 -63
- package/modules/BaseCli.js +0 -97
- package/server.d.ts +0 -98
- package/server.js +0 -438
- package/services/cache/Cache.d.ts +0 -35
- package/services/cache/Cache.js +0 -124
- package/services/documentation/DocumentationGenerator.js +0 -169
- package/services/http/HttpServer.js +0 -96
- package/services/http/middleware/AbstractMiddleware.js +0 -51
- package/services/http/middleware/Auth.js +0 -20
- package/services/http/middleware/Cors.js +0 -46
- package/services/http/middleware/GetUserByToken.js +0 -47
- package/services/http/middleware/I18n.js +0 -117
- package/services/http/middleware/IpDetector.js +0 -59
- package/services/http/middleware/Pagination.js +0 -57
- package/services/http/middleware/PrepareAppInfo.js +0 -18
- package/services/http/middleware/RateLimiter.js +0 -134
- package/services/http/middleware/RequestLogger.js +0 -22
- package/services/http/middleware/RequestParser.js +0 -40
- package/services/http/middleware/Role.js +0 -29
- package/services/messaging/email/index.js +0 -217
- package/services/messaging/email/resources/.gitkeep +0 -1
- package/services/messaging/email/templates/emptyTemplate/html.pug +0 -9
- package/services/messaging/email/templates/emptyTemplate/subject.pug +0 -1
- package/services/messaging/email/templates/emptyTemplate/text.pug +0 -1
- package/services/messaging/email/templates/recovery/html.pug +0 -8
- package/services/messaging/email/templates/recovery/subject.pug +0 -2
- package/services/messaging/email/templates/recovery/text.pug +0 -3
- package/services/messaging/email/templates/verification/html.pug +0 -10
- package/services/messaging/email/templates/verification/subject.pug +0 -1
- package/services/messaging/email/templates/verification/text.pug +0 -1
- package/services/messaging/index.js +0 -3
- package/services/validate/ValidateService.js +0 -157
- package/services/validate/drivers/AbstractValidator.js +0 -37
- package/services/validate/drivers/CustomValidator.js +0 -51
- package/services/validate/drivers/YupValidator.js +0 -103
- package/tests/globalSetupVitest.js +0 -35
- package/tests/setup.js +0 -118
- package/tests/setupVitest.js +0 -109
- package/types/Expand.d.ts +0 -11
- package/types/TFoldersConfig.d.ts +0 -17
- package/views/404.pug +0 -3
- package/views/home.pug +0 -3
- package/views/layouts/base.pug +0 -39
- package/vitest.config.js +0 -16
- /package/{commands → dist/migrations}/.gitkeep +0 -0
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
import express from 'express';
|
|
2
|
+
import DocumentationGenerator from '../services/documentation/DocumentationGenerator.js';
|
|
3
|
+
import Auth from "../services/http/middleware/Auth.js";
|
|
4
|
+
import GetUserByToken from "../services/http/middleware/GetUserByToken.js";
|
|
5
|
+
import ValidateService from '../services/validate/ValidateService.js';
|
|
6
|
+
import Base from "./Base.js";
|
|
7
|
+
/**
|
|
8
|
+
* Abstract controller. You should extend any controller from them.
|
|
9
|
+
* Place you cintroller into controller folder and it be inited in auto way.
|
|
10
|
+
* By default name of route will be controller name not file name. But please name it in same ways.
|
|
11
|
+
* You can overwrite base controllers byt creating controllers with tha same file name (yes file name, not class name)
|
|
12
|
+
* In most cases you will want to have a 'home' route that not include controller name. For this case please check ' getHttpPath'
|
|
13
|
+
*/
|
|
14
|
+
class AbstractController extends Base {
|
|
15
|
+
prefix = '';
|
|
16
|
+
router;
|
|
17
|
+
constructor(app, prefix, isExpressMergeParams = false) {
|
|
18
|
+
const time = Date.now();
|
|
19
|
+
super(app);
|
|
20
|
+
this.prefix = prefix;
|
|
21
|
+
this.router = express.Router({
|
|
22
|
+
mergeParams: isExpressMergeParams,
|
|
23
|
+
});
|
|
24
|
+
const { routes } = this;
|
|
25
|
+
const httpPath = this.getHttpPath();
|
|
26
|
+
/**
|
|
27
|
+
* Grab route middleware into one Map
|
|
28
|
+
*/
|
|
29
|
+
const routeMiddlewares = new Map();
|
|
30
|
+
Object.entries(routes).forEach(([method, methodRoutes]) => {
|
|
31
|
+
Object.entries(methodRoutes).forEach(([route, routeParam]) => {
|
|
32
|
+
if (typeof routeParam === 'object' &&
|
|
33
|
+
routeParam !== null &&
|
|
34
|
+
'middleware' in routeParam &&
|
|
35
|
+
routeParam.middleware) {
|
|
36
|
+
const fullRoute = method.toUpperCase() + route;
|
|
37
|
+
if (!routeMiddlewares.has(fullRoute)) {
|
|
38
|
+
routeMiddlewares.set(fullRoute, []);
|
|
39
|
+
}
|
|
40
|
+
routeMiddlewares.set(fullRoute, [
|
|
41
|
+
...routeMiddlewares.get(fullRoute),
|
|
42
|
+
...routeParam.middleware,
|
|
43
|
+
]);
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
const routeMiddlewaresReg = this.parseMiddlewares(routeMiddlewares, httpPath);
|
|
48
|
+
const middlewaresInfo = this.parseMiddlewares(this.constructor.middleware, httpPath);
|
|
49
|
+
const routesInfo = [];
|
|
50
|
+
/**
|
|
51
|
+
* Register controller middleware
|
|
52
|
+
*/
|
|
53
|
+
for (const middleware of middlewaresInfo) {
|
|
54
|
+
this.router[middleware.method](middleware.path, new middleware.MiddlewareFunction(this.app, middleware.params).getMiddleware());
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Register routes itself
|
|
58
|
+
*/
|
|
59
|
+
for (const verb in routes) {
|
|
60
|
+
if (typeof this.router[verb] !== 'function') {
|
|
61
|
+
this.logger?.error(`Method ${verb} not exist for router. Please check your codebase`);
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
for (const path in routes[verb]) {
|
|
65
|
+
const routeAdditionalMiddlewares = routeMiddlewaresReg.filter((middleware) => middleware.path === path && middleware.method === verb);
|
|
66
|
+
let routeObject = routes[verb][path];
|
|
67
|
+
if (Object.prototype.toString.call(routeObject) !== '[object Object]') {
|
|
68
|
+
// for support firect pass function instead of object
|
|
69
|
+
routeObject = {
|
|
70
|
+
handler: routeObject,
|
|
71
|
+
request: null,
|
|
72
|
+
query: null,
|
|
73
|
+
middleware: null,
|
|
74
|
+
};
|
|
75
|
+
if (typeof routeObject.handler !== 'function') {
|
|
76
|
+
this.logger?.error(`Can't resolve function '${routeObject.handler}' for controller '${this.getConstructorName()}'`);
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
const { handler } = routeObject;
|
|
81
|
+
let fnName;
|
|
82
|
+
if (typeof handler === 'function') {
|
|
83
|
+
fnName = handler.name;
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
fnName = undefined;
|
|
87
|
+
}
|
|
88
|
+
const fullPath = `/${httpPath}/${path}`
|
|
89
|
+
.split('//')
|
|
90
|
+
.join('/')
|
|
91
|
+
.split('//')
|
|
92
|
+
.join('/');
|
|
93
|
+
routesInfo.push({
|
|
94
|
+
name: fnName,
|
|
95
|
+
description: routeObject?.description,
|
|
96
|
+
method: verb.toUpperCase(),
|
|
97
|
+
fields: routeObject?.request?.fields,
|
|
98
|
+
queryFields: routeObject?.query?.fields,
|
|
99
|
+
path,
|
|
100
|
+
fullPath,
|
|
101
|
+
});
|
|
102
|
+
// this.logger.verbose(
|
|
103
|
+
// `Controller '${this.getConstructorName()}' register function '${fnName}' for method '${verb}' and path '${path}' Full path '${fullPath}'`,
|
|
104
|
+
// );
|
|
105
|
+
let additionalMiddlewares;
|
|
106
|
+
if (routeAdditionalMiddlewares.length > 0) {
|
|
107
|
+
additionalMiddlewares = Array.from(routeAdditionalMiddlewares, ({ MiddlewareFunction, params }) => new MiddlewareFunction(this.app, params).getMiddleware());
|
|
108
|
+
}
|
|
109
|
+
this.router[verb](path, additionalMiddlewares || [], async (req, res, next) => {
|
|
110
|
+
const requestObj = {
|
|
111
|
+
query: req.query,
|
|
112
|
+
body: req.body,
|
|
113
|
+
appInfo: req.appInfo,
|
|
114
|
+
};
|
|
115
|
+
try {
|
|
116
|
+
req.appInfo.request = await new ValidateService(this.app, routeObject?.request).validateReqData(requestObj, {
|
|
117
|
+
selectedReqData: req.body,
|
|
118
|
+
additionalMiddlewareFieldsData: {
|
|
119
|
+
middlewaresInfo,
|
|
120
|
+
routeMiddlewaresReg,
|
|
121
|
+
options: {
|
|
122
|
+
method: verb,
|
|
123
|
+
path: fullPath,
|
|
124
|
+
prefix: 'request',
|
|
125
|
+
},
|
|
126
|
+
},
|
|
127
|
+
});
|
|
128
|
+
req.appInfo.query = await new ValidateService(this.app, routeObject?.query).validateReqData(requestObj, {
|
|
129
|
+
selectedReqData: req.query,
|
|
130
|
+
additionalMiddlewareFieldsData: {
|
|
131
|
+
middlewaresInfo,
|
|
132
|
+
routeMiddlewaresReg,
|
|
133
|
+
options: {
|
|
134
|
+
method: verb,
|
|
135
|
+
path: fullPath,
|
|
136
|
+
prefix: 'query',
|
|
137
|
+
},
|
|
138
|
+
},
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
catch (err) {
|
|
142
|
+
return res.status(400).json({
|
|
143
|
+
errors: err instanceof Error ? err.message : String(err),
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
// req.body = new Proxy(req.body, {
|
|
147
|
+
// get: (target, prop) => {
|
|
148
|
+
// this.logger.warn(
|
|
149
|
+
// 'Please not use "req.body" directly. Implement "request" and use "req.appInfo.request" ',
|
|
150
|
+
// );
|
|
151
|
+
// return target[prop];
|
|
152
|
+
// },
|
|
153
|
+
// });
|
|
154
|
+
// req.query = new Proxy(req.query, {
|
|
155
|
+
// get: (target, prop) => {
|
|
156
|
+
// this.logger.warn(
|
|
157
|
+
// 'Please not use "req.query" directly. Implement "query" and use "req.appInfo.query" ',
|
|
158
|
+
// );
|
|
159
|
+
// return target[prop];
|
|
160
|
+
// },
|
|
161
|
+
// });
|
|
162
|
+
if (!routeObject.handler) {
|
|
163
|
+
this.logger?.error(`Route object have no handler defined`);
|
|
164
|
+
return res.status(500).json({
|
|
165
|
+
message: 'Platform error 2. Please check later or contact support',
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
if (routeObject.handler.constructor.name !== 'AsyncFunction') {
|
|
169
|
+
const error = "Handler should be AsyncFunction. Perhabs you miss 'async' of function declaration?";
|
|
170
|
+
this.logger?.error(error);
|
|
171
|
+
return res.status(500).json({
|
|
172
|
+
message: 'Platform error. Please check later or contact support',
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
return routeObject.handler
|
|
176
|
+
.call(this, req, res, next)
|
|
177
|
+
.catch((e) => {
|
|
178
|
+
this.logger?.error(e);
|
|
179
|
+
return res.status(500).json({
|
|
180
|
+
message: 'Platform error. Please check later or contact support',
|
|
181
|
+
});
|
|
182
|
+
});
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Generate text info
|
|
188
|
+
*/
|
|
189
|
+
const text = ['', `Controller '${this.getConstructorName()}' registered.`];
|
|
190
|
+
const reports = {
|
|
191
|
+
'Middlewares:': middlewaresInfo,
|
|
192
|
+
'Route middlewares:': routeMiddlewaresReg,
|
|
193
|
+
'Callbacks:': routesInfo,
|
|
194
|
+
};
|
|
195
|
+
for (const key in reports) {
|
|
196
|
+
text.push(`${key}`);
|
|
197
|
+
for (const item of reports[key]) {
|
|
198
|
+
text.push(`Path:'${item.path}'. Full path: '${item.fullPath}'. Method: '${item.method.toUpperCase()}'. Function: '${item.name}'`);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
text.push(`Time: ${Date.now() - time} ms`);
|
|
202
|
+
this.logger?.verbose(text.join('\n'));
|
|
203
|
+
/**
|
|
204
|
+
* Generate documentation
|
|
205
|
+
*/
|
|
206
|
+
if (!this.app.httpServer) {
|
|
207
|
+
this.app.documentation?.push(new DocumentationGenerator(this.app).convertDataToDocumentationElement(this.getConstructorName(), routesInfo, middlewaresInfo, routeMiddlewaresReg));
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
this.app.httpServer.express.use(httpPath, this.router);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Parse middlewares to be an object.
|
|
215
|
+
*/
|
|
216
|
+
parseMiddlewares(middlewareMap, httpPath) {
|
|
217
|
+
const middlewaresInfo = [];
|
|
218
|
+
for (let [path, middleware] of middlewareMap) {
|
|
219
|
+
if (!Array.isArray(middleware)) {
|
|
220
|
+
middleware = [middleware];
|
|
221
|
+
}
|
|
222
|
+
for (const M of middleware) {
|
|
223
|
+
let method = 'all';
|
|
224
|
+
let realPath = path;
|
|
225
|
+
if (typeof realPath !== 'string') {
|
|
226
|
+
this.logger?.error(`Path not a string ${realPath}. Please check it`);
|
|
227
|
+
continue;
|
|
228
|
+
}
|
|
229
|
+
if (!realPath.startsWith('/')) {
|
|
230
|
+
method = realPath.split('/')[0]?.toLowerCase();
|
|
231
|
+
if (!method) {
|
|
232
|
+
this.logger?.error(`Method not found for ${realPath}`);
|
|
233
|
+
continue;
|
|
234
|
+
}
|
|
235
|
+
realPath = realPath.substring(method.length);
|
|
236
|
+
}
|
|
237
|
+
if (typeof this.router[method] !== 'function') {
|
|
238
|
+
this.logger?.error(`Method ${method} not exist for middleware. Please check your codebase`);
|
|
239
|
+
continue;
|
|
240
|
+
}
|
|
241
|
+
const fullPath = `/${httpPath}/${realPath.toUpperCase()}`
|
|
242
|
+
.split('//')
|
|
243
|
+
.join('/')
|
|
244
|
+
.split('//')
|
|
245
|
+
.join('/');
|
|
246
|
+
let MiddlewareFunction;
|
|
247
|
+
let middlewareParams = {};
|
|
248
|
+
if (Array.isArray(M)) {
|
|
249
|
+
[MiddlewareFunction, middlewareParams] = M;
|
|
250
|
+
}
|
|
251
|
+
else {
|
|
252
|
+
MiddlewareFunction = M;
|
|
253
|
+
}
|
|
254
|
+
middlewaresInfo.push({
|
|
255
|
+
name: MiddlewareFunction.name,
|
|
256
|
+
method,
|
|
257
|
+
path: realPath,
|
|
258
|
+
fullPath,
|
|
259
|
+
params: middlewareParams,
|
|
260
|
+
relatedQueryParameters: new MiddlewareFunction(this.app, middlewareParams)?.relatedQueryParameters,
|
|
261
|
+
authParams: new MiddlewareFunction(this.app, middlewareParams)
|
|
262
|
+
?.usedAuthParameters,
|
|
263
|
+
MiddlewareFunction,
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
return middlewaresInfo;
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Object with routes. Routes relative to controller
|
|
271
|
+
* @example
|
|
272
|
+
* return {
|
|
273
|
+
* post: {
|
|
274
|
+
* "/someUrl": {
|
|
275
|
+
* handler: this.postSomeUrl,
|
|
276
|
+
* request: yup.object().shape({
|
|
277
|
+
* count: yup.number().max(100)required(),
|
|
278
|
+
* })
|
|
279
|
+
* }
|
|
280
|
+
* },
|
|
281
|
+
* };
|
|
282
|
+
*/
|
|
283
|
+
get routes() {
|
|
284
|
+
this.logger?.warn('Please implement "routes" method on controller.');
|
|
285
|
+
return {};
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Array of middlewares to append for route
|
|
289
|
+
* You should provide path relative to controller and then array of middlewares to apply.
|
|
290
|
+
* Order is matter.
|
|
291
|
+
* Be default path apply to ANY' method, but you can preattach 'METHOD' into patch to scope patch to this METHOD
|
|
292
|
+
* @example
|
|
293
|
+
* return new Map([
|
|
294
|
+
* ['/{*splat}', [GetUserByToken]] // for any method for this controller
|
|
295
|
+
* ['POST/', [Auth]] // for POST method
|
|
296
|
+
* ['/superSecretMethod', [OnlySuperSecretUsers]] // route with ANY method
|
|
297
|
+
* ['PUT/superSecretMathod', [OnlySuperSecretAdmin]] // route with PUT method
|
|
298
|
+
* ]);
|
|
299
|
+
*/
|
|
300
|
+
static get middleware() {
|
|
301
|
+
return new Map([['/{*splat}', [GetUserByToken, Auth]]]);
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Get constructor name that can include preix
|
|
305
|
+
*/
|
|
306
|
+
getConstructorName() {
|
|
307
|
+
if (this.prefix) {
|
|
308
|
+
return `${this.prefix.charAt(0).toUpperCase()}${this.prefix.slice(1)}/${this.constructor.name}`;
|
|
309
|
+
}
|
|
310
|
+
return this.constructor.name;
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Get http path with inheritance of path
|
|
314
|
+
*/
|
|
315
|
+
getHttpPath() {
|
|
316
|
+
return `/${this.getConstructorName().toLowerCase()}`.replace('//', '/');
|
|
317
|
+
}
|
|
318
|
+
static get loggerGroup() {
|
|
319
|
+
return 'controller';
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
export default AbstractController;
|
|
323
|
+
//# sourceMappingURL=AbstractController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AbstractController.js","sourceRoot":"","sources":["../../src/modules/AbstractController.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { Model, Schema } from 'mongoose';
|
|
2
|
+
import type { IApp } from '../server.ts';
|
|
3
|
+
import Base from './Base.ts';
|
|
4
|
+
export interface IAbstractModelMethods<T> {
|
|
5
|
+
getSuper(): AbstractModel<T> & this;
|
|
6
|
+
}
|
|
7
|
+
export interface IAbstractModel<IDocument, IMethods> extends Model<IDocument, object, IMethods> {
|
|
8
|
+
getSuper(): AbstractModel<IDocument> & this;
|
|
9
|
+
}
|
|
10
|
+
declare class AbstractModel<IDocument = object, IMethods extends IAbstractModelMethods<IDocument> = IAbstractModelMethods<IDocument>, IModel extends IAbstractModel<IDocument, IMethods> = IAbstractModel<IDocument, IMethods>> extends Base {
|
|
11
|
+
mongooseSchema: Schema<IDocument, IModel, IMethods>;
|
|
12
|
+
mongooseModel: IModel;
|
|
13
|
+
/**
|
|
14
|
+
* @param IApp app
|
|
15
|
+
* @param function callback optional callback when connection ready
|
|
16
|
+
*/
|
|
17
|
+
constructor(app: IApp);
|
|
18
|
+
/**
|
|
19
|
+
* Mongoose schema
|
|
20
|
+
*/
|
|
21
|
+
get modelSchema(): {};
|
|
22
|
+
/**
|
|
23
|
+
* Mongoose schema options
|
|
24
|
+
*/
|
|
25
|
+
get modelSchemaOptions(): {};
|
|
26
|
+
static get loggerGroup(): string;
|
|
27
|
+
initHooks(): void;
|
|
28
|
+
}
|
|
29
|
+
export default AbstractModel;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import mongoose from 'mongoose';
|
|
2
|
+
import Base from "./Base.js";
|
|
3
|
+
class AbstractModel extends Base {
|
|
4
|
+
mongooseSchema;
|
|
5
|
+
mongooseModel;
|
|
6
|
+
/**
|
|
7
|
+
* @param IApp app
|
|
8
|
+
* @param function callback optional callback when connection ready
|
|
9
|
+
*/
|
|
10
|
+
constructor(app) {
|
|
11
|
+
super(app);
|
|
12
|
+
this.mongooseSchema = new mongoose.Schema(this.modelSchema, this.modelSchemaOptions);
|
|
13
|
+
this.mongooseSchema.set('timestamps', true);
|
|
14
|
+
this.mongooseSchema.set('minimize', false);
|
|
15
|
+
this.mongooseSchema.loadClass(this.constructor);
|
|
16
|
+
this.mongooseSchema.static('getSuper', () => this);
|
|
17
|
+
this.mongooseSchema.method('getSuper', () => this);
|
|
18
|
+
this.initHooks();
|
|
19
|
+
this.mongooseModel = mongoose.model(this.constructor.name, this.mongooseSchema);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Mongoose schema
|
|
23
|
+
*/
|
|
24
|
+
get modelSchema() {
|
|
25
|
+
this.logger?.warn('You should provide modelSchema');
|
|
26
|
+
return {};
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Mongoose schema options
|
|
30
|
+
*/
|
|
31
|
+
get modelSchemaOptions() {
|
|
32
|
+
return {};
|
|
33
|
+
}
|
|
34
|
+
static get loggerGroup() {
|
|
35
|
+
return 'model';
|
|
36
|
+
}
|
|
37
|
+
initHooks() {
|
|
38
|
+
this.logger?.verbose(`Model ${this.constructor.name} has no custom hooks.`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
export default AbstractModel;
|
|
42
|
+
//# sourceMappingURL=AbstractModel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AbstractModel.js","sourceRoot":"","sources":["../../src/modules/AbstractModel.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAGhC,OAAO,IAAI,MAAM,WAAW,CAAC;AAW7B,MAAM,aAQJ,SAAQ,IAAI;IACZ,cAAc,CAAsC;IAEpD,aAAa,CAAS;IAEtB;;;OAGG;IACH,YAAY,GAAS;QACnB,KAAK,CAAC,GAAG,CAAC,CAAC;QACX,IAAI,CAAC,cAAc,GAAG,IAAI,QAAQ,CAAC,MAAM,CACvC,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,kBAAkB,CACxB,CAAC;QACF,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAChD,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,KAAK,CACjC,IAAI,CAAC,WAAW,CAAC,IAAI,EACrB,IAAI,CAAC,cAAc,CACpB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,IAAI,WAAW;QACb,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,gCAAgC,CAAC,CAAC;QACpD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;OAEG;IACH,IAAI,kBAAkB;QACpB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,KAAK,WAAW;QACpB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,SAAS;QACP,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,IAAI,CAAC,WAAW,CAAC,IAAI,uBAAuB,CAAC,CAAC;IAC9E,CAAC;CACF;AACD,eAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type winston from 'winston';
|
|
2
|
+
import type { IApp } from '../server.ts';
|
|
3
|
+
declare class Base {
|
|
4
|
+
#private;
|
|
5
|
+
app: IApp;
|
|
6
|
+
constructor(app: IApp);
|
|
7
|
+
/**
|
|
8
|
+
* In case of logging sometimes we might need to replace name
|
|
9
|
+
*/
|
|
10
|
+
getConstructorName(): string;
|
|
11
|
+
/**
|
|
12
|
+
* Optimzation to lazy load logger. It will be inited only on request
|
|
13
|
+
*/
|
|
14
|
+
get logger(): winston.Logger | null;
|
|
15
|
+
/**
|
|
16
|
+
* Get winston loger for given label
|
|
17
|
+
* @param {string} label name of logger
|
|
18
|
+
*/
|
|
19
|
+
getLogger(label: string): winston.Logger;
|
|
20
|
+
getFilesPathWithInheritance(internalFolder: string, externalFolder: string, isUseSimpleLogger?: boolean): Promise<{
|
|
21
|
+
path: string;
|
|
22
|
+
file: string;
|
|
23
|
+
}[]>;
|
|
24
|
+
/**
|
|
25
|
+
* Return logger group. Just to have all logs groupped logically
|
|
26
|
+
*/
|
|
27
|
+
static get loggerGroup(): string;
|
|
28
|
+
}
|
|
29
|
+
export default Base;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { getFilesPathWithInheritance } from "../helpers/files.js";
|
|
2
|
+
import { consoleLogger } from "../helpers/logger.js";
|
|
3
|
+
class Base {
|
|
4
|
+
#realLogger = null;
|
|
5
|
+
app;
|
|
6
|
+
constructor(app) {
|
|
7
|
+
this.app = app;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* In case of logging sometimes we might need to replace name
|
|
11
|
+
*/
|
|
12
|
+
getConstructorName() {
|
|
13
|
+
return this.constructor.name;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Optimzation to lazy load logger. It will be inited only on request
|
|
17
|
+
*/
|
|
18
|
+
get logger() {
|
|
19
|
+
let l;
|
|
20
|
+
try {
|
|
21
|
+
l = this.#realLogger;
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
console.warn(`You try to accees logger not from class. that can be ok in case of models.`);
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
if (!l) {
|
|
28
|
+
const { loggerGroup } = this.constructor;
|
|
29
|
+
this.#realLogger = this.getLogger(loggerGroup + this.getConstructorName());
|
|
30
|
+
}
|
|
31
|
+
return this.#realLogger;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Get winston loger for given label
|
|
35
|
+
* @param {string} label name of logger
|
|
36
|
+
*/
|
|
37
|
+
getLogger(label) {
|
|
38
|
+
return this.app.logger.child({ label });
|
|
39
|
+
}
|
|
40
|
+
async getFilesPathWithInheritance(internalFolder, externalFolder, isUseSimpleLogger = false) {
|
|
41
|
+
const logger = isUseSimpleLogger
|
|
42
|
+
? (m) => consoleLogger('info', m)
|
|
43
|
+
: (m) => this.logger?.verbose(m);
|
|
44
|
+
return getFilesPathWithInheritance({
|
|
45
|
+
internalFolder,
|
|
46
|
+
externalFolder,
|
|
47
|
+
logger,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Return logger group. Just to have all logs groupped logically
|
|
52
|
+
*/
|
|
53
|
+
static get loggerGroup() {
|
|
54
|
+
return 'Base_please_overwrite_';
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
export default Base;
|
|
58
|
+
//# sourceMappingURL=Base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Base.js","sourceRoot":"","sources":["../../src/modules/Base.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,MAAM,IAAI;IACR,WAAW,GAA0B,IAAI,CAAC;IAE1C,GAAG,CAAO;IAEV,YAAY,GAAS;QACnB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,kBAAkB;QAChB,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,IAAI,MAAM;QACR,IAAI,CAAwB,CAAC;QAC7B,IAAI,CAAC;YACH,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;QACvB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,IAAI,CACV,4EAA4E,CAC7E,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC,CAAC,EAAE,CAAC;YACP,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,WAA0B,CAAC;YACxD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAC/B,WAAW,GAAG,IAAI,CAAC,kBAAkB,EAAE,CACxC,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED;;;OAGG;IACH,SAAS,CAAC,KAAa;QACrB,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,2BAA2B,CAC/B,cAAsB,EACtB,cAAsB,EACtB,iBAAiB,GAAG,KAAK;QAEzB,MAAM,MAAM,GAAG,iBAAiB;YAC9B,CAAC,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;YACzC,CAAC,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;QAC3C,OAAO,2BAA2B,CAAC;YACjC,cAAc;YACd,cAAc;YACd,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,MAAM,KAAK,WAAW;QACpB,OAAO,wBAAwB,CAAC;IAClC,CAAC;CACF;AAED,eAAe,IAAI,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { ParseArgsOptionDescriptor } from 'node:util';
|
|
2
|
+
import type AbstractCommand from '../modules/AbstractCommand.ts';
|
|
3
|
+
import type Server from '../server.ts';
|
|
4
|
+
import Base from './Base.ts';
|
|
5
|
+
export interface ParseArgsOptionsConfigExtended extends ParseArgsOptionDescriptor {
|
|
6
|
+
/**
|
|
7
|
+
* A description of the option.
|
|
8
|
+
*/
|
|
9
|
+
description?: string;
|
|
10
|
+
/**
|
|
11
|
+
* Is it required?
|
|
12
|
+
*/
|
|
13
|
+
required?: boolean;
|
|
14
|
+
}
|
|
15
|
+
declare class Cli extends Base {
|
|
16
|
+
server: Server;
|
|
17
|
+
commands: Record<string, string>;
|
|
18
|
+
constructor(server: Server);
|
|
19
|
+
loadCommands(): Promise<boolean>;
|
|
20
|
+
printCommandTable(): Promise<void>;
|
|
21
|
+
static showHelp(Command: typeof AbstractCommand, finalArguments: Record<string, ParseArgsOptionsConfigExtended>): void;
|
|
22
|
+
run(command: string): Promise<boolean | void>;
|
|
23
|
+
static get loggerGroup(): string;
|
|
24
|
+
}
|
|
25
|
+
export default Cli;
|