From 7c9884ff22c40d93591b89848da052fa345b47ee Mon Sep 17 00:00:00 2001 From: Samy Pesse Date: Wed, 24 Aug 2016 22:36:08 +0200 Subject: [PATCH 01/14] Start unit tests using supertest --- bin/web.js | 30 +++++++------- lib/backends/github.js | 33 ++++++++++------ lib/index.js | 32 +++++++++++++-- lib/nuts.js | 90 ++++++++++++++++++++++++++---------------- package.json | 7 +++- test/all.js | 6 +++ test/app.js | 8 ++++ test/download.js | 30 ++++++++++++++ test/platforms.js | 1 - test/win-releases.js | 1 - 10 files changed, 169 insertions(+), 69 deletions(-) create mode 100644 test/all.js create mode 100644 test/app.js create mode 100644 test/download.js diff --git a/bin/web.js b/bin/web.js index 9e7c0aa..a161b2a 100644 --- a/bin/web.js +++ b/bin/web.js @@ -1,3 +1,5 @@ +/* eslint-disable no-console */ + var express = require('express'); var uuid = require('uuid'); var basicAuth = require('basic-auth'); @@ -18,15 +20,15 @@ if (process.env.ANALYTICS_TOKEN) { } var myNuts = nuts.Nuts({ - repository: process.env.GITHUB_REPO, - token: process.env.GITHUB_TOKEN, - endpoint: process.env.GITHUB_ENDPOINT, - username: process.env.GITHUB_USERNAME, - password: process.env.GITHUB_PASSWORD, - timeout: process.env.VERSIONS_TIMEOUT, - cache: process.env.VERSIONS_CACHE, + repository: process.env.GITHUB_REPO, + token: process.env.GITHUB_TOKEN, + endpoint: process.env.GITHUB_ENDPOINT, + username: process.env.GITHUB_USERNAME, + password: process.env.GITHUB_PASSWORD, + timeout: process.env.VERSIONS_TIMEOUT, + cache: process.env.VERSIONS_CACHE, refreshSecret: process.env.GITHUB_SECRET, - proxyAssets: !Boolean(process.env.DONT_PROXY_ASSETS) + proxyAssets: !process.env.DONT_PROXY_ASSETS }); // Control access to API @@ -35,28 +37,28 @@ myNuts.before('api', function(access, next) { function unauthorized() { next(new Error('Invalid username/password for API')); - }; + } var user = basicAuth(access.req); if (!user || !user.name || !user.pass) { return unauthorized(); - }; + } if (user.name === apiAuth.username && user.pass === apiAuth.password) { return next(); } else { return unauthorized(); - }; + } }); // Log download myNuts.before('download', function(download, next) { - console.log('download', download.platform.filename, "for version", download.version.tag, "on channel", download.version.channel, "for", download.platform.type); + console.log('download', download.platform.filename, 'for version', download.version.tag, 'on channel', download.version.channel, 'for', download.platform.type); next(); }); myNuts.after('download', function(download, next) { - console.log('downloaded', download.platform.filename, "for version", download.version.tag, "on channel", download.version.channel, "for", download.platform.type); + console.log('downloaded', download.platform.filename, 'for version', download.version.tag, 'on channel', download.version.channel, 'for', download.platform.type); // Track on segment if enabled if (analytics) { @@ -92,7 +94,7 @@ app.use(myNuts.router); // Error handling app.use(function(req, res, next) { - res.status(404).send("Page not found"); + res.status(404).send('Page not found'); }); app.use(function(err, req, res, next) { var msg = err.message || err; diff --git a/lib/backends/github.js b/lib/backends/github.js index 3eaf155..dae8209 100644 --- a/lib/backends/github.js +++ b/lib/backends/github.js @@ -1,14 +1,13 @@ var _ = require('lodash'); var Q = require('q'); var util = require('util'); -var destroy = require('destroy'); var GitHub = require('octocat'); var request = require('request'); -var Buffer = require('buffer').Buffer; var githubWebhook = require('github-webhook-handler'); var Backend = require('./backend'); + function GitHubBackend() { var that = this; Backend.apply(this, arguments); @@ -17,19 +16,15 @@ function GitHubBackend() { proxyAssets: true }); - if ((!this.opts.username || !this.opts.password) && (!this.opts.token)) { - throw new Error('GitHub backend require "username" and "token" options'); - } - this.client = new GitHub({ - token: this.opts.token, + token: this.opts.token, endpoint: this.opts.endpoint, username: this.opts.username, password: this.opts.password }); this.ghrepo = this.client.repo(this.opts.repository); - this.releases = this.memoize(this._releases); + this.releases = this.memoize(this.releases); // GitHub webhook to refresh list of versions this.webhookHandler = githubWebhook({ @@ -45,15 +40,24 @@ function GitHubBackend() { } util.inherits(GitHubBackend, Backend); -// List all releases for this repository -GitHubBackend.prototype._releases = function() { +/** + * List all releases for this repository + * @return {Promise>} + */ +GitHubBackend.prototype.releases = function() { return this.ghrepo.releases() .then(function(page) { return page.all(); }); }; -// Return stream for an asset +/** + * Return stream for an asset + * @param {Asset} asset + * @param {Request} req + * @param {Response} res + * @return {Promise}? + */ GitHubBackend.prototype.serveAsset = function(asset, req, res) { if (!this.opts.proxyAssets) { res.redirect(asset.raw.browser_download_url); @@ -62,7 +66,11 @@ GitHubBackend.prototype.serveAsset = function(asset, req, res) { } }; -// Return stream for an asset +/** + * Return stream for an asset + * @param {Asset} asset + * @return {Promise} + */ GitHubBackend.prototype.getAssetStream = function(asset) { var headers = { 'User-Agent': 'nuts', @@ -88,5 +96,4 @@ GitHubBackend.prototype.getAssetStream = function(asset) { })); }; - module.exports = GitHubBackend; diff --git a/lib/index.js b/lib/index.js index bbe28f1..1fd69e0 100644 --- a/lib/index.js +++ b/lib/index.js @@ -1,9 +1,35 @@ +var express = require('express'); + var Nuts = require('./nuts'); var platforms = require('./utils/platforms'); var winReleases = require('./utils/win-releases'); +/** + * Create an express application with Nuts binded to it. + * This is mostly used for unit testing. + * + * @param {Object} options + * @return {Express.Application} app + */ +function createApp(options) { + var app = express(); + var nuts = Nuts(options); + + app.use(nuts.router); + + app.use(function(err, req, res, next) { + res.status(err.statusCode || 500); + res.send({ + message: err.message + }); + }); + + return app; +} + module.exports = { - Nuts: Nuts, - platforms: platforms, - winReleases: winReleases + Nuts: Nuts, + platforms: platforms, + winReleases: winReleases, + createApp: createApp }; diff --git a/lib/nuts.js b/lib/nuts.js index 1642158..113e9ae 100644 --- a/lib/nuts.js +++ b/lib/nuts.js @@ -5,6 +5,7 @@ var urljoin = require('urljoin.js'); var Understudy = require('understudy'); var express = require('express'); var useragent = require('express-useragent'); +var createError = require('http-errors'); var BACKENDS = require('./backends'); var Versions = require('./versions'); @@ -90,13 +91,22 @@ Nuts.prototype._init = function() { return that.backend.init(); }) .then(function() { - if (!that.opts.preFetch) return + if (!that.opts.preFetch) { + return; + } + return that.versions.list(); }); -} +}; -// Perform a hook using promised functions +/** + * Perform a hook using promised functions + * @param {String} name + * @param {Object} arg + * @param {Function} fn + * @return {Promise} + */ Nuts.prototype.performQ = function(name, arg, fn) { var that = this; fn = fn || function() { }; @@ -109,10 +119,17 @@ Nuts.prototype.performQ = function(name, arg, fn) { .then(function() { next(); }, next); - }) + }); }; -// Serve an asset to the response +/** + * Serve an asset to the response + * @param {Request} req + * @param {Response} res + * @param {Version} version + * @param {String} asset + * @return {Promise} + */ Nuts.prototype.serveAsset = function(req, res, version, asset) { var that = this; @@ -123,18 +140,18 @@ Nuts.prototype.serveAsset = function(req, res, version, asset) { version: version, platform: asset }, function() { - return that.backend.serveAsset(asset, req, res) + return that.backend.serveAsset(asset, req, res); }); }); }; // Handler for download routes Nuts.prototype.onDownload = function(req, res, next) { - var that = this; - var channel = req.params.channel; - var platform = req.params.platform; - var tag = req.params.tag || 'latest'; - var filename = req.params.filename; + var that = this; + var channel = req.params.channel; + var platform = req.params.platform; + var tag = req.params.tag || 'latest'; + var filename = req.params.filename; var filetypeWanted = req.query.filetype; // When serving a specific file, platform is not required @@ -147,13 +164,17 @@ Nuts.prototype.onDownload = function(req, res, next) { if (req.useragent.isLinux64) platform = platforms.LINUX_64; } - if (!platform) return next(new Error('No platform specified and impossible to detect one')); + if (!platform) { + return next(createError(400, 'No platform specified and impossible to detect one')); + } } else { platform = null; } // If specific version, don't enforce a channel - if (tag != 'latest') channel = '*'; + if (tag != 'latest') { + channel = '*'; + } this.versions.resolve({ channel: channel, @@ -186,7 +207,10 @@ Nuts.prototype.onDownload = function(req, res, next) { }); } - if (!asset) throw new Error("No download available for platform "+platform+" for version "+version.tag+" ("+(channel || "beta")+")"); + if (!asset) { + throw createError(404, 'No download available for platform ' + platform + + ' for version ' + version.tag + ' (' + (channel || 'beta') + ')'); + } // Call analytic middleware, then serve return that.serveAsset(req, res, version, asset); @@ -214,7 +238,7 @@ Nuts.prototype.onUpdate = function(req, res, next) { var platform = req.params.platform; var channel = req.params.channel || '*'; var tag = req.params.version; - var filetype = req.query.filetype ? req.query.filetype : "zip"; + var filetype = req.query.filetype ? req.query.filetype : 'zip'; Q() .then(function() { @@ -238,13 +262,12 @@ Nuts.prototype.onUpdate = function(req, res, next) { notesSlice = [versions[0]]; } var releaseNotes = notes.merge(notesSlice, { includeTag: false }); - console.error(latest.tag); var gitFilePath = (channel === '*' ? '/../../../' : '/../../../../../'); res.status(200).send({ - "url": urljoin(fullUrl, gitFilePath, '/download/version/'+latest.tag+'/'+platform+'?filetype='+filetype), - "name": latest.tag, - "notes": releaseNotes, - "pub_date": latest.published_at.toISOString() + 'url': urljoin(fullUrl, gitFilePath, '/download/version/'+latest.tag+'/'+platform+'?filetype='+filetype), + 'name': latest.tag, + 'notes': releaseNotes, + 'pub_date': latest.published_at.toISOString() }); }) .fail(next); @@ -274,16 +297,16 @@ Nuts.prototype.onUpdateWin = function(req, res, next) { .then(function(versions) { // Update needed? var latest = _.first(versions); - if (!latest) throw new Error("Version not found"); + if (!latest) throw new Error('Version not found'); // File exists var asset = _.find(latest.platforms, { filename: 'RELEASES' }); - if (!asset) throw new Error("File not found"); + if (!asset) throw new Error('File not found'); - return that.backend.readAsset(asset) - .then(function(content) { + return that.backend.readAsset(asset) + .then(function(content) { var releases = winReleases.parse(content.toString('utf-8')); releases = _.chain(releases) @@ -301,9 +324,9 @@ Nuts.prototype.onUpdateWin = function(req, res, next) { var output = winReleases.generate(releases); res.header('Content-Length', output.length); - res.attachment("RELEASES"); + res.attachment('RELEASES'); res.send(output); - }); + }); }) .fail(next); }; @@ -322,21 +345,19 @@ Nuts.prototype.onServeNotes = function(req, res, next) { }) .then(function(versions) { var latest = _.first(versions); - - if (!latest) throw new Error('No versions matching'); + if (!latest) { + throw new Error('No versions matching'); + } res.format({ - 'text/plain': function(){ - res.send(notes.merge(versions)); - }, 'application/json': function(){ res.send({ - "notes": notes.merge(versions, { includeTag: false }), - "pub_date": latest.published_at.toISOString() + 'notes': notes.merge(versions, { includeTag: false }), + 'pub_date': latest.published_at.toISOString() }); }, 'default': function() { - res.send(releaseNotes); + res.send(notes.merge(versions)); } }); }) @@ -390,5 +411,4 @@ Nuts.prototype.onAPIAccessControl = function(req, res, next) { }, next); }; - module.exports = Nuts; diff --git a/package.json b/package.json index 3d1af7f..b8a86d1 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "express-useragent": "0.1.9", "feed": "^0.3.0", "github-webhook-handler": "0.5.0", + "http-errors": "^1.5.0", "lodash": "3.7.0", "lru-diskcache": "1.1.1", "octocat": "0.10.2", @@ -27,8 +28,10 @@ "uuid": "2.0.1" }, "devDependencies": { + "expect": "^1.20.2", "mocha": "1.18.2", - "should": "7.0.4" + "should": "7.0.4", + "supertest": "^2.0.0" }, "bugs": { "url": "https://github.com/GitbookIO/nuts/issues" @@ -45,6 +48,6 @@ }, "scripts": { "start": "node bin/web.js", - "test": "mocha --reporter list" + "test": "mocha --reporter spec --timeout 600000 ./test/all.js" } } diff --git a/test/all.js b/test/all.js new file mode 100644 index 0000000..2d8571a --- /dev/null +++ b/test/all.js @@ -0,0 +1,6 @@ +require('should'); + +require('./platforms'); +require('./win-releases'); + +require('./download'); diff --git a/test/app.js b/test/app.js new file mode 100644 index 0000000..51fa498 --- /dev/null +++ b/test/app.js @@ -0,0 +1,8 @@ +var nuts = require('../lib'); + +var app = nuts.createApp({ + repository: 'SamyPesse/nuts-testing', + token: process.env.GITHUB_TOKEN +}); + +module.exports = app; diff --git a/test/download.js b/test/download.js new file mode 100644 index 0000000..dff61f9 --- /dev/null +++ b/test/download.js @@ -0,0 +1,30 @@ +var testRequest = require('supertest'); +var app = require('./app'); + +describe('Download', function() { + var agent; + + before(function() { + agent = testRequest.agent(app); + }); + + describe('Latest version', function() { + + it('should fail if no user-agent to detect platform', function(done) { + agent + .get('/') + .expect(400, done); + }); + + it('should download windows file', function(done) { + agent + .get('/') + .set('User-Agent', 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; Touch; rv:11.0) like Gecko') + .expect('Content-Length', '13') + .expect('Content-Disposition', 'attachment; filename=test.exe') + .expect(200, done); + }); + + }); + +}); diff --git a/test/platforms.js b/test/platforms.js index 7aadaec..446c105 100644 --- a/test/platforms.js +++ b/test/platforms.js @@ -1,4 +1,3 @@ -require('should'); var platforms = require('../lib/utils/platforms'); describe('Platforms', function() { diff --git a/test/win-releases.js b/test/win-releases.js index e06fac0..70b72da 100644 --- a/test/win-releases.js +++ b/test/win-releases.js @@ -1,4 +1,3 @@ -require('should'); var winReleases = require('../lib/utils/win-releases'); describe('Windows RELEASES', function() { From fc432e9a0ef92458fb1d1179d835dbd98218fa73 Mon Sep 17 00:00:00 2001 From: Samy Pesse Date: Wed, 24 Aug 2016 22:51:27 +0200 Subject: [PATCH 02/14] Start unit tests for update endpoints --- lib/nuts.js | 8 +++++--- test/all.js | 1 + test/download.js | 8 ++------ test/update.js | 30 ++++++++++++++++++++++++++++++ 4 files changed, 38 insertions(+), 9 deletions(-) create mode 100644 test/update.js diff --git a/lib/nuts.js b/lib/nuts.js index 113e9ae..bb795d5 100644 --- a/lib/nuts.js +++ b/lib/nuts.js @@ -242,8 +242,8 @@ Nuts.prototype.onUpdate = function(req, res, next) { Q() .then(function() { - if (!tag) throw new Error('Requires "version" parameter'); - if (!platform) throw new Error('Requires "platform" parameter'); + if (!tag) throw createError(400, 'Requires "version" parameter'); + if (!platform) throw createError(400, 'Requires "platform" parameter'); platform = platforms.detect(platform); @@ -255,7 +255,9 @@ Nuts.prototype.onUpdate = function(req, res, next) { }) .then(function(versions) { var latest = _.first(versions); - if (!latest || latest.tag == tag) return res.status(204).send('No updates'); + if (!latest || latest.tag == tag) { + return res.status(204).send('No updates'); + } var notesSlice = versions.slice(0, -1); if (versions.length === 1) { diff --git a/test/all.js b/test/all.js index 2d8571a..024bf7d 100644 --- a/test/all.js +++ b/test/all.js @@ -4,3 +4,4 @@ require('./platforms'); require('./win-releases'); require('./download'); +require('./update'); diff --git a/test/download.js b/test/download.js index dff61f9..20cc820 100644 --- a/test/download.js +++ b/test/download.js @@ -1,12 +1,8 @@ -var testRequest = require('supertest'); +var request = require('supertest'); var app = require('./app'); describe('Download', function() { - var agent; - - before(function() { - agent = testRequest.agent(app); - }); + var agent = request.agent(app); describe('Latest version', function() { diff --git a/test/update.js b/test/update.js new file mode 100644 index 0000000..58f9cb7 --- /dev/null +++ b/test/update.js @@ -0,0 +1,30 @@ +var request = require('supertest'); +var expect = require('expect'); +var app = require('./app'); + +describe('Update', function() { + var agent = request.agent(app); + + describe('Squirrel.Mac (OS X)', function() { + + it('should return a 204 if using latest version', function(done) { + agent + .get('/update/osx/1.0.0') + .expect(204, done); + }); + + it('should return a 200 with json if using old version', function(done) { + agent + .get('/update/osx/0.9.0') + .expect('Content-Type', /json/) + .expect(function(res) { + expect(res.body.name).toBe('1.0.0'); + expect(res.body.url).toExist(); + expect(res.body.pub_date).toExist(); + }) + .expect(200, done); + }); + + }); + +}); From 7c7ce122442823d9c76eccc1fb55e3f4141d0979 Mon Sep 17 00:00:00 2001 From: Samy Pesse Date: Wed, 24 Aug 2016 23:09:57 +0200 Subject: [PATCH 03/14] Add more test for download MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Return a 404 when version doesn’t exist for a platform --- lib/nuts.js | 2 +- lib/versions.js | 14 ++++++++------ test/download.js | 35 +++++++++++++++++++++++++++++++++-- 3 files changed, 42 insertions(+), 9 deletions(-) diff --git a/lib/nuts.js b/lib/nuts.js index bb795d5..c018c42 100644 --- a/lib/nuts.js +++ b/lib/nuts.js @@ -7,11 +7,11 @@ var express = require('express'); var useragent = require('express-useragent'); var createError = require('http-errors'); -var BACKENDS = require('./backends'); var Versions = require('./versions'); var notes = require('./utils/notes'); var platforms = require('./utils/platforms'); var winReleases = require('./utils/win-releases'); +var BACKENDS = require('./backends'); var API_METHODS = require('./api'); function getFullUrl(req) { diff --git a/lib/versions.js b/lib/versions.js index 467d96a..366a646 100644 --- a/lib/versions.js +++ b/lib/versions.js @@ -1,6 +1,6 @@ var _ = require('lodash'); -var Q = require('q'); var semver = require('semver'); +var createError = require('http-errors'); var platforms = require('./utils/platforms'); @@ -45,7 +45,7 @@ function normalizeVersion(release) { return { tag: normalizeTag(release.tag_name).split('-')[0], channel: extractChannel(release.tag_name), - notes: release.body || "", + notes: release.body || '', published_at: new Date(release.published_at), platforms: releasePlatforms }; @@ -64,7 +64,6 @@ function compareVersions(v1, v2) { function Versions(backend) { this.backend = backend; - } // List versions normalized @@ -93,7 +92,9 @@ Versions.prototype.filter = function(opts) { platform: null, channel: 'stable' }); - if (opts.platform) opts.platform = platforms.detect(opts.platform); + if (opts.platform) { + opts.platform = platforms.detect(opts.platform); + } return this.list() .then(function(versions) { @@ -117,7 +118,9 @@ Versions.prototype.resolve = function(opts) { return this.filter(opts) .then(function(versions) { var version = _.first(versions); - if (!version) throw new Error('Version not found: '+opts.tag); + if (!version) { + throw createError(404, 'Version not found: ' + opts.tag); + } return version; }); @@ -149,5 +152,4 @@ Versions.prototype.channels = function(opts) { }); }; - module.exports = Versions; diff --git a/test/download.js b/test/download.js index 20cc820..495c008 100644 --- a/test/download.js +++ b/test/download.js @@ -1,10 +1,14 @@ var request = require('supertest'); var app = require('./app'); +var MAC_USERAGENT = 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-us)' + + ' AppleWebKit/530.19.2 (KHTML, like Gecko) Version/4.0.2 Safari/530.19'; +var WIN_USERAGENT = 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; Touch; rv:11.0) like Gecko'; + describe('Download', function() { var agent = request.agent(app); - describe('Latest version', function() { + describe('Latest version (/)', function() { it('should fail if no user-agent to detect platform', function(done) { agent @@ -15,12 +19,39 @@ describe('Download', function() { it('should download windows file', function(done) { agent .get('/') - .set('User-Agent', 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; Touch; rv:11.0) like Gecko') + .set('User-Agent', WIN_USERAGENT) .expect('Content-Length', '13') .expect('Content-Disposition', 'attachment; filename=test.exe') .expect(200, done); }); + it('should download OS X file as DMG', function(done) { + agent + .get('/') + .set('User-Agent', MAC_USERAGENT) + .expect('Content-Length', '19') + .expect('Content-Disposition', 'attachment; filename=test-osx.dmg') + .expect(200, done); + }); + + }); + + describe('Previous version (/download/version/)', function() { + it('should not have a windows file to download', function(done) { + agent + .get('/download/version/0.9.0') + .set('User-Agent', WIN_USERAGENT) + .expect(404, done); + }); + + it('should download OS X file as DMG', function(done) { + agent + .get('/download/version/0.9.0') + .set('User-Agent', MAC_USERAGENT) + .expect('Content-Length', '19') + .expect('Content-Disposition', 'attachment; filename=test-osx.dmg') + .expect(200, done); + }); }); }); From 6853c6508ba90112288046a50fcc808d6f3ce935 Mon Sep 17 00:00:00 2001 From: Samy Pesse Date: Thu, 25 Aug 2016 12:06:25 +0200 Subject: [PATCH 04/14] Fix update for channel --- lib/nuts.js | 35 ++++++++++++------- lib/versions.js | 91 ++++++++++++++++++++++++++++++++++++++---------- test/all.js | 3 ++ test/app.js | 8 ----- test/download.js | 2 +- test/testing.js | 14 ++++++++ test/update.js | 82 +++++++++++++++++++++++++++++++++++-------- test/versions.js | 39 +++++++++++++++++++++ 8 files changed, 219 insertions(+), 55 deletions(-) delete mode 100644 test/app.js create mode 100644 test/testing.js create mode 100644 test/versions.js diff --git a/lib/nuts.js b/lib/nuts.js index c018c42..42e9b09 100644 --- a/lib/nuts.js +++ b/lib/nuts.js @@ -235,38 +235,49 @@ Nuts.prototype.onUpdateRedirect = function(req, res, next) { Nuts.prototype.onUpdate = function(req, res, next) { var that = this; var fullUrl = getFullUrl(req); + var platform = req.params.platform; - var channel = req.params.channel || '*'; + var channel = req.params.channel || 'stable'; var tag = req.params.version; var filetype = req.query.filetype ? req.query.filetype : 'zip'; Q() .then(function() { - if (!tag) throw createError(400, 'Requires "version" parameter'); - if (!platform) throw createError(400, 'Requires "platform" parameter'); + if (!tag) { + throw createError(400, 'Requires "version" parameter'); + } + if (!platform) { + throw createError(400, 'Requires "platform" parameter'); + } platform = platforms.detect(platform); return that.versions.filter({ tag: '>='+tag, platform: platform, - channel: channel + channel: channel, + stripChannel: true }); }) .then(function(versions) { - var latest = _.first(versions); + var latest = versions[0]; + + // Already using latest version? if (!latest || latest.tag == tag) { return res.status(204).send('No updates'); } - var notesSlice = versions.slice(0, -1); - if (versions.length === 1) { - notesSlice = [versions[0]]; - } + // Extract release notes from all versions in range + var notesSlice = versions.length === 1? [versions[0]] : versions.slice(0, -1); var releaseNotes = notes.merge(notesSlice, { includeTag: false }); - var gitFilePath = (channel === '*' ? '/../../../' : '/../../../../../'); - res.status(200).send({ - 'url': urljoin(fullUrl, gitFilePath, '/download/version/'+latest.tag+'/'+platform+'?filetype='+filetype), + + // URL for download should be absolute + var gitFilePath = (req.params.channel ? '/../../../../../' : '/../../../' ); + + res.status(200) + .send({ + 'url': urljoin(fullUrl, gitFilePath, + '/download/version/' + latest.tag + '/' + platform + '?filetype=' + filetype), 'name': latest.tag, 'notes': releaseNotes, 'pub_date': latest.published_at.toISOString() diff --git a/lib/versions.js b/lib/versions.js index 366a646..366c0c6 100644 --- a/lib/versions.js +++ b/lib/versions.js @@ -4,13 +4,21 @@ var createError = require('http-errors'); var platforms = require('./utils/platforms'); -// Normalize tag name +/** + * Normalize a tag name to remove the prefix "v" + * @param {String} tag + * @return {String} tag + */ function normalizeTag(tag) { if (tag[0] == 'v') tag = tag.slice(1); return tag; } -// Extract channel of version +/** + * Extract channel of tag name + * @param {String} tag + * @return {String} channel + */ function extractChannel(tag) { var suffix = tag.split('-')[1]; if (!suffix) return 'stable'; @@ -18,10 +26,25 @@ function extractChannel(tag) { return suffix.split('.')[0]; } -// Normalize a release to a version +/** + * Strip channel from a tag name + * @param {String} tag + * @return {String} tag + */ +function stripChannel(tag) { + return tag.split('-')[0]; +} + +/** + * Normalize a release to a version + * @param {Object} release + * @return {Version} version? + */ function normalizeVersion(release) { // Ignore draft - if (release.draft) return null; + if (release.draft) { + return null; + } var downloadCount = 0; var releasePlatforms = _.chain(release.assets) @@ -43,15 +66,20 @@ function normalizeVersion(release) { .value(); return { - tag: normalizeTag(release.tag_name).split('-')[0], - channel: extractChannel(release.tag_name), - notes: release.body || '', + tag: normalizeTag(release.tag_name), + channel: extractChannel(release.tag_name), + notes: release.body || '', published_at: new Date(release.published_at), - platforms: releasePlatforms + platforms: releasePlatforms }; } -// Compare two version +/** + * Compare two version + * @param {Version} v1 + * @param {Version} v2 + * @return {Number} + */ function compareVersions(v1, v2) { if (semver.gt(v1.tag, v2.tag)) { return -1; @@ -85,13 +113,22 @@ Versions.prototype.get = function(tag) { }); }; -// Filter versions with criterias +/** + * Filter versions with criterias + * @param {String} opts.tag? : tag name filter to satisfy (ex: ">=2.0.0") + * @param {String} opts.platform? : name of the platform supported by the version + * @param {String} opts.channel? : only list version of this channel ("*" for all) + * @param {Boolean} opts.stripChannel : compare tag name withotu the channel + * @return {Promise>} versions + */ Versions.prototype.filter = function(opts) { opts = _.defaults(opts || {}, { - tag: 'latest', - platform: null, - channel: 'stable' + tag: 'latest', + platform: null, + stripChannel: false, + channel: 'stable' }); + if (opts.platform) { opts.platform = platforms.detect(opts.platform); } @@ -101,19 +138,32 @@ Versions.prototype.filter = function(opts) { return _.chain(versions) .filter(function(version) { // Check channel - if (opts.channel != '*' && version.channel != opts.channel) return false; + if (opts.channel !== '*' && version.channel != opts.channel) { + return false; + } // Not available for requested paltform - if (opts.platform && !platforms.satisfies(opts.platform, _.pluck(version.platforms, 'type'))) return false; + if (opts.platform && !platforms.satisfies(opts.platform, _.pluck(version.platforms, 'type'))) { + return false; + } // Check tag satisfies request version - return opts.tag == 'latest' || semver.satisfies(version.tag, opts.tag); + var tagName = version.tag; + if (opts.stripChannel) { + tagName = stripChannel(tagName); + } + + return (opts.tag == 'latest' || semver.satisfies(tagName, opts.tag)); }) .value(); }); }; -// Resolve a platform, by filtering then taking the first result +/** + * Resolve a platform, by filtering then taking the first result + * @param {Object} opts + * @return {Promise} version + */ Versions.prototype.resolve = function(opts) { return this.filter(opts) .then(function(versions) { @@ -126,8 +176,11 @@ Versions.prototype.resolve = function(opts) { }); }; -// List all channels from releases -Versions.prototype.channels = function(opts) { +/** + * List all channels from releases + * @return {Promise} + */ +Versions.prototype.channels = function() { return this.list() .then(function(versions) { var channels = {}; diff --git a/test/all.js b/test/all.js index 024bf7d..77878c4 100644 --- a/test/all.js +++ b/test/all.js @@ -1,7 +1,10 @@ require('should'); +// Sync tests require('./platforms'); require('./win-releases'); +// Require a backend +require('./versions'); require('./download'); require('./update'); diff --git a/test/app.js b/test/app.js deleted file mode 100644 index 51fa498..0000000 --- a/test/app.js +++ /dev/null @@ -1,8 +0,0 @@ -var nuts = require('../lib'); - -var app = nuts.createApp({ - repository: 'SamyPesse/nuts-testing', - token: process.env.GITHUB_TOKEN -}); - -module.exports = app; diff --git a/test/download.js b/test/download.js index 495c008..11c0ed0 100644 --- a/test/download.js +++ b/test/download.js @@ -1,5 +1,5 @@ var request = require('supertest'); -var app = require('./app'); +var app = require('./testing').app; var MAC_USERAGENT = 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-us)' + ' AppleWebKit/530.19.2 (KHTML, like Gecko) Version/4.0.2 Safari/530.19'; diff --git a/test/testing.js b/test/testing.js new file mode 100644 index 0000000..f5a0557 --- /dev/null +++ b/test/testing.js @@ -0,0 +1,14 @@ +var nuts = require('../lib'); + +var config = { + repository: 'SamyPesse/nuts-testing', + token: process.env.GITHUB_TOKEN +}; + +var instance = nuts.Nuts(config); +var app = nuts.createApp(config); + +module.exports = { + app: app, + nuts: instance +}; diff --git a/test/update.js b/test/update.js index 58f9cb7..96e3a77 100644 --- a/test/update.js +++ b/test/update.js @@ -1,30 +1,82 @@ var request = require('supertest'); var expect = require('expect'); -var app = require('./app'); + +var app = require('./testing').app; describe('Update', function() { var agent = request.agent(app); describe('Squirrel.Mac (OS X)', function() { - it('should return a 204 if using latest version', function(done) { - agent - .get('/update/osx/1.0.0') - .expect(204, done); + describe('/update/osx/', function() { + it('should return a 204 if using latest version', function(done) { + agent + .get('/update/osx/1.0.0') + .expect(204, done); + }); + + it('should return a 200 with json if using old stable version', function(done) { + agent + .get('/update/osx/0.9.0') + .expect('Content-Type', /json/) + .expect(function(res) { + expect(res.body.name).toBe('1.0.0'); + expect(res.body.url).toExist(); + expect(res.body.pub_date).toExist(); + }) + .expect(200, done); + }); + + it('should return a 200 with json if using old beta version (1)', function(done) { + agent + .get('/update/osx/0.9.1-beta') + .expect('Content-Type', /json/) + .expect(function(res) { + expect(res.body.name).toBe('1.0.0'); + }) + .expect(200, done); + }); + + it('should return a 200 with json if using old beta version (2)', function(done) { + agent + .get('/update/osx/0.9.1-beta.1') + .expect('Content-Type', /json/) + .expect(function(res) { + expect(res.body.name).toBe('1.0.0'); + }) + .expect(200, done); + }); }); - it('should return a 200 with json if using old version', function(done) { - agent - .get('/update/osx/0.9.0') - .expect('Content-Type', /json/) - .expect(function(res) { - expect(res.body.name).toBe('1.0.0'); - expect(res.body.url).toExist(); - expect(res.body.pub_date).toExist(); - }) - .expect(200, done); + describe('/update/channel/beta/osx', function() { + it('should update from 0.9.1-beta to 1.0.1-beta.0', function(done) { + agent + .get('/update/channel/beta/osx/0.9.1-beta') + .expect('Content-Type', /json/) + .expect(function(res) { + expect(res.body.name).toBe('1.0.1-beta.0'); + }) + .expect(200, done); + }); + + it('should not update from 1.0.1-beta.0', function(done) { + agent + .get('/update/channel/beta/osx/1.0.1-beta.0') + .expect(204, done); + }); }); + describe('/update/channel/alpha/osx', function() { + it('should update from 0.9.1-beta to 1.1.0-alpha.0', function(done) { + agent + .get('/update/channel/alpha/osx/0.9.1-beta') + .expect('Content-Type', /json/) + .expect(function(res) { + expect(res.body.name).toBe('1.1.0-alpha.0'); + }) + .expect(200, done); + }); + }); }); }); diff --git a/test/versions.js b/test/versions.js new file mode 100644 index 0000000..c102584 --- /dev/null +++ b/test/versions.js @@ -0,0 +1,39 @@ +var expect = require('expect'); +var versions = require('./testing').nuts.versions; + +describe('Versions', function() { + + describe('.list', function() { + it('should list all versions', function() { + return versions.list() + .then(function(out) { + expect(out.length).toEqual(6); + }); + }); + }); + + describe('.filter', function() { + + it('should filter correctly by tag name', function() { + return versions.filter({ tag: '>=0.9.0' }) + .then(function(out) { + expect(out.length).toEqual(2); + expect(out[0].tag).toEqual('1.0.0'); + expect(out[1].tag).toEqual('0.9.0'); + }); + }); + + it('should filter correctly by tag name (stripChannel)', function() { + return versions.filter({ + tag: '>=0.9.0', + channel: '*', + stripChannel: true + }) + .then(function(out) { + expect(out.length).toEqual(6); + }); + }); + + }); + +}); From cd964b532042be50dc75105b767afa0ce9c87ab3 Mon Sep 17 00:00:00 2001 From: Samy Pesse Date: Thu, 25 Aug 2016 12:16:56 +0200 Subject: [PATCH 05/14] Add test for alpha -> stable on normal update --- package.json | 2 +- test/update.js | 10 ++++++++++ test/versions.js | 6 +++--- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index b8a86d1..8e03618 100644 --- a/package.json +++ b/package.json @@ -48,6 +48,6 @@ }, "scripts": { "start": "node bin/web.js", - "test": "mocha --reporter spec --timeout 600000 ./test/all.js" + "test": "mocha --bail --reporter spec --timeout 600000 ./test/all.js" } } diff --git a/test/update.js b/test/update.js index 96e3a77..f8603be 100644 --- a/test/update.js +++ b/test/update.js @@ -46,6 +46,16 @@ describe('Update', function() { }) .expect(200, done); }); + + it('should return a 200 with json if using old alpha version (1)', function(done) { + agent + .get('/update/osx/0.9.2-alpha.2') + .expect('Content-Type', /json/) + .expect(function(res) { + expect(res.body.name).toBe('1.0.0'); + }) + .expect(200, done); + }); }); describe('/update/channel/beta/osx', function() { diff --git a/test/versions.js b/test/versions.js index c102584..7f99805 100644 --- a/test/versions.js +++ b/test/versions.js @@ -7,7 +7,7 @@ describe('Versions', function() { it('should list all versions', function() { return versions.list() .then(function(out) { - expect(out.length).toEqual(6); + expect(out.length).toEqual(7); }); }); }); @@ -25,12 +25,12 @@ describe('Versions', function() { it('should filter correctly by tag name (stripChannel)', function() { return versions.filter({ - tag: '>=0.9.0', + tag: '>=1.0.0', channel: '*', stripChannel: true }) .then(function(out) { - expect(out.length).toEqual(6); + expect(out.length).toEqual(3); }); }); From 0f78a79675a1d27c909d7c133aa5499a74aef19b Mon Sep 17 00:00:00 2001 From: Ben Williams Date: Wed, 17 Mar 2021 14:44:23 -0700 Subject: [PATCH 06/14] fixed tests --- package.json | 2 +- test/update.js | 4 +- yarn.lock | 385 ++++++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 380 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index 8e03618..3f7a554 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "uuid": "2.0.1" }, "devDependencies": { - "expect": "^1.20.2", + "expect": "^26.6.2", "mocha": "1.18.2", "should": "7.0.4", "supertest": "^2.0.0" diff --git a/test/update.js b/test/update.js index f8603be..8a1fd37 100644 --- a/test/update.js +++ b/test/update.js @@ -21,8 +21,8 @@ describe('Update', function() { .expect('Content-Type', /json/) .expect(function(res) { expect(res.body.name).toBe('1.0.0'); - expect(res.body.url).toExist(); - expect(res.body.pub_date).toExist(); + expect(res.body.url).toBeTruthy(); + expect(res.body.pub_date).toBeTruthy(); }) .expect(200, done); }); diff --git a/yarn.lock b/yarn.lock index 4142fce..4ec1611 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,79 @@ # yarn lockfile v1 +"@babel/code-frame@^7.0.0": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" + integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g== + dependencies: + "@babel/highlight" "^7.12.13" + +"@babel/helper-validator-identifier@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" + integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== + +"@babel/highlight@^7.12.13": + version "7.13.10" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.13.10.tgz#a8b2a66148f5b27d666b15d81774347a731d52d1" + integrity sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg== + dependencies: + "@babel/helper-validator-identifier" "^7.12.11" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@jest/types@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" + integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^15.0.0" + chalk "^4.0.0" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" + integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw== + +"@types/istanbul-lib-report@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz#508b13aa344fa4976234e75dddcc34925737d821" + integrity sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/node@*": + version "14.14.35" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.35.tgz#42c953a4e2b18ab931f72477e7012172f4ffa313" + integrity sha512-Lt+wj8NVPx0zUmUwumiVXapmaLUcAk3yPuHCFVXras9k5VT9TdhJqKqGVUQCD60OTMCl0qxJ57OiTL0Mic3Iag== + +"@types/stack-utils@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.0.tgz#7036640b4e21cc2f259ae826ce843d277dad8cff" + integrity sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw== + +"@types/yargs-parser@*": + version "20.2.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.0.tgz#dd3e6699ba3237f0348cd085e4698780204842f9" + integrity sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA== + +"@types/yargs@^15.0.0": + version "15.0.13" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.13.tgz#34f7fec8b389d7f3c1fd08026a5763e072d3c6dc" + integrity sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ== + dependencies: + "@types/yargs-parser" "*" + accepts@~1.3.7: version "1.3.7" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" @@ -56,11 +129,30 @@ ansi-regex@^2.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" @@ -98,6 +190,11 @@ ast-types@0.x.x: dependencies: tslib "^2.0.1" +async@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= + async@^2.0.1: version "2.6.3" resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" @@ -195,6 +292,13 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +braces@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + breakable@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/breakable/-/breakable-1.0.0.tgz#784a797915a38ead27bad456b5572cb4bbaa78c1" @@ -247,6 +351,23 @@ chalk@^1.0.0: strip-ansi "^3.0.0" supports-color "^2.0.0" +chalk@^2.0.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + cliui@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" @@ -266,6 +387,30 @@ co@~3.0.6: resolved "https://registry.yarnpkg.com/co/-/co-3.0.6.tgz#1445f226c5eb956138e68c9ac30167ea7d2e6bda" integrity sha1-FEXyJsXrlWE45oyawwFn6n0ua9o= +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + combined-stream@^1.0.5, combined-stream@~1.0.1: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -315,6 +460,11 @@ component-emitter@1.1.2: resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.1.2.tgz#296594f2753daa63996d2af08d15a95116c9aec3" integrity sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM= +component-emitter@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + component-type@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/component-type/-/component-type-1.0.0.tgz#1ed8812e32dd65099d433570757f111ea3d3d871" @@ -352,6 +502,11 @@ cookiejar@2.0.1: resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.0.1.tgz#3d12752f6adf68a892f332433492bd5812bb668f" integrity sha1-PRJ1L2rfaKiS8zJDNJK9WBK7Zo8= +cookiejar@^2.0.6: + version "2.1.2" + resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.2.tgz#dd8a235530752f988f9a0844f3fc589e3111125c" + integrity sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA== + 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" @@ -388,7 +543,7 @@ debug@*: dependencies: ms "2.1.2" -debug@2, debug@2.6.9: +debug@2, debug@2.6.9, debug@^2.2.0: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -494,6 +649,11 @@ detective@^4.3.1: acorn "^5.2.1" defined "^1.0.0" +diff-sequences@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" + integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== + diff@1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/diff/-/diff-1.0.7.tgz#24bbb001c4a7d5522169e7cabdb2c2814ed91cf4" @@ -524,11 +684,16 @@ escape-html@~1.0.3: resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= -escape-string-regexp@^1.0.2: +escape-string-regexp@^1.0.2, 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" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + escodegen@1.x.x: version "1.14.3" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" @@ -571,6 +736,18 @@ etag@~1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= +expect@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/expect/-/expect-26.6.2.tgz#c6b996bf26bf3fe18b67b2d0f51fc981ba934417" + integrity sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA== + dependencies: + "@jest/types" "^26.6.2" + ansi-styles "^4.0.0" + jest-get-type "^26.3.0" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-regex-util "^26.0.0" + express-useragent@0.1.9: version "0.1.9" resolved "https://registry.yarnpkg.com/express-useragent/-/express-useragent-0.1.9.tgz#95f35de41b0b97636c94fbd4a26137b3a6008a39" @@ -612,7 +789,7 @@ express@^4.13.3: utils-merge "1.0.1" vary "~1.1.2" -extend@3, extend@~3.0.0: +extend@3, extend@^3.0.0, extend@~3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== @@ -639,6 +816,13 @@ file-uri-to-path@0: resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-0.0.2.tgz#37cdd1b5b905404b3f05e1b23645be694ff70f82" integrity sha1-N83RtbkFQEs/BeGyNkW+aU/3D4I= +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + finalhandler@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" @@ -673,6 +857,15 @@ form-data@0.1.3: combined-stream "~0.0.4" mime "~1.2.11" +form-data@1.0.0-rc4: + version "1.0.0-rc4" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-1.0.0-rc4.tgz#05ac6bc22227b43e4461f488161554699d4f8b5e" + integrity sha1-BaxrwiIntD5EYfSIFhVUaZ1Pi14= + dependencies: + async "^1.5.2" + combined-stream "^1.0.5" + mime-types "^2.1.10" + form-data@~1.0.0-rc1: version "1.0.1" resolved "https://registry.yarnpkg.com/form-data/-/form-data-1.0.1.tgz#ae315db9a4907fa065502304a66d7733475ee37c" @@ -687,6 +880,11 @@ formidable@1.0.14: resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.0.14.tgz#2b3f4c411cbb5fdd695c44843e2a23514a43231a" integrity sha1-Kz9MQRy7X91pXESEPiojUUpDIxo= +formidable@^1.0.17: + version "1.2.2" + resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.2.2.tgz#bf69aea2972982675f00865342b982986f6b8dd9" + integrity sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q== + forwarded@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" @@ -793,7 +991,7 @@ glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9: +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.4: version "4.2.6" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== @@ -825,6 +1023,16 @@ has-ansi@^2.0.0: dependencies: ansi-regex "^2.0.0" +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + hawk@~3.1.0: version "3.1.3" resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" @@ -851,6 +1059,17 @@ http-errors@1.7.2: statuses ">= 1.5.0 < 2" toidentifier "1.0.0" +http-errors@^1.5.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.0.tgz#75d1bbe497e1044f51e4ee9e704a62f28d336507" + integrity sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + http-errors@~1.7.2: version "1.7.3" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" @@ -960,6 +1179,11 @@ is-my-json-valid@^2.12.0: jsonpointer "^4.0.0" xtend "^4.0.0" +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + is-property@^1.0.0, is-property@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" @@ -993,6 +1217,51 @@ jade@0.26.3: commander "0.6.1" mkdirp "0.3.0" +jest-diff@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" + integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA== + dependencies: + chalk "^4.0.0" + diff-sequences "^26.6.2" + jest-get-type "^26.3.0" + pretty-format "^26.6.2" + +jest-get-type@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" + integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== + +jest-matcher-utils@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz#8e6fd6e863c8b2d31ac6472eeb237bc595e53e7a" + integrity sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw== + dependencies: + chalk "^4.0.0" + jest-diff "^26.6.2" + jest-get-type "^26.3.0" + pretty-format "^26.6.2" + +jest-message-util@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.6.2.tgz#58173744ad6fc0506b5d21150b9be56ef001ca07" + integrity sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA== + dependencies: + "@babel/code-frame" "^7.0.0" + "@jest/types" "^26.6.2" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.4" + micromatch "^4.0.2" + pretty-format "^26.6.2" + slash "^3.0.0" + stack-utils "^2.0.2" + +jest-regex-util@^26.0.0: + version "26.0.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" + integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== + join-component@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/join-component/-/join-component-1.0.0.tgz#cd2b2321c054be54e493815436b0ddc28a44235c" @@ -1003,6 +1272,11 @@ js-base64@2.1.9: resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.1.9.tgz#f0e80ae039a4bd654b5f281fc93f04a914a7fcce" integrity sha1-8OgK4DmkvWVLXygfyT8EqRSn/M4= +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + json-stringify-safe@~5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" @@ -1132,11 +1406,19 @@ methods@1.0.1: resolved "https://registry.yarnpkg.com/methods/-/methods-1.0.1.tgz#75bc91943dffd7da037cf3eeb0ed73a0037cd14b" integrity sha1-dbyRlD3/19oDfPPusO1zoAN80Us= -methods@~1.1.2: +methods@1.x, methods@^1.1.1, methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= +micromatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" + integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== + dependencies: + braces "^3.0.1" + picomatch "^2.0.5" + mime-db@1.46.0: version "1.46.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.46.0.tgz#6267748a7f799594de3cbc8cde91def349661cee" @@ -1154,7 +1436,7 @@ mime-types@2.1.4: dependencies: mime-db "~1.16.0" -mime-types@^2.1.11, mime-types@~2.1.2, mime-types@~2.1.24: +mime-types@^2.1.10, mime-types@^2.1.11, mime-types@~2.1.2, mime-types@~2.1.24: version "2.1.29" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.29.tgz#1d4ab77da64b91f5f72489df29236563754bb1b2" integrity sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ== @@ -1166,7 +1448,7 @@ mime@1.2.11, mime@~1.2.11: resolved "https://registry.yarnpkg.com/mime/-/mime-1.2.11.tgz#58203eed86e3a5ef17aed2b7d9ebd47f0a60dd10" integrity sha1-WCA+7Ybjpe8XrtK32evUfwpg3RA= -mime@1.6.0: +mime@1.6.0, mime@^1.3.4: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== @@ -1374,11 +1656,26 @@ path-to-regexp@0.1.7: resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= +picomatch@^2.0.5: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= +pretty-format@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" + integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== + dependencies: + "@jest/types" "^26.6.2" + ansi-regex "^5.0.0" + ansi-styles "^4.0.0" + react-is "^17.0.1" + private@^0.1.6, private@~0.1.5: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" @@ -1467,6 +1764,11 @@ qs@6.7.0: resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== +qs@^6.1.0: + version "6.9.6" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.6.tgz#26ed3c8243a431b2924aca84cc90471f35d5a0ee" + integrity sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ== + qs@~4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/qs/-/qs-4.0.0.tgz#c31d9b74ec27df75e543a86c78728ed8d4623607" @@ -1500,6 +1802,11 @@ raw-body@2.4.0: iconv-lite "0.4.24" unpipe "1.0.0" +react-is@^17.0.1: + version "17.0.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.1.tgz#5b3531bd76a645a4c9fb6e693ed36419e3301339" + integrity sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA== + readable-stream@1.0.27-1: version "1.0.27-1" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.27-1.tgz#6b67983c20357cefd07f0165001a16d710d91078" @@ -1520,7 +1827,7 @@ readable-stream@1.1.x, readable-stream@~1.1.9: isarray "0.0.1" string_decoder "~0.10.x" -readable-stream@2: +readable-stream@2, readable-stream@^2.0.5: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -1720,6 +2027,11 @@ setprototypeof@1.1.1: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + should-equal@0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/should-equal/-/should-equal-0.5.0.tgz#c797f135f3067feb69ebecdb306b1c3fe21b3e6f" @@ -1768,6 +2080,11 @@ single-line-log@~0.3.1: resolved "https://registry.yarnpkg.com/single-line-log/-/single-line-log-0.3.1.tgz#a7ad6507f218ce5dfe16c4bf2d659246419e7a06" integrity sha1-p61lB/IYzl3+FsS/LWWSRkGeegY= +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + smart-buffer@^1.0.13: version "1.1.15" resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-1.1.15.tgz#7f114b5b65fab3e2a35aa775bb12f0d1c649bf16" @@ -1817,6 +2134,13 @@ stable@~0.1.3: resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== +stack-utils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.3.tgz#cd5f030126ff116b78ccb3c027fe302713b61277" + integrity sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw== + dependencies: + escape-string-regexp "^2.0.0" + "statuses@>= 1.5.0 < 2", statuses@~1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" @@ -1889,6 +2213,22 @@ superagent-retry@~0.4.0: resolved "https://registry.yarnpkg.com/superagent-retry/-/superagent-retry-0.4.0.tgz#44e10b265c086e077d1b03681c9aa17494349f64" integrity sha1-ROELJlwIbgd9GwNoHJqhdJQ0n2Q= +superagent@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/superagent/-/superagent-2.3.0.tgz#703529a0714e57e123959ddefbce193b2e50d115" + integrity sha1-cDUpoHFOV+EjlZ3e+84ZOy5Q0RU= + dependencies: + component-emitter "^1.2.0" + cookiejar "^2.0.6" + debug "^2.2.0" + extend "^3.0.0" + form-data "1.0.0-rc4" + formidable "^1.0.17" + methods "^1.1.1" + mime "^1.3.4" + qs "^6.1.0" + readable-stream "^2.0.5" + superagent@~0.19.1: version "0.19.1" resolved "https://registry.yarnpkg.com/superagent/-/superagent-0.19.1.tgz#d2614f82e8486120393d1b158084736f8473e2d9" @@ -1906,11 +2246,33 @@ superagent@~0.19.1: readable-stream "1.0.27-1" reduce-component "1.0.1" +supertest@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/supertest/-/supertest-2.0.1.tgz#a058081d788f1515d4700d7502881e6b759e44cd" + integrity sha1-oFgIHXiPFRXUcA11Aogea3WeRM0= + dependencies: + methods "1.x" + superagent "^2.0.0" + supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + through2@~0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/through2/-/through2-0.2.3.tgz#eb3284da4ea311b6cc8ace3653748a52abf25a3f" @@ -1936,6 +2298,13 @@ tmp@^0.0.28: dependencies: os-tmpdir "~1.0.1" +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + toidentifier@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" From 7c07a019ddf4151c063394c0b3fccbbee6c04211 Mon Sep 17 00:00:00 2001 From: Ben Williams Date: Wed, 17 Mar 2021 14:49:02 -0700 Subject: [PATCH 07/14] linting --- .eslintrc | 21 +- .prettierignore | 1 - .prettierrc | 4 + bin/web.js | 247 ++--- lib/api.js | 70 +- lib/backends/backend.js | 199 ++-- lib/backends/github.js | 134 +-- lib/backends/index.js | 14 +- lib/index.js | 38 +- lib/nuts.js | 761 +++++++------- lib/utils/notes.js | 44 +- lib/utils/platforms.js | 248 +++-- lib/utils/win-releases.js | 175 ++-- lib/versions.js | 274 ++--- package.json | 14 +- test/all.js | 12 +- test/download.js | 111 +- test/platforms.js | 381 ++++--- test/testing.js | 18 +- test/update.js | 158 ++- test/versions.js | 67 +- test/win-releases.js | 210 ++-- yarn.lock | 2001 ++++++++++++++++++++++++++++++++++--- 23 files changed, 3537 insertions(+), 1665 deletions(-) delete mode 100644 .prettierignore create mode 100644 .prettierrc diff --git a/.eslintrc b/.eslintrc index 7330839..83f7107 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,18 +1,7 @@ { - "rules": { - "indent": [ 2, 4 ], - "quotes": [ 2, "single" ], - "linebreak-style": [ 2, "unix" ], - "semi": [ 2, "always" ], - "no-unused-vars": [ 2, { - "vars": "all", - "args": "none" - } ], - "spaced-comment": [ 2, "always" ] - }, - "env": { - "node": true, - "mocha": true - }, - "extends": "eslint:recommended" + "extends": ["plugin:prettier/recommended"], + "parser": "@babel/eslint-parser", + "parserOptions": { + "requireConfigFile": false + } } diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index 72e8ffc..0000000 --- a/.prettierignore +++ /dev/null @@ -1 +0,0 @@ -* diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..7cd7018 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,4 @@ +{ + "trailingComma": "all", + "semi": false +} diff --git a/bin/web.js b/bin/web.js index a161b2a..2ce8c5b 100644 --- a/bin/web.js +++ b/bin/web.js @@ -1,135 +1,156 @@ /* eslint-disable no-console */ -var express = require('express'); -var uuid = require('uuid'); -var basicAuth = require('basic-auth'); -var Analytics = require('analytics-node'); -var nuts = require('../'); +var express = require("express") +var uuid = require("uuid") +var basicAuth = require("basic-auth") +var Analytics = require("analytics-node") +var nuts = require("../") -var app = express(); +var app = express() -var apiAuth = { - username: process.env.API_USERNAME, - password: process.env.API_PASSWORD -}; +var apiAuth = { + username: process.env.API_USERNAME, + password: process.env.API_PASSWORD, +} -var analytics = undefined; -var downloadEvent = process.env.ANALYTICS_EVENT_DOWNLOAD || 'download'; +var analytics = undefined +var downloadEvent = process.env.ANALYTICS_EVENT_DOWNLOAD || "download" if (process.env.ANALYTICS_TOKEN) { - analytics = new Analytics(process.env.ANALYTICS_TOKEN); + analytics = new Analytics(process.env.ANALYTICS_TOKEN) } var myNuts = nuts.Nuts({ - repository: process.env.GITHUB_REPO, - token: process.env.GITHUB_TOKEN, - endpoint: process.env.GITHUB_ENDPOINT, - username: process.env.GITHUB_USERNAME, - password: process.env.GITHUB_PASSWORD, - timeout: process.env.VERSIONS_TIMEOUT, - cache: process.env.VERSIONS_CACHE, - refreshSecret: process.env.GITHUB_SECRET, - proxyAssets: !process.env.DONT_PROXY_ASSETS -}); + repository: process.env.GITHUB_REPO, + token: process.env.GITHUB_TOKEN, + endpoint: process.env.GITHUB_ENDPOINT, + username: process.env.GITHUB_USERNAME, + password: process.env.GITHUB_PASSWORD, + timeout: process.env.VERSIONS_TIMEOUT, + cache: process.env.VERSIONS_CACHE, + refreshSecret: process.env.GITHUB_SECRET, + proxyAssets: !process.env.DONT_PROXY_ASSETS, +}) // Control access to API -myNuts.before('api', function(access, next) { - if (!apiAuth.username) return next(); +myNuts.before("api", function (access, next) { + if (!apiAuth.username) return next() - function unauthorized() { - next(new Error('Invalid username/password for API')); - } + function unauthorized() { + next(new Error("Invalid username/password for API")) + } - var user = basicAuth(access.req); - if (!user || !user.name || !user.pass) { - return unauthorized(); - } + var user = basicAuth(access.req) + if (!user || !user.name || !user.pass) { + return unauthorized() + } - if (user.name === apiAuth.username && user.pass === apiAuth.password) { - return next(); - } else { - return unauthorized(); - } -}); + if (user.name === apiAuth.username && user.pass === apiAuth.password) { + return next() + } else { + return unauthorized() + } +}) // Log download -myNuts.before('download', function(download, next) { - console.log('download', download.platform.filename, 'for version', download.version.tag, 'on channel', download.version.channel, 'for', download.platform.type); - - next(); -}); -myNuts.after('download', function(download, next) { - console.log('downloaded', download.platform.filename, 'for version', download.version.tag, 'on channel', download.version.channel, 'for', download.platform.type); - - // Track on segment if enabled - if (analytics) { - var userId = download.req.query.user; - - analytics.track({ - event: downloadEvent, - anonymousId: userId? null : uuid.v4(), - userId: userId, - properties: { - version: download.version.tag, - channel: download.version.channel, - platform: download.platform.type, - os: nuts.platforms.toType(download.platform.type) - } - }); - } - - next(); -}); +myNuts.before("download", function (download, next) { + console.log( + "download", + download.platform.filename, + "for version", + download.version.tag, + "on channel", + download.version.channel, + "for", + download.platform.type, + ) + + next() +}) +myNuts.after("download", function (download, next) { + console.log( + "downloaded", + download.platform.filename, + "for version", + download.version.tag, + "on channel", + download.version.channel, + "for", + download.platform.type, + ) + + // Track on segment if enabled + if (analytics) { + var userId = download.req.query.user + + analytics.track({ + event: downloadEvent, + anonymousId: userId ? null : uuid.v4(), + userId: userId, + properties: { + version: download.version.tag, + channel: download.version.channel, + platform: download.platform.type, + os: nuts.platforms.toType(download.platform.type), + }, + }) + } + + next() +}) if (process.env.TRUST_PROXY) { - try { - var trustProxyObject = JSON.parse(process.env.TRUST_PROXY); - app.set('trust proxy', trustProxyObject); - } - catch (e) { - app.set('trust proxy', process.env.TRUST_PROXY); - } + try { + var trustProxyObject = JSON.parse(process.env.TRUST_PROXY) + app.set("trust proxy", trustProxyObject) + } catch (e) { + app.set("trust proxy", process.env.TRUST_PROXY) + } } -app.use(myNuts.router); +app.use(myNuts.router) // Error handling -app.use(function(req, res, next) { - res.status(404).send('Page not found'); -}); -app.use(function(err, req, res, next) { - var msg = err.message || err; - var code = 500; - - console.error(err.stack || err); - - // Return error - res.format({ - 'text/plain': function(){ - res.status(code).send(msg); - }, - 'text/html': function () { - res.status(code).send(msg); - }, - 'application/json': function (){ - res.status(code).send({ - 'error': msg, - 'code': code - }); - } - }); -}); - -myNuts.init() - -// Start the HTTP server -.then(function() { - var server = app.listen(process.env.PORT || 5000, function () { - var host = server.address().address; - var port = server.address().port; - - console.log('Listening at http://%s:%s', host, port); - }); -}, function(err) { - console.log(err.stack || err); - process.exit(1); -}); +app.use(function (req, res, next) { + res.status(404).send("Page not found") +}) +app.use(function (err, req, res, next) { + var msg = err.message || err + var code = 500 + + console.error(err.stack || err) + + // Return error + res.format({ + "text/plain": function () { + res.status(code).send(msg) + }, + "text/html": function () { + res.status(code).send(msg) + }, + "application/json": function () { + res.status(code).send({ + error: msg, + code: code, + }) + }, + }) +}) + +myNuts + .init() + + // Start the HTTP server + .then( + function () { + var server = app.listen(process.env.PORT || 5000, function () { + var host = server.address().address + var port = server.address().port + + console.log("Listening at http://%s:%s", host, port) + }) + }, + function (err) { + console.log(err.stack || err) + process.exit(1) + }, + ) diff --git a/lib/api.js b/lib/api.js index 70e789f..0c4cb6d 100644 --- a/lib/api.js +++ b/lib/api.js @@ -1,44 +1,40 @@ -var startTime = Date.now(); -var Q = require('q'); +var startTime = Date.now() +var Q = require("q") module.exports = { - 'status': function () { - return { - uptime: (Date.now() - startTime)/1000 - }; - }, - - 'versions': function (req) { - return this.versions.filter({ - platform: req.query.platform, - channel: req.query.channel || '*' - }); - }, + status: function () { + return { + uptime: (Date.now() - startTime) / 1000, + } + }, - 'channels': function () { - return this.versions.channels(); - }, + versions: function (req) { + return this.versions.filter({ + platform: req.query.platform, + channel: req.query.channel || "*", + }) + }, - 'refresh': function () { - return Q() - .then(this.backend.onRelease) - .thenResolve({done: true} - ); - }, + channels: function () { + return this.versions.channels() + }, - 'version/:tag': function (req) { - return this.versions.resolve({ - tag: req.params.tag, - channel: '*' - }); - }, + refresh: function () { + return Q().then(this.backend.onRelease).thenResolve({ done: true }) + }, - 'resolve': function(req) { - return this.versions.resolve({ - channel: req.query.channel, - platform: req.query.platform, - tag: req.query.tag - }); - } -}; + "version/:tag": function (req) { + return this.versions.resolve({ + tag: req.params.tag, + channel: "*", + }) + }, + resolve: function (req) { + return this.versions.resolve({ + channel: req.query.channel, + platform: req.query.platform, + tag: req.query.tag, + }) + }, +} diff --git a/lib/backends/backend.js b/lib/backends/backend.js index eec766a..caf8b7b 100644 --- a/lib/backends/backend.js +++ b/lib/backends/backend.js @@ -1,122 +1,115 @@ -var _ = require('lodash'); -var Q = require('q'); -var path = require('path'); -var os = require('os'); -var destroy = require('destroy'); -var LRU = require('lru-diskcache'); -var streamRes = require('stream-res'); -var Buffer = require('buffer').Buffer; +var _ = require("lodash") +var Q = require("q") +var path = require("path") +var os = require("os") +var destroy = require("destroy") +var LRU = require("lru-diskcache") +var streamRes = require("stream-res") +var Buffer = require("buffer").Buffer function Backend(nuts, opts) { - this.cacheId = 0; - this.nuts = nuts; - this.opts = _.defaults(opts || {}, { - // Folder to cache assets - cache: path.resolve(os.tmpdir(), 'nuts'), - - // Cache configuration - cacheMax: 500 * 1024 * 1024, - cacheMaxAge: 60 * 60 * 1000, - }); - - // Create cache - this.cache = LRU(opts.cache, { - max: opts.cacheMax, - maxAge: opts.cacheMaxAge - }); - - _.bindAll(this); + this.cacheId = 0 + this.nuts = nuts + this.opts = _.defaults(opts || {}, { + // Folder to cache assets + cache: path.resolve(os.tmpdir(), "nuts"), + + // Cache configuration + cacheMax: 500 * 1024 * 1024, + cacheMaxAge: 60 * 60 * 1000, + }) + + // Create cache + this.cache = LRU(opts.cache, { + max: opts.cacheMax, + maxAge: opts.cacheMaxAge, + }) + + _.bindAll(this) } // Memoize a function -Backend.prototype.memoize = function(fn) { - var that = this; +Backend.prototype.memoize = function (fn) { + var that = this - return _.memoize(fn, function() { - return that.cacheId+Math.ceil(Date.now()/that.opts.cacheMaxAge) - }); -}; + return _.memoize(fn, function () { + return that.cacheId + Math.ceil(Date.now() / that.opts.cacheMaxAge) + }) +} // New release? clear cache -Backend.prototype.onRelease = function() { - this.cacheId++; -}; +Backend.prototype.onRelease = function () { + this.cacheId++ +} // Initialize the backend -Backend.prototype.init = function() { - this.cache.init(); - return Q(); -}; +Backend.prototype.init = function () { + this.cache.init() + return Q() +} // List all releases for this repository -Backend.prototype.releases = function() { - -}; +Backend.prototype.releases = function () {} // Return stream for an asset -Backend.prototype.serveAsset = function(asset, req, res) { - var that = this; - var cacheKey = asset.id; - - function outputStream(stream) { - var d = Q.defer(); - streamRes(res, stream, d.makeNodeResolver()); - return d.promise; - } - - res.header('Content-Length', asset.size); - res.attachment(asset.filename); - - // Key exists - if (that.cache.has(cacheKey)) { - return that.cache.getStream(cacheKey) - .then(outputStream); - } - - return that.getAssetStream(asset) - .then(function(stream) { - return Q.all([ - // Cache the stream - that.cache.set(cacheKey, stream), +Backend.prototype.serveAsset = function (asset, req, res) { + var that = this + var cacheKey = asset.id + + function outputStream(stream) { + var d = Q.defer() + streamRes(res, stream, d.makeNodeResolver()) + return d.promise + } + + res.header("Content-Length", asset.size) + res.attachment(asset.filename) + + // Key exists + if (that.cache.has(cacheKey)) { + return that.cache.getStream(cacheKey).then(outputStream) + } + + return that.getAssetStream(asset).then(function (stream) { + return Q.all([ + // Cache the stream + that.cache.set(cacheKey, stream), + + // Send the stream to the user + outputStream(stream), + ]) + }) +} - // Send the stream to the user - outputStream(stream) - ]); - }); -}; +// Return stream for an asset +Backend.prototype.getAssetStream = function (asset) {} // Return stream for an asset -Backend.prototype.getAssetStream = function(asset) { +Backend.prototype.readAsset = function (asset) { + return this.getAssetStream(asset).then(function (res) { + var d = Q.defer() + var output = Buffer([]) + + function cleanup() { + destroy(res) + res.removeAllListeners() + } -}; + res + .on("data", function (buf) { + output = Buffer.concat([output, buf]) + }) + .on("error", function (err) { + cleanup() + d.reject(err) + }) + .on("end", function () { + cleanup() + d.resolve(output) + }) + + return d.promise + }) +} -// Return stream for an asset -Backend.prototype.readAsset = function(asset) { - return this.getAssetStream(asset) - .then(function(res) { - var d = Q.defer(); - var output = Buffer([]); - - function cleanup() { - destroy(res); - res.removeAllListeners(); - } - - res.on('data', function(buf) { - output = Buffer.concat([output, buf]); - }) - .on('error', function(err) { - cleanup(); - d.reject(err); - }) - .on('end', function() { - cleanup(); - d.resolve(output); - }); - - return d.promise - - }) -}; - -module.exports = Backend; +module.exports = Backend diff --git a/lib/backends/github.js b/lib/backends/github.js index dae8209..ecb9714 100644 --- a/lib/backends/github.js +++ b/lib/backends/github.js @@ -1,55 +1,53 @@ -var _ = require('lodash'); -var Q = require('q'); -var util = require('util'); -var GitHub = require('octocat'); -var request = require('request'); -var githubWebhook = require('github-webhook-handler'); - -var Backend = require('./backend'); +var _ = require("lodash") +var Q = require("q") +var util = require("util") +var GitHub = require("octocat") +var request = require("request") +var githubWebhook = require("github-webhook-handler") +var Backend = require("./backend") function GitHubBackend() { - var that = this; - Backend.apply(this, arguments); + var that = this + Backend.apply(this, arguments) - this.opts = _.defaults(this.opts || {}, { - proxyAssets: true - }); + this.opts = _.defaults(this.opts || {}, { + proxyAssets: true, + }) - this.client = new GitHub({ - token: this.opts.token, - endpoint: this.opts.endpoint, - username: this.opts.username, - password: this.opts.password - }); + this.client = new GitHub({ + token: this.opts.token, + endpoint: this.opts.endpoint, + username: this.opts.username, + password: this.opts.password, + }) - this.ghrepo = this.client.repo(this.opts.repository); - this.releases = this.memoize(this.releases); + this.ghrepo = this.client.repo(this.opts.repository) + this.releases = this.memoize(this.releases) - // GitHub webhook to refresh list of versions - this.webhookHandler = githubWebhook({ - path: '/refresh', - secret: this.opts.refreshSecret - }); + // GitHub webhook to refresh list of versions + this.webhookHandler = githubWebhook({ + path: "/refresh", + secret: this.opts.refreshSecret, + }) - // Webhook from GitHub - this.webhookHandler.on('release', function(event) { - that.onRelease(); - }); - this.nuts.router.use(this.webhookHandler); + // Webhook from GitHub + this.webhookHandler.on("release", function (event) { + that.onRelease() + }) + this.nuts.router.use(this.webhookHandler) } -util.inherits(GitHubBackend, Backend); +util.inherits(GitHubBackend, Backend) /** * List all releases for this repository * @return {Promise>} */ -GitHubBackend.prototype.releases = function() { - return this.ghrepo.releases() - .then(function(page) { - return page.all(); - }); -}; +GitHubBackend.prototype.releases = function () { + return this.ghrepo.releases().then(function (page) { + return page.all() + }) +} /** * Return stream for an asset @@ -58,42 +56,44 @@ GitHubBackend.prototype.releases = function() { * @param {Response} res * @return {Promise}? */ -GitHubBackend.prototype.serveAsset = function(asset, req, res) { - if (!this.opts.proxyAssets) { - res.redirect(asset.raw.browser_download_url); - } else { - return Backend.prototype.serveAsset.apply(this, arguments); - } -}; +GitHubBackend.prototype.serveAsset = function (asset, req, res) { + if (!this.opts.proxyAssets) { + res.redirect(asset.raw.browser_download_url) + } else { + return Backend.prototype.serveAsset.apply(this, arguments) + } +} /** * Return stream for an asset * @param {Asset} asset * @return {Promise} */ -GitHubBackend.prototype.getAssetStream = function(asset) { - var headers = { - 'User-Agent': 'nuts', - 'Accept': 'application/octet-stream' - }; - var httpAuth; +GitHubBackend.prototype.getAssetStream = function (asset) { + var headers = { + "User-Agent": "nuts", + Accept: "application/octet-stream", + } + var httpAuth - if (this.opts.token) { - headers['Authorization'] = 'token '+this.opts.token; - } else if (this.opts.username) { - httpAuth = { - user: this.opts.username, - pass: this.opts.password, - sendImmediately: true - }; + if (this.opts.token) { + headers["Authorization"] = "token " + this.opts.token + } else if (this.opts.username) { + httpAuth = { + user: this.opts.username, + pass: this.opts.password, + sendImmediately: true, } + } - return Q(request({ - uri: asset.raw.url, - method: 'get', - headers: headers, - auth: httpAuth - })); -}; + return Q( + request({ + uri: asset.raw.url, + method: "get", + headers: headers, + auth: httpAuth, + }), + ) +} -module.exports = GitHubBackend; +module.exports = GitHubBackend diff --git a/lib/backends/index.js b/lib/backends/index.js index 193703c..c3065d9 100644 --- a/lib/backends/index.js +++ b/lib/backends/index.js @@ -1,10 +1,10 @@ -var _ = require('lodash'); +var _ = require("lodash") var BACKENDS = { - github: require('./github') -}; + github: require("./github"), +} -module.exports = function(backend) { - if (_.isString(backend)) return BACKENDS[backend]; - return backend; -}; +module.exports = function (backend) { + if (_.isString(backend)) return BACKENDS[backend] + return backend +} diff --git a/lib/index.js b/lib/index.js index 1fd69e0..0d5a010 100644 --- a/lib/index.js +++ b/lib/index.js @@ -1,8 +1,8 @@ -var express = require('express'); +var express = require("express") -var Nuts = require('./nuts'); -var platforms = require('./utils/platforms'); -var winReleases = require('./utils/win-releases'); +var Nuts = require("./nuts") +var platforms = require("./utils/platforms") +var winReleases = require("./utils/win-releases") /** * Create an express application with Nuts binded to it. @@ -12,24 +12,24 @@ var winReleases = require('./utils/win-releases'); * @return {Express.Application} app */ function createApp(options) { - var app = express(); - var nuts = Nuts(options); + var app = express() + var nuts = Nuts(options) - app.use(nuts.router); + app.use(nuts.router) - app.use(function(err, req, res, next) { - res.status(err.statusCode || 500); - res.send({ - message: err.message - }); - }); + app.use(function (err, req, res, next) { + res.status(err.statusCode || 500) + res.send({ + message: err.message, + }) + }) - return app; + return app } module.exports = { - Nuts: Nuts, - platforms: platforms, - winReleases: winReleases, - createApp: createApp -}; + Nuts: Nuts, + platforms: platforms, + winReleases: winReleases, + createApp: createApp, +} diff --git a/lib/nuts.js b/lib/nuts.js index 42e9b09..5c1fdc1 100644 --- a/lib/nuts.js +++ b/lib/nuts.js @@ -1,104 +1,110 @@ -var _ = require('lodash'); -var Q = require('q'); -var Feed = require('feed'); -var urljoin = require('urljoin.js'); -var Understudy = require('understudy'); -var express = require('express'); -var useragent = require('express-useragent'); -var createError = require('http-errors'); - -var Versions = require('./versions'); -var notes = require('./utils/notes'); -var platforms = require('./utils/platforms'); -var winReleases = require('./utils/win-releases'); -var BACKENDS = require('./backends'); -var API_METHODS = require('./api'); +var _ = require("lodash") +var Q = require("q") +var Feed = require("feed") +var urljoin = require("urljoin.js") +var Understudy = require("understudy") +var express = require("express") +var useragent = require("express-useragent") +var createError = require("http-errors") + +var Versions = require("./versions") +var notes = require("./utils/notes") +var platforms = require("./utils/platforms") +var winReleases = require("./utils/win-releases") +var BACKENDS = require("./backends") +var API_METHODS = require("./api") function getFullUrl(req) { - return req.protocol + '://' + req.get('host') + req.originalUrl; + return req.protocol + "://" + req.get("host") + req.originalUrl } function Nuts(opts) { - if (!(this instanceof Nuts)) return new Nuts(opts); - var that = this; - - Understudy.call(this); - _.bindAll(this); - - this.opts = _.defaults(opts || {}, { - // Backend to use - backend: 'github', - - // Timeout for releases cache (seconds) - timeout: 60*60*1000, - - // Pre-fetch list of releases at startup - preFetch: true, - - // Secret for GitHub webhook - refreshSecret: 'secret' - }); - - // .init() is now a memoized version of ._init() - this.init = _.memoize(this._init); - - // Create router - this.router = express.Router(); - - // Create backend - this.backend = new (BACKENDS(this.opts.backend))(this, this.opts); - this.versions = new Versions(this.backend); - - // Bind routes - this.router.use(useragent.express()); - - this.router.get('/', this.onDownload); - this.router.get('/download/channel/:channel/:platform?', this.onDownload); - this.router.get('/download/version/:tag/:platform?', this.onDownload); - this.router.get('/download/:tag/:filename', this.onDownload); - this.router.get('/download/:platform?', this.onDownload); - - this.router.get('/feed/channel/:channel.atom', this.onServeVersionsFeed); - - this.router.get('/update', this.onUpdateRedirect); - this.router.get('/update/:platform/:version', this.onUpdate); - this.router.get('/update/channel/:channel/:platform/:version', this.onUpdate); - this.router.get('/update/:platform/:version/RELEASES', this.onUpdateWin); - this.router.get('/update/channel/:channel/:platform/:version/RELEASES', this.onUpdateWin); - - this.router.get('/notes/:version?', this.onServeNotes); - - // Bind API - this.router.use('/api', this.onAPIAccessControl); - _.each(API_METHODS, function(method, route) { - this.router.get('/api/' + route, function(req, res, next) { - return Q() - .then(function() { - return method.call(that, req); - }) - .then(function(result) { - res.send(result); - }, next); - }); - }, this); + if (!(this instanceof Nuts)) return new Nuts(opts) + var that = this + + Understudy.call(this) + _.bindAll(this) + + this.opts = _.defaults(opts || {}, { + // Backend to use + backend: "github", + + // Timeout for releases cache (seconds) + timeout: 60 * 60 * 1000, + + // Pre-fetch list of releases at startup + preFetch: true, + + // Secret for GitHub webhook + refreshSecret: "secret", + }) + + // .init() is now a memoized version of ._init() + this.init = _.memoize(this._init) + + // Create router + this.router = express.Router() + + // Create backend + this.backend = new (BACKENDS(this.opts.backend))(this, this.opts) + this.versions = new Versions(this.backend) + + // Bind routes + this.router.use(useragent.express()) + + this.router.get("/", this.onDownload) + this.router.get("/download/channel/:channel/:platform?", this.onDownload) + this.router.get("/download/version/:tag/:platform?", this.onDownload) + this.router.get("/download/:tag/:filename", this.onDownload) + this.router.get("/download/:platform?", this.onDownload) + + this.router.get("/feed/channel/:channel.atom", this.onServeVersionsFeed) + + this.router.get("/update", this.onUpdateRedirect) + this.router.get("/update/:platform/:version", this.onUpdate) + this.router.get("/update/channel/:channel/:platform/:version", this.onUpdate) + this.router.get("/update/:platform/:version/RELEASES", this.onUpdateWin) + this.router.get( + "/update/channel/:channel/:platform/:version/RELEASES", + this.onUpdateWin, + ) + + this.router.get("/notes/:version?", this.onServeNotes) + + // Bind API + this.router.use("/api", this.onAPIAccessControl) + _.each( + API_METHODS, + function (method, route) { + this.router.get("/api/" + route, function (req, res, next) { + return Q() + .then(function () { + return method.call(that, req) + }) + .then(function (result) { + res.send(result) + }, next) + }) + }, + this, + ) } // _init does the real init work, initializing backend and prefetching versions -Nuts.prototype._init = function() { - var that = this; - return Q() - .then(function() { - return that.backend.init(); +Nuts.prototype._init = function () { + var that = this + return Q() + .then(function () { + return that.backend.init() }) - .then(function() { - if (!that.opts.preFetch) { - return; - } - - return that.versions.list(); - }); -}; + .then(function () { + if (!that.opts.preFetch) { + return + } + return that.versions.list() + }) +} /** * Perform a hook using promised functions @@ -107,20 +113,20 @@ Nuts.prototype._init = function() { * @param {Function} fn * @return {Promise} */ -Nuts.prototype.performQ = function(name, arg, fn) { - var that = this; - fn = fn || function() { }; - - return Q.nfcall(this.perform, name, arg, function (next) { - Q() - .then(function() { - return fn.call(that, arg); - }) - .then(function() { - next(); - }, next); - }); -}; +Nuts.prototype.performQ = function (name, arg, fn) { + var that = this + fn = fn || function () {} + + return Q.nfcall(this.perform, name, arg, function (next) { + Q() + .then(function () { + return fn.call(that, arg) + }) + .then(function () { + next() + }, next) + }) +} /** * Serve an asset to the response @@ -130,298 +136,329 @@ Nuts.prototype.performQ = function(name, arg, fn) { * @param {String} asset * @return {Promise} */ -Nuts.prototype.serveAsset = function(req, res, version, asset) { - var that = this; - - return that.init() - .then(function() { - return that.performQ('download', { - req: req, - version: version, - platform: asset - }, function() { - return that.backend.serveAsset(asset, req, res); - }); - }); -}; +Nuts.prototype.serveAsset = function (req, res, version, asset) { + var that = this + + return that.init().then(function () { + return that.performQ( + "download", + { + req: req, + version: version, + platform: asset, + }, + function () { + return that.backend.serveAsset(asset, req, res) + }, + ) + }) +} // Handler for download routes -Nuts.prototype.onDownload = function(req, res, next) { - var that = this; - var channel = req.params.channel; - var platform = req.params.platform; - var tag = req.params.tag || 'latest'; - var filename = req.params.filename; - var filetypeWanted = req.query.filetype; - - // When serving a specific file, platform is not required - if (!filename) { - // Detect platform from useragent - if (!platform) { - if (req.useragent.isMac) platform = platforms.OSX; - if (req.useragent.isWindows) platform = platforms.WINDOWS; - if (req.useragent.isLinux) platform = platforms.LINUX; - if (req.useragent.isLinux64) platform = platforms.LINUX_64; - } - - if (!platform) { - return next(createError(400, 'No platform specified and impossible to detect one')); - } - } else { - platform = null; +Nuts.prototype.onDownload = function (req, res, next) { + var that = this + var channel = req.params.channel + var platform = req.params.platform + var tag = req.params.tag || "latest" + var filename = req.params.filename + var filetypeWanted = req.query.filetype + + // When serving a specific file, platform is not required + if (!filename) { + // Detect platform from useragent + if (!platform) { + if (req.useragent.isMac) platform = platforms.OSX + if (req.useragent.isWindows) platform = platforms.WINDOWS + if (req.useragent.isLinux) platform = platforms.LINUX + if (req.useragent.isLinux64) platform = platforms.LINUX_64 } - // If specific version, don't enforce a channel - if (tag != 'latest') { - channel = '*'; + if (!platform) { + return next( + createError(400, "No platform specified and impossible to detect one"), + ) } - - this.versions.resolve({ - channel: channel, - platform: platform, - tag: tag + } else { + platform = null + } + + // If specific version, don't enforce a channel + if (tag != "latest") { + channel = "*" + } + + this.versions + .resolve({ + channel: channel, + platform: platform, + tag: tag, }) // Fallback to any channels if no version found on stable one - .fail(function(err) { - if (channel || tag != 'latest') throw err; - - return that.versions.resolve({ - channel: '*', - platform: platform, - tag: tag - }); + .fail(function (err) { + if (channel || tag != "latest") throw err + + return that.versions.resolve({ + channel: "*", + platform: platform, + tag: tag, + }) }) // Serve downloads - .then(function(version) { - var asset; - - if (filename) { - asset = _.find(version.platforms, { - filename: filename - }); - } else { - asset = platforms.resolve(version, platform, { - wanted: filetypeWanted? '.'+filetypeWanted : null - }); - } - - if (!asset) { - throw createError(404, 'No download available for platform ' + platform - + ' for version ' + version.tag + ' (' + (channel || 'beta') + ')'); - } - - // Call analytic middleware, then serve - return that.serveAsset(req, res, version, asset); - }) - .fail(next); -}; + .then(function (version) { + var asset + if (filename) { + asset = _.find(version.platforms, { + filename: filename, + }) + } else { + asset = platforms.resolve(version, platform, { + wanted: filetypeWanted ? "." + filetypeWanted : null, + }) + } + + if (!asset) { + throw createError( + 404, + "No download available for platform " + + platform + + " for version " + + version.tag + + " (" + + (channel || "beta") + + ")", + ) + } + + // Call analytic middleware, then serve + return that.serveAsset(req, res, version, asset) + }) + .fail(next) +} // Request to update -Nuts.prototype.onUpdateRedirect = function(req, res, next) { - Q() - .then(function() { - if (!req.query.version) throw new Error('Requires "version" parameter'); - if (!req.query.platform) throw new Error('Requires "platform" parameter'); - - return res.redirect('/update/'+req.query.platform+'/'+req.query.version); +Nuts.prototype.onUpdateRedirect = function (req, res, next) { + Q() + .then(function () { + if (!req.query.version) throw new Error('Requires "version" parameter') + if (!req.query.platform) throw new Error('Requires "platform" parameter') + + return res.redirect( + "/update/" + req.query.platform + "/" + req.query.version, + ) }) - .fail(next); -}; + .fail(next) +} // Updater used by OSX (Squirrel.Mac) and others -Nuts.prototype.onUpdate = function(req, res, next) { - var that = this; - var fullUrl = getFullUrl(req); - - var platform = req.params.platform; - var channel = req.params.channel || 'stable'; - var tag = req.params.version; - var filetype = req.query.filetype ? req.query.filetype : 'zip'; - - Q() - .then(function() { - if (!tag) { - throw createError(400, 'Requires "version" parameter'); - } - if (!platform) { - throw createError(400, 'Requires "platform" parameter'); - } - - platform = platforms.detect(platform); - - return that.versions.filter({ - tag: '>='+tag, - platform: platform, - channel: channel, - stripChannel: true - }); +Nuts.prototype.onUpdate = function (req, res, next) { + var that = this + var fullUrl = getFullUrl(req) + + var platform = req.params.platform + var channel = req.params.channel || "stable" + var tag = req.params.version + var filetype = req.query.filetype ? req.query.filetype : "zip" + + Q() + .then(function () { + if (!tag) { + throw createError(400, 'Requires "version" parameter') + } + if (!platform) { + throw createError(400, 'Requires "platform" parameter') + } + + platform = platforms.detect(platform) + + return that.versions.filter({ + tag: ">=" + tag, + platform: platform, + channel: channel, + stripChannel: true, + }) }) - .then(function(versions) { - var latest = versions[0]; - - // Already using latest version? - if (!latest || latest.tag == tag) { - return res.status(204).send('No updates'); - } - - // Extract release notes from all versions in range - var notesSlice = versions.length === 1? [versions[0]] : versions.slice(0, -1); - var releaseNotes = notes.merge(notesSlice, { includeTag: false }); - - // URL for download should be absolute - var gitFilePath = (req.params.channel ? '/../../../../../' : '/../../../' ); - - res.status(200) - .send({ - 'url': urljoin(fullUrl, gitFilePath, - '/download/version/' + latest.tag + '/' + platform + '?filetype=' + filetype), - 'name': latest.tag, - 'notes': releaseNotes, - 'pub_date': latest.published_at.toISOString() - }); + .then(function (versions) { + var latest = versions[0] + + // Already using latest version? + if (!latest || latest.tag == tag) { + return res.status(204).send("No updates") + } + + // Extract release notes from all versions in range + var notesSlice = + versions.length === 1 ? [versions[0]] : versions.slice(0, -1) + var releaseNotes = notes.merge(notesSlice, { includeTag: false }) + + // URL for download should be absolute + var gitFilePath = req.params.channel ? "/../../../../../" : "/../../../" + + res.status(200).send({ + url: urljoin( + fullUrl, + gitFilePath, + "/download/version/" + + latest.tag + + "/" + + platform + + "?filetype=" + + filetype, + ), + name: latest.tag, + notes: releaseNotes, + pub_date: latest.published_at.toISOString(), + }) }) - .fail(next); -}; + .fail(next) +} // Update Windows (Squirrel.Windows) // Auto-updates: Squirrel.Windows: serve RELEASES from latest version // Currently, it will only serve a full.nupkg of the latest release with a normalized filename (for pre-release) -Nuts.prototype.onUpdateWin = function(req, res, next) { - var that = this; - - var fullUrl = getFullUrl(req); - var platform = 'win_32'; - var channel = req.params.channel || '*'; - var tag = req.params.version; - - that.init() - .then(function() { - platform = platforms.detect(platform); - - return that.versions.filter({ - tag: '>='+tag, - platform: platform, - channel: channel - }); - }) - .then(function(versions) { - // Update needed? - var latest = _.first(versions); - if (!latest) throw new Error('Version not found'); - - // File exists - var asset = _.find(latest.platforms, { - filename: 'RELEASES' - }); - if (!asset) throw new Error('File not found'); - - return that.backend.readAsset(asset) - .then(function(content) { - var releases = winReleases.parse(content.toString('utf-8')); +Nuts.prototype.onUpdateWin = function (req, res, next) { + var that = this - releases = _.chain(releases) + var fullUrl = getFullUrl(req) + var platform = "win_32" + var channel = req.params.channel || "*" + var tag = req.params.version - // Change filename to use download proxy - .map(function(entry) { - var gitFilePath = (channel === '*' ? '../../../../' : '../../../../../../'); - entry.filename = urljoin(fullUrl, gitFilePath, '/download/'+entry.semver+'/'+entry.filename); + that + .init() + .then(function () { + platform = platforms.detect(platform) - return entry; - }) - - .value(); - - var output = winReleases.generate(releases); - - res.header('Content-Length', output.length); - res.attachment('RELEASES'); - res.send(output); - }); + return that.versions.filter({ + tag: ">=" + tag, + platform: platform, + channel: channel, + }) + }) + .then(function (versions) { + // Update needed? + var latest = _.first(versions) + if (!latest) throw new Error("Version not found") + + // File exists + var asset = _.find(latest.platforms, { + filename: "RELEASES", + }) + if (!asset) throw new Error("File not found") + + return that.backend.readAsset(asset).then(function (content) { + var releases = winReleases.parse(content.toString("utf-8")) + + releases = _.chain(releases) + + // Change filename to use download proxy + .map(function (entry) { + var gitFilePath = + channel === "*" ? "../../../../" : "../../../../../../" + entry.filename = urljoin( + fullUrl, + gitFilePath, + "/download/" + entry.semver + "/" + entry.filename, + ) + + return entry + }) + + .value() + + var output = winReleases.generate(releases) + + res.header("Content-Length", output.length) + res.attachment("RELEASES") + res.send(output) + }) }) - .fail(next); -}; + .fail(next) +} // Serve releases notes -Nuts.prototype.onServeNotes = function(req, res, next) { - var that = this; - var tag = req.params.version; - - Q() - .then(function() { - return that.versions.filter({ - tag: tag? '>='+tag : '*', - channel: '*' - }); +Nuts.prototype.onServeNotes = function (req, res, next) { + var that = this + var tag = req.params.version + + Q() + .then(function () { + return that.versions.filter({ + tag: tag ? ">=" + tag : "*", + channel: "*", + }) }) - .then(function(versions) { - var latest = _.first(versions); - if (!latest) { - throw new Error('No versions matching'); - } - - res.format({ - 'application/json': function(){ - res.send({ - 'notes': notes.merge(versions, { includeTag: false }), - 'pub_date': latest.published_at.toISOString() - }); - }, - 'default': function() { - res.send(notes.merge(versions)); - } - }); + .then(function (versions) { + var latest = _.first(versions) + if (!latest) { + throw new Error("No versions matching") + } + + res.format({ + "application/json": function () { + res.send({ + notes: notes.merge(versions, { includeTag: false }), + pub_date: latest.published_at.toISOString(), + }) + }, + default: function () { + res.send(notes.merge(versions)) + }, + }) }) - .fail(next); -}; + .fail(next) +} // Serve versions list as RSS -Nuts.prototype.onServeVersionsFeed = function(req, res, next) { - var that = this; - var channel = req.params.channel || 'all'; - var channelId = channel === 'all'? '*' : channel; - var fullUrl = getFullUrl(req); - - var feed = new Feed({ - id: 'versions/channels/'+channel, - title: 'Versions (' + channel + ')', - link: fullUrl - }); - - Q() - .then(function() { - return that.versions.filter({ - channel: channelId - }); +Nuts.prototype.onServeVersionsFeed = function (req, res, next) { + var that = this + var channel = req.params.channel || "all" + var channelId = channel === "all" ? "*" : channel + var fullUrl = getFullUrl(req) + + var feed = new Feed({ + id: "versions/channels/" + channel, + title: "Versions (" + channel + ")", + link: fullUrl, + }) + + Q() + .then(function () { + return that.versions.filter({ + channel: channelId, + }) }) - .then(function(versions) { - _.each(versions, function(version) { - feed.addItem({ - title: version.tag, - link: urljoin(fullUrl, '/../../../', '/download/version/'+version.tag), - description: version.notes, - date: version.published_at, - author: [] - }); - }); - - res.set('Content-Type', 'application/atom+xml; charset=utf-8'); - res.send(feed.render('atom-1.0')); + .then(function (versions) { + _.each(versions, function (version) { + feed.addItem({ + title: version.tag, + link: urljoin( + fullUrl, + "/../../../", + "/download/version/" + version.tag, + ), + description: version.notes, + date: version.published_at, + author: [], + }) + }) + + res.set("Content-Type", "application/atom+xml; charset=utf-8") + res.send(feed.render("atom-1.0")) }) - .fail(next); -}; + .fail(next) +} // Control access to the API -Nuts.prototype.onAPIAccessControl = function(req, res, next) { - this.performQ('api', { - req: req, - res: res - }) - .then(function() { - next(); - }, next); -}; +Nuts.prototype.onAPIAccessControl = function (req, res, next) { + this.performQ("api", { + req: req, + res: res, + }).then(function () { + next() + }, next) +} -module.exports = Nuts; +module.exports = Nuts diff --git a/lib/utils/notes.js b/lib/utils/notes.js index f916fdd..6a23e5a 100644 --- a/lib/utils/notes.js +++ b/lib/utils/notes.js @@ -1,33 +1,33 @@ -var _ = require('lodash'); +var _ = require("lodash") // Merge release notes for a list of versions function mergeForVersions(versions, opts) { - opts = _.defaults(opts || {}, { - includeTag: true - }); + opts = _.defaults(opts || {}, { + includeTag: true, + }) - return _.chain(versions) - .reduce(function(prev, version) { - if (!version.notes) return prev; + return _.chain(versions) + .reduce(function (prev, version) { + if (!version.notes) return prev - // Include tag as title - if (opts.includeTag) { - prev = prev + '## ' + version.tag + '\n'; - } + // Include tag as title + if (opts.includeTag) { + prev = prev + "## " + version.tag + "\n" + } - // Include notes - prev = prev + version.notes + '\n'; + // Include notes + prev = prev + version.notes + "\n" - // New lines - if (opts.includeTag) { - prev = prev + '\n'; - } + // New lines + if (opts.includeTag) { + prev = prev + "\n" + } - return prev; - }, '') - .value(); + return prev + }, "") + .value() } module.exports = { - merge: mergeForVersions -}; + merge: mergeForVersions, +} diff --git a/lib/utils/platforms.js b/lib/utils/platforms.js index 5ee5f79..90e44f2 100644 --- a/lib/utils/platforms.js +++ b/lib/utils/platforms.js @@ -1,136 +1,162 @@ -var _ = require('lodash'); -var path = require('path'); +var _ = require("lodash") +var path = require("path") var platforms = { - LINUX: 'linux', - LINUX_32: 'linux_32', - LINUX_64: 'linux_64', - LINUX_RPM: 'linux_rpm', - LINUX_RPM_32: 'linux_rpm_32', - LINUX_RPM_64: 'linux_rpm_64', - LINUX_DEB: 'linux_deb', - LINUX_DEB_32: 'linux_deb_32', - LINUX_DEB_64: 'linux_deb_64', - OSX: 'osx', - OSX_32: 'osx_32', - OSX_64: 'osx_64', - WINDOWS: 'windows', - WINDOWS_32: 'windows_32', - WINDOWS_64: 'windows_64', - - detect: detectPlatform -}; + LINUX: "linux", + LINUX_32: "linux_32", + LINUX_64: "linux_64", + LINUX_RPM: "linux_rpm", + LINUX_RPM_32: "linux_rpm_32", + LINUX_RPM_64: "linux_rpm_64", + LINUX_DEB: "linux_deb", + LINUX_DEB_32: "linux_deb_32", + LINUX_DEB_64: "linux_deb_64", + OSX: "osx", + OSX_32: "osx_32", + OSX_64: "osx_64", + WINDOWS: "windows", + WINDOWS_32: "windows_32", + WINDOWS_64: "windows_64", + + detect: detectPlatform, +} // Reduce a platfrom id to its type function platformToType(platform) { - return _.first(platform.split('_')); + return _.first(platform.split("_")) } // Detect and normalize the platform name function detectPlatform(platform) { - var name = platform.toLowerCase(); - var prefix = "", suffix = ""; - - // Detect NuGet/Squirrel.Windows files - if (name == 'releases' || hasSuffix(name, '.nupkg')) return platforms.WINDOWS_32; - - // Detect prefix: osx, widnows or linux - if (_.contains(name, 'win') - || hasSuffix(name, '.exe')) prefix = platforms.WINDOWS; - - if (_.contains(name, 'linux') - || _.contains(name, 'ubuntu') - || hasSuffix(name, '.deb') - || hasSuffix(name, '.rpm') - || hasSuffix(name, '.tgz') - || hasSuffix(name, '.tar.gz')) { - - if (_.contains(name, 'linux_deb') || hasSuffix(name, '.deb')) { - prefix = platforms.LINUX_DEB; - } - else if (_.contains(name, 'linux_rpm') || hasSuffix(name, '.rpm')) { - prefix = platforms.LINUX_RPM; - } - else if (_.contains(name, 'linux') || hasSuffix(name, '.tgz') || hasSuffix(name, '.tar.gz')) { - prefix = platforms.LINUX; - } + var name = platform.toLowerCase() + var prefix = "", + suffix = "" + + // Detect NuGet/Squirrel.Windows files + if (name == "releases" || hasSuffix(name, ".nupkg")) + return platforms.WINDOWS_32 + + // Detect prefix: osx, widnows or linux + if (_.contains(name, "win") || hasSuffix(name, ".exe")) + prefix = platforms.WINDOWS + + if ( + _.contains(name, "linux") || + _.contains(name, "ubuntu") || + hasSuffix(name, ".deb") || + hasSuffix(name, ".rpm") || + hasSuffix(name, ".tgz") || + hasSuffix(name, ".tar.gz") + ) { + if (_.contains(name, "linux_deb") || hasSuffix(name, ".deb")) { + prefix = platforms.LINUX_DEB + } else if (_.contains(name, "linux_rpm") || hasSuffix(name, ".rpm")) { + prefix = platforms.LINUX_RPM + } else if ( + _.contains(name, "linux") || + hasSuffix(name, ".tgz") || + hasSuffix(name, ".tar.gz") + ) { + prefix = platforms.LINUX } - - if (_.contains(name, 'mac') - || _.contains(name, 'osx') - || name.indexOf('darwin') >= 0 - || hasSuffix(name, '.dmg')) prefix = platforms.OSX; - - // Detect suffix: 32 or 64 - if (_.contains(name, '32') - || _.contains(name, 'ia32') - || _.contains(name, 'i386')) suffix = '32'; - if (_.contains(name, '64') || _.contains(name, 'x64') || _.contains(name, 'amd64')) suffix = '64'; - - suffix = suffix || (prefix == platforms.OSX? '64' : '32'); - return _.compact([prefix, suffix]).join('_'); + } + + if ( + _.contains(name, "mac") || + _.contains(name, "osx") || + name.indexOf("darwin") >= 0 || + hasSuffix(name, ".dmg") + ) + prefix = platforms.OSX + + // Detect suffix: 32 or 64 + if ( + _.contains(name, "32") || + _.contains(name, "ia32") || + _.contains(name, "i386") + ) + suffix = "32" + if ( + _.contains(name, "64") || + _.contains(name, "x64") || + _.contains(name, "amd64") + ) + suffix = "64" + + suffix = suffix || (prefix == platforms.OSX ? "64" : "32") + return _.compact([prefix, suffix]).join("_") } function hasSuffix(str, suffix) { - return str.slice(str.length-suffix.length) === suffix; + return str.slice(str.length - suffix.length) === suffix } // Satisfies a platform function satisfiesPlatform(platform, list) { - if (_.contains(list, platform)) return true; + if (_.contains(list, platform)) return true - // By default, user 32bits version - if (_.contains(list+'_32', platform)) return true; + // By default, user 32bits version + if (_.contains(list + "_32", platform)) return true - return false; + return false } // Resolve a platform for a version function resolveForVersion(version, platformID, opts) { - opts = _.defaults(opts || {}, { - // Order for filetype - filePreference: ['.exe', '.dmg', '.deb', '.rpm', '.tgz', '.tar.gz', '.zip', '.nupkg'], - wanted: null - }); - - // Prepare file prefs - if (opts.wanted) opts.filePreference = _.uniq([opts.wanted].concat(opts.filePreference)); - - // Normalize platform id - platformID = detectPlatform(platformID); - - return _.chain(version.platforms) - .filter(function(pl) { - return pl.type.indexOf(platformID) === 0; - }) - .sort(function(p1, p2) { - var result = 0; - - // Compare by arhcitecture ("osx_64" > "osx") - if (p1.type.length > p2.type.length) result = -1; - else if (p2.type.length > p1.type.length) result = 1; - - // Order by file type if samee architecture - if (result == 0) { - var ext1 = path.extname(p1.filename); - var ext2 = path.extname(p2.filename); - var pos1 = _.indexOf(opts.filePreference, ext1); - var pos2 = _.indexOf(opts.filePreference, ext2); - - pos1 = pos1 == -1? opts.filePreference.length : pos1; - pos2 = pos2 == -1? opts.filePreference.length : pos2; - - if (pos1 < pos2) result = -1; - else if (pos2 < pos1) result = 1; - } - return result; - }) - .first() - .value() + opts = _.defaults(opts || {}, { + // Order for filetype + filePreference: [ + ".exe", + ".dmg", + ".deb", + ".rpm", + ".tgz", + ".tar.gz", + ".zip", + ".nupkg", + ], + wanted: null, + }) + + // Prepare file prefs + if (opts.wanted) + opts.filePreference = _.uniq([opts.wanted].concat(opts.filePreference)) + + // Normalize platform id + platformID = detectPlatform(platformID) + + return _.chain(version.platforms) + .filter(function (pl) { + return pl.type.indexOf(platformID) === 0 + }) + .sort(function (p1, p2) { + var result = 0 + + // Compare by arhcitecture ("osx_64" > "osx") + if (p1.type.length > p2.type.length) result = -1 + else if (p2.type.length > p1.type.length) result = 1 + + // Order by file type if samee architecture + if (result == 0) { + var ext1 = path.extname(p1.filename) + var ext2 = path.extname(p2.filename) + var pos1 = _.indexOf(opts.filePreference, ext1) + var pos2 = _.indexOf(opts.filePreference, ext2) + + pos1 = pos1 == -1 ? opts.filePreference.length : pos1 + pos2 = pos2 == -1 ? opts.filePreference.length : pos2 + + if (pos1 < pos2) result = -1 + else if (pos2 < pos1) result = 1 + } + return result + }) + .first() + .value() } -module.exports = platforms; -module.exports.detect = detectPlatform; -module.exports.satisfies = satisfiesPlatform; -module.exports.toType = platformToType; -module.exports.resolve = resolveForVersion; +module.exports = platforms +module.exports.detect = detectPlatform +module.exports.satisfies = satisfiesPlatform +module.exports.toType = platformToType +module.exports.resolve = resolveForVersion diff --git a/lib/utils/win-releases.js b/lib/utils/win-releases.js index e468f97..15b4acf 100644 --- a/lib/utils/win-releases.js +++ b/lib/utils/win-releases.js @@ -1,124 +1,115 @@ -var _ = require('lodash'); -var semver = require('semver'); -var stripBom = require('strip-bom'); +var _ = require("lodash") +var semver = require("semver") +var stripBom = require("strip-bom") // Ordered list of supported channel -var CHANNEL_MAGINITUDE = 1000; -var CHANNELS = [ - 'alpha', 'beta', 'unstable', 'rc' -]; +var CHANNEL_MAGINITUDE = 1000 +var CHANNELS = ["alpha", "beta", "unstable", "rc"] // RELEASES parsing -var releaseRe = /^([0-9a-fA-F]{40})\s+(\S+)\s+(\d+)[\r]*$/; - +var releaseRe = /^([0-9a-fA-F]{40})\s+(\S+)\s+(\d+)[\r]*$/ // Hash a prerelease function hashPrerelease(s) { - if (_.isString(s[0])) { - return (_.indexOf(CHANNELS, s[0]) + 1) * CHANNEL_MAGINITUDE + (s[1] || 0); - } else { - return s[0]; - } -}; + if (_.isString(s[0])) { + return (_.indexOf(CHANNELS, s[0]) + 1) * CHANNEL_MAGINITUDE + (s[1] || 0) + } else { + return s[0] + } +} // Map a semver version to a windows version function normVersion(tag) { - var parts = new semver.SemVer(tag); - var prerelease = ""; + var parts = new semver.SemVer(tag) + var prerelease = "" - if (parts.prerelease && parts.prerelease.length > 0) { - prerelease = hashPrerelease(parts.prerelease); - } + if (parts.prerelease && parts.prerelease.length > 0) { + prerelease = hashPrerelease(parts.prerelease) + } - return [ - parts.major, - parts.minor, - parts.patch - ].join('.') + (prerelease? '.'+prerelease : ''); + return ( + [parts.major, parts.minor, parts.patch].join(".") + + (prerelease ? "." + prerelease : "") + ) } // Map a windows version to a semver function toSemver(tag) { - var parts = tag.split('.'); - var version = parts.slice(0, 3).join('.'); - var prerelease = Number(parts[3]); + var parts = tag.split(".") + var version = parts.slice(0, 3).join(".") + var prerelease = Number(parts[3]) - // semver == windows version - if (!prerelease) return version; + // semver == windows version + if (!prerelease) return version - var channelId = Math.floor(prerelease/CHANNEL_MAGINITUDE); - var channel = CHANNELS[channelId - 1]; - var count = prerelease - (channelId*CHANNEL_MAGINITUDE); + var channelId = Math.floor(prerelease / CHANNEL_MAGINITUDE) + var channel = CHANNELS[channelId - 1] + var count = prerelease - channelId * CHANNEL_MAGINITUDE - return version + '-' + channel + '.' + count + return version + "-" + channel + "." + count } // Parse RELEASES file // https://github.com/Squirrel/Squirrel.Windows/blob/0d1250aa6f0c25fe22e92add78af327d1277d97d/src/Squirrel/ReleaseExtensions.cs#L19 function parseRELEASES(content) { - return _.chain(stripBom(content)) - .replace('\r\n', '\n') - .split('\n') - .map(function(line) { - var parts = releaseRe.exec(line); - if (!parts) return null; - - var filename = parts[2]; - var isDelta = filename.indexOf('-full.nupkg') == -1; - - var filenameParts = filename - .replace(".nupkg", "") - .replace("-delta", "") - .replace("-full", "") - .split(/\.|-/) - .reverse(); - - var version = _.chain(filenameParts) - .filter(function(x) { - return /^\d+$/.exec(x); - }) - .reverse() - .value() - .join('.'); - - return { - sha: parts[1], - filename: filename, - size: Number(parts[3]), - isDelta: isDelta, - version: version, - semver: toSemver(version) - }; + return _.chain(stripBom(content)) + .replace("\r\n", "\n") + .split("\n") + .map(function (line) { + var parts = releaseRe.exec(line) + if (!parts) return null + + var filename = parts[2] + var isDelta = filename.indexOf("-full.nupkg") == -1 + + var filenameParts = filename + .replace(".nupkg", "") + .replace("-delta", "") + .replace("-full", "") + .split(/\.|-/) + .reverse() + + var version = _.chain(filenameParts) + .filter(function (x) { + return /^\d+$/.exec(x) }) - .compact() - .value(); + .reverse() + .value() + .join(".") + + return { + sha: parts[1], + filename: filename, + size: Number(parts[3]), + isDelta: isDelta, + version: version, + semver: toSemver(version), + } + }) + .compact() + .value() } // Generate a RELEASES file function generateRELEASES(entries) { - return _.map(entries, function(entry) { - var filename = entry.filename; - - if (!filename) { - filename = [ - entry.app, - entry.version, - entry.isDelta? 'delta.nupkg' : 'full.nupkg' - ].join('-'); - } - - return [ - entry.sha, - filename, - entry.size - ].join(' '); - }) - .join('\n'); + return _.map(entries, function (entry) { + var filename = entry.filename + + if (!filename) { + filename = [ + entry.app, + entry.version, + entry.isDelta ? "delta.nupkg" : "full.nupkg", + ].join("-") + } + + return [entry.sha, filename, entry.size].join(" ") + }).join("\n") } module.exports = { - normVersion: normVersion, - toSemver: toSemver, - parse: parseRELEASES, - generate: generateRELEASES -}; + normVersion: normVersion, + toSemver: toSemver, + parse: parseRELEASES, + generate: generateRELEASES, +} diff --git a/lib/versions.js b/lib/versions.js index 366c0c6..ed24f36 100644 --- a/lib/versions.js +++ b/lib/versions.js @@ -1,8 +1,8 @@ -var _ = require('lodash'); -var semver = require('semver'); -var createError = require('http-errors'); +var _ = require("lodash") +var semver = require("semver") +var createError = require("http-errors") -var platforms = require('./utils/platforms'); +var platforms = require("./utils/platforms") /** * Normalize a tag name to remove the prefix "v" @@ -10,8 +10,8 @@ var platforms = require('./utils/platforms'); * @return {String} tag */ function normalizeTag(tag) { - if (tag[0] == 'v') tag = tag.slice(1); - return tag; + if (tag[0] == "v") tag = tag.slice(1) + return tag } /** @@ -20,10 +20,10 @@ function normalizeTag(tag) { * @return {String} channel */ function extractChannel(tag) { - var suffix = tag.split('-')[1]; - if (!suffix) return 'stable'; + var suffix = tag.split("-")[1] + if (!suffix) return "stable" - return suffix.split('.')[0]; + return suffix.split(".")[0] } /** @@ -32,7 +32,7 @@ function extractChannel(tag) { * @return {String} tag */ function stripChannel(tag) { - return tag.split('-')[0]; + return tag.split("-")[0] } /** @@ -41,37 +41,37 @@ function stripChannel(tag) { * @return {Version} version? */ function normalizeVersion(release) { - // Ignore draft - if (release.draft) { - return null; - } - - var downloadCount = 0; - var releasePlatforms = _.chain(release.assets) - .map(function(asset) { - var platform = platforms.detect(asset.name); - if (!platform) return null; - - downloadCount = downloadCount + asset.download_count; - return { - id: String(asset.id), - type: platform, - filename: asset.name, - size: asset.size, - content_type: asset.content_type, - raw: asset - }; - }) - .compact() - .value(); - - return { - tag: normalizeTag(release.tag_name), - channel: extractChannel(release.tag_name), - notes: release.body || '', - published_at: new Date(release.published_at), - platforms: releasePlatforms - }; + // Ignore draft + if (release.draft) { + return null + } + + var downloadCount = 0 + var releasePlatforms = _.chain(release.assets) + .map(function (asset) { + var platform = platforms.detect(asset.name) + if (!platform) return null + + downloadCount = downloadCount + asset.download_count + return { + id: String(asset.id), + type: platform, + filename: asset.name, + size: asset.size, + content_type: asset.content_type, + raw: asset, + } + }) + .compact() + .value() + + return { + tag: normalizeTag(release.tag_name), + channel: extractChannel(release.tag_name), + notes: release.body || "", + published_at: new Date(release.published_at), + platforms: releasePlatforms, + } } /** @@ -81,37 +81,36 @@ function normalizeVersion(release) { * @return {Number} */ function compareVersions(v1, v2) { - if (semver.gt(v1.tag, v2.tag)) { - return -1; - } - if (semver.lt(v1.tag, v2.tag)) { - return 1; - } - return 0; + if (semver.gt(v1.tag, v2.tag)) { + return -1 + } + if (semver.lt(v1.tag, v2.tag)) { + return 1 + } + return 0 } function Versions(backend) { - this.backend = backend; + this.backend = backend } // List versions normalized -Versions.prototype.list = function() { - return this.backend.releases() - .then(function(releases) { - return _.chain(releases) - .map(normalizeVersion) - .compact() - .sort(compareVersions) - .value(); - }); -}; +Versions.prototype.list = function () { + return this.backend.releases().then(function (releases) { + return _.chain(releases) + .map(normalizeVersion) + .compact() + .sort(compareVersions) + .value() + }) +} // Get a specific version by its tag -Versions.prototype.get = function(tag) { - return this.resolve({ - tag: tag - }); -}; +Versions.prototype.get = function (tag) { + return this.resolve({ + tag: tag, + }) +} /** * Filter versions with criterias @@ -121,88 +120,91 @@ Versions.prototype.get = function(tag) { * @param {Boolean} opts.stripChannel : compare tag name withotu the channel * @return {Promise>} versions */ -Versions.prototype.filter = function(opts) { - opts = _.defaults(opts || {}, { - tag: 'latest', - platform: null, - stripChannel: false, - channel: 'stable' - }); - - if (opts.platform) { - opts.platform = platforms.detect(opts.platform); - } +Versions.prototype.filter = function (opts) { + opts = _.defaults(opts || {}, { + tag: "latest", + platform: null, + stripChannel: false, + channel: "stable", + }) + + if (opts.platform) { + opts.platform = platforms.detect(opts.platform) + } + + return this.list().then(function (versions) { + return _.chain(versions) + .filter(function (version) { + // Check channel + if (opts.channel !== "*" && version.channel != opts.channel) { + return false + } - return this.list() - .then(function(versions) { - return _.chain(versions) - .filter(function(version) { - // Check channel - if (opts.channel !== '*' && version.channel != opts.channel) { - return false; - } - - // Not available for requested paltform - if (opts.platform && !platforms.satisfies(opts.platform, _.pluck(version.platforms, 'type'))) { - return false; - } - - // Check tag satisfies request version - var tagName = version.tag; - if (opts.stripChannel) { - tagName = stripChannel(tagName); - } - - return (opts.tag == 'latest' || semver.satisfies(tagName, opts.tag)); - }) - .value(); - }); -}; + // Not available for requested paltform + if ( + opts.platform && + !platforms.satisfies( + opts.platform, + _.pluck(version.platforms, "type"), + ) + ) { + return false + } + + // Check tag satisfies request version + var tagName = version.tag + if (opts.stripChannel) { + tagName = stripChannel(tagName) + } + + return opts.tag == "latest" || semver.satisfies(tagName, opts.tag) + }) + .value() + }) +} /** * Resolve a platform, by filtering then taking the first result * @param {Object} opts * @return {Promise} version */ -Versions.prototype.resolve = function(opts) { - return this.filter(opts) - .then(function(versions) { - var version = _.first(versions); - if (!version) { - throw createError(404, 'Version not found: ' + opts.tag); - } +Versions.prototype.resolve = function (opts) { + return this.filter(opts).then(function (versions) { + var version = _.first(versions) + if (!version) { + throw createError(404, "Version not found: " + opts.tag) + } - return version; - }); -}; + return version + }) +} /** * List all channels from releases * @return {Promise} */ -Versions.prototype.channels = function() { - return this.list() - .then(function(versions) { - var channels = {}; - - _.each(versions, function(version) { - if (!channels[version.channel]) { - channels[version.channel] = { - latest: null, - versions_count: 0, - published_at: 0 - }; - } - - channels[version.channel].versions_count += 1; - if (channels[version.channel].published_at < version.published_at) { - channels[version.channel].latest = version.tag; - channels[version.channel].published_at = version.published_at; - } - }); - - return channels; - }); -}; - -module.exports = Versions; +Versions.prototype.channels = function () { + return this.list().then(function (versions) { + var channels = {} + + _.each(versions, function (version) { + if (!channels[version.channel]) { + channels[version.channel] = { + latest: null, + versions_count: 0, + published_at: 0, + } + } + + channels[version.channel].versions_count += 1 + if (channels[version.channel].published_at < version.published_at) { + channels[version.channel].latest = version.tag + channels[version.channel].published_at = version.published_at + } + }) + + return channels + }) +} + +module.exports = Versions diff --git a/package.json b/package.json index 3f7a554..d503a52 100644 --- a/package.json +++ b/package.json @@ -29,9 +29,16 @@ }, "devDependencies": { "expect": "^26.6.2", - "mocha": "1.18.2", "should": "7.0.4", - "supertest": "^2.0.0" + "supertest": "^2.0.0", + "@babel/core": "^7.13.10", + "@babel/eslint-parser": "^7.13.10", + "eslint": "^7.22.0", + "eslint-config-prettier": "^8.1.0", + "eslint-plugin-prettier": "^3.3.1", + "mocha": "8.3.2", + "prettier": "^2.2.1", + "prettier-eslint-cli": "^5.0.1" }, "bugs": { "url": "https://github.com/GitbookIO/nuts/issues" @@ -48,6 +55,7 @@ }, "scripts": { "start": "node bin/web.js", - "test": "mocha --bail --reporter spec --timeout 600000 ./test/all.js" + "test": "mocha --bail --reporter spec --timeout 600000 ./test/all.js", + "lint": "eslint bin lib test" } } diff --git a/test/all.js b/test/all.js index 77878c4..9ae5124 100644 --- a/test/all.js +++ b/test/all.js @@ -1,10 +1,10 @@ -require('should'); +require("should") // Sync tests -require('./platforms'); -require('./win-releases'); +require("./platforms") +require("./win-releases") // Require a backend -require('./versions'); -require('./download'); -require('./update'); +require("./versions") +require("./download") +require("./update") diff --git a/test/download.js b/test/download.js index 11c0ed0..f21340b 100644 --- a/test/download.js +++ b/test/download.js @@ -1,57 +1,54 @@ -var request = require('supertest'); -var app = require('./testing').app; - -var MAC_USERAGENT = 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-us)' - + ' AppleWebKit/530.19.2 (KHTML, like Gecko) Version/4.0.2 Safari/530.19'; -var WIN_USERAGENT = 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; Touch; rv:11.0) like Gecko'; - -describe('Download', function() { - var agent = request.agent(app); - - describe('Latest version (/)', function() { - - it('should fail if no user-agent to detect platform', function(done) { - agent - .get('/') - .expect(400, done); - }); - - it('should download windows file', function(done) { - agent - .get('/') - .set('User-Agent', WIN_USERAGENT) - .expect('Content-Length', '13') - .expect('Content-Disposition', 'attachment; filename=test.exe') - .expect(200, done); - }); - - it('should download OS X file as DMG', function(done) { - agent - .get('/') - .set('User-Agent', MAC_USERAGENT) - .expect('Content-Length', '19') - .expect('Content-Disposition', 'attachment; filename=test-osx.dmg') - .expect(200, done); - }); - - }); - - describe('Previous version (/download/version/)', function() { - it('should not have a windows file to download', function(done) { - agent - .get('/download/version/0.9.0') - .set('User-Agent', WIN_USERAGENT) - .expect(404, done); - }); - - it('should download OS X file as DMG', function(done) { - agent - .get('/download/version/0.9.0') - .set('User-Agent', MAC_USERAGENT) - .expect('Content-Length', '19') - .expect('Content-Disposition', 'attachment; filename=test-osx.dmg') - .expect(200, done); - }); - }); - -}); +var request = require("supertest") +var app = require("./testing").app + +var MAC_USERAGENT = + "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-us)" + + " AppleWebKit/530.19.2 (KHTML, like Gecko) Version/4.0.2 Safari/530.19" +var WIN_USERAGENT = + "Mozilla/5.0 (Windows NT 6.3; Trident/7.0; Touch; rv:11.0) like Gecko" + +describe("Download", function () { + var agent = request.agent(app) + + describe("Latest version (/)", function () { + it("should fail if no user-agent to detect platform", function (done) { + agent.get("/").expect(400, done) + }) + + it("should download windows file", function (done) { + agent + .get("/") + .set("User-Agent", WIN_USERAGENT) + .expect("Content-Length", "13") + .expect("Content-Disposition", "attachment; filename=test.exe") + .expect(200, done) + }) + + it("should download OS X file as DMG", function (done) { + agent + .get("/") + .set("User-Agent", MAC_USERAGENT) + .expect("Content-Length", "19") + .expect("Content-Disposition", "attachment; filename=test-osx.dmg") + .expect(200, done) + }) + }) + + describe("Previous version (/download/version/)", function () { + it("should not have a windows file to download", function (done) { + agent + .get("/download/version/0.9.0") + .set("User-Agent", WIN_USERAGENT) + .expect(404, done) + }) + + it("should download OS X file as DMG", function (done) { + agent + .get("/download/version/0.9.0") + .set("User-Agent", MAC_USERAGENT) + .expect("Content-Length", "19") + .expect("Content-Disposition", "attachment; filename=test-osx.dmg") + .expect(200, done) + }) + }) +}) diff --git a/test/platforms.js b/test/platforms.js index 446c105..db74c7f 100644 --- a/test/platforms.js +++ b/test/platforms.js @@ -1,166 +1,215 @@ -var platforms = require('../lib/utils/platforms'); - -describe('Platforms', function() { - - describe('Detect', function() { - - it('should detect osx_64', function() { - platforms.detect('myapp-v0.25.1-darwin-x64.zip').should.be.exactly(platforms.OSX_64); - platforms.detect('myapp.dmg').should.be.exactly(platforms.OSX_64); - }); - - it('should detect windows_32', function() { - platforms.detect('myapp-v0.25.1-win32-ia32.zip').should.be.exactly(platforms.WINDOWS_32); - platforms.detect('atom-1.0.9-delta.nupkg').should.be.exactly(platforms.WINDOWS_32); - platforms.detect('RELEASES').should.be.exactly(platforms.WINDOWS_32); - }); - - it('should detect linux', function() { - platforms.detect('enterprise-amd64.tar.gz').should.be.exactly(platforms.LINUX_64); - platforms.detect('enterprise-amd64.tgz').should.be.exactly(platforms.LINUX_64); - platforms.detect('enterprise-ia32.tar.gz').should.be.exactly(platforms.LINUX_32); - platforms.detect('enterprise-ia32.tgz').should.be.exactly(platforms.LINUX_32); - }); - - it('should detect debian_32', function() { - platforms.detect('atom-ia32.deb').should.be.exactly(platforms.LINUX_DEB_32); - }); - - it('should detect debian_64', function() { - platforms.detect('atom-amd64.deb').should.be.exactly(platforms.LINUX_DEB_64); - }); - - it('should detect rpm_32', function() { - platforms.detect('atom-ia32.rpm').should.be.exactly(platforms.LINUX_RPM_32); - }); - - it('should detect rpm_64', function() { - platforms.detect('atom-amd64.rpm').should.be.exactly(platforms.LINUX_RPM_64); - }); - - }); - - describe('Resolve', function() { - var version = { - platforms: [ - { - 'type': 'osx_64', - 'filename': 'test-3.3.1-darwin.dmg', - 'download_url': 'https://api.github.com/repos/test/test2/releases/assets/793838', - 'download_count': 2 - }, - { - 'type': 'osx_64', - 'filename': 'test-3.3.1-darwin-x64.zip', - 'download_url': 'https://api.github.com/repos/test/test2/releases/assets/793869', - 'download_count': 0 - }, - { - 'type': 'windows_32', - 'filename': 'atom-1.0.9-delta.nupkg', - 'size': 1457531, - 'content_type': 'application/zip', - 'download_url': 'https://api.github.com/repos/atom/atom/releases/assets/825732', - 'download_count': 55844 - }, - { - 'type': 'windows_32', - 'filename': 'atom-1.0.9-full.nupkg', - 'size': 78181725, - 'content_type': 'application/zip', - 'download_url': 'https://api.github.com/repos/atom/atom/releases/assets/825730', - 'download_count': 26987 - }, - { - 'type': 'linux_32', - 'filename': 'atom-ia32.tar.gz', - 'size': 71292506, - 'content_type': 'application/zip', - 'download_url': 'https://api.github.com/repos/atom/atom/releases/assets/825658', - 'download_count': 2494 - }, - { - 'type': 'linux_64', - 'filename': 'atom-amd64.tar.gz', - 'size': 71292506, - 'content_type': 'application/zip', - 'download_url': 'https://api.github.com/repos/atom/atom/releases/assets/825658', - 'download_count': 2494 - }, - { - 'type': 'linux_rpm_32', - 'filename': 'atom-ia32.rpm', - 'size': 71292506, - 'content_type': 'application/zip', - 'download_url': 'https://api.github.com/repos/atom/atom/releases/assets/825658', - 'download_count': 2494 - }, - { - 'type': 'linux_rpm_64', - 'filename': 'atom-amd64.rpm', - 'size': 71292506, - 'content_type': 'application/zip', - 'download_url': 'https://api.github.com/repos/atom/atom/releases/assets/825658', - 'download_count': 2494 - }, - { - 'type': 'linux_deb_32', - 'filename': 'atom-ia32.deb', - 'size': 71292506, - 'content_type': 'application/zip', - 'download_url': 'https://api.github.com/repos/atom/atom/releases/assets/825658', - 'download_count': 2494 - }, - { - 'type': 'linux_deb_64', - 'filename': 'atom-amd64.deb', - 'size': 71292506, - 'content_type': 'application/zip', - 'download_url': 'https://api.github.com/repos/atom/atom/releases/assets/825658', - 'download_count': 2494 - }, - { - 'type': 'windows_32', - 'filename': 'atom-windows.zip', - 'size': 79815714, - 'content_type': 'application/zip', - 'download_url': 'https://api.github.com/repos/atom/atom/releases/assets/825729', - 'download_count': 463 - }, - { - 'type': 'windows_32', - 'filename': 'AtomSetup.exe', - 'size': 78675720, - 'content_type': 'application/zip', - 'download_url': 'https://api.github.com/repos/atom/atom/releases/assets/825728', - 'download_count': 5612 - } - ] - }; - - - it('should resolve to best platform', function() { - platforms.resolve(version, 'osx').filename.should.be.exactly('test-3.3.1-darwin.dmg'); - platforms.resolve(version, 'win32').filename.should.be.exactly('AtomSetup.exe'); - platforms.resolve(version, 'linux_64').filename.should.be.exactly('atom-amd64.tar.gz'); - platforms.resolve(version, 'linux_32').filename.should.be.exactly('atom-ia32.tar.gz'); - platforms.resolve(version, 'linux_rpm_32').filename.should.be.exactly('atom-ia32.rpm'); - platforms.resolve(version, 'linux_rpm_64').filename.should.be.exactly('atom-amd64.rpm'); - platforms.resolve(version, 'linux_deb_32').filename.should.be.exactly('atom-ia32.deb'); - platforms.resolve(version, 'linux_deb_64').filename.should.be.exactly('atom-amd64.deb'); - }); - - it('should resolve to best platform with a preferred filetype', function() { - platforms.resolve(version, 'osx', { - filePreference: ['.zip'] - }).filename.should.be.exactly('test-3.3.1-darwin-x64.zip'); - }); - - it('should resolve to best platform with a wanted filetype', function() { - platforms.resolve(version, 'osx', { - wanted: '.zip' - }).filename.should.be.exactly('test-3.3.1-darwin-x64.zip'); - }); - }); - -}); +var platforms = require("../lib/utils/platforms") + +describe("Platforms", function () { + describe("Detect", function () { + it("should detect osx_64", function () { + platforms + .detect("myapp-v0.25.1-darwin-x64.zip") + .should.be.exactly(platforms.OSX_64) + platforms.detect("myapp.dmg").should.be.exactly(platforms.OSX_64) + }) + + it("should detect windows_32", function () { + platforms + .detect("myapp-v0.25.1-win32-ia32.zip") + .should.be.exactly(platforms.WINDOWS_32) + platforms + .detect("atom-1.0.9-delta.nupkg") + .should.be.exactly(platforms.WINDOWS_32) + platforms.detect("RELEASES").should.be.exactly(platforms.WINDOWS_32) + }) + + it("should detect linux", function () { + platforms + .detect("enterprise-amd64.tar.gz") + .should.be.exactly(platforms.LINUX_64) + platforms + .detect("enterprise-amd64.tgz") + .should.be.exactly(platforms.LINUX_64) + platforms + .detect("enterprise-ia32.tar.gz") + .should.be.exactly(platforms.LINUX_32) + platforms + .detect("enterprise-ia32.tgz") + .should.be.exactly(platforms.LINUX_32) + }) + + it("should detect debian_32", function () { + platforms + .detect("atom-ia32.deb") + .should.be.exactly(platforms.LINUX_DEB_32) + }) + + it("should detect debian_64", function () { + platforms + .detect("atom-amd64.deb") + .should.be.exactly(platforms.LINUX_DEB_64) + }) + + it("should detect rpm_32", function () { + platforms + .detect("atom-ia32.rpm") + .should.be.exactly(platforms.LINUX_RPM_32) + }) + + it("should detect rpm_64", function () { + platforms + .detect("atom-amd64.rpm") + .should.be.exactly(platforms.LINUX_RPM_64) + }) + }) + + describe("Resolve", function () { + var version = { + platforms: [ + { + type: "osx_64", + filename: "test-3.3.1-darwin.dmg", + download_url: + "https://api.github.com/repos/test/test2/releases/assets/793838", + download_count: 2, + }, + { + type: "osx_64", + filename: "test-3.3.1-darwin-x64.zip", + download_url: + "https://api.github.com/repos/test/test2/releases/assets/793869", + download_count: 0, + }, + { + type: "windows_32", + filename: "atom-1.0.9-delta.nupkg", + size: 1457531, + content_type: "application/zip", + download_url: + "https://api.github.com/repos/atom/atom/releases/assets/825732", + download_count: 55844, + }, + { + type: "windows_32", + filename: "atom-1.0.9-full.nupkg", + size: 78181725, + content_type: "application/zip", + download_url: + "https://api.github.com/repos/atom/atom/releases/assets/825730", + download_count: 26987, + }, + { + type: "linux_32", + filename: "atom-ia32.tar.gz", + size: 71292506, + content_type: "application/zip", + download_url: + "https://api.github.com/repos/atom/atom/releases/assets/825658", + download_count: 2494, + }, + { + type: "linux_64", + filename: "atom-amd64.tar.gz", + size: 71292506, + content_type: "application/zip", + download_url: + "https://api.github.com/repos/atom/atom/releases/assets/825658", + download_count: 2494, + }, + { + type: "linux_rpm_32", + filename: "atom-ia32.rpm", + size: 71292506, + content_type: "application/zip", + download_url: + "https://api.github.com/repos/atom/atom/releases/assets/825658", + download_count: 2494, + }, + { + type: "linux_rpm_64", + filename: "atom-amd64.rpm", + size: 71292506, + content_type: "application/zip", + download_url: + "https://api.github.com/repos/atom/atom/releases/assets/825658", + download_count: 2494, + }, + { + type: "linux_deb_32", + filename: "atom-ia32.deb", + size: 71292506, + content_type: "application/zip", + download_url: + "https://api.github.com/repos/atom/atom/releases/assets/825658", + download_count: 2494, + }, + { + type: "linux_deb_64", + filename: "atom-amd64.deb", + size: 71292506, + content_type: "application/zip", + download_url: + "https://api.github.com/repos/atom/atom/releases/assets/825658", + download_count: 2494, + }, + { + type: "windows_32", + filename: "atom-windows.zip", + size: 79815714, + content_type: "application/zip", + download_url: + "https://api.github.com/repos/atom/atom/releases/assets/825729", + download_count: 463, + }, + { + type: "windows_32", + filename: "AtomSetup.exe", + size: 78675720, + content_type: "application/zip", + download_url: + "https://api.github.com/repos/atom/atom/releases/assets/825728", + download_count: 5612, + }, + ], + } + + it("should resolve to best platform", function () { + platforms + .resolve(version, "osx") + .filename.should.be.exactly("test-3.3.1-darwin.dmg") + platforms + .resolve(version, "win32") + .filename.should.be.exactly("AtomSetup.exe") + platforms + .resolve(version, "linux_64") + .filename.should.be.exactly("atom-amd64.tar.gz") + platforms + .resolve(version, "linux_32") + .filename.should.be.exactly("atom-ia32.tar.gz") + platforms + .resolve(version, "linux_rpm_32") + .filename.should.be.exactly("atom-ia32.rpm") + platforms + .resolve(version, "linux_rpm_64") + .filename.should.be.exactly("atom-amd64.rpm") + platforms + .resolve(version, "linux_deb_32") + .filename.should.be.exactly("atom-ia32.deb") + platforms + .resolve(version, "linux_deb_64") + .filename.should.be.exactly("atom-amd64.deb") + }) + + it("should resolve to best platform with a preferred filetype", function () { + platforms + .resolve(version, "osx", { + filePreference: [".zip"], + }) + .filename.should.be.exactly("test-3.3.1-darwin-x64.zip") + }) + + it("should resolve to best platform with a wanted filetype", function () { + platforms + .resolve(version, "osx", { + wanted: ".zip", + }) + .filename.should.be.exactly("test-3.3.1-darwin-x64.zip") + }) + }) +}) diff --git a/test/testing.js b/test/testing.js index f5a0557..e59105d 100644 --- a/test/testing.js +++ b/test/testing.js @@ -1,14 +1,14 @@ -var nuts = require('../lib'); +var nuts = require("../lib") var config = { - repository: 'SamyPesse/nuts-testing', - token: process.env.GITHUB_TOKEN -}; + repository: "SamyPesse/nuts-testing", + token: process.env.GITHUB_TOKEN, +} -var instance = nuts.Nuts(config); -var app = nuts.createApp(config); +var instance = nuts.Nuts(config) +var app = nuts.createApp(config) module.exports = { - app: app, - nuts: instance -}; + app: app, + nuts: instance, +} diff --git a/test/update.js b/test/update.js index 8a1fd37..0a52bec 100644 --- a/test/update.js +++ b/test/update.js @@ -1,92 +1,86 @@ -var request = require('supertest'); -var expect = require('expect'); +var request = require("supertest") +var expect = require("expect") -var app = require('./testing').app; +var app = require("./testing").app -describe('Update', function() { - var agent = request.agent(app); +describe("Update", function () { + var agent = request.agent(app) - describe('Squirrel.Mac (OS X)', function() { + describe("Squirrel.Mac (OS X)", function () { + describe("/update/osx/", function () { + it("should return a 204 if using latest version", function (done) { + agent.get("/update/osx/1.0.0").expect(204, done) + }) - describe('/update/osx/', function() { - it('should return a 204 if using latest version', function(done) { - agent - .get('/update/osx/1.0.0') - .expect(204, done); - }); + it("should return a 200 with json if using old stable version", function (done) { + agent + .get("/update/osx/0.9.0") + .expect("Content-Type", /json/) + .expect(function (res) { + expect(res.body.name).toBe("1.0.0") + expect(res.body.url).toBeTruthy() + expect(res.body.pub_date).toBeTruthy() + }) + .expect(200, done) + }) - it('should return a 200 with json if using old stable version', function(done) { - agent - .get('/update/osx/0.9.0') - .expect('Content-Type', /json/) - .expect(function(res) { - expect(res.body.name).toBe('1.0.0'); - expect(res.body.url).toBeTruthy(); - expect(res.body.pub_date).toBeTruthy(); - }) - .expect(200, done); - }); + it("should return a 200 with json if using old beta version (1)", function (done) { + agent + .get("/update/osx/0.9.1-beta") + .expect("Content-Type", /json/) + .expect(function (res) { + expect(res.body.name).toBe("1.0.0") + }) + .expect(200, done) + }) - it('should return a 200 with json if using old beta version (1)', function(done) { - agent - .get('/update/osx/0.9.1-beta') - .expect('Content-Type', /json/) - .expect(function(res) { - expect(res.body.name).toBe('1.0.0'); - }) - .expect(200, done); - }); + it("should return a 200 with json if using old beta version (2)", function (done) { + agent + .get("/update/osx/0.9.1-beta.1") + .expect("Content-Type", /json/) + .expect(function (res) { + expect(res.body.name).toBe("1.0.0") + }) + .expect(200, done) + }) - it('should return a 200 with json if using old beta version (2)', function(done) { - agent - .get('/update/osx/0.9.1-beta.1') - .expect('Content-Type', /json/) - .expect(function(res) { - expect(res.body.name).toBe('1.0.0'); - }) - .expect(200, done); - }); + it("should return a 200 with json if using old alpha version (1)", function (done) { + agent + .get("/update/osx/0.9.2-alpha.2") + .expect("Content-Type", /json/) + .expect(function (res) { + expect(res.body.name).toBe("1.0.0") + }) + .expect(200, done) + }) + }) - it('should return a 200 with json if using old alpha version (1)', function(done) { - agent - .get('/update/osx/0.9.2-alpha.2') - .expect('Content-Type', /json/) - .expect(function(res) { - expect(res.body.name).toBe('1.0.0'); - }) - .expect(200, done); - }); - }); + describe("/update/channel/beta/osx", function () { + it("should update from 0.9.1-beta to 1.0.1-beta.0", function (done) { + agent + .get("/update/channel/beta/osx/0.9.1-beta") + .expect("Content-Type", /json/) + .expect(function (res) { + expect(res.body.name).toBe("1.0.1-beta.0") + }) + .expect(200, done) + }) - describe('/update/channel/beta/osx', function() { - it('should update from 0.9.1-beta to 1.0.1-beta.0', function(done) { - agent - .get('/update/channel/beta/osx/0.9.1-beta') - .expect('Content-Type', /json/) - .expect(function(res) { - expect(res.body.name).toBe('1.0.1-beta.0'); - }) - .expect(200, done); - }); + it("should not update from 1.0.1-beta.0", function (done) { + agent.get("/update/channel/beta/osx/1.0.1-beta.0").expect(204, done) + }) + }) - it('should not update from 1.0.1-beta.0', function(done) { - agent - .get('/update/channel/beta/osx/1.0.1-beta.0') - .expect(204, done); - }); - }); - - describe('/update/channel/alpha/osx', function() { - it('should update from 0.9.1-beta to 1.1.0-alpha.0', function(done) { - agent - .get('/update/channel/alpha/osx/0.9.1-beta') - .expect('Content-Type', /json/) - .expect(function(res) { - expect(res.body.name).toBe('1.1.0-alpha.0'); - }) - .expect(200, done); - }); - }); - }); - -}); + describe("/update/channel/alpha/osx", function () { + it("should update from 0.9.1-beta to 1.1.0-alpha.0", function (done) { + agent + .get("/update/channel/alpha/osx/0.9.1-beta") + .expect("Content-Type", /json/) + .expect(function (res) { + expect(res.body.name).toBe("1.1.0-alpha.0") + }) + .expect(200, done) + }) + }) + }) +}) diff --git a/test/versions.js b/test/versions.js index 7f99805..f7c67f7 100644 --- a/test/versions.js +++ b/test/versions.js @@ -1,39 +1,34 @@ -var expect = require('expect'); -var versions = require('./testing').nuts.versions; +var expect = require("expect") +var versions = require("./testing").nuts.versions -describe('Versions', function() { +describe("Versions", function () { + describe(".list", function () { + it("should list all versions", function () { + return versions.list().then(function (out) { + expect(out.length).toEqual(7) + }) + }) + }) - describe('.list', function() { - it('should list all versions', function() { - return versions.list() - .then(function(out) { - expect(out.length).toEqual(7); - }); - }); - }); + describe(".filter", function () { + it("should filter correctly by tag name", function () { + return versions.filter({ tag: ">=0.9.0" }).then(function (out) { + expect(out.length).toEqual(2) + expect(out[0].tag).toEqual("1.0.0") + expect(out[1].tag).toEqual("0.9.0") + }) + }) - describe('.filter', function() { - - it('should filter correctly by tag name', function() { - return versions.filter({ tag: '>=0.9.0' }) - .then(function(out) { - expect(out.length).toEqual(2); - expect(out[0].tag).toEqual('1.0.0'); - expect(out[1].tag).toEqual('0.9.0'); - }); - }); - - it('should filter correctly by tag name (stripChannel)', function() { - return versions.filter({ - tag: '>=1.0.0', - channel: '*', - stripChannel: true - }) - .then(function(out) { - expect(out.length).toEqual(3); - }); - }); - - }); - -}); + it("should filter correctly by tag name (stripChannel)", function () { + return versions + .filter({ + tag: ">=1.0.0", + channel: "*", + stripChannel: true, + }) + .then(function (out) { + expect(out.length).toEqual(3) + }) + }) + }) +}) diff --git a/test/win-releases.js b/test/win-releases.js index 70b72da..c22a18d 100644 --- a/test/win-releases.js +++ b/test/win-releases.js @@ -1,103 +1,107 @@ -var winReleases = require('../lib/utils/win-releases'); - -describe('Windows RELEASES', function() { - - describe('Version Normalization', function() { - - it('should not changed version without pre-release', function() { - winReleases.normVersion('1.0.0').should.be.exactly('1.0.0'); - winReleases.normVersion('4.5.0').should.be.exactly('4.5.0'); - winReleases.normVersion('67.8.345').should.be.exactly('67.8.345'); - }); - - it('should normalize the pre-release', function() { - winReleases.normVersion('1.0.0-alpha.1').should.be.exactly('1.0.0.1001'); - winReleases.normVersion('1.0.0-beta.1').should.be.exactly('1.0.0.2001'); - winReleases.normVersion('1.0.0-unstable.1').should.be.exactly('1.0.0.3001'); - winReleases.normVersion('1.0.0-rc.1').should.be.exactly('1.0.0.4001'); - winReleases.normVersion('1.0.0-14').should.be.exactly('1.0.0.14'); - }); - - it('should correctly return to a semver', function() { - winReleases.toSemver('1.0.0.1001').should.be.exactly('1.0.0-alpha.1'); - winReleases.toSemver('1.0.0.2001').should.be.exactly('1.0.0-beta.1'); - winReleases.toSemver('1.0.0.2015').should.be.exactly('1.0.0-beta.15'); - winReleases.toSemver('1.0.0').should.be.exactly('1.0.0'); - }); - - }); - - describe('Parsing', function() { - var releases = winReleases.parse( - '62E8BF432F29E8E08240910B85EDBF2D1A41EDF2 atom-0.178.0-full.nupkg 81272434\n' + - '5D754139E89802E88984185D2276B54DB730CD5E atom-0.178.1-delta.nupkg 8938535\n' + - 'DD48D16EE177DD278F0A82CDDB72EBD043C767D2 atom-0.178.1-full.nupkg 81293415\n' + - '02D56FF2DD6CB8FE059167E227433078CDAF5630 atom-0.179.0-delta.nupkg 9035217\n' + - '8F5FDFD0BD81475EAD95E9E415579A852476E5FC atom-0.179.0-full.nupkg 81996151' - ); - - it('should have parsed all lines', function() { - releases.should.be.an.Array(); - releases.length.should.be.exactly(5); - }); - - it('should parse a one-line file (with utf-8 BOM)', function() { - var oneRelease = winReleases.parse('\uFEFF24182FAD211FB9EB72610B1C086810FE37F70AE3 gitbook-editor-4.0.0-full.nupkg 46687158'); - oneRelease.length.should.be.exactly(1); - }); - - it('should correctly parse sha, version, isDelta, filename and size', function() { - releases[0].sha.should.be.a.String(); - releases[0].sha.should.be.exactly('62E8BF432F29E8E08240910B85EDBF2D1A41EDF2'); - - releases[0].filename.should.be.a.String(); - releases[0].filename.should.be.exactly('atom-0.178.0-full.nupkg'); - - releases[0].size.should.be.a.Number(); - releases[0].size.should.be.exactly(81272434); - - releases[0].isDelta.should.be.a.Boolean(); - releases[0].version.should.be.a.String(); - }); - - it('should correctly detect deltas', function() { - releases[0].isDelta.should.be.False(); - releases[1].isDelta.should.be.True(); - }); - - it('should correctly parse versions', function() { - releases[0].version.should.be.exactly('0.178.0'); - releases[1].version.should.be.exactly('0.178.1'); - }); - - }); - - describe('Generations', function() { - var input = '62E8BF432F29E8E08240910B85EDBF2D1A41EDF2 atom-0.178.0-full.nupkg 81272434\n' + - '5D754139E89802E88984185D2276B54DB730CD5E atom-0.178.1-delta.nupkg 8938535\n' + - 'DD48D16EE177DD278F0A82CDDB72EBD043C767D2 atom-0.178.1-full.nupkg 81293415\n' + - '02D56FF2DD6CB8FE059167E227433078CDAF5630 atom-0.179.0-delta.nupkg 9035217\n' + - '8F5FDFD0BD81475EAD95E9E415579A852476E5FC atom-0.179.0-full.nupkg 81996151'; - - var releases = winReleases.parse(input); - - - it('should correctly generate a RELEASES file', function() { - winReleases.generate(releases).should.be.exactly(input); - }); - - it('should correctly generate filenames', function() { - winReleases.generate([ - { - sha: '62E8BF432F29E8E08240910B85EDBF2D1A41EDF2', - version: '1.0.0', - app: 'atom', - size: 81272434, - isDelta: false - } - ]).should.be.exactly('62E8BF432F29E8E08240910B85EDBF2D1A41EDF2 atom-1.0.0-full.nupkg 81272434'); - }); - - }); - -}); +var winReleases = require("../lib/utils/win-releases") + +describe("Windows RELEASES", function () { + describe("Version Normalization", function () { + it("should not changed version without pre-release", function () { + winReleases.normVersion("1.0.0").should.be.exactly("1.0.0") + winReleases.normVersion("4.5.0").should.be.exactly("4.5.0") + winReleases.normVersion("67.8.345").should.be.exactly("67.8.345") + }) + + it("should normalize the pre-release", function () { + winReleases.normVersion("1.0.0-alpha.1").should.be.exactly("1.0.0.1001") + winReleases.normVersion("1.0.0-beta.1").should.be.exactly("1.0.0.2001") + winReleases + .normVersion("1.0.0-unstable.1") + .should.be.exactly("1.0.0.3001") + winReleases.normVersion("1.0.0-rc.1").should.be.exactly("1.0.0.4001") + winReleases.normVersion("1.0.0-14").should.be.exactly("1.0.0.14") + }) + + it("should correctly return to a semver", function () { + winReleases.toSemver("1.0.0.1001").should.be.exactly("1.0.0-alpha.1") + winReleases.toSemver("1.0.0.2001").should.be.exactly("1.0.0-beta.1") + winReleases.toSemver("1.0.0.2015").should.be.exactly("1.0.0-beta.15") + winReleases.toSemver("1.0.0").should.be.exactly("1.0.0") + }) + }) + + describe("Parsing", function () { + var releases = winReleases.parse( + "62E8BF432F29E8E08240910B85EDBF2D1A41EDF2 atom-0.178.0-full.nupkg 81272434\n" + + "5D754139E89802E88984185D2276B54DB730CD5E atom-0.178.1-delta.nupkg 8938535\n" + + "DD48D16EE177DD278F0A82CDDB72EBD043C767D2 atom-0.178.1-full.nupkg 81293415\n" + + "02D56FF2DD6CB8FE059167E227433078CDAF5630 atom-0.179.0-delta.nupkg 9035217\n" + + "8F5FDFD0BD81475EAD95E9E415579A852476E5FC atom-0.179.0-full.nupkg 81996151", + ) + + it("should have parsed all lines", function () { + releases.should.be.an.Array() + releases.length.should.be.exactly(5) + }) + + it("should parse a one-line file (with utf-8 BOM)", function () { + var oneRelease = winReleases.parse( + "\uFEFF24182FAD211FB9EB72610B1C086810FE37F70AE3 gitbook-editor-4.0.0-full.nupkg 46687158", + ) + oneRelease.length.should.be.exactly(1) + }) + + it("should correctly parse sha, version, isDelta, filename and size", function () { + releases[0].sha.should.be.a.String() + releases[0].sha.should.be.exactly( + "62E8BF432F29E8E08240910B85EDBF2D1A41EDF2", + ) + + releases[0].filename.should.be.a.String() + releases[0].filename.should.be.exactly("atom-0.178.0-full.nupkg") + + releases[0].size.should.be.a.Number() + releases[0].size.should.be.exactly(81272434) + + releases[0].isDelta.should.be.a.Boolean() + releases[0].version.should.be.a.String() + }) + + it("should correctly detect deltas", function () { + releases[0].isDelta.should.be.False() + releases[1].isDelta.should.be.True() + }) + + it("should correctly parse versions", function () { + releases[0].version.should.be.exactly("0.178.0") + releases[1].version.should.be.exactly("0.178.1") + }) + }) + + describe("Generations", function () { + var input = + "62E8BF432F29E8E08240910B85EDBF2D1A41EDF2 atom-0.178.0-full.nupkg 81272434\n" + + "5D754139E89802E88984185D2276B54DB730CD5E atom-0.178.1-delta.nupkg 8938535\n" + + "DD48D16EE177DD278F0A82CDDB72EBD043C767D2 atom-0.178.1-full.nupkg 81293415\n" + + "02D56FF2DD6CB8FE059167E227433078CDAF5630 atom-0.179.0-delta.nupkg 9035217\n" + + "8F5FDFD0BD81475EAD95E9E415579A852476E5FC atom-0.179.0-full.nupkg 81996151" + + var releases = winReleases.parse(input) + + it("should correctly generate a RELEASES file", function () { + winReleases.generate(releases).should.be.exactly(input) + }) + + it("should correctly generate filenames", function () { + winReleases + .generate([ + { + sha: "62E8BF432F29E8E08240910B85EDBF2D1A41EDF2", + version: "1.0.0", + app: "atom", + size: 81272434, + isDelta: false, + }, + ]) + .should.be.exactly( + "62E8BF432F29E8E08240910B85EDBF2D1A41EDF2 atom-1.0.0-full.nupkg 81272434", + ) + }) + }) +}) diff --git a/yarn.lock b/yarn.lock index 4ec1611..708302a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,19 +2,171 @@ # yarn lockfile v1 -"@babel/code-frame@^7.0.0": +"@babel/code-frame@7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" + integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g== dependencies: "@babel/highlight" "^7.12.13" +"@babel/compat-data@^7.13.8": + version "7.13.11" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.13.11.tgz#9c8fe523c206979c9a81b1e12fe50c1254f1aa35" + integrity sha512-BwKEkO+2a67DcFeS3RLl0Z3Gs2OvdXewuWjc1Hfokhb5eQWP9YRYH1/+VrVZvql2CfjOiNGqSAFOYt4lsqTHzg== + +"@babel/core@^7.13.10": + version "7.13.10" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.13.10.tgz#07de050bbd8193fcd8a3c27918c0890613a94559" + integrity sha512-bfIYcT0BdKeAZrovpMqX2Mx5NrgAckGbwT982AkdS5GNfn3KMGiprlBAtmBcFZRUmpaufS6WZFP8trvx8ptFDw== + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/generator" "^7.13.9" + "@babel/helper-compilation-targets" "^7.13.10" + "@babel/helper-module-transforms" "^7.13.0" + "@babel/helpers" "^7.13.10" + "@babel/parser" "^7.13.10" + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.13.0" + "@babel/types" "^7.13.0" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.1.2" + lodash "^4.17.19" + semver "^6.3.0" + source-map "^0.5.0" + +"@babel/eslint-parser@^7.13.10": + version "7.13.10" + resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.13.10.tgz#e272979914f36bb6cea144c14c32bb51632696dd" + integrity sha512-/I1HQ3jGPhIpeBFeI3wO9WwWOnBYpuR0pX0KlkdGcRQAVX9prB/FCS2HBpL7BiFbzhny1YCiBH8MTZD2jJa7Hg== + dependencies: + eslint-scope "5.1.0" + eslint-visitor-keys "^1.3.0" + semver "^6.3.0" + +"@babel/generator@^7.13.0", "@babel/generator@^7.13.9": + version "7.13.9" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.13.9.tgz#3a7aa96f9efb8e2be42d38d80e2ceb4c64d8de39" + integrity sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw== + dependencies: + "@babel/types" "^7.13.0" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/helper-compilation-targets@^7.13.10": + version "7.13.10" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.10.tgz#1310a1678cb8427c07a753750da4f8ce442bdd0c" + integrity sha512-/Xju7Qg1GQO4mHZ/Kcs6Au7gfafgZnwm+a7sy/ow/tV1sHeraRUHbjdat8/UvDor4Tez+siGKDk6zIKtCPKVJA== + dependencies: + "@babel/compat-data" "^7.13.8" + "@babel/helper-validator-option" "^7.12.17" + browserslist "^4.14.5" + semver "^6.3.0" + +"@babel/helper-function-name@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz#93ad656db3c3c2232559fd7b2c3dbdcbe0eb377a" + integrity sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA== + dependencies: + "@babel/helper-get-function-arity" "^7.12.13" + "@babel/template" "^7.12.13" + "@babel/types" "^7.12.13" + +"@babel/helper-get-function-arity@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz#bc63451d403a3b3082b97e1d8b3fe5bd4091e583" + integrity sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg== + dependencies: + "@babel/types" "^7.12.13" + +"@babel/helper-member-expression-to-functions@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.0.tgz#6aa4bb678e0f8c22f58cdb79451d30494461b091" + integrity sha512-yvRf8Ivk62JwisqV1rFRMxiSMDGnN6KH1/mDMmIrij4jztpQNRoHqqMG3U6apYbGRPJpgPalhva9Yd06HlUxJQ== + dependencies: + "@babel/types" "^7.13.0" + +"@babel/helper-module-imports@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.13.tgz#ec67e4404f41750463e455cc3203f6a32e93fcb0" + integrity sha512-NGmfvRp9Rqxy0uHSSVP+SRIW1q31a7Ji10cLBcqSDUngGentY4FRiHOFZFE1CLU5eiL0oE8reH7Tg1y99TDM/g== + dependencies: + "@babel/types" "^7.12.13" + +"@babel/helper-module-transforms@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.13.0.tgz#42eb4bd8eea68bab46751212c357bfed8b40f6f1" + integrity sha512-Ls8/VBwH577+pw7Ku1QkUWIyRRNHpYlts7+qSqBBFCW3I8QteB9DxfcZ5YJpOwH6Ihe/wn8ch7fMGOP1OhEIvw== + dependencies: + "@babel/helper-module-imports" "^7.12.13" + "@babel/helper-replace-supers" "^7.13.0" + "@babel/helper-simple-access" "^7.12.13" + "@babel/helper-split-export-declaration" "^7.12.13" + "@babel/helper-validator-identifier" "^7.12.11" + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.13.0" + "@babel/types" "^7.13.0" + lodash "^4.17.19" + +"@babel/helper-optimise-call-expression@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz#5c02d171b4c8615b1e7163f888c1c81c30a2aaea" + integrity sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA== + dependencies: + "@babel/types" "^7.12.13" + +"@babel/helper-replace-supers@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.13.0.tgz#6034b7b51943094cb41627848cb219cb02be1d24" + integrity sha512-Segd5me1+Pz+rmN/NFBOplMbZG3SqRJOBlY+mA0SxAv6rjj7zJqr1AVr3SfzUVTLCv7ZLU5FycOM/SBGuLPbZw== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.13.0" + "@babel/helper-optimise-call-expression" "^7.12.13" + "@babel/traverse" "^7.13.0" + "@babel/types" "^7.13.0" + +"@babel/helper-simple-access@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.13.tgz#8478bcc5cacf6aa1672b251c1d2dde5ccd61a6c4" + integrity sha512-0ski5dyYIHEfwpWGx5GPWhH35j342JaflmCeQmsPWcrOQDtCN6C1zKAVRFVbK53lPW2c9TsuLLSUDf0tIGJ5hA== + dependencies: + "@babel/types" "^7.12.13" + +"@babel/helper-split-export-declaration@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz#e9430be00baf3e88b0e13e6f9d4eaf2136372b05" + integrity sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg== + dependencies: + "@babel/types" "^7.12.13" + "@babel/helper-validator-identifier@^7.12.11": version "7.12.11" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== -"@babel/highlight@^7.12.13": +"@babel/helper-validator-option@^7.12.17": + version "7.12.17" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831" + integrity sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw== + +"@babel/helpers@^7.13.10": + version "7.13.10" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.13.10.tgz#fd8e2ba7488533cdeac45cc158e9ebca5e3c7df8" + integrity sha512-4VO883+MWPDUVRF3PhiLBUFHoX/bsLTGFpFK/HqvvfBZz2D57u9XzPVNFVBTc0PW/CWR9BXTOKt8NF4DInUHcQ== + dependencies: + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.13.0" + "@babel/types" "^7.13.0" + +"@babel/highlight@^7.10.4", "@babel/highlight@^7.12.13": version "7.13.10" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.13.10.tgz#a8b2a66148f5b27d666b15d81774347a731d52d1" integrity sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg== @@ -23,6 +175,59 @@ chalk "^2.0.0" js-tokens "^4.0.0" +"@babel/parser@^7.12.13", "@babel/parser@^7.13.0", "@babel/parser@^7.13.10": + version "7.13.11" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.11.tgz#f93ebfc99d21c1772afbbaa153f47e7ce2f50b88" + integrity sha512-PhuoqeHoO9fc4ffMEVk4qb/w/s2iOSWohvbHxLtxui0eBg3Lg5gN1U8wp1V1u61hOWkPQJJyJzGH6Y+grwkq8Q== + +"@babel/template@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.13.tgz#530265be8a2589dbb37523844c5bcb55947fb327" + integrity sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA== + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/parser" "^7.12.13" + "@babel/types" "^7.12.13" + +"@babel/traverse@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.13.0.tgz#6d95752475f86ee7ded06536de309a65fc8966cc" + integrity sha512-xys5xi5JEhzC3RzEmSGrs/b3pJW/o87SypZ+G/PhaE7uqVQNv/jlmVIBXuoh5atqQ434LfXV+sf23Oxj0bchJQ== + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/generator" "^7.13.0" + "@babel/helper-function-name" "^7.12.13" + "@babel/helper-split-export-declaration" "^7.12.13" + "@babel/parser" "^7.13.0" + "@babel/types" "^7.13.0" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.19" + +"@babel/types@^7.12.13", "@babel/types@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.0.tgz#74424d2816f0171b4100f0ab34e9a374efdf7f80" + integrity sha512-hE+HE8rnG1Z6Wzo+MhaKE5lM5eMx71T4EHJgku2E3xIfaULhDcxiiRxUYgwX8qwP1BBSlag+TdGOt6JAidIZTA== + dependencies: + "@babel/helper-validator-identifier" "^7.12.11" + lodash "^4.17.19" + to-fast-properties "^2.0.0" + +"@eslint/eslintrc@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.0.tgz#99cc0a0584d72f1df38b900fb062ba995f395547" + integrity sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog== + dependencies: + ajv "^6.12.4" + debug "^4.1.1" + espree "^7.3.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^3.13.1" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" + "@jest/types@^26.6.2": version "26.6.2" resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" @@ -34,6 +239,11 @@ "@types/yargs" "^15.0.0" chalk "^4.0.0" +"@types/eslint-visitor-keys@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" + integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== + "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": version "2.0.3" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" @@ -53,6 +263,11 @@ dependencies: "@types/istanbul-lib-report" "*" +"@types/json-schema@^7.0.3": + version "7.0.7" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" + integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA== + "@types/node@*": version "14.14.35" resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.35.tgz#42c953a4e2b18ab931f72477e7012172f4ffa313" @@ -75,6 +290,38 @@ dependencies: "@types/yargs-parser" "*" +"@typescript-eslint/experimental-utils@1.13.0": + version "1.13.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-1.13.0.tgz#b08c60d780c0067de2fb44b04b432f540138301e" + integrity sha512-zmpS6SyqG4ZF64ffaJ6uah6tWWWgZ8m+c54XXgwFtUv0jNz8aJAVx8chMCvnk7yl6xwn8d+d96+tWp7fXzTuDg== + dependencies: + "@types/json-schema" "^7.0.3" + "@typescript-eslint/typescript-estree" "1.13.0" + eslint-scope "^4.0.0" + +"@typescript-eslint/parser@^1.10.2": + version "1.13.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-1.13.0.tgz#61ac7811ea52791c47dc9fd4dd4a184fae9ac355" + integrity sha512-ITMBs52PCPgLb2nGPoeT4iU3HdQZHcPaZVw+7CsFagRJHUhyeTgorEwHXhFf3e7Evzi8oujKNpHc8TONth8AdQ== + dependencies: + "@types/eslint-visitor-keys" "^1.0.0" + "@typescript-eslint/experimental-utils" "1.13.0" + "@typescript-eslint/typescript-estree" "1.13.0" + eslint-visitor-keys "^1.0.0" + +"@typescript-eslint/typescript-estree@1.13.0": + version "1.13.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-1.13.0.tgz#8140f17d0f60c03619798f1d628b8434913dc32e" + integrity sha512-b5rCmd2e6DCC6tCTN9GSUAuxdYwCM/k/2wdjHGrIRGPSJotWMCe/dGpi66u42bhuh8q3QBzqM4TMA1GUUCJvdw== + dependencies: + lodash.unescape "4.0.1" + semver "5.5.0" + +"@ungap/promise-all-settled@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" + integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== + accepts@~1.3.7: version "1.3.7" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" @@ -83,16 +330,63 @@ accepts@~1.3.7: mime-types "~2.1.24" negotiator "0.6.2" -acorn@^5.2.1: +acorn-jsx@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" + integrity sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s= + dependencies: + acorn "^3.0.4" + +acorn-jsx@^5.0.0, acorn-jsx@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" + integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== + +acorn@^3.0.4: + version "3.3.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" + integrity sha1-ReN/s56No/JbruP/U2niu18iAXo= + +acorn@^5.2.1, acorn@^5.5.0: version "5.7.4" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg== +acorn@^6.0.7: + version "6.4.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" + integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== + +acorn@^7.4.0: + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + agent-base@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-1.0.2.tgz#6890d3fb217004b62b70f8928e0fae5f8952a706" integrity sha1-aJDT+yFwBLYrcPiSjg+uX4lSpwY= +ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.4, ajv@^6.9.1: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^7.0.2: + version "7.2.1" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-7.2.1.tgz#a5ac226171912447683524fa2f1248fcf8bac83d" + integrity sha512-+nu0HDv7kNSOua9apAVc979qd932rrZeb3WOvoiD31A/p1mIE5/9bN2027pE2rOPYEdS3UHzsvof4hY+lM9/WQ== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + align-text@^0.1.1, align-text@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" @@ -124,11 +418,31 @@ analytics-node@1.2.2: superagent-proxy "~0.3.1" superagent-retry "~0.4.0" +ansi-colors@4.1.1, ansi-colors@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + +ansi-escapes@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" + integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== + ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + ansi-regex@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" @@ -139,7 +453,7 @@ ansi-styles@^2.2.1: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= -ansi-styles@^3.2.1: +ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== @@ -153,11 +467,36 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" +anymatch@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= +arrify@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" + integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== + asn1@0.1.11: version "0.1.11" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.1.11.tgz#559be18376d08a4ec4dbe80877d27818639b2df7" @@ -190,6 +529,16 @@ ast-types@0.x.x: dependencies: tslib "^2.0.1" +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== + +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + async@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" @@ -227,6 +576,11 @@ basic-auth@1.0.3: resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-1.0.3.tgz#41f55523e589405038ee3567958c62a5ed70551a" integrity sha1-QfVVI+WJQFA47jVnlYxipe1wVRo= +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + bl@~0.9.4: version "0.9.5" resolved "https://registry.yarnpkg.com/bl/-/bl-0.9.5.tgz#c06b797af085ea00bc527afc8efcf11de2232054" @@ -277,6 +631,11 @@ body-parser@1.19.0: raw-body "2.4.0" type-is "~1.6.17" +boolify@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/boolify/-/boolify-1.0.1.tgz#b5c09e17cacd113d11b7bb3ed384cc012994d86b" + integrity sha1-tcCeF8rNET0Rt7s+04TMASmU2Gs= + boom@2.x.x: version "2.10.1" resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" @@ -292,7 +651,7 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -braces@^3.0.1: +braces@^3.0.1, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== @@ -304,6 +663,22 @@ breakable@~1.0.0: resolved "https://registry.yarnpkg.com/breakable/-/breakable-1.0.0.tgz#784a797915a38ead27bad456b5572cb4bbaa78c1" integrity sha1-eEp5eRWjjq0nutRWtVcstLuqeME= +browser-stdout@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" + integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== + +browserslist@^4.14.5: + version "4.16.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.3.tgz#340aa46940d7db878748567c5dea24a48ddf3717" + integrity sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw== + dependencies: + caniuse-lite "^1.0.30001181" + colorette "^1.2.1" + electron-to-chromium "^1.3.649" + escalade "^3.1.1" + node-releases "^1.1.70" + buffer@^5.1.0: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" @@ -322,11 +697,40 @@ bytes@3.1.0: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase-keys@^6.0.0: + version "6.2.2" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" + integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== + dependencies: + camelcase "^5.3.1" + map-obj "^4.0.0" + quick-lru "^4.0.1" + camelcase@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" integrity sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk= +camelcase@^5.0.0, camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.0.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" + integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== + +caniuse-lite@^1.0.30001181: + version "1.0.30001202" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001202.tgz#4cb3bd5e8a808e8cd89e4e66c549989bc8137201" + integrity sha512-ZcijQNqrcF8JNLjzvEiXqX4JUYxoZa7Pvcsd9UD8Kz4TvhTonOSNRsK+qtvpVL4l6+T1Rh4LFtLfnNWg6BGWCQ== + caseless@~0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" @@ -340,7 +744,7 @@ center-align@^0.1.1: align-text "^0.1.3" lazy-cache "^1.0.3" -chalk@^1.0.0: +chalk@^1.0.0, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= @@ -351,7 +755,7 @@ chalk@^1.0.0: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0: +chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -368,6 +772,38 @@ chalk@^4.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +chokidar@3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" + integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.5.0" + optionalDependencies: + fsevents "~2.3.1" + +cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= + dependencies: + restore-cursor "^2.0.0" + +cli-width@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" + integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== + cliui@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" @@ -377,6 +813,24 @@ cliui@^2.1.0: right-align "^0.1.1" wordwrap "0.0.2" +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + clone@~0.1.17: version "0.1.19" resolved "https://registry.yarnpkg.com/clone/-/clone-0.1.19.tgz#613fb68639b26a494ac53253e15b1a6bd88ada85" @@ -411,6 +865,11 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +colorette@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" + integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== + combined-stream@^1.0.5, combined-stream@~1.0.1: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -425,21 +884,16 @@ combined-stream@~0.0.4: dependencies: delayed-stream "0.0.5" -commander@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-0.6.1.tgz#fa68a14f6a945d54dbbe50d8cdb3320e9e3b1a06" - integrity sha1-+mihT2qUXVTbvlDYzbMyDp47GgY= - -commander@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.0.0.tgz#d1b86f901f8b64bd941bdeadaf924530393be928" - integrity sha1-0bhvkB+LZL2UG96tr5JFMDk76Sg= - commander@^2.5.0, commander@^2.8.1: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== +common-tags@^1.4.0, common-tags@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937" + integrity sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw== + commoner@~0.10.3: version "0.10.8" resolved "https://registry.yarnpkg.com/commoner/-/commoner-0.10.8.tgz#34fc3672cd24393e8bb47e70caa0293811f4f2c5" @@ -487,6 +941,13 @@ content-type@~1.0.1, content-type@~1.0.4: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== +convert-source-map@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + dependencies: + safe-buffer "~5.1.1" + cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" @@ -507,6 +968,11 @@ cookiejar@^2.0.6: resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.2.tgz#dd8a235530752f988f9a0844f3fc589e3111125c" integrity sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA== +core-js@^3.1.4: + version "3.9.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.9.1.tgz#cec8de593db8eb2a85ffb0dbdeb312cb6e5460ae" + integrity sha512-gSjRvzkxQc1zjM/5paAmL4idJBFzuJoo+jDjF1tStYFMV2ERfD02HhahhCGXUyHxQRG4yFKVSdO6g62eoRMcDg== + 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" @@ -519,6 +985,26 @@ crc@^3.4.0: dependencies: buffer "^5.1.0" +cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + cryptiles@2.x.x: version "2.0.5" resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" @@ -536,19 +1022,26 @@ data-uri-to-buffer@0: resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-0.0.4.tgz#46e13ab9da8e309745c8d01ce547213ebdb2fe3f" integrity sha1-RuE6udqOMJdFyNAc5UchPr2y/j8= -debug@*: +debug@2, debug@2.6.9, debug@^2.2.0: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@4.3.1, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: version "4.3.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== dependencies: ms "2.1.2" -debug@2, debug@2.6.9, debug@^2.2.0: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== +debug@^3.1.0: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: - ms "2.0.0" + ms "^2.1.1" debug@~1.0.1, debug@~1.0.4: version "1.0.5" @@ -571,12 +1064,17 @@ debug@~2.2.0: dependencies: ms "0.7.1" -decamelize@^1.0.0: +decamelize@^1.0.0, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= -deep-is@~0.1.3: +decamelize@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" + integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== + +deep-is@^0.1.3, deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= @@ -654,10 +1152,22 @@ diff-sequences@^26.6.2: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== -diff@1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/diff/-/diff-1.0.7.tgz#24bbb001c4a7d5522169e7cabdb2c2814ed91cf4" - integrity sha1-JLuwAcSn1VIhaefKvbLCgU7ZHPQ= +diff@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" + integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== + +dlv@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" + integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" ee-first@1.0.3: version "1.0.3" @@ -674,16 +1184,48 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= +electron-to-chromium@^1.3.649: + version "1.3.691" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.691.tgz#a671eaf135a3ccec0915eb8d844a0952aba79f3b" + integrity sha512-ZqiO69KImmOGCyoH0icQPU3SndJiW93juEvf63gQngyhODO6SpQIPMTOHldtCs5DS5GMKvAkquk230E2zt2vpw== + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= +enquirer@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= +escape-string-regexp@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + escape-string-regexp@^1.0.2, 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" @@ -706,6 +1248,185 @@ escodegen@1.x.x: optionalDependencies: source-map "~0.6.1" +eslint-config-prettier@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.1.0.tgz#4ef1eaf97afe5176e6a75ddfb57c335121abc5a6" + integrity sha512-oKMhGv3ihGbCIimCAjqkdzx2Q+jthoqnXSP+d86M9tptwugycmTFdVR4IpLgq2c4SHifbwO90z2fQ8/Aio73yw== + +eslint-plugin-prettier@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.3.1.tgz#7079cfa2497078905011e6f82e8dd8453d1371b7" + integrity sha512-Rq3jkcFY8RYeQLgk2cCwuc0P7SEFwDravPhsJZOQ5N4YI4DSg50NyqJ/9gdZHzQlHf8MvafSesbNJCcP/FF6pQ== + dependencies: + prettier-linter-helpers "^1.0.0" + +eslint-scope@5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.0.tgz#d0f971dfe59c69e0cada684b23d49dbf82600ce5" + integrity sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-scope@^3.7.1: + version "3.7.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.3.tgz#bb507200d3d17f60247636160b4826284b108535" + integrity sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-scope@^4.0.0, eslint-scope@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" + integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-utils@^1.3.1: + version "1.4.3" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" + integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint-visitor-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" + integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== + +eslint@^5.0.0: + version "5.16.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.16.0.tgz#a1e3ac1aae4a3fbd8296fcf8f7ab7314cbb6abea" + integrity sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg== + dependencies: + "@babel/code-frame" "^7.0.0" + ajv "^6.9.1" + chalk "^2.1.0" + cross-spawn "^6.0.5" + debug "^4.0.1" + doctrine "^3.0.0" + eslint-scope "^4.0.3" + eslint-utils "^1.3.1" + eslint-visitor-keys "^1.0.0" + espree "^5.0.1" + esquery "^1.0.1" + esutils "^2.0.2" + file-entry-cache "^5.0.1" + functional-red-black-tree "^1.0.1" + glob "^7.1.2" + globals "^11.7.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + inquirer "^6.2.2" + js-yaml "^3.13.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.3.0" + lodash "^4.17.11" + minimatch "^3.0.4" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + optionator "^0.8.2" + path-is-inside "^1.0.2" + progress "^2.0.0" + regexpp "^2.0.1" + semver "^5.5.1" + strip-ansi "^4.0.0" + strip-json-comments "^2.0.1" + table "^5.2.3" + text-table "^0.2.0" + +eslint@^7.22.0: + version "7.22.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.22.0.tgz#07ecc61052fec63661a2cab6bd507127c07adc6f" + integrity sha512-3VawOtjSJUQiiqac8MQc+w457iGLfuNGLFn8JmF051tTKbh5/x/0vlcEj8OgDCaw7Ysa2Jn8paGshV7x2abKXg== + dependencies: + "@babel/code-frame" "7.12.11" + "@eslint/eslintrc" "^0.4.0" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.0.1" + doctrine "^3.0.0" + enquirer "^2.3.5" + eslint-scope "^5.1.1" + eslint-utils "^2.1.0" + eslint-visitor-keys "^2.0.0" + espree "^7.3.1" + esquery "^1.4.0" + esutils "^2.0.2" + file-entry-cache "^6.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.0.0" + globals "^13.6.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash "^4.17.21" + minimatch "^3.0.4" + natural-compare "^1.4.0" + optionator "^0.9.1" + progress "^2.0.0" + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" + table "^6.0.4" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^3.5.2: + version "3.5.4" + resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7" + integrity sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A== + dependencies: + acorn "^5.5.0" + acorn-jsx "^3.0.0" + +espree@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a" + integrity sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A== + dependencies: + acorn "^6.0.7" + acorn-jsx "^5.0.0" + eslint-visitor-keys "^1.0.0" + +espree@^7.3.0, espree@^7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" + integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== + dependencies: + acorn "^7.4.0" + acorn-jsx "^5.3.1" + eslint-visitor-keys "^1.3.0" + esprima-fb@~15001.1001.0-dev-harmony-fb: version "15001.1001.0-dev-harmony-fb" resolved "https://registry.yarnpkg.com/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz#43beb57ec26e8cf237d3dd8b33e42533577f2659" @@ -716,16 +1437,35 @@ esprima@3.x.x, esprima@~3.1.0: resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= -esprima@^4.0.1: +esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -estraverse@^4.2.0: +esquery@^1.0.0, esquery@^1.0.1, esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.1.0, esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1, estraverse@^4.2.0: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" @@ -799,7 +1539,31 @@ extend@~1.2.1: resolved "https://registry.yarnpkg.com/extend/-/extend-1.2.1.tgz#a0f5fd6cfc83a5fe49ef698d60ec8a624dd4576c" integrity sha1-oPX9bPyDpf5J72mNYOyKYk3UV2w= -fast-levenshtein@~2.0.6: +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-diff@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" + integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= @@ -811,6 +1575,27 @@ feed@^0.3.0: dependencies: xml ">= 0.0.5" +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" + integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== + dependencies: + flat-cache "^2.0.1" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + file-uri-to-path@0: version "0.0.2" resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-0.0.2.tgz#37cdd1b5b905404b3f05e1b23645be694ff70f82" @@ -836,6 +1621,29 @@ finalhandler@~1.1.2: statuses "~1.5.0" unpipe "~1.0.0" +find-up@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + finished@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/finished/-/finished-1.2.2.tgz#41608eafadfd65683b46a1220bc4b1ec3daedcd8" @@ -843,6 +1651,38 @@ finished@^1.2.2: dependencies: ee-first "1.0.3" +flat-cache@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" + integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== + dependencies: + flatted "^2.0.0" + rimraf "2.6.3" + write "1.0.3" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== + +flatted@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" + integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== + +flatted@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469" + integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== + forever-agent@~0.6.0: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -911,6 +1751,11 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= +fsevents@~2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + fswrite-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fswrite-stream/-/fswrite-stream-1.0.0.tgz#7ac3cfe6092ddff998435675502389e652a36fae" @@ -926,6 +1771,11 @@ ftp@~0.3.5: readable-stream "1.1.x" xregexp "2.0.0" +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + generate-function@^2.0.0: version "2.3.1" resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.3.1.tgz#f069617690c10c868e73b8465746764f97c3479f" @@ -940,6 +1790,21 @@ generate-object-property@^1.1.0: dependencies: is-property "^1.0.0" +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.1, get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-stdin@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-7.0.0.tgz#8d5de98f15171a125c5e516643c7a6d0ea8a96f6" + integrity sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ== + get-uri@~0.1.0: version "0.1.4" resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-0.1.4.tgz#35f8a7954c129fb132ff2ddf5ed81a57cb8a9e54" @@ -959,14 +1824,24 @@ github-webhook-handler@0.5.0: dependencies: bl "~0.9.4" -glob@3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-3.2.3.tgz#e313eeb249c7affaa5c475286b0e115b59839467" - integrity sha1-4xPusknHr/qlxHUoaw4RW1mDlGc= +glob-parent@^5.0.0, glob-parent@~5.1.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob@7.1.6, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== dependencies: - graceful-fs "~2.0.0" + fs.realpath "^1.0.0" + inflight "^1.0.4" inherits "2" - minimatch "~0.2.11" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" glob@^5.0.15: version "5.0.15" @@ -979,32 +1854,34 @@ glob@^5.0.15: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.1.3: - version "7.1.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== +globals@^11.1.0, globals@^11.7.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^12.1.0: + version "12.4.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" + integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== 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" + type-fest "^0.8.1" + +globals@^13.6.0: + version "13.6.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.6.0.tgz#d77138e53738567bb96a3916ff6f6b487af20ef7" + integrity sha512-YFKCX0SiPg7l5oKYCJ2zZGxcXprVXHcSnVuvzrT3oSENQonVLqM5pf9fN5dLGZGyCjhw8TN8Btwe/jKnZ0pjvQ== + dependencies: + type-fest "^0.20.2" graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.4: version "4.2.6" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== -graceful-fs@~2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-2.0.3.tgz#7cd2cdb228a4a3f36e95efa6cc142de7d1a136d0" - integrity sha1-fNLNsiiko/Nule+mzBQt59GhNtA= - -growl@1.7.x: - version "1.7.0" - resolved "https://registry.yarnpkg.com/growl/-/growl-1.7.0.tgz#de2d66136d002e112ba70f3f10c31cf7c350b2da" - integrity sha1-3i1mE20ALhErpw8/EMMc98NQsto= +growl@1.10.5: + version "1.10.5" + resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" + integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== har-validator@^1.6.1: version "1.8.0" @@ -1043,6 +1920,11 @@ hawk@~3.1.0: hoek "2.x.x" sntp "1.x.x" +he@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + hoek@2.x.x: version "2.16.3" resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" @@ -1108,7 +1990,7 @@ https-proxy-agent@0: debug "2" extend "3" -iconv-lite@0.4.24, iconv-lite@^0.4.5: +iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.5: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -1125,6 +2007,34 @@ ieee754@^1.1.13: resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +ignore@^5.1.2: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -1143,6 +2053,25 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= +inquirer@^6.2.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" + integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ== + dependencies: + ansi-escapes "^3.2.0" + chalk "^2.4.2" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^3.0.3" + figures "^2.0.0" + lodash "^4.17.12" + mute-stream "0.0.7" + run-async "^2.2.0" + rxjs "^6.4.0" + string-width "^2.1.0" + strip-ansi "^5.1.0" + through "^2.3.6" + invert-kv@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" @@ -1158,11 +2087,40 @@ ipaddr.js@1.9.1: resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +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" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + is-my-ip-valid@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz#7b351b8e8edd4d3995d4d066680e664d94696824" @@ -1184,6 +2142,11 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== +is-plain-obj@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + is-property@^1.0.0, is-property@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" @@ -1204,19 +2167,16 @@ isarray@~1.0.0: resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + isstream@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= -jade@0.26.3: - version "0.26.3" - resolved "https://registry.yarnpkg.com/jade/-/jade-0.26.3.tgz#8f10d7977d8d79f2f6ff862a81b0513ccb25686c" - integrity sha1-jxDXl32NefL2/4YqgbBRPMslaGw= - dependencies: - commander "0.6.1" - mkdirp "0.3.0" - jest-diff@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" @@ -1277,11 +2237,53 @@ js-tokens@^4.0.0: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== +js-yaml@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.0.0.tgz#f426bc0ff4b4051926cd588c71113183409a121f" + integrity sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q== + dependencies: + argparse "^2.0.1" + +js-yaml@^3.13.0, js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + json-stringify-safe@~5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= +json5@^2.1.2: + version "2.2.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" + integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== + dependencies: + minimist "^1.2.5" + jsonfile@^2.1.0: version "2.4.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" @@ -1327,7 +2329,7 @@ length-stream@^0.1.1: dependencies: pass-stream "~0.1.0" -levn@~0.3.0: +levn@^0.3.0, levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= @@ -1335,6 +2337,51 @@ levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= + +lodash.merge@^4.6.0: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.unescape@4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c" + integrity sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw= + lodash@3.10.1, lodash@^3.10.1: version "3.10.1" resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" @@ -1345,7 +2392,7 @@ lodash@3.7.0: resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.7.0.tgz#3678bd8ab995057c07ade836ed2ef087da811d45" integrity sha1-Nni9irmVBXwHreg27S7wh9qBHUU= -lodash@^4.17.14: +lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -1355,16 +2402,31 @@ lodash@~2.4.1: resolved "https://registry.yarnpkg.com/lodash/-/lodash-2.4.2.tgz#fadd834b9683073da179b3eae6d9c0d15053f73e" integrity sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4= +log-symbols@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.0.0.tgz#69b3cc46d20f448eccdb75ea1fa733d9e821c920" + integrity sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA== + dependencies: + chalk "^4.0.0" + +loglevel-colored-level-prefix@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/loglevel-colored-level-prefix/-/loglevel-colored-level-prefix-1.0.0.tgz#6a40218fdc7ae15fc76c3d0f3e676c465388603e" + integrity sha1-akAhj9x64V/HbD0PPmdsRlOIYD4= + dependencies: + chalk "^1.1.3" + loglevel "^1.4.1" + +loglevel@^1.4.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.1.tgz#005fde2f5e6e47068f935ff28573e125ef72f197" + integrity sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw== + longest@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc= -lru-cache@2: - version "2.7.3" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952" - integrity sha1-bUUk6LlV+V1PW1iFHOId1y+06VI= - lru-cache@^4.0.0: version "4.1.5" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" @@ -1373,6 +2435,13 @@ lru-cache@^4.0.0: pseudomap "^1.0.2" yallist "^2.1.2" +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + lru-cache@~2.5.0: version "2.5.2" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.5.2.tgz#1fddad938aae1263ce138680be1b3f591c0ab41c" @@ -1391,6 +2460,18 @@ lru-diskcache@1.1.1: q "^1.4.1" tmp "^0.0.28" +make-plural@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/make-plural/-/make-plural-4.3.0.tgz#f23de08efdb0cac2e0c9ba9f315b0dff6b4c2735" + integrity sha512-xTYd4JVHpSCW+aqDof6w/MebaMVNTVYBZhbB/vi513xXdiPT92JMVCo0Jq8W2UZnzYRFeVbQiQ+I25l13JuKvA== + optionalDependencies: + minimist "^1.2.0" + +map-obj@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.2.0.tgz#0e8bc823e2aaca8a0942567d12ed14f389eec153" + integrity sha512-NAq0fCmZYGz9UFEQyndp7sisrow4GroyGeKluyKC/chuITZsPyOyC1UJZPJlVFImhXdROIP5xqouRLThT3BbpQ== + media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" @@ -1401,6 +2482,25 @@ merge-descriptors@1.0.1: resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= +messageformat-formatters@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/messageformat-formatters/-/messageformat-formatters-2.0.1.tgz#0492c1402a48775f751c9b17c0354e92be012b08" + integrity sha512-E/lQRXhtHwGuiQjI7qxkLp8AHbMD5r2217XNe/SREbBlSawe0lOqsFb7rflZJmlQFSULNLIqlcjjsCPlB3m3Mg== + +messageformat-parser@^4.1.2: + version "4.1.3" + resolved "https://registry.yarnpkg.com/messageformat-parser/-/messageformat-parser-4.1.3.tgz#b824787f57fcda7d50769f5b63e8d4fda68f5b9e" + integrity sha512-2fU3XDCanRqeOCkn7R5zW5VQHWf+T3hH65SzuqRvjatBK7r4uyFa5mEX+k6F9Bd04LVM5G4/BHBTUJsOdW7uyg== + +messageformat@^2.2.1: + version "2.3.0" + resolved "https://registry.yarnpkg.com/messageformat/-/messageformat-2.3.0.tgz#de263c49029d5eae65d7ee25e0754f57f425ad91" + integrity sha512-uTzvsv0lTeQxYI2y1NPa1lItL5VRI8Gb93Y2K2ue5gBPyrbJxfDi/EYWxh2PKv5yO42AJeeqblS9MJSh/IEk4w== + dependencies: + make-plural "^4.3.0" + messageformat-formatters "^2.0.1" + messageformat-parser "^4.1.2" + methods@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/methods/-/methods-1.0.1.tgz#75bc91943dffd7da037cf3eeb0ed73a0037cd14b" @@ -1453,55 +2553,60 @@ mime@1.6.0, mime@^1.3.4: resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -"minimatch@2 || 3", minimatch@^3.0.4: +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + +"minimatch@2 || 3", minimatch@3.0.4, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== dependencies: brace-expansion "^1.1.7" -minimatch@~0.2.11: - version "0.2.14" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.2.14.tgz#c74e780574f63c6f9a090e90efbe6ef53a6a756a" - integrity sha1-x054BXT2PG+aCQ6Q775u9TpqdWo= - dependencies: - lru-cache "2" - sigmund "~1.0.0" - -minimist@^1.2.5: +minimist@^1.2.0, minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== -mkdirp@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.0.tgz#1bbf5ab1ba827af23575143490426455f481fe1e" - integrity sha1-G79asbqCevI1dRQ0kEJkVfSB/h4= - -mkdirp@0.3.5: - version "0.3.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.5.tgz#de3e5f8961c88c787ee1368df849ac4413eca8d7" - integrity sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc= - -mkdirp@^0.5.0: +mkdirp@^0.5.0, mkdirp@^0.5.1: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== dependencies: minimist "^1.2.5" -mocha@1.18.2: - version "1.18.2" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-1.18.2.tgz#800848f8f7884c61eefcfa2a27304ba9e5446d0b" - integrity sha1-gAhI+PeITGHu/PoqJzBLqeVEbQs= - dependencies: - commander "2.0.0" - debug "*" - diff "1.0.7" - glob "3.2.3" - growl "1.7.x" - jade "0.26.3" - mkdirp "0.3.5" +mocha@8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-8.3.2.tgz#53406f195fa86fbdebe71f8b1c6fb23221d69fcc" + integrity sha512-UdmISwr/5w+uXLPKspgoV7/RXZwKRTiTjJ2/AC5ZiEztIoOYdfKb19+9jNmEInzx5pBsCyJQzarAxqIGBNYJhg== + dependencies: + "@ungap/promise-all-settled" "1.1.2" + ansi-colors "4.1.1" + browser-stdout "1.3.1" + chokidar "3.5.1" + debug "4.3.1" + diff "5.0.0" + escape-string-regexp "4.0.0" + find-up "5.0.0" + glob "7.1.6" + growl "1.10.5" + he "1.2.0" + js-yaml "4.0.0" + log-symbols "4.0.0" + minimatch "3.0.4" + ms "2.1.3" + nanoid "3.1.20" + serialize-javascript "5.0.1" + strip-json-comments "3.1.1" + supports-color "8.1.1" + which "2.0.2" + wide-align "1.1.3" + workerpool "6.1.0" + yargs "16.2.0" + yargs-parser "20.2.4" + yargs-unparser "2.0.0" ms@0.7.0: version "0.7.0" @@ -1528,6 +2633,26 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +ms@2.1.3, ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +mute-stream@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= + +nanoid@3.1.20: + version "3.1.20" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.20.tgz#badc263c6b1dcf14b71efaa85f6ab4c1d6cfc788" + integrity sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + negotiator@0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" @@ -1538,11 +2663,26 @@ netmask@~1.0.4: resolved "https://registry.yarnpkg.com/netmask/-/netmask-1.0.6.tgz#20297e89d86f6f6400f250d9f4f6b4c1945fcd35" integrity sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU= +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +node-releases@^1.1.70: + version "1.1.71" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.71.tgz#cb1334b179896b1c89ecfdd4b725fb7bbdfc7dbb" + integrity sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg== + node-uuid@~1.4.0: version "1.4.8" resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.8.tgz#b040eb0923968afabf8d32fb1f17f1167fdab907" integrity sha1-sEDrCSOWivq/jTL7HxfxFn/auQc= +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + oauth-sign@~0.8.0: version "0.8.2" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" @@ -1586,7 +2726,14 @@ once@^1.3.0: dependencies: wrappy "1" -optionator@^0.8.1: +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= + dependencies: + mimic-fn "^1.0.0" + +optionator@^0.8.1, optionator@^0.8.2: version "0.8.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== @@ -1598,6 +2745,18 @@ optionator@^0.8.1: type-check "~0.3.2" word-wrap "~1.2.3" +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + os-locale@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" @@ -1605,11 +2764,51 @@ os-locale@^1.4.0: dependencies: lcid "^1.0.0" -os-tmpdir@~1.0.1: +os-tmpdir@~1.0.1, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= +p-limit@^2.0.0, p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + pac-proxy-agent@0: version "0.2.0" resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-0.2.0.tgz#ad902909d92f4fe7cc2e5f59f5bf5061bcfa71b2" @@ -1634,6 +2833,13 @@ pac-resolver@~1.2.1: regenerator "~0.8.13" thunkify "~2.1.1" +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" @@ -1646,26 +2852,123 @@ pass-stream@~0.1.0: dependencies: readable-stream "https://github.com/jeffbski/readable-stream/archive/v1.0.2-object-transform2-ret-self.tar.gz" +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + 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" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= +path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + +path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= -picomatch@^2.0.5: +picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: version "2.2.2" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= +prettier-eslint-cli@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/prettier-eslint-cli/-/prettier-eslint-cli-5.0.1.tgz#8478e08f9b4c51c3751dd3ae76f630658329af64" + integrity sha512-fzX26Q6654RN3SD4c8XDBiJyNWOFQKsMLsMiXIGgSN2xNQLmiqjXW3wnR33qMVJOo+wq86a+WjA6wov0krTvCA== + dependencies: + arrify "^2.0.1" + boolify "^1.0.0" + camelcase-keys "^6.0.0" + chalk "^2.4.2" + common-tags "^1.8.0" + core-js "^3.1.4" + eslint "^5.0.0" + find-up "^4.1.0" + get-stdin "^7.0.0" + glob "^7.1.4" + ignore "^5.1.2" + lodash.memoize "^4.1.2" + loglevel-colored-level-prefix "^1.0.0" + messageformat "^2.2.1" + prettier-eslint "^9.0.0" + rxjs "^6.5.2" + yargs "^13.2.4" + +prettier-eslint@^9.0.0: + version "9.0.2" + resolved "https://registry.yarnpkg.com/prettier-eslint/-/prettier-eslint-9.0.2.tgz#66c7b5d2a35712a104f6b7ce31f470ea9f8cb6a6" + integrity sha512-u6EQqxUhaGfra9gy9shcR7MT7r/2twwEfRGy1tfzyaJvLQwSg34M9IU5HuF7FsLW2QUgr5VIUc56EPWibw1pdw== + dependencies: + "@typescript-eslint/parser" "^1.10.2" + common-tags "^1.4.0" + core-js "^3.1.4" + dlv "^1.1.0" + eslint "^5.0.0" + indent-string "^4.0.0" + lodash.merge "^4.6.0" + loglevel-colored-level-prefix "^1.0.0" + prettier "^1.7.0" + pretty-format "^23.0.1" + require-relative "^0.8.7" + typescript "^3.2.1" + vue-eslint-parser "^2.0.2" + +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + +prettier@^1.7.0: + version "1.19.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" + integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== + +prettier@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5" + integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q== + +pretty-format@^23.0.1: + version "23.6.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.6.0.tgz#5eaac8eeb6b33b987b7fe6097ea6a8a146ab5760" + integrity sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw== + dependencies: + ansi-regex "^3.0.0" + ansi-styles "^3.2.0" + pretty-format@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" @@ -1700,6 +3003,11 @@ progress-stream@1.1.1: speedometer "~0.1.2" through2 "~0.2.3" +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + proxy-addr@~2.0.5: version "2.0.6" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" @@ -1729,7 +3037,7 @@ psl@^1.1.33: resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== -punycode@^2.1.1: +punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== @@ -1779,6 +3087,18 @@ qs@~5.1.0: resolved "https://registry.yarnpkg.com/qs/-/qs-5.1.0.tgz#4d932e5c7ea411cca76a312d39a606200fd50cd9" integrity sha1-TZMuXH6kEcynajEtOaYGIA/VDNk= +quick-lru@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" + integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + range-parser@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" @@ -1866,6 +3186,13 @@ readable-stream@~2.0.5: string_decoder "~0.10.x" util-deprecate "~1.0.1" +readdirp@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" + integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== + dependencies: + picomatch "^2.2.1" + recast@0.10.33: version "0.10.33" resolved "https://registry.yarnpkg.com/recast/-/recast-0.10.33.tgz#942808f7aa016f1fa7142c461d7e5704aaa8d697" @@ -1909,6 +3236,16 @@ regenerator@~0.8.13: regenerator-runtime "~0.9.5" through "~2.3.8" +regexpp@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" + integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== + +regexpp@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" + integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== + repeat-string@^1.5.2: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" @@ -1964,6 +3301,39 @@ request@2.64.0: tough-cookie ">=0.12.0" tunnel-agent "~0.4.0" +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +require-relative@^0.8.7: + version "0.8.7" + resolved "https://registry.yarnpkg.com/require-relative/-/require-relative-0.8.7.tgz#7999539fc9e047a37928fa196f8e1563dabd36de" + integrity sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4= + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + right-align@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" @@ -1971,6 +3341,13 @@ right-align@^0.1.1: dependencies: align-text "^0.1.1" +rimraf@2.6.3: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + rimraf@^2.2.8: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" @@ -1978,11 +3355,35 @@ rimraf@^2.2.8: dependencies: glob "^7.1.3" +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +run-async@^2.2.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + +rxjs@^6.4.0, rxjs@^6.5.2: + version "6.6.6" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.6.tgz#14d8417aa5a07c5e633995b525e1e3c0dec03b70" + integrity sha512-/oTwee4N4iWzAMAL9xdGKjkEHmIwupR3oXbQjCKywF1BeFohswF3vZdogbmEF6pZkOsXTzWkrZszrWpQTByYVg== + dependencies: + tslib "^1.9.0" + safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== +safe-buffer@^5.1.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + "safer-buffer@>= 2.1.2 < 3": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" @@ -1993,6 +3394,28 @@ semver@5.0.1: resolved "https://registry.yarnpkg.com/semver/-/semver-5.0.1.tgz#9fb3f4004f900d83c47968fe42f7583e05832cc9" integrity sha1-n7P0AE+QDYPEeWj+QvdYPgWDLMk= +semver@5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" + integrity sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA== + +semver@^5.5.0, semver@^5.5.1: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.2.1: + version "7.3.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" + integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== + dependencies: + lru-cache "^6.0.0" + send@0.17.1: version "0.17.1" resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" @@ -2012,6 +3435,13 @@ send@0.17.1: range-parser "~1.2.1" statuses "~1.5.0" +serialize-javascript@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" + integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== + dependencies: + randombytes "^2.1.0" + serve-static@1.14.1: version "1.14.1" resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" @@ -2022,6 +3452,11 @@ serve-static@1.14.1: parseurl "~1.3.3" send "0.17.1" +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + setprototypeof@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" @@ -2032,6 +3467,30 @@ setprototypeof@1.2.0: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.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" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + should-equal@0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/should-equal/-/should-equal-0.5.0.tgz#c797f135f3067feb69ebecdb306b1c3fe21b3e6f" @@ -2060,10 +3519,10 @@ should@7.0.4: should-format "0.3.0" should-type "0.2.0" -sigmund@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" - integrity sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA= +signal-exit@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== simple-fmt@~0.1.0: version "0.1.0" @@ -2085,6 +3544,24 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== +slice-ansi@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" + integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== + dependencies: + ansi-styles "^3.2.0" + astral-regex "^1.0.0" + is-fullwidth-code-point "^2.0.0" + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + smart-buffer@^1.0.13: version "1.1.15" resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-1.1.15.tgz#7f114b5b65fab3e2a35aa775bb12f0d1c649bf16" @@ -2114,7 +3591,7 @@ socks@~1.1.5: ip "^1.1.4" smart-buffer "^1.0.13" -source-map@~0.5.0: +source-map@^0.5.0, source-map@~0.5.0: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= @@ -2129,6 +3606,11 @@ speedometer@~0.1.2: resolved "https://registry.yarnpkg.com/speedometer/-/speedometer-0.1.4.tgz#9876dbd2a169d3115402d48e6ea6329c8816a50d" integrity sha1-mHbb0qFp0xFUAtSObqYynIgWpQ0= +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + stable@~0.1.3: version "0.1.8" resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" @@ -2159,6 +3641,32 @@ stream-to-array@~1.0.0: resolved "https://registry.yarnpkg.com/stream-to-array/-/stream-to-array-1.0.0.tgz#94166bb29f3ea24f082d2f8cd3ebb2cc0d6eca2c" integrity sha1-lBZrsp8+ok8ILS+M0+uyzA1uyiw= +"string-width@^1.0.2 || 2", string-width@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" + integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + string_decoder@~0.10.x: version "0.10.31" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" @@ -2193,6 +3701,27 @@ strip-ansi@^3.0.0: dependencies: ansi-regex "^2.0.0" +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + strip-bom@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" @@ -2200,6 +3729,16 @@ strip-bom@2.0.0: dependencies: is-utf8 "^0.2.0" +strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strip-json-comments@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + superagent-proxy@~0.3.1: version "0.3.2" resolved "https://registry.yarnpkg.com/superagent-proxy/-/superagent-proxy-0.3.2.tgz#73c27ecd41915823070c90b265ee8390c3e1aa15" @@ -2254,6 +3793,13 @@ supertest@^2.0.0: methods "1.x" superagent "^2.0.0" +supports-color@8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" @@ -2273,6 +3819,31 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" +table@^5.2.3: + version "5.4.6" + resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" + integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== + dependencies: + ajv "^6.10.2" + lodash "^4.17.14" + slice-ansi "^2.1.0" + string-width "^3.0.0" + +table@^6.0.4: + version "6.0.7" + resolved "https://registry.yarnpkg.com/table/-/table-6.0.7.tgz#e45897ffbcc1bcf9e8a87bf420f2c9e5a7a52a34" + integrity sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g== + dependencies: + ajv "^7.0.2" + lodash "^4.17.20" + slice-ansi "^4.0.0" + string-width "^4.2.0" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + through2@~0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/through2/-/through2-0.2.3.tgz#eb3284da4ea311b6cc8ace3653748a52abf25a3f" @@ -2281,7 +3852,7 @@ through2@~0.2.3: readable-stream "~1.1.9" xtend "~2.1.1" -through@~2.3.8: +through@^2.3.6, through@~2.3.8: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= @@ -2298,6 +3869,18 @@ tmp@^0.0.28: dependencies: os-tmpdir "~1.0.1" +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -2324,6 +3907,11 @@ tryor@~0.1.2: resolved "https://registry.yarnpkg.com/tryor/-/tryor-0.1.2.tgz#8145e4ca7caff40acde3ccf946e8b8bb75b4172b" integrity sha1-gUXkynyv9ArN48z5Rui4u3W0Fys= +tslib@^1.9.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + tslib@^2.0.1: version "2.1.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" @@ -2334,6 +3922,13 @@ tunnel-agent@~0.4.0: resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" integrity sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us= +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" @@ -2341,6 +3936,16 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + type-is@~1.6.1, type-is@~1.6.17, type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" @@ -2349,6 +3954,11 @@ type-is@~1.6.1, type-is@~1.6.17, type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" +typescript@^3.2.1: + version "3.9.9" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.9.tgz#e69905c54bc0681d0518bd4d587cc6f2d0b1a674" + integrity sha512-kdMjTiekY+z/ubJCATUPlRDl39vXYiMV9iyeMuEuXZh2we6zz80uovNN2WlAxmmdE/Z/YQe+EbOEXB5RHEED3w== + uid@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/uid/-/uid-0.0.2.tgz#5e4a5d4b78138b4f70f89fd3c76fc59aa9d2f103" @@ -2369,6 +3979,13 @@ unpipe@1.0.0, unpipe@~1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + urljoin.js@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/urljoin.js/-/urljoin.js-0.1.0.tgz#97914d5227b1c334236a9c843cb47e3ffa7edd6a" @@ -2389,17 +4006,60 @@ uuid@2.0.1: resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.1.tgz#c2a30dedb3e535d72ccf82e343941a50ba8533ac" integrity sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w= +v8-compile-cache@^2.0.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== + vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= +vue-eslint-parser@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-2.0.3.tgz#c268c96c6d94cfe3d938a5f7593959b0ca3360d1" + integrity sha512-ZezcU71Owm84xVF6gfurBQUGg8WQ+WZGxgDEQu1IHFBZNx7BFZg3L1yHxrCBNNwbwFtE1GuvfJKMtb6Xuwc/Bw== + dependencies: + debug "^3.1.0" + eslint-scope "^3.7.1" + eslint-visitor-keys "^1.0.0" + espree "^3.5.2" + esquery "^1.0.0" + lodash "^4.17.4" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which@2.0.2, which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +which@^1.2.9: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +wide-align@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + dependencies: + string-width "^1.0.2 || 2" + window-size@^0.1.2: version "0.1.4" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.4.tgz#f8e1aa1ee5a53ec5bf151ffa09742a6ad7697876" integrity sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY= -word-wrap@~1.2.3: +word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== @@ -2409,11 +4069,41 @@ wordwrap@0.0.2: resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" integrity sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8= +workerpool@6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.1.0.tgz#a8e038b4c94569596852de7a8ea4228eefdeb37b" + integrity sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg== + +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= +write@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" + integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== + dependencies: + mkdirp "^0.5.1" + "xml@>= 0.0.5": version "1.0.1" resolved "https://registry.yarnpkg.com/xml/-/xml-1.0.1.tgz#78ba72020029c5bc87b8a81a3cfcd74b4a2fc1e5" @@ -2441,11 +4131,83 @@ y18n@^3.2.0: resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.2.tgz#85c901bd6470ce71fc4bb723ad209b70f7f28696" integrity sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ== +y18n@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" + integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== + +y18n@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.5.tgz#8769ec08d03b1ea2df2500acef561743bbb9ab18" + integrity sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg== + yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yargs-parser@20.2.4: + version "20.2.4" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== + +yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^20.2.2: + version "20.2.7" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.7.tgz#61df85c113edfb5a7a4e36eb8aa60ef423cbc90a" + integrity sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw== + +yargs-unparser@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" + integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== + dependencies: + camelcase "^6.0.0" + decamelize "^4.0.0" + flat "^5.0.2" + is-plain-obj "^2.1.0" + +yargs@16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yargs@^13.2.4: + version "13.3.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.2" + yargs@~3.27.0: version "3.27.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.27.0.tgz#21205469316e939131d59f2da0c6d7f98221ea40" @@ -2457,3 +4219,8 @@ yargs@~3.27.0: os-locale "^1.4.0" window-size "^0.1.2" y18n "^3.2.0" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From fd203dd999e455236fbed3ca99244e43ae1cd395 Mon Sep 17 00:00:00 2001 From: Ben Williams Date: Wed, 17 Mar 2021 16:14:03 -0700 Subject: [PATCH 08/14] fixed tests --- bin/web.js | 1 - lib/backends/backend.js | 2 +- lib/backends/github.js | 6 ++--- lib/nuts.js | 56 ++++++++++++++++++++--------------------- lib/versions.js | 5 +--- package.json | 2 +- 6 files changed, 33 insertions(+), 39 deletions(-) diff --git a/bin/web.js b/bin/web.js index 68f5555..e152cbc 100644 --- a/bin/web.js +++ b/bin/web.js @@ -32,7 +32,6 @@ var myNuts = nuts.Nuts({ // Control access to API myNuts.before("api", function (access, next) { - console.log("hey") if (!apiAuth.username) return next() function unauthorized() { diff --git a/lib/backends/backend.js b/lib/backends/backend.js index caf8b7b..89977bc 100644 --- a/lib/backends/backend.js +++ b/lib/backends/backend.js @@ -25,7 +25,7 @@ function Backend(nuts, opts) { maxAge: opts.cacheMaxAge, }) - _.bindAll(this) + _.bindAll(this, _.functions(this)) } // Memoize a function diff --git a/lib/backends/github.js b/lib/backends/github.js index f3fa984..8eb2ca1 100644 --- a/lib/backends/github.js +++ b/lib/backends/github.js @@ -15,9 +15,9 @@ function GitHubBackend() { proxyAssets: true, }) - // if ((!this.opts.username || !this.opts.password) && !this.opts.token) { - // throw new Error('GitHub backend require "username" and "token" options') - // } + if ((!this.opts.username || !this.opts.password) && !this.opts.token) { + throw new Error('GitHub backend require "username" and "token" options') + } this.client = new GitHub({ token: this.opts.token, diff --git a/lib/nuts.js b/lib/nuts.js index 3917dbc..d5ad054 100644 --- a/lib/nuts.js +++ b/lib/nuts.js @@ -23,7 +23,7 @@ function Nuts(opts) { var that = this Understudy.call(this) - _.bindAll(this) + _.bindAll(this, _.functions(Nuts)) this.opts = _.defaults(opts || {}, { // Backend to use @@ -63,51 +63,53 @@ function Nuts(opts) { const withPrefix = (s) => `${that.opts.routePrefix}${s}` - this.router.get(withPrefix(""), this.onDownload) + const onDownload = this._onDownload.bind(this) + + this.router.get(withPrefix(""), onDownload) this.router.get( withPrefix(`download/channel/:channel/:platform?`), - this.onDownload, - ) - this.router.get( - withPrefix(`download/version/:tag/:platform?`), - this.onDownload, + onDownload, ) - this.router.get(withPrefix(`download/:tag/:filename`), this.onDownload) - this.router.get(withPrefix(`download/:platform?`), this.onDownload) + this.router.get(withPrefix(`download/version/:tag/:platform?`), onDownload) + this.router.get(withPrefix(`download/:tag/:filename`), onDownload) + this.router.get(withPrefix(`download/:platform?`), onDownload) this.router.get( withPrefix(`feed/channel/:channel.atom`), - this.onServeVersionsFeed, + this.onServeVersionsFeed.bind(this), ) - this.router.get(withPrefix(`update`), this.onUpdateRedirect) - this.router.get(withPrefix(`update/:platform/:version`), this.onUpdate) + this.router.get(withPrefix(`update`), this.onUpdateRedirect.bind(this)) + this.router.get( + withPrefix(`update/:platform/:version`), + this.onUpdate.bind(this), + ) this.router.get( withPrefix(`update/channel/:channel/:platform/:version`), - this.onUpdate, + this.onUpdate.bind(this), ) this.router.get( withPrefix(`update/:platform/:version/RELEASES`), - this.onUpdateWin, + this.onUpdateWin.bind(this), ) this.router.get( withPrefix(`update/channel/:channel/:platform/:version/RELEASES`), - this.onUpdateWin, + this.onUpdateWin.bind(this), ) - this.router.get(withPrefix(`notes/:version?`), this.onServeNotes) + this.router.get(withPrefix(`notes/:version?`), this.onServeNotes.bind(this)) // Bind API - this.router.use(withPrefix(`api`), this.onAPIAccessControl) + this.router.use(withPrefix(`api`), this.onAPIAccessControl.bind(this)) _.each( API_METHODS, - function (method, route) { - this.router.get(withPrefix(`api/${route}`), function (req, res, next) { + (method, route) => { + this.router.get(withPrefix(`api/${route}`), (req, res, next) => { return Q() - .then(function () { - return method.call(that, req) + .then(() => { + return method.call(this, req) }) - .then(function (result) { + .then((result) => { res.send(result) }, next) }) @@ -181,9 +183,10 @@ Nuts.prototype.serveAsset = function (req, res, version, asset) { } // Handler for download routes -Nuts.prototype.onDownload = function (req, res, next) { +Nuts.prototype._onDownload = function (req, res, next) { var that = this - var channel = req.params.channel + // If specific version, don't enforce a channel + var channel = tag != "latest" ? "*" : req.params.channel var platform = req.params.platform var tag = req.params.tag || "latest" var filename = req.params.filename @@ -203,11 +206,6 @@ Nuts.prototype.onDownload = function (req, res, next) { platform = null } - // If specific version, don't enforce a channel - if (tag != "latest") { - channel = "*" - } - this.versions .resolve({ channel: channel, diff --git a/lib/versions.js b/lib/versions.js index 856db78..4965685 100644 --- a/lib/versions.js +++ b/lib/versions.js @@ -143,10 +143,7 @@ Versions.prototype.filter = function (opts) { // Not available for requested platform if ( opts.platform && - !platforms.satisfies( - opts.platform, - _.pluck(version.platforms, "type"), - ) + !platforms.satisfies(opts.platform, _.map(version.platforms, "type")) ) { return false } diff --git a/package.json b/package.json index 3b583c1..463e2d2 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,7 @@ "scripts": { "start": "node bin/web.js", "dev": "export $(grep -v '^#' .env | xargs) && nodemon bin/web.js", - "test": "mocha --bail --reporter spec --timeout 600000 ./test/all.js", + "test": "export $(grep -v '^#' .env | xargs) && mocha --bail --reporter spec --timeout 600000 ./test/all.js", "lint": "eslint bin lib test" } } From 19bf0cfd6defbb50c1c8fd3994f682c36d96b5fe Mon Sep 17 00:00:00 2001 From: Ben Williams Date: Thu, 18 Mar 2021 15:04:17 -0700 Subject: [PATCH 09/14] small code added back after review --- bin/web.js | 2 +- lib/versions.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/web.js b/bin/web.js index e152cbc..3a8500a 100644 --- a/bin/web.js +++ b/bin/web.js @@ -27,7 +27,7 @@ var myNuts = nuts.Nuts({ timeout: process.env.VERSIONS_TIMEOUT, cache: process.env.VERSIONS_CACHE, refreshSecret: process.env.GITHUB_SECRET, - proxyAssets: !process.env.DONT_PROXY_ASSETS, + proxyAssets: process.env.DONT_PROXY_ASSETS !== "true", }) // Control access to API diff --git a/lib/versions.js b/lib/versions.js index 4965685..49a79c3 100644 --- a/lib/versions.js +++ b/lib/versions.js @@ -66,7 +66,7 @@ function normalizeVersion(release) { .value() return { - tag: normalizeTag(release.tag_name), + tag: normalizeTag(release.tag_name).split("-")[0], channel: extractChannel(release.tag_name), notes: release.body || "", published_at: new Date(release.published_at), From 8eb16b8d55eb7c39ab0591d6b6a0d145fbddb768 Mon Sep 17 00:00:00 2001 From: Ben Williams Date: Thu, 18 Mar 2021 15:07:22 -0700 Subject: [PATCH 10/14] moved linting to its own circleci job --- .circleci/config.yml | 38 ++++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 89ec3ea..4131489 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -23,50 +23,52 @@ commands: - run: name: yarn test command: yarn test - lint: - steps: - - run: - name: yarn lint - command: CI=true yarn lint - install_and_test: steps: - install_and_cache_yarn_linux - run_all_tests - - lint # based on https://github.com/nodejs/Release schedule jobs: - node v10: + Node v10: docker: - image: circleci/node:10 steps: - install_and_test - node v12: + Node v12: docker: - image: circleci/node:12 steps: - install_and_test - node v14: + Node v14: docker: - image: circleci/node:14 steps: - install_and_test - node v14_6: + Node v14_16: docker: - - image: circleci/node:14.6.0 + - image: circleci/node:14.16.0 steps: - install_and_test - node v15: + Node v15: docker: - image: circleci/node:15 steps: - install_and_test + Linting: + docker: + - image: circleci/node:14.16.0 + steps: + - install_and_cache_yarn_linux + - run: + name: yarn lint + command: CI=true yarn lint workflows: main: jobs: - - node v10 - - node v12 - - node v14 - - node v14_6 - - node v15 + - Linting + - Node v10 + - Node v12 + - Node v14 + - Node v14_16 + - Node v15 From c6611cf8d750fbe4929d4c6f648ef1851c1066c4 Mon Sep 17 00:00:00 2001 From: Ben Williams Date: Thu, 18 Mar 2021 15:47:42 -0700 Subject: [PATCH 11/14] moved test folder --- {test => __tests__}/all.js | 0 {test => __tests__}/download.js | 2 +- {test => __tests__}/platforms.js | 0 {test => __tests__}/testing.js | 2 +- {test => __tests__}/update.js | 0 {test => __tests__}/versions.js | 0 {test => __tests__}/win-releases.js | 0 lib/nuts.js | 1 + lib/versions.js | 1 + package.json | 3 +- yarn.lock | 2301 ++++++++++++++++++++++++++- 11 files changed, 2261 insertions(+), 49 deletions(-) rename {test => __tests__}/all.js (100%) rename {test => __tests__}/download.js (96%) rename {test => __tests__}/platforms.js (100%) rename {test => __tests__}/testing.js (83%) rename {test => __tests__}/update.js (100%) rename {test => __tests__}/versions.js (100%) rename {test => __tests__}/win-releases.js (100%) diff --git a/test/all.js b/__tests__/all.js similarity index 100% rename from test/all.js rename to __tests__/all.js diff --git a/test/download.js b/__tests__/download.js similarity index 96% rename from test/download.js rename to __tests__/download.js index f21340b..42154bd 100644 --- a/test/download.js +++ b/__tests__/download.js @@ -15,7 +15,7 @@ describe("Download", function () { agent.get("/").expect(400, done) }) - it("should download windows file", function (done) { + it.only("should download windows file", function (done) { agent .get("/") .set("User-Agent", WIN_USERAGENT) diff --git a/test/platforms.js b/__tests__/platforms.js similarity index 100% rename from test/platforms.js rename to __tests__/platforms.js diff --git a/test/testing.js b/__tests__/testing.js similarity index 83% rename from test/testing.js rename to __tests__/testing.js index e59105d..3371c8d 100644 --- a/test/testing.js +++ b/__tests__/testing.js @@ -1,7 +1,7 @@ var nuts = require("../lib") var config = { - repository: "SamyPesse/nuts-testing", + repository: "biw/nuts-testing-repo", token: process.env.GITHUB_TOKEN, } diff --git a/test/update.js b/__tests__/update.js similarity index 100% rename from test/update.js rename to __tests__/update.js diff --git a/test/versions.js b/__tests__/versions.js similarity index 100% rename from test/versions.js rename to __tests__/versions.js diff --git a/test/win-releases.js b/__tests__/win-releases.js similarity index 100% rename from test/win-releases.js rename to __tests__/win-releases.js diff --git a/lib/nuts.js b/lib/nuts.js index d5ad054..d0fbd4c 100644 --- a/lib/nuts.js +++ b/lib/nuts.js @@ -187,6 +187,7 @@ Nuts.prototype._onDownload = function (req, res, next) { var that = this // If specific version, don't enforce a channel var channel = tag != "latest" ? "*" : req.params.channel + console.log(channel) var platform = req.params.platform var tag = req.params.tag || "latest" var filename = req.params.filename diff --git a/lib/versions.js b/lib/versions.js index 49a79c3..e352e2b 100644 --- a/lib/versions.js +++ b/lib/versions.js @@ -168,6 +168,7 @@ Versions.prototype.filter = function (opts) { Versions.prototype.resolve = function (opts) { return this.filter(opts).then(function (versions) { var version = _.first(versions) + console.log(versions) if (!version) { throw createError(404, "Version not found: " + opts.tag) } diff --git a/package.json b/package.json index 463e2d2..df6d81b 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,7 @@ "eslint-config-prettier": "^8.1.0", "eslint-plugin-prettier": "^3.3.1", "expect": "^26.6.2", + "jest": "^26.6.3", "mocha": "8.3.2", "nodemon": "^2.0.7", "prettier": "^2.2.1", @@ -63,7 +64,7 @@ "scripts": { "start": "node bin/web.js", "dev": "export $(grep -v '^#' .env | xargs) && nodemon bin/web.js", - "test": "export $(grep -v '^#' .env | xargs) && mocha --bail --reporter spec --timeout 600000 ./test/all.js", + "test": "export $(grep -v '^#' .env | xargs) && mocha --bail --reporter spec --timeout 600000 ./__tests__/all.js", "lint": "eslint bin lib test" } } diff --git a/yarn.lock b/yarn.lock index d28fba5..b0e95f0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -21,7 +21,7 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.13.11.tgz#9c8fe523c206979c9a81b1e12fe50c1254f1aa35" integrity sha512-BwKEkO+2a67DcFeS3RLl0Z3Gs2OvdXewuWjc1Hfokhb5eQWP9YRYH1/+VrVZvql2CfjOiNGqSAFOYt4lsqTHzg== -"@babel/core@^7.13.10": +"@babel/core@^7.1.0", "@babel/core@^7.13.10", "@babel/core@^7.7.5": version "7.13.10" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.13.10.tgz#07de050bbd8193fcd8a3c27918c0890613a94559" integrity sha512-bfIYcT0BdKeAZrovpMqX2Mx5NrgAckGbwT982AkdS5GNfn3KMGiprlBAtmBcFZRUmpaufS6WZFP8trvx8ptFDw== @@ -123,6 +123,11 @@ dependencies: "@babel/types" "^7.12.13" +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.8.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz#806526ce125aed03373bc416a828321e3a6a33af" + integrity sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ== + "@babel/helper-replace-supers@^7.13.0": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.13.0.tgz#6034b7b51943094cb41627848cb219cb02be1d24" @@ -175,12 +180,96 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.12.13", "@babel/parser@^7.13.0", "@babel/parser@^7.13.10": +"@babel/parser@^7.1.0", "@babel/parser@^7.12.13", "@babel/parser@^7.13.0", "@babel/parser@^7.13.10": version "7.13.11" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.11.tgz#f93ebfc99d21c1772afbbaa153f47e7ce2f50b88" integrity sha512-PhuoqeHoO9fc4ffMEVk4qb/w/s2iOSWohvbHxLtxui0eBg3Lg5gN1U8wp1V1u61hOWkPQJJyJzGH6Y+grwkq8Q== -"@babel/template@^7.12.13": +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.8.3": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-import-meta@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-top-level-await@^7.8.3": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz#c5f0fa6e249f5b739727f923540cf7a806130178" + integrity sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/template@^7.12.13", "@babel/template@^7.3.3": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.13.tgz#530265be8a2589dbb37523844c5bcb55947fb327" integrity sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA== @@ -189,7 +278,7 @@ "@babel/parser" "^7.12.13" "@babel/types" "^7.12.13" -"@babel/traverse@^7.13.0": +"@babel/traverse@^7.1.0", "@babel/traverse@^7.13.0": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.13.0.tgz#6d95752475f86ee7ded06536de309a65fc8966cc" integrity sha512-xys5xi5JEhzC3RzEmSGrs/b3pJW/o87SypZ+G/PhaE7uqVQNv/jlmVIBXuoh5atqQ434LfXV+sf23Oxj0bchJQ== @@ -204,7 +293,7 @@ globals "^11.1.0" lodash "^4.17.19" -"@babel/types@^7.12.13", "@babel/types@^7.13.0": +"@babel/types@^7.0.0", "@babel/types@^7.12.13", "@babel/types@^7.13.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.0.tgz#74424d2816f0171b4100f0ab34e9a374efdf7f80" integrity sha512-hE+HE8rnG1Z6Wzo+MhaKE5lM5eMx71T4EHJgku2E3xIfaULhDcxiiRxUYgwX8qwP1BBSlag+TdGOt6JAidIZTA== @@ -213,6 +302,19 @@ lodash "^4.17.19" to-fast-properties "^2.0.0" +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + +"@cnakazawa/watch@^1.0.3": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" + integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== + dependencies: + exec-sh "^0.3.2" + minimist "^1.2.0" + "@eslint/eslintrc@^0.4.0": version "0.4.0" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.0.tgz#99cc0a0584d72f1df38b900fb062ba995f395547" @@ -228,6 +330,182 @@ minimatch "^3.0.4" strip-json-comments "^3.1.1" +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + dependencies: + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + +"@istanbuljs/schema@^0.1.2": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jest/console@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.6.2.tgz#4e04bc464014358b03ab4937805ee36a0aeb98f2" + integrity sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g== + dependencies: + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^26.6.2" + jest-util "^26.6.2" + slash "^3.0.0" + +"@jest/core@^26.6.3": + version "26.6.3" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.6.3.tgz#7639fcb3833d748a4656ada54bde193051e45fad" + integrity sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw== + dependencies: + "@jest/console" "^26.6.2" + "@jest/reporters" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.4" + jest-changed-files "^26.6.2" + jest-config "^26.6.3" + jest-haste-map "^26.6.2" + jest-message-util "^26.6.2" + jest-regex-util "^26.0.0" + jest-resolve "^26.6.2" + jest-resolve-dependencies "^26.6.3" + jest-runner "^26.6.3" + jest-runtime "^26.6.3" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" + jest-watcher "^26.6.2" + micromatch "^4.0.2" + p-each-series "^2.1.0" + rimraf "^3.0.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/environment@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.6.2.tgz#ba364cc72e221e79cc8f0a99555bf5d7577cf92c" + integrity sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA== + dependencies: + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + jest-mock "^26.6.2" + +"@jest/fake-timers@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.6.2.tgz#459c329bcf70cee4af4d7e3f3e67848123535aad" + integrity sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA== + dependencies: + "@jest/types" "^26.6.2" + "@sinonjs/fake-timers" "^6.0.1" + "@types/node" "*" + jest-message-util "^26.6.2" + jest-mock "^26.6.2" + jest-util "^26.6.2" + +"@jest/globals@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.6.2.tgz#5b613b78a1aa2655ae908eba638cc96a20df720a" + integrity sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA== + dependencies: + "@jest/environment" "^26.6.2" + "@jest/types" "^26.6.2" + expect "^26.6.2" + +"@jest/reporters@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.6.2.tgz#1f518b99637a5f18307bd3ecf9275f6882a667f6" + integrity sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.2" + graceful-fs "^4.2.4" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^4.0.3" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.0.2" + jest-haste-map "^26.6.2" + jest-resolve "^26.6.2" + jest-util "^26.6.2" + jest-worker "^26.6.2" + slash "^3.0.0" + source-map "^0.6.0" + string-length "^4.0.1" + terminal-link "^2.0.0" + v8-to-istanbul "^7.0.0" + optionalDependencies: + node-notifier "^8.0.0" + +"@jest/source-map@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.6.2.tgz#29af5e1e2e324cafccc936f218309f54ab69d535" + integrity sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA== + dependencies: + callsites "^3.0.0" + graceful-fs "^4.2.4" + source-map "^0.6.0" + +"@jest/test-result@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.6.2.tgz#55da58b62df134576cc95476efa5f7949e3f5f18" + integrity sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ== + dependencies: + "@jest/console" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^26.6.3": + version "26.6.3" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz#98e8a45100863886d074205e8ffdc5a7eb582b17" + integrity sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw== + dependencies: + "@jest/test-result" "^26.6.2" + graceful-fs "^4.2.4" + jest-haste-map "^26.6.2" + jest-runner "^26.6.3" + jest-runtime "^26.6.3" + +"@jest/transform@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.6.2.tgz#5ac57c5fa1ad17b2aae83e73e45813894dcf2e4b" + integrity sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA== + dependencies: + "@babel/core" "^7.1.0" + "@jest/types" "^26.6.2" + babel-plugin-istanbul "^6.0.0" + chalk "^4.0.0" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.2.4" + jest-haste-map "^26.6.2" + jest-regex-util "^26.0.0" + jest-util "^26.6.2" + micromatch "^4.0.2" + pirates "^4.0.1" + slash "^3.0.0" + source-map "^0.6.1" + write-file-atomic "^3.0.0" + "@jest/types@^26.6.2": version "26.6.2" resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" @@ -244,6 +522,20 @@ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== +"@sinonjs/commons@^1.7.0": + version "1.8.2" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.2.tgz#858f5c4b48d80778fde4b9d541f27edc0d56488b" + integrity sha512-sruwd86RJHdsVf/AtBoijDmUqJp3B6hF/DGC23C+JaegnDHaZyewCjoVGTdg3J0uz3Zs7NnIT05OBOmML72lQw== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz#293674fccb3262ac782c7aadfdeca86b10c75c40" + integrity sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA== + dependencies: + "@sinonjs/commons" "^1.7.0" + "@szmarczak/http-timer@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" @@ -251,12 +543,52 @@ dependencies: defer-to-connect "^1.0.1" +"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": + version "7.1.13" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.13.tgz#bc6eea53975fdf163aff66c086522c6f293ae4cf" + integrity sha512-CC6amBNND16pTk4K3ZqKIaba6VGKAQs3gMjEY17FVd56oI/ZWt9OhS6riYiWv9s8ENbYUi7p8lgqb0QHQvUKQQ== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.2.tgz#f3d71178e187858f7c45e30380f8f1b7415a12d8" + integrity sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.0.tgz#0c888dd70b3ee9eebb6e4f200e809da0076262be" + integrity sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": + version "7.11.1" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.11.1.tgz#654f6c4f67568e24c23b367e947098c6206fa639" + integrity sha512-Vs0hm0vPahPMYi9tDjtP66llufgO3ST16WXaSTtDGEl9cewAl3AibmxWw6TINOqHPT9z0uABKAYjT9jNSg4npw== + dependencies: + "@babel/types" "^7.3.0" + "@types/eslint-visitor-keys@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": +"@types/graceful-fs@^4.1.2": + version "4.1.5" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" + integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== + dependencies: + "@types/node" "*" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": version "2.0.3" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw== @@ -285,6 +617,16 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.35.tgz#42c953a4e2b18ab931f72477e7012172f4ffa313" integrity sha512-Lt+wj8NVPx0zUmUwumiVXapmaLUcAk3yPuHCFVXras9k5VT9TdhJqKqGVUQCD60OTMCl0qxJ57OiTL0Mic3Iag== +"@types/normalize-package-data@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" + integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== + +"@types/prettier@^2.0.0": + version "2.2.3" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.2.3.tgz#ef65165aea2924c9359205bf748865b8881753c0" + integrity sha512-PijRCG/K3s3w1We6ynUKdxEc5AcuuH3NBmMDP8uvKVp6X43UY7NQlTzczakXP3DJR0F4dfNQIGjU2cUeRYs2AA== + "@types/stack-utils@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.0.tgz#7036640b4e21cc2f259ae826ce843d277dad8cff" @@ -334,6 +676,11 @@ resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== +abab@^2.0.3, abab@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" + integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== + abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" @@ -347,6 +694,14 @@ accepts@~1.3.7: mime-types "~2.1.24" negotiator "0.6.2" +acorn-globals@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" + integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== + dependencies: + acorn "^7.1.1" + acorn-walk "^7.1.1" + acorn-jsx@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" @@ -359,6 +714,11 @@ acorn-jsx@^5.0.0, acorn-jsx@^5.3.1: resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== +acorn-walk@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" + integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== + acorn@^3.0.4: version "3.3.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" @@ -374,11 +734,16 @@ acorn@^6.0.7: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== -acorn@^7.4.0: +acorn@^7.1.1, acorn@^7.4.0: version "7.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== +acorn@^8.0.5: + version "8.1.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.1.0.tgz#52311fd7037ae119cbb134309e901aa46295b3fe" + integrity sha512-LWCF/Wn0nfHOmJ9rzQApGnxnvgfROzGilS8936rqN/lfcYkY9MYZzdMqN+2NJ4SlTc+m5HiSa+kNfDtI64dwUA== + agent-base@4, agent-base@^4.1.0, agent-base@^4.2.0, agent-base@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" @@ -439,6 +804,13 @@ ansi-escapes@^3.2.0: resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== +ansi-escapes@^4.2.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" + integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== + dependencies: + type-fest "^0.11.0" + ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -478,7 +850,15 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" -anymatch@~3.1.1: +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +anymatch@^3.0.3, anymatch@~3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== @@ -498,11 +878,31 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + arrify@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" @@ -530,6 +930,11 @@ assert-plus@^0.1.5: resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.1.5.tgz#ee74009413002d84cec7219c6ac811812e723160" integrity sha1-7nQAlBMALYTOxyGcasgRgS5yMWA= +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + ast-types@0.x.x: version "0.14.2" resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.14.2.tgz#600b882df8583e3cd4f2df5fa20fa83759d4bdfd" @@ -564,6 +969,11 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + aws-sign2@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.5.0.tgz#c57103f7a17fc037f02d7c2e64b602ea223f7d63" @@ -579,6 +989,67 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== +babel-jest@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056" + integrity sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA== + dependencies: + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/babel__core" "^7.1.7" + babel-plugin-istanbul "^6.0.0" + babel-preset-jest "^26.6.2" + chalk "^4.0.0" + graceful-fs "^4.2.4" + slash "^3.0.0" + +babel-plugin-istanbul@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765" + integrity sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^4.0.0" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz#8185bd030348d254c6d7dd974355e6a28b21e62d" + integrity sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.0.0" + "@types/babel__traverse" "^7.0.6" + +babel-preset-current-node-syntax@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" + integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.8.3" + "@babel/plugin-syntax-import-meta" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-top-level-await" "^7.8.3" + +babel-preset-jest@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz#747872b1171df032252426586881d62d31798fee" + integrity sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ== + dependencies: + babel-plugin-jest-hoist "^26.6.2" + babel-preset-current-node-syntax "^1.0.0" + balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" @@ -589,6 +1060,19 @@ base64-js@^1.3.1: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + basic-auth@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-1.0.3.tgz#41f55523e589405038ee3567958c62a5ed70551a" @@ -690,6 +1174,22 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +braces@^2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + braces@^3.0.1, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" @@ -697,6 +1197,11 @@ braces@^3.0.1, braces@~3.0.2: dependencies: fill-range "^7.0.1" +browser-process-hrtime@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" + integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== + browser-stdout@1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" @@ -713,6 +1218,18 @@ browserslist@^4.14.5: escalade "^3.1.1" node-releases "^1.1.70" +bser@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + buffer@^5.1.0: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" @@ -731,6 +1248,21 @@ bytes@3.1.0: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + cacheable-request@^6.0.0: version "6.1.0" resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" @@ -773,6 +1305,13 @@ caniuse-lite@^1.0.30001181: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001202.tgz#4cb3bd5e8a808e8cd89e4e66c549989bc8137201" integrity sha512-ZcijQNqrcF8JNLjzvEiXqX4JUYxoZa7Pvcsd9UD8Kz4TvhTonOSNRsK+qtvpVL4l6+T1Rh4LFtLfnNWg6BGWCQ== +capture-exit@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" + integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== + dependencies: + rsvp "^4.8.4" + caseless@~0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" @@ -819,6 +1358,11 @@ chalk@^4.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" @@ -844,6 +1388,21 @@ ci-info@^2.0.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== +cjs-module-lexer@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz#4186fcca0eae175970aee870b9fe2d6cf8d5655f" + integrity sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw== + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + cli-boxes@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" @@ -870,6 +1429,15 @@ cliui@^5.0.0: strip-ansi "^5.2.0" wrap-ansi "^5.1.0" +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" + cliui@^7.0.2: version "7.0.4" resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" @@ -896,6 +1464,19 @@ co@^4.6.0: resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= +collect-v8-coverage@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" + integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -942,7 +1523,7 @@ common-tags@^1.4.0, common-tags@^1.8.0: resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937" integrity sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw== -component-emitter@^1.2.0: +component-emitter@^1.2.0, component-emitter@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== @@ -981,7 +1562,7 @@ content-type@~1.0.1, content-type@~1.0.4: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== -convert-source-map@^1.7.0: +convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== @@ -1003,6 +1584,11 @@ cookiejar@^2.0.6, cookiejar@^2.1.0: resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.2.tgz#dd8a235530752f988f9a0844f3fc589e3111125c" integrity sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA== +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + core-js@^3.1.4: version "3.9.1" resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.9.1.tgz#cec8de593db8eb2a85ffb0dbdeb312cb6e5460ae" @@ -1020,7 +1606,7 @@ crc@^3.4.0: dependencies: buffer "^5.1.0" -cross-spawn@^6.0.5: +cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== @@ -1031,7 +1617,7 @@ cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^7.0.2: +cross-spawn@^7.0.0, cross-spawn@^7.0.2: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -1057,6 +1643,23 @@ crypto-token@^1.0.1: resolved "https://registry.yarnpkg.com/crypto-token/-/crypto-token-1.0.1.tgz#27c6482faf3b63c2f5da11577f8304346fe797a5" integrity sha1-J8ZIL687Y8L12hFXf4MENG/nl6U= +cssom@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" + integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== + +cssom@~0.3.6: + version "0.3.8" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== + +cssstyle@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" + integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== + dependencies: + cssom "~0.3.6" + ctype@0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/ctype/-/ctype-0.5.3.tgz#82c18c2461f74114ef16c135224ad0b9144ca12f" @@ -1074,7 +1677,16 @@ data-uri-to-buffer@1: resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-1.2.0.tgz#77163ea9c20d8641b4707e8f18abdf9a78f34835" integrity sha512-vKQ9DTQPN1FLYiiEEOQ6IBGFqvjCa5rSK3cWMy/Nespm5d/x3dGFT9UBZnkLxCwua/IXBi2TYnwTEpsOvhC4UQ== -debug@2, debug@2.6.9, debug@^2.2.0: +data-urls@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" + integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== + dependencies: + abab "^2.0.3" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.0.0" + +debug@2, debug@2.6.9, debug@^2.2.0, debug@^2.3.3: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -1119,6 +1731,16 @@ decamelize@^4.0.0: resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== +decimal.js@^10.2.1: + version "10.2.1" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.2.1.tgz#238ae7b0f0c793d3e3cea410108b35a2c01426a3" + integrity sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw== + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + decompress-response@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" @@ -1136,11 +1758,38 @@ deep-is@^0.1.3, deep-is@~0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= +deepmerge@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + defer-to-connect@^1.0.1: version "1.1.3" resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + degenerator@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-1.0.4.tgz#fcf490a37ece266464d9cc431ab98c5819ced095" @@ -1170,6 +1819,11 @@ destroy@1.0.4, destroy@^1.0.4, destroy@~1.0.4: resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= +detect-newline@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + diff-sequences@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" @@ -1192,6 +1846,13 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" +domexception@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" + integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== + dependencies: + webidl-conversions "^5.0.0" + dot-prop@^5.2.0: version "5.3.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" @@ -1232,6 +1893,11 @@ electron-to-chromium@^1.3.649: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.690.tgz#54df63ec42fba6b8e9e05fe4be52caeeedb6e634" integrity sha512-zPbaSv1c8LUKqQ+scNxJKv01RYFkVVF1xli+b+3Ty8ONujHjAMg+t/COmdZqrtnS1gT+g4hbSodHillymt1Lww== +emittery@^0.7.1: + version "0.7.2" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.7.2.tgz#25595908e13af0f5674ab419396e2fb394cdfa82" + integrity sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ== + emoji-regex@^7.0.1: version "7.0.3" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" @@ -1261,6 +1927,13 @@ enquirer@^2.3.5: dependencies: ansi-colors "^4.1.1" +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + es6-promise@^4.0.3: version "4.2.8" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" @@ -1315,6 +1988,18 @@ escodegen@1.x.x: optionalDependencies: source-map "~0.6.1" +escodegen@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" + integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== + dependencies: + esprima "^4.0.1" + estraverse "^5.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + eslint-config-prettier@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.1.0.tgz#4ef1eaf97afe5176e6a75ddfb57c335121abc5a6" @@ -1538,6 +2223,57 @@ etag@~1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= +exec-sh@^0.3.2: + version "0.3.4" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5" + integrity sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A== + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" + integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + expect@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/expect/-/expect-26.6.2.tgz#c6b996bf26bf3fe18b67b2d0f51fc981ba934417" @@ -1591,8 +2327,23 @@ express@^4.13.3: utils-merge "1.0.1" vary "~1.1.2" -extend@^3.0.0, extend@~3.0.0, extend@~3.0.2: - version "3.0.2" +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@^3.0.0, extend@~3.0.0, extend@~3.0.2: + version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== @@ -1605,6 +2356,20 @@ external-editor@^3.0.3: iconv-lite "^0.4.24" tmp "^0.0.33" +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + extsprintf@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" @@ -1635,6 +2400,13 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= +fb-watchman@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" + integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== + dependencies: + bser "2.1.1" + feed@^0.3.0: version "0.3.1" resolved "https://registry.yarnpkg.com/feed/-/feed-0.3.1.tgz#a79f111d0c57e9a9b626ebd606e259f72e6af66c" @@ -1668,6 +2440,16 @@ file-uri-to-path@1: resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -1703,7 +2485,7 @@ find-up@^3.0.0: dependencies: locate-path "^3.0.0" -find-up@^4.1.0: +find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== @@ -1750,6 +2532,11 @@ flatted@^3.1.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469" integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + forever-agent@~0.6.0, forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -1801,6 +2588,13 @@ forwarded@~0.1.2: resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" @@ -1817,7 +2611,12 @@ fs-extra@^0.26.5: path-is-absolute "^1.0.0" rimraf "^2.2.8" -fsevents@~2.3.1: +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@^2.1.2, fsevents@~2.3.1: version "2.3.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== @@ -1837,6 +2636,11 @@ ftp@~0.3.10: readable-stream "1.1.x" xregexp "2.0.0" +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" @@ -1866,19 +2670,24 @@ get-caller-file@^2.0.1, get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + get-stdin@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-7.0.0.tgz#8d5de98f15171a125c5e516643c7a6d0ea8a96f6" integrity sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ== -get-stream@^4.1.0: +get-stream@^4.0.0, get-stream@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== dependencies: pump "^3.0.0" -get-stream@^5.1.0: +get-stream@^5.0.0, get-stream@^5.1.0: version "5.2.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== @@ -1897,6 +2706,11 @@ get-uri@^2.0.0: ftp "~0.3.10" readable-stream "2" +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" @@ -1918,7 +2732,7 @@ glob-parent@^5.0.0, glob-parent@~5.1.0: dependencies: is-glob "^4.0.1" -glob@7.1.6, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: +glob@7.1.6, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -1983,6 +2797,11 @@ growl@1.10.5: resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== +growly@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= + har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" @@ -2023,11 +2842,49 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + has-yarn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + hawk@~3.1.0: version "3.1.3" resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" @@ -2048,6 +2905,23 @@ hoek@2.x.x: resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" integrity sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0= +hosted-git-info@^2.1.4: + version "2.8.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" + integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== + +html-encoding-sniffer@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" + integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== + dependencies: + whatwg-encoding "^1.0.5" + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + http-cache-semantics@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" @@ -2120,6 +2994,11 @@ https-proxy-agent@^2.2.1: agent-base "^4.3.0" debug "^3.1.0" +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -2165,6 +3044,14 @@ import-lazy@^2.1.0: resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= +import-local@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" + integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -2175,16 +3062,24 @@ indent-string@^4.0.0: resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== -inherits@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" -inherits@2.0.4, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + ini@1.3.7: version "1.3.7" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84" @@ -2229,6 +3124,25 @@ is-absolute-url@^2.1.0: resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" @@ -2236,6 +3150,11 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + is-ci@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" @@ -2243,6 +3162,62 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" +is-core-module@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" + integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== + dependencies: + has "^1.0.3" + +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" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-docker@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.1.1.tgz#4125a88e44e450d384e09047ede71adc2d144156" + integrity sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw== + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -2258,6 +3233,11 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" @@ -2294,6 +3274,13 @@ is-npm@^4.0.0: resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-4.0.0.tgz#c90dd8380696df87a7a6d823c20d0b12bbe3c84d" integrity sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig== +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" @@ -2314,11 +3301,33 @@ is-plain-obj@^2.1.0: resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-potential-custom-element-name@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz#0c52e54bcca391bb2c494b21e8626d7336c6e397" + integrity sha1-DFLlS8yjkbssSUsh6GJtczbG45c= + is-property@^1.0.0, is-property@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" integrity sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ= +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" @@ -2329,6 +3338,18 @@ is-utf8@^0.2.0: resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + is-yarn-global@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" @@ -2339,7 +3360,7 @@ isarray@0.0.1: resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= -isarray@~1.0.0: +isarray@1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= @@ -2349,11 +3370,116 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + isstream@~0.1.1, isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= +istanbul-lib-coverage@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" + integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== + +istanbul-lib-instrument@^4.0.0, istanbul-lib-instrument@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" + integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== + dependencies: + "@babel/core" "^7.7.5" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.0.0" + semver "^6.3.0" + +istanbul-lib-report@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" + integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^3.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9" + integrity sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.2.tgz#d593210e5000683750cb09fc0644e4b6e27fd53b" + integrity sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +jest-changed-files@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.6.2.tgz#f6198479e1cc66f22f9ae1e22acaa0b429c042d0" + integrity sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ== + dependencies: + "@jest/types" "^26.6.2" + execa "^4.0.0" + throat "^5.0.0" + +jest-cli@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.6.3.tgz#43117cfef24bc4cd691a174a8796a532e135e92a" + integrity sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg== + dependencies: + "@jest/core" "^26.6.3" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.4" + import-local "^3.0.2" + is-ci "^2.0.0" + jest-config "^26.6.3" + jest-util "^26.6.2" + jest-validate "^26.6.2" + prompts "^2.0.1" + yargs "^15.4.1" + +jest-config@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.6.3.tgz#64f41444eef9eb03dc51d5c53b75c8c71f645349" + integrity sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg== + dependencies: + "@babel/core" "^7.1.0" + "@jest/test-sequencer" "^26.6.3" + "@jest/types" "^26.6.2" + babel-jest "^26.6.3" + chalk "^4.0.0" + deepmerge "^4.2.2" + glob "^7.1.1" + graceful-fs "^4.2.4" + jest-environment-jsdom "^26.6.2" + jest-environment-node "^26.6.2" + jest-get-type "^26.3.0" + jest-jasmine2 "^26.6.3" + jest-regex-util "^26.0.0" + jest-resolve "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" + micromatch "^4.0.2" + pretty-format "^26.6.2" + jest-diff@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" @@ -2364,11 +3490,107 @@ jest-diff@^26.6.2: jest-get-type "^26.3.0" pretty-format "^26.6.2" +jest-docblock@^26.0.0: + version "26.0.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-26.0.0.tgz#3e2fa20899fc928cb13bd0ff68bd3711a36889b5" + integrity sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w== + dependencies: + detect-newline "^3.0.0" + +jest-each@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.6.2.tgz#02526438a77a67401c8a6382dfe5999952c167cb" + integrity sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A== + dependencies: + "@jest/types" "^26.6.2" + chalk "^4.0.0" + jest-get-type "^26.3.0" + jest-util "^26.6.2" + pretty-format "^26.6.2" + +jest-environment-jsdom@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz#78d09fe9cf019a357009b9b7e1f101d23bd1da3e" + integrity sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q== + dependencies: + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + jest-mock "^26.6.2" + jest-util "^26.6.2" + jsdom "^16.4.0" + +jest-environment-node@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.6.2.tgz#824e4c7fb4944646356f11ac75b229b0035f2b0c" + integrity sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag== + dependencies: + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + jest-mock "^26.6.2" + jest-util "^26.6.2" + jest-get-type@^26.3.0: version "26.3.0" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== +jest-haste-map@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa" + integrity sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w== + dependencies: + "@jest/types" "^26.6.2" + "@types/graceful-fs" "^4.1.2" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.4" + jest-regex-util "^26.0.0" + jest-serializer "^26.6.2" + jest-util "^26.6.2" + jest-worker "^26.6.2" + micromatch "^4.0.2" + sane "^4.0.3" + walker "^1.0.7" + optionalDependencies: + fsevents "^2.1.2" + +jest-jasmine2@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz#adc3cf915deacb5212c93b9f3547cd12958f2edd" + integrity sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg== + dependencies: + "@babel/traverse" "^7.1.0" + "@jest/environment" "^26.6.2" + "@jest/source-map" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + expect "^26.6.2" + is-generator-fn "^2.0.0" + jest-each "^26.6.2" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-runtime "^26.6.3" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + pretty-format "^26.6.2" + throat "^5.0.0" + +jest-leak-detector@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz#7717cf118b92238f2eba65054c8a0c9c653a91af" + integrity sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg== + dependencies: + jest-get-type "^26.3.0" + pretty-format "^26.6.2" + jest-matcher-utils@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz#8e6fd6e863c8b2d31ac6472eeb237bc595e53e7a" @@ -2394,11 +3616,191 @@ jest-message-util@^26.6.2: slash "^3.0.0" stack-utils "^2.0.2" +jest-mock@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.6.2.tgz#d6cb712b041ed47fe0d9b6fc3474bc6543feb302" + integrity sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew== + dependencies: + "@jest/types" "^26.6.2" + "@types/node" "*" + +jest-pnp-resolver@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" + integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== + jest-regex-util@^26.0.0: version "26.0.0" resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== +jest-resolve-dependencies@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz#6680859ee5d22ee5dcd961fe4871f59f4c784fb6" + integrity sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg== + dependencies: + "@jest/types" "^26.6.2" + jest-regex-util "^26.0.0" + jest-snapshot "^26.6.2" + +jest-resolve@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.6.2.tgz#a3ab1517217f469b504f1b56603c5bb541fbb507" + integrity sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ== + dependencies: + "@jest/types" "^26.6.2" + chalk "^4.0.0" + graceful-fs "^4.2.4" + jest-pnp-resolver "^1.2.2" + jest-util "^26.6.2" + read-pkg-up "^7.0.1" + resolve "^1.18.1" + slash "^3.0.0" + +jest-runner@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.6.3.tgz#2d1fed3d46e10f233fd1dbd3bfaa3fe8924be159" + integrity sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ== + dependencies: + "@jest/console" "^26.6.2" + "@jest/environment" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.7.1" + exit "^0.1.2" + graceful-fs "^4.2.4" + jest-config "^26.6.3" + jest-docblock "^26.0.0" + jest-haste-map "^26.6.2" + jest-leak-detector "^26.6.2" + jest-message-util "^26.6.2" + jest-resolve "^26.6.2" + jest-runtime "^26.6.3" + jest-util "^26.6.2" + jest-worker "^26.6.2" + source-map-support "^0.5.6" + throat "^5.0.0" + +jest-runtime@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.6.3.tgz#4f64efbcfac398331b74b4b3c82d27d401b8fa2b" + integrity sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw== + dependencies: + "@jest/console" "^26.6.2" + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/globals" "^26.6.2" + "@jest/source-map" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/yargs" "^15.0.0" + chalk "^4.0.0" + cjs-module-lexer "^0.6.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.2.4" + jest-config "^26.6.3" + jest-haste-map "^26.6.2" + jest-message-util "^26.6.2" + jest-mock "^26.6.2" + jest-regex-util "^26.0.0" + jest-resolve "^26.6.2" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" + slash "^3.0.0" + strip-bom "^4.0.0" + yargs "^15.4.1" + +jest-serializer@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.6.2.tgz#d139aafd46957d3a448f3a6cdabe2919ba0742d1" + integrity sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g== + dependencies: + "@types/node" "*" + graceful-fs "^4.2.4" + +jest-snapshot@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.6.2.tgz#f3b0af1acb223316850bd14e1beea9837fb39c84" + integrity sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og== + dependencies: + "@babel/types" "^7.0.0" + "@jest/types" "^26.6.2" + "@types/babel__traverse" "^7.0.4" + "@types/prettier" "^2.0.0" + chalk "^4.0.0" + expect "^26.6.2" + graceful-fs "^4.2.4" + jest-diff "^26.6.2" + jest-get-type "^26.3.0" + jest-haste-map "^26.6.2" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-resolve "^26.6.2" + natural-compare "^1.4.0" + pretty-format "^26.6.2" + semver "^7.3.2" + +jest-util@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" + integrity sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q== + dependencies: + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + graceful-fs "^4.2.4" + is-ci "^2.0.0" + micromatch "^4.0.2" + +jest-validate@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.6.2.tgz#23d380971587150467342911c3d7b4ac57ab20ec" + integrity sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ== + dependencies: + "@jest/types" "^26.6.2" + camelcase "^6.0.0" + chalk "^4.0.0" + jest-get-type "^26.3.0" + leven "^3.1.0" + pretty-format "^26.6.2" + +jest-watcher@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.6.2.tgz#a5b683b8f9d68dbcb1d7dae32172d2cca0592975" + integrity sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ== + dependencies: + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + jest-util "^26.6.2" + string-length "^4.0.1" + +jest-worker@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" + integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^7.0.0" + +jest@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest/-/jest-26.6.3.tgz#40e8fdbe48f00dfa1f0ce8121ca74b88ac9148ef" + integrity sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q== + dependencies: + "@jest/core" "^26.6.3" + import-local "^3.0.2" + jest-cli "^26.6.3" + join-component@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/join-component/-/join-component-1.1.0.tgz#b8417b750661a392bee2c2537c68b2a9d4977cd5" @@ -2434,6 +3836,38 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= +jsdom@^16.4.0: + version "16.5.1" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.5.1.tgz#4ced6bbd7b77d67fb980e64d9e3e6fb900f97dd6" + integrity sha512-pF73EOsJgwZekbDHEY5VO/yKXUkab/DuvrQB/ANVizbr6UAHJsDdHXuotZYwkJSGQl1JM+ivXaqY+XBDDL4TiA== + dependencies: + abab "^2.0.5" + acorn "^8.0.5" + acorn-globals "^6.0.0" + cssom "^0.4.4" + cssstyle "^2.3.0" + data-urls "^2.0.0" + decimal.js "^10.2.1" + domexception "^2.0.1" + escodegen "^2.0.0" + html-encoding-sniffer "^2.0.1" + is-potential-custom-element-name "^1.0.0" + nwsapi "^2.2.0" + parse5 "6.0.1" + request "^2.88.2" + request-promise-native "^1.0.9" + saxes "^5.0.1" + symbol-tree "^3.2.4" + tough-cookie "^4.0.0" + w3c-hr-time "^1.0.2" + w3c-xmlserializer "^2.0.0" + webidl-conversions "^6.1.0" + whatwg-encoding "^1.0.5" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.0.0" + ws "^7.4.4" + xml-name-validator "^3.0.0" + jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" @@ -2444,6 +3878,11 @@ json-buffer@3.0.0: resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -2505,6 +3944,30 @@ keyv@^3.0.0: dependencies: json-buffer "3.0.0" +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + klaw@^1.0.0: version "1.3.1" resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" @@ -2512,6 +3975,11 @@ klaw@^1.0.0: optionalDependencies: graceful-fs "^4.1.9" +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + latest-version@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" @@ -2526,6 +3994,11 @@ length-stream@^0.1.1: dependencies: pass-stream "~0.1.0" +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + levn@^0.3.0, levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" @@ -2542,6 +4015,11 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" +lines-and-columns@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" + integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= + locate-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" @@ -2574,6 +4052,11 @@ lodash.merge@^4.6.0: resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= + lodash.unescape@4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c" @@ -2661,11 +4144,30 @@ make-plural@^4.3.0: optionalDependencies: minimist "^1.2.0" +makeerror@1.0.x: + version "1.0.11" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" + integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= + dependencies: + tmpl "1.0.x" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + map-obj@^4.0.0: version "4.2.0" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.2.0.tgz#0e8bc823e2aaca8a0942567d12ed14f389eec153" integrity sha512-NAq0fCmZYGz9UFEQyndp7sisrow4GroyGeKluyKC/chuITZsPyOyC1UJZPJlVFImhXdROIP5xqouRLThT3BbpQ== +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" @@ -2676,6 +4178,11 @@ merge-descriptors@1.0.1: resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + messageformat-formatters@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/messageformat-formatters/-/messageformat-formatters-2.0.1.tgz#0492c1402a48775f751c9b17c0354e92be012b08" @@ -2700,6 +4207,25 @@ methods@1.x, methods@^1.1.1, methods@~1.1.2: resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= +micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + micromatch@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" @@ -2742,6 +4268,11 @@ mimic-fn@^1.0.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + mimic-response@^1.0.0, mimic-response@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" @@ -2754,11 +4285,19 @@ minimatch@3.0.4, minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -minimist@^1.2.0, minimist@^1.2.5: +minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + mkdirp@^0.5.1: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" @@ -2832,6 +4371,23 @@ nanoid@3.1.20: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.20.tgz#badc263c6b1dcf14b71efaa85f6ab4c1d6cfc788" integrity sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw== +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -2852,6 +4408,28 @@ nice-try@^1.0.4: resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= + +node-modules-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" + integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= + +node-notifier@^8.0.0: + version "8.0.2" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.2.tgz#f3167a38ef0d2c8a866a83e318c1ba0efeb702c5" + integrity sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg== + dependencies: + growly "^1.3.0" + is-wsl "^2.2.0" + semver "^7.3.2" + shellwords "^0.1.1" + uuid "^8.3.0" + which "^2.0.2" + node-releases@^1.1.70: version "1.1.71" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.71.tgz#cb1334b179896b1c89ecfdd4b725fb7bbdfc7dbb" @@ -2885,6 +4463,23 @@ nopt@~1.0.10: dependencies: abbrev "1" +normalize-package-data@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" @@ -2895,6 +4490,25 @@ normalize-url@^4.1.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +npm-run-path@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +nwsapi@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" + integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== + oauth-sign@~0.8.0: version "0.8.2" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" @@ -2905,11 +4519,34 @@ oauth-sign@~0.9.0: resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + object-keys@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" integrity sha1-KKaq50KN0sOpLz2V8hM13SBOAzY= +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + octocat@0.12.1: version "0.12.1" resolved "https://registry.yarnpkg.com/octocat/-/octocat-0.12.1.tgz#47424658417401ea0bd7963aca6b6e71778b0a34" @@ -2938,7 +4575,7 @@ on-finished@~2.3.0: dependencies: ee-first "1.1.1" -once@^1.3.1, once@^1.4.0: +once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= @@ -2952,6 +4589,13 @@ onetime@^2.0.0: dependencies: mimic-fn "^1.0.0" +onetime@^5.1.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + optionator@^0.8.1, optionator@^0.8.2: version "0.8.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" @@ -2986,6 +4630,16 @@ p-cancelable@^1.0.0: resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== +p-each-series@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" + integrity sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA== + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + p-limit@^2.0.0, p-limit@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" @@ -3068,11 +4722,31 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" +parse-json@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +parse5@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + pass-stream@~0.1.0: version "0.1.5" resolved "https://registry.yarnpkg.com/pass-stream/-/pass-stream-0.1.5.tgz#9e3afa4d5825cdd1376075bdb56de36dfb33649f" @@ -3100,16 +4774,21 @@ path-is-inside@^1.0.2: resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= -path-key@^2.0.1: +path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= -path-key@^3.1.0: +path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" @@ -3125,6 +4804,25 @@ picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== +pirates@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" + integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== + dependencies: + node-modules-regexp "^1.0.0" + +pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -3241,6 +4939,14 @@ progress@^2.0.0: resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== +prompts@^2.0.1: + version "2.4.0" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.0.tgz#4aa5de0723a231d1ee9121c40fdf663df73f61d7" + integrity sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + proxy-addr@~2.0.5: version "2.0.6" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" @@ -3403,6 +5109,25 @@ react-is@^17.0.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.1.tgz#5b3531bd76a645a4c9fb6e693ed36419e3301339" integrity sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA== +read-pkg-up@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== + dependencies: + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" + +read-pkg@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" + readable-stream@1.1.x, readable-stream@~1.1.9: version "1.1.14" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" @@ -3459,6 +5184,14 @@ readdirp@~3.5.0: dependencies: picomatch "^2.2.1" +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + regexpp@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" @@ -3483,6 +5216,37 @@ registry-url@^5.0.0: dependencies: rc "^1.2.8" +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +repeat-element@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +request-promise-core@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" + integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw== + dependencies: + lodash "^4.17.19" + +request-promise-native@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" + integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== + dependencies: + request-promise-core "1.1.4" + stealthy-require "^1.1.1" + tough-cookie "^2.3.3" + request@2.64.0: version "2.64.0" resolved "https://registry.yarnpkg.com/request/-/request-2.64.0.tgz#96a582423ce9b4b5c34e9b232e480173f14ba608" @@ -3508,7 +5272,7 @@ request@2.64.0: tough-cookie ">=0.12.0" tunnel-agent "~0.4.0" -request@2.88.2: +request@2.88.2, request@^2.88.2: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== @@ -3554,11 +5318,36 @@ require-relative@^0.8.7: resolved "https://registry.yarnpkg.com/require-relative/-/require-relative-0.8.7.tgz#7999539fc9e047a37928fa196f8e1563dabd36de" integrity sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4= +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@^1.10.0, resolve@^1.18.1: + version "1.20.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" + integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== + dependencies: + is-core-module "^2.2.0" + path-parse "^1.0.6" + responselike@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" @@ -3574,6 +5363,11 @@ restore-cursor@^2.0.0: onetime "^2.0.0" signal-exit "^3.0.2" +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + rimraf@2.6.3: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" @@ -3588,13 +5382,18 @@ rimraf@^2.2.8: dependencies: glob "^7.1.3" -rimraf@^3.0.2: +rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" +rsvp@^4.8.4: + version "4.8.5" + resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" + integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== + run-async@^2.2.0: version "2.4.1" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" @@ -3617,11 +5416,40 @@ safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + "safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== +sane@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" + integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== + dependencies: + "@cnakazawa/watch" "^1.0.3" + anymatch "^2.0.0" + capture-exit "^2.0.0" + exec-sh "^0.3.2" + execa "^1.0.0" + fb-watchman "^2.0.0" + micromatch "^3.1.4" + minimist "^1.1.1" + walker "~1.0.5" + +saxes@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" + integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== + dependencies: + xmlchars "^2.2.0" + semver-diff@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" @@ -3629,6 +5457,11 @@ semver-diff@^3.1.1: dependencies: semver "^6.3.0" +"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.5.1, semver@^5.7.1: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + semver@5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.0.1.tgz#9fb3f4004f900d83c47968fe42f7583e05832cc9" @@ -3639,17 +5472,12 @@ semver@5.5.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" integrity sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA== -semver@^5.5.0, semver@^5.5.1, semver@^5.7.1: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.2.1: +semver@^7.2.1, semver@^7.3.2: version "7.3.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== @@ -3697,6 +5525,16 @@ set-blocking@^2.0.0: resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + setprototypeof@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" @@ -3731,6 +5569,11 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== +shellwords@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" + integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== + should-equal@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/should-equal/-/should-equal-2.0.0.tgz#6072cf83047360867e68e98b09d71143d04ee0c3" @@ -3775,7 +5618,7 @@ should@13.2.3: should-type-adaptors "^1.0.1" should-util "^1.0.0" -signal-exit@^3.0.2: +signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== @@ -3785,6 +5628,11 @@ single-line-log@~0.3.1: resolved "https://registry.yarnpkg.com/single-line-log/-/single-line-log-0.3.1.tgz#a7ad6507f218ce5dfe16c4bf2d659246419e7a06" integrity sha1-p61lB/IYzl3+FsS/LWWSRkGeegY= +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" @@ -3813,6 +5661,36 @@ smart-buffer@^1.0.13: resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-1.1.15.tgz#7f114b5b65fab3e2a35aa775bb12f0d1c649bf16" integrity sha1-fxFLW2X6s+KjWqd1uxLw0cZJvxY= +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + sntp@1.x.x: version "1.0.9" resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" @@ -3836,21 +5714,83 @@ socks@^1.1.10: ip "^1.1.4" smart-buffer "^1.0.13" -source-map@^0.5.0: +source-map-resolve@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@^0.5.6: + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" + integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== + +source-map@^0.5.0, source-map@^0.5.6: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= -source-map@~0.6.1: +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +source-map@^0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.7" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz#e9c18a410e5ed7e12442a549fbd8afa767038d65" + integrity sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ== + speedometer@~0.1.2: version "0.1.4" resolved "https://registry.yarnpkg.com/speedometer/-/speedometer-0.1.4.tgz#9876dbd2a169d3115402d48e6ea6329c8816a50d" integrity sha1-mHbb0qFp0xFUAtSObqYynIgWpQ0= +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -3878,11 +5818,24 @@ stack-utils@^2.0.2: dependencies: escape-string-regexp "^2.0.0" +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + "statuses@>= 1.5.0 < 2", statuses@~1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= +stealthy-require@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= + stream-res@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/stream-res/-/stream-res-1.0.1.tgz#a0f6183be9ac16cb56d5ba9d7d4281049d19f219" @@ -3891,6 +5844,14 @@ stream-res@1.0.1: destroy "^1.0.4" finished "^1.2.2" +string-length@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.0" + "string-width@^1.0.2 || 2", string-width@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" @@ -3969,6 +5930,21 @@ strip-bom@2.0.0: dependencies: is-utf8 "^0.2.0" +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" @@ -4051,13 +6027,26 @@ supports-color@^5.3.0, supports-color@^5.5.0: dependencies: has-flag "^3.0.0" -supports-color@^7.1.0: +supports-color@^7.0.0, supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" +supports-hyperlinks@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47" + integrity sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + +symbol-tree@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + table@^5.2.3: version "5.4.6" resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" @@ -4083,11 +6072,33 @@ term-size@^2.1.0: resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54" integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg== +terminal-link@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" + integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== + dependencies: + ansi-escapes "^4.2.1" + supports-hyperlinks "^2.0.0" + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= +throat@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" + integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== + through2@~0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/through2/-/through2-0.2.3.tgz#eb3284da4ea311b6cc8ace3653748a52abf25a3f" @@ -4120,16 +6131,36 @@ tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" +tmpl@1.0.x: + version "1.0.4" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" + integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= + to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + to-readable-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -4137,6 +6168,16 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + toidentifier@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" @@ -4149,7 +6190,7 @@ touch@^3.1.0: dependencies: nopt "~1.0.10" -tough-cookie@>=0.12.0: +tough-cookie@>=0.12.0, tough-cookie@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg== @@ -4158,7 +6199,7 @@ tough-cookie@>=0.12.0: punycode "^2.1.1" universalify "^0.1.2" -tough-cookie@~2.5.0: +tough-cookie@^2.3.3, tough-cookie@~2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== @@ -4166,6 +6207,13 @@ tough-cookie@~2.5.0: psl "^1.1.28" punycode "^2.1.1" +tr46@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.0.2.tgz#03273586def1595ae08fedb38d7733cee91d2479" + integrity sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg== + dependencies: + punycode "^2.1.1" + tslib@^1.9.0: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" @@ -4207,11 +6255,26 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" +type-detect@4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" + integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== + type-fest@^0.20.2: version "0.20.2" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== + type-fest@^0.8.1: version "0.8.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" @@ -4249,6 +6312,16 @@ understudy@4.1.0: resolved "https://registry.yarnpkg.com/understudy/-/understudy-4.1.0.tgz#b6d6e9624ccbb7fa2e51969f5be2c748e969ef4a" integrity sha1-ttbpYkzLt/ouUZafW+LHSOlp70o= +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + unique-string@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" @@ -4266,6 +6339,14 @@ unpipe@1.0.0, unpipe@~1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + update-notifier@^4.1.0: version "4.1.3" resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-4.1.3.tgz#be86ee13e8ce48fb50043ff72057b5bd598e1ea3" @@ -4292,6 +6373,11 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + url-join@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/url-join/-/url-join-1.1.0.tgz#741c6c2f4596c4830d6718460920d0c92202dc78" @@ -4309,6 +6395,11 @@ urljoin.js@0.1.0: resolved "https://registry.yarnpkg.com/urljoin.js/-/urljoin.js-0.1.0.tgz#97914d5227b1c334236a9c843cb47e3ffa7edd6a" integrity sha1-l5FNUiexwzQjapyEPLR+P/p+3Wo= +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -4319,7 +6410,7 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= -uuid@8.3.2: +uuid@8.3.2, uuid@^8.3.0: version "8.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== @@ -4334,6 +6425,23 @@ v8-compile-cache@^2.0.3: resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== +v8-to-istanbul@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.1.0.tgz#5b95cef45c0f83217ec79f8fc7ee1c8b486aee07" + integrity sha512-uXUVqNUCLa0AH1vuVxzi+MI4RfxEOKt9pBgKwHbgH7st8Kv2P1m+jvWNnektzBh5QShF3ODgKmUFCf38LnVz1g== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^1.6.0" + source-map "^0.7.3" + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" @@ -4360,12 +6468,64 @@ vue-eslint-parser@^2.0.2: esquery "^1.0.0" lodash "^4.17.4" +w3c-hr-time@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" + integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== + dependencies: + browser-process-hrtime "^1.0.0" + +w3c-xmlserializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" + integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== + dependencies: + xml-name-validator "^3.0.0" + +walker@^1.0.7, walker@~1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" + integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= + dependencies: + makeerror "1.0.x" + +webidl-conversions@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" + integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== + +webidl-conversions@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" + integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== + +whatwg-encoding@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" + integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== + dependencies: + iconv-lite "0.4.24" + +whatwg-mimetype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== + +whatwg-url@^8.0.0: + version "8.4.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.4.0.tgz#50fb9615b05469591d2b2bd6dfaed2942ed72837" + integrity sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^2.0.2" + webidl-conversions "^6.1.0" + which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= -which@2.0.2, which@^2.0.1: +which@2.0.2, which@^2.0.1, which@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== @@ -4412,6 +6572,15 @@ wrap-ansi@^5.1.0: string-width "^3.0.0" strip-ansi "^5.0.0" +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" @@ -4443,16 +6612,31 @@ write@1.0.3: dependencies: mkdirp "^0.5.1" +ws@^7.4.4: + version "7.4.4" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.4.tgz#383bc9742cb202292c9077ceab6f6047b17f2d59" + integrity sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw== + xdg-basedir@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== + "xml@>= 0.0.5": version "1.0.1" resolved "https://registry.yarnpkg.com/xml/-/xml-1.0.1.tgz#78ba72020029c5bc87b8a81a3cfcd74b4a2fc1e5" integrity sha1-eLpyAgApxbyHuKgaPPzXS0ovweU= +xmlchars@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + xregexp@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943" @@ -4503,6 +6687,14 @@ yargs-parser@^13.1.2: camelcase "^5.0.0" decamelize "^1.2.0" +yargs-parser@^18.1.2: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + yargs-parser@^20.2.2: version "20.2.7" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.7.tgz#61df85c113edfb5a7a4e36eb8aa60ef423cbc90a" @@ -4547,6 +6739,23 @@ yargs@^13.2.4: y18n "^4.0.0" yargs-parser "^13.1.2" +yargs@^15.4.1: + version "15.4.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.2" + yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" From 74de87f486e3c447d49e8d60b3e0b749e5fa01ec Mon Sep 17 00:00:00 2001 From: Ben Williams Date: Thu, 18 Mar 2021 19:24:37 -0700 Subject: [PATCH 12/14] fixed tests and moved to jest --- __mocks__/octocat.js | 1220 +++++++++++++++++++++++++++++++++++++ __tests__/all.js | 10 - __tests__/download.js | 33 +- __tests__/platforms.js | 163 +++-- __tests__/testing.js | 7 +- __tests__/update.js | 17 +- __tests__/versions.js | 7 +- __tests__/win-releases.js | 87 ++- bin/web.js | 31 +- lib/backends/github.js | 2 +- lib/nuts.js | 21 +- lib/versions.js | 3 +- package.json | 3 +- yarn.lock | 12 +- 14 files changed, 1406 insertions(+), 210 deletions(-) create mode 100644 __mocks__/octocat.js delete mode 100644 __tests__/all.js diff --git a/__mocks__/octocat.js b/__mocks__/octocat.js new file mode 100644 index 0000000..3a1411f --- /dev/null +++ b/__mocks__/octocat.js @@ -0,0 +1,1220 @@ +jest.createMockFromModule("octocat") + +/** + * TODO: this file needs to be cleaned up to be somewhat readable / a helper function that + * allows version numbers / id / release tags / size to be injected in a manner that makes + * the tests readable and editable + */ + +module.exports = class OctoCat { + constructor() {} + repo() { + return { + releases: () => + new Promise((rRes) => { + rRes({ + all: () => + new Promise((res) => { + res([ + { + url: + "https://api.github.com/repos/biw/nuts-testing-repo/releases/40034966", + assets_url: + "https://api.github.com/repos/biw/nuts-testing-repo/releases/40034966/assets", + upload_url: + "https://uploads.github.com/repos/biw/nuts-testing-repo/releases/40034966/assets{?name,label}", + html_url: + "https://github.com/biw/nuts-testing-repo/releases/tag/0.9.1-beta.1", + id: 40034966, + author: { + login: "biw", + id: 6139501, + node_id: "MDQ6VXNlcjYxMzk1MDE=", + avatar_url: + "https://avatars.githubusercontent.com/u/6139501?v=4", + gravatar_id: "", + url: "https://api.github.com/users/biw", + html_url: "https://github.com/biw", + followers_url: + "https://api.github.com/users/biw/followers", + following_url: + "https://api.github.com/users/biw/following{/other_user}", + gists_url: + "https://api.github.com/users/biw/gists{/gist_id}", + starred_url: + "https://api.github.com/users/biw/starred{/owner}{/repo}", + subscriptions_url: + "https://api.github.com/users/biw/subscriptions", + organizations_url: + "https://api.github.com/users/biw/orgs", + repos_url: "https://api.github.com/users/biw/repos", + events_url: + "https://api.github.com/users/biw/events{/privacy}", + received_events_url: + "https://api.github.com/users/biw/received_events", + type: "User", + site_admin: false, + }, + node_id: "MDc6UmVsZWFzZTQwMDM0OTY2", + tag_name: "0.9.1-beta.1", + target_commitish: "main", + name: "", + draft: false, + prerelease: true, + created_at: "2021-03-18T22:31:12Z", + published_at: "2021-03-18T22:35:49Z", + assets: [ + { + url: + "https://api.github.com/repos/biw/nuts-testing-repo/releases/assets/33669473", + id: 33669473, + node_id: "MDEyOlJlbGVhc2VBc3NldDMzNjY5NDcz", + name: "test-osx.dmg", + label: null, + uploader: { + login: "biw", + id: 6139501, + node_id: "MDQ6VXNlcjYxMzk1MDE=", + avatar_url: + "https://avatars.githubusercontent.com/u/6139501?v=4", + gravatar_id: "", + url: "https://api.github.com/users/biw", + html_url: "https://github.com/biw", + followers_url: + "https://api.github.com/users/biw/followers", + following_url: + "https://api.github.com/users/biw/following{/other_user}", + gists_url: + "https://api.github.com/users/biw/gists{/gist_id}", + starred_url: + "https://api.github.com/users/biw/starred{/owner}{/repo}", + subscriptions_url: + "https://api.github.com/users/biw/subscriptions", + organizations_url: + "https://api.github.com/users/biw/orgs", + repos_url: "https://api.github.com/users/biw/repos", + events_url: + "https://api.github.com/users/biw/events{/privacy}", + received_events_url: + "https://api.github.com/users/biw/received_events", + type: "User", + site_admin: false, + }, + content_type: "application/x-diskcopy", + state: "uploaded", + size: 22, + download_count: 0, + created_at: "2021-03-18T22:35:46Z", + updated_at: "2021-03-18T22:35:47Z", + browser_download_url: + "https://github.com/biw/nuts-testing-repo/releases/download/0.9.1-beta.1/test-osx.dmg", + }, + { + url: + "https://api.github.com/repos/biw/nuts-testing-repo/releases/assets/33669474", + id: 33669474, + node_id: "MDEyOlJlbGVhc2VBc3NldDMzNjY5NDc0", + name: "test-osx.zip", + label: null, + uploader: { + login: "biw", + id: 6139501, + node_id: "MDQ6VXNlcjYxMzk1MDE=", + avatar_url: + "https://avatars.githubusercontent.com/u/6139501?v=4", + gravatar_id: "", + url: "https://api.github.com/users/biw", + html_url: "https://github.com/biw", + followers_url: + "https://api.github.com/users/biw/followers", + following_url: + "https://api.github.com/users/biw/following{/other_user}", + gists_url: + "https://api.github.com/users/biw/gists{/gist_id}", + starred_url: + "https://api.github.com/users/biw/starred{/owner}{/repo}", + subscriptions_url: + "https://api.github.com/users/biw/subscriptions", + organizations_url: + "https://api.github.com/users/biw/orgs", + repos_url: "https://api.github.com/users/biw/repos", + events_url: + "https://api.github.com/users/biw/events{/privacy}", + received_events_url: + "https://api.github.com/users/biw/received_events", + type: "User", + site_admin: false, + }, + content_type: "application/zip", + state: "uploaded", + size: 26, + download_count: 0, + created_at: "2021-03-18T22:35:47Z", + updated_at: "2021-03-18T22:35:47Z", + browser_download_url: + "https://github.com/biw/nuts-testing-repo/releases/download/0.9.1-beta.1/test-osx.zip", + }, + { + url: + "https://api.github.com/repos/biw/nuts-testing-repo/releases/assets/33669472", + id: 33669472, + node_id: "MDEyOlJlbGVhc2VBc3NldDMzNjY5NDcy", + name: "test.exe", + label: null, + uploader: { + login: "biw", + id: 6139501, + node_id: "MDQ6VXNlcjYxMzk1MDE=", + avatar_url: + "https://avatars.githubusercontent.com/u/6139501?v=4", + gravatar_id: "", + url: "https://api.github.com/users/biw", + html_url: "https://github.com/biw", + followers_url: + "https://api.github.com/users/biw/followers", + following_url: + "https://api.github.com/users/biw/following{/other_user}", + gists_url: + "https://api.github.com/users/biw/gists{/gist_id}", + starred_url: + "https://api.github.com/users/biw/starred{/owner}{/repo}", + subscriptions_url: + "https://api.github.com/users/biw/subscriptions", + organizations_url: + "https://api.github.com/users/biw/orgs", + repos_url: "https://api.github.com/users/biw/repos", + events_url: + "https://api.github.com/users/biw/events{/privacy}", + received_events_url: + "https://api.github.com/users/biw/received_events", + type: "User", + site_admin: false, + }, + content_type: "application/octet-stream", + state: "uploaded", + size: 22, + download_count: 0, + created_at: "2021-03-18T22:35:45Z", + updated_at: "2021-03-18T22:35:46Z", + browser_download_url: + "https://github.com/biw/nuts-testing-repo/releases/download/0.9.1-beta.1/test.exe", + }, + ], + tarball_url: + "https://api.github.com/repos/biw/nuts-testing-repo/tarball/0.9.1-beta.1", + zipball_url: + "https://api.github.com/repos/biw/nuts-testing-repo/zipball/0.9.1-beta.1", + body: "", + }, + { + url: + "https://api.github.com/repos/biw/nuts-testing-repo/releases/40034724", + assets_url: + "https://api.github.com/repos/biw/nuts-testing-repo/releases/40034724/assets", + upload_url: + "https://uploads.github.com/repos/biw/nuts-testing-repo/releases/40034724/assets{?name,label}", + html_url: + "https://github.com/biw/nuts-testing-repo/releases/tag/v0.9.2-alpha.1", + id: 40034724, + author: { + login: "biw", + id: 6139501, + node_id: "MDQ6VXNlcjYxMzk1MDE=", + avatar_url: + "https://avatars.githubusercontent.com/u/6139501?v=4", + gravatar_id: "", + url: "https://api.github.com/users/biw", + html_url: "https://github.com/biw", + followers_url: + "https://api.github.com/users/biw/followers", + following_url: + "https://api.github.com/users/biw/following{/other_user}", + gists_url: + "https://api.github.com/users/biw/gists{/gist_id}", + starred_url: + "https://api.github.com/users/biw/starred{/owner}{/repo}", + subscriptions_url: + "https://api.github.com/users/biw/subscriptions", + organizations_url: + "https://api.github.com/users/biw/orgs", + repos_url: "https://api.github.com/users/biw/repos", + events_url: + "https://api.github.com/users/biw/events{/privacy}", + received_events_url: + "https://api.github.com/users/biw/received_events", + type: "User", + site_admin: false, + }, + node_id: "MDc6UmVsZWFzZTQwMDM0NzI0", + tag_name: "v0.9.2-alpha.1", + target_commitish: "main", + name: "", + draft: false, + prerelease: true, + created_at: "2021-03-18T22:31:12Z", + published_at: "2021-03-18T22:28:37Z", + assets: [ + { + url: + "https://api.github.com/repos/biw/nuts-testing-repo/releases/assets/33669275", + id: 33669275, + node_id: "MDEyOlJlbGVhc2VBc3NldDMzNjY5Mjc1", + name: "test-osx.zip", + label: null, + uploader: { + login: "biw", + id: 6139501, + node_id: "MDQ6VXNlcjYxMzk1MDE=", + avatar_url: + "https://avatars.githubusercontent.com/u/6139501?v=4", + gravatar_id: "", + url: "https://api.github.com/users/biw", + html_url: "https://github.com/biw", + followers_url: + "https://api.github.com/users/biw/followers", + following_url: + "https://api.github.com/users/biw/following{/other_user}", + gists_url: + "https://api.github.com/users/biw/gists{/gist_id}", + starred_url: + "https://api.github.com/users/biw/starred{/owner}{/repo}", + subscriptions_url: + "https://api.github.com/users/biw/subscriptions", + organizations_url: + "https://api.github.com/users/biw/orgs", + repos_url: "https://api.github.com/users/biw/repos", + events_url: + "https://api.github.com/users/biw/events{/privacy}", + received_events_url: + "https://api.github.com/users/biw/received_events", + type: "User", + site_admin: false, + }, + content_type: "application/zip", + state: "uploaded", + size: 26, + download_count: 0, + created_at: "2021-03-18T22:28:30Z", + updated_at: "2021-03-18T22:28:31Z", + browser_download_url: + "https://github.com/biw/nuts-testing-repo/releases/download/v0.9.2-alpha.1/test-osx.zip", + }, + ], + tarball_url: + "https://api.github.com/repos/biw/nuts-testing-repo/tarball/v0.9.2-alpha.1", + zipball_url: + "https://api.github.com/repos/biw/nuts-testing-repo/zipball/v0.9.2-alpha.1", + body: "", + }, + { + url: + "https://api.github.com/repos/biw/nuts-testing-repo/releases/40034693", + assets_url: + "https://api.github.com/repos/biw/nuts-testing-repo/releases/40034693/assets", + upload_url: + "https://uploads.github.com/repos/biw/nuts-testing-repo/releases/40034693/assets{?name,label}", + html_url: + "https://github.com/biw/nuts-testing-repo/releases/tag/v1.1.0-alpha.0", + id: 40034693, + author: { + login: "biw", + id: 6139501, + node_id: "MDQ6VXNlcjYxMzk1MDE=", + avatar_url: + "https://avatars.githubusercontent.com/u/6139501?v=4", + gravatar_id: "", + url: "https://api.github.com/users/biw", + html_url: "https://github.com/biw", + followers_url: + "https://api.github.com/users/biw/followers", + following_url: + "https://api.github.com/users/biw/following{/other_user}", + gists_url: + "https://api.github.com/users/biw/gists{/gist_id}", + starred_url: + "https://api.github.com/users/biw/starred{/owner}{/repo}", + subscriptions_url: + "https://api.github.com/users/biw/subscriptions", + organizations_url: + "https://api.github.com/users/biw/orgs", + repos_url: "https://api.github.com/users/biw/repos", + events_url: + "https://api.github.com/users/biw/events{/privacy}", + received_events_url: + "https://api.github.com/users/biw/received_events", + type: "User", + site_admin: false, + }, + node_id: "MDc6UmVsZWFzZTQwMDM0Njkz", + tag_name: "v1.1.0-alpha.0", + target_commitish: "main", + name: "", + draft: false, + prerelease: true, + created_at: "2021-03-18T22:31:12Z", + published_at: "2021-03-18T22:27:44Z", + assets: [ + { + url: + "https://api.github.com/repos/biw/nuts-testing-repo/releases/assets/33669251", + id: 33669251, + node_id: "MDEyOlJlbGVhc2VBc3NldDMzNjY5MjUx", + name: "test-osx.dmg", + label: null, + uploader: { + login: "biw", + id: 6139501, + node_id: "MDQ6VXNlcjYxMzk1MDE=", + avatar_url: + "https://avatars.githubusercontent.com/u/6139501?v=4", + gravatar_id: "", + url: "https://api.github.com/users/biw", + html_url: "https://github.com/biw", + followers_url: + "https://api.github.com/users/biw/followers", + following_url: + "https://api.github.com/users/biw/following{/other_user}", + gists_url: + "https://api.github.com/users/biw/gists{/gist_id}", + starred_url: + "https://api.github.com/users/biw/starred{/owner}{/repo}", + subscriptions_url: + "https://api.github.com/users/biw/subscriptions", + organizations_url: + "https://api.github.com/users/biw/orgs", + repos_url: "https://api.github.com/users/biw/repos", + events_url: + "https://api.github.com/users/biw/events{/privacy}", + received_events_url: + "https://api.github.com/users/biw/received_events", + type: "User", + site_admin: false, + }, + content_type: "application/x-diskcopy", + state: "uploaded", + size: 22, + download_count: 0, + created_at: "2021-03-18T22:27:40Z", + updated_at: "2021-03-18T22:27:40Z", + browser_download_url: + "https://github.com/biw/nuts-testing-repo/releases/download/v1.1.0-alpha.0/test-osx.dmg", + }, + { + url: + "https://api.github.com/repos/biw/nuts-testing-repo/releases/assets/33669252", + id: 33669252, + node_id: "MDEyOlJlbGVhc2VBc3NldDMzNjY5MjUy", + name: "test-osx.zip", + label: null, + uploader: { + login: "biw", + id: 6139501, + node_id: "MDQ6VXNlcjYxMzk1MDE=", + avatar_url: + "https://avatars.githubusercontent.com/u/6139501?v=4", + gravatar_id: "", + url: "https://api.github.com/users/biw", + html_url: "https://github.com/biw", + followers_url: + "https://api.github.com/users/biw/followers", + following_url: + "https://api.github.com/users/biw/following{/other_user}", + gists_url: + "https://api.github.com/users/biw/gists{/gist_id}", + starred_url: + "https://api.github.com/users/biw/starred{/owner}{/repo}", + subscriptions_url: + "https://api.github.com/users/biw/subscriptions", + organizations_url: + "https://api.github.com/users/biw/orgs", + repos_url: "https://api.github.com/users/biw/repos", + events_url: + "https://api.github.com/users/biw/events{/privacy}", + received_events_url: + "https://api.github.com/users/biw/received_events", + type: "User", + site_admin: false, + }, + content_type: "application/zip", + state: "uploaded", + size: 26, + download_count: 0, + created_at: "2021-03-18T22:27:40Z", + updated_at: "2021-03-18T22:27:40Z", + browser_download_url: + "https://github.com/biw/nuts-testing-repo/releases/download/v1.1.0-alpha.0/test-osx.zip", + }, + { + url: + "https://api.github.com/repos/biw/nuts-testing-repo/releases/assets/33669250", + id: 33669250, + node_id: "MDEyOlJlbGVhc2VBc3NldDMzNjY5MjUw", + name: "test.exe", + label: null, + uploader: { + login: "biw", + id: 6139501, + node_id: "MDQ6VXNlcjYxMzk1MDE=", + avatar_url: + "https://avatars.githubusercontent.com/u/6139501?v=4", + gravatar_id: "", + url: "https://api.github.com/users/biw", + html_url: "https://github.com/biw", + followers_url: + "https://api.github.com/users/biw/followers", + following_url: + "https://api.github.com/users/biw/following{/other_user}", + gists_url: + "https://api.github.com/users/biw/gists{/gist_id}", + starred_url: + "https://api.github.com/users/biw/starred{/owner}{/repo}", + subscriptions_url: + "https://api.github.com/users/biw/subscriptions", + organizations_url: + "https://api.github.com/users/biw/orgs", + repos_url: "https://api.github.com/users/biw/repos", + events_url: + "https://api.github.com/users/biw/events{/privacy}", + received_events_url: + "https://api.github.com/users/biw/received_events", + type: "User", + site_admin: false, + }, + content_type: "application/octet-stream", + state: "uploaded", + size: 22, + download_count: 7, + created_at: "2021-03-18T22:27:39Z", + updated_at: "2021-03-18T22:27:40Z", + browser_download_url: + "https://github.com/biw/nuts-testing-repo/releases/download/v1.1.0-alpha.0/test.exe", + }, + ], + tarball_url: + "https://api.github.com/repos/biw/nuts-testing-repo/tarball/v1.1.0-alpha.0", + zipball_url: + "https://api.github.com/repos/biw/nuts-testing-repo/zipball/v1.1.0-alpha.0", + body: "", + }, + { + url: + "https://api.github.com/repos/biw/nuts-testing-repo/releases/40034687", + assets_url: + "https://api.github.com/repos/biw/nuts-testing-repo/releases/40034687/assets", + upload_url: + "https://uploads.github.com/repos/biw/nuts-testing-repo/releases/40034687/assets{?name,label}", + html_url: + "https://github.com/biw/nuts-testing-repo/releases/tag/v1.0.1-beta.0", + id: 40034687, + author: { + login: "biw", + id: 6139501, + node_id: "MDQ6VXNlcjYxMzk1MDE=", + avatar_url: + "https://avatars.githubusercontent.com/u/6139501?v=4", + gravatar_id: "", + url: "https://api.github.com/users/biw", + html_url: "https://github.com/biw", + followers_url: + "https://api.github.com/users/biw/followers", + following_url: + "https://api.github.com/users/biw/following{/other_user}", + gists_url: + "https://api.github.com/users/biw/gists{/gist_id}", + starred_url: + "https://api.github.com/users/biw/starred{/owner}{/repo}", + subscriptions_url: + "https://api.github.com/users/biw/subscriptions", + organizations_url: + "https://api.github.com/users/biw/orgs", + repos_url: "https://api.github.com/users/biw/repos", + events_url: + "https://api.github.com/users/biw/events{/privacy}", + received_events_url: + "https://api.github.com/users/biw/received_events", + type: "User", + site_admin: false, + }, + node_id: "MDc6UmVsZWFzZTQwMDM0Njg3", + tag_name: "v1.0.1-beta.0", + target_commitish: "main", + name: "", + draft: false, + prerelease: true, + created_at: "2021-03-18T22:31:12Z", + published_at: "2021-03-18T22:27:27Z", + assets: [ + { + url: + "https://api.github.com/repos/biw/nuts-testing-repo/releases/assets/33669243", + id: 33669243, + node_id: "MDEyOlJlbGVhc2VBc3NldDMzNjY5MjQz", + name: "test-osx.dmg", + label: null, + uploader: { + login: "biw", + id: 6139501, + node_id: "MDQ6VXNlcjYxMzk1MDE=", + avatar_url: + "https://avatars.githubusercontent.com/u/6139501?v=4", + gravatar_id: "", + url: "https://api.github.com/users/biw", + html_url: "https://github.com/biw", + followers_url: + "https://api.github.com/users/biw/followers", + following_url: + "https://api.github.com/users/biw/following{/other_user}", + gists_url: + "https://api.github.com/users/biw/gists{/gist_id}", + starred_url: + "https://api.github.com/users/biw/starred{/owner}{/repo}", + subscriptions_url: + "https://api.github.com/users/biw/subscriptions", + organizations_url: + "https://api.github.com/users/biw/orgs", + repos_url: "https://api.github.com/users/biw/repos", + events_url: + "https://api.github.com/users/biw/events{/privacy}", + received_events_url: + "https://api.github.com/users/biw/received_events", + type: "User", + site_admin: false, + }, + content_type: "application/x-diskcopy", + state: "uploaded", + size: 22, + download_count: 0, + created_at: "2021-03-18T22:27:24Z", + updated_at: "2021-03-18T22:27:24Z", + browser_download_url: + "https://github.com/biw/nuts-testing-repo/releases/download/v1.0.1-beta.0/test-osx.dmg", + }, + { + url: + "https://api.github.com/repos/biw/nuts-testing-repo/releases/assets/33669245", + id: 33669245, + node_id: "MDEyOlJlbGVhc2VBc3NldDMzNjY5MjQ1", + name: "test-osx.zip", + label: null, + uploader: { + login: "biw", + id: 6139501, + node_id: "MDQ6VXNlcjYxMzk1MDE=", + avatar_url: + "https://avatars.githubusercontent.com/u/6139501?v=4", + gravatar_id: "", + url: "https://api.github.com/users/biw", + html_url: "https://github.com/biw", + followers_url: + "https://api.github.com/users/biw/followers", + following_url: + "https://api.github.com/users/biw/following{/other_user}", + gists_url: + "https://api.github.com/users/biw/gists{/gist_id}", + starred_url: + "https://api.github.com/users/biw/starred{/owner}{/repo}", + subscriptions_url: + "https://api.github.com/users/biw/subscriptions", + organizations_url: + "https://api.github.com/users/biw/orgs", + repos_url: "https://api.github.com/users/biw/repos", + events_url: + "https://api.github.com/users/biw/events{/privacy}", + received_events_url: + "https://api.github.com/users/biw/received_events", + type: "User", + site_admin: false, + }, + content_type: "application/zip", + state: "uploaded", + size: 26, + download_count: 0, + created_at: "2021-03-18T22:27:24Z", + updated_at: "2021-03-18T22:27:25Z", + browser_download_url: + "https://github.com/biw/nuts-testing-repo/releases/download/v1.0.1-beta.0/test-osx.zip", + }, + { + url: + "https://api.github.com/repos/biw/nuts-testing-repo/releases/assets/33669241", + id: 33669241, + node_id: "MDEyOlJlbGVhc2VBc3NldDMzNjY5MjQx", + name: "test.exe", + label: null, + uploader: { + login: "biw", + id: 6139501, + node_id: "MDQ6VXNlcjYxMzk1MDE=", + avatar_url: + "https://avatars.githubusercontent.com/u/6139501?v=4", + gravatar_id: "", + url: "https://api.github.com/users/biw", + html_url: "https://github.com/biw", + followers_url: + "https://api.github.com/users/biw/followers", + following_url: + "https://api.github.com/users/biw/following{/other_user}", + gists_url: + "https://api.github.com/users/biw/gists{/gist_id}", + starred_url: + "https://api.github.com/users/biw/starred{/owner}{/repo}", + subscriptions_url: + "https://api.github.com/users/biw/subscriptions", + organizations_url: + "https://api.github.com/users/biw/orgs", + repos_url: "https://api.github.com/users/biw/repos", + events_url: + "https://api.github.com/users/biw/events{/privacy}", + received_events_url: + "https://api.github.com/users/biw/received_events", + type: "User", + site_admin: false, + }, + content_type: "application/octet-stream", + state: "uploaded", + size: 22, + download_count: 0, + created_at: "2021-03-18T22:27:23Z", + updated_at: "2021-03-18T22:27:24Z", + browser_download_url: + "https://github.com/biw/nuts-testing-repo/releases/download/v1.0.1-beta.0/test.exe", + }, + ], + tarball_url: + "https://api.github.com/repos/biw/nuts-testing-repo/tarball/v1.0.1-beta.0", + zipball_url: + "https://api.github.com/repos/biw/nuts-testing-repo/zipball/v1.0.1-beta.0", + body: "", + }, + { + url: + "https://api.github.com/repos/biw/nuts-testing-repo/releases/40034638", + assets_url: + "https://api.github.com/repos/biw/nuts-testing-repo/releases/40034638/assets", + upload_url: + "https://uploads.github.com/repos/biw/nuts-testing-repo/releases/40034638/assets{?name,label}", + html_url: + "https://github.com/biw/nuts-testing-repo/releases/tag/v1.0.0", + id: 40034638, + author: { + login: "biw", + id: 6139501, + node_id: "MDQ6VXNlcjYxMzk1MDE=", + avatar_url: + "https://avatars.githubusercontent.com/u/6139501?v=4", + gravatar_id: "", + url: "https://api.github.com/users/biw", + html_url: "https://github.com/biw", + followers_url: + "https://api.github.com/users/biw/followers", + following_url: + "https://api.github.com/users/biw/following{/other_user}", + gists_url: + "https://api.github.com/users/biw/gists{/gist_id}", + starred_url: + "https://api.github.com/users/biw/starred{/owner}{/repo}", + subscriptions_url: + "https://api.github.com/users/biw/subscriptions", + organizations_url: + "https://api.github.com/users/biw/orgs", + repos_url: "https://api.github.com/users/biw/repos", + events_url: + "https://api.github.com/users/biw/events{/privacy}", + received_events_url: + "https://api.github.com/users/biw/received_events", + type: "User", + site_admin: false, + }, + node_id: "MDc6UmVsZWFzZTQwMDM0NjM4", + tag_name: "v1.0.0", + target_commitish: "main", + name: "", + draft: false, + prerelease: false, + created_at: "2021-03-18T22:31:12Z", + published_at: "2021-03-18T22:27:02Z", + assets: [ + { + url: + "https://api.github.com/repos/biw/nuts-testing-repo/releases/assets/33669106", + id: 33669106, + node_id: "MDEyOlJlbGVhc2VBc3NldDMzNjY5MTA2", + name: "test-osx.dmg", + label: null, + uploader: { + login: "biw", + id: 6139501, + node_id: "MDQ6VXNlcjYxMzk1MDE=", + avatar_url: + "https://avatars.githubusercontent.com/u/6139501?v=4", + gravatar_id: "", + url: "https://api.github.com/users/biw", + html_url: "https://github.com/biw", + followers_url: + "https://api.github.com/users/biw/followers", + following_url: + "https://api.github.com/users/biw/following{/other_user}", + gists_url: + "https://api.github.com/users/biw/gists{/gist_id}", + starred_url: + "https://api.github.com/users/biw/starred{/owner}{/repo}", + subscriptions_url: + "https://api.github.com/users/biw/subscriptions", + organizations_url: + "https://api.github.com/users/biw/orgs", + repos_url: "https://api.github.com/users/biw/repos", + events_url: + "https://api.github.com/users/biw/events{/privacy}", + received_events_url: + "https://api.github.com/users/biw/received_events", + type: "User", + site_admin: false, + }, + content_type: "application/x-diskcopy", + state: "uploaded", + size: 22, + download_count: 0, + created_at: "2021-03-18T22:26:16Z", + updated_at: "2021-03-18T22:26:17Z", + browser_download_url: + "https://github.com/biw/nuts-testing-repo/releases/download/v1.0.0/test-osx.dmg", + }, + { + url: + "https://api.github.com/repos/biw/nuts-testing-repo/releases/assets/33669108", + id: 33669108, + node_id: "MDEyOlJlbGVhc2VBc3NldDMzNjY5MTA4", + name: "test-osx.zip", + label: null, + uploader: { + login: "biw", + id: 6139501, + node_id: "MDQ6VXNlcjYxMzk1MDE=", + avatar_url: + "https://avatars.githubusercontent.com/u/6139501?v=4", + gravatar_id: "", + url: "https://api.github.com/users/biw", + html_url: "https://github.com/biw", + followers_url: + "https://api.github.com/users/biw/followers", + following_url: + "https://api.github.com/users/biw/following{/other_user}", + gists_url: + "https://api.github.com/users/biw/gists{/gist_id}", + starred_url: + "https://api.github.com/users/biw/starred{/owner}{/repo}", + subscriptions_url: + "https://api.github.com/users/biw/subscriptions", + organizations_url: + "https://api.github.com/users/biw/orgs", + repos_url: "https://api.github.com/users/biw/repos", + events_url: + "https://api.github.com/users/biw/events{/privacy}", + received_events_url: + "https://api.github.com/users/biw/received_events", + type: "User", + site_admin: false, + }, + content_type: "application/zip", + state: "uploaded", + size: 26, + download_count: 0, + created_at: "2021-03-18T22:26:17Z", + updated_at: "2021-03-18T22:26:17Z", + browser_download_url: + "https://github.com/biw/nuts-testing-repo/releases/download/v1.0.0/test-osx.zip", + }, + { + url: + "https://api.github.com/repos/biw/nuts-testing-repo/releases/assets/33669103", + id: 33669103, + node_id: "MDEyOlJlbGVhc2VBc3NldDMzNjY5MTAz", + name: "test.exe", + label: null, + uploader: { + login: "biw", + id: 6139501, + node_id: "MDQ6VXNlcjYxMzk1MDE=", + avatar_url: + "https://avatars.githubusercontent.com/u/6139501?v=4", + gravatar_id: "", + url: "https://api.github.com/users/biw", + html_url: "https://github.com/biw", + followers_url: + "https://api.github.com/users/biw/followers", + following_url: + "https://api.github.com/users/biw/following{/other_user}", + gists_url: + "https://api.github.com/users/biw/gists{/gist_id}", + starred_url: + "https://api.github.com/users/biw/starred{/owner}{/repo}", + subscriptions_url: + "https://api.github.com/users/biw/subscriptions", + organizations_url: + "https://api.github.com/users/biw/orgs", + repos_url: "https://api.github.com/users/biw/repos", + events_url: + "https://api.github.com/users/biw/events{/privacy}", + received_events_url: + "https://api.github.com/users/biw/received_events", + type: "User", + site_admin: false, + }, + content_type: "application/octet-stream", + state: "uploaded", + size: 22, + download_count: 0, + created_at: "2021-03-18T22:26:16Z", + updated_at: "2021-03-18T22:26:16Z", + browser_download_url: + "https://github.com/biw/nuts-testing-repo/releases/download/v1.0.0/test.exe", + }, + ], + tarball_url: + "https://api.github.com/repos/biw/nuts-testing-repo/tarball/v1.0.0", + zipball_url: + "https://api.github.com/repos/biw/nuts-testing-repo/zipball/v1.0.0", + body: "", + }, + { + url: + "https://api.github.com/repos/biw/nuts-testing-repo/releases/40034624", + assets_url: + "https://api.github.com/repos/biw/nuts-testing-repo/releases/40034624/assets", + upload_url: + "https://uploads.github.com/repos/biw/nuts-testing-repo/releases/40034624/assets{?name,label}", + html_url: + "https://github.com/biw/nuts-testing-repo/releases/tag/0.9.1-beta", + id: 40034624, + author: { + login: "biw", + id: 6139501, + node_id: "MDQ6VXNlcjYxMzk1MDE=", + avatar_url: + "https://avatars.githubusercontent.com/u/6139501?v=4", + gravatar_id: "", + url: "https://api.github.com/users/biw", + html_url: "https://github.com/biw", + followers_url: + "https://api.github.com/users/biw/followers", + following_url: + "https://api.github.com/users/biw/following{/other_user}", + gists_url: + "https://api.github.com/users/biw/gists{/gist_id}", + starred_url: + "https://api.github.com/users/biw/starred{/owner}{/repo}", + subscriptions_url: + "https://api.github.com/users/biw/subscriptions", + organizations_url: + "https://api.github.com/users/biw/orgs", + repos_url: "https://api.github.com/users/biw/repos", + events_url: + "https://api.github.com/users/biw/events{/privacy}", + received_events_url: + "https://api.github.com/users/biw/received_events", + type: "User", + site_admin: false, + }, + node_id: "MDc6UmVsZWFzZTQwMDM0NjI0", + tag_name: "0.9.1-beta", + target_commitish: "main", + name: "", + draft: false, + prerelease: true, + created_at: "2021-03-18T22:22:09Z", + published_at: "2021-03-18T22:25:58Z", + assets: [ + { + url: + "https://api.github.com/repos/biw/nuts-testing-repo/releases/assets/33669033", + id: 33669033, + node_id: "MDEyOlJlbGVhc2VBc3NldDMzNjY5MDMz", + name: "test-osx.dmg", + label: null, + uploader: { + login: "biw", + id: 6139501, + node_id: "MDQ6VXNlcjYxMzk1MDE=", + avatar_url: + "https://avatars.githubusercontent.com/u/6139501?v=4", + gravatar_id: "", + url: "https://api.github.com/users/biw", + html_url: "https://github.com/biw", + followers_url: + "https://api.github.com/users/biw/followers", + following_url: + "https://api.github.com/users/biw/following{/other_user}", + gists_url: + "https://api.github.com/users/biw/gists{/gist_id}", + starred_url: + "https://api.github.com/users/biw/starred{/owner}{/repo}", + subscriptions_url: + "https://api.github.com/users/biw/subscriptions", + organizations_url: + "https://api.github.com/users/biw/orgs", + repos_url: "https://api.github.com/users/biw/repos", + events_url: + "https://api.github.com/users/biw/events{/privacy}", + received_events_url: + "https://api.github.com/users/biw/received_events", + type: "User", + site_admin: false, + }, + content_type: "application/x-diskcopy", + state: "uploaded", + size: 22, + download_count: 0, + created_at: "2021-03-18T22:25:52Z", + updated_at: "2021-03-18T22:25:52Z", + browser_download_url: + "https://github.com/biw/nuts-testing-repo/releases/download/0.9.1-beta/test-osx.dmg", + }, + { + url: + "https://api.github.com/repos/biw/nuts-testing-repo/releases/assets/33669034", + id: 33669034, + node_id: "MDEyOlJlbGVhc2VBc3NldDMzNjY5MDM0", + name: "test-osx.zip", + label: null, + uploader: { + login: "biw", + id: 6139501, + node_id: "MDQ6VXNlcjYxMzk1MDE=", + avatar_url: + "https://avatars.githubusercontent.com/u/6139501?v=4", + gravatar_id: "", + url: "https://api.github.com/users/biw", + html_url: "https://github.com/biw", + followers_url: + "https://api.github.com/users/biw/followers", + following_url: + "https://api.github.com/users/biw/following{/other_user}", + gists_url: + "https://api.github.com/users/biw/gists{/gist_id}", + starred_url: + "https://api.github.com/users/biw/starred{/owner}{/repo}", + subscriptions_url: + "https://api.github.com/users/biw/subscriptions", + organizations_url: + "https://api.github.com/users/biw/orgs", + repos_url: "https://api.github.com/users/biw/repos", + events_url: + "https://api.github.com/users/biw/events{/privacy}", + received_events_url: + "https://api.github.com/users/biw/received_events", + type: "User", + site_admin: false, + }, + content_type: "application/zip", + state: "uploaded", + size: 26, + download_count: 0, + created_at: "2021-03-18T22:25:52Z", + updated_at: "2021-03-18T22:25:53Z", + browser_download_url: + "https://github.com/biw/nuts-testing-repo/releases/download/0.9.1-beta/test-osx.zip", + }, + { + url: + "https://api.github.com/repos/biw/nuts-testing-repo/releases/assets/33669029", + id: 33669029, + node_id: "MDEyOlJlbGVhc2VBc3NldDMzNjY5MDI5", + name: "test.exe", + label: null, + uploader: { + login: "biw", + id: 6139501, + node_id: "MDQ6VXNlcjYxMzk1MDE=", + avatar_url: + "https://avatars.githubusercontent.com/u/6139501?v=4", + gravatar_id: "", + url: "https://api.github.com/users/biw", + html_url: "https://github.com/biw", + followers_url: + "https://api.github.com/users/biw/followers", + following_url: + "https://api.github.com/users/biw/following{/other_user}", + gists_url: + "https://api.github.com/users/biw/gists{/gist_id}", + starred_url: + "https://api.github.com/users/biw/starred{/owner}{/repo}", + subscriptions_url: + "https://api.github.com/users/biw/subscriptions", + organizations_url: + "https://api.github.com/users/biw/orgs", + repos_url: "https://api.github.com/users/biw/repos", + events_url: + "https://api.github.com/users/biw/events{/privacy}", + received_events_url: + "https://api.github.com/users/biw/received_events", + type: "User", + site_admin: false, + }, + content_type: "application/octet-stream", + state: "uploaded", + size: 22, + download_count: 0, + created_at: "2021-03-18T22:25:51Z", + updated_at: "2021-03-18T22:25:52Z", + browser_download_url: + "https://github.com/biw/nuts-testing-repo/releases/download/0.9.1-beta/test.exe", + }, + ], + tarball_url: + "https://api.github.com/repos/biw/nuts-testing-repo/tarball/0.9.1-beta", + zipball_url: + "https://api.github.com/repos/biw/nuts-testing-repo/zipball/0.9.1-beta", + body: "", + }, + { + url: + "https://api.github.com/repos/biw/nuts-testing-repo/releases/40034571", + assets_url: + "https://api.github.com/repos/biw/nuts-testing-repo/releases/40034571/assets", + upload_url: + "https://uploads.github.com/repos/biw/nuts-testing-repo/releases/40034571/assets{?name,label}", + html_url: + "https://github.com/biw/nuts-testing-repo/releases/tag/0.9.0", + id: 40034571, + author: { + login: "biw", + id: 6139501, + node_id: "MDQ6VXNlcjYxMzk1MDE=", + avatar_url: + "https://avatars.githubusercontent.com/u/6139501?v=4", + gravatar_id: "", + url: "https://api.github.com/users/biw", + html_url: "https://github.com/biw", + followers_url: + "https://api.github.com/users/biw/followers", + following_url: + "https://api.github.com/users/biw/following{/other_user}", + gists_url: + "https://api.github.com/users/biw/gists{/gist_id}", + starred_url: + "https://api.github.com/users/biw/starred{/owner}{/repo}", + subscriptions_url: + "https://api.github.com/users/biw/subscriptions", + organizations_url: + "https://api.github.com/users/biw/orgs", + repos_url: "https://api.github.com/users/biw/repos", + events_url: + "https://api.github.com/users/biw/events{/privacy}", + received_events_url: + "https://api.github.com/users/biw/received_events", + type: "User", + site_admin: false, + }, + node_id: "MDc6UmVsZWFzZTQwMDM0NTcx", + tag_name: "0.9.0", + target_commitish: "main", + name: "", + draft: false, + prerelease: false, + created_at: "2021-03-18T22:22:09Z", + published_at: "2021-03-18T22:24:56Z", + assets: [ + { + url: + "https://api.github.com/repos/biw/nuts-testing-repo/releases/assets/33668954", + id: 33668954, + node_id: "MDEyOlJlbGVhc2VBc3NldDMzNjY4OTU0", + name: "test-osx.dmg", + label: null, + uploader: { + login: "biw", + id: 6139501, + node_id: "MDQ6VXNlcjYxMzk1MDE=", + avatar_url: + "https://avatars.githubusercontent.com/u/6139501?v=4", + gravatar_id: "", + url: "https://api.github.com/users/biw", + html_url: "https://github.com/biw", + followers_url: + "https://api.github.com/users/biw/followers", + following_url: + "https://api.github.com/users/biw/following{/other_user}", + gists_url: + "https://api.github.com/users/biw/gists{/gist_id}", + starred_url: + "https://api.github.com/users/biw/starred{/owner}{/repo}", + subscriptions_url: + "https://api.github.com/users/biw/subscriptions", + organizations_url: + "https://api.github.com/users/biw/orgs", + repos_url: "https://api.github.com/users/biw/repos", + events_url: + "https://api.github.com/users/biw/events{/privacy}", + received_events_url: + "https://api.github.com/users/biw/received_events", + type: "User", + site_admin: false, + }, + content_type: "application/x-diskcopy", + state: "uploaded", + size: 22, + download_count: 0, + created_at: "2021-03-18T22:24:36Z", + updated_at: "2021-03-18T22:24:37Z", + browser_download_url: + "https://github.com/biw/nuts-testing-repo/releases/download/0.9.0/test-osx.dmg", + }, + { + url: + "https://api.github.com/repos/biw/nuts-testing-repo/releases/assets/33668959", + id: 33668959, + node_id: "MDEyOlJlbGVhc2VBc3NldDMzNjY4OTU5", + name: "test-osx.zip", + label: null, + uploader: { + login: "biw", + id: 6139501, + node_id: "MDQ6VXNlcjYxMzk1MDE=", + avatar_url: + "https://avatars.githubusercontent.com/u/6139501?v=4", + gravatar_id: "", + url: "https://api.github.com/users/biw", + html_url: "https://github.com/biw", + followers_url: + "https://api.github.com/users/biw/followers", + following_url: + "https://api.github.com/users/biw/following{/other_user}", + gists_url: + "https://api.github.com/users/biw/gists{/gist_id}", + starred_url: + "https://api.github.com/users/biw/starred{/owner}{/repo}", + subscriptions_url: + "https://api.github.com/users/biw/subscriptions", + organizations_url: + "https://api.github.com/users/biw/orgs", + repos_url: "https://api.github.com/users/biw/repos", + events_url: + "https://api.github.com/users/biw/events{/privacy}", + received_events_url: + "https://api.github.com/users/biw/received_events", + type: "User", + site_admin: false, + }, + content_type: "application/zip", + state: "uploaded", + size: 26, + download_count: 0, + created_at: "2021-03-18T22:24:50Z", + updated_at: "2021-03-18T22:24:50Z", + browser_download_url: + "https://github.com/biw/nuts-testing-repo/releases/download/0.9.0/test-osx.zip", + }, + ], + tarball_url: + "https://api.github.com/repos/biw/nuts-testing-repo/tarball/0.9.0", + zipball_url: + "https://api.github.com/repos/biw/nuts-testing-repo/zipball/0.9.0", + body: "", + }, + ]) + }), + }) + }), + } + } +} diff --git a/__tests__/all.js b/__tests__/all.js deleted file mode 100644 index 9ae5124..0000000 --- a/__tests__/all.js +++ /dev/null @@ -1,10 +0,0 @@ -require("should") - -// Sync tests -require("./platforms") -require("./win-releases") - -// Require a backend -require("./versions") -require("./download") -require("./update") diff --git a/__tests__/download.js b/__tests__/download.js index 42154bd..29e58ab 100644 --- a/__tests__/download.js +++ b/__tests__/download.js @@ -1,6 +1,11 @@ var request = require("supertest") var app = require("./testing").app +/** + * NOTE: the download test suite has a dependency on github.com + * Work still needs to be done to refactor the code to prevent this with a mock + */ + var MAC_USERAGENT = "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-us)" + " AppleWebKit/530.19.2 (KHTML, like Gecko) Version/4.0.2 Safari/530.19" @@ -11,44 +16,48 @@ describe("Download", function () { var agent = request.agent(app) describe("Latest version (/)", function () { - it("should fail if no user-agent to detect platform", function (done) { + test("should fail if no user-agent to detect platform", function (done) { agent.get("/").expect(400, done) }) - it.only("should download windows file", function (done) { + test("should download windows file", function (done) { agent .get("/") .set("User-Agent", WIN_USERAGENT) - .expect("Content-Length", "13") + .expect(200) .expect("Content-Disposition", "attachment; filename=test.exe") - .expect(200, done) + .expect("Content-Length", "22") + .end(done) }) - it("should download OS X file as DMG", function (done) { + test("should download OS X file as DMG", function (done) { agent .get("/") .set("User-Agent", MAC_USERAGENT) - .expect("Content-Length", "19") + .expect(200) .expect("Content-Disposition", "attachment; filename=test-osx.dmg") - .expect(200, done) + .expect("Content-Length", "22") + .end(done) }) }) describe("Previous version (/download/version/)", function () { - it("should not have a windows file to download", function (done) { + test("should not have a windows file to download", function (done) { agent .get("/download/version/0.9.0") .set("User-Agent", WIN_USERAGENT) - .expect(404, done) + .expect(404) + .end(done) }) - it("should download OS X file as DMG", function (done) { + test("should download OS X file as DMG", function (done) { agent .get("/download/version/0.9.0") .set("User-Agent", MAC_USERAGENT) - .expect("Content-Length", "19") + .expect(200) .expect("Content-Disposition", "attachment; filename=test-osx.dmg") - .expect(200, done) + .expect("Content-Length", "22") + .end(done) }) }) }) diff --git a/__tests__/platforms.js b/__tests__/platforms.js index 54667b7..7750b03 100644 --- a/__tests__/platforms.js +++ b/__tests__/platforms.js @@ -1,79 +1,70 @@ -require("should") var platforms = require("../lib/utils/platforms") var useragent = require("express-useragent") describe("Platforms", function () { describe("Detect", function () { - it("should detect osx_64", function () { - platforms - .detect("myapp-v0.25.1-darwin-x64.zip") - .should.be.exactly(platforms.OSX_64) - platforms.detect("myapp.dmg").should.be.exactly(platforms.OSX_64) + test("should detect osx_64", function () { + expect(platforms.detect("myapp-v0.25.1-darwin-x64.zip")).toEqual( + platforms.OSX_64, + ) + expect(platforms.detect("myapp.dmg")).toEqual(platforms.OSX_64) }) - it("should detect windows_32", function () { - platforms - .detect("myapp-v0.25.1-win32-ia32.zip") - .should.be.exactly(platforms.WINDOWS_32) - platforms - .detect("atom-1.0.9-delta.nupkg") - .should.be.exactly(platforms.WINDOWS_32) - platforms.detect("RELEASES").should.be.exactly(platforms.WINDOWS_32) + test("should detect windows_32", function () { + expect(platforms.detect("myapp-v0.25.1-win32-ia32.zip")).toEqual( + platforms.WINDOWS_32, + ) + expect(platforms.detect("atom-1.0.9-delta.nupkg")).toEqual( + platforms.WINDOWS_32, + ) + expect(platforms.detect("RELEASES")).toEqual(platforms.WINDOWS_32) }) - it("should detect windows_64", function () { - platforms.detect("MyApp-x64.exe").should.be.exactly(platforms.WINDOWS_64) + test("should detect windows_64", function () { + expect(platforms.detect("MyApp-x64.exe")).toEqual(platforms.WINDOWS_64) var chrome = useragent.parse( "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36", ) - platforms - .detectPlatformByUserAgent(chrome) - .should.be.exactly(platforms.WINDOWS_64) + expect(platforms.detectPlatformByUserAgent(chrome)).toEqual( + platforms.WINDOWS_64, + ) var edge = useragent.parse( "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586", ) - platforms - .detectPlatformByUserAgent(edge) - .should.be.exactly(platforms.WINDOWS_64) + expect(platforms.detectPlatformByUserAgent(edge)).toEqual( + platforms.WINDOWS_64, + ) }) - it("should detect linux", function () { - platforms - .detect("enterprise-amd64.tar.gz") - .should.be.exactly(platforms.LINUX_64) - platforms - .detect("enterprise-amd64.tgz") - .should.be.exactly(platforms.LINUX_64) - platforms - .detect("enterprise-ia32.tar.gz") - .should.be.exactly(platforms.LINUX_32) - platforms - .detect("enterprise-ia32.tgz") - .should.be.exactly(platforms.LINUX_32) + test("should detect linux", function () { + expect(platforms.detect("enterprise-amd64.tar.gz")).toEqual( + platforms.LINUX_64, + ) + expect(platforms.detect("enterprise-amd64.tgz")).toEqual( + platforms.LINUX_64, + ) + expect(platforms.detect("enterprise-ia32.tar.gz")).toEqual( + platforms.LINUX_32, + ) + expect(platforms.detect("enterprise-ia32.tgz")).toEqual( + platforms.LINUX_32, + ) }) - it("should detect debian_32", function () { - platforms - .detect("atom-ia32.deb") - .should.be.exactly(platforms.LINUX_DEB_32) + test("should detect debian_32", function () { + expect(platforms.detect("atom-ia32.deb")).toEqual(platforms.LINUX_DEB_32) }) - it("should detect debian_64", function () { - platforms - .detect("atom-amd64.deb") - .should.be.exactly(platforms.LINUX_DEB_64) + test("should detect debian_64", function () { + expect(platforms.detect("atom-amd64.deb")).toEqual(platforms.LINUX_DEB_64) }) - it("should detect rpm_32", function () { - platforms - .detect("atom-ia32.rpm") - .should.be.exactly(platforms.LINUX_RPM_32) + test("should detect rpm_32", function () { + expect(platforms.detect("atom-ia32.rpm")).toEqual(platforms.LINUX_RPM_32) }) - it("should detect rpm_64", function () { - platforms - .detect("atom-amd64.rpm") - .should.be.exactly(platforms.LINUX_RPM_64) + test("should detect rpm_64", function () { + expect(platforms.detect("atom-amd64.rpm")).toEqual(platforms.LINUX_RPM_64) }) }) @@ -187,47 +178,47 @@ describe("Platforms", function () { ], } - it("should resolve to best platform", function () { - platforms - .resolve(version, "osx") - .filename.should.be.exactly("test-3.3.1-darwin.dmg") - platforms - .resolve(version, "win32") - .filename.should.be.exactly("AtomSetup.exe") - platforms - .resolve(version, "linux_64") - .filename.should.be.exactly("atom-amd64.tar.gz") - platforms - .resolve(version, "linux_32") - .filename.should.be.exactly("atom-ia32.tar.gz") - platforms - .resolve(version, "linux_rpm_32") - .filename.should.be.exactly("atom-ia32.rpm") - platforms - .resolve(version, "linux_rpm_64") - .filename.should.be.exactly("atom-amd64.rpm") - platforms - .resolve(version, "linux_deb_32") - .filename.should.be.exactly("atom-ia32.deb") - platforms - .resolve(version, "linux_deb_64") - .filename.should.be.exactly("atom-amd64.deb") + test("should resolve to best platform", function () { + expect(platforms.resolve(version, "osx").filename).toEqual( + "test-3.3.1-darwin.dmg", + ) + expect(platforms.resolve(version, "win32").filename).toEqual( + "AtomSetup.exe", + ) + expect(platforms.resolve(version, "linux_64").filename).toEqual( + "atom-amd64.tar.gz", + ) + expect(platforms.resolve(version, "linux_32").filename).toEqual( + "atom-ia32.tar.gz", + ) + expect(platforms.resolve(version, "linux_rpm_32").filename).toEqual( + "atom-ia32.rpm", + ) + expect(platforms.resolve(version, "linux_rpm_64").filename).toEqual( + "atom-amd64.rpm", + ) + expect(platforms.resolve(version, "linux_deb_32").filename).toEqual( + "atom-ia32.deb", + ) + expect(platforms.resolve(version, "linux_deb_64").filename).toEqual( + "atom-amd64.deb", + ) }) - it("should resolve to best platform with a preferred filetype", function () { - platforms - .resolve(version, "osx", { + test("should resolve to best platform with a preferred filetype", function () { + expect( + platforms.resolve(version, "osx", { filePreference: [".zip"], - }) - .filename.should.be.exactly("test-3.3.1-darwin-x64.zip") + }).filename, + ).toEqual("test-3.3.1-darwin-x64.zip") }) - it("should resolve to best platform with a wanted filetype", function () { - platforms - .resolve(version, "osx", { + test("should resolve to best platform with a wanted filetype", function () { + expect( + platforms.resolve(version, "osx", { wanted: ".zip", - }) - .filename.should.be.exactly("test-3.3.1-darwin-x64.zip") + }).filename, + ).toEqual("test-3.3.1-darwin-x64.zip") }) }) }) diff --git a/__tests__/testing.js b/__tests__/testing.js index 3371c8d..5c1e7b1 100644 --- a/__tests__/testing.js +++ b/__tests__/testing.js @@ -1,7 +1,7 @@ var nuts = require("../lib") var config = { - repository: "biw/nuts-testing-repo", + repository: "biw/awdao[uid wpaoduifuck", token: process.env.GITHUB_TOKEN, } @@ -12,3 +12,8 @@ module.exports = { app: app, nuts: instance, } + +test("testing.js", () => { + // this is a blank test, need to refactor this file + expect(1).toEqual(1) +}) diff --git a/__tests__/update.js b/__tests__/update.js index 0a52bec..a020710 100644 --- a/__tests__/update.js +++ b/__tests__/update.js @@ -1,5 +1,4 @@ var request = require("supertest") -var expect = require("expect") var app = require("./testing").app @@ -8,11 +7,11 @@ describe("Update", function () { describe("Squirrel.Mac (OS X)", function () { describe("/update/osx/", function () { - it("should return a 204 if using latest version", function (done) { + test("should return a 204 if using latest version", function (done) { agent.get("/update/osx/1.0.0").expect(204, done) }) - it("should return a 200 with json if using old stable version", function (done) { + test("should return a 200 with json if using old stable version", function (done) { agent .get("/update/osx/0.9.0") .expect("Content-Type", /json/) @@ -24,7 +23,7 @@ describe("Update", function () { .expect(200, done) }) - it("should return a 200 with json if using old beta version (1)", function (done) { + test("should return a 200 with json if using old beta version (1)", function (done) { agent .get("/update/osx/0.9.1-beta") .expect("Content-Type", /json/) @@ -34,7 +33,7 @@ describe("Update", function () { .expect(200, done) }) - it("should return a 200 with json if using old beta version (2)", function (done) { + test("should return a 200 with json if using old beta version (2)", function (done) { agent .get("/update/osx/0.9.1-beta.1") .expect("Content-Type", /json/) @@ -44,7 +43,7 @@ describe("Update", function () { .expect(200, done) }) - it("should return a 200 with json if using old alpha version (1)", function (done) { + test("should return a 200 with json if using old alpha version (1)", function (done) { agent .get("/update/osx/0.9.2-alpha.2") .expect("Content-Type", /json/) @@ -56,7 +55,7 @@ describe("Update", function () { }) describe("/update/channel/beta/osx", function () { - it("should update from 0.9.1-beta to 1.0.1-beta.0", function (done) { + test("should update from 0.9.1-beta to 1.0.1-beta.0", function (done) { agent .get("/update/channel/beta/osx/0.9.1-beta") .expect("Content-Type", /json/) @@ -66,13 +65,13 @@ describe("Update", function () { .expect(200, done) }) - it("should not update from 1.0.1-beta.0", function (done) { + test("should not update from 1.0.1-beta.0", function (done) { agent.get("/update/channel/beta/osx/1.0.1-beta.0").expect(204, done) }) }) describe("/update/channel/alpha/osx", function () { - it("should update from 0.9.1-beta to 1.1.0-alpha.0", function (done) { + test("should update from 0.9.1-beta to 1.1.0-alpha.0", function (done) { agent .get("/update/channel/alpha/osx/0.9.1-beta") .expect("Content-Type", /json/) diff --git a/__tests__/versions.js b/__tests__/versions.js index f7c67f7..113083e 100644 --- a/__tests__/versions.js +++ b/__tests__/versions.js @@ -1,9 +1,8 @@ -var expect = require("expect") var versions = require("./testing").nuts.versions describe("Versions", function () { describe(".list", function () { - it("should list all versions", function () { + test("should list all versions", function () { return versions.list().then(function (out) { expect(out.length).toEqual(7) }) @@ -11,7 +10,7 @@ describe("Versions", function () { }) describe(".filter", function () { - it("should filter correctly by tag name", function () { + test("should filter correctly by tag name", function () { return versions.filter({ tag: ">=0.9.0" }).then(function (out) { expect(out.length).toEqual(2) expect(out[0].tag).toEqual("1.0.0") @@ -19,7 +18,7 @@ describe("Versions", function () { }) }) - it("should filter correctly by tag name (stripChannel)", function () { + test("should filter correctly by tag name (stripChannel)", function () { return versions .filter({ tag: ">=1.0.0", diff --git a/__tests__/win-releases.js b/__tests__/win-releases.js index c22a18d..67afc27 100644 --- a/__tests__/win-releases.js +++ b/__tests__/win-releases.js @@ -2,27 +2,25 @@ var winReleases = require("../lib/utils/win-releases") describe("Windows RELEASES", function () { describe("Version Normalization", function () { - it("should not changed version without pre-release", function () { - winReleases.normVersion("1.0.0").should.be.exactly("1.0.0") - winReleases.normVersion("4.5.0").should.be.exactly("4.5.0") - winReleases.normVersion("67.8.345").should.be.exactly("67.8.345") + test("should not changed version without pre-release", function () { + expect(winReleases.normVersion("1.0.0")).toEqual("1.0.0") + expect(winReleases.normVersion("4.5.0")).toEqual("4.5.0") + expect(winReleases.normVersion("67.8.345")).toEqual("67.8.345") }) - it("should normalize the pre-release", function () { - winReleases.normVersion("1.0.0-alpha.1").should.be.exactly("1.0.0.1001") - winReleases.normVersion("1.0.0-beta.1").should.be.exactly("1.0.0.2001") - winReleases - .normVersion("1.0.0-unstable.1") - .should.be.exactly("1.0.0.3001") - winReleases.normVersion("1.0.0-rc.1").should.be.exactly("1.0.0.4001") - winReleases.normVersion("1.0.0-14").should.be.exactly("1.0.0.14") + test("should normalize the pre-release", function () { + expect(winReleases.normVersion("1.0.0-alpha.1")).toEqual("1.0.0.1001") + expect(winReleases.normVersion("1.0.0-beta.1")).toEqual("1.0.0.2001") + expect(winReleases.normVersion("1.0.0-unstable.1")).toEqual("1.0.0.3001") + expect(winReleases.normVersion("1.0.0-rc.1")).toEqual("1.0.0.4001") + expect(winReleases.normVersion("1.0.0-14")).toEqual("1.0.0.14") }) - it("should correctly return to a semver", function () { - winReleases.toSemver("1.0.0.1001").should.be.exactly("1.0.0-alpha.1") - winReleases.toSemver("1.0.0.2001").should.be.exactly("1.0.0-beta.1") - winReleases.toSemver("1.0.0.2015").should.be.exactly("1.0.0-beta.15") - winReleases.toSemver("1.0.0").should.be.exactly("1.0.0") + test("should correctly return to a semver", function () { + expect(winReleases.toSemver("1.0.0.1001")).toEqual("1.0.0-alpha.1") + expect(winReleases.toSemver("1.0.0.2001")).toEqual("1.0.0-beta.1") + expect(winReleases.toSemver("1.0.0.2015")).toEqual("1.0.0-beta.15") + expect(winReleases.toSemver("1.0.0")).toEqual("1.0.0") }) }) @@ -35,42 +33,37 @@ describe("Windows RELEASES", function () { "8F5FDFD0BD81475EAD95E9E415579A852476E5FC atom-0.179.0-full.nupkg 81996151", ) - it("should have parsed all lines", function () { - releases.should.be.an.Array() - releases.length.should.be.exactly(5) + test("should have parsed all lines", function () { + expect(Array.isArray(releases)).toEqual(true) + expect(releases.length).toEqual(5) }) - it("should parse a one-line file (with utf-8 BOM)", function () { + test("should parse a one-line file (with utf-8 BOM)", function () { var oneRelease = winReleases.parse( "\uFEFF24182FAD211FB9EB72610B1C086810FE37F70AE3 gitbook-editor-4.0.0-full.nupkg 46687158", ) - oneRelease.length.should.be.exactly(1) + expect(oneRelease.length).toEqual(1) }) - it("should correctly parse sha, version, isDelta, filename and size", function () { - releases[0].sha.should.be.a.String() - releases[0].sha.should.be.exactly( + test("should correctly parse sha, version, isDelta, filename and size", function () { + expect(releases[0].sha).toEqual( "62E8BF432F29E8E08240910B85EDBF2D1A41EDF2", ) + expect(releases[0].filename).toEqual("atom-0.178.0-full.nupkg") + expect(releases[0].size).toEqual(81272434) - releases[0].filename.should.be.a.String() - releases[0].filename.should.be.exactly("atom-0.178.0-full.nupkg") - - releases[0].size.should.be.a.Number() - releases[0].size.should.be.exactly(81272434) - - releases[0].isDelta.should.be.a.Boolean() - releases[0].version.should.be.a.String() + expect(typeof releases[0].isDelta).toEqual("boolean") + expect(typeof releases[0].version).toEqual("string") }) - it("should correctly detect deltas", function () { - releases[0].isDelta.should.be.False() - releases[1].isDelta.should.be.True() + test("should correctly detect deltas", function () { + expect(releases[0].isDelta).toEqual(false) + expect(releases[1].isDelta).toEqual(true) }) - it("should correctly parse versions", function () { - releases[0].version.should.be.exactly("0.178.0") - releases[1].version.should.be.exactly("0.178.1") + test("should correctly parse versions", function () { + expect(releases[0].version).toEqual("0.178.0") + expect(releases[1].version).toEqual("0.178.1") }) }) @@ -84,13 +77,13 @@ describe("Windows RELEASES", function () { var releases = winReleases.parse(input) - it("should correctly generate a RELEASES file", function () { - winReleases.generate(releases).should.be.exactly(input) + test("should correctly generate a RELEASES file", function () { + expect(winReleases.generate(releases)).toEqual(input) }) it("should correctly generate filenames", function () { - winReleases - .generate([ + expect( + winReleases.generate([ { sha: "62E8BF432F29E8E08240910B85EDBF2D1A41EDF2", version: "1.0.0", @@ -98,10 +91,10 @@ describe("Windows RELEASES", function () { size: 81272434, isDelta: false, }, - ]) - .should.be.exactly( - "62E8BF432F29E8E08240910B85EDBF2D1A41EDF2 atom-1.0.0-full.nupkg 81272434", - ) + ]), + ).toEqual( + "62E8BF432F29E8E08240910B85EDBF2D1A41EDF2 atom-1.0.0-full.nupkg 81272434", + ) }) }) }) diff --git a/bin/web.js b/bin/web.js index 3a8500a..e4ca6e5 100644 --- a/bin/web.js +++ b/bin/web.js @@ -53,28 +53,14 @@ myNuts.before("api", function (access, next) { // Log download myNuts.before("download", function (download, next) { console.log( - "download", - download.platform.filename, - "for version", - download.version.tag, - "on channel", - download.version.channel, - "for", - download.platform.type, + `download ${download.platform.filename} for version ${download.version.tag} on channel ${download.version.channel} for ${download.platform.type}`, ) next() }) myNuts.after("download", function (download, next) { console.log( - "downloaded", - download.platform.filename, - "for version", - download.version.tag, - "on channel", - download.version.channel, - "for", - download.platform.type, + `downloaded ${download.platform.filename} for version ${download.version.tag} on channel ${download.version.channel} for ${download.platform.type}`, ) // Track on segment if enabled @@ -113,23 +99,22 @@ app.use(function (req, res, next) { res.status(404).send("Page not found") }) app.use(function (err, req, res, next) { - var msg = err.message || err - var code = 500 + const msg = err.message || err console.error(err.stack || err) // Return error res.format({ "text/plain": function () { - res.status(code).send(msg) + res.status(500).send(msg) }, "text/html": function () { - res.status(code).send(msg) + res.status(500).send(msg) }, "application/json": function () { - res.status(code).send({ + res.status(500).send({ error: msg, - code: code, + code: 500, }) }, }) @@ -145,7 +130,7 @@ myNuts var host = server.address().address var port = server.address().port - console.log("Listening at http://%s:%s", host, port) + console.log(`Listening at http://${host}:${port}`) }) }, function (err) { diff --git a/lib/backends/github.js b/lib/backends/github.js index 8eb2ca1..839fa69 100644 --- a/lib/backends/github.js +++ b/lib/backends/github.js @@ -21,7 +21,7 @@ function GitHubBackend() { this.client = new GitHub({ token: this.opts.token, - endpoint: this.opts.endpoint, + endpoint: this.opts.endpoint || "https://api.github.com", username: this.opts.username, password: this.opts.password, }) diff --git a/lib/nuts.js b/lib/nuts.js index d0fbd4c..90bf21e 100644 --- a/lib/nuts.js +++ b/lib/nuts.js @@ -186,10 +186,9 @@ Nuts.prototype.serveAsset = function (req, res, version, asset) { Nuts.prototype._onDownload = function (req, res, next) { var that = this // If specific version, don't enforce a channel - var channel = tag != "latest" ? "*" : req.params.channel - console.log(channel) var platform = req.params.platform var tag = req.params.tag || "latest" + var channel = tag != "latest" ? "*" : req.params.channel var filename = req.params.filename var filetypeWanted = req.query.filetype @@ -213,9 +212,8 @@ Nuts.prototype._onDownload = function (req, res, next) { platform: platform, tag: tag, }) - // Fallback to any channels if no version found on stable one - .fail(function (err) { + .catch(function (err) { if (channel || tag != "latest") throw err return that.versions.resolve({ @@ -224,7 +222,6 @@ Nuts.prototype._onDownload = function (req, res, next) { tag: tag, }) }) - // Serve downloads .then(function (version) { var asset @@ -241,7 +238,7 @@ Nuts.prototype._onDownload = function (req, res, next) { if (!asset) { res - .status(400) + .status(404) .send( "No download available for platform " + _.escape(platform) + @@ -257,7 +254,7 @@ Nuts.prototype._onDownload = function (req, res, next) { // Call analytic middleware, then serve return that.serveAsset(req, res, version, asset) }) - .fail(function () { + .catch(function () { res.status(404).send("No download available for platform " + platform) }) } @@ -275,7 +272,7 @@ Nuts.prototype.onUpdateRedirect = function (req, res, next) { `${that.opts.routePrefix}update/${req.query.platform}/${req.query.version}`, ) }) - .fail(next) + .catch(next) } // Updater used by OSX (Squirrel.Mac) and others @@ -333,7 +330,7 @@ Nuts.prototype.onUpdate = function (req, res, next) { pub_date: latest.published_at.toISOString(), }) }) - .fail(next) + .catch(next) } // Update Windows (Squirrel.Windows) @@ -396,7 +393,7 @@ Nuts.prototype.onUpdateWin = function (req, res, next) { res.send(output) }) }) - .fail(next) + .catch(next) } // Serve releases notes @@ -429,7 +426,7 @@ Nuts.prototype.onServeNotes = function (req, res, next) { }, }) }) - .fail(next) + .catch(next) } // Serve versions list as RSS @@ -469,7 +466,7 @@ Nuts.prototype.onServeVersionsFeed = function (req, res, next) { res.set("Content-Type", "application/atom+xml; charset=utf-8") res.send(feed.render("atom-1.0")) }) - .fail(next) + .catch(next) } // Control access to the API diff --git a/lib/versions.js b/lib/versions.js index e352e2b..4965685 100644 --- a/lib/versions.js +++ b/lib/versions.js @@ -66,7 +66,7 @@ function normalizeVersion(release) { .value() return { - tag: normalizeTag(release.tag_name).split("-")[0], + tag: normalizeTag(release.tag_name), channel: extractChannel(release.tag_name), notes: release.body || "", published_at: new Date(release.published_at), @@ -168,7 +168,6 @@ Versions.prototype.filter = function (opts) { Versions.prototype.resolve = function (opts) { return this.filter(opts).then(function (versions) { var version = _.first(versions) - console.log(versions) if (!version) { throw createError(404, "Version not found: " + opts.tag) } diff --git a/package.json b/package.json index df6d81b..7a77eb4 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "homepage": "https://github.com/biw/nuts", "license": "Apache-2.0", "dependencies": { + "@types/jest": "^26.0.21", "analytics-node": "2.1.1", "basic-auth": "1.0.3", "body-parser": "1.12.3", @@ -64,7 +65,7 @@ "scripts": { "start": "node bin/web.js", "dev": "export $(grep -v '^#' .env | xargs) && nodemon bin/web.js", - "test": "export $(grep -v '^#' .env | xargs) && mocha --bail --reporter spec --timeout 600000 ./__tests__/all.js", + "test": "export $(grep -v '^#' .env | xargs) && jest", "lint": "eslint bin lib test" } } diff --git a/yarn.lock b/yarn.lock index b0e95f0..d0ca631 100644 --- a/yarn.lock +++ b/yarn.lock @@ -607,6 +607,14 @@ dependencies: "@types/istanbul-lib-report" "*" +"@types/jest@^26.0.21": + version "26.0.21" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.21.tgz#3a73c2731e7e4f0fbaea56ce7ff8c79cf812bd24" + integrity sha512-ab9TyM/69yg7eew9eOwKMUmvIZAKEGZYlq/dhe5/0IMUd/QLJv5ldRMdddSn+u22N13FP3s5jYyktxuBwY0kDA== + dependencies: + jest-diff "^26.0.0" + pretty-format "^26.0.0" + "@types/json-schema@^7.0.3": version "7.0.7" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" @@ -3480,7 +3488,7 @@ jest-config@^26.6.3: micromatch "^4.0.2" pretty-format "^26.6.2" -jest-diff@^26.6.2: +jest-diff@^26.0.0, jest-diff@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA== @@ -4905,7 +4913,7 @@ pretty-format@^23.0.1: ansi-regex "^3.0.0" ansi-styles "^3.2.0" -pretty-format@^26.6.2: +pretty-format@^26.0.0, pretty-format@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== From 907f01c94e99cd5587b8a95a2b933c3583f03e8a Mon Sep 17 00:00:00 2001 From: Ben Williams Date: Thu, 18 Mar 2021 19:26:54 -0700 Subject: [PATCH 13/14] updated lint command for new test folders --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7a77eb4..6f34da1 100644 --- a/package.json +++ b/package.json @@ -66,6 +66,6 @@ "start": "node bin/web.js", "dev": "export $(grep -v '^#' .env | xargs) && nodemon bin/web.js", "test": "export $(grep -v '^#' .env | xargs) && jest", - "lint": "eslint bin lib test" + "lint": "eslint bin lib __mocks__ __tests__" } } From 57cc793a256a096aa2d4a92e3c25bc4f18856612 Mon Sep 17 00:00:00 2001 From: Ben Williams Date: Thu, 18 Mar 2021 19:29:09 -0700 Subject: [PATCH 14/14] updated to jest --ci --- .circleci/config.yml | 2 +- package.json | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 4131489..d267437 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -22,7 +22,7 @@ commands: steps: - run: name: yarn test - command: yarn test + command: yarn test:ci install_and_test: steps: - install_and_cache_yarn_linux diff --git a/package.json b/package.json index 6f34da1..17eae10 100644 --- a/package.json +++ b/package.json @@ -66,6 +66,7 @@ "start": "node bin/web.js", "dev": "export $(grep -v '^#' .env | xargs) && nodemon bin/web.js", "test": "export $(grep -v '^#' .env | xargs) && jest", + "test:ci": "jest --ci", "lint": "eslint bin lib __mocks__ __tests__" } }