@adaptivestone/framework 5.0.0-beta.11 → 5.0.0-beta.13

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 (271) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/LICENCE +1 -1
  3. package/cliCommand.ts +10 -0
  4. package/dist/Cli.d.ts +7 -0
  5. package/dist/Cli.js +19 -0
  6. package/dist/Cli.js.map +1 -0
  7. package/dist/cluster.d.ts +1 -0
  8. package/dist/cluster.js +18 -0
  9. package/dist/cluster.js.map +1 -0
  10. package/dist/commands/CreateUser.d.ts +32 -0
  11. package/dist/commands/CreateUser.js +81 -0
  12. package/dist/commands/CreateUser.js.map +1 -0
  13. package/dist/commands/Documentation.d.ts +5 -0
  14. package/dist/commands/Documentation.js +15 -0
  15. package/dist/commands/Documentation.js.map +1 -0
  16. package/dist/commands/DropIndex.d.ts +16 -0
  17. package/dist/commands/DropIndex.js +30 -0
  18. package/dist/commands/DropIndex.js.map +1 -0
  19. package/dist/commands/GenerateRandomBytes.d.ts +7 -0
  20. package/dist/commands/GenerateRandomBytes.js +18 -0
  21. package/dist/commands/GenerateRandomBytes.js.map +1 -0
  22. package/dist/commands/GetOpenApiJson.d.ts +17 -0
  23. package/dist/commands/GetOpenApiJson.js +272 -0
  24. package/dist/commands/GetOpenApiJson.js.map +1 -0
  25. package/dist/commands/SyncIndexes.d.ts +6 -0
  26. package/dist/commands/SyncIndexes.js +32 -0
  27. package/dist/commands/SyncIndexes.js.map +1 -0
  28. package/dist/commands/migration/Create.d.ts +18 -0
  29. package/dist/commands/migration/Create.js +57 -0
  30. package/dist/commands/migration/Create.js.map +1 -0
  31. package/dist/commands/migration/Migrate.d.ts +6 -0
  32. package/dist/commands/migration/Migrate.js +46 -0
  33. package/dist/commands/migration/Migrate.js.map +1 -0
  34. package/dist/config/auth.d.ts +6 -0
  35. package/dist/config/auth.js +7 -0
  36. package/dist/config/auth.js.map +1 -0
  37. package/dist/config/http.d.ts +8 -0
  38. package/dist/config/http.js +10 -0
  39. package/dist/config/http.js.map +1 -0
  40. package/dist/config/i18n.d.ts +10 -0
  41. package/dist/config/i18n.js +13 -0
  42. package/dist/config/i18n.js.map +1 -0
  43. package/dist/config/ipDetector.d.ts +5 -0
  44. package/dist/config/ipDetector.js +15 -0
  45. package/dist/config/ipDetector.js.map +1 -0
  46. package/dist/config/log.d.ts +22 -0
  47. package/dist/config/log.js +23 -0
  48. package/dist/config/log.js.map +1 -0
  49. package/dist/config/mongo.d.ts +4 -0
  50. package/dist/config/mongo.js +4 -0
  51. package/dist/config/mongo.js.map +1 -0
  52. package/dist/config/rateLimiter.d.ts +15 -0
  53. package/dist/config/rateLimiter.js +17 -0
  54. package/dist/config/rateLimiter.js.map +1 -0
  55. package/dist/config/redis.d.ts +5 -0
  56. package/dist/config/redis.js +5 -0
  57. package/dist/config/redis.js.map +1 -0
  58. package/dist/config/validate.d.ts +4 -0
  59. package/dist/config/validate.js +4 -0
  60. package/dist/config/validate.js.map +1 -0
  61. package/dist/controllers/Auth.d.ts +74 -0
  62. package/dist/controllers/Auth.js +181 -0
  63. package/dist/controllers/Auth.js.map +1 -0
  64. package/dist/controllers/Home.d.ts +15 -0
  65. package/dist/controllers/Home.js +24 -0
  66. package/dist/controllers/Home.js.map +1 -0
  67. package/dist/controllers/index.d.ts +16 -0
  68. package/dist/controllers/index.js +59 -0
  69. package/dist/controllers/index.js.map +1 -0
  70. package/dist/folderConfig.d.ts +34 -0
  71. package/dist/folderConfig.js +15 -0
  72. package/dist/folderConfig.js.map +1 -0
  73. package/dist/helpers/files.d.ts +16 -0
  74. package/dist/helpers/files.js +76 -0
  75. package/dist/helpers/files.js.map +1 -0
  76. package/dist/helpers/logger.d.ts +4 -0
  77. package/dist/helpers/logger.js +28 -0
  78. package/dist/helpers/logger.js.map +1 -0
  79. package/dist/helpers/redis/clearNamespace.d.ts +3 -0
  80. package/dist/helpers/redis/clearNamespace.js +15 -0
  81. package/dist/helpers/redis/clearNamespace.js.map +1 -0
  82. package/dist/helpers/yup.d.ts +13 -0
  83. package/{helpers → dist/helpers}/yup.js +8 -9
  84. package/dist/helpers/yup.js.map +1 -0
  85. package/dist/index.d.ts +1 -0
  86. package/dist/index.js +7 -0
  87. package/dist/index.js.map +1 -0
  88. package/dist/models/Lock.d.ts +62 -0
  89. package/dist/models/Lock.js +94 -0
  90. package/dist/models/Lock.js.map +1 -0
  91. package/dist/models/Migration.d.ts +13 -0
  92. package/dist/models/Migration.js +14 -0
  93. package/dist/models/Migration.js.map +1 -0
  94. package/dist/models/Sequence.d.ts +23 -0
  95. package/dist/models/Sequence.js +16 -0
  96. package/dist/models/Sequence.js.map +1 -0
  97. package/dist/models/User.d.ts +178 -0
  98. package/dist/models/User.js +244 -0
  99. package/dist/models/User.js.map +1 -0
  100. package/dist/modules/AbstractCommand.d.ts +30 -0
  101. package/dist/modules/AbstractCommand.js +44 -0
  102. package/dist/modules/AbstractCommand.js.map +1 -0
  103. package/dist/modules/AbstractConnector.d.ts +5 -0
  104. package/dist/modules/AbstractConnector.js +8 -0
  105. package/dist/modules/AbstractConnector.js.map +1 -0
  106. package/dist/modules/AbstractController.d.ts +90 -0
  107. package/dist/modules/AbstractController.js +324 -0
  108. package/dist/modules/AbstractController.js.map +1 -0
  109. package/dist/modules/AbstractModel.d.ts +29 -0
  110. package/dist/modules/AbstractModel.js +73 -0
  111. package/dist/modules/AbstractModel.js.map +1 -0
  112. package/dist/modules/Base.d.ts +29 -0
  113. package/dist/modules/Base.js +54 -0
  114. package/dist/modules/Base.js.map +1 -0
  115. package/dist/modules/BaseCli.d.ts +25 -0
  116. package/dist/modules/BaseCli.js +138 -0
  117. package/dist/modules/BaseCli.js.map +1 -0
  118. package/dist/server.d.ts +110 -0
  119. package/dist/server.js +372 -0
  120. package/dist/server.js.map +1 -0
  121. package/dist/services/cache/Cache.d.ts +31 -0
  122. package/dist/services/cache/Cache.js +115 -0
  123. package/dist/services/cache/Cache.js.map +1 -0
  124. package/dist/services/documentation/DocumentationGenerator.d.ts +11 -0
  125. package/dist/services/documentation/DocumentationGenerator.js +134 -0
  126. package/dist/services/documentation/DocumentationGenerator.js.map +1 -0
  127. package/dist/services/http/HttpServer.d.ts +35 -0
  128. package/dist/services/http/HttpServer.js +71 -0
  129. package/dist/services/http/HttpServer.js.map +1 -0
  130. package/dist/services/http/middleware/AbstractMiddleware.d.ts +25 -0
  131. package/dist/services/http/middleware/AbstractMiddleware.js +43 -0
  132. package/dist/services/http/middleware/AbstractMiddleware.js.map +1 -0
  133. package/dist/services/http/middleware/Auth.d.ts +9 -0
  134. package/dist/services/http/middleware/Auth.js +18 -0
  135. package/dist/services/http/middleware/Auth.js.map +1 -0
  136. package/dist/services/http/middleware/Cors.d.ts +10 -0
  137. package/dist/services/http/middleware/Cors.js +36 -0
  138. package/dist/services/http/middleware/Cors.js.map +1 -0
  139. package/dist/services/http/middleware/GetUserByToken.d.ts +19 -0
  140. package/dist/services/http/middleware/GetUserByToken.js +40 -0
  141. package/dist/services/http/middleware/GetUserByToken.js.map +1 -0
  142. package/dist/services/http/middleware/I18n.d.ts +26 -0
  143. package/dist/services/http/middleware/I18n.js +97 -0
  144. package/dist/services/http/middleware/I18n.js.map +1 -0
  145. package/dist/services/http/middleware/IpDetector.d.ts +12 -0
  146. package/dist/services/http/middleware/IpDetector.js +51 -0
  147. package/dist/services/http/middleware/IpDetector.js.map +1 -0
  148. package/dist/services/http/middleware/Pagination.d.ts +27 -0
  149. package/dist/services/http/middleware/Pagination.js +47 -0
  150. package/dist/services/http/middleware/Pagination.js.map +1 -0
  151. package/dist/services/http/middleware/PrepareAppInfo.d.ts +8 -0
  152. package/dist/services/http/middleware/PrepareAppInfo.js +17 -0
  153. package/dist/services/http/middleware/PrepareAppInfo.js.map +1 -0
  154. package/dist/services/http/middleware/RateLimiter.d.ts +18 -0
  155. package/dist/services/http/middleware/RateLimiter.js +106 -0
  156. package/dist/services/http/middleware/RateLimiter.js.map +1 -0
  157. package/dist/services/http/middleware/RequestLogger.d.ts +8 -0
  158. package/dist/services/http/middleware/RequestLogger.js +18 -0
  159. package/dist/services/http/middleware/RequestLogger.js.map +1 -0
  160. package/dist/services/http/middleware/RequestParser.d.ts +8 -0
  161. package/dist/services/http/middleware/RequestParser.js +35 -0
  162. package/dist/services/http/middleware/RequestParser.js.map +1 -0
  163. package/dist/services/http/middleware/Role.d.ts +9 -0
  164. package/dist/services/http/middleware/Role.js +24 -0
  165. package/dist/services/http/middleware/Role.js.map +1 -0
  166. package/dist/services/validate/ValidateService.d.ts +31 -0
  167. package/dist/services/validate/ValidateService.js +96 -0
  168. package/dist/services/validate/ValidateService.js.map +1 -0
  169. package/dist/services/validate/drivers/AbstractValidator.d.ts +14 -0
  170. package/dist/services/validate/drivers/AbstractValidator.js +32 -0
  171. package/dist/services/validate/drivers/AbstractValidator.js.map +1 -0
  172. package/dist/services/validate/drivers/CustomValidator.d.ts +14 -0
  173. package/dist/services/validate/drivers/CustomValidator.js +48 -0
  174. package/dist/services/validate/drivers/CustomValidator.js.map +1 -0
  175. package/dist/services/validate/drivers/YupValidator.d.ts +13 -0
  176. package/dist/services/validate/drivers/YupValidator.js +86 -0
  177. package/dist/services/validate/drivers/YupValidator.js.map +1 -0
  178. package/dist/tests/globalSetupVitest.d.ts +2 -0
  179. package/dist/tests/globalSetupVitest.js +29 -0
  180. package/dist/tests/globalSetupVitest.js.map +1 -0
  181. package/dist/tests/setupVitest.d.ts +1 -0
  182. package/dist/tests/setupVitest.js +99 -0
  183. package/dist/tests/setupVitest.js.map +1 -0
  184. package/package.json +21 -11
  185. package/Cli.js +0 -21
  186. package/cluster.js +0 -25
  187. package/commands/.gitkeep +0 -0
  188. package/commands/CreateUser.js +0 -106
  189. package/commands/Documentation.js +0 -17
  190. package/commands/DropIndex.js +0 -38
  191. package/commands/GenerateRandomBytes.js +0 -21
  192. package/commands/GetOpenApiJson.js +0 -336
  193. package/commands/SyncIndexes.js +0 -40
  194. package/commands/migration/Create.js +0 -72
  195. package/commands/migration/Migrate.js +0 -56
  196. package/config/auth.js +0 -9
  197. package/config/http.js +0 -9
  198. package/config/i18n.js +0 -12
  199. package/config/ipDetector.js +0 -14
  200. package/config/log.js +0 -22
  201. package/config/mongo.js +0 -3
  202. package/config/rateLimiter.js +0 -16
  203. package/config/redis.js +0 -4
  204. package/config/validate.js +0 -3
  205. package/controllers/Auth.js +0 -201
  206. package/controllers/Home.js +0 -28
  207. package/controllers/index.js +0 -66
  208. package/eslint.config.js +0 -68
  209. package/folderConfig.js +0 -13
  210. package/helpers/files.js +0 -76
  211. package/helpers/logger.js +0 -16
  212. package/helpers/redis/clearNamespace.js +0 -14
  213. package/index.js +0 -8
  214. package/jsconfig.json +0 -9
  215. package/locales/en/translation.json +0 -27
  216. package/locales/ru/translation.json +0 -27
  217. package/migrations/.gitkeep +0 -0
  218. package/models/Lock.js +0 -107
  219. package/models/Migration.js +0 -15
  220. package/models/Sequence.js +0 -22
  221. package/models/User.js +0 -280
  222. package/modules/AbstractCommand.d.ts +0 -50
  223. package/modules/AbstractCommand.js +0 -52
  224. package/modules/AbstractConnector.js +0 -9
  225. package/modules/AbstractController.d.ts +0 -55
  226. package/modules/AbstractController.js +0 -400
  227. package/modules/AbstractModel.d.ts +0 -48
  228. package/modules/AbstractModel.js +0 -92
  229. package/modules/Base.d.ts +0 -37
  230. package/modules/Base.js +0 -64
  231. package/modules/BaseCli.js +0 -162
  232. package/server.d.ts +0 -100
  233. package/server.js +0 -439
  234. package/services/cache/Cache.d.ts +0 -35
  235. package/services/cache/Cache.js +0 -124
  236. package/services/documentation/DocumentationGenerator.js +0 -169
  237. package/services/http/HttpServer.js +0 -89
  238. package/services/http/middleware/AbstractMiddleware.js +0 -51
  239. package/services/http/middleware/Auth.js +0 -20
  240. package/services/http/middleware/Cors.js +0 -46
  241. package/services/http/middleware/GetUserByToken.js +0 -47
  242. package/services/http/middleware/I18n.js +0 -117
  243. package/services/http/middleware/IpDetector.js +0 -59
  244. package/services/http/middleware/Pagination.js +0 -57
  245. package/services/http/middleware/PrepareAppInfo.js +0 -18
  246. package/services/http/middleware/RateLimiter.js +0 -134
  247. package/services/http/middleware/RequestLogger.js +0 -22
  248. package/services/http/middleware/RequestParser.js +0 -40
  249. package/services/http/middleware/Role.js +0 -29
  250. package/services/messaging/email/resources/.gitkeep +0 -1
  251. package/services/messaging/email/templates/.gitkeep +0 -0
  252. package/services/messaging/email/templates/recovery/html.pug +0 -8
  253. package/services/messaging/email/templates/recovery/subject.pug +0 -2
  254. package/services/messaging/email/templates/recovery/text.pug +0 -3
  255. package/services/messaging/email/templates/verification/html.pug +0 -10
  256. package/services/messaging/email/templates/verification/subject.pug +0 -1
  257. package/services/messaging/email/templates/verification/text.pug +0 -1
  258. package/services/validate/ValidateService.js +0 -157
  259. package/services/validate/drivers/AbstractValidator.js +0 -37
  260. package/services/validate/drivers/CustomValidator.js +0 -51
  261. package/services/validate/drivers/YupValidator.js +0 -103
  262. package/tests/globalSetupVitest.js +0 -35
  263. package/tests/setup.js +0 -120
  264. package/tests/setupVitest.js +0 -111
  265. package/types/Expand.d.ts +0 -11
  266. package/types/ICommandArguments.d.ts +0 -41
  267. package/types/TFoldersConfig.d.ts +0 -20
  268. package/views/404.pug +0 -3
  269. package/views/home.pug +0 -3
  270. package/views/layouts/base.pug +0 -39
  271. package/vitest.config.js +0 -17
@@ -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): 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,54 @@
1
+ import { getFilesPathWithInheritance } from "../helpers/files.js";
2
+ class Base {
3
+ #realLogger = null;
4
+ app;
5
+ constructor(app) {
6
+ this.app = app;
7
+ }
8
+ /**
9
+ * In case of logging sometimes we might need to replace name
10
+ */
11
+ getConstructorName() {
12
+ return this.constructor.name;
13
+ }
14
+ /**
15
+ * Optimzation to lazy load logger. It will be inited only on request
16
+ */
17
+ get logger() {
18
+ let l;
19
+ try {
20
+ l = this.#realLogger;
21
+ }
22
+ catch {
23
+ console.warn(`You try to accees logger not from class. that can be ok in case of models.`);
24
+ return null;
25
+ }
26
+ if (!l) {
27
+ const { loggerGroup } = this.constructor;
28
+ this.#realLogger = this.getLogger(loggerGroup + this.getConstructorName());
29
+ }
30
+ return this.#realLogger;
31
+ }
32
+ /**
33
+ * Get winston loger for given label
34
+ * @param {string} label name of logger
35
+ */
36
+ getLogger(label) {
37
+ return this.app.logger.child({ label });
38
+ }
39
+ async getFilesPathWithInheritance(internalFolder, externalFolder) {
40
+ return getFilesPathWithInheritance({
41
+ internalFolder,
42
+ externalFolder,
43
+ logger: (text) => this.logger?.verbose(text),
44
+ });
45
+ }
46
+ /**
47
+ * Return logger group. Just to have all logs groupped logically
48
+ */
49
+ static get loggerGroup() {
50
+ return 'Base_please_overwrite_';
51
+ }
52
+ }
53
+ export default Base;
54
+ //# 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;AAIlE,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;QAEtB,OAAO,2BAA2B,CAAC;YACjC,cAAc;YACd,cAAc;YACd,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC;SAC7C,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;
@@ -0,0 +1,138 @@
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 path from 'node:path';
10
+ import * as url from 'node:url';
11
+ import { parseArgs } from 'node:util';
12
+ import Base from "./Base.js";
13
+ class Cli extends Base {
14
+ server;
15
+ commands;
16
+ constructor(server) {
17
+ super(server.app);
18
+ this.server = server;
19
+ this.commands = {};
20
+ }
21
+ async loadCommands() {
22
+ if (Object.keys(this.commands).length) {
23
+ return true;
24
+ }
25
+ const dirname = url.fileURLToPath(new URL('.', import.meta.url));
26
+ const commandsToLoad = await this.getFilesPathWithInheritance(path.join(dirname, '../commands'), this.server.app.foldersConfig.commands);
27
+ for (const com of commandsToLoad) {
28
+ if (com.file.endsWith('.js') || com.file.endsWith('.ts')) {
29
+ const c = com.file.replace('.js', '').replace('.ts', '');
30
+ if (this.commands[c.toLowerCase()]) {
31
+ this.logger?.warn(`Command ${c.toLowerCase()} already exists with full path ${this.commands[c.toLowerCase()]}. Possible problems - you have two commands with "ts" and "js" extensions. Skipping...`);
32
+ continue;
33
+ }
34
+ this.commands[c.toLowerCase()] = com.path;
35
+ }
36
+ }
37
+ return true;
38
+ }
39
+ async printCommandTable() {
40
+ const commands = Object.keys(this.commands).sort();
41
+ const maxLength = commands.reduce((max, c) => Math.max(max, c.length), 0);
42
+ console.log('Available commands:');
43
+ const commandsClasses = [];
44
+ for (const c of commands) {
45
+ commandsClasses.push(import(__rewriteRelativeImportExtension(this.commands[c])));
46
+ // console.log(
47
+ // ` \x1b[36m${c.padEnd(maxLength)}\x1b[0m - ${f.default.description}`,
48
+ // );
49
+ }
50
+ const commandsClassesLoaded = await Promise.all(commandsClasses);
51
+ for (const [key, c] of Object.entries(commands)) {
52
+ console.log(` \x1b[36m${c.padEnd(maxLength)}\x1b[0m - ${commandsClassesLoaded[+key].default.description}`);
53
+ }
54
+ console.log('\nUsage (use one of option): \n node cli.ts <command> [options] \n npm run cli <command> -- [options]');
55
+ }
56
+ static showHelp(Command, finalArguments) {
57
+ console.log(`\n\x1b[32m${Command.description}\x1b[0m`);
58
+ let output = '';
59
+ Object.entries(finalArguments).forEach(([key, opt]) => {
60
+ const outputLocal = [];
61
+ outputLocal.push(`\n\x1b[36m --${key} \x1b[0m`);
62
+ if (opt.type !== 'boolean') {
63
+ outputLocal.push(`<${opt.type}>`);
64
+ // flag += `<${opt.type}>`;
65
+ }
66
+ if (opt.required) {
67
+ outputLocal.push('(required)');
68
+ }
69
+ outputLocal.push(`\n \x1b[2m${opt.description}`);
70
+ if (opt.default !== undefined) {
71
+ outputLocal.push(` (default: ${opt.default})`);
72
+ }
73
+ outputLocal.push('\x1b[0m');
74
+ output += outputLocal.join(' ');
75
+ });
76
+ console.log(output);
77
+ }
78
+ async run(command) {
79
+ await this.loadCommands();
80
+ if (!command) {
81
+ console.log('Please provide command name');
82
+ await this.printCommandTable();
83
+ return false;
84
+ }
85
+ if (!this.commands[command]) {
86
+ console.log(`Command ${command} not found `);
87
+ await this.printCommandTable();
88
+ return false;
89
+ }
90
+ const commandModule = await import(__rewriteRelativeImportExtension(this.commands[command]));
91
+ const Command = commandModule.default;
92
+ const defaultArgs = {
93
+ help: {
94
+ type: 'boolean',
95
+ description: 'Show help',
96
+ },
97
+ };
98
+ const finalArguments = {
99
+ ...Command.commandArguments,
100
+ ...defaultArgs,
101
+ };
102
+ const parsedArgs = parseArgs({
103
+ args: process.argv.slice(3), // remove command name
104
+ options: finalArguments,
105
+ tokens: true,
106
+ });
107
+ if (parsedArgs.values.help) {
108
+ Cli.showHelp(Command, finalArguments);
109
+ return true;
110
+ }
111
+ for (const [key, opt] of Object.entries(finalArguments)) {
112
+ if (opt.required && !parsedArgs.values[key]) {
113
+ console.log(`\x1b[31mRequired field not proivded. Please provide "${key}" argument\x1b[0m`);
114
+ Cli.showHelp(Command, finalArguments);
115
+ return false;
116
+ }
117
+ }
118
+ if (Command.isShouldInitModels) {
119
+ this.logger?.debug(`Command ${command} isShouldInitModels called. If you want to skip loading and init models, please set isShouldInitModels to false in tyou command`);
120
+ process.env.MONGO_APP_NAME = Command.getMongoConnectionName(command, parsedArgs.values);
121
+ await this.server.initAllModels();
122
+ }
123
+ else {
124
+ this.logger?.debug(`Command ${command} NOT need to isShouldInitModels`);
125
+ }
126
+ const c = new Command(this.app, this.commands, parsedArgs.values);
127
+ let result;
128
+ result = await c.run().catch((e) => {
129
+ this.logger?.error(e.stack);
130
+ });
131
+ return result;
132
+ }
133
+ static get loggerGroup() {
134
+ return 'CLI_';
135
+ }
136
+ }
137
+ export default Cli;
138
+ //# sourceMappingURL=BaseCli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseCli.js","sourceRoot":"","sources":["../../src/modules/BaseCli.ts"],"names":[],"mappings":";;;;;;;;AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,IAAI,MAAM,WAAW,CAAC;AAkB7B,MAAM,GAAI,SAAQ,IAAI;IACpB,MAAM,CAAS;IACf,QAAQ,CAAyB;IAEjC,YAAY,MAAc;QACxB,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAClB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,OAAO,GAAG,GAAG,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACjE,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,2BAA2B,CAC3D,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,EACjC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,QAAQ,CACvC,CAAC;QACF,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;YACjC,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzD,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBACzD,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;oBACnC,IAAI,CAAC,MAAM,EAAE,IAAI,CACf,WAAW,CAAC,CAAC,WAAW,EAAE,kCAAkC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,wFAAwF,CACnL,CAAC;oBACF,SAAS;gBACX,CAAC;gBACD,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC;YAC5C,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,iBAAiB;QACrB,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QACnD,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1E,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACnC,MAAM,eAAe,GAAG,EAAE,CAAC;QAC3B,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,eAAe,CAAC,IAAI,CAAC,MAAM,kCAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC;YAC/C,eAAe;YACf,yEAAyE;YACzE,KAAK;QACP,CAAC;QACD,MAAM,qBAAqB,GAEvB,MAAM,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QACvC,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAChD,OAAO,CAAC,GAAG,CACT,YAAY,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,aAAa,qBAAqB,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAC9F,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,GAAG,CACT,wGAAwG,CACzG,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,QAAQ,CACb,OAA+B,EAC/B,cAA8D;QAE9D,OAAO,CAAC,GAAG,CAAC,aAAa,OAAO,CAAC,WAAW,SAAS,CAAC,CAAC;QACvD,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE;YACpD,MAAM,WAAW,GAAG,EAAE,CAAC;YACvB,WAAW,CAAC,IAAI,CAAC,iBAAiB,GAAG,UAAU,CAAC,CAAC;YACjD,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC3B,WAAW,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;gBAClC,2BAA2B;YAC7B,CAAC;YACD,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;gBACjB,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACjC,CAAC;YACD,WAAW,CAAC,IAAI,CAAC,kBAAkB,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;YACtD,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC9B,WAAW,CAAC,IAAI,CAAC,cAAc,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC;YACjD,CAAC;YACD,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC5B,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,OAAe;QACvB,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAE1B,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;YAC3C,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC/B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,WAAW,OAAO,aAAa,CAAC,CAAC;YAC7C,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC/B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,aAAa,GAAwC,MAAM,MAAM,kCACrE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EACvB,CAAC;QACF,MAAM,OAAO,GAA2B,aAAa,CAAC,OAAO,CAAC;QAE9D,MAAM,WAAW,GAAmD;YAClE,IAAI,EAAE;gBACJ,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,WAAW;aACzB;SACF,CAAC;QAEF,MAAM,cAAc,GAAG;YACrB,GAAG,OAAO,CAAC,gBAAgB;YAC3B,GAAG,WAAW;SACf,CAAC;QAEF,MAAM,UAAU,GAAG,SAAS,CAAC;YAC3B,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,sBAAsB;YACnD,OAAO,EAAE,cAAc;YACvB,MAAM,EAAE,IAAI;SACb,CAAC,CAAC;QAEH,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAC3B,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;YACtC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;YACxD,IAAI,GAAG,CAAC,QAAQ,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5C,OAAO,CAAC,GAAG,CACT,wDAAwD,GAAG,mBAAmB,CAC/E,CAAC;gBACF,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;gBACtC,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QAED,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;YAC/B,IAAI,CAAC,MAAM,EAAE,KAAK,CAChB,WAAW,OAAO,iIAAiI,CACpJ,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,OAAO,CAAC,sBAAsB,CACzD,OAAO,EACP,UAAU,CAAC,MAAM,CAClB,CAAC;YACF,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;QACpC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,WAAW,OAAO,iCAAiC,CAAC,CAAC;QAC1E,CAAC;QAED,MAAM,CAAC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;QAClE,IAAI,MAAM,CAAC;QAEX,MAAM,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAiB,EAAE,EAAE;YACjD,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,KAAK,WAAW;QACpB,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAED,eAAe,GAAG,CAAC"}
@@ -0,0 +1,110 @@
1
+ import EventEmitter from 'node:events';
2
+ import winston from 'winston';
3
+ import Cache from './services/cache/Cache.ts';
4
+ import type { TFolderConfig, TFolderConfigFolders } from './folderConfig.ts';
5
+ import type BaseCli from './modules/BaseCli.ts';
6
+ import type HttpServer from './services/http/HttpServer.ts';
7
+ import type ControllerManager from './controllers/index.ts';
8
+ import type AbstractModel from './modules/AbstractModel.ts';
9
+ interface IApp {
10
+ getConfig: (configName: string) => Record<string, any>;
11
+ getModel: (modelName: string) => AbstractModel['mongooseModel'] | false | any;
12
+ runCliCommand: (commandName: string) => Promise<boolean | void>;
13
+ updateConfig: (configName: string, config: {}) => Record<string, any>;
14
+ foldersConfig: TFolderConfigFolders;
15
+ events: EventEmitter<[never]>;
16
+ readonly cache: Cache;
17
+ readonly logger: winston.Logger;
18
+ httpServer: null | HttpServer;
19
+ controllerManager: null | ControllerManager;
20
+ frameworkFolder: string;
21
+ documentation?: any[];
22
+ }
23
+ /**
24
+ * Main framework class.
25
+ */
26
+ declare class Server {
27
+ #private;
28
+ cli: null | BaseCli;
29
+ config: TFolderConfig;
30
+ cache: {
31
+ configs: Map<any, any>;
32
+ models: Map<any, any>;
33
+ modelConstructors: Map<any, any>;
34
+ };
35
+ cacheService: null | Cache;
36
+ app: IApp;
37
+ /**
38
+ * Construct new server
39
+ * @param {Object} config main config object
40
+ * @param {Object} config.folders folders config
41
+ * @param {String} config.folders.config path to folder with config files
42
+ * @param {String} config.folders.models path to folder with moidels files
43
+ * @param {String} config.folders.controllers path to folder with controllers files
44
+ * @param {String} config.folders.locales path to folder with locales files
45
+ * @param {String} [config.folders.emails] path to folder with emails files
46
+ * @param {String} config.folders.commands path to folder with commands files
47
+ * @param {String} config.folders.migrations path to folder with migrations files
48
+ */
49
+ constructor(config: TFolderConfig);
50
+ /**
51
+ * Start server (http + init all http ralated functions)
52
+ * @param {Function} callbackBefore404 code that should be executed before adding page 404
53
+ */
54
+ startServer(callbackBefore404?: () => Promise<void>): Promise<void>;
55
+ /**
56
+ * Do an initialization (config reading, etc)
57
+ */
58
+ init({ isSkipModelInit, isSkipModelLoading, }?: {
59
+ isSkipModelInit?: boolean | undefined;
60
+ isSkipModelLoading?: boolean | undefined;
61
+ }): Promise<boolean>;
62
+ /**
63
+ * Load model and init them
64
+ */
65
+ initAllModels(): Promise<void>;
66
+ /**
67
+ * Add error logging on promise reject
68
+ */
69
+ addErrorHandling(): void;
70
+ /**
71
+ * Return config from {configName} (file name) on config folder.
72
+ * Support cache and updating confing into cache
73
+ * Also will update config based on NODE_ENV. If config.js and config.production.js
74
+ * and NODE_ENV is production then we will load base config (config.js) and the load
75
+ * environment config (config.production.js) and overwrite base config options
76
+ * @see updateConfig
77
+ * @param {String} configName name on config file to load
78
+ * @returns {Object} config object. Structure depends of config file
79
+ */
80
+ getConfig(configName: string): Record<string, any>;
81
+ /**
82
+ * Return or create new logger instance. This is a main logger instance
83
+ */
84
+ getLogger(): winston.Logger;
85
+ /**
86
+ * Primary designed for tests when we need to update some configs before start testing
87
+ * Should be called before any initialization was done
88
+ * @TODO send event to all inited components to update config
89
+ * @param {String} configName
90
+ * @param {Object} config
91
+ */
92
+ updateConfig(configName: string, config: Record<string, any>): Record<string, any>;
93
+ /**
94
+ * Return model from {modelName} (file name) on model folder.
95
+ * Support cache
96
+ * @param {String} modelName name on config file to load
97
+ */
98
+ getModel(modelName: string): AbstractModel['mongooseModel'] | false;
99
+ /**
100
+ * Run cli command into framework (http, ws, etc)
101
+ * @param {String} commandName name of command to load
102
+ */
103
+ runCliCommand(commandName: string): Promise<boolean | void>;
104
+ /**
105
+ * Get internal cache service
106
+ */
107
+ getCache(): Cache;
108
+ }
109
+ export default Server;
110
+ export { type IApp };