diff --git a/lib/utils/update-check.js b/lib/utils/update-check.js index 0b81f1ce3..11094b7b9 100644 --- a/lib/utils/update-check.js +++ b/lib/utils/update-check.js @@ -1,30 +1,15 @@ 'use strict'; -const Promise = require('bluebird'); -const updateNotifier = require('update-notifier'); +const latestVersion = require('latest-version'); +const semver = require('semver'); const pkg = require('../../package.json'); -/* - * Update notifier sends several different types of updates, - * we want to make sure the only ones that trigger a warning are - * major, minor, and patch releases. This allows us to push prereleases - * & such in the future without those triggering a warning for users - * - * see https://github.com/yeoman/update-notifier#comprehensive for the different types - * of updates - */ -const typesToWarn = [ - 'major', - 'minor', - 'patch' -]; - /** * Checks if a version update is available * @param {UI} ui ui instance */ module.exports = function updateCheck(ui) { - return Promise.fromCallback(cb => updateNotifier({pkg: pkg, callback: cb})).then((update) => { - if (typesToWarn.includes(update.type)) { + return latestVersion(pkg.name).then((latest) => { + if (semver.lt(pkg.version, latest)) { const chalk = require('chalk'); ui.log( @@ -34,7 +19,5 @@ module.exports = function updateCheck(ui) { 'yellow' ); } - - return Promise.resolve(); }); }; diff --git a/package.json b/package.json index 8788e0d37..50dd07237 100644 --- a/package.json +++ b/package.json @@ -62,6 +62,7 @@ "got": "8.3.1", "inquirer": "5.2.0", "is-running": "2.1.0", + "latest-version": "3.1.0", "listr": "0.14.1", "lodash": "4.17.10", "log-symbols": "2.2.0", @@ -81,7 +82,6 @@ "symlink-or-copy": "1.2.0", "systeminformation": "3.41.3", "tail": "1.2.3", - "update-notifier": "2.5.0", "validator": "7.2.0", "yargs": "11.0.0", "yarn": "1.7.0" diff --git a/test/unit/utils/update-check-spec.js b/test/unit/utils/update-check-spec.js index b3661367c..705e7d4d2 100644 --- a/test/unit/utils/update-check-spec.js +++ b/test/unit/utils/update-check-spec.js @@ -1,5 +1,5 @@ 'use strict'; -const expect = require('chai').expect; +const {expect} = require('chai'); const proxyquire = require('proxyquire').noCallThru(); const sinon = require('sinon'); const stripAnsi = require('strip-ansi'); @@ -7,80 +7,49 @@ const stripAnsi = require('strip-ansi'); const modulePath = '../../../lib/utils/update-check'; describe('Unit: Utils > update-check', function () { - it('rejects error if updateNotifier has an error', function (done) { + it('rejects error if latestVersion has an error', function (done) { const pkg = {name: 'ghost', version: '1.0.0'}; const testError = new Error('update check'); - const updateNotifer = sinon.stub().callsFake((options) => { - expect(options).to.exist; - expect(options.pkg).to.deep.equal(pkg); - expect(options.callback).to.be.a('function'); - options.callback(testError, null); - }); + const latestVersion = sinon.stub().rejects(testError); const updateCheck = proxyquire(modulePath, { '../../package.json': pkg, - 'update-notifier': updateNotifer + 'latest-version': latestVersion }); updateCheck().catch((err) => { expect(err.message).to.equal(testError.message); + expect(latestVersion.calledOnce).to.be.true; + expect(latestVersion.calledWithExactly('ghost')).to.be.true; done(); }); }); - it('resolves immediately if there are no updates', function () { + it('doesn\'t do anything if there are no updates', function () { const pkg = {name: 'ghost', version: '1.0.0'}; - const updateNotifer = sinon.stub().callsFake((options) => { - expect(options).to.exist; - expect(options.pkg).to.deep.equal(pkg); - expect(options.callback).to.be.a('function'); - options.callback(null, {type: 'latest'}); - }); + const latestVersion = sinon.stub().resolves('1.0.0'); const logStub = sinon.stub(); const updateCheck = proxyquire(modulePath, { '../../package.json': pkg, - 'update-notifier': updateNotifer - }); - - return updateCheck({log: logStub}).then(() => { - expect(logStub.called).to.be.false; - }); - }); - - it('doesn\'t log a message if the type of update is not major, minor, or patch', function () { - const pkg = {name: 'ghost', version: '1.0.0'}; - const updateNotifer = sinon.stub().callsFake((options) => { - expect(options).to.exist; - expect(options.pkg).to.deep.equal(pkg); - expect(options.callback).to.be.a('function'); - options.callback(null, {type: 'prerelease'}); - }); - const logStub = sinon.stub(); - - const updateCheck = proxyquire(modulePath, { - '../../package.json': pkg, - 'update-notifier': updateNotifer + 'latest-version': latestVersion }); return updateCheck({log: logStub}).then(() => { expect(logStub.called).to.be.false; + expect(latestVersion.calledOnce).to.be.true; + expect(latestVersion.calledWithExactly('ghost')).to.be.true; }); }); it('logs a message if an update is available', function () { const pkg = {name: 'ghost', version: '1.0.0'}; - const updateNotifer = sinon.stub().callsFake((options) => { - expect(options).to.exist; - expect(options.pkg).to.deep.equal(pkg); - expect(options.callback).to.be.a('function'); - options.callback(null, {type: 'minor'}); - }); + const latestVersion = sinon.stub().resolves('1.1.0'); const logStub = sinon.stub(); const updateCheck = proxyquire(modulePath, { '../../package.json': pkg, - 'update-notifier': updateNotifer + 'latest-version': latestVersion }); return updateCheck({log: logStub}).then(() => { @@ -89,6 +58,9 @@ describe('Unit: Utils > update-check', function () { const log = logStub.args[0][0]; expect(stripAnsi(log)).to.match(/You are running an outdated version of Ghost-CLI/); + + expect(latestVersion.calledOnce).to.be.true; + expect(latestVersion.calledWithExactly('ghost')).to.be.true; }); }); }); diff --git a/yarn.lock b/yarn.lock index 158786a90..6d6220e0b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -79,12 +79,6 @@ amdefine@>=0.0.4: version "1.0.1" resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" -ansi-align@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" - dependencies: - string-width "^2.0.0" - ansi-escapes@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" @@ -333,18 +327,6 @@ boom@5.x.x: dependencies: hoek "4.x.x" -boxen@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" - dependencies: - ansi-align "^2.0.0" - camelcase "^4.0.0" - chalk "^2.0.1" - cli-boxes "^1.0.0" - string-width "^2.0.0" - term-size "^1.2.0" - widest-line "^2.0.0" - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -473,13 +455,13 @@ camelcase@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" -camelcase@^4.0.0, camelcase@^4.1.0: +camelcase@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" capture-stack-trace@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d" + resolved "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d" caseless@~0.12.0: version "0.12.0" @@ -538,10 +520,6 @@ check-error@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" -ci-info@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.3.tgz#710193264bb05c77b8c90d02f5aaf22216a667b2" - circular-json@^0.3.1: version "0.3.3" resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" @@ -559,10 +537,6 @@ clean-stack@^1.0.0: version "1.3.0" resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-1.3.0.tgz#9e821501ae979986c46b1d66d2d432db2fd4ae31" -cli-boxes@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" - cli-cursor@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" @@ -717,17 +691,6 @@ config-chain@^1.1.11: ini "^1.3.4" proto-list "~1.2.1" -configstore@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.2.tgz#c6f25defaeef26df12dd33414b001fe81a543f8f" - dependencies: - dot-prop "^4.1.0" - graceful-fs "^4.1.2" - make-dir "^1.0.0" - unique-string "^1.0.0" - write-file-atomic "^2.0.0" - xdg-basedir "^3.0.0" - content-disposition@^0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" @@ -900,7 +863,7 @@ coveralls@3.0.1: create-error-class@^3.0.0: version "3.0.2" - resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" + resolved "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" dependencies: capture-stack-trace "^1.0.0" @@ -942,10 +905,6 @@ cryptiles@3.x.x: dependencies: boom "5.x.x" -crypto-random-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" - csv-parser@^1.6.0: version "1.12.1" resolved "https://registry.yarnpkg.com/csv-parser/-/csv-parser-1.12.1.tgz#391e1ef961b1f9dcb4c7c0f82eb450a1bd916158" @@ -1079,9 +1038,9 @@ deep-eql@^3.0.0: dependencies: type-detect "^4.0.0" -deep-extend@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.5.1.tgz#b894a9dd90d3023fbf1c55a394fb858eb2066f1f" +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" deep-is@~0.1.3: version "0.1.3" @@ -1156,12 +1115,6 @@ dot-prop@^3.0.0: dependencies: is-obj "^1.0.0" -dot-prop@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" - dependencies: - is-obj "^1.0.0" - dotgitignore@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/dotgitignore/-/dotgitignore-1.0.3.tgz#a442cbde7dc20dff51cdb849e4c5a64568c07923" @@ -1744,12 +1697,6 @@ glob@7.1.2, glob@^7.0.3, glob@^7.0.5, glob@^7.0.6, glob@^7.1.2: once "^1.3.0" path-is-absolute "^1.0.0" -global-dirs@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" - dependencies: - ini "^1.3.4" - global-modules@1.0.0, global-modules@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" @@ -1811,7 +1758,7 @@ got@8.3.1, got@^8.3.1: got@^6.7.1: version "6.7.1" - resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" + resolved "https://registry.npmjs.org/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" dependencies: create-error-class "^3.0.0" duplexer3 "^0.1.4" @@ -1968,10 +1915,6 @@ ignore@^3.3.3: version "3.3.8" resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.8.tgz#3f8e9c35d38708a3a7e0e9abb6c73e7ee7707b2b" -import-lazy@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" - imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -2087,12 +2030,6 @@ is-builtin-module@^1.0.0: dependencies: builtin-modules "^1.0.0" -is-ci@^1.0.10: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.1.0.tgz#247e4162e7860cebbdaf30b774d6b0ac7dcfe7a5" - dependencies: - ci-info "^1.0.0" - is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -2147,21 +2084,10 @@ is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" -is-installed-globally@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" - dependencies: - global-dirs "^0.1.0" - is-path-inside "^1.0.0" - is-natural-number@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-natural-number/-/is-natural-number-4.0.1.tgz#ab9d76e1db4ced51e35de0c72ebecf09f734cde8" -is-npm@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" - is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" @@ -2228,7 +2154,7 @@ is-property@^1.0.0: is-redirect@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" + resolved "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" is-resolvable@^1.0.0: version "1.1.0" @@ -2462,9 +2388,9 @@ klaw@^1.0.0: optionalDependencies: graceful-fs "^4.1.9" -latest-version@^3.0.0: +latest-version@3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" + resolved "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" dependencies: package-json "^4.0.0" @@ -3147,7 +3073,7 @@ p-try@^1.0.0: package-json@^4.0.0: version "4.0.1" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" + resolved "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" dependencies: got "^6.7.1" registry-auth-token "^3.0.1" @@ -3299,7 +3225,7 @@ prelude-ls@~1.1.2: prepend-http@^1.0.1: version "1.0.4" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + resolved "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" prepend-http@^2.0.0: version "2.0.0" @@ -3378,10 +3304,10 @@ quick-lru@^1.0.0: resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" rc@^1.0.1, rc@^1.1.6: - version "1.2.7" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.7.tgz#8a10ca30d588d00464360372b890d06dacd02297" + version "1.2.8" + resolved "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" dependencies: - deep-extend "^0.5.1" + deep-extend "^0.6.0" ini "~1.3.0" minimist "^1.2.0" strip-json-comments "~2.0.1" @@ -3492,14 +3418,14 @@ regexpp@^1.0.1: registry-auth-token@^3.0.1: version "3.3.2" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.3.2.tgz#851fd49038eecb586911115af845260eec983f20" + resolved "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz#851fd49038eecb586911115af845260eec983f20" dependencies: rc "^1.1.6" safe-buffer "^5.0.1" registry-url@^3.0.3: version "3.1.0" - resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" + resolved "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" dependencies: rc "^1.0.1" @@ -3700,13 +3626,7 @@ seek-bzip@^1.0.5: dependencies: commander "~2.8.1" -semver-diff@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" - dependencies: - semver "^5.0.3" - -"semver@2 || 3 || 4 || 5", semver@5.5.0, semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.5.0: +"semver@2 || 3 || 4 || 5", semver@5.5.0, semver@^5.1.0, semver@^5.3.0, semver@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" @@ -4123,12 +4043,6 @@ tasklist@^3.1.0: pify "^2.2.0" sec "^1.0.0" -term-size@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" - dependencies: - execa "^0.7.0" - test-exclude@^4.2.0: version "4.2.1" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.2.1.tgz#dfa222f03480bca69207ca728b37d74b45f724fa" @@ -4303,12 +4217,6 @@ union-value@^1.0.0: is-extendable "^0.1.1" set-value "^0.4.3" -unique-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" - dependencies: - crypto-random-string "^1.0.0" - universalify@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.1.tgz#fa71badd4437af4c148841e3b3b165f9e9e590b7" @@ -4322,22 +4230,7 @@ unset-value@^1.0.0: unzip-response@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" - -update-notifier@2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" - dependencies: - boxen "^1.2.1" - chalk "^2.0.1" - configstore "^3.0.0" - import-lazy "^2.1.0" - is-ci "^1.0.10" - is-installed-globally "^0.1.0" - is-npm "^1.0.0" - latest-version "^3.0.0" - semver-diff "^2.0.0" - xdg-basedir "^3.0.0" + resolved "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" urix@^0.1.0: version "0.1.0" @@ -4345,7 +4238,7 @@ urix@^0.1.0: url-parse-lax@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" + resolved "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" dependencies: prepend-http "^1.0.1" @@ -4408,12 +4301,6 @@ which@^1.2.14, which@^1.2.8, which@^1.2.9, which@^1.3.0: dependencies: isexe "^2.0.0" -widest-line@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.0.tgz#0142a4e8a243f8882c0233aa0e0281aa76152273" - dependencies: - string-width "^2.1.1" - window-size@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" @@ -4449,24 +4336,12 @@ write-file-atomic@^1.1.4: imurmurhash "^0.1.4" slide "^1.1.5" -write-file-atomic@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab" - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - signal-exit "^3.0.2" - write@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" dependencies: mkdirp "^0.5.1" -xdg-basedir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" - xtend@^4.0.0, xtend@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"