From 75358d0b662f1380351fd117b56197dae016e82e Mon Sep 17 00:00:00 2001 From: Phil Kunz Date: Mon, 5 Jun 2017 00:32:01 +0200 Subject: [PATCH] add cancelable Timeout --- dist/index.d.ts | 14 +++ dist/index.js | 29 +++++- package-lock.json | 12 +++ package.json | 7 +- test/test.d.ts | 1 - test/test.js | 30 ------ test/test.ts | 62 ++++++----- ts/index.ts | 49 +++++++-- yarn.lock | 258 ++++++++++++++++++++++++++++++++++++++++++++++ 9 files changed, 390 insertions(+), 72 deletions(-) create mode 100644 package-lock.json delete mode 100644 test/test.d.ts delete mode 100644 test/test.js create mode 100644 yarn.lock diff --git a/dist/index.d.ts b/dist/index.d.ts index 9bb461f..b76005f 100644 --- a/dist/index.d.ts +++ b/dist/index.d.ts @@ -1,2 +1,16 @@ import 'typings-global'; +/** + * delay something, works like setTimeout + * @param timeInMillisecond + * @param passOn + */ export declare let delayFor: (timeInMillisecond: number, passOn?: T) => Promise; +export declare class Timeout { + promise: Promise; + private _deferred; + private _timeout; + private _cancelled; + constructor(timeInMillisecondArg: any, passOn?: T); + makeUnrefed(): void; + cancel(): void; +} diff --git a/dist/index.js b/dist/index.js index 7ff57c3..96eb024 100644 --- a/dist/index.js +++ b/dist/index.js @@ -7,7 +7,14 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; +Object.defineProperty(exports, "__esModule", { value: true }); require("typings-global"); +const smartq = require("smartq"); +/** + * delay something, works like setTimeout + * @param timeInMillisecond + * @param passOn + */ exports.delayFor = (timeInMillisecond, passOn) => __awaiter(this, void 0, void 0, function* () { yield new Promise((resolve, reject) => { setTimeout(() => { @@ -16,4 +23,24 @@ exports.delayFor = (timeInMillisecond, passOn) => __awaiter(this, void 0, void 0 }); return passOn; }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSwwQkFBdUI7QUFFWixRQUFBLFFBQVEsR0FBRyxDQUFVLGlCQUF5QixFQUFFLE1BQVU7SUFDakUsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNO1FBQzlCLFVBQVUsQ0FDTjtZQUNJLE9BQU8sRUFBRSxDQUFBO1FBQ2IsQ0FBQyxFQUNELGlCQUFpQixDQUNwQixDQUFBO0lBQ0wsQ0FBQyxDQUFDLENBQUE7SUFDRixNQUFNLENBQUMsTUFBTSxDQUFBO0FBQ2pCLENBQUMsQ0FBQSxDQUFBIn0= \ No newline at end of file +class Timeout { + constructor(timeInMillisecondArg, passOn) { + this._cancelled = false; + this._deferred = smartq.defer(); + this.promise = this._deferred.promise; + this._timeout = setTimeout(() => { + if (!this._cancelled) { + this._deferred.resolve(passOn); + } + }, timeInMillisecondArg); + } + makeUnrefed() { + this._timeout.unref(); + } + cancel() { + this._cancelled = true; + this.makeUnrefed(); + } +} +exports.Timeout = Timeout; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUEsMEJBQXVCO0FBQ3ZCLGlDQUFnQztBQUVoQzs7OztHQUlHO0FBQ1EsUUFBQSxRQUFRLEdBQUcsQ0FBVSxpQkFBeUIsRUFBRSxNQUFVO0lBQ25FLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTTtRQUNoQyxVQUFVLENBQ1I7WUFDRSxPQUFPLEVBQUUsQ0FBQTtRQUNYLENBQUMsRUFDRCxpQkFBaUIsQ0FDbEIsQ0FBQTtJQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0YsTUFBTSxDQUFDLE1BQU0sQ0FBQTtBQUNmLENBQUMsQ0FBQSxDQUFBO0FBRUQ7SUFLRSxZQUFhLG9CQUFvQixFQUFFLE1BQVU7UUFEckMsZUFBVSxHQUFZLEtBQUssQ0FBQTtRQUVqQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUssQ0FBQTtRQUNsQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFBO1FBQ3JDLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO1lBQ3pCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQ2hDLENBQUM7UUFDSCxDQUFDLEVBQUUsb0JBQW9CLENBQUMsQ0FBQTtJQUMxQixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUE7SUFDdkIsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQTtRQUN0QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUE7SUFDcEIsQ0FBQztDQUNGO0FBdkJELDBCQXVCQyJ9 \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..1428ddc --- /dev/null +++ b/package-lock.json @@ -0,0 +1,12 @@ +{ + "name": "smartdelay", + "version": "1.0.1", + "lockfileVersion": 1, + "dependencies": { + "@types/node": { + "version": "7.0.27", + "resolved": "https://registry.npmjs.org/@types/node/-/node-7.0.27.tgz", + "integrity": "sha512-2QMiuVOEye2yKmMwE1V96C9HSShmT0WSm6dv2WjacvePEjQNNJGAerTO5hdYhj5lpdK5MW+FVxmyzDhr4omIdw==" + } + } +} diff --git a/package.json b/package.json index 3848eab..4345cca 100644 --- a/package.json +++ b/package.json @@ -18,11 +18,10 @@ }, "homepage": "https://gitlab.com/pushrocks/smartdelay#README", "dependencies": { - "typings-global": "^1.0.14" + "smartq": "^1.1.1", + "typings-global": "^1.0.16" }, "devDependencies": { - "@types/should": "^8.1.30", - "should": "^11.1.2", - "typings-test": "^1.0.3" + "tapbundle": "^1.0.13" } } diff --git a/test/test.d.ts b/test/test.d.ts deleted file mode 100644 index 2fd432a..0000000 --- a/test/test.d.ts +++ /dev/null @@ -1 +0,0 @@ -import 'typings-test'; diff --git a/test/test.js b/test/test.js deleted file mode 100644 index 1217757..0000000 --- a/test/test.js +++ /dev/null @@ -1,30 +0,0 @@ -"use strict"; -require("typings-test"); -const should = require("should"); -const smartdelay = require("../dist/index"); -describe('smartdelay', function () { - it('.delayFor should delay async', function (done) { - this.timeout(5000); - let timePassed = false; - setTimeout(() => { - timePassed = true; - }, 2000); - smartdelay.delayFor(3000).then(() => { - should(timePassed).be.true(); - done(); - }); - }); - it('.delayFor should pass on a type', function (done) { - this.timeout(5000); - let timePassed = false; - setTimeout(() => { - timePassed = true; - }, 2000); - let hey = 'heyThere'; - smartdelay.delayFor(3000, hey).then((stringArg) => { - should(stringArg).equal('heyThere'); - done(); - }); - }); -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHdCQUFxQjtBQUVyQixpQ0FBZ0M7QUFFaEMsNENBQTJDO0FBRTNDLFFBQVEsQ0FBQyxZQUFZLEVBQUU7SUFDbkIsRUFBRSxDQUFDLDhCQUE4QixFQUFFLFVBQVMsSUFBSTtRQUM1QyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ2xCLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQTtRQUN0QixVQUFVLENBQUM7WUFDUCxVQUFVLEdBQUcsSUFBSSxDQUFBO1FBQ3JCLENBQUMsRUFBQyxJQUFJLENBQUMsQ0FBQTtRQUNQLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQzNCLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUE7WUFDNUIsSUFBSSxFQUFFLENBQUE7UUFDVixDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUMsQ0FBQyxDQUFBO0lBQ0YsRUFBRSxDQUFDLGlDQUFpQyxFQUFFLFVBQVMsSUFBSTtRQUMvQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ2xCLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQTtRQUN0QixVQUFVLENBQUM7WUFDUCxVQUFVLEdBQUcsSUFBSSxDQUFBO1FBQ3JCLENBQUMsRUFBQyxJQUFJLENBQUMsQ0FBQTtRQUNQLElBQUksR0FBRyxHQUFHLFVBQVUsQ0FBQTtRQUNwQixVQUFVLENBQUMsUUFBUSxDQUFTLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTO1lBQ2xELE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUE7WUFDbkMsSUFBSSxFQUFFLENBQUE7UUFDVixDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUMsQ0FBQyxDQUFBO0FBQ04sQ0FBQyxDQUFDLENBQUEifQ== \ No newline at end of file diff --git a/test/test.ts b/test/test.ts index 58c0962..87df8c3 100644 --- a/test/test.ts +++ b/test/test.ts @@ -1,31 +1,39 @@ -import 'typings-test' - -import * as should from 'should' +import { expect, tap } from 'tapbundle' import * as smartdelay from '../dist/index' -describe('smartdelay', function () { - it('.delayFor should delay async', function(done) { - this.timeout(5000) - let timePassed = false - setTimeout(() => { - timePassed = true - },2000) - smartdelay.delayFor(3000).then(() => { - should(timePassed).be.true() - done() - }) - }) - it('.delayFor should pass on a type', function(done) { - this.timeout(5000) - let timePassed = false - setTimeout(() => { - timePassed = true - },2000) - let hey = 'heyThere' - smartdelay.delayFor(3000, hey).then((stringArg) => { - should(stringArg).equal('heyThere') - done() - }) - }) +tap.test('.delayFor should delay async', async (tools) => { + tools.timeout(5000) + let timePassed = false + setTimeout(() => { + timePassed = true + }, 2000) + await smartdelay.delayFor(3000).then(async () => { + // tslint:disable-next-line:no-unused-expression + expect(timePassed).to.be.true + }) }) + +tap.test('.delayFor should pass on a type', async (tools) => { + tools.timeout(5000) + let timePassed = false + setTimeout(() => { + timePassed = true + }, 2000) + let hey = 'heyThere' + await smartdelay.delayFor(3000, hey).then(async (stringArg) => { + expect(stringArg).equal('heyThere') + }) +}) + +tap.test('smartdelay.Timeout', async () => { + let timeout = new smartdelay.Timeout(2000) + await timeout.promise +}) + +tap.test('smartdelay.Timeout should cancel', async (tools) => { + let timeout = new smartdelay.Timeout(60000) + timeout.cancel() +}) + +tap.start() diff --git a/ts/index.ts b/ts/index.ts index 00fb994..d1a7412 100644 --- a/ts/index.ts +++ b/ts/index.ts @@ -1,13 +1,44 @@ import 'typings-global' +import * as smartq from 'smartq' +/** + * delay something, works like setTimeout + * @param timeInMillisecond + * @param passOn + */ export let delayFor = async (timeInMillisecond: number, passOn?: T) => { - await new Promise((resolve, reject) => { - setTimeout( - () => { - resolve() - }, - timeInMillisecond - ) - }) - return passOn + await new Promise((resolve, reject) => { + setTimeout( + () => { + resolve() + }, + timeInMillisecond + ) + }) + return passOn +} + +export class Timeout { + promise: Promise + private _deferred: smartq.Deferred + private _timeout: any + private _cancelled: boolean = false + constructor (timeInMillisecondArg, passOn?: T) { + this._deferred = smartq.defer() + this.promise = this._deferred.promise + this._timeout = setTimeout(() => { + if (!this._cancelled) { + this._deferred.resolve(passOn) + } + }, timeInMillisecondArg) + } + + makeUnrefed () { + this._timeout.unref() + } + + cancel () { + this._cancelled = true + this.makeUnrefed() + } } diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..24c5124 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,258 @@ +# 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@*", "@types/chai@^3.4.35": + version "3.5.2" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-3.5.2.tgz#c11cd2817d3a401b7ba0f5a420f35c56139b1c1e" + +"@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" + +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" + +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@^0.4.1: + version "0.4.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" + +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" + +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.7" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.7.tgz#3effc3c50e000531fb720eaff80f0ae8ef23cf59" + dependencies: + balanced-match "^0.4.1" + 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.3.0" + resolved "https://registry.yarnpkg.com/chai-string/-/chai-string-1.3.0.tgz#df6139f294391b1035be5606f60a843b3a5041e7" + +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" + +check-error@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + +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" + +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" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + +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" + +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" + +leakage@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/leakage/-/leakage-0.2.0.tgz#9e7a8cc1d241d8c8427e348769e192e172fd8733" + dependencies: + 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" + +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" + +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" + +nan@^2.3.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.6.2.tgz#e4ff34e6c95fdfb5aecc08de6596f43605a7db45" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + +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" + +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" + +semver@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + +shelljs@^0.7.7: + version "0.7.7" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.7.tgz#b2f5c77ef97148f4b4f6e22682e10bba8667cff1" + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + +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.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/smartdelay/-/smartdelay-1.0.1.tgz#687f8bcc09d7c62c9c5a8a1771c1aba3aff54156" + dependencies: + typings-global "^1.0.14" + +smartq@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/smartq/-/smartq-1.1.1.tgz#efb358705260d41ae18aef7ffd815f7b6fe17dd3" + dependencies: + typed-promisify "^0.3.0" + typings-global "^1.0.14" + +tapbundle@^1.0.13: + version "1.0.13" + resolved "https://registry.yarnpkg.com/tapbundle/-/tapbundle-1.0.13.tgz#0b274aed6a386c0c01d8d517709381ce96e3971e" + dependencies: + early "^2.1.1" + leakage "^0.2.0" + smartchai "^1.0.3" + smartdelay "^1.0.1" + smartq "^1.1.1" + typings-global "^1.0.16" + +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" + +typed-promisify@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/typed-promisify/-/typed-promisify-0.3.0.tgz#1ba0af5e444c87d8047406f18ce49092a1191853" + +typings-global@^1.0.14, typings-global@^1.0.16: + version "1.0.16" + resolved "https://registry.yarnpkg.com/typings-global/-/typings-global-1.0.16.tgz#489b71781af24268750c2899316400a5e482961f" + dependencies: + semver "^5.3.0" + shelljs "^0.7.7" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"