@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
package/dist/server.js ADDED
@@ -0,0 +1,468 @@
1
+ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
2
+ if (typeof path === "string" && /^\.\.?\//.test(path)) {
3
+ return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
4
+ return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
5
+ });
6
+ }
7
+ return path;
8
+ };
9
+ import EventEmitter from 'node:events';
10
+ import path from 'node:path';
11
+ import { hrtime, loadEnvFile } from 'node:process';
12
+ import * as url from 'node:url';
13
+ import merge from 'deepmerge';
14
+ import winston from 'winston';
15
+ import { setAppInstance } from "./helpers/appInstance.js";
16
+ import { getFilesPathWithInheritance } from "./helpers/files.js";
17
+ import { consoleLogger } from "./helpers/logger.js";
18
+ import Cache from "./services/cache/Cache.js";
19
+ try {
20
+ loadEnvFile();
21
+ }
22
+ catch {
23
+ console.warn('No env file found. This is ok. But please check youself.');
24
+ }
25
+ /**
26
+ * Main framework class.
27
+ */
28
+ class Server {
29
+ #realLogger = null;
30
+ #isInited = false;
31
+ #isModelsInited = false;
32
+ #isModelsLoaded = false;
33
+ #i18nService;
34
+ #i18nServicePromise;
35
+ cli = null;
36
+ config;
37
+ cache = {
38
+ configs: new Map(),
39
+ models: new Map(),
40
+ modelConstructors: new Map(),
41
+ modelPaths: [],
42
+ };
43
+ cacheService = null;
44
+ app;
45
+ /**
46
+ * Construct new server
47
+ * @param {Object} config main config object
48
+ * @param {Object} config.folders folders config
49
+ * @param {String} config.folders.config path to folder with config files
50
+ * @param {String} config.folders.models path to folder with moidels files
51
+ * @param {String} config.folders.controllers path to folder with controllers files
52
+ * @param {String} config.folders.locales path to folder with locales files
53
+ * @param {String} [config.folders.emails] path to folder with emails files
54
+ * @param {String} config.folders.commands path to folder with commands files
55
+ * @param {String} config.folders.migrations path to folder with migrations files
56
+ */
57
+ constructor(config) {
58
+ this.config = config;
59
+ const that = this;
60
+ this.app = {
61
+ getConfig: this.getConfig.bind(this),
62
+ getModel: this.getModel.bind(this),
63
+ runCliCommand: this.runCliCommand.bind(this),
64
+ updateConfig: this.updateConfig.bind(this),
65
+ getI18nService: this.getI18nService.bind(this),
66
+ foldersConfig: this.config.folders,
67
+ events: new EventEmitter(),
68
+ get cache() {
69
+ return that.getCache();
70
+ },
71
+ get logger() {
72
+ return that.getLogger();
73
+ },
74
+ httpServer: null,
75
+ controllerManager: null,
76
+ frameworkFolder: new URL('.', import.meta.url).pathname,
77
+ internalFilesCache: that.cache,
78
+ };
79
+ this.app.events.on('shutdown', () => {
80
+ const forceShutdownTimer = setTimeout(() => {
81
+ console.error('Shutdown timed out, forcing exit');
82
+ process.exit(1);
83
+ }, 5_000);
84
+ // Unref the timer so it doesn't keep the process alive
85
+ forceShutdownTimer.unref();
86
+ });
87
+ setAppInstance(this.app);
88
+ }
89
+ /**
90
+ * Start server (http + init all http ralated functions)
91
+ * @param {Function} callbackBefore404 code that should be executed before adding page 404
92
+ */
93
+ async startServer(callbackBefore404 = async () => Promise.resolve()) {
94
+ const [{ default: HttpServer }, { default: ControllerManager }] = await Promise.all([
95
+ import("./services/http/HttpServer.js"), // Speed optimisation
96
+ import("./controllers/index.js"), // Speed optimisation
97
+ this.init(),
98
+ ]);
99
+ this.addErrorHandling();
100
+ // TODO config
101
+ this.app.httpServer = new HttpServer(this.app);
102
+ this.app.controllerManager = new ControllerManager(this.app);
103
+ await this.app.controllerManager.initControllers();
104
+ await callbackBefore404();
105
+ this.app.httpServer.add404Page();
106
+ }
107
+ /**
108
+ * Do an initialization (config reading, etc)
109
+ */
110
+ async init({ isSkipModelInit = false, isSkipModelLoading = false, } = {}) {
111
+ if (this.#isInited) {
112
+ return true;
113
+ }
114
+ console.log('Server init...');
115
+ console.time('Server init. Done');
116
+ console.time('Loading config and model files. Time');
117
+ const prom = [this.#initConfigFiles()];
118
+ if (!isSkipModelLoading) {
119
+ prom.push(this.#loadModelFiles());
120
+ }
121
+ await Promise.all(prom);
122
+ console.timeEnd('Loading config and model files. Time');
123
+ if (!isSkipModelInit) {
124
+ await this.initAllModels();
125
+ }
126
+ this.#isInited = true;
127
+ console.timeEnd('Server init. Done');
128
+ console.log(' ');
129
+ return true;
130
+ }
131
+ /**
132
+ * Connect to mongoose if needed
133
+ */
134
+ async #mongooseConnect() {
135
+ const mongoose = (await import('mongoose')).default;
136
+ mongoose.set('strictQuery', true);
137
+ if (!mongoose.connection.readyState) {
138
+ this.app.events.on('shutdown', async () => {
139
+ this.app.logger?.verbose('Shutdown was called. Closing all mongoose connections');
140
+ for (const c of mongoose.connections) {
141
+ c.close(true);
142
+ }
143
+ // await mongoose.disconnect(); // TODO it have problems with replica-set
144
+ });
145
+ const connectionParams = {};
146
+ if (process.env.MONGO_APP_NAME) {
147
+ if (process.env.MONGO_APP_NAME.length >= 64) {
148
+ // https://github.com/mongodb/specifications/blob/master/source/mongodb-handshake/handshake.md?plain=1#L460
149
+ // all metadata 512 and app name 128, better to keep as low as possible
150
+ this.app.logger?.error(`Mongo connection MONGO_APP_NAME mare then 64 symbols. This is a limitation of mogno driver. Ignoring it ${process.env.MONGO_APP_NAME}`);
151
+ }
152
+ else {
153
+ connectionParams.appName = process.env.MONGO_APP_NAME;
154
+ }
155
+ }
156
+ mongoose
157
+ .connect(this.app.getConfig('mongo').connectionString, connectionParams)
158
+ .then(() => {
159
+ this.app.logger?.info(`Mongo connection success ${connectionParams.appName}`);
160
+ mongoose.connection.on('error', (err) => {
161
+ this.app.logger?.error('Mongo connection error', err);
162
+ console.error(err);
163
+ });
164
+ }, (error) => {
165
+ this.app.logger?.error("Can't install mongodb connection", error);
166
+ });
167
+ }
168
+ }
169
+ /**
170
+ * Load model and init them
171
+ */
172
+ async initAllModels() {
173
+ if (this.#isModelsInited) {
174
+ // already inited
175
+ return;
176
+ }
177
+ const now = performance.now();
178
+ if (!this.#isModelsLoaded) {
179
+ await this.#loadModelFiles();
180
+ }
181
+ if (this.app.getConfig('mongo').connectionString) {
182
+ const { BaseModel } = await import("./modules/BaseModel.js");
183
+ this.#mongooseConnect(); //do not wait for connection. Any time for us it ok
184
+ for (const [modelName, ModelConstructor] of this.cache
185
+ .modelConstructors) {
186
+ try {
187
+ if (ModelConstructor.prototype instanceof BaseModel) {
188
+ const model = ModelConstructor.initialize();
189
+ this.cache.models.set(modelName, model);
190
+ }
191
+ else {
192
+ this.app.logger?.warn(`Model ${modelName} is old type model. Please update it to BaseModel`);
193
+ const model = new ModelConstructor(this.app);
194
+ this.cache.models.set(modelName, model.mongooseModel);
195
+ }
196
+ }
197
+ catch (e) {
198
+ if (e instanceof Error) {
199
+ this.app.logger.error(`Problem with model ${modelName}, ${e.message}`);
200
+ this.app.logger.error(e);
201
+ }
202
+ else {
203
+ this.app.logger.error(`Problem with model ${modelName}, Unknown error`);
204
+ }
205
+ }
206
+ }
207
+ }
208
+ else {
209
+ this.app.logger.warn('Skipping inited models as we have no mongo connection string');
210
+ }
211
+ this.app.logger.debug(`Inited models in ${(performance.now() - now).toFixed(2)}ms`);
212
+ this.#isModelsInited = true;
213
+ }
214
+ async #initConfigFiles() {
215
+ const dirname = url.fileURLToPath(new URL('.', import.meta.url));
216
+ const files = await getFilesPathWithInheritance({
217
+ internalFolder: path.join(dirname, '/config'),
218
+ externalFolder: this.app.foldersConfig.config,
219
+ loggerFileType: 'CONFIG',
220
+ logger: (m) => consoleLogger('info', m),
221
+ filter: {
222
+ startWithCapital: false,
223
+ },
224
+ });
225
+ const configFiles = {};
226
+ for (const file of files) {
227
+ const config = file.file.split('.');
228
+ if (!configFiles[config[0]]) {
229
+ configFiles[config[0]] = {};
230
+ }
231
+ if (config.length === 2) {
232
+ configFiles[config[0]].default = file.path;
233
+ }
234
+ else {
235
+ configFiles[config[0]][config[1]] = file.path;
236
+ }
237
+ }
238
+ const loadConfig = async (configName, values) => {
239
+ const promises = [import(__rewriteRelativeImportExtension(values.default))];
240
+ if (process.env.NODE_ENV && values[process.env.NODE_ENV]) {
241
+ promises.push(import(__rewriteRelativeImportExtension(values[process.env.NODE_ENV])));
242
+ }
243
+ const result = await Promise.all(promises);
244
+ return {
245
+ name: configName,
246
+ finalValue: merge(result[0].default, result[1]?.default || {}, {
247
+ arrayMerge: (_destinationArray, sourceArray) => sourceArray,
248
+ }),
249
+ };
250
+ };
251
+ const loadingPromises = [];
252
+ for (const [configFile, value] of Object.entries(configFiles)) {
253
+ loadingPromises.push(loadConfig(configFile, value));
254
+ }
255
+ const configs = await Promise.all(loadingPromises);
256
+ for (const config of configs) {
257
+ this.cache.configs.set(config.name, config.finalValue);
258
+ }
259
+ return true;
260
+ }
261
+ async getModelFilesPathsWithInheritance() {
262
+ if (this.cache.modelPaths.length === 0) {
263
+ const dirname = url.fileURLToPath(new URL('.', import.meta.url));
264
+ const files = await getFilesPathWithInheritance({
265
+ internalFolder: path.join(dirname, '/models'),
266
+ externalFolder: this.app.foldersConfig.models,
267
+ loggerFileType: 'MODEL',
268
+ logger: (m) => consoleLogger('info', m),
269
+ });
270
+ for (const file of files) {
271
+ this.cache.modelPaths.push({
272
+ file: file.file.split('.')[0],
273
+ path: file.path,
274
+ });
275
+ }
276
+ }
277
+ return this.cache.modelPaths;
278
+ }
279
+ async #loadModelFiles() {
280
+ if (this.#isModelsLoaded) {
281
+ // already inited
282
+ return true;
283
+ }
284
+ const files = await this.getModelFilesPathsWithInheritance();
285
+ const promises = [];
286
+ for (const file of files) {
287
+ const t = hrtime.bigint();
288
+ promises.push(import(__rewriteRelativeImportExtension(file.path)).then((f) => ({
289
+ name: file.file,
290
+ file: f,
291
+ took: hrtime.bigint() - t,
292
+ })));
293
+ }
294
+ const loadedModels = await Promise.all(promises);
295
+ for (const model of loadedModels) {
296
+ this.cache.modelConstructors.set(model.name, model.file.default);
297
+ }
298
+ this.#isModelsLoaded = true;
299
+ return true;
300
+ }
301
+ /**
302
+ * Add error logging on promise reject
303
+ */
304
+ addErrorHandling() {
305
+ process.on('uncaughtException', (e) => this.app.logger.error('uncaughtException', e));
306
+ process.on('unhandledRejection', (e) => {
307
+ this.app.logger.error('unhandledRejection', e);
308
+ });
309
+ }
310
+ /**
311
+ * Return config from {configName} (file name) on config folder.
312
+ * Support cache and updating confing into cache
313
+ * Also will update config based on NODE_ENV. If config.js and config.production.js
314
+ * and NODE_ENV is production then we will load base config (config.js) and the load
315
+ * environment config (config.production.js) and overwrite base config options
316
+ * @see updateConfig
317
+ * @param {String} configName name on config file to load
318
+ * @returns {Object} config object. Structure depends of config file
319
+ */
320
+ getConfig(configName) {
321
+ if (!this.cache.configs.has(configName)) {
322
+ if (!this.#isInited) {
323
+ throw new Error('You should call Server.init() before using getConfig');
324
+ }
325
+ this.app.logger.warn(`You asked for config ${configName} that not exists. Please check you codebase `);
326
+ return {};
327
+ }
328
+ return (this.cache.configs.get(configName) ||
329
+ {});
330
+ }
331
+ /**
332
+ * Return or create new logger instance. This is a main logger instance
333
+ */
334
+ getLogger() {
335
+ if (!this.#realLogger) {
336
+ console.time('Creating real logger for server. Time');
337
+ this.#realLogger = this.#createLogger();
338
+ console.timeEnd('Creating real logger for server. Time');
339
+ }
340
+ return this.#realLogger;
341
+ }
342
+ #createLogger() {
343
+ const alignColorsAndTime = winston.format.combine(winston.format.colorize({
344
+ all: true,
345
+ }), winston.format.timestamp(), winston.format.printf((info) => `(${process.pid}) \x1B[32m[${info.label ?? 'SERVER'}]\x1B[39m ${info.timestamp} ${info.level} : ${info.message} ${info?.stack ?? ''} ${info.durationMs ? `Duration: ${info.durationMs}ms` : ''}`));
346
+ const { transports } = this.app.getConfig('log');
347
+ function IsConstructor(f) {
348
+ try {
349
+ Reflect.construct(String, [], f);
350
+ }
351
+ catch {
352
+ return false;
353
+ }
354
+ return true;
355
+ }
356
+ const logger = winston.createLogger({
357
+ format: winston.format.errors({ stack: true }),
358
+ level: 'silly',
359
+ });
360
+ for (const log of transports) {
361
+ if (log.enable) {
362
+ if (log.transport === 'console') {
363
+ logger.add(new winston.transports.Console({
364
+ level: log.transportOptions.level,
365
+ format: winston.format.combine(winston.format.colorize(), alignColorsAndTime),
366
+ }));
367
+ }
368
+ else if (log.transport === 'sentry') {
369
+ // Special handling for Sentry - load our wrapper
370
+ import('./services/logging/SentryTransport.js')
371
+ .then((Tr) => {
372
+ const Transport = Tr.default;
373
+ logger.add(new Transport(log.transportOptions));
374
+ })
375
+ .catch(() => {
376
+ // Silently ignore if wrapper not found (shouldn't happen in production)
377
+ console.warn('[Framework] Sentry transport not available');
378
+ });
379
+ }
380
+ else {
381
+ import(__rewriteRelativeImportExtension(log.transport)).then((Tr) => {
382
+ let Transport = Tr.default;
383
+ if (!IsConstructor(Transport) && Transport.default) {
384
+ Transport = Transport.default;
385
+ }
386
+ else {
387
+ console.error(`${log.transport} not a constructor. Please check it`);
388
+ return;
389
+ }
390
+ logger.profile(`Adding new logger ${log.transport}`);
391
+ logger.add(new Transport(log.transportOptions));
392
+ logger.profile(`Adding new logger ${log.transport}`);
393
+ });
394
+ }
395
+ }
396
+ }
397
+ return logger;
398
+ }
399
+ /**
400
+ * Primary designed for tests when we need to update some configs before start testing
401
+ * Should be called before any initialization was done
402
+ * @TODO send event to all inited components to update config
403
+ * @param {String} configName
404
+ * @param {Object} config
405
+ */
406
+ updateConfig(configName, config) {
407
+ // const confName = configName.charAt(0).toUpperCase() + configName.slice(1);
408
+ const conf = this.getConfig(configName);
409
+ const newConf = Object.assign(conf, config); // TODO deep clone
410
+ this.cache.configs.set(configName, newConf);
411
+ return newConf;
412
+ }
413
+ async getI18nService() {
414
+ if (this.#i18nService) {
415
+ return this.#i18nService;
416
+ }
417
+ if (!this.#i18nServicePromise) {
418
+ this.#i18nServicePromise = (async () => {
419
+ const I18nService = (await import("./services/i18n/I18n.js")).I18n; // speed optimisation
420
+ this.#i18nService = new I18nService(this.app);
421
+ return this.#i18nService;
422
+ })();
423
+ }
424
+ return this.#i18nServicePromise;
425
+ }
426
+ /**
427
+ * Return model from {modelName} (file name) on model folder.
428
+ * Support cache
429
+ * @param {String} modelName name on config file to load
430
+ */
431
+ getModel(modelName) {
432
+ if (modelName.endsWith('s')) {
433
+ this.app.logger.warn(`Probably your model name '${modelName}' in plural from. Try to avoid plural form`);
434
+ }
435
+ if (!this.#isInited) {
436
+ this.app.logger.error(new Error('You should call Server.init() before using getModel'));
437
+ return false;
438
+ }
439
+ const model = this.cache.models.get(modelName);
440
+ if (!model) {
441
+ this.app.logger.warn(`You asked for model ${modelName} that not exists. Please check you codebase `);
442
+ return false;
443
+ }
444
+ return model;
445
+ }
446
+ /**
447
+ * Run cli command into framework (http, ws, etc)
448
+ * @param {String} commandName name of command to load
449
+ */
450
+ async runCliCommand(commandName) {
451
+ if (!this.cli) {
452
+ const { default: BaseCli } = await import("./modules/BaseCli.js"); // Speed optimisation
453
+ this.cli = new BaseCli(this);
454
+ }
455
+ return this.cli.run(commandName);
456
+ }
457
+ /**
458
+ * Get internal cache service
459
+ */
460
+ getCache() {
461
+ if (!this.cacheService) {
462
+ this.cacheService = new Cache(this.app);
463
+ }
464
+ return this.cacheService;
465
+ }
466
+ }
467
+ export default Server;
468
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import type { RedisClientType } from '@redis/client';
2
+ import Base from '../../modules/Base.ts';
3
+ import type { IApp } from '../../server.ts';
4
+ declare class Cache extends Base {
5
+ #private;
6
+ whenReady: Promise<void>;
7
+ redisClient: RedisClientType;
8
+ redisNamespace: string;
9
+ promiseMapping: Map<any, any>;
10
+ constructor(app: IApp);
11
+ /**
12
+ * As framework support namespaces all key for cache go through this function
13
+ * Function return new key with added namespace
14
+ * @param key key to add namespace
15
+ */
16
+ getKeyWithNameSpace(key: string): string;
17
+ /**
18
+ * Get value from cache. Set and get if not eists
19
+ * @param key key to check
20
+ * @param onNotFound callback that will be executed if value not found on cahce
21
+ * @param storeTime how long we should store value on cache
22
+ */
23
+ getSetValue(keyValue: string, onNotFound: () => Promise<any>, storeTime?: number): Promise<any>;
24
+ /**
25
+ * Remove key from cache
26
+ * @param key key to remove
27
+ */
28
+ removeKey(keyValue: string): Promise<number>;
29
+ static get loggerGroup(): string;
30
+ }
31
+ export default Cache;
@@ -0,0 +1,113 @@
1
+ import Base from "../../modules/Base.js";
2
+ class Cache extends Base {
3
+ whenReady;
4
+ redisClient;
5
+ redisNamespace = '';
6
+ promiseMapping = new Map();
7
+ constructor(app) {
8
+ super(app);
9
+ this.whenReady = this.#init();
10
+ }
11
+ async #init() {
12
+ // todo for now only redis. refactor for drives support in future
13
+ // at least memory and redis drivers should be presented
14
+ // memory drives should works on master process level
15
+ // we should support multiple cashe same time
16
+ const { createClient } = await import('@redis/client');
17
+ const conf = this.app.getConfig('redis');
18
+ this.redisClient = createClient({
19
+ url: conf.url,
20
+ });
21
+ this.redisNamespace = conf.namespace;
22
+ this.redisClient.on('error', (error, b, c) => {
23
+ this.logger?.error(error, b, c);
24
+ });
25
+ this.redisClient.on('connect', () => {
26
+ this.logger?.info('Redis connection success');
27
+ });
28
+ this.app.events.on('shutdown', () => {
29
+ this.redisClient.quit();
30
+ });
31
+ }
32
+ /**
33
+ * As framework support namespaces all key for cache go through this function
34
+ * Function return new key with added namespace
35
+ * @param key key to add namespace
36
+ */
37
+ getKeyWithNameSpace(key) {
38
+ return `${this.redisNamespace}-${key}`;
39
+ }
40
+ /**
41
+ * Get value from cache. Set and get if not eists
42
+ * @param key key to check
43
+ * @param onNotFound callback that will be executed if value not found on cahce
44
+ * @param storeTime how long we should store value on cache
45
+ */
46
+ async getSetValue(keyValue, onNotFound, storeTime = 60 * 5) {
47
+ await this.whenReady;
48
+ if (!this.redisClient.isOpen) {
49
+ await this.redisClient.connect();
50
+ }
51
+ const key = this.getKeyWithNameSpace(keyValue);
52
+ // 5 mins default
53
+ let resolve = (_value) => { };
54
+ let reject = (_value) => { };
55
+ if (this.promiseMapping.has(key)) {
56
+ return this.promiseMapping.get(key);
57
+ }
58
+ this.promiseMapping.set(key, new Promise((res, rej) => {
59
+ resolve = res;
60
+ reject = rej;
61
+ }));
62
+ let result = await this.redisClient.get(key);
63
+ if (!result) {
64
+ this.logger?.verbose(`getSetValueFromCache not found for key ${key}`);
65
+ try {
66
+ result = await onNotFound();
67
+ }
68
+ catch (e) {
69
+ this.logger?.error(`Cache onNotFound for key '${key}' error: ${e}`);
70
+ this.promiseMapping.delete(key);
71
+ reject(e);
72
+ return Promise.reject(e);
73
+ }
74
+ this.redisClient.set(key, JSON.stringify(result, (_jsonkey, value) => typeof value === 'bigint' ? `${value}n` : value), {
75
+ EX: storeTime,
76
+ });
77
+ }
78
+ else {
79
+ this.logger?.verbose(`getSetValueFromCache FROM CACHE key ${key}, value ${result.substring(0, 100)}`);
80
+ try {
81
+ result = JSON.parse(result, (_jsonkey, value) => {
82
+ if (typeof value === 'string' && /^\d+n$/.test(value)) {
83
+ return BigInt(value.slice(0, value.length - 1));
84
+ }
85
+ return value;
86
+ });
87
+ }
88
+ catch {
89
+ this.logger?.warn('Not able to parse json from redis cache. That can be a normal in case you store string here');
90
+ }
91
+ }
92
+ resolve(result);
93
+ this.promiseMapping.delete(key);
94
+ return result;
95
+ }
96
+ /**
97
+ * Remove key from cache
98
+ * @param key key to remove
99
+ */
100
+ async removeKey(keyValue) {
101
+ await this.whenReady;
102
+ if (!this.redisClient.isOpen) {
103
+ await this.redisClient.connect();
104
+ }
105
+ const key = this.getKeyWithNameSpace(keyValue);
106
+ return this.redisClient.del(key);
107
+ }
108
+ static get loggerGroup() {
109
+ return 'Cache_';
110
+ }
111
+ }
112
+ export default Cache;
113
+ //# sourceMappingURL=Cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Cache.js","sourceRoot":"","sources":["../../../src/services/cache/Cache.ts"],"names":[],"mappings":"AAEA,OAAO,IAAI,MAAM,uBAAuB,CAAC;AAGzC,MAAM,KAAM,SAAQ,IAAI;IACtB,SAAS,CAAgB;IAEzB,WAAW,CAAmB;IAE9B,cAAc,GAAW,EAAE,CAAC;IAE5B,cAAc,GAAG,IAAI,GAAG,EAAE,CAAC;IAE3B,YAAY,GAAS;QACnB,KAAK,CAAC,GAAG,CAAC,CAAC;QACX,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,KAAK;QACT,iEAAiE;QACjE,wDAAwD;QACxD,qDAAqD;QACrD,6CAA6C;QAC7C,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;QACvD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAuB,CAAC;QAC/D,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC;YAC9B,GAAG,EAAE,IAAI,CAAC,GAAG;SACd,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC;QAErC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;YAC3C,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;YAClC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE;YAClC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QAC1B,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,mBAAmB,CAAC,GAAW;QAC7B,OAAO,GAAG,IAAI,CAAC,cAAc,IAAI,GAAG,EAAE,CAAC;IACzC,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,WAAW,CACf,QAAgB,EAChB,UAA8B,EAC9B,SAAS,GAAG,EAAE,GAAG,CAAC;QAElB,MAAM,IAAI,CAAC,SAAS,CAAC;QACrB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;YAC7B,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QACnC,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAC/C,iBAAiB;QACjB,IAAI,OAAO,GAAG,CAAC,MAAe,EAAE,EAAE,GAAE,CAAC,CAAC;QACtC,IAAI,MAAM,GAAG,CAAC,MAAe,EAAE,EAAE,GAAE,CAAC,CAAC;QACrC,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACtC,CAAC;QAED,IAAI,CAAC,cAAc,CAAC,GAAG,CACrB,GAAG,EACH,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YACvB,OAAO,GAAG,GAAG,CAAC;YACd,MAAM,GAAG,GAAG,CAAC;QACf,CAAC,CAAC,CACH,CAAC;QAEF,IAAI,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,0CAA0C,GAAG,EAAE,CAAC,CAAC;YACtE,IAAI,CAAC;gBACH,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;YAC9B,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,6BAA6B,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;gBACpE,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAChC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACV,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC3B,CAAC;YAED,IAAI,CAAC,WAAW,CAAC,GAAG,CAClB,GAAG,EACH,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,CACzC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,CAChD,EACD;gBACE,EAAE,EAAE,SAAS;aACd,CACF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,EAAE,OAAO,CAClB,uCAAuC,GAAG,WAAW,MAAM,CAAC,SAAS,CACnE,CAAC,EACD,GAAG,CACJ,EAAE,CACJ,CAAC;YACF,IAAI,CAAC;gBACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;oBAC9C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;wBACtD,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;oBAClD,CAAC;oBACD,OAAO,KAAK,CAAC;gBACf,CAAC,CAAC,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACP,IAAI,CAAC,MAAM,EAAE,IAAI,CACf,6FAA6F,CAC9F,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,CAAC,MAAM,CAAC,CAAC;QAChB,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAChC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,SAAS,CAAC,QAAgB;QAC9B,MAAM,IAAI,CAAC,SAAS,CAAC;QAErB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;YAC7B,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QACnC,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,KAAK,WAAW;QACpB,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AAED,eAAe,KAAK,CAAC"}
@@ -0,0 +1,11 @@
1
+ export default DocumentationGenerator;
2
+ declare class DocumentationGenerator extends Base {
3
+ processingFields(fieldsByRoute: any): any[];
4
+ selectUniqueFields(fields: any): any;
5
+ groupFieldsFromSchemas(schemas: any): any[];
6
+ convertDataToDocumentationElement(controllerName: any, routesInfo: any, middlewaresInfo: any, routeMiddlewaresReg: any): {
7
+ contollerName: any;
8
+ routesInfo: any;
9
+ };
10
+ }
11
+ import Base from '../../modules/Base.ts';