Compare commits

..

22 Commits

Author SHA1 Message Date
7a60f30f0b 1.0.2 2016-08-01 13:35:38 +02:00
9e175245ed update README 2016-08-01 13:35:33 +02:00
4bc5617240 1.0.1 2016-08-01 13:19:50 +02:00
39c41a817e now exporting interfaces 2016-08-01 13:19:42 +02:00
8823e2b01d 1.0.0 2016-08-01 13:17:36 +02:00
24e96926e3 update taskbuffer and add gitlab ci 2016-08-01 13:17:15 +02:00
8a414b9a7d update structure 2016-08-01 00:53:27 +02:00
a347ded65a 0.1.3 2016-05-23 05:37:12 +02:00
3ce4b200db add typings to package.json 2016-05-23 05:36:55 +02:00
cd6407f189 0.1.2 2016-05-17 03:32:57 +02:00
ca2afbd8c7 improve Readme 2016-05-17 03:32:47 +02:00
6640d5fb2f 0.1.1 2016-05-17 03:27:34 +02:00
7a3aed275f update README 2016-05-17 03:27:29 +02:00
19beb95e20 now logging allright 2016-05-15 15:52:59 +02:00
8944ae2462 added Taskparallel class that executest tasks in parallel 2016-05-15 15:28:38 +02:00
b1eeb3563e 0.1.0 2016-05-15 03:18:19 +02:00
1714f552ac now has working taskchain 2016-05-15 03:16:50 +02:00
454a999a42 improve options handling between classes 2016-05-14 23:24:11 +02:00
1f3f2ae92f included ora and introduced taskspace. 2016-05-14 04:28:22 +02:00
9014eec9f6 tiny fix 2016-05-13 05:14:29 +02:00
ee56b6f655 now has working task class 2016-05-06 02:05:45 +02:00
55ddbece13 update tests 2016-05-05 19:30:24 +02:00
35 changed files with 714 additions and 265 deletions

36
.gitlab-ci.yml Normal file
View File

@ -0,0 +1,36 @@
image: hosttoday/ht-docker-node:npmts
stages:
- test
- release
testLEGACY:
stage: test
script:
- npmci test legacy
tags:
- docker
testLTS:
stage: test
script:
- npmci test lts
tags:
- docker
testSTABLE:
stage: test
script:
- npmci test stable
tags:
- docker
release:
stage: release
environment: npmjs-com_registry
script:
- npmci publish
only:
- tags
tags:
- docker

View File

@ -1,11 +0,0 @@
language: node_js
node_js:
- stable
deploy:
provider: npm
email: npm@lossless.digital
api_key:
secure: NejErc2+ohEEH8DecYcx6/2oSdEQQBRzlOwTMxQBftHdIkvziwOcCerqCJtrXuzalqAofVCcVisunWIXZmxfIBGV6mJVauCIp5KzH4JUhYzLym33p9MSphjlPNfsI6nKkW0LAgOMjkJGuHLqU3oskvBqYyh8m3NuCna5mNwm8lo5WGckzHSwdsmhnb839WhlZbmQc6M6WW6Ir7bbxX9ZOmNUYUWH6VdXfPBxoXN3nO21pXKt7Zg8/nU7IkF+VEUVfYNlR3xUiocWemuBFxjtsfoliQ/y/oGL7ccQ7OeE4PxSu+xNUpYYVipkQcRtyWDKCwJp4R2DNTj/ikOHH+BEFOBDG8qYxwf37Ju0jFybzslAEJLy5gl4bFjiZNA8ldUXY5ubJb56iZTNSbMU0lmXw+qKvIoyVY/1JAE5lzFGVA6nDdiUGAEOg/ajzAC3gjFU2QS2Wvncz3dky0k/2INBVUwmmAvAMazl5XkvHtQ3Wzb+Fc8TXWflqBDF0okySoJzlY13pm/OtOHipiqEyUCnqaUUwJtLIb6tHOPzxZKlWLCem7y84cDlxQSbLVItbArOJFHdr66sp/U/FqYAtWeLdbkhjCENFwzR9kYtEyEl+QWLTckO1/lVF4xJLh6drfhQ66CwF5bfqr5xIS08mnKuYBfJOA4/wV4bQFPhtYm7Oi8=
on:
tags: true
repo: pushrocks/taskbuffer

View File

@ -1,5 +1,5 @@
# taskbuffer
Flexible task organization for gulp.
flexible task management. TypeScript ready!
## Status
[![Coverage Status](https://coveralls.io/repos/github/pushrocks/taskbuffer/badge.svg?branch=master)](https://coveralls.io/github/pushrocks/taskbuffer?branch=master)
@ -12,7 +12,7 @@ npm install taskbuffer --save
## Concepts
#### Task
### class `Task`
* A Task in its most simple form is a function that is executed when the task runs.
* A Task can have a **preTask** and an **afterTask**
(those are run before or after the main function whenever the task is called)
@ -27,6 +27,30 @@ npm install taskbuffer --save
* 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.
#### Taskchain
* Multiple Tasks can be combined in a bigger task using a Taskchain. Taskchain extends Task.
### class `TaskChain`
* TaskChain extends Task.
* Multiple Tasks can be combined in a bigger task using a TaskChain.
* While the tasks are async in themselve, TaskChain **runs Tasks serialized** (one after the other)
* that means that tasks can rely on each other and
### class `TaskParallel`
* TaskParallel extends Task.
* like TaskChain, however **tasks run in parallel**
* Tasks cannot rely on each other.
### Usage
We highly recommend TypeScript as this module supports **TypeScript intellisense**.
```
import * as taskbuffer from "taskbuffer";
myTask = new taskbuffer.Task({
preTask: someOtherTask // optional, don't worry loops are prevented
afterTask: someOtherTask // optional, don't worry loops are prevented
name:"myTask1",
taskFunction:() => {
// do some stuff and return promise
// pass on any data through promise resolution
// Use TypeScript for better understanding and code completion
}
})
```

5
dist/index.d.ts vendored
View File

@ -1,2 +1,5 @@
export * from "./taskbuffer.classes";
export { Task, ITaskFunction } from "./taskbuffer.classes.task";
export { Taskchain } from "./taskbuffer.classes.taskchain";
export { Taskparallel } from "./taskbuffer.classes.taskparallel";
export { Taskspace } from "./taskbuffer.classes.taskspace";
import "./taskbuffer.classes.helpers";

16
dist/index.js vendored
View File

@ -1,10 +1,12 @@
"use strict";
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
/// <reference path="./typings/main.d.ts" />
__export(require("./taskbuffer.classes"));
var taskbuffer_classes_task_1 = require("./taskbuffer.classes.task");
exports.Task = taskbuffer_classes_task_1.Task;
var taskbuffer_classes_taskchain_1 = require("./taskbuffer.classes.taskchain");
exports.Taskchain = taskbuffer_classes_taskchain_1.Taskchain;
var taskbuffer_classes_taskparallel_1 = require("./taskbuffer.classes.taskparallel");
exports.Taskparallel = taskbuffer_classes_taskparallel_1.Taskparallel;
var taskbuffer_classes_taskspace_1 = require("./taskbuffer.classes.taskspace");
exports.Taskspace = taskbuffer_classes_taskspace_1.Taskspace;
// import for naming only
require("./taskbuffer.classes.helpers");
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSw0Q0FBNEM7QUFDNUMsaUJBQWMsc0JBQXNCLENBQUMsRUFBQTtBQUVyQyx5QkFBeUI7QUFDekIsUUFBTyw4QkFBOEIsQ0FBQyxDQUFEIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4vdHlwaW5ncy9tYWluLmQudHNcIiAvPlxuZXhwb3J0ICogZnJvbSBcIi4vdGFza2J1ZmZlci5jbGFzc2VzXCI7XG5cbi8vIGltcG9ydCBmb3IgbmFtaW5nIG9ubHlcbmltcG9ydCBcIi4vdGFza2J1ZmZlci5jbGFzc2VzLmhlbHBlcnNcIiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsd0NBQWlDLDJCQUEyQixDQUFDO0FBQXJELDhDQUFxRDtBQUM3RCw2Q0FBd0IsZ0NBQWdDLENBQUM7QUFBakQsNkRBQWlEO0FBQ3pELGdEQUEyQixtQ0FBbUMsQ0FBQztBQUF2RCxzRUFBdUQ7QUFDL0QsNkNBQXdCLGdDQUFnQyxDQUFDO0FBQWpELDZEQUFpRDtBQUV6RCx5QkFBeUI7QUFDekIsUUFBTyw4QkFBOEIsQ0FBQyxDQUFEIn0=

View File

@ -1,2 +0,0 @@
export * from "./taskbuffer.classes.task";
export * from "./taskbuffer.classes.taskchain";

View File

@ -1,8 +1,10 @@
import { Task } from "./taskbuffer.classes";
export declare let emptyTaskFunction: () => any;
/// <reference types="q" />
import plugins = require("./taskbuffer.plugins");
import { Task, ITaskFunction } from "./taskbuffer.classes.task";
export declare let emptyTaskFunction: ITaskFunction;
export declare let isTask: (taskArg: any) => boolean;
export declare let isTaskTouched: (task: Task, touchedTasksArray: Task[]) => boolean;
export declare let isTaskTouched: (taskArg: Task, touchedTasksArray: Task[]) => boolean;
export declare let runTask: (taskArg: Task, optionsArg?: {
touchedTasksArray: Task[];
}) => any;
}) => plugins.Q.Promise<{}>;
export declare let runBufferedTask: (taskArg: Task) => void;

File diff suppressed because one or more lines are too long

View File

@ -1,8 +0,0 @@
"use strict";
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
__export(require("./taskbuffer.classes.task"));
__export(require("./taskbuffer.classes.taskchain"));
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRhc2tidWZmZXIuY2xhc3Nlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsaUJBQWMsMkJBQ2QsQ0FBQyxFQUR3QztBQUN6QyxpQkFBYyxnQ0FDZCxDQUFDLEVBRDZDIiwiZmlsZSI6InRhc2tidWZmZXIuY2xhc3Nlcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL3Rhc2tidWZmZXIuY2xhc3Nlcy50YXNrXCJcbmV4cG9ydCAqIGZyb20gXCIuL3Rhc2tidWZmZXIuY2xhc3Nlcy50YXNrY2hhaW5cIlxuIl19

View File

@ -1,7 +1,14 @@
/// <reference types="q" />
import * as plugins from "./taskbuffer.plugins";
export interface ITaskFunction {
(): PromiseLike<any>;
}
export declare class Task {
name: string;
task: any;
idle: boolean;
running: boolean;
runningBuffered: boolean;
idle: boolean;
buffered: boolean;
bufferCounter: number;
bufferMax: number;
@ -10,14 +17,24 @@ export declare class Task {
preTask: Task;
afterTask: Task;
constructor(optionsArg: {
taskFunction: any;
taskFunction: ITaskFunction;
preTask?: Task;
afterTask?: Task;
buffered?: boolean;
bufferMax?: number;
name?: string;
});
trigger(): void;
triggerUnBuffered(): any;
triggerBuffered(): any;
/**
* trigger the task. Will trigger buffered if this.buffered is true
*/
trigger(): plugins.Q.Promise<{}>;
/**
* trigger task unbuffered.
*/
triggerUnBuffered(): plugins.Q.Promise<{}>;
/**
* trigger task buffered.
*/
triggerBuffered(): plugins.Q.Promise<{}>;
state: string;
}

View File

@ -1,60 +1,73 @@
"use strict";
/// <reference path="./typings/main.d.ts" />
var plugins = require("./taskbuffer.plugins");
var helpers = require("./taskbuffer.classes.helpers");
var Task = (function () {
function Task(optionsArg) {
if (!optionsArg) {
optionsArg = { taskFunction: function () { } };
}
const plugins = require("./taskbuffer.plugins");
const helpers = require("./taskbuffer.classes.helpers");
class Task {
constructor(optionsArg) {
this.running = false;
this.runningBuffered = false;
this.idle = true;
this.buffered = false;
this.bufferMax = 1;
this._counterTriggerAbsolute = 0;
var options = optionsArg;
this.task = optionsArg.taskFunction;
this.preTask = options.preTask;
this.afterTask = options.afterTask;
this.idle = true;
this.running = false;
this.idle = !this.running && !this.runningBuffered;
this.buffered = options.buffered;
this.bufferMax = options.bufferMax;
this.name = options.name;
}
Task.prototype.trigger = function () {
var done = plugins.Q.defer();
/**
* trigger the task. Will trigger buffered if this.buffered is true
*/
trigger() {
let done = plugins.Q.defer();
if (this.buffered) {
this.triggerBuffered();
this.triggerBuffered()
.then(done.resolve);
}
else {
this.triggerUnBuffered();
this.triggerUnBuffered()
.then(done.resolve);
}
;
};
return done.promise;
}
;
Task.prototype.triggerUnBuffered = function () {
/**
* trigger task unbuffered.
*/
triggerUnBuffered() {
return helpers.runTask(this);
};
Task.prototype.triggerBuffered = function () {
}
/**
* trigger task buffered.
*/
triggerBuffered() {
var done = plugins.Q.defer();
if (!(this.bufferCounter >= this.bufferMax)) {
this.bufferCounter++;
}
helpers.runBufferedTask(this);
;
if (!this.runningBuffered) {
helpers.runBufferedTask(this);
}
;
return done.promise;
};
Object.defineProperty(Task.prototype, "state", {
get: function () {
return this._state;
},
set: function (stateArg) {
if (stateArg == "locked") {
this._state = "locked";
}
else {
plugins.beautylog.error("state type");
}
},
enumerable: true,
configurable: true
});
return Task;
}());
}
get state() {
return this._state;
}
set state(stateArg) {
if (stateArg == "locked") {
this._state = "locked";
}
else {
plugins.beautylog.error("state type " + stateArg.blue + " could not be set");
}
}
}
exports.Task = Task;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRhc2tidWZmZXIuY2xhc3Nlcy50YXNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSw0Q0FBNEM7QUFDNUMsSUFBWSxPQUFPLFdBQU0sc0JBQ3pCLENBQUMsQ0FEOEM7QUFDL0MsSUFBWSxPQUFPLFdBQU0sOEJBR3pCLENBQUMsQ0FIc0Q7QUFHdkQ7SUFZSSxjQUFZLFVBQWlHO1FBQ3pHLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUEsQ0FBQztZQUFBLFVBQVUsR0FBRyxFQUFDLFlBQVksRUFBQyxjQUFXLENBQUMsRUFBQyxDQUFBO1FBQUEsQ0FBQztRQUMxRCxJQUFJLE9BQU8sR0FBRyxVQUFVLENBQUM7UUFDekIsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUMvQixJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDbkMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsc0JBQU8sR0FBUDtRQUNJLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDN0IsRUFBRSxDQUFBLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFBQSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUE7UUFBQSxDQUFDO1FBQzFDLElBQUksQ0FBQSxDQUFDO1lBQUEsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUE7UUFBQSxDQUFDO1FBQUEsQ0FBQztJQUNuQyxDQUFDOztJQUNELGdDQUFpQixHQUFqQjtRQUNJLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFDRCw4QkFBZSxHQUFmO1FBQ0ksSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM3QixFQUFFLENBQUEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQTtRQUN4QixDQUFDO1FBQ0QsT0FBTyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN4QixDQUFDO0lBRUQsc0JBQUksdUJBQUs7YUFBVDtZQUNJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3ZCLENBQUM7YUFDRCxVQUFVLFFBQWU7WUFDckIsRUFBRSxDQUFDLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxDQUFBLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDO1lBQzNCLENBQUM7WUFBQyxJQUFJLENBQUMsQ0FBQztnQkFDSixPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUUsQ0FBQztZQUMzQyxDQUFDO1FBQ0wsQ0FBQzs7O09BUEE7SUFRTCxXQUFDO0FBQUQsQ0FuREEsQUFtREMsSUFBQTtBQW5EWSxZQUFJLE9BbURoQixDQUFBIiwiZmlsZSI6InRhc2tidWZmZXIuY2xhc3Nlcy50YXNrLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4vdHlwaW5ncy9tYWluLmQudHNcIiAvPlxuaW1wb3J0ICogYXMgcGx1Z2lucyBmcm9tIFwiLi90YXNrYnVmZmVyLnBsdWdpbnNcIlxuaW1wb3J0ICogYXMgaGVscGVycyBmcm9tIFwiLi90YXNrYnVmZmVyLmNsYXNzZXMuaGVscGVyc1wiXG5cblxuZXhwb3J0IGNsYXNzIFRhc2sge1xuICAgIHRhc2s6YW55O1xuICAgIGlkbGU6Ym9vbGVhbjtcbiAgICBydW5uaW5nOmJvb2xlYW47XG4gICAgYnVmZmVyZWQ6Ym9vbGVhbjtcbiAgICBidWZmZXJDb3VudGVyOm51bWJlcjtcbiAgICBidWZmZXJNYXg6bnVtYmVyO1xuICAgIHByaXZhdGUgX2NvdW50ZXJUcmlnZ2VyQWJzb2x1dGU6bnVtYmVyO1xuICAgIHByaXZhdGUgX3N0YXRlOnN0cmluZztcbiAgICBwcmVUYXNrOlRhc2s7XG4gICAgYWZ0ZXJUYXNrOlRhc2s7XG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zQXJnOnt0YXNrRnVuY3Rpb246YW55LHByZVRhc2s/OlRhc2ssYWZ0ZXJUYXNrPzpUYXNrLCBidWZmZXJlZD86Ym9vbGVhbiwgYnVmZmVyTWF4PzpudW1iZXJ9KXtcbiAgICAgICAgaWYgKCFvcHRpb25zQXJnKXtvcHRpb25zQXJnID0ge3Rhc2tGdW5jdGlvbjpmdW5jdGlvbigpe319fVxuICAgICAgICB2YXIgb3B0aW9ucyA9IG9wdGlvbnNBcmc7XG4gICAgICAgIHRoaXMudGFzayA9IG9wdGlvbnNBcmcudGFza0Z1bmN0aW9uO1xuICAgICAgICB0aGlzLnByZVRhc2sgPSBvcHRpb25zLnByZVRhc2s7XG4gICAgICAgIHRoaXMuYWZ0ZXJUYXNrID0gb3B0aW9ucy5hZnRlclRhc2s7XG4gICAgICAgIHRoaXMuaWRsZSA9IHRydWU7XG4gICAgICAgIHRoaXMucnVubmluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmJ1ZmZlcmVkID0gb3B0aW9ucy5idWZmZXJlZDtcbiAgICAgICAgdGhpcy5idWZmZXJNYXggPSBvcHRpb25zLmJ1ZmZlck1heDtcbiAgICB9XG4gICAgXG4gICAgdHJpZ2dlcigpe1xuICAgICAgICBsZXQgZG9uZSA9IHBsdWdpbnMuUS5kZWZlcigpO1xuICAgICAgICBpZih0aGlzLmJ1ZmZlcmVkKSB7dGhpcy50cmlnZ2VyQnVmZmVyZWQoKX1cbiAgICAgICAgZWxzZXt0aGlzLnRyaWdnZXJVbkJ1ZmZlcmVkKCl9O1xuICAgIH07XG4gICAgdHJpZ2dlclVuQnVmZmVyZWQoKXtcbiAgICAgICAgcmV0dXJuIGhlbHBlcnMucnVuVGFzayh0aGlzKTtcbiAgICB9XG4gICAgdHJpZ2dlckJ1ZmZlcmVkKCl7XG4gICAgICAgIHZhciBkb25lID0gcGx1Z2lucy5RLmRlZmVyKCk7XG4gICAgICAgIGlmKCEodGhpcy5idWZmZXJDb3VudGVyID49IHRoaXMuYnVmZmVyTWF4KSl7XG4gICAgICAgICAgICB0aGlzLmJ1ZmZlckNvdW50ZXIrK1xuICAgICAgICB9XG4gICAgICAgIGhlbHBlcnMucnVuQnVmZmVyZWRUYXNrKHRoaXMpO1xuICAgICAgICByZXR1cm4gZG9uZS5wcm9taXNlO1xuICAgIH1cblxuICAgIGdldCBzdGF0ZSgpOnN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZTtcbiAgICB9XG4gICAgc2V0IHN0YXRlKHN0YXRlQXJnOnN0cmluZyl7XG4gICAgICAgIGlmIChzdGF0ZUFyZyA9PSBcImxvY2tlZFwiKXtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlID0gXCJsb2NrZWRcIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBsdWdpbnMuYmVhdXR5bG9nLmVycm9yKFwic3RhdGUgdHlwZVwiICk7XG4gICAgICAgIH1cbiAgICB9XG59Il19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza2J1ZmZlci5jbGFzc2VzLnRhc2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy90YXNrYnVmZmVyLmNsYXNzZXMudGFzay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsTUFBWSxPQUFPLFdBQU0sc0JBQ3pCLENBQUMsQ0FEOEM7QUFDL0MsTUFBWSxPQUFPLFdBQU0sOEJBR3pCLENBQUMsQ0FIc0Q7QUFPdkQ7SUFjSSxZQUFZLFVBT1g7UUFsQkQsWUFBTyxHQUFXLEtBQUssQ0FBQztRQUN4QixvQkFBZSxHQUFXLEtBQUssQ0FBQztRQUNoQyxTQUFJLEdBQVcsSUFBSSxDQUFDO1FBQ3BCLGFBQVEsR0FBVyxLQUFLLENBQUM7UUFFekIsY0FBUyxHQUFVLENBQUMsQ0FBQztRQUNiLDRCQUF1QixHQUFVLENBQUMsQ0FBQztRQWF2QyxJQUFJLE9BQU8sR0FBRyxVQUFVLENBQUM7UUFDekIsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUMvQixJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDbkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQ25ELElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUNqQyxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDbkMsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQzdCLENBQUM7SUFFRDs7T0FFRztJQUNILE9BQU87UUFDSCxJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzdCLEVBQUUsQ0FBQSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ2YsSUFBSSxDQUFDLGVBQWUsRUFBRTtpQkFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1QixDQUFDO1FBQ0QsSUFBSSxDQUFDLENBQUM7WUFDRixJQUFJLENBQUMsaUJBQWlCLEVBQUU7aUJBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUIsQ0FBQztRQUFBLENBQUM7UUFDRixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN4QixDQUFDOztJQUVEOztPQUVHO0lBQ0gsaUJBQWlCO1FBQ2IsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsZUFBZTtRQUNYLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDN0IsRUFBRSxDQUFBLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUEsQ0FBQztZQUN4QyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUE7UUFDeEIsQ0FBQztRQUFBLENBQUM7UUFDRixFQUFFLENBQUEsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQSxDQUFDO1lBQ3RCLE9BQU8sQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsQ0FBQztRQUFBLENBQUM7UUFDRixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ0wsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUNELElBQUksS0FBSyxDQUFDLFFBQWU7UUFDckIsRUFBRSxDQUFDLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxDQUFBLENBQUM7WUFDdEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUM7UUFDM0IsQ0FBQztRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ0osT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEdBQUcsbUJBQW1CLENBQUMsQ0FBQztRQUNqRixDQUFDO0lBQ0wsQ0FBQztBQUNMLENBQUM7QUFoRlksWUFBSSxPQWdGaEIsQ0FBQSJ9

View File

@ -1,8 +1,14 @@
import { Task } from "./taskbuffer.classes";
import { Task } from "./taskbuffer.classes.task";
export declare class Taskchain extends Task {
taskArray: Task[];
constructor(taskArrayArg: Task[] | Task);
private _oraObject;
constructor(optionsArg: {
name?: string;
log?: boolean;
taskArray: Task[];
});
addTask(taskArg: Task): void;
removeTask(taskArg: Task): void;
shiftTask(): void;
trigger(): any;
}

View File

@ -1,53 +1,59 @@
"use strict";
var __extends = (this && this.__extends) || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
/// <reference path="./typings/main.d.ts" />
var plugins = require("./taskbuffer.plugins");
var taskbuffer_classes_1 = require("./taskbuffer.classes");
var Taskchain = (function (_super) {
__extends(Taskchain, _super);
function Taskchain(taskArrayArg) {
var _this = this;
_super.call(this, {
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;
});
const plugins = require("./taskbuffer.plugins");
const taskbuffer_classes_task_1 = require("./taskbuffer.classes.task");
const helpers = require("./taskbuffer.classes.helpers");
class Taskchain extends taskbuffer_classes_task_1.Task {
constructor(optionsArg) {
let options = plugins.lodash.merge({
name: "unnamed Taskchain",
log: false
}, optionsArg, {
taskFunction: () => {
let done = plugins.Q.defer(); // this is the starting Deferred object
let taskCounter = 0;
let iterateTasks = () => {
if (typeof this.taskArray[taskCounter] != "undefined") {
this._oraObject.text(this.name + " running: Task" + this.taskArray[taskCounter].name);
this.taskArray[taskCounter].trigger()
.then(() => {
plugins.beautylog.ok(this.taskArray[taskCounter].name);
taskCounter++;
iterateTasks();
});
}
else {
this._oraObject.endOk("Taskchain \"" + this.name + "\" completed successfully");
done.resolve();
}
};
for (var keyArg in _this.taskArray) {
_loop_1(keyArg);
}
;
startDeferred.resolve();
iterateTasks();
return done.promise;
}
});
super(options);
this.taskArray = optionsArg.taskArray;
this._oraObject = new plugins.beautylog.Ora("Taskchain idle", "blue");
if (optionsArg.log === true) {
this._oraObject.start();
}
;
}
Taskchain.prototype.addTask = function (taskArg) {
addTask(taskArg) {
this.taskArray.push(taskArg);
};
}
;
Taskchain.prototype.removeTask = function (taskArg) {
removeTask(taskArg) {
//TODO
};
}
;
Taskchain.prototype.shiftTask = function () {
};
shiftTask() {
}
;
return Taskchain;
}(taskbuffer_classes_1.Task));
trigger() {
this._oraObject.start(this.name + " running...");
return helpers.runTask(this);
}
}
exports.Taskchain = Taskchain;
;
var myTask = new Taskchain(new taskbuffer_classes_1.Task({
taskFunction: function () { }
}));
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRhc2tidWZmZXIuY2xhc3Nlcy50YXNrY2hhaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsNENBQTRDO0FBQzVDLElBQVksT0FBTyxXQUFNLHNCQUFzQixDQUFDLENBQUE7QUFDaEQsbUNBQW1CLHNCQUFzQixDQUFDLENBQUE7QUFHMUM7SUFBK0IsNkJBQUk7SUFHL0IsbUJBQVksWUFBd0I7UUFIeEMsaUJBNEJDO1FBeEJPLGtCQUFNO1lBQ0YsWUFBWSxFQUFFO2dCQUNWLEVBQUUsQ0FBQSxDQUFDLEtBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztvQkFBQyxNQUFNLENBQUMsQ0FBQyx5REFBeUQ7Z0JBQy9GLElBQUksYUFBYSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyx3Q0FBd0M7Z0JBQy9FLElBQUksY0FBYyxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUM7Z0JBQzNDO29CQUNJLGNBQWMsQ0FBQyxJQUFJLENBQUM7d0JBQ2hCLGNBQWMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO3dCQUNsRCxNQUFNLENBQUMsY0FBYyxDQUFDO29CQUMxQixDQUFDLENBQUMsQ0FBQTs7Z0JBSk4sR0FBRyxDQUFBLENBQUMsSUFBSSxNQUFNLElBQUksS0FBSSxDQUFDLFNBQVMsQ0FBQzs7aUJBS2hDO2dCQUFBLENBQUM7Z0JBQ0YsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzVCLENBQUM7U0FDSixDQUFDLENBQUM7SUFDUCxDQUFDO0lBQ0QsMkJBQU8sR0FBUCxVQUFRLE9BQVk7UUFDaEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakMsQ0FBQzs7SUFDRCw4QkFBVSxHQUFWLFVBQVcsT0FBWTtRQUNuQixNQUFNO0lBQ1YsQ0FBQzs7SUFDRCw2QkFBUyxHQUFUO0lBRUEsQ0FBQzs7SUFDTCxnQkFBQztBQUFELENBNUJBLEFBNEJDLENBNUI4Qix5QkFBSSxHQTRCbEM7QUE1QlksaUJBQVMsWUE0QnJCLENBQUE7QUFBQSxDQUFDO0FBRUYsSUFBSSxNQUFNLEdBQUcsSUFBSSxTQUFTLENBQ3RCLElBQUkseUJBQUksQ0FBQztJQUNMLFlBQVksRUFBQyxjQUFXLENBQUM7Q0FDNUIsQ0FBQyxDQUNMLENBQUMiLCJmaWxlIjoidGFza2J1ZmZlci5jbGFzc2VzLnRhc2tjaGFpbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuL3R5cGluZ3MvbWFpbi5kLnRzXCIgLz5cbmltcG9ydCAqIGFzIHBsdWdpbnMgZnJvbSBcIi4vdGFza2J1ZmZlci5wbHVnaW5zXCI7XG5pbXBvcnQge1Rhc2t9IGZyb20gXCIuL3Rhc2tidWZmZXIuY2xhc3Nlc1wiO1xuaW1wb3J0IGhlbHBlcnMgPSByZXF1aXJlKFwiLi90YXNrYnVmZmVyLmNsYXNzZXMuaGVscGVyc1wiKTtcblxuZXhwb3J0IGNsYXNzIFRhc2tjaGFpbiBleHRlbmRzIFRhc2sge1xuICAgIHRhc2tBcnJheTpUYXNrW107XG4gICAgXG4gICAgY29uc3RydWN0b3IodGFza0FycmF5QXJnOlRhc2tbXXxUYXNrKXtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgdGFza0Z1bmN0aW9uOiAoKSA9PiB7IC8vIHRoaXMgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBleGVjdXRlZCB3aGVuIFRhc2tDaGFpbiBpcyB0cmlnZ2VyZWRcbiAgICAgICAgICAgICAgICBpZih0aGlzLnRhc2tBcnJheS5sZW5ndGggPSAwKSByZXR1cm47IC8vbWFrZSBzdXJlIHRoZXJlIGlzIGFjdHVhbGx5IGEgVGFzayBhdmFpbGFibGUgdG8gZXhlY3V0ZVxuICAgICAgICAgICAgICAgIGxldCBzdGFydERlZmVycmVkID0gcGx1Z2lucy5RLmRlZmVyKCk7IC8vIHRoaXMgaXMgdGhlIHN0YXJ0aW5nIERlZmVycmVkIG9iamVjdCBcbiAgICAgICAgICAgICAgICBsZXQgcHJvbWlzZVBvaW50ZXIgPSBzdGFydERlZmVycmVkLnByb21pc2U7XG4gICAgICAgICAgICAgICAgZm9yKGxldCBrZXlBcmcgaW4gdGhpcy50YXNrQXJyYXkpe1xuICAgICAgICAgICAgICAgICAgICBwcm9taXNlUG9pbnRlci50aGVuKGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlUG9pbnRlciA9IHRoaXMudGFza0FycmF5W2tleUFyZ10udHJpZ2dlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2VQb2ludGVyO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgc3RhcnREZWZlcnJlZC5yZXNvbHZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhZGRUYXNrKHRhc2tBcmc6VGFzayl7XG4gICAgICAgIHRoaXMudGFza0FycmF5LnB1c2godGFza0FyZyk7XG4gICAgfTtcbiAgICByZW1vdmVUYXNrKHRhc2tBcmc6VGFzayl7XG4gICAgICAgIC8vVE9ET1xuICAgIH07XG4gICAgc2hpZnRUYXNrKCl7XG4gICAgICAgIFxuICAgIH07XG59O1xuXG5sZXQgbXlUYXNrID0gbmV3IFRhc2tjaGFpbihcbiAgICBuZXcgVGFzayh7XG4gICAgICAgIHRhc2tGdW5jdGlvbjpmdW5jdGlvbigpe31cbiAgICB9KVxuKTsiXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza2J1ZmZlci5jbGFzc2VzLnRhc2tjaGFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3Rhc2tidWZmZXIuY2xhc3Nlcy50YXNrY2hhaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE1BQVksT0FBTyxXQUFNLHNCQUFzQixDQUFDLENBQUE7QUFDaEQsMENBQW1CLDJCQUEyQixDQUFDLENBQUE7QUFDL0MsTUFBTyxPQUFPLFdBQVcsOEJBQThCLENBQUMsQ0FBQztBQUV6RCx3QkFBK0IsOEJBQUk7SUFHL0IsWUFBWSxVQUlYO1FBQ0csSUFBSSxPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQzlCO1lBQ0ksSUFBSSxFQUFDLG1CQUFtQjtZQUN4QixHQUFHLEVBQUMsS0FBSztTQUNaLEVBQ0QsVUFBVSxFQUNWO1lBQ0ksWUFBWSxFQUFFO2dCQUNWLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyx3Q0FBd0M7Z0JBQ3RFLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQztnQkFDcEIsSUFBSSxZQUFZLEdBQUc7b0JBQ2YsRUFBRSxDQUFBLENBQUMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxDQUFBLENBQUM7d0JBQ2xELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDdEYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLEVBQUU7NkJBQ2hDLElBQUksQ0FBQzs0QkFDRixPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDOzRCQUN2RCxXQUFXLEVBQUUsQ0FBQzs0QkFDZCxZQUFZLEVBQUUsQ0FBQzt3QkFDbkIsQ0FBQyxDQUFDLENBQUM7b0JBQ1gsQ0FBQztvQkFBQyxJQUFJLENBQUMsQ0FBQzt3QkFDSixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBSSwyQkFBMkIsQ0FBQyxDQUFDO3dCQUNqRixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ25CLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDO2dCQUNGLFlBQVksRUFBRSxDQUFDO2dCQUNmLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQ3hCLENBQUM7U0FDSixDQUNKLENBQUM7UUFDRixNQUFNLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBQyxNQUFNLENBQUMsQ0FBQztRQUNyRSxFQUFFLENBQUEsQ0FBQyxVQUFVLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxDQUFBLENBQUM7WUFDeEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM1QixDQUFDO1FBQUEsQ0FBQztJQUNOLENBQUM7SUFDRCxPQUFPLENBQUMsT0FBWTtRQUNoQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqQyxDQUFDOztJQUNELFVBQVUsQ0FBQyxPQUFZO1FBQ25CLE1BQU07SUFDVixDQUFDOztJQUNELFNBQVM7SUFFVCxDQUFDOztJQUNELE9BQU87UUFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQyxDQUFDO1FBQ2pELE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7QUFDTCxDQUFDO0FBekRZLGlCQUFTLFlBeURyQixDQUFBO0FBQUEsQ0FBQyJ9

View File

@ -0,0 +1,7 @@
import { Task } from "./taskbuffer.classes.task";
export declare class Taskparallel extends Task {
taskArray: Task[];
constructor(optionsArg: {
taskArray: Task[];
});
}

23
dist/taskbuffer.classes.taskparallel.js vendored Normal file
View File

@ -0,0 +1,23 @@
"use strict";
const plugins = require("./taskbuffer.plugins");
const taskbuffer_classes_task_1 = require("./taskbuffer.classes.task");
class Taskparallel extends taskbuffer_classes_task_1.Task {
constructor(optionsArg) {
let options = plugins.lodash.merge(optionsArg, {
taskFunction: () => {
let done = plugins.Q.defer();
let promiseArray = []; // stores promises of all tasks, since they run in parallel
this.taskArray.forEach(function (taskArg) {
promiseArray.push(taskArg.trigger());
});
plugins.Q.all(promiseArray)
.then(done.resolve);
return done.promise;
}
});
super(options);
this.taskArray = optionsArg.taskArray;
}
}
exports.Taskparallel = Taskparallel;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza2J1ZmZlci5jbGFzc2VzLnRhc2twYXJhbGxlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3Rhc2tidWZmZXIuY2xhc3Nlcy50YXNrcGFyYWxsZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE1BQVksT0FBTyxXQUFNLHNCQUN6QixDQUFDLENBRDhDO0FBRS9DLDBDQUFxQiwyQkFFckIsQ0FBQyxDQUYrQztBQUVoRCwyQkFBa0MsOEJBQUk7SUFFbEMsWUFBWSxVQUVYO1FBQ0csSUFBSSxPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQzlCLFVBQVUsRUFDVjtZQUNJLFlBQVksRUFBRTtnQkFDVixJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUM3QixJQUFJLFlBQVksR0FBc0IsRUFBRSxDQUFDLENBQUMsMkRBQTJEO2dCQUNyRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxVQUFVLE9BQU87b0JBQ3BDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ3pDLENBQUMsQ0FBQyxDQUFBO2dCQUNGLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQztxQkFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDeEIsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDeEIsQ0FBQztTQUNKLENBQ0osQ0FBQztRQUNGLE1BQU0sT0FBTyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUM7SUFDMUMsQ0FBQztBQUNMLENBQUM7QUF2Qlksb0JBQVksZUF1QnhCLENBQUEifQ==

View File

@ -0,0 +1,2 @@
export declare class Taskspace {
}

5
dist/taskbuffer.classes.taskspace.js vendored Normal file
View File

@ -0,0 +1,5 @@
"use strict";
class Taskspace {
}
exports.Taskspace = Taskspace;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza2J1ZmZlci5jbGFzc2VzLnRhc2tzcGFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3Rhc2tidWZmZXIuY2xhc3Nlcy50YXNrc3BhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUdBO0FBRUEsQ0FBQztBQUZZLGlCQUFTLFlBRXJCLENBQUEifQ==

View File

@ -1,5 +1,5 @@
declare var plugins: {
beautylog: any;
Q: any;
};
export = plugins;
import "typings-global";
export import beautylog = require("beautylog");
export import Q = require("q");
export import lodash = require("lodash");
export import rxjs = require("rxjs");

View File

@ -1,9 +1,7 @@
"use strict";
/// <reference path="./typings/main.d.ts" />
var plugins = {
beautylog: require("beautylog"),
Q: require("q")
};
module.exports = plugins;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRhc2tidWZmZXIucGx1Z2lucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsNENBQTRDO0FBQzVDLElBQUksT0FBTyxHQUFHO0lBQ1YsU0FBUyxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUM7SUFDL0IsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUM7Q0FDbEIsQ0FBQztBQUNGLGlCQUFTLE9BQU8sQ0FBQyIsImZpbGUiOiJ0YXNrYnVmZmVyLnBsdWdpbnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi90eXBpbmdzL21haW4uZC50c1wiIC8+XG52YXIgcGx1Z2lucyA9IHtcbiAgICBiZWF1dHlsb2c6IHJlcXVpcmUoXCJiZWF1dHlsb2dcIiksXG4gICAgUTogcmVxdWlyZShcInFcIilcbn07XG5leHBvcnQgPSBwbHVnaW5zO1xuIl19
require("typings-global");
exports.beautylog = require("beautylog");
exports.Q = require("q");
exports.lodash = require("lodash");
exports.rxjs = require("rxjs");
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza2J1ZmZlci5wbHVnaW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvdGFza2J1ZmZlci5wbHVnaW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxRQUFPLGdCQUNQLENBQUMsQ0FEc0I7QUFDVCxpQkFBUyxXQUFXLFdBQVcsQ0FBQyxDQUFDO0FBQ2pDLFNBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztBQUNqQixjQUFNLFdBQVUsUUFBUSxDQUFDLENBQUM7QUFDMUIsWUFBSSxXQUFXLE1BQU0sQ0FBQyxDQUFDIn0=

5
npmextra.json Normal file
View File

@ -0,0 +1,5 @@
{
"npmts":{
"mode":"default"
}
}

View File

@ -1,4 +0,0 @@
{
"mode":"default",
"coveralls":true
}

View File

@ -1,14 +1,15 @@
{
"name": "taskbuffer",
"version": "0.0.5",
"description": "manage triggers and execution of tasks with promises",
"version": "1.0.2",
"description": "flexible task management. TypeScript ready!",
"main": "dist/index.js",
"typings": "dist/index.d.ts",
"scripts": {
"test": "(npmts)"
},
"repository": {
"type": "git",
"url": "git+https://github.com/pushrocks/taskbuffer.git"
"url": "git+https://gitlab.com/pushrocks/taskbuffer.git"
},
"keywords": [
"gulp",
@ -19,17 +20,21 @@
"author": "Lossless GmbH",
"license": "MIT",
"bugs": {
"url": "https://github.com/pushrocks/taskbuffer/issues"
"url": "https://gitlab.com/pushrocks/taskbuffer/issues"
},
"homepage": "https://github.com/pushrocks/taskbuffer#readme",
"homepage": "https://gitlab.com/pushrocks/taskbuffer#readme",
"dependencies": {
"beautylog": "^4.1.6",
"projectinfo": "1.0.1",
"@types/lodash": "^0.0.28",
"@types/q": "^0.0.27",
"beautylog": "^5.0.18",
"lodash": "^4.14.1",
"q": "^1.4.1",
"rx": "^4.1.0"
"rxjs": "^5.0.0-beta.10",
"typings-global": "^1.0.6"
},
"devDependencies": {
"should": "^8.3.1",
"npmts": "^5.1.5"
"npmts-g": "^5.2.8",
"should": "^10.0.0",
"typings-test": "^1.0.1"
}
}

4
test/test.d.ts vendored
View File

@ -1,3 +1 @@
declare var taskbuffer: any;
declare var classes: any;
declare var should: any;
import "typings-test";

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
{"version":3,"file":"test.js","sourceRoot":"","sources":["test.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,IAAI,UAAU,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;AAC1C,IAAI,OAAO,GAAG,OAAO,CAAC,4BAA4B,CAAC,CAAC;AACpD,IAAI,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC/B,QAAQ,CAAC,YAAY,EAAC;IAClB,QAAQ,CAAC,SAAS,EAAC;QACf,IAAI,QAAQ,CAAC;QACb,EAAE,CAAC,0CAA0C,EAAC;YAC1C,QAAQ,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAC;YACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,uBAAuB,EAAC;YACvB,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA,CAAC;gBAChB,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;YACjD,CAAC;QACL,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,sDAAsD,EAAC;YACtD,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC3C,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;QACvC,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}

View File

@ -1,25 +1,130 @@
/// <reference path="../ts/typings/main.d.ts" />
var taskbuffer = require("../dist/index");
var classes = require("../dist/taskbuffer.classes");
var should = require("should");
describe("taskbuffer",function(){
describe(".task()",function(){
var testTask;
it("should return a new task to var testTask",function(){
testTask = taskbuffer.task();
});
import "typings-test";
import taskbuffer = require("../dist/index");
let should = require("should");
import q = require("q")
it("testTask should be instance of Task",function(){
testTask.should.be.instanceof(classes.Task);
// setup some testData to work with
let testTask:taskbuffer.Task;
let testTaskFunction = function(){
let done = q.defer();
console.log("main function executed!")
done.resolve();
return done.promise;
}
let testPreTask = new taskbuffer.Task({
taskFunction:function(){
let done = q.defer();
console.log("preTask executed");
done.resolve();
return done.promise;
},
preTask:testTask
});
describe("taskbuffer",function(){
describe(".Task",function(){
it("new Task() should return a new task",function(){
testTask = new taskbuffer.Task({taskFunction:testTaskFunction,preTask:testPreTask});
});
it("testTask should be and instance of Task",function(){
testTask.should.be.instanceof(taskbuffer.Task);
});
it("testTask.idle is true",function(){
if (!testTask.idle){
throw new Error("testTask.idle is not true");
}
});
it("testTask.running is type boolean and initially false",function(){
testTask.running.should.be.type("boolean");
testTask.running.should.be.false();
});
it("testTask.trigger() should return Promise",function(){
testTask.trigger().should.be.Promise();
});
it("testTask.trigger() returned Promise should be fullfilled",function(done){
testTask.trigger()
.then(done);
});
it("should run a task without pre and afterTask",function(done){
let localTestTask = new taskbuffer.Task({taskFunction:testTaskFunction});
localTestTask.trigger().then(done);
});
});
describe("Taskchain",function(){
let testTaskchain;
let testTaskArray = [
new taskbuffer.Task({
name:"task1",
taskFunction:function(){
let done = q.defer();
setTimeout(done.resolve,2000);
return done.promise;
}
}),
new taskbuffer.Task({
name:"task2",
taskFunction: function(){
let done = q.defer();
setTimeout(done.resolve,2000);
return done.promise;
}
}),
];
it("should run tasks in sequence",function(done){
this.timeout(5000);
testTaskchain = new taskbuffer.Taskchain({
name:"Taskchain1",
taskArray:testTaskArray
});
testTaskchain.trigger().then(done);
});
});
describe("taskparallel",function(){
let task1 = new taskbuffer.Task({
name:"Task 1",
taskFunction: () => {
let done = q.defer();
console.log("Task1 started");
setTimeout(() => {
console.log("Task1 executed");
done.resolve();
},5000)
return done.promise;
}
});
let task2 = new taskbuffer.Task({
name:"Task 1",
taskFunction: () => {
let done = q.defer();
console.log("Task2 started");
setTimeout(() => {
console.log("Task2 executed");
done.resolve();
},5000)
return done.promise;
}
});
let task3 = new taskbuffer.Task({
name:"Task 3",
taskFunction: () => {
let done = q.defer();
console.log("Task3 started");
setTimeout(() => {
console.log("Task3 executed");
done.resolve();
},5000)
return done.promise;
}
});
it("should run in Parallel",function(done){
this.timeout("7000");
let testTaskparallel = new taskbuffer.Taskparallel({
taskArray:[task1,task2,task3]
});
testTaskparallel.trigger().then(() => {
done();
});
})
})
});

View File

@ -1,5 +1,7 @@
/// <reference path="./typings/main.d.ts" />
export * from "./taskbuffer.classes";
export {Task,ITaskFunction} from "./taskbuffer.classes.task";
export {Taskchain} from "./taskbuffer.classes.taskchain";
export {Taskparallel} from "./taskbuffer.classes.taskparallel";
export {Taskspace} from "./taskbuffer.classes.taskspace";
// import for naming only
import "./taskbuffer.classes.helpers"

View File

@ -1,8 +1,7 @@
/// <reference path="./typings/main.d.ts" />
import plugins = require("./taskbuffer.plugins");
import {Task} from "./taskbuffer.classes"
import {Task,ITaskFunction} from "./taskbuffer.classes.task";
export let emptyTaskFunction = function(){
export let emptyTaskFunction:ITaskFunction = function(){
let done = plugins.Q.defer();
done.resolve();
return done.promise;
@ -20,12 +19,20 @@ export let isTask = function(taskArg):boolean{
};
export let isTaskTouched = (task:Task, touchedTasksArray:Task[]):boolean => {
return false;
export let isTaskTouched = (taskArg:Task, touchedTasksArray:Task[]):boolean => {
let result = false;
for (let keyArg in touchedTasksArray){
if(taskArg === touchedTasksArray[keyArg]){
result = true;
}
}
return result;
}
export let runTask = function(taskArg:Task,optionsArg?:{touchedTasksArray:Task[]}){
export let runTask = function(taskArg:Task,optionsArg:{touchedTasksArray:Task[]} = {touchedTasksArray:[]}){
let done = plugins.Q.defer();
taskArg.running = true;
done.promise.then(function(){taskArg.running = false});
let localDeferred = plugins.Q.defer();
let touchedTasksArray:Task[];
if(optionsArg.touchedTasksArray){
@ -39,7 +46,7 @@ export let runTask = function(taskArg:Task,optionsArg?:{touchedTasksArray:Task[]
if(taskArg.preTask && !isTaskTouched(taskArg.preTask,touchedTasksArray)){
return runTask(taskArg.preTask,{touchedTasksArray:touchedTasksArray})
} else {
let done2 = plugins.Q.resolve();
let done2 = plugins.Q.defer();
done2.resolve();
return done2.promise;
}
@ -51,18 +58,27 @@ export let runTask = function(taskArg:Task,optionsArg?:{touchedTasksArray:Task[]
if(taskArg.afterTask && !isTaskTouched(taskArg.afterTask,touchedTasksArray)){
return runTask(taskArg.afterTask,{touchedTasksArray:touchedTasksArray})
} else {
let done2 = plugins.Q.resolve();
let done2 = plugins.Q.defer();
done2.resolve();
return done2.promise;
}
})
.then(() => {
done.resolve();
})
});
localDeferred.resolve();
return done.promise;
};
export let runBufferedTask = (taskArg:Task) => {
}
let recursiveBufferRunner = () => {
if(taskArg.bufferCounter > 0){
taskArg.runningBuffered = true;
taskArg.bufferCounter--;
runTask(taskArg)
.then(recursiveBufferRunner);
} else {
taskArg.runningBuffered = false;
}
}
};

View File

@ -1,46 +1,78 @@
/// <reference path="./typings/main.d.ts" />
import * as plugins from "./taskbuffer.plugins"
import * as helpers from "./taskbuffer.classes.helpers"
export interface ITaskFunction {
():PromiseLike<any>;
}
export class Task {
name:string;
task:any;
idle:boolean;
running:boolean;
buffered:boolean;
running:boolean = false;
runningBuffered:boolean = false;
idle:boolean = true;
buffered:boolean = false;
bufferCounter:number;
bufferMax:number;
private _counterTriggerAbsolute:number;
bufferMax:number = 1;
private _counterTriggerAbsolute:number = 0;
private _state:string;
preTask:Task;
afterTask:Task;
constructor(optionsArg:{taskFunction:any,preTask?:Task,afterTask?:Task, buffered?:boolean, bufferMax?:number}){
if (!optionsArg){optionsArg = {taskFunction:function(){}}}
constructor(optionsArg:{
taskFunction:ITaskFunction,
preTask?:Task,
afterTask?:Task,
buffered?:boolean,
bufferMax?:number,
name?:string
}){
var options = optionsArg;
this.task = optionsArg.taskFunction;
this.preTask = options.preTask;
this.afterTask = options.afterTask;
this.idle = true;
this.running = false;
this.idle = !this.running && !this.runningBuffered;
this.buffered = options.buffered;
this.bufferMax = options.bufferMax;
this.name = options.name;
}
/**
* trigger the task. Will trigger buffered if this.buffered is true
*/
trigger(){
let done = plugins.Q.defer();
if(this.buffered) {this.triggerBuffered()}
else{this.triggerUnBuffered()};
if(this.buffered) {
this.triggerBuffered()
.then(done.resolve);
}
else {
this.triggerUnBuffered()
.then(done.resolve);
};
return done.promise;
};
/**
* trigger task unbuffered.
*/
triggerUnBuffered(){
return helpers.runTask(this);
}
/**
* trigger task buffered.
*/
triggerBuffered(){
var done = plugins.Q.defer();
if(!(this.bufferCounter >= this.bufferMax)){
this.bufferCounter++
}
helpers.runBufferedTask(this);
};
if(!this.runningBuffered){
helpers.runBufferedTask(this);
};
return done.promise;
}
@ -51,7 +83,7 @@ export class Task {
if (stateArg == "locked"){
this._state = "locked";
} else {
plugins.beautylog.error("state type" );
plugins.beautylog.error("state type " + stateArg.blue + " could not be set");
}
}
}

View File

@ -1,26 +1,50 @@
/// <reference path="./typings/main.d.ts" />
import * as plugins from "./taskbuffer.plugins";
import {Task} from "./taskbuffer.classes";
import {Task} from "./taskbuffer.classes.task";
import helpers = require("./taskbuffer.classes.helpers");
export class Taskchain extends Task {
taskArray:Task[];
constructor(taskArrayArg:Task[]|Task){
super({
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();
private _oraObject:plugins.beautylog.Ora;
constructor(optionsArg:{
name?:string,
log?:boolean,
taskArray:Task[]
}){
let options = plugins.lodash.merge(
{
name:"unnamed Taskchain",
log:false
},
optionsArg,
{
taskFunction: () => { // this is the function that gets executed when TaskChain is triggered
let done = plugins.Q.defer(); // this is the starting Deferred object
let taskCounter = 0;
let iterateTasks = () => {
if(typeof this.taskArray[taskCounter] != "undefined"){
this._oraObject.text(this.name + " running: Task" + this.taskArray[taskCounter].name);
this.taskArray[taskCounter].trigger()
.then(()=>{
plugins.beautylog.ok(this.taskArray[taskCounter].name);
taskCounter++;
iterateTasks();
});
} else {
this._oraObject.endOk("Taskchain \"" + this.name + "\" completed successfully");
done.resolve();
}
};
iterateTasks();
return done.promise;
}
}
});
);
super(options);
this.taskArray = optionsArg.taskArray;
this._oraObject = new plugins.beautylog.Ora("Taskchain idle","blue");
if(optionsArg.log === true){
this._oraObject.start();
};
}
addTask(taskArg:Task){
this.taskArray.push(taskArg);
@ -31,10 +55,8 @@ export class Taskchain extends Task {
shiftTask(){
};
};
let myTask = new Taskchain(
new Task({
taskFunction:function(){}
})
);
trigger(){
this._oraObject.start(this.name + " running...");
return helpers.runTask(this);
}
};

View File

@ -0,0 +1,29 @@
import * as plugins from "./taskbuffer.plugins"
import * as helpers from "./taskbuffer.classes.helpers"
import { Task } from "./taskbuffer.classes.task"
export class Taskparallel extends Task {
taskArray: Task[];
constructor(optionsArg: {
taskArray: Task[]
}){
let options = plugins.lodash.merge(
optionsArg,
{
taskFunction: () => {
let done = plugins.Q.defer();
let promiseArray:PromiseLike<any>[] = []; // stores promises of all tasks, since they run in parallel
this.taskArray.forEach(function (taskArg) {
promiseArray.push(taskArg.trigger());
})
plugins.Q.all(promiseArray)
.then(done.resolve);
return done.promise;
}
}
);
super(options);
this.taskArray = optionsArg.taskArray;
}
}

View File

@ -0,0 +1,6 @@
import * as plugins from "./taskbuffer.plugins"
import * as helpers from "./taskbuffer.classes.helpers"
export class Taskspace {
}

View File

@ -1,2 +0,0 @@
export * from "./taskbuffer.classes.task"
export * from "./taskbuffer.classes.taskchain"

View File

@ -1,6 +1,5 @@
/// <reference path="./typings/main.d.ts" />
var plugins = {
beautylog: require("beautylog"),
Q: require("q")
};
export = plugins;
import "typings-global"
export import beautylog = require("beautylog");
export import Q = require("q");
export import lodash= require("lodash");
export import rxjs = require("rxjs");

View File

@ -1,7 +0,0 @@
{
"ambientDependencies": {
"node": "github:DefinitelyTyped/DefinitelyTyped/node/node.d.ts",
"mocha": "github:Bartvds/tsd-deftools/typings/DefinitelyTyped/mocha/mocha.d.ts",
"colors": "github:DefinitelyTyped/DefinitelyTyped/colors/colors.d.ts"
}
}