@adaptivestone/framework 5.0.0-alpha.20 → 5.0.0-alpha.22

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.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,15 @@
1
+ ### 5.0.0-alpha.22
2
+
3
+ [UPDATE] update deps
4
+ [FIX] fix optional routing parameters
5
+
6
+ ### 5.0.0-alpha.21
7
+
8
+ [BREAKING] possible breaking. Framework start using express 5 instead of express 4. Please follow express migration guide too https://expressjs.com/en/guide/migrating-5.html.
9
+ [BREAKING] AS part of express 5 migration _ in rotes (middlewares) should have perameter. please replace _ to \*splat
10
+ [UPDATE] update deps
11
+ [UPDATE] Mailer uses await import() for startup speedup
12
+
1
13
  ### 5.0.0-alpha.20
2
14
 
3
15
  [UPDATE] update deps
@@ -203,7 +203,7 @@ class Auth extends AbstractController {
203
203
  }
204
204
 
205
205
  static get middleware() {
206
- return new Map([['/*', [GetUserByToken, RateLimiter]]]);
206
+ return new Map([['/{*splat}', [GetUserByToken, RateLimiter]]]);
207
207
  }
208
208
  }
209
209
 
@@ -21,7 +21,7 @@ class Home extends AbstractController {
21
21
  }
22
22
 
23
23
  static get middleware() {
24
- return new Map([['/*', [GetUserByToken]]]);
24
+ return new Map([['{/*splat}', [GetUserByToken]]]);
25
25
  }
26
26
  }
27
27
 
package/models/User.js CHANGED
@@ -4,7 +4,6 @@ import { scrypt } from 'node:crypto';
4
4
 
5
5
  import { promisify } from 'node:util';
6
6
  import AbstractModel from '../modules/AbstractModel.js';
7
- import Mailer from '../services/messaging/email/index.js';
8
7
 
9
8
  class User extends AbstractModel {
10
9
  constructor(app) {
@@ -175,6 +174,10 @@ class User extends AbstractModel {
175
174
  async sendPasswordRecoveryEmail(i18n) {
176
175
  const passwordRecoveryToken =
177
176
  await User.generateUserPasswordRecoveryToken(this);
177
+ // speed optimisation
178
+ const Mailer = (await import('../services/messaging/email/index.js'))
179
+ .default;
180
+
178
181
  const mail = new Mailer(
179
182
  this.getSuper().app,
180
183
  'recovery',
@@ -241,6 +244,9 @@ class User extends AbstractModel {
241
244
 
242
245
  async sendVerificationEmail(i18n) {
243
246
  const verificationToken = await User.generateUserVerificationToken(this);
247
+ // speed optimisation
248
+ const Mailer = (await import('../services/messaging/email/index.js'))
249
+ .default;
244
250
  const mail = new Mailer(
245
251
  this.getSuper().app,
246
252
  'verification',
@@ -376,14 +376,14 @@ class AbstractController extends Base {
376
376
  * @returns {Map<string, Array<typeof import('../services/http/middleware/AbstractMiddleware.js').default | [Function, ...any]>>}
377
377
  * @example
378
378
  * return new Map([
379
- * ['/*', [GetUserByToken]] // for any method for this controller
379
+ * ['/{*splat}', [GetUserByToken]] // for any method for this controller
380
380
  * ['POST/', [Auth]] // for POST method
381
381
  * ['/superSecretMethod', [OnlySuperSecretUsers]] // route with ANY method
382
382
  * ['PUT/superSecretMathod', [OnlySuperSecretAdmin]] // route with PUT method
383
383
  * ]);
384
384
  */
385
385
  static get middleware() {
386
- return new Map([['/*', [GetUserByToken, Auth]]]);
386
+ return new Map([['/{*splat}', [GetUserByToken, Auth]]]);
387
387
  }
388
388
 
389
389
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adaptivestone/framework",
3
- "version": "5.0.0-alpha.20",
3
+ "version": "5.0.0-alpha.22",
4
4
  "description": "Adaptive stone node js framework",
5
5
  "main": "index.js",
6
6
  "type": "module",
@@ -31,7 +31,7 @@
31
31
  "license": "MIT",
32
32
  "dependencies": {
33
33
  "deepmerge": "^4.2.2",
34
- "express": "^4.17.1",
34
+ "express": "^5.0.1",
35
35
  "formidable": "^3.5.1",
36
36
  "html-to-text": "^9.0.3",
37
37
  "i18next": "^23.2.8",
@@ -25,9 +25,9 @@ class HttpServer extends Base {
25
25
  // ]);
26
26
  // this.express.set('view engine', 'pug');
27
27
 
28
+ this.express.use(new RequestLoggerMiddleware(this.app).getMiddleware());
28
29
  this.express.use(new PrepareAppInfoMiddleware(this.app).getMiddleware());
29
30
  this.express.use(new IpDetector(this.app).getMiddleware());
30
- this.express.use(new RequestLoggerMiddleware(this.app).getMiddleware());
31
31
  this.express.use(new I18nMiddleware(this.app).getMiddleware());
32
32
 
33
33
  const httpConfig = this.app.getConfig('http');
@@ -22,7 +22,7 @@ class GetUserByToken extends AbstractMiddleware {
22
22
  this.logger.warn('You call GetUserByToken more then once');
23
23
  return next();
24
24
  }
25
- let { token } = req.body;
25
+ let { token } = req.body || {};
26
26
  this.logger.verbose(
27
27
  `GetUserByToken token in BODY ${token}. Token in Authorization header ${req.get(
28
28
  'Authorization',
@@ -6,13 +6,13 @@ class RequestLogger extends AbstractMiddleware {
6
6
  }
7
7
 
8
8
  async middleware(req, res, next) {
9
- const startTime = Date.now();
9
+ const startTime = performance.now();
10
10
  const text = `Request is [${req.method}] ${req.url}`;
11
11
  this.logger.info(text);
12
12
  res.on('finish', () => {
13
- const duration = Date.now() - startTime;
13
+ const end = performance.now();
14
14
  this.logger.info(
15
- `Finished ${text}. Status: ${res.statusCode}. Duration ${duration} ms`,
15
+ `Finished ${text}. Status: ${res.statusCode}. [${(end - startTime).toFixed(2)} ms]`,
16
16
  );
17
17
  });
18
18
  next();
@@ -29,7 +29,7 @@ class RequestParser extends AbstractMiddleware {
29
29
 
30
30
  req.body = {
31
31
  // todo avoid body in next versions
32
- ...req.body,
32
+ ...(req.body || {}),
33
33
  ...fields,
34
34
  ...files,
35
35
  };
@@ -26,7 +26,7 @@ class ValidateService extends Base {
26
26
  );
27
27
  }
28
28
 
29
- static getDriverByValidatorBody(app, body) {
29
+ static getDriverByValidatorBody(app, body = {}) {
30
30
  if (this.isValidatorExists(body)) {
31
31
  return body;
32
32
  }