"use strict"; const plugins = require("./taskbuffer.plugins"); const taskbuffer_classes_task_1 = require("./taskbuffer.classes.task"); exports.emptyTaskFunction = function () { let done = plugins.Q.defer(); done.resolve(); return done.promise; }; exports.isTask = function (taskArg) { if (taskArg instanceof taskbuffer_classes_task_1.Task && typeof taskArg.task === "function") { return true; } else { return false; } }; exports.isTaskTouched = (taskArg, touchedTasksArray) => { let result = false; for (let keyArg in touchedTasksArray) { if (taskArg === touchedTasksArray[keyArg]) { result = true; } } return result; }; exports.runTask = function (taskArg, optionsArg = { touchedTasksArray: [] }) { let done = plugins.Q.defer(); taskArg.running = true; done.promise.then(function () { taskArg.running = false; }); let localDeferred = plugins.Q.defer(); let touchedTasksArray; if (optionsArg.touchedTasksArray) { touchedTasksArray = optionsArg.touchedTasksArray; } else { touchedTasksArray = []; } touchedTasksArray.push(taskArg); localDeferred.promise .then(() => { if (taskArg.preTask && !exports.isTaskTouched(taskArg.preTask, touchedTasksArray)) { return exports.runTask(taskArg.preTask, { touchedTasksArray: touchedTasksArray }); } else { let done2 = plugins.Q.defer(); done2.resolve(); return done2.promise; } }) .then(() => { return taskArg.task(); }) .then(() => { if (taskArg.afterTask && !exports.isTaskTouched(taskArg.afterTask, touchedTasksArray)) { return exports.runTask(taskArg.afterTask, { touchedTasksArray: touchedTasksArray }); } else { let done2 = plugins.Q.defer(); done2.resolve(); return done2.promise; } }) .then(() => { done.resolve(); }); localDeferred.resolve(); return done.promise; }; class CycleCounter { constructor(taskArg) { this.cycleObjectArray = []; this.task = taskArg; } ; getPromiseForCycle(cycleCountArg) { let done = plugins.Q.defer(); let cycleObject = { cycleCounter: cycleCountArg, deferred: done }; this.cycleObjectArray.push(cycleObject); return done.promise; } ; informOfCycle() { let newCycleObjectArray = []; this.cycleObjectArray.forEach(cycleObjectArg => { cycleObjectArg.cycleCounter--; if (cycleObjectArg.cycleCounter <= 0) { cycleObjectArg.deferred.resolve(); } else { newCycleObjectArray.push(cycleObjectArg); } ; }); this.cycleObjectArray = newCycleObjectArray; } } exports.CycleCounter = CycleCounter; class BufferRunner { constructor(taskArg) { // initialze by default this.bufferCounter = 0; this.bufferMax = 1; this.running = false; this.task = taskArg; } ; _run() { let recursiveBufferRunner = () => { if (this.bufferCounter >= 0) { this.running = true; this.task.running = true; exports.runTask(this.task) .then(() => { console.log(this.bufferCounter); this.bufferCounter--; console.log(this.bufferCounter); this.task.cycleCounter.informOfCycle(); recursiveBufferRunner(); }); } else { this.running = false; this.task.running = false; } }; recursiveBufferRunner(); } ; setBufferMax(bufferMaxArg) { this.bufferMax = bufferMaxArg; } ; trigger() { if (!(this.bufferCounter >= this.bufferMax)) { this.bufferCounter++; } ; let returnPromise = this.task.cycleCounter.getPromiseForCycle(this.bufferCounter + 1); if (!this.running) { this._run(); } return returnPromise; } ; } exports.BufferRunner = BufferRunner; ; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza2J1ZmZlci5jbGFzc2VzLmhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy90YXNrYnVmZmVyLmNsYXNzZXMuaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsTUFBTyxPQUFPLFdBQVcsc0JBQXNCLENBQUMsQ0FBQztBQUNqRCwwQ0FBb0MsMkJBQTJCLENBQUMsQ0FBQTtBQUVyRCx5QkFBaUIsR0FBa0I7SUFDMUMsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM3QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDZixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUN4QixDQUFDLENBQUM7QUFFUyxjQUFNLEdBQUcsVUFBVSxPQUFPO0lBQ2pDLEVBQUUsQ0FBQyxDQUNDLE9BQU8sWUFBWSw4QkFBSTtXQUNwQixPQUFPLE9BQU8sQ0FBQyxJQUFJLEtBQUssVUFDL0IsQ0FBQyxDQUFDLENBQUM7UUFDQyxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFBQyxJQUFJLENBQUMsQ0FBQztRQUNKLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDakIsQ0FBQztBQUNMLENBQUMsQ0FBQztBQUdTLHFCQUFhLEdBQUcsQ0FBQyxPQUFhLEVBQUUsaUJBQXlCO0lBQ2hFLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztJQUNuQixHQUFHLENBQUMsQ0FBQyxJQUFJLE1BQU0sSUFBSSxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7UUFDbkMsRUFBRSxDQUFDLENBQUMsT0FBTyxLQUFLLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4QyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLENBQUM7SUFDTCxDQUFDO0lBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUNsQixDQUFDLENBQUE7QUFFVSxlQUFPLEdBQUcsVUFBVSxPQUFhLEVBQUUs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