@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.
Files changed (48) hide show
  1. package/LICENSE +21 -0
  2. package/dist_bundle/bundle.js +18376 -0
  3. package/dist_bundle/bundle.js.map +7 -0
  4. package/dist_ts/00_commitinfo_data.d.ts +8 -0
  5. package/dist_ts/00_commitinfo_data.js +9 -0
  6. package/dist_ts/index.d.ts +10 -0
  7. package/dist_ts/index.js +10 -0
  8. package/dist_ts/taskbuffer.classes.bufferrunner.d.ts +8 -0
  9. package/dist_ts/taskbuffer.classes.bufferrunner.js +35 -0
  10. package/dist_ts/taskbuffer.classes.cyclecounter.d.ts +13 -0
  11. package/dist_ts/taskbuffer.classes.cyclecounter.js +31 -0
  12. package/dist_ts/taskbuffer.classes.distributedcoordinator.d.ts +29 -0
  13. package/dist_ts/taskbuffer.classes.distributedcoordinator.js +5 -0
  14. package/dist_ts/taskbuffer.classes.task.d.ts +84 -0
  15. package/dist_ts/taskbuffer.classes.task.js +159 -0
  16. package/dist_ts/taskbuffer.classes.taskchain.d.ts +14 -0
  17. package/dist_ts/taskbuffer.classes.taskchain.js +51 -0
  18. package/dist_ts/taskbuffer.classes.taskdebounced.d.ts +10 -0
  19. package/dist_ts/taskbuffer.classes.taskdebounced.js +20 -0
  20. package/dist_ts/taskbuffer.classes.taskmanager.d.ts +68 -0
  21. package/dist_ts/taskbuffer.classes.taskmanager.js +129 -0
  22. package/dist_ts/taskbuffer.classes.taskonce.d.ts +11 -0
  23. package/dist_ts/taskbuffer.classes.taskonce.js +20 -0
  24. package/dist_ts/taskbuffer.classes.taskparallel.d.ts +7 -0
  25. package/dist_ts/taskbuffer.classes.taskparallel.js +23 -0
  26. package/dist_ts/taskbuffer.classes.taskrunner.d.ts +30 -0
  27. package/dist_ts/taskbuffer.classes.taskrunner.js +54 -0
  28. package/dist_ts/taskbuffer.logging.d.ts +2 -0
  29. package/dist_ts/taskbuffer.logging.js +3 -0
  30. package/dist_ts/taskbuffer.plugins.d.ts +8 -0
  31. package/dist_ts/taskbuffer.plugins.js +9 -0
  32. package/npmextra.json +18 -0
  33. package/package.json +62 -0
  34. package/readme.md +63 -0
  35. package/ts/00_commitinfo_data.ts +8 -0
  36. package/ts/index.ts +12 -0
  37. package/ts/taskbuffer.classes.bufferrunner.ts +39 -0
  38. package/ts/taskbuffer.classes.cyclecounter.ts +36 -0
  39. package/ts/taskbuffer.classes.distributedcoordinator.ts +34 -0
  40. package/ts/taskbuffer.classes.task.ts +236 -0
  41. package/ts/taskbuffer.classes.taskchain.ts +58 -0
  42. package/ts/taskbuffer.classes.taskdebounced.ts +27 -0
  43. package/ts/taskbuffer.classes.taskmanager.ts +155 -0
  44. package/ts/taskbuffer.classes.taskonce.ts +21 -0
  45. package/ts/taskbuffer.classes.taskparallel.ts +24 -0
  46. package/ts/taskbuffer.classes.taskrunner.ts +63 -0
  47. package/ts/taskbuffer.logging.ts +3 -0
  48. package/ts/taskbuffer.plugins.ts +9 -0
@@ -0,0 +1,8 @@
1
+ /**
2
+ * autocreated commitinfo by @pushrocks/commitinfo
3
+ */
4
+ export declare const commitinfo: {
5
+ name: string;
6
+ version: string;
7
+ description: string;
8
+ };
@@ -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 };
@@ -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,8 @@
1
+ import { Task } from './taskbuffer.classes.task.js';
2
+ export declare class BufferRunner {
3
+ task: Task;
4
+ bufferCounter: number;
5
+ constructor(taskArg: Task);
6
+ trigger(x: any): Promise<any>;
7
+ private _run;
8
+ }
@@ -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
+ }