@push.rocks/taskbuffer 3.2.0 → 3.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts_web/ts/index.d.ts +13 -0
- package/dist_ts_web/ts/index.js +12 -0
- package/dist_ts_web/ts/taskbuffer.classes.bufferrunner.d.ts +8 -0
- package/dist_ts_web/ts/taskbuffer.classes.bufferrunner.js +28 -0
- package/dist_ts_web/ts/taskbuffer.classes.cyclecounter.d.ts +13 -0
- package/dist_ts_web/ts/taskbuffer.classes.cyclecounter.js +31 -0
- package/dist_ts_web/ts/taskbuffer.classes.distributedcoordinator.d.ts +27 -0
- package/dist_ts_web/ts/taskbuffer.classes.distributedcoordinator.js +5 -0
- package/dist_ts_web/ts/taskbuffer.classes.task.d.ts +86 -0
- package/dist_ts_web/ts/taskbuffer.classes.task.js +257 -0
- package/dist_ts_web/ts/taskbuffer.classes.taskchain.d.ts +14 -0
- package/dist_ts_web/ts/taskbuffer.classes.taskchain.js +51 -0
- package/dist_ts_web/ts/taskbuffer.classes.taskdebounced.d.ts +10 -0
- package/dist_ts_web/ts/taskbuffer.classes.taskdebounced.js +20 -0
- package/dist_ts_web/ts/taskbuffer.classes.taskmanager.d.ts +49 -0
- package/dist_ts_web/ts/taskbuffer.classes.taskmanager.js +208 -0
- package/dist_ts_web/ts/taskbuffer.classes.taskonce.d.ts +11 -0
- package/dist_ts_web/ts/taskbuffer.classes.taskonce.js +20 -0
- package/dist_ts_web/ts/taskbuffer.classes.taskparallel.d.ts +7 -0
- package/dist_ts_web/ts/taskbuffer.classes.taskparallel.js +23 -0
- package/dist_ts_web/ts/taskbuffer.classes.taskrunner.d.ts +30 -0
- package/dist_ts_web/ts/taskbuffer.classes.taskrunner.js +54 -0
- package/dist_ts_web/ts/taskbuffer.classes.taskstep.d.ts +27 -0
- package/dist_ts_web/ts/taskbuffer.classes.taskstep.js +37 -0
- package/dist_ts_web/ts/taskbuffer.interfaces.d.ts +36 -0
- package/dist_ts_web/ts/taskbuffer.interfaces.js +2 -0
- package/dist_ts_web/ts/taskbuffer.logging.d.ts +2 -0
- package/dist_ts_web/ts/taskbuffer.logging.js +3 -0
- package/dist_ts_web/ts/taskbuffer.plugins.d.ts +8 -0
- package/dist_ts_web/ts/taskbuffer.plugins.js +9 -0
- package/dist_ts_web/ts_web/00_commitinfo_data.d.ts +8 -0
- package/dist_ts_web/ts_web/00_commitinfo_data.js +9 -0
- package/dist_ts_web/ts_web/demorunner.d.ts +1 -0
- package/dist_ts_web/ts_web/demorunner.js +33 -0
- package/dist_ts_web/ts_web/elements/taskbuffer-dashboard.demo.d.ts +2 -0
- package/dist_ts_web/ts_web/elements/taskbuffer-dashboard.demo.js +285 -0
- package/dist_ts_web/ts_web/index.d.ts +2 -0
- package/dist_ts_web/ts_web/index.js +3 -0
- package/dist_ts_web/ts_web/taskbuffer-dashboard.d.ts +24 -0
- package/dist_ts_web/ts_web/taskbuffer-dashboard.js +549 -0
- package/package.json +13 -12
- package/readme.md +429 -930
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/elements/taskbuffer-dashboard.demo.ts +311 -0
- package/ts_web/index.ts +12 -0
- package/ts_web/taskbuffer-dashboard.ts +541 -0
package/LICENSE
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
The MIT License (MIT)
|
|
2
2
|
|
|
3
|
-
Copyright (c) 2016
|
|
3
|
+
Copyright (c) 2016 Task Venture Capital GmbH <hello@task.vc>
|
|
4
4
|
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
6
|
of this software and associated documentation files (the "Software"), to deal
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@push.rocks/taskbuffer',
|
|
6
|
-
version: '3.
|
|
6
|
+
version: '3.5.0',
|
|
7
7
|
description: 'A flexible task management library supporting TypeScript, allowing for task buffering, scheduling, and execution with dependency management.'
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSx3QkFBd0I7SUFDOUIsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLDhJQUE4STtDQUM1SixDQUFBIn0=
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export { Task } from './taskbuffer.classes.task.js';
|
|
2
|
+
export type { ITaskFunction, StepNames } 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
|
+
export { TaskStep } from './taskbuffer.classes.taskstep.js';
|
|
10
|
+
export type { ITaskStep } from './taskbuffer.classes.taskstep.js';
|
|
11
|
+
export type { ITaskMetadata, ITaskExecutionReport, IScheduledTaskInfo } from './taskbuffer.interfaces.js';
|
|
12
|
+
import * as distributedCoordination from './taskbuffer.classes.distributedcoordinator.js';
|
|
13
|
+
export { distributedCoordination };
|
|
@@ -0,0 +1,12 @@
|
|
|
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
|
+
// Task step system
|
|
9
|
+
export { TaskStep } from './taskbuffer.classes.taskstep.js';
|
|
10
|
+
import * as distributedCoordination from './taskbuffer.classes.distributedcoordinator.js';
|
|
11
|
+
export { distributedCoordination };
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDbEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzVELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFdEUsbUJBQW1CO0FBQ25CLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQU01RCxPQUFPLEtBQUssdUJBQXVCLE1BQU0sZ0RBQWdELENBQUM7QUFDMUYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLENBQUMifQ==
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Task } from './taskbuffer.classes.task.js';
|
|
2
|
+
export class BufferRunner {
|
|
3
|
+
constructor(taskArg) {
|
|
4
|
+
// initialize 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);
|
|
13
|
+
if (!this.task.running) {
|
|
14
|
+
this._run(x);
|
|
15
|
+
}
|
|
16
|
+
return returnPromise;
|
|
17
|
+
}
|
|
18
|
+
async _run(x) {
|
|
19
|
+
this.task.running = true;
|
|
20
|
+
while (this.bufferCounter > 0) {
|
|
21
|
+
const result = await Task.runTask(this.task, { x: x });
|
|
22
|
+
this.bufferCounter--;
|
|
23
|
+
this.task.cycleCounter.informOfCycle(result);
|
|
24
|
+
}
|
|
25
|
+
this.task.running = false;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza2J1ZmZlci5jbGFzc2VzLmJ1ZmZlcnJ1bm5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL3Rhc2tidWZmZXIuY2xhc3Nlcy5idWZmZXJydW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRXBELE1BQU0sT0FBTyxZQUFZO0lBS3ZCLFlBQVksT0FBa0I7UUFIOUIsd0JBQXdCO1FBQ2pCLGtCQUFhLEdBQVcsQ0FBQyxDQUFDO1FBRy9CLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFTSxPQUFPLENBQUMsQ0FBTTtRQUNuQixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUNqRCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdkIsQ0FBQztRQUNELE1BQU0sYUFBYSxHQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUM7UUFDRCxPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDO0lBRU8sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFNO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUN6QixPQUFPLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDOUIsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN2RCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9DLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDNUIsQ0FBQztDQUNGIn0=
|
|
@@ -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<any>);
|
|
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 { Task } from './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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza2J1ZmZlci5jbGFzc2VzLmN5Y2xlY291bnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL3Rhc2tidWZmZXIuY2xhc3Nlcy5jeWNsZWNvdW50ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSx5QkFBeUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFPcEQsTUFBTSxPQUFPLFlBQVk7SUFHdkIsWUFBWSxPQUFrQjtRQUR2QixxQkFBZ0IsR0FBbUIsRUFBRSxDQUFDO1FBRTNDLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFDTSxrQkFBa0IsQ0FBQyxhQUFxQjtRQUM3QyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzFDLE1BQU0sV0FBVyxHQUFpQjtZQUNoQyxZQUFZLEVBQUUsYUFBYTtZQUMzQixRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUM7UUFDRixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBQ00sYUFBYSxDQUFDLENBQU07UUFDekIsTUFBTSxtQkFBbUIsR0FBbUIsRUFBRSxDQUFDO1FBQy9DLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxjQUFjLEVBQUUsRUFBRTtZQUMvQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDOUIsSUFBSSxjQUFjLENBQUMsWUFBWSxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNyQyxjQUFjLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyQyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sbUJBQW1CLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzNDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxtQkFBbUIsQ0FBQztJQUM5QyxDQUFDO0NBQ0YifQ==
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Contains all data for the final coordinator to make an informed decision.
|
|
3
|
+
*/
|
|
4
|
+
export interface IDistributedTaskRequest {
|
|
5
|
+
submitterId: string;
|
|
6
|
+
requestResponseId: string;
|
|
7
|
+
taskName: string;
|
|
8
|
+
taskVersion: string;
|
|
9
|
+
taskExecutionTime: number;
|
|
10
|
+
taskExecutionTimeout: number;
|
|
11
|
+
taskExecutionParallel: number;
|
|
12
|
+
status: 'requesting' | 'gotRejected' | 'failed' | 'succeeded';
|
|
13
|
+
}
|
|
14
|
+
export interface IDistributedTaskRequestResult {
|
|
15
|
+
submitterId: string;
|
|
16
|
+
requestResponseId: string;
|
|
17
|
+
considered: boolean;
|
|
18
|
+
rank: number;
|
|
19
|
+
reason: string;
|
|
20
|
+
shouldTrigger: boolean;
|
|
21
|
+
}
|
|
22
|
+
export declare abstract class AbstractDistributedCoordinator {
|
|
23
|
+
abstract fireDistributedTaskRequest(infoBasis: IDistributedTaskRequest): Promise<IDistributedTaskRequestResult>;
|
|
24
|
+
abstract updateDistributedTaskRequest(infoBasis: IDistributedTaskRequest): Promise<void>;
|
|
25
|
+
abstract start(): Promise<void>;
|
|
26
|
+
abstract stop(): Promise<void>;
|
|
27
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Task } from './taskbuffer.classes.task.js';
|
|
2
|
+
import * as plugins from './taskbuffer.plugins.js';
|
|
3
|
+
export class AbstractDistributedCoordinator {
|
|
4
|
+
}
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza2J1ZmZlci5jbGFzc2VzLmRpc3RyaWJ1dGVkY29vcmRpbmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy90YXNrYnVmZmVyLmNsYXNzZXMuZGlzdHJpYnV0ZWRjb29yZGluYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDcEQsT0FBTyxLQUFLLE9BQU8sTUFBTSx5QkFBeUIsQ0FBQztBQXlCbkQsTUFBTSxPQUFnQiw4QkFBOEI7Q0FXbkQifQ==
|
|
@@ -0,0 +1,86 @@
|
|
|
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 { type ITaskStep } from './taskbuffer.classes.taskstep.js';
|
|
5
|
+
import type { ITaskMetadata } from './taskbuffer.interfaces.js';
|
|
6
|
+
export interface ITaskFunction<T = undefined> {
|
|
7
|
+
(x?: any, setupValue?: T): PromiseLike<any>;
|
|
8
|
+
}
|
|
9
|
+
export interface ITaskSetupFunction<T = undefined> {
|
|
10
|
+
(): Promise<T>;
|
|
11
|
+
}
|
|
12
|
+
export type TPreOrAfterTaskFunction = () => Task<any>;
|
|
13
|
+
export type StepNames<T> = T extends ReadonlyArray<{
|
|
14
|
+
name: infer N;
|
|
15
|
+
}> ? N : never;
|
|
16
|
+
export declare class Task<T = undefined, TSteps extends ReadonlyArray<{
|
|
17
|
+
name: string;
|
|
18
|
+
description: string;
|
|
19
|
+
percentage: number;
|
|
20
|
+
}> = []> {
|
|
21
|
+
static extractTask<T = undefined, TSteps extends ReadonlyArray<{
|
|
22
|
+
name: string;
|
|
23
|
+
description: string;
|
|
24
|
+
percentage: number;
|
|
25
|
+
}> = []>(preOrAfterTaskArg: Task<T, TSteps> | TPreOrAfterTaskFunction): Task<T, TSteps>;
|
|
26
|
+
static emptyTaskFunction: ITaskFunction;
|
|
27
|
+
static isTask: (taskArg: Task<any>) => boolean;
|
|
28
|
+
static isTaskTouched<T = undefined, TSteps extends ReadonlyArray<{
|
|
29
|
+
name: string;
|
|
30
|
+
description: string;
|
|
31
|
+
percentage: number;
|
|
32
|
+
}> = []>(taskArg: Task<T, TSteps> | TPreOrAfterTaskFunction, touchedTasksArray: Task<T, TSteps>[]): boolean;
|
|
33
|
+
static runTask: <T_1, TSteps_1 extends ReadonlyArray<{
|
|
34
|
+
name: string;
|
|
35
|
+
description: string;
|
|
36
|
+
percentage: number;
|
|
37
|
+
}> = []>(taskArg: Task<T_1, TSteps_1> | TPreOrAfterTaskFunction, optionsArg: {
|
|
38
|
+
x?: any;
|
|
39
|
+
touchedTasksArray?: Task<T_1, TSteps_1>[];
|
|
40
|
+
}) => Promise<unknown>;
|
|
41
|
+
name: string;
|
|
42
|
+
version: string;
|
|
43
|
+
taskFunction: ITaskFunction<T>;
|
|
44
|
+
buffered: boolean;
|
|
45
|
+
cronJob: plugins.smarttime.CronJob;
|
|
46
|
+
bufferMax: number;
|
|
47
|
+
execDelay: number;
|
|
48
|
+
timeout: number;
|
|
49
|
+
preTask: Task<T, any> | TPreOrAfterTaskFunction;
|
|
50
|
+
afterTask: Task<T, any> | TPreOrAfterTaskFunction;
|
|
51
|
+
blockingTasks: Task[];
|
|
52
|
+
private finished;
|
|
53
|
+
private resolveFinished;
|
|
54
|
+
running: boolean;
|
|
55
|
+
bufferRunner: BufferRunner;
|
|
56
|
+
cycleCounter: CycleCounter;
|
|
57
|
+
lastRun?: Date;
|
|
58
|
+
runCount: number;
|
|
59
|
+
get idle(): boolean;
|
|
60
|
+
taskSetup: ITaskSetupFunction<T>;
|
|
61
|
+
setupValue: T;
|
|
62
|
+
private steps;
|
|
63
|
+
private stepProgress;
|
|
64
|
+
currentStepName?: string;
|
|
65
|
+
private providedSteps?;
|
|
66
|
+
constructor(optionsArg: {
|
|
67
|
+
taskFunction: ITaskFunction<T>;
|
|
68
|
+
preTask?: Task<T, any> | TPreOrAfterTaskFunction;
|
|
69
|
+
afterTask?: Task<T, any> | TPreOrAfterTaskFunction;
|
|
70
|
+
buffered?: boolean;
|
|
71
|
+
bufferMax?: number;
|
|
72
|
+
execDelay?: number;
|
|
73
|
+
name?: string;
|
|
74
|
+
taskSetup?: ITaskSetupFunction<T>;
|
|
75
|
+
steps?: TSteps;
|
|
76
|
+
});
|
|
77
|
+
trigger(x?: any): Promise<any>;
|
|
78
|
+
triggerUnBuffered(x?: any): Promise<any>;
|
|
79
|
+
triggerBuffered(x?: any): Promise<any>;
|
|
80
|
+
notifyStep(stepName: StepNames<TSteps>): void;
|
|
81
|
+
getProgress(): number;
|
|
82
|
+
getStepsMetadata(): ITaskStep[];
|
|
83
|
+
getMetadata(): ITaskMetadata;
|
|
84
|
+
resetSteps(): void;
|
|
85
|
+
private completeAllSteps;
|
|
86
|
+
}
|
|
@@ -0,0 +1,257 @@
|
|
|
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 { TaskStep } from './taskbuffer.classes.taskstep.js';
|
|
5
|
+
import { logger } from './taskbuffer.logging.js';
|
|
6
|
+
export class Task {
|
|
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 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
|
+
const taskToRun = Task.extractTask(taskArg);
|
|
45
|
+
const done = plugins.smartpromise.defer();
|
|
46
|
+
// Wait for all blocking tasks to finish
|
|
47
|
+
for (const task of taskToRun.blockingTasks) {
|
|
48
|
+
await task.finished;
|
|
49
|
+
}
|
|
50
|
+
if (!taskToRun.setupValue && taskToRun.taskSetup) {
|
|
51
|
+
taskToRun.setupValue = await taskToRun.taskSetup();
|
|
52
|
+
}
|
|
53
|
+
if (taskToRun.execDelay) {
|
|
54
|
+
await plugins.smartdelay.delayFor(taskToRun.execDelay);
|
|
55
|
+
}
|
|
56
|
+
taskToRun.running = true;
|
|
57
|
+
taskToRun.runCount++;
|
|
58
|
+
taskToRun.lastRun = new Date();
|
|
59
|
+
// Reset steps at the beginning of task execution
|
|
60
|
+
taskToRun.resetSteps();
|
|
61
|
+
done.promise.then(async () => {
|
|
62
|
+
taskToRun.running = false;
|
|
63
|
+
// Complete all steps when task finishes
|
|
64
|
+
taskToRun.completeAllSteps();
|
|
65
|
+
// When the task has finished running, resolve the finished promise
|
|
66
|
+
taskToRun.resolveFinished();
|
|
67
|
+
// Create a new finished promise for the next run
|
|
68
|
+
taskToRun.finished = new Promise((resolve) => {
|
|
69
|
+
taskToRun.resolveFinished = resolve;
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
const options = {
|
|
73
|
+
...{ x: undefined, touchedTasksArray: [] },
|
|
74
|
+
...optionsArg,
|
|
75
|
+
};
|
|
76
|
+
const x = options.x;
|
|
77
|
+
const touchedTasksArray = options.touchedTasksArray;
|
|
78
|
+
touchedTasksArray.push(taskToRun);
|
|
79
|
+
const localDeferred = plugins.smartpromise.defer();
|
|
80
|
+
localDeferred.promise
|
|
81
|
+
.then(() => {
|
|
82
|
+
if (taskToRun.preTask &&
|
|
83
|
+
!Task.isTaskTouched(taskToRun.preTask, touchedTasksArray)) {
|
|
84
|
+
return Task.runTask(taskToRun.preTask, { x, touchedTasksArray });
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
const done2 = plugins.smartpromise.defer();
|
|
88
|
+
done2.resolve(x);
|
|
89
|
+
return done2.promise;
|
|
90
|
+
}
|
|
91
|
+
})
|
|
92
|
+
.then(async (x) => {
|
|
93
|
+
try {
|
|
94
|
+
return await taskToRun.taskFunction(x, taskToRun.setupValue);
|
|
95
|
+
}
|
|
96
|
+
catch (e) {
|
|
97
|
+
console.log(e);
|
|
98
|
+
}
|
|
99
|
+
})
|
|
100
|
+
.then((x) => {
|
|
101
|
+
if (taskToRun.afterTask &&
|
|
102
|
+
!Task.isTaskTouched(taskToRun.afterTask, touchedTasksArray)) {
|
|
103
|
+
return Task.runTask(taskToRun.afterTask, {
|
|
104
|
+
x: x,
|
|
105
|
+
touchedTasksArray: touchedTasksArray,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
const done2 = plugins.smartpromise.defer();
|
|
110
|
+
done2.resolve(x);
|
|
111
|
+
return done2.promise;
|
|
112
|
+
}
|
|
113
|
+
})
|
|
114
|
+
.then((x) => {
|
|
115
|
+
done.resolve(x);
|
|
116
|
+
})
|
|
117
|
+
.catch((err) => {
|
|
118
|
+
console.log(err);
|
|
119
|
+
});
|
|
120
|
+
localDeferred.resolve();
|
|
121
|
+
return await done.promise;
|
|
122
|
+
}; }
|
|
123
|
+
get idle() {
|
|
124
|
+
return !this.running;
|
|
125
|
+
}
|
|
126
|
+
constructor(optionsArg) {
|
|
127
|
+
// Add a list to store the blocking tasks
|
|
128
|
+
this.blockingTasks = [];
|
|
129
|
+
this.running = false;
|
|
130
|
+
this.bufferRunner = new BufferRunner(this);
|
|
131
|
+
this.cycleCounter = new CycleCounter(this);
|
|
132
|
+
this.runCount = 0;
|
|
133
|
+
// Step tracking properties
|
|
134
|
+
this.steps = new Map();
|
|
135
|
+
this.stepProgress = new Map();
|
|
136
|
+
this.taskFunction = optionsArg.taskFunction;
|
|
137
|
+
this.preTask = optionsArg.preTask;
|
|
138
|
+
this.afterTask = optionsArg.afterTask;
|
|
139
|
+
this.buffered = optionsArg.buffered;
|
|
140
|
+
this.bufferMax = optionsArg.bufferMax;
|
|
141
|
+
this.execDelay = optionsArg.execDelay;
|
|
142
|
+
this.name = optionsArg.name;
|
|
143
|
+
this.taskSetup = optionsArg.taskSetup;
|
|
144
|
+
// Initialize steps if provided
|
|
145
|
+
if (optionsArg.steps) {
|
|
146
|
+
this.providedSteps = optionsArg.steps;
|
|
147
|
+
for (const stepConfig of optionsArg.steps) {
|
|
148
|
+
const step = new TaskStep({
|
|
149
|
+
name: stepConfig.name,
|
|
150
|
+
description: stepConfig.description,
|
|
151
|
+
percentage: stepConfig.percentage,
|
|
152
|
+
});
|
|
153
|
+
this.steps.set(stepConfig.name, step);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
// Create the finished promise
|
|
157
|
+
this.finished = new Promise((resolve) => {
|
|
158
|
+
this.resolveFinished = resolve;
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
trigger(x) {
|
|
162
|
+
if (this.buffered) {
|
|
163
|
+
return this.triggerBuffered(x);
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
return this.triggerUnBuffered(x);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
triggerUnBuffered(x) {
|
|
170
|
+
return Task.runTask(this, { x: x });
|
|
171
|
+
}
|
|
172
|
+
triggerBuffered(x) {
|
|
173
|
+
return this.bufferRunner.trigger(x);
|
|
174
|
+
}
|
|
175
|
+
// Step notification method with typed step names
|
|
176
|
+
notifyStep(stepName) {
|
|
177
|
+
// Complete previous step if exists
|
|
178
|
+
if (this.currentStepName) {
|
|
179
|
+
const prevStep = this.steps.get(this.currentStepName);
|
|
180
|
+
if (prevStep && prevStep.status === 'active') {
|
|
181
|
+
prevStep.complete();
|
|
182
|
+
this.stepProgress.set(this.currentStepName, prevStep.percentage);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
// Start new step
|
|
186
|
+
const step = this.steps.get(stepName);
|
|
187
|
+
if (step) {
|
|
188
|
+
step.start();
|
|
189
|
+
this.currentStepName = stepName;
|
|
190
|
+
// Emit event for frontend updates (could be enhanced with event emitter)
|
|
191
|
+
if (this.name) {
|
|
192
|
+
logger.log('info', `Task ${this.name}: Starting step "${stepName}" - ${step.description}`);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
// Get current progress based on completed steps
|
|
197
|
+
getProgress() {
|
|
198
|
+
let totalProgress = 0;
|
|
199
|
+
for (const [stepName, percentage] of this.stepProgress) {
|
|
200
|
+
totalProgress += percentage;
|
|
201
|
+
}
|
|
202
|
+
// Add partial progress of current step if exists
|
|
203
|
+
if (this.currentStepName) {
|
|
204
|
+
const currentStep = this.steps.get(this.currentStepName);
|
|
205
|
+
if (currentStep && currentStep.status === 'active') {
|
|
206
|
+
// Could add partial progress calculation here if needed
|
|
207
|
+
// For now, we'll consider active steps as 50% complete
|
|
208
|
+
totalProgress += currentStep.percentage * 0.5;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
return Math.min(100, Math.round(totalProgress));
|
|
212
|
+
}
|
|
213
|
+
// Get all steps metadata
|
|
214
|
+
getStepsMetadata() {
|
|
215
|
+
return Array.from(this.steps.values()).map(step => step.toJSON());
|
|
216
|
+
}
|
|
217
|
+
// Get task metadata
|
|
218
|
+
getMetadata() {
|
|
219
|
+
return {
|
|
220
|
+
name: this.name || 'unnamed',
|
|
221
|
+
version: this.version,
|
|
222
|
+
status: this.running ? 'running' : 'idle',
|
|
223
|
+
steps: this.getStepsMetadata(),
|
|
224
|
+
currentStep: this.currentStepName,
|
|
225
|
+
currentProgress: this.getProgress(),
|
|
226
|
+
runCount: this.runCount,
|
|
227
|
+
buffered: this.buffered,
|
|
228
|
+
bufferMax: this.bufferMax,
|
|
229
|
+
timeout: this.timeout,
|
|
230
|
+
cronSchedule: this.cronJob?.cronExpression,
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
// Reset all steps to pending state
|
|
234
|
+
resetSteps() {
|
|
235
|
+
this.steps.forEach(step => step.reset());
|
|
236
|
+
this.stepProgress.clear();
|
|
237
|
+
this.currentStepName = undefined;
|
|
238
|
+
}
|
|
239
|
+
// Complete all remaining steps (useful for cleanup)
|
|
240
|
+
completeAllSteps() {
|
|
241
|
+
if (this.currentStepName) {
|
|
242
|
+
const currentStep = this.steps.get(this.currentStepName);
|
|
243
|
+
if (currentStep && currentStep.status === 'active') {
|
|
244
|
+
currentStep.complete();
|
|
245
|
+
this.stepProgress.set(this.currentStepName, currentStep.percentage);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
// Mark any pending steps as completed (in case of early task completion)
|
|
249
|
+
this.steps.forEach((step, name) => {
|
|
250
|
+
if (step.status === 'pending') {
|
|
251
|
+
// Don't add their percentage to progress since they weren't actually executed
|
|
252
|
+
step.status = 'completed';
|
|
253
|
+
}
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza2J1ZmZlci5jbGFzc2VzLnRhc2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy90YXNrYnVmZmVyLmNsYXNzZXMudGFzay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDcEUsT0FBTyxFQUFFLFFBQVEsRUFBa0IsTUFBTSxrQ0FBa0MsQ0FBQztBQUc1RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFlakQsTUFBTSxPQUFPLElBQUk7SUFDUixNQUFNLENBQUMsV0FBVyxDQUN2QixpQkFBNEQ7UUFFNUQsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUNiLEtBQUssQ0FBQyxpQkFBaUI7Z0JBQ3JCLE9BQU8sSUFBSSxDQUFDO1lBQ2QsS0FBSyxpQkFBaUIsWUFBWSxJQUFJO2dCQUNwQyxPQUFPLGlCQUFvQyxDQUFDO1lBQzlDLEtBQUssT0FBTyxpQkFBaUIsS0FBSyxVQUFVO2dCQUMxQyxNQUFNLFlBQVksR0FBRyxpQkFBNEMsQ0FBQztnQkFDbEUsT0FBTyxZQUFZLEVBQWdDLENBQUM7WUFDdEQ7Z0JBQ0UsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztJQUNILENBQUM7YUFFYSxzQkFBaUIsR0FBa0IsVUFBVSxDQUFDO1FBQzFELE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDMUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2YsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUMsQUFKOEIsQ0FJN0I7YUFFWSxXQUFNLEdBQUcsQ0FBQyxPQUFrQixFQUFXLEVBQUU7UUFDckQsSUFBSSxPQUFPLFlBQVksSUFBSSxJQUFJ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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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza2J1ZmZlci5jbGFzc2VzLnRhc2tjaGFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL3Rhc2tidWZmZXIuY2xhc3Nlcy50YXNrY2hhaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEseUJBQXlCO0FBQ3pCLG1CQUFtQjtBQUVuQixPQUFPLEtBQUssT0FBTyxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFakQsTUFBTSxPQUFPLFNBQVUsU0FBUSxJQUFJO0lBRWpDLFlBQVksVUFNWDtRQUNDLE1BQU0sT0FBTyxHQUFHO1lBQ2QsR0FBRztnQkFDRCxJQUFJLEVBQUUsbUJBQW1CO2dCQUN6QixHQUFHLEVBQUUsS0FBSzthQUNYO1lBQ0QsR0FBRyxVQUFVO1lBQ2IsR0FBRztnQkFDRCxZQUFZLEVBQUUsQ0FBQyxDQUFNLEVBQUUsRUFBRTtvQkFDdkIsc0VBQXNFO29CQUN0RSxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsdUNBQXVDO29CQUNsRixJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQyxpREFBaUQ7b0JBQ3RFLE1BQU0sWUFBWSxHQUFHLENBQUMsQ0FBTSxFQUFFLEVBQUU7d0JBQzlCLElBQUksT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxLQUFLLFdBQVcsRUFBRSxDQUFDOzRCQUN2RCxPQUFPLENBQUMsR0FBRyxDQUNULElBQUksQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQ2hFLENBQUM7NEJBQ0YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0NBQ2hELE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7Z0NBQ3JELFdBQVcsRUFBRSxDQUFDO2dDQUNkLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDbEIsQ0FBQyxDQUFDLENBQUM7d0JBQ0wsQ0FBQzs2QkFBTSxDQUFDOzRCQUNOLE9BQU8sQ0FBQyxHQUFHLENBQ1QsYUFBYSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsMEJBQTBCLENBQ3ZELENBQUM7NEJBQ0YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDbEIsQ0FBQztvQkFDSCxDQUFDLENBQUM7b0JBQ0YsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNoQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7Z0JBQ3RCLENBQUM7YUFDRjtTQUNGLENBQUM7UUFDRixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUM7SUFDeEMsQ0FBQztJQUNELE9BQU8sQ0FBQyxPQUFhO1FBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFDRCxVQUFVLENBQUMsT0FBYTtRQUN0QixRQUFRO0lBQ1YsQ0FBQztJQUNELFNBQVM7UUFDUCxRQUFRO0lBQ1YsQ0FBQztDQUNGIn0=
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Task, type 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza2J1ZmZlci5jbGFzc2VzLnRhc2tkZWJvdW5jZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy90YXNrYnVmZmVyLmNsYXNzZXMudGFza2RlYm91bmNlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLHlCQUF5QixDQUFDO0FBRW5ELE9BQU8sRUFBRSxJQUFJLEVBQXNCLE1BQU0sOEJBQThCLENBQUM7QUFFeEUsTUFBTSxPQUFPLGFBQTJCLFNBQVEsSUFBSTtJQUlsRCxZQUFZLFVBSVg7UUFDQyxLQUFLLENBQUM7WUFDSixJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUk7WUFDckIsWUFBWSxFQUFFLEtBQUssRUFBRSxDQUFJLEVBQUUsRUFBRTtnQkFDM0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqQyxDQUFDO1NBQ0YsQ0FBQyxDQUFDO1FBWkcsc0JBQWlCLEdBQUcsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFLLENBQUM7UUFhcEUsSUFBSSxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDO1FBQzVDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVO2FBQzlCLElBQUksQ0FDSCxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUN2RTthQUNBLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ2YsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDRiJ9
|