@adaptivestone/framework 4.8.3 → 4.9.0

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 (75) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/package.json +2 -2
  3. package/tests/globalSetupVitest.js +35 -0
  4. package/tests/setupVitest.js +7 -17
  5. package/vitest.config.js +7 -0
  6. package/coverage/base.css +0 -224
  7. package/coverage/block-navigation.js +0 -87
  8. package/coverage/clover.xml +0 -3573
  9. package/coverage/coverage-final.json +0 -44
  10. package/coverage/favicon.png +0 -0
  11. package/coverage/framework/config/auth.js.html +0 -100
  12. package/coverage/framework/config/http.js.html +0 -112
  13. package/coverage/framework/config/i18n.js.html +0 -121
  14. package/coverage/framework/config/index.html +0 -236
  15. package/coverage/framework/config/log.js.html +0 -151
  16. package/coverage/framework/config/mail.js.html +0 -172
  17. package/coverage/framework/config/mongo.js.html +0 -94
  18. package/coverage/framework/config/rateLimiter.js.html +0 -133
  19. package/coverage/framework/config/redis.js.html +0 -97
  20. package/coverage/framework/config/validate.js.html +0 -94
  21. package/coverage/framework/controllers/Auth.js.html +0 -715
  22. package/coverage/framework/controllers/Home.js.html +0 -169
  23. package/coverage/framework/controllers/index.html +0 -146
  24. package/coverage/framework/controllers/index.js.html +0 -259
  25. package/coverage/framework/controllers/test/SomeController.js.html +0 -571
  26. package/coverage/framework/controllers/test/index.html +0 -116
  27. package/coverage/framework/helpers/files.js.html +0 -310
  28. package/coverage/framework/helpers/index.html +0 -131
  29. package/coverage/framework/helpers/logger.js.html +0 -142
  30. package/coverage/framework/helpers/redis/clearNamespace.js.html +0 -127
  31. package/coverage/framework/helpers/redis/index.html +0 -116
  32. package/coverage/framework/index.html +0 -116
  33. package/coverage/framework/models/Migration.js.html +0 -130
  34. package/coverage/framework/models/Sequence.js.html +0 -151
  35. package/coverage/framework/models/User.js.html +0 -859
  36. package/coverage/framework/models/index.html +0 -146
  37. package/coverage/framework/modules/AbstractController.js.html +0 -1309
  38. package/coverage/framework/modules/AbstractModel.js.html +0 -268
  39. package/coverage/framework/modules/Base.js.html +0 -244
  40. package/coverage/framework/modules/index.html +0 -146
  41. package/coverage/framework/server.js.html +0 -1279
  42. package/coverage/framework/services/cache/Cache.js.html +0 -445
  43. package/coverage/framework/services/cache/index.html +0 -116
  44. package/coverage/framework/services/documentation/DocumentationGenerator.js.html +0 -592
  45. package/coverage/framework/services/documentation/index.html +0 -116
  46. package/coverage/framework/services/http/HttpServer.js.html +0 -373
  47. package/coverage/framework/services/http/index.html +0 -116
  48. package/coverage/framework/services/http/middleware/AbstractMiddleware.js.html +0 -238
  49. package/coverage/framework/services/http/middleware/Auth.js.html +0 -145
  50. package/coverage/framework/services/http/middleware/GetUserByToken.js.html +0 -223
  51. package/coverage/framework/services/http/middleware/I18n.js.html +0 -442
  52. package/coverage/framework/services/http/middleware/Pagination.js.html +0 -253
  53. package/coverage/framework/services/http/middleware/PrepareAppInfo.js.html +0 -139
  54. package/coverage/framework/services/http/middleware/RateLimiter.js.html +0 -472
  55. package/coverage/framework/services/http/middleware/RequestLogger.js.html +0 -151
  56. package/coverage/framework/services/http/middleware/RequestParser.js.html +0 -199
  57. package/coverage/framework/services/http/middleware/Role.js.html +0 -172
  58. package/coverage/framework/services/http/middleware/index.html +0 -251
  59. package/coverage/framework/services/http/middleware/test/CheckFlag.js.html +0 -139
  60. package/coverage/framework/services/http/middleware/test/index.html +0 -116
  61. package/coverage/framework/services/messaging/email/index.html +0 -116
  62. package/coverage/framework/services/messaging/email/index.js.html +0 -739
  63. package/coverage/framework/services/messaging/index.html +0 -116
  64. package/coverage/framework/services/messaging/index.js.html +0 -100
  65. package/coverage/framework/services/validate/ValidateService.js.html +0 -556
  66. package/coverage/framework/services/validate/drivers/AbstractValidator.js.html +0 -196
  67. package/coverage/framework/services/validate/drivers/CustomValidator.js.html +0 -241
  68. package/coverage/framework/services/validate/drivers/YupValidator.js.html +0 -394
  69. package/coverage/framework/services/validate/drivers/index.html +0 -146
  70. package/coverage/framework/services/validate/index.html +0 -116
  71. package/coverage/index.html +0 -356
  72. package/coverage/prettify.css +0 -1
  73. package/coverage/prettify.js +0 -2
  74. package/coverage/sort-arrow-sprite.png +0 -0
  75. package/coverage/sorter.js +0 -196
package/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ### 4.9.0
2
+
3
+ [BREAKING] We are separated testsing to setyp and global setup. Global setup now care of mongo to make sure that only on mongodb memoery server is spinned up. If you are using vitest please add "globalSetup: @adaptivestone/framework/tests/gloablSetupVitest" to your vitest config
4
+
1
5
  ### 4.8.3
2
6
 
3
7
  [UPDATE] Fix problme with fat start and closing connections after
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adaptivestone/framework",
3
- "version": "4.8.3",
3
+ "version": "4.9.0",
4
4
  "description": "Adaptive stone node js framework",
5
5
  "main": "index.js",
6
6
  "engines": {
@@ -14,7 +14,7 @@
14
14
  "scripts": {
15
15
  "dev": "nodemon ./index.js",
16
16
  "prod": "nodemon ./cluster.js",
17
- "test": "vitest run --coverage",
17
+ "test": "vitest run",
18
18
  "prettier": "prettier --check '**/*.(js|jsx|ts|tsx|json|css|scss|md)'",
19
19
  "lint": "eslint '**/*.js'",
20
20
  "lint:fix": "eslint '**/*.js' --fix",
@@ -0,0 +1,35 @@
1
+ const { MongoMemoryReplSet } = require('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 };
@@ -1,28 +1,18 @@
1
1
  import path from 'node:path';
2
+ import crypto from 'node:crypto';
2
3
  import { beforeAll, beforeEach, afterEach, afterAll } from 'vitest';
3
4
 
4
- const { MongoMemoryReplSet } = require('mongodb-memory-server');
5
-
6
5
  const mongoose = require('mongoose');
7
6
 
8
7
  mongoose.set('autoIndex', false); // we do not need create indexes щт еуыеы
9
8
 
10
- let mongoMemoryServerInstance;
11
-
12
9
  const redis = require('redis');
13
10
  const Server = require('../server');
14
11
 
15
12
  const clearRedisNamespace = require('../helpers/redis/clearNamespace');
16
13
 
17
14
  beforeAll(async () => {
18
- mongoMemoryServerInstance = await MongoMemoryReplSet.create({
19
- // binary: { version: '4.4.6' },
20
- replSet: { count: 1, storageEngine: 'wiredTiger' },
21
- });
22
- await mongoMemoryServerInstance.waitUntilRunning();
23
15
  process.env.LOGGER_CONSOLE_LEVEL = 'error';
24
- const connectionStringMongo = await mongoMemoryServerInstance.getUri();
25
- // console.info('MONGO_URI: ', connectionStringMongo);
26
16
  global.server = new Server({
27
17
  folders: {
28
18
  config: process.env.TEST_FOLDER_CONFIG || path.resolve('./config'),
@@ -42,8 +32,12 @@ beforeAll(async () => {
42
32
  },
43
33
  });
44
34
  await global.server.init({ isSkipModelInit: true });
35
+ const connectionString = process.env.TEST_MONGO_URI.replace(
36
+ '__DB_TO_REPLACE__',
37
+ `TEST_${crypto.randomUUID()}`,
38
+ );
45
39
  global.server.updateConfig('mongo', {
46
- connectionString: connectionStringMongo,
40
+ connectionString,
47
41
  });
48
42
  global.server.updateConfig('http', { port: 0 }); // allow to use random
49
43
  global.server.updateConfig('mail', { transport: 'stub' });
@@ -108,13 +102,9 @@ afterAll(async () => {
108
102
  global.server.app.httpServer.shutdown();
109
103
  global.server.app.events.emit('shutdown');
110
104
  }
111
- // setTimeout(async () => {
112
105
  if (typeof global.testSetup.afterAll === 'function') {
113
106
  await global.testSetup.afterAll();
114
107
  }
115
-
108
+ await mongoose.connection.db.dropDatabase(); // clean database after test
116
109
  await mongoose.disconnect();
117
- await mongoMemoryServerInstance.stop();
118
-
119
- // }, 2000);
120
110
  });
package/vitest.config.js CHANGED
@@ -3,7 +3,14 @@ import { defineConfig } from 'vitest/config';
3
3
 
4
4
  export default defineConfig({
5
5
  test: {
6
+ globalSetup: './tests/globalSetupVitest.js',
6
7
  setupFiles: './tests/setupVitest.js',
7
8
  testTimeout: 10000,
9
+ outputFile: './coverage/rspec.xml',
10
+ reporters: ['default', 'junit'],
11
+ coverage: {
12
+ enabled: true,
13
+ reporter: ['text', 'html', 'clover', 'json', 'cobertura'],
14
+ },
8
15
  },
9
16
  });
package/coverage/base.css DELETED
@@ -1,224 +0,0 @@
1
- body, html {
2
- margin:0; padding: 0;
3
- height: 100%;
4
- }
5
- body {
6
- font-family: Helvetica Neue, Helvetica, Arial;
7
- font-size: 14px;
8
- color:#333;
9
- }
10
- .small { font-size: 12px; }
11
- *, *:after, *:before {
12
- -webkit-box-sizing:border-box;
13
- -moz-box-sizing:border-box;
14
- box-sizing:border-box;
15
- }
16
- h1 { font-size: 20px; margin: 0;}
17
- h2 { font-size: 14px; }
18
- pre {
19
- font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace;
20
- margin: 0;
21
- padding: 0;
22
- -moz-tab-size: 2;
23
- -o-tab-size: 2;
24
- tab-size: 2;
25
- }
26
- a { color:#0074D9; text-decoration:none; }
27
- a:hover { text-decoration:underline; }
28
- .strong { font-weight: bold; }
29
- .space-top1 { padding: 10px 0 0 0; }
30
- .pad2y { padding: 20px 0; }
31
- .pad1y { padding: 10px 0; }
32
- .pad2x { padding: 0 20px; }
33
- .pad2 { padding: 20px; }
34
- .pad1 { padding: 10px; }
35
- .space-left2 { padding-left:55px; }
36
- .space-right2 { padding-right:20px; }
37
- .center { text-align:center; }
38
- .clearfix { display:block; }
39
- .clearfix:after {
40
- content:'';
41
- display:block;
42
- height:0;
43
- clear:both;
44
- visibility:hidden;
45
- }
46
- .fl { float: left; }
47
- @media only screen and (max-width:640px) {
48
- .col3 { width:100%; max-width:100%; }
49
- .hide-mobile { display:none!important; }
50
- }
51
-
52
- .quiet {
53
- color: #7f7f7f;
54
- color: rgba(0,0,0,0.5);
55
- }
56
- .quiet a { opacity: 0.7; }
57
-
58
- .fraction {
59
- font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace;
60
- font-size: 10px;
61
- color: #555;
62
- background: #E8E8E8;
63
- padding: 4px 5px;
64
- border-radius: 3px;
65
- vertical-align: middle;
66
- }
67
-
68
- div.path a:link, div.path a:visited { color: #333; }
69
- table.coverage {
70
- border-collapse: collapse;
71
- margin: 10px 0 0 0;
72
- padding: 0;
73
- }
74
-
75
- table.coverage td {
76
- margin: 0;
77
- padding: 0;
78
- vertical-align: top;
79
- }
80
- table.coverage td.line-count {
81
- text-align: right;
82
- padding: 0 5px 0 20px;
83
- }
84
- table.coverage td.line-coverage {
85
- text-align: right;
86
- padding-right: 10px;
87
- min-width:20px;
88
- }
89
-
90
- table.coverage td span.cline-any {
91
- display: inline-block;
92
- padding: 0 5px;
93
- width: 100%;
94
- }
95
- .missing-if-branch {
96
- display: inline-block;
97
- margin-right: 5px;
98
- border-radius: 3px;
99
- position: relative;
100
- padding: 0 4px;
101
- background: #333;
102
- color: yellow;
103
- }
104
-
105
- .skip-if-branch {
106
- display: none;
107
- margin-right: 10px;
108
- position: relative;
109
- padding: 0 4px;
110
- background: #ccc;
111
- color: white;
112
- }
113
- .missing-if-branch .typ, .skip-if-branch .typ {
114
- color: inherit !important;
115
- }
116
- .coverage-summary {
117
- border-collapse: collapse;
118
- width: 100%;
119
- }
120
- .coverage-summary tr { border-bottom: 1px solid #bbb; }
121
- .keyline-all { border: 1px solid #ddd; }
122
- .coverage-summary td, .coverage-summary th { padding: 10px; }
123
- .coverage-summary tbody { border: 1px solid #bbb; }
124
- .coverage-summary td { border-right: 1px solid #bbb; }
125
- .coverage-summary td:last-child { border-right: none; }
126
- .coverage-summary th {
127
- text-align: left;
128
- font-weight: normal;
129
- white-space: nowrap;
130
- }
131
- .coverage-summary th.file { border-right: none !important; }
132
- .coverage-summary th.pct { }
133
- .coverage-summary th.pic,
134
- .coverage-summary th.abs,
135
- .coverage-summary td.pct,
136
- .coverage-summary td.abs { text-align: right; }
137
- .coverage-summary td.file { white-space: nowrap; }
138
- .coverage-summary td.pic { min-width: 120px !important; }
139
- .coverage-summary tfoot td { }
140
-
141
- .coverage-summary .sorter {
142
- height: 10px;
143
- width: 7px;
144
- display: inline-block;
145
- margin-left: 0.5em;
146
- background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent;
147
- }
148
- .coverage-summary .sorted .sorter {
149
- background-position: 0 -20px;
150
- }
151
- .coverage-summary .sorted-desc .sorter {
152
- background-position: 0 -10px;
153
- }
154
- .status-line { height: 10px; }
155
- /* yellow */
156
- .cbranch-no { background: yellow !important; color: #111; }
157
- /* dark red */
158
- .red.solid, .status-line.low, .low .cover-fill { background:#C21F39 }
159
- .low .chart { border:1px solid #C21F39 }
160
- .highlighted,
161
- .highlighted .cstat-no, .highlighted .fstat-no, .highlighted .cbranch-no{
162
- background: #C21F39 !important;
163
- }
164
- /* medium red */
165
- .cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE }
166
- /* light red */
167
- .low, .cline-no { background:#FCE1E5 }
168
- /* light green */
169
- .high, .cline-yes { background:rgb(230,245,208) }
170
- /* medium green */
171
- .cstat-yes { background:rgb(161,215,106) }
172
- /* dark green */
173
- .status-line.high, .high .cover-fill { background:rgb(77,146,33) }
174
- .high .chart { border:1px solid rgb(77,146,33) }
175
- /* dark yellow (gold) */
176
- .status-line.medium, .medium .cover-fill { background: #f9cd0b; }
177
- .medium .chart { border:1px solid #f9cd0b; }
178
- /* light yellow */
179
- .medium { background: #fff4c2; }
180
-
181
- .cstat-skip { background: #ddd; color: #111; }
182
- .fstat-skip { background: #ddd; color: #111 !important; }
183
- .cbranch-skip { background: #ddd !important; color: #111; }
184
-
185
- span.cline-neutral { background: #eaeaea; }
186
-
187
- .coverage-summary td.empty {
188
- opacity: .5;
189
- padding-top: 4px;
190
- padding-bottom: 4px;
191
- line-height: 1;
192
- color: #888;
193
- }
194
-
195
- .cover-fill, .cover-empty {
196
- display:inline-block;
197
- height: 12px;
198
- }
199
- .chart {
200
- line-height: 0;
201
- }
202
- .cover-empty {
203
- background: white;
204
- }
205
- .cover-full {
206
- border-right: none !important;
207
- }
208
- pre.prettyprint {
209
- border: none !important;
210
- padding: 0 !important;
211
- margin: 0 !important;
212
- }
213
- .com { color: #999 !important; }
214
- .ignore-none { color: #999; font-weight: normal; }
215
-
216
- .wrapper {
217
- min-height: 100%;
218
- height: auto !important;
219
- height: 100%;
220
- margin: 0 auto -48px;
221
- }
222
- .footer, .push {
223
- height: 48px;
224
- }
@@ -1,87 +0,0 @@
1
- /* eslint-disable */
2
- var jumpToCode = (function init() {
3
- // Classes of code we would like to highlight in the file view
4
- var missingCoverageClasses = ['.cbranch-no', '.cstat-no', '.fstat-no'];
5
-
6
- // Elements to highlight in the file listing view
7
- var fileListingElements = ['td.pct.low'];
8
-
9
- // We don't want to select elements that are direct descendants of another match
10
- var notSelector = ':not(' + missingCoverageClasses.join('):not(') + ') > '; // becomes `:not(a):not(b) > `
11
-
12
- // Selecter that finds elements on the page to which we can jump
13
- var selector =
14
- fileListingElements.join(', ') +
15
- ', ' +
16
- notSelector +
17
- missingCoverageClasses.join(', ' + notSelector); // becomes `:not(a):not(b) > a, :not(a):not(b) > b`
18
-
19
- // The NodeList of matching elements
20
- var missingCoverageElements = document.querySelectorAll(selector);
21
-
22
- var currentIndex;
23
-
24
- function toggleClass(index) {
25
- missingCoverageElements
26
- .item(currentIndex)
27
- .classList.remove('highlighted');
28
- missingCoverageElements.item(index).classList.add('highlighted');
29
- }
30
-
31
- function makeCurrent(index) {
32
- toggleClass(index);
33
- currentIndex = index;
34
- missingCoverageElements.item(index).scrollIntoView({
35
- behavior: 'smooth',
36
- block: 'center',
37
- inline: 'center'
38
- });
39
- }
40
-
41
- function goToPrevious() {
42
- var nextIndex = 0;
43
- if (typeof currentIndex !== 'number' || currentIndex === 0) {
44
- nextIndex = missingCoverageElements.length - 1;
45
- } else if (missingCoverageElements.length > 1) {
46
- nextIndex = currentIndex - 1;
47
- }
48
-
49
- makeCurrent(nextIndex);
50
- }
51
-
52
- function goToNext() {
53
- var nextIndex = 0;
54
-
55
- if (
56
- typeof currentIndex === 'number' &&
57
- currentIndex < missingCoverageElements.length - 1
58
- ) {
59
- nextIndex = currentIndex + 1;
60
- }
61
-
62
- makeCurrent(nextIndex);
63
- }
64
-
65
- return function jump(event) {
66
- if (
67
- document.getElementById('fileSearch') === document.activeElement &&
68
- document.activeElement != null
69
- ) {
70
- // if we're currently focused on the search input, we don't want to navigate
71
- return;
72
- }
73
-
74
- switch (event.which) {
75
- case 78: // n
76
- case 74: // j
77
- goToNext();
78
- break;
79
- case 66: // b
80
- case 75: // k
81
- case 80: // p
82
- goToPrevious();
83
- break;
84
- }
85
- };
86
- })();
87
- window.addEventListener('keydown', jumpToCode);