@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
@@ -1,103 +0,0 @@
1
- import { ValidationError } from 'yup';
2
- import AbstractValidator from './AbstractValidator.js';
3
-
4
- class YupValidator extends AbstractValidator {
5
- get fieldsInJsonFormat() {
6
- return YupValidator.convertFieldsToJson(this.body);
7
- }
8
-
9
- static convertFieldsToJson(fields) {
10
- const convertedFields = {};
11
- const entries = Object.entries(fields.describe().fields);
12
-
13
- if (!entries?.length) {
14
- return convertedFields;
15
- }
16
- const requiredFields = [];
17
-
18
- for (const [field, fieldProp] of entries) {
19
- const isRequired = fieldProp?.tests?.find(
20
- (prop) => prop.name === 'required',
21
- );
22
- if (isRequired) {
23
- requiredFields.push(field);
24
- }
25
- }
26
-
27
- entries.forEach(([key, value]) => {
28
- if (!convertedFields[key]) {
29
- convertedFields[key] = {};
30
- }
31
-
32
- convertedFields[key] = {
33
- type: value.type,
34
- required: requiredFields?.includes(key),
35
- };
36
- });
37
-
38
- return convertedFields;
39
- }
40
-
41
- async validateFields(data, { query, body, appInfo }) {
42
- const yupSchema = this.body;
43
- const { controllerValidationAbortEarly } = this.app.getConfig('validate');
44
- if (yupSchema) {
45
- if (typeof yupSchema.validate !== 'function') {
46
- this.logger.error('request.validate should be a function');
47
- }
48
- }
49
-
50
- try {
51
- await yupSchema.validate(data, {
52
- abortEarly: controllerValidationAbortEarly,
53
- req: { query, body },
54
- });
55
- } catch (e) {
56
- let { errors } = e;
57
- // translate it
58
- if (appInfo.i18n && errors) {
59
- errors = errors.map((err) => appInfo.i18n.t(err, err));
60
- }
61
- this.logger.error(
62
- `Request validation failed with message: ${e.message}. errors: ${errors}`,
63
- );
64
-
65
- const errorAnswer = {};
66
- if (!e.inner || !e.inner.length) {
67
- errorAnswer[e.path] = errors;
68
- } else {
69
- e.inner.forEach((err) => {
70
- errorAnswer[err.path] = err.errors;
71
- if (appInfo.i18n && err.errors) {
72
- errorAnswer[err.path] = err.errors.map((err1) =>
73
- appInfo.i18n.t(err1, err1, err.params),
74
- );
75
- }
76
- });
77
- }
78
-
79
- throw new ValidationError({
80
- ...errorAnswer,
81
- });
82
- }
83
- }
84
-
85
- async castFields(data, { query, body }) {
86
- const yupSchema = this.body;
87
- if (yupSchema) {
88
- if (typeof yupSchema.cast !== 'function') {
89
- this.logger.error('request.cast should be a function');
90
- }
91
- }
92
-
93
- return yupSchema.cast(data, {
94
- stripUnknown: true,
95
- req: { query, body },
96
- });
97
- }
98
-
99
- static get loggerGroup() {
100
- return 'YupValidator_';
101
- }
102
- }
103
- export default YupValidator;
@@ -1,35 +0,0 @@
1
- import { MongoMemoryReplSet } from 'mongodb-memory-server';
2
-
3
- let isTeardown = false;
4
- let mongoMemoryServerInstance;
5
-
6
- const setup = async () => {
7
- console.log('GLOBAL SETUP PREPARE RUNNING...');
8
- console.time('GLOBAL TEST PREPARE. DONE');
9
- mongoMemoryServerInstance = await MongoMemoryReplSet.create({
10
- // binary: { version: '4.4.6' },
11
- replSet: { count: 1, storageEngine: 'wiredTiger' },
12
- });
13
- await mongoMemoryServerInstance.waitUntilRunning();
14
- const connectionStringMongo =
15
- await mongoMemoryServerInstance.getUri('__DB_TO_REPLACE__');
16
- process.env.TEST_MONGO_URI = connectionStringMongo;
17
- // console.info('MONGO_URI: ', connectionStringMongo);
18
- console.timeEnd('GLOBAL TEST PREPARE. DONE');
19
- };
20
-
21
- const teardown = async () => {
22
- if (isTeardown) {
23
- throw new Error('teardown called twice');
24
- }
25
- console.time('GLOBAL TEARDOWN RUNNING. DONE');
26
-
27
- isTeardown = true;
28
- console.log('GLOBAL TEARDOWN RUNNING...');
29
- await mongoMemoryServerInstance.stop();
30
- console.timeEnd('GLOBAL TEARDOWN RUNNING. DONE');
31
-
32
- return Promise.resolve();
33
- };
34
-
35
- export { setup, teardown };
package/tests/setup.js DELETED
@@ -1,120 +0,0 @@
1
- /* eslint-disable no-undef */
2
- import path from 'node:path';
3
- import { randomBytes } from 'node:crypto';
4
- import { MongoMemoryReplSet } from 'mongodb-memory-server';
5
- import mongoose from 'mongoose';
6
- import { createClient } from '@redis/client';
7
- import Server from '../server.js';
8
-
9
- import clearRedisNamespace from '../helpers/redis/clearNamespace.js';
10
-
11
- mongoose.set('autoIndex', false);
12
-
13
- let mongoMemoryServerInstance;
14
-
15
- // @ts-ignore
16
- jest.setTimeout(1000000);
17
- // @ts-ignore
18
- beforeAll(async () => {
19
- mongoMemoryServerInstance = await MongoMemoryReplSet.create({
20
- // binary: { version: '4.4.6' },
21
- replSet: { count: 1, storageEngine: 'wiredTiger' },
22
- });
23
- await mongoMemoryServerInstance.waitUntilRunning();
24
- process.env.LOGGER_CONSOLE_LEVEL = 'error';
25
- process.env.AUTH_SALT = randomBytes(16).toString('hex');
26
-
27
- const connectionStringMongo = await mongoMemoryServerInstance.getUri();
28
- // console.info('MONGO_URI: ', connectionStringMongo);
29
- global.server = new Server({
30
- folders: {
31
- config: process.env.TEST_FOLDER_CONFIG || path.resolve('./config'),
32
- controllers:
33
- process.env.TEST_FOLDER_CONTROLLERS || path.resolve('./controllers'),
34
- models: process.env.TEST_FOLDER_MODELS || path.resolve('./models'),
35
- emails:
36
- process.env.TEST_FOLDER_EMAIL ||
37
- process.env.TEST_FOLDER_EMAILS ||
38
- path.resolve('./services/messaging/email/templates'),
39
- locales: process.env.TEST_FOLDER_LOCALES || path.resolve('./locales'),
40
- commands: process.env.TEST_FOLDER_COMMANDS || path.resolve('./commands'),
41
- migrations:
42
- process.env.TEST_FOLDER_MIGRATIONS || path.resolve('./migrations'),
43
- },
44
- });
45
- await global.server.init({ isSkipModelInit: true });
46
- global.server.updateConfig('mongo', {
47
- connectionString: connectionStringMongo,
48
- });
49
- global.server.updateConfig('http', { port: 0 }); // allow to use random
50
- global.server.updateConfig('mail', { transport: 'stub' });
51
- await global.server.initAllModels();
52
-
53
- if (!global.testSetup) {
54
- global.testSetup = {};
55
- }
56
- global.server.testingGetUrl = (urlPart) =>
57
- `http://127.0.0.1:${global.server.getConfig('http').port}${urlPart}`;
58
- if (!global.testSetup.disableUserCreate) {
59
- const User = global.server.app.getModel('User');
60
- global.user = await User.create({
61
- email: 'test@test.com',
62
- password: 'testPassword',
63
- isVerified: true,
64
- name: {
65
- nick: 'testUserNickName',
66
- },
67
- }).catch((e) => {
68
- console.error(e);
69
- console.info(
70
- 'That error can happens in case you have custom user model. Please use global.testSetup.disableUserCreate flag to skip user creating',
71
- );
72
- });
73
- global.authToken = await global.user.generateToken();
74
- }
75
- if (typeof global.testSetup.beforeAll === 'function') {
76
- await global.testSetup.beforeAll();
77
- }
78
- await global.server.startServer();
79
- });
80
-
81
- // @ts-ignore
82
- beforeEach(() => {
83
- if (global.server) {
84
- const key = `test-${Math.random().toString(36).substring(7)}`;
85
- global.server.app.updateConfig('redis', {
86
- namespace: key,
87
- });
88
- }
89
- });
90
-
91
- // @ts-ignore
92
- afterEach(async () => {
93
- if (global.server) {
94
- const { url, namespace } = global.server.getConfig('redis');
95
- const redisClient = createClient({ url });
96
-
97
- try {
98
- await redisClient.connect();
99
- await clearRedisNamespace(redisClient, namespace);
100
- await redisClient.disconnect();
101
- } catch {
102
- // that ok. No redis connection
103
- }
104
- }
105
- });
106
-
107
- // @ts-ignore
108
- afterAll(async () => {
109
- if (global.server) {
110
- global.server.app.httpServer.shutdown();
111
- global.server.app.events.emit('shutdown');
112
- }
113
-
114
- if (typeof global.testSetup.afterAll === 'function') {
115
- await global.testSetup.afterAll();
116
- }
117
-
118
- await mongoose.disconnect();
119
- await mongoMemoryServerInstance.stop();
120
- });
@@ -1,111 +0,0 @@
1
- import path from 'node:path';
2
- import crypto from 'node:crypto';
3
- import { beforeAll, beforeEach, afterEach, afterAll } from 'vitest';
4
-
5
- import mongoose from 'mongoose'; // we do not need create indexes on tests
6
-
7
- import { createClient } from '@redis/client';
8
- import clearRedisNamespace from '../helpers/redis/clearNamespace.js';
9
- import Server from '../server.js';
10
-
11
- mongoose.set('autoIndex', false);
12
-
13
- beforeAll(async () => {
14
- process.env.LOGGER_CONSOLE_LEVEL = 'error';
15
- process.env.AUTH_SALT = crypto.randomBytes(16).toString('hex');
16
- global.server = new Server({
17
- folders: {
18
- config: process.env.TEST_FOLDER_CONFIG || path.resolve('./config'),
19
- controllers:
20
- process.env.TEST_FOLDER_CONTROLLERS || path.resolve('./controllers'),
21
- models: process.env.TEST_FOLDER_MODELS || path.resolve('./models'),
22
- emails:
23
- process.env.TEST_FOLDER_EMAIL ||
24
- process.env.TEST_FOLDER_EMAILS ||
25
- path.resolve('./services/messaging/email/templates'),
26
- locales: process.env.TEST_FOLDER_LOCALES || path.resolve('./locales'),
27
- commands: process.env.TEST_FOLDER_COMMANDS || path.resolve('./commands'),
28
- migrations:
29
- process.env.TEST_FOLDER_MIGRATIONS || path.resolve('./migrations'),
30
- },
31
- });
32
- await global.server.init({ isSkipModelInit: true });
33
- const connectionString = process.env.TEST_MONGO_URI.replace(
34
- '__DB_TO_REPLACE__',
35
- `TEST_${crypto.randomUUID()}`,
36
- );
37
- global.server.updateConfig('mongo', {
38
- connectionString,
39
- });
40
- global.server.updateConfig('http', { port: 0 }); // allow to use random
41
- global.server.updateConfig('mail', { transport: 'stub' });
42
- await global.server.initAllModels();
43
-
44
- if (!global.testSetup) {
45
- global.testSetup = {};
46
- }
47
- global.server.testingGetUrl = (urlPart) =>
48
- `http://127.0.0.1:${global.server.getConfig('http').port}${urlPart}`;
49
- if (!global.testSetup.disableUserCreate) {
50
- const User = global.server.app.getModel('User');
51
- global.user = await User.create({
52
- email: 'test@test.com',
53
- password: 'testPassword',
54
- isVerified: true,
55
- name: {
56
- nick: 'testUserNickName',
57
- },
58
- }).catch((e) => {
59
- console.error(e);
60
- console.info(
61
- 'That error can happens in case you have custom user model. Please use global.testSetup.disableUserCreate flag to skip user creating',
62
- );
63
- });
64
- global.authToken = await global.user.generateToken();
65
- }
66
- if (typeof global.testSetup.beforeAll === 'function') {
67
- await global.testSetup.beforeAll();
68
- }
69
- await global.server.startServer();
70
- });
71
-
72
- beforeEach(() => {
73
- if (global.server) {
74
- const key = `test-${Math.random().toString(36).substring(7)}`;
75
- global.server.app.updateConfig('redis', {
76
- namespace: key,
77
- });
78
- }
79
- });
80
-
81
- afterEach(async () => {
82
- if (global.server) {
83
- const { url, namespace } = global.server.getConfig('redis');
84
- const redisClient = createClient({ url });
85
-
86
- try {
87
- await redisClient.connect();
88
- await clearRedisNamespace(redisClient, namespace);
89
- await redisClient.disconnect();
90
- } catch {
91
- // that ok. No redis connection
92
- }
93
- }
94
- });
95
-
96
- afterAll(async () => {
97
- if (global.server) {
98
- global.server.app.httpServer.shutdown();
99
- global.server.app.events.emit('shutdown');
100
- }
101
- if (typeof global.testSetup.afterAll === 'function') {
102
- await global.testSetup.afterAll();
103
- }
104
- try {
105
- await mongoose.connection.db.dropDatabase(); // clean database after test
106
- } catch {
107
- // that ok. No mongoose connection
108
- }
109
-
110
- await mongoose.disconnect();
111
- });
package/types/Expand.d.ts DELETED
@@ -1,11 +0,0 @@
1
- export type Expand<T> = T extends object
2
- ? T extends infer O
3
- ? { [K in keyof O]: O[K] }
4
- : never
5
- : T;
6
-
7
- export type ExpandDeep<T> = T extends object
8
- ? T extends infer O
9
- ? { [K in keyof O]: ExpandDeep<O[K]> }
10
- : never
11
- : T;
@@ -1,41 +0,0 @@
1
- // this is from nodejs types
2
- interface ParseArgsOptionConfig {
3
- /**
4
- * Type of argument.
5
- */
6
- type: 'string' | 'boolean';
7
- /**
8
- * Whether this option can be provided multiple times.
9
- * If `true`, all values will be collected in an array.
10
- * If `false`, values for the option are last-wins.
11
- * @default false.
12
- */
13
- multiple?: boolean | undefined;
14
- /**
15
- * A single character alias for the option.
16
- */
17
- short?: string | undefined;
18
- /**
19
- * The default option value when it is not set by args.
20
- * It must be of the same type as the the `type` property.
21
- * When `multiple` is `true`, it must be an array.
22
- * @since v18.11.0
23
- */
24
- default?: string | boolean | string[] | boolean[] | undefined;
25
- }
26
-
27
- interface ParseArgsOptionsConfigExtended extends ParseArgsOptionConfig {
28
- /**
29
- * A description of the option.
30
- */
31
- description?: string;
32
-
33
- /**
34
- * Is it required?
35
- */
36
- required?: boolean;
37
- }
38
-
39
- export interface ICommandArguments {
40
- [longOption: string]: ParseArgsOptionsConfigExtended;
41
- }
@@ -1,20 +0,0 @@
1
- /**
2
- * @param config path to folder with config files
3
- * @param models path to folder with moidels files
4
- * @param controllers path to folder with controllers files
5
- * @param migrations path to folder with migrations files
6
- * @param locales path to folder with locales files
7
- * @param migrations path to folder with migrations files
8
- * @param [emails] path to folder with emails files. Optional
9
- */
10
- type FolderConfig = {
11
- config: string;
12
- models: string;
13
- controllers: string;
14
- commands: string;
15
- locales: string;
16
- migrations: string;
17
- emails?: string;
18
- };
19
-
20
- export default FolderConfig;
package/views/404.pug DELETED
@@ -1,3 +0,0 @@
1
- extends layouts/base.pug
2
- block content
3
- | 404 page
package/views/home.pug DELETED
@@ -1,3 +0,0 @@
1
- extends layouts/base.pug
2
- block content
3
- this is s home
@@ -1,39 +0,0 @@
1
- doctype html
2
- html(lang=language)
3
- head
4
- meta(charset='utf-8')
5
- meta(http-equiv='X-UA-Compatible', content='IE=edge')
6
- meta(name='viewport', content='width=device-width, initial-scale=1')
7
- // Title Of Site
8
- title Site title
9
- meta(name='description', content='Site description')
10
- meta(name='keywords', content='Site keywords')
11
-
12
- meta(name='viewport', content='width=device-width, initial-scale=1, maximum-scale=1')
13
-
14
- // Standard Favicon
15
- link(rel='icon', type='image/x-icon', href='/favicon.png')
16
- // For non-Retina iPhone, iPod Touch, and Android 2.1+ devices:
17
- link(rel='apple-touch-icon-precomposed apple-touch-icon icon', sizes='57x57', href='/favicons/apple-touch-icon-57x57-precomposed.png')
18
- // iOS 7 devices:
19
- link(rel='apple-touch-icon-precomposed apple-touch-icon icon', sizes='60x60', href='/favicons/apple-touch-icon-60x60-precomposed.png')
20
- // For the iPad mini and the first- and second-generation iPad on iOS ≤ 6:
21
- link(rel='apple-touch-icon-precomposed apple-touch-icon icon', sizes='72x72', href='/favicons/apple-touch-icon-72x72-precomposed.png')
22
- // For the iPad mini and the first- and second-generation iPad on iOS ≥ 7:
23
- link(rel='apple-touch-icon-precomposed apple-touch-icon icon', sizes='76x76', href='/favicons/apple-touch-icon-76x76-precomposed.png')
24
- // For iPhone with high-resolution Retina display running iOS ≤ 6:
25
- link(rel='apple-touch-icon-precomposed apple-touch-icon icon', sizes='114x114', href='/favicons/apple-touch-icon-114x114-precomposed.png')
26
- // For iPhone with high-resolution Retina display running iOS ≥ 7:
27
- link(rel='apple-touch-icon-precomposed apple-touch-icon icon', sizes='120x120', href='/favicons/apple-touch-icon-120x120-precomposed.png')
28
- // For iPad with high-resolution Retina display running iOS ≤ 6:
29
- link(rel='apple-touch-icon-precomposed apple-touch-icon icon', sizes='144x144', href='/favicons/apple-touch-icon-144x144-precomposed.png')
30
- // For iPad with high-resolution Retina display running iOS ≥ 7:
31
- link(rel='apple-touch-icon-precomposed apple-touch-icon icon', sizes='152x152', href='/favicons/apple-touch-icon-152x152-precomposed.png')
32
- // For Android :
33
- link(rel='apple-touch-icon-precomposed apple-touch-icon icon', sizes='196x196', href='/favicons/apple-touch-icon-196x196-precomposed.png')
34
- // Opera Coast
35
- link(rel='apple-touch-icon-precomposed apple-touch-icon icon', sizes='228x228', href='/favicons/apple-touch-icon-228x228-precomposed.png')
36
-
37
-
38
- body
39
- block content
package/vitest.config.js DELETED
@@ -1,17 +0,0 @@
1
- // eslint-disable-next-line import-x/no-unresolved
2
- import { defineConfig } from 'vitest/config';
3
-
4
- export default defineConfig({
5
- test: {
6
- globalSetup: './tests/globalSetupVitest.js',
7
- setupFiles: './tests/setupVitest.js',
8
- testTimeout: 10000,
9
- outputFile: './coverage/junit.rspec.xml',
10
- reporters: ['default', 'junit'],
11
- coverage: {
12
- provider: 'v8',
13
- enabled: true,
14
- reporter: ['text', 'html', 'clover', 'json'],
15
- },
16
- },
17
- });