@eggjs/schedule 5.0.0 → 5.0.2
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/README.md +6 -6
- package/dist/commonjs/agent.d.ts +1 -1
- package/dist/commonjs/agent.js +3 -3
- package/dist/commonjs/app/extend/application.unittest.d.ts +2 -0
- package/dist/commonjs/app/extend/application.unittest.js +58 -0
- package/dist/commonjs/app.d.ts +1 -1
- package/dist/commonjs/app.js +3 -54
- package/dist/commonjs/lib/strategy/timer.d.ts +1 -1
- package/dist/commonjs/lib/strategy/timer.js +3 -3
- package/dist/esm/agent.d.ts +1 -1
- package/dist/esm/agent.js +3 -3
- package/dist/esm/app/extend/application.unittest.d.ts +2 -0
- package/dist/esm/app/extend/application.unittest.js +53 -0
- package/dist/esm/app.d.ts +1 -1
- package/dist/esm/app.js +3 -51
- package/dist/esm/lib/strategy/timer.d.ts +1 -1
- package/dist/esm/lib/strategy/timer.js +3 -3
- package/dist/package.json +1 -1
- package/package.json +2 -2
- package/src/agent.ts +2 -2
- package/src/app/extend/application.unittest.ts +57 -0
- package/src/app.ts +3 -53
- package/src/lib/strategy/timer.ts +3 -2
package/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# @eggjs/schedule
|
|
2
2
|
|
|
3
3
|
[![NPM version][npm-image]][npm-url]
|
|
4
|
-
[](https://github.com/eggjs/schedule/actions/workflows/nodejs.yml)
|
|
5
5
|
[![Test coverage][codecov-image]][codecov-url]
|
|
6
6
|
[![Known Vulnerabilities][snyk-image]][snyk-url]
|
|
7
7
|
[![npm download][download-image]][download-url]
|
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
|
|
10
10
|
[npm-image]: https://img.shields.io/npm/v/@eggjs/schedule.svg?style=flat-square
|
|
11
11
|
[npm-url]: https://npmjs.org/package/@eggjs/schedule
|
|
12
|
-
[codecov-image]: https://codecov.io/github/eggjs/
|
|
13
|
-
[codecov-url]: https://codecov.io/github/eggjs/
|
|
12
|
+
[codecov-image]: https://codecov.io/github/eggjs/schedule/coverage.svg?branch=master
|
|
13
|
+
[codecov-url]: https://codecov.io/github/eggjs/schedule?branch=master
|
|
14
14
|
[snyk-image]: https://snyk.io/test/npm/@eggjs/schedule/badge.svg?style=flat-square
|
|
15
15
|
[snyk-url]: https://snyk.io/test/npm/@eggjs/schedule
|
|
16
16
|
[download-image]: https://img.shields.io/npm/dm/@eggjs/schedule.svg?style=flat-square
|
|
@@ -252,7 +252,7 @@ export default (app: Application) => {
|
|
|
252
252
|
|
|
253
253
|
### Logging
|
|
254
254
|
|
|
255
|
-
See `${appInfo.root}/logs/{app_name}/egg-schedule.log` which provided by [config.customLogger.scheduleLogger](https://github.com/eggjs/
|
|
255
|
+
See `${appInfo.root}/logs/{app_name}/egg-schedule.log` which provided by [config.customLogger.scheduleLogger](https://github.com/eggjs/schedule/blob/master/src/config/config.default.ts).
|
|
256
256
|
|
|
257
257
|
```ts
|
|
258
258
|
// config/config.default.ts
|
|
@@ -304,10 +304,10 @@ Please open an issue [here](https://github.com/eggjs/egg/issues).
|
|
|
304
304
|
|
|
305
305
|
## License
|
|
306
306
|
|
|
307
|
-
[MIT](
|
|
307
|
+
[MIT](LICENSE)
|
|
308
308
|
|
|
309
309
|
## Contributors
|
|
310
310
|
|
|
311
|
-
[](https://github.com/eggjs/schedule/graphs/contributors)
|
|
312
312
|
|
|
313
313
|
Made with [contributors-img](https://contrib.rocks).
|
package/dist/commonjs/agent.d.ts
CHANGED
package/dist/commonjs/agent.js
CHANGED
|
@@ -9,7 +9,7 @@ class Boot {
|
|
|
9
9
|
constructor(agent) {
|
|
10
10
|
this.#agent = agent;
|
|
11
11
|
}
|
|
12
|
-
async
|
|
12
|
+
async configDidLoad() {
|
|
13
13
|
// register built-in strategy
|
|
14
14
|
this.#agent.schedule.use('worker', worker_js_1.WorkerStrategy);
|
|
15
15
|
this.#agent.schedule.use('all', all_js_1.AllStrategy);
|
|
@@ -20,7 +20,7 @@ class Boot {
|
|
|
20
20
|
// get job info from worker
|
|
21
21
|
this.#agent.schedule.onJobFinish(info);
|
|
22
22
|
});
|
|
23
|
-
debug('
|
|
23
|
+
debug('configDidLoad');
|
|
24
24
|
}
|
|
25
25
|
async serverDidReady() {
|
|
26
26
|
// start schedule after worker ready
|
|
@@ -29,4 +29,4 @@ class Boot {
|
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
31
|
exports.default = Boot;
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWdlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSx5Q0FBcUM7QUFFckMsd0RBQTBEO0FBQzFELGtEQUFvRDtBQUdwRCxNQUFNLEtBQUssR0FBRyxJQUFBLG9CQUFRLEVBQUMsdUJBQXVCLENBQUMsQ0FBQztBQUVoRCxNQUFxQixJQUFJO0lBQ3ZCLE1BQU0sQ0FBUTtJQUNkLFlBQVksS0FBWTtRQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUN0QixDQUFDO0lBRUQsS0FBSyxDQUFDLGFBQWE7UUFDakIsNkJBQTZCO1FBQzdCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsMEJBQWMsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsb0JBQVcsQ0FBQyxDQUFDO1FBRTdDLG9EQUFvRDtRQUNwRCxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBRWxDLHdDQUF3QztRQUN4QyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsY0FBYyxFQUFFLENBQUMsSUFBd0IsRUFBRSxFQUFFO1lBQ3BFLDJCQUEyQjtZQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7UUFDSCxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVELEtBQUssQ0FBQyxjQUFjO1FBQ2xCLG9DQUFvQztRQUNwQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM3QixLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztJQUMxQyxDQUFDO0NBQ0Y7QUEzQkQsdUJBMkJDIn0=
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const node_util_1 = require("node:util");
|
|
7
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
8
|
+
const utils_1 = require("@eggjs/utils");
|
|
9
|
+
const debug = (0, node_util_1.debuglog)('@eggjs/schedule/app');
|
|
10
|
+
exports.default = {
|
|
11
|
+
async runSchedule(schedulePath, ...args) {
|
|
12
|
+
debug('[runSchedule] start schedulePath: %o, args: %o', schedulePath, args);
|
|
13
|
+
// for test purpose
|
|
14
|
+
const config = this.config;
|
|
15
|
+
const directory = [
|
|
16
|
+
node_path_1.default.join(config.baseDir, 'app/schedule'),
|
|
17
|
+
...config.schedule.directory,
|
|
18
|
+
];
|
|
19
|
+
// resolve real path
|
|
20
|
+
if (node_path_1.default.isAbsolute(schedulePath)) {
|
|
21
|
+
schedulePath = (0, utils_1.importResolve)(schedulePath);
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
for (const dir of directory) {
|
|
25
|
+
const trySchedulePath = node_path_1.default.join(dir, schedulePath);
|
|
26
|
+
try {
|
|
27
|
+
schedulePath = (0, utils_1.importResolve)(trySchedulePath);
|
|
28
|
+
break;
|
|
29
|
+
}
|
|
30
|
+
catch (err) {
|
|
31
|
+
debug('[runSchedule] importResolve %o error: %s', trySchedulePath, err);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
debug('[runSchedule] resolve schedulePath: %o', schedulePath);
|
|
36
|
+
const scheduleWorker = this.scheduleWorker;
|
|
37
|
+
let schedule;
|
|
38
|
+
try {
|
|
39
|
+
schedule = scheduleWorker.scheduleItems[schedulePath];
|
|
40
|
+
if (!schedule) {
|
|
41
|
+
throw new TypeError(`Cannot find schedule ${schedulePath}`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
catch (err) {
|
|
45
|
+
err.message = `[@eggjs/schedule] ${err.message}`;
|
|
46
|
+
throw err;
|
|
47
|
+
}
|
|
48
|
+
// run with anonymous context
|
|
49
|
+
const ctx = this.createAnonymousContext({
|
|
50
|
+
method: 'SCHEDULE',
|
|
51
|
+
url: `/__schedule?path=${schedulePath}&${schedule.scheduleQueryString}`,
|
|
52
|
+
});
|
|
53
|
+
return await this.ctxStorage.run(ctx, async () => {
|
|
54
|
+
return await schedule.task(ctx, ...args);
|
|
55
|
+
});
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24udW5pdHRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBwL2V4dGVuZC9hcHBsaWNhdGlvbi51bml0dGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHlDQUFxQztBQUNyQywwREFBNkI7QUFDN0Isd0NBQTZDO0FBSTdDLE1BQU0sS0FBSyxHQUFHLElBQUEsb0JBQVEsRUFBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBRTlDLGtCQUFlO0lBQ2IsS0FBSyxDQUFDLFdBQVcsQ0FBQyxZQUFvQixFQUFFLEdBQUcsSUFBVztRQUNwRCxLQUFLLENBQUMsZ0RBQWdELEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzVFLG1CQUFtQjtRQUNuQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQzNCLE1BQU0sU0FBUyxHQUFHO1lBQ2hCLG1CQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDO1lBQ3pDLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTO1NBQzdCLENBQUM7UUFFRixvQkFBb0I7UUFDcEIsSUFBSSxtQkFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQ2xDLFlBQVksR0FBRyxJQUFBLHFCQUFhLEVBQUMsWUFBWSxDQUFDLENBQUM7UUFDN0MsQ0FBQzthQUFNLENBQUM7WUFDTixLQUFLLE1BQU0sR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUM1QixNQUFNLGVBQWUsR0FBRyxtQkFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7Z0JBQ3JELElBQUksQ0FBQztvQkFDSCxZQUFZLEdBQUcsSUFBQSxxQkFBYSxFQUFDLGVBQWUsQ0FBQyxDQUFDO29CQUM5QyxNQUFNO2dCQUNSLENBQUM7Z0JBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztvQkFDYixLQUFLLENBQUMsMENBQTBDLEVBQUUsZUFBZSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUMxRSxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCxLQUFLLENBQUMsd0NBQXdDLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDOUQsTUFBTSxjQUFjLEdBQW1CLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDM0QsSUFBSSxRQUF5QixDQUFDO1FBQzlCLElBQUksQ0FBQztZQUNILFFBQVEsR0FBRyxjQUFjLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3RELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDZCxNQUFNLElBQUksU0FBUyxDQUFDLHdCQUF3QixZQUFZLEVBQUUsQ0FBQyxDQUFDO1lBQzlELENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxHQUFRLEVBQUUsQ0FBQztZQUNsQixHQUFHLENBQUMsT0FBTyxHQUFHLHFCQUFxQixHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakQsTUFBTSxHQUFHLENBQUM7UUFDWixDQUFDO1FBRUQsNkJBQTZCO1FBQzdCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztZQUN0QyxNQUFNLEVBQUUsVUFBVTtZQUNsQixHQUFHLEVBQUUsb0JBQW9CLFlBQVksSUFBSSxRQUFRLENBQUMsbUJBQW1CLEVBQUU7U0FDeEUsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLElBQUksRUFBRTtZQUMvQyxPQUFPLE1BQU0sUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUMzQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDSyxDQUFDIn0=
|
package/dist/commonjs/app.d.ts
CHANGED
package/dist/commonjs/app.js
CHANGED
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
const node_util_1 = require("node:util");
|
|
7
|
-
const node_path_1 = __importDefault(require("node:path"));
|
|
8
|
-
const utils_1 = require("@eggjs/utils");
|
|
9
4
|
const debug = (0, node_util_1.debuglog)('@eggjs/schedule/app');
|
|
10
5
|
class Boot {
|
|
11
6
|
#app;
|
|
@@ -14,7 +9,7 @@ class Boot {
|
|
|
14
9
|
this.#app = app;
|
|
15
10
|
this.#logger = app.getLogger('scheduleLogger');
|
|
16
11
|
}
|
|
17
|
-
async
|
|
12
|
+
async configDidLoad() {
|
|
18
13
|
const scheduleWorker = this.#app.scheduleWorker;
|
|
19
14
|
await scheduleWorker.init();
|
|
20
15
|
// log schedule list
|
|
@@ -78,54 +73,8 @@ class Boot {
|
|
|
78
73
|
message: e?.message,
|
|
79
74
|
});
|
|
80
75
|
});
|
|
81
|
-
|
|
82
|
-
const config = this.#app.config;
|
|
83
|
-
const directory = [
|
|
84
|
-
node_path_1.default.join(config.baseDir, 'app/schedule'),
|
|
85
|
-
...config.schedule.directory,
|
|
86
|
-
];
|
|
87
|
-
const runSchedule = async (schedulePath, ...args) => {
|
|
88
|
-
debug('[runSchedule] start schedulePath: %o, args: %o', schedulePath, args);
|
|
89
|
-
// resolve real path
|
|
90
|
-
if (node_path_1.default.isAbsolute(schedulePath)) {
|
|
91
|
-
schedulePath = (0, utils_1.importResolve)(schedulePath);
|
|
92
|
-
}
|
|
93
|
-
else {
|
|
94
|
-
for (const dir of directory) {
|
|
95
|
-
const trySchedulePath = node_path_1.default.join(dir, schedulePath);
|
|
96
|
-
try {
|
|
97
|
-
schedulePath = (0, utils_1.importResolve)(trySchedulePath);
|
|
98
|
-
break;
|
|
99
|
-
}
|
|
100
|
-
catch (err) {
|
|
101
|
-
debug('[runSchedule] importResolve %o error: %s', trySchedulePath, err);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
debug('[runSchedule] resolve schedulePath: %o', schedulePath);
|
|
106
|
-
let schedule;
|
|
107
|
-
try {
|
|
108
|
-
schedule = scheduleWorker.scheduleItems[schedulePath];
|
|
109
|
-
if (!schedule) {
|
|
110
|
-
throw new Error(`Cannot find schedule ${schedulePath}`);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
catch (err) {
|
|
114
|
-
err.message = `[@eggjs/schedule] ${err.message}`;
|
|
115
|
-
throw err;
|
|
116
|
-
}
|
|
117
|
-
// run with anonymous context
|
|
118
|
-
const ctx = this.#app.createAnonymousContext({
|
|
119
|
-
method: 'SCHEDULE',
|
|
120
|
-
url: `/__schedule?path=${schedulePath}&${schedule.scheduleQueryString}`,
|
|
121
|
-
});
|
|
122
|
-
return await this.#app.ctxStorage.run(ctx, async () => {
|
|
123
|
-
return await schedule.task(ctx, ...args);
|
|
124
|
-
});
|
|
125
|
-
};
|
|
126
|
-
Reflect.set(this.#app, 'runSchedule', runSchedule);
|
|
127
|
-
debug('didLoad');
|
|
76
|
+
debug('configDidLoad');
|
|
128
77
|
}
|
|
129
78
|
}
|
|
130
79
|
exports.default = Boot;
|
|
131
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHlDQUFxQztBQU1yQyxNQUFNLEtBQUssR0FBRyxJQUFBLG9CQUFRLEVBQUMscUJBQXFCLENBQUMsQ0FBQztBQUU5QyxNQUFxQixJQUFJO0lBQ3ZCLElBQUksQ0FBYztJQUNsQixPQUFPLENBQVk7SUFDbkIsWUFBWSxHQUFnQjtRQUMxQixJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztRQUNoQixJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsS0FBSyxDQUFDLGFBQWE7UUFDakIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDaEQsTUFBTSxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFNUIsb0JBQW9CO1FBQ3BCLEtBQUssTUFBTSxDQUFDLElBQUksY0FBYyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzdDLE1BQU0sUUFBUSxHQUFHLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLHlDQUF5QyxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM3RSxDQUFDO1FBQ0gsQ0FBQztRQUVELDBCQUEwQjtRQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsY0FBYyxFQUFFLEtBQUssRUFBQyxJQUFJLEVBQUMsRUFBRTtZQUNsRCxLQUFLLENBQUMsb0NBQW9DLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDbEQsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENB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
|
|
@@ -5,7 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.TimerStrategy = void 0;
|
|
7
7
|
const node_assert_1 = __importDefault(require("node:assert"));
|
|
8
|
-
const cron_parser_1 = require("cron-parser");
|
|
8
|
+
const cron_parser_1 = __importDefault(require("cron-parser"));
|
|
9
9
|
const humanize_ms_1 = require("humanize-ms");
|
|
10
10
|
const safe_timers_1 = __importDefault(require("safe-timers"));
|
|
11
11
|
const utility_1 = require("utility");
|
|
@@ -19,7 +19,7 @@ class TimerStrategy extends base_js_1.BaseStrategy {
|
|
|
19
19
|
// init cron parser
|
|
20
20
|
if (cron) {
|
|
21
21
|
try {
|
|
22
|
-
this.cronInstance =
|
|
22
|
+
this.cronInstance = cron_parser_1.default.parseExpression(cron, cronOptions);
|
|
23
23
|
}
|
|
24
24
|
catch (err) {
|
|
25
25
|
throw new TypeError(`[@eggjs/schedule] ${this.key} parse cron instruction(${cron}) error: ${err.message}`, { cause: err });
|
|
@@ -96,4 +96,4 @@ class TimerStrategy extends base_js_1.BaseStrategy {
|
|
|
96
96
|
}
|
|
97
97
|
}
|
|
98
98
|
exports.TimerStrategy = TimerStrategy;
|
|
99
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
99
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3N0cmF0ZWd5L3RpbWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDhEQUFpQztBQUVqQyw4REFBcUM7QUFDckMsNkNBQWlDO0FBQ2pDLDhEQUFxQztBQUNyQyxxQ0FBa0M7QUFHbEMsdUNBQXlDO0FBRXpDLE1BQXNCLGFBQWMsU0FBUSxzQkFBWTtJQUM1QyxZQUFZLENBQWtCO0lBRXhDLFlBQVksY0FBaUMsRUFBRSxLQUFZLEVBQUUsR0FBVztRQUN0RSxLQUFLLENBQUMsY0FBYyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUVsQyxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUN2RSxJQUFBLHFCQUFNLEVBQUMsUUFBUSxJQUFJLElBQUksSUFBSSxTQUFTLEVBQ2xDLHFCQUFxQixJQUFJLENBQUMsR0FBRyx1RkFBdUYsQ0FBQyxDQUFDO1FBRXhILG1CQUFtQjtRQUNuQixJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1QsSUFBSSxDQUFDO2dCQUNILElBQUksQ0FBQyxZQUFZLEdBQUcscUJBQVUsQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ3BFLENBQUM7WUFBQyxPQUFPLEdBQVEsRUFBRSxDQUFDO2dCQUNsQixNQUFNLElBQUksU0FBUyxDQUNqQixxQkFBcUIsSUFBSSxDQUFDLEdBQUcsMkJBQTJCLElBQUksWUFBWSxHQUFHLENBQUMsT0FBTyxFQUFFLEVBQ3JGLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDcEIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRVMsT0FBTztRQUNmLE1BQU0sSUFBSSxTQUFTLENBQUMscUJBQXFCLElBQUksQ0FBQyxHQUFHLGdEQUFnRCxDQUFD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
|
package/dist/esm/agent.d.ts
CHANGED
package/dist/esm/agent.js
CHANGED
|
@@ -7,7 +7,7 @@ export default class Boot {
|
|
|
7
7
|
constructor(agent) {
|
|
8
8
|
this.#agent = agent;
|
|
9
9
|
}
|
|
10
|
-
async
|
|
10
|
+
async configDidLoad() {
|
|
11
11
|
// register built-in strategy
|
|
12
12
|
this.#agent.schedule.use('worker', WorkerStrategy);
|
|
13
13
|
this.#agent.schedule.use('all', AllStrategy);
|
|
@@ -18,7 +18,7 @@ export default class Boot {
|
|
|
18
18
|
// get job info from worker
|
|
19
19
|
this.#agent.schedule.onJobFinish(info);
|
|
20
20
|
});
|
|
21
|
-
debug('
|
|
21
|
+
debug('configDidLoad');
|
|
22
22
|
}
|
|
23
23
|
async serverDidReady() {
|
|
24
24
|
// start schedule after worker ready
|
|
@@ -26,4 +26,4 @@ export default class Boot {
|
|
|
26
26
|
debug('serverDidReady, schedule start');
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWdlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVyQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBR3BELE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0FBRWhELE1BQU0sQ0FBQyxPQUFPLE9BQU8sSUFBSTtJQUN2QixNQUFNLENBQVE7SUFDZCxZQUFZLEtBQVk7UUFDdEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUVELEtBQUssQ0FBQyxhQUFhO1FBQ2pCLDZCQUE2QjtRQUM3QixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFFN0Msb0RBQW9EO1FBQ3BELE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFbEMsd0NBQXdDO1FBQ3hDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxJQUF3QixFQUFFLEVBQUU7WUFDcEUsMkJBQTJCO1lBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztRQUNILEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQWM7UUFDbEIsb0NBQW9DO1FBQ3BDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzdCLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO0lBQzFDLENBQUM7Q0FDRiJ9
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { debuglog } from 'node:util';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { importResolve } from '@eggjs/utils';
|
|
4
|
+
const debug = debuglog('@eggjs/schedule/app');
|
|
5
|
+
export default {
|
|
6
|
+
async runSchedule(schedulePath, ...args) {
|
|
7
|
+
debug('[runSchedule] start schedulePath: %o, args: %o', schedulePath, args);
|
|
8
|
+
// for test purpose
|
|
9
|
+
const config = this.config;
|
|
10
|
+
const directory = [
|
|
11
|
+
path.join(config.baseDir, 'app/schedule'),
|
|
12
|
+
...config.schedule.directory,
|
|
13
|
+
];
|
|
14
|
+
// resolve real path
|
|
15
|
+
if (path.isAbsolute(schedulePath)) {
|
|
16
|
+
schedulePath = importResolve(schedulePath);
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
for (const dir of directory) {
|
|
20
|
+
const trySchedulePath = path.join(dir, schedulePath);
|
|
21
|
+
try {
|
|
22
|
+
schedulePath = importResolve(trySchedulePath);
|
|
23
|
+
break;
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
debug('[runSchedule] importResolve %o error: %s', trySchedulePath, err);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
debug('[runSchedule] resolve schedulePath: %o', schedulePath);
|
|
31
|
+
const scheduleWorker = this.scheduleWorker;
|
|
32
|
+
let schedule;
|
|
33
|
+
try {
|
|
34
|
+
schedule = scheduleWorker.scheduleItems[schedulePath];
|
|
35
|
+
if (!schedule) {
|
|
36
|
+
throw new TypeError(`Cannot find schedule ${schedulePath}`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
catch (err) {
|
|
40
|
+
err.message = `[@eggjs/schedule] ${err.message}`;
|
|
41
|
+
throw err;
|
|
42
|
+
}
|
|
43
|
+
// run with anonymous context
|
|
44
|
+
const ctx = this.createAnonymousContext({
|
|
45
|
+
method: 'SCHEDULE',
|
|
46
|
+
url: `/__schedule?path=${schedulePath}&${schedule.scheduleQueryString}`,
|
|
47
|
+
});
|
|
48
|
+
return await this.ctxStorage.run(ctx, async () => {
|
|
49
|
+
return await schedule.task(ctx, ...args);
|
|
50
|
+
});
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24udW5pdHRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBwL2V4dGVuZC9hcHBsaWNhdGlvbi51bml0dGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3JDLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUM3QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBSTdDLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBRTlDLGVBQWU7SUFDYixLQUFLLENBQUMsV0FBVyxDQUFDLFlBQW9CLEVBQUUsR0FBRyxJQUFXO1FBQ3BELEtBQUssQ0FBQyxnREFBZ0QsRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDNUUsbUJBQW1CO1FBQ25CLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDM0IsTUFBTSxTQUFTLEdBQUc7WUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQztZQUN6QyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUztTQUM3QixDQUFDO1FBRUYsb0JBQW9CO1FBQ3BCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQ2xDLFlBQVksR0FBRyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDN0MsQ0FBQzthQUFNLENBQUM7WUFDTixLQUFLLE1BQU0sR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUM1QixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQztnQkFDckQsSUFBSSxDQUFDO29CQUNILFlBQVksR0FBRyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUM7b0JBQzlDLE1BQU07Z0JBQ1IsQ0FBQztnQkFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO29CQUNiLEtBQUssQ0FBQywwQ0FBMEMsRUFBRSxlQUFlLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQzFFLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELEtBQUssQ0FBQyx3Q0FBd0MsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUM5RCxNQUFNLGNBQWMsR0FBbUIsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUMzRCxJQUFJLFFBQXlCLENBQUM7UUFDOUIsSUFBSSxDQUFDO1lBQ0gsUUFBUSxHQUFHLGNBQWMsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDdEQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNkLE1BQU0sSUFBSSxTQUFTLENBQUMsd0JBQXdCLFlBQVksRUFBRSxDQUFDLENBQUM7WUFDOUQsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEdBQVEsRUFBRSxDQUFDO1lBQ2xCLEdBQUcsQ0FBQyxPQUFPLEdBQUcscUJBQXFCLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqRCxNQUFNLEdBQUcsQ0FBQztRQUNaLENBQUM7UUFFRCw2QkFBNkI7UUFDN0IsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDO1lBQ3RDLE1BQU0sRUFBRSxVQUFVO1lBQ2xCLEdBQUcsRUFBRSxvQkFBb0IsWUFBWSxJQUFJLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRTtTQUN4RSxDQUFDLENBQUM7UUFDSCxPQUFPLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQy9DLE9BQU8sTUFBTSxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNLLENBQUMifQ==
|
package/dist/esm/app.d.ts
CHANGED
package/dist/esm/app.js
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
import { debuglog } from 'node:util';
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
import { importResolve } from '@eggjs/utils';
|
|
4
2
|
const debug = debuglog('@eggjs/schedule/app');
|
|
5
3
|
export default class Boot {
|
|
6
4
|
#app;
|
|
@@ -9,7 +7,7 @@ export default class Boot {
|
|
|
9
7
|
this.#app = app;
|
|
10
8
|
this.#logger = app.getLogger('scheduleLogger');
|
|
11
9
|
}
|
|
12
|
-
async
|
|
10
|
+
async configDidLoad() {
|
|
13
11
|
const scheduleWorker = this.#app.scheduleWorker;
|
|
14
12
|
await scheduleWorker.init();
|
|
15
13
|
// log schedule list
|
|
@@ -73,53 +71,7 @@ export default class Boot {
|
|
|
73
71
|
message: e?.message,
|
|
74
72
|
});
|
|
75
73
|
});
|
|
76
|
-
|
|
77
|
-
const config = this.#app.config;
|
|
78
|
-
const directory = [
|
|
79
|
-
path.join(config.baseDir, 'app/schedule'),
|
|
80
|
-
...config.schedule.directory,
|
|
81
|
-
];
|
|
82
|
-
const runSchedule = async (schedulePath, ...args) => {
|
|
83
|
-
debug('[runSchedule] start schedulePath: %o, args: %o', schedulePath, args);
|
|
84
|
-
// resolve real path
|
|
85
|
-
if (path.isAbsolute(schedulePath)) {
|
|
86
|
-
schedulePath = importResolve(schedulePath);
|
|
87
|
-
}
|
|
88
|
-
else {
|
|
89
|
-
for (const dir of directory) {
|
|
90
|
-
const trySchedulePath = path.join(dir, schedulePath);
|
|
91
|
-
try {
|
|
92
|
-
schedulePath = importResolve(trySchedulePath);
|
|
93
|
-
break;
|
|
94
|
-
}
|
|
95
|
-
catch (err) {
|
|
96
|
-
debug('[runSchedule] importResolve %o error: %s', trySchedulePath, err);
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
debug('[runSchedule] resolve schedulePath: %o', schedulePath);
|
|
101
|
-
let schedule;
|
|
102
|
-
try {
|
|
103
|
-
schedule = scheduleWorker.scheduleItems[schedulePath];
|
|
104
|
-
if (!schedule) {
|
|
105
|
-
throw new Error(`Cannot find schedule ${schedulePath}`);
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
catch (err) {
|
|
109
|
-
err.message = `[@eggjs/schedule] ${err.message}`;
|
|
110
|
-
throw err;
|
|
111
|
-
}
|
|
112
|
-
// run with anonymous context
|
|
113
|
-
const ctx = this.#app.createAnonymousContext({
|
|
114
|
-
method: 'SCHEDULE',
|
|
115
|
-
url: `/__schedule?path=${schedulePath}&${schedule.scheduleQueryString}`,
|
|
116
|
-
});
|
|
117
|
-
return await this.#app.ctxStorage.run(ctx, async () => {
|
|
118
|
-
return await schedule.task(ctx, ...args);
|
|
119
|
-
});
|
|
120
|
-
};
|
|
121
|
-
Reflect.set(this.#app, 'runSchedule', runSchedule);
|
|
122
|
-
debug('didLoad');
|
|
74
|
+
debug('configDidLoad');
|
|
123
75
|
}
|
|
124
76
|
}
|
|
125
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
77
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBTXJDLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBRTlDLE1BQU0sQ0FBQyxPQUFPLE9BQU8sSUFBSTtJQUN2QixJQUFJLENBQWM7SUFDbEIsT0FBTyxDQUFZO0lBQ25CLFlBQVksR0FBZ0I7UUFDMUIsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7UUFDaEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELEtBQUssQ0FBQyxhQUFhO1FBQ2pCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQ2hELE1BQU0sY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO1FBRTVCLG9CQUFvQjtRQUNwQixLQUFLLE1BQU0sQ0FBQyxJQUFJLGNBQWMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUM3QyxNQUFNLFFBQVEsR0FBRyxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyx5Q0FBeUMsRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDN0UsQ0FBQztRQUNILENBQUM7UUFFRCwwQkFBMEI7UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLGNBQWMsRUFBRSxLQUFLLEVBQUMsSUFBSSxFQUFDLEVBQUU7WUFDbEQsS0FBSyxDQUFDLG9DQUFvQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xELE1BQU0sRUFB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
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import assert from 'node:assert';
|
|
2
|
-
import
|
|
2
|
+
import cronParser from 'cron-parser';
|
|
3
3
|
import { ms } from 'humanize-ms';
|
|
4
4
|
import safeTimers from 'safe-timers';
|
|
5
5
|
import { logDate } from 'utility';
|
|
@@ -13,7 +13,7 @@ export class TimerStrategy extends BaseStrategy {
|
|
|
13
13
|
// init cron parser
|
|
14
14
|
if (cron) {
|
|
15
15
|
try {
|
|
16
|
-
this.cronInstance = parseExpression(cron, cronOptions);
|
|
16
|
+
this.cronInstance = cronParser.parseExpression(cron, cronOptions);
|
|
17
17
|
}
|
|
18
18
|
catch (err) {
|
|
19
19
|
throw new TypeError(`[@eggjs/schedule] ${this.key} parse cron instruction(${cron}) error: ${err.message}`, { cause: err });
|
|
@@ -89,4 +89,4 @@ export class TimerStrategy extends BaseStrategy {
|
|
|
89
89
|
return fn(handler, delay, ...args);
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3N0cmF0ZWd5L3RpbWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sTUFBTSxNQUFNLGFBQWEsQ0FBQztBQUVqQyxPQUFPLFVBQVUsTUFBTSxhQUFhLENBQUM7QUFDckMsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNqQyxPQUFPLFVBQVUsTUFBTSxhQUFhLENBQUM7QUFDckMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUdsQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXpDLE1BQU0sT0FBZ0IsYUFBYyxTQUFRLFlBQVk7SUFDNUMsWUFBWSxDQUFrQjtJQUV4QyxZQUFZLGNBQWlDLEVBQUUsS0FBWSxFQUFFLEdBQVc7UUFDdEUsS0FBSyxDQUFDLGNBQWMsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFbEMsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDdkUsTUFBTSxDQUFDLFFBQVEsSUFBSSxJQUFJLElBQUksU0FBUyxFQUNsQyxxQkFBcUIsSUFBSSxDQUFDLEdBQUcsdUZBQXVGLENBQUMsQ0FBQztRQUV4SCxtQkFBbUI7UUFDbkIsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNULElBQUksQ0FBQztnQkFDSCxJQUFJLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ3BFLENBQUM7WUFBQyxPQUFPLEdBQVEsRUFBRSxDQUFDO2dCQUNsQixNQUFNLElBQUksU0FBUyxDQUNqQixxQkFBcUIsSUFBSSxDQUFDLEdBQUcsMkJBQTJCLElBQUksWUFBWSxHQUFHLENBQUMsT0FBTyxFQUFFLEVBQ3JGLEVBQUUs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
|
package/dist/package.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@eggjs/schedule",
|
|
3
|
-
"version": "5.0.
|
|
3
|
+
"version": "5.0.2",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
},
|
|
18
18
|
"repository": {
|
|
19
19
|
"type": "git",
|
|
20
|
-
"url": "git@github.com:eggjs/
|
|
20
|
+
"url": "git@github.com:eggjs/schedule.git"
|
|
21
21
|
},
|
|
22
22
|
"keywords": [
|
|
23
23
|
"egg",
|
package/src/agent.ts
CHANGED
|
@@ -12,7 +12,7 @@ export default class Boot implements ILifecycleBoot {
|
|
|
12
12
|
this.#agent = agent;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
async
|
|
15
|
+
async configDidLoad(): Promise<void> {
|
|
16
16
|
// register built-in strategy
|
|
17
17
|
this.#agent.schedule.use('worker', WorkerStrategy);
|
|
18
18
|
this.#agent.schedule.use('all', AllStrategy);
|
|
@@ -25,7 +25,7 @@ export default class Boot implements ILifecycleBoot {
|
|
|
25
25
|
// get job info from worker
|
|
26
26
|
this.#agent.schedule.onJobFinish(info);
|
|
27
27
|
});
|
|
28
|
-
debug('
|
|
28
|
+
debug('configDidLoad');
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
async serverDidReady(): Promise<void> {
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { debuglog } from 'node:util';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { importResolve } from '@eggjs/utils';
|
|
4
|
+
import type { ScheduleWorker } from '../../lib/schedule_worker.js';
|
|
5
|
+
import type { EggScheduleItem } from '../../lib/types.js';
|
|
6
|
+
|
|
7
|
+
const debug = debuglog('@eggjs/schedule/app');
|
|
8
|
+
|
|
9
|
+
export default {
|
|
10
|
+
async runSchedule(schedulePath: string, ...args: any[]) {
|
|
11
|
+
debug('[runSchedule] start schedulePath: %o, args: %o', schedulePath, args);
|
|
12
|
+
// for test purpose
|
|
13
|
+
const config = this.config;
|
|
14
|
+
const directory = [
|
|
15
|
+
path.join(config.baseDir, 'app/schedule'),
|
|
16
|
+
...config.schedule.directory,
|
|
17
|
+
];
|
|
18
|
+
|
|
19
|
+
// resolve real path
|
|
20
|
+
if (path.isAbsolute(schedulePath)) {
|
|
21
|
+
schedulePath = importResolve(schedulePath);
|
|
22
|
+
} else {
|
|
23
|
+
for (const dir of directory) {
|
|
24
|
+
const trySchedulePath = path.join(dir, schedulePath);
|
|
25
|
+
try {
|
|
26
|
+
schedulePath = importResolve(trySchedulePath);
|
|
27
|
+
break;
|
|
28
|
+
} catch (err) {
|
|
29
|
+
debug('[runSchedule] importResolve %o error: %s', trySchedulePath, err);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
debug('[runSchedule] resolve schedulePath: %o', schedulePath);
|
|
35
|
+
const scheduleWorker: ScheduleWorker = this.scheduleWorker;
|
|
36
|
+
let schedule: EggScheduleItem;
|
|
37
|
+
try {
|
|
38
|
+
schedule = scheduleWorker.scheduleItems[schedulePath];
|
|
39
|
+
if (!schedule) {
|
|
40
|
+
throw new TypeError(`Cannot find schedule ${schedulePath}`);
|
|
41
|
+
}
|
|
42
|
+
} catch (err: any) {
|
|
43
|
+
err.message = `[@eggjs/schedule] ${err.message}`;
|
|
44
|
+
throw err;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// run with anonymous context
|
|
48
|
+
const ctx = this.createAnonymousContext({
|
|
49
|
+
method: 'SCHEDULE',
|
|
50
|
+
url: `/__schedule?path=${schedulePath}&${schedule.scheduleQueryString}`,
|
|
51
|
+
});
|
|
52
|
+
return await this.ctxStorage.run(ctx, async () => {
|
|
53
|
+
return await schedule.task(ctx, ...args);
|
|
54
|
+
});
|
|
55
|
+
},
|
|
56
|
+
} as any;
|
|
57
|
+
|
package/src/app.ts
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import { debuglog } from 'node:util';
|
|
2
|
-
import path from 'node:path';
|
|
3
2
|
import type {
|
|
4
3
|
Application, ILifecycleBoot, EggLogger,
|
|
5
4
|
} from 'egg';
|
|
6
|
-
import {
|
|
7
|
-
import { EggScheduleItem, EggScheduleJobInfo } from './lib/types.js';
|
|
5
|
+
import type { EggScheduleJobInfo } from './lib/types.js';
|
|
8
6
|
|
|
9
7
|
const debug = debuglog('@eggjs/schedule/app');
|
|
10
8
|
|
|
@@ -16,7 +14,7 @@ export default class Boot implements ILifecycleBoot {
|
|
|
16
14
|
this.#logger = app.getLogger('scheduleLogger');
|
|
17
15
|
}
|
|
18
16
|
|
|
19
|
-
async
|
|
17
|
+
async configDidLoad(): Promise<void> {
|
|
20
18
|
const scheduleWorker = this.#app.scheduleWorker;
|
|
21
19
|
await scheduleWorker.init();
|
|
22
20
|
|
|
@@ -89,54 +87,6 @@ export default class Boot implements ILifecycleBoot {
|
|
|
89
87
|
message: e?.message,
|
|
90
88
|
} as EggScheduleJobInfo);
|
|
91
89
|
});
|
|
92
|
-
|
|
93
|
-
// for test purpose
|
|
94
|
-
const config = this.#app.config;
|
|
95
|
-
const directory = [
|
|
96
|
-
path.join(config.baseDir, 'app/schedule'),
|
|
97
|
-
...config.schedule.directory,
|
|
98
|
-
];
|
|
99
|
-
const runSchedule = async (schedulePath: string, ...args: any[]) => {
|
|
100
|
-
debug('[runSchedule] start schedulePath: %o, args: %o', schedulePath, args);
|
|
101
|
-
|
|
102
|
-
// resolve real path
|
|
103
|
-
if (path.isAbsolute(schedulePath)) {
|
|
104
|
-
schedulePath = importResolve(schedulePath);
|
|
105
|
-
} else {
|
|
106
|
-
for (const dir of directory) {
|
|
107
|
-
const trySchedulePath = path.join(dir, schedulePath);
|
|
108
|
-
try {
|
|
109
|
-
schedulePath = importResolve(trySchedulePath);
|
|
110
|
-
break;
|
|
111
|
-
} catch (err) {
|
|
112
|
-
debug('[runSchedule] importResolve %o error: %s', trySchedulePath, err);
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
debug('[runSchedule] resolve schedulePath: %o', schedulePath);
|
|
118
|
-
let schedule: EggScheduleItem;
|
|
119
|
-
try {
|
|
120
|
-
schedule = scheduleWorker.scheduleItems[schedulePath];
|
|
121
|
-
if (!schedule) {
|
|
122
|
-
throw new Error(`Cannot find schedule ${schedulePath}`);
|
|
123
|
-
}
|
|
124
|
-
} catch (err: any) {
|
|
125
|
-
err.message = `[@eggjs/schedule] ${err.message}`;
|
|
126
|
-
throw err;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
// run with anonymous context
|
|
130
|
-
const ctx = this.#app.createAnonymousContext({
|
|
131
|
-
method: 'SCHEDULE',
|
|
132
|
-
url: `/__schedule?path=${schedulePath}&${schedule.scheduleQueryString}`,
|
|
133
|
-
});
|
|
134
|
-
return await this.#app.ctxStorage.run(ctx, async () => {
|
|
135
|
-
return await schedule.task(ctx, ...args);
|
|
136
|
-
});
|
|
137
|
-
};
|
|
138
|
-
Reflect.set(this.#app, 'runSchedule', runSchedule);
|
|
139
|
-
|
|
140
|
-
debug('didLoad');
|
|
90
|
+
debug('configDidLoad');
|
|
141
91
|
}
|
|
142
92
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import assert from 'node:assert';
|
|
2
|
-
import {
|
|
2
|
+
import type { CronExpression } from 'cron-parser';
|
|
3
|
+
import cronParser from 'cron-parser';
|
|
3
4
|
import { ms } from 'humanize-ms';
|
|
4
5
|
import safeTimers from 'safe-timers';
|
|
5
6
|
import { logDate } from 'utility';
|
|
@@ -20,7 +21,7 @@ export abstract class TimerStrategy extends BaseStrategy {
|
|
|
20
21
|
// init cron parser
|
|
21
22
|
if (cron) {
|
|
22
23
|
try {
|
|
23
|
-
this.cronInstance = parseExpression(cron, cronOptions);
|
|
24
|
+
this.cronInstance = cronParser.parseExpression(cron, cronOptions);
|
|
24
25
|
} catch (err: any) {
|
|
25
26
|
throw new TypeError(
|
|
26
27
|
`[@eggjs/schedule] ${this.key} parse cron instruction(${cron}) error: ${err.message}`,
|