From 37349a7c501bd3d0e7b96a6351e41da1c72190e5 Mon Sep 17 00:00:00 2001 From: Samuel Reed Date: Fri, 1 Sep 2017 09:54:49 -0500 Subject: [PATCH 1/4] fix(shutdown): cleanup eventEmitter on shutdown. --- toobusy.js | 1 + 1 file changed, 1 insertion(+) diff --git a/toobusy.js b/toobusy.js index 1f6f7ac..9c24d2c 100644 --- a/toobusy.js +++ b/toobusy.js @@ -119,6 +119,7 @@ toobusy.smoothingFactor = function(newFactor){ toobusy.shutdown = function(){ currentLag = 0; checkInterval = clearInterval(checkInterval); + eventEmitter.removeAllListeners(LAG_EVENT); }; toobusy.started = function() { From a4ce51a9aa50eaf7d6727d439a0f3cddb3d92db0 Mon Sep 17 00:00:00 2001 From: Samuel Reed Date: Fri, 1 Sep 2017 09:55:08 -0500 Subject: [PATCH 2/4] fix(start): Prevent possible minor inaccuracy on start. --- toobusy.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/toobusy.js b/toobusy.js index 9c24d2c..f17dd24 100644 --- a/toobusy.js +++ b/toobusy.js @@ -19,7 +19,7 @@ var SMOOTHING_FACTOR = 1/3; // Vars // -var lastTime = Date.now(); +var lastTime; var highWater = STANDARD_HIGHWATER; var interval = STANDARD_INTERVAL; var smoothingFactor = SMOOTHING_FACTOR; @@ -147,6 +147,8 @@ toobusy.onLag = function (fn, threshold) { * Private - starts checking lag. */ function start() { + lastTime = Date.now(); + checkInterval = setInterval(function(){ var now = Date.now(); var lag = now - lastTime; From 0f8e411aa6780cd65c877a2a994e05054eedd2be Mon Sep 17 00:00:00 2001 From: Samuel Reed Date: Fri, 1 Sep 2017 09:55:30 -0500 Subject: [PATCH 3/4] refactor(started): no implicit bool --- toobusy.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/toobusy.js b/toobusy.js index f17dd24..9ec9959 100644 --- a/toobusy.js +++ b/toobusy.js @@ -123,7 +123,7 @@ toobusy.shutdown = function(){ }; toobusy.started = function() { - return !!checkInterval; + return Boolean(checkInterval); }; /** From 181b58f35d88e2f9efd7db31f09ff6e2a6c8de66 Mon Sep 17 00:00:00 2001 From: Samuel Reed Date: Fri, 1 Sep 2017 10:41:16 -0500 Subject: [PATCH 4/4] refactor(pkg): Update devDependencies, more reliable tests Some of the tests were relying on lag or holdover from previous tests and only happened to pass incidentally. This commit fixes some of that behavior. --- .npmignore | 3 + package.json | 4 +- tests.js | 60 +++++---- toobusy.js | 5 +- yarn.lock | 343 +++++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 380 insertions(+), 35 deletions(-) create mode 100644 .npmignore create mode 100644 yarn.lock diff --git a/.npmignore b/.npmignore new file mode 100644 index 0000000..4339d3f --- /dev/null +++ b/.npmignore @@ -0,0 +1,3 @@ +yarn.lock +examples/ +tests.js diff --git a/package.json b/package.json index e49e3b2..0754a30 100644 --- a/package.json +++ b/package.json @@ -5,9 +5,9 @@ "version": "0.5.1", "dependencies": {}, "devDependencies": { - "mocha": "1.7.0", + "mocha": "^3.5.0", "pre-commit": "^1.0.5", - "should": "1.2.1" + "should": "^12.0.0" }, "maintainers": [ "Samuel Reed " diff --git a/tests.js b/tests.js index 19548eb..ad24609 100644 --- a/tests.js +++ b/tests.js @@ -12,11 +12,11 @@ function tightWork(duration) { /*global describe, it, beforeEach, afterEach */ describe('the library', function() { it('should export a couple functions', function() { - (toobusy).should.be.a('function'); - (toobusy.maxLag).should.be.a('function'); - (toobusy.shutdown).should.be.a('function'); - (toobusy.interval).should.be.a('function'); - (toobusy.shutdown).should.be.a('function'); + should(toobusy).be.Function(); + (toobusy.maxLag).should.be.Function(); + (toobusy.shutdown).should.be.Function(); + (toobusy.interval).should.be.Function(); + (toobusy.shutdown).should.be.Function(); (toobusy).should.not.have.property('start'); }); it('should start automatically', function() { @@ -61,9 +61,9 @@ describe('toobusy()', function() { // is nice for making these tests independent of each other. beforeEach(function() { toobusy.maxLag(10); - toobusy.interval(250); + toobusy.interval(50); }); - afterEach(function() { + after(function() { toobusy.maxLag(70); toobusy.interval(500); }); @@ -94,75 +94,73 @@ describe('toobusy()', function() { it('should not emit lag events if the lag is less than the configured threshold', testLagEvent(100, 50, false)); it('should emit lag events if the lag is greater than the configured threshold', - testLagEvent(50, 100, true)); + testLagEvent(50, 150, true)); it('should emit lag events if lag occurs and no threshold is specified', testLagEvent(undefined, 500, true)); function testLagEvent(threshold, work, expectFire) { return function (done) { var calledDone = false; + var finish = function() { + if (calledDone) return; + calledDone = true; + toobusy.shutdown(); // stops onLag() from firing again + clearTimeout(workTimeout); + done.apply(null, arguments); + }; toobusy.onLag(function (lag) { - if (calledDone) { - return; - } - if (!expectFire) { - calledDone = true; - done(new Error('lag event fired unexpectedly')); - return; + return finish(new Error('lag event fired unexpectedly')); } should.exist(lag); lag.should.be.above(threshold || 0); - - calledDone = true; - done(); + finish(); }, threshold); if (!expectFire) { setTimeout(function () { - if (!calledDone) { - calledDone = true; - done(); - } + finish(); }, work + threshold); } - tightWork(work); + // Do work 3x to work around smoothing factor + var count = 0; + var workTimeout = setTimeout(function working() { + tightWork(work); + if (++count < 3) workTimeout = setTimeout(working); + }) } } }); }); describe('smoothingFactor', function() { - //Sometimes the default 2s timeout is hit on this suite, raise to 10s. + // Sometimes the default 2s timeout is hit on this suite, raise to 10s. this.timeout(10 * 1000); beforeEach(function() { toobusy.maxLag(10); toobusy.interval(250); }); - afterEach(function() { + after(function() { toobusy.maxLag(70); toobusy.interval(500); }); - it('should default to 1/3', function(done) { + it('should default to 1/3', function() { (toobusy.smoothingFactor()).should.equal(1/3); - done(); }); - it('should throw an exception for invalid values', function(done) { + it('should throw an exception for invalid values', function() { (function() { toobusy.smoothingFactor(0); }).should.throw; (function() { toobusy.smoothingFactor(2); }).should.throw; (function() { toobusy.smoothingFactor(-1); }).should.throw; (function() { toobusy.smoothingFactor(1); }).should.not.throw; - done(); }); - it('should be configurable', function(done) { + it('should be configurable', function() { (toobusy.smoothingFactor(0.9)).should.equal(0.9); (toobusy.smoothingFactor(0.1)).should.equal(0.1); (toobusy.smoothingFactor()).should.equal(0.1); - done(); }); it('should allow no dampening', function(done) { var cycles_to_toobusy = 0; diff --git a/toobusy.js b/toobusy.js index 9ec9959..7fe7584 100644 --- a/toobusy.js +++ b/toobusy.js @@ -54,7 +54,7 @@ toobusy.interval = function(newInterval) { newInterval = Math.round(newInterval); if(newInterval < 16) throw new Error("Interval should be greater than 16ms."); - toobusy.shutdown(); + currentLag = 0; interval = newInterval; start(); return interval; @@ -123,7 +123,7 @@ toobusy.shutdown = function(){ }; toobusy.started = function() { - return Boolean(checkInterval); + return Boolean(checkInterval != null); }; /** @@ -149,6 +149,7 @@ toobusy.onLag = function (fn, threshold) { function start() { lastTime = Date.now(); + clearInterval(checkInterval); checkInterval = setInterval(function(){ var now = Date.now(); var lag = now - lastTime; diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..033ba3c --- /dev/null +++ b/yarn.lock @@ -0,0 +1,343 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + +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" + +browser-stdout@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" + +commander@2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" + dependencies: + graceful-readlink ">= 1.0.0" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + +concat-stream@^1.4.7: + version "1.6.0" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" + dependencies: + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + +cross-spawn@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +debug@2.6.8: + version "2.6.8" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" + dependencies: + ms "2.0.0" + +diff@3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" + +escape-string-regexp@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + +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.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.2" + once "^1.3.0" + path-is-absolute "^1.0.0" + +"graceful-readlink@>= 1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" + +growl@1.9.2: + version "1.9.2" + resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f" + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + +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, inherits@^2.0.3, inherits@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + +json3@3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" + +lodash._baseassign@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" + dependencies: + lodash._basecopy "^3.0.0" + lodash.keys "^3.0.0" + +lodash._basecopy@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" + +lodash._basecreate@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821" + +lodash._getnative@^3.0.0: + version "3.9.1" + resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" + +lodash._isiterateecall@^3.0.0: + version "3.0.9" + resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" + +lodash.create@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7" + dependencies: + lodash._baseassign "^3.0.0" + lodash._basecreate "^3.0.0" + lodash._isiterateecall "^3.0.0" + +lodash.isarguments@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + +lodash.isarray@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" + +lodash.keys@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" + dependencies: + lodash._getnative "^3.0.0" + lodash.isarguments "^3.0.0" + lodash.isarray "^3.0.0" + +lru-cache@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55" + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +minimatch@^3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + +mkdirp@0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + dependencies: + minimist "0.0.8" + +mocha@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-3.5.0.tgz#1328567d2717f997030f8006234bce9b8cd72465" + dependencies: + browser-stdout "1.3.0" + commander "2.9.0" + debug "2.6.8" + diff "3.2.0" + escape-string-regexp "1.0.5" + glob "7.1.1" + growl "1.9.2" + json3 "3.3.2" + lodash.create "3.1.1" + mkdirp "0.5.1" + supports-color "3.1.2" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + +os-shim@^0.1.2: + version "0.1.3" + resolved "https://registry.yarnpkg.com/os-shim/-/os-shim-0.1.3.tgz#6b62c3791cf7909ea35ed46e17658bb417cb3917" + +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" + +pre-commit@^1.0.5: + version "1.2.2" + resolved "https://registry.yarnpkg.com/pre-commit/-/pre-commit-1.2.2.tgz#dbcee0ee9de7235e57f79c56d7ce94641a69eec6" + dependencies: + cross-spawn "^5.0.1" + spawn-sync "^1.0.15" + which "1.2.x" + +process-nextick-args@~1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + +readable-stream@^2.2.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~1.0.6" + safe-buffer "~5.1.1" + string_decoder "~1.0.3" + util-deprecate "~1.0.1" + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + +should-equal@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/should-equal/-/should-equal-2.0.0.tgz#6072cf83047360867e68e98b09d71143d04ee0c3" + dependencies: + should-type "^1.4.0" + +should-format@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/should-format/-/should-format-3.0.3.tgz#9bfc8f74fa39205c53d38c34d717303e277124f1" + dependencies: + should-type "^1.3.0" + should-type-adaptors "^1.0.1" + +should-type-adaptors@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/should-type-adaptors/-/should-type-adaptors-1.0.1.tgz#efe5553cdf68cff66e5c5f51b712dc351c77beaa" + dependencies: + should-type "^1.3.0" + should-util "^1.0.0" + +should-type@^1.3.0, should-type@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/should-type/-/should-type-1.4.0.tgz#0756d8ce846dfd09843a6947719dfa0d4cff5cf3" + +should-util@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/should-util/-/should-util-1.0.0.tgz#c98cda374aa6b190df8ba87c9889c2b4db620063" + +should@^12.0.0: + version "12.0.0" + resolved "https://registry.yarnpkg.com/should/-/should-12.0.0.tgz#846667cd241691a6509fff0820f44d39143ddcf7" + dependencies: + should-equal "^2.0.0" + should-format "^3.0.3" + should-type "^1.4.0" + should-type-adaptors "^1.0.1" + should-util "^1.0.0" + +spawn-sync@^1.0.15: + version "1.0.15" + resolved "https://registry.yarnpkg.com/spawn-sync/-/spawn-sync-1.0.15.tgz#b00799557eb7fb0c8376c29d44e8a1ea67e57476" + dependencies: + concat-stream "^1.4.7" + os-shim "^0.1.2" + +string_decoder@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" + dependencies: + safe-buffer "~5.1.0" + +supports-color@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5" + dependencies: + has-flag "^1.0.0" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + +which@1.2.x: + version "1.2.14" + resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" + dependencies: + isexe "^2.0.0" + +which@^1.2.9: + version "1.3.0" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" + dependencies: + isexe "^2.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"