├── .gitignore ├── .mocharc.js ├── .npmignore ├── .travis.yml ├── LICENSE ├── README.md ├── package.json ├── src └── fetch-suspense.ts ├── tests ├── create-use-fetch.test.ts ├── use-fetch-without-window.test.ts ├── use-fetch.test.ts ├── utils │ └── constants.ts └── yse-fetch-without-window-fetch.test.ts ├── tsconfig.json └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | /fetch-suspense.d.ts 3 | /fetch-suspense.js 4 | -------------------------------------------------------------------------------- /.mocharc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | allowUncaught: false, 3 | checkLeaks: true, 4 | color: true, 5 | diff: true, 6 | extension: [ 'ts' ], 7 | forbidOnly: true, 8 | forbidPending: true, 9 | fullTrace: false, 10 | inlineDiff: true, 11 | recursive: true, 12 | require: [ 13 | '@babel/register', 14 | 'chai/register-expect', 15 | 'jsdom-global/register', 16 | 'ts-node/register', 17 | ], 18 | sort: true, 19 | watch: false, 20 | watchExtensions: [ 'ts' ], 21 | }; 22 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | /src 3 | /tests 4 | /.gitignore 5 | /.mocharc.js 6 | /.npmignore 7 | /.travis.yml 8 | /tsconfig.json 9 | /yarn.lock 10 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 8.9.1 3 | branches: 4 | only: master 5 | cache: yarn 6 | install: yarn 7 | script: 8 | - yarn build 9 | - yarn test 10 | deploy: 11 | api_key: 12 | secure: dfYNR3lqPc4oJIzrilJSznRAEiF9XmIvVmrZZuGSWxC2vGJPuVMp5rKQFnD1uWxjDwfJdkZOUL9F5zepuS5Pp7SqCWvpjt8hH/tVJfk/9mhf69b1sImB9d7rGm4TIE9iQaV71C5OEOZu9tcWsN6ukdFxETarLc1NahdCsKW7wZ+k6s0rUD3rlBAnJKWXPZAFiWo9bD+PZXI9reX72NoVDMFLl/WSQOAQTFPDOlwitXclOJ+7NNo5YQpwtmaTAh2ZWq7G7cfPhIaCVsTXeQI76az73BisuX3gsPPLNHGRA5+a9BKk7anajr9W0rKLK3WBg5/y7DqXBBA85xly2HhAYexQJFcJxgufHn7bu+fRdyzIHdMbBb7vD6VbyPPgRSZnZ9p9MMMTr8Mwkscp/sxKndcF8vUOf1d8iXVUGxEgZqSBgZZE9/wMCSK7YUwzsNtmrJx/20dUJ1nFcdn/pnTqEJ7DBY3pJPv1bQTp4BLcv4XEZNVO6uFbF0tO3Zu1glLrCUbY5KwJabpI6gcJFtqe4eV93SpnsuVh8puppmKMT/JfXpjSdhSsnSzj+cnU+JtQbKyYtgBVEMTIahnPO9HZZk1E33H8jM1HNFOv4JTOFLwcSpF3oufQYLn3aRZiHBNx9viW6PWLVUBkZSmMxL9SpCANU2UFiJjieS5L9h4hXcw= 13 | email: npmjs@charlesstover.com 14 | on: 15 | branch: master 16 | provider: npm 17 | skip_cleanup: true 18 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Charles Stover 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # useFetch [![Tweet](https://img.shields.io/twitter/url/http/shields.io.svg?style=social)](https://twitter.com/intent/tweet?text=You%20can%20now%20use%20React%20Suspense%20with%20the%20Fetch%20API!&url=https://github.com/CharlesStover/fetch-suspense&via=CharlesStover&hashtags=react,reactjs,javascript,typescript,webdev,webdevelopment) [![version](https://img.shields.io/npm/v/fetch-suspense.svg)](https://www.npmjs.com/package/fetch-suspense) [![minified size](https://img.shields.io/bundlephobia/min/fetch-suspense.svg)](https://www.npmjs.com/package/fetch-suspense) [![minzipped size](https://img.shields.io/bundlephobia/minzip/fetch-suspense.svg)](https://www.npmjs.com/package/fetch-suspense) [![downloads](https://img.shields.io/npm/dt/fetch-suspense.svg)](https://www.npmjs.com/package/fetch-suspense) [![build](https://api.travis-ci.com/CharlesStover/fetch-suspense.svg)](https://travis-ci.com/CharlesStover/fetch-suspense/) 2 | 3 | `useFetch` is a React hook that supports the React 16.6 Suspense component 4 | implementation. 5 | 6 | The design decisions and development process for this package are outlined in 7 | the Medium article 8 | [React Suspense with the Fetch API](https://medium.com/@Charles_Stover/react-suspense-with-the-fetch-api-a1b7369b0469). 9 | 10 | ## Install 11 | 12 | * `npm install fetch-suspense` or 13 | * `yarn add fetch-suspense` 14 | 15 | ## Examples 16 | 17 | ### Basic Example 18 | 19 | ```javascript 20 | import useFetch from 'fetch-suspense'; 21 | import React, { Suspense } from 'react'; 22 | 23 | // This fetching component will be delayed by Suspense until the fetch request 24 | // resolves. The return value of useFetch will be the response of the server. 25 | const MyFetchingComponent = () => { 26 | const response = useFetch('/path/to/api', { method: 'POST' }); 27 | return 'The server responded with: ' + response; 28 | }; 29 | 30 | // The App component wraps the asynchronous fetching component in Suspense. 31 | // The fallback component (loading text) is displayed until the fetch request 32 | // resolves. 33 | const App = () => { 34 | return ( 35 | 36 | 37 | 38 | ); 39 | }; 40 | ``` 41 | 42 | ### Using a Custom Fetch API 43 | 44 | If you don't want to rely on the global `fetch` API, you can create your own 45 | `useFetch` hook by importing the `createUseFetch` helper function. 46 | 47 | ```javascript 48 | import { createUseFetch } from 'fetch-suspense'; 49 | import myFetchApi from 'my-fetch-package'; 50 | import React, { Suspense } from 'react'; 51 | 52 | // Create a useFetch hook using one's own Fetch API. 53 | // NOTE: useFetch hereafter refers to this constant, not the default export of 54 | // the fetch-suspense package. 55 | const useFetch = createUseFetch(myFetchApi); 56 | 57 | // This fetching component will be delayed by Suspense until the fetch request 58 | // resolves. The return value of useFetch will be the response of the server. 59 | const MyFetchingComponent = () => { 60 | const response = useFetch('/path/to/api', { method: 'POST' }); 61 | return 'The server responded with: ' + response; 62 | }; 63 | 64 | // The App component wraps the asynchronous fetching component in Suspense. 65 | // The fallback component (loading text) is displayed until the fetch request 66 | // resolves. 67 | const App = () => { 68 | return ( 69 | 70 | 71 | 72 | ); 73 | }; 74 | ``` 75 | 76 | ### Including Fetch Metadata 77 | 78 | To include fetch metadata with your response, include an `options` parameter 79 | with `metadata: true`. 80 | 81 | ```javascript 82 | import useFetch from 'fetch-suspense'; 83 | import React, { Suspense } from 'react'; 84 | 85 | // This fetching component will be delayed by Suspense until the fetch request 86 | // resolves. The return value of useFetch will be the response of the server 87 | // AS WELL AS metadata for the request. 88 | const MyFetchingComponent = () => { 89 | const { contentType, response } = useFetch( 90 | '/path/to/api', 91 | { method: 'POST' }, 92 | { metadata: true }, // <-- 93 | ); 94 | return `The server responded with ${contentType}: ${response}`; 95 | }; 96 | 97 | // The App component wraps the asynchronous fetching component in Suspense. 98 | // The fallback component (loading text) is displayed until the fetch request 99 | // resolves. 100 | const App = () => { 101 | return ( 102 | 103 | 104 | 105 | ); 106 | }; 107 | ``` 108 | 109 | ## Options 110 | 111 | The supported options for the third, options parameter are: 112 | 113 | ### lifespan?: number 114 | 115 | _Default: 0_ 116 | 117 | The number of milliseconds to cache the result of the request. Each time the 118 | component mounts before this many milliseconds have passed, it will return the 119 | response from the last time this same request was made. 120 | 121 | If 0, the cache will be last the remainder of the browser session. 122 | 123 | ### metadata?: boolean 124 | 125 | _Default: false_ 126 | 127 | If true, the `useFetch` hook will return metadata _in addition to_ the response 128 | from the fetch request. Instead of returning just the response, an interface 129 | as follows will be returned: 130 | 131 | ```typescript 132 | interface UseFetchResponse { 133 | bodyUsed: boolean; 134 | contentType: null | string; 135 | headers: Headers; 136 | ok: boolean; 137 | redirected: boolean; 138 | // The same response from the server that would be returned if metadata were 139 | // false. It is an Object is the server responded with JSON, and it is a 140 | // string if the server responded with plain text. 141 | response: Object | string; 142 | status: number; 143 | statusText: string; 144 | url: string; 145 | } 146 | ``` 147 | 148 | You can access these properties easily through destructuring. See 149 | [Including Fetch Metadata](#including-fetch-metadata). 150 | 151 | ## Sponsor 💗 152 | 153 | If you are a fan of this project, you may 154 | [become a sponsor](https://github.com/sponsors/CharlesStover) 155 | via GitHub's Sponsors Program. 156 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "fetch-suspense", 3 | "version": "1.2.2", 4 | "author": "Charles Stover ", 5 | "bugs": { 6 | "url": "https://github.com/CharlesStover/fetch-suspense/issues" 7 | }, 8 | "description": "A React hook compatible with React 16.6's Suspense component.", 9 | "homepage": "https://github.com/CharlesStover/fetch-suspense#readme", 10 | "license": "MIT", 11 | "main": "fetch-suspense.js", 12 | "repository": "https://github.com/CharlesStover/fetch-suspense.git", 13 | "scripts": { 14 | "build": "tsc", 15 | "dev": "tsc --watch", 16 | "prepublishOnly": "npm run build", 17 | "test": "mocha tests/**/*.test.ts" 18 | }, 19 | "dependencies": { 20 | "deep-equal": "^1.0.1" 21 | }, 22 | "devDependencies": { 23 | "@babel/core": "^7.4.3", 24 | "@babel/register": "^7.4.0", 25 | "@types/chai": "^4.1.7", 26 | "@types/deep-equal": "^1.0.1", 27 | "@types/mocha": "^5.2.6", 28 | "@types/node": "^12.6.2", 29 | "@types/node-fetch": "^2.5.0", 30 | "@types/sinon": "^7.0.11", 31 | "chai": "^4.2.0", 32 | "jsdom": "^14.0.0", 33 | "jsdom-global": "^3.0.2", 34 | "mocha": "^6.1.3", 35 | "node-fetch": "^2.6.0", 36 | "sinon": "^7.3.1", 37 | "ts-node": "^8.0.3", 38 | "typescript": "^3.1.5" 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/fetch-suspense.ts: -------------------------------------------------------------------------------- 1 | import deepEqual = require('deep-equal'); 2 | 3 | type FetchFunction = typeof window.fetch; 4 | 5 | type CreateUseFetch = (fetch?: FetchFunction) => UseFetch; 6 | 7 | interface Export extends UseFetch { 8 | createUseFetch: CreateUseFetch; 9 | default: UseFetch; 10 | } 11 | 12 | interface FetchCache { 13 | bodyUsed?: boolean; 14 | contentType?: null | string; 15 | fetch?: Promise; 16 | error?: any; 17 | headers?: Headers; 18 | init: RequestInit | undefined; 19 | input: RequestInfo; 20 | ok?: boolean; 21 | redirected?: boolean; 22 | response?: any; 23 | status?: number; 24 | statusText?: string; 25 | url?: string; 26 | } 27 | 28 | type FetchResponse = Object | string; 29 | 30 | interface FetchResponseMetadata { 31 | bodyUsed: boolean; 32 | contentType: null | string; 33 | headers: Headers; 34 | ok: boolean; 35 | redirected: boolean; 36 | response: FetchResponse; 37 | status: number; 38 | statusText: string; 39 | url: string; 40 | } 41 | 42 | interface Options { 43 | lifespan?: number; 44 | metadata?: boolean; 45 | } 46 | 47 | interface OptionsWithMetadata extends Options { 48 | metadata: true; 49 | } 50 | 51 | interface OptionsWithoutMetadata extends Options { 52 | metadata?: false; 53 | } 54 | 55 | interface UseFetch { 56 | ( 57 | input: RequestInfo, 58 | init?: RequestInit | undefined, 59 | options?: number | OptionsWithoutMetadata, 60 | ): FetchResponse; 61 | ( 62 | input: RequestInfo, 63 | init: RequestInit | undefined, 64 | options: OptionsWithMetadata, 65 | ): FetchResponseMetadata; 66 | } 67 | 68 | const getDefaultFetchFunction = (): FetchFunction => { 69 | if (typeof window === 'undefined') { 70 | return (): Promise => { 71 | return Promise.reject( 72 | new Error('Cannot find `window`. Use `createUseFetch` to provide a custom `fetch` function.'), 73 | ); 74 | }; 75 | } 76 | if (typeof window.fetch === 'undefined') { 77 | return (): Promise => { 78 | return Promise.reject( 79 | new Error('Cannot find `window.fetch`. Use `createUseFetch` to provide a custom `fetch` function.'), 80 | ); 81 | }; 82 | } 83 | return window.fetch; 84 | }; 85 | 86 | const createUseFetch: CreateUseFetch = ( 87 | fetch: FetchFunction = getDefaultFetchFunction(), 88 | ): UseFetch => { 89 | // Create a set of caches for this hook. 90 | const caches: FetchCache[] = []; 91 | 92 | function useFetch( 93 | input: RequestInfo, 94 | init?: RequestInit | undefined, 95 | options?: number | OptionsWithoutMetadata, 96 | ): FetchResponse; 97 | function useFetch( 98 | input: RequestInfo, 99 | init: RequestInit | undefined, 100 | options: OptionsWithMetadata, 101 | ): FetchResponseMetadata; 102 | function useFetch( 103 | input: RequestInfo, 104 | init?: RequestInit | undefined, 105 | options: number | Options = 0, 106 | ): FetchResponse | FetchResponseMetadata { 107 | 108 | if (typeof options === 'number') { 109 | return useFetch(input, init, { lifespan: options }); 110 | } 111 | 112 | const { metadata = false, lifespan = 0 } = options; 113 | 114 | // Check each cache by this useFetch hook. 115 | for (const cache of caches) { 116 | 117 | // If this cache matches the request, 118 | if ( 119 | deepEqual(input, cache.input) && 120 | deepEqual(init, cache.init) 121 | ) { 122 | 123 | // If an error occurred, throw it so that componentDidCatch can handle 124 | // it. 125 | if (Object.prototype.hasOwnProperty.call(cache, 'error')) { 126 | throw cache.error; 127 | } 128 | 129 | // If a response was successful, return it. 130 | if (Object.prototype.hasOwnProperty.call(cache, 'response')) { 131 | if (metadata) { 132 | return { 133 | bodyUsed: cache.bodyUsed, 134 | contentType: cache.contentType, 135 | headers: cache.headers, 136 | ok: cache.ok, 137 | redirected: cache.redirected, 138 | response: cache.response, 139 | status: cache.status, 140 | statusText: cache.statusText, 141 | url: cache.url, 142 | }; 143 | } 144 | return cache.response; 145 | } 146 | 147 | // If we are still waiting, throw the Promise so that Suspense can 148 | // fallback. 149 | throw cache.fetch; 150 | } 151 | } 152 | 153 | // If no request in the cache matched this one, create a new cache entry. 154 | const cache: FetchCache = { 155 | 156 | // Make the fetch request. 157 | fetch: fetch(input, init) 158 | 159 | // Parse the response. 160 | .then((response: Response): Promise => { 161 | cache.contentType = response.headers.get('Content-Type'); 162 | if (metadata) { 163 | cache.bodyUsed = response.bodyUsed; 164 | cache.headers = response.headers; 165 | cache.ok = response.ok; 166 | cache.redirected = response.redirected; 167 | cache.status = response.status; 168 | cache.statusText = response.statusText; 169 | } 170 | if ( 171 | cache.contentType && 172 | cache.contentType.indexOf('application/json') !== -1 173 | ) { 174 | return response.json(); 175 | } 176 | return response.text(); 177 | }) 178 | 179 | // Cache the response. 180 | .then((response: FetchResponse): void => { 181 | cache.response = response; 182 | }) 183 | 184 | // Handle an error. 185 | .catch((e: Error): void => { 186 | cache.error = e; 187 | }) 188 | 189 | // Invalidate the cache. 190 | .then((): void => { 191 | if (lifespan > 0) { 192 | setTimeout( 193 | (): void => { 194 | const index: number = caches.indexOf(cache); 195 | if (index !== -1) { 196 | caches.splice(index, 1); 197 | } 198 | }, 199 | lifespan, 200 | ); 201 | } 202 | }), 203 | init, 204 | input, 205 | }; 206 | caches.push(cache); 207 | throw cache.fetch; 208 | } 209 | 210 | return useFetch; 211 | }; 212 | 213 | const _export: Export = Object.assign( 214 | createUseFetch(), { 215 | createUseFetch, 216 | default: createUseFetch(), 217 | }); 218 | 219 | export = _export; 220 | -------------------------------------------------------------------------------- /tests/create-use-fetch.test.ts: -------------------------------------------------------------------------------- 1 | import { expect } from 'chai'; 2 | import { Headers as NodeFetchHeaders } from 'node-fetch'; 3 | import { createUseFetch } from '../fetch-suspense'; 4 | import CommonJS = require('../fetch-suspense'); 5 | 6 | type FetchResponse = Object | string; 7 | 8 | interface FetchResponseMetadata { 9 | contentType: null | string; 10 | headers: Headers; 11 | ok: boolean; 12 | redirected: boolean; 13 | response: FetchResponse; 14 | status: number; 15 | statusText: string; 16 | } 17 | 18 | interface Options { 19 | lifespan?: number; 20 | metadata?: boolean; 21 | } 22 | 23 | interface OptionsWithMetadata extends Options { 24 | metadata: true; 25 | } 26 | 27 | interface OptionsWithoutMetadata extends Options { 28 | metadata?: false; 29 | } 30 | 31 | interface UseFetch { 32 | ( 33 | input: RequestInfo, 34 | init?: RequestInit | undefined, 35 | options?: number | OptionsWithoutMetadata, 36 | ): FetchResponse; 37 | ( 38 | input: RequestInfo, 39 | init: RequestInit | undefined, 40 | options: OptionsWithMetadata, 41 | ): FetchResponseMetadata; 42 | } 43 | 44 | const MOCK_BODY: string = 'mock body'; 45 | 46 | const MOCK_STATUS: number = 420; 47 | 48 | const MOCK_STATUS_TEXT: string = 'mock status text'; 49 | 50 | const TEST_CONTENT_TYPE: string = 'text/plain'; 51 | 52 | const TEST_PATH: string = '/test-path'; 53 | 54 | const MOCK_HEADERS_INIT: HeadersInit = { 55 | 'Content-Type': TEST_CONTENT_TYPE, 56 | }; 57 | 58 | const MOCK_HEADERS: Headers = 59 | new NodeFetchHeaders(MOCK_HEADERS_INIT) as any as Headers; 60 | 61 | const MOCK_RESPONSE: Response = { 62 | arrayBuffer: (): Promise => 63 | Promise.resolve(null as any as ArrayBuffer), 64 | blob: (): Promise => Promise.resolve(null as any as Blob), 65 | body: null, 66 | bodyUsed: true, 67 | clone: (): Response => MOCK_RESPONSE, 68 | formData: (): Promise => Promise.resolve(null as any as FormData), 69 | headers: MOCK_HEADERS, 70 | json: (): Promise => Promise.resolve(null), 71 | ok: true, 72 | redirected: false, 73 | status: MOCK_STATUS, 74 | statusText: MOCK_STATUS_TEXT, 75 | text: (): Promise => Promise.resolve(MOCK_BODY), 76 | trailer: Promise.resolve(MOCK_HEADERS), 77 | type: null as any as ResponseType, 78 | url: '', 79 | }; 80 | 81 | const MOCK_FETCH = (): Promise => Promise.resolve(MOCK_RESPONSE); 82 | 83 | describe('createUseFetch', (): void => { 84 | 85 | it('should be a function with 1 parameter via CommonJS', (): void => { 86 | expect(CommonJS.createUseFetch).to.be.a('function'); 87 | expect(CommonJS.createUseFetch.length).to.equal(1); 88 | }); 89 | 90 | it('should be a function with 1 parameter via ES6', (): void => { 91 | expect(createUseFetch).to.be.a('function'); 92 | expect(createUseFetch.length).to.equal(1); 93 | }); 94 | 95 | describe('return value', (): void => { 96 | it('should be a function with 3 parameters via CommonJS', (): void => { 97 | const useFetch = CommonJS.createUseFetch(MOCK_FETCH); 98 | expect(useFetch).to.be.a('function'); 99 | expect(useFetch.length).to.equal(3); 100 | }); 101 | 102 | it('should be a function with 3 parameters via ES6', (): void => { 103 | const useFetch = createUseFetch(MOCK_FETCH); 104 | expect(useFetch).to.be.a('function'); 105 | expect(useFetch.length).to.equal(3); 106 | }); 107 | 108 | describe('useFetch', (): void => { 109 | 110 | let useFetch: UseFetch; 111 | beforeEach((): void => { 112 | useFetch = createUseFetch(MOCK_FETCH) 113 | }); 114 | 115 | it('should throw a Promise', (): void => { 116 | try { 117 | useFetch(TEST_PATH); 118 | } catch (p) { 119 | expect(p).to.be.instanceOf(Promise); 120 | return; 121 | } 122 | throw new Error('useFetch did not throw.'); 123 | }); 124 | 125 | it('should not throw twice', async (): Promise => { 126 | try { 127 | useFetch(TEST_PATH); 128 | } catch (p) { 129 | await p; 130 | try { 131 | useFetch(TEST_PATH); 132 | return; 133 | } catch (q) { 134 | throw new Error('useFetch threw twice.'); 135 | } 136 | } 137 | throw new Error('useFetch did not throw.'); 138 | }); 139 | 140 | it('should return a Response', async (): Promise => { 141 | try { 142 | useFetch(TEST_PATH); 143 | } catch (p) { 144 | await p; 145 | const response = useFetch(TEST_PATH); 146 | expect(response).to.equal(MOCK_BODY); 147 | return; 148 | } 149 | throw new Error('useFetch did not throw.'); 150 | }); 151 | 152 | it('should return a Response with metadata', async (): Promise => { 153 | try { 154 | useFetch(TEST_PATH, undefined, { metadata: true }); 155 | } catch (p) { 156 | await p; 157 | const { contentType, headers, response, status, statusText } = 158 | useFetch(TEST_PATH, undefined, { metadata: true }); 159 | expect(contentType).to.equal(TEST_CONTENT_TYPE); 160 | expect(headers).to.equal(MOCK_HEADERS); 161 | expect(response).to.equal(MOCK_BODY); 162 | expect(status).to.equal(MOCK_STATUS); 163 | expect(statusText).to.equal(MOCK_STATUS_TEXT); 164 | return; 165 | } 166 | throw new Error('useFetch did not throw.'); 167 | }); 168 | }); 169 | }); 170 | }); 171 | -------------------------------------------------------------------------------- /tests/use-fetch-without-window.test.ts: -------------------------------------------------------------------------------- 1 | // TODO: Difficulty deleting global window object. 2 | 3 | /* 4 | import { expect } from 'chai'; 5 | import useFetch from '../fetch-suspense'; 6 | import CommonJS = require('../fetch-suspense'); 7 | 8 | describe('useFetch without window', (): void => { 9 | it('should reject via CommonJS', async (): Promise => { 10 | try { 11 | CommonJS('test'); // initial fetch 12 | } catch (p) { 13 | try { 14 | await p; // await Suspense 15 | CommonJS('test'); // post-Suspense fetch 16 | } catch (e) { 17 | expect(e).to.be.an.instanceOf(Error); 18 | expect(e.message).to.equal('Cannot find `window`. Use `createUseFetch` to provide a custom `fetch` function.'); 19 | return; 20 | } 21 | throw new Error('useFetch did not reject.'); 22 | } 23 | throw new Error('useFetch did not throw.'); 24 | }); 25 | 26 | it('should reject via ES6', async (): Promise => { 27 | try { 28 | useFetch('test'); // initial fetch 29 | } catch (p) { 30 | try { 31 | await p; // await Suspense 32 | useFetch('test'); // post-Suspense fetch 33 | } catch (e) { 34 | expect(e).to.be.an.instanceOf(Error); 35 | expect(e.message).to.equal('Cannot find `window`. Use `createUseFetch` to provide a custom `fetch` function.'); 36 | return; 37 | } 38 | throw new Error('useFetch did not reject.'); 39 | } 40 | throw new Error('useFetch did not throw.'); 41 | }); 42 | }); 43 | */ 44 | -------------------------------------------------------------------------------- /tests/use-fetch.test.ts: -------------------------------------------------------------------------------- 1 | import { expect } from 'chai'; 2 | import useFetch from '../fetch-suspense'; 3 | import CommonJS = require('../fetch-suspense'); 4 | 5 | describe('useFetch', (): void => { 6 | it('should be a function with 3 parameters via CommonJS', (): void => { 7 | expect(CommonJS).to.be.a('function'); 8 | expect(CommonJS.length).to.equal(3); 9 | }); 10 | 11 | it('should be a function with 3 parameters via ES6', async (): Promise => { 12 | expect(useFetch).to.be.a('function'); 13 | expect(useFetch.length).to.equal(3); 14 | }); 15 | }); 16 | -------------------------------------------------------------------------------- /tests/utils/constants.ts: -------------------------------------------------------------------------------- 1 | export const ERROR_REQUEST: RequestInfo = 'http://'; 2 | 3 | export const JSON_REQUEST: RequestInfo = 'https://json'; 4 | 5 | export const MOCK_ERROR: Error = new Error('Mock Error'); 6 | 7 | export const MOCK_JSON: Object = { 8 | mock: 'json', 9 | }; 10 | 11 | export const MOCK_STRING: string = 'mock string'; 12 | 13 | export const STRING_REQUEST: RequestInfo = 'https://string'; 14 | 15 | export const UNKNOWN_ERROR: Error = 16 | new Error('Test Error. The test should fail.'); 17 | -------------------------------------------------------------------------------- /tests/yse-fetch-without-window-fetch.test.ts: -------------------------------------------------------------------------------- 1 | const windowFetchBak: typeof window.fetch = window.fetch; 2 | delete window.fetch; 3 | 4 | import { expect } from 'chai'; 5 | import useFetch from '../fetch-suspense'; 6 | import CommonJS = require('../fetch-suspense'); 7 | 8 | describe('useFetch without window.fetch', (): void => { 9 | it('should reject via CommonJS', async (): Promise => { 10 | try { 11 | CommonJS('test'); // initial fetch 12 | } catch (p) { 13 | try { 14 | await p; // await Suspesne 15 | CommonJS('test'); // post-Suspense fetch 16 | } catch (e) { 17 | expect(e).to.be.an.instanceOf(Error); 18 | expect(e.message).to.equal('Cannot find `window.fetch`. Use `createUseFetch` to provide a custom `fetch` function.'); 19 | return; 20 | } 21 | throw new Error('useFetch did not reject.'); 22 | } 23 | throw new Error('useFetch did not throw.'); 24 | }); 25 | 26 | it('should reject via ES6', async (): Promise => { 27 | try { 28 | useFetch('test'); // initial fetch 29 | } catch (p) { 30 | try { 31 | await p; // await Suspense 32 | useFetch('test'); // post-Suspense fetch 33 | } catch (e) { 34 | expect(e).to.be.an.instanceOf(Error); 35 | expect(e.message).to.equal('Cannot find `window.fetch`. Use `createUseFetch` to provide a custom `fetch` function.'); 36 | return; 37 | } 38 | throw new Error('useFetch did not reject.'); 39 | } 40 | throw new Error('useFetch did not throw.'); 41 | }); 42 | }); 43 | 44 | window.fetch = windowFetchBak; 45 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "declaration": true, 4 | "downlevelIteration": true, 5 | "lib": [ "dom", "es5", "es2015.promise", "es2017", "scripthost" ], 6 | "module": "commonjs", 7 | "moduleResolution": "Node", 8 | "noFallthroughCasesInSwitch": true, 9 | "noImplicitAny": true, 10 | "noImplicitReturns": true, 11 | "noImplicitThis": true, 12 | "noUnusedLocals": true, 13 | "noUnusedParameters": true, 14 | "outDir": ".", 15 | "removeComments": true, 16 | "strict": true, 17 | "strictNullChecks": true, 18 | "strictPropertyInitialization": true, 19 | "target": "es5" 20 | }, 21 | "files": [ "src/fetch-suspense.ts" ] 22 | } 23 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/code-frame@^7.0.0": 6 | version "7.0.0" 7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" 8 | integrity sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA== 9 | dependencies: 10 | "@babel/highlight" "^7.0.0" 11 | 12 | "@babel/core@^7.4.3": 13 | version "7.4.3" 14 | resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.4.3.tgz#198d6d3af4567be3989550d97e068de94503074f" 15 | integrity sha512-oDpASqKFlbspQfzAE7yaeTmdljSH2ADIvBlb0RwbStltTuWa0+7CCI1fYVINNv9saHPa1W7oaKeuNuKj+RQCvA== 16 | dependencies: 17 | "@babel/code-frame" "^7.0.0" 18 | "@babel/generator" "^7.4.0" 19 | "@babel/helpers" "^7.4.3" 20 | "@babel/parser" "^7.4.3" 21 | "@babel/template" "^7.4.0" 22 | "@babel/traverse" "^7.4.3" 23 | "@babel/types" "^7.4.0" 24 | convert-source-map "^1.1.0" 25 | debug "^4.1.0" 26 | json5 "^2.1.0" 27 | lodash "^4.17.11" 28 | resolve "^1.3.2" 29 | semver "^5.4.1" 30 | source-map "^0.5.0" 31 | 32 | "@babel/generator@^7.4.0": 33 | version "7.4.0" 34 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.4.0.tgz#c230e79589ae7a729fd4631b9ded4dc220418196" 35 | integrity sha512-/v5I+a1jhGSKLgZDcmAUZ4K/VePi43eRkUs3yePW1HB1iANOD5tqJXwGSG4BZhSksP8J9ejSlwGeTiiOFZOrXQ== 36 | dependencies: 37 | "@babel/types" "^7.4.0" 38 | jsesc "^2.5.1" 39 | lodash "^4.17.11" 40 | source-map "^0.5.0" 41 | trim-right "^1.0.1" 42 | 43 | "@babel/helper-function-name@^7.1.0": 44 | version "7.1.0" 45 | resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53" 46 | integrity sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw== 47 | dependencies: 48 | "@babel/helper-get-function-arity" "^7.0.0" 49 | "@babel/template" "^7.1.0" 50 | "@babel/types" "^7.0.0" 51 | 52 | "@babel/helper-get-function-arity@^7.0.0": 53 | version "7.0.0" 54 | resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" 55 | integrity sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ== 56 | dependencies: 57 | "@babel/types" "^7.0.0" 58 | 59 | "@babel/helper-split-export-declaration@^7.4.0": 60 | version "7.4.0" 61 | resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.0.tgz#571bfd52701f492920d63b7f735030e9a3e10b55" 62 | integrity sha512-7Cuc6JZiYShaZnybDmfwhY4UYHzI6rlqhWjaIqbsJGsIqPimEYy5uh3akSRLMg65LSdSEnJ8a8/bWQN6u2oMGw== 63 | dependencies: 64 | "@babel/types" "^7.4.0" 65 | 66 | "@babel/helpers@^7.4.3": 67 | version "7.4.3" 68 | resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.4.3.tgz#7b1d354363494b31cb9a2417ae86af32b7853a3b" 69 | integrity sha512-BMh7X0oZqb36CfyhvtbSmcWc3GXocfxv3yNsAEuM0l+fAqSO22rQrUpijr3oE/10jCTrB6/0b9kzmG4VetCj8Q== 70 | dependencies: 71 | "@babel/template" "^7.4.0" 72 | "@babel/traverse" "^7.4.3" 73 | "@babel/types" "^7.4.0" 74 | 75 | "@babel/highlight@^7.0.0": 76 | version "7.0.0" 77 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" 78 | integrity sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw== 79 | dependencies: 80 | chalk "^2.0.0" 81 | esutils "^2.0.2" 82 | js-tokens "^4.0.0" 83 | 84 | "@babel/parser@^7.4.0", "@babel/parser@^7.4.3": 85 | version "7.4.3" 86 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.4.3.tgz#eb3ac80f64aa101c907d4ce5406360fe75b7895b" 87 | integrity sha512-gxpEUhTS1sGA63EGQGuA+WESPR/6tz6ng7tSHFCmaTJK/cGK8y37cBTspX+U2xCAue2IQVvF6Z0oigmjwD8YGQ== 88 | 89 | "@babel/register@^7.4.0": 90 | version "7.4.4" 91 | resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.4.4.tgz#370a68ba36f08f015a8b35d4864176c6b65d7a23" 92 | integrity sha512-sn51H88GRa00+ZoMqCVgOphmswG4b7mhf9VOB0LUBAieykq2GnRFerlN+JQkO/ntT7wz4jaHNSRPg9IdMPEUkA== 93 | dependencies: 94 | core-js "^3.0.0" 95 | find-cache-dir "^2.0.0" 96 | lodash "^4.17.11" 97 | mkdirp "^0.5.1" 98 | pirates "^4.0.0" 99 | source-map-support "^0.5.9" 100 | 101 | "@babel/template@^7.1.0", "@babel/template@^7.4.0": 102 | version "7.4.0" 103 | resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.4.0.tgz#12474e9c077bae585c5d835a95c0b0b790c25c8b" 104 | integrity sha512-SOWwxxClTTh5NdbbYZ0BmaBVzxzTh2tO/TeLTbF6MO6EzVhHTnff8CdBXx3mEtazFBoysmEM6GU/wF+SuSx4Fw== 105 | dependencies: 106 | "@babel/code-frame" "^7.0.0" 107 | "@babel/parser" "^7.4.0" 108 | "@babel/types" "^7.4.0" 109 | 110 | "@babel/traverse@^7.4.3": 111 | version "7.4.3" 112 | resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.4.3.tgz#1a01f078fc575d589ff30c0f71bf3c3d9ccbad84" 113 | integrity sha512-HmA01qrtaCwwJWpSKpA948cBvU5BrmviAief/b3AVw936DtcdsTexlbyzNuDnthwhOQ37xshn7hvQaEQk7ISYQ== 114 | dependencies: 115 | "@babel/code-frame" "^7.0.0" 116 | "@babel/generator" "^7.4.0" 117 | "@babel/helper-function-name" "^7.1.0" 118 | "@babel/helper-split-export-declaration" "^7.4.0" 119 | "@babel/parser" "^7.4.3" 120 | "@babel/types" "^7.4.0" 121 | debug "^4.1.0" 122 | globals "^11.1.0" 123 | lodash "^4.17.11" 124 | 125 | "@babel/types@^7.0.0", "@babel/types@^7.4.0": 126 | version "7.4.0" 127 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.4.0.tgz#670724f77d24cce6cc7d8cf64599d511d164894c" 128 | integrity sha512-aPvkXyU2SPOnztlgo8n9cEiXW755mgyvueUPcpStqdzoSPm0fjO0vQBjLkt3JKJW7ufikfcnMTTPsN1xaTsBPA== 129 | dependencies: 130 | esutils "^2.0.2" 131 | lodash "^4.17.11" 132 | to-fast-properties "^2.0.0" 133 | 134 | "@sinonjs/commons@^1", "@sinonjs/commons@^1.0.2", "@sinonjs/commons@^1.4.0": 135 | version "1.4.0" 136 | resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.4.0.tgz#7b3ec2d96af481d7a0321252e7b1c94724ec5a78" 137 | integrity sha512-9jHK3YF/8HtJ9wCAbG+j8cD0i0+ATS9A7gXFqS36TblLPNy6rEEc+SB0imo91eCboGaBYGV/MT1/br/J+EE7Tw== 138 | dependencies: 139 | type-detect "4.0.8" 140 | 141 | "@sinonjs/formatio@^3.1.0", "@sinonjs/formatio@^3.2.1": 142 | version "3.2.1" 143 | resolved "https://registry.yarnpkg.com/@sinonjs/formatio/-/formatio-3.2.1.tgz#52310f2f9bcbc67bdac18c94ad4901b95fde267e" 144 | integrity sha512-tsHvOB24rvyvV2+zKMmPkZ7dXX6LSLKZ7aOtXY6Edklp0uRcgGpOsQTTGTcWViFyx4uhWc6GV8QdnALbIbIdeQ== 145 | dependencies: 146 | "@sinonjs/commons" "^1" 147 | "@sinonjs/samsam" "^3.1.0" 148 | 149 | "@sinonjs/samsam@^3.1.0", "@sinonjs/samsam@^3.3.1": 150 | version "3.3.1" 151 | resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-3.3.1.tgz#e88c53fbd9d91ad9f0f2b0140c16c7c107fe0d07" 152 | integrity sha512-wRSfmyd81swH0hA1bxJZJ57xr22kC07a1N4zuIL47yTS04bDk6AoCkczcqHEjcRPmJ+FruGJ9WBQiJwMtIElFw== 153 | dependencies: 154 | "@sinonjs/commons" "^1.0.2" 155 | array-from "^2.1.1" 156 | lodash "^4.17.11" 157 | 158 | "@sinonjs/text-encoding@^0.7.1": 159 | version "0.7.1" 160 | resolved "https://registry.yarnpkg.com/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz#8da5c6530915653f3a1f38fd5f101d8c3f8079c5" 161 | integrity sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ== 162 | 163 | "@types/chai@^4.1.7": 164 | version "4.1.7" 165 | resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.1.7.tgz#1b8e33b61a8c09cbe1f85133071baa0dbf9fa71a" 166 | integrity sha512-2Y8uPt0/jwjhQ6EiluT0XCri1Dbplr0ZxfFXUz+ye13gaqE8u5gL5ppao1JrUYr9cIip5S6MvQzBS7Kke7U9VA== 167 | 168 | "@types/deep-equal@^1.0.1": 169 | version "1.0.1" 170 | resolved "https://registry.yarnpkg.com/@types/deep-equal/-/deep-equal-1.0.1.tgz#71cfabb247c22bcc16d536111f50c0ed12476b03" 171 | 172 | "@types/mocha@^5.2.6": 173 | version "5.2.7" 174 | resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-5.2.7.tgz#315d570ccb56c53452ff8638738df60726d5b6ea" 175 | integrity sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ== 176 | 177 | "@types/node-fetch@^2.5.0": 178 | version "2.5.0" 179 | resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.0.tgz#1c55616a4591bdd15a389fbd0da4a55b9502add5" 180 | integrity sha512-TLFRywthBgL68auWj+ziWu+vnmmcHCDFC/sqCOQf1xTz4hRq8cu79z8CtHU9lncExGBsB8fXA4TiLDLt6xvMzw== 181 | dependencies: 182 | "@types/node" "*" 183 | 184 | "@types/node@*": 185 | version "12.6.8" 186 | resolved "https://registry.yarnpkg.com/@types/node/-/node-12.6.8.tgz#e469b4bf9d1c9832aee4907ba8a051494357c12c" 187 | integrity sha512-aX+gFgA5GHcDi89KG5keey2zf0WfZk/HAQotEamsK2kbey+8yGKcson0hbK8E+v0NArlCJQCqMP161YhV6ZXLg== 188 | 189 | "@types/node@^12.6.2": 190 | version "12.6.2" 191 | resolved "https://registry.yarnpkg.com/@types/node/-/node-12.6.2.tgz#a5ccec6abb6060d5f20d256fb03ed743e9774999" 192 | integrity sha512-gojym4tX0FWeV2gsW4Xmzo5wxGjXGm550oVUII7f7G5o4BV6c7DBdiG1RRQd+y1bvqRyYtPfMK85UM95vsapqQ== 193 | 194 | "@types/sinon@^7.0.11": 195 | version "7.0.13" 196 | resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-7.0.13.tgz#ca039c23a9e27ebea53e0901ef928ea2a1a6d313" 197 | integrity sha512-d7c/C/+H/knZ3L8/cxhicHUiTDxdgap0b/aNJfsmLwFu/iOP17mdgbQsbHA3SJmrzsjD0l3UEE5SN4xxuz5ung== 198 | 199 | abab@^2.0.0: 200 | version "2.0.0" 201 | resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.0.tgz#aba0ab4c5eee2d4c79d3487d85450fb2376ebb0f" 202 | integrity sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w== 203 | 204 | acorn-globals@^4.3.0: 205 | version "4.3.0" 206 | resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.0.tgz#e3b6f8da3c1552a95ae627571f7dd6923bb54103" 207 | integrity sha512-hMtHj3s5RnuhvHPowpBYvJVj3rAar82JiDQHvGs1zO0l10ocX/xEdBShNHTJaboucJUsScghp74pH3s7EnHHQw== 208 | dependencies: 209 | acorn "^6.0.1" 210 | acorn-walk "^6.0.1" 211 | 212 | acorn-walk@^6.0.1: 213 | version "6.1.1" 214 | resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.1.1.tgz#d363b66f5fac5f018ff9c3a1e7b6f8e310cc3913" 215 | integrity sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw== 216 | 217 | acorn@^6.0.1, acorn@^6.0.4: 218 | version "6.4.1" 219 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" 220 | integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== 221 | 222 | ajv@^6.5.5: 223 | version "6.10.0" 224 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1" 225 | integrity sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg== 226 | dependencies: 227 | fast-deep-equal "^2.0.1" 228 | fast-json-stable-stringify "^2.0.0" 229 | json-schema-traverse "^0.4.1" 230 | uri-js "^4.2.2" 231 | 232 | ansi-colors@3.2.3: 233 | version "3.2.3" 234 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" 235 | integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw== 236 | 237 | ansi-regex@^2.0.0: 238 | version "2.1.1" 239 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 240 | integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= 241 | 242 | ansi-regex@^3.0.0: 243 | version "3.0.0" 244 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 245 | integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= 246 | 247 | ansi-regex@^4.1.0: 248 | version "4.1.0" 249 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" 250 | integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== 251 | 252 | ansi-styles@^3.2.1: 253 | version "3.2.1" 254 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 255 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 256 | dependencies: 257 | color-convert "^1.9.0" 258 | 259 | arg@^4.1.0: 260 | version "4.1.0" 261 | resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.0.tgz#583c518199419e0037abb74062c37f8519e575f0" 262 | integrity sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg== 263 | 264 | argparse@^1.0.7: 265 | version "1.0.10" 266 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 267 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 268 | dependencies: 269 | sprintf-js "~1.0.2" 270 | 271 | array-equal@^1.0.0: 272 | version "1.0.0" 273 | resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" 274 | integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= 275 | 276 | array-from@^2.1.1: 277 | version "2.1.1" 278 | resolved "https://registry.yarnpkg.com/array-from/-/array-from-2.1.1.tgz#cfe9d8c26628b9dc5aecc62a9f5d8f1f352c1195" 279 | integrity sha1-z+nYwmYoudxa7MYqn12PHzUsEZU= 280 | 281 | asn1@~0.2.3: 282 | version "0.2.4" 283 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" 284 | integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== 285 | dependencies: 286 | safer-buffer "~2.1.0" 287 | 288 | assert-plus@1.0.0, assert-plus@^1.0.0: 289 | version "1.0.0" 290 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" 291 | integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= 292 | 293 | assertion-error@^1.1.0: 294 | version "1.1.0" 295 | resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" 296 | integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== 297 | 298 | async-limiter@~1.0.0: 299 | version "1.0.1" 300 | resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" 301 | integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== 302 | 303 | asynckit@^0.4.0: 304 | version "0.4.0" 305 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 306 | integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= 307 | 308 | aws-sign2@~0.7.0: 309 | version "0.7.0" 310 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" 311 | integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= 312 | 313 | aws4@^1.8.0: 314 | version "1.8.0" 315 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" 316 | integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== 317 | 318 | balanced-match@^1.0.0: 319 | version "1.0.0" 320 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 321 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 322 | 323 | bcrypt-pbkdf@^1.0.0: 324 | version "1.0.2" 325 | resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" 326 | integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= 327 | dependencies: 328 | tweetnacl "^0.14.3" 329 | 330 | brace-expansion@^1.1.7: 331 | version "1.1.11" 332 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 333 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 334 | dependencies: 335 | balanced-match "^1.0.0" 336 | concat-map "0.0.1" 337 | 338 | browser-process-hrtime@^0.1.2: 339 | version "0.1.3" 340 | resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz#616f00faef1df7ec1b5bf9cfe2bdc3170f26c7b4" 341 | integrity sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw== 342 | 343 | browser-stdout@1.3.1: 344 | version "1.3.1" 345 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" 346 | integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== 347 | 348 | buffer-from@^1.0.0: 349 | version "1.1.1" 350 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" 351 | integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== 352 | 353 | camelcase@^5.0.0: 354 | version "5.3.1" 355 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" 356 | integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== 357 | 358 | caseless@~0.12.0: 359 | version "0.12.0" 360 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" 361 | integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= 362 | 363 | chai@^4.2.0: 364 | version "4.2.0" 365 | resolved "https://registry.yarnpkg.com/chai/-/chai-4.2.0.tgz#760aa72cf20e3795e84b12877ce0e83737aa29e5" 366 | integrity sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw== 367 | dependencies: 368 | assertion-error "^1.1.0" 369 | check-error "^1.0.2" 370 | deep-eql "^3.0.1" 371 | get-func-name "^2.0.0" 372 | pathval "^1.1.0" 373 | type-detect "^4.0.5" 374 | 375 | chalk@^2.0.0, chalk@^2.0.1: 376 | version "2.4.2" 377 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 378 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 379 | dependencies: 380 | ansi-styles "^3.2.1" 381 | escape-string-regexp "^1.0.5" 382 | supports-color "^5.3.0" 383 | 384 | check-error@^1.0.2: 385 | version "1.0.2" 386 | resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" 387 | integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= 388 | 389 | cliui@^4.0.0: 390 | version "4.1.0" 391 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" 392 | integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== 393 | dependencies: 394 | string-width "^2.1.1" 395 | strip-ansi "^4.0.0" 396 | wrap-ansi "^2.0.0" 397 | 398 | code-point-at@^1.0.0: 399 | version "1.1.0" 400 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 401 | integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= 402 | 403 | color-convert@^1.9.0: 404 | version "1.9.3" 405 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 406 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 407 | dependencies: 408 | color-name "1.1.3" 409 | 410 | color-name@1.1.3: 411 | version "1.1.3" 412 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 413 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 414 | 415 | combined-stream@^1.0.6, combined-stream@~1.0.6: 416 | version "1.0.7" 417 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828" 418 | integrity sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w== 419 | dependencies: 420 | delayed-stream "~1.0.0" 421 | 422 | commondir@^1.0.1: 423 | version "1.0.1" 424 | resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" 425 | integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= 426 | 427 | concat-map@0.0.1: 428 | version "0.0.1" 429 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 430 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 431 | 432 | convert-source-map@^1.1.0: 433 | version "1.6.0" 434 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" 435 | integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A== 436 | dependencies: 437 | safe-buffer "~5.1.1" 438 | 439 | core-js@^3.0.0: 440 | version "3.0.1" 441 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.0.1.tgz#1343182634298f7f38622f95e73f54e48ddf4738" 442 | integrity sha512-sco40rF+2KlE0ROMvydjkrVMMG1vYilP2ALoRXcYR4obqbYIuV3Bg+51GEDW+HF8n7NRA+iaA4qD0nD9lo9mew== 443 | 444 | core-util-is@1.0.2: 445 | version "1.0.2" 446 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 447 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= 448 | 449 | cross-spawn@^6.0.0: 450 | version "6.0.5" 451 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" 452 | integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== 453 | dependencies: 454 | nice-try "^1.0.4" 455 | path-key "^2.0.1" 456 | semver "^5.5.0" 457 | shebang-command "^1.2.0" 458 | which "^1.2.9" 459 | 460 | cssom@0.3.x, cssom@^0.3.4: 461 | version "0.3.6" 462 | resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.6.tgz#f85206cee04efa841f3c5982a74ba96ab20d65ad" 463 | integrity sha512-DtUeseGk9/GBW0hl0vVPpU22iHL6YB5BUX7ml1hB+GMpo0NX5G4voX3kdWiMSEguFtcW3Vh3djqNF4aIe6ne0A== 464 | 465 | cssstyle@^1.1.1: 466 | version "1.2.2" 467 | resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.2.2.tgz#427ea4d585b18624f6fdbf9de7a2a1a3ba713077" 468 | integrity sha512-43wY3kl1CVQSvL7wUY1qXkxVGkStjpkDmVjiIKX8R97uhajy8Bybay78uOtqvh7Q5GK75dNPfW0geWjE6qQQow== 469 | dependencies: 470 | cssom "0.3.x" 471 | 472 | dashdash@^1.12.0: 473 | version "1.14.1" 474 | resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" 475 | integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= 476 | dependencies: 477 | assert-plus "^1.0.0" 478 | 479 | data-urls@^1.1.0: 480 | version "1.1.0" 481 | resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" 482 | integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ== 483 | dependencies: 484 | abab "^2.0.0" 485 | whatwg-mimetype "^2.2.0" 486 | whatwg-url "^7.0.0" 487 | 488 | debug@3.2.6: 489 | version "3.2.6" 490 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" 491 | integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== 492 | dependencies: 493 | ms "^2.1.1" 494 | 495 | debug@^4.1.0: 496 | version "4.1.1" 497 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" 498 | integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== 499 | dependencies: 500 | ms "^2.1.1" 501 | 502 | decamelize@^1.2.0: 503 | version "1.2.0" 504 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 505 | integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= 506 | 507 | deep-eql@^3.0.1: 508 | version "3.0.1" 509 | resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" 510 | integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== 511 | dependencies: 512 | type-detect "^4.0.0" 513 | 514 | deep-equal@^1.0.1: 515 | version "1.0.1" 516 | resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" 517 | 518 | deep-is@~0.1.3: 519 | version "0.1.3" 520 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" 521 | integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= 522 | 523 | define-properties@^1.1.2: 524 | version "1.1.3" 525 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" 526 | integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== 527 | dependencies: 528 | object-keys "^1.0.12" 529 | 530 | delayed-stream@~1.0.0: 531 | version "1.0.0" 532 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 533 | integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= 534 | 535 | diff@3.5.0, diff@^3.1.0, diff@^3.5.0: 536 | version "3.5.0" 537 | resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" 538 | integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== 539 | 540 | domexception@^1.0.1: 541 | version "1.0.1" 542 | resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" 543 | integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug== 544 | dependencies: 545 | webidl-conversions "^4.0.2" 546 | 547 | ecc-jsbn@~0.1.1: 548 | version "0.1.2" 549 | resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" 550 | integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= 551 | dependencies: 552 | jsbn "~0.1.0" 553 | safer-buffer "^2.1.0" 554 | 555 | emoji-regex@^7.0.1: 556 | version "7.0.3" 557 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" 558 | integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== 559 | 560 | end-of-stream@^1.1.0: 561 | version "1.4.1" 562 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" 563 | integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== 564 | dependencies: 565 | once "^1.4.0" 566 | 567 | es-abstract@^1.5.1: 568 | version "1.13.0" 569 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" 570 | integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg== 571 | dependencies: 572 | es-to-primitive "^1.2.0" 573 | function-bind "^1.1.1" 574 | has "^1.0.3" 575 | is-callable "^1.1.4" 576 | is-regex "^1.0.4" 577 | object-keys "^1.0.12" 578 | 579 | es-to-primitive@^1.2.0: 580 | version "1.2.0" 581 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" 582 | integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== 583 | dependencies: 584 | is-callable "^1.1.4" 585 | is-date-object "^1.0.1" 586 | is-symbol "^1.0.2" 587 | 588 | escape-string-regexp@1.0.5, escape-string-regexp@^1.0.5: 589 | version "1.0.5" 590 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 591 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 592 | 593 | escodegen@^1.11.0: 594 | version "1.11.1" 595 | resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.1.tgz#c485ff8d6b4cdb89e27f4a856e91f118401ca510" 596 | integrity sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw== 597 | dependencies: 598 | esprima "^3.1.3" 599 | estraverse "^4.2.0" 600 | esutils "^2.0.2" 601 | optionator "^0.8.1" 602 | optionalDependencies: 603 | source-map "~0.6.1" 604 | 605 | esprima@^3.1.3: 606 | version "3.1.3" 607 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" 608 | integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= 609 | 610 | esprima@^4.0.0: 611 | version "4.0.1" 612 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 613 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 614 | 615 | estraverse@^4.2.0: 616 | version "4.2.0" 617 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" 618 | integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= 619 | 620 | esutils@^2.0.2: 621 | version "2.0.2" 622 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" 623 | integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= 624 | 625 | execa@^1.0.0: 626 | version "1.0.0" 627 | resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" 628 | integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== 629 | dependencies: 630 | cross-spawn "^6.0.0" 631 | get-stream "^4.0.0" 632 | is-stream "^1.1.0" 633 | npm-run-path "^2.0.0" 634 | p-finally "^1.0.0" 635 | signal-exit "^3.0.0" 636 | strip-eof "^1.0.0" 637 | 638 | extend@~3.0.2: 639 | version "3.0.2" 640 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" 641 | integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== 642 | 643 | extsprintf@1.3.0: 644 | version "1.3.0" 645 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" 646 | integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= 647 | 648 | extsprintf@^1.2.0: 649 | version "1.4.0" 650 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" 651 | integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= 652 | 653 | fast-deep-equal@^2.0.1: 654 | version "2.0.1" 655 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" 656 | integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= 657 | 658 | fast-json-stable-stringify@^2.0.0: 659 | version "2.0.0" 660 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" 661 | integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= 662 | 663 | fast-levenshtein@~2.0.4: 664 | version "2.0.6" 665 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 666 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= 667 | 668 | find-cache-dir@^2.0.0: 669 | version "2.1.0" 670 | resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" 671 | integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== 672 | dependencies: 673 | commondir "^1.0.1" 674 | make-dir "^2.0.0" 675 | pkg-dir "^3.0.0" 676 | 677 | find-up@3.0.0, find-up@^3.0.0: 678 | version "3.0.0" 679 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" 680 | integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== 681 | dependencies: 682 | locate-path "^3.0.0" 683 | 684 | flat@^4.1.0: 685 | version "4.1.0" 686 | resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.0.tgz#090bec8b05e39cba309747f1d588f04dbaf98db2" 687 | integrity sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw== 688 | dependencies: 689 | is-buffer "~2.0.3" 690 | 691 | forever-agent@~0.6.1: 692 | version "0.6.1" 693 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" 694 | integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= 695 | 696 | form-data@~2.3.2: 697 | version "2.3.3" 698 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" 699 | integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== 700 | dependencies: 701 | asynckit "^0.4.0" 702 | combined-stream "^1.0.6" 703 | mime-types "^2.1.12" 704 | 705 | fs.realpath@^1.0.0: 706 | version "1.0.0" 707 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 708 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 709 | 710 | function-bind@^1.1.1: 711 | version "1.1.1" 712 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 713 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 714 | 715 | get-caller-file@^1.0.1: 716 | version "1.0.3" 717 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" 718 | integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== 719 | 720 | get-caller-file@^2.0.1: 721 | version "2.0.5" 722 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 723 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 724 | 725 | get-func-name@^2.0.0: 726 | version "2.0.0" 727 | resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" 728 | integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE= 729 | 730 | get-stream@^4.0.0: 731 | version "4.1.0" 732 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" 733 | integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== 734 | dependencies: 735 | pump "^3.0.0" 736 | 737 | getpass@^0.1.1: 738 | version "0.1.7" 739 | resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" 740 | integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= 741 | dependencies: 742 | assert-plus "^1.0.0" 743 | 744 | glob@7.1.3: 745 | version "7.1.3" 746 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" 747 | integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== 748 | dependencies: 749 | fs.realpath "^1.0.0" 750 | inflight "^1.0.4" 751 | inherits "2" 752 | minimatch "^3.0.4" 753 | once "^1.3.0" 754 | path-is-absolute "^1.0.0" 755 | 756 | globals@^11.1.0: 757 | version "11.11.0" 758 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.11.0.tgz#dcf93757fa2de5486fbeed7118538adf789e9c2e" 759 | integrity sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw== 760 | 761 | growl@1.10.5: 762 | version "1.10.5" 763 | resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" 764 | integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== 765 | 766 | har-schema@^2.0.0: 767 | version "2.0.0" 768 | resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" 769 | integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= 770 | 771 | har-validator@~5.1.0: 772 | version "5.1.3" 773 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" 774 | integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== 775 | dependencies: 776 | ajv "^6.5.5" 777 | har-schema "^2.0.0" 778 | 779 | has-flag@^3.0.0: 780 | version "3.0.0" 781 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 782 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 783 | 784 | has-symbols@^1.0.0: 785 | version "1.0.0" 786 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" 787 | integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= 788 | 789 | has@^1.0.1, has@^1.0.3: 790 | version "1.0.3" 791 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 792 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 793 | dependencies: 794 | function-bind "^1.1.1" 795 | 796 | he@1.2.0: 797 | version "1.2.0" 798 | resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" 799 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== 800 | 801 | html-encoding-sniffer@^1.0.2: 802 | version "1.0.2" 803 | resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" 804 | integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw== 805 | dependencies: 806 | whatwg-encoding "^1.0.1" 807 | 808 | http-signature@~1.2.0: 809 | version "1.2.0" 810 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" 811 | integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= 812 | dependencies: 813 | assert-plus "^1.0.0" 814 | jsprim "^1.2.2" 815 | sshpk "^1.7.0" 816 | 817 | iconv-lite@0.4.24: 818 | version "0.4.24" 819 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 820 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 821 | dependencies: 822 | safer-buffer ">= 2.1.2 < 3" 823 | 824 | inflight@^1.0.4: 825 | version "1.0.6" 826 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 827 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 828 | dependencies: 829 | once "^1.3.0" 830 | wrappy "1" 831 | 832 | inherits@2: 833 | version "2.0.3" 834 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 835 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= 836 | 837 | invert-kv@^2.0.0: 838 | version "2.0.0" 839 | resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" 840 | integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== 841 | 842 | is-buffer@~2.0.3: 843 | version "2.0.3" 844 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.3.tgz#4ecf3fcf749cbd1e472689e109ac66261a25e725" 845 | integrity sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw== 846 | 847 | is-callable@^1.1.4: 848 | version "1.1.4" 849 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" 850 | integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== 851 | 852 | is-date-object@^1.0.1: 853 | version "1.0.1" 854 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" 855 | integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= 856 | 857 | is-fullwidth-code-point@^1.0.0: 858 | version "1.0.0" 859 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 860 | integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= 861 | dependencies: 862 | number-is-nan "^1.0.0" 863 | 864 | is-fullwidth-code-point@^2.0.0: 865 | version "2.0.0" 866 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 867 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= 868 | 869 | is-regex@^1.0.4: 870 | version "1.0.4" 871 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" 872 | integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= 873 | dependencies: 874 | has "^1.0.1" 875 | 876 | is-stream@^1.1.0: 877 | version "1.1.0" 878 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 879 | integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= 880 | 881 | is-symbol@^1.0.2: 882 | version "1.0.2" 883 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" 884 | integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw== 885 | dependencies: 886 | has-symbols "^1.0.0" 887 | 888 | is-typedarray@~1.0.0: 889 | version "1.0.0" 890 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 891 | integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= 892 | 893 | isarray@0.0.1: 894 | version "0.0.1" 895 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" 896 | integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= 897 | 898 | isexe@^2.0.0: 899 | version "2.0.0" 900 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 901 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 902 | 903 | isstream@~0.1.2: 904 | version "0.1.2" 905 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" 906 | integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= 907 | 908 | js-tokens@^4.0.0: 909 | version "4.0.0" 910 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 911 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 912 | 913 | js-yaml@3.13.1: 914 | version "3.13.1" 915 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" 916 | integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== 917 | dependencies: 918 | argparse "^1.0.7" 919 | esprima "^4.0.0" 920 | 921 | jsbn@~0.1.0: 922 | version "0.1.1" 923 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" 924 | integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= 925 | 926 | jsdom-global@^3.0.2: 927 | version "3.0.2" 928 | resolved "https://registry.yarnpkg.com/jsdom-global/-/jsdom-global-3.0.2.tgz#6bd299c13b0c4626b2da2c0393cd4385d606acb9" 929 | integrity sha1-a9KZwTsMRiay2iwDk81DhdYGrLk= 930 | 931 | jsdom@^14.0.0: 932 | version "14.0.0" 933 | resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-14.0.0.tgz#c7f1441ebcc57902d08d5fb2f6ba2baf746da7c6" 934 | integrity sha512-/VkyPmdtbwqpJSkwDx3YyJ3U1oawYNB/h5z8vTUZGAzjtu2OHTeFRfnJqyMHsJ5Cyes23trOmvUpM1GfHH1leA== 935 | dependencies: 936 | abab "^2.0.0" 937 | acorn "^6.0.4" 938 | acorn-globals "^4.3.0" 939 | array-equal "^1.0.0" 940 | cssom "^0.3.4" 941 | cssstyle "^1.1.1" 942 | data-urls "^1.1.0" 943 | domexception "^1.0.1" 944 | escodegen "^1.11.0" 945 | html-encoding-sniffer "^1.0.2" 946 | nwsapi "^2.0.9" 947 | parse5 "5.1.0" 948 | pn "^1.1.0" 949 | request "^2.88.0" 950 | request-promise-native "^1.0.5" 951 | saxes "^3.1.5" 952 | symbol-tree "^3.2.2" 953 | tough-cookie "^2.5.0" 954 | w3c-hr-time "^1.0.1" 955 | w3c-xmlserializer "^1.0.1" 956 | webidl-conversions "^4.0.2" 957 | whatwg-encoding "^1.0.5" 958 | whatwg-mimetype "^2.3.0" 959 | whatwg-url "^7.0.0" 960 | ws "^6.1.2" 961 | xml-name-validator "^3.0.0" 962 | 963 | jsesc@^2.5.1: 964 | version "2.5.2" 965 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" 966 | integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== 967 | 968 | json-schema-traverse@^0.4.1: 969 | version "0.4.1" 970 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 971 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 972 | 973 | json-schema@0.2.3: 974 | version "0.2.3" 975 | resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" 976 | integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= 977 | 978 | json-stringify-safe@~5.0.1: 979 | version "5.0.1" 980 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 981 | integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= 982 | 983 | json5@^2.1.0: 984 | version "2.1.0" 985 | resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.0.tgz#e7a0c62c48285c628d20a10b85c89bb807c32850" 986 | integrity sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ== 987 | dependencies: 988 | minimist "^1.2.0" 989 | 990 | jsprim@^1.2.2: 991 | version "1.4.1" 992 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" 993 | integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= 994 | dependencies: 995 | assert-plus "1.0.0" 996 | extsprintf "1.3.0" 997 | json-schema "0.2.3" 998 | verror "1.10.0" 999 | 1000 | just-extend@^4.0.2: 1001 | version "4.0.2" 1002 | resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-4.0.2.tgz#f3f47f7dfca0f989c55410a7ebc8854b07108afc" 1003 | integrity sha512-FrLwOgm+iXrPV+5zDU6Jqu4gCRXbWEQg2O3SKONsWE4w7AXFRkryS53bpWdaL9cNol+AmR3AEYz6kn+o0fCPnw== 1004 | 1005 | lcid@^2.0.0: 1006 | version "2.0.0" 1007 | resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" 1008 | integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== 1009 | dependencies: 1010 | invert-kv "^2.0.0" 1011 | 1012 | levn@~0.3.0: 1013 | version "0.3.0" 1014 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" 1015 | integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= 1016 | dependencies: 1017 | prelude-ls "~1.1.2" 1018 | type-check "~0.3.2" 1019 | 1020 | locate-path@^3.0.0: 1021 | version "3.0.0" 1022 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" 1023 | integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== 1024 | dependencies: 1025 | p-locate "^3.0.0" 1026 | path-exists "^3.0.0" 1027 | 1028 | lodash.sortby@^4.7.0: 1029 | version "4.7.0" 1030 | resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" 1031 | integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= 1032 | 1033 | lodash@^4.17.11: 1034 | version "4.17.21" 1035 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 1036 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 1037 | 1038 | log-symbols@2.2.0: 1039 | version "2.2.0" 1040 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" 1041 | integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== 1042 | dependencies: 1043 | chalk "^2.0.1" 1044 | 1045 | lolex@^2.3.2: 1046 | version "2.7.5" 1047 | resolved "https://registry.yarnpkg.com/lolex/-/lolex-2.7.5.tgz#113001d56bfc7e02d56e36291cc5c413d1aa0733" 1048 | integrity sha512-l9x0+1offnKKIzYVjyXU2SiwhXDLekRzKyhnbyldPHvC7BvLPVpdNUNR2KeMAiCN2D/kLNttZgQD5WjSxuBx3Q== 1049 | 1050 | lolex@^3.1.0: 1051 | version "3.1.0" 1052 | resolved "https://registry.yarnpkg.com/lolex/-/lolex-3.1.0.tgz#1a7feb2fefd75b3e3a7f79f0e110d9476e294434" 1053 | integrity sha512-zFo5MgCJ0rZ7gQg69S4pqBsLURbFw11X68C18OcJjJQbqaXm2NoTrGl1IMM3TIz0/BnN1tIs2tzmmqvCsOMMjw== 1054 | 1055 | make-dir@^2.0.0: 1056 | version "2.1.0" 1057 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" 1058 | integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== 1059 | dependencies: 1060 | pify "^4.0.1" 1061 | semver "^5.6.0" 1062 | 1063 | make-error@^1.1.1: 1064 | version "1.3.5" 1065 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8" 1066 | integrity sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g== 1067 | 1068 | map-age-cleaner@^0.1.1: 1069 | version "0.1.3" 1070 | resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" 1071 | integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== 1072 | dependencies: 1073 | p-defer "^1.0.0" 1074 | 1075 | mem@^4.0.0: 1076 | version "4.3.0" 1077 | resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" 1078 | integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== 1079 | dependencies: 1080 | map-age-cleaner "^0.1.1" 1081 | mimic-fn "^2.0.0" 1082 | p-is-promise "^2.0.0" 1083 | 1084 | mime-db@~1.38.0: 1085 | version "1.38.0" 1086 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.38.0.tgz#1a2aab16da9eb167b49c6e4df2d9c68d63d8e2ad" 1087 | integrity sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg== 1088 | 1089 | mime-types@^2.1.12, mime-types@~2.1.19: 1090 | version "2.1.22" 1091 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.22.tgz#fe6b355a190926ab7698c9a0556a11199b2199bd" 1092 | integrity sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog== 1093 | dependencies: 1094 | mime-db "~1.38.0" 1095 | 1096 | mimic-fn@^2.0.0: 1097 | version "2.1.0" 1098 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" 1099 | integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== 1100 | 1101 | minimatch@3.0.4, minimatch@^3.0.4: 1102 | version "3.0.4" 1103 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 1104 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 1105 | dependencies: 1106 | brace-expansion "^1.1.7" 1107 | 1108 | minimist@0.0.8: 1109 | version "0.0.8" 1110 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 1111 | integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= 1112 | 1113 | minimist@^1.2.0: 1114 | version "1.2.0" 1115 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 1116 | integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= 1117 | 1118 | mkdirp@0.5.1, mkdirp@^0.5.1: 1119 | version "0.5.1" 1120 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 1121 | integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= 1122 | dependencies: 1123 | minimist "0.0.8" 1124 | 1125 | mocha@^6.1.3: 1126 | version "6.1.4" 1127 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-6.1.4.tgz#e35fada242d5434a7e163d555c705f6875951640" 1128 | integrity sha512-PN8CIy4RXsIoxoFJzS4QNnCH4psUCPWc4/rPrst/ecSJJbLBkubMiyGCP2Kj/9YnWbotFqAoeXyXMucj7gwCFg== 1129 | dependencies: 1130 | ansi-colors "3.2.3" 1131 | browser-stdout "1.3.1" 1132 | debug "3.2.6" 1133 | diff "3.5.0" 1134 | escape-string-regexp "1.0.5" 1135 | find-up "3.0.0" 1136 | glob "7.1.3" 1137 | growl "1.10.5" 1138 | he "1.2.0" 1139 | js-yaml "3.13.1" 1140 | log-symbols "2.2.0" 1141 | minimatch "3.0.4" 1142 | mkdirp "0.5.1" 1143 | ms "2.1.1" 1144 | node-environment-flags "1.0.5" 1145 | object.assign "4.1.0" 1146 | strip-json-comments "2.0.1" 1147 | supports-color "6.0.0" 1148 | which "1.3.1" 1149 | wide-align "1.1.3" 1150 | yargs "13.2.2" 1151 | yargs-parser "13.0.0" 1152 | yargs-unparser "1.5.0" 1153 | 1154 | ms@2.1.1, ms@^2.1.1: 1155 | version "2.1.1" 1156 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" 1157 | integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== 1158 | 1159 | nice-try@^1.0.4: 1160 | version "1.0.5" 1161 | resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" 1162 | integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== 1163 | 1164 | nise@^1.4.10: 1165 | version "1.4.10" 1166 | resolved "https://registry.yarnpkg.com/nise/-/nise-1.4.10.tgz#ae46a09a26436fae91a38a60919356ae6db143b6" 1167 | integrity sha512-sa0RRbj53dovjc7wombHmVli9ZihXbXCQ2uH3TNm03DyvOSIQbxg+pbqDKrk2oxMK1rtLGVlKxcB9rrc6X5YjA== 1168 | dependencies: 1169 | "@sinonjs/formatio" "^3.1.0" 1170 | "@sinonjs/text-encoding" "^0.7.1" 1171 | just-extend "^4.0.2" 1172 | lolex "^2.3.2" 1173 | path-to-regexp "^1.7.0" 1174 | 1175 | node-environment-flags@1.0.5: 1176 | version "1.0.5" 1177 | resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.5.tgz#fa930275f5bf5dae188d6192b24b4c8bbac3d76a" 1178 | integrity sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ== 1179 | dependencies: 1180 | object.getownpropertydescriptors "^2.0.3" 1181 | semver "^5.7.0" 1182 | 1183 | node-fetch@^2.6.0: 1184 | version "2.6.1" 1185 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" 1186 | integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== 1187 | 1188 | node-modules-regexp@^1.0.0: 1189 | version "1.0.0" 1190 | resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" 1191 | integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= 1192 | 1193 | npm-run-path@^2.0.0: 1194 | version "2.0.2" 1195 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" 1196 | integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= 1197 | dependencies: 1198 | path-key "^2.0.0" 1199 | 1200 | number-is-nan@^1.0.0: 1201 | version "1.0.1" 1202 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 1203 | integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= 1204 | 1205 | nwsapi@^2.0.9: 1206 | version "2.1.3" 1207 | resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.1.3.tgz#25f3a5cec26c654f7376df6659cdf84b99df9558" 1208 | integrity sha512-RowAaJGEgYXEZfQ7tvvdtAQUKPyTR6T6wNu0fwlNsGQYr/h3yQc6oI8WnVZh3Y/Sylwc+dtAlvPqfFZjhTyk3A== 1209 | 1210 | oauth-sign@~0.9.0: 1211 | version "0.9.0" 1212 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" 1213 | integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== 1214 | 1215 | object-keys@^1.0.11, object-keys@^1.0.12: 1216 | version "1.1.1" 1217 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" 1218 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== 1219 | 1220 | object.assign@4.1.0: 1221 | version "4.1.0" 1222 | resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" 1223 | integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== 1224 | dependencies: 1225 | define-properties "^1.1.2" 1226 | function-bind "^1.1.1" 1227 | has-symbols "^1.0.0" 1228 | object-keys "^1.0.11" 1229 | 1230 | object.getownpropertydescriptors@^2.0.3: 1231 | version "2.0.3" 1232 | resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" 1233 | integrity sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY= 1234 | dependencies: 1235 | define-properties "^1.1.2" 1236 | es-abstract "^1.5.1" 1237 | 1238 | once@^1.3.0, once@^1.3.1, once@^1.4.0: 1239 | version "1.4.0" 1240 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1241 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 1242 | dependencies: 1243 | wrappy "1" 1244 | 1245 | optionator@^0.8.1: 1246 | version "0.8.2" 1247 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" 1248 | integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= 1249 | dependencies: 1250 | deep-is "~0.1.3" 1251 | fast-levenshtein "~2.0.4" 1252 | levn "~0.3.0" 1253 | prelude-ls "~1.1.2" 1254 | type-check "~0.3.2" 1255 | wordwrap "~1.0.0" 1256 | 1257 | os-locale@^3.0.0, os-locale@^3.1.0: 1258 | version "3.1.0" 1259 | resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" 1260 | integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== 1261 | dependencies: 1262 | execa "^1.0.0" 1263 | lcid "^2.0.0" 1264 | mem "^4.0.0" 1265 | 1266 | p-defer@^1.0.0: 1267 | version "1.0.0" 1268 | resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" 1269 | integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= 1270 | 1271 | p-finally@^1.0.0: 1272 | version "1.0.0" 1273 | resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" 1274 | integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= 1275 | 1276 | p-is-promise@^2.0.0: 1277 | version "2.1.0" 1278 | resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" 1279 | integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== 1280 | 1281 | p-limit@^2.0.0: 1282 | version "2.2.0" 1283 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2" 1284 | integrity sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ== 1285 | dependencies: 1286 | p-try "^2.0.0" 1287 | 1288 | p-locate@^3.0.0: 1289 | version "3.0.0" 1290 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" 1291 | integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== 1292 | dependencies: 1293 | p-limit "^2.0.0" 1294 | 1295 | p-try@^2.0.0: 1296 | version "2.2.0" 1297 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 1298 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 1299 | 1300 | parse5@5.1.0: 1301 | version "5.1.0" 1302 | resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2" 1303 | integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ== 1304 | 1305 | path-exists@^3.0.0: 1306 | version "3.0.0" 1307 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" 1308 | integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= 1309 | 1310 | path-is-absolute@^1.0.0: 1311 | version "1.0.1" 1312 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1313 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 1314 | 1315 | path-key@^2.0.0, path-key@^2.0.1: 1316 | version "2.0.1" 1317 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" 1318 | integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= 1319 | 1320 | path-parse@^1.0.6: 1321 | version "1.0.6" 1322 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" 1323 | integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== 1324 | 1325 | path-to-regexp@^1.7.0: 1326 | version "1.7.0" 1327 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.7.0.tgz#59fde0f435badacba103a84e9d3bc64e96b9937d" 1328 | integrity sha1-Wf3g9DW62suhA6hOnTvGTpa5k30= 1329 | dependencies: 1330 | isarray "0.0.1" 1331 | 1332 | pathval@^1.1.0: 1333 | version "1.1.0" 1334 | resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0" 1335 | integrity sha1-uULm1L3mUwBe9rcTYd74cn0GReA= 1336 | 1337 | performance-now@^2.1.0: 1338 | version "2.1.0" 1339 | resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" 1340 | integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= 1341 | 1342 | pify@^4.0.1: 1343 | version "4.0.1" 1344 | resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" 1345 | integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== 1346 | 1347 | pirates@^4.0.0: 1348 | version "4.0.1" 1349 | resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" 1350 | integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== 1351 | dependencies: 1352 | node-modules-regexp "^1.0.0" 1353 | 1354 | pkg-dir@^3.0.0: 1355 | version "3.0.0" 1356 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" 1357 | integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== 1358 | dependencies: 1359 | find-up "^3.0.0" 1360 | 1361 | pn@^1.1.0: 1362 | version "1.1.0" 1363 | resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" 1364 | integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== 1365 | 1366 | prelude-ls@~1.1.2: 1367 | version "1.1.2" 1368 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" 1369 | integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= 1370 | 1371 | psl@^1.1.24, psl@^1.1.28: 1372 | version "1.1.31" 1373 | resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.31.tgz#e9aa86d0101b5b105cbe93ac6b784cd547276184" 1374 | integrity sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw== 1375 | 1376 | pump@^3.0.0: 1377 | version "3.0.0" 1378 | resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" 1379 | integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== 1380 | dependencies: 1381 | end-of-stream "^1.1.0" 1382 | once "^1.3.1" 1383 | 1384 | punycode@^1.4.1: 1385 | version "1.4.1" 1386 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" 1387 | integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= 1388 | 1389 | punycode@^2.1.0, punycode@^2.1.1: 1390 | version "2.1.1" 1391 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 1392 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 1393 | 1394 | qs@~6.5.2: 1395 | version "6.5.2" 1396 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" 1397 | integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== 1398 | 1399 | request-promise-core@1.1.2: 1400 | version "1.1.2" 1401 | resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.2.tgz#339f6aababcafdb31c799ff158700336301d3346" 1402 | integrity sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag== 1403 | dependencies: 1404 | lodash "^4.17.11" 1405 | 1406 | request-promise-native@^1.0.5: 1407 | version "1.0.7" 1408 | resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.7.tgz#a49868a624bdea5069f1251d0a836e0d89aa2c59" 1409 | integrity sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w== 1410 | dependencies: 1411 | request-promise-core "1.1.2" 1412 | stealthy-require "^1.1.1" 1413 | tough-cookie "^2.3.3" 1414 | 1415 | request@^2.88.0: 1416 | version "2.88.0" 1417 | resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" 1418 | integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== 1419 | dependencies: 1420 | aws-sign2 "~0.7.0" 1421 | aws4 "^1.8.0" 1422 | caseless "~0.12.0" 1423 | combined-stream "~1.0.6" 1424 | extend "~3.0.2" 1425 | forever-agent "~0.6.1" 1426 | form-data "~2.3.2" 1427 | har-validator "~5.1.0" 1428 | http-signature "~1.2.0" 1429 | is-typedarray "~1.0.0" 1430 | isstream "~0.1.2" 1431 | json-stringify-safe "~5.0.1" 1432 | mime-types "~2.1.19" 1433 | oauth-sign "~0.9.0" 1434 | performance-now "^2.1.0" 1435 | qs "~6.5.2" 1436 | safe-buffer "^5.1.2" 1437 | tough-cookie "~2.4.3" 1438 | tunnel-agent "^0.6.0" 1439 | uuid "^3.3.2" 1440 | 1441 | require-directory@^2.1.1: 1442 | version "2.1.1" 1443 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 1444 | integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= 1445 | 1446 | require-main-filename@^1.0.1: 1447 | version "1.0.1" 1448 | resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" 1449 | integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= 1450 | 1451 | require-main-filename@^2.0.0: 1452 | version "2.0.0" 1453 | resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" 1454 | integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== 1455 | 1456 | resolve@^1.3.2: 1457 | version "1.10.0" 1458 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.0.tgz#3bdaaeaf45cc07f375656dfd2e54ed0810b101ba" 1459 | integrity sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg== 1460 | dependencies: 1461 | path-parse "^1.0.6" 1462 | 1463 | safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.1.1: 1464 | version "5.1.2" 1465 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 1466 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 1467 | 1468 | "safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: 1469 | version "2.1.2" 1470 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 1471 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 1472 | 1473 | saxes@^3.1.5: 1474 | version "3.1.9" 1475 | resolved "https://registry.yarnpkg.com/saxes/-/saxes-3.1.9.tgz#c1c197cd54956d88c09f960254b999e192d7058b" 1476 | integrity sha512-FZeKhJglhJHk7eWG5YM0z46VHmI3KJpMBAQm3xa9meDvd+wevB5GuBB0wc0exPInZiBBHqi00DbS8AcvCGCFMw== 1477 | dependencies: 1478 | xmlchars "^1.3.1" 1479 | 1480 | semver@^5.4.1, semver@^5.5.0, semver@^5.6.0, semver@^5.7.0: 1481 | version "5.7.0" 1482 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" 1483 | integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== 1484 | 1485 | set-blocking@^2.0.0: 1486 | version "2.0.0" 1487 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 1488 | integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= 1489 | 1490 | shebang-command@^1.2.0: 1491 | version "1.2.0" 1492 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" 1493 | integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= 1494 | dependencies: 1495 | shebang-regex "^1.0.0" 1496 | 1497 | shebang-regex@^1.0.0: 1498 | version "1.0.0" 1499 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" 1500 | integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= 1501 | 1502 | signal-exit@^3.0.0: 1503 | version "3.0.2" 1504 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 1505 | integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= 1506 | 1507 | sinon@^7.3.1: 1508 | version "7.3.1" 1509 | resolved "https://registry.yarnpkg.com/sinon/-/sinon-7.3.1.tgz#e8276522104e6c08d1cb52a907270b0e316655c4" 1510 | integrity sha512-eQKMaeWovtOtYe2xThEvaHmmxf870Di+bim10c3ZPrL5bZhLGtu8cz+rOBTFz0CwBV4Q/7dYwZiqZbGVLZ+vjQ== 1511 | dependencies: 1512 | "@sinonjs/commons" "^1.4.0" 1513 | "@sinonjs/formatio" "^3.2.1" 1514 | "@sinonjs/samsam" "^3.3.1" 1515 | diff "^3.5.0" 1516 | lolex "^3.1.0" 1517 | nise "^1.4.10" 1518 | supports-color "^5.5.0" 1519 | 1520 | source-map-support@^0.5.6, source-map-support@^0.5.9: 1521 | version "0.5.12" 1522 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.12.tgz#b4f3b10d51857a5af0138d3ce8003b201613d599" 1523 | integrity sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ== 1524 | dependencies: 1525 | buffer-from "^1.0.0" 1526 | source-map "^0.6.0" 1527 | 1528 | source-map@^0.5.0: 1529 | version "0.5.7" 1530 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" 1531 | integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= 1532 | 1533 | source-map@^0.6.0, source-map@~0.6.1: 1534 | version "0.6.1" 1535 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 1536 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 1537 | 1538 | sprintf-js@~1.0.2: 1539 | version "1.0.3" 1540 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 1541 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= 1542 | 1543 | sshpk@^1.7.0: 1544 | version "1.16.1" 1545 | resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" 1546 | integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== 1547 | dependencies: 1548 | asn1 "~0.2.3" 1549 | assert-plus "^1.0.0" 1550 | bcrypt-pbkdf "^1.0.0" 1551 | dashdash "^1.12.0" 1552 | ecc-jsbn "~0.1.1" 1553 | getpass "^0.1.1" 1554 | jsbn "~0.1.0" 1555 | safer-buffer "^2.0.2" 1556 | tweetnacl "~0.14.0" 1557 | 1558 | stealthy-require@^1.1.1: 1559 | version "1.1.1" 1560 | resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" 1561 | integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= 1562 | 1563 | string-width@^1.0.1: 1564 | version "1.0.2" 1565 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 1566 | integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= 1567 | dependencies: 1568 | code-point-at "^1.0.0" 1569 | is-fullwidth-code-point "^1.0.0" 1570 | strip-ansi "^3.0.0" 1571 | 1572 | "string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.1: 1573 | version "2.1.1" 1574 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 1575 | integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== 1576 | dependencies: 1577 | is-fullwidth-code-point "^2.0.0" 1578 | strip-ansi "^4.0.0" 1579 | 1580 | string-width@^3.0.0: 1581 | version "3.1.0" 1582 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" 1583 | integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== 1584 | dependencies: 1585 | emoji-regex "^7.0.1" 1586 | is-fullwidth-code-point "^2.0.0" 1587 | strip-ansi "^5.1.0" 1588 | 1589 | strip-ansi@^3.0.0, strip-ansi@^3.0.1: 1590 | version "3.0.1" 1591 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 1592 | integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= 1593 | dependencies: 1594 | ansi-regex "^2.0.0" 1595 | 1596 | strip-ansi@^4.0.0: 1597 | version "4.0.0" 1598 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 1599 | integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= 1600 | dependencies: 1601 | ansi-regex "^3.0.0" 1602 | 1603 | strip-ansi@^5.1.0: 1604 | version "5.2.0" 1605 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" 1606 | integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== 1607 | dependencies: 1608 | ansi-regex "^4.1.0" 1609 | 1610 | strip-eof@^1.0.0: 1611 | version "1.0.0" 1612 | resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" 1613 | integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= 1614 | 1615 | strip-json-comments@2.0.1: 1616 | version "2.0.1" 1617 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 1618 | integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= 1619 | 1620 | supports-color@6.0.0: 1621 | version "6.0.0" 1622 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a" 1623 | integrity sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg== 1624 | dependencies: 1625 | has-flag "^3.0.0" 1626 | 1627 | supports-color@^5.3.0, supports-color@^5.5.0: 1628 | version "5.5.0" 1629 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 1630 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 1631 | dependencies: 1632 | has-flag "^3.0.0" 1633 | 1634 | symbol-tree@^3.2.2: 1635 | version "3.2.2" 1636 | resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" 1637 | integrity sha1-rifbOPZgp64uHDt9G8KQgZuFGeY= 1638 | 1639 | to-fast-properties@^2.0.0: 1640 | version "2.0.0" 1641 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" 1642 | integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= 1643 | 1644 | tough-cookie@^2.3.3, tough-cookie@^2.5.0: 1645 | version "2.5.0" 1646 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" 1647 | integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== 1648 | dependencies: 1649 | psl "^1.1.28" 1650 | punycode "^2.1.1" 1651 | 1652 | tough-cookie@~2.4.3: 1653 | version "2.4.3" 1654 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" 1655 | integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== 1656 | dependencies: 1657 | psl "^1.1.24" 1658 | punycode "^1.4.1" 1659 | 1660 | tr46@^1.0.1: 1661 | version "1.0.1" 1662 | resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" 1663 | integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= 1664 | dependencies: 1665 | punycode "^2.1.0" 1666 | 1667 | trim-right@^1.0.1: 1668 | version "1.0.1" 1669 | resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" 1670 | integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= 1671 | 1672 | ts-node@^8.0.3: 1673 | version "8.0.3" 1674 | resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.0.3.tgz#aa60b836a24dafd8bf21b54766841a232fdbc641" 1675 | integrity sha512-2qayBA4vdtVRuDo11DEFSsD/SFsBXQBRZZhbRGSIkmYmVkWjULn/GGMdG10KVqkaGndljfaTD8dKjWgcejO8YA== 1676 | dependencies: 1677 | arg "^4.1.0" 1678 | diff "^3.1.0" 1679 | make-error "^1.1.1" 1680 | source-map-support "^0.5.6" 1681 | yn "^3.0.0" 1682 | 1683 | tunnel-agent@^0.6.0: 1684 | version "0.6.0" 1685 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" 1686 | integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= 1687 | dependencies: 1688 | safe-buffer "^5.0.1" 1689 | 1690 | tweetnacl@^0.14.3, tweetnacl@~0.14.0: 1691 | version "0.14.5" 1692 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" 1693 | integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= 1694 | 1695 | type-check@~0.3.2: 1696 | version "0.3.2" 1697 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" 1698 | integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= 1699 | dependencies: 1700 | prelude-ls "~1.1.2" 1701 | 1702 | type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.5: 1703 | version "4.0.8" 1704 | resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" 1705 | integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== 1706 | 1707 | typescript@^3.1.5: 1708 | version "3.1.5" 1709 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.1.5.tgz#93d8b6864375325a91177372cb370ae0ae3a0703" 1710 | 1711 | uri-js@^4.2.2: 1712 | version "4.2.2" 1713 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" 1714 | integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== 1715 | dependencies: 1716 | punycode "^2.1.0" 1717 | 1718 | uuid@^3.3.2: 1719 | version "3.3.2" 1720 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" 1721 | integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== 1722 | 1723 | verror@1.10.0: 1724 | version "1.10.0" 1725 | resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" 1726 | integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= 1727 | dependencies: 1728 | assert-plus "^1.0.0" 1729 | core-util-is "1.0.2" 1730 | extsprintf "^1.2.0" 1731 | 1732 | w3c-hr-time@^1.0.1: 1733 | version "1.0.1" 1734 | resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" 1735 | integrity sha1-gqwr/2PZUOqeMYmlimViX+3xkEU= 1736 | dependencies: 1737 | browser-process-hrtime "^0.1.2" 1738 | 1739 | w3c-xmlserializer@^1.0.1: 1740 | version "1.1.2" 1741 | resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz#30485ca7d70a6fd052420a3d12fd90e6339ce794" 1742 | integrity sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg== 1743 | dependencies: 1744 | domexception "^1.0.1" 1745 | webidl-conversions "^4.0.2" 1746 | xml-name-validator "^3.0.0" 1747 | 1748 | webidl-conversions@^4.0.2: 1749 | version "4.0.2" 1750 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" 1751 | integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== 1752 | 1753 | whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.5: 1754 | version "1.0.5" 1755 | resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" 1756 | integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== 1757 | dependencies: 1758 | iconv-lite "0.4.24" 1759 | 1760 | whatwg-mimetype@^2.2.0, whatwg-mimetype@^2.3.0: 1761 | version "2.3.0" 1762 | resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" 1763 | integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== 1764 | 1765 | whatwg-url@^7.0.0: 1766 | version "7.0.0" 1767 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.0.0.tgz#fde926fa54a599f3adf82dff25a9f7be02dc6edd" 1768 | integrity sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ== 1769 | dependencies: 1770 | lodash.sortby "^4.7.0" 1771 | tr46 "^1.0.1" 1772 | webidl-conversions "^4.0.2" 1773 | 1774 | which-module@^2.0.0: 1775 | version "2.0.0" 1776 | resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" 1777 | integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= 1778 | 1779 | which@1.3.1, which@^1.2.9: 1780 | version "1.3.1" 1781 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" 1782 | integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== 1783 | dependencies: 1784 | isexe "^2.0.0" 1785 | 1786 | wide-align@1.1.3: 1787 | version "1.1.3" 1788 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" 1789 | integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== 1790 | dependencies: 1791 | string-width "^1.0.2 || 2" 1792 | 1793 | wordwrap@~1.0.0: 1794 | version "1.0.0" 1795 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" 1796 | integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= 1797 | 1798 | wrap-ansi@^2.0.0: 1799 | version "2.1.0" 1800 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" 1801 | integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= 1802 | dependencies: 1803 | string-width "^1.0.1" 1804 | strip-ansi "^3.0.1" 1805 | 1806 | wrappy@1: 1807 | version "1.0.2" 1808 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1809 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 1810 | 1811 | ws@^6.1.2: 1812 | version "6.2.2" 1813 | resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.2.tgz#dd5cdbd57a9979916097652d78f1cc5faea0c32e" 1814 | integrity sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw== 1815 | dependencies: 1816 | async-limiter "~1.0.0" 1817 | 1818 | xml-name-validator@^3.0.0: 1819 | version "3.0.0" 1820 | resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" 1821 | integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== 1822 | 1823 | xmlchars@^1.3.1: 1824 | version "1.3.1" 1825 | resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-1.3.1.tgz#1dda035f833dbb4f86a0c28eaa6ca769214793cf" 1826 | integrity sha512-tGkGJkN8XqCod7OT+EvGYK5Z4SfDQGD30zAa58OcnAa0RRWgzUEK72tkXhsX1FZd+rgnhRxFtmO+ihkp8LHSkw== 1827 | 1828 | "y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: 1829 | version "4.0.0" 1830 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" 1831 | integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== 1832 | 1833 | yargs-parser@13.0.0, yargs-parser@^13.0.0: 1834 | version "13.0.0" 1835 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.0.0.tgz#3fc44f3e76a8bdb1cc3602e860108602e5ccde8b" 1836 | integrity sha512-w2LXjoL8oRdRQN+hOyppuXs+V/fVAYtpcrRxZuF7Kt/Oc+Jr2uAcVntaUTNT6w5ihoWfFDpNY8CPx1QskxZ/pw== 1837 | dependencies: 1838 | camelcase "^5.0.0" 1839 | decamelize "^1.2.0" 1840 | 1841 | yargs-parser@^11.1.1: 1842 | version "11.1.1" 1843 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" 1844 | integrity sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ== 1845 | dependencies: 1846 | camelcase "^5.0.0" 1847 | decamelize "^1.2.0" 1848 | 1849 | yargs-unparser@1.5.0: 1850 | version "1.5.0" 1851 | resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-1.5.0.tgz#f2bb2a7e83cbc87bb95c8e572828a06c9add6e0d" 1852 | integrity sha512-HK25qidFTCVuj/D1VfNiEndpLIeJN78aqgR23nL3y4N0U/91cOAzqfHlF8n2BvoNDcZmJKin3ddNSvOxSr8flw== 1853 | dependencies: 1854 | flat "^4.1.0" 1855 | lodash "^4.17.11" 1856 | yargs "^12.0.5" 1857 | 1858 | yargs@13.2.2: 1859 | version "13.2.2" 1860 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.2.2.tgz#0c101f580ae95cea7f39d927e7770e3fdc97f993" 1861 | integrity sha512-WyEoxgyTD3w5XRpAQNYUB9ycVH/PQrToaTXdYXRdOXvEy1l19br+VJsc0vcO8PTGg5ro/l/GY7F/JMEBmI0BxA== 1862 | dependencies: 1863 | cliui "^4.0.0" 1864 | find-up "^3.0.0" 1865 | get-caller-file "^2.0.1" 1866 | os-locale "^3.1.0" 1867 | require-directory "^2.1.1" 1868 | require-main-filename "^2.0.0" 1869 | set-blocking "^2.0.0" 1870 | string-width "^3.0.0" 1871 | which-module "^2.0.0" 1872 | y18n "^4.0.0" 1873 | yargs-parser "^13.0.0" 1874 | 1875 | yargs@^12.0.5: 1876 | version "12.0.5" 1877 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" 1878 | integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw== 1879 | dependencies: 1880 | cliui "^4.0.0" 1881 | decamelize "^1.2.0" 1882 | find-up "^3.0.0" 1883 | get-caller-file "^1.0.1" 1884 | os-locale "^3.0.0" 1885 | require-directory "^2.1.1" 1886 | require-main-filename "^1.0.1" 1887 | set-blocking "^2.0.0" 1888 | string-width "^2.0.0" 1889 | which-module "^2.0.0" 1890 | y18n "^3.2.1 || ^4.0.0" 1891 | yargs-parser "^11.1.1" 1892 | 1893 | yn@^3.0.0: 1894 | version "3.1.0" 1895 | resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.0.tgz#fcbe2db63610361afcc5eb9e0ac91e976d046114" 1896 | integrity sha512-kKfnnYkbTfrAdd0xICNFw7Atm8nKpLcLv9AZGEt+kczL/WQVai4e2V6ZN8U/O+iI6WrNuJjNNOyu4zfhl9D3Hg== 1897 | --------------------------------------------------------------------------------