diff --git a/.travis.yml b/.travis.yml index 0571e22..ee27a53 100644 --- a/.travis.yml +++ b/.travis.yml @@ -20,8 +20,12 @@ env: before_install: - yarn +before_script: + - yarn server & + script: - - TYPEFORM_TOKEN=${TYPEFORM_TOKEN} yarn test + - yarn test:unit + - yarn test:integration after_success: - yarn semantic-release diff --git a/package.json b/package.json index 991c303..fdbdd0c 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ }, "homepage": "https://github.com/Typeform/js-api-clientk#readme", "dependencies": { - "axios": "^0.18.0" + "isomorphic-fetch": "^2.2.1" }, "devDependencies": { "@babel/cli": "^7.0.0-beta.44", @@ -47,7 +47,10 @@ "husky": "^0.14.3", "in-publish": "^2.0.0", "jest": "^22.4.3", + "jest-fetch-mock": "^1.6.5", + "json-server": "^0.14.0", "lint-staged": "^7.0.4", + "nodemon": "^1.18.3", "prettier": "^1.12.1", "semantic-release": "^15.1.7", "sinon": "^4.5.0", @@ -60,18 +63,25 @@ "git add" ] }, + "jest": { + "automock": false, + "setupFiles": [ + "./tests/setupJest.js" + ] + }, "scripts": { "commitmsg": "commitlint -e $GIT_PARAMS", - "test": "TYPEFORM_TOKEN=$TYPEFORM_TOKEN jest", - "test:unit": "jest ./tests/unit", - "test:unit:watch": "jest ./tests/unit --watch", - "test:integration": "TYPEFORM_TOKEN=$TYPEFORM_TOKEN jest ./tests/integration/", - "test:integration:watch": "TYPEFORM_TOKEN=$TYPEFORM_TOKEN jest ./tests/integration/ --watch", + "test:unit": "MOCK_FETCH=true jest ./tests/unit", + "test:unit:watch": "MOCK_FETCH=true jest ./tests/unit --watch", + "test:integration": "jest ./tests/integration/", + "test:integration:watch": "jest ./tests/integration/ --watch", "build:dist": "webpack --mode production", "build:lib": "NODE_ENV=production babel src --out-dir lib", "prepublish": "in-publish && npm run build:dist && npm run build:lib || not-in-publish", "pretty": "prettier './{src,tests}/**/*.js' --write", - "semantic-release": "semantic-release" + "semantic-release": "semantic-release", + "server": "node ./tests/integration/mockServer.js", + "server:dev": "nodemon ./tests/integration/mockServer.js" }, "peerDependencies": {} } diff --git a/src/constants/index.js b/src/constants/index.js index 6e6fe9b..3b74f64 100644 --- a/src/constants/index.js +++ b/src/constants/index.js @@ -32,3 +32,5 @@ export const FONTS_AVAILABLE = [ 'Source Sans Pro', 'Vollkorn' ] + +export const API_BASE_URL = 'https://api.typeform.com' diff --git a/src/create-client.js b/src/create-client.js index 78c01da..2baf9d8 100644 --- a/src/create-client.js +++ b/src/create-client.js @@ -1,11 +1,28 @@ -import axios from 'axios' +import 'isomorphic-fetch' +import { API_BASE_URL } from './constants' export const clientConstructor = ({ token, ...options }) => { - return axios.create({ - baseURL: 'https://api.typeform.com', - headers: { - Authorization: `bearer ${token}` - }, - ...options - }) + return { + request: (args) => { + + const { + url, + ...otherArgs + } = args + + const requestParameters = { + ...options, + ...otherArgs + } + + return fetch(`${API_BASE_URL}${url}`, { + headers: { + Authorization: `bearer ${token}` + }, + ...requestParameters + }) + .then(response => response.json()) + // .catch(error => { throw `${error}` }) + } + } } diff --git a/src/forms.js b/src/forms.js index 5f123a3..22105dc 100644 --- a/src/forms.js +++ b/src/forms.js @@ -1,6 +1,4 @@ -import axios from 'axios' - -export const forms = http => ({ +export default http => ({ list: args => getForms(http, args), get: args => getForm(http, args), update: args => updateForm(http, args), @@ -12,7 +10,7 @@ export const forms = http => ({ } }) -export const getForms = (http, { page, page_size, search } = {}) => { +const getForms = (http, { page, page_size, search } = {}) => { return http.request({ method: 'get', url: `/forms`, @@ -22,14 +20,14 @@ export const getForms = (http, { page, page_size, search } = {}) => { }) } -export const getForm = (http, { uid }) => { +const getForm = (http, { uid }) => { return http.request({ method: 'get', url: `/forms/${uid}` }) } -export const updateForm = (http, { uid, override, data } = {}) => { +const updateForm = (http, { uid, override, data } = {}) => { let methodType = 'patch' if (override) { methodType = 'put' @@ -42,7 +40,7 @@ export const updateForm = (http, { uid, override, data } = {}) => { }) } -export const createForm = (http, { data } = {}) => { +const createForm = (http, { data } = {}) => { return http.request({ method: 'post', url: `/forms`, @@ -50,21 +48,21 @@ export const createForm = (http, { data } = {}) => { }) } -export const deleteForm = (http, { uid }) => { +const deleteForm = (http, { uid }) => { return http.request({ method: 'delete', url: `/forms/${uid}` }) } -export const getMessages = (http, { uid }) => { +const getMessages = (http, { uid }) => { return http.request({ method: 'get', url: `/forms/${uid}/messages` }) } -export const updateMessages = (http, { uid, data }) => { +const updateMessages = (http, { uid, data }) => { return http.request({ method: 'put', url: `/forms/${uid}/messages`, diff --git a/src/images.js b/src/images.js index 7990f48..4374025 100644 --- a/src/images.js +++ b/src/images.js @@ -1,8 +1,8 @@ -export const images = http => ({ +export default http => ({ list: () => getImages(http), get: args => getImage(http, args), add: args => addImage(http, args), - remove: args => removeImage(http, args) + delete: args => deleteImage(http, args) }) export const getImages = http => { return http.request({ diff --git a/src/responses.js b/src/responses.js index 8581901..bf0469c 100644 --- a/src/responses.js +++ b/src/responses.js @@ -1,4 +1,4 @@ -export const responses = http => ({ +export default http => ({ list: args => getResponses(http, args) }) diff --git a/src/teams.js b/src/teams.js index 34abe55..ce5a768 100644 --- a/src/teams.js +++ b/src/teams.js @@ -1,15 +1,15 @@ import { isMemberPropValid, createMemberPatchQuery } from './utils' -export const teams = http => { +export default http => { return { - get(http) { + get: () => { return getTeam(http) }, - addMembers(http, args) { + addMembers: args => { return addMembers(http, args) }, - removeMembers(http, args) { - return addMembers(http, args) + removeMembers: args => { + return removeMembers(http, args) } } } diff --git a/src/themes.js b/src/themes.js index 4bd26ca..ef56913 100644 --- a/src/themes.js +++ b/src/themes.js @@ -1,6 +1,6 @@ import { FONTS_AVAILABLE } from './constants' -export const themes = http => ({ +export default http => ({ list: args => getThemes(http, args), get: args => getTheme(http, args), create: args => createTheme(http, args), diff --git a/src/typeform.js b/src/typeform.js index 69ec606..ac6eafe 100644 --- a/src/typeform.js +++ b/src/typeform.js @@ -1,11 +1,11 @@ import { clientConstructor } from './create-client' -import { forms } from './forms' -import { images } from './images' -import { teams } from './teams' -import { themes } from './themes' -import { workspaces } from './workspaces' -import { responses } from './responses' -import { webhooks } from './webhooks' +import forms from './forms' +import images from './images' +import teams from './teams' +import themes from './themes' +import workspaces from './workspaces' +import responses from './responses' +import webhooks from './webhooks' export const createClient = (args = {}) => { if (args.token === undefined) { diff --git a/src/webhooks.js b/src/webhooks.js index e4524e3..5555000 100644 --- a/src/webhooks.js +++ b/src/webhooks.js @@ -1,39 +1,42 @@ -export const webhooks = http => ({ +export default http => ({ get: args => getWebhook(http, args), create: args => createWebhook(http, args), update: args => updateWebhook(http, args), delete: args => deleteWebhook(http, args) }) -export const getWebhook = (http, { uid, tag }) => { +const getWebhook = (http, { uid, tag }) => { return http.request({ method: 'get', url: `/forms/${uid}/webhooks/${tag}` }) } -export const createWebhook = (http, args) => { +const createWebhook = (http, args) => { return createOrUpdateWebhook(http, args) } -export const updateWebhook = (http, args) => { +const updateWebhook = (http, args) => { return createOrUpdateWebhook(http, args) } -export const deleteWebhook = (http, { uid, tag }) => { +const deleteWebhook = (http, { uid, tag }) => { return http.request({ method: 'delete', url: `/forms/${uid}/webhooks/${tag}` }) } -export const createOrUpdateWebhook = ( +const createOrUpdateWebhook = ( http, { uid, tag, url, enable = false } ) => { if (url === undefined) { throw `Please provide an url for ${tag}` } + if (tag === undefined) { + throw `Please provide a tag name for the webhook` + } return http.request({ method: 'put', url: `/forms/${uid}/webhooks/${tag}`, diff --git a/src/workspaces.js b/src/workspaces.js index 4a397e4..6a39190 100644 --- a/src/workspaces.js +++ b/src/workspaces.js @@ -1,15 +1,16 @@ import { isMemberPropValid, createMemberPatchQuery } from './utils' -export const workspaces = http => ({ +export default http => ({ list: args => getWorkspaces(http, args), get: args => getWorkspace(http, args), + add: args => addWorkspace(http, args), update: args => updateWorkspace(http, args), delete: args => deleteWorkspace(http, args), addMembers: args => addMembers(http, args), removeMembers: args => removeMembers(http, args) }) -export const getWorkspaces = (http, { search, page, page_size } = {}) => { +const getWorkspaces = (http, { search, page, page_size } = {}) => { return http.request({ method: 'get', url: '/workspaces', @@ -21,14 +22,14 @@ export const getWorkspaces = (http, { search, page, page_size } = {}) => { }) } -export const getWorkspace = (http, { id }) => { +const getWorkspace = (http, { id }) => { return http.request({ method: 'get', url: `/workspaces/${id}` }) } -export const createWorkspace = (http, { name }) => { +const addWorkspace = (http, { name }) => { if (name === undefined) { throw `A name is required` } @@ -39,7 +40,7 @@ export const createWorkspace = (http, { name }) => { }) } -export const updateWorkspace = (http, { id, data } = {}) => { +const updateWorkspace = (http, { id, data } = {}) => { return http.request({ method: 'patch', url: `/workspaces/${id}`, @@ -47,7 +48,7 @@ export const updateWorkspace = (http, { id, data } = {}) => { }) } -export const addMembers = (http, { id, members }) => { +const addMembers = (http, { id, members }) => { if (!isMemberPropValid(members)) { throw `No member provided` } @@ -61,7 +62,7 @@ export const addMembers = (http, { id, members }) => { return updateWorkspace(http, { id, data: membersQuery }) } -export const removeMembers = (http, { id, members }) => { +const removeMembers = (http, { id, members }) => { if (!isMemberPropValid(members)) { throw `No member provided` } @@ -75,14 +76,14 @@ export const removeMembers = (http, { id, members }) => { return updateWorkspace(http, { id, data: membersQuery }) } -export const deleteWorkspace = (http, { id }) => { +const deleteWorkspace = (http, { id }) => { return http.request({ method: 'delete', url: `/workspaces/${id}` }) } -export const getWorkspaceForms = ( +const getWorkspaceForms = ( http, { id, from_id, page, page_size } = {} ) => { diff --git a/tests/integration/db.json b/tests/integration/db.json new file mode 100644 index 0000000..f9fddb4 --- /dev/null +++ b/tests/integration/db.json @@ -0,0 +1,14 @@ +{ + "forms": [ + { + "id": "abc123", + "title": "test form", + "fields": [] + }, + { + "id": "xyz123", + "title": "test form 2", + "fields": [] + } + ] +} \ No newline at end of file diff --git a/tests/integration/forms.test.js b/tests/integration/forms.test.js index 3814fb1..f991b41 100644 --- a/tests/integration/forms.test.js +++ b/tests/integration/forms.test.js @@ -1,9 +1,12 @@ import { createClient } from '../../src/typeform' +jest.mock('../../src/constants', () => ({ API_BASE_URL: 'http://localhost:3000' })) + const typeformClient = createClient({ - token: process.env.TYPEFORM_TOKEN + token: '123456' }) -const testTypeform = 'LkhdUI' +const TYPEFORM_UID = 'abc123' + const randomString = () => { return ( Math.random() @@ -17,10 +20,8 @@ const randomString = () => { test('Getting forms from my account', done => { typeformClient.forms.list().then(response => { - const { data, status } = response - expect(data.total_items).toBeTruthy() - expect(data.items).toBeTruthy() - expect(status).toBe(200) + expect(response.total_items).toBe(2) + expect(response.items).toBeTruthy() done() }) }) @@ -28,94 +29,10 @@ test('Getting forms from my account', done => { test('Gets the correct form by UID', done => { typeformClient.forms .get({ - uid: testTypeform - }) - .then(response => { - const { data, status } = response - expect(data.id).toEqual(testTypeform) - expect(status).toBe(200) - done() - }) -}) - -test('Update only title of typeform', done => { - const newTitle = 'integration test - ' + randomString() - typeformClient.forms - .update({ - uid: testTypeform, - data: [ - { - op: 'replace', - path: '/title', - value: newTitle - } - ] + uid: TYPEFORM_UID }) .then(response => { - const { data, status } = response - - expect(status).toBe(204) - done() - }) -}) - -test('Replaces the title sending the form schema', done => { - const newTitle = 'integration test - ' + randomString() - typeformClient.forms - .update({ - uid: testTypeform, - override: true, - data: { - title: newTitle, - theme: { - href: 'https://api.typeform.com/themes/6lPNE6' - } - } - }) - .then(response => { - const { data, status } = response - - expect(status).toBe(200) - expect(data.title).toBe(newTitle) - done() - }) -}) - -let formUId -test('Create a form', done => { - const newTitle = randomString() - - typeformClient.forms - .create({ - data: { - title: newTitle, - theme: { - href: 'https://api.typeform.com/themes/6lPNE6' - } - } - }) - .then(response => { - const { data, status } = response - - expect(status).toBe(201) - expect(data.title).toBe(newTitle) - formUId = data.id - - done() - }) -}) - -test('Delete created form', done => { - const newTitle = randomString() - - typeformClient.forms - .delete({ - uid: formUId - }) - .then(response => { - const { status } = response - - expect(status).toBe(204) + expect(response.id).toEqual(TYPEFORM_UID) done() }) }) diff --git a/tests/integration/mockServer.js b/tests/integration/mockServer.js new file mode 100644 index 0000000..81a3333 --- /dev/null +++ b/tests/integration/mockServer.js @@ -0,0 +1,20 @@ +const jsonServer = require('json-server') +const server = jsonServer.create() +const path = require('path') +const router = jsonServer.router(path.join(__dirname, 'db.json')) +const middlewares = jsonServer.defaults() + +server.use(middlewares) + +server.get('/forms', (req, res) => { + const db = router.db.getState() + res.jsonp({ + items: [db.forms], + total_items: db.forms.length + }) +}) +server.use(router) + +server.listen(3000, () => { + console.log('JSON Server is running') +}) diff --git a/tests/setupJest.js b/tests/setupJest.js new file mode 100644 index 0000000..f8885f0 --- /dev/null +++ b/tests/setupJest.js @@ -0,0 +1,3 @@ +if (process.env.MOCK_FETCH) { + global.fetch = require('jest-fetch-mock') +} diff --git a/tests/unit/forms.test.js b/tests/unit/forms.test.js index ec41e11..5f4edeb 100644 --- a/tests/unit/forms.test.js +++ b/tests/unit/forms.test.js @@ -1,92 +1,93 @@ -import axios from 'axios' -import { stub, spy } from 'sinon' -import { - getForm, - updateForm, - deleteForm, - createForm, - getMessages, - updateMessages -} from '../../src/forms' +import { clientConstructor } from '../../src/create-client' +import { API_BASE_URL } from '../../src/constants' +import forms from '../../src/forms' beforeEach(() => { - stub(axios, 'request').returns({}) + fetch.resetMocks() + fetch.mockResponse(JSON.stringify({})) }) -afterEach(() => { - axios.request.restore() +const http = clientConstructor({ + token: '123' +}) +const formsRequest = forms(http) + +test('get all forms has the correct method and path', () => { + formsRequest.list() + expect(fetch.mock.calls[0][0]).toBe(`${API_BASE_URL}/forms`) + expect(fetch.mock.calls[0][1].method).toBe('get') }) test('getForm sends the correct UID', () => { - getForm(axios, { uid: 'abc123' }) - expect(axios.request.args[0][0].url).toBe('/forms/abc123') + formsRequest.get({ uid: 'abc123' }) + expect(fetch.mock.calls[0][0]).toBe(`${API_BASE_URL}/forms/abc123`) }) test('getForm sets get method', () => { - getForm(axios, { uid: 'abc123' }) - expect(axios.request.args[0][0].method).toBe('get') + formsRequest.get({ uid: 'abc123' }) + expect(fetch.mock.calls[0][1].method).toBe('get') }) test('updateForm sends the correct UID and data', () => { - updateForm(axios, { - uid: 'abc123', - data: { + formsRequest.update({ + uid: 'abc123', data: { title: 'hola' } }) - expect(axios.request.args[0][0].url).toBe('/forms/abc123') - expect(axios.request.args[0][0].data.title).toBe('hola') + expect(fetch.mock.calls[0][0]).toBe(`${API_BASE_URL}/forms/abc123`) + expect(fetch.mock.calls[0][1].data.title).toBe('hola') }) test('updateForm sets patch method in request by default', () => { - updateForm(axios, { - uid: 'abc123', - data: {} + formsRequest.update({ + uid: 'abc123', data: { + title: 'hola' + } }) - - expect(axios.request.args[0][0].method).toBe('patch') + expect(fetch.mock.calls[0][1].method).toBe('patch') }) + test('updateForm sets put method in request when override option is set', () => { - updateForm(axios, { + formsRequest.update({ uid: 'abc123', - data: {}, + data: { + title: 'hola' + }, override: true }) - expect(axios.request.args[0][0].method).toBe('put') + expect(fetch.mock.calls[0][1].method).toBe('put') }) test('deleteForm removes the correct uid form ', () => { - deleteForm(axios, { + formsRequest.delete({ uid: 'abc123' }) - expect(axios.request.args[0][0].method).toBe('delete') - expect(axios.request.args[0][0].url).toBe('/forms/abc123') + expect(fetch.mock.calls[0][1].method).toBe('delete') + expect(fetch.mock.calls[0][0]).toBe(`${API_BASE_URL}/forms/abc123`) }) test('create form has the correct path and method ', () => { - createForm(axios, {}) + formsRequest.create({}) - expect(axios.request.args[0][0].method).toBe('post') - expect(axios.request.args[0][0].url).toBe('/forms') + expect(fetch.mock.calls[0][1].method).toBe('post') + expect(fetch.mock.calls[0][0]).toBe(`${API_BASE_URL}/forms`) }) test('get messages has the correct path and method ', () => { - getMessages(axios, { - uid: 'abc123' - }) + formsRequest.messages.get({ uid: 'abc123' }) - expect(axios.request.args[0][0].method).toBe('get') - expect(axios.request.args[0][0].url).toBe('/forms/abc123/messages') + expect(fetch.mock.calls[0][1].method).toBe('get') + expect(fetch.mock.calls[0][0]).toBe(`${API_BASE_URL}/forms/abc123/messages`) }) test('update messages has the correct path and method ', () => { - updateMessages(axios, { + formsRequest.messages.update({ uid: 'abc123' }) - expect(axios.request.args[0][0].method).toBe('put') - expect(axios.request.args[0][0].url).toBe('/forms/abc123/messages') + expect(fetch.mock.calls[0][1].method).toBe('put') + expect(fetch.mock.calls[0][0]).toBe(`${API_BASE_URL}/forms/abc123/messages`) }) diff --git a/tests/unit/images.test.js b/tests/unit/images.test.js index 6c5408e..2f7bfc2 100644 --- a/tests/unit/images.test.js +++ b/tests/unit/images.test.js @@ -1,36 +1,39 @@ -import axios from 'axios' -import { stub, spy } from 'sinon' -import { getImages, getImage, addImage, deleteImage } from '../../src/images' +import { clientConstructor } from '../../src/create-client' +import { API_BASE_URL } from '../../src/constants' +import images from '../../src/images' beforeEach(() => { - stub(axios, 'request').returns({}) + fetch.resetMocks() + fetch.mockResponse(JSON.stringify({})) }) -afterEach(() => { - axios.request.restore() +const http = clientConstructor({ + token: '123' }) +const imagesRequest = images(http) test('get images collection', () => { - getImages(axios) - expect(axios.request.args[0][0].url).toBe('/images') + imagesRequest.list() + expect(fetch.mock.calls[0][0]).toBe(`${API_BASE_URL}/images`) }) test('get images by ID', () => { - getImage(axios, { id: 'abc123' }) - expect(axios.request.args[0][0].url).toBe('/images/abc123') - expect(axios.request.args[0][0].method).toBe('get') + imagesRequest.get({ id: 'abc123' }) + expect(fetch.mock.calls[0][0]).toBe(`${API_BASE_URL}/images/abc123`) + expect(fetch.mock.calls[0][1].method).toBe('get') }) test('adding an image pass the required values', () => { - addImage(axios, { + imagesRequest.add({ image: 'bGRqZmxzZGpmbHNoZmtoc2RrZmpoc2tqZA==', media_type: 'image/gif', file_name: 'newimage.gif' }) - const imageData = axios.request.args[0][0].data - expect(axios.request.args[0][0].url).toBe('/images') - expect(axios.request.args[0][0].method).toBe('post') + expect(fetch.mock.calls[0][0]).toBe(`${API_BASE_URL}/images`) + expect(fetch.mock.calls[0][1].method).toBe('post') + + const imageData = fetch.mock.calls[0][1].data expect(imageData).toEqual({ image: 'bGRqZmxzZGpmbHNoZmtoc2RrZmpoc2tqZA==', media_type: 'image/gif', @@ -39,33 +42,33 @@ test('adding an image pass the required values', () => { }) test('deleting an image sets the correct method and id', () => { - deleteImage(axios, { id: 'abc123' }) - expect(axios.request.args[0][0].url).toBe('/images/abc123') - expect(axios.request.args[0][0].method).toBe('delete') + imagesRequest.delete({ id: 'abc123' }) + expect(fetch.mock.calls[0][0]).toBe(`${API_BASE_URL}/images/abc123`) + expect(fetch.mock.calls[0][1].method).toBe('delete') }) test('it set the correct header when retrieving the image json description', () => { - getImage(axios, { id: 'abc123', returns: 'json' }) - expect(axios.request.args[0][0].headers.Accept).toBe('application/json') + imagesRequest.get({ id: 'abc123', returns: 'json' }) + expect(fetch.mock.calls[0][1].headers.Accept).toBe('application/json') }) test('when getting an image by size it retrieves from the correct endpoint', () => { - getImage(axios, { id: 'abc123', returns: 'json', size: 'mobile' }) - expect(axios.request.args[0][0].url).toBe('/images/abc123/image/mobile') + imagesRequest.get({ id: 'abc123', returns: 'json', size: 'mobile' }) + expect(fetch.mock.calls[0][0]).toBe(`${API_BASE_URL}/images/abc123/image/mobile`) }) test('when getting an image by size what does not exists throws', () => { - expect(() => getImage(axios, { id: 'abc123', size: 'big' })).toThrow( + expect(() => imagesRequest.get({ id: 'abc123', size: 'big' })).toThrow( `Image size doesn't exists` ) }) test('when getting an image by background size it retrieves from the correct endpoint', () => { - getImage(axios, { id: 'abc123', returns: 'json', backgroundSize: 'tablet' }) - expect(axios.request.args[0][0].url).toBe('/images/abc123/background/tablet') + imagesRequest.get({ id: 'abc123', returns: 'json', backgroundSize: 'tablet' }) + expect(fetch.mock.calls[0][0]).toBe(`${API_BASE_URL}/images/abc123/background/tablet`) }) test('when getting an image by choice size it retrieves from the correct endpoint', () => { - getImage(axios, { id: 'abc123', choiceSize: 'supersize' }) - expect(axios.request.args[0][0].url).toBe('/images/abc123/choice/supersize') + imagesRequest.get({ id: 'abc123', choiceSize: 'supersize' }) + expect(fetch.mock.calls[0][0]).toBe(`${API_BASE_URL}/images/abc123/choice/supersize`) }) diff --git a/tests/unit/responses.test.js b/tests/unit/responses.test.js index fc514e0..a982336 100644 --- a/tests/unit/responses.test.js +++ b/tests/unit/responses.test.js @@ -1,18 +1,18 @@ -import axios from 'axios' - -import { stub, spy } from 'sinon' -import { getResponses } from '../../src/responses' +import { API_BASE_URL } from '../../src/constants' +import { clientConstructor } from '../../src/create-client' +import responses from '../../src/responses' beforeEach(() => { - stub(axios, 'request').returns({}) -}) - -afterEach(() => { - axios.request.restore() + fetch.resetMocks() + fetch.mockResponse(JSON.stringify({})) }) test('List responses has the correct path and method', () => { - getResponses(axios, { uid: 2 }) - expect(axios.request.args[0][0].method).toBe('get') - expect(axios.request.args[0][0].url).toBe('/forms/2/responses') + const http = clientConstructor({ + token: '123' + }) + const responsesRequest = responses(http) + responsesRequest.list({ uid: 2 }) + expect(fetch.mock.calls[0][1].method).toBe('get') + expect(fetch.mock.calls[0][0]).toBe(`${API_BASE_URL}/forms/2/responses`) }) diff --git a/tests/unit/teams.test.js b/tests/unit/teams.test.js index 3ab70aa..5d84b83 100644 --- a/tests/unit/teams.test.js +++ b/tests/unit/teams.test.js @@ -1,28 +1,30 @@ -import axios from 'axios' -import { stub, spy } from 'sinon' -import { getTeam, addMembers, removeMembers } from '../../src/teams' +import { clientConstructor } from '../../src/create-client' +import { API_BASE_URL } from '../../src/constants' +import teams from '../../src/teams' beforeEach(() => { - stub(axios, 'request').returns({}) + fetch.resetMocks() + fetch.mockResponse(JSON.stringify({})) }) -afterEach(() => { - axios.request.restore() +const http = clientConstructor({ + token: '123' }) +const teamsRequest = teams(http) test('getTeam has the correct url in the request', () => { - getTeam(axios) - expect(axios.request.args[0][0].url).toBe('/teams/mine') + teamsRequest.get() + expect(fetch.mock.calls[0][0]).toBe(`${API_BASE_URL}/teams/mine`) }) test('addMember will set the proper method', () => { - addMembers(axios, { members: ['test@test.com'] }) - expect(axios.request.args[0][0].method).toBe('patch') + teamsRequest.addMembers({ members: ['test@test.com'] }) + expect(fetch.mock.calls[0][1].method).toBe('patch') }) test('if a member is sent as string it will work as expected', () => { - addMembers(axios, { members: 'test@test.com' }) - expect(axios.request.args[0][0].data).toEqual([ + teamsRequest.addMembers({ members: 'test@test.com' }) + expect(fetch.mock.calls[0][1].data).toEqual([ { op: 'add', path: '/members', @@ -34,9 +36,9 @@ test('if a member is sent as string it will work as expected', () => { }) test('it will support array or multiple members at a time', () => { - addMembers(axios, { members: ['test@test.com', 'test2@test.com'] }) - expect(axios.request.args[0][0].data.length).toEqual(2) - expect(axios.request.args[0][0].data).toEqual([ + teamsRequest.addMembers({ members: ['test@test.com', 'test2@test.com'] }) + expect(fetch.mock.calls[0][1].data.length).toEqual(2) + expect(fetch.mock.calls[0][1].data).toEqual([ { op: 'add', path: '/members', @@ -55,18 +57,18 @@ test('it will support array or multiple members at a time', () => { }) test('if no members or incorrect format defined throws', () => { - expect(() => addMembers(axios, { members: {} })).toThrow() + expect(() => teamsRequest.addMembers({ members: {} })).toThrow() }) //removeMember test('removeMember will set the proper method', () => { - removeMembers(axios, { members: ['test@test.com'] }) - expect(axios.request.args[0][0].method).toBe('delete') + teamsRequest.removeMembers({ members: ['test@test.com'] }) + expect(fetch.mock.calls[0][1].method).toBe('delete') }) test('if a member is sent as string it will work as expected', () => { - removeMembers(axios, { members: 'test@test.com' }) - expect(axios.request.args[0][0].data).toEqual([ + teamsRequest.removeMembers({ members: 'test@test.com' }) + expect(fetch.mock.calls[0][1].data).toEqual([ { op: 'remove', path: '/members', diff --git a/tests/unit/themes.test.js b/tests/unit/themes.test.js index e4f0632..eac3ef5 100644 --- a/tests/unit/themes.test.js +++ b/tests/unit/themes.test.js @@ -1,12 +1,6 @@ -import axios from 'axios' -import { stub, spy } from 'sinon' -import { - getThemes, - getTheme, - createTheme, - deleteTheme, - updateTheme -} from '../../src/themes' +import { clientConstructor } from '../../src/create-client' +import { API_BASE_URL } from '../../src/constants' +import themes from '../../src/themes' const mockThemePayload = { name: 'New theme', @@ -20,64 +14,59 @@ const mockThemePayload = { } beforeEach(() => { - stub(axios, 'request').returns({}) + fetch.resetMocks() + fetch.mockResponse(JSON.stringify({})) }) -afterEach(() => { - axios.request.restore() +const http = clientConstructor({ + token: '123' }) +const themesRequest = themes(http) test('Get themes has the correct path', () => { - getThemes(axios) - expect(axios.request.args[0][0].url).toBe('/themes') + themesRequest.list() + expect(fetch.mock.calls[0][0]).toBe(`${API_BASE_URL}/themes`) }) test('Get themes has the correct parameters', () => { - getThemes(axios, { page: 3, page_size: 15 }) - expect(axios.request.args[0][0].params.page).toBe(3) - expect(axios.request.args[0][0].params.page_size).toBe(15) + themesRequest.list({ page: 3, page_size: 15 }) + expect(fetch.mock.calls[0][1].params.page).toBe(3) + expect(fetch.mock.calls[0][1].params.page_size).toBe(15) }) test('Get themes has the correct path', () => { - getTheme(axios, { id: 2 }) - expect(axios.request.args[0][0].url).toBe('/themes/2') + themesRequest.get({ id: 2 }) + expect(fetch.mock.calls[0][0]).toBe(`${API_BASE_URL}/themes/2`) }) test('Creating a theme has the correct method', () => { - createTheme(axios, mockThemePayload) - expect(axios.request.args[0][0].method).toBe('post') + themesRequest.create(mockThemePayload) + expect(fetch.mock.calls[0][1].method).toBe('post') }) test('Throws if required values are not sent', () => { const { name, ...incompletePayload } = mockThemePayload - expect(() => createTheme(axios, incompletePayload)).toThrow() + expect(() => themesRequest.create(incompletePayload)).toThrow() }) test('Throws if a font name is not supported', () => { expect(() => - createTheme(axios, { + themesRequest.create({ ...mockThemePayload, font: 'asdf' }) ).toThrow() }) -test('Delete a theme has the correct path', () => { - deleteTheme(axios, { id: 2 }) - expect(axios.request.args[0][0].url).toBe('/themes/2') +test('Delete a theme has the correct path and method', () => { + themesRequest.delete({ id: 2 }) + expect(fetch.mock.calls[0][0]).toBe(`${API_BASE_URL}/themes/2`) + expect(fetch.mock.calls[0][1].method).toBe('delete') }) -test('Delete a theme has the correct method', () => { - deleteTheme(axios, mockThemePayload) - expect(axios.request.args[0][0].method).toBe('delete') +test('Updating a theme has the correct path and method', () => { + themesRequest.update({ id: 2, ...mockThemePayload }) + expect(fetch.mock.calls[0][0]).toBe(`${API_BASE_URL}/themes/2`) + expect(fetch.mock.calls[0][1].method).toBe('put') }) -test('Updating a theme has the correct path', () => { - updateTheme(axios, { id: 2, ...mockThemePayload }) - expect(axios.request.args[0][0].url).toBe('/themes/2') -}) - -test('Delete a theme has the correct method', () => { - updateTheme(axios, { id: 2, ...mockThemePayload }) - expect(axios.request.args[0][0].method).toBe('put') -}) diff --git a/tests/unit/typeform.test.js b/tests/unit/typeform.test.js index e2e8039..58f4271 100644 --- a/tests/unit/typeform.test.js +++ b/tests/unit/typeform.test.js @@ -1,30 +1,16 @@ -import axios from 'axios' -import { stub } from 'sinon' +import { clientConstructor } from '../../src/create-client' import { createClient } from '../../src/typeform' -const logHandlerStub = stub() - beforeEach(() => { - stub(axios, 'create').returns({}) -}) - -afterEach(() => { - axios.create.restore() - logHandlerStub.resetHistory() -}) - -test('Typeform api url is well defined when initialising', () => { - createClient({ - token: '12345' - }) - expect(axios.create.args[0][0].baseURL).toEqual('https://api.typeform.com') + fetch.resetMocks() + fetch.mockResponse(JSON.stringify({})) }) -test('Api token is in the headers request', () => { - createClient({ +test('client costructor has a request function property', () => { + const client = clientConstructor({ token: '12345' }) - expect(axios.create.args[0][0].headers.Authorization).toEqual('bearer 12345') + expect(client.request).toBeDefined() }) test('Initialising fails when missing the token', () => { diff --git a/tests/unit/webhooks.test.js b/tests/unit/webhooks.test.js index e1b8711..8aad7dd 100644 --- a/tests/unit/webhooks.test.js +++ b/tests/unit/webhooks.test.js @@ -1,52 +1,52 @@ -import axios from 'axios' +import { clientConstructor } from '../../src/create-client' +import { API_BASE_URL } from '../../src/constants' -import { stub, spy } from 'sinon' -import { - getWebhook, - createOrUpdateWebhook, - deleteWebhook -} from '../../src/webhooks' +import webhooks from '../../src/webhooks' beforeEach(() => { - stub(axios, 'request').returns({}) + fetch.resetMocks() + fetch.mockResponse(JSON.stringify({})) }) -afterEach(() => { - axios.request.restore() +const http = clientConstructor({ + token: '123' }) +const webhooksRequest = webhooks(http) test('List webhooks has the correct path and method', () => { - getWebhook(axios, { uid: 2, tag: 'test' }) - expect(axios.request.args[0][0].method).toBe('get') - expect(axios.request.args[0][0].url).toBe('/forms/2/webhooks/test') + webhooksRequest.get({ uid: 2, tag: 'test' }) + expect(fetch.mock.calls[0][1].method).toBe('get') + expect(fetch.mock.calls[0][0]).toBe(`${API_BASE_URL}/forms/2/webhooks/test`) }) -test('Create a new webhooks has the correct path and method', () => { - createOrUpdateWebhook(axios, { +test('Create a new webhooks has the correct path, method and url', () => { + webhooksRequest.create({ uid: 2, tag: 'test', url: 'http://test.com', enable: true }) - expect(axios.request.args[0][0].method).toBe('put') - expect(axios.request.args[0][0].url).toBe('/forms/2/webhooks/test') + expect(fetch.mock.calls[0][1].method).toBe('put') + expect(fetch.mock.calls[0][0]).toBe(`${API_BASE_URL}/forms/2/webhooks/test`) + expect(fetch.mock.calls[0][1].data.url).toBe('http://test.com') }) test('Create a new webhooks requires a url', () => { - expect(() => createOrUpdateWebhook(axios, { uid: 2, tag: 'test' })).toThrow() + expect(() => webhooksRequest.create({ uid: 2, tag: 'test' })).toThrow() }) -test('Create a new webhooks sends the correct payload', () => { - createOrUpdateWebhook(axios, { +test('update a new webhooks sends the correct payload', () => { + webhooksRequest.update({ uid: 2, tag: 'test', url: 'http://example.com' }) - expect(axios.request.args[0][0].data.url).toBe('http://example.com') + expect(fetch.mock.calls[0][1].data.url).toBe('http://example.com') + expect(fetch.mock.calls[0][1].method).toBe('put') }) test('Delete a webhook has the correct path and method', () => { - deleteWebhook(axios, { uid: 2, tag: 'test' }) - expect(axios.request.args[0][0].method).toBe('delete') - expect(axios.request.args[0][0].url).toBe('/forms/2/webhooks/test') + webhooksRequest.delete({ uid: 2, tag: 'test' }) + expect(fetch.mock.calls[0][1].method).toBe('delete') + expect(fetch.mock.calls[0][0]).toBe(`${API_BASE_URL}/forms/2/webhooks/test`) }) diff --git a/tests/unit/workspaces.test.js b/tests/unit/workspaces.test.js index 1d56015..9a05ce2 100644 --- a/tests/unit/workspaces.test.js +++ b/tests/unit/workspaces.test.js @@ -1,58 +1,54 @@ -import axios from 'axios' -import { stub, spy } from 'sinon' -import { - getWorkspaces, - getWorkspace, - createWorkspace, - addMembers, - removeMembers, - deleteWorkspace, - getWorkspaceForms -} from '../../src/workspaces' +import { clientConstructor } from '../../src/create-client' +import { API_BASE_URL } from '../../src/constants' +import workspaces from '../../src/workspaces' beforeEach(() => { - stub(axios, 'request').returns({}) + fetch.resetMocks() + fetch.mockResponse(JSON.stringify({})) }) -afterEach(() => { - axios.request.restore() +const http = clientConstructor({ + token: '123' }) +const workspacesRequest = workspaces(http) + test(`Get workspaces has the correct path`, () => { - getWorkspaces(axios) - expect(axios.request.args[0][0].url).toBe(`/workspaces`) + workspacesRequest.list() + expect(fetch.mock.calls[0][0]).toBe(`${API_BASE_URL}/workspaces`) }) -test(`Get specific workscape has the correct path`, () => { - getWorkspace(axios, { id: 2 }) - expect(axios.request.args[0][0].url).toBe(`/workspaces/2`) +test(`Get specific workscape has the correct path and method`, () => { + workspacesRequest.get({ id: 2 }) + expect(fetch.mock.calls[0][1].method).toBe(`get`) + expect(fetch.mock.calls[0][0]).toBe(`${API_BASE_URL}/workspaces/2`) }) test(`Create a workscape requires a title`, () => { - expect(() => createWorkspace(axios, {})).toThrow(`A name is required`) + expect(() => workspacesRequest.add({})).toThrow(`A name is required`) }) test(`Create a workscape has the correct method`, () => { - createWorkspace(axios, { + workspacesRequest.add({ name: 'new workspace' }) - expect(axios.request.args[0][0].method).toBe(`post`) + expect(fetch.mock.calls[0][1].method).toBe(`post`) }) test(`add a member to a workscape has the correct method and path`, () => { - addMembers(axios, { + workspacesRequest.addMembers({ id: 2, members: 'test@test.com' }) - expect(axios.request.args[0][0].method).toBe(`patch`) - expect(axios.request.args[0][0].url).toBe(`/workspaces/2`) + expect(fetch.mock.calls[0][1].method).toBe(`patch`) + expect(fetch.mock.calls[0][0]).toBe(`${API_BASE_URL}/workspaces/2`) }) test(`add a member to a workscape has the correct payload`, () => { - addMembers(axios, { + workspacesRequest.addMembers({ id: 2, members: ['test@test.com', 'test2@test.com'] }) - expect(axios.request.args[0][0].data).toEqual([ + expect(fetch.mock.calls[0][1].data).toEqual([ { op: 'add', path: '/members', @@ -68,15 +64,15 @@ test(`add a member to a workscape has the correct payload`, () => { } } ]) - expect(axios.request.args[0][0].data.length).toEqual(2) + expect(fetch.mock.calls[0][1].data.length).toEqual(2) }) test(`remove a member to a workscape has the correct payload`, () => { - removeMembers(axios, { + workspacesRequest.removeMembers({ id: 2, members: ['test@test.com'] }) - expect(axios.request.args[0][0].data).toEqual([ + expect(fetch.mock.calls[0][1].data).toEqual([ { op: 'remove', path: '/members', @@ -85,17 +81,11 @@ test(`remove a member to a workscape has the correct payload`, () => { } } ]) - expect(axios.request.args[0][0].data.length).toEqual(1) -}) - -test(`Deleting a workscape has the correct path and method`, () => { - deleteWorkspace(axios, { id: 2 }) - expect(axios.request.args[0][0].method).toBe(`delete`) - expect(axios.request.args[0][0].url).toBe(`/workspaces/2`) + expect(fetch.mock.calls[0][1].data.length).toEqual(1) }) test(`Deleting a workscape has the correct path and method`, () => { - getWorkspaceForms(axios, { id: 2 }) - expect(axios.request.args[0][0].method).toBe(`get`) - expect(axios.request.args[0][0].url).toBe(`/workspaces/2/forms`) + workspacesRequest.delete({ id: 2 }) + expect(fetch.mock.calls[0][1].method).toBe(`delete`) + expect(fetch.mock.calls[0][0]).toBe(`${API_BASE_URL}/workspaces/2`) }) diff --git a/yarn.lock b/yarn.lock index 245d32f..2db80b4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -765,6 +765,10 @@ dependencies: samsam "1.3.0" +"@types/jest@^23.0.0": + version "23.3.1" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-23.3.1.tgz#a4319aedb071d478e6f407d1c4578ec8156829cf" + JSONStream@^1.0.4: version "1.3.2" resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.2.tgz#c102371b6ec3a7cf3b847ca00c20bb0fce4c6dea" @@ -780,6 +784,13 @@ abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" +accepts@~1.3.3, accepts@~1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" + dependencies: + mime-types "~2.1.18" + negotiator "0.6.1" + acorn-dynamic-import@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz#901ceee4c7faaef7e07ad2a47e890675da50a278" @@ -864,6 +875,12 @@ amdefine@>=0.0.4: version "1.0.1" resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" +ansi-align@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" + dependencies: + string-width "^2.0.0" + ansi-escapes@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" @@ -977,6 +994,10 @@ array-find-index@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + array-ify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" @@ -1083,19 +1104,16 @@ aws4@^1.2.1, aws4@^1.6.0: version "1.7.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.7.0.tgz#d4d0e9b9dbfca77bf08eeb0a8a471550fe39e289" +aws4@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" + axios-mock-adapter@^1.15.0: version "1.15.0" resolved "https://registry.yarnpkg.com/axios-mock-adapter/-/axios-mock-adapter-1.15.0.tgz#fbc06825d8302c95c3334d21023bba996255d45d" dependencies: deep-equal "^1.0.1" -axios@^0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.18.0.tgz#32d53e4851efdc0a11993b6cd000789d70c05102" - dependencies: - follow-redirects "^1.3.0" - is-buffer "^1.1.5" - 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" @@ -1762,6 +1780,12 @@ base@^0.11.1: mixin-deep "^1.2.0" pascalcase "^0.1.1" +basic-auth@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.0.tgz#015db3f353e02e56377755f962742e8981e7bbba" + dependencies: + safe-buffer "5.1.1" + bcrypt-pbkdf@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" @@ -1798,6 +1822,36 @@ bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: version "4.11.8" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" +body-parser@1.18.2: + version "1.18.2" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.2.tgz#87678a19d84b47d859b83199bd59bce222b10454" + dependencies: + bytes "3.0.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.1" + http-errors "~1.6.2" + iconv-lite "0.4.19" + on-finished "~2.3.0" + qs "6.5.1" + raw-body "2.3.2" + type-is "~1.6.15" + +body-parser@^1.18.3: + version "1.18.3" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.3.tgz#5b292198ffdd553b3a0f20ded0592b956955c8b4" + dependencies: + bytes "3.0.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "~1.6.3" + iconv-lite "0.4.23" + on-finished "~2.3.0" + qs "6.5.2" + raw-body "2.3.3" + type-is "~1.6.16" + boom@2.x.x: version "2.10.1" resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" @@ -1820,6 +1874,18 @@ bottleneck@^2.0.1: version "2.3.0" resolved "https://registry.yarnpkg.com/bottleneck/-/bottleneck-2.3.0.tgz#587b89f9b7ea61bb28cd4cb558ee4b4a2da12c7a" +boxen@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" + dependencies: + ansi-align "^2.0.0" + camelcase "^4.0.0" + chalk "^2.0.1" + cli-boxes "^1.0.0" + string-width "^2.0.0" + term-size "^1.2.0" + widest-line "^2.0.0" + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -1957,6 +2023,10 @@ builtin-status-codes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + cacache@^10.0.4: version "10.0.4" resolved "https://registry.yarnpkg.com/cacache/-/cacache-10.0.4.tgz#6452367999eff9d4188aefd9a14e9d7c6a263460" @@ -2042,7 +2112,7 @@ camelcase@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" -camelcase@^4.1.0: +camelcase@^4.0.0, camelcase@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" @@ -2050,6 +2120,10 @@ caniuse-lite@^1.0.30000821: version "1.0.30000828" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000828.tgz#048f98de213f7a3c047bf78a9523c611855d4fdd" +capture-stack-trace@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d" + cardinal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/cardinal/-/cardinal-1.0.0.tgz#50e21c1b0aa37729f9377def196b5a9cec932ee9" @@ -2102,6 +2176,14 @@ chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.3.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chalk@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + chalk@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.4.0.tgz#5199a3ddcd0c1efe23bc08c1b027b06176e0c64f" @@ -2183,6 +2265,10 @@ clean-stack@^1.0.0: version "1.3.0" resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-1.3.0.tgz#9e821501ae979986c46b1d66d2d432db2fd4ae31" +cli-boxes@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" + cli-cursor@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" @@ -2299,7 +2385,7 @@ colors@^1.1.2: version "1.2.1" resolved "https://registry.yarnpkg.com/colors/-/colors-1.2.1.tgz#f4a3d302976aaf042356ba1ade3b1a2c62d9d794" -combined-stream@1.0.6, combined-stream@^1.0.5, combined-stream@~1.0.5: +combined-stream@1.0.6, combined-stream@^1.0.5, combined-stream@~1.0.5, combined-stream@~1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" dependencies: @@ -2332,6 +2418,24 @@ component-emitter@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" +compressible@~2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.14.tgz#326c5f507fbb055f54116782b969a81b67a29da7" + dependencies: + mime-db ">= 1.34.0 < 2" + +compression@^1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.3.tgz#27e0e176aaf260f7f2c2813c3e440adb9f1993db" + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.14" + debug "2.6.9" + on-headers "~1.0.1" + safe-buffer "5.1.2" + vary "~1.1.2" + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -2345,6 +2449,21 @@ concat-stream@^1.5.0, concat-stream@^1.6.0: readable-stream "^2.2.2" typedarray "^0.0.6" +configstore@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.2.tgz#c6f25defaeef26df12dd33414b001fe81a543f8f" + dependencies: + dot-prop "^4.1.0" + graceful-fs "^4.1.2" + make-dir "^1.0.0" + unique-string "^1.0.0" + write-file-atomic "^2.0.0" + xdg-basedir "^3.0.0" + +connect-pause@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/connect-pause/-/connect-pause-0.1.1.tgz#b269b2bb82ddb1ac3db5099c0fb582aba99fb37a" + console-browserify@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" @@ -2359,6 +2478,14 @@ constants-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" +content-disposition@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + conventional-changelog-angular@^1.3.3: version "1.6.6" resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-1.6.6.tgz#b27f2b315c16d0a1f23eb181309d0e6a4698ea0f" @@ -2411,6 +2538,14 @@ convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.5.0: version "1.5.1" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + +cookie@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" + copy-concurrently@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" @@ -2434,6 +2569,13 @@ 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" +cors@^2.8.4: + version "2.8.4" + resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.4.tgz#2bd381f2eb201020105cd50ea59da63090694686" + dependencies: + object-assign "^4" + vary "^1" + cosmiconfig@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-4.0.0.tgz#760391549580bbd2df1e562bc177b13c290972dc" @@ -2450,6 +2592,12 @@ create-ecdh@^4.0.0: bn.js "^4.1.0" elliptic "^6.0.0" +create-error-class@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" + dependencies: + capture-stack-trace "^1.0.0" + create-hash@^1.1.0, create-hash@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" @@ -2517,6 +2665,10 @@ crypto-browserify@^3.11.0: randombytes "^2.0.0" randomfill "^1.0.3" +crypto-random-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" + cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": version "0.3.2" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b" @@ -2573,13 +2725,13 @@ dateformat@^3.0.0, dateformat@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" -debug@3.1.0, debug@^3.1.0: +debug@*, debug@3.1.0, debug@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" dependencies: ms "2.0.0" -debug@^2.2.0, debug@^2.3.3, debug@^2.6.8: +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" dependencies: @@ -2618,6 +2770,10 @@ deep-extend@^0.4.0, deep-extend@~0.4.0: version "0.4.2" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" @@ -2674,6 +2830,14 @@ delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" +depd@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" + +depd@~1.1.1, depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + des.js@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" @@ -2681,6 +2845,10 @@ des.js@^1.0.0: inherits "^2.0.1" minimalistic-assert "^1.0.0" +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + detect-conflict@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/detect-conflict/-/detect-conflict-1.0.1.tgz#088657a66a961c05019db7c4230883b1c6b4176e" @@ -2740,6 +2908,12 @@ dot-prop@^3.0.0: dependencies: is-obj "^1.0.0" +dot-prop@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" + dependencies: + is-obj "^1.0.0" + duplexer2@~0.1.0: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" @@ -2750,6 +2924,10 @@ duplexer3@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" +duplexer@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" + duplexify@^3.4.2, duplexify@^3.5.3: version "3.5.4" resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.4.tgz#4bb46c1796eabebeec4ca9a2e66b808cb7a3d8b4" @@ -2769,6 +2947,10 @@ editions@^1.3.3: version "1.3.4" resolved "https://registry.yarnpkg.com/editions/-/editions-1.3.4.tgz#3662cb592347c3168eb8e498a0ff73271d67f50b" +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + ejs@^2.3.1: version "2.5.8" resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.8.tgz#2ab6954619f225e6193b7ac5f7c39c48fefe4380" @@ -2797,6 +2979,16 @@ emojis-list@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + +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" + end-of-stream@^1.0.0, end-of-stream@^1.1.0: version "1.4.1" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" @@ -2841,6 +3033,13 @@ error@^7.0.2: string-template "~0.2.1" xtend "~4.0.0" +errorhandler@^1.2.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/errorhandler/-/errorhandler-1.5.0.tgz#eaba64ca5d542a311ac945f582defc336165d9f4" + dependencies: + accepts "~1.3.3" + escape-html "~1.0.3" + es-abstract@^1.5.1: version "1.11.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.11.0.tgz#cce87d518f0496893b1a30cd8461835535480681" @@ -2869,6 +3068,10 @@ es6-promisify@^5.0.0: dependencies: es6-promise "^4.0.3" +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + 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" @@ -2990,6 +3193,22 @@ esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + +event-stream@~3.3.0: + version "3.3.4" + resolved "http://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" + dependencies: + duplexer "~0.1.1" + from "~0" + map-stream "~0.1.0" + pause-stream "0.0.11" + split "0.3" + stream-combiner "~0.0.4" + through "~2.3.1" + events@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" @@ -3092,6 +3311,48 @@ expect@^22.4.3: jest-message-util "^22.4.3" jest-regex-util "^22.4.3" +express-urlrewrite@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/express-urlrewrite/-/express-urlrewrite-1.2.0.tgz#8e667b7761ff1c7ffdb0efa05d64035387c823eb" + dependencies: + debug "*" + path-to-regexp "^1.0.3" + +express@^4.16.3: + version "4.16.3" + resolved "https://registry.yarnpkg.com/express/-/express-4.16.3.tgz#6af8a502350db3246ecc4becf6b5a34d22f7ed53" + dependencies: + accepts "~1.3.5" + array-flatten "1.1.1" + body-parser "1.18.2" + content-disposition "0.5.2" + content-type "~1.0.4" + cookie "0.3.1" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.1.1" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.2" + path-to-regexp "0.1.7" + proxy-addr "~2.0.3" + qs "6.5.1" + range-parser "~1.2.0" + safe-buffer "5.1.1" + send "0.16.2" + serve-static "1.13.2" + setprototypeof "1.1.0" + statuses "~1.4.0" + type-is "~1.6.16" + utils-merge "1.0.1" + vary "~1.1.2" + extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" @@ -3109,6 +3370,10 @@ extend@~3.0.0, extend@~3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + external-editor@^2.0.4, external-editor@^2.1.0: version "2.2.0" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" @@ -3226,6 +3491,18 @@ fill-range@^4.0.0: repeat-string "^1.6.1" to-regex-range "^2.1.0" +finalhandler@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.1.tgz#eebf4ed840079c83f4249038c9d703008301b105" + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.2" + statuses "~1.4.0" + unpipe "~1.0.0" + find-cache-dir@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" @@ -3277,12 +3554,6 @@ flush-write-stream@^1.0.0: inherits "^2.0.1" readable-stream "^2.0.4" -follow-redirects@^1.3.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.4.1.tgz#d8120f4518190f55aac65bb6fc7b85fcd666d6aa" - dependencies: - debug "^3.1.0" - 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" @@ -3309,7 +3580,7 @@ form-data@~2.1.1: combined-stream "^1.0.5" mime-types "^2.1.12" -form-data@~2.3.1: +form-data@~2.3.1, form-data@~2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099" dependencies: @@ -3317,12 +3588,20 @@ form-data@~2.3.1: combined-stream "1.0.6" mime-types "^2.1.12" +forwarded@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + fragment-cache@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" 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" + from2@^2.1.0, from2@^2.1.1: version "2.3.0" resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" @@ -3330,6 +3609,10 @@ from2@^2.1.0, from2@^2.1.1: inherits "^2.0.1" readable-stream "^2.0.0" +from@~0: + version "0.1.7" + resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" + fs-extra@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-5.0.0.tgz#414d0110cdd06705734d055652c5411260c31abd" @@ -3585,6 +3868,22 @@ globby@^8.0.0: pify "^3.0.0" slash "^1.0.0" +got@^6.7.1: + version "6.7.1" + resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" + dependencies: + create-error-class "^3.0.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + is-redirect "^1.0.0" + is-retry-allowed "^1.0.0" + is-stream "^1.0.0" + lowercase-keys "^1.0.0" + safe-buffer "^5.0.1" + timed-out "^4.0.0" + unzip-response "^2.0.1" + url-parse-lax "^1.0.0" + got@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/got/-/got-7.1.0.tgz#05450fd84094e6bbea56f451a43a9c289166385a" @@ -3672,6 +3971,13 @@ har-validator@~5.0.3: ajv "^5.1.0" har-schema "^2.0.0" +har-validator@~5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.0.tgz#44657f5688a22cfd4b72486e81b3a3fb11742c29" + dependencies: + ajv "^5.3.0" + har-schema "^2.0.0" + has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" @@ -3826,6 +4132,24 @@ http-cache-semantics@3.8.1: version "3.8.1" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" +http-errors@1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" + dependencies: + depd "1.1.1" + inherits "2.0.3" + setprototypeof "1.0.3" + statuses ">= 1.3.1 < 2" + +http-errors@1.6.3, http-errors@~1.6.2, http-errors@~1.6.3: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + http-proxy-agent@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" @@ -3872,6 +4196,12 @@ iconv-lite@0.4.19: version "0.4.19" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" +iconv-lite@0.4.23, iconv-lite@~0.4.13: + version "0.4.23" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" + dependencies: + safer-buffer ">= 2.1.2 < 3" + iconv-lite@^0.4.17: version "0.4.21" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.21.tgz#c47f8733d02171189ebc4a400f3218d348094798" @@ -3886,6 +4216,10 @@ iferr@^0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" +ignore-by-default@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" + ignore@^3.3.3, ignore@^3.3.5: version "3.3.7" resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021" @@ -3896,6 +4230,10 @@ import-from@^2.1.0: dependencies: resolve-from "^3.0.0" +import-lazy@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" + import-local@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc" @@ -3932,7 +4270,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" @@ -4002,6 +4340,10 @@ invert-kv@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" +ipaddr.js@1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.8.0.tgz#eaa33d6ddd7ace8f7f6fe0c9ca0440e706738b1e" + 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" @@ -4146,6 +4488,17 @@ is-glob@^4.0.0: dependencies: is-extglob "^2.1.1" +is-installed-globally@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" + dependencies: + global-dirs "^0.1.0" + is-path-inside "^1.0.0" + +is-npm@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" + is-number@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" @@ -4220,6 +4573,10 @@ is-promise@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" +is-redirect@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" + is-regex@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" @@ -4250,7 +4607,7 @@ is-ssh@^1.3.0: dependencies: protocols "^1.1.0" -is-stream@^1.0.0, is-stream@^1.1.0: +is-stream@^1.0.0, 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" @@ -4302,6 +4659,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" @@ -4500,6 +4864,14 @@ jest-environment-node@^22.4.3: jest-mock "^22.4.3" jest-util "^22.4.3" +jest-fetch-mock@^1.6.5: + version "1.6.5" + resolved "https://registry.yarnpkg.com/jest-fetch-mock/-/jest-fetch-mock-1.6.5.tgz#178fa1a937ef6f61fb8e8483b6d4602b17e0d96d" + dependencies: + "@types/jest" "^23.0.0" + isomorphic-fetch "^2.2.1" + promise-polyfill "^7.1.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" @@ -4668,6 +5040,10 @@ jest@^22.4.3: import-local "^1.0.0" jest-cli "^22.4.3" +jju@^1.1.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/jju/-/jju-1.4.0.tgz#a3abe2718af241a2b2904f84a625970f389ae32a" + 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" @@ -4774,6 +5150,12 @@ json-parse-better-errors@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" +json-parse-helpfulerror@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/json-parse-helpfulerror/-/json-parse-helpfulerror-1.0.3.tgz#13f14ce02eed4e981297b64eb9e3b932e2dd13dc" + dependencies: + jju "^1.1.0" + json-schema-traverse@^0.3.0: version "0.3.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" @@ -4782,6 +5164,33 @@ json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" +json-server@^0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/json-server/-/json-server-0.14.0.tgz#a25c721dda9c4e741a64c25eca9926946573b08d" + dependencies: + body-parser "^1.18.3" + chalk "^2.4.1" + compression "^1.7.2" + connect-pause "^0.1.1" + cors "^2.8.4" + errorhandler "^1.2.0" + express "^4.16.3" + express-urlrewrite "^1.2.0" + json-parse-helpfulerror "^1.0.3" + lodash "^4.17.10" + lodash-id "^0.14.0" + lowdb "^0.15.0" + method-override "^2.3.10" + morgan "^1.9.0" + nanoid "^1.0.2" + object-assign "^4.0.1" + please-upgrade-node "^3.0.2" + pluralize "^7.0.0" + request "^2.87.0" + server-destroy "^1.0.1" + update-notifier "^2.5.0" + yargs "^10.1.2" + 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" @@ -4853,6 +5262,12 @@ kind-of@^6.0.0, kind-of@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" +latest-version@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" + dependencies: + package-json "^4.0.0" + lazy-cache@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" @@ -4991,6 +5406,10 @@ locate-path@^2.0.0: p-locate "^2.0.0" path-exists "^3.0.0" +lodash-id@^0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/lodash-id/-/lodash-id-0.14.0.tgz#baf48934e543a1b5d6346f8c84698b1a8c803896" + lodash._reinterpolate@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" @@ -5064,6 +5483,10 @@ lodash.upperfirst@4.3.1: version "4.3.1" resolved "https://registry.yarnpkg.com/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz#1365edf431480481ef0d1c68957a5ed99d49f7ce" +lodash@4, lodash@^4.17.10: + version "4.17.10" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" + lodash@^4.13.1, lodash@^4.14.0, lodash@^4.17.2, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0: version "4.17.5" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" @@ -5108,6 +5531,16 @@ loud-rejection@^1.0.0: currently-unhandled "^0.4.1" signal-exit "^3.0.0" +lowdb@^0.15.0: + version "0.15.5" + resolved "https://registry.yarnpkg.com/lowdb/-/lowdb-0.15.5.tgz#9ade105df8aa573692d1221622b85414fbf4fa96" + dependencies: + graceful-fs "^4.1.3" + is-promise "^2.1.0" + json-parse-helpfulerror "^1.0.3" + lodash "4" + steno "^0.4.1" + lowercase-keys@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" @@ -5147,6 +5580,10 @@ map-obj@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" +map-stream@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" + map-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" @@ -5174,6 +5611,10 @@ md5.js@^1.3.4: hash-base "^3.0.0" inherits "^2.0.1" +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + mem-fs-editor@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/mem-fs-editor/-/mem-fs-editor-3.0.2.tgz#dd0a6eaf2bb8a6b37740067aa549eb530105af9f" @@ -5239,6 +5680,10 @@ meow@^4.0.0: redent "^2.0.0" trim-newlines "^2.0.0" +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + merge-stream@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" @@ -5253,6 +5698,19 @@ merge@^1.1.3: version "1.2.0" resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" +method-override@^2.3.10: + version "2.3.10" + resolved "https://registry.yarnpkg.com/method-override/-/method-override-2.3.10.tgz#e3daf8d5dee10dd2dce7d4ae88d62bbee77476b4" + dependencies: + debug "2.6.9" + methods "~1.1.2" + parseurl "~1.3.2" + vary "~1.1.2" + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + micromatch@^2.1.5, micromatch@^2.3.11, micromatch@^2.3.7: version "2.3.11" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" @@ -5296,6 +5754,10 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" +"mime-db@>= 1.34.0 < 2", mime-db@~1.35.0: + version "1.35.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.35.0.tgz#0569d657466491283709663ad379a99b90d9ab47" + mime-db@~1.33.0: version "1.33.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" @@ -5306,6 +5768,16 @@ mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.7: dependencies: mime-db "~1.33.0" +mime-types@~2.1.18, mime-types@~2.1.19: + version "2.1.19" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.19.tgz#71e464537a7ef81c15f2db9d97e913fc0ff606f0" + dependencies: + mime-db "~1.35.0" + +mime@1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" + mime@^2.0.3: version "2.3.1" resolved "https://registry.yarnpkg.com/mime/-/mime-2.3.1.tgz#b1621c54d63b97c47d3cfe7f7215f7d64517c369" @@ -5387,6 +5859,16 @@ modify-values@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" +morgan@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.9.0.tgz#d01fa6c65859b76fcf31b3cb53a3821a311d8051" + dependencies: + basic-auth "~2.0.0" + debug "2.6.9" + depd "~1.1.1" + on-finished "~2.3.0" + on-headers "~1.0.1" + move-concurrently@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" @@ -5419,6 +5901,10 @@ nan@^2.3.0: version "2.10.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" +nanoid@^1.0.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-1.2.0.tgz#e2c4dfa45c2bed995d0214aae157ce5052cfcb1d" + nanomatch@^1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.9.tgz#879f7150cb2dab7a471259066c104eee6e0fa7c2" @@ -5440,6 +5926,10 @@ natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" +negotiator@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" + neo-async@^2.5.0: version "2.5.1" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.5.1.tgz#acb909e327b1e87ec9ef15f41b8a269512ad41ee" @@ -5472,6 +5962,13 @@ node-emoji@^1.4.1: dependencies: lodash.toarray "^4.4.0" +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.1: version "2.1.2" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.1.2.tgz#ab884e8e7e57e38a944753cec706f788d1768bb5" @@ -5537,6 +6034,21 @@ node-pre-gyp@^0.6.39: tar "^2.2.1" tar-pack "^3.4.0" +nodemon@^1.18.3: + version "1.18.3" + resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-1.18.3.tgz#46e681ee0dd1b590562e03019b4c5df234f906f9" + dependencies: + chokidar "^2.0.2" + debug "^3.1.0" + ignore-by-default "^1.0.1" + minimatch "^3.0.4" + pstree.remy "^1.1.0" + semver "^5.5.0" + supports-color "^5.2.0" + touch "^3.1.0" + undefsafe "^2.0.2" + update-notifier "^2.3.0" + nomnom@^1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/nomnom/-/nomnom-1.8.1.tgz#2151f722472ba79e50a76fc125bb8c8f2e4dc2a7" @@ -5551,6 +6063,12 @@ nopt@^4.0.1: abbrev "1" osenv "^0.1.4" +nopt@~1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" + dependencies: + abbrev "1" + normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: version "2.4.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" @@ -5619,7 +6137,11 @@ 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.0.1, object-assign@^4.1.0: +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + +object-assign@^4, 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" @@ -5661,6 +6183,16 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" + once@^1.3.0, once@^1.3.1, once@^1.3.3, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -5813,6 +6345,15 @@ p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" +package-json@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" + dependencies: + got "^6.7.1" + registry-auth-token "^3.0.1" + registry-url "^3.0.3" + semver "^5.1.0" + pako@~1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258" @@ -5880,6 +6421,10 @@ parse5@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" +parseurl@~1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" + pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" @@ -5918,7 +6463,11 @@ path-parse@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" -path-to-regexp@^1.7.0: +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" + +path-to-regexp@^1.0.3, path-to-regexp@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.7.0.tgz#59fde0f435badacba103a84e9d3bc64e96b9937d" dependencies: @@ -5938,6 +6487,12 @@ path-type@^3.0.0: dependencies: pify "^3.0.0" +pause-stream@0.0.11: + version "0.0.11" + resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" + dependencies: + through "~2.3" + pbkdf2@^3.0.3: version "3.0.14" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.14.tgz#a35e13c64799b06ce15320f459c230e68e73bade" @@ -5990,6 +6545,12 @@ please-upgrade-node@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.0.1.tgz#0a681f2c18915e5433a5ca2cd94e0b8206a782db" +please-upgrade-node@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz#ed320051dfcc5024fae696712c8288993595e8ac" + dependencies: + semver-compare "^1.0.0" + pluralize@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" @@ -6053,18 +6614,45 @@ promise-inflight@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" +promise-polyfill@^7.1.1: + version "7.1.2" + resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-7.1.2.tgz#ab05301d8c28536301622d69227632269a70ca3b" + protocols@^1.1.0, protocols@^1.4.0: version "1.4.6" resolved "https://registry.yarnpkg.com/protocols/-/protocols-1.4.6.tgz#f8bb263ea1b5fd7a7604d26b8be39bd77678bf8a" +proxy-addr@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.4.tgz#ecfc733bf22ff8c6f407fa275327b9ab67e48b93" + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.8.0" + prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" +ps-tree@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.1.0.tgz#b421b24140d6203f1ed3c76996b4427b08e8c014" + dependencies: + event-stream "~3.3.0" + pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" +psl@^1.1.24: + version "1.1.29" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.29.tgz#60f580d360170bb722a797cc704411e6da850c67" + +pstree.remy@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.0.tgz#f2af27265bd3e5b32bbfcc10e80bac55ba78688b" + dependencies: + ps-tree "^1.1.0" + public-encrypt@^4.0.0: version "4.0.2" resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.2.tgz#46eb9107206bf73489f8b85b69d91334c6610994" @@ -6106,14 +6694,18 @@ q@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" +qs@6.5.1, qs@~6.5.1: + version "6.5.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" + +qs@6.5.2, qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + qs@~6.4.0: version "6.4.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" -qs@~6.5.1: - version "6.5.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" - query-string@^5.0.1: version "5.1.1" resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb" @@ -6154,6 +6746,37 @@ randomfill@^1.0.3: randombytes "^2.0.5" safe-buffer "^5.1.0" +range-parser@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" + +raw-body@2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89" + dependencies: + bytes "3.0.0" + http-errors "1.6.2" + iconv-lite "0.4.19" + unpipe "1.0.0" + +raw-body@2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.3.tgz#1b324ece6b5706e153855bc1148c65bb7f6ea0c3" + dependencies: + bytes "3.0.0" + http-errors "1.6.3" + iconv-lite "0.4.23" + unpipe "1.0.0" + +rc@^1.0.1: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + rc@^1.1.6, rc@^1.1.7: version "1.2.6" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.6.tgz#eb18989c6d4f4f162c399f79ddd29f3835568092" @@ -6340,13 +6963,19 @@ regexpu-core@^4.1.3: unicode-match-property-ecmascript "^1.0.3" unicode-match-property-value-ecmascript "^1.0.1" -registry-auth-token@^3.3.1: +registry-auth-token@^3.0.1, registry-auth-token@^3.3.1: version "3.3.2" resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.3.2.tgz#851fd49038eecb586911115af845260eec983f20" dependencies: rc "^1.1.6" safe-buffer "^5.0.1" +registry-url@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" + dependencies: + rc "^1.0.1" + regjsgen@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" @@ -6461,6 +7090,31 @@ request@^2.83.0: tunnel-agent "^0.6.0" uuid "^3.1.0" +request@^2.87.0: + version "2.88.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.0" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.4.3" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -6604,17 +7258,21 @@ rxjs@^5.4.2, rxjs@^5.5.2: dependencies: symbol-observable "1.0.1" -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: +safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" +safe-buffer@5.1.2, safe-buffer@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" dependencies: ret "~0.1.10" -safer-buffer@^2.1.0: +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" @@ -6681,14 +7339,55 @@ semantic-release@^15.1.7: semver "^5.4.1" yargs "^11.0.0" -"semver@2 || 3 || 4 || 5", semver@5.5.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0: +semver-compare@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" + +semver-diff@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" + dependencies: + semver "^5.0.3" + +"semver@2 || 3 || 4 || 5", semver@5.5.0, semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" +send@0.16.2: + version "0.16.2" + resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.6.2" + mime "1.4.1" + ms "2.0.0" + on-finished "~2.3.0" + range-parser "~1.2.0" + statuses "~1.4.0" + serialize-javascript@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.4.0.tgz#7c958514db6ac2443a8abc062dc9f7886a7f6005" +serve-static@1.13.2: + version "1.13.2" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.2" + send "0.16.2" + +server-destroy@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/server-destroy/-/server-destroy-1.0.1.tgz#f13bf928e42b9c3e79383e61cc3998b5d14e6cdd" + set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -6719,6 +7418,14 @@ setimmediate@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" +setprototypeof@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + sha.js@^2.4.0, sha.js@^2.4.8: version "2.4.11" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" @@ -6915,6 +7622,12 @@ split2@~1.0.0: dependencies: through2 "~2.0.0" +split@0.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f" + dependencies: + through "2" + split@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" @@ -6960,10 +7673,24 @@ static-extend@^0.1.1: define-property "^0.2.5" object-copy "^0.1.0" +"statuses@>= 1.3.1 < 2", "statuses@>= 1.4.0 < 2": + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + +statuses@~1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" + stealthy-require@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" +steno@^0.4.1: + version "0.4.4" + resolved "https://registry.yarnpkg.com/steno/-/steno-0.4.4.tgz#071105bdfc286e6615c0403c27e9d7b5dcb855cb" + dependencies: + graceful-fs "^4.1.3" + stream-browserify@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" @@ -6978,6 +7705,12 @@ stream-combiner2@~1.1.1: duplexer2 "~0.1.0" readable-stream "^2.0.2" +stream-combiner@~0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" + dependencies: + duplexer "~0.1.1" + stream-each@^1.1.0: version "1.2.2" resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.2.tgz#8e8c463f91da8991778765873fe4d960d8f616bd" @@ -7179,6 +7912,12 @@ temp@^0.8.1: os-tmpdir "^1.0.0" rimraf "~2.2.6" +term-size@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" + dependencies: + execa "^0.7.0" + test-exclude@^4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.2.1.tgz#dfa222f03480bca69207ca728b37d74b45f724fa" @@ -7216,7 +7955,7 @@ through2@^2.0.0, through2@^2.0.2, through2@~2.0.0: readable-stream "^2.1.5" xtend "~4.0.1" -through@2, "through@>=2.2.7 <3", through@^2.3.6: +through@2, "through@>=2.2.7 <3", through@^2.3.6, through@~2.3, through@~2.3.1: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" @@ -7274,12 +8013,25 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" +touch@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" + dependencies: + nopt "~1.0.10" + tough-cookie@>=2.3.3, tough-cookie@^2.3.3, tough-cookie@~2.3.0, tough-cookie@~2.3.3: version "2.3.4" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" dependencies: punycode "^1.4.1" +tough-cookie@~2.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" + dependencies: + psl "^1.1.24" + punycode "^1.4.1" + tr46@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" @@ -7330,6 +8082,13 @@ type-detect@^4.0.5: version "4.0.8" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" +type-is@~1.6.15, type-is@~1.6.16: + version "1.6.16" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" + dependencies: + media-typer "0.3.0" + mime-types "~2.1.18" + typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" @@ -7371,6 +8130,12 @@ uid-number@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" +undefsafe@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.2.tgz#225f6b9e0337663e0d8e7cfd686fc2836ccace76" + dependencies: + debug "^2.2.0" + underscore@~1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.6.0.tgz#8b38b10cacdef63337b8b24e4ff86d45aea529a8" @@ -7415,10 +8180,20 @@ unique-slug@^2.0.0: dependencies: imurmurhash "^0.1.4" +unique-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" + dependencies: + crypto-random-string "^1.0.0" + universalify@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.1.tgz#fa71badd4437af4c148841e3b3b165f9e9e590b7" +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" @@ -7430,10 +8205,29 @@ untildify@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/untildify/-/untildify-3.0.2.tgz#7f1f302055b3fea0f3e81dc78eb36766cb65e3f1" +unzip-response@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" + upath@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/upath/-/upath-1.0.4.tgz#ee2321ba0a786c50973db043a50b7bcba822361d" +update-notifier@^2.3.0, update-notifier@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" + dependencies: + boxen "^1.2.1" + chalk "^2.0.1" + configstore "^3.0.0" + import-lazy "^2.1.0" + is-ci "^1.0.10" + is-installed-globally "^0.1.0" + is-npm "^1.0.0" + latest-version "^3.0.0" + semver-diff "^2.0.0" + xdg-basedir "^3.0.0" + uri-js@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-3.0.2.tgz#f90b858507f81dea4dcfbb3c4c3dbfa2b557faaa" @@ -7498,10 +8292,18 @@ util@0.10.3, util@^0.10.3: dependencies: inherits "2.0.1" +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + uuid@^3.0.0, uuid@^3.1.0: version "3.2.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" +uuid@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" + v8-compile-cache@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-1.1.2.tgz#8d32e4f16974654657e676e0e467a348e89b0dc4" @@ -7519,6 +8321,10 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" +vary@^1, vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + verror@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" @@ -7668,6 +8474,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-mimetype@^2.0.0, whatwg-mimetype@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.1.0.tgz#f0f21d76cbba72362eb609dbed2a30cd17fcc7d4" @@ -7696,6 +8506,12 @@ wide-align@^1.1.0: dependencies: string-width "^1.0.2" +widest-line@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.0.tgz#0142a4e8a243f8882c0233aa0e0281aa76152273" + dependencies: + string-width "^2.1.1" + window-size@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" @@ -7737,7 +8553,7 @@ write-file-atomic@^1.2.0: imurmurhash "^0.1.4" slide "^1.1.5" -write-file-atomic@^2.1.0: +write-file-atomic@^2.0.0, write-file-atomic@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab" dependencies: @@ -7758,6 +8574,10 @@ ws@^4.0.0: async-limiter "~1.0.0" safe-buffer "~5.1.0" +xdg-basedir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" + 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" @@ -7790,7 +8610,7 @@ yargs-parser@^9.0.2: dependencies: camelcase "^4.1.0" -yargs@^10.0.3: +yargs@^10.0.3, yargs@^10.1.2: version "10.1.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.1.2.tgz#454d074c2b16a51a43e2fb7807e4f9de69ccb5c5" dependencies: