@tsed/agenda 7.0.0-alpha.2 → 7.0.0-beta.11
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/.mocharc.js +2 -2
- package/.nycrc +3 -2
- package/lib/{AgendaModule.js → cjs/AgendaModule.js} +9 -8
- package/lib/cjs/AgendaModule.js.map +1 -0
- package/lib/{constants/index.js → cjs/constants/constants.js} +1 -1
- package/lib/cjs/constants/constants.js.map +1 -0
- package/lib/{decorators → cjs/decorators}/agenda.js +2 -2
- package/lib/cjs/decorators/agenda.js.map +1 -0
- package/lib/{decorators → cjs/decorators}/define.js +0 -0
- package/lib/cjs/decorators/define.js.map +1 -0
- package/lib/{decorators → cjs/decorators}/every.js +1 -1
- package/lib/cjs/decorators/every.js.map +1 -0
- package/lib/cjs/index.js +15 -0
- package/lib/cjs/index.js.map +1 -0
- package/lib/{interfaces → cjs/interfaces}/AgendaStore.js +0 -0
- package/lib/cjs/interfaces/AgendaStore.js.map +1 -0
- package/lib/cjs/interfaces/interfaces.js +3 -0
- package/lib/cjs/interfaces/interfaces.js.map +1 -0
- package/lib/cjs/package.json +3 -0
- package/lib/{services → cjs/services}/AgendaFactory.js +1 -1
- package/lib/cjs/services/AgendaFactory.js.map +1 -0
- package/lib/esm/AgendaModule.js +79 -0
- package/lib/esm/AgendaModule.js.map +1 -0
- package/lib/esm/constants/constants.js +2 -0
- package/lib/esm/constants/constants.js.map +1 -0
- package/lib/esm/decorators/agenda.js +9 -0
- package/lib/esm/decorators/agenda.js.map +1 -0
- package/lib/esm/decorators/define.js +12 -0
- package/lib/esm/decorators/define.js.map +1 -0
- package/lib/esm/decorators/every.js +13 -0
- package/lib/esm/decorators/every.js.map +1 -0
- package/lib/esm/index.js +12 -0
- package/lib/esm/index.js.map +1 -0
- package/lib/esm/interfaces/AgendaStore.js +2 -0
- package/lib/esm/interfaces/AgendaStore.js.map +1 -0
- package/lib/esm/interfaces/interfaces.js +2 -0
- package/lib/esm/interfaces/interfaces.js.map +1 -0
- package/lib/esm/package.json +3 -0
- package/lib/esm/services/AgendaFactory.js +13 -0
- package/lib/esm/services/AgendaFactory.js.map +1 -0
- package/lib/{AgendaModule.d.ts → types/AgendaModule.d.ts} +0 -0
- package/lib/{constants/index.d.ts → types/constants/constants.d.ts} +0 -0
- package/lib/{decorators → types/decorators}/agenda.d.ts +0 -0
- package/lib/{decorators → types/decorators}/define.d.ts +0 -0
- package/lib/{decorators → types/decorators}/every.d.ts +0 -0
- package/lib/types/index.d.ts +11 -0
- package/lib/{interfaces → types/interfaces}/AgendaStore.d.ts +0 -0
- package/lib/{index.d.ts → types/interfaces/interfaces.d.ts} +0 -5
- package/lib/{services → types/services}/AgendaFactory.d.ts +0 -0
- package/package.json +21 -13
- package/readme.md +9 -12
- package/src/AgendaModule.ts +7 -3
- package/src/constants/{index.ts → constants.ts} +0 -0
- package/src/decorators/agenda.ts +1 -1
- package/src/index.ts +8 -16
- package/src/interfaces/interfaces.ts +14 -0
- package/tsconfig.compile.esm.json +12 -0
- package/lib/AgendaModule.js.map +0 -1
- package/lib/constants/index.js.map +0 -1
- package/lib/decorators/agenda.js.map +0 -1
- package/lib/decorators/define.js.map +0 -1
- package/lib/decorators/every.js.map +0 -1
- package/lib/decorators/index.d.ts +0 -3
- package/lib/decorators/index.js +0 -7
- package/lib/decorators/index.js.map +0 -1
- package/lib/index.js +0 -9
- package/lib/index.js.map +0 -1
- package/lib/interfaces/AgendaStore.js.map +0 -1
- package/lib/services/AgendaFactory.js.map +0 -1
- package/src/decorators/index.ts +0 -3
package/.mocharc.js
CHANGED
package/.nycrc
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
"src/**/*.ts"
|
|
4
4
|
],
|
|
5
5
|
"exclude": [
|
|
6
|
+
"**/*.spec.ts",
|
|
6
7
|
"**/*.d.ts",
|
|
7
8
|
"node_modules",
|
|
8
9
|
"**/interfaces/**",
|
|
@@ -20,7 +21,7 @@
|
|
|
20
21
|
],
|
|
21
22
|
"check-coverage": true,
|
|
22
23
|
"statements": 100,
|
|
23
|
-
"branches": 90.
|
|
24
|
-
"functions":
|
|
24
|
+
"branches": 90.62,
|
|
25
|
+
"functions": 100,
|
|
25
26
|
"lines": 100
|
|
26
27
|
}
|
|
@@ -4,7 +4,7 @@ exports.AgendaModule = void 0;
|
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const common_1 = require("@tsed/common");
|
|
6
6
|
const di_1 = require("@tsed/di");
|
|
7
|
-
const
|
|
7
|
+
const constants_1 = require("./constants/constants");
|
|
8
8
|
const AgendaFactory_1 = require("./services/AgendaFactory");
|
|
9
9
|
let AgendaModule = class AgendaModule {
|
|
10
10
|
async $afterListen() {
|
|
@@ -28,7 +28,7 @@ let AgendaModule = class AgendaModule {
|
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
30
|
getProviders() {
|
|
31
|
-
return
|
|
31
|
+
return this.injector.getProviders(constants_1.PROVIDER_TYPE_AGENDA);
|
|
32
32
|
}
|
|
33
33
|
addAgendaDefinitionsForProvider(provider) {
|
|
34
34
|
const store = provider.store.get("agenda");
|
|
@@ -37,7 +37,8 @@ let AgendaModule = class AgendaModule {
|
|
|
37
37
|
}
|
|
38
38
|
const jobsToDefine = Object.entries(store.define);
|
|
39
39
|
for (const [propertyKey, { name, ...options }] of jobsToDefine) {
|
|
40
|
-
const
|
|
40
|
+
const instance = this.injector.get(provider.token);
|
|
41
|
+
const jobProcessor = instance[propertyKey].bind(instance);
|
|
41
42
|
const jobName = this.getNameForJob(propertyKey, store.namespace, name);
|
|
42
43
|
this.agenda.define(jobName, options, jobProcessor);
|
|
43
44
|
}
|
|
@@ -59,23 +60,23 @@ let AgendaModule = class AgendaModule {
|
|
|
59
60
|
}
|
|
60
61
|
};
|
|
61
62
|
tslib_1.__decorate([
|
|
62
|
-
di_1.Inject(),
|
|
63
|
+
(0, di_1.Inject)(),
|
|
63
64
|
tslib_1.__metadata("design:type", common_1.Logger)
|
|
64
65
|
], AgendaModule.prototype, "logger", void 0);
|
|
65
66
|
tslib_1.__decorate([
|
|
66
|
-
di_1.Inject(),
|
|
67
|
+
(0, di_1.Inject)(),
|
|
67
68
|
tslib_1.__metadata("design:type", di_1.InjectorService)
|
|
68
69
|
], AgendaModule.prototype, "injector", void 0);
|
|
69
70
|
tslib_1.__decorate([
|
|
70
|
-
di_1.Inject(),
|
|
71
|
+
(0, di_1.Inject)(),
|
|
71
72
|
tslib_1.__metadata("design:type", AgendaFactory_1.AgendaService)
|
|
72
73
|
], AgendaModule.prototype, "agenda", void 0);
|
|
73
74
|
tslib_1.__decorate([
|
|
74
|
-
di_1.Constant("agenda.enabled", false),
|
|
75
|
+
(0, di_1.Constant)("agenda.enabled", false),
|
|
75
76
|
tslib_1.__metadata("design:type", Boolean)
|
|
76
77
|
], AgendaModule.prototype, "loadAgenda", void 0);
|
|
77
78
|
AgendaModule = tslib_1.__decorate([
|
|
78
|
-
di_1.Module()
|
|
79
|
+
(0, di_1.Module)()
|
|
79
80
|
], AgendaModule);
|
|
80
81
|
exports.AgendaModule = AgendaModule;
|
|
81
82
|
//# sourceMappingURL=AgendaModule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgendaModule.js","sourceRoot":"","sources":["../../src/AgendaModule.ts"],"names":[],"mappings":"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","sourcesContent":["import {AfterListen, Logger, OnDestroy} from \"@tsed/common\";\nimport {Constant, Inject, InjectorService, Module, Provider} from \"@tsed/di\";\nimport {Processor} from \"agenda\";\nimport {PROVIDER_TYPE_AGENDA} from \"./constants/constants\";\nimport {AgendaStore} from \"./interfaces/AgendaStore\";\nimport {AgendaService} from \"./services/AgendaFactory\";\n\n@Module()\nexport class AgendaModule implements OnDestroy, AfterListen {\n @Inject()\n protected logger: Logger;\n\n @Inject()\n protected injector: InjectorService;\n\n @Inject()\n protected agenda: AgendaService;\n\n @Constant(\"agenda.enabled\", false)\n private loadAgenda: boolean;\n\n async $afterListen(): Promise<any> {\n if (this.loadAgenda) {\n const providers = this.getProviders();\n providers.forEach((provider) => this.addAgendaDefinitionsForProvider(provider));\n\n this.logger.info(\"Agenda add definitions...\");\n await this.agenda.start();\n\n this.logger.info(\"Agenda add scheduled jobs...\");\n providers.forEach((provider) => this.scheduleJobsForProvider(provider));\n } else {\n this.logger.info(\"Agenda jobs disabled...\");\n }\n }\n\n async $onDestroy(): Promise<any> {\n if (this.loadAgenda) {\n await this.agenda.stop();\n await this.agenda.close({force: true});\n\n this.logger.info(\"Agenda jobs stopped...\");\n }\n }\n\n protected getProviders(): Provider<any>[] {\n return this.injector.getProviders(PROVIDER_TYPE_AGENDA);\n }\n\n protected addAgendaDefinitionsForProvider(provider: Provider): void {\n const store = provider.store.get<AgendaStore>(\"agenda\");\n\n if (!store.define) {\n return;\n }\n\n const jobsToDefine = Object.entries(store.define);\n\n for (const [propertyKey, {name, ...options}] of jobsToDefine) {\n const instance = this.injector.get(provider.token);\n\n const jobProcessor: Processor = instance[propertyKey].bind(instance) as Processor;\n const jobName = this.getNameForJob(propertyKey, store.namespace, name);\n this.agenda.define(jobName, options, jobProcessor);\n }\n }\n\n protected async scheduleJobsForProvider(provider: Provider<any>): Promise<void> {\n const store = provider.store.get<AgendaStore>(\"agenda\");\n if (!store.every) {\n return;\n }\n\n const jobsToSchedule = Object.entries(store.every);\n await Promise.all(\n jobsToSchedule.map(([propertyKey, {interval, name, ...options}]) => {\n const jobName = this.getNameForJob(propertyKey, store.namespace, name);\n return this.agenda.every(interval, jobName, {}, options);\n })\n );\n }\n\n protected getNameForJob(propertyKey: string, namespace?: string, customName?: string): string {\n const name = customName || propertyKey;\n return namespace ? `${namespace}.${name}` : name;\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/constants/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,oBAAoB,GAAG,sBAAsB,CAAC","sourcesContent":["export const PROVIDER_TYPE_AGENDA = \"PROVIDER_TYPE_AGENDA\";\n"]}
|
|
@@ -3,9 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.Agenda = void 0;
|
|
4
4
|
const core_1 = require("@tsed/core");
|
|
5
5
|
const di_1 = require("@tsed/di");
|
|
6
|
-
const constants_1 = require("../constants");
|
|
6
|
+
const constants_1 = require("../constants/constants");
|
|
7
7
|
function Agenda(options) {
|
|
8
|
-
return core_1.useDecorators(core_1.StoreMerge("agenda", { namespace: options === null || options === void 0 ? void 0 : options.namespace }), di_1.Injectable({
|
|
8
|
+
return (0, core_1.useDecorators)((0, core_1.StoreMerge)("agenda", { namespace: options === null || options === void 0 ? void 0 : options.namespace }), (0, di_1.Injectable)({
|
|
9
9
|
type: constants_1.PROVIDER_TYPE_AGENDA
|
|
10
10
|
}));
|
|
11
11
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agenda.js","sourceRoot":"","sources":["../../../src/decorators/agenda.ts"],"names":[],"mappings":";;;AAAA,qCAAqD;AACrD,iCAAoC;AAEpC,sDAA4D;AAiB5D,SAAgB,MAAM,CAAC,OAAuB;IAC5C,OAAO,IAAA,oBAAa,EAClB,IAAA,iBAAU,EAAC,QAAQ,EAAE,EAAC,SAAS,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,EAAC,CAAC,EACrD,IAAA,eAAU,EAAC;QACT,IAAI,EAAE,gCAAoB;KAC3B,CAAC,CACH,CAAC;AACJ,CAAC;AAPD,wBAOC","sourcesContent":["import {StoreMerge, useDecorators} from \"@tsed/core\";\nimport {Injectable} from \"@tsed/di\";\nimport {AgendaConfig} from \"agenda\";\nimport {PROVIDER_TYPE_AGENDA} from \"../constants/constants\";\n\ndeclare global {\n namespace TsED {\n interface Configuration {\n agenda?: {\n /** * Enable Agenda jobs. Default false. */\n enabled?: boolean;\n } & AgendaConfig;\n }\n }\n}\n\ninterface AgendaOptions {\n namespace?: string;\n}\n\nexport function Agenda(options?: AgendaOptions): ClassDecorator {\n return useDecorators(\n StoreMerge(\"agenda\", {namespace: options?.namespace}),\n Injectable({\n type: PROVIDER_TYPE_AGENDA\n })\n );\n}\n"]}
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"define.js","sourceRoot":"","sources":["../../../src/decorators/define.ts"],"names":[],"mappings":";;;AAAA,qCAAiC;AAGjC,SAAgB,MAAM,CAAC,UAAyB,EAAE;IAChD,OAAO,CAAC,MAAW,EAAE,WAAmB,EAAE,EAAE;QAC1C,MAAM,KAAK,GAAgB;YACzB,MAAM,EAAE;gBACN,CAAC,WAAW,CAAC,EAAE,OAAO;aACvB;SACF,CAAC;QAEF,YAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC,CAAC;AACJ,CAAC;AAVD,wBAUC","sourcesContent":["import {Store} from \"@tsed/core\";\nimport {AgendaStore, DefineOptions} from \"../interfaces/AgendaStore\";\n\nexport function Define(options: DefineOptions = {}): MethodDecorator {\n return (target: any, propertyKey: string) => {\n const store: AgendaStore = {\n define: {\n [propertyKey]: options\n }\n };\n\n Store.from(target).merge(\"agenda\", store);\n };\n}\n"]}
|
|
@@ -4,7 +4,7 @@ exports.Every = void 0;
|
|
|
4
4
|
const core_1 = require("@tsed/core");
|
|
5
5
|
const define_1 = require("./define");
|
|
6
6
|
function Every(interval, options = {}) {
|
|
7
|
-
return core_1.useDecorators(define_1.Define(options), (target, propertyKey) => {
|
|
7
|
+
return (0, core_1.useDecorators)((0, define_1.Define)(options), (target, propertyKey) => {
|
|
8
8
|
const store = {
|
|
9
9
|
every: {
|
|
10
10
|
[propertyKey]: { ...options, interval }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"every.js","sourceRoot":"","sources":["../../../src/decorators/every.ts"],"names":[],"mappings":";;;AAAA,qCAAgD;AAChD,qCAAgC;AAGhC,SAAgB,KAAK,CAAC,QAAgB,EAAE,UAAwB,EAAE;IAChE,OAAO,IAAA,oBAAa,EAAC,IAAA,eAAM,EAAC,OAAO,CAAC,EAAE,CAAC,MAAW,EAAE,WAAmB,EAAE,EAAE;QACzE,MAAM,KAAK,GAAgB;YACzB,KAAK,EAAE;gBACL,CAAC,WAAW,CAAC,EAAE,EAAC,GAAG,OAAO,EAAE,QAAQ,EAAC;aACtC;SACF,CAAC;QACF,YAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC;AATD,sBASC","sourcesContent":["import {Store, useDecorators} from \"@tsed/core\";\nimport {Define} from \"./define\";\nimport {AgendaStore, EveryOptions} from \"../interfaces/AgendaStore\";\n\nexport function Every(interval: string, options: EveryOptions = {}): MethodDecorator {\n return useDecorators(Define(options), (target: any, propertyKey: string) => {\n const store: AgendaStore = {\n every: {\n [propertyKey]: {...options, interval}\n }\n };\n Store.from(target).merge(\"agenda\", store);\n });\n}\n"]}
|
package/lib/cjs/index.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @file Automatically generated by barrelsby.
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const tslib_1 = require("tslib");
|
|
7
|
+
tslib_1.__exportStar(require("./AgendaModule"), exports);
|
|
8
|
+
tslib_1.__exportStar(require("./constants/constants"), exports);
|
|
9
|
+
tslib_1.__exportStar(require("./decorators/agenda"), exports);
|
|
10
|
+
tslib_1.__exportStar(require("./decorators/define"), exports);
|
|
11
|
+
tslib_1.__exportStar(require("./decorators/every"), exports);
|
|
12
|
+
tslib_1.__exportStar(require("./interfaces/AgendaStore"), exports);
|
|
13
|
+
tslib_1.__exportStar(require("./interfaces/interfaces"), exports);
|
|
14
|
+
tslib_1.__exportStar(require("./services/AgendaFactory"), exports);
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,yDAA+B;AAC/B,gEAAsC;AACtC,8DAAoC;AACpC,8DAAoC;AACpC,6DAAmC;AACnC,mEAAyC;AACzC,kEAAwC;AACxC,mEAAyC","sourcesContent":["/**\n * @file Automatically generated by barrelsby.\n */\n\nexport * from \"./AgendaModule\";\nexport * from \"./constants/constants\";\nexport * from \"./decorators/agenda\";\nexport * from \"./decorators/define\";\nexport * from \"./decorators/every\";\nexport * from \"./interfaces/AgendaStore\";\nexport * from \"./interfaces/interfaces\";\nexport * from \"./services/AgendaFactory\";\n"]}
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgendaStore.js","sourceRoot":"","sources":["../../../src/interfaces/AgendaStore.ts"],"names":[],"mappings":"","sourcesContent":["import {DefineOptions as AgendaDefineOptions, JobOptions} from \"agenda\";\n\nexport interface DefineOptions extends AgendaDefineOptions {\n name?: string;\n}\n\nexport type EveryOptions = JobOptions & DefineOptions;\n\nexport interface AgendaStore {\n namespace?: string;\n define?: {[propertyKey: string]: DefineOptions};\n every?: {[propertyKey: string]: EveryOptions & {interval: string}};\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../../src/interfaces/interfaces.ts"],"names":[],"mappings":"","sourcesContent":["import {AgendaConfig} from \"agenda\";\n\ndeclare global {\n namespace TsED {\n interface Configuration {\n agenda?: {\n /**\n * Enable Agenda jobs. Default false.\n */\n enabled?: boolean;\n } & AgendaConfig;\n }\n }\n}\n"]}
|
|
@@ -5,7 +5,7 @@ const di_1 = require("@tsed/di");
|
|
|
5
5
|
const agenda_1 = require("agenda");
|
|
6
6
|
// create Alias to avoid confusing import between Agenda from "agenda" and Agenda decorator
|
|
7
7
|
exports.AgendaService = agenda_1.Agenda;
|
|
8
|
-
di_1.registerProvider({
|
|
8
|
+
(0, di_1.registerProvider)({
|
|
9
9
|
provide: agenda_1.Agenda,
|
|
10
10
|
deps: [di_1.Configuration],
|
|
11
11
|
useFactory(settings) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgendaFactory.js","sourceRoot":"","sources":["../../../src/services/AgendaFactory.ts"],"names":[],"mappings":";;;AAAA,iCAAyD;AACzD,mCAA4C;AAE5C,2FAA2F;AAC9E,QAAA,aAAa,GAAG,eAAM,CAAC;AAGpC,IAAA,qBAAgB,EAAC;IACf,OAAO,EAAE,eAAM;IACf,IAAI,EAAE,CAAC,kBAAa,CAAC;IACrB,UAAU,CAAC,QAAuB;QAChC,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAoC,QAAQ,EAAE,EAAC,OAAO,EAAE,KAAK,EAAC,CAAC,CAAC;QACzF,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,eAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9C,CAAC;CACF,CAAC,CAAC","sourcesContent":["import {Configuration, registerProvider} from \"@tsed/di\";\nimport {Agenda, AgendaConfig} from \"agenda\";\n\n// create Alias to avoid confusing import between Agenda from \"agenda\" and Agenda decorator\nexport const AgendaService = Agenda;\nexport type AgendaService = Agenda;\n\nregisterProvider({\n provide: Agenda,\n deps: [Configuration],\n useFactory(settings: Configuration) {\n const opts = settings.get<AgendaConfig & {enabled: boolean}>(\"agenda\", {enabled: false});\n return opts.enabled ? new Agenda(opts) : {};\n }\n});\n"]}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { __decorate, __metadata } from "tslib";
|
|
2
|
+
import { Logger } from "@tsed/common";
|
|
3
|
+
import { Constant, Inject, InjectorService, Module } from "@tsed/di";
|
|
4
|
+
import { PROVIDER_TYPE_AGENDA } from "./constants/constants.js";
|
|
5
|
+
import { AgendaService } from "./services/AgendaFactory.js";
|
|
6
|
+
let AgendaModule = class AgendaModule {
|
|
7
|
+
async $afterListen() {
|
|
8
|
+
if (this.loadAgenda) {
|
|
9
|
+
const providers = this.getProviders();
|
|
10
|
+
providers.forEach((provider) => this.addAgendaDefinitionsForProvider(provider));
|
|
11
|
+
this.logger.info("Agenda add definitions...");
|
|
12
|
+
await this.agenda.start();
|
|
13
|
+
this.logger.info("Agenda add scheduled jobs...");
|
|
14
|
+
providers.forEach((provider) => this.scheduleJobsForProvider(provider));
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
this.logger.info("Agenda jobs disabled...");
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
async $onDestroy() {
|
|
21
|
+
if (this.loadAgenda) {
|
|
22
|
+
await this.agenda.stop();
|
|
23
|
+
await this.agenda.close({ force: true });
|
|
24
|
+
this.logger.info("Agenda jobs stopped...");
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
getProviders() {
|
|
28
|
+
return this.injector.getProviders(PROVIDER_TYPE_AGENDA);
|
|
29
|
+
}
|
|
30
|
+
addAgendaDefinitionsForProvider(provider) {
|
|
31
|
+
const store = provider.store.get("agenda");
|
|
32
|
+
if (!store.define) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
const jobsToDefine = Object.entries(store.define);
|
|
36
|
+
for (const [propertyKey, { name, ...options }] of jobsToDefine) {
|
|
37
|
+
const instance = this.injector.get(provider.token);
|
|
38
|
+
const jobProcessor = instance[propertyKey].bind(instance);
|
|
39
|
+
const jobName = this.getNameForJob(propertyKey, store.namespace, name);
|
|
40
|
+
this.agenda.define(jobName, options, jobProcessor);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
async scheduleJobsForProvider(provider) {
|
|
44
|
+
const store = provider.store.get("agenda");
|
|
45
|
+
if (!store.every) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
const jobsToSchedule = Object.entries(store.every);
|
|
49
|
+
await Promise.all(jobsToSchedule.map(([propertyKey, { interval, name, ...options }]) => {
|
|
50
|
+
const jobName = this.getNameForJob(propertyKey, store.namespace, name);
|
|
51
|
+
return this.agenda.every(interval, jobName, {}, options);
|
|
52
|
+
}));
|
|
53
|
+
}
|
|
54
|
+
getNameForJob(propertyKey, namespace, customName) {
|
|
55
|
+
const name = customName || propertyKey;
|
|
56
|
+
return namespace ? `${namespace}.${name}` : name;
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
__decorate([
|
|
60
|
+
Inject(),
|
|
61
|
+
__metadata("design:type", Logger)
|
|
62
|
+
], AgendaModule.prototype, "logger", void 0);
|
|
63
|
+
__decorate([
|
|
64
|
+
Inject(),
|
|
65
|
+
__metadata("design:type", InjectorService)
|
|
66
|
+
], AgendaModule.prototype, "injector", void 0);
|
|
67
|
+
__decorate([
|
|
68
|
+
Inject(),
|
|
69
|
+
__metadata("design:type", AgendaService)
|
|
70
|
+
], AgendaModule.prototype, "agenda", void 0);
|
|
71
|
+
__decorate([
|
|
72
|
+
Constant("agenda.enabled", false),
|
|
73
|
+
__metadata("design:type", Boolean)
|
|
74
|
+
], AgendaModule.prototype, "loadAgenda", void 0);
|
|
75
|
+
AgendaModule = __decorate([
|
|
76
|
+
Module()
|
|
77
|
+
], AgendaModule);
|
|
78
|
+
export { AgendaModule };
|
|
79
|
+
//# sourceMappingURL=AgendaModule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgendaModule.js","sourceRoot":"","sources":["../../src/AgendaModule.ts"],"names":[],"mappings":"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","sourcesContent":["import {AfterListen, Logger, OnDestroy} from \"@tsed/common\";\nimport {Constant, Inject, InjectorService, Module, Provider} from \"@tsed/di\";\nimport {Processor} from \"agenda\";\nimport {PROVIDER_TYPE_AGENDA} from \"./constants/constants\";\nimport {AgendaStore} from \"./interfaces/AgendaStore\";\nimport {AgendaService} from \"./services/AgendaFactory\";\n\n@Module()\nexport class AgendaModule implements OnDestroy, AfterListen {\n @Inject()\n protected logger: Logger;\n\n @Inject()\n protected injector: InjectorService;\n\n @Inject()\n protected agenda: AgendaService;\n\n @Constant(\"agenda.enabled\", false)\n private loadAgenda: boolean;\n\n async $afterListen(): Promise<any> {\n if (this.loadAgenda) {\n const providers = this.getProviders();\n providers.forEach((provider) => this.addAgendaDefinitionsForProvider(provider));\n\n this.logger.info(\"Agenda add definitions...\");\n await this.agenda.start();\n\n this.logger.info(\"Agenda add scheduled jobs...\");\n providers.forEach((provider) => this.scheduleJobsForProvider(provider));\n } else {\n this.logger.info(\"Agenda jobs disabled...\");\n }\n }\n\n async $onDestroy(): Promise<any> {\n if (this.loadAgenda) {\n await this.agenda.stop();\n await this.agenda.close({force: true});\n\n this.logger.info(\"Agenda jobs stopped...\");\n }\n }\n\n protected getProviders(): Provider<any>[] {\n return this.injector.getProviders(PROVIDER_TYPE_AGENDA);\n }\n\n protected addAgendaDefinitionsForProvider(provider: Provider): void {\n const store = provider.store.get<AgendaStore>(\"agenda\");\n\n if (!store.define) {\n return;\n }\n\n const jobsToDefine = Object.entries(store.define);\n\n for (const [propertyKey, {name, ...options}] of jobsToDefine) {\n const instance = this.injector.get(provider.token);\n\n const jobProcessor: Processor = instance[propertyKey].bind(instance) as Processor;\n const jobName = this.getNameForJob(propertyKey, store.namespace, name);\n this.agenda.define(jobName, options, jobProcessor);\n }\n }\n\n protected async scheduleJobsForProvider(provider: Provider<any>): Promise<void> {\n const store = provider.store.get<AgendaStore>(\"agenda\");\n if (!store.every) {\n return;\n }\n\n const jobsToSchedule = Object.entries(store.every);\n await Promise.all(\n jobsToSchedule.map(([propertyKey, {interval, name, ...options}]) => {\n const jobName = this.getNameForJob(propertyKey, store.namespace, name);\n return this.agenda.every(interval, jobName, {}, options);\n })\n );\n }\n\n protected getNameForJob(propertyKey: string, namespace?: string, customName?: string): string {\n const name = customName || propertyKey;\n return namespace ? `${namespace}.${name}` : name;\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/constants/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,oBAAoB,GAAG,sBAAsB,CAAC","sourcesContent":["export const PROVIDER_TYPE_AGENDA = \"PROVIDER_TYPE_AGENDA\";\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { StoreMerge, useDecorators } from "@tsed/core";
|
|
2
|
+
import { Injectable } from "@tsed/di";
|
|
3
|
+
import { PROVIDER_TYPE_AGENDA } from "../constants/constants.js";
|
|
4
|
+
export function Agenda(options) {
|
|
5
|
+
return useDecorators(StoreMerge("agenda", { namespace: options === null || options === void 0 ? void 0 : options.namespace }), Injectable({
|
|
6
|
+
type: PROVIDER_TYPE_AGENDA
|
|
7
|
+
}));
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=agenda.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agenda.js","sourceRoot":"","sources":["../../../src/decorators/agenda.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAE,aAAa,EAAC,MAAM,YAAY,CAAC;AACrD,OAAO,EAAC,UAAU,EAAC,MAAM,UAAU,CAAC;AAEpC,OAAO,EAAC,oBAAoB,EAAC,MAAM,wBAAwB,CAAC;AAiB5D,MAAM,UAAU,MAAM,CAAC,OAAuB;IAC5C,OAAO,aAAa,CAClB,UAAU,CAAC,QAAQ,EAAE,EAAC,SAAS,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,EAAC,CAAC,EACrD,UAAU,CAAC;QACT,IAAI,EAAE,oBAAoB;KAC3B,CAAC,CACH,CAAC;AACJ,CAAC","sourcesContent":["import {StoreMerge, useDecorators} from \"@tsed/core\";\nimport {Injectable} from \"@tsed/di\";\nimport {AgendaConfig} from \"agenda\";\nimport {PROVIDER_TYPE_AGENDA} from \"../constants/constants\";\n\ndeclare global {\n namespace TsED {\n interface Configuration {\n agenda?: {\n /** * Enable Agenda jobs. Default false. */\n enabled?: boolean;\n } & AgendaConfig;\n }\n }\n}\n\ninterface AgendaOptions {\n namespace?: string;\n}\n\nexport function Agenda(options?: AgendaOptions): ClassDecorator {\n return useDecorators(\n StoreMerge(\"agenda\", {namespace: options?.namespace}),\n Injectable({\n type: PROVIDER_TYPE_AGENDA\n })\n );\n}\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Store } from "@tsed/core";
|
|
2
|
+
export function Define(options = {}) {
|
|
3
|
+
return (target, propertyKey) => {
|
|
4
|
+
const store = {
|
|
5
|
+
define: {
|
|
6
|
+
[propertyKey]: options
|
|
7
|
+
}
|
|
8
|
+
};
|
|
9
|
+
Store.from(target).merge("agenda", store);
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=define.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"define.js","sourceRoot":"","sources":["../../../src/decorators/define.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAC,MAAM,YAAY,CAAC;AAGjC,MAAM,UAAU,MAAM,CAAC,UAAyB,EAAE;IAChD,OAAO,CAAC,MAAW,EAAE,WAAmB,EAAE,EAAE;QAC1C,MAAM,KAAK,GAAgB;YACzB,MAAM,EAAE;gBACN,CAAC,WAAW,CAAC,EAAE,OAAO;aACvB;SACF,CAAC;QAEF,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import {Store} from \"@tsed/core\";\nimport {AgendaStore, DefineOptions} from \"../interfaces/AgendaStore\";\n\nexport function Define(options: DefineOptions = {}): MethodDecorator {\n return (target: any, propertyKey: string) => {\n const store: AgendaStore = {\n define: {\n [propertyKey]: options\n }\n };\n\n Store.from(target).merge(\"agenda\", store);\n };\n}\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Store, useDecorators } from "@tsed/core";
|
|
2
|
+
import { Define } from "./define.js";
|
|
3
|
+
export function Every(interval, options = {}) {
|
|
4
|
+
return useDecorators(Define(options), (target, propertyKey) => {
|
|
5
|
+
const store = {
|
|
6
|
+
every: {
|
|
7
|
+
[propertyKey]: { ...options, interval }
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
Store.from(target).merge("agenda", store);
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=every.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"every.js","sourceRoot":"","sources":["../../../src/decorators/every.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAE,aAAa,EAAC,MAAM,YAAY,CAAC;AAChD,OAAO,EAAC,MAAM,EAAC,MAAM,UAAU,CAAC;AAGhC,MAAM,UAAU,KAAK,CAAC,QAAgB,EAAE,UAAwB,EAAE;IAChE,OAAO,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,MAAW,EAAE,WAAmB,EAAE,EAAE;QACzE,MAAM,KAAK,GAAgB;YACzB,KAAK,EAAE;gBACL,CAAC,WAAW,CAAC,EAAE,EAAC,GAAG,OAAO,EAAE,QAAQ,EAAC;aACtC;SACF,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["import {Store, useDecorators} from \"@tsed/core\";\nimport {Define} from \"./define\";\nimport {AgendaStore, EveryOptions} from \"../interfaces/AgendaStore\";\n\nexport function Every(interval: string, options: EveryOptions = {}): MethodDecorator {\n return useDecorators(Define(options), (target: any, propertyKey: string) => {\n const store: AgendaStore = {\n every: {\n [propertyKey]: {...options, interval}\n }\n };\n Store.from(target).merge(\"agenda\", store);\n });\n}\n"]}
|
package/lib/esm/index.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Automatically generated by barrelsby.
|
|
3
|
+
*/
|
|
4
|
+
export * from "./AgendaModule.js";
|
|
5
|
+
export * from "./constants/constants.js";
|
|
6
|
+
export * from "./decorators/agenda.js";
|
|
7
|
+
export * from "./decorators/define.js";
|
|
8
|
+
export * from "./decorators/every.js";
|
|
9
|
+
export * from "./interfaces/AgendaStore.js";
|
|
10
|
+
export * from "./interfaces/interfaces.js";
|
|
11
|
+
export * from "./services/AgendaFactory.js";
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC","sourcesContent":["/**\n * @file Automatically generated by barrelsby.\n */\n\nexport * from \"./AgendaModule\";\nexport * from \"./constants/constants\";\nexport * from \"./decorators/agenda\";\nexport * from \"./decorators/define\";\nexport * from \"./decorators/every\";\nexport * from \"./interfaces/AgendaStore\";\nexport * from \"./interfaces/interfaces\";\nexport * from \"./services/AgendaFactory\";\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgendaStore.js","sourceRoot":"","sources":["../../../src/interfaces/AgendaStore.ts"],"names":[],"mappings":"","sourcesContent":["import {DefineOptions as AgendaDefineOptions, JobOptions} from \"agenda\";\n\nexport interface DefineOptions extends AgendaDefineOptions {\n name?: string;\n}\n\nexport type EveryOptions = JobOptions & DefineOptions;\n\nexport interface AgendaStore {\n namespace?: string;\n define?: {[propertyKey: string]: DefineOptions};\n every?: {[propertyKey: string]: EveryOptions & {interval: string}};\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../../src/interfaces/interfaces.ts"],"names":[],"mappings":"","sourcesContent":["import {AgendaConfig} from \"agenda\";\n\ndeclare global {\n namespace TsED {\n interface Configuration {\n agenda?: {\n /**\n * Enable Agenda jobs. Default false.\n */\n enabled?: boolean;\n } & AgendaConfig;\n }\n }\n}\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Configuration, registerProvider } from "@tsed/di";
|
|
2
|
+
import { Agenda } from "agenda";
|
|
3
|
+
// create Alias to avoid confusing import between Agenda from "agenda" and Agenda decorator
|
|
4
|
+
export const AgendaService = Agenda;
|
|
5
|
+
registerProvider({
|
|
6
|
+
provide: Agenda,
|
|
7
|
+
deps: [Configuration],
|
|
8
|
+
useFactory(settings) {
|
|
9
|
+
const opts = settings.get("agenda", { enabled: false });
|
|
10
|
+
return opts.enabled ? new Agenda(opts) : {};
|
|
11
|
+
}
|
|
12
|
+
});
|
|
13
|
+
//# sourceMappingURL=AgendaFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgendaFactory.js","sourceRoot":"","sources":["../../../src/services/AgendaFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAE,gBAAgB,EAAC,MAAM,UAAU,CAAC;AACzD,OAAO,EAAC,MAAM,EAAe,MAAM,QAAQ,CAAC;AAE5C,2FAA2F;AAC3F,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC;AAGpC,gBAAgB,CAAC;IACf,OAAO,EAAE,MAAM;IACf,IAAI,EAAE,CAAC,aAAa,CAAC;IACrB,UAAU,CAAC,QAAuB;QAChC,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAoC,QAAQ,EAAE,EAAC,OAAO,EAAE,KAAK,EAAC,CAAC,CAAC;QACzF,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9C,CAAC;CACF,CAAC,CAAC","sourcesContent":["import {Configuration, registerProvider} from \"@tsed/di\";\nimport {Agenda, AgendaConfig} from \"agenda\";\n\n// create Alias to avoid confusing import between Agenda from \"agenda\" and Agenda decorator\nexport const AgendaService = Agenda;\nexport type AgendaService = Agenda;\n\nregisterProvider({\n provide: Agenda,\n deps: [Configuration],\n useFactory(settings: Configuration) {\n const opts = settings.get<AgendaConfig & {enabled: boolean}>(\"agenda\", {enabled: false});\n return opts.enabled ? new Agenda(opts) : {};\n }\n});\n"]}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Automatically generated by barrelsby.
|
|
3
|
+
*/
|
|
4
|
+
export * from "./AgendaModule";
|
|
5
|
+
export * from "./constants/constants";
|
|
6
|
+
export * from "./decorators/agenda";
|
|
7
|
+
export * from "./decorators/define";
|
|
8
|
+
export * from "./decorators/every";
|
|
9
|
+
export * from "./interfaces/AgendaStore";
|
|
10
|
+
export * from "./interfaces/interfaces";
|
|
11
|
+
export * from "./services/AgendaFactory";
|
|
File without changes
|
|
File without changes
|
package/package.json
CHANGED
|
@@ -1,21 +1,32 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tsed/agenda",
|
|
3
|
-
"version": "7.0.0-
|
|
3
|
+
"version": "7.0.0-beta.11",
|
|
4
4
|
"description": "Agenda package for Ts.ED framework",
|
|
5
|
-
"
|
|
6
|
-
"
|
|
5
|
+
"source": "./src/index.ts",
|
|
6
|
+
"main": "./lib/cjs/index.js",
|
|
7
|
+
"module": "./lib/esm/index.js",
|
|
8
|
+
"typings": "./lib/types/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
"types": "./lib/types/index.d.ts",
|
|
11
|
+
"import": "./lib/esm/index.js",
|
|
12
|
+
"require": "./lib/cjs/index.js",
|
|
13
|
+
"default": "./lib/esm/index.js"
|
|
14
|
+
},
|
|
7
15
|
"scripts": {
|
|
8
|
-
"build": "
|
|
16
|
+
"build": "yarn barrels && yarn run build:esm && yarn run build:cjs",
|
|
17
|
+
"build:cjs": "tsc --build tsconfig.compile.json",
|
|
18
|
+
"build:esm": "tsc --build tsconfig.compile.esm.json",
|
|
19
|
+
"barrels": "yarn barrelsby --delete -d ./src -e \"\\.spec\\.ts\" -e \"__mock__\" -e \".benchmark.ts\"",
|
|
9
20
|
"test": "cross-env NODE_ENV=test nyc mocha"
|
|
10
21
|
},
|
|
11
22
|
"dependencies": {
|
|
12
|
-
"tslib": "2.
|
|
23
|
+
"tslib": "2.3.1"
|
|
13
24
|
},
|
|
14
25
|
"private": false,
|
|
15
26
|
"devDependencies": {
|
|
16
|
-
"@tsed/common": "7.0.0-
|
|
17
|
-
"@tsed/core": "7.0.0-
|
|
18
|
-
"@tsed/di": "7.0.0-
|
|
27
|
+
"@tsed/common": "7.0.0-beta.11",
|
|
28
|
+
"@tsed/core": "7.0.0-beta.11",
|
|
29
|
+
"@tsed/di": "7.0.0-beta.11",
|
|
19
30
|
"agenda": "^4.1.3"
|
|
20
31
|
},
|
|
21
32
|
"peerDependencies": {
|
|
@@ -25,10 +36,7 @@
|
|
|
25
36
|
"bugs": {
|
|
26
37
|
"url": "https://github.com/tsedio/tsed/issues"
|
|
27
38
|
},
|
|
28
|
-
"homepage": "https://github.com/tsedio/tsed/tree/
|
|
39
|
+
"homepage": "https://github.com/tsedio/tsed/tree/beta/packages/third-parties/agenda",
|
|
29
40
|
"author": "Romain Lenzotti",
|
|
30
|
-
"license": "MIT"
|
|
31
|
-
"publishConfig": {
|
|
32
|
-
"tag": "alpha"
|
|
33
|
-
}
|
|
41
|
+
"license": "MIT"
|
|
34
42
|
}
|
package/readme.md
CHANGED
|
@@ -59,16 +59,14 @@ const mongoConnectionString = "mongodb://127.0.0.1/agenda";
|
|
|
59
59
|
|
|
60
60
|
@Configuration({
|
|
61
61
|
agenda: {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
62
|
+
enabled: true, // Enable Agenda jobs for this instance.
|
|
63
|
+
// pass any options that you would normally pass to new Agenda(), e.g.
|
|
64
|
+
db: {
|
|
65
|
+
address: mongoConnectionString
|
|
66
|
+
}
|
|
67
67
|
}
|
|
68
68
|
})
|
|
69
|
-
export class Server {
|
|
70
|
-
|
|
71
|
-
}
|
|
69
|
+
export class Server {}
|
|
72
70
|
```
|
|
73
71
|
|
|
74
72
|
## Create a new Service
|
|
@@ -130,8 +128,8 @@ export class UsersService implements AfterRoutesInit {
|
|
|
130
128
|
// do something
|
|
131
129
|
// ...
|
|
132
130
|
// then schedule some jobs
|
|
133
|
-
await this.agenda.now("email.sendWelcomeEmail", {user})
|
|
134
|
-
await this.agenda.schedule("in 2 hours", "email.sendFollowUpEmail", {user})
|
|
131
|
+
await this.agenda.now("email.sendWelcomeEmail", {user});
|
|
132
|
+
await this.agenda.schedule("in 2 hours", "email.sendFollowUpEmail", {user});
|
|
135
133
|
|
|
136
134
|
return user;
|
|
137
135
|
}
|
|
@@ -139,18 +137,17 @@ export class UsersService implements AfterRoutesInit {
|
|
|
139
137
|
```
|
|
140
138
|
|
|
141
139
|
## Contributors
|
|
140
|
+
|
|
142
141
|
Please read [contributing guidelines here](https://tsed.io/CONTRIBUTING.html)
|
|
143
142
|
|
|
144
143
|
<a href="https://github.com/tsedio/ts-express-decorators/graphs/contributors"><img src="https://opencollective.com/tsed/contributors.svg?width=890" /></a>
|
|
145
144
|
|
|
146
|
-
|
|
147
145
|
## Backers
|
|
148
146
|
|
|
149
147
|
Thank you to all our backers! 🙏 [[Become a backer](https://opencollective.com/tsed#backer)]
|
|
150
148
|
|
|
151
149
|
<a href="https://opencollective.com/tsed#backers" target="_blank"><img src="https://opencollective.com/tsed/backers.svg?width=890"></a>
|
|
152
150
|
|
|
153
|
-
|
|
154
151
|
## Sponsors
|
|
155
152
|
|
|
156
153
|
Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [[Become a sponsor](https://opencollective.com/tsed#sponsor)]
|
package/src/AgendaModule.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {AfterListen, Logger, OnDestroy} from "@tsed/common";
|
|
2
2
|
import {Constant, Inject, InjectorService, Module, Provider} from "@tsed/di";
|
|
3
3
|
import {Processor} from "agenda";
|
|
4
|
-
import {PROVIDER_TYPE_AGENDA} from "./constants/
|
|
4
|
+
import {PROVIDER_TYPE_AGENDA} from "./constants/constants";
|
|
5
5
|
import {AgendaStore} from "./interfaces/AgendaStore";
|
|
6
6
|
import {AgendaService} from "./services/AgendaFactory";
|
|
7
7
|
|
|
@@ -44,18 +44,22 @@ export class AgendaModule implements OnDestroy, AfterListen {
|
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
protected getProviders(): Provider<any>[] {
|
|
47
|
-
return
|
|
47
|
+
return this.injector.getProviders(PROVIDER_TYPE_AGENDA);
|
|
48
48
|
}
|
|
49
49
|
|
|
50
50
|
protected addAgendaDefinitionsForProvider(provider: Provider): void {
|
|
51
51
|
const store = provider.store.get<AgendaStore>("agenda");
|
|
52
|
+
|
|
52
53
|
if (!store.define) {
|
|
53
54
|
return;
|
|
54
55
|
}
|
|
55
56
|
|
|
56
57
|
const jobsToDefine = Object.entries(store.define);
|
|
58
|
+
|
|
57
59
|
for (const [propertyKey, {name, ...options}] of jobsToDefine) {
|
|
58
|
-
const
|
|
60
|
+
const instance = this.injector.get(provider.token);
|
|
61
|
+
|
|
62
|
+
const jobProcessor: Processor = instance[propertyKey].bind(instance) as Processor;
|
|
59
63
|
const jobName = this.getNameForJob(propertyKey, store.namespace, name);
|
|
60
64
|
this.agenda.define(jobName, options, jobProcessor);
|
|
61
65
|
}
|
|
File without changes
|
package/src/decorators/agenda.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {StoreMerge, useDecorators} from "@tsed/core";
|
|
2
2
|
import {Injectable} from "@tsed/di";
|
|
3
3
|
import {AgendaConfig} from "agenda";
|
|
4
|
-
import {PROVIDER_TYPE_AGENDA} from "../constants";
|
|
4
|
+
import {PROVIDER_TYPE_AGENDA} from "../constants/constants";
|
|
5
5
|
|
|
6
6
|
declare global {
|
|
7
7
|
namespace TsED {
|
package/src/index.ts
CHANGED
|
@@ -1,20 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
namespace TsED {
|
|
5
|
-
interface Configuration {
|
|
6
|
-
agenda?: {
|
|
7
|
-
/**
|
|
8
|
-
* Enable Agenda jobs. Default false.
|
|
9
|
-
*/
|
|
10
|
-
enabled?: boolean;
|
|
11
|
-
} & AgendaConfig;
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* @file Automatically generated by barrelsby.
|
|
3
|
+
*/
|
|
15
4
|
|
|
16
5
|
export * from "./AgendaModule";
|
|
17
|
-
export * from "./constants";
|
|
18
|
-
export * from "./decorators";
|
|
6
|
+
export * from "./constants/constants";
|
|
7
|
+
export * from "./decorators/agenda";
|
|
8
|
+
export * from "./decorators/define";
|
|
9
|
+
export * from "./decorators/every";
|
|
19
10
|
export * from "./interfaces/AgendaStore";
|
|
11
|
+
export * from "./interfaces/interfaces";
|
|
20
12
|
export * from "./services/AgendaFactory";
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"extends": "./tsconfig.compile.json",
|
|
3
|
+
"compilerOptions": {
|
|
4
|
+
"baseUrl": ".",
|
|
5
|
+
"module": "ES2020",
|
|
6
|
+
"rootDir": "src",
|
|
7
|
+
"outDir": "./lib/esm",
|
|
8
|
+
"declaration": true,
|
|
9
|
+
"declarationDir": "./lib/types"
|
|
10
|
+
},
|
|
11
|
+
"exclude": ["node_modules", "test", "lib", "benchmark", "coverage", "spec", "**/*.benchmark.ts", "**/*.spec.ts", "keys", "jest.config.js"]
|
|
12
|
+
}
|
package/lib/AgendaModule.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AgendaModule.js","sourceRoot":"","sources":["../src/AgendaModule.ts"],"names":[],"mappings":"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","sourcesContent":["import {AfterListen, Logger, OnDestroy} from \"@tsed/common\";\nimport {Constant, Inject, InjectorService, Module, Provider} from \"@tsed/di\";\nimport {Processor} from \"agenda\";\nimport {PROVIDER_TYPE_AGENDA} from \"./constants/index\";\nimport {AgendaStore} from \"./interfaces/AgendaStore\";\nimport {AgendaService} from \"./services/AgendaFactory\";\n\n@Module()\nexport class AgendaModule implements OnDestroy, AfterListen {\n @Inject()\n protected logger: Logger;\n\n @Inject()\n protected injector: InjectorService;\n\n @Inject()\n protected agenda: AgendaService;\n\n @Constant(\"agenda.enabled\", false)\n private loadAgenda: boolean;\n\n async $afterListen(): Promise<any> {\n if (this.loadAgenda) {\n const providers = this.getProviders();\n providers.forEach((provider) => this.addAgendaDefinitionsForProvider(provider));\n\n this.logger.info(\"Agenda add definitions...\");\n await this.agenda.start();\n\n this.logger.info(\"Agenda add scheduled jobs...\");\n providers.forEach((provider) => this.scheduleJobsForProvider(provider));\n } else {\n this.logger.info(\"Agenda jobs disabled...\");\n }\n }\n\n async $onDestroy(): Promise<any> {\n if (this.loadAgenda) {\n await this.agenda.stop();\n await this.agenda.close({force: true});\n\n this.logger.info(\"Agenda jobs stopped...\");\n }\n }\n\n protected getProviders(): Provider<any>[] {\n return Array.from(this.injector.getProviders(PROVIDER_TYPE_AGENDA));\n }\n\n protected addAgendaDefinitionsForProvider(provider: Provider): void {\n const store = provider.store.get<AgendaStore>(\"agenda\");\n if (!store.define) {\n return;\n }\n\n const jobsToDefine = Object.entries(store.define);\n for (const [propertyKey, {name, ...options}] of jobsToDefine) {\n const jobProcessor: Processor = provider.instance[propertyKey].bind(provider.instance) as Processor;\n const jobName = this.getNameForJob(propertyKey, store.namespace, name);\n this.agenda.define(jobName, options, jobProcessor);\n }\n }\n\n protected async scheduleJobsForProvider(provider: Provider<any>): Promise<void> {\n const store = provider.store.get<AgendaStore>(\"agenda\");\n if (!store.every) {\n return;\n }\n\n const jobsToSchedule = Object.entries(store.every);\n await Promise.all(\n jobsToSchedule.map(([propertyKey, {interval, name, ...options}]) => {\n const jobName = this.getNameForJob(propertyKey, store.namespace, name);\n return this.agenda.every(interval, jobName, {}, options);\n })\n );\n }\n\n protected getNameForJob(propertyKey: string, namespace?: string, customName?: string): string {\n const name = customName || propertyKey;\n return namespace ? `${namespace}.${name}` : name;\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":";;;AAAa,QAAA,oBAAoB,GAAG,sBAAsB,CAAC","sourcesContent":["export const PROVIDER_TYPE_AGENDA = \"PROVIDER_TYPE_AGENDA\";\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agenda.js","sourceRoot":"","sources":["../../src/decorators/agenda.ts"],"names":[],"mappings":";;;AAAA,qCAAqD;AACrD,iCAAoC;AAEpC,4CAAkD;AAiBlD,SAAgB,MAAM,CAAC,OAAuB;IAC5C,OAAO,oBAAa,CAClB,iBAAU,CAAC,QAAQ,EAAE,EAAC,SAAS,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,EAAC,CAAC,EACrD,eAAU,CAAC;QACT,IAAI,EAAE,gCAAoB;KAC3B,CAAC,CACH,CAAC;AACJ,CAAC;AAPD,wBAOC","sourcesContent":["import {StoreMerge, useDecorators} from \"@tsed/core\";\nimport {Injectable} from \"@tsed/di\";\nimport {AgendaConfig} from \"agenda\";\nimport {PROVIDER_TYPE_AGENDA} from \"../constants\";\n\ndeclare global {\n namespace TsED {\n interface Configuration {\n agenda?: {\n /** * Enable Agenda jobs. Default false. */\n enabled?: boolean;\n } & AgendaConfig;\n }\n }\n}\n\ninterface AgendaOptions {\n namespace?: string;\n}\n\nexport function Agenda(options?: AgendaOptions): ClassDecorator {\n return useDecorators(\n StoreMerge(\"agenda\", {namespace: options?.namespace}),\n Injectable({\n type: PROVIDER_TYPE_AGENDA\n })\n );\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"define.js","sourceRoot":"","sources":["../../src/decorators/define.ts"],"names":[],"mappings":";;;AAAA,qCAAiC;AAGjC,SAAgB,MAAM,CAAC,UAAyB,EAAE;IAChD,OAAO,CAAC,MAAW,EAAE,WAAmB,EAAE,EAAE;QAC1C,MAAM,KAAK,GAAgB;YACzB,MAAM,EAAE;gBACN,CAAC,WAAW,CAAC,EAAE,OAAO;aACvB;SACF,CAAC;QAEF,YAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC,CAAC;AACJ,CAAC;AAVD,wBAUC","sourcesContent":["import {Store} from \"@tsed/core\";\nimport {AgendaStore, DefineOptions} from \"../interfaces/AgendaStore\";\n\nexport function Define(options: DefineOptions = {}): MethodDecorator {\n return (target: any, propertyKey: string) => {\n const store: AgendaStore = {\n define: {\n [propertyKey]: options\n }\n };\n\n Store.from(target).merge(\"agenda\", store);\n };\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"every.js","sourceRoot":"","sources":["../../src/decorators/every.ts"],"names":[],"mappings":";;;AAAA,qCAAgD;AAChD,qCAAgC;AAGhC,SAAgB,KAAK,CAAC,QAAgB,EAAE,UAAwB,EAAE;IAChE,OAAO,oBAAa,CAAC,eAAM,CAAC,OAAO,CAAC,EAAE,CAAC,MAAW,EAAE,WAAmB,EAAE,EAAE;QACzE,MAAM,KAAK,GAAgB;YACzB,KAAK,EAAE;gBACL,CAAC,WAAW,CAAC,EAAE,EAAC,GAAG,OAAO,EAAE,QAAQ,EAAC;aACtC;SACF,CAAC;QACF,YAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC;AATD,sBASC","sourcesContent":["import {Store, useDecorators} from \"@tsed/core\";\nimport {Define} from \"./define\";\nimport {AgendaStore, EveryOptions} from \"../interfaces/AgendaStore\";\n\nexport function Every(interval: string, options: EveryOptions = {}): MethodDecorator {\n return useDecorators(Define(options), (target: any, propertyKey: string) => {\n const store: AgendaStore = {\n every: {\n [propertyKey]: {...options, interval}\n }\n };\n Store.from(target).merge(\"agenda\", store);\n });\n}\n"]}
|
package/lib/decorators/index.js
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const tslib_1 = require("tslib");
|
|
4
|
-
tslib_1.__exportStar(require("./agenda"), exports);
|
|
5
|
-
tslib_1.__exportStar(require("./define"), exports);
|
|
6
|
-
tslib_1.__exportStar(require("./every"), exports);
|
|
7
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/decorators/index.ts"],"names":[],"mappings":";;;AAAA,mDAAyB;AACzB,mDAAyB;AACzB,kDAAwB","sourcesContent":["export * from \"./agenda\";\nexport * from \"./define\";\nexport * from \"./every\";\n"]}
|
package/lib/index.js
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const tslib_1 = require("tslib");
|
|
4
|
-
tslib_1.__exportStar(require("./AgendaModule"), exports);
|
|
5
|
-
tslib_1.__exportStar(require("./constants"), exports);
|
|
6
|
-
tslib_1.__exportStar(require("./decorators"), exports);
|
|
7
|
-
tslib_1.__exportStar(require("./interfaces/AgendaStore"), exports);
|
|
8
|
-
tslib_1.__exportStar(require("./services/AgendaFactory"), exports);
|
|
9
|
-
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAeA,yDAA+B;AAC/B,sDAA4B;AAC5B,uDAA6B;AAC7B,mEAAyC;AACzC,mEAAyC","sourcesContent":["import {AgendaConfig} from \"agenda\";\n\ndeclare global {\n namespace TsED {\n interface Configuration {\n agenda?: {\n /**\n * Enable Agenda jobs. Default false.\n */\n enabled?: boolean;\n } & AgendaConfig;\n }\n }\n}\n\nexport * from \"./AgendaModule\";\nexport * from \"./constants\";\nexport * from \"./decorators\";\nexport * from \"./interfaces/AgendaStore\";\nexport * from \"./services/AgendaFactory\";\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AgendaStore.js","sourceRoot":"","sources":["../../src/interfaces/AgendaStore.ts"],"names":[],"mappings":"","sourcesContent":["import {DefineOptions as AgendaDefineOptions, JobOptions} from \"agenda\";\n\nexport interface DefineOptions extends AgendaDefineOptions {\n name?: string;\n}\n\nexport type EveryOptions = JobOptions & DefineOptions;\n\nexport interface AgendaStore {\n namespace?: string;\n define?: {[propertyKey: string]: DefineOptions};\n every?: {[propertyKey: string]: EveryOptions & {interval: string}};\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AgendaFactory.js","sourceRoot":"","sources":["../../src/services/AgendaFactory.ts"],"names":[],"mappings":";;;AAAA,iCAAyD;AACzD,mCAA4C;AAE5C,2FAA2F;AAC9E,QAAA,aAAa,GAAG,eAAM,CAAC;AAGpC,qBAAgB,CAAC;IACf,OAAO,EAAE,eAAM;IACf,IAAI,EAAE,CAAC,kBAAa,CAAC;IACrB,UAAU,CAAC,QAAuB;QAChC,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAoC,QAAQ,EAAE,EAAC,OAAO,EAAE,KAAK,EAAC,CAAC,CAAC;QACzF,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,eAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9C,CAAC;CACF,CAAC,CAAC","sourcesContent":["import {Configuration, registerProvider} from \"@tsed/di\";\nimport {Agenda, AgendaConfig} from \"agenda\";\n\n// create Alias to avoid confusing import between Agenda from \"agenda\" and Agenda decorator\nexport const AgendaService = Agenda;\nexport type AgendaService = Agenda;\n\nregisterProvider({\n provide: Agenda,\n deps: [Configuration],\n useFactory(settings: Configuration) {\n const opts = settings.get<AgendaConfig & {enabled: boolean}>(\"agenda\", {enabled: false});\n return opts.enabled ? new Agenda(opts) : {};\n }\n});\n"]}
|
package/src/decorators/index.ts
DELETED