From a3699f2869d6b13083a0ccad38261f492cc268ca Mon Sep 17 00:00:00 2001 From: Phil Kunz Date: Wed, 12 Jul 2017 16:45:18 +0200 Subject: [PATCH] introduce TaskOnce --- dist/index.d.ts | 1 + dist/index.js | 4 +++- dist/taskbuffer.classes.taskonce.d.ts | 11 ++++++++++ dist/taskbuffer.classes.taskonce.js | 30 +++++++++++++++++++++++++++ test/test.6.taskonce.ts | 28 +++++++++++++++++++++++++ ts/index.ts | 7 ++++--- ts/taskbuffer.classes.taskonce.ts | 24 +++++++++++++++++++++ 7 files changed, 101 insertions(+), 4 deletions(-) create mode 100644 dist/taskbuffer.classes.taskonce.d.ts create mode 100644 dist/taskbuffer.classes.taskonce.js create mode 100644 test/test.6.taskonce.ts create mode 100644 ts/taskbuffer.classes.taskonce.ts diff --git a/dist/index.d.ts b/dist/index.d.ts index 37e329d..2ef5c42 100644 --- a/dist/index.d.ts +++ b/dist/index.d.ts @@ -2,4 +2,5 @@ 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'; diff --git a/dist/index.js b/dist/index.js index 873f7a9..046dd51 100644 --- a/dist/index.js +++ b/dist/index.js @@ -8,6 +8,8 @@ var taskbuffer_classes_taskparallel_1 = require("./taskbuffer.classes.taskparall 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHFFQUE0RDtBQUFwRCx5Q0FBQSxJQUFJLENBQUE7QUFDWiwrRUFBd0Q7QUFBaEQsbURBQUEsU0FBUyxDQUFBO0FBQ2pCLHFGQUE4RDtBQUF0RCx5REFBQSxZQUFZLENBQUE7QUFDcEIsbUZBQThEO0FBQXJELHVEQUFBLFdBQVcsQ0FBQTtBQUVwQix5QkFBeUI7QUFDekIsd0NBQXFDIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHFFQUErRDtBQUF0RCx5Q0FBQSxJQUFJLENBQUE7QUFDYiwrRUFBMEQ7QUFBakQsbURBQUEsU0FBUyxDQUFBO0FBQ2xCLHFGQUFnRTtBQUF2RCx5REFBQSxZQUFZLENBQUE7QUFDckIsbUZBQThEO0FBQXJELHVEQUFBLFdBQVcsQ0FBQTtBQUNwQiw2RUFBd0Q7QUFBL0MsaURBQUEsUUFBUSxDQUFBO0FBRWpCLHlCQUF5QjtBQUN6Qix3Q0FBcUMifQ== \ No newline at end of file diff --git a/dist/taskbuffer.classes.taskonce.d.ts b/dist/taskbuffer.classes.taskonce.d.ts new file mode 100644 index 0000000..d38126c --- /dev/null +++ b/dist/taskbuffer.classes.taskonce.d.ts @@ -0,0 +1,11 @@ +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; + }); +} diff --git a/dist/taskbuffer.classes.taskonce.js b/dist/taskbuffer.classes.taskonce.js new file mode 100644 index 0000000..bac2819 --- /dev/null +++ b/dist/taskbuffer.classes.taskonce.js @@ -0,0 +1,30 @@ +"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 \ No newline at end of file diff --git a/test/test.6.taskonce.ts b/test/test.6.taskonce.ts new file mode 100644 index 0000000..5f227c8 --- /dev/null +++ b/test/test.6.taskonce.ts @@ -0,0 +1,28 @@ +import { expect, tap } from 'tapbundle' + +import * as taskbuffer from '../dist/index' + +let myNumber = 0 +let myTaskOnce: taskbuffer.TaskOnce + +tap.test('should create a valid instance of TaskOnce', async () => { + myTaskOnce = new taskbuffer.TaskOnce({ + taskFunction: async () => { + myNumber++ + } + }) + expect(myTaskOnce).to.be.instanceof(taskbuffer.TaskOnce) +}) + +tap.test('myNumber should still be 0', async () => { + 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) +}) + +tap.start() diff --git a/ts/index.ts b/ts/index.ts index f4ae404..a3dca1b 100644 --- a/ts/index.ts +++ b/ts/index.ts @@ -1,7 +1,8 @@ -export {Task,ITaskFunction} from './taskbuffer.classes.task' -export {Taskchain} from './taskbuffer.classes.taskchain' -export {Taskparallel} from './taskbuffer.classes.taskparallel' +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' diff --git a/ts/taskbuffer.classes.taskonce.ts b/ts/taskbuffer.classes.taskonce.ts new file mode 100644 index 0000000..dff67cb --- /dev/null +++ b/ts/taskbuffer.classes.taskonce.ts @@ -0,0 +1,24 @@ +import * as plugins from './taskbuffer.plugins' + +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 + }) { + super({ + name: optionsArg.name, + taskFunction: async () => { + if (!this.hasTriggered) { + this.hasTriggered = true + await optionsArg.taskFunction() + } + } + }) + } +} \ No newline at end of file