namirasoft-node 1.4.77 → 1.4.78
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/dist/BaseCron.d.ts +12 -7
- package/dist/BaseCron.js +41 -13
- package/dist/BaseCron.js.map +1 -1
- package/package.json +1 -1
- package/src/BaseCron.ts +69 -26
package/dist/BaseCron.d.ts
CHANGED
|
@@ -1,18 +1,23 @@
|
|
|
1
1
|
import { BaseDatabase } from './BaseDatabase';
|
|
2
2
|
import { BaseApplication } from './BaseApplication';
|
|
3
|
+
export type BaseCronInfoType = {
|
|
4
|
+
name: string;
|
|
5
|
+
expression?: string;
|
|
6
|
+
interval?: number;
|
|
7
|
+
runOnStart: boolean;
|
|
8
|
+
ignoreDatabase?: boolean;
|
|
9
|
+
};
|
|
3
10
|
export declare abstract class BaseCron<D extends {
|
|
4
11
|
[name: string]: BaseDatabase;
|
|
5
12
|
}> {
|
|
6
13
|
protected app: BaseApplication<D>;
|
|
14
|
+
private info;
|
|
7
15
|
constructor(app: BaseApplication<D>);
|
|
8
|
-
abstract getInfo():
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
ignoreDatabase?: boolean;
|
|
13
|
-
};
|
|
16
|
+
abstract getInfo(): BaseCronInfoType;
|
|
17
|
+
run(): void;
|
|
18
|
+
private loop;
|
|
19
|
+
private handler;
|
|
14
20
|
preHandle(): Promise<void>;
|
|
15
21
|
abstract handleOne(): Promise<void>;
|
|
16
22
|
postHandle(): Promise<void>;
|
|
17
|
-
run(): void;
|
|
18
23
|
}
|
package/dist/BaseCron.js
CHANGED
|
@@ -17,31 +17,59 @@ const node_cron_1 = __importDefault(require("node-cron"));
|
|
|
17
17
|
class BaseCron {
|
|
18
18
|
constructor(app) {
|
|
19
19
|
this.app = app;
|
|
20
|
+
this.run = this.run.bind(this);
|
|
21
|
+
this.loop = this.loop.bind(this);
|
|
22
|
+
this.handler = this.handler.bind(this);
|
|
20
23
|
}
|
|
21
|
-
|
|
22
|
-
|
|
24
|
+
run() {
|
|
25
|
+
this.info = this.getInfo();
|
|
26
|
+
if (this.info.expression && this.info.interval)
|
|
27
|
+
throw new Error("Both experssion and interval should not be provided in getInfo function");
|
|
28
|
+
else if (this.info.expression)
|
|
29
|
+
this.app.logger.info(`Cron ${this.info.name} was schedued for ${this.info.expression}.`);
|
|
30
|
+
else if (this.info.interval)
|
|
31
|
+
this.app.logger.info(`Cron ${this.info.name} was schedued for every ${this.info.interval}ms.`);
|
|
32
|
+
else
|
|
33
|
+
throw new Error("Either experssion or interval should be provided in getInfo function");
|
|
34
|
+
if (this.info.runOnStart)
|
|
35
|
+
this.handler();
|
|
36
|
+
if (this.info.expression)
|
|
37
|
+
node_cron_1.default.schedule(this.info.expression, this.handler);
|
|
38
|
+
else if (this.info.interval)
|
|
39
|
+
this.loop();
|
|
23
40
|
}
|
|
24
|
-
|
|
25
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
41
|
+
loop() {
|
|
42
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
43
|
+
while (true) {
|
|
44
|
+
yield this.handler();
|
|
45
|
+
yield new Promise(resolver => {
|
|
46
|
+
setTimeout(() => {
|
|
47
|
+
resolver({});
|
|
48
|
+
}, this.info.interval);
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
});
|
|
26
52
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
let runner = () => __awaiter(this, void 0, void 0, function* () {
|
|
31
|
-
this.app.logger.info(`Cron ${info.name} was started.`);
|
|
53
|
+
handler() {
|
|
54
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
55
|
+
this.app.logger.info(`Cron ${this.info.name} was started.`);
|
|
32
56
|
try {
|
|
33
57
|
yield this.preHandle();
|
|
34
58
|
yield this.handleOne();
|
|
35
59
|
yield this.postHandle();
|
|
36
|
-
this.app.logger.info(`Cron ${info.name} was finished.`);
|
|
60
|
+
this.app.logger.info(`Cron ${this.info.name} was finished.`);
|
|
37
61
|
}
|
|
38
62
|
catch (error) {
|
|
39
63
|
this.app.logger.onCatchCritical(error);
|
|
40
64
|
}
|
|
41
65
|
});
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
66
|
+
}
|
|
67
|
+
;
|
|
68
|
+
preHandle() {
|
|
69
|
+
return __awaiter(this, void 0, void 0, function* () { });
|
|
70
|
+
}
|
|
71
|
+
postHandle() {
|
|
72
|
+
return __awaiter(this, void 0, void 0, function* () { });
|
|
45
73
|
}
|
|
46
74
|
}
|
|
47
75
|
exports.BaseCron = BaseCron;
|
package/dist/BaseCron.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseCron.js","sourceRoot":"","sources":["../src/BaseCron.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AACA,0DAA6B;
|
|
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"}
|
package/package.json
CHANGED
package/src/BaseCron.ts
CHANGED
|
@@ -2,43 +2,86 @@ import { BaseDatabase } from './BaseDatabase';
|
|
|
2
2
|
import cron from 'node-cron';
|
|
3
3
|
import { BaseApplication } from './BaseApplication';
|
|
4
4
|
|
|
5
|
+
export type BaseCronInfoType =
|
|
6
|
+
{
|
|
7
|
+
name: string,
|
|
8
|
+
expression?: string,
|
|
9
|
+
interval?: number,
|
|
10
|
+
runOnStart: boolean,
|
|
11
|
+
ignoreDatabase?: boolean
|
|
12
|
+
}
|
|
13
|
+
|
|
5
14
|
export abstract class BaseCron<D extends { [name: string]: BaseDatabase }>
|
|
6
15
|
{
|
|
7
16
|
protected app: BaseApplication<D>;
|
|
17
|
+
private info!: BaseCronInfoType;
|
|
8
18
|
constructor(app: BaseApplication<D>)
|
|
9
19
|
{
|
|
10
20
|
this.app = app;
|
|
21
|
+
this.run = this.run.bind(this);
|
|
22
|
+
this.loop = this.loop.bind(this);
|
|
23
|
+
this.handler = this.handler.bind(this);
|
|
11
24
|
}
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
abstract handleOne(): Promise<void>;
|
|
15
|
-
async postHandle(): Promise<void> { }
|
|
25
|
+
|
|
26
|
+
abstract getInfo(): BaseCronInfoType;
|
|
16
27
|
|
|
17
28
|
run()
|
|
18
29
|
{
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
30
|
+
this.info = this.getInfo();
|
|
31
|
+
|
|
32
|
+
if (this.info.expression && this.info.interval)
|
|
33
|
+
throw new Error("Both experssion and interval should not be provided in getInfo function");
|
|
34
|
+
else if (this.info.expression)
|
|
35
|
+
this.app.logger.info(`Cron ${this.info.name} was schedued for ${this.info.expression}.`);
|
|
36
|
+
else if (this.info.interval)
|
|
37
|
+
this.app.logger.info(`Cron ${this.info.name} was schedued for every ${this.info.interval}ms.`);
|
|
38
|
+
else
|
|
39
|
+
throw new Error("Either experssion or interval should be provided in getInfo function");
|
|
40
|
+
|
|
41
|
+
if (this.info.runOnStart)
|
|
42
|
+
this.handler();
|
|
43
|
+
if (this.info.expression)
|
|
44
|
+
cron.schedule(this.info.expression, this.handler);
|
|
45
|
+
else if (this.info.interval)
|
|
46
|
+
this.loop();
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
private async loop()
|
|
50
|
+
{
|
|
51
|
+
while (true)
|
|
22
52
|
{
|
|
23
|
-
this.
|
|
24
|
-
|
|
25
|
-
{
|
|
26
|
-
// preHandle
|
|
27
|
-
await this.preHandle();
|
|
28
|
-
// Handler
|
|
29
|
-
await this.handleOne();
|
|
30
|
-
// postHandle
|
|
31
|
-
await this.postHandle();
|
|
32
|
-
// Log
|
|
33
|
-
this.app.logger.info(`Cron ${info.name} was finished.`);
|
|
34
|
-
}
|
|
35
|
-
catch (error: any)
|
|
53
|
+
await this.handler()
|
|
54
|
+
await new Promise(resolver =>
|
|
36
55
|
{
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
56
|
+
setTimeout(() =>
|
|
57
|
+
{
|
|
58
|
+
resolver({});
|
|
59
|
+
}, this.info.interval);
|
|
60
|
+
})
|
|
61
|
+
}
|
|
43
62
|
}
|
|
63
|
+
|
|
64
|
+
private async handler()
|
|
65
|
+
{
|
|
66
|
+
this.app.logger.info(`Cron ${this.info.name} was started.`);
|
|
67
|
+
try
|
|
68
|
+
{
|
|
69
|
+
// preHandle
|
|
70
|
+
await this.preHandle();
|
|
71
|
+
// Handler
|
|
72
|
+
await this.handleOne();
|
|
73
|
+
// postHandle
|
|
74
|
+
await this.postHandle();
|
|
75
|
+
// Log
|
|
76
|
+
this.app.logger.info(`Cron ${this.info.name} was finished.`);
|
|
77
|
+
}
|
|
78
|
+
catch (error: any)
|
|
79
|
+
{
|
|
80
|
+
this.app.logger.onCatchCritical(error);
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
async preHandle(): Promise<void> { }
|
|
85
|
+
abstract handleOne(): Promise<void>;
|
|
86
|
+
async postHandle(): Promise<void> { }
|
|
44
87
|
}
|