@push.rocks/taskbuffer 3.0.10
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/dist_bundle/bundle.js +18376 -0
- package/dist_bundle/bundle.js.map +7 -0
- package/dist_ts/00_commitinfo_data.d.ts +8 -0
- package/dist_ts/00_commitinfo_data.js +9 -0
- package/dist_ts/index.d.ts +10 -0
- package/dist_ts/index.js +10 -0
- package/dist_ts/taskbuffer.classes.bufferrunner.d.ts +8 -0
- package/dist_ts/taskbuffer.classes.bufferrunner.js +35 -0
- package/dist_ts/taskbuffer.classes.cyclecounter.d.ts +13 -0
- package/dist_ts/taskbuffer.classes.cyclecounter.js +31 -0
- package/dist_ts/taskbuffer.classes.distributedcoordinator.d.ts +29 -0
- package/dist_ts/taskbuffer.classes.distributedcoordinator.js +5 -0
- package/dist_ts/taskbuffer.classes.task.d.ts +84 -0
- package/dist_ts/taskbuffer.classes.task.js +159 -0
- package/dist_ts/taskbuffer.classes.taskchain.d.ts +14 -0
- package/dist_ts/taskbuffer.classes.taskchain.js +51 -0
- package/dist_ts/taskbuffer.classes.taskdebounced.d.ts +10 -0
- package/dist_ts/taskbuffer.classes.taskdebounced.js +20 -0
- package/dist_ts/taskbuffer.classes.taskmanager.d.ts +68 -0
- package/dist_ts/taskbuffer.classes.taskmanager.js +129 -0
- package/dist_ts/taskbuffer.classes.taskonce.d.ts +11 -0
- package/dist_ts/taskbuffer.classes.taskonce.js +20 -0
- package/dist_ts/taskbuffer.classes.taskparallel.d.ts +7 -0
- package/dist_ts/taskbuffer.classes.taskparallel.js +23 -0
- package/dist_ts/taskbuffer.classes.taskrunner.d.ts +30 -0
- package/dist_ts/taskbuffer.classes.taskrunner.js +54 -0
- package/dist_ts/taskbuffer.logging.d.ts +2 -0
- package/dist_ts/taskbuffer.logging.js +3 -0
- package/dist_ts/taskbuffer.plugins.d.ts +8 -0
- package/dist_ts/taskbuffer.plugins.js +9 -0
- package/npmextra.json +18 -0
- package/package.json +62 -0
- package/readme.md +63 -0
- package/ts/00_commitinfo_data.ts +8 -0
- package/ts/index.ts +12 -0
- package/ts/taskbuffer.classes.bufferrunner.ts +39 -0
- package/ts/taskbuffer.classes.cyclecounter.ts +36 -0
- package/ts/taskbuffer.classes.distributedcoordinator.ts +34 -0
- package/ts/taskbuffer.classes.task.ts +236 -0
- package/ts/taskbuffer.classes.taskchain.ts +58 -0
- package/ts/taskbuffer.classes.taskdebounced.ts +27 -0
- package/ts/taskbuffer.classes.taskmanager.ts +155 -0
- package/ts/taskbuffer.classes.taskonce.ts +21 -0
- package/ts/taskbuffer.classes.taskparallel.ts +24 -0
- package/ts/taskbuffer.classes.taskrunner.ts +63 -0
- package/ts/taskbuffer.logging.ts +3 -0
- package/ts/taskbuffer.plugins.ts +9 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* autocreated commitinfo by @pushrocks/commitinfo
|
|
3
|
+
*/
|
|
4
|
+
export const commitinfo = {
|
|
5
|
+
name: '@pushrocks/taskbuffer',
|
|
6
|
+
version: '3.0.10',
|
|
7
|
+
description: 'flexible task management. TypeScript ready!'
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSx1QkFBdUI7SUFDN0IsT0FBTyxFQUFFLFFBQVE7SUFDakIsV0FBVyxFQUFFLDZDQUE2QztDQUMzRCxDQUFBIn0=
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { Task } from './taskbuffer.classes.task.js';
|
|
2
|
+
export type { ITaskFunction } from './taskbuffer.classes.task.js';
|
|
3
|
+
export { Taskchain } from './taskbuffer.classes.taskchain.js';
|
|
4
|
+
export { Taskparallel } from './taskbuffer.classes.taskparallel.js';
|
|
5
|
+
export { TaskManager } from './taskbuffer.classes.taskmanager.js';
|
|
6
|
+
export { TaskOnce } from './taskbuffer.classes.taskonce.js';
|
|
7
|
+
export { TaskRunner } from './taskbuffer.classes.taskrunner.js';
|
|
8
|
+
export { TaskDebounced } from './taskbuffer.classes.taskdebounced.js';
|
|
9
|
+
import * as distributedCoordination from './taskbuffer.classes.distributedcoordinator.js';
|
|
10
|
+
export { distributedCoordination };
|
package/dist_ts/index.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { Task } from './taskbuffer.classes.task.js';
|
|
2
|
+
export { Taskchain } from './taskbuffer.classes.taskchain.js';
|
|
3
|
+
export { Taskparallel } from './taskbuffer.classes.taskparallel.js';
|
|
4
|
+
export { TaskManager } from './taskbuffer.classes.taskmanager.js';
|
|
5
|
+
export { TaskOnce } from './taskbuffer.classes.taskonce.js';
|
|
6
|
+
export { TaskRunner } from './taskbuffer.classes.taskrunner.js';
|
|
7
|
+
export { TaskDebounced } from './taskbuffer.classes.taskdebounced.js';
|
|
8
|
+
import * as distributedCoordination from './taskbuffer.classes.distributedcoordinator.js';
|
|
9
|
+
export { distributedCoordination };
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDbEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzVELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDdEUsT0FBTyxLQUFLLHVCQUF1QixNQUFNLGdEQUFnRCxDQUFDO0FBQzFGLE9BQU8sRUFDTCx1QkFBdUIsRUFDeEIsQ0FBQSJ9
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Task } from './taskbuffer.classes.task.js';
|
|
2
|
+
export class BufferRunner {
|
|
3
|
+
constructor(taskArg) {
|
|
4
|
+
// initialze by default
|
|
5
|
+
this.bufferCounter = 0;
|
|
6
|
+
this.task = taskArg;
|
|
7
|
+
}
|
|
8
|
+
trigger(x) {
|
|
9
|
+
if (!(this.bufferCounter >= this.task.bufferMax)) {
|
|
10
|
+
this.bufferCounter++;
|
|
11
|
+
}
|
|
12
|
+
const returnPromise = this.task.cycleCounter.getPromiseForCycle(this.bufferCounter + 1);
|
|
13
|
+
if (!this.task.running) {
|
|
14
|
+
this._run(x);
|
|
15
|
+
}
|
|
16
|
+
return returnPromise;
|
|
17
|
+
}
|
|
18
|
+
_run(x) {
|
|
19
|
+
const recursiveBufferRunner = (x) => {
|
|
20
|
+
if (this.bufferCounter >= 0) {
|
|
21
|
+
this.task.running = true;
|
|
22
|
+
Task.runTask(this.task, { x: x }).then((x) => {
|
|
23
|
+
this.bufferCounter--; // this.bufferCounter drops below 0, the recursion stops.
|
|
24
|
+
this.task.cycleCounter.informOfCycle(x);
|
|
25
|
+
recursiveBufferRunner(x);
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
this.task.running = false;
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
recursiveBufferRunner(x);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza2J1ZmZlci5jbGFzc2VzLmJ1ZmZlcnJ1bm5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3Rhc2tidWZmZXIuY2xhc3Nlcy5idWZmZXJydW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRXBELE1BQU0sT0FBTyxZQUFZO0lBSXZCLFlBQVksT0FBYTtRQUZ6Qix1QkFBdUI7UUFDaEIsa0JBQWEsR0FBVyxDQUFDLENBQUM7UUFFL0IsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVNLE9BQU8sQ0FBQyxDQUFNO1FBQ25CLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUNoRCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDdEI7UUFDRCxNQUFNLGFBQWEsR0FBaUIsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQzNFLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUN2QixDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDZDtRQUNELE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7SUFFTyxJQUFJLENBQUMsQ0FBTTtRQUNqQixNQUFNLHFCQUFxQixHQUFHLENBQUMsQ0FBTSxFQUFFLEVBQUU7WUFDdkMsSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsRUFBRTtnQkFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO2dCQUN6QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtvQkFDM0MsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMseURBQXlEO29CQUMvRSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3hDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMzQixDQUFDLENBQUMsQ0FBQzthQUNKO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQzthQUMzQjtRQUNILENBQUMsQ0FBQztRQUNGLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNCLENBQUM7Q0FDRiJ9
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as plugins from './taskbuffer.plugins.js';
|
|
2
|
+
import { Task } from './taskbuffer.classes.task.js';
|
|
3
|
+
export interface ICycleObject {
|
|
4
|
+
cycleCounter: number;
|
|
5
|
+
deferred: plugins.smartpromise.Deferred<any>;
|
|
6
|
+
}
|
|
7
|
+
export declare class CycleCounter {
|
|
8
|
+
task: Task;
|
|
9
|
+
cycleObjectArray: ICycleObject[];
|
|
10
|
+
constructor(taskArg: Task);
|
|
11
|
+
getPromiseForCycle(cycleCountArg: number): Promise<unknown>;
|
|
12
|
+
informOfCycle(x: any): void;
|
|
13
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import * as plugins from './taskbuffer.plugins.js';
|
|
2
|
+
import './taskbuffer.classes.task.js';
|
|
3
|
+
export class CycleCounter {
|
|
4
|
+
constructor(taskArg) {
|
|
5
|
+
this.cycleObjectArray = [];
|
|
6
|
+
this.task = taskArg;
|
|
7
|
+
}
|
|
8
|
+
getPromiseForCycle(cycleCountArg) {
|
|
9
|
+
const done = plugins.smartpromise.defer();
|
|
10
|
+
const cycleObject = {
|
|
11
|
+
cycleCounter: cycleCountArg,
|
|
12
|
+
deferred: done,
|
|
13
|
+
};
|
|
14
|
+
this.cycleObjectArray.push(cycleObject);
|
|
15
|
+
return done.promise;
|
|
16
|
+
}
|
|
17
|
+
informOfCycle(x) {
|
|
18
|
+
const newCycleObjectArray = [];
|
|
19
|
+
this.cycleObjectArray.forEach((cycleObjectArg) => {
|
|
20
|
+
cycleObjectArg.cycleCounter--;
|
|
21
|
+
if (cycleObjectArg.cycleCounter <= 0) {
|
|
22
|
+
cycleObjectArg.deferred.resolve(x);
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
newCycleObjectArray.push(cycleObjectArg);
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
this.cycleObjectArray = newCycleObjectArray;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza2J1ZmZlci5jbGFzc2VzLmN5Y2xlY291bnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3Rhc2tidWZmZXIuY2xhc3Nlcy5jeWNsZWNvdW50ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSx5QkFBeUIsQ0FBQztBQUNuRCxPQUFxQiw4QkFBOEIsQ0FBQztBQU9wRCxNQUFNLE9BQU8sWUFBWTtJQUd2QixZQUFZLE9BQWE7UUFEbEIscUJBQWdCLEdBQW1CLEVBQUUsQ0FBQztRQUUzQyxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBQ00sa0JBQWtCLENBQUMsYUFBcUI7UUFDN0MsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMxQyxNQUFNLFdBQVcsR0FBaUI7WUFDaEMsWUFBWSxFQUFFLGFBQWE7WUFDM0IsUUFBUSxFQUFFLElBQUk7U0FDZixDQUFDO1FBQ0YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN4QyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUNNLGFBQWEsQ0FBQyxDQUFNO1FBQ3pCLE1BQU0sbUJBQW1CLEdBQW1CLEVBQUUsQ0FBQztRQUMvQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsY0FBYyxFQUFFLEVBQUU7WUFDL0MsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzlCLElBQUksY0FBYyxDQUFDLFlBQVksSUFBSSxDQUFDLEVBQUU7Z0JBQ3BDLGNBQWMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3BDO2lCQUFNO2dCQUNMLG1CQUFtQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQzthQUMxQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGdCQUFnQixHQUFHLG1CQUFtQixDQUFDO0lBQzlDLENBQUM7Q0FDRiJ9
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* constains all data for the final coordinator to actually make an informed decision
|
|
3
|
+
*/
|
|
4
|
+
export interface IDistributedTaskRequest {
|
|
5
|
+
/**
|
|
6
|
+
* this needs to correlate to the consultationResult
|
|
7
|
+
*/
|
|
8
|
+
submitterRandomId: string;
|
|
9
|
+
taskName: string;
|
|
10
|
+
taskVersion: string;
|
|
11
|
+
taskExecutionTime: number;
|
|
12
|
+
taskExecutionTimeout: number;
|
|
13
|
+
taskExecutionParallel: number;
|
|
14
|
+
status: 'requesting' | 'gotRejected' | 'failed' | 'succeeded';
|
|
15
|
+
}
|
|
16
|
+
export interface IDistributedTaskRequestResult {
|
|
17
|
+
/**
|
|
18
|
+
* this needs to correlate to the decisionInfoBasis
|
|
19
|
+
*/
|
|
20
|
+
submitterRandomId: string;
|
|
21
|
+
considered: boolean;
|
|
22
|
+
rank: string;
|
|
23
|
+
reason: string;
|
|
24
|
+
shouldTrigger: boolean;
|
|
25
|
+
}
|
|
26
|
+
export declare abstract class AbstractDistributedCoordinator {
|
|
27
|
+
abstract fireDistributedTaskRequest(infoBasisArg: IDistributedTaskRequest): Promise<IDistributedTaskRequestResult>;
|
|
28
|
+
abstract updateDistributedTaskRequest(infoBasisArg: IDistributedTaskRequest): Promise<void>;
|
|
29
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import './taskbuffer.classes.task.js';
|
|
2
|
+
import './taskbuffer.plugins.js';
|
|
3
|
+
export class AbstractDistributedCoordinator {
|
|
4
|
+
}
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza2J1ZmZlci5jbGFzc2VzLmRpc3RyaWJ1dGVkY29vcmRpbmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy90YXNrYnVmZmVyLmNsYXNzZXMuZGlzdHJpYnV0ZWRjb29yZGluYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFxQiw4QkFBOEIsQ0FBQztBQUNwRCxPQUF5Qix5QkFBeUIsQ0FBQztBQTZCbkQsTUFBTSxPQUFnQiw4QkFBOEI7Q0FHbkQifQ==
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import * as plugins from './taskbuffer.plugins.js';
|
|
2
|
+
import { BufferRunner } from './taskbuffer.classes.bufferrunner.js';
|
|
3
|
+
import { CycleCounter } from './taskbuffer.classes.cyclecounter.js';
|
|
4
|
+
export interface ITaskFunction {
|
|
5
|
+
(x?: any): PromiseLike<any>;
|
|
6
|
+
}
|
|
7
|
+
export type TPreOrAfterTaskFunction = () => Task;
|
|
8
|
+
export declare class Task {
|
|
9
|
+
static extractTask(preOrAfterTaskArg: Task | TPreOrAfterTaskFunction): Task;
|
|
10
|
+
static emptyTaskFunction: ITaskFunction;
|
|
11
|
+
static isTask: (taskArg: Task) => boolean;
|
|
12
|
+
static isTaskTouched: (taskArg: Task | TPreOrAfterTaskFunction, touchedTasksArray: Task[]) => boolean;
|
|
13
|
+
static runTask: (taskArg: Task | TPreOrAfterTaskFunction, optionsArg: {
|
|
14
|
+
x?: any;
|
|
15
|
+
touchedTasksArray?: Task[];
|
|
16
|
+
}) => Promise<unknown>;
|
|
17
|
+
name: string;
|
|
18
|
+
/**
|
|
19
|
+
* the version of the task
|
|
20
|
+
* should follow semver
|
|
21
|
+
* might be important for DistributedCoordinator
|
|
22
|
+
*/
|
|
23
|
+
version: string;
|
|
24
|
+
taskFunction: ITaskFunction;
|
|
25
|
+
buffered: boolean;
|
|
26
|
+
cronJob: plugins.smarttime.CronJob;
|
|
27
|
+
bufferMax: number;
|
|
28
|
+
execDelay: number;
|
|
29
|
+
timeout: number;
|
|
30
|
+
preTask: Task | TPreOrAfterTaskFunction;
|
|
31
|
+
afterTask: Task | TPreOrAfterTaskFunction;
|
|
32
|
+
running: boolean;
|
|
33
|
+
bufferRunner: BufferRunner;
|
|
34
|
+
cycleCounter: CycleCounter;
|
|
35
|
+
idle: boolean;
|
|
36
|
+
private _state;
|
|
37
|
+
constructor(optionsArg: {
|
|
38
|
+
/**
|
|
39
|
+
* the task function to run, must return promise
|
|
40
|
+
*/
|
|
41
|
+
taskFunction: ITaskFunction;
|
|
42
|
+
/**
|
|
43
|
+
* any other task to run before
|
|
44
|
+
*/
|
|
45
|
+
preTask?: Task | TPreOrAfterTaskFunction;
|
|
46
|
+
/**
|
|
47
|
+
* any other task to run after
|
|
48
|
+
*/
|
|
49
|
+
afterTask?: Task | TPreOrAfterTaskFunction;
|
|
50
|
+
/**
|
|
51
|
+
* wether this task should run buffered
|
|
52
|
+
*/
|
|
53
|
+
buffered?: boolean;
|
|
54
|
+
/**
|
|
55
|
+
* the maximum buffer
|
|
56
|
+
*/
|
|
57
|
+
bufferMax?: number;
|
|
58
|
+
/**
|
|
59
|
+
* the execution delay, before the task is executed
|
|
60
|
+
* only makes sense when running in buffered mode
|
|
61
|
+
*/
|
|
62
|
+
execDelay?: number;
|
|
63
|
+
/**
|
|
64
|
+
* the name of the task
|
|
65
|
+
*/
|
|
66
|
+
name?: string;
|
|
67
|
+
});
|
|
68
|
+
/**
|
|
69
|
+
* trigger the task. Will trigger buffered if this.buffered is true
|
|
70
|
+
*/
|
|
71
|
+
trigger(x?: any): Promise<any>;
|
|
72
|
+
/**
|
|
73
|
+
* trigger task unbuffered.
|
|
74
|
+
* will actually run the task, not considering any buffered limits.
|
|
75
|
+
*/
|
|
76
|
+
triggerUnBuffered(x?: any): Promise<any>;
|
|
77
|
+
/**
|
|
78
|
+
* trigger task buffered.
|
|
79
|
+
* note: .trigger() also calls this function
|
|
80
|
+
*/
|
|
81
|
+
triggerBuffered(x?: any): Promise<any>;
|
|
82
|
+
get state(): string;
|
|
83
|
+
set state(stateArg: string);
|
|
84
|
+
}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import * as plugins from './taskbuffer.plugins.js';
|
|
2
|
+
import { BufferRunner } from './taskbuffer.classes.bufferrunner.js';
|
|
3
|
+
import { CycleCounter } from './taskbuffer.classes.cyclecounter.js';
|
|
4
|
+
import { logger } from './taskbuffer.logging.js';
|
|
5
|
+
export class Task {
|
|
6
|
+
// STATIC
|
|
7
|
+
static extractTask(preOrAfterTaskArg) {
|
|
8
|
+
switch (true) {
|
|
9
|
+
case !preOrAfterTaskArg:
|
|
10
|
+
return null;
|
|
11
|
+
case preOrAfterTaskArg instanceof Task:
|
|
12
|
+
return preOrAfterTaskArg;
|
|
13
|
+
case typeof preOrAfterTaskArg === 'function':
|
|
14
|
+
const taskFunction = preOrAfterTaskArg;
|
|
15
|
+
return taskFunction();
|
|
16
|
+
default:
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
static { this.emptyTaskFunction = function (x) {
|
|
21
|
+
const done = plugins.smartpromise.defer();
|
|
22
|
+
done.resolve();
|
|
23
|
+
return done.promise;
|
|
24
|
+
}; }
|
|
25
|
+
static { this.isTask = (taskArg) => {
|
|
26
|
+
if (taskArg instanceof Task && typeof taskArg.taskFunction === 'function') {
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
}; }
|
|
33
|
+
static { this.isTaskTouched = (taskArg, touchedTasksArray) => {
|
|
34
|
+
const taskToCheck = Task.extractTask(taskArg);
|
|
35
|
+
let result = false;
|
|
36
|
+
for (const keyArg in touchedTasksArray) {
|
|
37
|
+
if (taskToCheck === touchedTasksArray[keyArg]) {
|
|
38
|
+
result = true;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return result;
|
|
42
|
+
}; }
|
|
43
|
+
static { this.runTask = async (taskArg, optionsArg) => {
|
|
44
|
+
// extracts the task in case it is specified as a return value of a function
|
|
45
|
+
const taskToRun = Task.extractTask(taskArg);
|
|
46
|
+
const done = plugins.smartpromise.defer();
|
|
47
|
+
// pay respect to execDelay
|
|
48
|
+
if (taskToRun.execDelay) {
|
|
49
|
+
await plugins.smartdelay.delayFor(taskToRun.execDelay);
|
|
50
|
+
}
|
|
51
|
+
// set running params
|
|
52
|
+
taskToRun.running = true;
|
|
53
|
+
done.promise.then(async () => {
|
|
54
|
+
taskToRun.running = false;
|
|
55
|
+
});
|
|
56
|
+
// handle options
|
|
57
|
+
const options = {
|
|
58
|
+
...{ x: undefined, touchedTasksArray: [] },
|
|
59
|
+
...optionsArg,
|
|
60
|
+
};
|
|
61
|
+
const x = options.x;
|
|
62
|
+
const touchedTasksArray = options.touchedTasksArray;
|
|
63
|
+
touchedTasksArray.push(taskToRun);
|
|
64
|
+
// run the task cascade
|
|
65
|
+
const localDeferred = plugins.smartpromise.defer();
|
|
66
|
+
localDeferred.promise
|
|
67
|
+
.then(() => {
|
|
68
|
+
// lets run any preTask
|
|
69
|
+
if (taskToRun.preTask && !Task.isTaskTouched(taskToRun.preTask, touchedTasksArray)) {
|
|
70
|
+
return Task.runTask(taskToRun.preTask, { x, touchedTasksArray });
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
const done2 = plugins.smartpromise.defer();
|
|
74
|
+
done2.resolve(x);
|
|
75
|
+
return done2.promise;
|
|
76
|
+
}
|
|
77
|
+
})
|
|
78
|
+
.then(async (x) => {
|
|
79
|
+
// lets run the main task
|
|
80
|
+
try {
|
|
81
|
+
return await taskToRun.taskFunction(x);
|
|
82
|
+
}
|
|
83
|
+
catch (e) {
|
|
84
|
+
console.log(e);
|
|
85
|
+
}
|
|
86
|
+
})
|
|
87
|
+
.then((x) => {
|
|
88
|
+
if (taskToRun.afterTask && !Task.isTaskTouched(taskToRun.afterTask, touchedTasksArray)) {
|
|
89
|
+
return Task.runTask(taskToRun.afterTask, { x: x, touchedTasksArray: touchedTasksArray });
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
const done2 = plugins.smartpromise.defer();
|
|
93
|
+
done2.resolve(x);
|
|
94
|
+
return done2.promise;
|
|
95
|
+
}
|
|
96
|
+
})
|
|
97
|
+
.then((x) => {
|
|
98
|
+
done.resolve(x);
|
|
99
|
+
})
|
|
100
|
+
.catch((err) => {
|
|
101
|
+
console.log(err);
|
|
102
|
+
});
|
|
103
|
+
localDeferred.resolve();
|
|
104
|
+
return await done.promise;
|
|
105
|
+
}; }
|
|
106
|
+
constructor(optionsArg) {
|
|
107
|
+
// initialize by default
|
|
108
|
+
this.running = false;
|
|
109
|
+
this.bufferRunner = new BufferRunner(this);
|
|
110
|
+
this.cycleCounter = new CycleCounter(this);
|
|
111
|
+
this.idle = true;
|
|
112
|
+
this._state = 'ready';
|
|
113
|
+
this.taskFunction = optionsArg.taskFunction;
|
|
114
|
+
this.preTask = optionsArg.preTask;
|
|
115
|
+
this.afterTask = optionsArg.afterTask;
|
|
116
|
+
this.idle = !this.running;
|
|
117
|
+
this.buffered = optionsArg.buffered;
|
|
118
|
+
this.bufferMax = optionsArg.bufferMax;
|
|
119
|
+
this.execDelay = optionsArg.execDelay;
|
|
120
|
+
this.name = optionsArg.name;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* trigger the task. Will trigger buffered if this.buffered is true
|
|
124
|
+
*/
|
|
125
|
+
trigger(x) {
|
|
126
|
+
if (this.buffered) {
|
|
127
|
+
return this.triggerBuffered(x);
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
return this.triggerUnBuffered(x);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* trigger task unbuffered.
|
|
135
|
+
* will actually run the task, not considering any buffered limits.
|
|
136
|
+
*/
|
|
137
|
+
triggerUnBuffered(x) {
|
|
138
|
+
return Task.runTask(this, { x: x });
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* trigger task buffered.
|
|
142
|
+
* note: .trigger() also calls this function
|
|
143
|
+
*/
|
|
144
|
+
triggerBuffered(x) {
|
|
145
|
+
return this.bufferRunner.trigger(x);
|
|
146
|
+
}
|
|
147
|
+
get state() {
|
|
148
|
+
return this._state;
|
|
149
|
+
}
|
|
150
|
+
set state(stateArg) {
|
|
151
|
+
if (stateArg === 'locked') {
|
|
152
|
+
this._state = 'locked';
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
logger.log('error', `state type ${stateArg} could not be set`);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza2J1ZmZlci5jbGFzc2VzLnRhc2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy90YXNrYnVmZmVyLmNsYXNzZXMudGFzay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFcEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBUWpELE1BQU0sT0FBTyxJQUFJO0lBQ2YsU0FBUztJQUNGLE1BQU0sQ0FBQyxXQUFXLENBQUMsaUJBQWlEO1FBQ3pFLFFBQVEsSUFBSSxFQUFFO1lBQ1osS0FBSyxDQUFDLGlCQUFpQjtnQkFDckIsT0FBTyxJQUFJLENBQUM7WUFDZCxLQUFLLGlCQUFpQixZQUFZLElBQUk7Z0JBQ3BDLE9BQU8saUJBQXlCLENBQUM7WUFDbkMsS0FBSyxPQUFPLGlCQUFpQixLQUFLLFVBQVU7Z0JBQzFDLE1BQU0sWUFBWSxHQUFHLGlCQUE0QyxDQUFDO2dCQUNsRSxPQUFPLFlBQVksRUFBRSxDQUFDO1lBQ3hCO2dCQUNFLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7SUFDSCxDQUFDO2FBRWEsc0JBQWlCLEdBQWtCLFVBQVUsQ0FBQztRQUMxRCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNmLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDLENBQUM7YUFFWSxXQUFNLEdBQUcsQ0FBQyxPQUFhLEVBQVcsRUFBRTtRQUNoRCxJQUFJLE9BQU8sWUFBWSxJQUFJLElBQUksT0FBTyxPQUFPLENBQUMsWUFBWSxLQUFLLFVBQVUsRUFBRTtZQUN6RSxPQUFPLElBQUksQ0FBQztT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
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Task } from './taskbuffer.classes.task.js';
|
|
2
|
+
export declare class Taskchain extends Task {
|
|
3
|
+
taskArray: Task[];
|
|
4
|
+
constructor(optionsArg: {
|
|
5
|
+
taskArray: Task[];
|
|
6
|
+
name?: string;
|
|
7
|
+
log?: boolean;
|
|
8
|
+
buffered?: boolean;
|
|
9
|
+
bufferMax?: number;
|
|
10
|
+
});
|
|
11
|
+
addTask(taskArg: Task): void;
|
|
12
|
+
removeTask(taskArg: Task): void;
|
|
13
|
+
shiftTask(): void;
|
|
14
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
// TaskChain chains tasks
|
|
2
|
+
// and extends Task
|
|
3
|
+
import * as plugins from './taskbuffer.plugins.js';
|
|
4
|
+
import { Task } from './taskbuffer.classes.task.js';
|
|
5
|
+
import { logger } from './taskbuffer.logging.js';
|
|
6
|
+
export class Taskchain extends Task {
|
|
7
|
+
constructor(optionsArg) {
|
|
8
|
+
const options = {
|
|
9
|
+
...{
|
|
10
|
+
name: 'unnamed Taskchain',
|
|
11
|
+
log: false,
|
|
12
|
+
},
|
|
13
|
+
...optionsArg,
|
|
14
|
+
...{
|
|
15
|
+
taskFunction: (x) => {
|
|
16
|
+
// this is the function that gets executed when TaskChain is triggered
|
|
17
|
+
const done = plugins.smartpromise.defer(); // this is the starting Deferred object
|
|
18
|
+
let taskCounter = 0; // counter for iterating async over the taskArray
|
|
19
|
+
const iterateTasks = (x) => {
|
|
20
|
+
if (typeof this.taskArray[taskCounter] !== 'undefined') {
|
|
21
|
+
console.log(this.name + ' running: Task' + this.taskArray[taskCounter].name);
|
|
22
|
+
this.taskArray[taskCounter].trigger(x).then((x) => {
|
|
23
|
+
logger.log('info', this.taskArray[taskCounter].name);
|
|
24
|
+
taskCounter++;
|
|
25
|
+
iterateTasks(x);
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
console.log('Taskchain "' + this.name + '" completed successfully');
|
|
30
|
+
done.resolve(x);
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
iterateTasks(x);
|
|
34
|
+
return done.promise;
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
super(options);
|
|
39
|
+
this.taskArray = optionsArg.taskArray;
|
|
40
|
+
}
|
|
41
|
+
addTask(taskArg) {
|
|
42
|
+
this.taskArray.push(taskArg);
|
|
43
|
+
}
|
|
44
|
+
removeTask(taskArg) {
|
|
45
|
+
// TODO:
|
|
46
|
+
}
|
|
47
|
+
shiftTask() {
|
|
48
|
+
// TODO:
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza2J1ZmZlci5jbGFzc2VzLnRhc2tjaGFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3Rhc2tidWZmZXIuY2xhc3Nlcy50YXNrY2hhaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEseUJBQXlCO0FBQ3pCLG1CQUFtQjtBQUVuQixPQUFPLEtBQUssT0FBTyxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFakQsTUFBTSxPQUFPLFNBQVUsU0FBUSxJQUFJO0lBRWpDLFlBQVksVUFNWDtRQUNDLE1BQU0sT0FBTyxHQUFHO1lBQ2QsR0FBRztnQkFDRCxJQUFJLEVBQUUsbUJBQW1CO2dCQUN6QixHQUFHLEVBQUUsS0FBSzthQUNYO1lBQ0QsR0FBRyxVQUFVO1lBQ2IsR0FBRztnQkFDRCxZQUFZLEVBQUUsQ0FBQyxDQUFNLEVBQUUsRUFBRTtvQkFDdkIsc0VBQXNFO29CQUN0RSxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsdUNBQXVDO29CQUNsRixJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQyxpREFBaUQ7b0JBQ3RFLE1BQU0sWUFBWSxHQUFHLENBQUMsQ0FBTSxFQUFFLEVBQUU7d0JBQzlCLElBQUksT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxLQUFLLFdBQVcsRUFBRTs0QkFDdEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLGdCQUFnQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7NEJBQzdFLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dDQUNoRCxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO2dDQUNyRCxXQUFXLEVBQUUsQ0FBQztnQ0FDZCxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQ2xCLENBQUMsQ0FBQyxDQUFDO3lCQUNKOzZCQUFNOzRCQUNMLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsMEJBQTBCLENBQUMsQ0FBQzs0QkFDcEUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQzt5QkFDakI7b0JBQ0gsQ0FBQyxDQUFDO29CQUNGLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDaEIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO2dCQUN0QixDQUFDO2FBQ0Y7U0FDRixDQUFDO1FBQ0YsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDO0lBQ3hDLENBQUM7SUFDRCxPQUFPLENBQUMsT0FBYTtRQUNuQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBQ0QsVUFBVSxDQUFDLE9BQWE7UUFDdEIsUUFBUTtJQUNWLENBQUM7SUFDRCxTQUFTO1FBQ1AsUUFBUTtJQUNWLENBQUM7Q0FDRiJ9
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Task, ITaskFunction } from './taskbuffer.classes.task.js';
|
|
2
|
+
export declare class TaskDebounced<T = unknown> extends Task {
|
|
3
|
+
private _debouncedTaskFunction;
|
|
4
|
+
private _observableIntake;
|
|
5
|
+
constructor(optionsArg: {
|
|
6
|
+
name: string;
|
|
7
|
+
taskFunction: ITaskFunction;
|
|
8
|
+
debounceTimeInMillis: number;
|
|
9
|
+
});
|
|
10
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as plugins from './taskbuffer.plugins.js';
|
|
2
|
+
import { Task } from './taskbuffer.classes.task.js';
|
|
3
|
+
export class TaskDebounced extends Task {
|
|
4
|
+
constructor(optionsArg) {
|
|
5
|
+
super({
|
|
6
|
+
name: optionsArg.name,
|
|
7
|
+
taskFunction: async (x) => {
|
|
8
|
+
this._observableIntake.push(x);
|
|
9
|
+
},
|
|
10
|
+
});
|
|
11
|
+
this._observableIntake = new plugins.smartrx.ObservableIntake();
|
|
12
|
+
this.taskFunction = optionsArg.taskFunction;
|
|
13
|
+
this._observableIntake.observable
|
|
14
|
+
.pipe(plugins.smartrx.rxjs.ops.debounceTime(optionsArg.debounceTimeInMillis))
|
|
15
|
+
.subscribe((x) => {
|
|
16
|
+
this.taskFunction(x);
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza2J1ZmZlci5jbGFzc2VzLnRhc2tkZWJvdW5jZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy90YXNrYnVmZmVyLmNsYXNzZXMudGFza2RlYm91bmNlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLHlCQUF5QixDQUFDO0FBRW5ELE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sOEJBQThCLENBQUM7QUFFbkUsTUFBTSxPQUFPLGFBQTJCLFNBQVEsSUFBSTtJQUlsRCxZQUFZLFVBSVg7UUFDQyxLQUFLLENBQUM7WUFDSixJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUk7WUFDckIsWUFBWSxFQUFFLEtBQUssRUFBRSxDQUFJLEVBQUUsRUFBRTtnQkFDM0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqQyxDQUFDO1NBQ0YsQ0FBQyxDQUFDO1FBWkcsc0JBQWlCLEdBQUcsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFLLENBQUM7UUFhcEUsSUFBSSxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDO1FBQzVDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVO2FBQzlCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO2FBQzVFLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ2YsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDRiJ9
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import * as plugins from './taskbuffer.plugins.js';
|
|
2
|
+
import { Task } from './taskbuffer.classes.task.js';
|
|
3
|
+
import { AbstractDistributedCoordinator } from './taskbuffer.classes.distributedcoordinator.js';
|
|
4
|
+
export interface ICronJob {
|
|
5
|
+
cronString: string;
|
|
6
|
+
taskNameArg: string;
|
|
7
|
+
job: any;
|
|
8
|
+
}
|
|
9
|
+
export interface ITaskManagerConstructorOptions {
|
|
10
|
+
distributedCoordinator?: AbstractDistributedCoordinator;
|
|
11
|
+
}
|
|
12
|
+
export declare class TaskManager {
|
|
13
|
+
randomId: string;
|
|
14
|
+
taskMap: plugins.lik.ObjectMap<Task>;
|
|
15
|
+
private cronJobManager;
|
|
16
|
+
options: ITaskManagerConstructorOptions;
|
|
17
|
+
constructor(optionosArg?: ITaskManagerConstructorOptions);
|
|
18
|
+
/**
|
|
19
|
+
* checks if a task is already present
|
|
20
|
+
* @param taskNameArg
|
|
21
|
+
*/
|
|
22
|
+
getTaskByName(taskNameArg: string): Task;
|
|
23
|
+
/**
|
|
24
|
+
* adds a Task to the TaskManager
|
|
25
|
+
* @param taskArg
|
|
26
|
+
*/
|
|
27
|
+
addTask(taskArg: Task): void;
|
|
28
|
+
/**
|
|
29
|
+
* adds and schedules a task at once
|
|
30
|
+
* @param taskArg
|
|
31
|
+
* @param cronStringArg
|
|
32
|
+
*/
|
|
33
|
+
addAndScheduleTask(taskArg: Task, cronStringArg: string): void;
|
|
34
|
+
/**
|
|
35
|
+
* triggers a task in the TaskManagerByName
|
|
36
|
+
* @param taskNameArg
|
|
37
|
+
*/
|
|
38
|
+
triggerTaskByName(taskNameArg: string): Promise<any>;
|
|
39
|
+
triggerTask(task: Task): Promise<any>;
|
|
40
|
+
/**
|
|
41
|
+
* schedules the task by name
|
|
42
|
+
* @param taskNameArg
|
|
43
|
+
*/
|
|
44
|
+
scheduleTaskByName(taskNameArg: string, cronStringArg: string): void;
|
|
45
|
+
/**
|
|
46
|
+
* deschedules a task by name
|
|
47
|
+
* @param taskNameArg
|
|
48
|
+
*/
|
|
49
|
+
descheduleTaskByName(taskNameArg: string): void;
|
|
50
|
+
/**
|
|
51
|
+
* deschedules a task
|
|
52
|
+
* @param task
|
|
53
|
+
*/
|
|
54
|
+
descheduleTask(task: Task): Promise<void>;
|
|
55
|
+
/**
|
|
56
|
+
* returns all schedules of a specific task
|
|
57
|
+
* @param taskNameArg
|
|
58
|
+
*/
|
|
59
|
+
getSchedulesForTaskName(taskNameArg: string): void;
|
|
60
|
+
/**
|
|
61
|
+
* starts the taskmanager
|
|
62
|
+
*/
|
|
63
|
+
start(): void;
|
|
64
|
+
/**
|
|
65
|
+
* stops the taskmanager
|
|
66
|
+
*/
|
|
67
|
+
stop(): void;
|
|
68
|
+
}
|