@alterior/tasks 3.0.0-rc.4 → 3.0.0-rc.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -23
- package/dist/index.js +1 -1
- package/dist/task-runner.js +17 -22
- package/dist/task-runner.js.map +1 -1
- package/dist/task-worker.js +74 -125
- package/dist/task-worker.js.map +1 -1
- package/dist/tasks.js +103 -163
- package/dist/tasks.js.map +1 -1
- package/dist/tasks.module.js +47 -63
- package/dist/tasks.module.js.map +1 -1
- package/dist/test.js.map +1 -1
- package/package.json +7 -7
package/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# @alterior/tasks
|
|
2
2
|
[](https://www.npmjs.com/package/@alterior/tasks)
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
Provides a type-safe task queue framework coordinated via Redis.
|
|
5
5
|
|
|
6
6
|
## Getting started
|
|
7
7
|
|
|
@@ -20,27 +20,12 @@ First, build a task worker:
|
|
|
20
20
|
import { Worker } from '@alterior/tasks';
|
|
21
21
|
import { Logger } from '@alterior/logger';
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
private taskRunner : TaskRunner
|
|
27
|
-
) {
|
|
28
|
-
|
|
29
|
-
}
|
|
30
|
-
get name() { return '@myorg/mypackage:MyTask'; }
|
|
23
|
+
@Task()
|
|
24
|
+
export class HelloPrinter extends Worker {
|
|
25
|
+
name = '@myorg/mypackage:Hello';
|
|
31
26
|
|
|
32
|
-
async
|
|
33
|
-
|
|
34
|
-
run(`ffmpeg /storage/${video}.mp4`);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
async transcode({ videoId : string }) {
|
|
38
|
-
this.logger.info('Queuing transcoding tasks...');
|
|
39
|
-
|
|
40
|
-
this.taskRunner.worker()
|
|
41
|
-
|
|
42
|
-
await this.enqueue('transcodeToFormat', { videoId: 'abcdef', format: '1080p' });
|
|
43
|
-
await this.enqueue('transcodeToFormat', { videoId: 'abcdef', format: '720p' });
|
|
27
|
+
async sayHello(thing : string) {
|
|
28
|
+
console.log(`Hello ${thing}!`);
|
|
44
29
|
}
|
|
45
30
|
}
|
|
46
31
|
```
|
|
@@ -50,14 +35,14 @@ However, it is more scalable and type-safe to specify a task per class:
|
|
|
50
35
|
```typescript
|
|
51
36
|
|
|
52
37
|
@Task()
|
|
53
|
-
export class TranscodeToFormatTask extends
|
|
38
|
+
export class TranscodeToFormatTask extends Worker {
|
|
54
39
|
execute() {
|
|
55
40
|
run(`ffmpeg /storage/${video}.mp4`);
|
|
56
41
|
}
|
|
57
42
|
}
|
|
58
43
|
|
|
59
44
|
@Task()
|
|
60
|
-
export class TranscodeTask extends
|
|
45
|
+
export class TranscodeTask extends Worker {
|
|
61
46
|
execute() {
|
|
62
47
|
await TranscodeToFormatTask.enqueue({ videoId: 'abcdef', format: '1080p' });
|
|
63
48
|
}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
4
|
(0, tslib_1.__exportStar)(require("./tasks"), exports);
|
|
5
5
|
(0, tslib_1.__exportStar)(require("./task-runner"), exports);
|
|
6
6
|
(0, tslib_1.__exportStar)(require("./task-worker"), exports);
|
package/dist/task-runner.js
CHANGED
|
@@ -1,41 +1,36 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.TaskRunner = void 0;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const di_1 = require("@alterior/di");
|
|
6
|
+
const tasks_1 = require("./tasks");
|
|
7
|
+
let TaskRunner = class TaskRunner {
|
|
8
|
+
constructor(_registry) {
|
|
9
9
|
this._registry = _registry;
|
|
10
10
|
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
},
|
|
15
|
-
enumerable: false,
|
|
16
|
-
configurable: true
|
|
17
|
-
});
|
|
11
|
+
get registry() {
|
|
12
|
+
return this._registry;
|
|
13
|
+
}
|
|
18
14
|
/**
|
|
19
15
|
* Acquire a Remote for the given service where any calls to the remote will
|
|
20
16
|
* resolve to a QueueJob which can be further interacted with. Promise will
|
|
21
17
|
* resolve once the item has been successfully delivered to the event queue.
|
|
22
18
|
*/
|
|
23
|
-
|
|
19
|
+
worker(workerClass) {
|
|
24
20
|
return this.registry.get(workerClass).async;
|
|
25
|
-
}
|
|
21
|
+
}
|
|
26
22
|
/**
|
|
27
23
|
* Acquire a Remote for the given service where any calls to the remote will await
|
|
28
24
|
* the full completion of the remote call and resolve to the return value of the
|
|
29
25
|
* remote function. If you only want to enqueue a task, use `worker()` instead.
|
|
30
26
|
*/
|
|
31
|
-
|
|
27
|
+
service(workerClass) {
|
|
32
28
|
return this.registry.get(workerClass).sync;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
}());
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
TaskRunner = (0, tslib_1.__decorate)([
|
|
32
|
+
(0, di_1.Injectable)(),
|
|
33
|
+
(0, tslib_1.__metadata)("design:paramtypes", [tasks_1.TaskWorkerRegistry])
|
|
34
|
+
], TaskRunner);
|
|
40
35
|
exports.TaskRunner = TaskRunner;
|
|
41
36
|
//# sourceMappingURL=task-runner.js.map
|
package/dist/task-runner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-runner.js","sourceRoot":"","sources":["../src/task-runner.ts"],"names":[],"mappings":";;;;AAAA,
|
|
1
|
+
{"version":3,"file":"task-runner.js","sourceRoot":"","sources":["../src/task-runner.ts"],"names":[],"mappings":";;;;AAAA,qCAAkD;AAClD,mCAAgL;AAIhL,IAAa,UAAU,GAAvB,MAAa,UAAU;IACnB,YACY,SAA8B;QAA9B,cAAS,GAAT,SAAS,CAAqB;IAE1C,CAAC;IAED,IAAI,QAAQ;QACR,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAmB,WAA4B;QACjD,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAI,WAAW,CAAC,CAAC,KAAK,CAAC;IACnD,CAAC;IAED;;;;OAIG;IACH,OAAO,CAAmB,WAA4B;QAClD,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAI,WAAW,CAAC,CAAC,IAAI,CAAC;IAClD,CAAC;CACJ,CAAA;AA3BY,UAAU;IADtB,IAAA,eAAU,GAAE;kDAGe,0BAAkB;GAFjC,UAAU,CA2BtB;AA3BY,gCAAU"}
|
package/dist/task-worker.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.TaskWorker = void 0;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const common_1 = require("@alterior/common");
|
|
6
|
+
const di_1 = require("@alterior/di");
|
|
7
|
+
const tasks_1 = require("./tasks");
|
|
8
|
+
const util = (0, tslib_1.__importStar)(require("util"));
|
|
9
|
+
class TaskWorker {
|
|
10
|
+
constructor(_injector, _client, _options, _appOptions, _logger) {
|
|
11
11
|
this._injector = _injector;
|
|
12
12
|
this._client = _client;
|
|
13
13
|
this._options = _options;
|
|
@@ -15,136 +15,85 @@ var TaskWorker = /** @class */ (function () {
|
|
|
15
15
|
this._logger = _logger;
|
|
16
16
|
this._taskHandlers = {};
|
|
17
17
|
if (!_injector)
|
|
18
|
-
throw new common_1.ArgumentNullError(
|
|
18
|
+
throw new common_1.ArgumentNullError(`injector`);
|
|
19
19
|
if (!_options)
|
|
20
|
-
throw new common_1.ArgumentNullError(
|
|
20
|
+
throw new common_1.ArgumentNullError(`options`);
|
|
21
21
|
if (!_appOptions)
|
|
22
|
-
throw new common_1.ArgumentNullError(
|
|
22
|
+
throw new common_1.ArgumentNullError(`appOptions`);
|
|
23
23
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
});
|
|
38
|
-
Object.defineProperty(TaskWorker.prototype, "appOptions", {
|
|
39
|
-
get: function () {
|
|
40
|
-
return this._appOptions;
|
|
41
|
-
},
|
|
42
|
-
enumerable: false,
|
|
43
|
-
configurable: true
|
|
44
|
-
});
|
|
45
|
-
Object.defineProperty(TaskWorker.prototype, "queue", {
|
|
46
|
-
get: function () {
|
|
47
|
-
return this._client.queue;
|
|
48
|
-
},
|
|
49
|
-
enumerable: false,
|
|
50
|
-
configurable: true
|
|
51
|
-
});
|
|
52
|
-
TaskWorker.prototype.stop = function () {
|
|
24
|
+
get injector() {
|
|
25
|
+
return this._injector;
|
|
26
|
+
}
|
|
27
|
+
get options() {
|
|
28
|
+
return this._options;
|
|
29
|
+
}
|
|
30
|
+
get appOptions() {
|
|
31
|
+
return this._appOptions;
|
|
32
|
+
}
|
|
33
|
+
get queue() {
|
|
34
|
+
return this._client.queue;
|
|
35
|
+
}
|
|
36
|
+
stop() {
|
|
53
37
|
this.queue.close();
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
console.info("Task was: ");
|
|
79
|
-
console.dir(task, { depth: 3 });
|
|
80
|
-
console.info("Registered worker IDs: " + Object.keys(this._taskHandlers).join(', '));
|
|
81
|
-
}
|
|
82
|
-
return [4 /*yield*/, this._logger.withContext({ host: 'tasks', worker: handler.worker }, "TaskWorker | " + handler.worker.constructor.name + "." + task.method + "(" + task.args.map(function (x) { return util.inspect(x, false, 2); }).join(', ') + ")", function () { return (0, tslib_1.__awaiter)(_this, void 0, void 0, function () {
|
|
83
|
-
var result, e_1;
|
|
84
|
-
return (0, tslib_1.__generator)(this, function (_a) {
|
|
85
|
-
switch (_a.label) {
|
|
86
|
-
case 0:
|
|
87
|
-
this._logger.info("TaskWorker: " + task.method + "() of worker " + handler.worker.constructor.name + " (ID '" + task.id + "')");
|
|
88
|
-
_a.label = 1;
|
|
89
|
-
case 1:
|
|
90
|
-
_a.trys.push([1, 3, , 4]);
|
|
91
|
-
return [4 /*yield*/, handler.handler(task.method, task.args)];
|
|
92
|
-
case 2:
|
|
93
|
-
result = _a.sent();
|
|
94
|
-
done(undefined, result);
|
|
95
|
-
return [3 /*break*/, 4];
|
|
96
|
-
case 3:
|
|
97
|
-
e_1 = _a.sent();
|
|
98
|
-
console.error("Caught error while running task " + job.data.id + "." + (job.data.method || 'execute') + "():");
|
|
99
|
-
console.error(e_1);
|
|
100
|
-
done(e_1);
|
|
101
|
-
return [3 /*break*/, 4];
|
|
102
|
-
case 4: return [2 /*return*/];
|
|
103
|
-
}
|
|
104
|
-
});
|
|
105
|
-
}); })];
|
|
106
|
-
case 3:
|
|
107
|
-
_a.sent();
|
|
108
|
-
return [2 /*return*/];
|
|
38
|
+
}
|
|
39
|
+
start() {
|
|
40
|
+
this.queue.process((job, done) => (0, tslib_1.__awaiter)(this, void 0, void 0, function* () {
|
|
41
|
+
let task = job.data;
|
|
42
|
+
if (!task || !task.id) {
|
|
43
|
+
console.log(`TaskWorker: Could not process invalid task:`);
|
|
44
|
+
console.dir(task, { depth: 3 });
|
|
45
|
+
console.log(`Associated job data:`);
|
|
46
|
+
console.dir(job, { depth: 3 });
|
|
47
|
+
yield job.discard();
|
|
48
|
+
done(new Error(`Invalid job task`), null);
|
|
49
|
+
}
|
|
50
|
+
let handler = this._taskHandlers[task.id];
|
|
51
|
+
if (!handler) {
|
|
52
|
+
console.error(`No handler for task ID '${task.id}'! Check that your worker class declares this task ID!`);
|
|
53
|
+
console.info(`Task was: `);
|
|
54
|
+
console.dir(task, { depth: 3 });
|
|
55
|
+
console.info(`Registered worker IDs: ${Object.keys(this._taskHandlers).join(', ')}`);
|
|
56
|
+
}
|
|
57
|
+
yield this._logger.withContext({ host: 'tasks', worker: handler.worker }, `TaskWorker | ${handler.worker.constructor.name}.${task.method}(${task.args.map(x => util.inspect(x, false, 2)).join(', ')})`, () => (0, tslib_1.__awaiter)(this, void 0, void 0, function* () {
|
|
58
|
+
this._logger.info(`TaskWorker: ${task.method}() of worker ${handler.worker.constructor.name} (ID '${task.id}')`);
|
|
59
|
+
try {
|
|
60
|
+
let result = yield handler.handler(task.method, task.args);
|
|
61
|
+
done(undefined, result);
|
|
109
62
|
}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
63
|
+
catch (e) {
|
|
64
|
+
console.error(`Caught error while running task ${job.data.id}.${job.data.method || 'execute'}():`);
|
|
65
|
+
console.error(e);
|
|
66
|
+
done(e);
|
|
67
|
+
}
|
|
68
|
+
}));
|
|
69
|
+
}));
|
|
70
|
+
}
|
|
71
|
+
registerHandler(name, handler) {
|
|
114
72
|
this._taskHandlers[name] = handler;
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
var instance = ownInjector.get(taskClass);
|
|
73
|
+
}
|
|
74
|
+
registerClasses(taskClasses) {
|
|
75
|
+
let providers = taskClasses;
|
|
76
|
+
let ownInjector = di_1.ReflectiveInjector.resolveAndCreate(providers, this.injector);
|
|
77
|
+
let allRoutes = [];
|
|
78
|
+
let tasks = taskClasses.map(taskClass => {
|
|
79
|
+
let id = taskClass.name;
|
|
80
|
+
let annotation = tasks_1.TaskAnnotation.getForClass(taskClass);
|
|
81
|
+
let instance = ownInjector.get(taskClass);
|
|
125
82
|
if (instance.name)
|
|
126
83
|
id = instance.name;
|
|
127
84
|
if (annotation && annotation.id)
|
|
128
85
|
id = annotation.id;
|
|
129
|
-
|
|
86
|
+
this.registerHandler(id, {
|
|
130
87
|
worker: instance,
|
|
131
|
-
handler:
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
if (typeof impl !== 'function' || methodName.startsWith('_'))
|
|
138
|
-
throw new common_1.InvalidOperationError("Invalid task method " + methodName);
|
|
139
|
-
return [4 /*yield*/, instance[methodName].apply(instance, (0, tslib_1.__spreadArray)([], (0, tslib_1.__read)(args), false))];
|
|
140
|
-
case 1: return [2 /*return*/, _a.sent()];
|
|
141
|
-
}
|
|
142
|
-
});
|
|
143
|
-
}); }
|
|
88
|
+
handler: (methodName, args) => (0, tslib_1.__awaiter)(this, void 0, void 0, function* () {
|
|
89
|
+
let impl = instance.constructor.prototype[methodName];
|
|
90
|
+
if (typeof impl !== 'function' || methodName.startsWith('_'))
|
|
91
|
+
throw new common_1.InvalidOperationError(`Invalid task method ${methodName}`);
|
|
92
|
+
return yield instance[methodName](...args);
|
|
93
|
+
})
|
|
144
94
|
});
|
|
145
95
|
});
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
}());
|
|
96
|
+
}
|
|
97
|
+
}
|
|
149
98
|
exports.TaskWorker = TaskWorker;
|
|
150
99
|
//# sourceMappingURL=task-worker.js.map
|
package/dist/task-worker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-worker.js","sourceRoot":"","sources":["../src/task-worker.ts"],"names":[],"mappings":";;;;AAAA,
|
|
1
|
+
{"version":3,"file":"task-worker.js","sourceRoot":"","sources":["../src/task-worker.ts"],"names":[],"mappings":"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"}
|
package/dist/tasks.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.TaskWorkerRegistry = exports.TaskQueueClient = exports.TaskWorkerProxy = exports.Worker = exports.Task = exports.TaskAnnotation = exports.QUEUE_OPTIONS = exports.TaskModuleOptionsRef = void 0;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const annotations_1 = require("@alterior/annotations");
|
|
6
|
+
const di_1 = require("@alterior/di");
|
|
7
|
+
const bull_1 = (0, tslib_1.__importDefault)(require("bull"));
|
|
8
8
|
/**
|
|
9
9
|
* This injectable allows configuration of the task system.
|
|
10
10
|
* Include a provider for the injection token `QUEUE_OPTIONS`
|
|
@@ -13,205 +13,145 @@ var bull_1 = (0, tslib_1.__importDefault)(require("bull"));
|
|
|
13
13
|
* For instance: `[ provide: QUEUE_OPTIONS, useValue: new TaskClientOptionsRef({ optionsHere }) ]`
|
|
14
14
|
*
|
|
15
15
|
*/
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
let TaskModuleOptionsRef = class TaskModuleOptionsRef {
|
|
17
|
+
constructor(options) {
|
|
18
18
|
this.options = options;
|
|
19
19
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}());
|
|
20
|
+
};
|
|
21
|
+
TaskModuleOptionsRef = (0, tslib_1.__decorate)([
|
|
22
|
+
(0, di_1.Injectable)(),
|
|
23
|
+
(0, tslib_1.__metadata)("design:paramtypes", [Object])
|
|
24
|
+
], TaskModuleOptionsRef);
|
|
26
25
|
exports.TaskModuleOptionsRef = TaskModuleOptionsRef;
|
|
27
26
|
exports.QUEUE_OPTIONS = new di_1.InjectionToken('QueueOptions');
|
|
28
|
-
|
|
29
|
-
(
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
], TaskAnnotation);
|
|
39
|
-
return TaskAnnotation;
|
|
40
|
-
}(annotations_1.Annotation));
|
|
27
|
+
let TaskAnnotation = class TaskAnnotation extends annotations_1.Annotation {
|
|
28
|
+
constructor(id) {
|
|
29
|
+
super();
|
|
30
|
+
this.id = id;
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
TaskAnnotation = (0, tslib_1.__decorate)([
|
|
34
|
+
(0, annotations_1.MetadataName)('@alterior/tasks:Task'),
|
|
35
|
+
(0, tslib_1.__metadata)("design:paramtypes", [String])
|
|
36
|
+
], TaskAnnotation);
|
|
41
37
|
exports.TaskAnnotation = TaskAnnotation;
|
|
42
38
|
exports.Task = TaskAnnotation.decorator();
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
get: function () { return undefined; },
|
|
48
|
-
enumerable: false,
|
|
49
|
-
configurable: true
|
|
50
|
-
});
|
|
51
|
-
Object.defineProperty(Worker.prototype, "currentJob", {
|
|
52
|
-
get: function () {
|
|
53
|
-
return Zone.current.get('workerStateJob');
|
|
54
|
-
},
|
|
55
|
-
enumerable: false,
|
|
56
|
-
configurable: true
|
|
57
|
-
});
|
|
58
|
-
return Worker;
|
|
59
|
-
}());
|
|
60
|
-
exports.Worker = Worker;
|
|
61
|
-
var TaskWorkerProxy = /** @class */ (function () {
|
|
62
|
-
function TaskWorkerProxy() {
|
|
39
|
+
class Worker {
|
|
40
|
+
get options() { return undefined; }
|
|
41
|
+
get currentJob() {
|
|
42
|
+
return Zone.current.get('workerStateJob');
|
|
63
43
|
}
|
|
64
|
-
|
|
44
|
+
}
|
|
45
|
+
exports.Worker = Worker;
|
|
46
|
+
class TaskWorkerProxy {
|
|
47
|
+
static create(handler) {
|
|
65
48
|
return new Proxy({}, {
|
|
66
|
-
get
|
|
67
|
-
return
|
|
68
|
-
var args = [];
|
|
69
|
-
for (var _i = 0; _i < arguments.length; _i++) {
|
|
70
|
-
args[_i] = arguments[_i];
|
|
71
|
-
}
|
|
72
|
-
return handler.apply(void 0, (0, tslib_1.__spreadArray)([key], (0, tslib_1.__read)(args), false));
|
|
73
|
-
};
|
|
49
|
+
get(t, key, receiver) {
|
|
50
|
+
return (...args) => handler(key, ...args);
|
|
74
51
|
}
|
|
75
52
|
});
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
return this.create(
|
|
79
|
-
var args = [];
|
|
80
|
-
for (var _i = 1; _i < arguments.length; _i++) {
|
|
81
|
-
args[_i - 1] = arguments[_i];
|
|
82
|
-
}
|
|
53
|
+
}
|
|
54
|
+
static createAsync(queueClient, id, options) {
|
|
55
|
+
return this.create((method, ...args) => {
|
|
83
56
|
if (method === 'withOptions')
|
|
84
57
|
return TaskWorkerProxy.createAsync(queueClient, id, Object.assign({}, options, args[0]));
|
|
85
58
|
else
|
|
86
|
-
return queueClient.enqueue({ id
|
|
59
|
+
return queueClient.enqueue({ id, method, args }, options);
|
|
87
60
|
});
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
return this.create(
|
|
91
|
-
var args = [];
|
|
92
|
-
for (var _i = 1; _i < arguments.length; _i++) {
|
|
93
|
-
args[_i - 1] = arguments[_i];
|
|
94
|
-
}
|
|
61
|
+
}
|
|
62
|
+
static createSync(queueClient, id, options) {
|
|
63
|
+
return this.create((method, ...args) => {
|
|
95
64
|
if (method === 'withOptions')
|
|
96
65
|
return TaskWorkerProxy.createSync(queueClient, id, Object.assign({}, options, args[0]));
|
|
97
66
|
else
|
|
98
|
-
return queueClient.enqueue({ id
|
|
67
|
+
return queueClient.enqueue({ id, method, args }, options).then(v => v.finished);
|
|
99
68
|
});
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
}());
|
|
69
|
+
}
|
|
70
|
+
}
|
|
103
71
|
exports.TaskWorkerProxy = TaskWorkerProxy;
|
|
104
|
-
|
|
105
|
-
|
|
72
|
+
let TaskQueueClient = class TaskQueueClient {
|
|
73
|
+
constructor(optionsRef) {
|
|
106
74
|
this.optionsRef = optionsRef;
|
|
107
75
|
this._queue = new bull_1.default(this.queueName, this.queueOptions);
|
|
108
76
|
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
},
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
});
|
|
133
|
-
Object.defineProperty(TaskQueueClient.prototype, "queueOptions", {
|
|
134
|
-
get: function () {
|
|
135
|
-
var queueOptions = Object.assign({}, this.options.queueOptions);
|
|
136
|
-
if (!queueOptions.redis) {
|
|
137
|
-
queueOptions.redis = {
|
|
138
|
-
port: 6379,
|
|
139
|
-
host: '127.0.0.1',
|
|
140
|
-
db: 6
|
|
141
|
-
};
|
|
142
|
-
}
|
|
143
|
-
return queueOptions;
|
|
144
|
-
},
|
|
145
|
-
enumerable: false,
|
|
146
|
-
configurable: true
|
|
147
|
-
});
|
|
77
|
+
get queue() {
|
|
78
|
+
return this._queue;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Get the task client options. See
|
|
82
|
+
*/
|
|
83
|
+
get options() {
|
|
84
|
+
return (this.optionsRef ? this.optionsRef.options : undefined) || {};
|
|
85
|
+
}
|
|
86
|
+
get queueName() {
|
|
87
|
+
return this.options.queueName || 'alteriorTasks';
|
|
88
|
+
}
|
|
89
|
+
get queueOptions() {
|
|
90
|
+
let queueOptions = Object.assign({}, this.options.queueOptions);
|
|
91
|
+
if (!queueOptions.redis) {
|
|
92
|
+
queueOptions.redis = {
|
|
93
|
+
port: 6379,
|
|
94
|
+
host: '127.0.0.1',
|
|
95
|
+
db: 6
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
return queueOptions;
|
|
99
|
+
}
|
|
148
100
|
/**
|
|
149
101
|
* Enqueue a new task. To handle the task on the worker side, register for it with `.process()`
|
|
150
102
|
*/
|
|
151
|
-
|
|
152
|
-
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
|
|
153
|
-
return
|
|
154
|
-
switch (_a.label) {
|
|
155
|
-
case 0: return [4 /*yield*/, this._queue.add(data, opts)];
|
|
156
|
-
case 1: return [2 /*return*/, _a.sent()];
|
|
157
|
-
}
|
|
158
|
-
});
|
|
103
|
+
enqueue(data, opts) {
|
|
104
|
+
return (0, tslib_1.__awaiter)(this, void 0, void 0, function* () {
|
|
105
|
+
return yield this._queue.add(data, opts);
|
|
159
106
|
});
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
}());
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
TaskQueueClient = (0, tslib_1.__decorate)([
|
|
110
|
+
(0, di_1.Injectable)(),
|
|
111
|
+
(0, tslib_1.__param)(0, (0, di_1.Optional)()),
|
|
112
|
+
(0, tslib_1.__metadata)("design:paramtypes", [TaskModuleOptionsRef])
|
|
113
|
+
], TaskQueueClient);
|
|
168
114
|
exports.TaskQueueClient = TaskQueueClient;
|
|
169
|
-
|
|
170
|
-
|
|
115
|
+
let TaskWorkerRegistry = class TaskWorkerRegistry {
|
|
116
|
+
constructor(injector, client) {
|
|
171
117
|
this.injector = injector;
|
|
172
118
|
this.client = client;
|
|
173
119
|
this._entries = {};
|
|
174
120
|
}
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
121
|
+
registerClass(injector, taskClass) {
|
|
122
|
+
let instance = injector.get(taskClass);
|
|
123
|
+
let id = instance.name;
|
|
178
124
|
if (this._entries[id])
|
|
179
|
-
throw new Error(
|
|
125
|
+
throw new Error(`Another worker is already registered with name '${id}'`);
|
|
180
126
|
this._entries[id] = {
|
|
181
127
|
type: taskClass,
|
|
182
128
|
local: instance,
|
|
183
129
|
sync: TaskWorkerProxy.createSync(this.client, id, instance.options),
|
|
184
130
|
async: TaskWorkerProxy.createAsync(this.client, id, instance.options)
|
|
185
131
|
};
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
configurable: true
|
|
193
|
-
});
|
|
194
|
-
TaskWorkerRegistry.prototype.get = function (cls) {
|
|
195
|
-
var entry = this.all.find(function (x) { return x.type === cls; });
|
|
132
|
+
}
|
|
133
|
+
get all() {
|
|
134
|
+
return Object.values(this._entries);
|
|
135
|
+
}
|
|
136
|
+
get(cls) {
|
|
137
|
+
let entry = this.all.find(x => x.type === cls);
|
|
196
138
|
if (!entry)
|
|
197
|
-
throw new Error(
|
|
139
|
+
throw new Error(`Worker class ${cls.name} is not registered. Add it to the 'tasks' property of a module or call TaskWorkerRegistry.register(${cls.name})`);
|
|
198
140
|
return entry;
|
|
199
|
-
}
|
|
200
|
-
|
|
141
|
+
}
|
|
142
|
+
getByName(name) {
|
|
201
143
|
return this._entries[name];
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
return TaskWorkerRegistry;
|
|
215
|
-
}());
|
|
144
|
+
}
|
|
145
|
+
registerClasses(classes) {
|
|
146
|
+
let taskClasses = classes;
|
|
147
|
+
let ownInjector = di_1.ReflectiveInjector.resolveAndCreate(taskClasses, this.injector);
|
|
148
|
+
taskClasses.forEach(taskClass => this.registerClass(ownInjector, taskClass));
|
|
149
|
+
}
|
|
150
|
+
};
|
|
151
|
+
TaskWorkerRegistry = (0, tslib_1.__decorate)([
|
|
152
|
+
(0, di_1.Injectable)(),
|
|
153
|
+
(0, tslib_1.__metadata)("design:paramtypes", [di_1.Injector,
|
|
154
|
+
TaskQueueClient])
|
|
155
|
+
], TaskWorkerRegistry);
|
|
216
156
|
exports.TaskWorkerRegistry = TaskWorkerRegistry;
|
|
217
157
|
//# sourceMappingURL=tasks.js.map
|
package/dist/tasks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../src/tasks.ts"],"names":[],"mappings":";;;;AAAA,
|
|
1
|
+
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../src/tasks.ts"],"names":[],"mappings":"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"}
|
package/dist/tasks.module.js
CHANGED
|
@@ -1,20 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var TasksModule_1;
|
|
2
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
4
|
exports.TasksModule = void 0;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
5
|
+
const tslib_1 = require("tslib");
|
|
6
|
+
const di_1 = require("@alterior/di");
|
|
7
|
+
const runtime_1 = require("@alterior/runtime");
|
|
8
|
+
const tasks_1 = require("./tasks");
|
|
9
|
+
const task_runner_1 = require("./task-runner");
|
|
10
|
+
const task_worker_1 = require("./task-worker");
|
|
11
|
+
const logging_1 = require("@alterior/logging");
|
|
11
12
|
/**
|
|
12
13
|
* Import this into your application module to run tasks enqueued by other
|
|
13
14
|
* services on a shared queue. The tasks which can be processed are specified
|
|
14
15
|
* in the `tasks` field of one or more modules.
|
|
15
16
|
*/
|
|
16
|
-
|
|
17
|
-
|
|
17
|
+
let TasksModule = TasksModule_1 = class TasksModule {
|
|
18
|
+
constructor(app, rolesService, client, workerRegistry, logger, _options) {
|
|
18
19
|
this.app = app;
|
|
19
20
|
this.rolesService = rolesService;
|
|
20
21
|
this.client = client;
|
|
@@ -22,91 +23,74 @@ var TasksModule = /** @class */ (function () {
|
|
|
22
23
|
this.logger = logger;
|
|
23
24
|
this._options = _options;
|
|
24
25
|
}
|
|
25
|
-
TasksModule_1 = TasksModule;
|
|
26
26
|
/**
|
|
27
27
|
* Used when importing this module from the root (app) module
|
|
28
28
|
* using the default configuration.
|
|
29
29
|
* Should be called only once in the application.
|
|
30
30
|
*/
|
|
31
|
-
|
|
31
|
+
static forRoot() {
|
|
32
32
|
return this.configure({});
|
|
33
|
-
}
|
|
33
|
+
}
|
|
34
34
|
/**
|
|
35
35
|
* Create a configured version of the WebServerModule that can be then
|
|
36
36
|
* be imported into an entry module (or feature module).
|
|
37
37
|
* @param options The options to use for the web server
|
|
38
38
|
*/
|
|
39
|
-
|
|
39
|
+
static configure(options) {
|
|
40
40
|
return {
|
|
41
41
|
$module: TasksModule_1,
|
|
42
42
|
providers: [
|
|
43
43
|
{ provide: tasks_1.TaskModuleOptionsRef, useValue: new tasks_1.TaskModuleOptionsRef(options) }
|
|
44
44
|
]
|
|
45
45
|
};
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
Object.defineProperty(TasksModule.prototype, "tasks", {
|
|
55
|
-
get: function () {
|
|
56
|
-
return [].concat.apply([], (0, tslib_1.__spreadArray)([], (0, tslib_1.__read)(this.app.runtime.definitions.map(function (x) { return x.metadata.tasks || []; })), false));
|
|
57
|
-
},
|
|
58
|
-
enumerable: false,
|
|
59
|
-
configurable: true
|
|
60
|
-
});
|
|
61
|
-
TasksModule.prototype.altOnInit = function () {
|
|
46
|
+
}
|
|
47
|
+
get options() {
|
|
48
|
+
return this._options ? this._options.options : {} || {};
|
|
49
|
+
}
|
|
50
|
+
get tasks() {
|
|
51
|
+
return [].concat(...this.app.runtime.definitions.map(x => x.metadata.tasks || []));
|
|
52
|
+
}
|
|
53
|
+
altOnInit() {
|
|
62
54
|
this.workerRegistry.registerClasses(this.tasks);
|
|
63
55
|
this.worker = new task_worker_1.TaskWorker(this.app.runtime.injector, this.client, this.options, this.app.options, this.logger);
|
|
64
56
|
this.worker.registerClasses(this.tasks);
|
|
65
|
-
|
|
57
|
+
let self = this;
|
|
66
58
|
this.rolesService.registerRole({
|
|
67
59
|
identifier: 'task-worker',
|
|
68
60
|
instance: this,
|
|
69
61
|
name: 'Task Worker',
|
|
70
62
|
summary: 'Pulls from the task queue and executes them using task classes registered in the module tree',
|
|
71
|
-
start
|
|
72
|
-
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
|
|
73
|
-
|
|
74
|
-
self.worker.start();
|
|
75
|
-
return [2 /*return*/];
|
|
76
|
-
});
|
|
63
|
+
start() {
|
|
64
|
+
return (0, tslib_1.__awaiter)(this, void 0, void 0, function* () {
|
|
65
|
+
self.worker.start();
|
|
77
66
|
});
|
|
78
67
|
},
|
|
79
|
-
stop
|
|
80
|
-
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
|
|
81
|
-
|
|
82
|
-
self.worker.stop();
|
|
83
|
-
return [2 /*return*/];
|
|
84
|
-
});
|
|
68
|
+
stop() {
|
|
69
|
+
return (0, tslib_1.__awaiter)(this, void 0, void 0, function* () {
|
|
70
|
+
self.worker.stop();
|
|
85
71
|
});
|
|
86
72
|
}
|
|
87
73
|
});
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
tasks_1.TaskQueueClient,
|
|
94
|
-
tasks_1.TaskWorkerRegistry,
|
|
95
|
-
task_runner_1.TaskRunner
|
|
96
|
-
],
|
|
97
|
-
imports: [
|
|
98
|
-
logging_1.LoggingModule
|
|
99
|
-
]
|
|
100
|
-
}),
|
|
101
|
-
(0, tslib_1.__param)(5, (0, di_1.Optional)()),
|
|
102
|
-
(0, tslib_1.__metadata)("design:paramtypes", [runtime_1.Application,
|
|
103
|
-
runtime_1.RolesService,
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
TasksModule = TasksModule_1 = (0, tslib_1.__decorate)([
|
|
77
|
+
(0, di_1.Module)({
|
|
78
|
+
providers: [
|
|
104
79
|
tasks_1.TaskQueueClient,
|
|
105
80
|
tasks_1.TaskWorkerRegistry,
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
81
|
+
task_runner_1.TaskRunner
|
|
82
|
+
],
|
|
83
|
+
imports: [
|
|
84
|
+
logging_1.LoggingModule
|
|
85
|
+
]
|
|
86
|
+
}),
|
|
87
|
+
(0, tslib_1.__param)(5, (0, di_1.Optional)()),
|
|
88
|
+
(0, tslib_1.__metadata)("design:paramtypes", [runtime_1.Application,
|
|
89
|
+
runtime_1.RolesService,
|
|
90
|
+
tasks_1.TaskQueueClient,
|
|
91
|
+
tasks_1.TaskWorkerRegistry,
|
|
92
|
+
logging_1.Logger,
|
|
93
|
+
tasks_1.TaskModuleOptionsRef])
|
|
94
|
+
], TasksModule);
|
|
111
95
|
exports.TasksModule = TasksModule;
|
|
112
96
|
//# sourceMappingURL=tasks.module.js.map
|
package/dist/tasks.module.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tasks.module.js","sourceRoot":"","sources":["../src/tasks.module.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tasks.module.js","sourceRoot":"","sources":["../src/tasks.module.ts"],"names":[],"mappings":";;;;;AAAA,qCAA4D;AAC5D,+CAAmF;AAEnF,mCAAuG;AACvG,+CAA2C;AAC3C,+CAA2C;AAC3C,+CAA0D;AAE1D;;;;GAIG;AAWH,IAAa,WAAW,mBAAxB,MAAa,WAAW;IACpB,YACY,GAAiB,EACjB,YAA2B,EAC3B,MAAwB,EACxB,cAAmC,EACnC,MAAe,EACH,QAA+B;QAL3C,QAAG,GAAH,GAAG,CAAc;QACjB,iBAAY,GAAZ,YAAY,CAAe;QAC3B,WAAM,GAAN,MAAM,CAAkB;QACxB,mBAAc,GAAd,cAAc,CAAqB;QACnC,WAAM,GAAN,MAAM,CAAS;QACH,aAAQ,GAAR,QAAQ,CAAuB;IAGvD,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,OAAO;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,SAAS,CAAC,OAA2B;QAC/C,OAAO;YACH,OAAO,EAAE,aAAW;YACpB,SAAS,EAAE;gBACP,EAAE,OAAO,EAAE,4BAAoB,EAAE,QAAQ,EAAE,IAAI,4BAAoB,CAAC,OAAO,CAAC,EAAE;aACjF;SACJ,CAAA;IACL,CAAC;IAID,IAAI,OAAO;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;IAC5D,CAAC;IAED,IAAI,KAAK;QACL,OAAO,EAAE,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;IACvF,CAAC;IAED,SAAS;QAEL,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEhD,IAAI,CAAC,MAAM,GAAG,IAAI,wBAAU,CACxB,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,EACzB,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,GAAG,CAAC,OAAO,EAChB,IAAI,CAAC,MAAM,CACd,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAExC,IAAI,IAAI,GAAG,IAAI,CAAC;QAEhB,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;YAC3B,UAAU,EAAE,aAAa;YACzB,QAAQ,EAAE,IAAI;YACd,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,8FAA8F;YACjG,KAAK;;oBACP,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBACxB,CAAC;aAAA;YAEK,IAAI;;oBACN,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBACvB,CAAC;aAAA;SACJ,CAAC,CAAA;IAEN,CAAC;CACJ,CAAA;AA3EY,WAAW;IAVvB,IAAA,WAAM,EAAC;QACJ,SAAS,EAAE;YACP,uBAAe;YACf,0BAAkB;YAClB,wBAAU;SACb;QACD,OAAO,EAAE;YACL,uBAAa;SAChB;KACJ,CAAC;IAQO,wBAAA,IAAA,aAAQ,GAAE,CAAA;kDALG,qBAAW;QACF,sBAAY;QAClB,uBAAe;QACP,0BAAkB;QAC1B,gBAAM;QACQ,4BAAoB;GAP9C,WAAW,CA2EvB;AA3EY,kCAAW"}
|
package/dist/test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test.js","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":";;AAAA,4BAA0B;AAC1B,
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":";;AAAA,4BAA0B;AAC1B,mCAA+B;AAE/B,IAAA,cAAK,GAAE;KACF,WAAW,CAAC,EAAE,GAAG,IAAI,CAAC;KACtB,OAAO,CAAC,CAAC,cAAc,CAAC,CAAC;KACzB,GAAG,EAAE,CACT"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@alterior/tasks",
|
|
3
|
-
"version": "3.0.0-rc.
|
|
3
|
+
"version": "3.0.0-rc.9",
|
|
4
4
|
"description": "Flexible background task system",
|
|
5
5
|
"author": "The Alterior Project (https://github.com/alterior-mvc)",
|
|
6
6
|
"license": "MIT",
|
|
@@ -40,11 +40,11 @@
|
|
|
40
40
|
"docs": "typedoc ."
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@alterior/annotations": "^3.0.0-rc.
|
|
44
|
-
"@alterior/common": "^3.0.0-rc.
|
|
45
|
-
"@alterior/di": "^3.0.0-rc.
|
|
46
|
-
"@alterior/logging": "^3.0.0-rc.
|
|
47
|
-
"@alterior/runtime": "^3.0.0-rc.
|
|
43
|
+
"@alterior/annotations": "^3.0.0-rc.9",
|
|
44
|
+
"@alterior/common": "^3.0.0-rc.9",
|
|
45
|
+
"@alterior/di": "^3.0.0-rc.9",
|
|
46
|
+
"@alterior/logging": "^3.0.0-rc.9",
|
|
47
|
+
"@alterior/runtime": "^3.0.0-rc.9",
|
|
48
48
|
"@avejidah/get-parameter-names": "^0.3.2",
|
|
49
49
|
"@types/ejs": "^2.7.0",
|
|
50
50
|
"bull": "^3.18.0",
|
|
@@ -71,5 +71,5 @@
|
|
|
71
71
|
"typescript": "^4.1.5",
|
|
72
72
|
"wtfnode": "^0.7.0"
|
|
73
73
|
},
|
|
74
|
-
"gitHead": "
|
|
74
|
+
"gitHead": "1286fba26c284c031ef03051200a25ce731c89b9"
|
|
75
75
|
}
|