diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 0000000..b553f1d --- /dev/null +++ b/.eslintrc @@ -0,0 +1,53 @@ +{ + "env": { + "es6": true, + "jest": true, + "node": true + }, + "extends": "standard", + "rules": { + "curly": [ + "off" + ], + "generator-star-spacing": [ + "warn", + { + "after": true, + "before": false + } + ], + "key-spacing": [ + "off" + ], + "max-len": [ + "warn", + 80 + ], + "no-console": [ + "error" + ], + "no-multi-spaces": [ + "off" + ], + "no-multi-str": [ + "off" + ], + "semi": [ + "error", + "always" + ], + "space-before-function-paren": [ + "warn", + "never" + ], + "standard/array-bracket-even-spacing": [ + "off" + ], + "standard/object-curly-even-spacing": [ + "off" + ], + "template-tag-spacing": [ + "off" + ] + } +} diff --git a/.gitignore b/.gitignore index 598a2e6..cbe7927 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ node_modules .config +yarn-error.log +coverage diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..5b9554a --- /dev/null +++ b/.travis.yml @@ -0,0 +1,15 @@ +language: node_js + +node_js: + - "8" + +cache: + yarn: true + directories: + - "node_modules" + +before_script: + - yarn add coveralls + +script: + - yarn test-travis diff --git a/.vscode/launch.json b/.vscode/launch.json index 8f6f845..b992297 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -18,6 +18,15 @@ "args":[ "-V" ] + }, + { + "type": "node", + "request": "launch", + "name": "Launch Program submitted", + "program": "${workspaceFolder}/index.js", + "args": [ + "-s" + ] } ] -} \ No newline at end of file +} diff --git a/README.md b/README.md index 820269d..472ddce 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,8 @@ A very simple cli to check merge requests on Gitlab. ![npm](http://img.shields.io/npm/v/@pindakaasman/mergify.svg) +[![Build Status](https://travis-ci.org/RamonGebben/mergify.svg?branch=master)](https://travis-ci.org/RamonGebben/mergify) +[![Coverage Status](https://coveralls.io/repos/github/RamonGebben/mergify/badge.svg?branch=master)](https://coveralls.io/github/RamonGebben/mergify?branch=master) ## Install diff --git a/index.js b/index.js index 24d36e5..d4785fd 100755 --- a/index.js +++ b/index.js @@ -2,131 +2,17 @@ 'use strict'; const program = require('commander'); -const R = require('ramda'); -const chalk = require('chalk'); -const inquirer = require('inquirer'); -const { Spinner } = require('cli-spinner'); const pack = require('./package.json'); -const { doFetch } = require('./lib/doFetch'); -const { getMergeRequests } = require('./lib/getMergeRequests'); -const { printMergeRequest } = require('./lib/printMergeRequest'); -const { writeConfig } = require('./lib/writeConfig'); -const { readConfig } = require('./lib/readConfig'); +const { configure } = require('./lib/commands/configure'); +const { verify } = require('./lib/commands/verify'); +const { getAllAssigned } = require('./lib/commands/getAllAssigned'); +const { getAllSubmitted } = require('./lib/commands/getAllSubmitted'); -const UNAUTHORIZED_MESSAGE = '401 Unauthorized'; - -const simplifyMergeRequest = R.pick([ - 'title', - 'id', - 'iid', - 'target_branch', - 'source_branch', - 'state', - 'author', - 'assignee', - 'web_url', - 'merge_status', -]); - -const spinner = new Spinner('Processing.. %s'); -spinner.setSpinnerString('|/-\\'); - -const getAllAssigned = async ({ userId }) => { - spinner.start(); - const params = { - assignee_id: userId, - }; - - const mergeRequests = await getMergeRequests(params); - spinner.stop(); - - const simplifiedMergeRequest = R.map(simplifyMergeRequest)(mergeRequests); - const filteredMRs = simplifiedMergeRequest - .filter(({ state }) => state === 'opened'); - - if (filteredMRs.length) { - return filteredMRs - .forEach(printMergeRequest); - } - - return console.log('\nNo MRs assigned to you'); - -} - -const getAllSubmitted = async ({ userId }) => { - spinner.start(); - const params = { - author_id: userId, - }; - - const mergeRequests = await getMergeRequests(params); - spinner.stop(); - const simplifiedMergeRequest = R.map(simplifyMergeRequest)(mergeRequests); - const filteredMRs = simplifiedMergeRequest - .filter(({ state }) => state !== 'merged'); - - if (filteredMRs.length) { - return filteredMRs - .forEach(printMergeRequest); - } - - return console.log('\nNo MRs ready for review'); -} - -const verify = async ({ userId }) => { - try { - console.log('Verifying your config'); - spinner.start(); - const userResp = await doFetch(`users/${userId}`); - - if (R.path(['message'], userResp) === UNAUTHORIZED_MESSAGE) { - throw new Error(UNAUTHORIZED_MESSAGE); - } - - spinner.stop(); - console.log('\nšŸŽ‰ All set, your ready to mergify!'); - return process.exit(0); - } catch (error) { - spinner.stop(); - console.log('\nšŸ™€ Oh no, could not complete verify. Please review your config'); - console.log(error); - process.exit(1); - } -} - -const configure = async () => { - try { - const answers = await inquirer.prompt([ - { - type: 'input', - name: 'userId', - message: 'What is your Gitlab User ID?' - }, - { - type: 'password', - name: 'privateToken', - message: 'What private token shall we use?', - }, - { - type: 'input', - name: 'domain', - default: 'gitlab.com', - message: 'On what domain is your Gitlab instance?' - } - ]); - - await writeConfig(answers); - - return verify(answers); - } catch (error) { - throw new Error(error); - process.exit(1); - } -} +const { readConfig } = require('./lib/utils/readConfig'); program .name('mergify') - .version(pack.version) + .version(pack.version); const options = [ { @@ -148,7 +34,7 @@ const options = [ trigger: '-v --verify', description: 'Verify your config is correct', fn: verify - }, + } ]; const run = async() => { @@ -169,7 +55,7 @@ const run = async() => { program.option(trigger, description, (...args) => fn(config, ...args)); }); - return program + return program; }; run().then(p => p.parse(process.argv)); diff --git a/lib/commands/configure/index.js b/lib/commands/configure/index.js new file mode 100644 index 0000000..4ef3cac --- /dev/null +++ b/lib/commands/configure/index.js @@ -0,0 +1,19 @@ +const inquirer = require('inquirer'); +const { verify } = require('../verify'); +const { writeConfig } = require('../../utils/writeConfig'); +const { inputOptions } = require('./inputOptions'); + +const configure = async() => { + try { + const answers = await inquirer.prompt(inputOptions); + await writeConfig(answers); + + return verify(answers); + } catch (error) { + throw new Error(error); + } +}; + +module.exports = { + configure +}; diff --git a/lib/commands/configure/inputOptions.js b/lib/commands/configure/inputOptions.js new file mode 100644 index 0000000..65cbca9 --- /dev/null +++ b/lib/commands/configure/inputOptions.js @@ -0,0 +1,20 @@ +module.exports = { + inputOptions: [ + { + type: 'input', + name: 'userId', + message: 'What is your Gitlab User ID?' + }, + { + type: 'password', + name: 'privateToken', + message: 'What private token shall we use?' + }, + { + type: 'input', + name: 'domain', + default: 'gitlab.com', + message: 'On what domain is your Gitlab instance?' + } + ] +}; diff --git a/lib/commands/getAllAssigned/index.js b/lib/commands/getAllAssigned/index.js new file mode 100644 index 0000000..ae0afbb --- /dev/null +++ b/lib/commands/getAllAssigned/index.js @@ -0,0 +1,33 @@ +const { + map +} = require('ramda'); +const { spinner } = require('../../utils/spinner'); +const { logger } = require('../../utils/logger'); +const { getMergeRequests } = require('../../utils/getMergeRequests'); +const { printMergeRequest } = require('../../utils/printMergeRequest'); +const { simplifyMergeRequest } = require('../../utils/simplifyMergeRequest'); + +const getAllAssigned = async({ userId }) => { + spinner.start(); + const params = { + assignee_id: userId + }; + + const mergeRequests = await getMergeRequests(params); + spinner.stop(); + + const simplifiedMergeRequest = map(simplifyMergeRequest)(mergeRequests); + const filteredMRs = simplifiedMergeRequest + .filter(({ state }) => state === 'opened'); + + if (filteredMRs.length) { + return filteredMRs + .forEach(printMergeRequest); + } + + return logger.log('\nNo MRs assigned to you'); +}; + +module.exports = { + getAllAssigned +}; diff --git a/lib/commands/getAllSubmitted/index.js b/lib/commands/getAllSubmitted/index.js new file mode 100644 index 0000000..7c49d3c --- /dev/null +++ b/lib/commands/getAllSubmitted/index.js @@ -0,0 +1,32 @@ +const { + map +} = require('ramda'); +const { spinner } = require('../../utils/spinner'); +const { logger } = require('../../utils/logger'); +const { getMergeRequests } = require('../../utils/getMergeRequests'); +const { printMergeRequest } = require('../../utils/printMergeRequest'); +const { simplifyMergeRequest } = require('../../utils/simplifyMergeRequest'); + +const getAllSubmitted = async({ userId }) => { + spinner.start(); + const params = { + author_id: userId + }; + + const mergeRequests = await getMergeRequests(params); + spinner.stop(); + const simplifiedMergeRequest = map(simplifyMergeRequest)(mergeRequests); + const filteredMRs = simplifiedMergeRequest + .filter(({ state }) => state !== 'merged'); + + if (filteredMRs.length) { + return filteredMRs + .forEach(printMergeRequest); + } + + return logger.log('\nNo MRs ready for review'); +}; + +module.exports = { + getAllSubmitted +}; diff --git a/lib/commands/verify/index.js b/lib/commands/verify/index.js new file mode 100644 index 0000000..bdf4999 --- /dev/null +++ b/lib/commands/verify/index.js @@ -0,0 +1,33 @@ +const { + path +} = require('ramda'); +const { spinner } = require('../../utils/spinner'); +const { logger } = require('../../utils/logger'); +const { doFetch } = require('../../utils/doFetch'); + +const UNAUTHORIZED_MESSAGE = '401 Unauthorized'; + +const verify = async({ userId }) => { + try { + logger.log('Verifying your config'); + spinner.start(); + const userResp = await doFetch(`users/${userId}`); + + if (path(['message'], userResp) === UNAUTHORIZED_MESSAGE) { + throw new Error(UNAUTHORIZED_MESSAGE); + } + + spinner.stop(); + logger.log('\nšŸŽ‰ All set, your ready to mergify!'); + return process.exit(0); + } catch (error) { + spinner.stop(); + logger.log('\nšŸ™€ Oh no, could not complete verify. Please review your config'); + logger.log(error); + process.exit(1); + } +}; + +module.exports = { + verify +}; diff --git a/lib/getMergeRequests/index.spec.js b/lib/getMergeRequests/index.spec.js deleted file mode 100644 index 55eb53a..0000000 --- a/lib/getMergeRequests/index.spec.js +++ /dev/null @@ -1,8 +0,0 @@ -const { getMergeRequests } = require('./index'); - -describe('getMergeRequests/index', () => { - it('should fetch merge requests', async() => { - const mergeRequests = await getMergeRequests(); - expect(mergeRequests).toBeDefined(); - }); -}); diff --git a/lib/doFetch/index.js b/lib/utils/doFetch/index.js similarity index 88% rename from lib/doFetch/index.js rename to lib/utils/doFetch/index.js index 6ecf428..50b3b2a 100644 --- a/lib/doFetch/index.js +++ b/lib/utils/doFetch/index.js @@ -6,12 +6,12 @@ async function doFetch(path) { const { privateToken, - domain, + domain } = config; const fetchOptions = { headers: { - 'PRIVATE-TOKEN': privateToken, + 'PRIVATE-TOKEN': privateToken } }; diff --git a/lib/utils/doFetch/index.spec.js b/lib/utils/doFetch/index.spec.js new file mode 100644 index 0000000..af97240 --- /dev/null +++ b/lib/utils/doFetch/index.spec.js @@ -0,0 +1,37 @@ +const fetch = require('node-fetch'); +const { + doFetch +} = require('./index'); + +const mock = require('mock-fs'); + +describe('utils/doFetch', () => { + beforeEach(() => { + const configPath = `${__dirname}/../../../.config`; + const stub = { + userId: 42, + domain: 'gitlab.com', + privateToken: '90809657890' + }; + + mock({ + [configPath]: JSON.stringify(stub) + }); + }); + + test('it can fetch', async() => { + const mockResponse = [ + { + id: '123', + sha: 'gfhjewrdhibj' + } + ]; + + fetch.mockResponse(JSON.stringify(mockResponse)); + const resp = await doFetch('users'); + + return expect(resp).toEqual(mockResponse); + }); + + afterEach(mock.restore); +}); diff --git a/lib/getMergeRequests/index.js b/lib/utils/getMergeRequests/index.js similarity index 98% rename from lib/getMergeRequests/index.js rename to lib/utils/getMergeRequests/index.js index 49a6f5c..3ad854a 100644 --- a/lib/getMergeRequests/index.js +++ b/lib/utils/getMergeRequests/index.js @@ -8,4 +8,4 @@ async function getMergeRequests(params) { module.exports = { getMergeRequests -} +}; diff --git a/lib/utils/getMergeRequests/index.spec.js b/lib/utils/getMergeRequests/index.spec.js new file mode 100644 index 0000000..4f73fed --- /dev/null +++ b/lib/utils/getMergeRequests/index.spec.js @@ -0,0 +1,34 @@ +const fetch = require('node-fetch'); +const { getMergeRequests } = require('./index'); +const mock = require('mock-fs'); + +describe('utils/getMergeRequests', () => { + beforeEach(() => { + const configPath = `${__dirname}/../../../.config`; + const stub = { + userId: 42, + domain: 'gitlab.com', + privateToken: '90809657890' + }; + + mock({ + [configPath]: JSON.stringify(stub) + }); + }); + + it('should fetch merge requests', async() => { + const mockResponse = [ + { + id: '123', + sha: 'gfhjewrdhibj' + } + ]; + + fetch.mockResponse(JSON.stringify(mockResponse)); + + const mergeRequests = await getMergeRequests({}); + expect(mergeRequests).toEqual(mockResponse); + }); + + afterEach(mock.restore); +}); diff --git a/lib/utils/logger/index.js b/lib/utils/logger/index.js new file mode 100644 index 0000000..2f81c59 --- /dev/null +++ b/lib/utils/logger/index.js @@ -0,0 +1,3 @@ +module.exports = { + logger: console +}; diff --git a/lib/printMergeRequest/index.js b/lib/utils/printMergeRequest/index.js similarity index 58% rename from lib/printMergeRequest/index.js rename to lib/utils/printMergeRequest/index.js index fa0f9e0..3a51250 100644 --- a/lib/printMergeRequest/index.js +++ b/lib/utils/printMergeRequest/index.js @@ -1,17 +1,18 @@ const chalk = require('chalk'); const { pathOr } = require('ramda'); +const { logger } = require('../logger'); const states = { merged: chalk.blue, closed: chalk.red, - opened: chalk.green, + opened: chalk.green }; const statuses = { cannot_be_merged: chalk.red, unchecked: chalk.gray, - can_be_merged: chalk.green, -} + can_be_merged: chalk.green +}; const getUsername = pathOr('Unknown', ['username']); @@ -21,25 +22,25 @@ const printMergeRequest = ({ state, author, assignee, - source_branch, - target_branch, - web_url, - merge_status, + source_branch: sourceBranch, + target_branch: targetBranch, + web_url: webURL, + merge_status: mergeStatus }) => { const authorName = getUsername(author); const assigneeName = getUsername(assignee); - console.log(` -${`[${states[state](state)}|${statuses[merge_status](merge_status.replace(/_/g, ' '))}]`} + logger.log(` +${`[${states[state](state)}|${statuses[mergeStatus](mergeStatus.replace(/_/g, ' '))}]`} !${iid}: ${title} Assignee: ${chalk.cyan(assigneeName)} Author: ${chalk.cyan(authorName)} - Source: ${chalk.green(source_branch)} - Target: ${chalk.magenta(target_branch)} + Source: ${chalk.green(sourceBranch)} + Target: ${chalk.magenta(targetBranch)} - ${chalk.gray(web_url)}`, + ${chalk.gray(webURL)}` ); -} +}; module.exports = { printMergeRequest diff --git a/lib/readConfig/index.js b/lib/utils/readConfig/index.js similarity index 73% rename from lib/readConfig/index.js rename to lib/utils/readConfig/index.js index 0dee0f0..6c4b89d 100644 --- a/lib/readConfig/index.js +++ b/lib/utils/readConfig/index.js @@ -1,14 +1,15 @@ const { readFile } = require('fs'); const { promisify } = require('util'); const readFileAsync = promisify(readFile); +const { logger } = require('../logger'); async function readConfig() { - const configFileName = `${__dirname}/../../.config`; + const configFileName = `${__dirname}/../../../.config`; try { const config = await readFileAsync(configFileName, 'utf8'); return JSON.parse(config); - } catch(_) { - console.log(` + } catch (_) { + logger.log(` Oh no, \`mergify\` is not configured yet. Let configure it `); diff --git a/lib/utils/readConfig/index.spec.js b/lib/utils/readConfig/index.spec.js new file mode 100644 index 0000000..2219051 --- /dev/null +++ b/lib/utils/readConfig/index.spec.js @@ -0,0 +1,27 @@ +const { + readConfig +} = require('./index'); + +const mock = require('mock-fs'); + +describe('utils/readConfig', () => { + test('reading a config', async() => { + const configPath = `${__dirname}/../../../.config`; + + const stub = { + userId: 42, + domain: 'gitlab.com', + privateToken: '90809657890' + }; + + mock({ + [configPath]: JSON.stringify(stub) + }); + + const config = await readConfig(); + + return expect(config).toEqual(stub); + }); + + afterEach(mock.restore); +}); diff --git a/lib/utils/simplifyMergeRequest/__snapshots__/index.spec.js.snap b/lib/utils/simplifyMergeRequest/__snapshots__/index.spec.js.snap new file mode 100644 index 0000000..6ad4d93 --- /dev/null +++ b/lib/utils/simplifyMergeRequest/__snapshots__/index.spec.js.snap @@ -0,0 +1,30 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`utils/simplifyMergeRequest all desired properties are defined 1`] = ` +Object { + "assignee": Object { + "created_at": "2012-04-29T08:46:00Z", + "email": "admin@example.com", + "id": 1, + "name": "Administrator", + "state": "active", + "username": "admin", + }, + "author": Object { + "created_at": "2012-04-29T08:46:00Z", + "email": "admin@example.com", + "id": 1, + "name": "Administrator", + "state": "active", + "username": "admin", + }, + "id": 1, + "iid": 1, + "merge_status": "can_be_merged", + "source_branch": "test1", + "state": "opened", + "target_branch": "master", + "title": "test1", + "web_url": "http://example.com/example/example/merge_requests/1", +} +`; diff --git a/lib/utils/simplifyMergeRequest/fixtures.js b/lib/utils/simplifyMergeRequest/fixtures.js new file mode 100644 index 0000000..57f70d4 --- /dev/null +++ b/lib/utils/simplifyMergeRequest/fixtures.js @@ -0,0 +1,64 @@ +module.exports = { + mrs: [ + { + "id": 1, + "iid": 1, + "target_branch": "master", + "source_branch": "test1", + "project_id": 3, + "title": "test1", + "state": "opened", + "created_at": "2017-04-29T08:46:00Z", + "updated_at": "2017-04-29T08:46:00Z", + "upvotes": 0, + "downvotes": 0, + "author": { + "id": 1, + "username": "admin", + "email": "admin@example.com", + "name": "Administrator", + "state": "active", + "created_at": "2012-04-29T08:46:00Z" + }, + "assignee": { + "id": 1, + "username": "admin", + "email": "admin@example.com", + "name": "Administrator", + "state": "active", + "created_at": "2012-04-29T08:46:00Z" + }, + "source_project_id": 2, + "target_project_id": 3, + "labels": [], + "description": "fixed login page css paddings", + "work_in_progress": false, + "milestone": { + "id": 5, + "iid": 1, + "project_id": 3, + "title": "v2.0", + "description": "Assumenda aut placeat expedita exercitationem labore sunt enim earum.", + "state": "closed", + "created_at": "2015-02-02T19:49:26.013Z", + "updated_at": "2015-02-02T19:49:26.013Z", + "due_date": null + }, + "merge_when_pipeline_succeeds": true, + "merge_status": "can_be_merged", + "sha": "8888888888888888888888888888888888888888", + "merge_commit_sha": null, + "user_notes_count": 1, + "changes_count": "1", + "should_remove_source_branch": true, + "force_remove_source_branch": false, + "web_url": "http://example.com/example/example/merge_requests/1", + "time_stats": { + "time_estimate": 0, + "total_time_spent": 0, + "human_time_estimate": null, + "human_total_time_spent": null + } + } + ] +}; diff --git a/lib/utils/simplifyMergeRequest/index.js b/lib/utils/simplifyMergeRequest/index.js new file mode 100644 index 0000000..ed8c0e7 --- /dev/null +++ b/lib/utils/simplifyMergeRequest/index.js @@ -0,0 +1,18 @@ +const { pick } = require('ramda'); + +const simplifyMergeRequest = pick([ + 'title', + 'id', + 'iid', + 'target_branch', + 'source_branch', + 'state', + 'author', + 'assignee', + 'web_url', + 'merge_status' +]); + +module.exports = { + simplifyMergeRequest +}; diff --git a/lib/utils/simplifyMergeRequest/index.spec.js b/lib/utils/simplifyMergeRequest/index.spec.js new file mode 100644 index 0000000..f0f159c --- /dev/null +++ b/lib/utils/simplifyMergeRequest/index.spec.js @@ -0,0 +1,11 @@ +const { path } = require('ramda'); +const { simplifyMergeRequest } = require('./index'); +const { mrs } = require('./fixtures'); +const first = path([0]); + +describe('utils/simplifyMergeRequest', () => { + test('all desired properties are defined', () => { + const mr = first(mrs); + expect(simplifyMergeRequest(mr)).toMatchSnapshot(); + }); +}); diff --git a/lib/utils/spinner/index.js b/lib/utils/spinner/index.js new file mode 100644 index 0000000..ddb490a --- /dev/null +++ b/lib/utils/spinner/index.js @@ -0,0 +1,8 @@ +const { Spinner } = require('cli-spinner'); + +const spinner = new Spinner('Processing.. %s'); +spinner.setSpinnerString('|/-\\'); + +module.exports = { + spinner +}; diff --git a/lib/writeConfig/index.js b/lib/utils/writeConfig/index.js similarity index 85% rename from lib/writeConfig/index.js rename to lib/utils/writeConfig/index.js index 052276a..69a320e 100644 --- a/lib/writeConfig/index.js +++ b/lib/utils/writeConfig/index.js @@ -3,7 +3,7 @@ const { promisify } = require('util'); const writeFileAsync = promisify(writeFile); async function writeConfig(config) { - const configFileName = `${__dirname}/../../.config`; + const configFileName = `${__dirname}/../../../.config`; config.userId = parseInt(config.userId); const body = JSON.stringify(config, null, 2); diff --git a/lib/utils/writeConfig/index.spec.js b/lib/utils/writeConfig/index.spec.js new file mode 100644 index 0000000..093036c --- /dev/null +++ b/lib/utils/writeConfig/index.spec.js @@ -0,0 +1,31 @@ +const { + writeConfig +} = require('./index'); +const { readFile } = require('fs'); +const { promisify } = require('util'); +const readFileAsync = promisify(readFile); + +const mock = require('mock-fs'); + +describe('utils/writeConfig', () => { + test('writing a config', async() => { + const configPath = `${__dirname}/../../../.config`; + mock({ + [configPath]: '' + }); + + const config = { + userId: 42, + domain: 'gitlab.com', + privateToken: '90809657890' + }; + + await writeConfig(config); + + const newContent = await readFileAsync(configPath, 'utf8'); + + return expect(JSON.parse(newContent)).toEqual(config); + }); + + afterEach(mock.restore); +}); diff --git a/package.json b/package.json index 9273af5..c2b77e0 100644 --- a/package.json +++ b/package.json @@ -20,11 +20,27 @@ "lib": "lib" }, "devDependencies": { - "jest": "^22.4.3" + "eslint": "^4.19.1", + "eslint-config-standard": "^11.0.0", + "eslint-plugin-import": "^2.11.0", + "eslint-plugin-node": "^6.0.1", + "eslint-plugin-promise": "^3.7.0", + "eslint-plugin-standard": "^3.0.1", + "jest": "^22.4.3", + "jest-fetch-mock": "^1.5.0", + "mock-fs": "^4.4.2" }, "scripts": { - "test": "yarn jest" + "test": "jest --coverage --silent=false", + "test-travis": "yarn test && cat ./coverage/lcov.info | coveralls" }, "author": "Ramon Gebben ", - "license": "MIT" + "license": "MIT", + "jest": { + "coverageDirectory": "./coverage/", + "collectCoverage": true, + "setupFiles": [ + "./setupJest.js" + ] + } } diff --git a/setupJest.js b/setupJest.js new file mode 100644 index 0000000..9f9ad52 --- /dev/null +++ b/setupJest.js @@ -0,0 +1,3 @@ +const fetch = require('jest-fetch-mock'); + +jest.setMock('node-fetch', fetch); diff --git a/yarn.lock b/yarn.lock index e2616ae..5fa2f96 100644 --- a/yarn.lock +++ b/yarn.lock @@ -30,10 +30,24 @@ acorn-globals@^4.1.0: dependencies: acorn "^5.0.0" -acorn@^5.0.0, acorn@^5.3.0: +acorn-jsx@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" + dependencies: + acorn "^3.0.4" + +acorn@^3.0.4: + version "3.3.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" + +acorn@^5.0.0, acorn@^5.3.0, acorn@^5.5.0: version "5.5.3" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.3.tgz#f473dd47e0277a08e28e9bec5aeeb04751f0b8c9" +ajv-keywords@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" + ajv@^4.9.1: version "4.11.8" resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" @@ -41,7 +55,7 @@ ajv@^4.9.1: co "^4.6.0" json-stable-stringify "^1.0.1" -ajv@^5.1.0: +ajv@^5.1.0, ajv@^5.2.3, ajv@^5.3.0: version "5.5.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" dependencies: @@ -114,6 +128,10 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" +argv@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/argv/-/argv-0.0.2.tgz#ecbd16f8949b157183711b1bda334f37840185ab" + arr-diff@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" @@ -136,6 +154,16 @@ array-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + dependencies: + array-uniq "^1.0.1" + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + array-unique@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" @@ -144,7 +172,7 @@ array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" -arrify@^1.0.1: +arrify@^1.0.0, arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -202,7 +230,7 @@ aws4@^1.2.1, aws4@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" -babel-code-frame@^6.26.0: +babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" dependencies: @@ -440,6 +468,10 @@ bser@^2.0.0: dependencies: node-int64 "^0.4.0" +buffer-from@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.0.0.tgz#4cb8832d23612589b0406e9e2956c17f06fdf531" + builtin-modules@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" @@ -458,6 +490,16 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" +caller-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" + dependencies: + callsites "^0.2.0" + +callsites@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" + callsites@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" @@ -499,6 +541,14 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chalk@^2.1.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.0.tgz#a060a297a6b57e15b61ca63ce84995daa0fe6e52" + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + chardet@^0.4.0: version "0.4.2" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" @@ -507,6 +557,10 @@ ci-info@^1.0.0: version "1.1.3" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.3.tgz#710193264bb05c77b8c90d02f5aaf22216a667b2" +circular-json@^0.3.1: + version "0.3.3" + resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" + class-utils@^0.3.5: version "0.3.6" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" @@ -554,6 +608,14 @@ code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" +codecov@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/codecov/-/codecov-3.0.0.tgz#c273b8c4f12945723e8dc9d25803d89343e5f28e" + dependencies: + argv "0.0.2" + request "2.81.0" + urlgrey "0.4.4" + collection-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" @@ -593,10 +655,23 @@ concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" +concat-stream@^1.6.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" +contains-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" + content-type-parser@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.2.tgz#caabe80623e63638b2502fd4c7f12ff4ce2352e7" @@ -617,7 +692,7 @@ core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" -cross-spawn@^5.0.1: +cross-spawn@^5.0.1, cross-spawn@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" dependencies: @@ -653,7 +728,7 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -debug@^2.2.0, debug@^2.3.3, debug@^2.6.8: +debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" dependencies: @@ -713,6 +788,18 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" +del@^2.0.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" + dependencies: + globby "^5.0.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + rimraf "^2.2.8" + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -739,6 +826,19 @@ diff@^3.2.0: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" +doctrine@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + dependencies: + esutils "^2.0.2" + domexception@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" @@ -751,6 +851,12 @@ ecc-jsbn@~0.1.1: dependencies: jsbn "~0.1.0" +encoding@^0.1.11: + version "0.1.12" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" + dependencies: + iconv-lite "~0.4.13" + error-ex@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" @@ -790,6 +896,117 @@ escodegen@^1.9.0: optionalDependencies: source-map "~0.6.1" +eslint-config-standard@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-11.0.0.tgz#87ee0d3c9d95382dc761958cbb23da9eea31e0ba" + +eslint-import-resolver-node@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a" + dependencies: + debug "^2.6.9" + resolve "^1.5.0" + +eslint-module-utils@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz#b270362cd88b1a48ad308976ce7fa54e98411746" + dependencies: + debug "^2.6.8" + pkg-dir "^1.0.0" + +eslint-plugin-import@^2.11.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.11.0.tgz#15aeea37a67499d848e8e981806d4627b5503816" + dependencies: + contains-path "^0.1.0" + debug "^2.6.8" + doctrine "1.5.0" + eslint-import-resolver-node "^0.3.1" + eslint-module-utils "^2.2.0" + has "^1.0.1" + lodash "^4.17.4" + minimatch "^3.0.3" + read-pkg-up "^2.0.0" + resolve "^1.6.0" + +eslint-plugin-node@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-6.0.1.tgz#bf19642298064379315d7a4b2a75937376fa05e4" + dependencies: + ignore "^3.3.6" + minimatch "^3.0.4" + resolve "^1.3.3" + semver "^5.4.1" + +eslint-plugin-promise@^3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-3.7.0.tgz#f4bde5c2c77cdd69557a8f69a24d1ad3cfc9e67e" + +eslint-plugin-standard@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-3.0.1.tgz#34d0c915b45edc6f010393c7eef3823b08565cf2" + +eslint-scope@^3.7.1: + version "3.7.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-visitor-keys@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" + +eslint@^4.19.1: + version "4.19.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.19.1.tgz#32d1d653e1d90408854bfb296f076ec7e186a300" + dependencies: + ajv "^5.3.0" + babel-code-frame "^6.22.0" + chalk "^2.1.0" + concat-stream "^1.6.0" + cross-spawn "^5.1.0" + debug "^3.1.0" + doctrine "^2.1.0" + eslint-scope "^3.7.1" + eslint-visitor-keys "^1.0.0" + espree "^3.5.4" + esquery "^1.0.0" + esutils "^2.0.2" + file-entry-cache "^2.0.0" + functional-red-black-tree "^1.0.1" + glob "^7.1.2" + globals "^11.0.1" + ignore "^3.3.3" + imurmurhash "^0.1.4" + inquirer "^3.0.6" + is-resolvable "^1.0.0" + js-yaml "^3.9.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.3.0" + lodash "^4.17.4" + minimatch "^3.0.2" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + optionator "^0.8.2" + path-is-inside "^1.0.2" + pluralize "^7.0.0" + progress "^2.0.0" + regexpp "^1.0.1" + require-uncached "^1.0.3" + semver "^5.3.0" + strip-ansi "^4.0.0" + strip-json-comments "~2.0.1" + table "4.0.2" + text-table "~0.2.0" + +espree@^3.5.4: + version "3.5.4" + resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7" + dependencies: + acorn "^5.5.0" + acorn-jsx "^3.0.0" + esprima@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" @@ -798,7 +1015,19 @@ esprima@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" -estraverse@^4.2.0: +esquery@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" + dependencies: + estraverse "^4.0.0" + +esrecurse@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" + dependencies: + estraverse "^4.1.0" + +estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" @@ -880,6 +1109,14 @@ extend@~3.0.0, extend@~3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" +external-editor@^2.0.4: + version "2.2.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" + dependencies: + chardet "^0.4.0" + iconv-lite "^0.4.17" + tmp "^0.0.33" + external-editor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.1.0.tgz#3d026a21b7f95b5726387d4200ac160d372c3b48" @@ -939,6 +1176,13 @@ figures@^2.0.0: dependencies: escape-string-regexp "^1.0.5" +file-entry-cache@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" + dependencies: + flat-cache "^1.2.1" + object-assign "^4.0.1" + filename-regex@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" @@ -976,12 +1220,21 @@ find-up@^1.0.0: path-exists "^2.0.0" pinkie-promise "^2.0.0" -find-up@^2.1.0: +find-up@^2.0.0, find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" dependencies: locate-path "^2.0.0" +flat-cache@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481" + dependencies: + circular-json "^0.3.1" + del "^2.0.2" + graceful-fs "^4.1.2" + write "^0.2.1" + for-in@^1.0.1, for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" @@ -1054,6 +1307,10 @@ function-bind@^1.0.2, function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" +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" + gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" @@ -1109,10 +1366,25 @@ glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2: once "^1.3.0" path-is-absolute "^1.0.0" +globals@^11.0.1: + version "11.4.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.4.0.tgz#b85c793349561c16076a3c13549238a27945f1bc" + globals@^9.18.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" +globby@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" + dependencies: + array-union "^1.0.1" + arrify "^1.0.0" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + graceful-fs@^4.1.11, graceful-fs@^4.1.2: version "4.1.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" @@ -1267,6 +1539,16 @@ iconv-lite@0.4.19, iconv-lite@^0.4.17: version "0.4.19" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" +iconv-lite@~0.4.13: + version "0.4.21" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.21.tgz#c47f8733d02171189ebc4a400f3218d348094798" + dependencies: + safer-buffer "^2.1.0" + +ignore@^3.3.3, ignore@^3.3.6: + version "3.3.7" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021" + import-local@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc" @@ -1285,7 +1567,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@~2.0.0, inherits@~2.0.3: +inherits@2, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" @@ -1293,6 +1575,25 @@ ini@~1.3.0: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" +inquirer@^3.0.6: + version "3.3.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" + dependencies: + ansi-escapes "^3.0.0" + chalk "^2.0.0" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^2.0.4" + figures "^2.0.0" + lodash "^4.3.0" + mute-stream "0.0.7" + run-async "^2.2.0" + rx-lite "^4.0.8" + rx-lite-aggregates "^4.0.8" + string-width "^2.1.0" + strip-ansi "^4.0.0" + through "^2.3.6" + inquirer@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-5.2.0.tgz#db350c2b73daca77ff1243962e9f22f099685726" @@ -1461,6 +1762,22 @@ is-odd@^2.0.0: dependencies: is-number "^4.0.0" +is-path-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + +is-path-in-cwd@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" + dependencies: + is-path-inside "^1.0.0" + +is-path-inside@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + dependencies: + path-is-inside "^1.0.1" + is-plain-object@^2.0.1, 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" @@ -1485,7 +1802,11 @@ is-regex@^1.0.4: dependencies: has "^1.0.1" -is-stream@^1.1.0: +is-resolvable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" + +is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" @@ -1505,7 +1826,7 @@ is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" -isarray@1.0.0, isarray@~1.0.0: +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" @@ -1523,6 +1844,13 @@ isobject@^3.0.0, isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" +isomorphic-fetch@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" + dependencies: + node-fetch "^1.0.1" + whatwg-fetch ">=0.10.0" + isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" @@ -1692,6 +2020,12 @@ jest-environment-node@^22.4.3: jest-mock "^22.4.3" jest-util "^22.4.3" +jest-fetch-mock@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/jest-fetch-mock/-/jest-fetch-mock-1.5.0.tgz#5fdc27c790efd3b4eae8b2453fe13c4b75b5f541" + dependencies: + isomorphic-fetch "^2.2.1" + jest-get-type@^22.4.3: version "22.4.3" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.4.3.tgz#e3a8504d8479342dd4420236b322869f18900ce4" @@ -1864,7 +2198,7 @@ js-tokens@^3.0.0, js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" -js-yaml@^3.7.0: +js-yaml@^3.7.0, js-yaml@^3.9.1: version "3.11.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.11.0.tgz#597c1a8bd57152f26d622ce4117851a51f5ebaef" dependencies: @@ -1918,6 +2252,10 @@ json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" +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" + json-stable-stringify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" @@ -1983,7 +2321,7 @@ leven@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" -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" dependencies: @@ -2000,6 +2338,15 @@ load-json-file@^1.0.0: pinkie-promise "^2.0.0" strip-bom "^2.0.0" +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + locate-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" @@ -2114,7 +2461,7 @@ mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" -minimatch@^3.0.0, minimatch@^3.0.3, minimatch@^3.0.4: +minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" dependencies: @@ -2145,6 +2492,10 @@ mixin-deep@^1.2.0: dependencies: minimist "0.0.8" +mock-fs@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.4.2.tgz#09dec5313f97095a450be6aa2ad8ab6738d63d6b" + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -2178,6 +2529,13 @@ natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" +node-fetch@^1.0.1: + version "1.7.3" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" + dependencies: + encoding "^0.1.11" + is-stream "^1.0.1" + node-fetch@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.1.2.tgz#ab884e8e7e57e38a944753cec706f788d1768bb5" @@ -2260,7 +2618,7 @@ oauth-sign@~0.8.1, oauth-sign@~0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" -object-assign@^4.1.0: +object-assign@^4.0.1, object-assign@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -2321,7 +2679,7 @@ optimist@^0.6.1: minimist "~0.0.1" wordwrap "~0.0.2" -optionator@^0.8.1: +optionator@^0.8.1, optionator@^0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" dependencies: @@ -2412,6 +2770,10 @@ path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" +path-is-inside@^1.0.1, 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" + path-key@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" @@ -2428,6 +2790,12 @@ path-type@^1.0.0: pify "^2.0.0" pinkie-promise "^2.0.0" +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + dependencies: + pify "^2.0.0" + performance-now@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" @@ -2450,12 +2818,22 @@ pinkie@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" +pkg-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" + dependencies: + find-up "^1.0.0" + pkg-dir@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" dependencies: find-up "^2.1.0" +pluralize@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" + pn@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" @@ -2487,6 +2865,10 @@ process-nextick-args@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" +progress@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" + pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" @@ -2541,6 +2923,13 @@ read-pkg-up@^1.0.1: find-up "^1.0.0" read-pkg "^1.0.0" +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + read-pkg@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" @@ -2549,6 +2938,14 @@ read-pkg@^1.0.0: normalize-package-data "^2.3.2" path-type "^1.0.0" +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + readable-stream@^2.0.1, readable-stream@^2.0.6, readable-stream@^2.1.4: version "2.3.5" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.5.tgz#b4f85003a938cbb6ecbce2a124fb1012bd1a838d" @@ -2561,6 +2958,18 @@ readable-stream@^2.0.1, readable-stream@^2.0.6, readable-stream@^2.1.4: string_decoder "~1.0.3" util-deprecate "~1.0.1" +readable-stream@^2.2.2: + version "2.3.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + realpath-native@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.0.0.tgz#7885721a83b43bd5327609f0ddecb2482305fdf0" @@ -2584,6 +2993,10 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" +regexpp@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-1.1.0.tgz#0e3516dd0b7904f413d2d4193dce4618c3a689ab" + 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" @@ -2678,12 +3091,23 @@ require-main-filename@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" +require-uncached@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" + dependencies: + caller-path "^0.1.0" + resolve-from "^1.0.0" + resolve-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" dependencies: resolve-from "^3.0.0" +resolve-from@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" + resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" @@ -2696,6 +3120,12 @@ resolve@1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" +resolve@^1.3.3, resolve@^1.5.0, resolve@^1.6.0: + version "1.7.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.7.1.tgz#aadd656374fd298aee895bc026b8297418677fd3" + dependencies: + path-parse "^1.0.5" + restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" @@ -2713,7 +3143,7 @@ right-align@^0.1.1: dependencies: align-text "^0.1.1" -rimraf@2, rimraf@^2.5.1, rimraf@^2.5.4, rimraf@^2.6.1: +rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.5.4, rimraf@^2.6.1: version "2.6.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" dependencies: @@ -2725,6 +3155,16 @@ run-async@^2.2.0: dependencies: is-promise "^2.1.0" +rx-lite-aggregates@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" + dependencies: + rx-lite "*" + +rx-lite@*, rx-lite@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" + rxjs@^5.5.2: version "5.5.8" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.8.tgz#b2b0809a57614ad6254c03d7446dea0d83ca3791" @@ -2741,6 +3181,10 @@ safe-regex@^1.1.0: dependencies: ret "~0.1.10" +safer-buffer@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + sane@^2.0.0: version "2.5.0" resolved "https://registry.yarnpkg.com/sane/-/sane-2.5.0.tgz#6359cd676f5efd9988b264d8ce3b827dd6b27bec" @@ -2807,6 +3251,12 @@ slash@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" +slice-ansi@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" + dependencies: + is-fullwidth-code-point "^2.0.0" + snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -2979,6 +3429,12 @@ string_decoder@~1.0.3: dependencies: safe-buffer "~5.1.0" +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + dependencies: + safe-buffer "~5.1.0" + stringstream@~0.0.4, stringstream@~0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" @@ -2995,7 +3451,7 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" -strip-bom@3.0.0: +strip-bom@3.0.0, strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" @@ -3037,6 +3493,17 @@ symbol-tree@^3.2.2: version "3.2.2" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" +table@4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" + dependencies: + ajv "^5.2.3" + ajv-keywords "^2.1.0" + chalk "^2.1.0" + lodash "^4.17.4" + slice-ansi "1.0.0" + string-width "^2.1.1" + tar-pack@^3.4.0: version "3.4.1" resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f" @@ -3068,6 +3535,10 @@ test-exclude@^4.1.1: read-pkg-up "^1.0.1" require-main-filename "^1.0.1" +text-table@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + throat@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" @@ -3144,6 +3615,10 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + uglify-js@^2.6: version "2.8.29" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" @@ -3181,6 +3656,10 @@ urix@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" +urlgrey@0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/urlgrey/-/urlgrey-0.4.4.tgz#892fe95960805e85519f1cd4389f2cb4cbb7652f" + use@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/use/-/use-3.1.0.tgz#14716bf03fdfefd03040aef58d8b4b85f3a7c544" @@ -3246,6 +3725,10 @@ whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: dependencies: iconv-lite "0.4.19" +whatwg-fetch@>=0.10.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f" + whatwg-url@^6.4.0: version "6.4.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.4.0.tgz#08fdf2b9e872783a7a1f6216260a1d66cc722e08" @@ -3305,6 +3788,12 @@ write-file-atomic@^2.1.0: imurmurhash "^0.1.4" signal-exit "^3.0.2" +write@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" + dependencies: + mkdirp "^0.5.1" + ws@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/ws/-/ws-4.1.0.tgz#a979b5d7d4da68bf54efe0408967c324869a7289"