@adaptivestone/framework 5.0.0-beta.4 → 5.0.0-beta.40

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 (298) hide show
  1. package/CHANGELOG.md +1107 -528
  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 +83 -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 +11 -0
  22. package/dist/commands/GenerateTypes.js +52 -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 +31 -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 +43 -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 +13 -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 +11 -0
  49. package/dist/config/log.js +20 -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 +13 -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 +131 -0
  64. package/dist/controllers/Auth.js +186 -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 +22 -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 +14 -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 +17 -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 +20 -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/dist/helpers/yup.js +21 -0
  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 +90 -0
  97. package/dist/models/Lock.js +97 -0
  98. package/dist/models/Lock.js.map +1 -0
  99. package/dist/models/Migration.d.ts +13 -0
  100. package/dist/models/Migration.js +14 -0
  101. package/dist/models/Migration.js.map +1 -0
  102. package/dist/models/Sequence.d.ts +28 -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 +656 -0
  106. package/dist/models/User.js +291 -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 +51 -0
  112. package/dist/modules/AbstractCommand.js +60 -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 +94 -0
  118. package/dist/modules/AbstractController.js +323 -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 +42 -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 +55 -0
  130. package/dist/modules/BaseModel.js +37 -0
  131. package/dist/modules/BaseModel.js.map +1 -0
  132. package/dist/server.d.ts +123 -0
  133. package/dist/server.js +468 -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 +113 -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 +130 -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 +70 -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 +41 -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 +12 -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 +20 -0
  154. package/dist/services/http/middleware/GetUserByToken.js +39 -0
  155. package/dist/services/http/middleware/GetUserByToken.js.map +1 -0
  156. package/dist/services/http/middleware/I18n.d.ts +23 -0
  157. package/dist/services/http/middleware/I18n.js +61 -0
  158. package/dist/services/http/middleware/I18n.js.map +1 -0
  159. package/dist/services/http/middleware/IpDetector.d.ts +14 -0
  160. package/dist/services/http/middleware/IpDetector.js +55 -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 +46 -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 +26 -0
  169. package/dist/services/http/middleware/RateLimiter.js +118 -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 +12 -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/i18n/I18n.d.ts +15 -0
  181. package/dist/services/i18n/I18n.js +58 -0
  182. package/dist/services/i18n/I18n.js.map +1 -0
  183. package/dist/services/logging/SentryTransport.d.ts +14 -0
  184. package/dist/services/logging/SentryTransport.js +57 -0
  185. package/dist/services/logging/SentryTransport.js.map +1 -0
  186. package/dist/services/validate/ValidateService.d.ts +31 -0
  187. package/dist/services/validate/ValidateService.js +95 -0
  188. package/dist/services/validate/ValidateService.js.map +1 -0
  189. package/dist/services/validate/drivers/AbstractValidator.d.ts +14 -0
  190. package/dist/services/validate/drivers/AbstractValidator.js +29 -0
  191. package/dist/services/validate/drivers/AbstractValidator.js.map +1 -0
  192. package/dist/services/validate/drivers/CustomValidator.d.ts +14 -0
  193. package/dist/services/validate/drivers/CustomValidator.js +48 -0
  194. package/dist/services/validate/drivers/CustomValidator.js.map +1 -0
  195. package/dist/services/validate/drivers/YupValidator.d.ts +13 -0
  196. package/dist/services/validate/drivers/YupValidator.js +86 -0
  197. package/dist/services/validate/drivers/YupValidator.js.map +1 -0
  198. package/dist/tests/frameworkVitestSetup.d.ts +1 -0
  199. package/dist/tests/frameworkVitestSetup.js +9 -0
  200. package/dist/tests/frameworkVitestSetup.js.map +1 -0
  201. package/dist/tests/globalSetupVitest.d.ts +3 -0
  202. package/dist/tests/globalSetupVitest.js +29 -0
  203. package/dist/tests/globalSetupVitest.js.map +1 -0
  204. package/dist/tests/setupVitest.d.ts +1 -0
  205. package/dist/tests/setupVitest.js +91 -0
  206. package/dist/tests/setupVitest.js.map +1 -0
  207. package/dist/tests/testHelpers.d.ts +340 -0
  208. package/dist/tests/testHelpers.js +48 -0
  209. package/dist/tests/testHelpers.js.map +1 -0
  210. package/package.json +45 -39
  211. package/Cli.js +0 -22
  212. package/cluster.js +0 -27
  213. package/commands/CreateUser.js +0 -75
  214. package/commands/Documentation.js +0 -17
  215. package/commands/DropIndex.js +0 -29
  216. package/commands/GenerateRandomBytes.js +0 -21
  217. package/commands/GetOpenApiJson.js +0 -325
  218. package/commands/SyncIndexes.js +0 -39
  219. package/commands/migration/Create.js +0 -61
  220. package/commands/migration/Migrate.js +0 -55
  221. package/config/auth.js +0 -9
  222. package/config/http.js +0 -9
  223. package/config/i18n.js +0 -12
  224. package/config/ipDetector.js +0 -14
  225. package/config/log.js +0 -22
  226. package/config/mail.js +0 -29
  227. package/config/mongo.js +0 -3
  228. package/config/rateLimiter.js +0 -16
  229. package/config/redis.js +0 -4
  230. package/config/validate.js +0 -3
  231. package/controllers/Auth.js +0 -210
  232. package/controllers/Home.js +0 -28
  233. package/controllers/index.js +0 -60
  234. package/folderConfig.js +0 -14
  235. package/helpers/files.js +0 -79
  236. package/helpers/logger.js +0 -17
  237. package/helpers/redis/clearNamespace.js +0 -14
  238. package/helpers/yup.js +0 -24
  239. package/index.js +0 -8
  240. package/jsconfig.json +0 -9
  241. package/locales/en/translation.json +0 -27
  242. package/locales/ru/translation.json +0 -27
  243. package/migrations/.gitkeep +0 -0
  244. package/models/Migration.js +0 -15
  245. package/models/Sequence.js +0 -22
  246. package/models/User.js +0 -263
  247. package/modules/AbstractCommand.js +0 -43
  248. package/modules/AbstractConnector.js +0 -9
  249. package/modules/AbstractController.js +0 -413
  250. package/modules/AbstractModel.d.ts +0 -48
  251. package/modules/AbstractModel.js +0 -92
  252. package/modules/Base.d.ts +0 -37
  253. package/modules/Base.js +0 -63
  254. package/modules/BaseCli.js +0 -97
  255. package/server.d.ts +0 -98
  256. package/server.js +0 -438
  257. package/services/cache/Cache.d.ts +0 -35
  258. package/services/cache/Cache.js +0 -124
  259. package/services/documentation/DocumentationGenerator.js +0 -169
  260. package/services/http/HttpServer.js +0 -96
  261. package/services/http/middleware/AbstractMiddleware.js +0 -51
  262. package/services/http/middleware/Auth.js +0 -20
  263. package/services/http/middleware/Cors.js +0 -46
  264. package/services/http/middleware/GetUserByToken.js +0 -47
  265. package/services/http/middleware/I18n.js +0 -117
  266. package/services/http/middleware/IpDetector.js +0 -59
  267. package/services/http/middleware/Pagination.js +0 -57
  268. package/services/http/middleware/PrepareAppInfo.js +0 -18
  269. package/services/http/middleware/RateLimiter.js +0 -134
  270. package/services/http/middleware/RequestLogger.js +0 -22
  271. package/services/http/middleware/RequestParser.js +0 -40
  272. package/services/http/middleware/Role.js +0 -29
  273. package/services/messaging/email/index.js +0 -217
  274. package/services/messaging/email/resources/.gitkeep +0 -1
  275. package/services/messaging/email/templates/emptyTemplate/html.pug +0 -9
  276. package/services/messaging/email/templates/emptyTemplate/subject.pug +0 -1
  277. package/services/messaging/email/templates/emptyTemplate/text.pug +0 -1
  278. package/services/messaging/email/templates/recovery/html.pug +0 -8
  279. package/services/messaging/email/templates/recovery/subject.pug +0 -2
  280. package/services/messaging/email/templates/recovery/text.pug +0 -3
  281. package/services/messaging/email/templates/verification/html.pug +0 -10
  282. package/services/messaging/email/templates/verification/subject.pug +0 -1
  283. package/services/messaging/email/templates/verification/text.pug +0 -1
  284. package/services/messaging/index.js +0 -3
  285. package/services/validate/ValidateService.js +0 -157
  286. package/services/validate/drivers/AbstractValidator.js +0 -37
  287. package/services/validate/drivers/CustomValidator.js +0 -51
  288. package/services/validate/drivers/YupValidator.js +0 -103
  289. package/tests/globalSetupVitest.js +0 -35
  290. package/tests/setup.js +0 -118
  291. package/tests/setupVitest.js +0 -109
  292. package/types/Expand.d.ts +0 -11
  293. package/types/TFoldersConfig.d.ts +0 -17
  294. package/views/404.pug +0 -3
  295. package/views/home.pug +0 -3
  296. package/views/layouts/base.pug +0 -39
  297. package/vitest.config.js +0 -16
  298. /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;