From 4fc619970f0ee1f504517409d2ab636c6593f4ea Mon Sep 17 00:00:00 2001 From: Phil Kunz Date: Thu, 6 Jul 2017 14:10:18 +0200 Subject: [PATCH] switch to native promisify --- dist/index.d.ts | 8 +- dist/index.js | 31 ++++- package.json | 6 +- test/test.ts | 62 +++++----- ts/index.ts | 51 +++++--- yarn.lock | 303 ++++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 399 insertions(+), 62 deletions(-) create mode 100644 yarn.lock diff --git a/dist/index.d.ts b/dist/index.d.ts index 9d385c6..bd2c15b 100644 --- a/dist/index.d.ts +++ b/dist/index.d.ts @@ -1,5 +1,4 @@ import 'typings-global'; -import * as typedPromisify from 'typed-promisify'; export interface IResolve { (value?: T | Promise): void; } @@ -21,5 +20,8 @@ export declare let resolvedPromise: (value?: T) => Promise; * Creates a new rejected promise for the provided reason. */ export declare let rejectedPromise: (err: any) => Promise; -export declare let promisify: typeof typedPromisify.promisify; -export declare let map: typeof typedPromisify.map; +export declare let promisify: { + (fn: Function): Function; + custom: symbol; +}; +export declare let map: (inputArg: T[], functionArg: any) => Promise; diff --git a/dist/index.js b/dist/index.js index 4e1277b..faccb28 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1,6 +1,15 @@ "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 }); require("typings-global"); -const typedPromisify = require("typed-promisify"); +const util = require("util"); class Deferred { constructor() { this.promise = new Promise((resolve, reject) => { @@ -25,6 +34,20 @@ exports.resolvedPromise = (value) => { exports.rejectedPromise = (err) => { return Promise.reject(err); }; -exports.promisify = typedPromisify.promisify; -exports.map = typedPromisify.map; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsMEJBQXVCO0FBRXZCLGtEQUFpRDtBQVVqRDtJQUlJO1FBQ0ksSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBSSxDQUFDLE9BQU8sRUFBRSxNQUFNO1lBQzFDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFBO1lBQ3RCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFBO1FBQ3hCLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQztDQUNKO0FBVkQsNEJBVUM7QUFFVSxRQUFBLEtBQUssR0FBRztJQUNmLE1BQU0sQ0FBQyxJQUFJLFFBQVEsRUFBSyxDQUFBO0FBQzVCLENBQUMsQ0FBQTtBQUVEOztHQUVHO0FBQ1EsUUFBQSxlQUFlLEdBQUcsQ0FBSSxLQUFTO0lBQ3RDLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO0FBQ2pDLENBQUMsQ0FBQTtBQUVEOztHQUVHO0FBQ1EsUUFBQSxlQUFlLEdBQUcsQ0FBQyxHQUFHO0lBQzdCLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0FBQzlCLENBQUMsQ0FBQTtBQUVVLFFBQUEsU0FBUyxHQUFHLGNBQWMsQ0FBQyxTQUFTLENBQUE7QUFDcEMsUUFBQSxHQUFHLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQSJ9 \ No newline at end of file +// native promisify +exports.promisify = util.promisify; +exports.map = (inputArg, functionArg) => __awaiter(this, void 0, void 0, function* () { + let promisifedFunction = exports.promisify(functionArg); + let promiseArray = []; + let resultArray = []; + for (let item of inputArg) { + let promise = promisifedFunction(item); + promiseArray.push(promise); + promise.then(x => { + resultArray.push(x); + }); + } + yield Promise.all(promiseArray); + return resultArray; +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUEsMEJBQXVCO0FBQ3ZCLDZCQUE0QjtBQVU1QjtJQUlFO1FBQ0UsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBSSxDQUFDLE9BQU8sRUFBRSxNQUFNO1lBQzVDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFBO1lBQ3RCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFBO1FBQ3RCLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztDQUNGO0FBVkQsNEJBVUM7QUFFVSxRQUFBLEtBQUssR0FBRztJQUNqQixNQUFNLENBQUMsSUFBSSxRQUFRLEVBQUssQ0FBQTtBQUMxQixDQUFDLENBQUE7QUFFRDs7R0FFRztBQUNRLFFBQUEsZUFBZSxHQUFHLENBQUksS0FBUztJQUN4QyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUMvQixDQUFDLENBQUE7QUFFRDs7R0FFRztBQUNRLFFBQUEsZUFBZSxHQUFHLENBQUMsR0FBRztJQUMvQixNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtBQUM1QixDQUFDLENBQUE7QUFFRCxtQkFBbUI7QUFDUixRQUFBLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFBO0FBQzFCLFFBQUEsR0FBRyxHQUFHLENBQVcsUUFBYSxFQUFDLFdBQVc7SUFDbkQsSUFBSSxrQkFBa0IsR0FBRyxpQkFBUyxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBQy9DLElBQUksWUFBWSxHQUFtQixFQUFFLENBQUE7SUFDckMsSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFBO0lBQ3BCLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDMUIsSUFBSSxPQUFPLEdBQWlCLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3BELFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDMUIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ1osV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNyQixDQUFDLENBQUMsQ0FBQTtJQUVKLENBQUM7SUFDRCxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUE7SUFDL0IsTUFBTSxDQUFDLFdBQVcsQ0FBQTtBQUNwQixDQUFDLENBQUEsQ0FBQSJ9 \ No newline at end of file diff --git a/package.json b/package.json index ad1f69e..23eca44 100644 --- a/package.json +++ b/package.json @@ -18,11 +18,9 @@ }, "homepage": "https://gitlab.com/pushrocks/smartq#README", "dependencies": { - "typed-promisify": "^0.3.0", - "typings-global": "^1.0.14" + "typings-global": "^1.0.19" }, "devDependencies": { - "smartchai": "^1.0.1", - "typings-test": "^1.0.3" + "tapbundle": "^1.1.0" } } diff --git a/test/test.ts b/test/test.ts index 9560f54..fb7f44d 100644 --- a/test/test.ts +++ b/test/test.ts @@ -1,38 +1,36 @@ -import 'typings-test' - -import { expect } from 'smartchai' +import { expect, tap } from 'tapbundle' import * as q from '../dist/index' let myCallback = (someValue1: string, cb?) => { - cb(null, someValue1) + cb(null, someValue1) } -describe('smartq', function () { - it('should return a Deferred for .defer()', function () { - let myDeferred = q.defer() - let expectPromise = expect(myDeferred.promise).to.eventually.be.fulfilled - myDeferred.resolve() - return expectPromise - }) - - it('should let types flow through the Promise', function () { - let myString = 'someString' - let myDeferred = q.defer() - let expectPromise = expect(myDeferred.promise).to.eventually.equal('someString') - myDeferred.resolve(myString) - return expectPromise - }) - - it('should promisify a callback', function () { - let myPromisified = q.promisify(myCallback) - let expectPromise = expect(myPromisified('hi')).to.eventually.equal('hi') - return expectPromise - }) - - it('should map callbacks', function() { - let inputArray = ['hi', 'awesome'] - let myPromisified = q.promisify(myCallback) - let expectPromise = expect(q.map(inputArray, myPromisified)).to.eventually.deep.equal(inputArray) - return expectPromise - }) +tap.test('should return a Deferred for .defer()', async () => { + let myDeferred = q.defer() + let expectPromise = expect(myDeferred.promise).to.eventually.be.fulfilled + myDeferred.resolve() + return expectPromise }) + +tap.test('should let types flow through the Promise', async () => { + let myString = 'someString' + let myDeferred = q.defer() + let expectPromise = expect(myDeferred.promise).to.eventually.equal('someString') + myDeferred.resolve(myString) + return expectPromise +}) + +tap.test('should promisify a callback', async () => { + let myPromisified = q.promisify(myCallback) + let expectPromise = expect(myPromisified('hi')).to.eventually.equal('hi') + return await expectPromise +}) + +tap.test('should map callbacks', async () => { + let inputArray = ['hi', 'awesome'] + let myPromisified = q.promisify(myCallback) + let expectPromise = expect(q.map(inputArray, myPromisified)).to.eventually.deep.equal(inputArray) + return expectPromise +}) + +tap.start() diff --git a/ts/index.ts b/ts/index.ts index ea84c01..b3cf5a9 100644 --- a/ts/index.ts +++ b/ts/index.ts @@ -1,45 +1,58 @@ import 'typings-global' - -import * as typedPromisify from 'typed-promisify' +import * as util from 'util' export interface IResolve { - (value?: T | Promise): void + (value?: T | Promise): void } export interface IReject { - (reason?: any): void + (reason?: any): void } export class Deferred { - promise: Promise - resolve: IResolve - reject: IReject - constructor() { - this.promise = new Promise((resolve, reject) => { - this.resolve = resolve - this.reject = reject - }) - } + promise: Promise + resolve: IResolve + reject: IReject + constructor() { + this.promise = new Promise((resolve, reject) => { + this.resolve = resolve + this.reject = reject + }) + } } export let defer = () => { - return new Deferred() + return new Deferred() } /** * Creates a new resolved promise for the provided value. */ export let resolvedPromise = (value?: T): Promise => { - return Promise.resolve(value) + return Promise.resolve(value) } /** * Creates a new rejected promise for the provided reason. */ export let rejectedPromise = (err) => { - return Promise.reject(err) + return Promise.reject(err) } -export let promisify = typedPromisify.promisify -export let map = typedPromisify.map -export let _try = typedPromisify._try +// native promisify +export let promisify = util.promisify +export let map = async (inputArg: T[],functionArg) => { + let promisifedFunction = promisify(functionArg) + let promiseArray: Promise[] = [] + let resultArray = [] + for (let item of inputArg) { + let promise: Promise = promisifedFunction(item) + promiseArray.push(promise) + promise.then(x => { + resultArray.push(x) + }) + + } + await Promise.all(promiseArray) + return resultArray +} diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..ecddc29 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,303 @@ +# 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/node@*": + version "8.0.7" + resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.7.tgz#fb0ad04b5b6f6eabe0372a32a8f1fbba5c130cae" + +"@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/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" + +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" + +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" + +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" + +es6-error@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.0.2.tgz#eec5c726eacef51b7f6b73c20db6e1b13b069c98" + +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" + +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" + +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.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" + +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" + +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" + +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" + +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" + +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, 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" + +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"