Compare commits
34 Commits
Author | SHA1 | Date | |
---|---|---|---|
670bf5b124 | |||
fab863c66c | |||
402e2b982f | |||
1d0a85e6ca | |||
7ded7b036e | |||
03020eacbc | |||
dc95885646 | |||
11cdaad226 | |||
a1ad463140 | |||
76c57451b3 | |||
5dca9a9460 | |||
d30fb551f9 | |||
7a60f30f0b | |||
9e175245ed | |||
4bc5617240 | |||
39c41a817e | |||
8823e2b01d | |||
24e96926e3 | |||
8a414b9a7d | |||
a347ded65a | |||
3ce4b200db | |||
cd6407f189 | |||
ca2afbd8c7 | |||
6640d5fb2f | |||
7a3aed275f | |||
19beb95e20 | |||
8944ae2462 | |||
b1eeb3563e | |||
1714f552ac | |||
454a999a42 | |||
1f3f2ae92f | |||
9014eec9f6 | |||
ee56b6f655 | |||
55ddbece13 |
7
.gitignore
vendored
7
.gitignore
vendored
@ -1,7 +1,4 @@
|
||||
.idea/
|
||||
coverage/
|
||||
docs/
|
||||
ts/*.js
|
||||
ts/*.js.map
|
||||
ts/typings/
|
||||
node_modules
|
||||
pages/
|
||||
.nogit/
|
||||
|
36
.gitlab-ci.yml
Normal file
36
.gitlab-ci.yml
Normal 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
|
@ -1,5 +1,5 @@
|
||||
.idea/
|
||||
docs/
|
||||
coverage/
|
||||
ts/
|
||||
node_modules/
|
||||
pages/
|
||||
|
11
.travis.yml
11
.travis.yml
@ -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
|
32
README.md
32
README.md
@ -1,5 +1,5 @@
|
||||
# taskbuffer
|
||||
Flexible task organization for gulp.
|
||||
flexible task management. TypeScript ready!
|
||||
|
||||
## Status
|
||||
[](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
5
dist/index.d.ts
vendored
@ -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
16
dist/index.js
vendored
@ -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=
|
2
dist/taskbuffer.classes.d.ts
vendored
2
dist/taskbuffer.classes.d.ts
vendored
@ -1,2 +0,0 @@
|
||||
export * from "./taskbuffer.classes.task";
|
||||
export * from "./taskbuffer.classes.taskchain";
|
39
dist/taskbuffer.classes.helpers.d.ts
vendored
39
dist/taskbuffer.classes.helpers.d.ts
vendored
@ -1,8 +1,33 @@
|
||||
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";
|
||||
import { Promise } from "q";
|
||||
export { Promise } from "q";
|
||||
export declare let emptyTaskFunction: ITaskFunction;
|
||||
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;
|
||||
export declare let isTaskTouched: (taskArg: Task, touchedTasksArray: Task[]) => boolean;
|
||||
export declare let runTask: (taskArg: Task, optionsArg: {
|
||||
x?: any;
|
||||
touchedTasksArray?: Task[];
|
||||
}) => plugins.Q.Promise<{}>;
|
||||
export interface cycleObject {
|
||||
cycleCounter: number;
|
||||
deferred: plugins.Q.Deferred<any>;
|
||||
}
|
||||
export declare class CycleCounter {
|
||||
task: Task;
|
||||
cycleObjectArray: cycleObject[];
|
||||
constructor(taskArg: Task);
|
||||
getPromiseForCycle(cycleCountArg: number): plugins.Q.Promise<{}>;
|
||||
informOfCycle(x: any): void;
|
||||
}
|
||||
export declare class BufferRunner {
|
||||
task: Task;
|
||||
bufferCounter: number;
|
||||
bufferMax: number;
|
||||
running: boolean;
|
||||
constructor(taskArg: Task);
|
||||
private _run(x);
|
||||
setBufferMax(bufferMaxArg: number): void;
|
||||
trigger(x: any): Promise<any>;
|
||||
}
|
||||
|
154
dist/taskbuffer.classes.helpers.js
vendored
154
dist/taskbuffer.classes.helpers.js
vendored
File diff suppressed because one or more lines are too long
8
dist/taskbuffer.classes.js
vendored
8
dist/taskbuffer.classes.js
vendored
@ -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
|
39
dist/taskbuffer.classes.task.d.ts
vendored
39
dist/taskbuffer.classes.task.d.ts
vendored
@ -1,23 +1,40 @@
|
||||
/// <reference types="q" />
|
||||
import * as helpers from "./taskbuffer.classes.helpers";
|
||||
import { Promise } from "q";
|
||||
export { Promise } from "q";
|
||||
export interface ITaskFunction {
|
||||
(x?: any): PromiseLike<any>;
|
||||
}
|
||||
export declare class Task {
|
||||
task: any;
|
||||
idle: boolean;
|
||||
running: boolean;
|
||||
name: string;
|
||||
taskFunction: ITaskFunction;
|
||||
buffered: boolean;
|
||||
bufferCounter: number;
|
||||
bufferMax: number;
|
||||
private _counterTriggerAbsolute;
|
||||
private _state;
|
||||
preTask: Task;
|
||||
afterTask: Task;
|
||||
running: boolean;
|
||||
bufferRunner: helpers.BufferRunner;
|
||||
cycleCounter: helpers.CycleCounter;
|
||||
idle: boolean;
|
||||
private _state;
|
||||
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(x?: any): Promise<any>;
|
||||
/**
|
||||
* trigger task unbuffered.
|
||||
*/
|
||||
triggerUnBuffered(x?: any): Promise<any>;
|
||||
/**
|
||||
* trigger task buffered.
|
||||
*/
|
||||
triggerBuffered(x?: any): Promise<any>;
|
||||
state: string;
|
||||
}
|
||||
|
93
dist/taskbuffer.classes.task.js
vendored
93
dist/taskbuffer.classes.task.js
vendored
@ -1,60 +1,61 @@
|
||||
"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");
|
||||
var q_1 = require("q");
|
||||
exports.Promise = q_1.Promise;
|
||||
class Task {
|
||||
constructor(optionsArg) {
|
||||
// initialize by default
|
||||
this.running = false;
|
||||
this.bufferRunner = new helpers.BufferRunner(this);
|
||||
this.cycleCounter = new helpers.CycleCounter(this);
|
||||
this.idle = true;
|
||||
this._state = "ready";
|
||||
var options = optionsArg;
|
||||
this.task = optionsArg.taskFunction;
|
||||
this.taskFunction = optionsArg.taskFunction;
|
||||
this.preTask = options.preTask;
|
||||
this.afterTask = options.afterTask;
|
||||
this.idle = true;
|
||||
this.running = false;
|
||||
this.idle = !this.running;
|
||||
this.buffered = options.buffered;
|
||||
this.bufferMax = options.bufferMax;
|
||||
this.bufferRunner.setBufferMax(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(x) {
|
||||
if (this.buffered) {
|
||||
this.triggerBuffered();
|
||||
return this.triggerBuffered(x);
|
||||
}
|
||||
else {
|
||||
this.triggerUnBuffered();
|
||||
return this.triggerUnBuffered(x);
|
||||
}
|
||||
;
|
||||
};
|
||||
}
|
||||
;
|
||||
Task.prototype.triggerUnBuffered = function () {
|
||||
return helpers.runTask(this);
|
||||
};
|
||||
Task.prototype.triggerBuffered = function () {
|
||||
var done = plugins.Q.defer();
|
||||
if (!(this.bufferCounter >= this.bufferMax)) {
|
||||
this.bufferCounter++;
|
||||
/**
|
||||
* trigger task unbuffered.
|
||||
*/
|
||||
triggerUnBuffered(x) {
|
||||
return helpers.runTask(this, { x: x });
|
||||
}
|
||||
/**
|
||||
* trigger task buffered.
|
||||
*/
|
||||
triggerBuffered(x) {
|
||||
return this.bufferRunner.trigger(x);
|
||||
}
|
||||
get state() {
|
||||
return this._state;
|
||||
}
|
||||
set state(stateArg) {
|
||||
if (stateArg == "locked") {
|
||||
this._state = "locked";
|
||||
}
|
||||
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;
|
||||
}());
|
||||
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza2J1ZmZlci5jbGFzc2VzLnRhc2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy90YXNrYnVmZmVyLmNsYXNzZXMudGFzay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsTUFBWSxPQUFPLFdBQU0sc0JBQ3pCLENBQUMsQ0FEOEM7QUFDL0MsTUFBWSxPQUFPLFdBQU0sOEJBR3pCLENBQUMsQ0FIc0Q7QUFJdkQsa0JBQXNCLEdBQUcsQ0FBQztBQUFsQiw4QkFBa0I7QUFNMUI7SUFjSSxZQUFZLFVBT1g7UUFkRCx3QkFBd0I7UUFDeEIsWUFBTyxHQUFXLEtBQUssQ0FBQztRQUN4QixpQkFBWSxHQUFHLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QyxpQkFBWSxHQUFHLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QyxTQUFJLEdBQVcsSUFBSSxDQUFDO1FBQ1osV0FBTSxHQUFVLE9BQU8sQ0FBQztRQVU1QixJQUFJLE9BQU8sR0FBRyxVQUFVLENBQUM7UUFDekIsSUFBSSxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDO1FBQzVDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUMvQixJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDbkMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDN0IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsT0FBTyxDQUFDLENBQUU7UUFDTixFQUFFLENBQUEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNmLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ2xDLENBQUM7UUFDRCxJQUFJLENBQUMsQ0FBQztZQUNGLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckMsQ0FBQztRQUFBLENBQUM7SUFDTixDQUFDOztJQUVEOztPQUVHO0lBQ0gsaUJBQWlCLENBQUMsQ0FBRTtRQUNoQixNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxlQUFlLENBQUMsQ0FBRTtRQUNkLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ0wsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUNELElBQUksS0FBSyxDQUFDLFFBQWU7UUFDckIsRUFBRSxDQUFDLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxDQUFBLENBQUM7WUFDdEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUM7UUFDM0IsQ0FBQztRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ0osT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEdBQUcsbUJBQW1CLENBQUMsQ0FBQztRQUNqRixDQUFDO0lBQ0wsQ0FBQztBQUNMLENBQUM7QUFwRVksWUFBSSxPQW9FaEIsQ0FBQSJ9
|
11
dist/taskbuffer.classes.taskchain.d.ts
vendored
11
dist/taskbuffer.classes.taskchain.d.ts
vendored
@ -1,7 +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: {
|
||||
taskArray: Task[];
|
||||
name?: string;
|
||||
log?: boolean;
|
||||
buffered?: boolean;
|
||||
bufferMax?: number;
|
||||
});
|
||||
addTask(taskArg: Task): void;
|
||||
removeTask(taskArg: Task): void;
|
||||
shiftTask(): void;
|
||||
|
83
dist/taskbuffer.classes.taskchain.js
vendored
83
dist/taskbuffer.classes.taskchain.js
vendored
@ -1,53 +1,54 @@
|
||||
"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");
|
||||
class Taskchain extends taskbuffer_classes_task_1.Task {
|
||||
constructor(optionsArg) {
|
||||
let options = plugins.lodash.merge({
|
||||
name: "unnamed Taskchain",
|
||||
log: false
|
||||
}, optionsArg, {
|
||||
taskFunction: (x) => {
|
||||
let done = plugins.Q.defer(); // this is the starting Deferred object
|
||||
let taskCounter = 0; // counter for iterating async over the taskArray
|
||||
let iterateTasks = (x) => {
|
||||
if (typeof this.taskArray[taskCounter] != "undefined") {
|
||||
this._oraObject.text(this.name + " running: Task" + this.taskArray[taskCounter].name);
|
||||
this.taskArray[taskCounter].trigger(x)
|
||||
.then((x) => {
|
||||
plugins.beautylog.ok(this.taskArray[taskCounter].name);
|
||||
taskCounter++;
|
||||
iterateTasks(x);
|
||||
});
|
||||
}
|
||||
else {
|
||||
this._oraObject.endOk("Taskchain \"" + this.name + "\" completed successfully");
|
||||
done.resolve(x);
|
||||
}
|
||||
};
|
||||
for (var keyArg in _this.taskArray) {
|
||||
_loop_1(keyArg);
|
||||
}
|
||||
;
|
||||
startDeferred.resolve();
|
||||
iterateTasks(x);
|
||||
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));
|
||||
}
|
||||
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza2J1ZmZlci5jbGFzc2VzLnRhc2tjaGFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3Rhc2tidWZmZXIuY2xhc3Nlcy50YXNrY2hhaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE1BQVksT0FBTyxXQUFNLHNCQUFzQixDQUFDLENBQUE7QUFDaEQsMENBQW1CLDJCQUEyQixDQUFDLENBQUE7QUFHL0Msd0JBQStCLDhCQUFJO0lBRy9CLFlBQVksVUFNWDtRQUNHLElBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUM5QjtZQUNJLElBQUksRUFBQyxtQkFBbUI7WUFDeEIsR0FBRyxFQUFDLEtBQUs7U0FDWixFQUNELFVBQVUsRUFDVjtZQUNJLFlBQVksRUFBRSxDQUFDLENBQUs7Z0JBQ2hCLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyx3Q0FBd0M7Z0JBQ3RFLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLGlEQUFpRDtnQkFDdEUsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDO29CQUNqQixFQUFFLENBQUEsQ0FBQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksV0FBVyxDQUFDLENBQUEsQ0FBQzt3QkFDbEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUN0RixJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7NkJBQ2pDLElBQUksQ0FBQyxDQUFDLENBQUM7NEJBQ0osT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzs0QkFDdkQsV0FBVyxFQUFFLENBQUM7NEJBQ2QsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNwQixDQUFDLENBQUMsQ0FBQztvQkFDWCxDQUFDO29CQUFDLElBQUksQ0FBQyxDQUFDO3dCQUNKLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFJLDJCQUEyQixDQUFDLENBQUM7d0JBQ2pGLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3BCLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDO2dCQUNGLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDaEIsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDeEIsQ0FBQztTQUNKLENBQ0osQ0FBQztRQUNGLE1BQU0sT0FBTyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUM7UUFDdEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JFLEVBQUUsQ0FBQSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLENBQUEsQ0FBQztZQUN4QixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzVCLENBQUM7UUFBQSxDQUFDO0lBQ04sQ0FBQztJQUNELE9BQU8sQ0FBQyxPQUFZO1FBQ2hCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pDLENBQUM7O0lBQ0QsVUFBVSxDQUFDLE9BQVk7UUFDbkIsTUFBTTtJQUNWLENBQUM7O0lBQ0QsU0FBUztJQUVULENBQUM7O0FBQ0wsQ0FBQztBQXZEWSxpQkFBUyxZQXVEckIsQ0FBQTtBQUFBLENBQUMifQ==
|
7
dist/taskbuffer.classes.taskparallel.d.ts
vendored
Normal file
7
dist/taskbuffer.classes.taskparallel.d.ts
vendored
Normal 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
23
dist/taskbuffer.classes.taskparallel.js
vendored
Normal 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==
|
2
dist/taskbuffer.classes.taskspace.d.ts
vendored
Normal file
2
dist/taskbuffer.classes.taskspace.d.ts
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
export declare class Taskspace {
|
||||
}
|
5
dist/taskbuffer.classes.taskspace.js
vendored
Normal file
5
dist/taskbuffer.classes.taskspace.js
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
"use strict";
|
||||
class Taskspace {
|
||||
}
|
||||
exports.Taskspace = Taskspace;
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza2J1ZmZlci5jbGFzc2VzLnRhc2tzcGFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3Rhc2tidWZmZXIuY2xhc3Nlcy50YXNrc3BhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUdBO0FBRUEsQ0FBQztBQUZZLGlCQUFTLFlBRXJCLENBQUEifQ==
|
10
dist/taskbuffer.plugins.d.ts
vendored
10
dist/taskbuffer.plugins.d.ts
vendored
@ -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");
|
||||
|
14
dist/taskbuffer.plugins.js
vendored
14
dist/taskbuffer.plugins.js
vendored
@ -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
5
npmextra.json
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"npmts":{
|
||||
"mode":"default"
|
||||
}
|
||||
}
|
@ -1,4 +0,0 @@
|
||||
{
|
||||
"mode":"default",
|
||||
"coveralls":true
|
||||
}
|
25
package.json
25
package.json
@ -1,14 +1,15 @@
|
||||
{
|
||||
"name": "taskbuffer",
|
||||
"version": "0.0.5",
|
||||
"description": "manage triggers and execution of tasks with promises",
|
||||
"version": "1.0.8",
|
||||
"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": "4.x.x",
|
||||
"@types/q": "0.x.x",
|
||||
"beautylog": "^5.0.23",
|
||||
"lodash": "^4.15.0",
|
||||
"q": "^1.4.1",
|
||||
"rx": "^4.1.0"
|
||||
"rxjs": "^5.0.0-beta.11",
|
||||
"typings-global": "^1.0.14"
|
||||
},
|
||||
"devDependencies": {
|
||||
"should": "^8.3.1",
|
||||
"npmts": "^5.1.5"
|
||||
"npmts-g": "^5.2.8",
|
||||
"should": "^11.1.0",
|
||||
"typings-test": "^1.0.2"
|
||||
}
|
||||
}
|
||||
|
4
test/test.d.ts
vendored
4
test/test.d.ts
vendored
@ -1,3 +1 @@
|
||||
declare var taskbuffer: any;
|
||||
declare var classes: any;
|
||||
declare var should: any;
|
||||
import "typings-test";
|
||||
|
211
test/test.js
211
test/test.js
File diff suppressed because one or more lines are too long
@ -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"}
|
228
test/test.ts
228
test/test.ts
@ -1,25 +1,223 @@
|
||||
/// <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");
|
||||
import 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 testTaskFunctionTimeout = function () {
|
||||
let done = q.defer();
|
||||
console.log("main function started!");
|
||||
setTimeout(() => {
|
||||
console.log("main function ended!");
|
||||
done.resolve();
|
||||
},2000);
|
||||
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
|
||||
});
|
||||
|
||||
|
||||
// some more tasks to wirj with
|
||||
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;
|
||||
}
|
||||
});
|
||||
|
||||
// the actual tests
|
||||
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.idle is true",function(){
|
||||
if (!testTask.idle){
|
||||
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(){
|
||||
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);
|
||||
});
|
||||
|
||||
it("should run buffered", function (done) {
|
||||
this.timeout(10000);
|
||||
let localTestTask = new taskbuffer.Task({
|
||||
taskFunction: testTaskFunctionTimeout,
|
||||
buffered:true,
|
||||
bufferMax:2
|
||||
});
|
||||
localTestTask.trigger();
|
||||
localTestTask.trigger();
|
||||
localTestTask.trigger();
|
||||
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 () {
|
||||
it("should run in Parallel", function (done) {
|
||||
this.timeout("7000");
|
||||
let testTaskparallel = new taskbuffer.Taskparallel({
|
||||
taskArray: [task1, task2, task3]
|
||||
});
|
||||
testTaskparallel.trigger().then(() => {
|
||||
done();
|
||||
});
|
||||
})
|
||||
});
|
||||
describe("some flowtests",function(){
|
||||
let flowTask1 = new taskbuffer.Task({
|
||||
taskFunction: (x:number) => {
|
||||
let done = q.defer();
|
||||
console.log("flowTask1");
|
||||
console.log(x);
|
||||
done.resolve(x);
|
||||
return done.promise;
|
||||
}
|
||||
});
|
||||
|
||||
let flowTaskBuffered = new taskbuffer.Task({
|
||||
taskFunction: (x:number) => {
|
||||
let done = q.defer();
|
||||
console.log("flowTask1");
|
||||
console.log(x);
|
||||
done.resolve(x);
|
||||
return done.promise;
|
||||
},
|
||||
buffered:true,
|
||||
bufferMax: 1
|
||||
});
|
||||
|
||||
let flowTask2 = new taskbuffer.Task({
|
||||
taskFunction: (x:number) => {
|
||||
let done = q.defer();
|
||||
console.log("flowTask2");
|
||||
console.log(x);
|
||||
done.resolve(x);
|
||||
return done.promise;
|
||||
},
|
||||
preTask:flowTask1
|
||||
});
|
||||
let flowTask3 = new taskbuffer.Taskchain({
|
||||
taskArray:[flowTask1,flowTask2]
|
||||
});
|
||||
it("should let a value flow through a task",function(done){
|
||||
flowTask1.trigger(12).then((x) => {
|
||||
should.equal(x,12);
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
it("should let a values flow between tasks",function(done){
|
||||
flowTask2.trigger(12).then((x) => {
|
||||
should.equal(x,12);
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
it("should let a values flow between tasks when buffered",function(done){
|
||||
flowTaskBuffered.trigger(12).then((x) => {
|
||||
should.equal(x,12);
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
it("should let a values flow between tasks in Taskchain",function(done){
|
||||
flowTask3.trigger(12).then((x) => {
|
||||
should.equal(x,12);
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
})
|
||||
});
|
@ -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"
|
@ -1,18 +1,20 @@
|
||||
/// <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(){
|
||||
import {Promise} from "q";
|
||||
export {Promise} from "q";
|
||||
|
||||
export let emptyTaskFunction: ITaskFunction = function (x) {
|
||||
let done = plugins.Q.defer();
|
||||
done.resolve();
|
||||
return done.promise;
|
||||
};
|
||||
|
||||
export let isTask = function(taskArg):boolean{
|
||||
if(
|
||||
export let isTask = function (taskArg): boolean {
|
||||
if (
|
||||
taskArg instanceof Task
|
||||
&& typeof taskArg.task === "function"
|
||||
){
|
||||
) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
@ -20,49 +22,139 @@ 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: {x?, touchedTasksArray?: Task[] }) {
|
||||
let done = plugins.Q.defer();
|
||||
let localDeferred = plugins.Q.defer();
|
||||
let touchedTasksArray:Task[];
|
||||
if(optionsArg.touchedTasksArray){
|
||||
touchedTasksArray = optionsArg.touchedTasksArray;
|
||||
} else {
|
||||
touchedTasksArray = [];
|
||||
}
|
||||
|
||||
// set running params
|
||||
taskArg.running = true;
|
||||
done.promise.then(function () { taskArg.running = false });
|
||||
|
||||
// handle options
|
||||
let options = plugins.lodash.merge(
|
||||
{x:undefined,touchedTasksArray: []},
|
||||
optionsArg
|
||||
)
|
||||
let x = options.x;
|
||||
let touchedTasksArray: Task[] = options.touchedTasksArray;
|
||||
|
||||
touchedTasksArray.push(taskArg);
|
||||
|
||||
// run the task cascade
|
||||
let localDeferred = plugins.Q.defer();
|
||||
localDeferred.promise
|
||||
.then(() =>{
|
||||
if(taskArg.preTask && !isTaskTouched(taskArg.preTask,touchedTasksArray)){
|
||||
return runTask(taskArg.preTask,{touchedTasksArray:touchedTasksArray})
|
||||
.then(() => {
|
||||
if (taskArg.preTask && !isTaskTouched(taskArg.preTask, touchedTasksArray)) {
|
||||
return runTask(taskArg.preTask, {x:x, touchedTasksArray: touchedTasksArray })
|
||||
} else {
|
||||
let done2 = plugins.Q.resolve();
|
||||
done2.resolve();
|
||||
let done2 = plugins.Q.defer();
|
||||
done2.resolve(x);
|
||||
return done2.promise;
|
||||
}
|
||||
})
|
||||
.then(() => {
|
||||
return taskArg.task();
|
||||
.then(x => {
|
||||
return taskArg.taskFunction(x);
|
||||
})
|
||||
.then(() => {
|
||||
if(taskArg.afterTask && !isTaskTouched(taskArg.afterTask,touchedTasksArray)){
|
||||
return runTask(taskArg.afterTask,{touchedTasksArray:touchedTasksArray})
|
||||
.then(x => {
|
||||
if (taskArg.afterTask && !isTaskTouched(taskArg.afterTask, touchedTasksArray)) {
|
||||
return runTask(taskArg.afterTask, {x:x, touchedTasksArray: touchedTasksArray });
|
||||
} else {
|
||||
let done2 = plugins.Q.resolve();
|
||||
done2.resolve();
|
||||
let done2 = plugins.Q.defer();
|
||||
done2.resolve(x);
|
||||
return done2.promise;
|
||||
}
|
||||
})
|
||||
.then(() => {
|
||||
done.resolve();
|
||||
})
|
||||
|
||||
.then(x => {
|
||||
done.resolve(x);
|
||||
}).catch((err) => {
|
||||
console.log(err);
|
||||
});
|
||||
localDeferred.resolve();
|
||||
return done.promise;
|
||||
};
|
||||
|
||||
export let runBufferedTask = (taskArg:Task) => {
|
||||
|
||||
}
|
||||
|
||||
export interface cycleObject {
|
||||
cycleCounter:number,
|
||||
deferred:plugins.Q.Deferred<any>
|
||||
}
|
||||
|
||||
export class CycleCounter {
|
||||
task:Task;
|
||||
cycleObjectArray:cycleObject[] = [];
|
||||
constructor(taskArg:Task){
|
||||
this.task = taskArg;
|
||||
};
|
||||
getPromiseForCycle(cycleCountArg:number){
|
||||
let done = plugins.Q.defer();
|
||||
let cycleObject:cycleObject = {
|
||||
cycleCounter:cycleCountArg,
|
||||
deferred:done
|
||||
};
|
||||
this.cycleObjectArray.push(cycleObject);
|
||||
return done.promise;
|
||||
};
|
||||
informOfCycle(x){
|
||||
let newCycleObjectArray:cycleObject[] = [];
|
||||
this.cycleObjectArray.forEach(cycleObjectArg => {
|
||||
cycleObjectArg.cycleCounter--;
|
||||
if(cycleObjectArg.cycleCounter <= 0){
|
||||
cycleObjectArg.deferred.resolve(x);
|
||||
} else {
|
||||
newCycleObjectArray.push(cycleObjectArg);
|
||||
};
|
||||
});
|
||||
this.cycleObjectArray = newCycleObjectArray;
|
||||
}
|
||||
}
|
||||
|
||||
export class BufferRunner {
|
||||
task:Task;
|
||||
// initialze by default
|
||||
bufferCounter:number = 0;
|
||||
bufferMax:number = 1;
|
||||
running:boolean = false;
|
||||
constructor(taskArg: Task) {
|
||||
this.task = taskArg;
|
||||
};
|
||||
private _run(x) {
|
||||
let recursiveBufferRunner = (x) => {
|
||||
if (this.bufferCounter >= 0) {
|
||||
this.running = true;
|
||||
this.task.running = true;
|
||||
runTask(this.task,{x:x})
|
||||
.then((x) => {
|
||||
this.bufferCounter--;
|
||||
this.task.cycleCounter.informOfCycle(x);
|
||||
recursiveBufferRunner(x);
|
||||
});
|
||||
} else {
|
||||
this.running = false;
|
||||
this.task.running = false;
|
||||
}
|
||||
};
|
||||
recursiveBufferRunner(x);
|
||||
};
|
||||
setBufferMax(bufferMaxArg:number){
|
||||
this.bufferMax = bufferMaxArg;
|
||||
};
|
||||
trigger(x): Promise<any> {
|
||||
if(!(this.bufferCounter >= this.bufferMax)){
|
||||
this.bufferCounter++
|
||||
};
|
||||
let returnPromise:Promise<any> = this.task.cycleCounter.getPromiseForCycle(this.bufferCounter + 1);
|
||||
if(!this.running){
|
||||
this._run(x);
|
||||
}
|
||||
return returnPromise;
|
||||
};
|
||||
};
|
@ -1,47 +1,70 @@
|
||||
/// <reference path="./typings/main.d.ts" />
|
||||
import * as plugins from "./taskbuffer.plugins"
|
||||
import * as helpers from "./taskbuffer.classes.helpers"
|
||||
|
||||
//interfaces
|
||||
import {Promise} from "q";
|
||||
export {Promise} from "q";
|
||||
|
||||
export interface ITaskFunction {
|
||||
(x?:any):PromiseLike<any>;
|
||||
}
|
||||
|
||||
export class Task {
|
||||
task:any;
|
||||
idle:boolean;
|
||||
running:boolean;
|
||||
name:string;
|
||||
taskFunction:ITaskFunction;
|
||||
buffered:boolean;
|
||||
bufferCounter:number;
|
||||
bufferMax:number;
|
||||
private _counterTriggerAbsolute:number;
|
||||
private _state:string;
|
||||
preTask:Task;
|
||||
afterTask:Task;
|
||||
|
||||
constructor(optionsArg:{taskFunction:any,preTask?:Task,afterTask?:Task, buffered?:boolean, bufferMax?:number}){
|
||||
if (!optionsArg){optionsArg = {taskFunction:function(){}}}
|
||||
// initialize by default
|
||||
running:boolean = false;
|
||||
bufferRunner = new helpers.BufferRunner(this);
|
||||
cycleCounter = new helpers.CycleCounter(this);
|
||||
idle:boolean = true;
|
||||
private _state:string = "ready";
|
||||
|
||||
constructor(optionsArg:{
|
||||
taskFunction:ITaskFunction,
|
||||
preTask?:Task,
|
||||
afterTask?:Task,
|
||||
buffered?:boolean,
|
||||
bufferMax?:number,
|
||||
name?:string
|
||||
}){
|
||||
var options = optionsArg;
|
||||
this.task = optionsArg.taskFunction;
|
||||
this.taskFunction = optionsArg.taskFunction;
|
||||
this.preTask = options.preTask;
|
||||
this.afterTask = options.afterTask;
|
||||
this.idle = true;
|
||||
this.running = false;
|
||||
this.idle = !this.running;
|
||||
this.buffered = options.buffered;
|
||||
this.bufferMax = options.bufferMax;
|
||||
this.bufferRunner.setBufferMax(options.bufferMax);
|
||||
this.name = options.name;
|
||||
}
|
||||
|
||||
trigger(){
|
||||
let done = plugins.Q.defer();
|
||||
if(this.buffered) {this.triggerBuffered()}
|
||||
else{this.triggerUnBuffered()};
|
||||
};
|
||||
triggerUnBuffered(){
|
||||
return helpers.runTask(this);
|
||||
}
|
||||
triggerBuffered(){
|
||||
var done = plugins.Q.defer();
|
||||
if(!(this.bufferCounter >= this.bufferMax)){
|
||||
this.bufferCounter++
|
||||
/**
|
||||
* trigger the task. Will trigger buffered if this.buffered is true
|
||||
*/
|
||||
trigger(x?):Promise<any> {
|
||||
if(this.buffered) {
|
||||
return this.triggerBuffered(x)
|
||||
}
|
||||
helpers.runBufferedTask(this);
|
||||
return done.promise;
|
||||
else {
|
||||
return this.triggerUnBuffered(x);
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
* trigger task unbuffered.
|
||||
*/
|
||||
triggerUnBuffered(x?):Promise<any>{
|
||||
return helpers.runTask(this,{x:x});
|
||||
}
|
||||
|
||||
/**
|
||||
* trigger task buffered.
|
||||
*/
|
||||
triggerBuffered(x?):Promise<any>{
|
||||
return this.bufferRunner.trigger(x);
|
||||
}
|
||||
|
||||
get state():string {
|
||||
@ -51,7 +74,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");
|
||||
}
|
||||
}
|
||||
}
|
@ -1,26 +1,52 @@
|
||||
/// <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:{
|
||||
taskArray:Task[],
|
||||
name?:string,
|
||||
log?:boolean,
|
||||
buffered?:boolean,
|
||||
bufferMax?:number
|
||||
}){
|
||||
let options = plugins.lodash.merge(
|
||||
{
|
||||
name:"unnamed Taskchain",
|
||||
log:false
|
||||
},
|
||||
optionsArg,
|
||||
{
|
||||
taskFunction: (x:any) => { // 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; // counter for iterating async over the taskArray
|
||||
let iterateTasks = (x) => {
|
||||
if(typeof this.taskArray[taskCounter] != "undefined"){
|
||||
this._oraObject.text(this.name + " running: Task" + this.taskArray[taskCounter].name);
|
||||
this.taskArray[taskCounter].trigger(x)
|
||||
.then((x)=>{
|
||||
plugins.beautylog.ok(this.taskArray[taskCounter].name);
|
||||
taskCounter++;
|
||||
iterateTasks(x);
|
||||
});
|
||||
} else {
|
||||
this._oraObject.endOk("Taskchain \"" + this.name + "\" completed successfully");
|
||||
done.resolve(x);
|
||||
}
|
||||
};
|
||||
iterateTasks(x);
|
||||
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 +57,4 @@ export class Taskchain extends Task {
|
||||
shiftTask(){
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
let myTask = new Taskchain(
|
||||
new Task({
|
||||
taskFunction:function(){}
|
||||
})
|
||||
);
|
||||
};
|
29
ts/taskbuffer.classes.taskparallel.ts
Normal file
29
ts/taskbuffer.classes.taskparallel.ts
Normal 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;
|
||||
}
|
||||
}
|
||||
|
6
ts/taskbuffer.classes.taskspace.ts
Normal file
6
ts/taskbuffer.classes.taskspace.ts
Normal file
@ -0,0 +1,6 @@
|
||||
import * as plugins from "./taskbuffer.plugins"
|
||||
import * as helpers from "./taskbuffer.classes.helpers"
|
||||
|
||||
export class Taskspace {
|
||||
|
||||
}
|
@ -1,2 +0,0 @@
|
||||
export * from "./taskbuffer.classes.task"
|
||||
export * from "./taskbuffer.classes.taskchain"
|
@ -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");
|
||||
|
@ -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"
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user