Compare commits

...

11 Commits

Author SHA1 Message Date
130c4177a6 0.0.5 2016-05-05 19:26:02 +02:00
90c9f23c23 improved .npmignore 2016-05-05 19:25:59 +02:00
0d0ee67ca3 compiled 2016-05-05 19:21:50 +02:00
5fd11ec9c0 add some more buffer logic 2016-05-05 19:21:01 +02:00
569cb311c9 compile and update some imports to work with TypeScript declaration 2016-05-05 18:36:31 +02:00
44db37574c now running Tasks and handling task loops allright. 2016-05-05 18:06:04 +02:00
fb7f5c5e68 recompile 2016-05-04 05:20:51 +02:00
b6595ac1d3 small typo fix 2016-05-04 05:15:05 +02:00
3f3f9c68f1 small update on promise return in README 2016-05-04 05:13:36 +02:00
48c20c081f update README on how buffered Tasks work. 2016-05-04 05:11:08 +02:00
72504d7ad7 cleanup 2016-05-04 04:42:47 +02:00
16 changed files with 253 additions and 105 deletions

View File

@ -2,3 +2,4 @@
docs/ docs/
coverage/ coverage/
ts/ ts/
node_modules/

View File

@ -14,10 +14,17 @@ npm install taskbuffer --save
#### Task #### Task
* A Task in its most simple form is a function that is executed when the task runs. * A Task in its most simple form is a function that is executed when the task runs.
* It can have a preTaska and an afterTask (those are run before or after the main function whenever the task is called) * A Task can have a **preTask** and an **afterTask**
* A Task can be buffered. That means it can be called multiple times in a very short time. However execution happens in line: meaning execution of the task's main function is on halt until the previous task call has finished. (those are run before or after the main function whenever the task is called)
* Task.trigger() and Task.triggerBuffered() always return a Promise; * A Task can be buffered.
* Task.triggered() is an ObservableStram that emits events every time a task is promised. That means it can be called multiple times in a very short time.
However execution happens in line:
meaning execution of the task's main function is on halt until the previous task call has finished.
You can set bufferMax number, which is the max number of buffered task calls.
Any additional calls will then be truncated
* Task.trigger() and Task.triggerBuffered() always return a Promise
which is fullfilled once the related task call has completed.
* Task.triggered() is an Observable stream that emits events every time a task call is called and every time a call is completed.
* Task is compatible to gulp streams. * Task is compatible to gulp streams.
#### Taskchain #### Taskchain

1
dist/index.d.ts vendored
View File

@ -1 +1,2 @@
export * from "./taskbuffer.classes"; export * from "./taskbuffer.classes";
import "./taskbuffer.classes.helpers";

4
dist/index.js vendored
View File

@ -4,5 +4,7 @@ function __export(m) {
} }
/// <reference path="./typings/main.d.ts" /> /// <reference path="./typings/main.d.ts" />
__export(require("./taskbuffer.classes")); __export(require("./taskbuffer.classes"));
// import for naming only
require("./taskbuffer.classes.helpers");
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSw0Q0FBNEM7QUFDNUMsaUJBQWMsc0JBQXNCLENBQUMsRUFBRCIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuL3R5cGluZ3MvbWFpbi5kLnRzXCIgLz5cbmV4cG9ydCAqIGZyb20gXCIuL3Rhc2tidWZmZXIuY2xhc3Nlc1wiIl19 //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSw0Q0FBNEM7QUFDNUMsaUJBQWMsc0JBQXNCLENBQUMsRUFBQTtBQUVyQyx5QkFBeUI7QUFDekIsUUFBTyw4QkFBOEIsQ0FBQyxDQUFEIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4vdHlwaW5ncy9tYWluLmQudHNcIiAvPlxuZXhwb3J0ICogZnJvbSBcIi4vdGFza2J1ZmZlci5jbGFzc2VzXCI7XG5cbi8vIGltcG9ydCBmb3IgbmFtaW5nIG9ubHlcbmltcG9ydCBcIi4vdGFza2J1ZmZlci5jbGFzc2VzLmhlbHBlcnNcIiJdfQ==

View File

@ -1,3 +1,8 @@
export declare var emptyTaskFunction: () => any; import { Task } from "./taskbuffer.classes";
export declare var isTask: (taskArg: any) => boolean; export declare let emptyTaskFunction: () => any;
export declare var runTask: (taskArg: any) => any; export declare let isTask: (taskArg: any) => boolean;
export declare let isTaskTouched: (task: Task, touchedTasksArray: Task[]) => boolean;
export declare let runTask: (taskArg: Task, optionsArg?: {
touchedTasksArray: Task[];
}) => any;
export declare let runBufferedTask: (taskArg: Task) => void;

File diff suppressed because one or more lines are too long

View File

@ -3,17 +3,21 @@ export declare class Task {
idle: boolean; idle: boolean;
running: boolean; running: boolean;
buffered: boolean; buffered: boolean;
private _counterBufferRelative; bufferCounter: number;
bufferMax: number;
private _counterTriggerAbsolute; private _counterTriggerAbsolute;
private _state; private _state;
preTask: Task; preTask: Task;
afterTask: Task; afterTask: Task;
constructor(taskArg: any, optionsArg?: { constructor(optionsArg: {
taskFunction: any;
preTask?: Task; preTask?: Task;
afterTask?: Task; afterTask?: Task;
buffered?: boolean; buffered?: boolean;
bufferMax?: number;
}); });
trigger(): any; trigger(): void;
triggerBuffered(): void; triggerUnBuffered(): any;
triggerBuffered(): any;
state: string; state: string;
} }

View File

@ -3,36 +3,40 @@
var plugins = require("./taskbuffer.plugins"); var plugins = require("./taskbuffer.plugins");
var helpers = require("./taskbuffer.classes.helpers"); var helpers = require("./taskbuffer.classes.helpers");
var Task = (function () { var Task = (function () {
function Task(taskArg, optionsArg) { function Task(optionsArg) {
if (optionsArg === void 0) { optionsArg = {}; } if (!optionsArg) {
optionsArg = { taskFunction: function () { } };
}
var options = optionsArg; var options = optionsArg;
this.task = taskArg; this.task = optionsArg.taskFunction;
this.preTask = options.preTask; this.preTask = options.preTask;
this.afterTask = options.afterTask; this.afterTask = options.afterTask;
this.idle = true; this.idle = true;
this.running = false; this.running = false;
if (typeof options.buffered === "boolean") { this.buffered = options.buffered;
this.buffered = options.buffered; this.bufferMax = options.bufferMax;
}
else {
this.buffered = false;
}
} }
Task.prototype.trigger = function () { Task.prototype.trigger = function () {
var done = plugins.Q.defer(); var done = plugins.Q.defer();
helpers.runTask(this.preTask) if (this.buffered) {
.then(function () { this.triggerBuffered();
}) }
.then(function () { else {
}) this.triggerUnBuffered();
.then(function () { }
done.resolve(); ;
});
return done.promise;
}; };
; ;
Task.prototype.triggerUnBuffered = function () {
return helpers.runTask(this);
};
Task.prototype.triggerBuffered = function () { Task.prototype.triggerBuffered = function () {
var done = plugins.Q.defer(); var done = plugins.Q.defer();
if (!(this.bufferCounter >= this.bufferMax)) {
this.bufferCounter++;
}
helpers.runBufferedTask(this);
return done.promise;
}; };
Object.defineProperty(Task.prototype, "state", { Object.defineProperty(Task.prototype, "state", {
get: function () { get: function () {
@ -53,4 +57,4 @@ var Task = (function () {
}()); }());
exports.Task = Task; exports.Task = Task;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRhc2tidWZmZXIuY2xhc3Nlcy50YXNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSw0Q0FBNEM7QUFDNUMsSUFBWSxPQUFPLFdBQU0sc0JBQ3pCLENBQUMsQ0FEOEM7QUFDL0MsSUFBWSxPQUFPLFdBQU0sOEJBRXpCLENBQUMsQ0FGc0Q7QUFFdkQ7SUFXSSxjQUFZLE9BQU8sRUFBQyxVQUFrRTtRQUFsRSwwQkFBa0UsR0FBbEUsZUFBa0U7UUFDbEYsSUFBSSxPQUFPLEdBQUcsVUFBVSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUMvQixJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDbkMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsRUFBRSxDQUFDLENBQUMsT0FBTyxPQUFPLENBQUMsUUFBUSxLQUFLLFNBQVMsQ0FBQyxDQUFBLENBQUM7WUFDdkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO1FBQ3JDLENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNKLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQzFCLENBQUM7SUFDTCxDQUFDO0lBQ0Qsc0JBQU8sR0FBUDtRQUNJLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDN0IsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO2FBQ3hCLElBQUksQ0FBQztRQUVOLENBQUMsQ0FBQzthQUNELElBQUksQ0FBQztRQUVOLENBQUMsQ0FBQzthQUNELElBQUksQ0FBQztZQUNGLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNuQixDQUFDLENBQUMsQ0FBQztRQUNSLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3ZCLENBQUM7O0lBQ0QsOEJBQWUsR0FBZjtRQUNJLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELHNCQUFJLHVCQUFLO2FBQVQ7WUFDSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN2QixDQUFDO2FBQ0QsVUFBVSxRQUFlO1lBQ3JCLEVBQUUsQ0FBQyxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsQ0FBQSxDQUFDO2dCQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQztZQUMzQixDQUFDO1lBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ0osT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFFLENBQUM7WUFDM0MsQ0FBQztRQUNMLENBQUM7OztPQVBBO0lBUUwsV0FBQztBQUFELENBcERBLEFBb0RDLElBQUE7QUFwRFksWUFBSSxPQW9EaEIsQ0FBQSIsImZpbGUiOiJ0YXNrYnVmZmVyLmNsYXNzZXMudGFzay5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuL3R5cGluZ3MvbWFpbi5kLnRzXCIgLz5cbmltcG9ydCAqIGFzIHBsdWdpbnMgZnJvbSBcIi4vdGFza2J1ZmZlci5wbHVnaW5zXCJcbmltcG9ydCAqIGFzIGhlbHBlcnMgZnJvbSBcIi4vdGFza2J1ZmZlci5jbGFzc2VzLmhlbHBlcnNcIlxuXG5leHBvcnQgY2xhc3MgVGFzayB7XG4gICAgdGFzazphbnk7XG4gICAgaWRsZTpib29sZWFuO1xuICAgIHJ1bm5pbmc6Ym9vbGVhbjtcbiAgICBidWZmZXJlZDpib29sZWFuO1xuICAgIHByaXZhdGUgX2NvdW50ZXJCdWZmZXJSZWxhdGl2ZTtcbiAgICBwcml2YXRlIF9jb3VudGVyVHJpZ2dlckFic29sdXRlO1xuICAgIHByaXZhdGUgX3N0YXRlOnN0cmluZztcbiAgICBwcmVUYXNrOlRhc2s7XG4gICAgYWZ0ZXJUYXNrOlRhc2s7XG5cbiAgICBjb25zdHJ1Y3Rvcih0YXNrQXJnLG9wdGlvbnNBcmc6e3ByZVRhc2s/OlRhc2ssYWZ0ZXJUYXNrPzpUYXNrLCBidWZmZXJlZD86Ym9vbGVhbn0gPSB7fSl7XG4gICAgICAgIHZhciBvcHRpb25zID0gb3B0aW9uc0FyZztcbiAgICAgICAgdGhpcy50YXNrID0gdGFza0FyZztcbiAgICAgICAgdGhpcy5wcmVUYXNrID0gb3B0aW9ucy5wcmVUYXNrO1xuICAgICAgICB0aGlzLmFmdGVyVGFzayA9IG9wdGlvbnMuYWZ0ZXJUYXNrO1xuICAgICAgICB0aGlzLmlkbGUgPSB0cnVlO1xuICAgICAgICB0aGlzLnJ1bm5pbmcgPSBmYWxzZTtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmJ1ZmZlcmVkID09PSBcImJvb2xlYW5cIil7XG4gICAgICAgICAgICB0aGlzLmJ1ZmZlcmVkID0gb3B0aW9ucy5idWZmZXJlZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYnVmZmVyZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0cmlnZ2VyKCl7XG4gICAgICAgIGxldCBkb25lID0gcGx1Z2lucy5RLmRlZmVyKCk7XG4gICAgICAgIGhlbHBlcnMucnVuVGFzayh0aGlzLnByZVRhc2spXG4gICAgICAgICAgICAudGhlbihmdW5jdGlvbigpe1xuXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24oKXtcblxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgZG9uZS5yZXNvbHZlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICByZXR1cm4gZG9uZS5wcm9taXNlO1xuICAgIH07XG4gICAgdHJpZ2dlckJ1ZmZlcmVkKCl7XG4gICAgICAgIHZhciBkb25lID0gcGx1Z2lucy5RLmRlZmVyKCk7XG4gICAgfVxuXG4gICAgZ2V0IHN0YXRlKCk6c3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlO1xuICAgIH1cbiAgICBzZXQgc3RhdGUoc3RhdGVBcmc6c3RyaW5nKXtcbiAgICAgICAgaWYgKHN0YXRlQXJnID09IFwibG9ja2VkXCIpe1xuICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSBcImxvY2tlZFwiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGx1Z2lucy5iZWF1dHlsb2cuZXJyb3IoXCJzdGF0ZSB0eXBlXCIgKTtcbiAgICAgICAgfVxuICAgIH1cbn0iXX0= //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRhc2tidWZmZXIuY2xhc3Nlcy50YXNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSw0Q0FBNEM7QUFDNUMsSUFBWSxPQUFPLFdBQU0sc0JBQ3pCLENBQUMsQ0FEOEM7QUFDL0MsSUFBWSxPQUFPLFdBQU0sOEJBR3pCLENBQUMsQ0FIc0Q7QUFHdkQ7SUFZSSxjQUFZLFVBQWlHO1FBQ3pHLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUEsQ0FBQztZQUFBLFVBQVUsR0FBRyxFQUFDLFlBQVksRUFBQyxjQUFXLENBQUMsRUFBQyxDQUFBO1FBQUEsQ0FBQztRQUMxRCxJQUFJLE9BQU8sR0FBRyxVQUFVLENBQUM7UUFDekIsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUMvQixJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDbkMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsc0JBQU8sR0FBUDtRQUNJLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDN0IsRUFBRSxDQUFBLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFBQSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUE7UUFBQSxDQUFDO1FBQzFDLElBQUksQ0FBQSxDQUFDO1lBQUEsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUE7UUFBQSxDQUFDO1FBQUEsQ0FBQztJQUNuQyxDQUFDOztJQUNELGdDQUFpQixHQUFqQjtRQUNJLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFDRCw4QkFBZSxHQUFmO1FBQ0ksSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM3QixFQUFFLENBQUEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQTtRQUN4QixDQUFDO1FBQ0QsT0FBTyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN4QixDQUFDO0lBRUQsc0JBQUksdUJBQUs7YUFBVDtZQUNJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3ZCLENBQUM7YUFDRCxVQUFVLFFBQWU7WUFDckIsRUFBRSxDQUFDLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxDQUFBLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDO1lBQzNCLENBQUM7WUFBQyxJQUFJLENBQUMsQ0FBQztnQkFDSixPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUUsQ0FBQztZQUMzQyxDQUFDO1FBQ0wsQ0FBQzs7O09BUEE7SUFRTCxXQUFDO0FBQUQsQ0FuREEsQUFtREMsSUFBQTtBQW5EWSxZQUFJLE9BbURoQixDQUFBIiwiZmlsZSI6InRhc2tidWZmZXIuY2xhc3Nlcy50YXNrLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4vdHlwaW5ncy9tYWluLmQudHNcIiAvPlxuaW1wb3J0ICogYXMgcGx1Z2lucyBmcm9tIFwiLi90YXNrYnVmZmVyLnBsdWdpbnNcIlxuaW1wb3J0ICogYXMgaGVscGVycyBmcm9tIFwiLi90YXNrYnVmZmVyLmNsYXNzZXMuaGVscGVyc1wiXG5cblxuZXhwb3J0IGNsYXNzIFRhc2sge1xuICAgIHRhc2s6YW55O1xuICAgIGlkbGU6Ym9vbGVhbjtcbiAgICBydW5uaW5nOmJvb2xlYW47XG4gICAgYnVmZmVyZWQ6Ym9vbGVhbjtcbiAgICBidWZmZXJDb3VudGVyOm51bWJlcjtcbiAgICBidWZmZXJNYXg6bnVtYmVyO1xuICAgIHByaXZhdGUgX2NvdW50ZXJUcmlnZ2VyQWJzb2x1dGU6bnVtYmVyO1xuICAgIHByaXZhdGUgX3N0YXRlOnN0cmluZztcbiAgICBwcmVUYXNrOlRhc2s7XG4gICAgYWZ0ZXJUYXNrOlRhc2s7XG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zQXJnOnt0YXNrRnVuY3Rpb246YW55LHByZVRhc2s/OlRhc2ssYWZ0ZXJUYXNrPzpUYXNrLCBidWZmZXJlZD86Ym9vbGVhbiwgYnVmZmVyTWF4PzpudW1iZXJ9KXtcbiAgICAgICAgaWYgKCFvcHRpb25zQXJnKXtvcHRpb25zQXJnID0ge3Rhc2tGdW5jdGlvbjpmdW5jdGlvbigpe319fVxuICAgICAgICB2YXIgb3B0aW9ucyA9IG9wdGlvbnNBcmc7XG4gICAgICAgIHRoaXMudGFzayA9IG9wdGlvbnNBcmcudGFza0Z1bmN0aW9uO1xuICAgICAgICB0aGlzLnByZVRhc2sgPSBvcHRpb25zLnByZVRhc2s7XG4gICAgICAgIHRoaXMuYWZ0ZXJUYXNrID0gb3B0aW9ucy5hZnRlclRhc2s7XG4gICAgICAgIHRoaXMuaWRsZSA9IHRydWU7XG4gICAgICAgIHRoaXMucnVubmluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmJ1ZmZlcmVkID0gb3B0aW9ucy5idWZmZXJlZDtcbiAgICAgICAgdGhpcy5idWZmZXJNYXggPSBvcHRpb25zLmJ1ZmZlck1heDtcbiAgICB9XG4gICAgXG4gICAgdHJpZ2dlcigpe1xuICAgICAgICBsZXQgZG9uZSA9IHBsdWdpbnMuUS5kZWZlcigpO1xuICAgICAgICBpZih0aGlzLmJ1ZmZlcmVkKSB7dGhpcy50cmlnZ2VyQnVmZmVyZWQoKX1cbiAgICAgICAgZWxzZXt0aGlzLnRyaWdnZXJVbkJ1ZmZlcmVkKCl9O1xuICAgIH07XG4gICAgdHJpZ2dlclVuQnVmZmVyZWQoKXtcbiAgICAgICAgcmV0dXJuIGhlbHBlcnMucnVuVGFzayh0aGlzKTtcbiAgICB9XG4gICAgdHJpZ2dlckJ1ZmZlcmVkKCl7XG4gICAgICAgIHZhciBkb25lID0gcGx1Z2lucy5RLmRlZmVyKCk7XG4gICAgICAgIGlmKCEodGhpcy5idWZmZXJDb3VudGVyID49IHRoaXMuYnVmZmVyTWF4KSl7XG4gICAgICAgICAgICB0aGlzLmJ1ZmZlckNvdW50ZXIrK1xuICAgICAgICB9XG4gICAgICAgIGhlbHBlcnMucnVuQnVmZmVyZWRUYXNrKHRoaXMpO1xuICAgICAgICByZXR1cm4gZG9uZS5wcm9taXNlO1xuICAgIH1cblxuICAgIGdldCBzdGF0ZSgpOnN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZTtcbiAgICB9XG4gICAgc2V0IHN0YXRlKHN0YXRlQXJnOnN0cmluZyl7XG4gICAgICAgIGlmIChzdGF0ZUFyZyA9PSBcImxvY2tlZFwiKXtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlID0gXCJsb2NrZWRcIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBsdWdpbnMuYmVhdXR5bG9nLmVycm9yKFwic3RhdGUgdHlwZVwiICk7XG4gICAgICAgIH1cbiAgICB9XG59Il19

View File

@ -1,4 +1,8 @@
import * as classes from "./taskbuffer.classes"; import { Task } from "./taskbuffer.classes";
export declare class Taskchain extends classes.Task { export declare class Taskchain extends Task {
constructor(taskArrayArg: classes.Task[]); taskArray: Task[];
constructor(taskArrayArg: Task[] | Task);
addTask(taskArg: Task): void;
removeTask(taskArg: Task): void;
shiftTask(): void;
} }

View File

@ -4,16 +4,50 @@ var __extends = (this && this.__extends) || function (d, b) {
function __() { this.constructor = d; } function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
}; };
var classes = require("./taskbuffer.classes"); /// <reference path="./typings/main.d.ts" />
var plugins = require("./taskbuffer.plugins");
var taskbuffer_classes_1 = require("./taskbuffer.classes");
var Taskchain = (function (_super) { var Taskchain = (function (_super) {
__extends(Taskchain, _super); __extends(Taskchain, _super);
function Taskchain(taskArrayArg) { function Taskchain(taskArrayArg) {
var _this = this;
_super.call(this, { _super.call(this, {
task: function () { } taskFunction: function () {
if (_this.taskArray.length = 0)
return; //make sure there is actually a Task available to execute
var startDeferred = plugins.Q.defer(); // this is the starting Deferred object
var promisePointer = startDeferred.promise;
var _loop_1 = function(keyArg) {
promisePointer.then(function () {
promisePointer = this.taskArray[keyArg].trigger();
return promisePointer;
});
};
for (var keyArg in _this.taskArray) {
_loop_1(keyArg);
}
;
startDeferred.resolve();
}
}); });
} }
Taskchain.prototype.addTask = function (taskArg) {
this.taskArray.push(taskArg);
};
;
Taskchain.prototype.removeTask = function (taskArg) {
//TODO
};
;
Taskchain.prototype.shiftTask = function () {
};
;
return Taskchain; return Taskchain;
}(classes.Task)); }(taskbuffer_classes_1.Task));
exports.Taskchain = Taskchain; exports.Taskchain = Taskchain;
;
var myTask = new Taskchain(new taskbuffer_classes_1.Task({
taskFunction: function () { }
}));
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRhc2tidWZmZXIuY2xhc3Nlcy50YXNrY2hhaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRUEsSUFBWSxPQUFPLFdBQU0sc0JBRXpCLENBQUMsQ0FGOEM7QUFFL0M7SUFBK0IsNkJBQVk7SUFDdkMsbUJBQVksWUFBMkI7UUFDbkMsa0JBQU07WUFDRixJQUFJLEVBQUUsY0FBVyxDQUFDO1NBQ3JCLENBQUMsQ0FBQztJQUNQLENBQUM7SUFDTCxnQkFBQztBQUFELENBTkEsQUFNQyxDQU44QixPQUFPLENBQUMsSUFBSSxHQU0xQztBQU5ZLGlCQUFTLFlBTXJCLENBQUEiLCJmaWxlIjoidGFza2J1ZmZlci5jbGFzc2VzLnRhc2tjaGFpbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuL3R5cGluZ3MvbWFpbi5kLnRzXCIgLz5cbmltcG9ydCBoZWxwZXJzID0gcmVxdWlyZShcIi4vdGFza2J1ZmZlci5jbGFzc2VzLmhlbHBlcnNcIik7XG5pbXBvcnQgKiBhcyBjbGFzc2VzIGZyb20gXCIuL3Rhc2tidWZmZXIuY2xhc3Nlc1wiXG5cbmV4cG9ydCBjbGFzcyBUYXNrY2hhaW4gZXh0ZW5kcyBjbGFzc2VzLlRhc2sge1xuICAgIGNvbnN0cnVjdG9yKHRhc2tBcnJheUFyZzpjbGFzc2VzLlRhc2tbXSl7XG4gICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgIHRhc2s6IGZ1bmN0aW9uKCl7fVxuICAgICAgICB9KTtcbiAgICB9XG59Il19 //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRhc2tidWZmZXIuY2xhc3Nlcy50YXNrY2hhaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsNENBQTRDO0FBQzVDLElBQVksT0FBTyxXQUFNLHNCQUFzQixDQUFDLENBQUE7QUFDaEQsbUNBQW1CLHNCQUFzQixDQUFDLENBQUE7QUFHMUM7SUFBK0IsNkJBQUk7SUFHL0IsbUJBQVksWUFBd0I7UUFIeEMsaUJBNEJDO1FBeEJPLGtCQUFNO1lBQ0YsWUFBWSxFQUFFO2dCQUNWLEVBQUUsQ0FBQSxDQUFDLEtBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztvQkFBQyxNQUFNLENBQUMsQ0FBQyx5REFBeUQ7Z0JBQy9GLElBQUksYUFBYSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyx3Q0FBd0M7Z0JBQy9FLElBQUksY0FBYyxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUM7Z0JBQzNDO29CQUNJLGNBQWMsQ0FBQyxJQUFJLENBQUM7d0JBQ2hCLGNBQWMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO3dCQUNsRCxNQUFNLENBQUMsY0FBYyxDQUFDO29CQUMxQixDQUFDLENBQUMsQ0FBQTs7Z0JBSk4sR0FBRyxDQUFBLENBQUMsSUFBSSxNQUFNLElBQUksS0FBSSxDQUFDLFNBQVMsQ0FBQzs7aUJBS2hDO2dCQUFBLENBQUM7Z0JBQ0YsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzVCLENBQUM7U0FDSixDQUFDLENBQUM7SUFDUCxDQUFDO0lBQ0QsMkJBQU8sR0FBUCxVQUFRLE9BQVk7UUFDaEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakMsQ0FBQzs7SUFDRCw4QkFBVSxHQUFWLFVBQVcsT0FBWTtRQUNuQixNQUFNO0lBQ1YsQ0FBQzs7SUFDRCw2QkFBUyxHQUFUO0lBRUEsQ0FBQzs7SUFDTCxnQkFBQztBQUFELENBNUJBLEFBNEJDLENBNUI4Qix5QkFBSSxHQTRCbEM7QUE1QlksaUJBQVMsWUE0QnJCLENBQUE7QUFBQSxDQUFDO0FBRUYsSUFBSSxNQUFNLEdBQUcsSUFBSSxTQUFTLENBQ3RCLElBQUkseUJBQUksQ0FBQztJQUNMLFlBQVksRUFBQyxjQUFXLENBQUM7Q0FDNUIsQ0FBQyxDQUNMLENBQUMiLCJmaWxlIjoidGFza2J1ZmZlci5jbGFzc2VzLnRhc2tjaGFpbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuL3R5cGluZ3MvbWFpbi5kLnRzXCIgLz5cbmltcG9ydCAqIGFzIHBsdWdpbnMgZnJvbSBcIi4vdGFza2J1ZmZlci5wbHVnaW5zXCI7XG5pbXBvcnQge1Rhc2t9IGZyb20gXCIuL3Rhc2tidWZmZXIuY2xhc3Nlc1wiO1xuaW1wb3J0IGhlbHBlcnMgPSByZXF1aXJlKFwiLi90YXNrYnVmZmVyLmNsYXNzZXMuaGVscGVyc1wiKTtcblxuZXhwb3J0IGNsYXNzIFRhc2tjaGFpbiBleHRlbmRzIFRhc2sge1xuICAgIHRhc2tBcnJheTpUYXNrW107XG4gICAgXG4gICAgY29uc3RydWN0b3IodGFza0FycmF5QXJnOlRhc2tbXXxUYXNrKXtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgdGFza0Z1bmN0aW9uOiAoKSA9PiB7IC8vIHRoaXMgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBleGVjdXRlZCB3aGVuIFRhc2tDaGFpbiBpcyB0cmlnZ2VyZWRcbiAgICAgICAgICAgICAgICBpZih0aGlzLnRhc2tBcnJheS5sZW5ndGggPSAwKSByZXR1cm47IC8vbWFrZSBzdXJlIHRoZXJlIGlzIGFjdHVhbGx5IGEgVGFzayBhdmFpbGFibGUgdG8gZXhlY3V0ZVxuICAgICAgICAgICAgICAgIGxldCBzdGFydERlZmVycmVkID0gcGx1Z2lucy5RLmRlZmVyKCk7IC8vIHRoaXMgaXMgdGhlIHN0YXJ0aW5nIERlZmVycmVkIG9iamVjdCBcbiAgICAgICAgICAgICAgICBsZXQgcHJvbWlzZVBvaW50ZXIgPSBzdGFydERlZmVycmVkLnByb21pc2U7XG4gICAgICAgICAgICAgICAgZm9yKGxldCBrZXlBcmcgaW4gdGhpcy50YXNrQXJyYXkpe1xuICAgICAgICAgICAgICAgICAgICBwcm9taXNlUG9pbnRlci50aGVuKGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlUG9pbnRlciA9IHRoaXMudGFza0FycmF5W2tleUFyZ10udHJpZ2dlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2VQb2ludGVyO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgc3RhcnREZWZlcnJlZC5yZXNvbHZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhZGRUYXNrKHRhc2tBcmc6VGFzayl7XG4gICAgICAgIHRoaXMudGFza0FycmF5LnB1c2godGFza0FyZyk7XG4gICAgfTtcbiAgICByZW1vdmVUYXNrKHRhc2tBcmc6VGFzayl7XG4gICAgICAgIC8vVE9ET1xuICAgIH07XG4gICAgc2hpZnRUYXNrKCl7XG4gICAgICAgIFxuICAgIH07XG59O1xuXG5sZXQgbXlUYXNrID0gbmV3IFRhc2tjaGFpbihcbiAgICBuZXcgVGFzayh7XG4gICAgICAgIHRhc2tGdW5jdGlvbjpmdW5jdGlvbigpe31cbiAgICB9KVxuKTsiXX0=

View File

@ -1,22 +0,0 @@
0 info it worked if it ends with ok
1 verbose cli [ '/Users/philkunz/.nvm/versions/node/v4.2.4/bin/node',
1 verbose cli '/Users/philkunz/.nvm/versions/node/v4.2.4/bin/npm',
1 verbose cli 'version',
1 verbose cli 'patch' ]
2 info using npm@3.8.5
3 info using node@v4.2.4
4 error version No valid package.json found
5 verbose stack SyntaxError: Unexpected token }
5 verbose stack at Object.parse (native)
5 verbose stack at /Users/philkunz/.nvm/versions/node/v4.2.4/lib/node_modules/npm/lib/version.js:113:19
5 verbose stack at /Users/philkunz/.nvm/versions/node/v4.2.4/lib/node_modules/npm/node_modules/graceful-fs/graceful-fs.js:78:16
5 verbose stack at FSReqWrap.readFileAfterClose [as oncomplete] (fs.js:380:3)
6 verbose cwd /Users/philkunz/github/pushrocks/taskbuffer
7 error Darwin 15.4.0
8 error argv "/Users/philkunz/.nvm/versions/node/v4.2.4/bin/node" "/Users/philkunz/.nvm/versions/node/v4.2.4/bin/npm" "version" "patch"
9 error node v4.2.4
10 error npm v3.8.5
11 error Unexpected token }
12 error If you need help, you may report this error at:
12 error <https://github.com/npm/npm/issues>
13 verbose exit [ 1, true ]

View File

@ -1,6 +1,6 @@
{ {
"name": "taskbuffer", "name": "taskbuffer",
"version": "0.0.4", "version": "0.0.5",
"description": "manage triggers and execution of tasks with promises", "description": "manage triggers and execution of tasks with promises",
"main": "dist/index.js", "main": "dist/index.js",
"scripts": { "scripts": {

View File

@ -1,2 +1,5 @@
/// <reference path="./typings/main.d.ts" /> /// <reference path="./typings/main.d.ts" />
export * from "./taskbuffer.classes" export * from "./taskbuffer.classes";
// import for naming only
import "./taskbuffer.classes.helpers"

View File

@ -1,16 +1,16 @@
/// <reference path="./typings/main.d.ts" /> /// <reference path="./typings/main.d.ts" />
import plugins = require("./taskbuffer.plugins"); import plugins = require("./taskbuffer.plugins");
import classes = require("./taskbuffer.classes"); import {Task} from "./taskbuffer.classes"
export var emptyTaskFunction = function(){ export let emptyTaskFunction = function(){
var done = plugins.Q.defer(); let done = plugins.Q.defer();
done.resolve(); done.resolve();
return done.promise; return done.promise;
}; };
export var isTask = function(taskArg):boolean{ export let isTask = function(taskArg):boolean{
if( if(
taskArg instanceof classes.Task taskArg instanceof Task
&& typeof taskArg.task === "function" && typeof taskArg.task === "function"
){ ){
return true; return true;
@ -19,11 +19,50 @@ export var isTask = function(taskArg):boolean{
} }
}; };
export var runTask = function(taskArg){
var done = plugins.Q.defer(); export let isTaskTouched = (task:Task, touchedTasksArray:Task[]):boolean => {
var taskReturn; return false;
if(isTask(taskArg)){ }
taskReturn = taskArg.task();
export let runTask = function(taskArg:Task,optionsArg?:{touchedTasksArray:Task[]}){
let done = plugins.Q.defer();
let localDeferred = plugins.Q.defer();
let touchedTasksArray:Task[];
if(optionsArg.touchedTasksArray){
touchedTasksArray = optionsArg.touchedTasksArray;
} else {
touchedTasksArray = [];
} }
touchedTasksArray.push(taskArg);
localDeferred.promise
.then(() =>{
if(taskArg.preTask && !isTaskTouched(taskArg.preTask,touchedTasksArray)){
return runTask(taskArg.preTask,{touchedTasksArray:touchedTasksArray})
} else {
let done2 = plugins.Q.resolve();
done2.resolve();
return done2.promise;
}
})
.then(() => {
return taskArg.task();
})
.then(() => {
if(taskArg.afterTask && !isTaskTouched(taskArg.afterTask,touchedTasksArray)){
return runTask(taskArg.afterTask,{touchedTasksArray:touchedTasksArray})
} else {
let done2 = plugins.Q.resolve();
done2.resolve();
return done2.promise;
}
})
.then(() => {
done.resolve();
})
return done.promise; return done.promise;
}; };
export let runBufferedTask = (taskArg:Task) => {
}

View File

@ -2,46 +2,46 @@
import * as plugins from "./taskbuffer.plugins" import * as plugins from "./taskbuffer.plugins"
import * as helpers from "./taskbuffer.classes.helpers" import * as helpers from "./taskbuffer.classes.helpers"
export class Task { export class Task {
task:any; task:any;
idle:boolean; idle:boolean;
running:boolean; running:boolean;
buffered:boolean; buffered:boolean;
private _counterBufferRelative; bufferCounter:number;
private _counterTriggerAbsolute; bufferMax:number;
private _counterTriggerAbsolute:number;
private _state:string; private _state:string;
preTask:Task; preTask:Task;
afterTask:Task; afterTask:Task;
constructor(taskArg,optionsArg:{preTask?:Task,afterTask?:Task, buffered?:boolean} = {}){ constructor(optionsArg:{taskFunction:any,preTask?:Task,afterTask?:Task, buffered?:boolean, bufferMax?:number}){
if (!optionsArg){optionsArg = {taskFunction:function(){}}}
var options = optionsArg; var options = optionsArg;
this.task = taskArg; this.task = optionsArg.taskFunction;
this.preTask = options.preTask; this.preTask = options.preTask;
this.afterTask = options.afterTask; this.afterTask = options.afterTask;
this.idle = true; this.idle = true;
this.running = false; this.running = false;
if (typeof options.buffered === "boolean"){ this.buffered = options.buffered;
this.buffered = options.buffered; this.bufferMax = options.bufferMax;
} else {
this.buffered = false;
}
} }
trigger(){ trigger(){
let done = plugins.Q.defer(); let done = plugins.Q.defer();
helpers.runTask(this.preTask) if(this.buffered) {this.triggerBuffered()}
.then(function(){ else{this.triggerUnBuffered()};
})
.then(function(){
})
.then(function(){
done.resolve();
});
return done.promise;
}; };
triggerUnBuffered(){
return helpers.runTask(this);
}
triggerBuffered(){ triggerBuffered(){
var done = plugins.Q.defer(); var done = plugins.Q.defer();
if(!(this.bufferCounter >= this.bufferMax)){
this.bufferCounter++
}
helpers.runBufferedTask(this);
return done.promise;
} }
get state():string { get state():string {

View File

@ -1,11 +1,40 @@
/// <reference path="./typings/main.d.ts" /> /// <reference path="./typings/main.d.ts" />
import * as plugins from "./taskbuffer.plugins";
import {Task} from "./taskbuffer.classes";
import helpers = require("./taskbuffer.classes.helpers"); import helpers = require("./taskbuffer.classes.helpers");
import * as classes from "./taskbuffer.classes"
export class Taskchain extends classes.Task { export class Taskchain extends Task {
constructor(taskArrayArg:classes.Task[]){ taskArray:Task[];
constructor(taskArrayArg:Task[]|Task){
super({ super({
task: function(){} taskFunction: () => { // this is the function that gets executed when TaskChain is triggered
if(this.taskArray.length = 0) return; //make sure there is actually a Task available to execute
let startDeferred = plugins.Q.defer(); // this is the starting Deferred object
let promisePointer = startDeferred.promise;
for(let keyArg in this.taskArray){
promisePointer.then(function(){
promisePointer = this.taskArray[keyArg].trigger();
return promisePointer;
})
};
startDeferred.resolve();
}
}); });
} }
} addTask(taskArg:Task){
this.taskArray.push(taskArg);
};
removeTask(taskArg:Task){
//TODO
};
shiftTask(){
};
};
let myTask = new Taskchain(
new Task({
taskFunction:function(){}
})
);