Compare commits
44 Commits
Author | SHA1 | Date | |
---|---|---|---|
017c0789ca | |||
6e6d056617 | |||
3f7f38ee17 | |||
5bfc72a602 | |||
ca8882962e | |||
df6bf2c681 | |||
310a683e14 | |||
3f275ebc08 | |||
01d469960e | |||
2ed701040a | |||
ca3bb38205 | |||
891d727fd4 | |||
e1424ea0fb | |||
cf1b31d635 | |||
d5570311ee | |||
44b3ba1313 | |||
4721d8c9e6 | |||
c7336eedfb | |||
5477911b5e | |||
2f8d3f7625 | |||
b00d31b41a | |||
4031692f6f | |||
174beae65f | |||
c1144d3405 | |||
065d92e573 | |||
46878819df | |||
aa8df29bbb | |||
f5cb0843fc | |||
1d52d098fb | |||
eb7eb14415 | |||
670bf5b124 | |||
fab863c66c | |||
402e2b982f | |||
1d0a85e6ca | |||
7ded7b036e | |||
03020eacbc | |||
dc95885646 | |||
11cdaad226 | |||
a1ad463140 | |||
76c57451b3 | |||
5dca9a9460 | |||
d30fb551f9 | |||
7a60f30f0b | |||
9e175245ed |
7
.gitignore
vendored
7
.gitignore
vendored
@ -1,7 +1,4 @@
|
||||
.idea/
|
||||
coverage/
|
||||
docs/
|
||||
ts/*.js
|
||||
ts/*.js.map
|
||||
ts/typings/
|
||||
node_modules
|
||||
pages/
|
||||
.nogit/
|
||||
|
@ -1,20 +1,31 @@
|
||||
image: hosttoday/ht-docker-node:npmts
|
||||
# gitzone standard
|
||||
image: hosttoday/ht-docker-node:npmci
|
||||
|
||||
cache:
|
||||
paths:
|
||||
- .yarn/
|
||||
key: "$CI_BUILD_STAGE"
|
||||
|
||||
stages:
|
||||
- test
|
||||
- release
|
||||
- trigger
|
||||
- pages
|
||||
|
||||
testLEGACY:
|
||||
stage: test
|
||||
script:
|
||||
- npmci test legacy
|
||||
coverage: /\d+.?\d+?\%\s*coverage/
|
||||
tags:
|
||||
- docker
|
||||
allow_failure: true
|
||||
|
||||
testLTS:
|
||||
stage: test
|
||||
script:
|
||||
- npmci test lts
|
||||
coverage: /\d+.?\d+?\%\s*coverage/
|
||||
tags:
|
||||
- docker
|
||||
|
||||
@ -22,15 +33,39 @@ testSTABLE:
|
||||
stage: test
|
||||
script:
|
||||
- npmci test stable
|
||||
coverage: /\d+.?\d+?\%\s*coverage/
|
||||
tags:
|
||||
- docker
|
||||
|
||||
release:
|
||||
stage: release
|
||||
environment: npmjs-com_registry
|
||||
script:
|
||||
- npmci publish
|
||||
only:
|
||||
- tags
|
||||
tags:
|
||||
- docker
|
||||
- docker
|
||||
|
||||
trigger:
|
||||
stage: trigger
|
||||
script:
|
||||
- npmci trigger
|
||||
only:
|
||||
- tags
|
||||
tags:
|
||||
- docker
|
||||
|
||||
pages:
|
||||
image: hosttoday/ht-docker-node:npmci
|
||||
stage: pages
|
||||
script:
|
||||
- npmci command yarn global add npmpage
|
||||
- npmci command npmpage
|
||||
tags:
|
||||
- docker
|
||||
only:
|
||||
- tags
|
||||
artifacts:
|
||||
expire_in: 1 week
|
||||
paths:
|
||||
- public
|
||||
|
@ -1,5 +1,5 @@
|
||||
.idea/
|
||||
docs/
|
||||
coverage/
|
||||
ts/
|
||||
node_modules/
|
||||
pages/
|
||||
|
30
README.md
30
README.md
@ -1,8 +1,22 @@
|
||||
# taskbuffer
|
||||
Flexible task organization for gulp. TypeScript ready!
|
||||
flexible task management. TypeScript ready!
|
||||
|
||||
## Status
|
||||
[](https://coveralls.io/github/pushrocks/taskbuffer?branch=master)
|
||||
## Availabililty
|
||||
[](https://www.npmjs.com/package/taskbuffer)
|
||||
[](https://GitLab.com/pushrocks/taskbuffer)
|
||||
[](https://github.com/pushrocks/taskbuffer)
|
||||
[](https://pushrocks.gitlab.io/taskbuffer/)
|
||||
|
||||
## Status for master
|
||||
[](https://GitLab.com/pushrocks/taskbuffer/commits/master)
|
||||
[](https://GitLab.com/pushrocks/taskbuffer/commits/master)
|
||||
[](https://www.npmjs.com/package/taskbuffer)
|
||||
[](https://david-dm.org/pushrocks/taskbuffer)
|
||||
[](https://www.bithound.io/github/pushrocks/taskbuffer/master/dependencies/npm)
|
||||
[](https://www.bithound.io/github/pushrocks/taskbuffer)
|
||||
[](https://nodejs.org/dist/latest-v6.x/docs/api/)
|
||||
[](https://nodejs.org/dist/latest-v6.x/docs/api/)
|
||||
[](http://standardjs.com/)
|
||||
|
||||
## Install
|
||||
|
||||
@ -40,7 +54,7 @@ npm install taskbuffer --save
|
||||
|
||||
### Usage
|
||||
We highly recommend TypeScript as this module supports **TypeScript intellisense**.
|
||||
```
|
||||
```javascript
|
||||
import * as taskbuffer from "taskbuffer";
|
||||
|
||||
myTask = new taskbuffer.Task({
|
||||
@ -53,4 +67,10 @@ myTask = new taskbuffer.Task({
|
||||
// Use TypeScript for better understanding and code completion
|
||||
}
|
||||
})
|
||||
```
|
||||
```
|
||||
|
||||
For further information read the linked docs at the top of this README.
|
||||
|
||||
> MIT licensed | **©** [Lossless GmbH](https://lossless.gmbh)
|
||||
|
||||
[](https://push.rocks)
|
||||
|
10
dist/index.d.ts
vendored
10
dist/index.d.ts
vendored
@ -1,5 +1,5 @@
|
||||
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";
|
||||
export { Task, ITaskFunction } from './taskbuffer.classes.task';
|
||||
export { Taskchain } from './taskbuffer.classes.taskchain';
|
||||
export { Taskparallel } from './taskbuffer.classes.taskparallel';
|
||||
export { TaskManager } from './taskbuffer.classes.taskmanager';
|
||||
import './taskbuffer.classes.helpers';
|
||||
|
7
dist/index.js
vendored
7
dist/index.js
vendored
@ -1,12 +1,13 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
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;
|
||||
var taskbuffer_classes_taskmanager_1 = require("./taskbuffer.classes.taskmanager");
|
||||
exports.TaskManager = taskbuffer_classes_taskmanager_1.TaskManager;
|
||||
// import for naming only
|
||||
require("./taskbuffer.classes.helpers");
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsd0NBQWlDLDJCQUEyQixDQUFDO0FBQXJELDhDQUFxRDtBQUM3RCw2Q0FBd0IsZ0NBQWdDLENBQUM7QUFBakQsNkRBQWlEO0FBQ3pELGdEQUEyQixtQ0FBbUMsQ0FBQztBQUF2RCxzRUFBdUQ7QUFDL0QsNkNBQXdCLGdDQUFnQyxDQUFDO0FBQWpELDZEQUFpRDtBQUV6RCx5QkFBeUI7QUFDekIsUUFBTyw4QkFBOEIsQ0FBQyxDQUFEIn0=
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHFFQUE0RDtBQUFwRCx5Q0FBQSxJQUFJLENBQUE7QUFDWiwrRUFBd0Q7QUFBaEQsbURBQUEsU0FBUyxDQUFBO0FBQ2pCLHFGQUE4RDtBQUF0RCx5REFBQSxZQUFZLENBQUE7QUFDcEIsbUZBQThEO0FBQXJELHVEQUFBLFdBQVcsQ0FBQTtBQUVwQix5QkFBeUI7QUFDekIsd0NBQXFDIn0=
|
34
dist/taskbuffer.classes.helpers.d.ts
vendored
34
dist/taskbuffer.classes.helpers.d.ts
vendored
@ -1,10 +1,28 @@
|
||||
/// <reference types="q" />
|
||||
import plugins = require("./taskbuffer.plugins");
|
||||
import { Task, ITaskFunction } from "./taskbuffer.classes.task";
|
||||
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 isTask: (taskArg: Task) => boolean;
|
||||
export declare let isTaskTouched: (taskArg: Task, touchedTasksArray: Task[]) => boolean;
|
||||
export declare let runTask: (taskArg: Task, optionsArg?: {
|
||||
touchedTasksArray: Task[];
|
||||
}) => plugins.Q.Promise<{}>;
|
||||
export declare let runBufferedTask: (taskArg: Task) => void;
|
||||
export declare let runTask: (taskArg: Task, optionsArg: {
|
||||
x?: any;
|
||||
touchedTasksArray?: Task[];
|
||||
}) => 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): Promise<{}>;
|
||||
informOfCycle(x: any): void;
|
||||
}
|
||||
export declare class BufferRunner {
|
||||
task: Task;
|
||||
bufferCounter: number;
|
||||
running: boolean;
|
||||
constructor(taskArg: Task);
|
||||
trigger(x: any): Promise<any>;
|
||||
private _run(x);
|
||||
}
|
||||
|
146
dist/taskbuffer.classes.helpers.js
vendored
146
dist/taskbuffer.classes.helpers.js
vendored
File diff suppressed because one or more lines are too long
48
dist/taskbuffer.classes.task.d.ts
vendored
48
dist/taskbuffer.classes.task.d.ts
vendored
@ -1,40 +1,62 @@
|
||||
/// <reference types="q" />
|
||||
import * as plugins from "./taskbuffer.plugins";
|
||||
import * as helpers from './taskbuffer.classes.helpers';
|
||||
export interface ITaskFunction {
|
||||
(): PromiseLike<any>;
|
||||
(x?: any): PromiseLike<any>;
|
||||
}
|
||||
export declare class Task {
|
||||
name: string;
|
||||
task: any;
|
||||
running: boolean;
|
||||
runningBuffered: boolean;
|
||||
idle: boolean;
|
||||
taskFunction: ITaskFunction;
|
||||
buffered: boolean;
|
||||
bufferCounter: number;
|
||||
bufferMax: number;
|
||||
private _counterTriggerAbsolute;
|
||||
private _state;
|
||||
execDelay: number;
|
||||
preTask: Task;
|
||||
afterTask: Task;
|
||||
running: boolean;
|
||||
bufferRunner: helpers.BufferRunner;
|
||||
cycleCounter: helpers.CycleCounter;
|
||||
idle: boolean;
|
||||
private _state;
|
||||
constructor(optionsArg: {
|
||||
/**
|
||||
* the task function to run, must return promise
|
||||
*/
|
||||
taskFunction: ITaskFunction;
|
||||
/**
|
||||
* any other task to run before
|
||||
*/
|
||||
preTask?: Task;
|
||||
/**
|
||||
* any other task to run after
|
||||
*/
|
||||
afterTask?: Task;
|
||||
/**
|
||||
* wether this task should run buffered
|
||||
*/
|
||||
buffered?: boolean;
|
||||
/**
|
||||
* the maximum buffer
|
||||
*/
|
||||
bufferMax?: number;
|
||||
/**
|
||||
* the execution delay, before the task is executed
|
||||
* only makes sense when running in buffered mode
|
||||
*/
|
||||
execDelay?: number;
|
||||
/**
|
||||
* the name of the task
|
||||
*/
|
||||
name?: string;
|
||||
});
|
||||
/**
|
||||
* trigger the task. Will trigger buffered if this.buffered is true
|
||||
*/
|
||||
trigger(): plugins.Q.Promise<{}>;
|
||||
trigger(x?: any): Promise<any>;
|
||||
/**
|
||||
* trigger task unbuffered.
|
||||
*/
|
||||
triggerUnBuffered(): plugins.Q.Promise<{}>;
|
||||
triggerUnBuffered(x?: any): Promise<any>;
|
||||
/**
|
||||
* trigger task buffered.
|
||||
*/
|
||||
triggerBuffered(): plugins.Q.Promise<{}>;
|
||||
triggerBuffered(x?: any): Promise<any>;
|
||||
state: string;
|
||||
}
|
||||
|
63
dist/taskbuffer.classes.task.js
vendored
63
dist/taskbuffer.classes.task.js
vendored
@ -1,73 +1,58 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const plugins = require("./taskbuffer.plugins");
|
||||
const helpers = require("./taskbuffer.classes.helpers");
|
||||
class Task {
|
||||
constructor(optionsArg) {
|
||||
// initialize by default
|
||||
this.running = false;
|
||||
this.runningBuffered = false;
|
||||
this.bufferRunner = new helpers.BufferRunner(this);
|
||||
this.cycleCounter = new helpers.CycleCounter(this);
|
||||
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.running = false;
|
||||
this.idle = !this.running && !this.runningBuffered;
|
||||
this.buffered = options.buffered;
|
||||
this.bufferMax = options.bufferMax;
|
||||
this.name = options.name;
|
||||
this._state = 'ready';
|
||||
this.taskFunction = optionsArg.taskFunction;
|
||||
this.preTask = optionsArg.preTask;
|
||||
this.afterTask = optionsArg.afterTask;
|
||||
this.idle = !this.running;
|
||||
this.buffered = optionsArg.buffered;
|
||||
this.bufferMax = optionsArg.bufferMax;
|
||||
this.execDelay = optionsArg.execDelay;
|
||||
this.name = optionsArg.name;
|
||||
}
|
||||
/**
|
||||
* trigger the task. Will trigger buffered if this.buffered is true
|
||||
*/
|
||||
trigger() {
|
||||
let done = plugins.Q.defer();
|
||||
trigger(x) {
|
||||
if (this.buffered) {
|
||||
this.triggerBuffered()
|
||||
.then(done.resolve);
|
||||
return this.triggerBuffered(x);
|
||||
}
|
||||
else {
|
||||
this.triggerUnBuffered()
|
||||
.then(done.resolve);
|
||||
return this.triggerUnBuffered(x);
|
||||
}
|
||||
;
|
||||
return done.promise;
|
||||
}
|
||||
;
|
||||
/**
|
||||
* trigger task unbuffered.
|
||||
*/
|
||||
triggerUnBuffered() {
|
||||
return helpers.runTask(this);
|
||||
triggerUnBuffered(x) {
|
||||
return helpers.runTask(this, { x: x });
|
||||
}
|
||||
/**
|
||||
* trigger task buffered.
|
||||
*/
|
||||
triggerBuffered() {
|
||||
var done = plugins.Q.defer();
|
||||
if (!(this.bufferCounter >= this.bufferMax)) {
|
||||
this.bufferCounter++;
|
||||
}
|
||||
;
|
||||
if (!this.runningBuffered) {
|
||||
helpers.runBufferedTask(this);
|
||||
}
|
||||
;
|
||||
return done.promise;
|
||||
triggerBuffered(x) {
|
||||
return this.bufferRunner.trigger(x);
|
||||
}
|
||||
get state() {
|
||||
return this._state;
|
||||
}
|
||||
set state(stateArg) {
|
||||
if (stateArg == "locked") {
|
||||
this._state = "locked";
|
||||
if (stateArg === 'locked') {
|
||||
this._state = 'locked';
|
||||
}
|
||||
else {
|
||||
plugins.beautylog.error("state type " + stateArg.blue + " could not be set");
|
||||
plugins.beautylog.error('state type ' + stateArg + ' could not be set');
|
||||
}
|
||||
}
|
||||
}
|
||||
exports.Task = Task;
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza2J1ZmZlci5jbGFzc2VzLnRhc2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy90YXNrYnVmZmVyLmNsYXNzZXMudGFzay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsTUFBWSxPQUFPLFdBQU0sc0JBQ3pCLENBQUMsQ0FEOEM7QUFDL0MsTUFBWSxPQUFPLFdBQU0sOEJBR3pCLENBQUMsQ0FIc0Q7QUFPdkQ7SUFjSSxZQUFZLFVBT1g7UUFsQkQsWUFBTyxHQUFXLEtBQUssQ0FBQztRQUN4QixvQkFBZSxHQUFXLEtBQUssQ0FBQztRQUNoQyxTQUFJLEdBQVcsSUFBSSxDQUFDO1FBQ3BCLGFBQVEsR0FBVyxLQUFLLENBQUM7UUFFekIsY0FBUyxHQUFVLENBQUMsQ0FBQztRQUNiLDRCQUF1QixHQUFVLENBQUMsQ0FBQztRQWF2QyxJQUFJLE9BQU8sR0FBRyxVQUFVLENBQUM7UUFDekIsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUMvQixJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDbkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQ25ELElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUNqQyxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDbkMsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQzdCLENBQUM7SUFFRDs7T0FFRztJQUNILE9BQU87UUFDSCxJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzdCLEVBQUUsQ0FBQSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ2YsSUFBSSxDQUFDLGVBQWUsRUFBRTtpQkFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1QixDQUFDO1FBQ0QsSUFBSSxDQUFDLENBQUM7WUFDRixJQUFJLENBQUMsaUJBQWlCLEVBQUU7aUJBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUIsQ0FBQztRQUFBLENBQUM7UUFDRixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN4QixDQUFDOztJQUVEOztPQUVHO0lBQ0gsaUJBQWlCO1FBQ2IsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsZUFBZTtRQUNYLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDN0IsRUFBRSxDQUFBLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUEsQ0FBQztZQUN4QyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUE7UUFDeEIsQ0FBQztRQUFBLENBQUM7UUFDRixFQUFFLENBQUEsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQSxDQUFDO1lBQ3RCLE9BQU8sQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsQ0FBQztRQUFBLENBQUM7UUFDRixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ0wsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUNELElBQUksS0FBSyxDQUFDLFFBQWU7UUFDckIsRUFBRSxDQUFDLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxDQUFBLENBQUM7WUFDdEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUM7UUFDM0IsQ0FBQztRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ0osT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEdBQUcsbUJBQW1CLENBQUMsQ0FBQztRQUNqRixDQUFDO0lBQ0wsQ0FBQztBQUNMLENBQUM7QUFoRlksWUFBSSxPQWdGaEIsQ0FBQSJ9
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza2J1ZmZlci5jbGFzc2VzLnRhc2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy90YXNrYnVmZmVyLmNsYXNzZXMudGFzay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGdEQUErQztBQUMvQyx3REFBdUQ7QUFNdkQ7SUFxQkUsWUFBWSxVQThCWDtRQXRDRCx3QkFBd0I7UUFDeEIsWUFBTyxHQUFZLEtBQUssQ0FBQTtRQUN4QixpQkFBWSxHQUFHLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUM3QyxpQkFBWSxHQUFHLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUU3QyxTQUFJLEdBQVksSUFBSSxDQUFBO1FBQ1osV0FBTSxHQUFXLE9BQU8sQ0FBQTtRQWlDOUIsSUFBSSxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFBO1FBQzNDLElBQUksQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQTtRQUNqQyxJQUFJLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUE7UUFDckMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUE7UUFDekIsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFBO1FBQ25DLElBQUksQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQTtRQUNyQyxJQUFJLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUE7UUFDckMsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFBO0lBQzdCLENBQUM7SUFFRDs7T0FFRztJQUNILE9BQU8sQ0FBQyxDQUFFO1FBQ1IsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDbEIsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDaEMsQ0FBQztRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ04sTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNsQyxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsaUJBQWlCLENBQUMsQ0FBRTtRQUNsQixNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUN4QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxlQUFlLENBQUMsQ0FBRTtRQUNoQixNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDckMsQ0FBQztJQUVELElBQUksS0FBSztRQUNQLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFBO0lBQ3BCLENBQUM7SUFFRCxJQUFJLEtBQUssQ0FBQyxRQUFnQjtRQUN4QixFQUFFLENBQUMsQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQztZQUMxQixJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQTtRQUN4QixDQUFDO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDTixPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsUUFBUSxHQUFHLG1CQUFtQixDQUFDLENBQUE7UUFDekUsQ0FBQztJQUNILENBQUM7Q0FDRjtBQWxHRCxvQkFrR0MifQ==
|
7
dist/taskbuffer.classes.taskchain.d.ts
vendored
7
dist/taskbuffer.classes.taskchain.d.ts
vendored
@ -1,14 +1,15 @@
|
||||
import { Task } from "./taskbuffer.classes.task";
|
||||
import { Task } from './taskbuffer.classes.task';
|
||||
export declare class Taskchain extends Task {
|
||||
taskArray: Task[];
|
||||
private _oraObject;
|
||||
constructor(optionsArg: {
|
||||
taskArray: Task[];
|
||||
name?: string;
|
||||
log?: boolean;
|
||||
taskArray: Task[];
|
||||
buffered?: boolean;
|
||||
bufferMax?: number;
|
||||
});
|
||||
addTask(taskArg: Task): void;
|
||||
removeTask(taskArg: Task): void;
|
||||
shiftTask(): void;
|
||||
trigger(): any;
|
||||
}
|
||||
|
46
dist/taskbuffer.classes.taskchain.js
vendored
46
dist/taskbuffer.classes.taskchain.js
vendored
@ -1,59 +1,53 @@
|
||||
"use strict";
|
||||
// TaskChain chains tasks
|
||||
// and extends Task
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
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",
|
||||
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(() => {
|
||||
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();
|
||||
iterateTasks(x);
|
||||
});
|
||||
}
|
||||
else {
|
||||
this._oraObject.endOk("Taskchain \"" + this.name + "\" completed successfully");
|
||||
done.resolve();
|
||||
this._oraObject.endOk('Taskchain "' + this.name + '" completed successfully');
|
||||
done.resolve(x);
|
||||
}
|
||||
};
|
||||
iterateTasks();
|
||||
iterateTasks(x);
|
||||
return done.promise;
|
||||
}
|
||||
});
|
||||
super(options);
|
||||
this.taskArray = optionsArg.taskArray;
|
||||
this._oraObject = new plugins.beautylog.Ora("Taskchain idle", "blue");
|
||||
this._oraObject = plugins.beautylog.ora;
|
||||
if (optionsArg.log === true) {
|
||||
this._oraObject.start();
|
||||
}
|
||||
;
|
||||
}
|
||||
addTask(taskArg) {
|
||||
this.taskArray.push(taskArg);
|
||||
}
|
||||
;
|
||||
removeTask(taskArg) {
|
||||
//TODO
|
||||
// TODO:
|
||||
}
|
||||
;
|
||||
shiftTask() {
|
||||
}
|
||||
;
|
||||
trigger() {
|
||||
this._oraObject.start(this.name + " running...");
|
||||
return helpers.runTask(this);
|
||||
// TODO:
|
||||
}
|
||||
}
|
||||
exports.Taskchain = Taskchain;
|
||||
;
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza2J1ZmZlci5jbGFzc2VzLnRhc2tjaGFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3Rhc2tidWZmZXIuY2xhc3Nlcy50YXNrY2hhaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE1BQVksT0FBTyxXQUFNLHNCQUFzQixDQUFDLENBQUE7QUFDaEQsMENBQW1CLDJCQUEyQixDQUFDLENBQUE7QUFDL0MsTUFBTyxPQUFPLFdBQVcsOEJBQThCLENBQUMsQ0FBQztBQUV6RCx3QkFBK0IsOEJBQUk7SUFHL0IsWUFBWSxVQUlYO1FBQ0csSUFBSSxPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQzlCO1lBQ0ksSUFBSSxFQUFDLG1CQUFtQjtZQUN4QixHQUFHLEVBQUMsS0FBSztTQUNaLEVBQ0QsVUFBVSxFQUNWO1lBQ0ksWUFBWSxFQUFFO2dCQUNWLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyx3Q0FBd0M7Z0JBQ3RFLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQztnQkFDcEIsSUFBSSxZQUFZLEdBQUc7b0JBQ2YsRUFBRSxDQUFBLENBQUMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxDQUFBLENBQUM7d0JBQ2xELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDdEYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLEVBQUU7NkJBQ2hDLElBQUksQ0FBQzs0QkFDRixPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDOzRCQUN2RCxXQUFXLEVBQUUsQ0FBQzs0QkFDZCxZQUFZLEVBQUUsQ0FBQzt3QkFDbkIsQ0FBQyxDQUFDLENBQUM7b0JBQ1gsQ0FBQztvQkFBQyxJQUFJLENBQUMsQ0FBQzt3QkFDSixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBSSwyQkFBMkIsQ0FBQyxDQUFDO3dCQUNqRixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ25CLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDO2dCQUNGLFlBQVksRUFBRSxDQUFDO2dCQUNmLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQ3hCLENBQUM7U0FDSixDQUNKLENBQUM7UUFDRixNQUFNLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBQyxNQUFNLENBQUMsQ0FBQztRQUNyRSxFQUFFLENBQUEsQ0FBQyxVQUFVLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxDQUFBLENBQUM7WUFDeEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM1QixDQUFDO1FBQUEsQ0FBQztJQUNOLENBQUM7SUFDRCxPQUFPLENBQUMsT0FBWTtRQUNoQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqQyxDQUFDOztJQUNELFVBQVUsQ0FBQyxPQUFZO1FBQ25CLE1BQU07SUFDVixDQUFDOztJQUNELFNBQVM7SUFFVCxDQUFDOztJQUNELE9BQU87UUFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQyxDQUFDO1FBQ2pELE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7QUFDTCxDQUFDO0FBekRZLGlCQUFTLFlBeURyQixDQUFBO0FBQUEsQ0FBQyJ9
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza2J1ZmZlci5jbGFzc2VzLnRhc2tjaGFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3Rhc2tidWZmZXIuY2xhc3Nlcy50YXNrY2hhaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHlCQUF5QjtBQUN6QixtQkFBbUI7O0FBRW5CLGdEQUErQztBQUMvQyx1RUFBZ0Q7QUFHaEQsZUFBdUIsU0FBUSw4QkFBSTtJQUdqQyxZQUFZLFVBTVg7UUFDQyxJQUFJLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDaEM7WUFDRSxJQUFJLEVBQUUsbUJBQW1CO1lBQ3pCLEdBQUcsRUFBRSxLQUFLO1NBQ1gsRUFDRCxVQUFVLEVBQ1Y7WUFDRSxZQUFZLEVBQUUsQ0FBQyxDQUFNO2dCQUNuQixJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFBLENBQUMsdUNBQXVDO2dCQUNwRSxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUEsQ0FBQyxpREFBaUQ7Z0JBQ3JFLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztvQkFDbkIsRUFBRSxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFFLFdBQVcsQ0FBRSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7d0JBQ3pELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBRSxXQUFXLENBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQTt3QkFDdkYsSUFBSSxDQUFDLFNBQVMsQ0FBRSxXQUFXLENBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDOzZCQUNyQyxJQUFJLENBQUMsQ0FBQyxDQUFDOzRCQUNOLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUUsV0FBVyxDQUFFLENBQUMsSUFBSSxDQUFDLENBQUE7NEJBQ3hELFdBQVcsRUFBRSxDQUFBOzRCQUNiLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQTt3QkFDakIsQ0FBQyxDQUFDLENBQUE7b0JBQ04sQ0FBQztvQkFBQyxJQUFJLENBQUMsQ0FBQzt3QkFDTixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRywwQkFBMEIsQ0FBQyxDQUFBO3dCQUM3RSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFBO29CQUNqQixDQUFDO2dCQUNILENBQUMsQ0FBQTtnQkFDRCxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUE7Z0JBQ2YsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUE7WUFDckIsQ0FBQztTQUNGLENBQ0YsQ0FBQTtRQUNELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUNkLElBQUksQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQTtRQUNyQyxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFBO1FBQ3ZDLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFBO1FBQ3pCLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxDQUFFLE9BQWE7UUFDcEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDOUIsQ0FBQztJQUNELFVBQVUsQ0FBRSxPQUFhO1FBQ3ZCLFFBQVE7SUFDVixDQUFDO0lBQ0QsU0FBUztRQUNQLFFBQVE7SUFDVixDQUFDO0NBQ0Y7QUF2REQsOEJBdURDIn0=
|
44
dist/taskbuffer.classes.taskmanager.d.ts
vendored
Normal file
44
dist/taskbuffer.classes.taskmanager.d.ts
vendored
Normal file
@ -0,0 +1,44 @@
|
||||
import { Task } from './taskbuffer.classes.task';
|
||||
import { Objectmap } from 'lik';
|
||||
export declare class TaskManager {
|
||||
taskMap: Objectmap<Task>;
|
||||
private cronJobMap;
|
||||
constructor();
|
||||
/**
|
||||
* checks if a task is already present
|
||||
* @param taskNameArg
|
||||
*/
|
||||
getTaskByName(taskNameArg: any): Task;
|
||||
/**
|
||||
* adds a Task to the TaskManager
|
||||
* @param taskArg
|
||||
*/
|
||||
addTask(taskArg: Task): void;
|
||||
/**
|
||||
* adds and schedules a task at once
|
||||
* @param taskArg
|
||||
* @param cronStringArg
|
||||
*/
|
||||
addAndScheduleTask(taskArg: Task, cronStringArg: string): void;
|
||||
/**
|
||||
* triggers a task in the TaskManagerByName
|
||||
* @param taskNameArg
|
||||
*/
|
||||
triggerTaskByName(taskNameArg: string): Promise<any>;
|
||||
/**
|
||||
* schedules the task by name
|
||||
* @param taskNameArg
|
||||
*/
|
||||
scheduleTaskByName(taskNameArg: string, cronStringArg: string): void;
|
||||
descheduleTaskByName(taskNameArg: string): void;
|
||||
/**
|
||||
* returns all schedules of a specific task
|
||||
* @param taskNameArg
|
||||
*/
|
||||
getSchedulesForTaskName(taskNameArg: string): void;
|
||||
}
|
||||
export interface ICronJob {
|
||||
cronString: string;
|
||||
taskNameArg: string;
|
||||
job: any;
|
||||
}
|
83
dist/taskbuffer.classes.taskmanager.js
vendored
Normal file
83
dist/taskbuffer.classes.taskmanager.js
vendored
Normal file
@ -0,0 +1,83 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const plugins = require("./taskbuffer.plugins");
|
||||
class TaskManager {
|
||||
constructor() {
|
||||
this.taskMap = new plugins.lik.Objectmap();
|
||||
this.cronJobMap = new plugins.lik.Objectmap();
|
||||
// nothing here
|
||||
}
|
||||
/**
|
||||
* checks if a task is already present
|
||||
* @param taskNameArg
|
||||
*/
|
||||
getTaskByName(taskNameArg) {
|
||||
return this.taskMap.find((itemArg) => {
|
||||
return itemArg.name === taskNameArg;
|
||||
});
|
||||
}
|
||||
/**
|
||||
* adds a Task to the TaskManager
|
||||
* @param taskArg
|
||||
*/
|
||||
addTask(taskArg) {
|
||||
if (!taskArg.name) {
|
||||
throw new Error('taskArg needs a name to be added to taskManager');
|
||||
}
|
||||
this.taskMap.add(taskArg);
|
||||
}
|
||||
/**
|
||||
* adds and schedules a task at once
|
||||
* @param taskArg
|
||||
* @param cronStringArg
|
||||
*/
|
||||
addAndScheduleTask(taskArg, cronStringArg) {
|
||||
this.addTask(taskArg);
|
||||
let taskName = taskArg.name;
|
||||
this.scheduleTaskByName(taskName, cronStringArg);
|
||||
}
|
||||
/**
|
||||
* triggers a task in the TaskManagerByName
|
||||
* @param taskNameArg
|
||||
*/
|
||||
triggerTaskByName(taskNameArg) {
|
||||
let taskToTrigger = this.getTaskByName(taskNameArg);
|
||||
if (!taskToTrigger) {
|
||||
throw new Error(`There is no task with the name of ${taskNameArg}`);
|
||||
}
|
||||
return taskToTrigger.trigger();
|
||||
}
|
||||
/**
|
||||
* schedules the task by name
|
||||
* @param taskNameArg
|
||||
*/
|
||||
scheduleTaskByName(taskNameArg, cronStringArg) {
|
||||
let taskToSchedule = this.getTaskByName(taskNameArg);
|
||||
let job = new plugins.cron.CronJob({
|
||||
cronTime: cronStringArg,
|
||||
onTick: () => {
|
||||
this.triggerTaskByName(taskNameArg);
|
||||
},
|
||||
start: true
|
||||
});
|
||||
this.cronJobMap.add({
|
||||
taskNameArg: taskToSchedule.name,
|
||||
cronString: cronStringArg,
|
||||
job: job
|
||||
});
|
||||
}
|
||||
descheduleTaskByName(taskNameArg) {
|
||||
let descheduledCron = this.cronJobMap.findOneAndRemove((itemArg) => {
|
||||
return itemArg.taskNameArg === taskNameArg;
|
||||
});
|
||||
descheduledCron.job.stop();
|
||||
}
|
||||
/**
|
||||
* returns all schedules of a specific task
|
||||
* @param taskNameArg
|
||||
*/
|
||||
getSchedulesForTaskName(taskNameArg) {
|
||||
}
|
||||
}
|
||||
exports.TaskManager = TaskManager;
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza2J1ZmZlci5jbGFzc2VzLnRhc2ttYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvdGFza2J1ZmZlci5jbGFzc2VzLnRhc2ttYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsZ0RBQStDO0FBTS9DO0lBR0U7UUFGQSxZQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBUSxDQUFBO1FBQ25DLGVBQVUsR0FBRyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFZLENBQUE7UUFFeEQsZUFBZTtJQUNqQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsYUFBYSxDQUFFLFdBQVc7UUFDeEIsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTztZQUMvQixNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxXQUFXLENBQUE7UUFDckMsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsT0FBTyxDQUFFLE9BQWE7UUFDcEIsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNsQixNQUFNLElBQUksS0FBSyxDQUFDLGlEQUFpRCxDQUFDLENBQUE7UUFDcEUsQ0FBQztRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQzNCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsa0JBQWtCLENBQUUsT0FBYSxFQUFFLGFBQXFCO1FBQ3RELElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDckIsSUFBSSxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQTtRQUMzQixJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFBO0lBQ2xELENBQUM7SUFFRDs7O09BR0c7SUFDSCxpQkFBaUIsQ0FBRSxXQUFtQjtRQUNwQyxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQ25ELEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztZQUNuQixNQUFNLElBQUksS0FBSyxDQUFDLHFDQUFxQyxXQUFXLEVBQUUsQ0FBQyxDQUFBO1FBQ3JFLENBQUM7UUFDRCxNQUFNLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFBO0lBQ2hDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxrQkFBa0IsQ0FBRSxXQUFtQixFQUFFLGFBQXFCO1FBQzVELElBQUksY0FBYyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUE7UUFDcEQsSUFBSSxHQUFHLEdBQUcsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUNqQyxRQUFRLEVBQUUsYUFBYTtZQUN2QixNQUFNLEVBQUU7Z0JBQ04sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFBO1lBQ3JDLENBQUM7WUFDRCxLQUFLLEVBQUUsSUFBSTtTQUNaLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO1lBQ2xCLFdBQVcsRUFBRSxjQUFjLENBQUMsSUFBSTtZQUNoQyxVQUFVLEVBQUUsYUFBYTtZQUN6QixHQUFHLEVBQUUsR0FBRztTQUNULENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxvQkFBb0IsQ0FBRSxXQUFtQjtRQUN2QyxJQUFJLGVBQWUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLENBQUMsT0FBTztZQUM3RCxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsS0FBSyxXQUFXLENBQUE7UUFDNUMsQ0FBQyxDQUFDLENBQUE7UUFDRixlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFBO0lBQzVCLENBQUM7SUFDRDs7O09BR0c7SUFDSCx1QkFBdUIsQ0FBRSxXQUFtQjtJQUU1QyxDQUFDO0NBQ0Y7QUFwRkQsa0NBb0ZDIn0=
|
2
dist/taskbuffer.classes.taskparallel.d.ts
vendored
2
dist/taskbuffer.classes.taskparallel.d.ts
vendored
@ -1,4 +1,4 @@
|
||||
import { Task } from "./taskbuffer.classes.task";
|
||||
import { Task } from './taskbuffer.classes.task';
|
||||
export declare class Taskparallel extends Task {
|
||||
taskArray: Task[];
|
||||
constructor(optionsArg: {
|
||||
|
7
dist/taskbuffer.classes.taskparallel.js
vendored
7
dist/taskbuffer.classes.taskparallel.js
vendored
@ -1,16 +1,17 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
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 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)
|
||||
Promise.all(promiseArray)
|
||||
.then(done.resolve);
|
||||
return done.promise;
|
||||
}
|
||||
@ -20,4 +21,4 @@ class Taskparallel extends taskbuffer_classes_task_1.Task {
|
||||
}
|
||||
}
|
||||
exports.Taskparallel = Taskparallel;
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza2J1ZmZlci5jbGFzc2VzLnRhc2twYXJhbGxlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3Rhc2tidWZmZXIuY2xhc3Nlcy50YXNrcGFyYWxsZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE1BQVksT0FBTyxXQUFNLHNCQUN6QixDQUFDLENBRDhDO0FBRS9DLDBDQUFxQiwyQkFFckIsQ0FBQyxDQUYrQztBQUVoRCwyQkFBa0MsOEJBQUk7SUFFbEMsWUFBWSxVQUVYO1FBQ0csSUFBSSxPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQzlCLFVBQVUsRUFDVjtZQUNJLFlBQVksRUFBRTtnQkFDVixJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUM3QixJQUFJLFlBQVksR0FBc0IsRUFBRSxDQUFDLENBQUMsMkRBQTJEO2dCQUNyRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxVQUFVLE9BQU87b0JBQ3BDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ3pDLENBQUMsQ0FBQyxDQUFBO2dCQUNGLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQztxQkFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDeEIsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDeEIsQ0FBQztTQUNKLENBQ0osQ0FBQztRQUNGLE1BQU0sT0FBTyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUM7SUFDMUMsQ0FBQztBQUNMLENBQUM7QUF2Qlksb0JBQVksZUF1QnhCLENBQUEifQ==
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza2J1ZmZlci5jbGFzc2VzLnRhc2twYXJhbGxlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3Rhc2tidWZmZXIuY2xhc3Nlcy50YXNrcGFyYWxsZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxnREFBK0M7QUFFL0MsdUVBQWdEO0FBRWhELGtCQUEwQixTQUFRLDhCQUFJO0lBRXBDLFlBQWEsVUFFWjtRQUNDLElBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUNoQyxVQUFVLEVBQ1Y7WUFDRSxZQUFZLEVBQUU7Z0JBQ1osSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtnQkFDNUIsSUFBSSxZQUFZLEdBQW1CLEVBQUUsQ0FBQSxDQUFDLDJEQUEyRDtnQkFDakcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsVUFBVSxPQUFPO29CQUN0QyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFBO2dCQUN0QyxDQUFDLENBQUMsQ0FBQTtnQkFDRixPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQztxQkFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtnQkFDckIsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUE7WUFDckIsQ0FBQztTQUNGLENBQ0YsQ0FBQTtRQUNELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUNkLElBQUksQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQTtJQUN2QyxDQUFDO0NBQ0Y7QUF2QkQsb0NBdUJDIn0=
|
2
dist/taskbuffer.classes.taskspace.d.ts
vendored
2
dist/taskbuffer.classes.taskspace.d.ts
vendored
@ -1,2 +0,0 @@
|
||||
export declare class Taskspace {
|
||||
}
|
5
dist/taskbuffer.classes.taskspace.js
vendored
5
dist/taskbuffer.classes.taskspace.js
vendored
@ -1,5 +0,0 @@
|
||||
"use strict";
|
||||
class Taskspace {
|
||||
}
|
||||
exports.Taskspace = Taskspace;
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza2J1ZmZlci5jbGFzc2VzLnRhc2tzcGFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3Rhc2tidWZmZXIuY2xhc3Nlcy50YXNrc3BhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUdBO0FBRUEsQ0FBQztBQUZZLGlCQUFTLFlBRXJCLENBQUEifQ==
|
14
dist/taskbuffer.plugins.d.ts
vendored
14
dist/taskbuffer.plugins.d.ts
vendored
@ -1,5 +1,9 @@
|
||||
import "typings-global";
|
||||
export import beautylog = require("beautylog");
|
||||
export import Q = require("q");
|
||||
export import lodash = require("lodash");
|
||||
export import rxjs = require("rxjs");
|
||||
import 'typings-global';
|
||||
import * as beautylog from 'beautylog';
|
||||
declare let cron: any;
|
||||
import * as lik from 'lik';
|
||||
import * as lodash from 'lodash';
|
||||
import * as rxjs from 'rxjs';
|
||||
import * as q from 'smartq';
|
||||
import * as smartdelay from 'smartdelay';
|
||||
export { beautylog, cron, lik, lodash, rxjs, q, smartdelay };
|
||||
|
21
dist/taskbuffer.plugins.js
vendored
21
dist/taskbuffer.plugins.js
vendored
@ -1,7 +1,18 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
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=
|
||||
const beautylog = require("beautylog");
|
||||
exports.beautylog = beautylog;
|
||||
let cron = require('cron');
|
||||
exports.cron = cron;
|
||||
const lik = require("lik");
|
||||
exports.lik = lik;
|
||||
const lodash = require("lodash");
|
||||
exports.lodash = lodash;
|
||||
const rxjs = require("rxjs");
|
||||
exports.rxjs = rxjs;
|
||||
const q = require("smartq");
|
||||
exports.q = q;
|
||||
const smartdelay = require("smartdelay");
|
||||
exports.smartdelay = smartdelay;
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza2J1ZmZlci5wbHVnaW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvdGFza2J1ZmZlci5wbHVnaW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsMEJBQXVCO0FBQ3ZCLHVDQUFzQztBQVNsQyw4QkFBUztBQVJiLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQVN0QixvQkFBSTtBQVJSLDJCQUEwQjtBQVN0QixrQkFBRztBQVJQLGlDQUFnQztBQVM1Qix3QkFBTTtBQVJWLDZCQUE0QjtBQVN4QixvQkFBSTtBQVJSLDRCQUEyQjtBQVN2QixjQUFDO0FBUkwseUNBQXdDO0FBU3BDLGdDQUFVIn0=
|
79
docs/index.md
Normal file
79
docs/index.md
Normal file
@ -0,0 +1,79 @@
|
||||
# taskbuffer
|
||||
flexible task management. TypeScript ready!
|
||||
|
||||
## Availabililty
|
||||
[](https://www.npmjs.com/package/taskbuffer)
|
||||
[](https://GitLab.com/pushrocks/taskbuffer)
|
||||
[](https://github.com/pushrocks/taskbuffer)
|
||||
[](https://pushrocks.gitlab.io/taskbuffer/)
|
||||
|
||||
## Status for master
|
||||
[](https://GitLab.com/pushrocks/taskbuffer/commits/master)
|
||||
[](https://GitLab.com/pushrocks/taskbuffer/commits/master)
|
||||
[](https://www.npmjs.com/package/taskbuffer)
|
||||
[](https://david-dm.org/pushrocks/taskbuffer)
|
||||
[](https://www.bithound.io/github/pushrocks/taskbuffer/master/dependencies/npm)
|
||||
[](https://www.bithound.io/github/pushrocks/taskbuffer)
|
||||
[](https://nodejs.org/dist/latest-v6.x/docs/api/)
|
||||
[](https://nodejs.org/dist/latest-v6.x/docs/api/)
|
||||
[](http://standardjs.com/)
|
||||
|
||||
## Install
|
||||
|
||||
```sh
|
||||
npm install taskbuffer --save
|
||||
```
|
||||
|
||||
## Concepts
|
||||
|
||||
### 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)
|
||||
* A Task can be buffered.
|
||||
That means it can be called multiple times in a very short time.
|
||||
However execution happens in line:
|
||||
meaning execution of the task's main function is on halt until the previous task call has finished.
|
||||
You can set bufferMax number, which is the max number of buffered task calls.
|
||||
Any additional calls will then be truncated
|
||||
* Task.trigger() and Task.triggerBuffered() always return a Promise
|
||||
which is fullfilled once the related task call has completed.
|
||||
* Task.triggered() is an Observable stream that emits events every time a task call is called and every time a call is completed.
|
||||
* Task is compatible to gulp streams.
|
||||
|
||||
### 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**.
|
||||
```javascript
|
||||
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",
|
||||
buffered: true, // optional
|
||||
bufferMax: 3, // optional, call qeues greater than this are truncated
|
||||
execDelay: 1000, // optional, time in ms to wait before executing task call
|
||||
taskFunction:() => {
|
||||
// do some stuff and return promise
|
||||
// pass on any data through promise resolution
|
||||
// Use TypeScript for better understanding and code completion
|
||||
}
|
||||
})
|
||||
```
|
||||
|
||||
For further information read the linked docs at the top of this README.
|
||||
|
||||
> MIT licensed | **©** [Lossless GmbH](https://lossless.gmbh)
|
||||
|
||||
[](https://push.rocks)
|
@ -1,5 +1,13 @@
|
||||
{
|
||||
"npmts":{
|
||||
"mode":"default"
|
||||
"mode":"default",
|
||||
"testConfig": {
|
||||
"parallel": false
|
||||
}
|
||||
},
|
||||
"npmci": {
|
||||
"globalNpmTools": [
|
||||
"npmts"
|
||||
]
|
||||
}
|
||||
}
|
38
package.json
38
package.json
@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "taskbuffer",
|
||||
"version": "1.0.1",
|
||||
"description": "Flexible task organization for gulp. TypeScript ready!",
|
||||
"version": "1.0.21",
|
||||
"description": "flexible task management. TypeScript ready!",
|
||||
"main": "dist/index.js",
|
||||
"typings": "dist/index.d.ts",
|
||||
"scripts": {
|
||||
@ -9,32 +9,34 @@
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/pushrocks/taskbuffer.git"
|
||||
"url": "git+https://gitlab.com/pushrocks/taskbuffer.git"
|
||||
},
|
||||
"keywords": [
|
||||
"gulp",
|
||||
"tasks",
|
||||
"watch",
|
||||
"buffer"
|
||||
"task",
|
||||
"buffer",
|
||||
"TypeScript",
|
||||
"push.rocks"
|
||||
],
|
||||
"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": {
|
||||
"@types/lodash": "^0.0.28",
|
||||
"@types/q": "^0.0.27",
|
||||
"beautylog": "^5.0.18",
|
||||
"lodash": "^4.14.1",
|
||||
"q": "^1.4.1",
|
||||
"rxjs": "^5.0.0-beta.10",
|
||||
"typings-global": "^1.0.6"
|
||||
"@types/cron": "^1.2.1",
|
||||
"@types/lodash": "4.x.x",
|
||||
"beautylog": "^6.1.10",
|
||||
"cron": "^1.2.1",
|
||||
"lik": "^1.0.38",
|
||||
"lodash": "^4.17.4",
|
||||
"rxjs": "^5.4.2",
|
||||
"smartdelay": "^1.0.3",
|
||||
"smartq": "^1.1.6",
|
||||
"typings-global": "^1.0.19"
|
||||
},
|
||||
"devDependencies": {
|
||||
"npmts-g": "^5.2.8",
|
||||
"should": "^10.0.0",
|
||||
"typings-test": "^1.0.1"
|
||||
"tapbundle": "^1.1.0"
|
||||
}
|
||||
}
|
||||
|
29
readme.md
Normal file
29
readme.md
Normal file
@ -0,0 +1,29 @@
|
||||
# taskbuffer
|
||||
flexible task management. TypeScript ready!
|
||||
|
||||
## Availabililty
|
||||
[](https://www.npmjs.com/package/taskbuffer)
|
||||
[](https://GitLab.com/pushrocks/taskbuffer)
|
||||
[](https://github.com/pushrocks/taskbuffer)
|
||||
[](https://pushrocks.gitlab.io/taskbuffer/)
|
||||
|
||||
## Status for master
|
||||
[](https://GitLab.com/pushrocks/taskbuffer/commits/master)
|
||||
[](https://GitLab.com/pushrocks/taskbuffer/commits/master)
|
||||
[](https://www.npmjs.com/package/taskbuffer)
|
||||
[](https://david-dm.org/pushrocks/taskbuffer)
|
||||
[](https://www.bithound.io/github/pushrocks/taskbuffer/master/dependencies/npm)
|
||||
[](https://www.bithound.io/github/pushrocks/taskbuffer)
|
||||
[](https://nodejs.org/dist/latest-v6.x/docs/api/)
|
||||
[](https://nodejs.org/dist/latest-v6.x/docs/api/)
|
||||
[](http://standardjs.com/)
|
||||
|
||||
## Usage
|
||||
Use TypeScript for best in class instellisense.
|
||||
|
||||
For further information read the linked docs at the top of this README.
|
||||
|
||||
> MIT licensed | **©** [Lossless GmbH](https://lossless.gmbh)
|
||||
| By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy.html)
|
||||
|
||||
[](https://push.rocks)
|
108
test/test.1.task.ts
Normal file
108
test/test.1.task.ts
Normal file
@ -0,0 +1,108 @@
|
||||
import { expect, tap } from 'tapbundle'
|
||||
import taskbuffer = require('../dist/index')
|
||||
|
||||
import * as q from 'smartq'
|
||||
import * as smartdelay from 'smartdelay'
|
||||
|
||||
// setup some testData to work with
|
||||
let testTask: taskbuffer.Task
|
||||
|
||||
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 test with
|
||||
let task1Counter = 0 // how often task 1 is being executed
|
||||
let task1 = new taskbuffer.Task({
|
||||
name: 'Task 1',
|
||||
taskFunction: () => {
|
||||
let done = q.defer()
|
||||
console.log('Task1 started')
|
||||
setTimeout(() => {
|
||||
task1Counter++
|
||||
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
|
||||
}
|
||||
})
|
||||
|
||||
tap.test('new Task() should return a new task', async () => {
|
||||
testTask = new taskbuffer.Task({ taskFunction: async () => { console.log('executed twice') }, preTask: testPreTask })
|
||||
})
|
||||
|
||||
tap.test('expect testTask to be an instance of Task', async () => {
|
||||
expect(testTask).to.be.instanceof(taskbuffer.Task)
|
||||
})
|
||||
|
||||
tap.test('expect testTask.idle is true', async () => {
|
||||
if (!testTask.idle) {
|
||||
throw new Error('testTask.idle is not true')
|
||||
}
|
||||
|
||||
})
|
||||
|
||||
tap.test('testTask.running should be of type boolean and initially false', async () => {
|
||||
expect(testTask.running).to.be.a('boolean')
|
||||
// tslint:disable-next-line:no-unused-expression
|
||||
expect(testTask.running).to.be.false
|
||||
})
|
||||
|
||||
tap.test('testTask.trigger() should return Promise', async () => {
|
||||
expect(testTask.trigger()).to.be.instanceof(Promise)
|
||||
})
|
||||
|
||||
tap.test('testTask.trigger() returned Promise should be fullfilled', async () => {
|
||||
await testTask.trigger()
|
||||
})
|
||||
|
||||
tap.test('expect to run a task without pre and afterTask errorless', async () => {
|
||||
let localTestTask = new taskbuffer.Task({ taskFunction: async () => { console.log('only once') } })
|
||||
await localTestTask.trigger()
|
||||
})
|
||||
|
||||
tap.test('expect task to run in buffered mode', async () => {
|
||||
let localTestTask = new taskbuffer.Task({
|
||||
taskFunction: async () => { await smartdelay.delayFor(3000) },
|
||||
buffered: true,
|
||||
bufferMax: 2
|
||||
})
|
||||
localTestTask.trigger()
|
||||
localTestTask.trigger()
|
||||
localTestTask.trigger()
|
||||
await localTestTask.trigger()
|
||||
})
|
||||
|
||||
tap.start()
|
48
test/test.2.taskchain.ts
Normal file
48
test/test.2.taskchain.ts
Normal file
@ -0,0 +1,48 @@
|
||||
import { expect, tap } from 'tapbundle'
|
||||
import taskbuffer = require('../dist/index')
|
||||
|
||||
import * as smartq from 'smartq'
|
||||
import * as smartdelay from 'smartdelay'
|
||||
|
||||
let task1Executed = false
|
||||
let task1 = new taskbuffer.Task({
|
||||
taskFunction: async () => {
|
||||
await smartdelay.delayFor(2000)
|
||||
task1Executed = true
|
||||
}
|
||||
})
|
||||
|
||||
let task2Executed = false
|
||||
let task2 = new taskbuffer.Task({
|
||||
taskFunction: async () => {
|
||||
await smartdelay.delayFor(2000)
|
||||
task2Executed = true
|
||||
}
|
||||
})
|
||||
|
||||
let task3Executed = false
|
||||
let task3 = new taskbuffer.Task({
|
||||
taskFunction: async () => {
|
||||
await smartdelay.delayFor(2000)
|
||||
task3Executed = true
|
||||
}
|
||||
})
|
||||
|
||||
tap.test('expect run tasks in sequence', async () => {
|
||||
let testTaskchain = new taskbuffer.Taskchain({
|
||||
name: 'Taskchain1',
|
||||
taskArray: [ task1, task2, task3 ]
|
||||
})
|
||||
let testPromise = testTaskchain.trigger()
|
||||
await smartdelay.delayFor(2100)
|
||||
// tslint:disable-next-line:no-unused-expression
|
||||
expect(task1Executed).to.be.true
|
||||
// tslint:disable-next-line:no-unused-expression
|
||||
expect(task2Executed).to.be.false
|
||||
await smartdelay.delayFor(2100)
|
||||
// tslint:disable-next-line:no-unused-expression
|
||||
expect(task2Executed).to.be.true
|
||||
await testPromise
|
||||
})
|
||||
|
||||
tap.start()
|
38
test/test.3.taskparallel.ts
Normal file
38
test/test.3.taskparallel.ts
Normal file
@ -0,0 +1,38 @@
|
||||
import { expect, tap } from 'tapbundle'
|
||||
import taskbuffer = require('../dist/index')
|
||||
|
||||
import * as smartq from 'smartq'
|
||||
import * as smartdelay from 'smartdelay'
|
||||
|
||||
let task1Executed = false
|
||||
let task1 = new taskbuffer.Task({
|
||||
taskFunction: async () => {
|
||||
await smartdelay.delayFor(2000)
|
||||
task1Executed = true
|
||||
}
|
||||
})
|
||||
|
||||
let task2Executed = false
|
||||
let task2 = new taskbuffer.Task({
|
||||
taskFunction: async () => {
|
||||
await smartdelay.delayFor(2000)
|
||||
task2Executed = true
|
||||
}
|
||||
})
|
||||
|
||||
let task3Executed = false
|
||||
let task3 = new taskbuffer.Task({
|
||||
taskFunction: async () => {
|
||||
await smartdelay.delayFor(2000)
|
||||
task3Executed = true
|
||||
}
|
||||
})
|
||||
|
||||
tap.test('expect run in Parallel', async () => {
|
||||
let testTaskparallel = new taskbuffer.Taskparallel({
|
||||
taskArray: [ task1, task2, task3 ]
|
||||
})
|
||||
await testTaskparallel.trigger()
|
||||
})
|
||||
|
||||
tap.start()
|
40
test/test.4.taskmanager.ts
Normal file
40
test/test.4.taskmanager.ts
Normal file
@ -0,0 +1,40 @@
|
||||
import { expect, tap } from 'tapbundle'
|
||||
import taskbuffer = require('../dist/index')
|
||||
|
||||
import * as smartq from 'smartq'
|
||||
import * as smartdelay from 'smartdelay'
|
||||
|
||||
let myTaskManager: taskbuffer.TaskManager
|
||||
let taskRunCounter = 0
|
||||
let taskDone = smartq.defer()
|
||||
|
||||
tap.test('should create an instance of TaskManager', async () => {
|
||||
myTaskManager = new taskbuffer.TaskManager()
|
||||
expect(myTaskManager).to.be.instanceof(taskbuffer.TaskManager)
|
||||
})
|
||||
|
||||
tap.test('should run the task as expected', async () => {
|
||||
let referenceBoolean = false
|
||||
myTaskManager.addTask(new taskbuffer.Task({
|
||||
name: 'myTask',
|
||||
taskFunction: async () => {
|
||||
console.log('Task executed!')
|
||||
referenceBoolean = true
|
||||
taskRunCounter++
|
||||
if (taskRunCounter === 10) {
|
||||
taskDone.resolve()
|
||||
}
|
||||
}
|
||||
}))
|
||||
await myTaskManager.triggerTaskByName('myTask')
|
||||
// tslint:disable-next-line:no-unused-expression
|
||||
expect(referenceBoolean).to.be.true
|
||||
})
|
||||
|
||||
tap.test('should schedule task', async () => {
|
||||
myTaskManager.scheduleTaskByName('myTask', '* * * * * *')
|
||||
await taskDone.promise
|
||||
myTaskManager.descheduleTaskByName('myTask')
|
||||
})
|
||||
|
||||
tap.start()
|
64
test/test.5.task.paramflow.ts
Normal file
64
test/test.5.task.paramflow.ts
Normal file
@ -0,0 +1,64 @@
|
||||
import { expect, tap } from 'tapbundle'
|
||||
import taskbuffer = require('../dist/index')
|
||||
|
||||
import * as q from 'smartq'
|
||||
import * as smartdelay from 'smartdelay'
|
||||
|
||||
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 ]
|
||||
})
|
||||
|
||||
tap.test('should let a value flow through a task', async () => {
|
||||
let result = await flowTask1.trigger(12)
|
||||
expect(result).to.equal(12)
|
||||
})
|
||||
|
||||
tap.test('expect values to flow between tasks', async () => {
|
||||
let result = await flowTask2.trigger(12)
|
||||
expect(result).to.equal(12)
|
||||
})
|
||||
|
||||
tap.test('expect values to flow between tasks when buffered', async () => {
|
||||
let result = await flowTaskBuffered.trigger(12)
|
||||
expect(result).to.equal(12)
|
||||
})
|
||||
|
||||
tap.test('expect values to flow between tasks in Taskchain', async () => {
|
||||
let result = await flowTask3.trigger(12)
|
||||
expect(result).to.equal(12)
|
||||
})
|
||||
|
||||
tap.start()
|
1
test/test.d.ts
vendored
1
test/test.d.ts
vendored
@ -1 +0,0 @@
|
||||
import "typings-test";
|
129
test/test.js
129
test/test.js
File diff suppressed because one or more lines are too long
130
test/test.ts
130
test/test.ts
@ -1,130 +0,0 @@
|
||||
import "typings-test";
|
||||
import taskbuffer = require("../dist/index");
|
||||
let should = require("should");
|
||||
import q = require("q")
|
||||
|
||||
// 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();
|
||||
});
|
||||
})
|
||||
})
|
||||
});
|
10
ts/index.ts
10
ts/index.ts
@ -1,7 +1,7 @@
|
||||
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";
|
||||
export {Task,ITaskFunction} from './taskbuffer.classes.task'
|
||||
export {Taskchain} from './taskbuffer.classes.taskchain'
|
||||
export {Taskparallel} from './taskbuffer.classes.taskparallel'
|
||||
export { TaskManager } from './taskbuffer.classes.taskmanager'
|
||||
|
||||
// import for naming only
|
||||
import "./taskbuffer.classes.helpers"
|
||||
import './taskbuffer.classes.helpers'
|
||||
|
@ -1,84 +1,160 @@
|
||||
import plugins = require("./taskbuffer.plugins");
|
||||
import {Task,ITaskFunction} from "./taskbuffer.classes.task";
|
||||
import plugins = require('./taskbuffer.plugins')
|
||||
import { Task, ITaskFunction } from './taskbuffer.classes.task'
|
||||
|
||||
export let emptyTaskFunction:ITaskFunction = function(){
|
||||
let done = plugins.Q.defer();
|
||||
done.resolve();
|
||||
return done.promise;
|
||||
};
|
||||
|
||||
export let isTask = function(taskArg):boolean{
|
||||
if(
|
||||
taskArg instanceof Task
|
||||
&& typeof taskArg.task === "function"
|
||||
){
|
||||
return true;
|
||||
} else {
|
||||
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 emptyTaskFunction: ITaskFunction = function (x) {
|
||||
let done = plugins.q.defer()
|
||||
done.resolve()
|
||||
return done.promise
|
||||
}
|
||||
|
||||
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){
|
||||
touchedTasksArray = optionsArg.touchedTasksArray;
|
||||
} else {
|
||||
touchedTasksArray = [];
|
||||
}
|
||||
touchedTasksArray.push(taskArg);
|
||||
localDeferred.promise
|
||||
.then(() =>{
|
||||
if(taskArg.preTask && !isTaskTouched(taskArg.preTask,touchedTasksArray)){
|
||||
return runTask(taskArg.preTask,{touchedTasksArray:touchedTasksArray})
|
||||
} else {
|
||||
let done2 = plugins.Q.defer();
|
||||
done2.resolve();
|
||||
return done2.promise;
|
||||
}
|
||||
})
|
||||
.then(() => {
|
||||
return taskArg.task();
|
||||
})
|
||||
.then(() => {
|
||||
if(taskArg.afterTask && !isTaskTouched(taskArg.afterTask,touchedTasksArray)){
|
||||
return runTask(taskArg.afterTask,{touchedTasksArray:touchedTasksArray})
|
||||
} else {
|
||||
let done2 = plugins.Q.defer();
|
||||
done2.resolve();
|
||||
return done2.promise;
|
||||
}
|
||||
})
|
||||
.then(() => {
|
||||
done.resolve();
|
||||
});
|
||||
localDeferred.resolve();
|
||||
return done.promise;
|
||||
};
|
||||
export let isTask = function (taskArg: Task): boolean {
|
||||
if (
|
||||
taskArg instanceof Task
|
||||
&& typeof taskArg.taskFunction === 'function'
|
||||
) {
|
||||
return true
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
export let runBufferedTask = (taskArg:Task) => {
|
||||
let recursiveBufferRunner = () => {
|
||||
if(taskArg.bufferCounter > 0){
|
||||
taskArg.runningBuffered = true;
|
||||
taskArg.bufferCounter--;
|
||||
runTask(taskArg)
|
||||
.then(recursiveBufferRunner);
|
||||
} else {
|
||||
taskArg.runningBuffered = 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 = async (taskArg: Task, optionsArg: { x?, touchedTasksArray?: Task[] }) => {
|
||||
let done = plugins.q.defer()
|
||||
|
||||
// pay respect to execDelay
|
||||
if (taskArg.execDelay) {
|
||||
await plugins.smartdelay.delayFor(taskArg.execDelay)
|
||||
}
|
||||
|
||||
// set running params
|
||||
taskArg.running = true
|
||||
|
||||
done.promise.then(async () => { 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, { x: x, touchedTasksArray: touchedTasksArray })
|
||||
} else {
|
||||
let done2 = plugins.q.defer()
|
||||
done2.resolve(x)
|
||||
return done2.promise
|
||||
}
|
||||
})
|
||||
.then(x => {
|
||||
return taskArg.taskFunction(x)
|
||||
})
|
||||
.then(x => {
|
||||
if (taskArg.afterTask && !isTaskTouched(taskArg.afterTask, touchedTasksArray)) {
|
||||
return runTask(taskArg.afterTask, { x: x, touchedTasksArray: touchedTasksArray })
|
||||
} else {
|
||||
let done2 = plugins.q.defer()
|
||||
done2.resolve(x)
|
||||
return done2.promise
|
||||
}
|
||||
})
|
||||
.then(x => {
|
||||
done.resolve(x)
|
||||
}).catch((err) => {
|
||||
console.log(err)
|
||||
})
|
||||
localDeferred.resolve()
|
||||
return await done.promise
|
||||
}
|
||||
|
||||
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
|
||||
running: boolean = false
|
||||
constructor(taskArg: Task) {
|
||||
this.task = taskArg
|
||||
}
|
||||
|
||||
trigger (x): Promise<any> {
|
||||
if (!(this.bufferCounter >= this.task.bufferMax)) {
|
||||
this.bufferCounter++
|
||||
}
|
||||
let returnPromise: Promise<any> = this.task.cycleCounter.getPromiseForCycle(this.bufferCounter + 1)
|
||||
if (!this.running) {
|
||||
this._run(x)
|
||||
}
|
||||
return returnPromise
|
||||
}
|
||||
|
||||
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)
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,89 +1,106 @@
|
||||
import * as plugins from "./taskbuffer.plugins"
|
||||
import * as helpers from "./taskbuffer.classes.helpers"
|
||||
|
||||
import * as plugins from './taskbuffer.plugins'
|
||||
import * as helpers from './taskbuffer.classes.helpers'
|
||||
|
||||
export interface ITaskFunction {
|
||||
():PromiseLike<any>;
|
||||
(x?: any): PromiseLike<any>
|
||||
}
|
||||
|
||||
export class Task {
|
||||
name:string;
|
||||
task:any;
|
||||
running:boolean = false;
|
||||
runningBuffered:boolean = false;
|
||||
idle:boolean = true;
|
||||
buffered:boolean = false;
|
||||
bufferCounter:number;
|
||||
bufferMax:number = 1;
|
||||
private _counterTriggerAbsolute:number = 0;
|
||||
private _state:string;
|
||||
preTask:Task;
|
||||
afterTask:Task;
|
||||
// man datory properties
|
||||
name: string
|
||||
taskFunction: ITaskFunction
|
||||
buffered: boolean
|
||||
|
||||
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.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()
|
||||
.then(done.resolve);
|
||||
}
|
||||
else {
|
||||
this.triggerUnBuffered()
|
||||
.then(done.resolve);
|
||||
};
|
||||
return done.promise;
|
||||
};
|
||||
bufferMax: number
|
||||
execDelay: number
|
||||
|
||||
/**
|
||||
* trigger task unbuffered.
|
||||
*/
|
||||
triggerUnBuffered(){
|
||||
return helpers.runTask(this);
|
||||
}
|
||||
|
||||
/**
|
||||
* trigger task buffered.
|
||||
*/
|
||||
triggerBuffered(){
|
||||
var done = plugins.Q.defer();
|
||||
if(!(this.bufferCounter >= this.bufferMax)){
|
||||
this.bufferCounter++
|
||||
};
|
||||
if(!this.runningBuffered){
|
||||
helpers.runBufferedTask(this);
|
||||
};
|
||||
return done.promise;
|
||||
}
|
||||
// tasks to run before and after
|
||||
preTask: Task
|
||||
afterTask: Task
|
||||
|
||||
get state():string {
|
||||
return this._state;
|
||||
// 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: {
|
||||
/**
|
||||
* the task function to run, must return promise
|
||||
*/
|
||||
taskFunction: ITaskFunction
|
||||
/**
|
||||
* any other task to run before
|
||||
*/
|
||||
preTask?: Task
|
||||
/**
|
||||
* any other task to run after
|
||||
*/
|
||||
afterTask?: Task
|
||||
/**
|
||||
* wether this task should run buffered
|
||||
*/
|
||||
buffered?: boolean
|
||||
/**
|
||||
* the maximum buffer
|
||||
*/
|
||||
bufferMax?: number
|
||||
/**
|
||||
* the execution delay, before the task is executed
|
||||
* only makes sense when running in buffered mode
|
||||
*/
|
||||
execDelay?: number
|
||||
/**
|
||||
* the name of the task
|
||||
*/
|
||||
name?: string
|
||||
}) {
|
||||
this.taskFunction = optionsArg.taskFunction
|
||||
this.preTask = optionsArg.preTask
|
||||
this.afterTask = optionsArg.afterTask
|
||||
this.idle = !this.running
|
||||
this.buffered = optionsArg.buffered
|
||||
this.bufferMax = optionsArg.bufferMax
|
||||
this.execDelay = optionsArg.execDelay
|
||||
this.name = optionsArg.name
|
||||
}
|
||||
|
||||
/**
|
||||
* trigger the task. Will trigger buffered if this.buffered is true
|
||||
*/
|
||||
trigger(x?): Promise<any> {
|
||||
if (this.buffered) {
|
||||
return this.triggerBuffered(x)
|
||||
} else {
|
||||
return this.triggerUnBuffered(x)
|
||||
}
|
||||
set state(stateArg:string){
|
||||
if (stateArg == "locked"){
|
||||
this._state = "locked";
|
||||
} else {
|
||||
plugins.beautylog.error("state type " + stateArg.blue + " could not be set");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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 {
|
||||
return this._state
|
||||
}
|
||||
|
||||
set state(stateArg: string) {
|
||||
if (stateArg === 'locked') {
|
||||
this._state = 'locked'
|
||||
} else {
|
||||
plugins.beautylog.error('state type ' + stateArg + ' could not be set')
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,62 +1,63 @@
|
||||
import * as plugins from "./taskbuffer.plugins";
|
||||
import {Task} from "./taskbuffer.classes.task";
|
||||
import helpers = require("./taskbuffer.classes.helpers");
|
||||
// TaskChain chains tasks
|
||||
// and extends Task
|
||||
|
||||
import * as plugins from './taskbuffer.plugins'
|
||||
import { Task } from './taskbuffer.classes.task'
|
||||
import helpers = require('./taskbuffer.classes.helpers')
|
||||
|
||||
export class Taskchain extends Task {
|
||||
taskArray:Task[];
|
||||
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;
|
||||
}
|
||||
taskArray: Task[]
|
||||
private _oraObject
|
||||
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)
|
||||
}
|
||||
);
|
||||
super(options);
|
||||
this.taskArray = optionsArg.taskArray;
|
||||
this._oraObject = new plugins.beautylog.Ora("Taskchain idle","blue");
|
||||
if(optionsArg.log === true){
|
||||
this._oraObject.start();
|
||||
};
|
||||
}
|
||||
iterateTasks(x)
|
||||
return done.promise
|
||||
}
|
||||
}
|
||||
)
|
||||
super(options)
|
||||
this.taskArray = optionsArg.taskArray
|
||||
this._oraObject = plugins.beautylog.ora
|
||||
if (optionsArg.log === true) {
|
||||
this._oraObject.start()
|
||||
}
|
||||
addTask(taskArg:Task){
|
||||
this.taskArray.push(taskArg);
|
||||
};
|
||||
removeTask(taskArg:Task){
|
||||
//TODO
|
||||
};
|
||||
shiftTask(){
|
||||
|
||||
};
|
||||
trigger(){
|
||||
this._oraObject.start(this.name + " running...");
|
||||
return helpers.runTask(this);
|
||||
}
|
||||
};
|
||||
}
|
||||
addTask (taskArg: Task) {
|
||||
this.taskArray.push(taskArg)
|
||||
}
|
||||
removeTask (taskArg: Task) {
|
||||
// TODO:
|
||||
}
|
||||
shiftTask () {
|
||||
// TODO:
|
||||
}
|
||||
}
|
||||
|
97
ts/taskbuffer.classes.taskmanager.ts
Normal file
97
ts/taskbuffer.classes.taskmanager.ts
Normal file
@ -0,0 +1,97 @@
|
||||
import * as plugins from './taskbuffer.plugins'
|
||||
import { Task } from './taskbuffer.classes.task'
|
||||
|
||||
// interfaces
|
||||
import { Objectmap } from 'lik'
|
||||
|
||||
export class TaskManager {
|
||||
taskMap = new plugins.lik.Objectmap<Task>()
|
||||
private cronJobMap = new plugins.lik.Objectmap<ICronJob>()
|
||||
constructor () {
|
||||
// nothing here
|
||||
}
|
||||
|
||||
/**
|
||||
* checks if a task is already present
|
||||
* @param taskNameArg
|
||||
*/
|
||||
getTaskByName (taskNameArg): Task {
|
||||
return this.taskMap.find((itemArg) => {
|
||||
return itemArg.name === taskNameArg
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* adds a Task to the TaskManager
|
||||
* @param taskArg
|
||||
*/
|
||||
addTask (taskArg: Task): void {
|
||||
if (!taskArg.name) {
|
||||
throw new Error('taskArg needs a name to be added to taskManager')
|
||||
}
|
||||
this.taskMap.add(taskArg)
|
||||
}
|
||||
|
||||
/**
|
||||
* adds and schedules a task at once
|
||||
* @param taskArg
|
||||
* @param cronStringArg
|
||||
*/
|
||||
addAndScheduleTask (taskArg: Task, cronStringArg: string) {
|
||||
this.addTask(taskArg)
|
||||
let taskName = taskArg.name
|
||||
this.scheduleTaskByName(taskName, cronStringArg)
|
||||
}
|
||||
|
||||
/**
|
||||
* triggers a task in the TaskManagerByName
|
||||
* @param taskNameArg
|
||||
*/
|
||||
triggerTaskByName (taskNameArg: string): Promise<any> {
|
||||
let taskToTrigger = this.getTaskByName(taskNameArg)
|
||||
if (!taskToTrigger) {
|
||||
throw new Error(`There is no task with the name of ${taskNameArg}`)
|
||||
}
|
||||
return taskToTrigger.trigger()
|
||||
}
|
||||
|
||||
/**
|
||||
* schedules the task by name
|
||||
* @param taskNameArg
|
||||
*/
|
||||
scheduleTaskByName (taskNameArg: string, cronStringArg: string) {
|
||||
let taskToSchedule = this.getTaskByName(taskNameArg)
|
||||
let job = new plugins.cron.CronJob({
|
||||
cronTime: cronStringArg,
|
||||
onTick: () => {
|
||||
this.triggerTaskByName(taskNameArg)
|
||||
},
|
||||
start: true
|
||||
})
|
||||
this.cronJobMap.add({
|
||||
taskNameArg: taskToSchedule.name,
|
||||
cronString: cronStringArg,
|
||||
job: job
|
||||
})
|
||||
}
|
||||
|
||||
descheduleTaskByName (taskNameArg: string) {
|
||||
let descheduledCron = this.cronJobMap.findOneAndRemove((itemArg) => {
|
||||
return itemArg.taskNameArg === taskNameArg
|
||||
})
|
||||
descheduledCron.job.stop()
|
||||
}
|
||||
/**
|
||||
* returns all schedules of a specific task
|
||||
* @param taskNameArg
|
||||
*/
|
||||
getSchedulesForTaskName (taskNameArg: string) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
export interface ICronJob {
|
||||
cronString: string
|
||||
taskNameArg: string
|
||||
job: any
|
||||
}
|
@ -1,29 +1,28 @@
|
||||
import * as plugins from "./taskbuffer.plugins"
|
||||
import * as helpers from "./taskbuffer.classes.helpers"
|
||||
import { Task } from "./taskbuffer.classes.task"
|
||||
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;
|
||||
}
|
||||
taskArray: Task[]
|
||||
constructor (optionsArg: {
|
||||
taskArray: Task[]
|
||||
}) {
|
||||
let options = plugins.lodash.merge(
|
||||
optionsArg,
|
||||
{
|
||||
taskFunction: () => {
|
||||
let done = plugins.q.defer()
|
||||
let promiseArray: Promise<any>[] = [] // stores promises of all tasks, since they run in parallel
|
||||
this.taskArray.forEach(function (taskArg) {
|
||||
promiseArray.push(taskArg.trigger())
|
||||
})
|
||||
Promise.all(promiseArray)
|
||||
.then(done.resolve)
|
||||
return done.promise
|
||||
}
|
||||
}
|
||||
)
|
||||
super(options)
|
||||
this.taskArray = optionsArg.taskArray
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,6 +0,0 @@
|
||||
import * as plugins from "./taskbuffer.plugins"
|
||||
import * as helpers from "./taskbuffer.classes.helpers"
|
||||
|
||||
export class Taskspace {
|
||||
|
||||
}
|
@ -1,5 +1,18 @@
|
||||
import "typings-global"
|
||||
export import beautylog = require("beautylog");
|
||||
export import Q = require("q");
|
||||
export import lodash= require("lodash");
|
||||
export import rxjs = require("rxjs");
|
||||
import 'typings-global'
|
||||
import * as beautylog from 'beautylog'
|
||||
let cron = require('cron')
|
||||
import * as lik from 'lik'
|
||||
import * as lodash from 'lodash'
|
||||
import * as rxjs from 'rxjs'
|
||||
import * as q from 'smartq'
|
||||
import * as smartdelay from 'smartdelay'
|
||||
|
||||
export {
|
||||
beautylog,
|
||||
cron,
|
||||
lik,
|
||||
lodash,
|
||||
rxjs,
|
||||
q,
|
||||
smartdelay
|
||||
}
|
||||
|
3
tslint.json
Normal file
3
tslint.json
Normal file
@ -0,0 +1,3 @@
|
||||
{
|
||||
"extends": "tslint-config-standard"
|
||||
}
|
546
yarn.lock
Normal file
546
yarn.lock
Normal file
@ -0,0 +1,546 @@
|
||||
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
||||
# yarn lockfile v1
|
||||
|
||||
|
||||
"@types/chai-as-promised@0.0.29":
|
||||
version "0.0.29"
|
||||
resolved "https://registry.yarnpkg.com/@types/chai-as-promised/-/chai-as-promised-0.0.29.tgz#43d52892aa998e185a3de3e2477edb8573be1d77"
|
||||
dependencies:
|
||||
"@types/chai" "*"
|
||||
"@types/promises-a-plus" "*"
|
||||
|
||||
"@types/chai-string@^1.1.30":
|
||||
version "1.1.30"
|
||||
resolved "https://registry.yarnpkg.com/@types/chai-string/-/chai-string-1.1.30.tgz#4d8744b31a5a2295fc01c981ed1e2d4c8a070f0a"
|
||||
dependencies:
|
||||
"@types/chai" "*"
|
||||
|
||||
"@types/chai@*":
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.0.1.tgz#37fea779617cfec3fd2b19a0247e8bbdd5133bf6"
|
||||
|
||||
"@types/chai@^3.4.35":
|
||||
version "3.5.2"
|
||||
resolved "https://registry.yarnpkg.com/@types/chai/-/chai-3.5.2.tgz#c11cd2817d3a401b7ba0f5a420f35c56139b1c1e"
|
||||
|
||||
"@types/cron@^1.2.1":
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/cron/-/cron-1.2.1.tgz#95c1e432d6106ca34c92f0743638bc786c073faa"
|
||||
|
||||
"@types/lodash@4.x.x", "@types/lodash@^4.14.55", "@types/lodash@^4.14.67":
|
||||
version "4.14.68"
|
||||
resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.68.tgz#754fbab68bd2bbb69547dc8ce7574f7012eed7f6"
|
||||
|
||||
"@types/minimatch@2.x.x":
|
||||
version "2.0.29"
|
||||
resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-2.0.29.tgz#5002e14f75e2d71e564281df0431c8c1b4a2a36a"
|
||||
|
||||
"@types/node@*":
|
||||
version "8.0.9"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.9.tgz#19f44c3b6cb8a70d261d366f73650e3e3891ab2d"
|
||||
|
||||
"@types/promises-a-plus@*":
|
||||
version "0.0.27"
|
||||
resolved "https://registry.yarnpkg.com/@types/promises-a-plus/-/promises-a-plus-0.0.27.tgz#c64651134614c84b8f5d7114ce8901d36a609780"
|
||||
|
||||
"@types/q@1.x.x":
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/@types/q/-/q-1.0.2.tgz#41f0b0f6ae0eeed3a51b003e2e08cba5525b74f6"
|
||||
|
||||
"@types/shelljs@^0.7.2":
|
||||
version "0.7.2"
|
||||
resolved "https://registry.yarnpkg.com/@types/shelljs/-/shelljs-0.7.2.tgz#c2bdb3fe80cd7a3da08750ca898ae44c589671f3"
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/which@^1.0.28":
|
||||
version "1.0.28"
|
||||
resolved "https://registry.yarnpkg.com/@types/which/-/which-1.0.28.tgz#016e387629b8817bed653fe32eab5d11279c8df6"
|
||||
|
||||
ansi-256-colors@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/ansi-256-colors/-/ansi-256-colors-1.1.0.tgz#910de50efcc7c09e3d82f2f87abd6b700c18818a"
|
||||
|
||||
ansi-regex@^2.0.0:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
|
||||
|
||||
ansi-styles@^2.2.1:
|
||||
version "2.2.1"
|
||||
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
|
||||
|
||||
assertion-error@^1.0.1:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.0.2.tgz#13ca515d86206da0bac66e834dd397d87581094c"
|
||||
|
||||
balanced-match@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
|
||||
|
||||
beautycolor@^1.0.7:
|
||||
version "1.0.7"
|
||||
resolved "https://registry.yarnpkg.com/beautycolor/-/beautycolor-1.0.7.tgz#a4715738ac4c8221371e9cbeb5a6cc6d11ecbf7c"
|
||||
dependencies:
|
||||
ansi-256-colors "^1.1.0"
|
||||
typings-global "^1.0.14"
|
||||
|
||||
beautylog@^6.1.10:
|
||||
version "6.1.10"
|
||||
resolved "https://registry.yarnpkg.com/beautylog/-/beautylog-6.1.10.tgz#9c27e566937684cb689f9372d98cfa5415d50b72"
|
||||
dependencies:
|
||||
"@types/lodash" "^4.14.55"
|
||||
beautycolor "^1.0.7"
|
||||
figlet "^1.2.0"
|
||||
lodash "^4.17.4"
|
||||
ora "^1.1.0"
|
||||
smartenv "^2.0.0"
|
||||
smartq "^1.1.1"
|
||||
typings-global "^1.0.14"
|
||||
|
||||
bindings@^1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.2.1.tgz#14ad6113812d2d37d72e67b4cacb4bb726505f11"
|
||||
|
||||
brace-expansion@^1.1.7:
|
||||
version "1.1.8"
|
||||
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292"
|
||||
dependencies:
|
||||
balanced-match "^1.0.0"
|
||||
concat-map "0.0.1"
|
||||
|
||||
chai-as-promised@^6.0.0:
|
||||
version "6.0.0"
|
||||
resolved "https://registry.yarnpkg.com/chai-as-promised/-/chai-as-promised-6.0.0.tgz#1a02a433a6f24dafac63b9c96fa1684db1aa8da6"
|
||||
dependencies:
|
||||
check-error "^1.0.2"
|
||||
|
||||
chai-string@^1.3.0:
|
||||
version "1.4.0"
|
||||
resolved "https://registry.yarnpkg.com/chai-string/-/chai-string-1.4.0.tgz#359140c051d36a4e4b1a5fc6b910152f438a8d49"
|
||||
|
||||
chai@^3.5.0:
|
||||
version "3.5.0"
|
||||
resolved "https://registry.yarnpkg.com/chai/-/chai-3.5.0.tgz#4d02637b067fe958bdbfdd3a40ec56fef7373247"
|
||||
dependencies:
|
||||
assertion-error "^1.0.1"
|
||||
deep-eql "^0.1.3"
|
||||
type-detect "^1.0.0"
|
||||
|
||||
chalk@^1.0.0, chalk@^1.1.1:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
|
||||
dependencies:
|
||||
ansi-styles "^2.2.1"
|
||||
escape-string-regexp "^1.0.2"
|
||||
has-ansi "^2.0.0"
|
||||
strip-ansi "^3.0.0"
|
||||
supports-color "^2.0.0"
|
||||
|
||||
check-error@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82"
|
||||
|
||||
cli-cursor@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
|
||||
dependencies:
|
||||
restore-cursor "^2.0.0"
|
||||
|
||||
cli-spinners@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-1.0.0.tgz#ef987ed3d48391ac3dab9180b406a742180d6e6a"
|
||||
|
||||
concat-map@0.0.1:
|
||||
version "0.0.1"
|
||||
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
|
||||
|
||||
cron@^1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/cron/-/cron-1.2.1.tgz#3a86c09b41b8f261ac863a7cc85ea4735857eab2"
|
||||
dependencies:
|
||||
moment-timezone "^0.5.x"
|
||||
|
||||
deep-eql@^0.1.3:
|
||||
version "0.1.3"
|
||||
resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-0.1.3.tgz#ef558acab8de25206cd713906d74e56930eb69f2"
|
||||
dependencies:
|
||||
type-detect "0.1.1"
|
||||
|
||||
define-properties@^1.1.2:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94"
|
||||
dependencies:
|
||||
foreach "^2.0.5"
|
||||
object-keys "^1.0.8"
|
||||
|
||||
early@^2.1.1:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/early/-/early-2.1.1.tgz#841e23254ea5dc54d8afaeee82f5ab65c00ee23c"
|
||||
dependencies:
|
||||
beautycolor "^1.0.7"
|
||||
smartq "^1.1.1"
|
||||
typings-global "^1.0.16"
|
||||
|
||||
es-abstract@^1.5.1:
|
||||
version "1.7.0"
|
||||
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.7.0.tgz#dfade774e01bfcd97f96180298c449c8623fb94c"
|
||||
dependencies:
|
||||
es-to-primitive "^1.1.1"
|
||||
function-bind "^1.1.0"
|
||||
is-callable "^1.1.3"
|
||||
is-regex "^1.0.3"
|
||||
|
||||
es-to-primitive@^1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d"
|
||||
dependencies:
|
||||
is-callable "^1.1.1"
|
||||
is-date-object "^1.0.1"
|
||||
is-symbol "^1.0.1"
|
||||
|
||||
es6-error@^4.0.2:
|
||||
version "4.0.2"
|
||||
resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.0.2.tgz#eec5c726eacef51b7f6b73c20db6e1b13b069c98"
|
||||
|
||||
escape-string-regexp@^1.0.2:
|
||||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
|
||||
|
||||
figlet@^1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/figlet/-/figlet-1.2.0.tgz#6c46537378fab649146b5a6143dda019b430b410"
|
||||
|
||||
foreach@^2.0.5:
|
||||
version "2.0.5"
|
||||
resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99"
|
||||
|
||||
fs.realpath@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
|
||||
|
||||
function-bind@^1.0.2, function-bind@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771"
|
||||
|
||||
glob@^7.0.0:
|
||||
version "7.1.2"
|
||||
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
|
||||
dependencies:
|
||||
fs.realpath "^1.0.0"
|
||||
inflight "^1.0.4"
|
||||
inherits "2"
|
||||
minimatch "^3.0.4"
|
||||
once "^1.3.0"
|
||||
path-is-absolute "^1.0.0"
|
||||
|
||||
has-ansi@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
|
||||
dependencies:
|
||||
ansi-regex "^2.0.0"
|
||||
|
||||
has@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28"
|
||||
dependencies:
|
||||
function-bind "^1.0.2"
|
||||
|
||||
inflight@^1.0.4:
|
||||
version "1.0.6"
|
||||
resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
|
||||
dependencies:
|
||||
once "^1.3.0"
|
||||
wrappy "1"
|
||||
|
||||
inherits@2:
|
||||
version "2.0.3"
|
||||
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
|
||||
|
||||
interpret@^1.0.0:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.3.tgz#cbc35c62eeee73f19ab7b10a801511401afc0f90"
|
||||
|
||||
is-callable@^1.1.1, is-callable@^1.1.3:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2"
|
||||
|
||||
is-date-object@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16"
|
||||
|
||||
is-regex@^1.0.3:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491"
|
||||
dependencies:
|
||||
has "^1.0.1"
|
||||
|
||||
is-symbol@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572"
|
||||
|
||||
isexe@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
|
||||
|
||||
leakage@^0.3.0:
|
||||
version "0.3.0"
|
||||
resolved "https://registry.yarnpkg.com/leakage/-/leakage-0.3.0.tgz#15d698abdc76bbc6439601f4f3020e77e2d50c39"
|
||||
dependencies:
|
||||
es6-error "^4.0.2"
|
||||
left-pad "^1.1.3"
|
||||
memwatch-next "^0.3.0"
|
||||
minimist "^1.2.0"
|
||||
pretty-bytes "^4.0.2"
|
||||
|
||||
left-pad@^1.1.3:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.1.3.tgz#612f61c033f3a9e08e939f1caebeea41b6f3199a"
|
||||
|
||||
lik@^1.0.38:
|
||||
version "1.0.38"
|
||||
resolved "https://registry.yarnpkg.com/lik/-/lik-1.0.38.tgz#ccff0abd3d9236a5e4b7d80d514c5c210f18469b"
|
||||
dependencies:
|
||||
"@types/lodash" "^4.14.67"
|
||||
"@types/minimatch" "2.x.x"
|
||||
"@types/q" "1.x.x"
|
||||
lodash "^4.17.4"
|
||||
minimatch "^3.0.4"
|
||||
q "^1.5.0"
|
||||
rxjs "^5.4.1"
|
||||
smartq "^1.1.1"
|
||||
typings-global "^1.0.19"
|
||||
|
||||
lodash@^4.17.4:
|
||||
version "4.17.4"
|
||||
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
|
||||
|
||||
log-symbols@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18"
|
||||
dependencies:
|
||||
chalk "^1.0.0"
|
||||
|
||||
memwatch-next@^0.3.0:
|
||||
version "0.3.0"
|
||||
resolved "https://registry.yarnpkg.com/memwatch-next/-/memwatch-next-0.3.0.tgz#2111050f9a906e0aa2d72a4ec0f0089c78726f8f"
|
||||
dependencies:
|
||||
bindings "^1.2.1"
|
||||
nan "^2.3.2"
|
||||
|
||||
mimic-fn@^1.0.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18"
|
||||
|
||||
minimatch@^3.0.4:
|
||||
version "3.0.4"
|
||||
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
|
||||
dependencies:
|
||||
brace-expansion "^1.1.7"
|
||||
|
||||
minimist@^1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
|
||||
|
||||
moment-timezone@^0.5.x:
|
||||
version "0.5.13"
|
||||
resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.13.tgz#99ce5c7d827262eb0f1f702044177f60745d7b90"
|
||||
dependencies:
|
||||
moment ">= 2.9.0"
|
||||
|
||||
"moment@>= 2.9.0":
|
||||
version "2.18.1"
|
||||
resolved "https://registry.yarnpkg.com/moment/-/moment-2.18.1.tgz#c36193dd3ce1c2eed2adb7c802dbbc77a81b1c0f"
|
||||
|
||||
nan@^2.3.2:
|
||||
version "2.6.2"
|
||||
resolved "https://registry.yarnpkg.com/nan/-/nan-2.6.2.tgz#e4ff34e6c95fdfb5aecc08de6596f43605a7db45"
|
||||
|
||||
object-keys@^1.0.8:
|
||||
version "1.0.11"
|
||||
resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d"
|
||||
|
||||
object.getownpropertydescriptors@^2.0.3:
|
||||
version "2.0.3"
|
||||
resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16"
|
||||
dependencies:
|
||||
define-properties "^1.1.2"
|
||||
es-abstract "^1.5.1"
|
||||
|
||||
once@^1.3.0:
|
||||
version "1.4.0"
|
||||
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
|
||||
dependencies:
|
||||
wrappy "1"
|
||||
|
||||
onetime@^2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
|
||||
dependencies:
|
||||
mimic-fn "^1.0.0"
|
||||
|
||||
ora@^1.1.0:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/ora/-/ora-1.3.0.tgz#80078dd2b92a934af66a3ad72a5b910694ede51a"
|
||||
dependencies:
|
||||
chalk "^1.1.1"
|
||||
cli-cursor "^2.1.0"
|
||||
cli-spinners "^1.0.0"
|
||||
log-symbols "^1.0.2"
|
||||
|
||||
path-is-absolute@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
|
||||
|
||||
path-parse@^1.0.5:
|
||||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1"
|
||||
|
||||
pretty-bytes@^4.0.2:
|
||||
version "4.0.2"
|
||||
resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-4.0.2.tgz#b2bf82e7350d65c6c33aa95aaa5a4f6327f61cd9"
|
||||
|
||||
q@^1.5.0:
|
||||
version "1.5.0"
|
||||
resolved "https://registry.yarnpkg.com/q/-/q-1.5.0.tgz#dd01bac9d06d30e6f219aecb8253ee9ebdc308f1"
|
||||
|
||||
rechoir@^0.6.2:
|
||||
version "0.6.2"
|
||||
resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"
|
||||
dependencies:
|
||||
resolve "^1.1.6"
|
||||
|
||||
resolve@^1.1.6:
|
||||
version "1.3.3"
|
||||
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.3.tgz#655907c3469a8680dc2de3a275a8fdd69691f0e5"
|
||||
dependencies:
|
||||
path-parse "^1.0.5"
|
||||
|
||||
restore-cursor@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
|
||||
dependencies:
|
||||
onetime "^2.0.0"
|
||||
signal-exit "^3.0.2"
|
||||
|
||||
rxjs@^5.4.1, rxjs@^5.4.2:
|
||||
version "5.4.2"
|
||||
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.4.2.tgz#2a3236fcbf03df57bae06fd6972fd99e5c08fcf7"
|
||||
dependencies:
|
||||
symbol-observable "^1.0.1"
|
||||
|
||||
semver@^5.3.0:
|
||||
version "5.3.0"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
|
||||
|
||||
shelljs@^0.7.8:
|
||||
version "0.7.8"
|
||||
resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.8.tgz#decbcf874b0d1e5fb72e14b164a9683048e9acb3"
|
||||
dependencies:
|
||||
glob "^7.0.0"
|
||||
interpret "^1.0.0"
|
||||
rechoir "^0.6.2"
|
||||
|
||||
signal-exit@^3.0.2:
|
||||
version "3.0.2"
|
||||
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
|
||||
|
||||
smartchai@^1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/smartchai/-/smartchai-1.0.3.tgz#de6d010bb8b5aef24cb70b31a5f5334e8c41b72f"
|
||||
dependencies:
|
||||
"@types/chai" "^3.4.35"
|
||||
"@types/chai-as-promised" "0.0.29"
|
||||
"@types/chai-string" "^1.1.30"
|
||||
chai "^3.5.0"
|
||||
chai-as-promised "^6.0.0"
|
||||
chai-string "^1.3.0"
|
||||
|
||||
smartdelay@^1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/smartdelay/-/smartdelay-1.0.3.tgz#5fd44dad77262d110702f0293efa80c072cfb579"
|
||||
dependencies:
|
||||
smartq "^1.1.1"
|
||||
typings-global "^1.0.16"
|
||||
|
||||
smartenv@^2.0.0:
|
||||
version "2.0.6"
|
||||
resolved "https://registry.yarnpkg.com/smartenv/-/smartenv-2.0.6.tgz#b38c679b0c151b9af548f68c3a072c29d1417e8d"
|
||||
dependencies:
|
||||
lodash "^4.17.4"
|
||||
smartq "^1.1.1"
|
||||
typings-global "^1.0.14"
|
||||
|
||||
smartq@^1.1.1, smartq@^1.1.6:
|
||||
version "1.1.6"
|
||||
resolved "https://registry.yarnpkg.com/smartq/-/smartq-1.1.6.tgz#0c1ff4336d95e95b4f1fdd8ccd7e2c5a323b8412"
|
||||
dependencies:
|
||||
typings-global "^1.0.19"
|
||||
util.promisify "^1.0.0"
|
||||
|
||||
smartshell@^1.0.6:
|
||||
version "1.0.8"
|
||||
resolved "https://registry.yarnpkg.com/smartshell/-/smartshell-1.0.8.tgz#1535756c0fe8069f7e6da1e3f9cb6c8f77094e42"
|
||||
dependencies:
|
||||
"@types/shelljs" "^0.7.2"
|
||||
"@types/which" "^1.0.28"
|
||||
shelljs "^0.7.8"
|
||||
smartq "^1.1.1"
|
||||
typings-global "^1.0.19"
|
||||
which "^1.2.14"
|
||||
|
||||
strip-ansi@^3.0.0:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
|
||||
dependencies:
|
||||
ansi-regex "^2.0.0"
|
||||
|
||||
supports-color@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
|
||||
|
||||
symbol-observable@^1.0.1:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d"
|
||||
|
||||
tapbundle@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/tapbundle/-/tapbundle-1.1.0.tgz#e0547f683ae36260f639ecd7435df95f0af01683"
|
||||
dependencies:
|
||||
early "^2.1.1"
|
||||
leakage "^0.3.0"
|
||||
smartchai "^1.0.3"
|
||||
smartdelay "^1.0.3"
|
||||
smartq "^1.1.1"
|
||||
typings-global "^1.0.19"
|
||||
|
||||
type-detect@0.1.1:
|
||||
version "0.1.1"
|
||||
resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-0.1.1.tgz#0ba5ec2a885640e470ea4e8505971900dac58822"
|
||||
|
||||
type-detect@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-1.0.0.tgz#762217cc06db258ec48908a1298e8b95121e8ea2"
|
||||
|
||||
typings-global@^1.0.14, typings-global@^1.0.16, typings-global@^1.0.19:
|
||||
version "1.0.19"
|
||||
resolved "https://registry.yarnpkg.com/typings-global/-/typings-global-1.0.19.tgz#3376a72d4de1e5541bf5702248ff64c3e6ea316c"
|
||||
dependencies:
|
||||
semver "^5.3.0"
|
||||
smartshell "^1.0.6"
|
||||
|
||||
util.promisify@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030"
|
||||
dependencies:
|
||||
define-properties "^1.1.2"
|
||||
object.getownpropertydescriptors "^2.0.3"
|
||||
|
||||
which@^1.2.14:
|
||||
version "1.2.14"
|
||||
resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5"
|
||||
dependencies:
|
||||
isexe "^2.0.0"
|
||||
|
||||
wrappy@1:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
|
Reference in New Issue
Block a user