namirasoft-node 1.4.80 → 1.4.81

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.
@@ -10,8 +10,14 @@ export type BaseCronInfoType = {
10
10
  export declare abstract class BaseCron<D extends {
11
11
  [name: string]: BaseDatabase;
12
12
  }> {
13
+ protected log: {
14
+ enabled: boolean;
15
+ onStarted: boolean;
16
+ onFinished: boolean;
17
+ };
13
18
  protected app: BaseApplication<D>;
14
19
  private info;
20
+ private timer;
15
21
  constructor(app: BaseApplication<D>);
16
22
  abstract getInfo(): BaseCronInfoType;
17
23
  run(): void;
package/dist/BaseCron.js CHANGED
@@ -14,8 +14,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.BaseCron = void 0;
16
16
  const node_cron_1 = __importDefault(require("node-cron"));
17
+ const Timer_1 = require("./Timer");
17
18
  class BaseCron {
18
19
  constructor(app) {
20
+ this.log = {
21
+ enabled: true,
22
+ onStarted: true,
23
+ onFinished: true
24
+ };
25
+ this.timer = new Timer_1.Timer();
19
26
  this.app = app;
20
27
  this.run = this.run.bind(this);
21
28
  this.loop = this.loop.bind(this);
@@ -52,12 +59,18 @@ class BaseCron {
52
59
  }
53
60
  handler() {
54
61
  return __awaiter(this, void 0, void 0, function* () {
55
- this.app.logger.info(`Cron ${this.info.name} was started.`);
62
+ if (this.log.enabled)
63
+ if (this.log.onStarted)
64
+ this.app.logger.info(`Cron ${this.info.name} was started.`);
56
65
  try {
66
+ this.timer.onStart();
57
67
  yield this.preHandle();
58
68
  yield this.handleOne();
59
69
  yield this.postHandle();
60
- this.app.logger.info(`Cron ${this.info.name} was finished.`);
70
+ this.timer.onFinish();
71
+ if (this.log.enabled)
72
+ if (this.log.onFinished)
73
+ this.app.logger.info(`Cron ${this.info.name} was finished in ${this.timer.duration}ms.`);
61
74
  }
62
75
  catch (error) {
63
76
  this.app.logger.onCatchCritical(error);
@@ -1 +1 @@
1
- {"version":3,"file":"BaseCron.js","sourceRoot":"","sources":["../src/BaseCron.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AACA,0DAA6B;AAY7B,MAAsB,QAAQ;IAI1B,YAAY,GAAuB;QAE/B,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAID,GAAG;QAEC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAE3B,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ;YAC1C,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;aAC1F,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU;YACzB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,qBAAqB,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;aACxF,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ;YACvB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,2BAA2B,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,CAAC;;YAE/F,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;QAE5F,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU;YACpB,IAAI,CAAC,OAAO,EAAE,CAAC;QACnB,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU;YACpB,mBAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;aACjD,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ;YACvB,IAAI,CAAC,IAAI,EAAE,CAAC;IACpB,CAAC;IAEa,IAAI;;YAEd,OAAO,IAAI,EACX,CAAC;gBACG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAA;gBACpB,MAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE;oBAEzB,UAAU,CAAC,GAAG,EAAE;wBAEZ,QAAQ,CAAC,EAAE,CAAC,CAAC;oBACjB,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC3B,CAAC,CAAC,CAAA;YACN,CAAC;QACL,CAAC;KAAA;IAEa,OAAO;;YAEjB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC,CAAC;YAC5D,IACA,CAAC;gBAEG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;gBAEvB,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;gBAEvB,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;gBAExB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC,CAAC;YACjE,CAAC;YACD,OAAO,KAAU,EACjB,CAAC;gBACG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YAC3C,CAAC;QACL,CAAC;KAAA;IAAA,CAAC;IAEI,SAAS;8DAAoB,CAAC;KAAA;IAE9B,UAAU;8DAAoB,CAAC;KAAA;CACxC;AAzED,4BAyEC"}
1
+ {"version":3,"file":"BaseCron.js","sourceRoot":"","sources":["../src/BaseCron.ts"],"names":[],"mappings":"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"}
package/dist/Meta.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import * as express from 'express';
2
2
  import { IncomingHttpHeaders } from "http";
3
3
  import { HTTPMethod } from 'namirasoft-core';
4
+ import { Timer } from './Timer';
4
5
  export declare class Meta {
5
6
  info: {
6
7
  name: string;
@@ -14,9 +15,7 @@ export declare class Meta {
14
15
  url: string;
15
16
  headers?: IncomingHttpHeaders;
16
17
  body?: any;
17
- start_time: Date | null;
18
- end_time: Date | null;
19
- duration: number | null;
18
+ timer: Timer;
20
19
  code: number;
21
20
  message: string;
22
21
  error: Error | null;
package/dist/Meta.js CHANGED
@@ -2,11 +2,10 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Meta = void 0;
4
4
  const IPOperation_1 = require("./IPOperation");
5
+ const Timer_1 = require("./Timer");
5
6
  class Meta {
6
7
  constructor(info, req) {
7
- this.start_time = null;
8
- this.end_time = null;
9
- this.duration = null;
8
+ this.timer = new Timer_1.Timer();
10
9
  this.code = 200;
11
10
  this.message = "Success";
12
11
  this.error = null;
@@ -19,12 +18,10 @@ class Meta {
19
18
  this.body = req.body;
20
19
  }
21
20
  onStart() {
22
- this.start_time = new Date();
21
+ this.timer.onStart();
23
22
  }
24
23
  onFinish() {
25
- var _a, _b, _c, _d;
26
- this.end_time = new Date();
27
- this.duration = ((_b = (_a = this.end_time) === null || _a === void 0 ? void 0 : _a.getTime()) !== null && _b !== void 0 ? _b : 0) - ((_d = (_c = this.start_time) === null || _c === void 0 ? void 0 : _c.getTime()) !== null && _d !== void 0 ? _d : 0);
24
+ this.timer.onFinish();
28
25
  }
29
26
  }
30
27
  exports.Meta = Meta;
package/dist/Meta.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Meta.js","sourceRoot":"","sources":["../src/Meta.ts"],"names":[],"mappings":";;;AAEA,+CAA4C;AAG5C,MAAa,IAAI;IAeb,YAAY,IAAsF,EAAE,GAAoB;QAPxH,eAAU,GAAgB,IAAI,CAAC;QAC/B,aAAQ,GAAgB,IAAI,CAAC;QAC7B,aAAQ,GAAkB,IAAI,CAAC;QAC/B,SAAI,GAAW,GAAG,CAAC;QACnB,YAAO,GAAW,SAAS,CAAC;QAC5B,UAAK,GAAiB,IAAI,CAAC;QAC3B,sBAAiB,GAAkB,IAAI,CAAC;QAGpC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,EAAE,GAAG,yBAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;QACzB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,WAAW,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;IACzB,CAAC;IACD,OAAO;QAEH,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC;IACjC,CAAC;IACD,QAAQ;;QAEJ,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,CAAC,MAAA,MAAA,IAAI,CAAC,QAAQ,0CAAE,OAAO,EAAE,mCAAI,CAAC,CAAC,GAAG,CAAC,MAAA,MAAA,IAAI,CAAC,UAAU,0CAAE,OAAO,EAAE,mCAAI,CAAC,CAAC,CAAC;IACxF,CAAC;CACJ;AAjCD,oBAiCC"}
1
+ {"version":3,"file":"Meta.js","sourceRoot":"","sources":["../src/Meta.ts"],"names":[],"mappings":";;;AAEA,+CAA4C;AAE5C,mCAAgC;AAEhC,MAAa,IAAI;IAab,YAAY,IAAsF,EAAE,GAAoB;QALxH,UAAK,GAAU,IAAI,aAAK,EAAE,CAAC;QAC3B,SAAI,GAAW,GAAG,CAAC;QACnB,YAAO,GAAW,SAAS,CAAC;QAC5B,UAAK,GAAiB,IAAI,CAAC;QAC3B,sBAAiB,GAAkB,IAAI,CAAC;QAGpC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,EAAE,GAAG,yBAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;QACzB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,WAAW,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;IACzB,CAAC;IACD,OAAO;QAEH,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IACzB,CAAC;IACD,QAAQ;QAEJ,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC1B,CAAC;CACJ;AA9BD,oBA8BC"}
@@ -0,0 +1,8 @@
1
+ export declare class Timer {
2
+ start_time: Date | null;
3
+ end_time: Date | null;
4
+ duration: number | null;
5
+ constructor();
6
+ onStart(): void;
7
+ onFinish(): void;
8
+ }
package/dist/Timer.js ADDED
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Timer = void 0;
4
+ class Timer {
5
+ constructor() {
6
+ this.start_time = null;
7
+ this.end_time = null;
8
+ this.duration = null;
9
+ }
10
+ onStart() {
11
+ this.start_time = new Date();
12
+ }
13
+ onFinish() {
14
+ var _a, _b, _c, _d;
15
+ this.end_time = new Date();
16
+ this.duration = ((_b = (_a = this.end_time) === null || _a === void 0 ? void 0 : _a.getTime()) !== null && _b !== void 0 ? _b : 0) - ((_d = (_c = this.start_time) === null || _c === void 0 ? void 0 : _c.getTime()) !== null && _d !== void 0 ? _d : 0);
17
+ }
18
+ }
19
+ exports.Timer = Timer;
20
+ //# sourceMappingURL=Timer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Timer.js","sourceRoot":"","sources":["../src/Timer.ts"],"names":[],"mappings":";;;AAAA,MAAa,KAAK;IAKd;QAHO,eAAU,GAAgB,IAAI,CAAC;QAC/B,aAAQ,GAAgB,IAAI,CAAC;QAC7B,aAAQ,GAAkB,IAAI,CAAC;IAGtC,CAAC;IACD,OAAO;QAEH,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC;IACjC,CAAC;IACD,QAAQ;;QAEJ,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,CAAC,MAAA,MAAA,IAAI,CAAC,QAAQ,0CAAE,OAAO,EAAE,mCAAI,CAAC,CAAC,GAAG,CAAC,MAAA,MAAA,IAAI,CAAC,UAAU,0CAAE,OAAO,EAAE,mCAAI,CAAC,CAAC,CAAC;IACxF,CAAC;CACJ;AAjBD,sBAiBC"}
package/package.json CHANGED
@@ -8,7 +8,7 @@
8
8
  "framework": "npm",
9
9
  "application": "package",
10
10
  "private": false,
11
- "version": "1.4.80",
11
+ "version": "1.4.81",
12
12
  "author": "Amir Abolhasani",
13
13
  "license": "MIT",
14
14
  "main": "./dist/index.js",
package/src/BaseCron.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { BaseDatabase } from './BaseDatabase';
2
2
  import cron from 'node-cron';
3
3
  import { BaseApplication } from './BaseApplication';
4
+ import { Timer } from './Timer';
4
5
 
5
6
  export type BaseCronInfoType =
6
7
  {
@@ -13,8 +14,19 @@ export type BaseCronInfoType =
13
14
 
14
15
  export abstract class BaseCron<D extends { [name: string]: BaseDatabase }>
15
16
  {
17
+ protected log: {
18
+ enabled: boolean;
19
+ onStarted: boolean;
20
+ onFinished: boolean;
21
+ } = {
22
+ enabled: true,
23
+ onStarted: true,
24
+ onFinished: true
25
+ };
16
26
  protected app: BaseApplication<D>;
17
27
  private info!: BaseCronInfoType;
28
+ private timer: Timer = new Timer();
29
+
18
30
  constructor(app: BaseApplication<D>)
19
31
  {
20
32
  this.app = app;
@@ -63,17 +75,23 @@ export abstract class BaseCron<D extends { [name: string]: BaseDatabase }>
63
75
 
64
76
  private async handler()
65
77
  {
66
- this.app.logger.info(`Cron ${this.info.name} was started.`);
78
+ if (this.log.enabled)
79
+ if (this.log.onStarted)
80
+ this.app.logger.info(`Cron ${this.info.name} was started.`);
67
81
  try
68
82
  {
69
83
  // preHandle
84
+ this.timer.onStart();
70
85
  await this.preHandle();
71
86
  // Handler
72
87
  await this.handleOne();
73
88
  // postHandle
74
89
  await this.postHandle();
75
- // Log
76
- this.app.logger.info(`Cron ${this.info.name} was finished.`);
90
+ this.timer.onFinish();
91
+
92
+ if (this.log.enabled)
93
+ if (this.log.onFinished)
94
+ this.app.logger.info(`Cron ${this.info.name} was finished in ${this.timer.duration}ms.`);
77
95
  }
78
96
  catch (error: any)
79
97
  {
package/src/Meta.ts CHANGED
@@ -2,6 +2,7 @@ import * as express from 'express';
2
2
  import { IncomingHttpHeaders } from "http";
3
3
  import { IPOperation } from './IPOperation';
4
4
  import { HTTPMethod } from 'namirasoft-core';
5
+ import { Timer } from './Timer';
5
6
 
6
7
  export class Meta
7
8
  {
@@ -11,9 +12,7 @@ export class Meta
11
12
  url: string;
12
13
  headers?: IncomingHttpHeaders;
13
14
  body?: any;
14
- start_time: Date | null = null;
15
- end_time: Date | null = null;
16
- duration: number | null = null;
15
+ timer: Timer = new Timer();
17
16
  code: number = 200;
18
17
  message: string = "Success";
19
18
  error: Error | null = null;
@@ -29,11 +28,10 @@ export class Meta
29
28
  }
30
29
  onStart()
31
30
  {
32
- this.start_time = new Date();
31
+ this.timer.onStart();
33
32
  }
34
33
  onFinish()
35
34
  {
36
- this.end_time = new Date();
37
- this.duration = (this.end_time?.getTime() ?? 0) - (this.start_time?.getTime() ?? 0);
35
+ this.timer.onFinish();
38
36
  }
39
37
  }
package/src/Timer.ts ADDED
@@ -0,0 +1,18 @@
1
+ export class Timer
2
+ {
3
+ public start_time: Date | null = null;
4
+ public end_time: Date | null = null;
5
+ public duration: number | null = null;
6
+ constructor()
7
+ {
8
+ }
9
+ onStart()
10
+ {
11
+ this.start_time = new Date();
12
+ }
13
+ onFinish()
14
+ {
15
+ this.end_time = new Date();
16
+ this.duration = (this.end_time?.getTime() ?? 0) - (this.start_time?.getTime() ?? 0);
17
+ }
18
+ }