@adaptivestone/framework 5.0.0-beta.10 → 5.0.0-beta.12

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 (269) hide show
  1. package/CHANGELOG.md +12 -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 +73 -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 +11 -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 +16 -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 +101 -0
  98. package/dist/models/User.js +230 -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 +32 -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 +19 -10
  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 -60
  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.js +0 -52
  223. package/modules/AbstractConnector.js +0 -9
  224. package/modules/AbstractController.js +0 -406
  225. package/modules/AbstractModel.d.ts +0 -48
  226. package/modules/AbstractModel.js +0 -92
  227. package/modules/Base.d.ts +0 -37
  228. package/modules/Base.js +0 -64
  229. package/modules/BaseCli.js +0 -157
  230. package/server.d.ts +0 -100
  231. package/server.js +0 -439
  232. package/services/cache/Cache.d.ts +0 -35
  233. package/services/cache/Cache.js +0 -124
  234. package/services/documentation/DocumentationGenerator.js +0 -169
  235. package/services/http/HttpServer.js +0 -89
  236. package/services/http/middleware/AbstractMiddleware.js +0 -51
  237. package/services/http/middleware/Auth.js +0 -20
  238. package/services/http/middleware/Cors.js +0 -46
  239. package/services/http/middleware/GetUserByToken.js +0 -47
  240. package/services/http/middleware/I18n.js +0 -117
  241. package/services/http/middleware/IpDetector.js +0 -59
  242. package/services/http/middleware/Pagination.js +0 -57
  243. package/services/http/middleware/PrepareAppInfo.js +0 -18
  244. package/services/http/middleware/RateLimiter.js +0 -134
  245. package/services/http/middleware/RequestLogger.js +0 -22
  246. package/services/http/middleware/RequestParser.js +0 -40
  247. package/services/http/middleware/Role.js +0 -29
  248. package/services/messaging/email/resources/.gitkeep +0 -1
  249. package/services/messaging/email/templates/.gitkeep +0 -0
  250. package/services/messaging/email/templates/recovery/html.pug +0 -8
  251. package/services/messaging/email/templates/recovery/subject.pug +0 -2
  252. package/services/messaging/email/templates/recovery/text.pug +0 -3
  253. package/services/messaging/email/templates/verification/html.pug +0 -10
  254. package/services/messaging/email/templates/verification/subject.pug +0 -1
  255. package/services/messaging/email/templates/verification/text.pug +0 -1
  256. package/services/validate/ValidateService.js +0 -157
  257. package/services/validate/drivers/AbstractValidator.js +0 -37
  258. package/services/validate/drivers/CustomValidator.js +0 -51
  259. package/services/validate/drivers/YupValidator.js +0 -103
  260. package/tests/globalSetupVitest.js +0 -35
  261. package/tests/setup.js +0 -120
  262. package/tests/setupVitest.js +0 -111
  263. package/types/Expand.d.ts +0 -11
  264. package/types/ICommandArguments.d.ts +0 -41
  265. package/types/TFoldersConfig.d.ts +0 -20
  266. package/views/404.pug +0 -3
  267. package/views/home.pug +0 -3
  268. package/views/layouts/base.pug +0 -39
  269. package/vitest.config.js +0 -17
@@ -0,0 +1,31 @@
1
+ export default ValidateService;
2
+ declare class ValidateService extends Base {
3
+ static drivers: {
4
+ YupValidator: typeof YupValidator;
5
+ CustomValidator: typeof CustomValidator;
6
+ };
7
+ static isValidatorExists(validator: any): boolean;
8
+ static getDriverByValidatorBody(app: any, body?: {}): {};
9
+ constructor(app: any, validator: any);
10
+ validator: {} | null;
11
+ /**
12
+ * Filter middlewares by route path and select all parameters
13
+ */
14
+ filterRelatedParametersByRoute(middlewares: any, method: any, path: any): any;
15
+ /**
16
+ * Group all middleware(routes + controller) parameters
17
+ */
18
+ getMiddlewareParams(controllerMiddlewares: any, AllrouteMiddlewares: any, options: any): {
19
+ request: any[];
20
+ query: any[];
21
+ };
22
+ validateSchema(req: any, validator: any, data: any): Promise<any>;
23
+ validateArrayOfSchemas(req: any, validators: any, data: any): Promise<any[]>;
24
+ /**
25
+ * Validate req data. For example req.body, req.query
26
+ */
27
+ validateReqData(req: any, options: any): Promise<any>;
28
+ }
29
+ import Base from '../../modules/Base.ts';
30
+ import YupValidator from './drivers/YupValidator.js';
31
+ import CustomValidator from './drivers/CustomValidator.js';
@@ -0,0 +1,96 @@
1
+ import { isSchema } from 'yup';
2
+ import YupValidator from './drivers/YupValidator.js';
3
+ import CustomValidator from './drivers/CustomValidator.js';
4
+ import Base from "../../modules/Base.js";
5
+ class ValidateService extends Base {
6
+ constructor(app, validator) {
7
+ super(app);
8
+ this.validator = validator
9
+ ? ValidateService.getDriverByValidatorBody(app, validator)
10
+ : null;
11
+ }
12
+ static drivers = {
13
+ YupValidator,
14
+ CustomValidator,
15
+ };
16
+ static isValidatorExists(validator) {
17
+ if (!(validator instanceof Object)) {
18
+ return false;
19
+ }
20
+ return Object.values(this.drivers).some((driver) => validator instanceof driver);
21
+ }
22
+ static getDriverByValidatorBody(app, body = {}) {
23
+ if (this.isValidatorExists(body)) {
24
+ return body;
25
+ }
26
+ if (isSchema(body)) {
27
+ const yupValidator = new YupValidator(app, body);
28
+ return yupValidator;
29
+ }
30
+ const customValidator = new CustomValidator(app, body);
31
+ return customValidator;
32
+ }
33
+ /**
34
+ * Filter middlewares by route path and select all parameters
35
+ */
36
+ filterRelatedParametersByRoute(middlewares, method, path) {
37
+ const middlewaresParams = middlewares
38
+ .filter((middleware) => middleware.method.toLowerCase() === method.toLowerCase() &&
39
+ middleware.fullPath.toLowerCase() === path.toLowerCase())
40
+ ?.map((middleware) => {
41
+ const instance = new middleware.MiddlewareFunction(this.app, middleware.params);
42
+ return instance.relatedReqParameters;
43
+ });
44
+ return middlewaresParams;
45
+ }
46
+ /**
47
+ * Group all middleware(routes + controller) parameters
48
+ */
49
+ getMiddlewareParams(controllerMiddlewares, AllrouteMiddlewares, options) {
50
+ const { method, path } = options;
51
+ const routeMiddlewaresParams = this.filterRelatedParametersByRoute(AllrouteMiddlewares, method, path);
52
+ const controllerMiddlewaresParams = this.filterRelatedParametersByRoute(controllerMiddlewares, method, path);
53
+ return {
54
+ request: [
55
+ ...controllerMiddlewaresParams.map((x) => x.request),
56
+ ...routeMiddlewaresParams.map((x) => x.request),
57
+ ],
58
+ query: [
59
+ ...controllerMiddlewaresParams.map((x) => x.query),
60
+ ...routeMiddlewaresParams.map((x) => x.query),
61
+ ],
62
+ };
63
+ }
64
+ // eslint-disable-next-line class-methods-use-this
65
+ async validateSchema(req, validator, data) {
66
+ if (!validator) {
67
+ return {};
68
+ }
69
+ await validator.validateFields(data, req);
70
+ return validator.castFields(data, req);
71
+ }
72
+ async validateArrayOfSchemas(req, validators, data) {
73
+ const result = [];
74
+ for (const validator of validators) {
75
+ const formatedValidator = ValidateService.getDriverByValidatorBody(this.app, validator);
76
+ result.push(this.validateSchema(req, formatedValidator, data));
77
+ }
78
+ return Promise.all(result);
79
+ }
80
+ /**
81
+ * Validate req data. For example req.body, req.query
82
+ */
83
+ async validateReqData(req, options) {
84
+ const { selectedReqData, additionalMiddlewareFieldsData } = options;
85
+ const { middlewaresInfo, routeMiddlewaresReg, options: routeOptions, } = additionalMiddlewareFieldsData;
86
+ let validatedFields = await this.validateSchema(req, this.validator, selectedReqData);
87
+ const additionalMiddlewareSchemas = this.getMiddlewareParams(middlewaresInfo, routeMiddlewaresReg, routeOptions)[routeOptions.prefix];
88
+ if (additionalMiddlewareSchemas.length) {
89
+ const middlewareValidatedFields = await this.validateArrayOfSchemas(req, additionalMiddlewareSchemas, selectedReqData);
90
+ validatedFields = Object.assign({}, validatedFields, ...middlewareValidatedFields);
91
+ }
92
+ return validatedFields;
93
+ }
94
+ }
95
+ export default ValidateService;
96
+ //# sourceMappingURL=ValidateService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ValidateService.js","sourceRoot":"","sources":["../../../src/services/validate/ValidateService.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC/B,OAAO,YAAY,MAAM,2BAA2B,CAAC;AACrD,OAAO,eAAe,MAAM,8BAA8B,CAAC;AAC3D,OAAO,IAAI,MAAM,uBAAuB,CAAC;AAEzC,MAAM,eAAgB,SAAQ,IAAI;IAChC,YAAY,GAAG,EAAE,SAAS;QACxB,KAAK,CAAC,GAAG,CAAC,CAAC;QACX,IAAI,CAAC,SAAS,GAAG,SAAS;YACxB,CAAC,CAAC,eAAe,CAAC,wBAAwB,CAAC,GAAG,EAAE,SAAS,CAAC;YAC1D,CAAC,CAAC,IAAI,CAAC;IACX,CAAC;IAED,MAAM,CAAC,OAAO,GAAG;QACf,YAAY;QACZ,eAAe;KAChB,CAAC;IAEF,MAAM,CAAC,iBAAiB,CAAC,SAAS;QAChC,IAAI,CAAC,CAAC,SAAS,YAAY,MAAM,CAAC,EAAE,CAAC;YACnC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CACrC,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,YAAY,MAAM,CACxC,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,wBAAwB,CAAC,GAAG,EAAE,IAAI,GAAG,EAAE;QAC5C,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACnB,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACjD,OAAO,YAAY,CAAC;QACtB,CAAC;QACD,MAAM,eAAe,GAAG,IAAI,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACvD,OAAO,eAAe,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,8BAA8B,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI;QACtD,MAAM,iBAAiB,GAAG,WAAW;aAClC,MAAM,CACL,CAAC,UAAU,EAAE,EAAE,CACb,UAAU,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,WAAW,EAAE;YACxD,UAAU,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,CAC3D;YACD,EAAE,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE;YACnB,MAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,kBAAkB,CAChD,IAAI,CAAC,GAAG,EACR,UAAU,CAAC,MAAM,CAClB,CAAC;YAEF,OAAO,QAAQ,CAAC,oBAAoB,CAAC;QACvC,CAAC,CAAC,CAAC;QAEL,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAC,qBAAqB,EAAE,mBAAmB,EAAE,OAAO;QACrE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;QACjC,MAAM,sBAAsB,GAAG,IAAI,CAAC,8BAA8B,CAChE,mBAAmB,EACnB,MAAM,EACN,IAAI,CACL,CAAC;QAEF,MAAM,2BAA2B,GAAG,IAAI,CAAC,8BAA8B,CACrE,qBAAqB,EACrB,MAAM,EACN,IAAI,CACL,CAAC;QAEF,OAAO;YACL,OAAO,EAAE;gBACP,GAAG,2BAA2B,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;gBACpD,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;aAChD;YACD,KAAK,EAAE;gBACL,GAAG,2BAA2B,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;gBAClD,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;aAC9C;SACF,CAAC;IACJ,CAAC;IAED,kDAAkD;IAClD,KAAK,CAAC,cAAc,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI;QACvC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAE1C,OAAO,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI;QAChD,MAAM,MAAM,GAAG,EAAE,CAAC;QAElB,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,MAAM,iBAAiB,GAAG,eAAe,CAAC,wBAAwB,CAChE,IAAI,CAAC,GAAG,EACR,SAAS,CACV,CAAC;YACF,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,iBAAiB,EAAE,IAAI,CAAC,CAAC,CAAC;QACjE,CAAC;QAED,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CAAC,GAAG,EAAE,OAAO;QAChC,MAAM,EAAE,eAAe,EAAE,8BAA8B,EAAE,GAAG,OAAO,CAAC;QACpE,MAAM,EACJ,eAAe,EACf,mBAAmB,EACnB,OAAO,EAAE,YAAY,GACtB,GAAG,8BAA8B,CAAC;QAEnC,IAAI,eAAe,GAAG,MAAM,IAAI,CAAC,cAAc,CAC7C,GAAG,EACH,IAAI,CAAC,SAAS,EACd,eAAe,CAChB,CAAC;QACF,MAAM,2BAA2B,GAAG,IAAI,CAAC,mBAAmB,CAC1D,eAAe,EACf,mBAAmB,EACnB,YAAY,CACb,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAEvB,IAAI,2BAA2B,CAAC,MAAM,EAAE,CAAC;YACvC,MAAM,yBAAyB,GAAG,MAAM,IAAI,CAAC,sBAAsB,CACjE,GAAG,EACH,2BAA2B,EAC3B,eAAe,CAChB,CAAC;YAEF,eAAe,GAAG,MAAM,CAAC,MAAM,CAC7B,EAAE,EACF,eAAe,EACf,GAAG,yBAAyB,CAC7B,CAAC;QACJ,CAAC;QAED,OAAO,eAAe,CAAC;IACzB,CAAC;;AAGH,eAAe,eAAe,CAAC"}
@@ -0,0 +1,14 @@
1
+ export default AbstractValidator;
2
+ declare class AbstractValidator extends Base {
3
+ static convertFieldsToJson(fields: any): {};
4
+ constructor(app: any, body: any);
5
+ body: any;
6
+ get fieldsInJsonFormat(): {};
7
+ validateFields(data: any, { query, body, appInfo }: {
8
+ query: any;
9
+ body: any;
10
+ appInfo: any;
11
+ }): Promise<boolean>;
12
+ castFields(): Promise<boolean>;
13
+ }
14
+ import Base from '../../../modules/Base.ts';
@@ -0,0 +1,32 @@
1
+ import Base from "../../../modules/Base.js";
2
+ class AbstractValidator extends Base {
3
+ constructor(app, body) {
4
+ super(app);
5
+ this.body = body;
6
+ }
7
+ // eslint-disable-next-line no-unused-vars
8
+ static convertFieldsToJson(fields) {
9
+ // IMPLENT;
10
+ return {};
11
+ }
12
+ // eslint-disable-next-line class-methods-use-this
13
+ get fieldsInJsonFormat() {
14
+ // IMPLENT;
15
+ return {};
16
+ }
17
+ // eslint-disable-next-line class-methods-use-this, no-unused-vars
18
+ async validateFields(data, { query, body, appInfo }) {
19
+ // IMPLENT;
20
+ return true;
21
+ }
22
+ // eslint-disable-next-line class-methods-use-this
23
+ async castFields() {
24
+ // IMPLENT;
25
+ return true;
26
+ }
27
+ static get loggerGroup() {
28
+ return 'AbstractValidator_';
29
+ }
30
+ }
31
+ export default AbstractValidator;
32
+ //# sourceMappingURL=AbstractValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AbstractValidator.js","sourceRoot":"","sources":["../../../../src/services/validate/drivers/AbstractValidator.js"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,0BAA0B,CAAC;AAE5C,MAAM,iBAAkB,SAAQ,IAAI;IAClC,YAAY,GAAG,EAAE,IAAI;QACnB,KAAK,CAAC,GAAG,CAAC,CAAC;QACX,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,0CAA0C;IAC1C,MAAM,CAAC,mBAAmB,CAAC,MAAM;QAC/B,WAAW;QACX,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,kDAAkD;IAClD,IAAI,kBAAkB;QACpB,WAAW;QACX,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,kEAAkE;IAClE,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE;QACjD,WAAW;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAED,kDAAkD;IAClD,KAAK,CAAC,UAAU;QACd,WAAW;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,KAAK,WAAW;QACpB,OAAO,oBAAoB,CAAC;IAC9B,CAAC;CACF;AACD,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,14 @@
1
+ export default CustomValidator;
2
+ declare class CustomValidator extends AbstractValidator {
3
+ validateFields(data: any, { query, body, appInfo }: {
4
+ query: any;
5
+ body: any;
6
+ appInfo: any;
7
+ }): Promise<void>;
8
+ castFields(data: any, { query, body, appInfo }: {
9
+ query: any;
10
+ body: any;
11
+ appInfo: any;
12
+ }): Promise<any>;
13
+ }
14
+ import AbstractValidator from './AbstractValidator.js';
@@ -0,0 +1,48 @@
1
+ import { ValidationError } from 'yup';
2
+ import AbstractValidator from './AbstractValidator.js';
3
+ class CustomValidator extends AbstractValidator {
4
+ async validateFields(data, { query, body, appInfo }) {
5
+ if (this.body) {
6
+ if (typeof this.body.validate !== 'function') {
7
+ this.logger.error('request.validate should be a function');
8
+ }
9
+ }
10
+ try {
11
+ await this.body.validate(data, {
12
+ req: {
13
+ query,
14
+ body,
15
+ appInfo,
16
+ },
17
+ });
18
+ }
19
+ catch (e) {
20
+ this.logger.warn(`CustomValidator validateFields ${e}`);
21
+ if (e.path) {
22
+ throw new ValidationError({
23
+ [e.path]: e.message,
24
+ });
25
+ }
26
+ throw new Error(e);
27
+ }
28
+ }
29
+ async castFields(data, { query, body, appInfo }) {
30
+ if (this.body) {
31
+ if (typeof this.body.cast !== 'function') {
32
+ this.logger.error('request.validate should be a function');
33
+ }
34
+ }
35
+ return this.body.cast(data, {
36
+ req: {
37
+ query,
38
+ body,
39
+ appInfo,
40
+ },
41
+ });
42
+ }
43
+ static get loggerGroup() {
44
+ return 'CustomValidator_';
45
+ }
46
+ }
47
+ export default CustomValidator;
48
+ //# sourceMappingURL=CustomValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CustomValidator.js","sourceRoot":"","sources":["../../../../src/services/validate/drivers/CustomValidator.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,KAAK,CAAC;AACtC,OAAO,iBAAiB,MAAM,wBAAwB,CAAC;AAEvD,MAAM,eAAgB,SAAQ,iBAAiB;IAC7C,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE;QACjD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;gBAC7C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;QACD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;gBAC7B,GAAG,EAAE;oBACH,KAAK;oBACL,IAAI;oBACJ,OAAO;iBACR;aACF,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,EAAE,CAAC,CAAC;YACxD,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;gBACX,MAAM,IAAI,eAAe,CAAC;oBACxB,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO;iBACpB,CAAC,CAAC;YACL,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE;QAC7C,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBACzC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAC1B,GAAG,EAAE;gBACH,KAAK;gBACL,IAAI;gBACJ,OAAO;aACR;SACF,CAAC,CAAC;IACL,CAAC;IAED,MAAM,KAAK,WAAW;QACpB,OAAO,kBAAkB,CAAC;IAC5B,CAAC;CACF;AAED,eAAe,eAAe,CAAC"}
@@ -0,0 +1,13 @@
1
+ export default YupValidator;
2
+ declare class YupValidator extends AbstractValidator {
3
+ validateFields(data: any, { query, body, appInfo }: {
4
+ query: any;
5
+ body: any;
6
+ appInfo: any;
7
+ }): Promise<void>;
8
+ castFields(data: any, { query, body }: {
9
+ query: any;
10
+ body: any;
11
+ }): Promise<any>;
12
+ }
13
+ import AbstractValidator from './AbstractValidator.js';
@@ -0,0 +1,86 @@
1
+ import { ValidationError } from 'yup';
2
+ import AbstractValidator from './AbstractValidator.js';
3
+ class YupValidator extends AbstractValidator {
4
+ get fieldsInJsonFormat() {
5
+ return YupValidator.convertFieldsToJson(this.body);
6
+ }
7
+ static convertFieldsToJson(fields) {
8
+ const convertedFields = {};
9
+ const entries = Object.entries(fields.describe().fields);
10
+ if (!entries?.length) {
11
+ return convertedFields;
12
+ }
13
+ const requiredFields = [];
14
+ for (const [field, fieldProp] of entries) {
15
+ const isRequired = fieldProp?.tests?.find((prop) => prop.name === 'required');
16
+ if (isRequired) {
17
+ requiredFields.push(field);
18
+ }
19
+ }
20
+ entries.forEach(([key, value]) => {
21
+ if (!convertedFields[key]) {
22
+ convertedFields[key] = {};
23
+ }
24
+ convertedFields[key] = {
25
+ type: value.type,
26
+ required: requiredFields?.includes(key),
27
+ };
28
+ });
29
+ return convertedFields;
30
+ }
31
+ async validateFields(data, { query, body, appInfo }) {
32
+ const yupSchema = this.body;
33
+ const { controllerValidationAbortEarly } = this.app.getConfig('validate');
34
+ if (yupSchema) {
35
+ if (typeof yupSchema.validate !== 'function') {
36
+ this.logger.error('request.validate should be a function');
37
+ }
38
+ }
39
+ try {
40
+ await yupSchema.validate(data, {
41
+ abortEarly: controllerValidationAbortEarly,
42
+ req: { query, body },
43
+ });
44
+ }
45
+ catch (e) {
46
+ let { errors } = e;
47
+ // translate it
48
+ if (appInfo.i18n && errors) {
49
+ errors = errors.map((err) => appInfo.i18n.t(err, err));
50
+ }
51
+ this.logger.error(`Request validation failed with message: ${e.message}. errors: ${errors}`);
52
+ const errorAnswer = {};
53
+ if (!e.inner || !e.inner.length) {
54
+ errorAnswer[e.path] = errors;
55
+ }
56
+ else {
57
+ e.inner.forEach((err) => {
58
+ errorAnswer[err.path] = err.errors;
59
+ if (appInfo.i18n && err.errors) {
60
+ errorAnswer[err.path] = err.errors.map((err1) => appInfo.i18n.t(err1, err1, err.params));
61
+ }
62
+ });
63
+ }
64
+ throw new ValidationError({
65
+ ...errorAnswer,
66
+ });
67
+ }
68
+ }
69
+ async castFields(data, { query, body }) {
70
+ const yupSchema = this.body;
71
+ if (yupSchema) {
72
+ if (typeof yupSchema.cast !== 'function') {
73
+ this.logger.error('request.cast should be a function');
74
+ }
75
+ }
76
+ return yupSchema.cast(data, {
77
+ stripUnknown: true,
78
+ req: { query, body },
79
+ });
80
+ }
81
+ static get loggerGroup() {
82
+ return 'YupValidator_';
83
+ }
84
+ }
85
+ export default YupValidator;
86
+ //# sourceMappingURL=YupValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"YupValidator.js","sourceRoot":"","sources":["../../../../src/services/validate/drivers/YupValidator.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export function setup(): Promise<void>;
2
+ export function teardown(): Promise<void>;
@@ -0,0 +1,29 @@
1
+ import { MongoMemoryReplSet } from 'mongodb-memory-server';
2
+ let isTeardown = false;
3
+ let mongoMemoryServerInstance;
4
+ const setup = async () => {
5
+ console.log('GLOBAL SETUP PREPARE RUNNING...');
6
+ console.time('GLOBAL TEST PREPARE. DONE');
7
+ mongoMemoryServerInstance = await MongoMemoryReplSet.create({
8
+ // binary: { version: '4.4.6' },
9
+ replSet: { count: 1, storageEngine: 'wiredTiger' },
10
+ });
11
+ await mongoMemoryServerInstance.waitUntilRunning();
12
+ const connectionStringMongo = await mongoMemoryServerInstance.getUri('__DB_TO_REPLACE__');
13
+ process.env.TEST_MONGO_URI = connectionStringMongo;
14
+ // console.info('MONGO_URI: ', connectionStringMongo);
15
+ console.timeEnd('GLOBAL TEST PREPARE. DONE');
16
+ };
17
+ const teardown = async () => {
18
+ if (isTeardown) {
19
+ throw new Error('teardown called twice');
20
+ }
21
+ console.time('GLOBAL TEARDOWN RUNNING. DONE');
22
+ isTeardown = true;
23
+ console.log('GLOBAL TEARDOWN RUNNING...');
24
+ await mongoMemoryServerInstance.stop();
25
+ console.timeEnd('GLOBAL TEARDOWN RUNNING. DONE');
26
+ return Promise.resolve();
27
+ };
28
+ export { setup, teardown };
29
+ //# sourceMappingURL=globalSetupVitest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"globalSetupVitest.js","sourceRoot":"","sources":["../../src/tests/globalSetupVitest.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,IAAI,UAAU,GAAG,KAAK,CAAC;AACvB,IAAI,yBAAyB,CAAC;AAE9B,MAAM,KAAK,GAAG,KAAK,IAAI,EAAE;IACvB,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;IAC/C,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IAC1C,yBAAyB,GAAG,MAAM,kBAAkB,CAAC,MAAM,CAAC;QAC1D,gCAAgC;QAChC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,aAAa,EAAE,YAAY,EAAE;KACnD,CAAC,CAAC;IACH,MAAM,yBAAyB,CAAC,gBAAgB,EAAE,CAAC;IACnD,MAAM,qBAAqB,GACzB,MAAM,yBAAyB,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,qBAAqB,CAAC;IACnD,sDAAsD;IACtD,OAAO,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC;AAC/C,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;IAC1B,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAE9C,UAAU,GAAG,IAAI,CAAC;IAClB,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAC1C,MAAM,yBAAyB,CAAC,IAAI,EAAE,CAAC;IACvC,OAAO,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC;IAEjD,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;AAC3B,CAAC,CAAC;AAEF,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,99 @@
1
+ import path from 'node:path';
2
+ import crypto from 'node:crypto';
3
+ import { beforeAll, beforeEach, afterEach, afterAll } from 'vitest';
4
+ import mongoose from 'mongoose'; // we do not need create indexes on tests
5
+ import { createClient } from '@redis/client';
6
+ import clearRedisNamespace from "../helpers/redis/clearNamespace.js";
7
+ import Server from "../server.js";
8
+ mongoose.set('autoIndex', false);
9
+ const basePath = new URL('.', import.meta.url).pathname;
10
+ beforeAll(async () => {
11
+ process.env.LOGGER_CONSOLE_LEVEL = 'error';
12
+ process.env.AUTH_SALT = crypto.randomBytes(16).toString('hex');
13
+ global.server = new Server({
14
+ folders: {
15
+ config: process.env.TEST_FOLDER_CONFIG || path.resolve(basePath, '../config'),
16
+ controllers: process.env.TEST_FOLDER_CONTROLLERS ||
17
+ path.resolve(basePath, '../controllers'),
18
+ models: process.env.TEST_FOLDER_MODELS || path.resolve(basePath, '../models'),
19
+ emails: process.env.TEST_FOLDER_EMAIL ||
20
+ process.env.TEST_FOLDER_EMAILS ||
21
+ path.resolve(basePath, '../services/messaging/email/templates'),
22
+ locales: process.env.TEST_FOLDER_LOCALES || path.resolve(basePath, '../locales'),
23
+ commands: process.env.TEST_FOLDER_COMMANDS ||
24
+ path.resolve(basePath, '../commands'),
25
+ migrations: process.env.TEST_FOLDER_MIGRATIONS ||
26
+ path.resolve(basePath, '../migrations'),
27
+ },
28
+ });
29
+ await global.server.init({ isSkipModelInit: true });
30
+ const connectionString = process.env.TEST_MONGO_URI.replace('__DB_TO_REPLACE__', `TEST_${crypto.randomUUID()}`);
31
+ global.server.updateConfig('mongo', {
32
+ connectionString,
33
+ });
34
+ global.server.updateConfig('http', { port: 0 }); // allow to use random
35
+ global.server.updateConfig('mail', { transport: 'stub' });
36
+ await global.server.initAllModels();
37
+ if (!global.testSetup) {
38
+ global.testSetup = {};
39
+ }
40
+ global.server.testingGetUrl = (urlPart) => `http://127.0.0.1:${global.server.getConfig('http').port}${urlPart}`;
41
+ if (!global.testSetup.disableUserCreate) {
42
+ const User = global.server.app.getModel('User');
43
+ global.user = await User.create({
44
+ email: 'test@test.com',
45
+ password: 'testPassword',
46
+ isVerified: true,
47
+ name: {
48
+ nick: 'testUserNickName',
49
+ },
50
+ }).catch((e) => {
51
+ console.error(e);
52
+ console.info('That error can happens in case you have custom user model. Please use global.testSetup.disableUserCreate flag to skip user creating');
53
+ });
54
+ global.authToken = await global.user.generateToken();
55
+ }
56
+ if (typeof global.testSetup.beforeAll === 'function') {
57
+ await global.testSetup.beforeAll();
58
+ }
59
+ await global.server.startServer();
60
+ });
61
+ beforeEach(() => {
62
+ if (global.server) {
63
+ const key = `test-${Math.random().toString(36).substring(7)}`;
64
+ global.server.app.updateConfig('redis', {
65
+ namespace: key,
66
+ });
67
+ }
68
+ });
69
+ afterEach(async () => {
70
+ if (global.server) {
71
+ const { url, namespace } = global.server.getConfig('redis');
72
+ const redisClient = createClient({ url });
73
+ try {
74
+ await redisClient.connect();
75
+ await clearRedisNamespace(redisClient, namespace);
76
+ await redisClient.disconnect();
77
+ }
78
+ catch {
79
+ // that ok. No redis connection
80
+ }
81
+ }
82
+ });
83
+ afterAll(async () => {
84
+ if (global.server) {
85
+ global.server.app.httpServer.shutdown();
86
+ global.server.app.events.emit('shutdown');
87
+ }
88
+ if (typeof global.testSetup.afterAll === 'function') {
89
+ await global.testSetup.afterAll();
90
+ }
91
+ try {
92
+ await mongoose.connection.db.dropDatabase(); // clean database after test
93
+ }
94
+ catch {
95
+ // that ok. No mongoose connection
96
+ }
97
+ await mongoose.disconnect();
98
+ });
99
+ //# sourceMappingURL=setupVitest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setupVitest.js","sourceRoot":"","sources":["../../src/tests/setupVitest.js"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,11 +1,14 @@
1
1
  {
2
2
  "name": "@adaptivestone/framework",
3
- "version": "5.0.0-beta.10",
3
+ "version": "5.0.0-beta.12",
4
4
  "description": "Adaptive stone node js framework",
5
- "main": "index.js",
6
5
  "type": "module",
7
6
  "engines": {
8
- "node": ">=20.12.0"
7
+ "node": ">=23.6.0"
8
+ },
9
+ "exports": {
10
+ "./package.json": "./package.json",
11
+ "./*": "./dist/*"
9
12
  },
10
13
  "repository": {
11
14
  "type": "git",
@@ -13,8 +16,10 @@
13
16
  },
14
17
  "homepage": "https://framework.adaptivestone.com/",
15
18
  "scripts": {
16
- "dev": "node --watch ./index.js",
17
- "prod": "node --watch ./cluster.js",
19
+ "build": "rm -rf dist && tsc",
20
+ "check:types": "tsc --noEmit",
21
+ "dev": "node --watch ./src/index.ts",
22
+ "prod": "node --watch ./src/cluster.ts",
18
23
  "test": "vitest run",
19
24
  "t": "vitest --coverage=false --reporter=default",
20
25
  "prettier": "prettier --check '**/*.(js|jsx|ts|tsx|json|css|scss|md)'",
@@ -22,7 +27,7 @@
22
27
  "lint:fix": "eslint --fix",
23
28
  "codestyle": "npm run prettier && npm run lint",
24
29
  "prepare": "husky",
25
- "cli": "node cliCommand",
30
+ "cli": "node cliCommand.ts",
26
31
  "benchmark": "h2load -n 10000 -c 50 -p 'http/1.1' http://localhost:3300/",
27
32
  "benchmark2": "h2load -n 10000 -c 50 https://localhost:3300/",
28
33
  "redis:docker": "docker run --rm -p 6379:6379 redis"
@@ -34,20 +39,22 @@
34
39
  "deepmerge": "^4.2.2",
35
40
  "express": "^5.0.1",
36
41
  "formidable": "^3.5.1",
37
- "i18next": "^24.0.0",
42
+ "i18next": "^25.0.0",
38
43
  "i18next-fs-backend": "^2.0.0",
39
44
  "mongoose": "^8.0.0",
40
- "rate-limiter-flexible": "^6.0.0",
45
+ "rate-limiter-flexible": "^7.0.0",
41
46
  "winston": "^3.3.3",
42
47
  "winston-transport-sentry-node": "^3.0.0",
43
48
  "yup": "^1.0.0"
44
49
  },
45
50
  "devDependencies": {
46
- "@eslint/js": "^9.19.0",
51
+ "@eslint/js": "^9.24.0",
52
+ "@types/express": "^5.0.1",
53
+ "@types/formidable": "^3.4.5",
47
54
  "@types/node": "^22.13.1",
48
55
  "@vitest/coverage-v8": "^3.0.0",
49
56
  "@vitest/eslint-plugin": "^1.1.25",
50
- "eslint": "^9.0.0",
57
+ "eslint": "^9.24.0",
51
58
  "eslint-config-prettier": "^10.0.0",
52
59
  "eslint-plugin-import-x": "^4.6.1",
53
60
  "eslint-plugin-prettier": "^5.0.0",
@@ -56,6 +63,8 @@
56
63
  "lint-staged": "^15.0.0",
57
64
  "mongodb-memory-server": "^10.0.0",
58
65
  "prettier": "^3.0.0",
66
+ "typescript": "^5.8.3",
67
+ "typescript-eslint": "^8.30.1",
59
68
  "vitest": "^3.0.0"
60
69
  },
61
70
  "peerDependencies": {
package/Cli.js DELETED
@@ -1,21 +0,0 @@
1
- import mongoose from 'mongoose';
2
- import BaseCli from './modules/BaseCli.js';
3
- import Server from './server.js';
4
-
5
- class Cli extends BaseCli {
6
- constructor(serverConfig) {
7
- mongoose.set('autoIndex', false); // we do not need create indexes on CLI.
8
- const server = new Server(serverConfig);
9
- super(server);
10
- }
11
-
12
- async run() {
13
- await this.server.init({ isSkipModelInit: true, isSkipModelLoading: true });
14
- const command = process.argv[2]?.toLowerCase();
15
- await super.run(command);
16
- this.app.events.emit('shutdown');
17
- return true;
18
- }
19
- }
20
-
21
- export default Cli;
package/cluster.js DELETED
@@ -1,25 +0,0 @@
1
- import cluster from 'node:cluster';
2
- import { cpus } from 'node:os';
3
-
4
- const numCPUs = cpus().length;
5
-
6
- if (cluster.isPrimary) {
7
- console.log(`Master ${process.pid} is running`);
8
- // Fork workers.
9
- for (let i = 0; i < numCPUs; i += 1) {
10
- cluster.fork();
11
- }
12
-
13
- cluster.on('exit', (worker, code, signal) => {
14
- console.log(
15
- `Worker \x1B[45m ${
16
- worker.process.pid
17
- } \x1B[49m \x1B[41m †††† died †††† \x1B[49m. Code: ${
18
- signal || code
19
- }. Restarting...`,
20
- );
21
- cluster.fork();
22
- });
23
- } else {
24
- import('./server.js');
25
- }
package/commands/.gitkeep DELETED
File without changes