@eggjs/schedule 6.0.0-beta.35 → 6.0.0-beta.36

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/index.js CHANGED
@@ -1,15 +1,16 @@
1
- import "./types.js";
2
- import { definePluginFactory } from 'egg';
3
- import Agent from "./app/extend/agent.js";
4
- import Application from "./app/extend/application.js";
5
- import ApplicationUnittest from "./app/extend/application.unittest.js";
6
- export { Agent, Application, ApplicationUnittest };
7
- export { ScheduleWorker } from "./lib/schedule_worker.js";
8
- export { Scheduler } from "./lib/schedule.js";
9
- export * from "./lib/types.js";
10
- export default definePluginFactory({
11
- name: 'schedule',
12
- enable: true,
13
- path: import.meta.dirname,
1
+ import { Scheduler } from "./lib/schedule.js";
2
+ import ScheduleAgent from "./app/extend/agent.js";
3
+ import { ScheduleWorker } from "./lib/schedule_worker.js";
4
+ import ScheduleApplication from "./app/extend/application.js";
5
+ import ScheduleApplicationUnittest from "./app/extend/application.unittest.js";
6
+ import { definePluginFactory } from "egg";
7
+
8
+ //#region src/index.ts
9
+ var src_default = definePluginFactory({
10
+ name: "schedule",
11
+ enable: true,
12
+ path: import.meta.dirname
14
13
  });
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxZQUFZLENBQUM7QUFDcEIsT0FBTyxFQUFFLG1CQUFtQixFQUF5QixNQUFNLEtBQUssQ0FBQztBQUVqRSxPQUFPLEtBQUssTUFBTSx1QkFBdUIsQ0FBQztBQUMxQyxPQUFPLFdBQVcsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RCxPQUFPLG1CQUFtQixNQUFNLHNDQUFzQyxDQUFDO0FBRXZFLE9BQU8sRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLENBQUM7QUFDbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUU5QyxjQUFjLGdCQUFnQixDQUFDO0FBRS9CLGVBQWUsbUJBQW1CLENBQUM7SUFDakMsSUFBSSxFQUFFLFVBQVU7SUFDaEIsTUFBTSxFQUFFLElBQUk7SUFDWixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPO0NBQzFCLENBQXFCLENBQUMifQ==
14
+
15
+ //#endregion
16
+ export { ScheduleAgent as Agent, ScheduleApplication as Application, ScheduleApplicationUnittest as ApplicationUnittest, ScheduleWorker, Scheduler, src_default as default };
@@ -1,3 +1,7 @@
1
- import type { EggApplicationCore } from 'egg';
2
- import type { EggScheduleItem } from './types.ts';
3
- export declare function loadSchedule(app: EggApplicationCore): Promise<Record<string, EggScheduleItem>>;
1
+ import { EggScheduleItem } from "./types.js";
2
+ import { EggApplicationCore } from "egg";
3
+
4
+ //#region src/lib/load_schedule.d.ts
5
+ declare function loadSchedule(app: EggApplicationCore): Promise<Record<string, EggScheduleItem>>;
6
+ //#endregion
7
+ export { loadSchedule };
@@ -1,66 +1,61 @@
1
- import assert from 'node:assert';
2
- import path from 'node:path';
3
- import { stringify } from 'node:querystring';
4
- import { importResolve } from '@eggjs/utils';
5
- import { isClass, isFunction, isGeneratorFunction } from 'is-type-of';
1
+ import assert from "node:assert";
2
+ import path from "node:path";
3
+ import { stringify } from "node:querystring";
4
+ import { importResolve } from "@eggjs/utils";
5
+ import { isClass, isFunction, isGeneratorFunction } from "is-type-of";
6
+
7
+ //#region src/lib/load_schedule.ts
6
8
  function getScheduleLoader(app) {
7
- return class ScheduleLoader extends app.loader.FileLoader {
8
- async load() {
9
- const target = this.options.target;
10
- const items = await this.parse();
11
- for (const item of items) {
12
- const schedule = item.exports;
13
- const fullpath = item.fullpath;
14
- const scheduleConfig = schedule.schedule;
15
- assert(scheduleConfig, `schedule(${fullpath}): must have "schedule" and "task" properties`);
16
- assert(isClass(schedule) || isFunction(schedule.task), `schedule(${fullpath}: \`schedule.task\` should be function or \`schedule\` should be class`);
17
- let task;
18
- if (isClass(schedule)) {
19
- assert(!isGeneratorFunction(schedule.prototype.subscribe), `schedule(${fullpath}): "schedule" generator function is not support, should use async function instead`);
20
- task = async (ctx, ...args) => {
21
- const instance = new schedule(ctx);
22
- // s.subscribe = app.toAsyncFunction(s.subscribe);
23
- return instance.subscribe(...args);
24
- };
25
- }
26
- else {
27
- assert(!isGeneratorFunction(schedule.task), `schedule(${fullpath}): "task" generator function is not support, should use async function instead`);
28
- task = schedule.task;
29
- // task = app.toAsyncFunction(schedule.task);
30
- }
31
- const env = app.config.env;
32
- const envList = schedule.schedule.env;
33
- if (Array.isArray(envList) && !envList.includes(env)) {
34
- app.coreLogger.info(`[@eggjs/schedule]: ignore schedule ${fullpath} due to \`schedule.env\` not match`);
35
- continue;
36
- }
37
- // handle symlink case
38
- const realFullpath = importResolve(fullpath);
39
- target[realFullpath] = {
40
- schedule: scheduleConfig,
41
- // @ts-expect-error scheduleConfig may can't be stringified
42
- scheduleQueryString: stringify(scheduleConfig),
43
- task,
44
- key: realFullpath,
45
- };
46
- }
47
- return target;
48
- }
49
- };
9
+ return class ScheduleLoader extends app.loader.FileLoader {
10
+ async load() {
11
+ const target = this.options.target;
12
+ const items = await this.parse();
13
+ for (const item of items) {
14
+ const schedule = item.exports;
15
+ const fullpath = item.fullpath;
16
+ const scheduleConfig = schedule.schedule;
17
+ assert(scheduleConfig, `schedule(${fullpath}): must have "schedule" and "task" properties`);
18
+ assert(isClass(schedule) || isFunction(schedule.task), `schedule(${fullpath}: \`schedule.task\` should be function or \`schedule\` should be class`);
19
+ let task;
20
+ if (isClass(schedule)) {
21
+ assert(!isGeneratorFunction(schedule.prototype.subscribe), `schedule(${fullpath}): "schedule" generator function is not support, should use async function instead`);
22
+ task = async (ctx, ...args) => {
23
+ return new schedule(ctx).subscribe(...args);
24
+ };
25
+ } else {
26
+ assert(!isGeneratorFunction(schedule.task), `schedule(${fullpath}): "task" generator function is not support, should use async function instead`);
27
+ task = schedule.task;
28
+ }
29
+ const env = app.config.env;
30
+ const envList = schedule.schedule.env;
31
+ if (Array.isArray(envList) && !envList.includes(env)) {
32
+ app.coreLogger.info(`[@eggjs/schedule]: ignore schedule ${fullpath} due to \`schedule.env\` not match`);
33
+ continue;
34
+ }
35
+ const realFullpath = importResolve(fullpath);
36
+ target[realFullpath] = {
37
+ schedule: scheduleConfig,
38
+ scheduleQueryString: stringify(scheduleConfig),
39
+ task,
40
+ key: realFullpath
41
+ };
42
+ }
43
+ return target;
44
+ }
45
+ };
50
46
  }
51
- export async function loadSchedule(app) {
52
- const dirs = [
53
- ...app.loader.getLoadUnits().map((unit) => path.join(unit.path, 'app/schedule')),
54
- ...(app.config.schedule.directory ?? []),
55
- ];
56
- const Loader = getScheduleLoader(app);
57
- const schedules = {};
58
- await new Loader({
59
- directory: dirs,
60
- target: schedules,
61
- inject: app,
62
- }).load();
63
- Reflect.set(app, 'schedules', schedules);
64
- return schedules;
47
+ async function loadSchedule(app) {
48
+ const dirs = [...app.loader.getLoadUnits().map((unit) => path.join(unit.path, "app/schedule")), ...app.config.schedule.directory ?? []];
49
+ const Loader = getScheduleLoader(app);
50
+ const schedules = {};
51
+ await new Loader({
52
+ directory: dirs,
53
+ target: schedules,
54
+ inject: app
55
+ }).load();
56
+ Reflect.set(app, "schedules", schedules);
57
+ return schedules;
65
58
  }
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZF9zY2hlZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvbG9hZF9zY2hlZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFDakMsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQzdCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRTdDLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBS3RFLFNBQVMsaUJBQWlCLENBQUMsR0FBdUI7SUFDaEQsT0FBTyxNQUFNLGNBQWUsU0FBUSxHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVU7UUFDdkQsS0FBSyxDQUFDLElBQUk7WUFDUixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQXlDLENBQUM7WUFDdEUsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDakMsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDekIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BR3JCLENBQUM7Z0JBQ0YsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztnQkFDL0IsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQztnQkFDekMsTUFBTSxDQUFDLGNBQWMsRUFBRSxZQUFZLFFBQVEsK0NBQStDLENBQUMsQ0FBQztnQkFDNUYsTUFBTSxDQUNKLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUM5QyxZQUFZLFFBQVEsd0VBQXdFLENBQzdGLENBQUM7Z0JBRUYsSUFBSSxJQUFxQixDQUFDO2dCQUMxQixJQUFJLE9BQU8s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
59
+
60
+ //#endregion
61
+ export { loadSchedule };
@@ -1,31 +1,35 @@
1
- import type Agent from '../app/extend/agent.ts';
2
- import type { BaseStrategy } from './strategy/base.ts';
3
- import type { EggScheduleItem, EggScheduleJobInfo } from './types.ts';
4
- export declare class Scheduler {
5
- #private;
6
- closed: boolean;
7
- constructor(agent: Agent);
8
- /**
9
- * register a custom Schedule Strategy
10
- * @param {String} type - strategy type
11
- * @param {Strategy} clz - Strategy class
12
- */
13
- use(type: string, clz: typeof BaseStrategy): void;
14
- /**
15
- * load all schedule jobs, then initialize and register special strategy
16
- */
17
- init(): Promise<void>;
18
- registerSchedule(scheduleItem: EggScheduleItem): void;
19
- unregisterSchedule(key: string): boolean;
20
- /**
21
- * job finish event handler
22
- *
23
- * @param {Object} info - { id, key, success, message, workerId }
24
- */
25
- onJobFinish(info: EggScheduleJobInfo): void;
26
- /**
27
- * start schedule
28
- */
29
- start(): Promise<void>;
30
- close(): Promise<void>;
1
+ import { EggScheduleItem, EggScheduleJobInfo } from "./types.js";
2
+ import { BaseStrategy } from "./strategy/base.js";
3
+ import ScheduleAgent from "../app/extend/agent.js";
4
+
5
+ //#region src/lib/schedule.d.ts
6
+ declare class Scheduler {
7
+ #private;
8
+ closed: boolean;
9
+ constructor(agent: ScheduleAgent);
10
+ /**
11
+ * register a custom Schedule Strategy
12
+ * @param {String} type - strategy type
13
+ * @param {Strategy} clz - Strategy class
14
+ */
15
+ use(type: string, clz: typeof BaseStrategy): void;
16
+ /**
17
+ * load all schedule jobs, then initialize and register special strategy
18
+ */
19
+ init(): Promise<void>;
20
+ registerSchedule(scheduleItem: EggScheduleItem): void;
21
+ unregisterSchedule(key: string): boolean;
22
+ /**
23
+ * job finish event handler
24
+ *
25
+ * @param {Object} info - { id, key, success, message, workerId }
26
+ */
27
+ onJobFinish(info: EggScheduleJobInfo): void;
28
+ /**
29
+ * start schedule
30
+ */
31
+ start(): Promise<void>;
32
+ close(): Promise<void>;
31
33
  }
34
+ //#endregion
35
+ export { Scheduler };
@@ -1,85 +1,77 @@
1
- import { debuglog } from 'node:util';
2
1
  import { loadSchedule } from "./load_schedule.js";
3
- const debug = debuglog('egg/schedule/lib/schedule');
4
- export class Scheduler {
5
- closed = false;
6
- #agent;
7
- #logger;
8
- #strategyClassMap = new Map();
9
- #strategyInstanceMap = new Map();
10
- constructor(agent) {
11
- this.#agent = agent;
12
- this.#logger = agent.getLogger('scheduleLogger');
13
- }
14
- /**
15
- * register a custom Schedule Strategy
16
- * @param {String} type - strategy type
17
- * @param {Strategy} clz - Strategy class
18
- */
19
- use(type, clz) {
20
- this.#strategyClassMap.set(type, clz);
21
- debug('use type: %o', type);
22
- }
23
- /**
24
- * load all schedule jobs, then initialize and register special strategy
25
- */
26
- async init() {
27
- const scheduleItems = await loadSchedule(this.#agent);
28
- for (const scheduleItem of Object.values(scheduleItems)) {
29
- this.registerSchedule(scheduleItem);
30
- }
31
- }
32
- registerSchedule(scheduleItem) {
33
- const { key, schedule } = scheduleItem;
34
- const type = schedule.type;
35
- if (schedule.disable) {
36
- return;
37
- }
38
- // find Strategy by type
39
- const Strategy = this.#strategyClassMap.get(type);
40
- if (!Strategy) {
41
- const err = new Error(`schedule type [${type}] is not defined`);
42
- err.name = 'EggScheduleError';
43
- throw err;
44
- }
45
- // Initialize strategy and register
46
- const instance = new Strategy(schedule, this.#agent, key);
47
- this.#strategyInstanceMap.set(key, instance);
48
- debug('registerSchedule type: %o, config: %o, key: %o', type, schedule, key);
49
- }
50
- unregisterSchedule(key) {
51
- debug('unregisterSchedule key: %o', key);
52
- return this.#strategyInstanceMap.delete(key);
53
- }
54
- /**
55
- * job finish event handler
56
- *
57
- * @param {Object} info - { id, key, success, message, workerId }
58
- */
59
- onJobFinish(info) {
60
- this.#logger.debug(`[Job#${info.id}] ${info.key} finish event received by agent from worker#${info.workerId}`);
61
- const instance = this.#strategyInstanceMap.get(info.key);
62
- if (instance) {
63
- instance.onJobFinish(info);
64
- }
65
- debug('onJobFinish', info);
66
- }
67
- /**
68
- * start schedule
69
- */
70
- async start() {
71
- debug('start');
72
- this.closed = false;
73
- for (const instance of this.#strategyInstanceMap.values()) {
74
- instance.start();
75
- }
76
- }
77
- async close() {
78
- this.closed = true;
79
- for (const instance of this.#strategyInstanceMap.values()) {
80
- await instance.close();
81
- }
82
- debug('close');
83
- }
84
- }
85
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3NjaGVkdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFLckMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBSWxELE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0FBRXBELE1BQU0sT0FBTyxTQUFTO0lBQ3BCLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFFZixNQUFNLENBQVE7SUFDZCxPQUFPLENBQVk7SUFDbkIsaUJBQWlCLEdBQUcsSUFBSSxHQUFHLEVBQStCLENBQUM7SUFDM0Qsb0JBQW9CLEdBQUcsSUFBSSxHQUFHLEVBQXdCLENBQUM7SUFFdkQsWUFBWSxLQUFZO1FBQ3RCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsR0FBRyxDQUFDLElBQVksRUFBRSxHQUF3QjtRQUN4QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN0QyxLQUFLLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxJQUFJO1FBQ1IsTUFBTSxhQUFhLEdBQUcsTUFBTSxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RELEtBQUssTUFBTSxZQUFZLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQ3hELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN0QyxDQUFDO0lBQ0gsQ0FBQztJQUVELGdCQUFnQixDQUFDLFlBQTZCO1FBQzVDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsWUFBWSxDQUFDO1FBQ3ZDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDM0IsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDckIsT0FBTztRQUNULENBQUM7UUFFRCx3QkFBd0I7UUFDeEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxJQUFLLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDZCxNQUFNLEdBQUcsR0FBRyxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsSUFBSSxrQkFBa0IsQ0FBQyxDQUFDO1lBQ2hFLEdBQUcsQ0FBQyxJQUFJLEdBQUcsa0JBQWtCLENBQUM7WUFDOUIsTUFBTSxHQUFHLENBQUM7UUFDWixDQUFDO1FBRUQsbUNBQW1DO1FBQ25DLE1BQU0sUUFBUSxHQUFHLElBQUksUUFBUSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzdDLEtBQUssQ0FBQyxnREFBZ0QsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxHQUFXO1FBQzVCLEtBQUssQ0FBQyw0QkFBNEIsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN6QyxPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxXQUFXLENBQUMsSUFBd0I7UUFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxJQUFJLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLCtDQUErQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUMvRyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6RCxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2IsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QixDQUFDO1FBQ0QsS0FBSyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsS0FBSztRQUNULEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLEtBQUssTUFBTSxRQUFRLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7WUFDMUQsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ25CLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLEtBQUs7UUFDVCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixLQUFLLE1BQU0sUUFBUSxJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1lBQzFELE1BQU0sUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3pCLENBQUM7UUFDRCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakIsQ0FBQztDQUNGIn0=
2
+ import { debuglog } from "node:util";
3
+
4
+ //#region src/lib/schedule.ts
5
+ const debug = debuglog("egg/schedule/lib/schedule");
6
+ var Scheduler = class {
7
+ closed = false;
8
+ #agent;
9
+ #logger;
10
+ #strategyClassMap = /* @__PURE__ */ new Map();
11
+ #strategyInstanceMap = /* @__PURE__ */ new Map();
12
+ constructor(agent) {
13
+ this.#agent = agent;
14
+ this.#logger = agent.getLogger("scheduleLogger");
15
+ }
16
+ /**
17
+ * register a custom Schedule Strategy
18
+ * @param {String} type - strategy type
19
+ * @param {Strategy} clz - Strategy class
20
+ */
21
+ use(type, clz) {
22
+ this.#strategyClassMap.set(type, clz);
23
+ debug("use type: %o", type);
24
+ }
25
+ /**
26
+ * load all schedule jobs, then initialize and register special strategy
27
+ */
28
+ async init() {
29
+ const scheduleItems = await loadSchedule(this.#agent);
30
+ for (const scheduleItem of Object.values(scheduleItems)) this.registerSchedule(scheduleItem);
31
+ }
32
+ registerSchedule(scheduleItem) {
33
+ const { key, schedule } = scheduleItem;
34
+ const type = schedule.type;
35
+ if (schedule.disable) return;
36
+ const Strategy = this.#strategyClassMap.get(type);
37
+ if (!Strategy) {
38
+ const err = /* @__PURE__ */ new Error(`schedule type [${type}] is not defined`);
39
+ err.name = "EggScheduleError";
40
+ throw err;
41
+ }
42
+ const instance = new Strategy(schedule, this.#agent, key);
43
+ this.#strategyInstanceMap.set(key, instance);
44
+ debug("registerSchedule type: %o, config: %o, key: %o", type, schedule, key);
45
+ }
46
+ unregisterSchedule(key) {
47
+ debug("unregisterSchedule key: %o", key);
48
+ return this.#strategyInstanceMap.delete(key);
49
+ }
50
+ /**
51
+ * job finish event handler
52
+ *
53
+ * @param {Object} info - { id, key, success, message, workerId }
54
+ */
55
+ onJobFinish(info) {
56
+ this.#logger.debug(`[Job#${info.id}] ${info.key} finish event received by agent from worker#${info.workerId}`);
57
+ const instance = this.#strategyInstanceMap.get(info.key);
58
+ if (instance) instance.onJobFinish(info);
59
+ debug("onJobFinish", info);
60
+ }
61
+ /**
62
+ * start schedule
63
+ */
64
+ async start() {
65
+ debug("start");
66
+ this.closed = false;
67
+ for (const instance of this.#strategyInstanceMap.values()) instance.start();
68
+ }
69
+ async close() {
70
+ this.closed = true;
71
+ for (const instance of this.#strategyInstanceMap.values()) await instance.close();
72
+ debug("close");
73
+ }
74
+ };
75
+
76
+ //#endregion
77
+ export { Scheduler };
@@ -1,10 +1,14 @@
1
- import type Application from '../app/extend/application.ts';
2
- import type { EggScheduleItem } from './types.ts';
3
- export declare class ScheduleWorker {
4
- #private;
5
- scheduleItems: Record<string, EggScheduleItem>;
6
- constructor(app: Application);
7
- init(): Promise<void>;
8
- registerSchedule(scheduleItem: EggScheduleItem): void;
9
- unregisterSchedule(key: string): void;
1
+ import { EggScheduleItem } from "./types.js";
2
+ import ScheduleApplication from "../app/extend/application.js";
3
+
4
+ //#region src/lib/schedule_worker.d.ts
5
+ declare class ScheduleWorker {
6
+ #private;
7
+ scheduleItems: Record<string, EggScheduleItem>;
8
+ constructor(app: ScheduleApplication);
9
+ init(): Promise<void>;
10
+ registerSchedule(scheduleItem: EggScheduleItem): void;
11
+ unregisterSchedule(key: string): void;
10
12
  }
13
+ //#endregion
14
+ export { ScheduleWorker };
@@ -1,21 +1,23 @@
1
1
  import { loadSchedule } from "./load_schedule.js";
2
- export class ScheduleWorker {
3
- #app;
4
- scheduleItems = {};
5
- constructor(app) {
6
- this.#app = app;
7
- }
8
- async init() {
9
- const schedules = await loadSchedule(this.#app);
10
- for (const key in schedules) {
11
- this.scheduleItems[key] = schedules[key];
12
- }
13
- }
14
- registerSchedule(scheduleItem) {
15
- this.scheduleItems[scheduleItem.key] = scheduleItem;
16
- }
17
- unregisterSchedule(key) {
18
- delete this.scheduleItems[key];
19
- }
20
- }
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVfd29ya2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9zY2hlZHVsZV93b3JrZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBR2xELE1BQU0sT0FBTyxjQUFjO0lBQ3pCLElBQUksQ0FBYztJQUNsQixhQUFhLEdBQW9DLEVBQUUsQ0FBQztJQUVwRCxZQUFZLEdBQWdCO1FBQzFCLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0lBQ2xCLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBSTtRQUNSLE1BQU0sU0FBUyxHQUFHLE1BQU0sWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoRCxLQUFLLE1BQU0sR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNDLENBQUM7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsWUFBNkI7UUFDNUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsWUFBWSxDQUFDO0lBQ3RELENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxHQUFXO1FBQzVCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqQyxDQUFDO0NBQ0YifQ==
2
+
3
+ //#region src/lib/schedule_worker.ts
4
+ var ScheduleWorker = class {
5
+ #app;
6
+ scheduleItems = {};
7
+ constructor(app) {
8
+ this.#app = app;
9
+ }
10
+ async init() {
11
+ const schedules = await loadSchedule(this.#app);
12
+ for (const key in schedules) this.scheduleItems[key] = schedules[key];
13
+ }
14
+ registerSchedule(scheduleItem) {
15
+ this.scheduleItems[scheduleItem.key] = scheduleItem;
16
+ }
17
+ unregisterSchedule(key) {
18
+ delete this.scheduleItems[key];
19
+ }
20
+ };
21
+
22
+ //#endregion
23
+ export { ScheduleWorker };
@@ -1,4 +1,8 @@
1
- import { TimerStrategy } from './timer.ts';
2
- export declare class AllStrategy extends TimerStrategy {
3
- handler(): void;
1
+ import { TimerStrategy } from "./timer.js";
2
+
3
+ //#region src/lib/strategy/all.d.ts
4
+ declare class AllStrategy extends TimerStrategy {
5
+ handler(): void;
4
6
  }
7
+ //#endregion
8
+ export { AllStrategy };
@@ -1,7 +1,11 @@
1
1
  import { TimerStrategy } from "./timer.js";
2
- export class AllStrategy extends TimerStrategy {
3
- handler() {
4
- this.sendAll();
5
- }
6
- }
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9zdHJhdGVneS9hbGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUUzQyxNQUFNLE9BQU8sV0FBWSxTQUFRLGFBQWE7SUFDNUMsT0FBTztRQUNMLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNqQixDQUFDO0NBQ0YifQ==
2
+
3
+ //#region src/lib/strategy/all.ts
4
+ var AllStrategy = class extends TimerStrategy {
5
+ handler() {
6
+ this.sendAll();
7
+ }
8
+ };
9
+
10
+ //#endregion
11
+ export { AllStrategy };
@@ -1,32 +1,36 @@
1
- import type { EggLogger } from 'egg';
2
- import type Agent from '../../app/extend/agent.ts';
3
- import type { EggScheduleConfig } from '../../config/config.default.ts';
4
- import type { EggScheduleJobInfo } from '../types.ts';
5
- export declare class BaseStrategy {
6
- protected agent: Agent;
7
- protected scheduleConfig: EggScheduleConfig;
8
- protected key: string;
9
- protected logger: EggLogger;
10
- protected closed: boolean;
11
- count: number;
12
- constructor(scheduleConfig: EggScheduleConfig, agent: Agent, key: string);
13
- /** keep compatibility */
14
- get schedule(): EggScheduleConfig;
15
- start(): Promise<void>;
16
- close(): Promise<void>;
17
- onJobStart(_info: EggScheduleJobInfo): void;
18
- onJobFinish(_info: EggScheduleJobInfo): void;
19
- /**
20
- * trigger one worker
21
- *
22
- * @param {...any} args - pass to job task
23
- */
24
- sendOne(...args: any[]): void;
25
- /**
26
- * trigger all worker
27
- *
28
- * @param {...any} args - pass to job task
29
- */
30
- sendAll(...args: any[]): void;
31
- getSeqId(): string;
1
+ import { EggScheduleConfig } from "../../config/config.default.js";
2
+ import { EggScheduleJobInfo } from "../types.js";
3
+ import ScheduleAgent from "../../app/extend/agent.js";
4
+ import { EggLogger } from "egg";
5
+
6
+ //#region src/lib/strategy/base.d.ts
7
+ declare class BaseStrategy {
8
+ protected agent: ScheduleAgent;
9
+ protected scheduleConfig: EggScheduleConfig;
10
+ protected key: string;
11
+ protected logger: EggLogger;
12
+ protected closed: boolean;
13
+ count: number;
14
+ constructor(scheduleConfig: EggScheduleConfig, agent: ScheduleAgent, key: string);
15
+ /** keep compatibility */
16
+ get schedule(): EggScheduleConfig;
17
+ start(): Promise<void>;
18
+ close(): Promise<void>;
19
+ onJobStart(_info: EggScheduleJobInfo): void;
20
+ onJobFinish(_info: EggScheduleJobInfo): void;
21
+ /**
22
+ * trigger one worker
23
+ *
24
+ * @param {...any} args - pass to job task
25
+ */
26
+ sendOne(...args: any[]): void;
27
+ /**
28
+ * trigger all worker
29
+ *
30
+ * @param {...any} args - pass to job task
31
+ */
32
+ sendAll(...args: any[]): void;
33
+ getSeqId(): string;
32
34
  }
35
+ //#endregion
36
+ export { BaseStrategy };