@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.
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@push.rocks/taskbuffer',
6
- version: '3.0.15',
6
+ version: '3.1.1',
7
7
  description: 'flexible task management. TypeScript ready!'
8
8
  };
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSx3QkFBd0I7SUFDOUIsT0FBTyxFQUFFLFFBQVE7SUFDakIsV0FBVyxFQUFFLDZDQUE2QztDQUMzRCxDQUFBIn0=
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza2J1ZmZlci5jbGFzc2VzLnRhc2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy90YXNrYnVmZmVyLmNsYXNzZXMudGFzay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFcEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBWWpELE1BQU0sT0FBTyxJQUFJO0lBQ2YsU0FBUztJQUNGLE1BQU0sQ0FBQyxXQUFXLENBQWdCLGlCQUFvRDtRQUMzRixRQUFRLElBQUksRUFBRTtZQUNaLEtBQUssQ0FBQyxpQkFBaUI7Z0JBQ3JCLE9BQU8sSUFBSSxDQUFDO1lBQ2QsS0FBSyxpQkFBaUIsWUFBWSxJQUFJO2dCQUNwQyxPQUFPLGlCQUE0QixDQUFDO1lBQ3RDLEtBQUssT0FBTyxpQkFBaUIsS0FBSyxVQUFVO2dCQUMxQyxNQUFNLFlBQVksR0FBRyxpQkFBNEMsQ0FBQztnQkFDbEUsT0FBTyxZQUFZLEVBQUUsQ0FBQztZQUN4QjtnQkFDRSxPQUFPLElBQUksQ0FBQztTQUNmO0lBQ0gsQ0FBQzthQUVhLHNCQUFpQixHQUFrQixVQUFVLENBQUM7UUFDMUQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMxQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDZixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQyxBQUo4QixDQUk3QjthQUVZLFdBQU0sR0FBRyxDQUFDLE9BQWtCLEVBQVcsRUFBRTtRQUNyRCxJQUFJLE9BQU8sWUFBWSxJQUFJLElBQUksT0FBTyxPQUFPLENBQUMsWUFBWSxLQUFLLFVBQVUsRUFBRTtZQUN6RSxPQUFPLElBQUksQ0FBQztTQUNiO2FBQU07WUFDTCxPQUFPLEtBQUssQ0FBQztTQUNkO0lBQ0gsQ0FBQyxBQU5tQixDQU1sQjtJQUVLLE1BQU0sQ0FBQyxhQUFhLENBQ3pCLE9BQTBDLEVBQzFDLGlCQUE0QjtRQUU1QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlDLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNuQixLQUFLLE1BQU0sTUFBTSxJQUFJLGlCQUFpQixFQUFFO1lBQ3RDLElBQUksV0FBVyxLQUFLLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUM3QyxNQUFNLEdBQUcsSUFBSSxDQUFDO2FBQ2Y7U0FDRjtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFBQSxDQUFDO2FBRVksWUFBTyxHQUFHLEtBQUssRUFDM0IsT0FBMEMsRUFDMUMsVUFBc0QsRUFDdEQsRUFBRTtRQUNGLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUUxQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsSUFBSSxTQUFTLENBQUMsU0FBUyxFQUFFO1lBQ2hELFNBQVMsQ0FBQyxVQUFVLEdBQUcsTUFBTSxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUM7U0FDcEQ7UUFFRCxJQUFJLFNBQVMsQ0FBQyxTQUFTLEVBQUU7WUFDdkIsTUFBTSxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDeEQ7UUFFRCxTQUFTLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUV6QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRTtZQUMzQixTQUFTLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sT0FBTyxHQUFHO1lBQ2QsR0FBRyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxFQUFFO1lBQzFDLEdBQUcsVUFBVTtTQUNkLENBQUM7UUFDRixNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ3BCLE1BQU0saUJBQWlCLEdBQWMsT0FBTyxDQUFDLGlCQUFpQixDQUFDO1FBRS9ELGlCQUFpQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVsQyxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ25ELGFBQWEsQ0FBQyxPQUFPO2FBQ2xCLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDVCxJQUFJLFNBQVMsQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsaUJBQWlCLENBQUMsRUFBRTtnQkFDbEYsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO2FBQ2xFO2lCQUFNO2dCQUNMLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzNDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pCLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQzthQUN0QjtRQUNILENBQUMsQ0FBQzthQUNELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDaEIsSUFBSTtnQkFDRixPQUFPLE1BQU0sU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQzlEO1lBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ1YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNoQjtRQUNILENBQUMsQ0FBQzthQUNELElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ1YsSUFBSSxTQUFTLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLGlCQUFpQixDQUFDLEVBQUU7Z0JBQ3RGLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLENBQUM7YUFDMUY7aUJBQU07Z0JBQ0wsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDM0MsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDakIsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDO2FBQ3RCO1FBQ0gsQ0FBQyxDQUFDO2FBQ0QsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDVixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xCLENBQUMsQ0FBQzthQUNELEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQixDQUFDLENBQUMsQ0FBQztRQUNMLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN4QixPQUFPLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUM1QixDQUFDLEFBakVvQixDQWlFbkI7SUEwQkYsWUFBWSxVQVNYO1FBbkJNLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFDekIsaUJBQVksR0FBRyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxpQkFBWSxHQUFHLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXRDLFNBQUksR0FBWSxJQUFJLENBQUM7UUFDcEIsV0FBTSxHQUFXLE9BQU8sQ0FBQztRQWUvQixJQUFJLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUM7UUFDNUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQztRQUN0QyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUMxQixJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUM7UUFDcEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQztRQUN0QyxJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7UUFDNUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDO0lBQ3hDLENBQUM7SUFFTSxPQUFPLENBQUMsQ0FBTztRQUNwQixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2hDO2FBQU07WUFDTCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNsQztJQUNILENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxDQUFPO1FBQzlCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBSSxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRU0sZUFBZSxDQUFDLENBQU87UUFDNUIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxJQUFJLEtBQUssQ0FBQyxRQUFnQjtRQUN4QixJQUFJLFFBQVEsS0FBSyxRQUFRLEVBQUU7WUFDekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUM7U0FDeEI7YUFBTTtZQUNMLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLGNBQWMsUUFBUSxtQkFBbUIsQ0FBQyxDQUFDO1NBQ2hFO0lBQ0gsQ0FBQyJ9
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.0.15",
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.12",
46
- "@types/node": "^20.4.5"
45
+ "@push.rocks/tapbundle": "^5.0.15",
46
+ "@types/node": "^20.4.10"
47
47
  },
48
48
  "files": [
49
49
  "ts/**/*",
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@push.rocks/taskbuffer',
6
- version: '3.0.15',
6
+ version: '3.1.1',
7
7
  description: 'flexible task management. TypeScript ready!'
8
8
  }
@@ -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
- // STATIC
19
- public static extractTask<T = undefined>(preOrAfterTaskArg: Task<T> | TPreOrAfterTaskFunction): Task<T> {
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: boolean = true;
147
- private _state: string = 'ready';
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
  }