@adaptivestone/framework 5.0.0-beta.2 → 5.0.0-beta.21

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 (285) hide show
  1. package/CHANGELOG.md +126 -1
  2. package/LICENCE +1 -1
  3. package/dist/Cli.d.ts +7 -0
  4. package/dist/Cli.js +19 -0
  5. package/dist/Cli.js.map +1 -0
  6. package/dist/cluster.d.ts +1 -0
  7. package/dist/cluster.js +18 -0
  8. package/dist/cluster.js.map +1 -0
  9. package/dist/commands/CreateUser.d.ts +32 -0
  10. package/dist/commands/CreateUser.js +81 -0
  11. package/dist/commands/CreateUser.js.map +1 -0
  12. package/dist/commands/Documentation.d.ts +5 -0
  13. package/dist/commands/Documentation.js +15 -0
  14. package/dist/commands/Documentation.js.map +1 -0
  15. package/dist/commands/DropIndex.d.ts +16 -0
  16. package/dist/commands/DropIndex.js +30 -0
  17. package/dist/commands/DropIndex.js.map +1 -0
  18. package/dist/commands/GenerateRandomBytes.d.ts +7 -0
  19. package/dist/commands/GenerateRandomBytes.js +18 -0
  20. package/dist/commands/GenerateRandomBytes.js.map +1 -0
  21. package/dist/commands/GenerateTypes.d.ts +12 -0
  22. package/dist/commands/GenerateTypes.js +60 -0
  23. package/dist/commands/GenerateTypes.js.map +1 -0
  24. package/dist/commands/GetOpenApiJson.d.ts +17 -0
  25. package/dist/commands/GetOpenApiJson.js +272 -0
  26. package/dist/commands/GetOpenApiJson.js.map +1 -0
  27. package/dist/commands/SyncIndexes.d.ts +6 -0
  28. package/dist/commands/SyncIndexes.js +32 -0
  29. package/dist/commands/SyncIndexes.js.map +1 -0
  30. package/dist/commands/migration/Create.d.ts +18 -0
  31. package/dist/commands/migration/Create.js +57 -0
  32. package/dist/commands/migration/Create.js.map +1 -0
  33. package/dist/commands/migration/Migrate.d.ts +6 -0
  34. package/dist/commands/migration/Migrate.js +46 -0
  35. package/dist/commands/migration/Migrate.js.map +1 -0
  36. package/dist/config/auth.d.ts +6 -0
  37. package/dist/config/auth.js +7 -0
  38. package/dist/config/auth.js.map +1 -0
  39. package/dist/config/http.d.ts +8 -0
  40. package/dist/config/http.js +10 -0
  41. package/dist/config/http.js.map +1 -0
  42. package/dist/config/i18n.d.ts +10 -0
  43. package/dist/config/i18n.js +13 -0
  44. package/dist/config/i18n.js.map +1 -0
  45. package/dist/config/ipDetector.d.ts +5 -0
  46. package/dist/config/ipDetector.js +15 -0
  47. package/dist/config/ipDetector.js.map +1 -0
  48. package/dist/config/log.d.ts +22 -0
  49. package/dist/config/log.js +23 -0
  50. package/dist/config/log.js.map +1 -0
  51. package/dist/config/mongo.d.ts +4 -0
  52. package/dist/config/mongo.js +4 -0
  53. package/dist/config/mongo.js.map +1 -0
  54. package/dist/config/rateLimiter.d.ts +15 -0
  55. package/dist/config/rateLimiter.js +17 -0
  56. package/dist/config/rateLimiter.js.map +1 -0
  57. package/dist/config/redis.d.ts +5 -0
  58. package/dist/config/redis.js +5 -0
  59. package/dist/config/redis.js.map +1 -0
  60. package/dist/config/validate.d.ts +4 -0
  61. package/dist/config/validate.js +4 -0
  62. package/dist/config/validate.js.map +1 -0
  63. package/dist/controllers/Auth.d.ts +74 -0
  64. package/dist/controllers/Auth.js +181 -0
  65. package/dist/controllers/Auth.js.map +1 -0
  66. package/dist/controllers/Home.d.ts +15 -0
  67. package/dist/controllers/Home.js +24 -0
  68. package/dist/controllers/Home.js.map +1 -0
  69. package/dist/controllers/index.d.ts +16 -0
  70. package/dist/controllers/index.js +59 -0
  71. package/dist/controllers/index.js.map +1 -0
  72. package/dist/folderConfig.d.ts +34 -0
  73. package/dist/folderConfig.js +15 -0
  74. package/dist/folderConfig.js.map +1 -0
  75. package/dist/helpers/appInstance.d.ts +3 -0
  76. package/dist/helpers/appInstance.js +8 -0
  77. package/dist/helpers/appInstance.js.map +1 -0
  78. package/dist/helpers/crypto.d.ts +3 -0
  79. package/dist/helpers/crypto.js +14 -0
  80. package/dist/helpers/crypto.js.map +1 -0
  81. package/dist/helpers/files.d.ts +16 -0
  82. package/dist/helpers/files.js +76 -0
  83. package/dist/helpers/files.js.map +1 -0
  84. package/dist/helpers/logger.d.ts +4 -0
  85. package/dist/helpers/logger.js +28 -0
  86. package/dist/helpers/logger.js.map +1 -0
  87. package/dist/helpers/redis/clearNamespace.d.ts +2 -0
  88. package/dist/helpers/redis/clearNamespace.js +14 -0
  89. package/dist/helpers/redis/clearNamespace.js.map +1 -0
  90. package/dist/helpers/yup.d.ts +13 -0
  91. package/{helpers → dist/helpers}/yup.js +9 -12
  92. package/dist/helpers/yup.js.map +1 -0
  93. package/dist/index.d.ts +1 -0
  94. package/dist/index.js +7 -0
  95. package/dist/index.js.map +1 -0
  96. package/dist/models/Lock.d.ts +89 -0
  97. package/dist/models/Lock.js +99 -0
  98. package/dist/models/Lock.js.map +1 -0
  99. package/dist/models/Migration.d.ts +10 -0
  100. package/dist/models/Migration.js +13 -0
  101. package/dist/models/Migration.js.map +1 -0
  102. package/dist/models/Sequence.d.ts +27 -0
  103. package/dist/models/Sequence.js +19 -0
  104. package/dist/models/Sequence.js.map +1 -0
  105. package/dist/models/User.d.ts +2372 -0
  106. package/dist/models/User.js +280 -0
  107. package/dist/models/User.js.map +1 -0
  108. package/dist/models/UserOld.d.ts +179 -0
  109. package/dist/models/UserOld.js +230 -0
  110. package/dist/models/UserOld.js.map +1 -0
  111. package/dist/modules/AbstractCommand.d.ts +34 -0
  112. package/dist/modules/AbstractCommand.js +48 -0
  113. package/dist/modules/AbstractCommand.js.map +1 -0
  114. package/dist/modules/AbstractConnector.d.ts +5 -0
  115. package/dist/modules/AbstractConnector.js +8 -0
  116. package/dist/modules/AbstractConnector.js.map +1 -0
  117. package/dist/modules/AbstractController.d.ts +90 -0
  118. package/dist/modules/AbstractController.js +324 -0
  119. package/dist/modules/AbstractController.js.map +1 -0
  120. package/dist/modules/AbstractModel.d.ts +29 -0
  121. package/dist/modules/AbstractModel.js +43 -0
  122. package/dist/modules/AbstractModel.js.map +1 -0
  123. package/dist/modules/Base.d.ts +29 -0
  124. package/dist/modules/Base.js +58 -0
  125. package/dist/modules/Base.js.map +1 -0
  126. package/dist/modules/BaseCli.d.ts +25 -0
  127. package/dist/modules/BaseCli.js +147 -0
  128. package/dist/modules/BaseCli.js.map +1 -0
  129. package/dist/modules/BaseModel.d.ts +41 -0
  130. package/dist/modules/BaseModel.js +36 -0
  131. package/dist/modules/BaseModel.js.map +1 -0
  132. package/dist/server.d.ts +121 -0
  133. package/dist/server.js +432 -0
  134. package/dist/server.js.map +1 -0
  135. package/dist/services/cache/Cache.d.ts +31 -0
  136. package/dist/services/cache/Cache.js +115 -0
  137. package/dist/services/cache/Cache.js.map +1 -0
  138. package/dist/services/documentation/DocumentationGenerator.d.ts +11 -0
  139. package/dist/services/documentation/DocumentationGenerator.js +134 -0
  140. package/dist/services/documentation/DocumentationGenerator.js.map +1 -0
  141. package/dist/services/http/HttpServer.d.ts +35 -0
  142. package/dist/services/http/HttpServer.js +71 -0
  143. package/dist/services/http/HttpServer.js.map +1 -0
  144. package/dist/services/http/middleware/AbstractMiddleware.d.ts +25 -0
  145. package/dist/services/http/middleware/AbstractMiddleware.js +43 -0
  146. package/dist/services/http/middleware/AbstractMiddleware.js.map +1 -0
  147. package/dist/services/http/middleware/Auth.d.ts +9 -0
  148. package/dist/services/http/middleware/Auth.js +18 -0
  149. package/dist/services/http/middleware/Auth.js.map +1 -0
  150. package/dist/services/http/middleware/Cors.d.ts +10 -0
  151. package/dist/services/http/middleware/Cors.js +36 -0
  152. package/dist/services/http/middleware/Cors.js.map +1 -0
  153. package/dist/services/http/middleware/GetUserByToken.d.ts +19 -0
  154. package/dist/services/http/middleware/GetUserByToken.js +40 -0
  155. package/dist/services/http/middleware/GetUserByToken.js.map +1 -0
  156. package/dist/services/http/middleware/I18n.d.ts +26 -0
  157. package/dist/services/http/middleware/I18n.js +97 -0
  158. package/dist/services/http/middleware/I18n.js.map +1 -0
  159. package/dist/services/http/middleware/IpDetector.d.ts +12 -0
  160. package/dist/services/http/middleware/IpDetector.js +51 -0
  161. package/dist/services/http/middleware/IpDetector.js.map +1 -0
  162. package/dist/services/http/middleware/Pagination.d.ts +27 -0
  163. package/dist/services/http/middleware/Pagination.js +47 -0
  164. package/dist/services/http/middleware/Pagination.js.map +1 -0
  165. package/dist/services/http/middleware/PrepareAppInfo.d.ts +8 -0
  166. package/dist/services/http/middleware/PrepareAppInfo.js +17 -0
  167. package/dist/services/http/middleware/PrepareAppInfo.js.map +1 -0
  168. package/dist/services/http/middleware/RateLimiter.d.ts +18 -0
  169. package/dist/services/http/middleware/RateLimiter.js +106 -0
  170. package/dist/services/http/middleware/RateLimiter.js.map +1 -0
  171. package/dist/services/http/middleware/RequestLogger.d.ts +8 -0
  172. package/dist/services/http/middleware/RequestLogger.js +18 -0
  173. package/dist/services/http/middleware/RequestLogger.js.map +1 -0
  174. package/dist/services/http/middleware/RequestParser.d.ts +8 -0
  175. package/dist/services/http/middleware/RequestParser.js +35 -0
  176. package/dist/services/http/middleware/RequestParser.js.map +1 -0
  177. package/dist/services/http/middleware/Role.d.ts +9 -0
  178. package/dist/services/http/middleware/Role.js +24 -0
  179. package/dist/services/http/middleware/Role.js.map +1 -0
  180. package/dist/services/validate/ValidateService.d.ts +31 -0
  181. package/dist/services/validate/ValidateService.js +96 -0
  182. package/dist/services/validate/ValidateService.js.map +1 -0
  183. package/dist/services/validate/drivers/AbstractValidator.d.ts +14 -0
  184. package/dist/services/validate/drivers/AbstractValidator.js +32 -0
  185. package/dist/services/validate/drivers/AbstractValidator.js.map +1 -0
  186. package/dist/services/validate/drivers/CustomValidator.d.ts +14 -0
  187. package/dist/services/validate/drivers/CustomValidator.js +48 -0
  188. package/dist/services/validate/drivers/CustomValidator.js.map +1 -0
  189. package/dist/services/validate/drivers/YupValidator.d.ts +13 -0
  190. package/dist/services/validate/drivers/YupValidator.js +86 -0
  191. package/dist/services/validate/drivers/YupValidator.js.map +1 -0
  192. package/dist/tests/globalSetupVitest.d.ts +2 -0
  193. package/dist/tests/globalSetupVitest.js +29 -0
  194. package/dist/tests/globalSetupVitest.js.map +1 -0
  195. package/dist/tests/setupVitest.d.ts +1 -0
  196. package/dist/tests/setupVitest.js +99 -0
  197. package/dist/tests/setupVitest.js.map +1 -0
  198. package/package.json +38 -23
  199. package/Cli.js +0 -22
  200. package/cluster.js +0 -27
  201. package/commands/CreateUser.js +0 -75
  202. package/commands/Documentation.js +0 -17
  203. package/commands/DropIndex.js +0 -29
  204. package/commands/GenerateRandomBytes.js +0 -21
  205. package/commands/GetOpenApiJson.js +0 -325
  206. package/commands/SyncIndexes.js +0 -39
  207. package/commands/migration/Create.js +0 -61
  208. package/commands/migration/Migrate.js +0 -55
  209. package/config/auth.js +0 -9
  210. package/config/http.js +0 -9
  211. package/config/i18n.js +0 -12
  212. package/config/ipDetector.js +0 -14
  213. package/config/log.js +0 -22
  214. package/config/mail.js +0 -29
  215. package/config/mongo.js +0 -3
  216. package/config/rateLimiter.js +0 -16
  217. package/config/redis.js +0 -4
  218. package/config/validate.js +0 -3
  219. package/controllers/Auth.js +0 -210
  220. package/controllers/Home.js +0 -28
  221. package/controllers/index.js +0 -60
  222. package/folderConfig.js +0 -14
  223. package/helpers/files.js +0 -79
  224. package/helpers/logger.js +0 -17
  225. package/helpers/redis/clearNamespace.js +0 -14
  226. package/index.js +0 -8
  227. package/jsconfig.json +0 -9
  228. package/locales/en/translation.json +0 -27
  229. package/locales/ru/translation.json +0 -27
  230. package/migrations/.gitkeep +0 -0
  231. package/models/Migration.js +0 -15
  232. package/models/Sequence.js +0 -22
  233. package/models/User.js +0 -263
  234. package/modules/AbstractCommand.js +0 -43
  235. package/modules/AbstractConnector.js +0 -9
  236. package/modules/AbstractController.js +0 -413
  237. package/modules/AbstractModel.d.ts +0 -48
  238. package/modules/AbstractModel.js +0 -86
  239. package/modules/Base.d.ts +0 -37
  240. package/modules/Base.js +0 -63
  241. package/modules/BaseCli.js +0 -97
  242. package/server.d.ts +0 -98
  243. package/server.js +0 -429
  244. package/services/cache/Cache.d.ts +0 -35
  245. package/services/cache/Cache.js +0 -124
  246. package/services/documentation/DocumentationGenerator.js +0 -169
  247. package/services/http/HttpServer.js +0 -96
  248. package/services/http/middleware/AbstractMiddleware.js +0 -51
  249. package/services/http/middleware/Auth.js +0 -20
  250. package/services/http/middleware/Cors.js +0 -46
  251. package/services/http/middleware/GetUserByToken.js +0 -47
  252. package/services/http/middleware/I18n.js +0 -117
  253. package/services/http/middleware/IpDetector.js +0 -59
  254. package/services/http/middleware/Pagination.js +0 -57
  255. package/services/http/middleware/PrepareAppInfo.js +0 -18
  256. package/services/http/middleware/RateLimiter.js +0 -134
  257. package/services/http/middleware/RequestLogger.js +0 -22
  258. package/services/http/middleware/RequestParser.js +0 -40
  259. package/services/http/middleware/Role.js +0 -29
  260. package/services/messaging/email/index.js +0 -217
  261. package/services/messaging/email/resources/.gitkeep +0 -1
  262. package/services/messaging/email/templates/emptyTemplate/html.pug +0 -9
  263. package/services/messaging/email/templates/emptyTemplate/subject.pug +0 -1
  264. package/services/messaging/email/templates/emptyTemplate/text.pug +0 -1
  265. package/services/messaging/email/templates/recovery/html.pug +0 -8
  266. package/services/messaging/email/templates/recovery/subject.pug +0 -2
  267. package/services/messaging/email/templates/recovery/text.pug +0 -3
  268. package/services/messaging/email/templates/verification/html.pug +0 -10
  269. package/services/messaging/email/templates/verification/subject.pug +0 -1
  270. package/services/messaging/email/templates/verification/text.pug +0 -1
  271. package/services/messaging/index.js +0 -3
  272. package/services/validate/ValidateService.js +0 -157
  273. package/services/validate/drivers/AbstractValidator.js +0 -37
  274. package/services/validate/drivers/CustomValidator.js +0 -51
  275. package/services/validate/drivers/YupValidator.js +0 -103
  276. package/tests/globalSetupVitest.js +0 -35
  277. package/tests/setup.js +0 -118
  278. package/tests/setupVitest.js +0 -109
  279. package/types/Expand.d.ts +0 -11
  280. package/types/TFoldersConfig.d.ts +0 -17
  281. package/views/404.pug +0 -3
  282. package/views/home.pug +0 -3
  283. package/views/layouts/base.pug +0 -39
  284. package/vitest.config.js +0 -16
  285. /package/{commands → dist/migrations}/.gitkeep +0 -0
@@ -0,0 +1,324 @@
1
+ import express from 'express';
2
+ import Base from "./Base.js";
3
+ import GetUserByToken from "../services/http/middleware/GetUserByToken.js";
4
+ import Auth from "../services/http/middleware/Auth.js";
5
+ import ValidateService from '../services/validate/ValidateService.js';
6
+ import DocumentationGenerator from '../services/documentation/DocumentationGenerator.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.handler;
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.message,
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
+ // eslint-disable-next-line prefer-const
219
+ for (let [path, middleware] of middlewareMap) {
220
+ if (!Array.isArray(middleware)) {
221
+ middleware = [middleware];
222
+ }
223
+ for (const M of middleware) {
224
+ let method = 'all';
225
+ let realPath = path;
226
+ if (typeof realPath !== 'string') {
227
+ this.logger?.error(`Path not a string ${realPath}. Please check it`);
228
+ continue;
229
+ }
230
+ if (!realPath.startsWith('/')) {
231
+ method = realPath.split('/')[0]?.toLowerCase();
232
+ if (!method) {
233
+ this.logger?.error(`Method not found for ${realPath}`);
234
+ continue;
235
+ }
236
+ realPath = realPath.substring(method.length);
237
+ }
238
+ if (typeof this.router[method] !== 'function') {
239
+ this.logger?.error(`Method ${method} not exist for middleware. Please check your codebase`);
240
+ continue;
241
+ }
242
+ const fullPath = `/${httpPath}/${realPath.toUpperCase()}`
243
+ .split('//')
244
+ .join('/')
245
+ .split('//')
246
+ .join('/');
247
+ let MiddlewareFunction;
248
+ let middlewareParams = {};
249
+ if (Array.isArray(M)) {
250
+ [MiddlewareFunction, middlewareParams] = M;
251
+ }
252
+ else {
253
+ MiddlewareFunction = M;
254
+ }
255
+ middlewaresInfo.push({
256
+ name: MiddlewareFunction.name,
257
+ method,
258
+ path: realPath,
259
+ fullPath,
260
+ params: middlewareParams,
261
+ relatedQueryParameters: new MiddlewareFunction(this.app, middlewareParams)?.relatedQueryParameters,
262
+ authParams: new MiddlewareFunction(this.app, middlewareParams)
263
+ ?.usedAuthParameters,
264
+ MiddlewareFunction,
265
+ });
266
+ }
267
+ }
268
+ return middlewaresInfo;
269
+ }
270
+ /**
271
+ * Object with routes. Routes relative to controller
272
+ * @example
273
+ * return {
274
+ * post: {
275
+ * "/someUrl": {
276
+ * handler: this.postSomeUrl,
277
+ * request: yup.object().shape({
278
+ * count: yup.number().max(100)required(),
279
+ * })
280
+ * }
281
+ * },
282
+ * };
283
+ */
284
+ get routes() {
285
+ this.logger?.warn('Please implement "routes" method on controller.');
286
+ return {};
287
+ }
288
+ /**
289
+ * Array of middlewares to append for route
290
+ * You should provide path relative to controller and then array of middlewares to apply.
291
+ * Order is matter.
292
+ * Be default path apply to ANY' method, but you can preattach 'METHOD' into patch to scope patch to this METHOD
293
+ * @example
294
+ * return new Map([
295
+ * ['/{*splat}', [GetUserByToken]] // for any method for this controller
296
+ * ['POST/', [Auth]] // for POST method
297
+ * ['/superSecretMethod', [OnlySuperSecretUsers]] // route with ANY method
298
+ * ['PUT/superSecretMathod', [OnlySuperSecretAdmin]] // route with PUT method
299
+ * ]);
300
+ */
301
+ static get middleware() {
302
+ return new Map([['/{*splat}', [GetUserByToken, Auth]]]);
303
+ }
304
+ /**
305
+ * Get constructor name that can include preix
306
+ */
307
+ getConstructorName() {
308
+ if (this.prefix) {
309
+ return `${this.prefix.charAt(0).toUpperCase()}${this.prefix.slice(1)}/${this.constructor.name}`;
310
+ }
311
+ return this.constructor.name;
312
+ }
313
+ /**
314
+ * Get http path with inheritance of path
315
+ */
316
+ getHttpPath() {
317
+ return `/${this.getConstructorName().toLowerCase()}`.replace('//', '/');
318
+ }
319
+ static get loggerGroup() {
320
+ return 'controller';
321
+ }
322
+ }
323
+ export default AbstractController;
324
+ //# 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 Base from './Base.ts';
2
+ import type { IApp } from '../server.ts';
3
+ import type { Schema, Model } from 'mongoose';
4
+ export interface IAbstractModelMethods<T> {
5
+ getSuper(): AbstractModel<T> & this;
6
+ }
7
+ export interface IAbstractModel<IDocument, IMethods> extends Model<IDocument, {}, IMethods> {
8
+ getSuper(): AbstractModel<IDocument> & this;
9
+ }
10
+ declare class AbstractModel<IDocument = {}, 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,43 @@
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
+ // eslint-disable-next-line class-methods-use-this
32
+ get modelSchemaOptions() {
33
+ return {};
34
+ }
35
+ static get loggerGroup() {
36
+ return 'model';
37
+ }
38
+ initHooks() {
39
+ this.logger?.verbose(`Model ${this.constructor.name} has no custom hooks.`);
40
+ }
41
+ }
42
+ export default AbstractModel;
43
+ //# sourceMappingURL=AbstractModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AbstractModel.js","sourceRoot":"","sources":["../../src/modules/AbstractModel.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,IAAI,MAAM,WAAW,CAAC;AAc7B,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,kDAAkD;IAClD,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 { IApp } from '../server.ts';
2
+ import type winston from 'winston';
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":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAKrD,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,CAAC,CAAC;QACN,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 Base from './Base.ts';
2
+ import type Server from '../server.ts';
3
+ import type { ParseArgsOptionDescriptor } from 'node:util';
4
+ import type AbstractCommand from '../modules/AbstractCommand.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;