@eggjs/schedule-plugin 4.0.0-beta.0
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/LICENSE +21 -0
- package/README.md +31 -0
- package/dist/agent.d.ts +7 -0
- package/dist/agent.js +29 -0
- package/dist/app.d.ts +10 -0
- package/dist/app.js +24 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +2 -0
- package/dist/lib/EggScheduleAdapter.d.ts +5 -0
- package/dist/lib/EggScheduleAdapter.js +15 -0
- package/dist/lib/EggScheduleMetadataConvertor.d.ts +10 -0
- package/dist/lib/EggScheduleMetadataConvertor.js +16 -0
- package/dist/lib/SchedulePrototypeHook.d.ts +5 -0
- package/dist/lib/SchedulePrototypeHook.js +14 -0
- package/dist/lib/ScheduleSubscriberRegister.d.ts +8 -0
- package/dist/lib/ScheduleSubscriberRegister.js +27 -0
- package/dist/lib/ScheduleWorkerLoadUnitHook.d.ts +8 -0
- package/dist/lib/ScheduleWorkerLoadUnitHook.js +21 -0
- package/dist/lib/ScheduleWorkerRegister.d.ts +8 -0
- package/dist/lib/ScheduleWorkerRegister.js +25 -0
- package/dist/types.d.ts +1 -0
- package/dist/types.js +2 -0
- package/package.json +86 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2017-present Alibaba Group Holding Limited and other contributors.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# @eggjs/tegg-schedule-plugin
|
|
2
|
+
|
|
3
|
+
[![NPM version][npm-image]][npm-url]
|
|
4
|
+
[![Known Vulnerabilities][snyk-image]][snyk-url]
|
|
5
|
+
[![npm download][download-image]][download-url]
|
|
6
|
+
[](https://nodejs.org/en/download/)
|
|
7
|
+
|
|
8
|
+
[npm-image]: https://img.shields.io/npm/v/@eggjs/tegg-schedule-plugin.svg?style=flat-square
|
|
9
|
+
[npm-url]: https://npmjs.org/package/@eggjs/tegg-schedule-plugin
|
|
10
|
+
[snyk-image]: https://snyk.io/test/npm/@eggjs/tegg-schedule-plugin/badge.svg?style=flat-square
|
|
11
|
+
[snyk-url]: https://snyk.io/test/npm/@eggjs/tegg-schedule-plugin
|
|
12
|
+
[download-image]: https://img.shields.io/npm/dm/@eggjs/tegg-schedule-plugin.svg?style=flat-square
|
|
13
|
+
[download-url]: https://npmjs.org/package/@eggjs/tegg-schedule-plugin
|
|
14
|
+
|
|
15
|
+
使用注解的方式来开发 egg 中的 schedule
|
|
16
|
+
|
|
17
|
+
## Install
|
|
18
|
+
|
|
19
|
+
```shell
|
|
20
|
+
npm i --save @eggjs/tegg-schedule-plugin
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Config
|
|
24
|
+
|
|
25
|
+
```js
|
|
26
|
+
// config/plugin.js
|
|
27
|
+
exports.teggSchedule = {
|
|
28
|
+
package: '@eggjs/tegg-schedule-plugin',
|
|
29
|
+
enable: true,
|
|
30
|
+
};
|
|
31
|
+
```
|
package/dist/agent.d.ts
ADDED
package/dist/agent.js
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { LoaderFactory } from '@eggjs/tegg-loader';
|
|
2
|
+
import { EggLoadUnitType } from '@eggjs/metadata';
|
|
3
|
+
import { ScheduleInfoUtil, ScheduleMetaBuilder } from '@eggjs/schedule-decorator';
|
|
4
|
+
import { ScheduleSubscriberRegister } from "./lib/ScheduleSubscriberRegister.js";
|
|
5
|
+
export default class ScheduleAppBootHook {
|
|
6
|
+
agent;
|
|
7
|
+
scheduleSubscriberRegister;
|
|
8
|
+
constructor(agent) {
|
|
9
|
+
this.agent = agent;
|
|
10
|
+
this.scheduleSubscriberRegister = new ScheduleSubscriberRegister(this.agent);
|
|
11
|
+
}
|
|
12
|
+
async didLoad() {
|
|
13
|
+
// FIXME: tegg use lots singleton, in mm.app test case, agent/app in one process
|
|
14
|
+
// if use start tegg in agent, the app will use the same singleton
|
|
15
|
+
// so we should refactor tegg to not use singleton.
|
|
16
|
+
for (const moduleConfig of this.agent.moduleReferences) {
|
|
17
|
+
const loader = LoaderFactory.createLoader(moduleConfig.path, EggLoadUnitType.MODULE);
|
|
18
|
+
const clazzList = await loader.load();
|
|
19
|
+
for (const clazz of clazzList) {
|
|
20
|
+
if (ScheduleInfoUtil.isSchedule(clazz)) {
|
|
21
|
+
const builder = new ScheduleMetaBuilder(clazz);
|
|
22
|
+
const metadata = builder.build();
|
|
23
|
+
this.scheduleSubscriberRegister.register(clazz, metadata);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYWdlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVsRixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUVqRixNQUFNLENBQUMsT0FBTyxPQUFPLG1CQUFtQjtJQUNyQixLQUFLLENBQVE7SUFDYiwwQkFBMEIsQ0FBNkI7SUFFeEUsWUFBWSxLQUFZO1FBQ3RCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQywwQkFBMEIsR0FBRyxJQUFJLDBCQUEwQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQU87UUFDWCxnRkFBZ0Y7UUFDaEYsa0VBQWtFO1FBQ2xFLG1EQUFtRDtRQUNuRCxLQUFLLE1BQU0sWUFBWSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN2RCxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3JGLE1BQU0sU0FBUyxHQUFHLE1BQU0sTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3RDLEtBQUssTUFBTSxLQUFLLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQzlCLElBQUksZ0JBQWdCLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQ3ZDLE1BQU0sT0FBTyxHQUFHLElBQUksbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQy9DLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDakMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQzVELENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7Q0FDRiJ9
|
package/dist/app.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Application, ILifecycleBoot } from 'egg';
|
|
2
|
+
export default class ScheduleAppBootHook implements ILifecycleBoot {
|
|
3
|
+
private readonly app;
|
|
4
|
+
private readonly scheduleWorkerRegister;
|
|
5
|
+
private readonly scheduleWorkerLoadUnitHook;
|
|
6
|
+
private readonly schedulePrototypeHook;
|
|
7
|
+
constructor(app: Application);
|
|
8
|
+
configWillLoad(): void;
|
|
9
|
+
beforeClose(): Promise<void>;
|
|
10
|
+
}
|
package/dist/app.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { ScheduleWorkerRegister } from "./lib/ScheduleWorkerRegister.js";
|
|
2
|
+
import { ScheduleWorkerLoadUnitHook } from "./lib/ScheduleWorkerLoadUnitHook.js";
|
|
3
|
+
import { SchedulePrototypeHook } from "./lib/SchedulePrototypeHook.js";
|
|
4
|
+
export default class ScheduleAppBootHook {
|
|
5
|
+
app;
|
|
6
|
+
scheduleWorkerRegister;
|
|
7
|
+
scheduleWorkerLoadUnitHook;
|
|
8
|
+
schedulePrototypeHook;
|
|
9
|
+
constructor(app) {
|
|
10
|
+
this.app = app;
|
|
11
|
+
this.scheduleWorkerRegister = new ScheduleWorkerRegister(this.app);
|
|
12
|
+
this.scheduleWorkerLoadUnitHook = new ScheduleWorkerLoadUnitHook(this.scheduleWorkerRegister);
|
|
13
|
+
this.schedulePrototypeHook = new SchedulePrototypeHook();
|
|
14
|
+
}
|
|
15
|
+
configWillLoad() {
|
|
16
|
+
this.app.loadUnitLifecycleUtil.registerLifecycle(this.scheduleWorkerLoadUnitHook);
|
|
17
|
+
this.app.eggPrototypeLifecycleUtil.registerLifecycle(this.schedulePrototypeHook);
|
|
18
|
+
}
|
|
19
|
+
async beforeClose() {
|
|
20
|
+
this.app.loadUnitLifecycleUtil.deleteLifecycle(this.scheduleWorkerLoadUnitHook);
|
|
21
|
+
this.app.eggPrototypeLifecycleUtil.deleteLifecycle(this.schedulePrototypeHook);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2FwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNqRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV2RSxNQUFNLENBQUMsT0FBTyxPQUFPLG1CQUFtQjtJQUNyQixHQUFHLENBQWM7SUFDakIsc0JBQXNCLENBQXlCO0lBQy9DLDBCQUEwQixDQUE2QjtJQUN2RCxxQkFBcUIsQ0FBd0I7SUFFOUQsWUFBWSxHQUFnQjtRQUMxQixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLHNCQUFzQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuRSxJQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSwwQkFBMEIsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUM5RixJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO0lBQzNELENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUNsRixJQUFJLENBQUMsR0FBRyxDQUFDLHlCQUF5QixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQ25GLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVztRQUNmLElBQUksQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQ2hGLElBQUksQ0FBQyxHQUFHLENBQUMseUJBQXlCLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7Q0FDRiJ9
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import './types.ts';
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Context } from 'egg';
|
|
2
|
+
import type { EggPrototype } from '@eggjs/metadata';
|
|
3
|
+
import type { ScheduleMetadata } from '@eggjs/schedule-decorator';
|
|
4
|
+
export type EggScheduleFunction = (ctx: Context, data: any) => Promise<any>;
|
|
5
|
+
export declare function eggScheduleAdapterFactory(proto: EggPrototype, metaData: ScheduleMetadata<object>): EggScheduleFunction;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ROOT_PROTO } from '@eggjs/module-common';
|
|
2
|
+
import { EggContainerFactory } from '@eggjs/tegg-runtime';
|
|
3
|
+
export function eggScheduleAdapterFactory(proto, metaData) {
|
|
4
|
+
return async function (ctx, data) {
|
|
5
|
+
ctx[ROOT_PROTO] = proto;
|
|
6
|
+
await ctx.beginModuleScope(async () => {
|
|
7
|
+
if (metaData.disable)
|
|
8
|
+
return;
|
|
9
|
+
const eggObject = await EggContainerFactory.getOrCreateEggObject(proto, proto.name);
|
|
10
|
+
const subscriber = eggObject.obj;
|
|
11
|
+
await subscriber.subscribe(data);
|
|
12
|
+
});
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWdnU2NoZWR1bGVBZGFwdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9FZ2dTY2hlZHVsZUFkYXB0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBSTFELE1BQU0sVUFBVSx5QkFBeUIsQ0FDdkMsS0FBbUIsRUFDbkIsUUFBa0M7SUFFbEMsT0FBTyxLQUFLLFdBQVcsR0FBWSxFQUFFLElBQVM7UUFDNUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUN4QixNQUFNLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLElBQUksRUFBRTtZQUNwQyxJQUFJLFFBQVEsQ0FBQyxPQUFPO2dCQUFFLE9BQU87WUFDN0IsTUFBTSxTQUFTLEdBQUcsTUFBTSxtQkFBbUIsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BGLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxHQUF5QixDQUFDO1lBQ3ZELE1BQU0sVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztBQUNKLENBQUMifQ==
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { EggAppConfig } from 'egg';
|
|
2
|
+
import { ScheduleMetadata } from '@eggjs/schedule-decorator';
|
|
3
|
+
type EggScheduleConfig = EggAppConfig['schedule'];
|
|
4
|
+
export declare class EggScheduleMetadataConvertor {
|
|
5
|
+
/**
|
|
6
|
+
* convert to egg schedule config
|
|
7
|
+
*/
|
|
8
|
+
static convertToEggSchedule(metadata: ScheduleMetadata<object>): EggScheduleConfig;
|
|
9
|
+
}
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ScheduleMetadata } from '@eggjs/schedule-decorator';
|
|
2
|
+
export class EggScheduleMetadataConvertor {
|
|
3
|
+
/**
|
|
4
|
+
* convert to egg schedule config
|
|
5
|
+
*/
|
|
6
|
+
static convertToEggSchedule(metadata) {
|
|
7
|
+
return {
|
|
8
|
+
...metadata.scheduleData,
|
|
9
|
+
type: metadata.type,
|
|
10
|
+
env: metadata.env,
|
|
11
|
+
disable: metadata.disable,
|
|
12
|
+
immediate: metadata.immediate,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWdnU2NoZWR1bGVNZXRhZGF0YUNvbnZlcnRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvRWdnU2NoZWR1bGVNZXRhZGF0YUNvbnZlcnRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUk3RCxNQUFNLE9BQU8sNEJBQTRCO0lBQ3ZDOztPQUVHO0lBQ0gsTUFBTSxDQUFDLG9CQUFvQixDQUFDLFFBQWtDO1FBQzVELE9BQU87WUFDTCxHQUFHLFFBQVEsQ0FBQyxZQUFZO1lBQ3hCLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSTtZQUNuQixHQUFHLEVBQUUsUUFBUSxDQUFDLEdBQUc7WUFDakIsT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPO1lBQ3pCLFNBQVMsRUFBRSxRQUFRLENBQUMsU0FBUztTQUNULENBQUM7SUFDekIsQ0FBQztDQUNGIn0=
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { LifecycleHook } from '@eggjs/lifecycle';
|
|
2
|
+
import type { EggPrototype, EggPrototypeLifecycleContext } from '@eggjs/metadata';
|
|
3
|
+
export declare class SchedulePrototypeHook implements LifecycleHook<EggPrototypeLifecycleContext, EggPrototype> {
|
|
4
|
+
postCreate(ctx: EggPrototypeLifecycleContext): Promise<void>;
|
|
5
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { ScheduleInfoUtil, ScheduleMetadataUtil, ScheduleMetaBuilder } from '@eggjs/schedule-decorator';
|
|
2
|
+
export class SchedulePrototypeHook {
|
|
3
|
+
async postCreate(ctx) {
|
|
4
|
+
if (!ScheduleInfoUtil.isSchedule(ctx.clazz)) {
|
|
5
|
+
return;
|
|
6
|
+
}
|
|
7
|
+
const builder = new ScheduleMetaBuilder(ctx.clazz);
|
|
8
|
+
const metadata = builder.build();
|
|
9
|
+
if (metadata) {
|
|
10
|
+
ScheduleMetadataUtil.setScheduleMetadata(ctx.clazz, metadata);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NoZWR1bGVQcm90b3R5cGVIb29rLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9TY2hlZHVsZVByb3RvdHlwZUhvb2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLG9CQUFvQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFeEcsTUFBTSxPQUFPLHFCQUFxQjtJQUNoQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQWlDO1FBQ2hELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDNUMsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLE9BQU8sR0FBRyxJQUFJLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuRCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDakMsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNiLG9CQUFvQixDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDaEUsQ0FBQztJQUNILENBQUM7Q0FDRiJ9
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Agent } from 'egg';
|
|
2
|
+
import { type EggProtoImplClass } from '@eggjs/core-decorator';
|
|
3
|
+
import { ScheduleMetadata } from '@eggjs/schedule-decorator';
|
|
4
|
+
export declare class ScheduleSubscriberRegister {
|
|
5
|
+
private readonly agent;
|
|
6
|
+
constructor(agent: Agent);
|
|
7
|
+
register(clazz: EggProtoImplClass<object>, metadata: ScheduleMetadata<object>): void;
|
|
8
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { debuglog } from 'node:util';
|
|
2
|
+
import { PrototypeUtil } from '@eggjs/core-decorator';
|
|
3
|
+
import { ScheduleMetadata } from '@eggjs/schedule-decorator';
|
|
4
|
+
import { EggScheduleMetadataConvertor } from "./EggScheduleMetadataConvertor.js";
|
|
5
|
+
const debug = debuglog('egg/tegg/plugin/schedule/ScheduleSubscriberRegister');
|
|
6
|
+
export class ScheduleSubscriberRegister {
|
|
7
|
+
agent;
|
|
8
|
+
constructor(agent) {
|
|
9
|
+
this.agent = agent;
|
|
10
|
+
}
|
|
11
|
+
register(clazz, metadata) {
|
|
12
|
+
// bind subscriber
|
|
13
|
+
const schedule = EggScheduleMetadataConvertor.convertToEggSchedule(metadata);
|
|
14
|
+
const path = PrototypeUtil.getFilePath(clazz);
|
|
15
|
+
if (!metadata.disable) {
|
|
16
|
+
this.agent.logger.info('[@eggjs/tegg-schedule-plugin]: register schedule %s', path);
|
|
17
|
+
}
|
|
18
|
+
// TODO: why disable is not used?
|
|
19
|
+
// @ts-expect-error: agent registerSchedule only need key and schedule config
|
|
20
|
+
this.agent.schedule.registerSchedule({
|
|
21
|
+
schedule,
|
|
22
|
+
key: path,
|
|
23
|
+
});
|
|
24
|
+
debug('register schedule %s, config: %j', path, schedule);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NoZWR1bGVTdWJzY3JpYmVyUmVnaXN0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL1NjaGVkdWxlU3Vic2NyaWJlclJlZ2lzdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFHckMsT0FBTyxFQUFFLGFBQWEsRUFBMEIsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUVqRixNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMscURBQXFELENBQUMsQ0FBQztBQUU5RSxNQUFNLE9BQU8sMEJBQTBCO0lBQ3BCLEtBQUssQ0FBUTtJQUU5QixZQUFZLEtBQVk7UUFDdEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFnQyxFQUFFLFFBQWtDO1FBQzNFLGtCQUFrQjtRQUNsQixNQUFNLFFBQVEsR0FBRyw0QkFBNEIsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3RSxNQUFNLElBQUksR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBVyxDQUFDO1FBQ3hELElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHFEQUFxRCxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3RGLENBQUM7UUFFRCxpQ0FBaUM7UUFDakMsNkVBQTZFO1FBQzdFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDO1lBQ25DLFFBQVE7WUFDUixHQUFHLEVBQUUsSUFBSTtTQUNWLENBQUMsQ0FBQztRQUNILEtBQUssQ0FBQyxrQ0FBa0MsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDNUQsQ0FBQztDQUNGIn0=
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { LifecycleHook } from '@eggjs/lifecycle';
|
|
2
|
+
import type { LoadUnit, LoadUnitLifecycleContext } from '@eggjs/metadata';
|
|
3
|
+
import type { ScheduleWorkerRegister } from './ScheduleWorkerRegister.ts';
|
|
4
|
+
export declare class ScheduleWorkerLoadUnitHook implements LifecycleHook<LoadUnitLifecycleContext, LoadUnit> {
|
|
5
|
+
private readonly scheduleWorkerRegister;
|
|
6
|
+
constructor(scheduleWorkerRegister: ScheduleWorkerRegister);
|
|
7
|
+
postCreate(_: LoadUnitLifecycleContext, obj: LoadUnit): Promise<void>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { IS_SCHEDULE, SCHEDULE_METADATA } from '@eggjs/schedule-decorator';
|
|
2
|
+
export class ScheduleWorkerLoadUnitHook {
|
|
3
|
+
scheduleWorkerRegister;
|
|
4
|
+
constructor(scheduleWorkerRegister) {
|
|
5
|
+
this.scheduleWorkerRegister = scheduleWorkerRegister;
|
|
6
|
+
}
|
|
7
|
+
async postCreate(_, obj) {
|
|
8
|
+
const iterator = obj.iterateEggPrototype();
|
|
9
|
+
for (const proto of iterator) {
|
|
10
|
+
if (!proto.getMetaData(IS_SCHEDULE)) {
|
|
11
|
+
continue;
|
|
12
|
+
}
|
|
13
|
+
const metadata = proto.getMetaData(SCHEDULE_METADATA);
|
|
14
|
+
if (!metadata) {
|
|
15
|
+
continue;
|
|
16
|
+
}
|
|
17
|
+
this.scheduleWorkerRegister.register(proto, metadata);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NoZWR1bGVXb3JrZXJMb2FkVW5pdEhvb2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL1NjaGVkdWxlV29ya2VyTG9hZFVuaXRIb29rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQXlCLE1BQU0sMkJBQTJCLENBQUM7QUFLbEcsTUFBTSxPQUFPLDBCQUEwQjtJQUNwQixzQkFBc0IsQ0FBeUI7SUFFaEUsWUFBWSxzQkFBOEM7UUFDeEQsSUFBSSxDQUFDLHNCQUFzQixHQUFHLHNCQUFzQixDQUFDO0lBQ3ZELENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUFDLENBQTJCLEVBQUUsR0FBYTtRQUN6RCxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMzQyxLQUFLLE1BQU0sS0FBSyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BDLFNBQVM7WUFDWCxDQUFDO1lBQ0QsTUFBTSxRQUFRLEdBQXlDLEtBQUssQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUM1RixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2QsU0FBUztZQUNYLENBQUM7WUFDRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN4RCxDQUFDO0lBQ0gsQ0FBQztDQUNGIn0=
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Application } from 'egg';
|
|
2
|
+
import type { EggPrototype } from '@eggjs/metadata';
|
|
3
|
+
import { ScheduleMetadata } from '@eggjs/schedule-decorator';
|
|
4
|
+
export declare class ScheduleWorkerRegister {
|
|
5
|
+
private readonly app;
|
|
6
|
+
constructor(app: Application);
|
|
7
|
+
register(proto: EggPrototype, metadata: ScheduleMetadata<object>): void;
|
|
8
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { debuglog } from 'node:util';
|
|
2
|
+
import { PrototypeUtil } from '@eggjs/core-decorator';
|
|
3
|
+
import { ScheduleMetadata } from '@eggjs/schedule-decorator';
|
|
4
|
+
import { eggScheduleAdapterFactory } from "./EggScheduleAdapter.js";
|
|
5
|
+
import { EggScheduleMetadataConvertor } from "./EggScheduleMetadataConvertor.js";
|
|
6
|
+
const debug = debuglog('egg/tegg/plugin/schedule/ScheduleWorkerRegister');
|
|
7
|
+
export class ScheduleWorkerRegister {
|
|
8
|
+
app;
|
|
9
|
+
constructor(app) {
|
|
10
|
+
this.app = app;
|
|
11
|
+
}
|
|
12
|
+
register(proto, metadata) {
|
|
13
|
+
const task = eggScheduleAdapterFactory(proto, metadata);
|
|
14
|
+
const schedule = EggScheduleMetadataConvertor.convertToEggSchedule(metadata);
|
|
15
|
+
const path = proto.getMetaData(PrototypeUtil.FILE_PATH);
|
|
16
|
+
this.app.scheduleWorker.registerSchedule({
|
|
17
|
+
schedule,
|
|
18
|
+
scheduleQueryString: '',
|
|
19
|
+
task,
|
|
20
|
+
key: path,
|
|
21
|
+
});
|
|
22
|
+
debug('register schedule %s, config: %j', path, schedule);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NoZWR1bGVXb3JrZXJSZWdpc3Rlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvU2NoZWR1bGVXb3JrZXJSZWdpc3Rlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBR3JDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUU3RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUVqRixNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsaURBQWlELENBQUMsQ0FBQztBQUUxRSxNQUFNLE9BQU8sc0JBQXNCO0lBQ2hCLEdBQUcsQ0FBYztJQUVsQyxZQUFZLEdBQWdCO1FBQzFCLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxRQUFRLENBQUMsS0FBbUIsRUFBRSxRQUFrQztRQUM5RCxNQUFNLElBQUksR0FBRyx5QkFBeUIsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDeEQsTUFBTSxRQUFRLEdBQUcsNEJBQTRCLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0UsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBUyxhQUFhLENBQUMsU0FBUyxDQUFXLENBQUM7UUFDMUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUM7WUFDdkMsUUFBUTtZQUNSLG1CQUFtQixFQUFFLEVBQUU7WUFDdkIsSUFBSTtZQUNKLEdBQUcsRUFBRSxJQUFJO1NBQ1YsQ0FBQyxDQUFDO1FBQ0gsS0FBSyxDQUFDLGtDQUFrQyxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM1RCxDQUFDO0NBQ0YifQ==
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import '@eggjs/tegg-plugin/types';
|
package/dist/types.js
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@eggjs/schedule-plugin",
|
|
3
|
+
"eggPlugin": {
|
|
4
|
+
"name": "teggSchedule",
|
|
5
|
+
"dependencies": [
|
|
6
|
+
"tegg",
|
|
7
|
+
"schedule"
|
|
8
|
+
]
|
|
9
|
+
},
|
|
10
|
+
"version": "4.0.0-beta.0",
|
|
11
|
+
"description": "schedule decorator plugin for egg",
|
|
12
|
+
"keywords": [
|
|
13
|
+
"egg",
|
|
14
|
+
"plugin",
|
|
15
|
+
"typescript",
|
|
16
|
+
"module",
|
|
17
|
+
"tegg",
|
|
18
|
+
"schedule"
|
|
19
|
+
],
|
|
20
|
+
"files": [
|
|
21
|
+
"dist"
|
|
22
|
+
],
|
|
23
|
+
"type": "module",
|
|
24
|
+
"exports": {
|
|
25
|
+
".": "./dist/index.js",
|
|
26
|
+
"./agent": "./dist/agent.js",
|
|
27
|
+
"./app": "./dist/app.js",
|
|
28
|
+
"./lib/EggScheduleAdapter": "./dist/lib/EggScheduleAdapter.js",
|
|
29
|
+
"./lib/EggScheduleMetadataConvertor": "./dist/lib/EggScheduleMetadataConvertor.js",
|
|
30
|
+
"./lib/SchedulePrototypeHook": "./dist/lib/SchedulePrototypeHook.js",
|
|
31
|
+
"./lib/ScheduleSubscriberRegister": "./dist/lib/ScheduleSubscriberRegister.js",
|
|
32
|
+
"./lib/ScheduleWorkerLoadUnitHook": "./dist/lib/ScheduleWorkerLoadUnitHook.js",
|
|
33
|
+
"./lib/ScheduleWorkerRegister": "./dist/lib/ScheduleWorkerRegister.js",
|
|
34
|
+
"./types": "./dist/types.js",
|
|
35
|
+
"./package.json": "./package.json"
|
|
36
|
+
},
|
|
37
|
+
"homepage": "https://github.com/eggjs/egg/tree/next/tegg/plugin/schedule",
|
|
38
|
+
"bugs": {
|
|
39
|
+
"url": "https://github.com/eggjs/egg/issues"
|
|
40
|
+
},
|
|
41
|
+
"repository": {
|
|
42
|
+
"type": "git",
|
|
43
|
+
"url": "git@github.com:eggjs/egg.git",
|
|
44
|
+
"directory": "tegg/plugin/schedule"
|
|
45
|
+
},
|
|
46
|
+
"engines": {
|
|
47
|
+
"node": ">=22.18.0"
|
|
48
|
+
},
|
|
49
|
+
"dependencies": {
|
|
50
|
+
"@eggjs/module-common": "4.0.0-beta.29",
|
|
51
|
+
"@eggjs/core-decorator": "4.0.0-beta.29",
|
|
52
|
+
"@eggjs/tegg-loader": "4.0.0-beta.29",
|
|
53
|
+
"@eggjs/lifecycle": "4.0.0-beta.29",
|
|
54
|
+
"@eggjs/metadata": "4.0.0-beta.29",
|
|
55
|
+
"@eggjs/tegg-runtime": "4.0.0-beta.29",
|
|
56
|
+
"@eggjs/schedule-decorator": "4.0.0-beta.29"
|
|
57
|
+
},
|
|
58
|
+
"peerDependencies": {
|
|
59
|
+
"@eggjs/tegg-plugin": "4.0.0-beta.29",
|
|
60
|
+
"egg": "4.1.0-beta.29"
|
|
61
|
+
},
|
|
62
|
+
"devDependencies": {
|
|
63
|
+
"@types/node": "^24.9.1",
|
|
64
|
+
"tsdown": "0.15.9",
|
|
65
|
+
"typescript": "^5.9.3",
|
|
66
|
+
"unplugin-unused": "^0.5.4",
|
|
67
|
+
"@eggjs/tegg": "4.0.0-beta.29",
|
|
68
|
+
"@eggjs/mock": "7.0.0-beta.29",
|
|
69
|
+
"@eggjs/tegg-common-util": "4.0.0-beta.29",
|
|
70
|
+
"@eggjs/tegg-plugin": "4.0.0-beta.29",
|
|
71
|
+
"egg": "4.1.0-beta.29",
|
|
72
|
+
"@eggjs/module-test-util": "4.0.0-beta.29",
|
|
73
|
+
"@eggjs/tegg-config": "4.0.0-beta.29"
|
|
74
|
+
},
|
|
75
|
+
"publishConfig": {
|
|
76
|
+
"access": "public"
|
|
77
|
+
},
|
|
78
|
+
"main": "./dist/index.js",
|
|
79
|
+
"module": "./dist/index.js",
|
|
80
|
+
"types": "./dist/index.d.ts",
|
|
81
|
+
"scripts": {
|
|
82
|
+
"clean": "rimraf dist",
|
|
83
|
+
"build": "tsdown && rimraf dist *.tsbuildinfo && tsc -p tsconfig.build.json",
|
|
84
|
+
"typecheck": "tsc --noEmit"
|
|
85
|
+
}
|
|
86
|
+
}
|