fix(tests): now using tstest
This commit is contained in:
parent
df18aba4b5
commit
f60deddadd
109
.gitlab-ci.yml
109
.gitlab-ci.yml
@ -3,69 +3,140 @@ image: hosttoday/ht-docker-node:npmci
|
||||
|
||||
cache:
|
||||
paths:
|
||||
- .yarn/
|
||||
- .npmci_cache/
|
||||
key: "$CI_BUILD_STAGE"
|
||||
|
||||
stages:
|
||||
- security
|
||||
- test
|
||||
- release
|
||||
- trigger
|
||||
- pages
|
||||
- metadata
|
||||
|
||||
# ====================
|
||||
# security stage
|
||||
# ====================
|
||||
mirror:
|
||||
stage: security
|
||||
script:
|
||||
- npmci git mirror
|
||||
tags:
|
||||
- docker
|
||||
- notpriv
|
||||
|
||||
snyk:
|
||||
stage: security
|
||||
script:
|
||||
- npmci command npm install -g snyk
|
||||
- npmci command npm install --ignore-scripts
|
||||
- npmci command snyk test
|
||||
tags:
|
||||
- docker
|
||||
- notpriv
|
||||
|
||||
# ====================
|
||||
# test stage
|
||||
# ====================
|
||||
testLEGACY:
|
||||
stage: test
|
||||
script:
|
||||
- npmci test legacy
|
||||
- npmci node install legacy
|
||||
- npmci npm install
|
||||
- npmci npm test
|
||||
coverage: /\d+.?\d+?\%\s*coverage/
|
||||
tags:
|
||||
- docker
|
||||
- docker
|
||||
- notpriv
|
||||
allow_failure: true
|
||||
|
||||
testLTS:
|
||||
stage: test
|
||||
script:
|
||||
- npmci test lts
|
||||
- npmci node install lts
|
||||
- npmci npm install
|
||||
- npmci npm test
|
||||
coverage: /\d+.?\d+?\%\s*coverage/
|
||||
tags:
|
||||
- docker
|
||||
- docker
|
||||
- notpriv
|
||||
|
||||
testSTABLE:
|
||||
stage: test
|
||||
script:
|
||||
- npmci test stable
|
||||
- npmci node install stable
|
||||
- npmci npm install
|
||||
- npmci npm test
|
||||
coverage: /\d+.?\d+?\%\s*coverage/
|
||||
tags:
|
||||
- docker
|
||||
- docker
|
||||
- notpriv
|
||||
|
||||
release:
|
||||
stage: release
|
||||
script:
|
||||
- npmci publish
|
||||
- npmci node install stable
|
||||
- npmci npm publish
|
||||
only:
|
||||
- tags
|
||||
- tags
|
||||
tags:
|
||||
- docker
|
||||
- docker
|
||||
- notpriv
|
||||
|
||||
# ====================
|
||||
# metadata stage
|
||||
# ====================
|
||||
codequality:
|
||||
stage: metadata
|
||||
image: docker:stable
|
||||
allow_failure: true
|
||||
services:
|
||||
- docker:stable-dind
|
||||
script:
|
||||
- export SP_VERSION=$(echo "$CI_SERVER_VERSION" | sed 's/^\([0-9]*\)\.\([0-9]*\).*/\1-\2-stable/')
|
||||
- docker run
|
||||
--env SOURCE_CODE="$PWD"
|
||||
--volume "$PWD":/code
|
||||
--volume /var/run/docker.sock:/var/run/docker.sock
|
||||
"registry.gitlab.com/gitlab-org/security-products/codequality:$SP_VERSION" /code
|
||||
artifacts:
|
||||
paths: [codeclimate.json]
|
||||
tags:
|
||||
- docker
|
||||
- priv
|
||||
|
||||
trigger:
|
||||
stage: trigger
|
||||
stage: metadata
|
||||
script:
|
||||
- npmci trigger
|
||||
- npmci trigger
|
||||
only:
|
||||
- tags
|
||||
- tags
|
||||
tags:
|
||||
- docker
|
||||
- docker
|
||||
- notpriv
|
||||
|
||||
pages:
|
||||
image: hosttoday/ht-docker-node:npmci
|
||||
stage: pages
|
||||
stage: metadata
|
||||
script:
|
||||
- npmci command yarn global add npmpage
|
||||
- npmci command npmpage
|
||||
- npmci command npm install -g typedoc typescript
|
||||
- npmci npm install
|
||||
- npmci command typedoc --module "commonjs" --target "ES2016" --out public/ ts/
|
||||
tags:
|
||||
- docker
|
||||
- notpriv
|
||||
only:
|
||||
- tags
|
||||
artifacts:
|
||||
expire_in: 1 week
|
||||
paths:
|
||||
- public
|
||||
allow_failure: true
|
||||
|
||||
windowsCompatibility:
|
||||
image: stefanscherer/node-windows:10-build-tools
|
||||
stage: metadata
|
||||
script:
|
||||
- npm install & npm test
|
||||
coverage: /\d+.?\d+?\%\s*coverage/
|
||||
tags:
|
||||
- windows
|
||||
allow_failure: true
|
||||
|
6
dist/index.d.ts
vendored
6
dist/index.d.ts
vendored
@ -1,6 +0,0 @@
|
||||
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';
|
||||
export { TaskOnce } from './taskbuffer.classes.taskonce';
|
||||
import './taskbuffer.classes.helpers';
|
15
dist/index.js
vendored
15
dist/index.js
vendored
@ -1,15 +0,0 @@
|
||||
"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_taskmanager_1 = require("./taskbuffer.classes.taskmanager");
|
||||
exports.TaskManager = taskbuffer_classes_taskmanager_1.TaskManager;
|
||||
var taskbuffer_classes_taskonce_1 = require("./taskbuffer.classes.taskonce");
|
||||
exports.TaskOnce = taskbuffer_classes_taskonce_1.TaskOnce;
|
||||
// import for naming only
|
||||
require("./taskbuffer.classes.helpers");
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHFFQUErRDtBQUF0RCx5Q0FBQSxJQUFJLENBQUE7QUFDYiwrRUFBMEQ7QUFBakQsbURBQUEsU0FBUyxDQUFBO0FBQ2xCLHFGQUFnRTtBQUF2RCx5REFBQSxZQUFZLENBQUE7QUFDckIsbUZBQThEO0FBQXJELHVEQUFBLFdBQVcsQ0FBQTtBQUNwQiw2RUFBd0Q7QUFBL0MsaURBQUEsUUFBUSxDQUFBO0FBRWpCLHlCQUF5QjtBQUN6Qix3Q0FBcUMifQ==
|
28
dist/taskbuffer.classes.helpers.d.ts
vendored
28
dist/taskbuffer.classes.helpers.d.ts
vendored
@ -1,28 +0,0 @@
|
||||
import plugins = require('./taskbuffer.plugins');
|
||||
import { Task, ITaskFunction } from './taskbuffer.classes.task';
|
||||
export declare let emptyTaskFunction: ITaskFunction;
|
||||
export declare let isTask: (taskArg: Task) => boolean;
|
||||
export declare let isTaskTouched: (taskArg: Task, touchedTasksArray: Task[]) => boolean;
|
||||
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);
|
||||
}
|
151
dist/taskbuffer.classes.helpers.js
vendored
151
dist/taskbuffer.classes.helpers.js
vendored
File diff suppressed because one or more lines are too long
62
dist/taskbuffer.classes.task.d.ts
vendored
62
dist/taskbuffer.classes.task.d.ts
vendored
@ -1,62 +0,0 @@
|
||||
import * as helpers from './taskbuffer.classes.helpers';
|
||||
export interface ITaskFunction {
|
||||
(x?: any): PromiseLike<any>;
|
||||
}
|
||||
export declare class Task {
|
||||
name: string;
|
||||
taskFunction: ITaskFunction;
|
||||
buffered: boolean;
|
||||
bufferMax: number;
|
||||
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(x?: any): Promise<any>;
|
||||
/**
|
||||
* trigger task unbuffered.
|
||||
*/
|
||||
triggerUnBuffered(x?: any): Promise<any>;
|
||||
/**
|
||||
* trigger task buffered.
|
||||
*/
|
||||
triggerBuffered(x?: any): Promise<any>;
|
||||
state: string;
|
||||
}
|
58
dist/taskbuffer.classes.task.js
vendored
58
dist/taskbuffer.classes.task.js
vendored
@ -1,58 +0,0 @@
|
||||
"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.bufferRunner = new helpers.BufferRunner(this);
|
||||
this.cycleCounter = new helpers.CycleCounter(this);
|
||||
this.idle = true;
|
||||
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(x) {
|
||||
if (this.buffered) {
|
||||
return this.triggerBuffered(x);
|
||||
}
|
||||
else {
|
||||
return this.triggerUnBuffered(x);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* trigger task unbuffered.
|
||||
*/
|
||||
triggerUnBuffered(x) {
|
||||
return helpers.runTask(this, { x: x });
|
||||
}
|
||||
/**
|
||||
* trigger task buffered.
|
||||
*/
|
||||
triggerBuffered(x) {
|
||||
return this.bufferRunner.trigger(x);
|
||||
}
|
||||
get state() {
|
||||
return this._state;
|
||||
}
|
||||
set state(stateArg) {
|
||||
if (stateArg === 'locked') {
|
||||
this._state = 'locked';
|
||||
}
|
||||
else {
|
||||
plugins.beautylog.error('state type ' + stateArg + ' could not be set');
|
||||
}
|
||||
}
|
||||
}
|
||||
exports.Task = Task;
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza2J1ZmZlci5jbGFzc2VzLnRhc2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy90YXNrYnVmZmVyLmNsYXNzZXMudGFzay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGdEQUErQztBQUMvQyx3REFBdUQ7QUFNdkQ7SUFxQkUsWUFBWSxVQThCWDtRQXRDRCx3QkFBd0I7UUFDeEIsWUFBTyxHQUFZLEtBQUssQ0FBQTtRQUN4QixpQkFBWSxHQUFHLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUM3QyxpQkFBWSxHQUFHLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUU3QyxTQUFJLEdBQVksSUFBSSxDQUFBO1FBQ1osV0FBTSxHQUFXLE9BQU8sQ0FBQTtRQWlDOUIsSUFBSSxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFBO1FBQzNDLElBQUksQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQTtRQUNqQyxJQUFJLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUE7UUFDckMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUE7UUFDekIsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFBO1FBQ25DLElBQUksQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQTtRQUNyQyxJQUFJLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUE7UUFDckMsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFBO0lBQzdCLENBQUM7SUFFRDs7T0FFRztJQUNILE9BQU8sQ0FBQyxDQUFFO1FBQ1IsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDbEIsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDaEMsQ0FBQztRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ04sTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNsQyxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsaUJBQWlCLENBQUMsQ0FBRTtRQUNsQixNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUN4QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxlQUFlLENBQUMsQ0FBRTtRQUNoQixNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDckMsQ0FBQztJQUVELElBQUksS0FBSztRQUNQLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFBO0lBQ3BCLENBQUM7SUFFRCxJQUFJLEtBQUssQ0FBQyxRQUFnQjtRQUN4QixFQUFFLENBQUMsQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQztZQUMxQixJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQTtRQUN4QixDQUFDO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDTixPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsUUFBUSxHQUFHLG1CQUFtQixDQUFDLENBQUE7UUFDekUsQ0FBQztJQUNILENBQUM7Q0FDRjtBQWxHRCxvQkFrR0MifQ==
|
15
dist/taskbuffer.classes.taskchain.d.ts
vendored
15
dist/taskbuffer.classes.taskchain.d.ts
vendored
@ -1,15 +0,0 @@
|
||||
import { Task } from './taskbuffer.classes.task';
|
||||
export declare class Taskchain extends Task {
|
||||
taskArray: Task[];
|
||||
private _oraObject;
|
||||
constructor(optionsArg: {
|
||||
taskArray: Task[];
|
||||
name?: string;
|
||||
log?: boolean;
|
||||
buffered?: boolean;
|
||||
bufferMax?: number;
|
||||
});
|
||||
addTask(taskArg: Task): void;
|
||||
removeTask(taskArg: Task): void;
|
||||
shiftTask(): void;
|
||||
}
|
53
dist/taskbuffer.classes.taskchain.js
vendored
53
dist/taskbuffer.classes.taskchain.js
vendored
@ -1,53 +0,0 @@
|
||||
"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");
|
||||
class Taskchain extends taskbuffer_classes_task_1.Task {
|
||||
constructor(optionsArg) {
|
||||
let options = plugins.lodash.merge({
|
||||
name: 'unnamed Taskchain',
|
||||
log: false
|
||||
}, optionsArg, {
|
||||
taskFunction: (x) => {
|
||||
let done = plugins.q.defer(); // this is the starting Deferred object
|
||||
let taskCounter = 0; // counter for iterating async over the taskArray
|
||||
let iterateTasks = (x) => {
|
||||
if (typeof this.taskArray[taskCounter] !== 'undefined') {
|
||||
this._oraObject.text(this.name + ' running: Task' + this.taskArray[taskCounter].name);
|
||||
this.taskArray[taskCounter].trigger(x)
|
||||
.then((x) => {
|
||||
plugins.beautylog.ok(this.taskArray[taskCounter].name);
|
||||
taskCounter++;
|
||||
iterateTasks(x);
|
||||
});
|
||||
}
|
||||
else {
|
||||
this._oraObject.endOk('Taskchain "' + this.name + '" completed successfully');
|
||||
done.resolve(x);
|
||||
}
|
||||
};
|
||||
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) {
|
||||
this.taskArray.push(taskArg);
|
||||
}
|
||||
removeTask(taskArg) {
|
||||
// TODO:
|
||||
}
|
||||
shiftTask() {
|
||||
// TODO:
|
||||
}
|
||||
}
|
||||
exports.Taskchain = Taskchain;
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza2J1ZmZlci5jbGFzc2VzLnRhc2tjaGFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3Rhc2tidWZmZXIuY2xhc3Nlcy50YXNrY2hhaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHlCQUF5QjtBQUN6QixtQkFBbUI7O0FBRW5CLGdEQUErQztBQUMvQyx1RUFBZ0Q7QUFHaEQsZUFBdUIsU0FBUSw4QkFBSTtJQUdqQyxZQUFZLFVBTVg7UUFDQyxJQUFJLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDaEM7WUFDRSxJQUFJLEVBQUUsbUJBQW1CO1lBQ3pCLEdBQUcsRUFBRSxLQUFLO1NBQ1gsRUFDRCxVQUFVLEVBQ1Y7WUFDRSxZQUFZLEVBQUUsQ0FBQyxDQUFNO2dCQUNuQixJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFBLENBQUMsdUNBQXVDO2dCQUNwRSxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUEsQ0FBQyxpREFBaUQ7Z0JBQ3JFLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztvQkFDbkIsRUFBRSxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFFLFdBQVcsQ0FBRSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7d0JBQ3pELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBRSxXQUFXLENBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQTt3QkFDdkYsSUFBSSxDQUFDLFNBQVMsQ0FBRSxXQUFXLENBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDOzZCQUNyQyxJQUFJLENBQUMsQ0FBQyxDQUFDOzRCQUNOLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUUsV0FBVyxDQUFFLENBQUMsSUFBSSxDQUFDLENBQUE7NEJBQ3hELFdBQVcsRUFBRSxDQUFBOzRCQUNiLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQTt3QkFDakIsQ0FBQyxDQUFDLENBQUE7b0JBQ04sQ0FBQztvQkFBQyxJQUFJLENBQUMsQ0FBQzt3QkFDTixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRywwQkFBMEIsQ0FBQyxDQUFBO3dCQUM3RSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFBO29CQUNqQixDQUFDO2dCQUNILENBQUMsQ0FBQTtnQkFDRCxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUE7Z0JBQ2YsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUE7WUFDckIsQ0FBQztTQUNGLENBQ0YsQ0FBQTtRQUNELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUNkLElBQUksQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQTtRQUNyQyxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFBO1FBQ3ZDLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFBO1FBQ3pCLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxDQUFFLE9BQWE7UUFDcEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDOUIsQ0FBQztJQUNELFVBQVUsQ0FBRSxPQUFhO1FBQ3ZCLFFBQVE7SUFDVixDQUFDO0lBQ0QsU0FBUztRQUNQLFFBQVE7SUFDVixDQUFDO0NBQ0Y7QUF2REQsOEJBdURDIn0=
|
44
dist/taskbuffer.classes.taskmanager.d.ts
vendored
44
dist/taskbuffer.classes.taskmanager.d.ts
vendored
@ -1,44 +0,0 @@
|
||||
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
83
dist/taskbuffer.classes.taskmanager.js
vendored
@ -1,83 +0,0 @@
|
||||
"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=
|
11
dist/taskbuffer.classes.taskonce.d.ts
vendored
11
dist/taskbuffer.classes.taskonce.d.ts
vendored
@ -1,11 +0,0 @@
|
||||
import { Task, ITaskFunction } from './taskbuffer.classes.task';
|
||||
/**
|
||||
* TaskOnce is run exactly once, no matter how often it is triggered
|
||||
*/
|
||||
export declare class TaskOnce extends Task {
|
||||
hasTriggered: boolean;
|
||||
constructor(optionsArg: {
|
||||
name?: string;
|
||||
taskFunction: ITaskFunction;
|
||||
});
|
||||
}
|
30
dist/taskbuffer.classes.taskonce.js
vendored
30
dist/taskbuffer.classes.taskonce.js
vendored
@ -1,30 +0,0 @@
|
||||
"use strict";
|
||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||
return new (P || (P = Promise))(function (resolve, reject) {
|
||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
|
||||
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||
});
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const taskbuffer_classes_task_1 = require("./taskbuffer.classes.task");
|
||||
/**
|
||||
* TaskOnce is run exactly once, no matter how often it is triggered
|
||||
*/
|
||||
class TaskOnce extends taskbuffer_classes_task_1.Task {
|
||||
constructor(optionsArg) {
|
||||
super({
|
||||
name: optionsArg.name,
|
||||
taskFunction: () => __awaiter(this, void 0, void 0, function* () {
|
||||
if (!this.hasTriggered) {
|
||||
this.hasTriggered = true;
|
||||
yield optionsArg.taskFunction();
|
||||
}
|
||||
})
|
||||
});
|
||||
this.hasTriggered = false;
|
||||
}
|
||||
}
|
||||
exports.TaskOnce = TaskOnce;
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza2J1ZmZlci5jbGFzc2VzLnRhc2tvbmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvdGFza2J1ZmZlci5jbGFzc2VzLnRhc2tvbmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFFQSx1RUFBK0Q7QUFFL0Q7O0dBRUc7QUFDSCxjQUFzQixTQUFRLDhCQUFJO0lBRWhDLFlBQWEsVUFHWjtRQUNDLEtBQUssQ0FBQztZQUNKLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSTtZQUNyQixZQUFZLEVBQUU7Z0JBQ1osRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztvQkFDdkIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUE7b0JBQ3hCLE1BQU0sVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFBO2dCQUNqQyxDQUFDO1lBQ0gsQ0FBQyxDQUFBO1NBQ0YsQ0FBQyxDQUFBO1FBYkosaUJBQVksR0FBWSxLQUFLLENBQUE7SUFjN0IsQ0FBQztDQUNGO0FBaEJELDRCQWdCQyJ9
|
7
dist/taskbuffer.classes.taskparallel.d.ts
vendored
7
dist/taskbuffer.classes.taskparallel.d.ts
vendored
@ -1,7 +0,0 @@
|
||||
import { Task } from './taskbuffer.classes.task';
|
||||
export declare class Taskparallel extends Task {
|
||||
taskArray: Task[];
|
||||
constructor(optionsArg: {
|
||||
taskArray: Task[];
|
||||
});
|
||||
}
|
24
dist/taskbuffer.classes.taskparallel.js
vendored
24
dist/taskbuffer.classes.taskparallel.js
vendored
@ -1,24 +0,0 @@
|
||||
"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 promiseArray = []; // 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;
|
||||
}
|
||||
}
|
||||
exports.Taskparallel = Taskparallel;
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza2J1ZmZlci5jbGFzc2VzLnRhc2twYXJhbGxlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3Rhc2tidWZmZXIuY2xhc3Nlcy50YXNrcGFyYWxsZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxnREFBK0M7QUFFL0MsdUVBQWdEO0FBRWhELGtCQUEwQixTQUFRLDhCQUFJO0lBRXBDLFlBQWEsVUFFWjtRQUNDLElBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUNoQyxVQUFVLEVBQ1Y7WUFDRSxZQUFZLEVBQUU7Z0JBQ1osSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtnQkFDNUIsSUFBSSxZQUFZLEdBQW1CLEVBQUUsQ0FBQSxDQUFDLDJEQUEyRDtnQkFDakcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsVUFBVSxPQUFPO29CQUN0QyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFBO2dCQUN0QyxDQUFDLENBQUMsQ0FBQTtnQkFDRixPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQztxQkFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtnQkFDckIsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUE7WUFDckIsQ0FBQztTQUNGLENBQ0YsQ0FBQTtRQUNELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUNkLElBQUksQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQTtJQUN2QyxDQUFDO0NBQ0Y7QUF2QkQsb0NBdUJDIn0=
|
9
dist/taskbuffer.plugins.d.ts
vendored
9
dist/taskbuffer.plugins.d.ts
vendored
@ -1,9 +0,0 @@
|
||||
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 };
|
18
dist/taskbuffer.plugins.js
vendored
18
dist/taskbuffer.plugins.js
vendored
@ -1,18 +0,0 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
require("typings-global");
|
||||
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=
|
@ -1,13 +1,16 @@
|
||||
# taskbuffer
|
||||
|
||||
flexible task management. TypeScript ready!
|
||||
|
||||
## Availabililty
|
||||
|
||||
[![npm](https://pushrocks.gitlab.io/assets/repo-button-npm.svg)](https://www.npmjs.com/package/taskbuffer)
|
||||
[![git](https://pushrocks.gitlab.io/assets/repo-button-git.svg)](https://GitLab.com/pushrocks/taskbuffer)
|
||||
[![git](https://pushrocks.gitlab.io/assets/repo-button-mirror.svg)](https://github.com/pushrocks/taskbuffer)
|
||||
[![docs](https://pushrocks.gitlab.io/assets/repo-button-docs.svg)](https://pushrocks.gitlab.io/taskbuffer/)
|
||||
|
||||
## Status for master
|
||||
|
||||
[![build status](https://GitLab.com/pushrocks/taskbuffer/badges/master/build.svg)](https://GitLab.com/pushrocks/taskbuffer/commits/master)
|
||||
[![coverage report](https://GitLab.com/pushrocks/taskbuffer/badges/master/coverage.svg)](https://GitLab.com/pushrocks/taskbuffer/commits/master)
|
||||
[![npm downloads per month](https://img.shields.io/npm/dm/taskbuffer.svg)](https://www.npmjs.com/package/taskbuffer)
|
||||
@ -24,36 +27,41 @@ flexible task management. TypeScript ready!
|
||||
npm install taskbuffer --save
|
||||
```
|
||||
|
||||
## Concepts
|
||||
## 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**
|
||||
|
||||
- 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.
|
||||
- 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
|
||||
- Task.trigger() and Task.triggerBuffered() always return a Promise
|
||||
which is fullfilled once the related task call has completed.
|
||||
* Task.triggered() is an Observable stream that emits events every time a task call is called and every time a call is completed.
|
||||
* Task is compatible to gulp streams.
|
||||
- Task.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
|
||||
|
||||
- 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.
|
||||
|
||||
- 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";
|
||||
|
||||
|
@ -6,8 +6,7 @@
|
||||
}
|
||||
},
|
||||
"npmci": {
|
||||
"globalNpmTools": [
|
||||
"npmts"
|
||||
]
|
||||
"npmGlobalTools": [],
|
||||
"npmAccessLevel": "public"
|
||||
}
|
||||
}
|
1036
package-lock.json
generated
Normal file
1036
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
27
package.json
27
package.json
@ -5,7 +5,8 @@
|
||||
"main": "dist/index.js",
|
||||
"typings": "dist/index.d.ts",
|
||||
"scripts": {
|
||||
"test": "(npmts)"
|
||||
"test": "tstest test/",
|
||||
"build": "echo \"Not needed for now\""
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@ -25,18 +26,18 @@
|
||||
},
|
||||
"homepage": "https://gitlab.com/pushrocks/taskbuffer#readme",
|
||||
"dependencies": {
|
||||
"@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"
|
||||
"@pushrocks/lik": "^3.0.1",
|
||||
"@pushrocks/smartdelay": "^2.0.1",
|
||||
"@pushrocks/smartlog": "^2.0.1",
|
||||
"@pushrocks/smartpromise": "^2.0.5",
|
||||
"@types/cron": "^1.3.0",
|
||||
"cron": "^1.3.0",
|
||||
"rxjs": "^6.2.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"tapbundle": "^1.1.0"
|
||||
}
|
||||
"@gitzone/tstest": "^1.0.7",
|
||||
"@pushrocks/tapbundle": "^3.0.1",
|
||||
"@types/node": "^10.5.4"
|
||||
},
|
||||
"private": true
|
||||
}
|
||||
|
@ -1,13 +1,16 @@
|
||||
# taskbuffer
|
||||
|
||||
flexible task management. TypeScript ready!
|
||||
|
||||
## Availabililty
|
||||
|
||||
[![npm](https://pushrocks.gitlab.io/assets/repo-button-npm.svg)](https://www.npmjs.com/package/taskbuffer)
|
||||
[![git](https://pushrocks.gitlab.io/assets/repo-button-git.svg)](https://GitLab.com/pushrocks/taskbuffer)
|
||||
[![git](https://pushrocks.gitlab.io/assets/repo-button-mirror.svg)](https://github.com/pushrocks/taskbuffer)
|
||||
[![docs](https://pushrocks.gitlab.io/assets/repo-button-docs.svg)](https://pushrocks.gitlab.io/taskbuffer/)
|
||||
|
||||
## Status for master
|
||||
|
||||
[![build status](https://GitLab.com/pushrocks/taskbuffer/badges/master/build.svg)](https://GitLab.com/pushrocks/taskbuffer/commits/master)
|
||||
[![coverage report](https://GitLab.com/pushrocks/taskbuffer/badges/master/coverage.svg)](https://GitLab.com/pushrocks/taskbuffer/commits/master)
|
||||
[![npm downloads per month](https://img.shields.io/npm/dm/taskbuffer.svg)](https://www.npmjs.com/package/taskbuffer)
|
||||
@ -19,11 +22,12 @@ flexible task management. TypeScript ready!
|
||||
[![JavaScript Style Guide](https://img.shields.io/badge/code%20style-standard-brightgreen.svg)](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)
|
||||
> | By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy.html)
|
||||
|
||||
[![repo-footer](https://pushrocks.gitlab.io/assets/repo-footer.svg)](https://push.rocks)
|
||||
|
@ -1,108 +1,118 @@
|
||||
import { expect, tap } from 'tapbundle'
|
||||
import taskbuffer = require('../dist/index')
|
||||
import { expect, tap } from '@pushrocks/tapbundle';
|
||||
import taskbuffer = require('../ts/index');
|
||||
|
||||
import * as q from 'smartq'
|
||||
import * as smartdelay from 'smartdelay'
|
||||
import * as smartpromise from '@pushrocks/smartpromise';
|
||||
import * as smartdelay from '@pushrocks/smartdelay';
|
||||
|
||||
// setup some testData to work with
|
||||
let testTask: taskbuffer.Task
|
||||
let testTask: taskbuffer.Task;
|
||||
|
||||
let testPreTask = new taskbuffer.Task({
|
||||
taskFunction: function () {
|
||||
let done = q.defer()
|
||||
console.log('preTask executed')
|
||||
done.resolve()
|
||||
return done.promise
|
||||
taskFunction: function() {
|
||||
let done = smartpromise.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 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')
|
||||
let done = smartpromise.defer();
|
||||
console.log('Task1 started');
|
||||
setTimeout(() => {
|
||||
task1Counter++
|
||||
console.log('Task1 executed')
|
||||
done.resolve()
|
||||
}, 5000)
|
||||
return done.promise
|
||||
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')
|
||||
let done = smartpromise.defer();
|
||||
console.log('Task2 started');
|
||||
setTimeout(() => {
|
||||
console.log('Task2 executed')
|
||||
done.resolve()
|
||||
}, 5000)
|
||||
return done.promise
|
||||
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')
|
||||
let done = smartpromise.defer();
|
||||
console.log('Task3 started');
|
||||
setTimeout(() => {
|
||||
console.log('Task3 executed')
|
||||
done.resolve()
|
||||
}, 5000)
|
||||
return done.promise
|
||||
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 })
|
||||
})
|
||||
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)
|
||||
})
|
||||
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')
|
||||
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')
|
||||
expect(testTask.running).to.be.a('boolean');
|
||||
// tslint:disable-next-line:no-unused-expression
|
||||
expect(testTask.running).to.be.false
|
||||
})
|
||||
expect(testTask.running).to.be.false;
|
||||
});
|
||||
|
||||
tap.test('testTask.trigger() should return Promise', async () => {
|
||||
expect(testTask.trigger()).to.be.instanceof(Promise)
|
||||
})
|
||||
expect(testTask.trigger()).to.be.instanceof(Promise);
|
||||
});
|
||||
|
||||
tap.test('testTask.trigger() returned Promise should be fullfilled', async () => {
|
||||
await testTask.trigger()
|
||||
})
|
||||
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()
|
||||
})
|
||||
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) },
|
||||
taskFunction: async () => {
|
||||
await smartdelay.delayFor(3000);
|
||||
},
|
||||
buffered: true,
|
||||
bufferMax: 2
|
||||
})
|
||||
localTestTask.trigger()
|
||||
localTestTask.trigger()
|
||||
localTestTask.trigger()
|
||||
await localTestTask.trigger()
|
||||
})
|
||||
});
|
||||
localTestTask.trigger();
|
||||
localTestTask.trigger();
|
||||
localTestTask.trigger();
|
||||
await localTestTask.trigger();
|
||||
});
|
||||
|
||||
tap.start()
|
||||
tap.start();
|
||||
|
@ -1,48 +1,48 @@
|
||||
import { expect, tap } from 'tapbundle'
|
||||
import taskbuffer = require('../dist/index')
|
||||
import { expect, tap } from '@pushrocks/tapbundle';
|
||||
import taskbuffer = require('../ts/index');
|
||||
|
||||
import * as smartq from 'smartq'
|
||||
import * as smartdelay from 'smartdelay'
|
||||
import * as smartq from 'smartq';
|
||||
import * as smartdelay from '@pushrocks/smartdelay';
|
||||
|
||||
let task1Executed = false
|
||||
let task1Executed = false;
|
||||
let task1 = new taskbuffer.Task({
|
||||
taskFunction: async () => {
|
||||
await smartdelay.delayFor(2000)
|
||||
task1Executed = true
|
||||
await smartdelay.delayFor(2000);
|
||||
task1Executed = true;
|
||||
}
|
||||
})
|
||||
});
|
||||
|
||||
let task2Executed = false
|
||||
let task2Executed = false;
|
||||
let task2 = new taskbuffer.Task({
|
||||
taskFunction: async () => {
|
||||
await smartdelay.delayFor(2000)
|
||||
task2Executed = true
|
||||
await smartdelay.delayFor(2000);
|
||||
task2Executed = true;
|
||||
}
|
||||
})
|
||||
});
|
||||
|
||||
let task3Executed = false
|
||||
let task3Executed = false;
|
||||
let task3 = new taskbuffer.Task({
|
||||
taskFunction: async () => {
|
||||
await smartdelay.delayFor(2000)
|
||||
task3Executed = true
|
||||
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)
|
||||
taskArray: [task1, task2, task3]
|
||||
});
|
||||
let testPromise = testTaskchain.trigger();
|
||||
await smartdelay.delayFor(2100);
|
||||
// tslint:disable-next-line:no-unused-expression
|
||||
expect(task1Executed).to.be.true
|
||||
expect(task1Executed).to.be.true;
|
||||
// tslint:disable-next-line:no-unused-expression
|
||||
expect(task2Executed).to.be.false
|
||||
await smartdelay.delayFor(2100)
|
||||
expect(task2Executed).to.be.false;
|
||||
await smartdelay.delayFor(2100);
|
||||
// tslint:disable-next-line:no-unused-expression
|
||||
expect(task2Executed).to.be.true
|
||||
await testPromise
|
||||
})
|
||||
expect(task2Executed).to.be.true;
|
||||
await testPromise;
|
||||
});
|
||||
|
||||
tap.start()
|
||||
tap.start();
|
||||
|
@ -1,38 +1,38 @@
|
||||
import { expect, tap } from 'tapbundle'
|
||||
import taskbuffer = require('../dist/index')
|
||||
import { expect, tap } from '@pushrocks/tapbundle';
|
||||
import taskbuffer = require('../ts/index');
|
||||
|
||||
import * as smartq from 'smartq'
|
||||
import * as smartdelay from 'smartdelay'
|
||||
import * as smartq from 'smartq';
|
||||
import * as smartdelay from '@pushrocks/smartdelay';
|
||||
|
||||
let task1Executed = false
|
||||
let task1Executed = false;
|
||||
let task1 = new taskbuffer.Task({
|
||||
taskFunction: async () => {
|
||||
await smartdelay.delayFor(2000)
|
||||
task1Executed = true
|
||||
await smartdelay.delayFor(2000);
|
||||
task1Executed = true;
|
||||
}
|
||||
})
|
||||
});
|
||||
|
||||
let task2Executed = false
|
||||
let task2Executed = false;
|
||||
let task2 = new taskbuffer.Task({
|
||||
taskFunction: async () => {
|
||||
await smartdelay.delayFor(2000)
|
||||
task2Executed = true
|
||||
await smartdelay.delayFor(2000);
|
||||
task2Executed = true;
|
||||
}
|
||||
})
|
||||
});
|
||||
|
||||
let task3Executed = false
|
||||
let task3Executed = false;
|
||||
let task3 = new taskbuffer.Task({
|
||||
taskFunction: async () => {
|
||||
await smartdelay.delayFor(2000)
|
||||
task3Executed = true
|
||||
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()
|
||||
})
|
||||
taskArray: [task1, task2, task3]
|
||||
});
|
||||
await testTaskparallel.trigger();
|
||||
});
|
||||
|
||||
tap.start()
|
||||
tap.start();
|
||||
|
@ -1,40 +1,42 @@
|
||||
import { expect, tap } from 'tapbundle'
|
||||
import taskbuffer = require('../dist/index')
|
||||
import { expect, tap } from '@pushrocks/tapbundle';
|
||||
import taskbuffer = require('../ts/index');
|
||||
|
||||
import * as smartq from 'smartq'
|
||||
import * as smartdelay from 'smartdelay'
|
||||
import * as smartpromise from '@pushrocks/smartpromise';
|
||||
import * as smartdelay from '@pushrocks/smartdelay';
|
||||
|
||||
let myTaskManager: taskbuffer.TaskManager
|
||||
let taskRunCounter = 0
|
||||
let taskDone = smartq.defer()
|
||||
let myTaskManager: taskbuffer.TaskManager;
|
||||
let taskRunCounter = 0;
|
||||
let taskDone = smartpromise.defer();
|
||||
|
||||
tap.test('should create an instance of TaskManager', async () => {
|
||||
myTaskManager = new taskbuffer.TaskManager()
|
||||
expect(myTaskManager).to.be.instanceof(taskbuffer.TaskManager)
|
||||
})
|
||||
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()
|
||||
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')
|
||||
})
|
||||
);
|
||||
await myTaskManager.triggerTaskByName('myTask');
|
||||
// tslint:disable-next-line:no-unused-expression
|
||||
expect(referenceBoolean).to.be.true
|
||||
})
|
||||
expect(referenceBoolean).to.be.true;
|
||||
});
|
||||
|
||||
tap.test('should schedule task', async () => {
|
||||
myTaskManager.scheduleTaskByName('myTask', '* * * * * *')
|
||||
await taskDone.promise
|
||||
myTaskManager.descheduleTaskByName('myTask')
|
||||
})
|
||||
myTaskManager.scheduleTaskByName('myTask', '* * * * * *');
|
||||
await taskDone.promise;
|
||||
myTaskManager.descheduleTaskByName('myTask');
|
||||
});
|
||||
|
||||
tap.start()
|
||||
tap.start();
|
||||
|
@ -1,64 +1,64 @@
|
||||
import { expect, tap } from 'tapbundle'
|
||||
import taskbuffer = require('../dist/index')
|
||||
import { expect, tap } from '@pushrocks/tapbundle';
|
||||
import taskbuffer = require('../ts/index');
|
||||
|
||||
import * as q from 'smartq'
|
||||
import * as smartdelay from 'smartdelay'
|
||||
import * as smartpromise from '@pushrocks/smartpromise';
|
||||
import * as smartdelay from '@pushrocks/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 done = smartpromise.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
|
||||
let done = smartpromise.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
|
||||
let done = smartpromise.defer();
|
||||
console.log('flowTask2');
|
||||
console.log(x);
|
||||
done.resolve(x);
|
||||
return done.promise;
|
||||
},
|
||||
preTask: flowTask1
|
||||
})
|
||||
});
|
||||
|
||||
let flowTask3 = new taskbuffer.Taskchain({
|
||||
taskArray: [ flowTask1, flowTask2 ]
|
||||
})
|
||||
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)
|
||||
})
|
||||
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)
|
||||
})
|
||||
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)
|
||||
})
|
||||
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)
|
||||
})
|
||||
let result = await flowTask3.trigger(12);
|
||||
expect(result).to.equal(12);
|
||||
});
|
||||
|
||||
tap.start()
|
||||
tap.start();
|
||||
|
@ -1,28 +1,28 @@
|
||||
import { expect, tap } from 'tapbundle'
|
||||
import { expect, tap } from '@pushrocks/tapbundle';
|
||||
|
||||
import * as taskbuffer from '../dist/index'
|
||||
import * as taskbuffer from '../ts/index';
|
||||
|
||||
let myNumber = 0
|
||||
let myTaskOnce: taskbuffer.TaskOnce
|
||||
let myNumber = 0;
|
||||
let myTaskOnce: taskbuffer.TaskOnce;
|
||||
|
||||
tap.test('should create a valid instance of TaskOnce', async () => {
|
||||
myTaskOnce = new taskbuffer.TaskOnce({
|
||||
taskFunction: async () => {
|
||||
myNumber++
|
||||
myNumber++;
|
||||
}
|
||||
})
|
||||
expect(myTaskOnce).to.be.instanceof(taskbuffer.TaskOnce)
|
||||
})
|
||||
});
|
||||
expect(myTaskOnce).to.be.instanceof(taskbuffer.TaskOnce);
|
||||
});
|
||||
|
||||
tap.test('myNumber should still be 0', async () => {
|
||||
expect(myNumber).to.equal(0)
|
||||
})
|
||||
expect(myNumber).to.equal(0);
|
||||
});
|
||||
|
||||
tap.test('myTaskOnce should trigger once', async () => {
|
||||
await myTaskOnce.trigger()
|
||||
await myTaskOnce.trigger()
|
||||
await myTaskOnce.trigger()
|
||||
expect(myNumber).to.equal(1)
|
||||
})
|
||||
await myTaskOnce.trigger();
|
||||
await myTaskOnce.trigger();
|
||||
await myTaskOnce.trigger();
|
||||
expect(myNumber).to.equal(1);
|
||||
});
|
||||
|
||||
tap.start()
|
||||
tap.start();
|
||||
|
12
ts/index.ts
12
ts/index.ts
@ -1,8 +1,8 @@
|
||||
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'
|
||||
export { TaskOnce } from './taskbuffer.classes.taskonce'
|
||||
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';
|
||||
export { TaskOnce } from './taskbuffer.classes.taskonce';
|
||||
|
||||
// import for naming only
|
||||
import './taskbuffer.classes.helpers'
|
||||
import './taskbuffer.classes.helpers';
|
||||
|
@ -1,160 +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 (x) {
|
||||
let done = plugins.q.defer()
|
||||
done.resolve()
|
||||
return done.promise
|
||||
}
|
||||
export let emptyTaskFunction: ITaskFunction = function(x) {
|
||||
let done = plugins.smartpromise.defer();
|
||||
done.resolve();
|
||||
return done.promise;
|
||||
};
|
||||
|
||||
export let isTask = function (taskArg: Task): boolean {
|
||||
if (
|
||||
taskArg instanceof Task
|
||||
&& typeof taskArg.taskFunction === 'function'
|
||||
) {
|
||||
return true
|
||||
export let isTask = function(taskArg: Task): boolean {
|
||||
if (taskArg instanceof Task && typeof taskArg.taskFunction === 'function') {
|
||||
return true;
|
||||
} else {
|
||||
return false
|
||||
return false;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
export let isTaskTouched = (taskArg: Task, touchedTasksArray: Task[]): boolean => {
|
||||
let result = false
|
||||
let result = false;
|
||||
for (let keyArg in touchedTasksArray) {
|
||||
if (taskArg === touchedTasksArray[ keyArg ]) {
|
||||
result = true
|
||||
if (taskArg === touchedTasksArray[keyArg]) {
|
||||
result = true;
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
return result;
|
||||
};
|
||||
|
||||
export let runTask = async (taskArg: Task, optionsArg: { x?, touchedTasksArray?: Task[] }) => {
|
||||
let done = plugins.q.defer()
|
||||
export let runTask = async (taskArg: Task, optionsArg: { x?; touchedTasksArray?: Task[] }) => {
|
||||
let done = plugins.smartpromise.defer();
|
||||
|
||||
// pay respect to execDelay
|
||||
if (taskArg.execDelay) {
|
||||
await plugins.smartdelay.delayFor(taskArg.execDelay)
|
||||
await plugins.smartdelay.delayFor(taskArg.execDelay);
|
||||
}
|
||||
|
||||
// set running params
|
||||
taskArg.running = true
|
||||
taskArg.running = true;
|
||||
|
||||
done.promise.then(async () => { taskArg.running = false })
|
||||
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
|
||||
let options = {
|
||||
...{ x: undefined, touchedTasksArray: [] },
|
||||
...optionsArg
|
||||
};
|
||||
let x = options.x;
|
||||
let touchedTasksArray: Task[] = options.touchedTasksArray;
|
||||
|
||||
touchedTasksArray.push(taskArg)
|
||||
touchedTasksArray.push(taskArg);
|
||||
|
||||
// run the task cascade
|
||||
let localDeferred = plugins.q.defer()
|
||||
let localDeferred = plugins.smartpromise.defer();
|
||||
localDeferred.promise
|
||||
.then(() => {
|
||||
if (taskArg.preTask && !isTaskTouched(taskArg.preTask, touchedTasksArray)) {
|
||||
return runTask(taskArg.preTask, { x: x, touchedTasksArray: touchedTasksArray })
|
||||
return runTask(taskArg.preTask, { x: x, touchedTasksArray: touchedTasksArray });
|
||||
} else {
|
||||
let done2 = plugins.q.defer()
|
||||
done2.resolve(x)
|
||||
return done2.promise
|
||||
let done2 = plugins.smartpromise.defer();
|
||||
done2.resolve(x);
|
||||
return done2.promise;
|
||||
}
|
||||
})
|
||||
.then(x => {
|
||||
return taskArg.taskFunction(x)
|
||||
return taskArg.taskFunction(x);
|
||||
})
|
||||
.then(x => {
|
||||
if (taskArg.afterTask && !isTaskTouched(taskArg.afterTask, touchedTasksArray)) {
|
||||
return runTask(taskArg.afterTask, { x: x, touchedTasksArray: touchedTasksArray })
|
||||
return runTask(taskArg.afterTask, { x: x, touchedTasksArray: touchedTasksArray });
|
||||
} else {
|
||||
let done2 = plugins.q.defer()
|
||||
done2.resolve(x)
|
||||
return done2.promise
|
||||
let done2 = plugins.smartpromise.defer();
|
||||
done2.resolve(x);
|
||||
return done2.promise;
|
||||
}
|
||||
})
|
||||
.then(x => {
|
||||
done.resolve(x)
|
||||
}).catch((err) => {
|
||||
console.log(err)
|
||||
done.resolve(x);
|
||||
})
|
||||
localDeferred.resolve()
|
||||
return await done.promise
|
||||
}
|
||||
.catch(err => {
|
||||
console.log(err);
|
||||
});
|
||||
localDeferred.resolve();
|
||||
return await done.promise;
|
||||
};
|
||||
|
||||
export interface cycleObject {
|
||||
cycleCounter: number,
|
||||
deferred: plugins.q.Deferred<any>
|
||||
cycleCounter: number;
|
||||
deferred: plugins.smartpromise.Deferred<any>;
|
||||
}
|
||||
|
||||
export class CycleCounter {
|
||||
task: Task
|
||||
cycleObjectArray: cycleObject[] = []
|
||||
task: Task;
|
||||
cycleObjectArray: cycleObject[] = [];
|
||||
constructor(taskArg: Task) {
|
||||
this.task = taskArg
|
||||
this.task = taskArg;
|
||||
}
|
||||
getPromiseForCycle (cycleCountArg: number) {
|
||||
let done = plugins.q.defer()
|
||||
getPromiseForCycle(cycleCountArg: number) {
|
||||
let done = plugins.smartpromise.defer();
|
||||
let cycleObject: cycleObject = {
|
||||
cycleCounter: cycleCountArg,
|
||||
deferred: done
|
||||
}
|
||||
this.cycleObjectArray.push(cycleObject)
|
||||
return done.promise
|
||||
};
|
||||
this.cycleObjectArray.push(cycleObject);
|
||||
return done.promise;
|
||||
}
|
||||
informOfCycle (x) {
|
||||
let newCycleObjectArray: cycleObject[] = []
|
||||
informOfCycle(x) {
|
||||
let newCycleObjectArray: cycleObject[] = [];
|
||||
this.cycleObjectArray.forEach(cycleObjectArg => {
|
||||
cycleObjectArg.cycleCounter--
|
||||
cycleObjectArg.cycleCounter--;
|
||||
if (cycleObjectArg.cycleCounter <= 0) {
|
||||
cycleObjectArg.deferred.resolve(x)
|
||||
cycleObjectArg.deferred.resolve(x);
|
||||
} else {
|
||||
newCycleObjectArray.push(cycleObjectArg)
|
||||
newCycleObjectArray.push(cycleObjectArg);
|
||||
}
|
||||
})
|
||||
this.cycleObjectArray = newCycleObjectArray
|
||||
});
|
||||
this.cycleObjectArray = newCycleObjectArray;
|
||||
}
|
||||
}
|
||||
|
||||
export class BufferRunner {
|
||||
task: Task
|
||||
task: Task;
|
||||
// initialze by default
|
||||
bufferCounter: number = 0
|
||||
running: boolean = false
|
||||
bufferCounter: number = 0;
|
||||
running: boolean = false;
|
||||
constructor(taskArg: Task) {
|
||||
this.task = taskArg
|
||||
this.task = taskArg;
|
||||
}
|
||||
|
||||
trigger (x): Promise<any> {
|
||||
trigger(x): Promise<any> {
|
||||
if (!(this.bufferCounter >= this.task.bufferMax)) {
|
||||
this.bufferCounter++
|
||||
this.bufferCounter++;
|
||||
}
|
||||
let returnPromise: Promise<any> = this.task.cycleCounter.getPromiseForCycle(this.bufferCounter + 1)
|
||||
let returnPromise: Promise<any> = this.task.cycleCounter.getPromiseForCycle(
|
||||
this.bufferCounter + 1
|
||||
);
|
||||
if (!this.running) {
|
||||
this._run(x)
|
||||
this._run(x);
|
||||
}
|
||||
return returnPromise
|
||||
return returnPromise;
|
||||
}
|
||||
|
||||
private _run (x) {
|
||||
let recursiveBufferRunner = (x) => {
|
||||
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)
|
||||
})
|
||||
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
|
||||
this.running = false;
|
||||
this.task.running = false;
|
||||
}
|
||||
}
|
||||
recursiveBufferRunner(x)
|
||||
};
|
||||
recursiveBufferRunner(x);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,70 +1,70 @@
|
||||
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 {
|
||||
(x?: any): PromiseLike<any>
|
||||
(x?: any): PromiseLike<any>;
|
||||
}
|
||||
|
||||
export class Task {
|
||||
// man datory properties
|
||||
name: string
|
||||
taskFunction: ITaskFunction
|
||||
buffered: boolean
|
||||
name: string;
|
||||
taskFunction: ITaskFunction;
|
||||
buffered: boolean;
|
||||
|
||||
bufferMax: number
|
||||
execDelay: number
|
||||
bufferMax: number;
|
||||
execDelay: number;
|
||||
|
||||
// tasks to run before and after
|
||||
preTask: Task
|
||||
afterTask: Task
|
||||
preTask: Task;
|
||||
afterTask: Task;
|
||||
|
||||
// initialize by default
|
||||
running: boolean = false
|
||||
bufferRunner = new helpers.BufferRunner(this)
|
||||
cycleCounter = new helpers.CycleCounter(this)
|
||||
running: boolean = false;
|
||||
bufferRunner = new helpers.BufferRunner(this);
|
||||
cycleCounter = new helpers.CycleCounter(this);
|
||||
|
||||
idle: boolean = true
|
||||
private _state: string = 'ready'
|
||||
idle: boolean = true;
|
||||
private _state: string = 'ready';
|
||||
|
||||
constructor(optionsArg: {
|
||||
/**
|
||||
* the task function to run, must return promise
|
||||
*/
|
||||
taskFunction: ITaskFunction
|
||||
taskFunction: ITaskFunction;
|
||||
/**
|
||||
* any other task to run before
|
||||
*/
|
||||
preTask?: Task
|
||||
preTask?: Task;
|
||||
/**
|
||||
* any other task to run after
|
||||
*/
|
||||
afterTask?: Task
|
||||
afterTask?: Task;
|
||||
/**
|
||||
* wether this task should run buffered
|
||||
*/
|
||||
buffered?: boolean
|
||||
buffered?: boolean;
|
||||
/**
|
||||
* the maximum buffer
|
||||
*/
|
||||
bufferMax?: number
|
||||
bufferMax?: number;
|
||||
/**
|
||||
* the execution delay, before the task is executed
|
||||
* only makes sense when running in buffered mode
|
||||
*/
|
||||
execDelay?: number
|
||||
execDelay?: number;
|
||||
/**
|
||||
* the name of the task
|
||||
*/
|
||||
name?: string
|
||||
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
|
||||
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;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -72,9 +72,9 @@ export class Task {
|
||||
*/
|
||||
trigger(x?): Promise<any> {
|
||||
if (this.buffered) {
|
||||
return this.triggerBuffered(x)
|
||||
return this.triggerBuffered(x);
|
||||
} else {
|
||||
return this.triggerUnBuffered(x)
|
||||
return this.triggerUnBuffered(x);
|
||||
}
|
||||
}
|
||||
|
||||
@ -82,25 +82,25 @@ export class Task {
|
||||
* trigger task unbuffered.
|
||||
*/
|
||||
triggerUnBuffered(x?): Promise<any> {
|
||||
return helpers.runTask(this, { x: x })
|
||||
return helpers.runTask(this, { x: x });
|
||||
}
|
||||
|
||||
/**
|
||||
* trigger task buffered.
|
||||
*/
|
||||
triggerBuffered(x?): Promise<any> {
|
||||
return this.bufferRunner.trigger(x)
|
||||
return this.bufferRunner.trigger(x);
|
||||
}
|
||||
|
||||
get state(): string {
|
||||
return this._state
|
||||
return this._state;
|
||||
}
|
||||
|
||||
set state(stateArg: string) {
|
||||
if (stateArg === 'locked') {
|
||||
this._state = 'locked'
|
||||
this._state = 'locked';
|
||||
} else {
|
||||
plugins.beautylog.error('state type ' + stateArg + ' could not be set')
|
||||
plugins.smartlog.defaultLogger.error('state type ' + stateArg + ' could not be set');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,63 +1,58 @@
|
||||
// TaskChain chains tasks
|
||||
// and extends Task
|
||||
|
||||
import * as plugins from './taskbuffer.plugins'
|
||||
import { Task } from './taskbuffer.classes.task'
|
||||
import helpers = require('./taskbuffer.classes.helpers')
|
||||
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
|
||||
taskArray: Task[];
|
||||
constructor(optionsArg: {
|
||||
taskArray: Task[],
|
||||
name?: string,
|
||||
log?: boolean,
|
||||
buffered?: boolean,
|
||||
bufferMax?: number
|
||||
taskArray: Task[];
|
||||
name?: string;
|
||||
log?: boolean;
|
||||
buffered?: boolean;
|
||||
bufferMax?: number;
|
||||
}) {
|
||||
let options = plugins.lodash.merge(
|
||||
{
|
||||
let options = {
|
||||
...{
|
||||
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)
|
||||
})
|
||||
...optionsArg,
|
||||
...{
|
||||
taskFunction: (x: any) => {
|
||||
// this is the function that gets executed when TaskChain is triggered
|
||||
let done = plugins.smartpromise.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') {
|
||||
console.log(this.name + ' running: Task' + this.taskArray[taskCounter].name);
|
||||
this.taskArray[taskCounter].trigger(x).then(x => {
|
||||
plugins.smartlog.defaultLogger.info(this.taskArray[taskCounter].name);
|
||||
taskCounter++;
|
||||
iterateTasks(x);
|
||||
});
|
||||
} else {
|
||||
this._oraObject.endOk('Taskchain "' + this.name + '" completed successfully')
|
||||
done.resolve(x)
|
||||
console.log('Taskchain "' + this.name + '" completed successfully');
|
||||
done.resolve(x);
|
||||
}
|
||||
}
|
||||
iterateTasks(x)
|
||||
return done.promise
|
||||
};
|
||||
iterateTasks(x);
|
||||
return done.promise;
|
||||
}
|
||||
}
|
||||
)
|
||||
super(options)
|
||||
this.taskArray = optionsArg.taskArray
|
||||
this._oraObject = plugins.beautylog.ora
|
||||
if (optionsArg.log === true) {
|
||||
this._oraObject.start()
|
||||
}
|
||||
};
|
||||
super(options);
|
||||
this.taskArray = optionsArg.taskArray;
|
||||
}
|
||||
addTask (taskArg: Task) {
|
||||
this.taskArray.push(taskArg)
|
||||
addTask(taskArg: Task) {
|
||||
this.taskArray.push(taskArg);
|
||||
}
|
||||
removeTask (taskArg: Task) {
|
||||
removeTask(taskArg: Task) {
|
||||
// TODO:
|
||||
}
|
||||
shiftTask () {
|
||||
shiftTask() {
|
||||
// TODO:
|
||||
}
|
||||
}
|
||||
|
@ -1,13 +1,13 @@
|
||||
import * as plugins from './taskbuffer.plugins'
|
||||
import { Task } from './taskbuffer.classes.task'
|
||||
import * as plugins from './taskbuffer.plugins';
|
||||
import { Task } from './taskbuffer.classes.task';
|
||||
|
||||
// interfaces
|
||||
import { Objectmap } from 'lik'
|
||||
import { Objectmap } from '@pushrocks/lik';
|
||||
|
||||
export class TaskManager {
|
||||
taskMap = new plugins.lik.Objectmap<Task>()
|
||||
private cronJobMap = new plugins.lik.Objectmap<ICronJob>()
|
||||
constructor () {
|
||||
taskMap = new plugins.lik.Objectmap<Task>();
|
||||
private cronJobMap = new plugins.lik.Objectmap<ICronJob>();
|
||||
constructor() {
|
||||
// nothing here
|
||||
}
|
||||
|
||||
@ -15,21 +15,21 @@ export class TaskManager {
|
||||
* checks if a task is already present
|
||||
* @param taskNameArg
|
||||
*/
|
||||
getTaskByName (taskNameArg): Task {
|
||||
return this.taskMap.find((itemArg) => {
|
||||
return itemArg.name === 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 {
|
||||
addTask(taskArg: Task): void {
|
||||
if (!taskArg.name) {
|
||||
throw new Error('taskArg needs a name to be added to taskManager')
|
||||
throw new Error('taskArg needs a name to be added to taskManager');
|
||||
}
|
||||
this.taskMap.add(taskArg)
|
||||
this.taskMap.add(taskArg);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -37,61 +37,59 @@ export class TaskManager {
|
||||
* @param taskArg
|
||||
* @param cronStringArg
|
||||
*/
|
||||
addAndScheduleTask (taskArg: Task, cronStringArg: string) {
|
||||
this.addTask(taskArg)
|
||||
let taskName = taskArg.name
|
||||
this.scheduleTaskByName(taskName, 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)
|
||||
triggerTaskByName(taskNameArg: string): Promise<any> {
|
||||
let taskToTrigger = this.getTaskByName(taskNameArg);
|
||||
if (!taskToTrigger) {
|
||||
throw new Error(`There is no task with the name of ${taskNameArg}`)
|
||||
throw new Error(`There is no task with the name of ${taskNameArg}`);
|
||||
}
|
||||
return taskToTrigger.trigger()
|
||||
return taskToTrigger.trigger();
|
||||
}
|
||||
|
||||
/**
|
||||
* schedules the task by name
|
||||
* @param taskNameArg
|
||||
*/
|
||||
scheduleTaskByName (taskNameArg: string, cronStringArg: string) {
|
||||
let taskToSchedule = this.getTaskByName(taskNameArg)
|
||||
scheduleTaskByName(taskNameArg: string, cronStringArg: string) {
|
||||
let taskToSchedule = this.getTaskByName(taskNameArg);
|
||||
let job = new plugins.cron.CronJob({
|
||||
cronTime: cronStringArg,
|
||||
onTick: () => {
|
||||
this.triggerTaskByName(taskNameArg)
|
||||
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()
|
||||
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) {
|
||||
|
||||
}
|
||||
getSchedulesForTaskName(taskNameArg: string) {}
|
||||
}
|
||||
|
||||
export interface ICronJob {
|
||||
cronString: string
|
||||
taskNameArg: string
|
||||
job: any
|
||||
cronString: string;
|
||||
taskNameArg: string;
|
||||
job: any;
|
||||
}
|
||||
|
@ -1,24 +1,21 @@
|
||||
import * as plugins from './taskbuffer.plugins'
|
||||
import * as plugins from './taskbuffer.plugins';
|
||||
|
||||
import { Task, ITaskFunction} from './taskbuffer.classes.task'
|
||||
import { Task, ITaskFunction } from './taskbuffer.classes.task';
|
||||
|
||||
/**
|
||||
* TaskOnce is run exactly once, no matter how often it is triggered
|
||||
*/
|
||||
export class TaskOnce extends Task {
|
||||
hasTriggered: boolean = false
|
||||
constructor (optionsArg: {
|
||||
name?: string,
|
||||
taskFunction: ITaskFunction
|
||||
}) {
|
||||
hasTriggered: boolean = false;
|
||||
constructor(optionsArg: { name?: string; taskFunction: ITaskFunction }) {
|
||||
super({
|
||||
name: optionsArg.name,
|
||||
taskFunction: async () => {
|
||||
if (!this.hasTriggered) {
|
||||
this.hasTriggered = true
|
||||
await optionsArg.taskFunction()
|
||||
this.hasTriggered = true;
|
||||
await optionsArg.taskFunction();
|
||||
}
|
||||
}
|
||||
})
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,28 +1,25 @@
|
||||
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,
|
||||
{
|
||||
taskArray: Task[];
|
||||
constructor(optionsArg: { taskArray: Task[] }) {
|
||||
const options = {
|
||||
...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
|
||||
let done = plugins.smartpromise.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
|
||||
};
|
||||
super(options);
|
||||
this.taskArray = optionsArg.taskArray;
|
||||
}
|
||||
}
|
||||
|
@ -1,18 +1,8 @@
|
||||
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'
|
||||
import * as smartlog from '@pushrocks/smartlog';
|
||||
let cron = require('cron');
|
||||
import * as lik from '@pushrocks/lik';
|
||||
import * as rxjs from 'rxjs';
|
||||
import * as smartpromise from '@pushrocks/smartpromise';
|
||||
import * as smartdelay from '@pushrocks/smartdelay';
|
||||
|
||||
export {
|
||||
beautylog,
|
||||
cron,
|
||||
lik,
|
||||
lodash,
|
||||
rxjs,
|
||||
q,
|
||||
smartdelay
|
||||
}
|
||||
export { smartlog, cron, lik, rxjs, smartpromise, smartdelay };
|
||||
|
546
yarn.lock
546
yarn.lock
@ -1,546 +0,0 @@
|
||||
# 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"
|
Loading…
Reference in New Issue
Block a user