@push.rocks/taskbuffer 3.0.15 → 3.1.1
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/dist_bundle/bundle.js +15 -14
- package/dist_bundle/bundle.js.map +2 -2
- package/dist_ts/00_commitinfo_data.js +2 -2
- package/dist_ts/taskbuffer.classes.task.d.ts +4 -4
- package/dist_ts/taskbuffer.classes.task.js +20 -17
- package/package.json +3 -3
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/taskbuffer.classes.task.ts +33 -20
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@push.rocks/taskbuffer',
|
|
6
|
-
version: '3.
|
|
6
|
+
version: '3.1.1',
|
|
7
7
|
description: 'flexible task management. TypeScript ready!'
|
|
8
8
|
};
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSx3QkFBd0I7SUFDOUIsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLDZDQUE2QztDQUMzRCxDQUFBIn0=
|
|
@@ -27,11 +27,13 @@ export declare class Task<T = undefined> {
|
|
|
27
27
|
timeout: number;
|
|
28
28
|
preTask: Task<T> | TPreOrAfterTaskFunction;
|
|
29
29
|
afterTask: Task<T> | TPreOrAfterTaskFunction;
|
|
30
|
+
blockingTasks: Task[];
|
|
31
|
+
private finished;
|
|
32
|
+
private resolveFinished;
|
|
30
33
|
running: boolean;
|
|
31
34
|
bufferRunner: BufferRunner;
|
|
32
35
|
cycleCounter: CycleCounter;
|
|
33
|
-
idle: boolean;
|
|
34
|
-
private _state;
|
|
36
|
+
get idle(): boolean;
|
|
35
37
|
taskSetup: ITaskSetupFunction<T>;
|
|
36
38
|
setupValue: T;
|
|
37
39
|
constructor(optionsArg: {
|
|
@@ -47,6 +49,4 @@ export declare class Task<T = undefined> {
|
|
|
47
49
|
trigger(x?: any): Promise<any>;
|
|
48
50
|
triggerUnBuffered(x?: any): Promise<any>;
|
|
49
51
|
triggerBuffered(x?: any): Promise<any>;
|
|
50
|
-
get state(): string;
|
|
51
|
-
set state(stateArg: string);
|
|
52
52
|
}
|
|
@@ -3,7 +3,6 @@ import { BufferRunner } from './taskbuffer.classes.bufferrunner.js';
|
|
|
3
3
|
import { CycleCounter } from './taskbuffer.classes.cyclecounter.js';
|
|
4
4
|
import { logger } from './taskbuffer.logging.js';
|
|
5
5
|
export class Task {
|
|
6
|
-
// STATIC
|
|
7
6
|
static extractTask(preOrAfterTaskArg) {
|
|
8
7
|
switch (true) {
|
|
9
8
|
case !preOrAfterTaskArg:
|
|
@@ -40,10 +39,13 @@ export class Task {
|
|
|
40
39
|
}
|
|
41
40
|
return result;
|
|
42
41
|
}
|
|
43
|
-
;
|
|
44
42
|
static { this.runTask = async (taskArg, optionsArg) => {
|
|
45
43
|
const taskToRun = Task.extractTask(taskArg);
|
|
46
44
|
const done = plugins.smartpromise.defer();
|
|
45
|
+
// Wait for all blocking tasks to finish
|
|
46
|
+
for (const task of taskToRun.blockingTasks) {
|
|
47
|
+
await task.finished;
|
|
48
|
+
}
|
|
47
49
|
if (!taskToRun.setupValue && taskToRun.taskSetup) {
|
|
48
50
|
taskToRun.setupValue = await taskToRun.taskSetup();
|
|
49
51
|
}
|
|
@@ -53,6 +55,12 @@ export class Task {
|
|
|
53
55
|
taskToRun.running = true;
|
|
54
56
|
done.promise.then(async () => {
|
|
55
57
|
taskToRun.running = false;
|
|
58
|
+
// When the task has finished running, resolve the finished promise
|
|
59
|
+
taskToRun.resolveFinished();
|
|
60
|
+
// Create a new finished promise for the next run
|
|
61
|
+
taskToRun.finished = new Promise((resolve) => {
|
|
62
|
+
taskToRun.resolveFinished = resolve;
|
|
63
|
+
});
|
|
56
64
|
});
|
|
57
65
|
const options = {
|
|
58
66
|
...{ x: undefined, touchedTasksArray: [] },
|
|
@@ -100,21 +108,27 @@ export class Task {
|
|
|
100
108
|
localDeferred.resolve();
|
|
101
109
|
return await done.promise;
|
|
102
110
|
}; }
|
|
111
|
+
get idle() {
|
|
112
|
+
return !this.running;
|
|
113
|
+
}
|
|
103
114
|
constructor(optionsArg) {
|
|
115
|
+
// Add a list to store the blocking tasks
|
|
116
|
+
this.blockingTasks = [];
|
|
104
117
|
this.running = false;
|
|
105
118
|
this.bufferRunner = new BufferRunner(this);
|
|
106
119
|
this.cycleCounter = new CycleCounter(this);
|
|
107
|
-
this.idle = true;
|
|
108
|
-
this._state = 'ready';
|
|
109
120
|
this.taskFunction = optionsArg.taskFunction;
|
|
110
121
|
this.preTask = optionsArg.preTask;
|
|
111
122
|
this.afterTask = optionsArg.afterTask;
|
|
112
|
-
this.idle = !this.running;
|
|
113
123
|
this.buffered = optionsArg.buffered;
|
|
114
124
|
this.bufferMax = optionsArg.bufferMax;
|
|
115
125
|
this.execDelay = optionsArg.execDelay;
|
|
116
126
|
this.name = optionsArg.name;
|
|
117
127
|
this.taskSetup = optionsArg.taskSetup;
|
|
128
|
+
// Create the finished promise
|
|
129
|
+
this.finished = new Promise((resolve) => {
|
|
130
|
+
this.resolveFinished = resolve;
|
|
131
|
+
});
|
|
118
132
|
}
|
|
119
133
|
trigger(x) {
|
|
120
134
|
if (this.buffered) {
|
|
@@ -130,16 +144,5 @@ export class Task {
|
|
|
130
144
|
triggerBuffered(x) {
|
|
131
145
|
return this.bufferRunner.trigger(x);
|
|
132
146
|
}
|
|
133
|
-
get state() {
|
|
134
|
-
return this._state;
|
|
135
|
-
}
|
|
136
|
-
set state(stateArg) {
|
|
137
|
-
if (stateArg === 'locked') {
|
|
138
|
-
this._state = 'locked';
|
|
139
|
-
}
|
|
140
|
-
else {
|
|
141
|
-
logger.log('error', `state type ${stateArg} could not be set`);
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
147
|
}
|
|
145
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
148
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza2J1ZmZlci5jbGFzc2VzLnRhc2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy90YXNrYnVmZmVyLmNsYXNzZXMudGFzay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFcEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBWWpELE1BQU0sT0FBTyxJQUFJO0lBQ1IsTUFBTSxDQUFDLFdBQVcsQ0FDdkIsaUJBQW9EO1FBRXBELFFBQVEsSUFBSSxFQUFFO1lBQ1osS0FBSyxDQUFDLGlCQUFpQjtnQkFDckIsT0FBTyxJQUFJLENBQUM7WUFDZCxLQUFLLGlCQUFpQixZQUFZLElBQUk7Z0JBQ3BDLE9BQU8saUJBQTRCLENBQUM7WUFDdEMsS0FBSyxPQUFPLGlCQUFpQixLQUFLLFVBQVU7Z0JBQzFDLE1BQU0sWUFBWSxHQUFHLGlCQUE0QyxDQUFDO2dCQUNsRSxPQUFPLFlBQVksRUFBRSxDQUFDO1lBQ3hCO2dCQUNFLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7SUFDSCxDQUFDO2FBRWEsc0JBQWlCLEdBQWtCLFVBQVUsQ0FBQztRQUMxRCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNmLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDLEFBSjhCLENBSTdCO2FBRVksV0FBTSxHQUFHLENBQUMsT0FBa0IsRUFBVyxFQUFFO1FBQ3JELElBQUksT0FBTyxZQUFZLElBQUksSUFBSSxPQUFPLE9BQU8sQ0FBQyxZQUFZLEtBQUssVUFBVSxFQUFFO1lBQ3pFLE9BQU8sSUFBSSxDQUFDO1NB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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@push.rocks/taskbuffer",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.1.1",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "flexible task management. TypeScript ready!",
|
|
6
6
|
"main": "dist_ts/index.js",
|
|
@@ -42,8 +42,8 @@
|
|
|
42
42
|
"@gitzone/tsbundle": "^2.0.8",
|
|
43
43
|
"@gitzone/tsrun": "^1.2.44",
|
|
44
44
|
"@gitzone/tstest": "^1.0.77",
|
|
45
|
-
"@push.rocks/tapbundle": "^5.0.
|
|
46
|
-
"@types/node": "^20.4.
|
|
45
|
+
"@push.rocks/tapbundle": "^5.0.15",
|
|
46
|
+
"@types/node": "^20.4.10"
|
|
47
47
|
},
|
|
48
48
|
"files": [
|
|
49
49
|
"ts/**/*",
|
package/ts/00_commitinfo_data.ts
CHANGED
|
@@ -15,8 +15,9 @@ export interface ITaskSetupFunction<T = undefined> {
|
|
|
15
15
|
export type TPreOrAfterTaskFunction = () => Task<any>;
|
|
16
16
|
|
|
17
17
|
export class Task<T = undefined> {
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
public static extractTask<T = undefined>(
|
|
19
|
+
preOrAfterTaskArg: Task<T> | TPreOrAfterTaskFunction
|
|
20
|
+
): Task<T> {
|
|
20
21
|
switch (true) {
|
|
21
22
|
case !preOrAfterTaskArg:
|
|
22
23
|
return null;
|
|
@@ -44,7 +45,7 @@ export class Task<T = undefined> {
|
|
|
44
45
|
}
|
|
45
46
|
};
|
|
46
47
|
|
|
47
|
-
public static isTaskTouched<T = undefined>
|
|
48
|
+
public static isTaskTouched<T = undefined>(
|
|
48
49
|
taskArg: Task<T> | TPreOrAfterTaskFunction,
|
|
49
50
|
touchedTasksArray: Task<T>[]
|
|
50
51
|
): boolean {
|
|
@@ -56,7 +57,7 @@ export class Task<T = undefined> {
|
|
|
56
57
|
}
|
|
57
58
|
}
|
|
58
59
|
return result;
|
|
59
|
-
}
|
|
60
|
+
}
|
|
60
61
|
|
|
61
62
|
public static runTask = async <T>(
|
|
62
63
|
taskArg: Task<T> | TPreOrAfterTaskFunction,
|
|
@@ -65,6 +66,11 @@ export class Task<T = undefined> {
|
|
|
65
66
|
const taskToRun = Task.extractTask(taskArg);
|
|
66
67
|
const done = plugins.smartpromise.defer();
|
|
67
68
|
|
|
69
|
+
// Wait for all blocking tasks to finish
|
|
70
|
+
for (const task of taskToRun.blockingTasks) {
|
|
71
|
+
await task.finished;
|
|
72
|
+
}
|
|
73
|
+
|
|
68
74
|
if (!taskToRun.setupValue && taskToRun.taskSetup) {
|
|
69
75
|
taskToRun.setupValue = await taskToRun.taskSetup();
|
|
70
76
|
}
|
|
@@ -77,6 +83,14 @@ export class Task<T = undefined> {
|
|
|
77
83
|
|
|
78
84
|
done.promise.then(async () => {
|
|
79
85
|
taskToRun.running = false;
|
|
86
|
+
|
|
87
|
+
// When the task has finished running, resolve the finished promise
|
|
88
|
+
taskToRun.resolveFinished();
|
|
89
|
+
|
|
90
|
+
// Create a new finished promise for the next run
|
|
91
|
+
taskToRun.finished = new Promise((resolve) => {
|
|
92
|
+
taskToRun.resolveFinished = resolve;
|
|
93
|
+
});
|
|
80
94
|
});
|
|
81
95
|
|
|
82
96
|
const options = {
|
|
@@ -125,7 +139,6 @@ export class Task<T = undefined> {
|
|
|
125
139
|
return await done.promise;
|
|
126
140
|
};
|
|
127
141
|
|
|
128
|
-
// INSTANCE
|
|
129
142
|
public name: string;
|
|
130
143
|
public version: string;
|
|
131
144
|
public taskFunction: ITaskFunction<T>;
|
|
@@ -139,12 +152,20 @@ export class Task<T = undefined> {
|
|
|
139
152
|
public preTask: Task<T> | TPreOrAfterTaskFunction;
|
|
140
153
|
public afterTask: Task<T> | TPreOrAfterTaskFunction;
|
|
141
154
|
|
|
155
|
+
// Add a list to store the blocking tasks
|
|
156
|
+
public blockingTasks: Task[] = [];
|
|
157
|
+
|
|
158
|
+
// Add a promise that will resolve when the task has finished
|
|
159
|
+
private finished: Promise<void>;
|
|
160
|
+
private resolveFinished: () => void;
|
|
161
|
+
|
|
142
162
|
public running: boolean = false;
|
|
143
163
|
public bufferRunner = new BufferRunner(this);
|
|
144
164
|
public cycleCounter = new CycleCounter(this);
|
|
145
165
|
|
|
146
|
-
public idle
|
|
147
|
-
|
|
166
|
+
public get idle() {
|
|
167
|
+
return !this.running;
|
|
168
|
+
}
|
|
148
169
|
|
|
149
170
|
public taskSetup: ITaskSetupFunction<T>;
|
|
150
171
|
public setupValue: T;
|
|
@@ -162,12 +183,16 @@ export class Task<T = undefined> {
|
|
|
162
183
|
this.taskFunction = optionsArg.taskFunction;
|
|
163
184
|
this.preTask = optionsArg.preTask;
|
|
164
185
|
this.afterTask = optionsArg.afterTask;
|
|
165
|
-
this.idle = !this.running;
|
|
166
186
|
this.buffered = optionsArg.buffered;
|
|
167
187
|
this.bufferMax = optionsArg.bufferMax;
|
|
168
188
|
this.execDelay = optionsArg.execDelay;
|
|
169
189
|
this.name = optionsArg.name;
|
|
170
190
|
this.taskSetup = optionsArg.taskSetup;
|
|
191
|
+
|
|
192
|
+
// Create the finished promise
|
|
193
|
+
this.finished = new Promise((resolve) => {
|
|
194
|
+
this.resolveFinished = resolve;
|
|
195
|
+
});
|
|
171
196
|
}
|
|
172
197
|
|
|
173
198
|
public trigger(x?: any): Promise<any> {
|
|
@@ -185,16 +210,4 @@ export class Task<T = undefined> {
|
|
|
185
210
|
public triggerBuffered(x?: any): Promise<any> {
|
|
186
211
|
return this.bufferRunner.trigger(x);
|
|
187
212
|
}
|
|
188
|
-
|
|
189
|
-
get state(): string {
|
|
190
|
-
return this._state;
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
set state(stateArg: string) {
|
|
194
|
-
if (stateArg === 'locked') {
|
|
195
|
-
this._state = 'locked';
|
|
196
|
-
} else {
|
|
197
|
-
logger.log('error', `state type ${stateArg} could not be set`);
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
213
|
}
|