@eggjs/schedule 5.0.0 → 5.0.1
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/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/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/package.json +1 -1
- package/package.json +1 -1
- package/src/agent.ts +2 -2
- package/src/app/extend/application.unittest.ts +57 -0
- package/src/app.ts +3 -53
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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
|
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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
|
package/dist/package.json
CHANGED
package/package.json
CHANGED
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
|
}
|