From 453b7dd3a0b821de6dd0578c5df7d4004d74f46c Mon Sep 17 00:00:00 2001 From: Thibault Malbranche Date: Wed, 20 Mar 2019 12:35:13 +0000 Subject: [PATCH] feat(typescript): Source code rewrite using typescript (#425) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Rewrote the whole repository into typescript. This will provide way better and up to date documentation. This should also add some safety for people contributing 😄 . Flow types were not working until now which is why this PR doesn't have them but feel free to PR. This also fixes #384 #435 #206 #171 #168. --- .circleci/config.yml | 2 +- .eslintignore | 1 + .eslintrc.js | 75 + .gitignore | 4 +- .prettierrc.js | 10 + .vscode/settings.json | 9 + docs/Reference.md | 190 +- index.d.ts | 8 + index.js | 3 +- jest.config.js | 11 +- js/WebView.android.js | 352 --- js/WebView.ios.js | 528 ----- package.json | 60 +- src/WebView.android.tsx | 304 +++ src/WebView.ios.tsx | 422 ++++ src/WebView.styles.ts | 53 + src/WebView.tsx | 5 + js/WebViewShared.js => src/WebViewShared.ts | 52 +- js/WebViewTypes.js => src/WebViewTypes.ts | 395 ++-- {js => src}/__tests__/WebViewShared-test.js | 0 .../__snapshots__/WebViewShared-test.js.snap | 0 tsconfig.json | 24 + typings/index.d.ts | 483 ---- yarn.lock | 1985 ++++++++++++----- 24 files changed, 2794 insertions(+), 2182 deletions(-) create mode 100644 .eslintignore create mode 100644 .eslintrc.js create mode 100644 .prettierrc.js create mode 100644 .vscode/settings.json create mode 100644 index.d.ts delete mode 100644 js/WebView.android.js delete mode 100644 js/WebView.ios.js create mode 100644 src/WebView.android.tsx create mode 100644 src/WebView.ios.tsx create mode 100644 src/WebView.styles.ts create mode 100644 src/WebView.tsx rename js/WebViewShared.js => src/WebViewShared.ts (54%) rename js/WebViewTypes.js => src/WebViewTypes.ts (58%) rename {js => src}/__tests__/WebViewShared-test.js (100%) rename {js => src}/__tests__/__snapshots__/WebViewShared-test.js.snap (100%) create mode 100644 tsconfig.json delete mode 100644 typings/index.d.ts diff --git a/.circleci/config.yml b/.circleci/config.yml index fa4b464..f8c4c63 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -35,7 +35,7 @@ jobs: - run: name: Run Tests - command: yarn ci:test + command: yarn ci publish: <<: *defaults diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..f1ff06d --- /dev/null +++ b/.eslintignore @@ -0,0 +1 @@ +lib/ \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..c8ccc94 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,75 @@ +module.exports = { + // Airbnb is the base, prettier is here so that eslint doesn't conflict with prettier + extends: ['airbnb', 'prettier', 'prettier/react'], + parser: '@typescript-eslint/parser', + plugins: ['react', 'react-native', 'import', '@typescript-eslint'], + rules: { + 'no-console': 'off', + // Lines will be broken before binary operators + 'operator-linebreak': ['error', 'before'], + // Allow imports from dev and peer dependencies + 'import/no-extraneous-dependencies': [ + 'error', + { devDependencies: true, peerDependencies: true }, + ], + 'react/jsx-filename-extension': ['error', { extensions: ['.tsx'] }], + // This rule doesn't play nice with Prettier + 'react/jsx-one-expression-per-line': 'off', + // This rule doesn't play nice with Prettier + 'react/jsx-wrap-multilines': 'off', + // Remove this rule because we only destructure props, but never state + 'react/destructuring-assignment': 'off', + 'react/prop-types': 'off', + '@typescript-eslint/adjacent-overload-signatures': 'error', + '@typescript-eslint/array-type': ['error', 'array'], + '@typescript-eslint/generic-type-naming': ['error', '^[a-zA-Z]+$'], + '@typescript-eslint/no-angle-bracket-type-assertion': 'error', + '@typescript-eslint/no-array-constructor': 'error', + '@typescript-eslint/no-empty-interface': 'error', + '@typescript-eslint/no-explicit-any': 'error', + '@typescript-eslint/no-extraneous-class': 'error', + '@typescript-eslint/no-inferrable-types': 'error', + '@typescript-eslint/no-misused-new': 'error', + '@typescript-eslint/no-namespace': 'error', + '@typescript-eslint/no-non-null-assertion': 'error', + '@typescript-eslint/no-object-literal-type-assertion': 'error', + '@typescript-eslint/no-parameter-properties': 'error', + '@typescript-eslint/no-this-alias': 'error', + '@typescript-eslint/no-triple-slash-reference': 'error', + '@typescript-eslint/no-type-alias': [ + 'error', + { + allowAliases: 'always', + allowCallbacks: 'always', + allowMappedTypes: 'always', + }, + ], + '@typescript-eslint/no-unused-vars': [ + 'error', + { ignoreRestSiblings: true }, + ], + '@typescript-eslint/prefer-interface': 'error', + '@typescript-eslint/prefer-namespace-keyword': 'error', + '@typescript-eslint/type-annotation-spacing': 'error', + }, + settings: { + 'import/resolver': { + node: { + extensions: [ + '.js', + '.android.js', + '.ios.js', + '.jsx', + '.android.jsx', + '.ios.jsx', + '.tsx', + '.ts', + '.android.tsx', + '.android.ts', + '.ios.tsx', + '.ios.ts', + ], + }, + }, + }, +}; diff --git a/.gitignore b/.gitignore index a80b145..e08691c 100644 --- a/.gitignore +++ b/.gitignore @@ -51,4 +51,6 @@ bundles/ android/gradle android/gradlew -android/gradlew.bat \ No newline at end of file +android/gradlew.bat + +lib/ \ No newline at end of file diff --git a/.prettierrc.js b/.prettierrc.js new file mode 100644 index 0000000..c705913 --- /dev/null +++ b/.prettierrc.js @@ -0,0 +1,10 @@ +// https://prettier.io/docs/en/options.html + +module.exports = { + // Enables semicolons at the end of statements + semi: true, + // Formats strings with single quotes ('') instead of quotes ("") + singleQuote: true, + // Adds a trailing comma at the end of all lists (including function arguments) + trailingComma: 'all', +}; diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..bb12193 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,9 @@ +{ + "typescript.tsdk": "node_modules/typescript/lib", + "eslint.validate": [ + "javascript", + "javascriptreact", + "typescript", + "typescriptreact" + ] +} diff --git a/docs/Reference.md b/docs/Reference.md index ab66728..4db6ddd 100644 --- a/docs/Reference.md +++ b/docs/Reference.md @@ -96,9 +96,9 @@ _Note that using static HTML requires the WebView property [originWhiteList](Ref Controls whether to adjust the content inset for web views that are placed behind a navigation bar, tab bar, or toolbar. The default value is `true`. -| Type | Required | -| ---- | -------- | -| bool | No | +| Type | Required | Platform | +| ---- | -------- | -------- | +| bool | No | iOS | --- @@ -154,28 +154,29 @@ Example: ```jsx { - const { nativeEvent } = syntheticEvent - console.warn('WebView error: ', nativeEvent) - }} - /> + source={{ uri: 'https://facebook.github.io/react-native' }} + onError={syntheticEvent => { + const { nativeEvent } = syntheticEvent; + console.warn('WebView error: ', nativeEvent); + }} +/> ``` Function passed to `onError` is called with a SyntheticEvent wrapping a nativeEvent with these properties: - ``` - canGoBack - canGoForward - code - description - didFailProvisionalNavigation - domain - loading - target - title - url ``` +canGoBack +canGoForward +code +description +didFailProvisionalNavigation +domain +loading +target +title +url +``` + > **_Note_** > Domain is only used on iOS @@ -193,8 +194,8 @@ Example: ```jsx { + source={{ uri: 'https://facebook.github.io/react-native' }} + onLoad={syntheticEvent => { const { nativeEvent } = syntheticEvent; this.url = nativeEvent.url; }} @@ -203,13 +204,13 @@ Example: Function passed to `onLoad` is called with a SyntheticEvent wrapping a nativeEvent with these properties: - ``` - canGoBack - canGoForward - loading - target - title - url +``` +canGoBack +canGoForward +loading +target +title +url ``` --- @@ -222,13 +223,12 @@ Function that is invoked when the `WebView` load succeeds or fails. | -------- | -------- | | function | No | - Example: ```jsx { + source={{ uri: 'https://facebook.github.io/react-native' }} + onLoadEnd={syntheticEvent => { // update component to be aware of loading status const { nativeEvent } = syntheticEvent; this.isLoading = nativeEvent.loading; @@ -238,13 +238,13 @@ Example: Function passed to `onLoadEnd` is called with a SyntheticEvent wrapping a nativeEvent with these properties: - ``` - canGoBack - canGoForward - loading - target - title - url +``` +canGoBack +canGoForward +loading +target +title +url ``` --- @@ -257,13 +257,12 @@ Function that is invoked when the `WebView` starts loading. | -------- | -------- | | function | No | - Example: ```jsx { + source={{ uri: 'https://facebook.github.io/react-native/=' }} + onLoadStart={syntheticEvent => { // update component to be aware of loading status const { nativeEvent } = syntheticEvent; this.isLoading = nativeEvent.loading; @@ -273,13 +272,13 @@ Example: Function passed to `onLoadStart` is called with a SyntheticEvent wrapping a nativeEvent with these properties: - ``` - canGoBack - canGoForward - loading - target - title - url +``` +canGoBack +canGoForward +loading +target +title +url ``` --- @@ -301,23 +300,23 @@ Example: ```jsx { - this.loadingProgress = nativeEvent.progress - }} - /> + source={{ uri: 'https://facebook.github.io/react-native' }} + onLoadProgress={({ nativeEvent }) => { + this.loadingProgress = nativeEvent.progress; + }} +/> ``` Function passed to `onLoadProgress` is called with a SyntheticEvent wrapping a nativeEvent with these properties: - ``` - canGoBack - canGoForward - loading - progress - target - title - url +``` +canGoBack +canGoForward +loading +progress +target +title +url ``` --- @@ -348,23 +347,24 @@ Example: ```jsx { + source={{ uri: 'https://facebook.github.io/react-native' }} + onNavigationStateChange={navState => { // Keep track of going back navigation within component this.canGoBack = navState.canGoBack; -}} /> + }} +/> ``` The `navState` object includes these properties: - ``` - canGoBack - canGoForward - loading - navigationType - target - title - url +``` +canGoBack +canGoForward +loading +navigationType +target +title +url ``` --- @@ -382,9 +382,9 @@ Example: ```jsx //only allow URIs that begin with https:// or git:// + source={{ uri: 'https://facebook.github.io/react-native' }} + originWhitelist={['https://*', 'git://*']} +/> ``` --- @@ -397,17 +397,16 @@ Function that returns a view to show if there's an error. | -------- | -------- | | function | No | - Example: ```jsx } - /> + source={{ uri: 'https://facebook.github.io/react-native' }} + renderError={errorName => } +/> ``` -The function passed to `renderError` will be called with the name of the error +The function passed to `renderError` will be called with the name of the error --- @@ -419,15 +418,14 @@ Function that returns a loading indicator. The startInLoadingState prop must be | -------- | -------- | | function | No | - Example: ```jsx } - /> + source={{ uri: 'https://facebook.github.io/react-native' }} + startInLoadingState={true} + renderLoading={() => } +/> ``` --- @@ -446,7 +444,7 @@ On iOS, when [`useWebKit=true`](Reference.md#usewebkit), this prop will not work ### `onShouldStartLoadWithRequest` -Function that allows custom handling of any web view requests. Return `true` from the function to continue loading the request and `false` to stop loading. +Function that allows custom handling of any web view requests. Return `true` from the function to continue loading the request and `false` to stop loading. On Android, is not called on the first load. @@ -458,10 +456,10 @@ Example: ```jsx { + source={{ uri: 'https://facebook.github.io/react-native' }} + onShouldStartLoadWithRequest={request => { // Only allow navigating within this website - return request.url.startsWith("https://facebook.github.io/react-native") + return request.url.startsWith('https://facebook.github.io/react-native'); }} /> ``` @@ -483,10 +481,10 @@ Example: ```jsx { + source={{ uri: 'https://facebook.github.io/react-native' }} + onShouldStartLoadWithRequest={request => { // Only allow navigating within this website - return request.url.startsWith("https://facebook.github.io/react-native") + return request.url.startsWith('https://facebook.github.io/react-native'); }} /> ``` @@ -528,9 +526,9 @@ Example: ```jsx + source={{ uri: 'https://facebook.github.io/react-native' }} + style={{ marginTop: 20 }} +/> ``` --- diff --git a/index.d.ts b/index.d.ts new file mode 100644 index 0000000..9eaf91e --- /dev/null +++ b/index.d.ts @@ -0,0 +1,8 @@ +import { ComponentType } from 'react'; +// eslint-disable-next-line +import { IOSWebViewProps, AndroidWebViewProps } from './lib/WebViewTypes'; + +declare const WebView: ComponentType; + +export { WebView }; +export default WebView; diff --git a/index.js b/index.js index e308855..55a1a38 100644 --- a/index.js +++ b/index.js @@ -1,3 +1,4 @@ -import WebView from './js/WebView'; +import WebView from './lib/WebView'; export { WebView }; +export default WebView; diff --git a/jest.config.js b/jest.config.js index 7311ba6..6281efa 100644 --- a/jest.config.js +++ b/jest.config.js @@ -88,7 +88,7 @@ module.exports = { // notifyMode: "failure-change", // A preset that is used as a base for Jest's configuration - preset: "react-native", + preset: 'react-native', // Run tests from one or more projects // projects: null, @@ -129,7 +129,7 @@ module.exports = { // snapshotSerializers: [], // The test environment that will be used for testing - testEnvironment: "node", + testEnvironment: 'node', // Options that will be passed to the testEnvironment // testEnvironmentOptions: {}, @@ -164,7 +164,12 @@ module.exports = { // timers: "real", // A map from regular expressions to paths to transformers - // transform: null, + transform: { + '^.+\\.ts(x)?$': 'ts-jest', + '^.+\\.js$': 'babel-jest', + '^.+\\.(bmp|gif|jpg|jpeg|mp4|png|psd|svg|webp)$': + '/node_modules/react-native/jest/assetFileTransformer.js', + }, // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation // transformIgnorePatterns: [ diff --git a/js/WebView.android.js b/js/WebView.android.js deleted file mode 100644 index 562829f..0000000 --- a/js/WebView.android.js +++ /dev/null @@ -1,352 +0,0 @@ -/** - * Copyright (c) 2015-present, Facebook, Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @format - * @flow - */ - -import React from 'react'; - -import ReactNative, { - ActivityIndicator, - Image, - requireNativeComponent, - StyleSheet, - UIManager, - View, - NativeModules, -} from 'react-native'; - -import invariant from 'fbjs/lib/invariant'; -import keyMirror from 'fbjs/lib/keyMirror'; - -import { - defaultOriginWhitelist, - createOnShouldStartLoadWithRequest, -} from './WebViewShared'; -import type { - WebViewError, - WebViewErrorEvent, - WebViewMessageEvent, - WebViewNavigationEvent, - WebViewProgressEvent, - WebViewSharedProps, - WebViewSource, -} from './WebViewTypes'; - -const resolveAssetSource = Image.resolveAssetSource; - -const WebViewState = keyMirror({ - IDLE: null, - LOADING: null, - ERROR: null, -}); - -const defaultRenderLoading = () => ( - - - -); - -type State = {| - viewState: WebViewState, - lastErrorEvent: ?WebViewError, -|}; - -/** - * Renders a native WebView. - */ -class WebView extends React.Component { - static defaultProps = { - overScrollMode: 'always', - javaScriptEnabled: true, - thirdPartyCookiesEnabled: true, - scalesPageToFit: true, - allowFileAccess: false, - saveFormDataDisabled: false, - cacheEnabled: true, - androidHardwareAccelerationDisabled: false, - originWhitelist: defaultOriginWhitelist, - }; - - static isFileUploadSupported = async () => { - // native implementation should return "true" only for Android 5+ - return NativeModules.RNCWebView.isFileUploadSupported(); - }; - - state = { - viewState: this.props.startInLoadingState - ? WebViewState.LOADING - : WebViewState.IDLE, - lastErrorEvent: null, - }; - - webViewRef = React.createRef(); - - render() { - let otherView = null; - - if (this.state.viewState === WebViewState.LOADING) { - otherView = (this.props.renderLoading || defaultRenderLoading)(); - } else if (this.state.viewState === WebViewState.ERROR) { - const errorEvent = this.state.lastErrorEvent; - invariant(errorEvent != null, 'lastErrorEvent expected to be non-null'); - otherView = - this.props.renderError && - this.props.renderError( - errorEvent.domain, - errorEvent.code, - errorEvent.description, - ); - } else if (this.state.viewState !== WebViewState.IDLE) { - console.error( - 'RNCWebView invalid state encountered: ' + this.state.viewState, - ); - } - - const webViewStyles = [styles.container, this.props.style]; - if ( - this.state.viewState === WebViewState.LOADING || - this.state.viewState === WebViewState.ERROR - ) { - // if we're in either LOADING or ERROR states, don't show the webView - webViewStyles.push(styles.hidden); - } - - let source: WebViewSource = this.props.source || {}; - if (!this.props.source && this.props.html) { - source = { html: this.props.html }; - } else if (!this.props.source && this.props.url) { - source = { uri: this.props.url }; - } - - if (source.method === 'POST' && source.headers) { - console.warn( - 'WebView: `source.headers` is not supported when using POST.', - ); - } else if (source.method === 'GET' && source.body) { - console.warn('WebView: `source.body` is not supported when using GET.'); - } - - const nativeConfig = this.props.nativeConfig || {}; - - let NativeWebView = nativeConfig.component || RNCWebView; - - const onShouldStartLoadWithRequest = createOnShouldStartLoadWithRequest( - this.onShouldStartLoadWithRequestCallback, - this.props.originWhitelist, - this.props.onShouldStartLoadWithRequest, - ); - - const webView = ( - - ); - - return ( - - {webView} - {otherView} - - ); - } - - getViewManagerConfig = (viewManagerName: string) => { - if (!UIManager.getViewManagerConfig) { - return UIManager[viewManagerName]; - } - return UIManager.getViewManagerConfig(viewManagerName); - }; - - getCommands = () => this.getViewManagerConfig('RNCWebView').Commands; - - goForward = () => { - UIManager.dispatchViewManagerCommand( - this.getWebViewHandle(), - this.getCommands().goForward, - null, - ); - }; - - goBack = () => { - UIManager.dispatchViewManagerCommand( - this.getWebViewHandle(), - this.getCommands().goBack, - null, - ); - }; - - reload = () => { - this.setState({ - viewState: WebViewState.LOADING, - }); - UIManager.dispatchViewManagerCommand( - this.getWebViewHandle(), - this.getCommands().reload, - null, - ); - }; - - stopLoading = () => { - UIManager.dispatchViewManagerCommand( - this.getWebViewHandle(), - this.getCommands().stopLoading, - null, - ); - }; - - postMessage = (data: string) => { - UIManager.dispatchViewManagerCommand( - this.getWebViewHandle(), - this.getCommands().postMessage, - [String(data)], - ); - }; - - /** - * Injects a javascript string into the referenced WebView. Deliberately does not - * return a response because using eval() to return a response breaks this method - * on pages with a Content Security Policy that disallows eval(). If you need that - * functionality, look into postMessage/onMessage. - */ - injectJavaScript = (data: string) => { - UIManager.dispatchViewManagerCommand( - this.getWebViewHandle(), - this.getCommands().injectJavaScript, - [data], - ); - }; - - /** - * We return an event with a bunch of fields including: - * url, title, loading, canGoBack, canGoForward - */ - updateNavigationState = (event: WebViewNavigationEvent) => { - if (this.props.onNavigationStateChange) { - this.props.onNavigationStateChange(event.nativeEvent); - } - }; - - getWebViewHandle = () => { - return ReactNative.findNodeHandle(this.webViewRef.current); - }; - - onLoadingStart = (event: WebViewNavigationEvent) => { - const onLoadStart = this.props.onLoadStart; - onLoadStart && onLoadStart(event); - this.updateNavigationState(event); - }; - - onLoadingError = (event: WebViewErrorEvent) => { - event.persist(); // persist this event because we need to store it - const { onError, onLoadEnd } = this.props; - onError && onError(event); - onLoadEnd && onLoadEnd(event); - console.warn('Encountered an error loading page', event.nativeEvent); - - this.setState({ - lastErrorEvent: event.nativeEvent, - viewState: WebViewState.ERROR, - }); - }; - - onLoadingFinish = (event: WebViewNavigationEvent) => { - const { onLoad, onLoadEnd } = this.props; - onLoad && onLoad(event); - onLoadEnd && onLoadEnd(event); - this.setState({ - viewState: WebViewState.IDLE, - }); - this.updateNavigationState(event); - }; - - onMessage = (event: WebViewMessageEvent) => { - const { onMessage } = this.props; - onMessage && onMessage(event); - }; - - onLoadingProgress = (event: WebViewProgressEvent) => { - const { onLoadProgress } = this.props; - onLoadProgress && onLoadProgress(event); - }; - - onShouldStartLoadWithRequestCallback = ( - shouldStart: boolean, - url: string, - ) => { - if (shouldStart) { - UIManager.dispatchViewManagerCommand( - this.getWebViewHandle(), - this.getCommands().loadUrl, - [String(url)], - ); - } - }; -} - -const RNCWebView = requireNativeComponent('RNCWebView'); - -const styles = StyleSheet.create({ - container: { - flex: 1, - }, - hidden: { - height: 0, - flex: 0, // disable 'flex:1' when hiding a View - }, - loadingView: { - flex: 1, - justifyContent: 'center', - alignItems: 'center', - }, - loadingProgressBar: { - height: 20, - }, -}); - -module.exports = WebView; diff --git a/js/WebView.ios.js b/js/WebView.ios.js deleted file mode 100644 index e8a4279..0000000 --- a/js/WebView.ios.js +++ /dev/null @@ -1,528 +0,0 @@ -/** - * Copyright (c) 2015-present, Facebook, Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @format - * @flow - */ - -import React from 'react'; -import { - ActivityIndicator, - Linking, - StyleSheet, - Text, - UIManager, - View, - requireNativeComponent, - NativeModules, - Image, - findNodeHandle, -} from 'react-native'; - -import invariant from 'fbjs/lib/invariant'; -import keyMirror from 'fbjs/lib/keyMirror'; - -import { - defaultOriginWhitelist, - createOnShouldStartLoadWithRequest, -} from './WebViewShared'; -import type { - WebViewEvent, - WebViewError, - WebViewErrorEvent, - WebViewMessageEvent, - WebViewNavigationEvent, - WebViewSharedProps, - WebViewSource, - WebViewProgressEvent, -} from './WebViewTypes'; - -const resolveAssetSource = Image.resolveAssetSource; -let didWarnAboutUIWebViewUsage = false; -// Imported from https://github.com/facebook/react-native/blob/master/Libraries/Components/ScrollView/processDecelerationRate.js -function processDecelerationRate(decelerationRate) { - if (decelerationRate === 'normal') { - decelerationRate = 0.998; - } else if (decelerationRate === 'fast') { - decelerationRate = 0.99; - } - return decelerationRate; -} - -const RNCUIWebViewManager = NativeModules.RNCUIWebViewManager; -const RNCWKWebViewManager = NativeModules.RNCWKWebViewManager; - -const BGWASH = 'rgba(255,255,255,0.8)'; - -const WebViewState = keyMirror({ - IDLE: null, - LOADING: null, - ERROR: null, -}); - -const NavigationType = keyMirror({ - click: true, - formsubmit: true, - backforward: true, - reload: true, - formresubmit: true, - other: true, -}); - -const JSNavigationScheme = 'react-js-navigation'; - -type State = {| - viewState: WebViewState, - lastErrorEvent: ?WebViewError, -|}; - -const DataDetectorTypes = [ - 'phoneNumber', - 'link', - 'address', - 'calendarEvent', - 'trackingNumber', - 'flightNumber', - 'lookupSuggestion', - 'none', - 'all', -]; - -const defaultRenderLoading = () => ( - - - -); -const defaultRenderError = (errorDomain, errorCode, errorDesc) => ( - - Error loading page - {'Domain: ' + errorDomain} - {'Error Code: ' + errorCode} - {'Description: ' + errorDesc} - -); - -/** - * `WebView` renders web content in a native view. - * - *``` - * import React, { Component } from 'react'; - * import { WebView } from 'react-native'; - * - * class MyWeb extends Component { - * render() { - * return ( - * - * ); - * } - * } - *``` - * - * You can use this component to navigate back and forth in the web view's - * history and configure various properties for the web content. - */ -class WebView extends React.Component { - static JSNavigationScheme = JSNavigationScheme; - static NavigationType = NavigationType; - - static defaultProps = { - useWebKit: true, - cacheEnabled: true, - originWhitelist: defaultOriginWhitelist, - useSharedProcessPool: true, - }; - - static isFileUploadSupported = async () => { - // no native implementation for iOS, depends only on permissions - return true; - }; - - state = { - viewState: this.props.startInLoadingState - ? WebViewState.LOADING - : WebViewState.IDLE, - lastErrorEvent: null, - }; - - webViewRef = React.createRef(); - - UNSAFE_componentWillMount() { - if (!this.props.useWebKit && !didWarnAboutUIWebViewUsage) { - didWarnAboutUIWebViewUsage = true; - console.warn( - 'UIWebView is deprecated and will be removed soon, please use WKWebView (do not override useWebkit={true} prop),' + - ' more infos here: https://github.com/react-native-community/react-native-webview/issues/312', - ); - } - if ( - this.props.useWebKit === true && - this.props.scalesPageToFit !== undefined - ) { - console.warn( - 'The scalesPageToFit property is not supported when useWebKit = true', - ); - } - if ( - !this.props.useWebKit && - this.props.allowsBackForwardNavigationGestures - ) { - console.warn( - 'The allowsBackForwardNavigationGestures property is not supported when useWebKit = false', - ); - } - - if (!this.props.useWebKit && this.props.incognito) { - console.warn( - 'The incognito property is not supported when useWebKit = false', - ); - } - } - - render() { - let otherView = null; - - let scalesPageToFit; - - if (this.props.useWebKit) { - ({ scalesPageToFit } = this.props); - } else { - ({ scalesPageToFit = true } = this.props); - } - - if (this.state.viewState === WebViewState.LOADING) { - otherView = (this.props.renderLoading || defaultRenderLoading)(); - } else if (this.state.viewState === WebViewState.ERROR) { - const errorEvent = this.state.lastErrorEvent; - invariant(errorEvent != null, 'lastErrorEvent expected to be non-null'); - otherView = (this.props.renderError || defaultRenderError)( - errorEvent.domain, - errorEvent.code, - errorEvent.description, - ); - } else if (this.state.viewState !== WebViewState.IDLE) { - console.error( - 'RNCWebView invalid state encountered: ' + this.state.viewState, - ); - } - - const webViewStyles = [styles.container, styles.webView, this.props.style]; - if ( - this.state.viewState === WebViewState.LOADING || - this.state.viewState === WebViewState.ERROR - ) { - // if we're in either LOADING or ERROR states, don't show the webView - webViewStyles.push(styles.hidden); - } - - const nativeConfig = this.props.nativeConfig || {}; - - const onShouldStartLoadWithRequest = createOnShouldStartLoadWithRequest( - this.onShouldStartLoadWithRequestCallback, - this.props.originWhitelist, - this.props.onShouldStartLoadWithRequest, - ); - - const decelerationRate = processDecelerationRate( - this.props.decelerationRate, - ); - - let source: WebViewSource = this.props.source || {}; - if (!this.props.source && this.props.html) { - source = { html: this.props.html }; - } else if (!this.props.source && this.props.url) { - source = { uri: this.props.url }; - } - - let NativeWebView = nativeConfig.component; - - if (this.props.useWebKit) { - NativeWebView = NativeWebView || RNCWKWebView; - } else { - NativeWebView = NativeWebView || RNCUIWebView; - } - - const webView = ( - - ); - - return ( - - {webView} - {otherView} - - ); - } - - _getViewManagerConfig = (viewManagerName: string) => { - if (!UIManager.getViewManagerConfig) { - return UIManager[viewManagerName]; - } - return UIManager.getViewManagerConfig(viewManagerName); - }; - - _getCommands = () => - !this.props.useWebKit - ? this._getViewManagerConfig('RNCUIWebView').Commands - : this._getViewManagerConfig('RNCWKWebView').Commands; - - /** - * Go forward one page in the web view's history. - */ - goForward = () => { - UIManager.dispatchViewManagerCommand( - this.getWebViewHandle(), - this._getCommands().goForward, - null, - ); - }; - - /** - * Go back one page in the web view's history. - */ - goBack = () => { - UIManager.dispatchViewManagerCommand( - this.getWebViewHandle(), - this._getCommands().goBack, - null, - ); - }; - - /** - * Reloads the current page. - */ - reload = () => { - this.setState({ viewState: WebViewState.LOADING }); - UIManager.dispatchViewManagerCommand( - this.getWebViewHandle(), - this._getCommands().reload, - null, - ); - }; - - /** - * Stop loading the current page. - */ - stopLoading = () => { - UIManager.dispatchViewManagerCommand( - this.getWebViewHandle(), - this._getCommands().stopLoading, - null, - ); - }; - - /** - * Posts a message to the web view, which will emit a `message` event. - * Accepts one argument, `data`, which must be a string. - * - * In your webview, you'll need to something like the following. - * - * ```js - * document.addEventListener('message', e => { document.title = e.data; }); - * ``` - */ - postMessage = (data: string) => { - UIManager.dispatchViewManagerCommand( - this.getWebViewHandle(), - this._getCommands().postMessage, - [String(data)], - ); - }; - - /** - * Injects a javascript string into the referenced WebView. Deliberately does not - * return a response because using eval() to return a response breaks this method - * on pages with a Content Security Policy that disallows eval(). If you need that - * functionality, look into postMessage/onMessage. - */ - injectJavaScript = (data: string) => { - UIManager.dispatchViewManagerCommand( - this.getWebViewHandle(), - this._getCommands().injectJavaScript, - [data], - ); - }; - - /** - * We return an event with a bunch of fields including: - * url, title, loading, canGoBack, canGoForward - */ - _updateNavigationState = (event: WebViewNavigationEvent) => { - if (this.props.onNavigationStateChange) { - this.props.onNavigationStateChange(event.nativeEvent); - } - }; - - /** - * Returns the native `WebView` node. - */ - getWebViewHandle = () => { - return findNodeHandle(this.webViewRef.current); - }; - - _onLoadingStart = (event: WebViewNavigationEvent) => { - const onLoadStart = this.props.onLoadStart; - onLoadStart && onLoadStart(event); - this._updateNavigationState(event); - }; - - _onLoadingError = (event: WebViewErrorEvent) => { - event.persist(); // persist this event because we need to store it - const { onError, onLoadEnd } = this.props; - onError && onError(event); - onLoadEnd && onLoadEnd(event); - console.warn('Encountered an error loading page', event.nativeEvent); - - this.setState({ - lastErrorEvent: event.nativeEvent, - viewState: WebViewState.ERROR, - }); - }; - - _onLoadingFinish = (event: WebViewNavigationEvent) => { - const { onLoad, onLoadEnd } = this.props; - onLoad && onLoad(event); - onLoadEnd && onLoadEnd(event); - this.setState({ - viewState: WebViewState.IDLE, - }); - this._updateNavigationState(event); - }; - - _onMessage = (event: WebViewMessageEvent) => { - const { onMessage } = this.props; - onMessage && onMessage(event); - }; - - _onLoadingProgress = (event: WebViewProgressEvent) => { - const { onLoadProgress } = this.props; - onLoadProgress && onLoadProgress(event); - }; - - onShouldStartLoadWithRequestCallback = ( - shouldStart: boolean, - url: string, - lockIdentifier: number, - ) => { - let viewManager = (this.props.nativeConfig || {}).viewManager; - - if (this.props.useWebKit) { - viewManager = viewManager || RNCWKWebViewManager; - } else { - viewManager = viewManager || RNCUIWebViewManager; - } - invariant(viewManager != null, 'viewManager expected to be non-null'); - viewManager.startLoadWithResult(!!shouldStart, lockIdentifier); - }; - - componentDidUpdate(prevProps: WebViewSharedProps) { - if (!(prevProps.useWebKit && this.props.useWebKit)) { - return; - } - - this._showRedboxOnPropChanges(prevProps, 'allowsInlineMediaPlayback'); - this._showRedboxOnPropChanges(prevProps, 'incognito'); - this._showRedboxOnPropChanges(prevProps, 'mediaPlaybackRequiresUserAction'); - this._showRedboxOnPropChanges(prevProps, 'dataDetectorTypes'); - - if (this.props.scalesPageToFit !== undefined) { - console.warn( - 'The scalesPageToFit property is not supported when useWebKit = true', - ); - } - } - - _showRedboxOnPropChanges(prevProps, propName: string) { - if (this.props[propName] !== prevProps[propName]) { - console.error( - `Changes to property ${propName} do nothing after the initial render.`, - ); - } - } -} - -const RNCUIWebView = requireNativeComponent('RNCUIWebView'); -const RNCWKWebView = requireNativeComponent('RNCWKWebView'); - -const styles = StyleSheet.create({ - container: { - flex: 1, - }, - errorContainer: { - flex: 1, - justifyContent: 'center', - alignItems: 'center', - backgroundColor: BGWASH, - }, - errorText: { - fontSize: 14, - textAlign: 'center', - marginBottom: 2, - }, - errorTextTitle: { - fontSize: 15, - fontWeight: '500', - marginBottom: 10, - }, - hidden: { - height: 0, - flex: 0, // disable 'flex:1' when hiding a View - }, - loadingView: { - backgroundColor: BGWASH, - flex: 1, - justifyContent: 'center', - alignItems: 'center', - height: 100, - }, - webView: { - backgroundColor: '#ffffff', - }, -}); - -module.exports = WebView; diff --git a/package.json b/package.json index 7663370..69cefd2 100644 --- a/package.json +++ b/package.json @@ -11,38 +11,58 @@ "version": "5.3.1", "homepage": "https://github.com/react-native-community/react-native-webview#readme", "scripts": { - "test:js": "jest", - "test:ios:flow": "flow check", - "test:android:flow": "flow check --flowconfig-name .flowconfig.android", + "ci": "CI=true && yarn lint && yarn test", "ci:publish": "yarn semantic-release", - "ci:test": "yarn ci:test:flow && yarn ci:test:js", - "ci:test:flow": "yarn test:ios:flow && yarn test:android:flow", - "ci:test:js": "yarn test:js", - "semantic-release": "semantic-release" + "lint": "yarn tsc --noEmit && yarn eslint ./src --ext .ts,.tsx", + "build": "yarn tsc", + "prepack": "yarn build", + "test": "yarn jest" }, "peerDependencies": { "react": "^16.0", - "react-native": ">=0.57 <0.59" + "react-native": ">=0.57 <0.60" }, "dependencies": { - "escape-string-regexp": "^1.0.5", - "fbjs": "^0.8.17" + "escape-string-regexp": "1.0.5", + "invariant": "2.2.4" }, "devDependencies": { - "@babel/core": "^7.2.2", + "@babel/core": "7.3.4", "@semantic-release/git": "7.0.5", - "@types/react": "^16.6.3", - "@types/react-native": "^0.57.8", + "@types/escape-string-regexp": "1.0.0", + "@types/invariant": "^2.2.29", + "@types/jest": "24.0.11", + "@types/react": "16.8.8", + "@types/react-native": "0.57.40", + "@typescript-eslint/eslint-plugin": "1.4.2", + "@typescript-eslint/parser": "1.4.2", + "babel-eslint": "10.0.1", "babel-jest": "^24.0.0", - "flow-bin": "^0.80.0", - "jest": "^24.0.0", - "metro-react-native-babel-preset": "^0.51.1", - "react": "16.6.3", - "react-native": "^0.57.8", - "semantic-release": "15.10.3" + "eslint": "5.15.1", + "eslint-config-airbnb": "17.1.0", + "eslint-config-prettier": "4.1.0", + "eslint-plugin-import": "2.16.0", + "eslint-plugin-jsx-a11y": "6.2.1", + "eslint-plugin-react": "7.12.4", + "eslint-plugin-react-native": "3.6.0", + "jest": "24.5.0", + "metro-react-native-babel-preset": "0.53.1", + "react": "16.8.3", + "react-native": "0.59.1", + "semantic-release": "15.10.3", + "ts-jest": "24.0.0", + "typescript": "3.3.3333" }, "repository": { "type": "git", "url": "https://github.com/react-native-community/react-native-webview.git" - } + }, + "files": [ + "android", + "ios", + "lib", + "index.js", + "index.d.ts", + "react-native-webview.podspec" + ] } diff --git a/src/WebView.android.tsx b/src/WebView.android.tsx new file mode 100644 index 0000000..94e25ca --- /dev/null +++ b/src/WebView.android.tsx @@ -0,0 +1,304 @@ +import React from 'react'; + +import { + ActivityIndicator, + Image, + requireNativeComponent, + UIManager as NotTypedUIManager, + View, + NativeModules, + ImageSourcePropType, + findNodeHandle, +} from 'react-native'; + +import invariant from 'invariant'; + +import { + defaultOriginWhitelist, + createOnShouldStartLoadWithRequest, + getViewManagerConfig, +} from './WebViewShared'; +import { + WebViewErrorEvent, + WebViewMessageEvent, + WebViewNavigationEvent, + WebViewProgressEvent, + AndroidWebViewProps, + NativeWebViewAndroid, + State, + CustomUIManager, +} from './WebViewTypes'; + +import styles from './WebView.styles'; + +const UIManager = NotTypedUIManager as CustomUIManager; + +const RNCWebView = requireNativeComponent( + 'RNCWebView', +) as typeof NativeWebViewAndroid; +const { resolveAssetSource } = Image; + +const defaultRenderLoading = () => ( + + + +); + +/** + * Renders a native WebView. + */ +class WebView extends React.Component { + static defaultProps = { + overScrollMode: 'always', + javaScriptEnabled: true, + thirdPartyCookiesEnabled: true, + scalesPageToFit: true, + allowFileAccess: false, + saveFormDataDisabled: false, + cacheEnabled: true, + androidHardwareAccelerationDisabled: false, + originWhitelist: defaultOriginWhitelist, + }; + + static isFileUploadSupported = async () => { + // native implementation should return "true" only for Android 5+ + return NativeModules.RNCWebView.isFileUploadSupported(); + }; + + state: State = { + viewState: this.props.startInLoadingState ? 'LOADING' : 'IDLE', + lastErrorEvent: null, + }; + + webViewRef = React.createRef(); + + getCommands = () => getViewManagerConfig('RNCWebView').Commands; + + goForward = () => { + UIManager.dispatchViewManagerCommand( + this.getWebViewHandle(), + this.getCommands().goForward, + null, + ); + }; + + goBack = () => { + UIManager.dispatchViewManagerCommand( + this.getWebViewHandle(), + this.getCommands().goBack, + null, + ); + }; + + reload = () => { + this.setState({ + viewState: 'LOADING', + }); + UIManager.dispatchViewManagerCommand( + this.getWebViewHandle(), + this.getCommands().reload, + null, + ); + }; + + stopLoading = () => { + UIManager.dispatchViewManagerCommand( + this.getWebViewHandle(), + this.getCommands().stopLoading, + null, + ); + }; + + postMessage = (data: string) => { + UIManager.dispatchViewManagerCommand( + this.getWebViewHandle(), + this.getCommands().postMessage, + [String(data)], + ); + }; + + /** + * Injects a javascript string into the referenced WebView. Deliberately does not + * return a response because using eval() to return a response breaks this method + * on pages with a Content Security Policy that disallows eval(). If you need that + * functionality, look into postMessage/onMessage. + */ + injectJavaScript = (data: string) => { + UIManager.dispatchViewManagerCommand( + this.getWebViewHandle(), + this.getCommands().injectJavaScript, + [data], + ); + }; + + /** + * We return an event with a bunch of fields including: + * url, title, loading, canGoBack, canGoForward + */ + updateNavigationState = (event: WebViewNavigationEvent) => { + if (this.props.onNavigationStateChange) { + this.props.onNavigationStateChange(event.nativeEvent); + } + }; + + /** + * Returns the native `WebView` node. + */ + getWebViewHandle = () => { + const nodeHandle = findNodeHandle(this.webViewRef.current); + invariant(nodeHandle != null, 'nodeHandle expected to be non-null'); + return nodeHandle as number; + }; + + onLoadingStart = (event: WebViewNavigationEvent) => { + const { onLoadStart } = this.props; + if (onLoadStart) { + onLoadStart(event); + } + this.updateNavigationState(event); + }; + + onLoadingError = (event: WebViewErrorEvent) => { + event.persist(); // persist this event because we need to store it + const { onError, onLoadEnd } = this.props; + if (onError) { + onError(event); + } + if (onLoadEnd) { + onLoadEnd(event); + } + console.warn('Encountered an error loading page', event.nativeEvent); + + this.setState({ + lastErrorEvent: event.nativeEvent, + viewState: 'ERROR', + }); + }; + + onLoadingFinish = (event: WebViewNavigationEvent) => { + const { onLoad, onLoadEnd } = this.props; + if (onLoad) { + onLoad(event); + } + if (onLoadEnd) { + onLoadEnd(event); + } + this.setState({ + viewState: 'IDLE', + }); + this.updateNavigationState(event); + }; + + onMessage = (event: WebViewMessageEvent) => { + const { onMessage } = this.props; + if (onMessage) { + onMessage(event); + } + }; + + onLoadingProgress = (event: WebViewProgressEvent) => { + const { onLoadProgress } = this.props; + if (onLoadProgress) { + onLoadProgress(event); + } + }; + + onShouldStartLoadWithRequestCallback = ( + shouldStart: boolean, + url: string, + ) => { + if (shouldStart) { + UIManager.dispatchViewManagerCommand( + this.getWebViewHandle(), + this.getCommands().loadUrl, + [String(url)], + ); + } + }; + + render() { + const { + onMessage, + onShouldStartLoadWithRequest: onShouldStartLoadWithRequestProp, + originWhitelist, + renderError, + renderLoading, + source, + style, + nativeConfig = {}, + ...otherProps + } = this.props; + let otherView = null; + + if (this.state.viewState === 'LOADING') { + otherView = (renderLoading || defaultRenderLoading)(); + } else if (this.state.viewState === 'ERROR') { + const errorEvent = this.state.lastErrorEvent; + invariant(errorEvent != null, 'lastErrorEvent expected to be non-null'); + otherView + = renderError + && renderError(errorEvent.domain, errorEvent.code, errorEvent.description); + } else if (this.state.viewState !== 'IDLE') { + console.error( + `RNCWebView invalid state encountered: ${this.state.viewState}`, + ); + } + + const webViewStyles = [styles.container, style]; + if ( + this.state.viewState === 'LOADING' + || this.state.viewState === 'ERROR' + ) { + // if we're in either LOADING or ERROR states, don't show the webView + webViewStyles.push(styles.hidden); + } + + if (source && 'method' in source) { + if (source.method === 'POST' && source.headers) { + console.warn( + 'WebView: `source.headers` is not supported when using POST.', + ); + } else if (source.method === 'GET' && source.body) { + console.warn('WebView: `source.body` is not supported when using GET.'); + } + } + + const NativeWebView + = (nativeConfig.component as typeof NativeWebViewAndroid) || RNCWebView; + + const onShouldStartLoadWithRequest = createOnShouldStartLoadWithRequest( + this.onShouldStartLoadWithRequestCallback, + // casting cause it's in the default props + originWhitelist as ReadonlyArray, + onShouldStartLoadWithRequestProp, + ); + + const webView = ( + + ); + + return ( + + {webView} + {otherView} + + ); + } +} + +export default WebView; diff --git a/src/WebView.ios.tsx b/src/WebView.ios.tsx new file mode 100644 index 0000000..77d4868 --- /dev/null +++ b/src/WebView.ios.tsx @@ -0,0 +1,422 @@ +import React from 'react'; +import { + ActivityIndicator, + Text, + UIManager as NotTypedUIManager, + View, + requireNativeComponent, + NativeModules, + Image, + findNodeHandle, + ImageSourcePropType, +} from 'react-native'; +import invariant from 'invariant'; + +import { + defaultOriginWhitelist, + createOnShouldStartLoadWithRequest, + getViewManagerConfig, +} from './WebViewShared'; +import { + WebViewErrorEvent, + WebViewMessageEvent, + WebViewNavigationEvent, + WebViewProgressEvent, + IOSWebViewProps, + DecelerationRateConstant, + NativeWebViewIOS, + ViewManager, + State, + CustomUIManager, + WebViewNativeConfig, +} from './WebViewTypes'; + +import styles from './WebView.styles'; + +const UIManager = NotTypedUIManager as CustomUIManager; + +const { resolveAssetSource } = Image; +let didWarnAboutUIWebViewUsage = false; +// Imported from https://github.com/facebook/react-native/blob/master/Libraries/Components/ScrollView/processDecelerationRate.js +const processDecelerationRate = ( + decelerationRate: DecelerationRateConstant | number | undefined, +) => { + let newDecelerationRate = decelerationRate; + if (newDecelerationRate === 'normal') { + newDecelerationRate = 0.998; + } else if (newDecelerationRate === 'fast') { + newDecelerationRate = 0.99; + } + return newDecelerationRate; +}; + +const RNCUIWebViewManager = NativeModules.RNCUIWebViewManager as ViewManager; +const RNCWKWebViewManager = NativeModules.RNCWKWebViewManager as ViewManager; + +const RNCUIWebView: typeof NativeWebViewIOS = requireNativeComponent( + 'RNCUIWebView', +); +const RNCWKWebView: typeof NativeWebViewIOS = requireNativeComponent( + 'RNCWKWebView', +); + +const defaultRenderLoading = () => ( + + + +); +const defaultRenderError = ( + errorDomain: string | undefined, + errorCode: number, + errorDesc: string, +) => ( + + Error loading page + {`Domain: ${errorDomain}`} + {`Error Code: ${errorCode}`} + {`Description: ${errorDesc}`} + +); + +class WebView extends React.Component { + static defaultProps = { + useWebKit: true, + cacheEnabled: true, + originWhitelist: defaultOriginWhitelist, + useSharedProcessPool: true, + }; + + static isFileUploadSupported = async () => { + // no native implementation for iOS, depends only on permissions + return true; + }; + + state: State = { + viewState: this.props.startInLoadingState ? 'LOADING' : 'IDLE', + lastErrorEvent: null, + }; + + webViewRef = React.createRef(); + + // eslint-disable-next-line camelcase + UNSAFE_componentWillMount() { + if (!this.props.useWebKit && !didWarnAboutUIWebViewUsage) { + didWarnAboutUIWebViewUsage = true; + console.warn( + 'UIWebView is deprecated and will be removed soon, please use WKWebView (do not override useWebkit={true} prop),' + + ' more infos here: https://github.com/react-native-community/react-native-webview/issues/312', + ); + } + if ( + this.props.useWebKit === true + && this.props.scalesPageToFit !== undefined + ) { + console.warn( + 'The scalesPageToFit property is not supported when useWebKit = true', + ); + } + if ( + !this.props.useWebKit + && this.props.allowsBackForwardNavigationGestures + ) { + console.warn( + 'The allowsBackForwardNavigationGestures property is not supported when useWebKit = false', + ); + } + + if (!this.props.useWebKit && this.props.incognito) { + console.warn( + 'The incognito property is not supported when useWebKit = false', + ); + } + } + + // eslint-disable-next-line react/sort-comp + getCommands = () => + !this.props.useWebKit + ? getViewManagerConfig('RNCUIWebView').Commands + : getViewManagerConfig('RNCWKWebView').Commands; + + /** + * Go forward one page in the web view's history. + */ + goForward = () => { + UIManager.dispatchViewManagerCommand( + this.getWebViewHandle(), + this.getCommands().goForward, + null, + ); + }; + + /** + * Go back one page in the web view's history. + */ + goBack = () => { + UIManager.dispatchViewManagerCommand( + this.getWebViewHandle(), + this.getCommands().goBack, + null, + ); + }; + + /** + * Reloads the current page. + */ + reload = () => { + this.setState({ viewState: 'LOADING' }); + UIManager.dispatchViewManagerCommand( + this.getWebViewHandle(), + this.getCommands().reload, + null, + ); + }; + + /** + * Stop loading the current page. + */ + stopLoading = () => { + UIManager.dispatchViewManagerCommand( + this.getWebViewHandle(), + this.getCommands().stopLoading, + null, + ); + }; + + /** + * Posts a message to the web view, which will emit a `message` event. + * Accepts one argument, `data`, which must be a string. + * + * In your webview, you'll need to something like the following. + * + * ```js + * document.addEventListener('message', e => { document.title = e.data; }); + * ``` + */ + postMessage = (data: string) => { + UIManager.dispatchViewManagerCommand( + this.getWebViewHandle(), + this.getCommands().postMessage, + [String(data)], + ); + }; + + /** + * Injects a javascript string into the referenced WebView. Deliberately does not + * return a response because using eval() to return a response breaks this method + * on pages with a Content Security Policy that disallows eval(). If you need that + * functionality, look into postMessage/onMessage. + */ + injectJavaScript = (data: string) => { + UIManager.dispatchViewManagerCommand( + this.getWebViewHandle(), + this.getCommands().injectJavaScript, + [data], + ); + }; + + /** + * We return an event with a bunch of fields including: + * url, title, loading, canGoBack, canGoForward + */ + updateNavigationState = (event: WebViewNavigationEvent) => { + if (this.props.onNavigationStateChange) { + this.props.onNavigationStateChange(event.nativeEvent); + } + }; + + /** + * Returns the native `WebView` node. + */ + getWebViewHandle = () => { + const nodeHandle = findNodeHandle(this.webViewRef.current); + invariant(nodeHandle != null, 'nodeHandle expected to be non-null'); + return nodeHandle as number; + }; + + onLoadingStart = (event: WebViewNavigationEvent) => { + const { onLoadStart } = this.props; + if (onLoadStart) { + onLoadStart(event); + } + this.updateNavigationState(event); + }; + + onLoadingError = (event: WebViewErrorEvent) => { + event.persist(); // persist this event because we need to store it + const { onError, onLoadEnd } = this.props; + if (onLoadEnd) { + onLoadEnd(event); + } + if (onError) { + onError(event); + } + console.warn('Encountered an error loading page', event.nativeEvent); + + this.setState({ + lastErrorEvent: event.nativeEvent, + viewState: 'ERROR', + }); + }; + + onLoadingFinish = (event: WebViewNavigationEvent) => { + const { onLoad, onLoadEnd } = this.props; + if (onLoad) { + onLoad(event); + } + if (onLoadEnd) { + onLoadEnd(event); + } + this.setState({ + viewState: 'IDLE', + }); + this.updateNavigationState(event); + }; + + onMessage = (event: WebViewMessageEvent) => { + const { onMessage } = this.props; + if (onMessage) { + onMessage(event); + } + }; + + onLoadingProgress = (event: WebViewProgressEvent) => { + const { onLoadProgress } = this.props; + if (onLoadProgress) { + onLoadProgress(event); + } + }; + + onShouldStartLoadWithRequestCallback = ( + shouldStart: boolean, + _url: string, + lockIdentifier: number, + ) => { + let { viewManager }: WebViewNativeConfig = this.props.nativeConfig || {}; + + if (this.props.useWebKit) { + viewManager = viewManager || RNCWKWebViewManager; + } else { + viewManager = viewManager || RNCUIWebViewManager; + } + invariant(viewManager != null, 'viewManager expected to be non-null'); + viewManager.startLoadWithResult(!!shouldStart, lockIdentifier); + }; + + componentDidUpdate(prevProps: IOSWebViewProps) { + if (!(prevProps.useWebKit && this.props.useWebKit)) { + return; + } + + this.showRedboxOnPropChanges(prevProps, 'allowsInlineMediaPlayback'); + this.showRedboxOnPropChanges(prevProps, 'incognito'); + this.showRedboxOnPropChanges(prevProps, 'mediaPlaybackRequiresUserAction'); + this.showRedboxOnPropChanges(prevProps, 'dataDetectorTypes'); + + if (this.props.scalesPageToFit !== undefined) { + console.warn( + 'The scalesPageToFit property is not supported when useWebKit = true', + ); + } + } + + showRedboxOnPropChanges( + prevProps: IOSWebViewProps, + propName: keyof IOSWebViewProps, + ) { + if (this.props[propName] !== prevProps[propName]) { + console.error( + `Changes to property ${propName} do nothing after the initial render.`, + ); + } + } + + render() { + const { + decelerationRate: decelerationRateProp, + nativeConfig = {}, + onMessage, + onShouldStartLoadWithRequest: onShouldStartLoadWithRequestProp, + originWhitelist, + renderError, + renderLoading, + scalesPageToFit = this.props.useWebKit ? undefined : true, + style, + useWebKit, + ...otherProps + } = this.props; + + let otherView = null; + + if (this.state.viewState === 'LOADING') { + otherView = (renderLoading || defaultRenderLoading)(); + } else if (this.state.viewState === 'ERROR') { + const errorEvent = this.state.lastErrorEvent; + invariant(errorEvent != null, 'lastErrorEvent expected to be non-null'); + otherView = (renderError || defaultRenderError)( + errorEvent.domain, + errorEvent.code, + errorEvent.description, + ); + } else if (this.state.viewState !== 'IDLE') { + console.error( + `RNCWebView invalid state encountered: ${this.state.viewState}`, + ); + } + + const webViewStyles = [styles.container, styles.webView, style]; + if ( + this.state.viewState === 'LOADING' + || this.state.viewState === 'ERROR' + ) { + // if we're in either LOADING or ERROR states, don't show the webView + webViewStyles.push(styles.hidden); + } + + const onShouldStartLoadWithRequest = createOnShouldStartLoadWithRequest( + this.onShouldStartLoadWithRequestCallback, + // casting cause it's in the default props + originWhitelist as ReadonlyArray, + onShouldStartLoadWithRequestProp, + ); + + const decelerationRate = processDecelerationRate(decelerationRateProp); + + let NativeWebView = nativeConfig.component as typeof NativeWebViewIOS; + + if (useWebKit) { + NativeWebView = NativeWebView || RNCWKWebView; + } else { + NativeWebView = NativeWebView || RNCUIWebView; + } + + const webView = ( + + ); + + return ( + + {webView} + {otherView} + + ); + } +} + +export default WebView; diff --git a/src/WebView.styles.ts b/src/WebView.styles.ts new file mode 100644 index 0000000..eaa9692 --- /dev/null +++ b/src/WebView.styles.ts @@ -0,0 +1,53 @@ +import { StyleSheet, ViewStyle, TextStyle } from 'react-native'; + +interface Styles { + container: ViewStyle; + errorContainer: ViewStyle; + errorText: TextStyle; + errorTextTitle: TextStyle; + hidden: ViewStyle; + loadingView: ViewStyle; + webView: ViewStyle; + loadingProgressBar: ViewStyle; +} + +const BGWASH = 'rgba(255,255,255,0.8)'; + +const styles = StyleSheet.create({ + container: { + flex: 1, + }, + errorContainer: { + flex: 1, + justifyContent: 'center', + alignItems: 'center', + backgroundColor: BGWASH, + }, + hidden: { + height: 0, + flex: 0, // disable 'flex:1' when hiding a View + }, + loadingView: { + flex: 1, + justifyContent: 'center', + alignItems: 'center', + }, + loadingProgressBar: { + height: 20, + }, + errorText: { + fontSize: 14, + textAlign: 'center', + marginBottom: 2, + }, + errorTextTitle: { + fontSize: 15, + fontWeight: '500', + marginBottom: 10, + }, + webView: { + backgroundColor: '#ffffff', + }, +}); + +export default styles; diff --git a/src/WebView.tsx b/src/WebView.tsx new file mode 100644 index 0000000..4cf2da7 --- /dev/null +++ b/src/WebView.tsx @@ -0,0 +1,5 @@ +// This files provides compatibility with out out tree platform. +import { WebView } from 'react-native'; + +export { WebView }; +export default WebView; diff --git a/js/WebViewShared.js b/src/WebViewShared.ts similarity index 54% rename from js/WebViewShared.js rename to src/WebViewShared.ts index 323ec7c..6c240d8 100644 --- a/js/WebViewShared.js +++ b/src/WebViewShared.ts @@ -1,39 +1,34 @@ -/** - * Copyright (c) 2015-present, Facebook, Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @format - * @flow - */ - import escapeStringRegexp from 'escape-string-regexp'; -import { Linking } from 'react-native'; -import type { +import { Linking, UIManager as NotTypedUIManager } from 'react-native'; +import { WebViewNavigationEvent, - WebViewNavigation, OnShouldStartLoadWithRequest, + CustomUIManager, } from './WebViewTypes'; +const UIManager = NotTypedUIManager as CustomUIManager; + const defaultOriginWhitelist = ['http://*', 'https://*']; const extractOrigin = (url: string): string => { - const result = /^[A-Za-z][A-Za-z0-9\+\-\.]+:(\/\/)?[^/]*/.exec(url); + const result = /^[A-Za-z][A-Za-z0-9+\-.]+:(\/\/)?[^/]*/.exec(url); return result === null ? '' : result[0]; }; const originWhitelistToRegex = (originWhitelist: string): string => - `^${escapeStringRegexp(originWhitelist).replace(/\\\*/g, '.*')}`; + `^${escapeStringRegexp(originWhitelist).replace(/\\\*/g, '.*')}`; -const passesWhitelist = (compiledWhitelist: Array, url: string) => { +const passesWhitelist = ( + compiledWhitelist: ReadonlyArray, + url: string, +) => { const origin = extractOrigin(url); return compiledWhitelist.some(x => new RegExp(x).test(origin)); }; const compileWhitelist = ( - originWhitelist: ?$ReadOnlyArray, -): Array => + originWhitelist: ReadonlyArray, +): ReadonlyArray => ['about:blank', ...(originWhitelist || [])].map(originWhitelistToRegex); const createOnShouldStartLoadWithRequest = ( @@ -42,8 +37,8 @@ const createOnShouldStartLoadWithRequest = ( url: string, lockIdentifier: number, ) => void, - originWhitelist: ?$ReadOnlyArray, - onShouldStartLoadWithRequest: ?OnShouldStartLoadWithRequest, + originWhitelist: ReadonlyArray, + onShouldStartLoadWithRequest?: OnShouldStartLoadWithRequest, ) => { return ({ nativeEvent }: WebViewNavigationEvent) => { let shouldStart = true; @@ -51,7 +46,7 @@ const createOnShouldStartLoadWithRequest = ( if (!passesWhitelist(compileWhitelist(originWhitelist), url)) { Linking.openURL(url); - shouldStart = false + shouldStart = false; } if (onShouldStartLoadWithRequest) { @@ -62,4 +57,17 @@ const createOnShouldStartLoadWithRequest = ( }; }; -export { defaultOriginWhitelist, createOnShouldStartLoadWithRequest }; +const getViewManagerConfig = ( + viewManagerName: 'RNCUIWebView' | 'RNCWKWebView' | 'RNCWebView', +) => { + if (!UIManager.getViewManagerConfig) { + return UIManager[viewManagerName]; + } + return UIManager.getViewManagerConfig(viewManagerName); +}; + +export { + defaultOriginWhitelist, + createOnShouldStartLoadWithRequest, + getViewManagerConfig, +}; diff --git a/js/WebViewTypes.js b/src/WebViewTypes.ts similarity index 58% rename from js/WebViewTypes.js rename to src/WebViewTypes.ts index f7307b8..2ef5eb7 100644 --- a/js/WebViewTypes.js +++ b/src/WebViewTypes.ts @@ -1,72 +1,135 @@ -/** - * Copyright (c) 2015-present, Facebook, Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @format - * @flow - */ +/* eslint-disable react/no-multi-comp */ -'use strict'; +import { ReactElement, Component } from 'react'; +import { + NativeSyntheticEvent, + ViewProps, + NativeMethodsMixin, + Constructor, + UIManagerStatic, +} from 'react-native'; -import type { Node, Element, ComponentType } from 'react'; +export interface WebViewCommands { + goForward: Function; + goBack: Function; + reload: Function; + stopLoading: Function; + postMessage: Function; + injectJavaScript: Function; + loadUrl: Function; +} -import type { SyntheticEvent } from 'CoreEventTypes'; -import type { EdgeInsetsProp } from 'EdgeInsetsPropType'; -import type { ViewStyleProp } from 'StyleSheet'; -import type { ViewProps } from 'ViewPropTypes'; +export interface CustomUIManager extends UIManagerStatic { + getViewManagerConfig?: ( + name: string, + ) => { + Commands: WebViewCommands; + }; + dispatchViewManagerCommand: ( + viewHandle: number, + command: Function, + params: object | null, + ) => void; + RNCUIWebView: { + Commands: WebViewCommands; + }; + RNCWKWebView: { + Commands: WebViewCommands; + }; + RNCWebView: { + Commands: WebViewCommands; + }; +} -export type WebViewNativeEvent = $ReadOnly<{| - url: string, - loading: boolean, - title: string, - canGoBack: boolean, - canGoForward: boolean, - lockIdentifier: number, -|}>; +type WebViewState = 'IDLE' | 'LOADING' | 'ERROR'; -export type WebViewProgressEvent = $ReadOnly<{| - ...WebViewNativeEvent, - progress: number, -|}>; +interface BaseState { + viewState: WebViewState; +} -export type WebViewNavigation = $ReadOnly<{| - ...WebViewNativeEvent, +interface NormalState extends BaseState { + viewState: 'IDLE' | 'LOADING'; + lastErrorEvent: WebViewError | null; +} + +interface ErrorState extends BaseState { + viewState: 'ERROR'; + lastErrorEvent: WebViewError; +} + +export type State = NormalState | ErrorState; + +// eslint-disable-next-line react/prefer-stateless-function +declare class NativeWebViewIOSComponent extends Component< + IOSNativeWebViewProps +> {} +declare const NativeWebViewIOSBase: Constructor & + typeof NativeWebViewIOSComponent; +export class NativeWebViewIOS extends NativeWebViewIOSBase {} + +// eslint-disable-next-line react/prefer-stateless-function +declare class NativeWebViewAndroidComponent extends Component< + AndroidNativeWebViewProps +> {} +declare const NativeWebViewAndroidBase: Constructor & + typeof NativeWebViewAndroidComponent; +export class NativeWebViewAndroid extends NativeWebViewAndroidBase {} + +export interface ContentInsetProp { + top?: number; + left?: number; + bottom?: number; + right?: number; +} + +export interface WebViewNativeEvent { + url: string; + loading: boolean; + title: string; + canGoBack: boolean; + canGoForward: boolean; + lockIdentifier: number; +} + +export interface WebViewProgressEvent extends WebViewNativeEvent { + progress: number; +} + +export interface WebViewNavigation extends WebViewNativeEvent { navigationType: | 'click' | 'formsubmit' | 'backforward' | 'reload' | 'formresubmit' - | 'other', -|}>; + | 'other'; +} -export type WebViewMessage = $ReadOnly<{| - ...WebViewNativeEvent, - data: string, -|}>; +export type DecelerationRateConstant = 'normal' | 'fast'; -export type WebViewError = $ReadOnly<{| - ...WebViewNativeEvent, +export interface WebViewMessage extends WebViewNativeEvent { + data: string; +} + +export interface WebViewError extends WebViewNativeEvent { /** * `domain` is only used on iOS */ - domain: ?string, - code: number, - description: string, -|}>; + domain?: string; + code: number; + description: string; +} -export type WebViewEvent = SyntheticEvent; +export type WebViewEvent = NativeSyntheticEvent; -export type WebViewNavigationEvent = SyntheticEvent; +export type WebViewNavigationEvent = NativeSyntheticEvent; -export type WebViewMessageEvent = SyntheticEvent; +export type WebViewMessageEvent = NativeSyntheticEvent; -export type WebViewErrorEvent = SyntheticEvent; +export type WebViewErrorEvent = NativeSyntheticEvent; -export type DataDetectorTypes = - | 'phoneNumber' +export type DataDetectorTypes + = | 'phoneNumber' | 'link' | 'address' | 'calendarEvent' @@ -78,23 +141,23 @@ export type DataDetectorTypes = export type OverScrollModeType = 'always' | 'content' | 'never'; -export type WebViewSourceUri = $ReadOnly<{| +export interface WebViewSourceUri { /** * The URI to load in the `WebView`. Can be a local or remote file. */ - uri?: ?string, + uri: string; /** * The HTTP Method to use. Defaults to GET if not specified. * NOTE: On Android, only GET and POST are supported. */ - method?: string, + method?: string; /** * Additional HTTP headers to send with the request. * NOTE: On Android, this can only be used with GET requests. */ - headers?: Object, + headers?: Object; /** * The HTTP body to send with the request. This must be a valid @@ -102,56 +165,117 @@ export type WebViewSourceUri = $ReadOnly<{| * additional encoding (e.g. URL-escaping or base64) applied. * NOTE: On Android, this can only be used with POST requests. */ - body?: string, -|}>; + body?: string; +} -export type WebViewSourceHtml = $ReadOnly<{| +export interface WebViewSourceHtml { /** * A static HTML page to display in the WebView. */ - html?: ?string, + html: string; /** * The base URL to be used for any relative links in the HTML. */ - baseUrl?: ?string, -|}>; + baseUrl: string; +} export type WebViewSource = WebViewSourceUri | WebViewSourceHtml; -export type WebViewNativeConfig = $ReadOnly<{| +export interface ViewManager { + startLoadWithResult: Function; +} + +export interface WebViewNativeConfig { /** * The native component used to render the WebView. */ - component?: ComponentType, + component?: typeof NativeWebViewIOS | typeof NativeWebViewAndroid; /** * Set props directly on the native component WebView. Enables custom props which the * original WebView doesn't pass through. */ - props?: ?Object, + props?: Object; /** * Set the ViewManager to use for communication with the native side. * @platform ios */ - viewManager?: ?Object, -|}>; + viewManager?: ViewManager; +} export type OnShouldStartLoadWithRequest = ( event: WebViewNavigation, ) => boolean; -export type IOSWebViewProps = $ReadOnly<{| +export interface CommonNativeWebViewProps extends ViewProps { + cacheEnabled?: boolean; + injectedJavaScript?: string; + mediaPlaybackRequiresUserAction?: boolean; + messagingEnabled: boolean; + onLoadingError: (event: WebViewErrorEvent) => void; + onLoadingFinish: (event: WebViewNavigationEvent) => void; + onLoadingProgress: (event: WebViewProgressEvent) => void; + onLoadingStart: (event: WebViewNavigationEvent) => void; + onMessage: (event: WebViewMessageEvent) => void; + onShouldStartLoadWithRequest: (event: WebViewNavigationEvent) => void; + scalesPageToFit?: boolean; + showsHorizontalScrollIndicator?: boolean; + showsVerticalScrollIndicator?: boolean; + // TODO: find a better way to type this. + // eslint-disable-next-line @typescript-eslint/no-explicit-any + source: any; + userAgent?: string; +} + +export interface AndroidNativeWebViewProps extends CommonNativeWebViewProps { + allowFileAccess?: boolean; + allowUniversalAccessFromFileURLs?: boolean; + androidHardwareAccelerationDisabled?: boolean; + domStorageEnabled?: boolean; + geolocationEnabled?: boolean; + javaScriptEnabled?: boolean; + mixedContentMode?: 'never' | 'always' | 'compatibility'; + onContentSizeChange?: (event: WebViewEvent) => void; + overScrollMode?: OverScrollModeType; + saveFormDataDisabled?: boolean; + thirdPartyCookiesEnabled?: boolean; + urlPrefixesForDefaultIntent?: ReadonlyArray; +} + +export interface IOSNativeWebViewProps extends CommonNativeWebViewProps { + allowsBackForwardNavigationGestures?: boolean; + allowsInlineMediaPlayback?: boolean; + allowsLinkPreview?: boolean; + automaticallyAdjustContentInsets?: boolean; + bounces?: boolean; + contentInset?: ContentInsetProp; + dataDetectorTypes?: DataDetectorTypes | ReadonlyArray; + decelerationRate?: number; + directionalLockEnabled?: boolean; + hideKeyboardAccessoryView?: boolean; + incognito?: boolean; + pagingEnabled?: boolean; + scrollEnabled?: boolean; + useSharedProcessPool?: boolean; +} + +export interface IOSWebViewProps extends WebViewSharedProps { /** * If true, use WKWebView instead of UIWebView. * @platform ios */ - useWebKit?: ?boolean, + useWebKit?: boolean; + + /** + * Does not store any data within the lifetime of the WebView. + */ + incognito?: boolean; /** * Boolean value that determines whether the web view bounces * when it reaches the edge of the content. The default value is `true`. * @platform ios */ - bounces?: ?boolean, + bounces?: boolean; /** * A floating-point number that determines how quickly the scroll view @@ -164,14 +288,14 @@ export type IOSWebViewProps = $ReadOnly<{| * - fast: 0.99 (the default for iOS web view) * @platform ios */ - decelerationRate?: ?('fast' | 'normal' | number), + decelerationRate?: DecelerationRateConstant | number; /** * Boolean value that determines whether scrolling is enabled in the * `WebView`. The default value is `true`. * @platform ios */ - scrollEnabled?: ?boolean, + scrollEnabled?: boolean; /** * If the value of this property is true, the scroll view stops on multiples @@ -179,14 +303,22 @@ export type IOSWebViewProps = $ReadOnly<{| * The default value is false. * @platform ios */ - pagingEnabled?: ?boolean, + pagingEnabled?: boolean; + + /** + * Controls whether to adjust the content inset for web views that are + * placed behind a navigation bar, tab bar, or toolbar. The default value + * is `true`. + * @platform ios + */ + automaticallyAdjustContentInsets?: boolean; /** * The amount by which the web view content is inset from the edges of * the scroll view. Defaults to {top: 0, left: 0, bottom: 0, right: 0}. * @platform ios */ - contentInset?: ?EdgeInsetsProp, + contentInset?: ContentInsetProp; /** * Determines the types of data converted to clickable URLs in the web view's content. @@ -210,7 +342,7 @@ export type IOSWebViewProps = $ReadOnly<{| * * @platform ios */ - dataDetectorTypes?: ?DataDetectorTypes | $ReadOnlyArray, + dataDetectorTypes?: DataDetectorTypes | ReadonlyArray; /** * Boolean that determines whether HTML5 videos play inline or use the @@ -221,28 +353,28 @@ export type IOSWebViewProps = $ReadOnly<{| * document must also include the `webkit-playsinline` attribute. * @platform ios */ - allowsInlineMediaPlayback?: ?boolean, + allowsInlineMediaPlayback?: boolean; /** * Hide the accessory view when the keyboard is open. Default is false to be * backward compatible. */ - hideKeyboardAccessoryView?: ?boolean, + hideKeyboardAccessoryView?: boolean; /** * A Boolean value indicating whether horizontal swipe gestures will trigger * back-forward list navigations. */ - allowsBackForwardNavigationGestures?: ?boolean, + allowsBackForwardNavigationGestures?: boolean; /** * A Boolean value indicating whether WebKit WebView should be created using a shared * process pool, enabling WebViews to share cookies and localStorage between each other. * Default is true but can be set to false for backwards compatibility. * @platform ios */ - useSharedProcessPool?: ?boolean, + useSharedProcessPool?: boolean; /** * The custom user agent string. */ - userAgent?: ?string, + userAgent?: string; /** * A Boolean value that determines whether pressing on a link @@ -252,19 +384,19 @@ export type IOSWebViewProps = $ReadOnly<{| * In iOS 10 and later, the default value is `true`; before that, the default value is `false`. * @platform ios */ - allowsLinkPreview?: ?boolean, + allowsLinkPreview?: boolean; /** * A Boolean value that determines whether scrolling is disabled in a particular direction. * The default value is `true`. * @platform ios */ - directionalLockEnabled?: ?boolean, -|}>; + directionalLockEnabled?: boolean; +} -export type AndroidWebViewProps = $ReadOnly<{| - onNavigationStateChange?: (event: WebViewNavigation) => mixed, - onContentSizeChange?: (event: WebViewEvent) => mixed, +export interface AndroidWebViewProps extends WebViewSharedProps { + onNavigationStateChange?: (event: WebViewNavigation) => void; + onContentSizeChange?: (event: WebViewEvent) => void; /** * https://developer.android.com/reference/android/view/View#OVER_SCROLL_NEVER @@ -276,13 +408,13 @@ export type AndroidWebViewProps = $ReadOnly<{| * * @platform android */ - overScrollMode?: ?OverScrollModeType, + overScrollMode?: OverScrollModeType; /** * Sets whether Geolocation is enabled. The default is false. * @platform android */ - geolocationEnabled?: ?boolean, + geolocationEnabled?: boolean; /** * Boolean that sets whether JavaScript running in the context of a file @@ -290,19 +422,19 @@ export type AndroidWebViewProps = $ReadOnly<{| * Including accessing content from other file scheme URLs * @platform android */ - allowUniversalAccessFromFileURLs?: ?boolean, + allowUniversalAccessFromFileURLs?: boolean; /** * Sets whether the webview allow access to file system. * @platform android */ - allowFileAccess?: ?boolean, + allowFileAccess?: boolean; /** * Used on Android only, controls whether form autocomplete data should be saved * @platform android */ - saveFormDataDisabled?: ?boolean, + saveFormDataDisabled?: boolean; /** * Used on Android only, controls whether the given list of URL prefixes should @@ -311,21 +443,21 @@ export type AndroidWebViewProps = $ReadOnly<{| * Use this to list URLs that WebView cannot handle, e.g. a PDF url. * @platform android */ - urlPrefixesForDefaultIntent?: $ReadOnlyArray, + urlPrefixesForDefaultIntent?: ReadonlyArray; /** * Boolean value to enable JavaScript in the `WebView`. Used on Android only * as JavaScript is enabled by default on iOS. The default value is `true`. * @platform android */ - javaScriptEnabled?: ?boolean, + javaScriptEnabled?: boolean; /** * Boolean value to disable Hardware Acceleration in the `WebView`. Used on Android only * as Hardware Acceleration is a feature only for Android. The default value is `false`. * @platform android */ - androidHardwareAccelerationDisabled?: ?boolean, + androidHardwareAccelerationDisabled?: boolean; /** * Boolean value to enable third party cookies in the `WebView`. Used on @@ -333,20 +465,20 @@ export type AndroidWebViewProps = $ReadOnly<{| * default on Android Kitkat and below and on iOS. The default value is `true`. * @platform android */ - thirdPartyCookiesEnabled?: ?boolean, + thirdPartyCookiesEnabled?: boolean; /** * Boolean value to control whether DOM Storage is enabled. Used only in * Android. * @platform android */ - domStorageEnabled?: ?boolean, + domStorageEnabled?: boolean; /** * Sets the user-agent for the `WebView`. * @platform android */ - userAgent?: ?string, + userAgent?: string; /** * Specifies the mixed content mode. i.e WebView will allow a secure origin to load content from any other origin. @@ -358,77 +490,53 @@ export type AndroidWebViewProps = $ReadOnly<{| * - `'compatibility'` - WebView will attempt to be compatible with the approach of a modern web browser with regard to mixed content. * @platform android */ - mixedContentMode?: ?('never' | 'always' | 'compatibility'), -|}>; - -export type WebViewSharedProps = $ReadOnly<{| - ...ViewProps, - ...IOSWebViewProps, - ...AndroidWebViewProps, - /** - * Deprecated. Use `source` instead. - */ - url?: ?string, - /** - * Deprecated. Use `source` instead. - */ - html?: ?string, + mixedContentMode?: 'never' | 'always' | 'compatibility'; +} +export interface WebViewSharedProps extends ViewProps { /** * Loads static html or a uri (with optional headers) in the WebView. */ - source?: ?WebViewSource, - - /** - * Does not store any data within the lifetime of the WebView. - */ - incognito?: ?boolean, + source?: WebViewSource; /** * Function that returns a view to show if there's an error. */ - renderError: ( - errorDomain: ?string, + renderError?: ( + errorDomain: string | undefined, errorCode: number, errorDesc: string, - ) => Element, // view to show if there's an error + ) => ReactElement; // view to show if there's an error /** * Function that returns a loading indicator. */ - renderLoading: () => Element, + renderLoading?: () => ReactElement; /** * Function that is invoked when the `WebView` has finished loading. */ - onLoad: (event: WebViewNavigationEvent) => mixed, + onLoad?: (event: WebViewNavigationEvent) => void; /** * Function that is invoked when the `WebView` load succeeds or fails. */ - onLoadEnd: (event: WebViewNavigationEvent | WebViewErrorEvent) => mixed, + onLoadEnd?: (event: WebViewNavigationEvent | WebViewErrorEvent) => void; /** * Function that is invoked when the `WebView` starts loading. */ - onLoadStart: (event: WebViewNavigationEvent) => mixed, + onLoadStart?: (event: WebViewNavigationEvent) => void; /** * Function that is invoked when the `WebView` load fails. */ - onError: (event: WebViewErrorEvent) => mixed, - - /** - * Controls whether to adjust the content inset for web views that are - * placed behind a navigation bar, tab bar, or toolbar. The default value - * is `true`. - */ - automaticallyAdjustContentInsets?: ?boolean, + onError?: (event: WebViewErrorEvent) => void; /** * Function that is invoked when the `WebView` loading starts or ends. */ - onNavigationStateChange?: (event: WebViewNavigation) => mixed, + onNavigationStateChange?: (event: WebViewNavigation) => void; /** * Function that is invoked when the webview calls `window.ReactNativeWebView.postMessage`. @@ -437,36 +545,36 @@ export type WebViewSharedProps = $ReadOnly<{| * `window.ReactNativeWebView.postMessage` accepts one argument, `data`, which will be * available on the event object, `event.nativeEvent.data`. `data` must be a string. */ - onMessage?: (event: WebViewMessageEvent) => mixed, + onMessage?: (event: WebViewMessageEvent) => void; /** * Function that is invoked when the `WebView` is loading. */ - onLoadProgress?: (event: WebViewProgressEvent) => mixed, + onLoadProgress?: (event: WebViewProgressEvent) => void; /** * Boolean value that forces the `WebView` to show the loading view * on the first load. */ - startInLoadingState?: ?boolean, + startInLoadingState?: boolean; /** * Set this to provide JavaScript that will be injected into the web page * when the view loads. */ - injectedJavaScript?: ?string, + injectedJavaScript?: string; /** * Boolean value that determines whether a horizontal scroll indicator is * shown in the `WebView`. The default value is `true`. */ - showsHorizontalScrollIndicator?: ?boolean, + showsHorizontalScrollIndicator?: boolean; /** * Boolean value that determines whether a vertical scroll indicator is * shown in the `WebView`. The default value is `true`. */ - showsVerticalScrollIndicator?: ?boolean, + showsVerticalScrollIndicator?: boolean; /** * Boolean that controls whether the web content is scaled to fit @@ -475,13 +583,13 @@ export type WebViewSharedProps = $ReadOnly<{| * * On iOS, when `useWebKit=true`, this prop will not work. */ - scalesPageToFit?: ?boolean, + scalesPageToFit?: boolean; /** * Boolean that determines whether HTML5 audio and video requires the user * to tap them before they start playing. The default value is `true`. */ - mediaPlaybackRequiresUserAction?: ?boolean, + mediaPlaybackRequiresUserAction?: boolean; /** * List of origin strings to allow being navigated to. The strings allow @@ -490,26 +598,23 @@ export type WebViewSharedProps = $ReadOnly<{| * this whitelist, we will open the URL in Safari. * The default whitelisted origins are "http://*" and "https://*". */ - originWhitelist?: $ReadOnlyArray, + originWhitelist?: ReadonlyArray; /** * Function that allows custom handling of any web view requests. Return * `true` from the function to continue loading the request and `false` * to stop loading. The `navigationType` is always `other` on android. */ - onShouldStartLoadWithRequest?: OnShouldStartLoadWithRequest, + onShouldStartLoadWithRequest?: OnShouldStartLoadWithRequest; /** * Override the native component used to render the WebView. Enables a custom native * WebView which uses the same JavaScript as the original WebView. */ - nativeConfig?: ?WebViewNativeConfig, + nativeConfig?: WebViewNativeConfig; /** * Should caching be enabled. Default is true. */ - cacheEnabled?: ?boolean, - - style?: ViewStyleProp, - children: Node, -|}>; + cacheEnabled?: boolean; +} diff --git a/js/__tests__/WebViewShared-test.js b/src/__tests__/WebViewShared-test.js similarity index 100% rename from js/__tests__/WebViewShared-test.js rename to src/__tests__/WebViewShared-test.js diff --git a/js/__tests__/__snapshots__/WebViewShared-test.js.snap b/src/__tests__/__snapshots__/WebViewShared-test.js.snap similarity index 100% rename from js/__tests__/__snapshots__/WebViewShared-test.js.snap rename to src/__tests__/__snapshots__/WebViewShared-test.js.snap diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..b0f8a48 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,24 @@ +{ + "include": ["src/*"], + "compilerOptions": { + "baseUrl": "./src/", + "jsx": "react-native", + "module": "esnext", + "moduleResolution": "node", + "lib": ["es2017"], + "declaration": true, + "declarationMap": true, + "outDir": "lib", + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "noFallthroughCasesInSwitch": true, + "noImplicitReturns": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "pretty": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "strict": true + } +} diff --git a/typings/index.d.ts b/typings/index.d.ts deleted file mode 100644 index 1d0c69e..0000000 --- a/typings/index.d.ts +++ /dev/null @@ -1,483 +0,0 @@ -import { ComponentType, ReactElement, ReactNode, Component } from 'react'; -import { Insets, NativeSyntheticEvent, StyleProp, ViewProps, ViewStyle } from 'react-native'; - -export interface WebViewNativeEvent { - readonly url: string; - readonly loading: boolean; - readonly title: string; - readonly canGoBack: boolean; - readonly canGoForward: boolean; -} - -export interface WebViewIOSLoadRequestEvent extends WebViewNativeEvent { - target: number; - lockIdentifier: number; - navigationType: "click" | "formsubmit" | "backforward" | "reload" | "formresubmit" | "other"; -} - -export interface WebViewProgressEvent extends WebViewNativeEvent { - readonly progress: number; -} - -export interface WebViewNavigation extends WebViewNativeEvent { - readonly navigationType: - | 'click' - | 'formsubmit' - | 'backforward' - | 'reload' - | 'formresubmit' - | 'other'; -} - -export interface WebViewMessage extends WebViewNativeEvent { - readonly data: string; -} - -export interface WebViewError extends WebViewNativeEvent { - readonly domain?: string; - readonly code: number; - readonly description: string; -} - -export type WebViewEvent = NativeSyntheticEvent; - -export type WebViewNavigationEvent = NativeSyntheticEvent; - -export type WebViewMessageEvent = NativeSyntheticEvent; - -export type WebViewErrorEvent = NativeSyntheticEvent; - -export type DataDetectorTypes = - | 'phoneNumber' - | 'link' - | 'address' - | 'calendarEvent' - | 'trackingNumber' - | 'flightNumber' - | 'lookupSuggestion' - | 'none' - | 'all'; - -export type OverScrollModeType = 'always' | 'content' | 'never'; - -export interface WebViewSourceUri { - /** - * The URI to load in the `WebView`. Can be a local or remote file. - */ - uri?: string; - - /** - * The HTTP Method to use. Defaults to GET if not specified. - * NOTE: On Android, only GET and POST are supported. - */ - method?: string; - - /** - * Additional HTTP headers to send with the request. - * NOTE: On Android, this can only be used with GET requests. - */ - headers?: {[key: string]: string}; - - /** - * The HTTP body to send with the request. This must be a valid - * UTF-8 string, and will be sent exactly as specified, with no - * additional encoding (e.g. URL-escaping or base64) applied. - * NOTE: On Android, this can only be used with POST requests. - */ - body?: string; -} - -export interface WebViewSourceHtml { - /** - * A static HTML page to display in the WebView. - */ - html?: string; - /** - * The base URL to be used for any relative links in the HTML. - */ - baseUrl?: string; -} - -export type WebViewSource = WebViewSourceUri | WebViewSourceHtml; - -export interface WebViewNativeConfig { - /* - * The native component used to render the WebView. - */ - component?: ComponentType; - /* - * Set props directly on the native component WebView. Enables custom props which the - * original WebView doesn't pass through. - */ - props?: any; - /* - * Set the ViewManager to use for communication with the native side. - * @platform ios - */ - viewManager?: any; -} - -export interface IOSWebViewProps { - /** - * If true, use WKWebView instead of UIWebView. - * @platform ios - */ - useWebKit?: boolean; - - /** - * Boolean value that determines whether the web view bounces - * when it reaches the edge of the content. The default value is `true`. - * @platform ios - */ - bounces?: boolean; - - /** - * A floating-point number that determines how quickly the scroll view - * decelerates after the user lifts their finger. You may also use the - * string shortcuts `"normal"` and `"fast"` which match the underlying iOS - * settings for `UIScrollViewDecelerationRateNormal` and - * `UIScrollViewDecelerationRateFast` respectively: - * - * - normal: 0.998 - * - fast: 0.99 (the default for iOS web view) - * @platform ios - */ - decelerationRate?: 'fast' | 'normal' | number; - - /** - * Boolean value that determines whether scrolling is enabled in the - * `WebView`. The default value is `true`. - * @platform ios - */ - scrollEnabled?: boolean; - - /** - * A Boolean value that determines whether scrolling is disabled in a particular direction. - * The default value is `true`. - * @platform ios - */ - directionalLockEnabled?: boolean; - - /** - * If the value of this property is true, the scroll view stops on multiples - * of the scroll view’s bounds when the user scrolls. - * The default value is false. - * @platform ios - */ - pagingEnabled?: boolean, - - /** - * The amount by which the web view content is inset from the edges of - * the scroll view. Defaults to {top: 0, left: 0, bottom: 0, right: 0}. - * @platform ios - */ - contentInset?: Insets; - - /** - * Determines the types of data converted to clickable URLs in the web view's content. - * By default only phone numbers are detected. - * - * You can provide one type or an array of many types. - * - * Possible values for `dataDetectorTypes` are: - * - * - `'phoneNumber'` - * - `'link'` - * - `'address'` - * - `'calendarEvent'` - * - `'none'` - * - `'all'` - * - * With the new WebKit implementation, we have three new values: - * - `'trackingNumber'`, - * - `'flightNumber'`, - * - `'lookupSuggestion'`, - * - * @platform ios - */ - dataDetectorTypes?: DataDetectorTypes | DataDetectorTypes[]; - - /** - * Function that allows custom handling of any web view requests. Return - * `true` from the function to continue loading the request and `false` - * to stop loading. - * @platform ios - */ - onShouldStartLoadWithRequest?: (event: WebViewIOSLoadRequestEvent) => any; - - /** - * Boolean that determines whether HTML5 videos play inline or use the - * native full-screen controller. The default value is `false`. - * - * **NOTE** : In order for video to play inline, not only does this - * property need to be set to `true`, but the video element in the HTML - * document must also include the `webkit-playsinline` attribute. - * @platform ios - */ - allowsInlineMediaPlayback?: boolean; - /** - * Hide the accessory view when the keyboard is open. Default is false to be - * backward compatible. - */ - hideKeyboardAccessoryView?: boolean; - /** - * If true, this will be able horizontal swipe gestures when using the WKWebView. The default value is `false`. - */ - allowsBackForwardNavigationGestures?: boolean; - - /** - * A Boolean value that determines whether pressing on a link - * displays a preview of the destination for the link. - * - * This property is available on devices that support 3D Touch. - * In iOS 10 and later, the default value is `true`; before that, the default value is `false`. - * @platform ios - */ - allowsLinkPreview?: boolean; -} - -export interface AndroidWebViewProps { - onNavigationStateChange?: (event: WebViewNavigation) => any; - onContentSizeChange?: (event: WebViewEvent) => any; - - /** - * https://developer.android.com/reference/android/view/View#OVER_SCROLL_NEVER - * Sets the overScrollMode. Possible values are: - * - * - `'always'` (default) - * - `'content'` - * - `'never'` - * - * @platform android - */ - overScrollMode?: OverScrollModeType; - - /** - * Sets whether Geolocation is enabled. The default is false. - * @platform android - */ - geolocationEnabled?: boolean; - - /** - * Boolean that sets whether JavaScript running in the context of a file - * scheme URL should be allowed to access content from any origin. - * Including accessing content from other file scheme URLs - * @platform android - */ - allowUniversalAccessFromFileURLs?: boolean; - - /** - * Sets whether the webview allow access to file system. - * @platform android - */ - allowFileAccess?: boolean; - - /** - * Used on Android only, controls whether form autocomplete data should be saved - * @platform android - */ - saveFormDataDisabled?: boolean; - - /* - * Used on Android only, controls whether the given list of URL prefixes should - * make {@link com.facebook.react.views.webview.ReactWebViewClient} to launch a - * default activity intent for those URL instead of loading it within the webview. - * Use this to list URLs that WebView cannot handle, e.g. a PDF url. - * @platform android - */ - urlPrefixesForDefaultIntent?: string[]; - - /** - * Boolean value to enable JavaScript in the `WebView`. Used on Android only - * as JavaScript is enabled by default on iOS. The default value is `true`. - * @platform android - */ - javaScriptEnabled?: boolean; - - /** - * Boolean value to disable Hardware Acceleration in the `WebView`. Used on Android only - * as Hardware Acceleration is a feature only for Android. The default value is `false`. - * @platform android - */ - androidHardwareAccelerationDisabled?: boolean; - - /** - * Boolean value to enable third party cookies in the `WebView`. Used on - * Android Lollipop and above only as third party cookies are enabled by - * default on Android Kitkat and below and on iOS. The default value is `true`. - * @platform android - */ - thirdPartyCookiesEnabled?: boolean; - - /** - * Boolean value to control whether DOM Storage is enabled. Used only in - * Android. - * @platform android - */ - domStorageEnabled?: boolean; - - /** - * Sets the user-agent for the `WebView`. - * @platform android - */ - userAgent?: string; - - /** - * Specifies the mixed content mode. i.e WebView will allow a secure origin to load content from any other origin. - * - * Possible values for `mixedContentMode` are: - * - * - `'never'` (default) - WebView will not allow a secure origin to load content from an insecure origin. - * - `'always'` - WebView will allow a secure origin to load content from any other origin, even if that origin is insecure. - * - `'compatibility'` - WebView will attempt to be compatible with the approach of a modern web browser with regard to mixed content. - * @platform android - */ - mixedContentMode?: 'never' | 'always' | 'compatibility'; -} - -export interface WebViewSharedProps extends ViewProps, IOSWebViewProps, AndroidWebViewProps { - /** - * @Deprecated. Use `source` instead. - */ - url?: string; - /** - * @Deprecated. Use `source` instead. - */ - html?: string; - - /** - * Loads static html or a uri (with optional headers) in the WebView. - */ - source?: WebViewSource; - - /** - * Function that returns a view to show if there's an error. - */ - renderError?: (errorDomain: string | undefined, errorCode: number, errorDesc: string) => ReactElement; // view to show if there's an error - - /** - * Function that returns a loading indicator. - */ - renderLoading?: () => ReactElement; - - /** - * Function that is invoked when the `WebView` has finished loading. - */ - onLoad?: (event: WebViewNavigationEvent) => any; - - /** - * Function that is invoked when the `WebView` load succeeds or fails. - */ - onLoadEnd?: (event: WebViewNavigationEvent | WebViewErrorEvent) => any; - - /** - * Function that is invoked when the `WebView` starts loading. - */ - onLoadStart?: (event: WebViewNavigationEvent) => any; - - /** - * Function that is invoked when the `WebView` load fails. - */ - onError?: (event: WebViewErrorEvent) => any; - - /** - * Controls whether to adjust the content inset for web views that are - * placed behind a navigation bar, tab bar, or toolbar. The default value - * is `true`. - */ - automaticallyAdjustContentInsets?: boolean; - - /** - * Function that is invoked when the `WebView` loading starts or ends. - */ - onNavigationStateChange?: (event: WebViewNavigation) => any; - - /** - * A function that is invoked when the webview calls `window.postMessage`. - * Setting this property will inject a `postMessage` global into your - * webview, but will still call pre-existing values of `postMessage`. - * - * `window.postMessage` accepts one argument, `data`, which will be - * available on the event object, `event.nativeEvent.data`. `data` - * must be a string. - */ - onMessage?: (event: WebViewMessageEvent) => any; - - /** - * Function that is invoked when the `WebView` is loading. - */ - onLoadProgress?: (event: NativeSyntheticEvent) => any; - - /** - * Boolean value that forces the `WebView` to show the loading view - * on the first load. - */ - startInLoadingState?: boolean; - - /** - * Set this to provide JavaScript that will be injected into the web page - * when the view loads. - */ - injectedJavaScript?: string; - - /** - * Boolean that controls whether the web content is scaled to fit - * the view and enables the user to change the scale. The default value - * is `true`. - * - * On iOS, when `useWebKit=true`, this prop will not work. - */ - scalesPageToFit?: boolean; - - /** - * Boolean that determines whether HTML5 audio and video requires the user - * to tap them before they start playing. The default value is `true`. - */ - mediaPlaybackRequiresUserAction?: boolean; - - /** - * List of origin strings to allow being navigated to. The strings allow - * wildcards and get matched against *just* the origin (not the full URL). - * If the user taps to navigate to a new page but the new page is not in - * this whitelist, we will open the URL in Safari. - * The default whitelisted origins are "http://*" and "https://*". - */ - originWhitelist?: string[]; - - /** - * Boolean value that determines whether caching is enabled in the - * `WebView`. The default value is `true` - i.e. caching is *enabled by default* - */ - cacheEnabled?: boolean, - - /** - * Override the native component used to render the WebView. Enables a custom native - * WebView which uses the same JavaScript as the original WebView. - */ - nativeConfig?: WebViewNativeConfig; - - /** - * A Boolean value that controls whether the horizontal scroll indicator is visible - * The default value is `true`. - */ - showsHorizontalScrollIndicator?: boolean; - - /** - * A Boolean value that controls whether the vertical scroll indicator is visible - * The default value is `true` - */ - showsVerticalScrollIndicator?: boolean; - - style?: StyleProp; - children?: ReactNode; -} - -export class WebView extends Component { - static isFileUploadSupported: () => Promise; - public goForward: () => void; - public goBack: () => void; - public reload: () => void; - public stopLoading: () => void; - public postMessage: (msg: string) => void; - public injectJavaScript: (js: string) => void; -} diff --git a/yarn.lock b/yarn.lock index ba3fb17..d5ce495 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9,7 +9,7 @@ dependencies: "@babel/highlight" "^7.0.0" -"@babel/core@^7.0.0", "@babel/core@^7.1.0", "@babel/core@^7.2.2": +"@babel/core@7.3.4", "@babel/core@^7.0.0", "@babel/core@^7.1.0": version "7.3.4" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.3.4.tgz#921a5a13746c21e32445bf0798680e9d11a6530b" integrity sha512-jRsuseXBo9pN197KnDwhhaaBzyZr2oIcLHHTt2oDdQrej5Qp57dCCJafWx5ivU8/alEYDpssYqv1MUqcxwQlrA== @@ -233,7 +233,7 @@ esutils "^2.0.2" js-tokens "^4.0.0" -"@babel/parser@^7.0.0", "@babel/parser@^7.2.2", "@babel/parser@^7.3.4": +"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.2.2", "@babel/parser@^7.3.4": version "7.3.4" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.3.4.tgz#a43357e4bbf4b92a437fb9e465c192848287f27c" integrity sha512-tXZCqWtlOOP4wgCp6RjRvLmfuhnqTLy9VHwRochJBCP2nDm27JnnuFEnXFASVyQNHk36jD1tAammsCEEqgscIQ== @@ -648,6 +648,151 @@ lodash "^4.17.11" to-fast-properties "^2.0.0" +"@cnakazawa/watch@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.3.tgz#099139eaec7ebf07a27c1786a3ff64f39464d2ef" + integrity sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA== + dependencies: + exec-sh "^0.3.2" + minimist "^1.2.0" + +"@jest/console@^24.3.0": + version "24.3.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.3.0.tgz#7bd920d250988ba0bf1352c4493a48e1cb97671e" + integrity sha512-NaCty/OOei6rSDcbPdMiCbYCI0KGFGPgGO6B09lwWt5QTxnkuhKYET9El5u5z1GAcSxkQmSMtM63e24YabCWqA== + dependencies: + "@jest/source-map" "^24.3.0" + "@types/node" "*" + chalk "^2.0.1" + slash "^2.0.0" + +"@jest/core@^24.5.0": + version "24.5.0" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-24.5.0.tgz#2cefc6a69e9ebcae1da8f7c75f8a257152ba1ec0" + integrity sha512-RDZArRzAs51YS7dXG1pbXbWGxK53rvUu8mCDYsgqqqQ6uSOaTjcVyBl2Jce0exT2rSLk38ca7az7t2f3b0/oYQ== + dependencies: + "@jest/console" "^24.3.0" + "@jest/reporters" "^24.5.0" + "@jest/test-result" "^24.5.0" + "@jest/transform" "^24.5.0" + "@jest/types" "^24.5.0" + ansi-escapes "^3.0.0" + chalk "^2.0.1" + exit "^0.1.2" + graceful-fs "^4.1.15" + jest-changed-files "^24.5.0" + jest-config "^24.5.0" + jest-haste-map "^24.5.0" + jest-message-util "^24.5.0" + jest-regex-util "^24.3.0" + jest-resolve-dependencies "^24.5.0" + jest-runner "^24.5.0" + jest-runtime "^24.5.0" + jest-snapshot "^24.5.0" + jest-util "^24.5.0" + jest-validate "^24.5.0" + jest-watcher "^24.5.0" + micromatch "^3.1.10" + p-each-series "^1.0.0" + pirates "^4.0.1" + realpath-native "^1.1.0" + rimraf "^2.5.4" + strip-ansi "^5.0.0" + +"@jest/environment@^24.5.0": + version "24.5.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-24.5.0.tgz#a2557f7808767abea3f9e4cc43a172122a63aca8" + integrity sha512-tzUHR9SHjMXwM8QmfHb/EJNbF0fjbH4ieefJBvtwO8YErLTrecc1ROj0uo2VnIT6SlpEGZnvdCK6VgKYBo8LsA== + dependencies: + "@jest/fake-timers" "^24.5.0" + "@jest/transform" "^24.5.0" + "@jest/types" "^24.5.0" + "@types/node" "*" + jest-mock "^24.5.0" + +"@jest/fake-timers@^24.5.0": + version "24.5.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-24.5.0.tgz#4a29678b91fd0876144a58f8d46e6c62de0266f0" + integrity sha512-i59KVt3QBz9d+4Qr4QxsKgsIg+NjfuCjSOWj3RQhjF5JNy+eVJDhANQ4WzulzNCHd72srMAykwtRn5NYDGVraw== + dependencies: + "@jest/types" "^24.5.0" + "@types/node" "*" + jest-message-util "^24.5.0" + jest-mock "^24.5.0" + +"@jest/reporters@^24.5.0": + version "24.5.0" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-24.5.0.tgz#9363a210d0daa74696886d9cb294eb8b3ad9b4d9" + integrity sha512-vfpceiaKtGgnuC3ss5czWOihKOUSyjJA4M4udm6nH8xgqsuQYcyDCi4nMMcBKsHXWgz9/V5G7iisnZGfOh1w6Q== + dependencies: + "@jest/environment" "^24.5.0" + "@jest/test-result" "^24.5.0" + "@jest/transform" "^24.5.0" + "@jest/types" "^24.5.0" + chalk "^2.0.1" + exit "^0.1.2" + glob "^7.1.2" + istanbul-api "^2.1.1" + istanbul-lib-coverage "^2.0.2" + istanbul-lib-instrument "^3.0.1" + istanbul-lib-source-maps "^3.0.1" + jest-haste-map "^24.5.0" + jest-resolve "^24.5.0" + jest-runtime "^24.5.0" + jest-util "^24.5.0" + jest-worker "^24.4.0" + node-notifier "^5.2.1" + slash "^2.0.0" + source-map "^0.6.0" + string-length "^2.0.0" + +"@jest/source-map@^24.3.0": + version "24.3.0" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-24.3.0.tgz#563be3aa4d224caf65ff77edc95cd1ca4da67f28" + integrity sha512-zALZt1t2ou8le/crCeeiRYzvdnTzaIlpOWaet45lNSqNJUnXbppUUFR4ZUAlzgDmKee4Q5P/tKXypI1RiHwgag== + dependencies: + callsites "^3.0.0" + graceful-fs "^4.1.15" + source-map "^0.6.0" + +"@jest/test-result@^24.5.0": + version "24.5.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-24.5.0.tgz#ab66fb7741a04af3363443084e72ea84861a53f2" + integrity sha512-u66j2vBfa8Bli1+o3rCaVnVYa9O8CAFZeqiqLVhnarXtreSXG33YQ6vNYBogT7+nYiFNOohTU21BKiHlgmxD5A== + dependencies: + "@jest/console" "^24.3.0" + "@jest/types" "^24.5.0" + "@types/istanbul-lib-coverage" "^1.1.0" + +"@jest/transform@^24.5.0": + version "24.5.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-24.5.0.tgz#6709fc26db918e6af63a985f2cc3c464b4cf99d9" + integrity sha512-XSsDz1gdR/QMmB8UCKlweAReQsZrD/DK7FuDlNo/pE8EcKMrfi2kqLRk8h8Gy/PDzgqJj64jNEzOce9pR8oj1w== + dependencies: + "@babel/core" "^7.1.0" + "@jest/types" "^24.5.0" + babel-plugin-istanbul "^5.1.0" + chalk "^2.0.1" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.1.15" + jest-haste-map "^24.5.0" + jest-regex-util "^24.3.0" + jest-util "^24.5.0" + micromatch "^3.1.10" + realpath-native "^1.1.0" + slash "^2.0.0" + source-map "^0.6.1" + write-file-atomic "2.4.1" + +"@jest/types@^24.5.0": + version "24.5.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.5.0.tgz#feee214a4d0167b0ca447284e95a57aa10b3ee95" + integrity sha512-kN7RFzNMf2R8UDadPOl6ReyI+MT8xfqRuAnuVL+i4gwjv/zubdDK+EDeLHYwq1j0CSSR2W/MmgaRlMZJzXdmVA== + dependencies: + "@types/istanbul-lib-coverage" "^1.1.0" + "@types/yargs" "^12.0.9" + "@mrmlnc/readdir-enhanced@^2.2.1": version "2.2.1" resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" @@ -661,22 +806,22 @@ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== -"@octokit/endpoint@^3.1.1": - version "3.1.3" - resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-3.1.3.tgz#f6e9c2521b83b74367600e474b24efec2b0471c4" - integrity sha512-vAWzeoj9Lzpl3V3YkWKhGzmDUoMfKpyxJhpq74/ohMvmLXDoEuAGnApy/7TRi3OmnjyX2Lr+e9UGGAD0919ohA== +"@octokit/endpoint@^3.2.0": + version "3.2.3" + resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-3.2.3.tgz#bd9aea60cd94ce336656b57a5c9cb7f10be8f4f3" + integrity sha512-yUPCt4vMIOclox13CUxzuKiPJIFo46b/6GhUnUTw5QySczN1L0DtSxgmIZrZV4SAb9EyAqrceoyrWoYVnfF2AA== dependencies: deepmerge "3.2.0" is-plain-object "^2.0.4" universal-user-agent "^2.0.1" url-template "^2.0.8" -"@octokit/request@2.4.1": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-2.4.1.tgz#98c4d6870e4abe3ccdd2b9799034b4ae3f441c30" - integrity sha512-nN8W24ZXEpJQJoVgMsGZeK9FOzxkc39Xn9ykseUpPpPMNEDFSvqfkCeqqKrjUiXRm72ubGLWG1SOz0aJPcgGww== +"@octokit/request@2.4.2": + version "2.4.2" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-2.4.2.tgz#87c36e820dd1e43b1629f4f35c95b00cd456320b" + integrity sha512-lxVlYYvwGbKSHXfbPk5vxEA8w4zHOH1wobado4a9EfsyD3Cbhuhus1w0Ye9Ro0eMubGO8kNy5d+xNFisM3Tvaw== dependencies: - "@octokit/endpoint" "^3.1.1" + "@octokit/endpoint" "^3.2.0" deprecation "^1.0.1" is-plain-object "^2.0.4" node-fetch "^2.3.0" @@ -684,20 +829,62 @@ universal-user-agent "^2.0.1" "@octokit/rest@^16.13.1": - version "16.17.0" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-16.17.0.tgz#3a8c0ff5290e25a48b11f6957aa90791c672c91e" - integrity sha512-1RB7e4ptR/M+1Ik3Qn84pbppbSadBaCtpgFqgqsXn6s4ZVE6hqW9SOm6UW5yd3KT7ObVfdYUkhMlgR937oKyDw== + version "16.18.1" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-16.18.1.tgz#e6cbf111a8afc3d5ad44c98edf264124f1568ea0" + integrity sha512-ozKUH4KCusmPQ6xHxF2q1IDVM5tPbmmAUP69yRLd98BH16mqOVwMkm6zLCUJPD03IVhG+YNHShJDc077CTkIWg== dependencies: - "@octokit/request" "2.4.1" + "@octokit/request" "2.4.2" before-after-hook "^1.4.0" btoa-lite "^1.0.0" + deprecation "^1.0.1" lodash.get "^4.4.2" lodash.set "^4.3.2" lodash.uniq "^4.5.0" octokit-pagination-methods "^1.1.0" + once "^1.4.0" universal-user-agent "^2.0.0" url-template "^2.0.8" +"@react-native-community/cli@^1.2.1": + version "1.4.5" + resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-1.4.5.tgz#6cf35d73e14f65e13e77fbb572f2d5b9d2cbadb5" + integrity sha512-WH5E7rEUpftXJ4aAS/U/3euMx1S7FI0+CwT2VN3sFDtErtCVgqmyBXnBNp9Zk3XK5ANbf49cVR25rkOBjf5TVw== + dependencies: + chalk "^1.1.1" + commander "^2.19.0" + compression "^1.7.1" + connect "^3.6.5" + denodeify "^1.2.1" + envinfo "^5.7.0" + errorhandler "^1.5.0" + escape-string-regexp "^1.0.5" + execa "^1.0.0" + fs-extra "^7.0.1" + glob "^7.1.1" + graceful-fs "^4.1.3" + inquirer "^3.0.6" + lodash "^4.17.5" + metro "^0.51.0" + metro-config "^0.51.0" + metro-core "^0.51.0" + metro-memory-fs "^0.51.0" + metro-react-native-babel-transformer "^0.51.0" + mime "^1.3.4" + minimist "^1.2.0" + mkdirp "^0.5.1" + morgan "^1.9.0" + node-fetch "^2.2.0" + node-notifier "^5.2.1" + opn "^3.0.2" + plist "^3.0.0" + semver "^5.0.3" + serve-static "^1.13.1" + shell-quote "1.6.1" + slash "^2.0.0" + ws "^1.1.0" + xcode "^2.0.0" + xmldoc "^0.4.0" + "@semantic-release/commit-analyzer@^6.1.0": version "6.1.0" resolved "https://registry.yarnpkg.com/@semantic-release/commit-analyzer/-/commit-analyzer-6.1.0.tgz#32bbe3c23da86e23edf072fbb276fa2f383fcb17" @@ -786,6 +973,44 @@ into-stream "^4.0.0" lodash "^4.17.4" +"@types/babel__core@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.0.tgz#710f2487dda4dcfd010ca6abb2b4dc7394365c51" + integrity sha512-wJTeJRt7BToFx3USrCDs2BhEi4ijBInTQjOIukj6a/5tEkwpFMVZ+1ppgmE+Q/FQyc5P/VWUbx7I9NELrKruHA== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.0.2.tgz#d2112a6b21fad600d7674274293c85dce0cb47fc" + integrity sha512-NHcOfab3Zw4q5sEE2COkpfXjoE7o+PmqD9DQW4koUT3roNxwziUdXGnRndMat/LJNUtePwn1TlP4do3uoe3KZQ== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.0.2.tgz#4ff63d6b52eddac1de7b975a5223ed32ecea9307" + integrity sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.0.6" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.6.tgz#328dd1a8fc4cfe3c8458be9477b219ea158fd7b2" + integrity sha512-XYVgHF2sQ0YblLRMLNPB3CkFMewzFmlDsH/TneZFHUXDlABQgh88uOxuez7ZcXxayLFrqLwtDH1t+FmlFwNZxw== + dependencies: + "@babel/types" "^7.3.0" + +"@types/escape-string-regexp@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/escape-string-regexp/-/escape-string-regexp-1.0.0.tgz#052d16d87db583b72daceae4eaabddb66954424c" + integrity sha512-KAruqgk9/340M4MYYasdBET+lyYN8KMXUuRKWO72f4SbmIMMFp9nnJiXUkJS0HC2SFe4x0R/fLozXIzqoUfSjA== + "@types/events@*": version "3.0.0" resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" @@ -800,37 +1025,96 @@ "@types/minimatch" "*" "@types/node" "*" +"@types/invariant@^2.2.29": + version "2.2.29" + resolved "https://registry.yarnpkg.com/@types/invariant/-/invariant-2.2.29.tgz#aa845204cd0a289f65d47e0de63a6a815e30cc66" + integrity sha512-lRVw09gOvgviOfeUrKc/pmTiRZ7g7oDOU6OAutyuSHpm1/o2RaBQvRhgK8QEdu+FFuw/wnWb29A/iuxv9i8OpQ== + +"@types/istanbul-lib-coverage@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.0.tgz#2cc2ca41051498382b43157c8227fea60363f94a" + integrity sha512-ohkhb9LehJy+PA40rDtGAji61NCgdtKLAlFoYp4cnuuQEswwdK3vz9SOIkkyc3wrk8dzjphQApNs56yyXLStaQ== + +"@types/jest-diff@*": + version "20.0.1" + resolved "https://registry.yarnpkg.com/@types/jest-diff/-/jest-diff-20.0.1.tgz#35cc15b9c4f30a18ef21852e255fdb02f6d59b89" + integrity sha512-yALhelO3i0hqZwhjtcr6dYyaLoCHbAMshwtj6cGxTvHZAKXHsYGdff6E8EPw3xLKY0ELUTQ69Q1rQiJENnccMA== + +"@types/jest@24.0.11": + version "24.0.11" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-24.0.11.tgz#1f099bea332c228ea6505a88159bfa86a5858340" + integrity sha512-2kLuPC5FDnWIDvaJBzsGTBQaBbnDweznicvK7UGYzlIJP4RJR2a4A/ByLUXEyEgag6jz8eHdlWExGDtH3EYUXQ== + dependencies: + "@types/jest-diff" "*" + "@types/minimatch@*": version "3.0.3" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== "@types/node@*": - version "11.10.5" - resolved "https://registry.yarnpkg.com/@types/node/-/node-11.10.5.tgz#fbaca34086bdc118011e1f05c47688d432f2d571" - integrity sha512-DuIRlQbX4K+d5I+GMnv+UfnGh+ist0RdlvOp+JZ7ePJ6KQONCFQv/gKYSU1ZzbVdFSUCKZOltjmpFAGGv5MdYA== + version "11.11.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-11.11.3.tgz#7c6b0f8eaf16ae530795de2ad1b85d34bf2f5c58" + integrity sha512-wp6IOGu1lxsfnrD+5mX6qwSwWuqsdkKKxTN4aQc4wByHAKZJf9/D4KXPQ1POUjEbnCP5LMggB0OEFNY9OTsMqg== "@types/prop-types@*": version "15.7.0" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.0.tgz#4c48fed958d6dcf9487195a0ef6456d5f6e0163a" integrity sha512-eItQyV43bj4rR3JPV0Skpl1SncRCdziTEK9/v8VwXmV6d/qOUO8/EuWeHBbCZcsfSHfzI5UyMJLCSXtxxznyZg== -"@types/react-native@^0.57.8": - version "0.57.38" - resolved "https://registry.yarnpkg.com/@types/react-native/-/react-native-0.57.38.tgz#2ff6ed1a7cc207afbfd87bf496513d96931d1446" - integrity sha512-bmY2ad/vQgP0HMT7Q7EQzirDBt5ibp+kBHclTnY7/i5MrdqE1oY+3b9NkDg3ohXlumr7p5stAG6I55nhfeUV6Q== +"@types/react-native@0.57.40": + version "0.57.40" + resolved "https://registry.yarnpkg.com/@types/react-native/-/react-native-0.57.40.tgz#a227acb6b2c7372cb678202df4cfe716ace9ce94" + integrity sha512-nCcF9gNYp/VeV5QBtHbn/VnXZG+T8EsMxZFx8qqZfBe1gxJUsldXgOXYd1kcrrYzUX0LqG/KipDBX++fB2qQ0g== dependencies: "@types/prop-types" "*" "@types/react" "*" -"@types/react@*", "@types/react@^16.6.3": - version "16.8.7" - resolved "https://registry.yarnpkg.com/@types/react/-/react-16.8.7.tgz#7b1c0223dd5494f9b4501ad2a69aa6acb350a29b" - integrity sha512-0xbkIyrDNKUn4IJVf8JaCn+ucao/cq6ZB8O6kSzhrJub1cVSqgTArtG0qCfdERWKMEIvUbrwLXeQMqWEsyr9dA== +"@types/react@*", "@types/react@16.8.8": + version "16.8.8" + resolved "https://registry.yarnpkg.com/@types/react/-/react-16.8.8.tgz#4b60a469fd2469f7aa6eaa0f8cfbc51f6d76e662" + integrity sha512-xwEvyet96u7WnB96kqY0yY7qxx/pEpU51QeACkKFtrgjjXITQn0oO1iwPEraXVgh10ZFPix7gs1R4OJXF7P5sg== dependencies: "@types/prop-types" "*" csstype "^2.2.0" +"@types/stack-utils@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" + integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== + +"@types/yargs@^12.0.2", "@types/yargs@^12.0.9": + version "12.0.9" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-12.0.9.tgz#693e76a52f61a2f1e7fb48c0eef167b95ea4ffd0" + integrity sha512-sCZy4SxP9rN2w30Hlmg5dtdRwgYQfYRiLo9usw8X9cxlf+H4FqM1xX7+sNH7NNKVdbXMJWqva7iyy+fxh/V7fA== + +"@typescript-eslint/eslint-plugin@1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-1.4.2.tgz#370bc32022d1cc884a5dcf62624ef2024182769d" + integrity sha512-6WInypy/cK4rM1dirKbD5p7iFW28DbSRKT/+PGn+DYzBWEvHq5KnZAqQ5cX25JBc0qMkFxJNxNfBbFXJyyzVcw== + dependencies: + "@typescript-eslint/parser" "1.4.2" + "@typescript-eslint/typescript-estree" "1.4.2" + requireindex "^1.2.0" + tsutils "^3.7.0" + +"@typescript-eslint/parser@1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-1.4.2.tgz#acfdee2019958a41d308d768e53ded975ef90ce8" + integrity sha512-OqLkY9295DXXaWToItUv3olO2//rmzh6Th6Sc7YjFFEpEuennsm5zhygLLvHZjPxPlzrQgE8UDaOPurDylaUuw== + dependencies: + "@typescript-eslint/typescript-estree" "1.4.2" + eslint-scope "^4.0.0" + eslint-visitor-keys "^1.0.0" + +"@typescript-eslint/typescript-estree@1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-1.4.2.tgz#b16bc36c9a4748a7fca92cba4c2d73c5325c8a85" + integrity sha512-wKgi/w6k1v3R4b6oDc20cRWro2gBzp0wn6CAeYC8ExJMfvXMfiaXzw2tT9ilxdONaVWMCk7B9fMdjos7bF/CWw== + dependencies: + lodash.unescape "4.0.1" + semver "5.5.0" + JSONStream@^1.0.4, JSONStream@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" @@ -870,6 +1154,11 @@ acorn-globals@^4.1.0: acorn "^6.0.1" acorn-walk "^6.0.1" +acorn-jsx@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.1.tgz#32a064fd925429216a09b141102bfdd185fae40e" + integrity sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg== + acorn-walk@^6.0.1: version "6.1.1" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.1.1.tgz#d363b66f5fac5f018ff9c3a1e7b6f8e310cc3913" @@ -880,12 +1169,12 @@ acorn@^5.5.3: resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== -acorn@^6.0.1: +acorn@^6.0.1, acorn@^6.0.7: version "6.1.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.1.tgz#7d25ae05bb8ad1f9b699108e1094ecd7884adc1f" integrity sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA== -agent-base@4, agent-base@^4.1.0, agent-base@~4.2.0: +agent-base@4, agent-base@^4.1.0, agent-base@~4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg== @@ -915,7 +1204,7 @@ aggregate-error@^2.0.0: clean-stack "^2.0.0" indent-string "^3.0.0" -ajv@^6.5.5: +ajv@^6.5.5, ajv@^6.9.1: version "6.10.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1" integrity sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg== @@ -946,7 +1235,7 @@ ansi-cyan@^0.1.1: dependencies: ansi-wrap "0.1.0" -ansi-escapes@^3.0.0, ansi-escapes@^3.1.0: +ansi-escapes@^3.0.0, ansi-escapes@^3.1.0, ansi-escapes@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== @@ -975,10 +1264,10 @@ ansi-regex@^3.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= -ansi-regex@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.0.0.tgz#70de791edf021404c3fd615aa89118ae0432e5a9" - integrity sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w== +ansi-regex@^4.0.0, ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== ansi-styles@^2.2.1: version "2.2.1" @@ -1062,6 +1351,14 @@ argv-formatter@~1.0.0: resolved "https://registry.yarnpkg.com/argv-formatter/-/argv-formatter-1.0.0.tgz#a0ca0cbc29a5b73e836eebe1cbf6c5e0e4eb82f9" integrity sha1-oMoMvCmltz6Dbuvhy/bF4OTrgvk= +aria-query@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-3.0.0.tgz#65b3fcc1ca1155a8c9ae64d6eee297f15d5133cc" + integrity sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w= + dependencies: + ast-types-flow "0.0.7" + commander "^2.11.0" + arr-diff@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-1.1.0.tgz#687c32758163588fef7de7b36fabe495eb1a399a" @@ -1117,6 +1414,14 @@ array-ify@^1.0.0: resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4= +array-includes@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" + integrity sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0= + dependencies: + define-properties "^1.1.2" + es-abstract "^1.7.0" + array-map@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" @@ -1186,6 +1491,11 @@ assign-symbols@^1.0.0: resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= +ast-types-flow@0.0.7, ast-types-flow@^0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" + integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= + astral-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" @@ -1223,13 +1533,35 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== -babel-jest@^24.0.0, babel-jest@^24.1.0: - version "24.1.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-24.1.0.tgz#441e23ef75ded3bd547e300ac3194cef87b55190" - integrity sha512-MLcagnVrO9ybQGLEfZUqnOzv36iQzU7Bj4elm39vCukumLVSfoX+tRy3/jW7lUKc7XdpRmB/jech6L/UCsSZjw== +axobject-query@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.0.2.tgz#ea187abe5b9002b377f925d8bf7d1c561adf38f9" + integrity sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww== dependencies: + ast-types-flow "0.0.7" + +babel-eslint@10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.0.1.tgz#919681dc099614cd7d31d45c8908695092a1faed" + integrity sha512-z7OT1iNV+TjOwHNLLyJk+HN+YVWX+CLE6fPD2SymJZOZQBs+QIexFjhm4keGTm8MW9xr4EC9Q0PbaLB24V5GoQ== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.0.0" + "@babel/traverse" "^7.0.0" + "@babel/types" "^7.0.0" + eslint-scope "3.7.1" + eslint-visitor-keys "^1.0.0" + +babel-jest@^24.0.0, babel-jest@^24.5.0: + version "24.5.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-24.5.0.tgz#0ea042789810c2bec9065f7c8ab4dc18e1d28559" + integrity sha512-0fKCXyRwxFTJL0UXDJiT2xYxO9Lu2vBd9n+cC+eDjESzcVG3s2DRGAxbzJX21fceB1WYoBjAh8pQ83dKcl003g== + dependencies: + "@jest/transform" "^24.5.0" + "@jest/types" "^24.5.0" + "@types/babel__core" "^7.1.0" babel-plugin-istanbul "^5.1.0" - babel-preset-jest "^24.1.0" + babel-preset-jest "^24.3.0" chalk "^2.4.2" slash "^2.0.0" @@ -1242,10 +1574,12 @@ babel-plugin-istanbul@^5.1.0: istanbul-lib-instrument "^3.0.0" test-exclude "^5.0.0" -babel-plugin-jest-hoist@^24.1.0: - version "24.1.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.1.0.tgz#dfecc491fb15e2668abbd690a697a8fd1411a7f8" - integrity sha512-gljYrZz8w1b6fJzKcsfKsipSru2DU2DmQ39aB6nV3xQ0DDv3zpIzKGortA5gknrhNnPN8DweaEgrnZdmbGmhnw== +babel-plugin-jest-hoist@^24.3.0: + version "24.3.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.3.0.tgz#f2e82952946f6e40bb0a75d266a3790d854c8b5b" + integrity sha512-nWh4N1mVH55Tzhx2isvUN5ebM5CDUvIpXPZYMRazQughie/EqGnbR+czzoQlhUmJG9pPJmYDRhvocotb2THl1w== + dependencies: + "@types/babel__traverse" "^7.0.6" babel-plugin-syntax-trailing-function-commas@^7.0.0-beta.0: version "7.0.0-beta.0" @@ -1285,24 +1619,19 @@ babel-preset-fbjs@^3.0.0, babel-preset-fbjs@^3.0.1: "@babel/plugin-transform-template-literals" "^7.0.0" babel-plugin-syntax-trailing-function-commas "^7.0.0-beta.0" -babel-preset-jest@^24.1.0: - version "24.1.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-24.1.0.tgz#83bc564fdcd4903641af65ec63f2f5de6b04132e" - integrity sha512-FfNLDxFWsNX9lUmtwY7NheGlANnagvxq8LZdl5PKnVG3umP+S/g0XbVBfwtA4Ai3Ri/IMkWabBz3Tyk9wdspcw== +babel-preset-jest@^24.3.0: + version "24.3.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-24.3.0.tgz#db88497e18869f15b24d9c0e547d8e0ab950796d" + integrity sha512-VGTV2QYBa/Kn3WCOKdfS31j9qomaXSgJqi65B6o05/1GsJyj9LVhSljM9ro4S+IBGj/ENhNBuH9bpqzztKAQSw== dependencies: "@babel/plugin-syntax-object-rest-spread" "^7.0.0" - babel-plugin-jest-hoist "^24.1.0" + babel-plugin-jest-hoist "^24.3.0" balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= -base64-js@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.1.2.tgz#d6400cac1c4c660976d90d07a04351d89395f5e8" - integrity sha1-1kAMrBxMZgl22Q0HoENR2JOV9eg= - base64-js@^1.1.2, base64-js@^1.2.3: version "1.3.0" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" @@ -1445,6 +1774,13 @@ browser-resolve@^1.11.3: dependencies: resolve "1.1.7" +bs-logger@0.x: + version "0.2.6" + resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" + integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== + dependencies: + fast-json-stable-stringify "2.x" + bser@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" @@ -1457,7 +1793,12 @@ btoa-lite@^1.0.0: resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337" integrity sha1-M3dm2hWAEhD92VbCLpxokaudAzc= -buffer-from@^1.0.0: +buffer-crc32@^0.2.13: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= + +buffer-from@1.x, buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== @@ -1601,6 +1942,13 @@ capture-exit@^1.2.0: dependencies: rsvp "^3.3.3" +capture-exit@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" + integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== + dependencies: + rsvp "^4.8.4" + capture-stack-trace@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" @@ -1630,7 +1978,7 @@ chalk@^1.1.1: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.2, chalk@^2.4.1, chalk@^2.4.2: +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.2, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -1644,6 +1992,11 @@ chardet@^0.4.0: resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I= +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + chownr@^1.0.1, chownr@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" @@ -1824,7 +2177,7 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -commander@^2.9.0: +commander@^2.11.0, commander@^2.19.0, commander@^2.9.0: version "2.19.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== @@ -1932,6 +2285,11 @@ console-control-strings@^1.0.0, console-control-strings@^1.1.0, console-control- resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= +contains-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" + integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= + conventional-changelog-angular@^5.0.0: version "5.0.3" resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.3.tgz#299fdd43df5a1f095283ac16aeedfb0a682ecab0" @@ -2052,7 +2410,7 @@ cross-spawn@^5.0.1, cross-spawn@^5.1.0: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^6.0.0: +cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== @@ -2097,6 +2455,11 @@ cyclist@~0.2.2: resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" integrity sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA= +damerau-levenshtein@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz#03191c432cb6eea168bb77f3a55ffdccb8978514" + integrity sha1-AxkcQyy27qFou3fzpV/9zLiXhRQ= + dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" @@ -2118,7 +2481,7 @@ dateformat@^3.0.0: resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== -debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3: +debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -2139,14 +2502,14 @@ debug@^3.1.0: dependencies: ms "^2.1.1" -debug@^4.0.0, debug@^4.1.0, debug@^4.1.1: +debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== dependencies: ms "^2.1.1" -debuglog@^1.0.1: +debuglog@*, debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= @@ -2198,7 +2561,7 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" -define-properties@^1.1.2: +define-properties@^1.1.2, define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== @@ -2280,10 +2643,10 @@ dezalgo@^1.0.0, dezalgo@~1.0.3: asap "^2.0.0" wrappy "1" -diff-sequences@^24.0.0: - version "24.0.0" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.0.0.tgz#cdf8e27ed20d8b8d3caccb4e0c0d8fe31a173013" - integrity sha512-46OkIuVGBBnrC0soO/4LHu5LHGHx0uhP65OVz8XOrAJpqiCB2aVIuESvjI1F9oqebuvY8lekS1pt6TN7vt7qsw== +diff-sequences@^24.3.0: + version "24.3.0" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.3.0.tgz#0f20e8a1df1abddaf4d9c226680952e64118b975" + integrity sha512-xLqpez+Zj9GKSnPWS0WZw1igGocZ+uua8+y+5dDNTT934N3QuY1sp2LkHzwiaYQGz60hMq0pjAshdeXm5VUOEw== dir-glob@2.0.0: version "2.0.0" @@ -2300,6 +2663,28 @@ dir-glob@^2.0.0, dir-glob@^2.2.1: dependencies: path-type "^3.0.0" +doctrine@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + dom-walk@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018" @@ -2371,6 +2756,11 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= +emoji-regex@^7.0.1, emoji-regex@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + encodeurl@~1.0.1, encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" @@ -2430,7 +2820,7 @@ errorhandler@^1.5.0: accepts "~1.3.3" escape-html "~1.0.3" -es-abstract@^1.5.1: +es-abstract@^1.11.0, es-abstract@^1.12.0, es-abstract@^1.5.1, es-abstract@^1.7.0: version "1.13.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg== @@ -2468,7 +2858,7 @@ escape-html@~1.0.3: resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: +escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= @@ -2485,6 +2875,184 @@ escodegen@^1.9.1: optionalDependencies: source-map "~0.6.1" +eslint-config-airbnb-base@^13.1.0: + version "13.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-13.1.0.tgz#b5a1b480b80dfad16433d6c4ad84e6605052c05c" + integrity sha512-XWwQtf3U3zIoKO1BbHh6aUhJZQweOwSt4c2JrPDg9FP3Ltv3+YfEv7jIDB8275tVnO/qOHbfuYg3kzw6Je7uWw== + dependencies: + eslint-restricted-globals "^0.1.1" + object.assign "^4.1.0" + object.entries "^1.0.4" + +eslint-config-airbnb@17.1.0: + version "17.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-17.1.0.tgz#3964ed4bc198240315ff52030bf8636f42bc4732" + integrity sha512-R9jw28hFfEQnpPau01NO5K/JWMGLi6aymiF6RsnMURjTk+MqZKllCqGK/0tOvHkPi/NWSSOU2Ced/GX++YxLnw== + dependencies: + eslint-config-airbnb-base "^13.1.0" + object.assign "^4.1.0" + object.entries "^1.0.4" + +eslint-config-prettier@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-4.1.0.tgz#181364895899fff9fd3605fecb5c4f20e7d5f395" + integrity sha512-zILwX9/Ocz4SV2vX7ox85AsrAgXV3f2o2gpIicdMIOra48WYqgUnWNH/cR/iHtmD2Vb3dLSC3LiEJnS05Gkw7w== + dependencies: + get-stdin "^6.0.0" + +eslint-import-resolver-node@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a" + integrity sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q== + dependencies: + debug "^2.6.9" + resolve "^1.5.0" + +eslint-module-utils@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.3.0.tgz#546178dab5e046c8b562bbb50705e2456d7bda49" + integrity sha512-lmDJgeOOjk8hObTysjqH7wyMi+nsHwwvfBykwfhjR1LNdd7C2uFJBvx4OpWYpXOw4df1yE1cDEVd1yLHitk34w== + dependencies: + debug "^2.6.8" + pkg-dir "^2.0.0" + +eslint-plugin-import@2.16.0: + version "2.16.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.16.0.tgz#97ac3e75d0791c4fac0e15ef388510217be7f66f" + integrity sha512-z6oqWlf1x5GkHIFgrSvtmudnqM6Q60KM4KvpWi5ubonMjycLjndvd5+8VAZIsTlHC03djdgJuyKG6XO577px6A== + dependencies: + contains-path "^0.1.0" + debug "^2.6.9" + doctrine "1.5.0" + eslint-import-resolver-node "^0.3.2" + eslint-module-utils "^2.3.0" + has "^1.0.3" + lodash "^4.17.11" + minimatch "^3.0.4" + read-pkg-up "^2.0.0" + resolve "^1.9.0" + +eslint-plugin-jsx-a11y@6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.1.tgz#4ebba9f339b600ff415ae4166e3e2e008831cf0c" + integrity sha512-cjN2ObWrRz0TTw7vEcGQrx+YltMvZoOEx4hWU8eEERDnBIU00OTq7Vr+jA7DFKxiwLNv4tTh5Pq2GUNEa8b6+w== + dependencies: + aria-query "^3.0.0" + array-includes "^3.0.3" + ast-types-flow "^0.0.7" + axobject-query "^2.0.2" + damerau-levenshtein "^1.0.4" + emoji-regex "^7.0.2" + has "^1.0.3" + jsx-ast-utils "^2.0.1" + +eslint-plugin-react-native-globals@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-native-globals/-/eslint-plugin-react-native-globals-0.1.2.tgz#ee1348bc2ceb912303ce6bdbd22e2f045ea86ea2" + integrity sha512-9aEPf1JEpiTjcFAmmyw8eiIXmcNZOqaZyHO77wgm0/dWfT/oxC1SrIq8ET38pMxHYrcB6Uew+TzUVsBeczF88g== + +eslint-plugin-react-native@3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-native/-/eslint-plugin-react-native-3.6.0.tgz#7cad3b7c6159df6d26fe3252c6c5417a17f27b4b" + integrity sha512-BEQcHZ06hZSBYWFVuNEq0xuui5VEsWpHDsZGBtfadHfCRqRMUrkYPgdDb3bpc60qShHE83kqIv59uKdinEg91Q== + dependencies: + eslint-plugin-react-native-globals "^0.1.1" + +eslint-plugin-react@7.12.4: + version "7.12.4" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.12.4.tgz#b1ecf26479d61aee650da612e425c53a99f48c8c" + integrity sha512-1puHJkXJY+oS1t467MjbqjvX53uQ05HXwjqDgdbGBqf5j9eeydI54G3KwiJmWciQ0HTBacIKw2jgwSBSH3yfgQ== + dependencies: + array-includes "^3.0.3" + doctrine "^2.1.0" + has "^1.0.3" + jsx-ast-utils "^2.0.1" + object.fromentries "^2.0.0" + prop-types "^15.6.2" + resolve "^1.9.0" + +eslint-restricted-globals@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz#35f0d5cbc64c2e3ed62e93b4b1a7af05ba7ed4d7" + integrity sha1-NfDVy8ZMLj7WLpO0saevBbp+1Nc= + +eslint-scope@3.7.1: + version "3.7.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" + integrity sha1-PWPD7f2gLgbgGkUq2IyqzHzctug= + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-scope@^4.0.0, eslint-scope@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.2.tgz#5f10cd6cabb1965bf479fa65745673439e21cb0e" + integrity sha512-5q1+B/ogmHl8+paxtOKx38Z8LtWkVGuNt3+GQNErqwLl6ViNp/gdJGMCjZNxZ8j/VYjDNZ2Fo+eQc1TAVPIzbg== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-utils@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.3.1.tgz#9a851ba89ee7c460346f97cf8939c7298827e512" + integrity sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q== + +eslint-visitor-keys@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" + integrity sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ== + +eslint@5.15.1: + version "5.15.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.15.1.tgz#8266b089fd5391e0009a047050795b1d73664524" + integrity sha512-NTcm6vQ+PTgN3UBsALw5BMhgO6i5EpIjQF/Xb5tIh3sk9QhrFafujUOczGz4J24JBlzWclSB9Vmx8d+9Z6bFCg== + dependencies: + "@babel/code-frame" "^7.0.0" + ajv "^6.9.1" + chalk "^2.1.0" + cross-spawn "^6.0.5" + debug "^4.0.1" + doctrine "^3.0.0" + eslint-scope "^4.0.2" + eslint-utils "^1.3.1" + eslint-visitor-keys "^1.0.0" + espree "^5.0.1" + esquery "^1.0.1" + esutils "^2.0.2" + file-entry-cache "^5.0.1" + functional-red-black-tree "^1.0.1" + glob "^7.1.2" + globals "^11.7.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + inquirer "^6.2.2" + js-yaml "^3.12.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.3.0" + lodash "^4.17.11" + minimatch "^3.0.4" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + optionator "^0.8.2" + path-is-inside "^1.0.2" + progress "^2.0.0" + regexpp "^2.0.1" + semver "^5.5.1" + strip-ansi "^4.0.0" + strip-json-comments "^2.0.1" + table "^5.2.3" + text-table "^0.2.0" + +espree@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a" + integrity sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A== + dependencies: + acorn "^6.0.7" + acorn-jsx "^5.0.0" + eslint-visitor-keys "^1.0.0" + esprima@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" @@ -2495,7 +3063,21 @@ esprima@^4.0.0, esprima@~4.0.0: resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -estraverse@^4.2.0: +esquery@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" + integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA== + dependencies: + estraverse "^4.0.0" + +esrecurse@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" + integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== + dependencies: + estraverse "^4.1.0" + +estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= @@ -2527,6 +3109,11 @@ exec-sh@^0.2.0: dependencies: merge "^1.2.0" +exec-sh@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.2.tgz#6738de2eb7c8e671d0366aea0b0db8c6f7d7391b" + integrity sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg== + execa@^0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/execa/-/execa-0.10.0.tgz#ff456a8f53f90f8eccc71a96d11bdfc7f082cb50" @@ -2598,16 +3185,17 @@ expand-range@^1.8.1: dependencies: fill-range "^2.1.0" -expect@^24.1.0: - version "24.1.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-24.1.0.tgz#88e73301c4c785cde5f16da130ab407bdaf8c0f2" - integrity sha512-lVcAPhaYkQcIyMS+F8RVwzbm1jro20IG8OkvxQ6f1JfqhVZyyudCwYogQ7wnktlf14iF3ii7ArIUO/mqvrW9Gw== +expect@^24.5.0: + version "24.5.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-24.5.0.tgz#492fb0df8378d8474cc84b827776b069f46294ed" + integrity sha512-p2Gmc0CLxOgkyA93ySWmHFYHUPFIHG6XZ06l7WArWAsrqYVaVEkOU5NtT5i68KUyGKbkQgDCkiT65bWmdoL6Bw== dependencies: + "@jest/types" "^24.5.0" ansi-styles "^3.2.0" - jest-get-type "^24.0.0" - jest-matcher-utils "^24.0.0" - jest-message-util "^24.0.0" - jest-regex-util "^24.0.0" + jest-get-type "^24.3.0" + jest-matcher-utils "^24.5.0" + jest-message-util "^24.5.0" + jest-regex-util "^24.3.0" extend-shallow@^1.1.2: version "1.1.4" @@ -2645,6 +3233,15 @@ external-editor@^2.0.4: iconv-lite "^0.4.17" tmp "^0.0.33" +external-editor@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.0.3.tgz#5866db29a97826dbe4bf3afd24070ead9ea43a27" + integrity sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + extglob@^0.3.1: version "0.3.2" resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" @@ -2703,7 +3300,7 @@ fast-glob@^2.0.2, fast-glob@^2.2.6: merge2 "^1.2.3" micromatch "^3.1.10" -fast-json-stable-stringify@^2.0.0: +fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= @@ -2741,7 +3338,7 @@ fbjs-scripts@^1.0.0: semver "^5.1.0" through2 "^2.0.0" -fbjs@^0.8.17, fbjs@^0.8.9: +fbjs@^0.8.9: version "0.8.17" resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd" integrity sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90= @@ -2780,6 +3377,13 @@ figures@^2.0.0: dependencies: escape-string-regexp "^1.0.5" +file-entry-cache@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" + integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== + dependencies: + flat-cache "^2.0.1" + filename-regex@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" @@ -2863,10 +3467,19 @@ find-versions@^2.0.0: array-uniq "^1.0.0" semver-regex "^1.0.0" -flow-bin@^0.80.0: - version "0.80.0" - resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.80.0.tgz#04cc1ee626a6f50786f78170c92ebe1745235403" - integrity sha512-0wRnqvXErQRPrx6GBLB5swgndfWkotd9MgfePgT7Z+VsE046c8Apzl7KKTCypB/pzn0pZF2g5Jurxxb2umET8g== +flat-cache@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" + integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== + dependencies: + flatted "^2.0.0" + rimraf "2.6.3" + write "1.0.3" + +flatted@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.0.tgz#55122b6536ea496b4b44893ee2608141d10d9916" + integrity sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg== flush-write-stream@^1.0.0: version "1.1.1" @@ -2939,7 +3552,7 @@ fs-extra@^1.0.0: jsonfile "^2.1.0" klaw "^1.0.0" -fs-extra@^7.0.0: +fs-extra@^7.0.0, fs-extra@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== @@ -3002,6 +3615,11 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + gauge@~1.2.5: version "1.2.7" resolved "https://registry.yarnpkg.com/gauge/-/gauge-1.2.7.tgz#e9cec5483d3d4ee0ef44b60a7d99e4935e136d93" @@ -3051,6 +3669,11 @@ get-caller-file@^1.0.1: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== +get-stdin@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" + integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== + get-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" @@ -3157,7 +3780,7 @@ global@^4.3.0: min-document "^2.19.0" process "~0.5.1" -globals@^11.1.0: +globals@^11.1.0, globals@^11.7.0: version "11.11.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.11.0.tgz#dcf93757fa2de5486fbeed7118538adf789e9c2e" integrity sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw== @@ -3374,7 +3997,7 @@ humanize-ms@^1.2.1: dependencies: ms "^2.0.0" -iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.4, iconv-lite@~0.4.13: +iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.13: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -3403,7 +4026,7 @@ ignore@^3.3.5: resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== -ignore@^4.0.3: +ignore@^4.0.3, ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== @@ -3421,6 +4044,14 @@ import-fresh@^2.0.0: caller-path "^2.0.0" resolve-from "^3.0.0" +import-fresh@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.0.0.tgz#a3d897f420cab0e671236897f75bc14b4885c390" + integrity sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + import-from@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" @@ -3441,7 +4072,7 @@ import-local@^2.0.0: pkg-dir "^3.0.0" resolve-cwd "^2.0.0" -imurmurhash@^0.1.4: +imurmurhash@*, imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= @@ -3503,6 +4134,25 @@ inquirer@^3.0.6: strip-ansi "^4.0.0" through "^2.3.6" +inquirer@^6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.2.2.tgz#46941176f65c9eb20804627149b743a218f25406" + integrity sha512-Z2rREiXA6cHRR9KBOarR3WuLlFzlIfAEIiB45ll5SSadMg7WqOh1MKEjjndfuH5ewXdixWCxqnVfGOQzPeiztA== + dependencies: + ansi-escapes "^3.2.0" + chalk "^2.4.2" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^3.0.3" + figures "^2.0.0" + lodash "^4.17.11" + mute-stream "0.0.7" + run-async "^2.2.0" + rxjs "^6.4.0" + string-width "^2.1.0" + strip-ansi "^5.0.0" + through "^2.3.6" + into-stream@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/into-stream/-/into-stream-4.0.0.tgz#ef10ee2ffb6f78af34c93194bbdc36c35f7d8a9d" @@ -3511,7 +4161,7 @@ into-stream@^4.0.0: from2 "^2.1.1" p-is-promise "^2.0.0" -invariant@^2.2.4: +invariant@2.2.4, invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== @@ -3848,7 +4498,7 @@ isarray@0.0.1: resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= -isarray@1.0.0, isarray@~1.0.0: +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= @@ -3894,7 +4544,7 @@ issue-parser@^3.0.0: lodash.isstring "^4.0.1" lodash.uniqby "^4.7.0" -istanbul-api@^2.0.8: +istanbul-api@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-2.1.1.tgz#194b773f6d9cbc99a9258446848b0f988951c4d0" integrity sha512-kVmYrehiwyeBAk/wE71tW6emzLiHGjYIiDrc8sfyty4F8M02/lrgXSm+R1kXysmF20zArvmZXjlE/mg24TVPJw== @@ -3970,367 +4620,380 @@ java-properties@^0.2.9: resolved "https://registry.yarnpkg.com/java-properties/-/java-properties-0.2.10.tgz#2551560c25fa1ad94d998218178f233ad9b18f60" integrity sha512-CpKJh9VRNhS+XqZtg1UMejETGEiqwCGDC/uwPEEQwc2nfdbSm73SIE29TplG2gLYuBOOTNDqxzG6A9NtEPLt0w== -jest-changed-files@^24.0.0: - version "24.0.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-24.0.0.tgz#c02c09a8cc9ca93f513166bc773741bd39898ff7" - integrity sha512-nnuU510R9U+UX0WNb5XFEcsrMqriSiRLeO9KWDFgPrpToaQm60prfQYpxsXigdClpvNot5bekDY440x9dNGnsQ== +jest-changed-files@^24.5.0: + version "24.5.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-24.5.0.tgz#4075269ee115d87194fd5822e642af22133cf705" + integrity sha512-Ikl29dosYnTsH9pYa1Tv9POkILBhN/TLZ37xbzgNsZ1D2+2n+8oEZS2yP1BrHn/T4Rs4Ggwwbp/x8CKOS5YJOg== dependencies: + "@jest/types" "^24.5.0" execa "^1.0.0" throat "^4.0.0" -jest-cli@^24.1.0: - version "24.1.0" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-24.1.0.tgz#f7cc98995f36e7210cce3cbb12974cbf60940843" - integrity sha512-U/iyWPwOI0T1CIxVLtk/2uviOTJ/OiSWJSe8qt6X1VkbbgP+nrtLJlmT9lPBe4lK78VNFJtrJ7pttcNv/s7yCw== +jest-cli@^24.5.0: + version "24.5.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-24.5.0.tgz#598139d3446d1942fb7dc93944b9ba766d756d4b" + integrity sha512-P+Jp0SLO4KWN0cGlNtC7JV0dW1eSFR7eRpoOucP2UM0sqlzp/bVHeo71Omonvigrj9AvCKy7NtQANtqJ7FXz8g== dependencies: - ansi-escapes "^3.0.0" + "@jest/core" "^24.5.0" + "@jest/test-result" "^24.5.0" + "@jest/types" "^24.5.0" chalk "^2.0.1" exit "^0.1.2" - glob "^7.1.2" - graceful-fs "^4.1.15" import-local "^2.0.0" is-ci "^2.0.0" - istanbul-api "^2.0.8" - istanbul-lib-coverage "^2.0.2" - istanbul-lib-instrument "^3.0.1" - istanbul-lib-source-maps "^3.0.1" - jest-changed-files "^24.0.0" - jest-config "^24.1.0" - jest-environment-jsdom "^24.0.0" - jest-get-type "^24.0.0" - jest-haste-map "^24.0.0" - jest-message-util "^24.0.0" - jest-regex-util "^24.0.0" - jest-resolve-dependencies "^24.1.0" - jest-runner "^24.1.0" - jest-runtime "^24.1.0" - jest-snapshot "^24.1.0" - jest-util "^24.0.0" - jest-validate "^24.0.0" - jest-watcher "^24.0.0" - jest-worker "^24.0.0" - micromatch "^3.1.10" - node-notifier "^5.2.1" - p-each-series "^1.0.0" - pirates "^4.0.0" + jest-config "^24.5.0" + jest-util "^24.5.0" + jest-validate "^24.5.0" prompts "^2.0.1" - realpath-native "^1.0.0" - rimraf "^2.5.4" - slash "^2.0.0" - string-length "^2.0.0" - strip-ansi "^5.0.0" - which "^1.2.12" + realpath-native "^1.1.0" yargs "^12.0.2" -jest-config@^24.1.0: - version "24.1.0" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-24.1.0.tgz#6ea6881cfdd299bc86cc144ee36d937c97c3850c" - integrity sha512-FbbRzRqtFC6eGjG5VwsbW4E5dW3zqJKLWYiZWhB0/4E5fgsMw8GODLbGSrY5t17kKOtCWb/Z7nsIThRoDpuVyg== +jest-config@^24.5.0: + version "24.5.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-24.5.0.tgz#404d1bc6bb81aed6bd1890d07e2dca9fbba2e121" + integrity sha512-t2UTh0Z2uZhGBNVseF8wA2DS2SuBiLOL6qpLq18+OZGfFUxTM7BzUVKyHFN/vuN+s/aslY1COW95j1Rw81huOQ== dependencies: "@babel/core" "^7.1.0" - babel-jest "^24.1.0" + "@jest/types" "^24.5.0" + babel-jest "^24.5.0" chalk "^2.0.1" glob "^7.1.1" - jest-environment-jsdom "^24.0.0" - jest-environment-node "^24.0.0" - jest-get-type "^24.0.0" - jest-jasmine2 "^24.1.0" - jest-regex-util "^24.0.0" - jest-resolve "^24.1.0" - jest-util "^24.0.0" - jest-validate "^24.0.0" + jest-environment-jsdom "^24.5.0" + jest-environment-node "^24.5.0" + jest-get-type "^24.3.0" + jest-jasmine2 "^24.5.0" + jest-regex-util "^24.3.0" + jest-resolve "^24.5.0" + jest-util "^24.5.0" + jest-validate "^24.5.0" micromatch "^3.1.10" - pretty-format "^24.0.0" - realpath-native "^1.0.2" + pretty-format "^24.5.0" + realpath-native "^1.1.0" -jest-diff@^24.0.0: - version "24.0.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.0.0.tgz#a3e5f573dbac482f7d9513ac9cfa21644d3d6b34" - integrity sha512-XY5wMpRaTsuMoU+1/B2zQSKQ9RdE9gsLkGydx3nvApeyPijLA8GtEvIcPwISRCer+VDf9W1mStTYYq6fPt8ryA== +jest-diff@^24.5.0: + version "24.5.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.5.0.tgz#a2d8627964bb06a91893c0fbcb28ab228c257652" + integrity sha512-mCILZd9r7zqL9Uh6yNoXjwGQx0/J43OD2vvWVKwOEOLZliQOsojXwqboubAQ+Tszrb6DHGmNU7m4whGeB9YOqw== dependencies: chalk "^2.0.1" - diff-sequences "^24.0.0" - jest-get-type "^24.0.0" - pretty-format "^24.0.0" + diff-sequences "^24.3.0" + jest-get-type "^24.3.0" + pretty-format "^24.5.0" -jest-docblock@23.2.0, jest-docblock@^23.2.0: - version "23.2.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-23.2.0.tgz#f085e1f18548d99fdd69b20207e6fd55d91383a7" - integrity sha1-8IXh8YVI2Z/dabICB+b9VdkTg6c= +jest-docblock@^24.3.0: + version "24.3.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-24.3.0.tgz#b9c32dac70f72e4464520d2ba4aec02ab14db5dd" + integrity sha512-nlANmF9Yq1dufhFlKG9rasfQlrY7wINJbo3q01tu56Jv5eBU5jirylhF2O5ZBnLxzOVBGRDz/9NAwNyBtG4Nyg== dependencies: detect-newline "^2.1.0" -jest-docblock@^24.0.0: - version "24.0.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-24.0.0.tgz#54d77a188743e37f62181a91a01eb9222289f94e" - integrity sha512-KfAKZ4SN7CFOZpWg4i7g7MSlY0M+mq7K0aMqENaG2vHuhC9fc3vkpU/iNN9sOus7v3h3Y48uEjqz3+Gdn2iptA== - dependencies: - detect-newline "^2.1.0" - -jest-each@^24.0.0: - version "24.0.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-24.0.0.tgz#10987a06b21c7ffbfb7706c89d24c52ed864be55" - integrity sha512-gFcbY4Cu55yxExXMkjrnLXov3bWO3dbPAW7HXb31h/DNWdNc/6X8MtxGff8nh3/MjkF9DpVqnj0KsPKuPK0cpA== +jest-each@^24.5.0: + version "24.5.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-24.5.0.tgz#da14d017a1b7d0f01fb458d338314cafe7f72318" + integrity sha512-6gy3Kh37PwIT5sNvNY2VchtIFOOBh8UCYnBlxXMb5sr5wpJUDPTUATX2Axq1Vfk+HWTMpsYPeVYp4TXx5uqUBw== dependencies: + "@jest/types" "^24.5.0" chalk "^2.0.1" - jest-get-type "^24.0.0" - jest-util "^24.0.0" - pretty-format "^24.0.0" + jest-get-type "^24.3.0" + jest-util "^24.5.0" + pretty-format "^24.5.0" -jest-environment-jsdom@^24.0.0: - version "24.0.0" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-24.0.0.tgz#5affa0654d6e44cd798003daa1a8701dbd6e4d11" - integrity sha512-1YNp7xtxajTRaxbylDc2pWvFnfDTH5BJJGyVzyGAKNt/lEULohwEV9zFqTgG4bXRcq7xzdd+sGFws+LxThXXOw== +jest-environment-jsdom@^24.5.0: + version "24.5.0" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-24.5.0.tgz#1c3143063e1374100f8c2723a8b6aad23b6db7eb" + integrity sha512-62Ih5HbdAWcsqBx2ktUnor/mABBo1U111AvZWcLKeWN/n/gc5ZvDBKe4Og44fQdHKiXClrNGC6G0mBo6wrPeGQ== dependencies: - jest-mock "^24.0.0" - jest-util "^24.0.0" + "@jest/environment" "^24.5.0" + "@jest/fake-timers" "^24.5.0" + "@jest/types" "^24.5.0" + jest-mock "^24.5.0" + jest-util "^24.5.0" jsdom "^11.5.1" -jest-environment-node@^24.0.0: - version "24.0.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-24.0.0.tgz#330948980656ed8773ce2e04eb597ed91e3c7190" - integrity sha512-62fOFcaEdU0VLaq8JL90TqwI7hLn0cOKOl8vY2n477vRkCJRojiRRtJVRzzCcgFvs6gqU97DNqX5R0BrBP6Rxg== +jest-environment-node@^24.5.0: + version "24.5.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-24.5.0.tgz#763eebdf529f75b60aa600c6cf8cb09873caa6ab" + integrity sha512-du6FuyWr/GbKLsmAbzNF9mpr2Iu2zWSaq/BNHzX+vgOcts9f2ayXBweS7RAhr+6bLp6qRpMB6utAMF5Ygktxnw== dependencies: - jest-mock "^24.0.0" - jest-util "^24.0.0" + "@jest/environment" "^24.5.0" + "@jest/fake-timers" "^24.5.0" + "@jest/types" "^24.5.0" + jest-mock "^24.5.0" + jest-util "^24.5.0" -jest-get-type@^24.0.0: - version "24.0.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.0.0.tgz#36e72930b78e33da59a4f63d44d332188278940b" - integrity sha512-z6/Eyf6s9ZDGz7eOvl+fzpuJmN9i0KyTt1no37/dHu8galssxz5ZEgnc1KaV8R31q1khxyhB4ui/X5ZjjPk77w== +jest-get-type@^24.3.0: + version "24.3.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.3.0.tgz#582cfd1a4f91b5cdad1d43d2932f816d543c65da" + integrity sha512-HYF6pry72YUlVcvUx3sEpMRwXEWGEPlJ0bSPVnB3b3n++j4phUEoSPcS6GC0pPJ9rpyPSe4cb5muFo6D39cXow== -jest-haste-map@23.5.0: - version "23.5.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-23.5.0.tgz#d4ca618188bd38caa6cb20349ce6610e194a8065" - integrity sha512-bt9Swigb6KZ6ZQq/fQDUwdUeHenVvZ6G/lKwJjwRGp+Fap8D4B3bND3FaeJg7vXVsLX8hXshRArbVxLop/5wLw== +jest-haste-map@24.0.0-alpha.6: + version "24.0.0-alpha.6" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.0.0-alpha.6.tgz#fb2c785080f391b923db51846b86840d0d773076" + integrity sha512-+NO2HMbjvrG8BC39ieLukdpFrcPhhjCJGhpbHodHNZygH1Tt06WrlNYGpZtWKx/zpf533tCtMQXO/q59JenjNw== dependencies: fb-watchman "^2.0.0" graceful-fs "^4.1.11" invariant "^2.2.4" - jest-docblock "^23.2.0" - jest-serializer "^23.0.1" - jest-worker "^23.2.0" + jest-serializer "^24.0.0-alpha.6" + jest-worker "^24.0.0-alpha.6" micromatch "^2.3.11" - sane "^2.0.0" + sane "^3.0.0" -jest-haste-map@^24.0.0: - version "24.0.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.0.0.tgz#e9ef51b2c9257384b4d6beb83bd48c65b37b5e6e" - integrity sha512-CcViJyUo41IQqttLxXVdI41YErkzBKbE6cS6dRAploCeutePYfUimWd3C9rQEWhX0YBOQzvNsC0O9nYxK2nnxQ== +jest-haste-map@^24.5.0: + version "24.5.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.5.0.tgz#3f17d0c548b99c0c96ed2893f9c0ccecb2eb9066" + integrity sha512-mb4Yrcjw9vBgSvobDwH8QUovxApdimGcOkp+V1ucGGw4Uvr3VzZQBJhNm1UY3dXYm4XXyTW2G7IBEZ9pM2ggRQ== dependencies: + "@jest/types" "^24.5.0" fb-watchman "^2.0.0" graceful-fs "^4.1.15" invariant "^2.2.4" - jest-serializer "^24.0.0" - jest-util "^24.0.0" - jest-worker "^24.0.0" + jest-serializer "^24.4.0" + jest-util "^24.5.0" + jest-worker "^24.4.0" micromatch "^3.1.10" - sane "^3.0.0" + sane "^4.0.3" -jest-jasmine2@^24.1.0: - version "24.1.0" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-24.1.0.tgz#8377324b967037c440f0a549ee0bbd9912055db6" - integrity sha512-H+o76SdSNyCh9fM5K8upK45YTo/DiFx5w2YAzblQebSQmukDcoVBVeXynyr7DDnxh+0NTHYRCLwJVf3tC518wg== +jest-jasmine2@^24.5.0: + version "24.5.0" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-24.5.0.tgz#e6af4d7f73dc527d007cca5a5b177c0bcc29d111" + integrity sha512-sfVrxVcx1rNUbBeyIyhkqZ4q+seNKyAG6iM0S2TYBdQsXjoFDdqWFfsUxb6uXSsbimbXX/NMkJIwUZ1uT9+/Aw== dependencies: "@babel/traverse" "^7.1.0" + "@jest/environment" "^24.5.0" + "@jest/test-result" "^24.5.0" + "@jest/types" "^24.5.0" chalk "^2.0.1" co "^4.6.0" - expect "^24.1.0" + expect "^24.5.0" is-generator-fn "^2.0.0" - jest-each "^24.0.0" - jest-matcher-utils "^24.0.0" - jest-message-util "^24.0.0" - jest-snapshot "^24.1.0" - jest-util "^24.0.0" - pretty-format "^24.0.0" + jest-each "^24.5.0" + jest-matcher-utils "^24.5.0" + jest-message-util "^24.5.0" + jest-runtime "^24.5.0" + jest-snapshot "^24.5.0" + jest-util "^24.5.0" + pretty-format "^24.5.0" throat "^4.0.0" -jest-leak-detector@^24.0.0: - version "24.0.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-24.0.0.tgz#78280119fd05ee98317daee62cddb3aa537a31c6" - integrity sha512-ZYHJYFeibxfsDSKowjDP332pStuiFT2xfc5R67Rjm/l+HFJWJgNIOCOlQGeXLCtyUn3A23+VVDdiCcnB6dTTrg== +jest-leak-detector@^24.5.0: + version "24.5.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-24.5.0.tgz#21ae2b3b0da252c1171cd494f75696d65fb6fa89" + integrity sha512-LZKBjGovFRx3cRBkqmIg+BZnxbrLqhQl09IziMk3oeh1OV81Hg30RUIx885mq8qBv1PA0comB9bjKcuyNO1bCQ== dependencies: - pretty-format "^24.0.0" + pretty-format "^24.5.0" -jest-matcher-utils@^24.0.0: - version "24.0.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-24.0.0.tgz#fc9c41cfc49b2c3ec14e576f53d519c37729d579" - integrity sha512-LQTDmO+aWRz1Tf9HJg+HlPHhDh1E1c65kVwRFo5mwCVp5aQDzlkz4+vCvXhOKFjitV2f0kMdHxnODrXVoi+rlA== +jest-matcher-utils@^24.5.0: + version "24.5.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-24.5.0.tgz#5995549dcf09fa94406e89526e877b094dad8770" + integrity sha512-QM1nmLROjLj8GMGzg5VBra3I9hLpjMPtF1YqzQS3rvWn2ltGZLrGAO1KQ9zUCVi5aCvrkbS5Ndm2evIP9yZg1Q== dependencies: chalk "^2.0.1" - jest-diff "^24.0.0" - jest-get-type "^24.0.0" - pretty-format "^24.0.0" + jest-diff "^24.5.0" + jest-get-type "^24.3.0" + pretty-format "^24.5.0" -jest-message-util@^24.0.0: - version "24.0.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.0.0.tgz#a07a141433b2c992dbaec68d4cbfe470ba289619" - integrity sha512-J9ROJIwz/IeC+eV1XSwnRK4oAwPuhmxEyYx1+K5UI+pIYwFZDSrfZaiWTdq0d2xYFw4Xiu+0KQWsdsQpgJMf3Q== +jest-message-util@^24.5.0: + version "24.5.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.5.0.tgz#181420a65a7ef2e8b5c2f8e14882c453c6d41d07" + integrity sha512-6ZYgdOojowCGiV0D8WdgctZEAe+EcFU+KrVds+0ZjvpZurUW2/oKJGltJ6FWY2joZwYXN5VL36GPV6pNVRqRnQ== dependencies: "@babel/code-frame" "^7.0.0" + "@jest/test-result" "^24.5.0" + "@jest/types" "^24.5.0" + "@types/stack-utils" "^1.0.1" chalk "^2.0.1" micromatch "^3.1.10" slash "^2.0.0" stack-utils "^1.0.1" -jest-mock@^24.0.0: - version "24.0.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-24.0.0.tgz#9a4b53e01d66a0e780f7d857462d063e024c617d" - integrity sha512-sQp0Hu5fcf5NZEh1U9eIW2qD0BwJZjb63Yqd98PQJFvf/zzUTBoUAwv/Dc/HFeNHIw1f3hl/48vNn+j3STaI7A== - -jest-regex-util@^24.0.0: - version "24.0.0" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-24.0.0.tgz#4feee8ec4a358f5bee0a654e94eb26163cb9089a" - integrity sha512-Jv/uOTCuC+PY7WpJl2mpoI+WbY2ut73qwwO9ByJJNwOCwr1qWhEW2Lyi2S9ZewUdJqeVpEBisdEVZSI+Zxo58Q== - -jest-resolve-dependencies@^24.1.0: - version "24.1.0" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-24.1.0.tgz#78f738a2ec59ff4d00751d9da56f176e3f589f6c" - integrity sha512-2VwPsjd3kRPu7qe2cpytAgowCObk5AKeizfXuuiwgm1a9sijJDZe8Kh1sFj6FKvSaNEfCPlBVkZEJa2482m/Uw== +jest-mock@^24.5.0: + version "24.5.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-24.5.0.tgz#976912c99a93f2a1c67497a9414aa4d9da4c7b76" + integrity sha512-ZnAtkWrKf48eERgAOiUxVoFavVBziO2pAi2MfZ1+bGXVkDfxWLxU0//oJBkgwbsv6OAmuLBz4XFFqvCFMqnGUw== dependencies: - jest-regex-util "^24.0.0" - jest-snapshot "^24.1.0" + "@jest/types" "^24.5.0" -jest-resolve@^24.1.0: - version "24.1.0" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-24.1.0.tgz#42ff0169b0ea47bfdbd0c52a0067ca7d022c7688" - integrity sha512-TPiAIVp3TG6zAxH28u/6eogbwrvZjBMWroSLBDkwkHKrqxB/RIdwkWDye4uqPlZIXWIaHtifY3L0/eO5Z0f2wg== +jest-pnp-resolver@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz#ecdae604c077a7fbc70defb6d517c3c1c898923a" + integrity sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ== + +jest-regex-util@^24.3.0: + version "24.3.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-24.3.0.tgz#d5a65f60be1ae3e310d5214a0307581995227b36" + integrity sha512-tXQR1NEOyGlfylyEjg1ImtScwMq8Oh3iJbGTjN7p0J23EuVX1MA8rwU69K4sLbCmwzgCUbVkm0FkSF9TdzOhtg== + +jest-resolve-dependencies@^24.5.0: + version "24.5.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-24.5.0.tgz#1a0dae9cdd41349ca4a84148b3e78da2ba33fd4b" + integrity sha512-dRVM1D+gWrFfrq2vlL5P9P/i8kB4BOYqYf3S7xczZ+A6PC3SgXYSErX/ScW/469pWMboM1uAhgLF+39nXlirCQ== dependencies: + "@jest/types" "^24.5.0" + jest-regex-util "^24.3.0" + jest-snapshot "^24.5.0" + +jest-resolve@^24.5.0: + version "24.5.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-24.5.0.tgz#8c16ba08f60a1616c3b1cd7afb24574f50a24d04" + integrity sha512-ZIfGqLX1Rg8xJpQqNjdoO8MuxHV1q/i2OO1hLXjgCWFWs5bsedS8UrOdgjUqqNae6DXA+pCyRmdcB7lQEEbXew== + dependencies: + "@jest/types" "^24.5.0" browser-resolve "^1.11.3" chalk "^2.0.1" - realpath-native "^1.0.0" + jest-pnp-resolver "^1.2.1" + realpath-native "^1.1.0" -jest-runner@^24.1.0: - version "24.1.0" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-24.1.0.tgz#3686a2bb89ce62800da23d7fdc3da2c32792943b" - integrity sha512-CDGOkT3AIFl16BLL/OdbtYgYvbAprwJ+ExKuLZmGSCSldwsuU2dEGauqkpvd9nphVdAnJUcP12e/EIlnTX0QXg== +jest-runner@^24.5.0: + version "24.5.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-24.5.0.tgz#9be26ece4fd4ab3dfb528b887523144b7c5ffca8" + integrity sha512-oqsiS9TkIZV5dVkD+GmbNfWBRPIvxqmlTQ+AQUJUQ07n+4xTSDc40r+aKBynHw9/tLzafC00DIbJjB2cOZdvMA== dependencies: + "@jest/console" "^24.3.0" + "@jest/environment" "^24.5.0" + "@jest/test-result" "^24.5.0" + "@jest/types" "^24.5.0" chalk "^2.4.2" exit "^0.1.2" graceful-fs "^4.1.15" - jest-config "^24.1.0" - jest-docblock "^24.0.0" - jest-haste-map "^24.0.0" - jest-jasmine2 "^24.1.0" - jest-leak-detector "^24.0.0" - jest-message-util "^24.0.0" - jest-runtime "^24.1.0" - jest-util "^24.0.0" - jest-worker "^24.0.0" + jest-config "^24.5.0" + jest-docblock "^24.3.0" + jest-haste-map "^24.5.0" + jest-jasmine2 "^24.5.0" + jest-leak-detector "^24.5.0" + jest-message-util "^24.5.0" + jest-resolve "^24.5.0" + jest-runtime "^24.5.0" + jest-util "^24.5.0" + jest-worker "^24.4.0" source-map-support "^0.5.6" throat "^4.0.0" -jest-runtime@^24.1.0: - version "24.1.0" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-24.1.0.tgz#7c157a2e776609e8cf552f956a5a19ec9c985214" - integrity sha512-59/BY6OCuTXxGeDhEMU7+N33dpMQyXq7MLK07cNSIY/QYt2QZgJ7Tjx+rykBI0skAoigFl0A5tmT8UdwX92YuQ== +jest-runtime@^24.5.0: + version "24.5.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-24.5.0.tgz#3a76e0bfef4db3896d5116e9e518be47ba771aa2" + integrity sha512-GTFHzfLdwpaeoDPilNpBrorlPoNZuZrwKKzKJs09vWwHo+9TOsIIuszK8cWOuKC7ss07aN1922Ge8fsGdsqCuw== dependencies: - "@babel/core" "^7.1.0" - babel-plugin-istanbul "^5.1.0" + "@jest/console" "^24.3.0" + "@jest/environment" "^24.5.0" + "@jest/source-map" "^24.3.0" + "@jest/transform" "^24.5.0" + "@jest/types" "^24.5.0" + "@types/yargs" "^12.0.2" chalk "^2.0.1" - convert-source-map "^1.4.0" exit "^0.1.2" - fast-json-stable-stringify "^2.0.0" glob "^7.1.3" graceful-fs "^4.1.15" - jest-config "^24.1.0" - jest-haste-map "^24.0.0" - jest-message-util "^24.0.0" - jest-regex-util "^24.0.0" - jest-resolve "^24.1.0" - jest-snapshot "^24.1.0" - jest-util "^24.0.0" - jest-validate "^24.0.0" - micromatch "^3.1.10" - realpath-native "^1.0.0" + jest-config "^24.5.0" + jest-haste-map "^24.5.0" + jest-message-util "^24.5.0" + jest-mock "^24.5.0" + jest-regex-util "^24.3.0" + jest-resolve "^24.5.0" + jest-snapshot "^24.5.0" + jest-util "^24.5.0" + jest-validate "^24.5.0" + realpath-native "^1.1.0" slash "^2.0.0" strip-bom "^3.0.0" - write-file-atomic "2.4.1" yargs "^12.0.2" -jest-serializer@23.0.1, jest-serializer@^23.0.1: - version "23.0.1" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-23.0.1.tgz#a3776aeb311e90fe83fab9e533e85102bd164165" - integrity sha1-o3dq6zEekP6D+rnlM+hRAr0WQWU= +jest-serializer@24.0.0-alpha.6: + version "24.0.0-alpha.6" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.0.0-alpha.6.tgz#27d2fee4b1a85698717a30c3ec2ab80767312597" + integrity sha512-IPA5T6/GhlE6dedSk7Cd7YfuORnYjN0VD5iJVFn1Q81RJjpj++Hen5kJbKcg547vXsQ1TddV15qOA/zeIfOCLw== -jest-serializer@^24.0.0: - version "24.0.0" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.0.0.tgz#522c44a332cdd194d8c0531eb06a1ee5afb4256b" - integrity sha512-9FKxQyrFgHtx3ozU+1a8v938ILBE7S8Ko3uiAVjT8Yfi2o91j/fj81jacCQZ/Ihjiff/VsUCXVgQ+iF1XdImOw== +jest-serializer@^24.0.0-alpha.6, jest-serializer@^24.4.0: + version "24.4.0" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.4.0.tgz#f70c5918c8ea9235ccb1276d232e459080588db3" + integrity sha512-k//0DtglVstc1fv+GY/VHDIjrtNjdYvYjMlbLUed4kxrE92sIUewOi5Hj3vrpB8CXfkJntRPDRjCrCvUhBdL8Q== -jest-snapshot@^24.1.0: - version "24.1.0" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-24.1.0.tgz#85e22f810357aa5994ab61f236617dc2205f2f5b" - integrity sha512-th6TDfFqEmXvuViacU1ikD7xFb7lQsPn2rJl7OEmnfIVpnrx3QNY2t3PE88meeg0u/mQ0nkyvmC05PBqO4USFA== +jest-snapshot@^24.5.0: + version "24.5.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-24.5.0.tgz#e5d224468a759fd19e36f01217aac912f500f779" + integrity sha512-eBEeJb5ROk0NcpodmSKnCVgMOo+Qsu5z9EDl3tGffwPzK1yV37mjGWF2YeIz1NkntgTzP+fUL4s09a0+0dpVWA== dependencies: "@babel/types" "^7.0.0" + "@jest/types" "^24.5.0" chalk "^2.0.1" - jest-diff "^24.0.0" - jest-matcher-utils "^24.0.0" - jest-message-util "^24.0.0" - jest-resolve "^24.1.0" + expect "^24.5.0" + jest-diff "^24.5.0" + jest-matcher-utils "^24.5.0" + jest-message-util "^24.5.0" + jest-resolve "^24.5.0" mkdirp "^0.5.1" natural-compare "^1.4.0" - pretty-format "^24.0.0" + pretty-format "^24.5.0" semver "^5.5.0" -jest-util@^24.0.0: - version "24.0.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.0.0.tgz#fd38fcafd6dedbd0af2944d7a227c0d91b68f7d6" - integrity sha512-QxsALc4wguYS7cfjdQSOr5HTkmjzkHgmZvIDkcmPfl1ib8PNV8QUWLwbKefCudWS0PRKioV+VbQ0oCUPC691fQ== +jest-util@^24.5.0: + version "24.5.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.5.0.tgz#9d9cb06d9dcccc8e7cc76df91b1635025d7baa84" + integrity sha512-Xy8JsD0jvBz85K7VsTIQDuY44s+hYJyppAhcsHsOsGisVtdhar6fajf2UOf2mEVEgh15ZSdA0zkCuheN8cbr1Q== dependencies: + "@jest/console" "^24.3.0" + "@jest/fake-timers" "^24.5.0" + "@jest/source-map" "^24.3.0" + "@jest/test-result" "^24.5.0" + "@jest/types" "^24.5.0" + "@types/node" "*" callsites "^3.0.0" chalk "^2.0.1" graceful-fs "^4.1.15" is-ci "^2.0.0" - jest-message-util "^24.0.0" mkdirp "^0.5.1" slash "^2.0.0" source-map "^0.6.0" -jest-validate@^24.0.0: - version "24.0.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-24.0.0.tgz#aa8571a46983a6538328fef20406b4a496b6c020" - integrity sha512-vMrKrTOP4BBFIeOWsjpsDgVXATxCspC9S1gqvbJ3Tnn/b9ACsJmteYeVx9830UMV28Cob1RX55x96Qq3Tfad4g== +jest-validate@^24.5.0: + version "24.5.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-24.5.0.tgz#62fd93d81214c070bb2d7a55f329a79d8057c7de" + integrity sha512-gg0dYszxjgK2o11unSIJhkOFZqNRQbWOAB2/LOUdsd2LfD9oXiMeuee8XsT0iRy5EvSccBgB4h/9HRbIo3MHgQ== dependencies: + "@jest/types" "^24.5.0" camelcase "^5.0.0" chalk "^2.0.1" - jest-get-type "^24.0.0" + jest-get-type "^24.3.0" leven "^2.1.0" - pretty-format "^24.0.0" + pretty-format "^24.5.0" -jest-watcher@^24.0.0: - version "24.0.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-24.0.0.tgz#20d44244d10b0b7312410aefd256c1c1eef68890" - integrity sha512-GxkW2QrZ4YxmW1GUWER05McjVDunBlKMFfExu+VsGmXJmpej1saTEKvONdx5RJBlVdpPI5x6E3+EDQSIGgl53g== +jest-watcher@^24.5.0: + version "24.5.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-24.5.0.tgz#da7bd9cb5967e274889b42078c8f501ae1c47761" + integrity sha512-/hCpgR6bg0nKvD3nv4KasdTxuhwfViVMHUATJlnGCD0r1QrmIssimPbmc5KfAQblAVxkD8xrzuij9vfPUk1/rA== dependencies: + "@jest/test-result" "^24.5.0" + "@jest/types" "^24.5.0" + "@types/node" "*" + "@types/yargs" "^12.0.9" ansi-escapes "^3.0.0" chalk "^2.0.1" - jest-util "^24.0.0" + jest-util "^24.5.0" string-length "^2.0.0" -jest-worker@23.2.0, jest-worker@^23.2.0: - version "23.2.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-23.2.0.tgz#faf706a8da36fae60eb26957257fa7b5d8ea02b9" - integrity sha1-+vcGqNo2+uYOsmlXJX+ntdjqArk= +jest-worker@24.0.0-alpha.6: + version "24.0.0-alpha.6" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.0.0-alpha.6.tgz#463681b92c117c57107135c14b9b9d6cd51d80ce" + integrity sha512-iXtH7MR9bjWlNnlnRBcrBRrb4cSVxML96La5vsnmBvDI+mJnkP5uEt6Fgpo5Y8f3z9y2Rd7wuPnKRxqQsiU/dA== dependencies: merge-stream "^1.0.1" -jest-worker@^24.0.0: - version "24.0.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.0.0.tgz#3d3483b077bf04f412f47654a27bba7e947f8b6d" - integrity sha512-s64/OThpfQvoCeHG963MiEZOAAxu8kHsaL/rCMF7lpdzo7vgF0CtPml9hfguOMgykgH/eOm4jFP4ibfHLruytg== +jest-worker@^24.0.0-alpha.6, jest-worker@^24.4.0: + version "24.4.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.4.0.tgz#fbc452b0120bb5c2a70cdc88fa132b48eeb11dd0" + integrity sha512-BH9X/klG9vxwoO99ZBUbZFfV8qO0XNZ5SIiCyYK2zOuJBl6YJVAeNIQjcoOVNu4HGEHeYEKsUWws8kSlSbZ9YQ== dependencies: + "@types/node" "*" merge-stream "^1.0.1" supports-color "^6.1.0" -jest@^24.0.0: - version "24.1.0" - resolved "https://registry.yarnpkg.com/jest/-/jest-24.1.0.tgz#b1e1135caefcf2397950ecf7f90e395fde866fd2" - integrity sha512-+q91L65kypqklvlRFfXfdzUKyngQLOcwGhXQaLmVHv+d09LkNXuBuGxlofTFW42XMzu3giIcChchTsCNUjQ78A== +jest@24.5.0: + version "24.5.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-24.5.0.tgz#38f11ae2c2baa2f86c2bc4d8a91d2b51612cd19a" + integrity sha512-lxL+Fq5/RH7inxxmfS2aZLCf8MsS+YCUBfeiNO6BWz/MmjhDGaIEA/2bzEf9q4Q0X+mtFHiinHFvQ0u+RvW/qQ== dependencies: import-local "^2.0.0" - jest-cli "^24.1.0" + jest-cli "^24.5.0" "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" @@ -4407,6 +5070,11 @@ json-schema@0.2.3: resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + json-stable-stringify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" @@ -4419,7 +5087,7 @@ json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= -json5@^2.1.0: +json5@2.x, json5@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.0.tgz#e7a0c62c48285c628d20a10b85c89bb807c32850" integrity sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ== @@ -4460,6 +5128,13 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" +jsx-ast-utils@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz#e801b1b39985e20fffc87b40e3748080e2dcac7f" + integrity sha1-6AGxs5mF4g//yHtA43SAgOLcrH8= + dependencies: + array-includes "^3.0.3" + kind-of@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-1.1.0.tgz#140a3d2d41a36d2efcfa9377b62c24f8495a5c44" @@ -4537,7 +5212,7 @@ leven@^2.1.0: resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" integrity sha1-wuep93IJTe6dNCAq6KzORoeHVYA= -levn@~0.3.0: +levn@^0.3.0, levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= @@ -4638,6 +5313,11 @@ lockfile@^1.0.4: dependencies: signal-exit "^3.0.2" +lodash._baseindexof@*: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash._baseindexof/-/lodash._baseindexof-3.1.0.tgz#fe52b53a1c6761e42618d654e4a25789ed61822c" + integrity sha1-/lK1OhxnYeQmGNZU5KJXie1hgiw= + lodash._baseuniq@~4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz#0ebb44e456814af7905c6212fa2c9b2d51b841e8" @@ -4646,11 +5326,33 @@ lodash._baseuniq@~4.6.0: lodash._createset "~4.0.0" lodash._root "~3.0.0" +lodash._bindcallback@*: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" + integrity sha1-5THCdkTPi1epnhftlbNcdIeJOS4= + +lodash._cacheindexof@*: + version "3.0.2" + resolved "https://registry.yarnpkg.com/lodash._cacheindexof/-/lodash._cacheindexof-3.0.2.tgz#3dc69ac82498d2ee5e3ce56091bafd2adc7bde92" + integrity sha1-PcaayCSY0u5ePOVgkbr9Ktx73pI= + +lodash._createcache@*: + version "3.1.2" + resolved "https://registry.yarnpkg.com/lodash._createcache/-/lodash._createcache-3.1.2.tgz#56d6a064017625e79ebca6b8018e17440bdcf093" + integrity sha1-VtagZAF2JeeevKa4AY4XRAvc8JM= + dependencies: + lodash._getnative "^3.0.0" + lodash._createset@~4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/lodash._createset/-/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26" integrity sha1-D0ZZ+7CddRlPqeK4imZE02PJ/iY= +lodash._getnative@*, lodash._getnative@^3.0.0: + version "3.9.1" + resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" + integrity sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U= + lodash._root@~3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" @@ -4701,6 +5403,11 @@ lodash.padstart@^4.1.0: resolved "https://registry.yarnpkg.com/lodash.padstart/-/lodash.padstart-4.6.1.tgz#d2e3eebff0d9d39ad50f5cbd1b52a7bce6bb611b" integrity sha1-0uPuv/DZ05rVD1y9G1KnvOa7YRs= +lodash.restparam@*: + version "3.6.1" + resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" + integrity sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU= + lodash.set@^4.3.2: version "4.3.2" resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" @@ -4721,6 +5428,11 @@ lodash.toarray@^4.4.0: resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561" integrity sha1-JMS/zWsvuji/0FlNsRedjptlZWE= +lodash.unescape@4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c" + integrity sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw= + lodash.union@~4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" @@ -4793,6 +5505,11 @@ make-dir@^1.0.0, make-dir@^1.3.0: dependencies: pify "^3.0.0" +make-error@1.x: + version "1.3.5" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8" + integrity sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g== + "make-fetch-happen@^2.5.0 || 3 || 4", make-fetch-happen@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-4.0.1.tgz#141497cb878f243ba93136c83d8aba12c216c083" @@ -4898,12 +5615,12 @@ mem@^1.1.0: mimic-fn "^1.0.0" mem@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-4.1.0.tgz#aeb9be2d21f47e78af29e4ac5978e8afa2ca5b8a" - integrity sha512-I5u6Q1x7wxO0kdOpYBB28xueHADYps5uty/zg936CiG8NTe5sJL8EjrCuLneuDW3PlMdZBGDIn8BirEVdovZvg== + version "4.2.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-4.2.0.tgz#5ee057680ed9cb8dad8a78d820f9a8897a102025" + integrity sha512-5fJxa68urlY0Ir8ijatKa3eRz5lwXnRCTvo9+TbTGAuTFJOwpGcY0X05moBd0nW45965Njt4CDI2GFQoG8DvqA== dependencies: map-age-cleaner "^0.1.1" - mimic-fn "^1.0.0" + mimic-fn "^2.0.0" p-is-promise "^2.0.0" meow@^4.0.0: @@ -4938,10 +5655,10 @@ merge@^1.2.0: resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145" integrity sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ== -metro-babel-register@^0.48.1: - version "0.48.5" - resolved "https://registry.yarnpkg.com/metro-babel-register/-/metro-babel-register-0.48.5.tgz#ece8131f959a1f7acf37af83c8e5696bfd0a448e" - integrity sha512-bJCessd7THqEfXrKEoj284XVjg9AGYbGqZiyV622l6ex9TvtVi1lToDY0TuAAuDXOm+V4vQXV7/HvR6JPP0dTQ== +metro-babel-register@0.51.0: + version "0.51.0" + resolved "https://registry.yarnpkg.com/metro-babel-register/-/metro-babel-register-0.51.0.tgz#d86d3f2d90b45c7a3c6ae67a53bd1e50bad7a24d" + integrity sha512-rhdvHFOZ7/ub019A3+aYs8YeLydb02/FAMsKr2Nz2Jlf6VUxWrMnrcT0NYX16F9TGdi2ulRlJ9dwvUmdhkk+Bw== dependencies: "@babel/core" "^7.0.0" "@babel/plugin-proposal-class-properties" "^7.0.0" @@ -4956,10 +5673,24 @@ metro-babel-register@^0.48.1: core-js "^2.2.2" escape-string-regexp "^1.0.5" -metro-babel7-plugin-react-transform@0.48.5: - version "0.48.5" - resolved "https://registry.yarnpkg.com/metro-babel7-plugin-react-transform/-/metro-babel7-plugin-react-transform-0.48.5.tgz#312eb0adf3764357c79b79acc6eb92646051b349" - integrity sha512-S0cA0msHBGw7PSwB6nAsvtHEpQXVwzKBaE4AibLpaBiIVdWkYpIOok653zs9x+E9QvQgcghAnlVnDV+MDM+rSw== +metro-babel-transformer@0.51.0: + version "0.51.0" + resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.51.0.tgz#9ee5199163ac46b2057527b3f8cbd8b089ffc03e" + integrity sha512-M7KEY/hjD3E8tJEliWgI0VOSaJtqaznC0ItM6FiMrhoGDqqa1BvGofl+EPcKqjBSOV1UgExua/T1VOIWbjwQsw== + dependencies: + "@babel/core" "^7.0.0" + +metro-babel-transformer@0.51.1: + version "0.51.1" + resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.51.1.tgz#97be9e2b96c78aa202b52ae05fb86f71327aef72" + integrity sha512-+tOnZZzOzufB86ASdfimUEGB1jBKsdsVpPdjNJZkueTFyvYlGqWDQKHM1w9bwKMeM/czPQ48Y6m8Bou6le0X4w== + dependencies: + "@babel/core" "^7.0.0" + +metro-babel7-plugin-react-transform@0.51.0: + version "0.51.0" + resolved "https://registry.yarnpkg.com/metro-babel7-plugin-react-transform/-/metro-babel7-plugin-react-transform-0.51.0.tgz#af27dd81666b91f05d2b371b0d6d283c585e38b6" + integrity sha512-dZ95kXcE2FJMoRsYhxr7YLCbOlHWKwe0bOpihRhfImDTgFfuKIzU4ROQwMUbE0NCbzB+ATFsa2FZ3pHDJ5GI0w== dependencies: "@babel/helper-module-imports" "^7.0.0" @@ -4970,53 +5701,60 @@ metro-babel7-plugin-react-transform@0.51.1: dependencies: "@babel/helper-module-imports" "^7.0.0" -metro-cache@0.48.5: - version "0.48.5" - resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.48.5.tgz#5ab3ad13c9df527f4196f0de096a3d496db97a6b" - integrity sha512-vlUf3A6+U3LXcf6wAn42N22q1h7MMoopA25w5KR4Flwd0xKVokxHwsTo9v06vpn4gqFtpXWCpEJSBaYRrWYJwg== +metro-babel7-plugin-react-transform@0.53.1: + version "0.53.1" + resolved "https://registry.yarnpkg.com/metro-babel7-plugin-react-transform/-/metro-babel7-plugin-react-transform-0.53.1.tgz#9ad31e5c84f5003333a6a3cf79f2d093cd3b2ddc" + integrity sha512-98lEpTu7mox/7QurxVuLnbjrGDdayjpS2Z1T4vkLcP+mBxzloKJuTRnmtyWC8cNlx9qjimHGDlqtNY78rQ8rsA== dependencies: - jest-serializer "23.0.1" - metro-core "0.48.5" + "@babel/helper-module-imports" "^7.0.0" + +metro-cache@0.51.1: + version "0.51.1" + resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.51.1.tgz#d0b296eab8e009214413bba87e4eac3d9b44cd04" + integrity sha512-0m1+aicsw77LVAehNuTxDpE1c/7Xv/ajRD+UL/lFCWUxnrjSbxVtIKr8l5DxEY11082c1axVRuaV9e436W+eXg== + dependencies: + jest-serializer "24.0.0-alpha.6" + metro-core "0.51.1" mkdirp "^0.5.1" rimraf "^2.5.4" -metro-config@0.48.5: - version "0.48.5" - resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.48.5.tgz#05624064617eb648ee6e336951b60ac665230a45" - integrity sha512-b+EmFgBOAEUM5THjJ2EU6CJxnULLC5V1Q8S8dz4xX4v96eLIsRCLPrXgYKATHJTVi0qw99ATVRsOBZVZ77fwjg== +metro-config@0.51.1, metro-config@^0.51.0: + version "0.51.1" + resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.51.1.tgz#8f1a241ce2c0b521cd492c39bc5c6c69e3397b82" + integrity sha512-WCNd0tTI9gb/ubgTqK1+ljZL4b3hsXVinsOAtep4nHiVb6DSDdbO2yXDD2rpYx3NE6hDRMFS9HHg6G0139pAqQ== dependencies: cosmiconfig "^5.0.5" - metro "0.48.5" - metro-cache "0.48.5" - metro-core "0.48.5" - pretty-format "^23.4.1" + metro "0.51.1" + metro-cache "0.51.1" + metro-core "0.51.1" + pretty-format "24.0.0-alpha.6" -metro-core@0.48.5, metro-core@^0.48.1: - version "0.48.5" - resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.48.5.tgz#eef57d0ea947cfd2e44d86b20592a321ca234b89" - integrity sha512-Yp0BOAHhxf/qdNkwJhemVdD2Y59iyaTjwxUimCmeD8u5VEL6mLgEC1S0KczyWEiAgX3Fs48rezCAcx3mo67wXg== +metro-core@0.51.1, metro-core@^0.51.0: + version "0.51.1" + resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.51.1.tgz#e7227fb1dd1bb3f953272fad9876e6201140b038" + integrity sha512-sG1yACjdFqmIzZN50HqLTKUMp1oy0AehHhmIuYeIllo1DjX6Y2o3UAT3rGP8U+SAqJGXf/OWzl6VNyRPGDENfA== dependencies: - jest-haste-map "23.5.0" + jest-haste-map "24.0.0-alpha.6" lodash.throttle "^4.1.1" - metro-resolver "0.48.5" + metro-resolver "0.51.1" wordwrap "^1.0.0" -metro-memory-fs@^0.48.1: - version "0.48.5" - resolved "https://registry.yarnpkg.com/metro-memory-fs/-/metro-memory-fs-0.48.5.tgz#ae390f494ff0d54f2fb60531a3e4b83282a6b66d" - integrity sha512-dxN0dBtMOR1CvyRIOM/NE+uFirybWb4y2PZke0Z8bpYn6ttmv8ZF3PVdFxJf9v9irVBSOIPD0mD5zllxQkXzhg== +metro-memory-fs@^0.51.0: + version "0.51.1" + resolved "https://registry.yarnpkg.com/metro-memory-fs/-/metro-memory-fs-0.51.1.tgz#624291f5956b0fd11532d80b1b85d550926f96c9" + integrity sha512-dXVUpLPLwfQcYHd1HlqHGVzBsiwvUdT92TDSbdc10152TP+iynHBqLDWbxt0MAtd6c/QXwOuGZZ1IcX3+lv5iw== -metro-minify-uglify@0.48.5: - version "0.48.5" - resolved "https://registry.yarnpkg.com/metro-minify-uglify/-/metro-minify-uglify-0.48.5.tgz#c8e878ce31adc1f9af3550917da7028b9eb91bc1" - integrity sha512-tiHVYlUMuL91YjQPx9BzzzXy5jAAA5SWLqlvWfmM6m9faWtFeCv8Se27vVNuPDkOPYyL8qPCRhUpZMUhA0yN2g== +metro-minify-uglify@0.51.1: + version "0.51.1" + resolved "https://registry.yarnpkg.com/metro-minify-uglify/-/metro-minify-uglify-0.51.1.tgz#60cd8fe4d3e82d6670c717b8ddb52ae63199c0e4" + integrity sha512-HAqd/rFrQ6mnbqVAszDXIKTg2rqHlY9Fm8DReakgbkAeyMbF2mH3kEgtesPmTrhajdFk81UZcNSm6wxj1JMgVg== dependencies: uglify-es "^3.1.9" -metro-react-native-babel-preset@0.48.5: - version "0.48.5" - resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.48.5.tgz#cafa1c3ea326a447a89031928b0932f38a65815c" - integrity sha512-ldG1bsusB5zlS1fhAiSLRjUA7I/Chn/dniaXTlkUpgiqyEAaDDmqhkDJ8gyZw3rhlLMVswlBd3o6I8yYti+57w== +metro-react-native-babel-preset@0.51.0: + version "0.51.0" + resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.51.0.tgz#978d960acf2d214bbbe43e59145878d663bd07de" + integrity sha512-Y/aPeLl4RzY8IEAneOyDcpdjto/8yjIuX9eUWRngjSqdHYhGQtqiSBpfTpo0BvXpwNRLwCLHyXo58gNpckTJFw== dependencies: "@babel/plugin-proposal-class-properties" "^7.0.0" "@babel/plugin-proposal-export-default-from" "^7.0.0" @@ -5051,10 +5789,10 @@ metro-react-native-babel-preset@0.48.5: "@babel/plugin-transform-typescript" "^7.0.0" "@babel/plugin-transform-unicode-regex" "^7.0.0" "@babel/template" "^7.0.0" - metro-babel7-plugin-react-transform "0.48.5" + metro-babel7-plugin-react-transform "0.51.0" react-transform-hmr "^1.0.4" -metro-react-native-babel-preset@^0.51.1: +metro-react-native-babel-preset@0.51.1: version "0.51.1" resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.51.1.tgz#44aeeedfea37f7c2ab8f6f273fa71b90fe65f089" integrity sha512-e9tsYDFhU70gar0jQWcZXRPJVCv4k7tEs6Pm74wXO2OO/T1MEumbvniDIGwGG8bG8RUnYdHhjcaiub2Vc5BRWw== @@ -5095,24 +5833,86 @@ metro-react-native-babel-preset@^0.51.1: metro-babel7-plugin-react-transform "0.51.1" react-transform-hmr "^1.0.4" -metro-resolver@0.48.5: - version "0.48.5" - resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.48.5.tgz#d2ff84afab13ec3962685953ebd03d878e1f4c36" - integrity sha512-lScSpLJKZMmNPRwvcY6zj28AwMOcI1M5bCCv+m06VWcISCTq1KlaKVwqLKmFgUtPkoFtFLD+PVKRKCRUxj1opg== +metro-react-native-babel-preset@0.53.1: + version "0.53.1" + resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.53.1.tgz#6cd9e41a1b9a6e210e71ef2adf114219b4eaf2ec" + integrity sha512-Uf8EGL8kIPhDkoSdAAysNPxPQclUS2R1QC4cwnc8bkk2f6yqGn+1CorfiY9AaqlLEth5mKQqdtRYFDTFfB9QyA== + dependencies: + "@babel/plugin-proposal-class-properties" "^7.0.0" + "@babel/plugin-proposal-export-default-from" "^7.0.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.0.0" + "@babel/plugin-proposal-object-rest-spread" "^7.0.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.0.0" + "@babel/plugin-proposal-optional-chaining" "^7.0.0" + "@babel/plugin-syntax-dynamic-import" "^7.0.0" + "@babel/plugin-syntax-export-default-from" "^7.0.0" + "@babel/plugin-syntax-flow" "^7.2.0" + "@babel/plugin-transform-arrow-functions" "^7.0.0" + "@babel/plugin-transform-block-scoping" "^7.0.0" + "@babel/plugin-transform-classes" "^7.0.0" + "@babel/plugin-transform-computed-properties" "^7.0.0" + "@babel/plugin-transform-destructuring" "^7.0.0" + "@babel/plugin-transform-exponentiation-operator" "^7.0.0" + "@babel/plugin-transform-flow-strip-types" "^7.0.0" + "@babel/plugin-transform-for-of" "^7.0.0" + "@babel/plugin-transform-function-name" "^7.0.0" + "@babel/plugin-transform-literals" "^7.0.0" + "@babel/plugin-transform-modules-commonjs" "^7.0.0" + "@babel/plugin-transform-object-assign" "^7.0.0" + "@babel/plugin-transform-parameters" "^7.0.0" + "@babel/plugin-transform-react-display-name" "^7.0.0" + "@babel/plugin-transform-react-jsx" "^7.0.0" + "@babel/plugin-transform-react-jsx-source" "^7.0.0" + "@babel/plugin-transform-regenerator" "^7.0.0" + "@babel/plugin-transform-runtime" "^7.0.0" + "@babel/plugin-transform-shorthand-properties" "^7.0.0" + "@babel/plugin-transform-spread" "^7.0.0" + "@babel/plugin-transform-sticky-regex" "^7.0.0" + "@babel/plugin-transform-template-literals" "^7.0.0" + "@babel/plugin-transform-typescript" "^7.0.0" + "@babel/plugin-transform-unicode-regex" "^7.0.0" + "@babel/template" "^7.0.0" + metro-babel7-plugin-react-transform "0.53.1" + react-transform-hmr "^1.0.4" + +metro-react-native-babel-transformer@0.51.0: + version "0.51.0" + resolved "https://registry.yarnpkg.com/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.51.0.tgz#57a695e97a19d95de63c9633f9d0dc024ee8e99a" + integrity sha512-VFnqtE0qrVmU1HV9B04o53+NZHvDwR+CWCoEx4+7vCqJ9Tvas741biqCjah9xtifoKdElQELk6x0soOAWCDFJA== + dependencies: + "@babel/core" "^7.0.0" + babel-preset-fbjs "^3.0.1" + metro-babel-transformer "0.51.0" + metro-react-native-babel-preset "0.51.0" + +metro-react-native-babel-transformer@^0.51.0: + version "0.51.1" + resolved "https://registry.yarnpkg.com/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.51.1.tgz#bac34f988c150c725cd1875c13701cc2032615f9" + integrity sha512-D0KU+JPb/Z76nUWt3+bkjKggOlGvqAVI2BpIH2JFKprpUyBjWaCRqHnkBfZGixYwUfmu93MIlKJWr6iKzzFrlg== + dependencies: + "@babel/core" "^7.0.0" + babel-preset-fbjs "^3.0.1" + metro-babel-transformer "0.51.1" + metro-react-native-babel-preset "0.51.1" + +metro-resolver@0.51.1: + version "0.51.1" + resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.51.1.tgz#4c26f0baee47d30250187adca3d34c902e627611" + integrity sha512-zmWbD/287NDA/jLPuPV0hne/YMMSG0dljzu21TYMg2lXRLur/zROJHHhyepZvuBHgInXBi4Vhr2wvuSnY39SuA== dependencies: absolute-path "^0.0.0" -metro-source-map@0.48.5: - version "0.48.5" - resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.48.5.tgz#ab738f5cea4627fdae839d09237f85dd13d972ab" - integrity sha512-+BbcU9vfEl/XhMlVV0RwuHuEkai4lq7RmlQkxgoOoWl1u0yXCAPRZ5sqa326fPlJzElOR3cp0y7+Oc2nbIguyg== +metro-source-map@0.51.1: + version "0.51.1" + resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.51.1.tgz#1a8da138e98e184304d5558b4f92a5c2141822d0" + integrity sha512-JyrE+RV4YumrboHPHTGsUUGERjQ681ImRLrSYDGcmNv4tfpk9nvAK26UAas4IvBYFCC9oW90m0udt3kaQGv59Q== dependencies: source-map "^0.5.6" -metro@0.48.5, metro@^0.48.1: - version "0.48.5" - resolved "https://registry.yarnpkg.com/metro/-/metro-0.48.5.tgz#94fb4476ea18d3cf2e96e5c37dc85a21b69b4bf1" - integrity sha512-aCarzjxdYqh+9I40bF+Hh1ayrwfPrnDwVOvpQg3VZFWU4wfeMiJb+tzeRN9p94cC/MKhBTOjRmUF3plzrHoe0w== +metro@0.51.1, metro@^0.51.0: + version "0.51.1" + resolved "https://registry.yarnpkg.com/metro/-/metro-0.51.1.tgz#b0aad4731593b9f244261bad1abb2a006d1c8969" + integrity sha512-nM0dqn8LQlMjhChl2fzTUq2EWiUebZM7nkesD9vQe47W10bj/tbRLPiIIAxht6SRDbPd/hRA+t39PxLhPSKEKg== dependencies: "@babel/core" "^7.0.0" "@babel/generator" "^7.0.0" @@ -5124,7 +5924,8 @@ metro@0.48.5, metro@^0.48.1: absolute-path "^0.0.0" async "^2.4.0" babel-preset-fbjs "^3.0.1" - chalk "^1.1.1" + buffer-crc32 "^0.2.13" + chalk "^2.4.1" concat-stream "^1.6.0" connect "^3.6.5" debug "^2.2.0" @@ -5134,19 +5935,20 @@ metro@0.48.5, metro@^0.48.1: fs-extra "^1.0.0" graceful-fs "^4.1.3" image-size "^0.6.0" - jest-docblock "23.2.0" - jest-haste-map "23.5.0" - jest-worker "23.2.0" + invariant "^2.2.4" + jest-haste-map "24.0.0-alpha.6" + jest-worker "24.0.0-alpha.6" json-stable-stringify "^1.0.1" lodash.throttle "^4.1.1" merge-stream "^1.0.1" - metro-cache "0.48.5" - metro-config "0.48.5" - metro-core "0.48.5" - metro-minify-uglify "0.48.5" - metro-react-native-babel-preset "0.48.5" - metro-resolver "0.48.5" - metro-source-map "0.48.5" + metro-babel-transformer "0.51.1" + metro-cache "0.51.1" + metro-config "0.51.1" + metro-core "0.51.1" + metro-minify-uglify "0.51.1" + metro-react-native-babel-preset "0.51.1" + metro-resolver "0.51.1" + metro-source-map "0.51.1" mime-types "2.1.11" mkdirp "^0.5.1" node-fetch "^2.2.0" @@ -5160,7 +5962,7 @@ metro@0.48.5, metro@^0.48.1: throat "^4.1.0" wordwrap "^1.0.0" write-file-atomic "^1.2.0" - ws "^1.1.0" + ws "^1.1.5" xpipe "^1.0.5" yargs "^9.0.0" @@ -5246,6 +6048,11 @@ mimic-fn@^1.0.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== +mimic-fn@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.0.0.tgz#0913ff0b121db44ef5848242c38bbb35d44cabde" + integrity sha512-jbex9Yd/3lmICXwYT6gA/j2mNQGU48wCh/VzRd+/Y/PjYQtlg1gLMdZqvu9s/xH7qKvngxRObl56XZR609IMbA== + min-document@^2.19.0: version "2.19.0" resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" @@ -5338,7 +6145,7 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: +mkdirp@0.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= @@ -5394,9 +6201,9 @@ mute-stream@~0.0.4: integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== nan@^2.9.2: - version "2.12.1" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.12.1.tgz#7b1aa193e9aa86057e3c7bbd0ac448e770925552" - integrity sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw== + version "2.13.1" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.13.1.tgz#a15bee3790bde247e8f38f1d446edcdaeb05f2dd" + integrity sha512-I6YB/YEuDeUZMmhscXKxGgZlFnhsn5y0hgOZBadkzfTRrZBtJDZeg6eQf7PYMIEclwmorTKK8GztsyOUSVBREA== nanomatch@^1.2.9: version "1.2.13" @@ -5887,7 +6694,7 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-keys@^1.0.12: +object-keys@^1.0.11, object-keys@^1.0.12: version "1.1.0" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.0.tgz#11bd22348dd2e096a045ab06f6c85bcc340fa032" integrity sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg== @@ -5899,6 +6706,36 @@ object-visit@^1.0.0: dependencies: isobject "^3.0.0" +object.assign@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + +object.entries@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.0.tgz#2024fc6d6ba246aee38bdb0ffd5cfbcf371b7519" + integrity sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.12.0" + function-bind "^1.1.1" + has "^1.0.3" + +object.fromentries@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.0.tgz#49a543d92151f8277b3ac9600f1e930b189d30ab" + integrity sha512-9iLiI6H083uiqUuvzyY6qrlmc/Gz8hLQFOcb/Ri/0xXFkSNS3ctV+CbE6yM2+AnkYfOB3dGjdzC0wrMLIhQICA== + dependencies: + define-properties "^1.1.2" + es-abstract "^1.11.0" + function-bind "^1.1.1" + has "^1.0.1" + object.getownpropertydescriptors@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" @@ -5973,7 +6810,7 @@ optimist@^0.6.1: minimist "~0.0.1" wordwrap "~0.0.2" -optionator@^0.8.1: +optionator@^0.8.1, optionator@^0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= @@ -6168,6 +7005,13 @@ parallel-transform@^1.1.0: inherits "^2.0.3" readable-stream "^2.1.5" +parent-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.0.tgz#df250bdc5391f4a085fb589dad761f5ad6b865b5" + integrity sha512-8Mf5juOMmiE4FcmzYc4IaiS9L3+9paz2KOiXzkRviCP6aDmN49Hz6EMWz0lGNp9pX80GvvAuLADtyGfW/Em3TA== + dependencies: + callsites "^3.0.0" + parse-github-url@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/parse-github-url/-/parse-github-url-1.0.2.tgz#242d3b65cbcdda14bb50439e3242acf6971db395" @@ -6300,7 +7144,7 @@ pify@^4.0.1: resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== -pirates@^4.0.0: +pirates@^4.0.0, pirates@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== @@ -6329,16 +7173,7 @@ pkg-dir@^3.0.0: dependencies: find-up "^3.0.0" -plist@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/plist/-/plist-2.0.1.tgz#0a32ca9481b1c364e92e18dc55c876de9d01da8b" - integrity sha1-CjLKlIGxw2TpLhjcVch23p0B2os= - dependencies: - base64-js "1.1.2" - xmlbuilder "8.2.2" - xmldom "0.1.x" - -plist@^3.0.0: +plist@^3.0.0, plist@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/plist/-/plist-3.0.1.tgz#a9b931d17c304e8912ef0ba3bdd6182baf2e1f8c" integrity sha512-GpgvHHocGRyQm74b6FWEZZVRroHKE1I0/BTjAmySaohK+cUn+hZpbqXkc3KWgW3gQYkqcQej35FohcT0FRlkRQ== @@ -6383,26 +7218,23 @@ preserve@^0.2.0: resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks= -pretty-format@^23.4.1: - version "23.6.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.6.0.tgz#5eaac8eeb6b33b987b7fe6097ea6a8a146ab5760" - integrity sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw== - dependencies: - ansi-regex "^3.0.0" - ansi-styles "^3.2.0" - -pretty-format@^24.0.0: - version "24.0.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.0.0.tgz#cb6599fd73ac088e37ed682f61291e4678f48591" - integrity sha512-LszZaKG665djUcqg5ZQq+XzezHLKrxsA86ZABTozp+oNhkdqa+tG2dX4qa6ERl5c/sRDrAa3lHmwnvKoP+OG/g== +pretty-format@24.0.0-alpha.6: + version "24.0.0-alpha.6" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.0.0-alpha.6.tgz#25ad2fa46b342d6278bf241c5d2114d4376fbac1" + integrity sha512-zG2m6YJeuzwBFqb5EIdmwYVf30sap+iMRuYNPytOccEXZMAJbPIFGKVJ/U0WjQegmnQbRo9CI7j6j3HtDaifiA== dependencies: ansi-regex "^4.0.0" ansi-styles "^3.2.0" -pretty-format@^4.2.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-4.3.1.tgz#530be5c42b3c05b36414a7a2a4337aa80acd0e8d" - integrity sha1-UwvlxCs8BbNkFKeipDN6qArNDo0= +pretty-format@^24.5.0: + version "24.5.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.5.0.tgz#cc69a0281a62cd7242633fc135d6930cd889822d" + integrity sha512-/3RuSghukCf8Riu5Ncve0iI+BzVkbRU5EeUoArKARZobREycuH5O4waxvaNIloEXdb0qwgmEAed5vTpX1HNROQ== + dependencies: + "@jest/types" "^24.5.0" + ansi-regex "^4.0.0" + ansi-styles "^3.2.0" + react-is "^16.8.4" private@^0.1.6: version "0.1.8" @@ -6419,6 +7251,11 @@ process@~0.5.1: resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf" integrity sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8= +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + promise-inflight@^1.0.1, promise-inflight@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" @@ -6554,9 +7391,9 @@ query-string@^4.1.0: strict-uri-encode "^1.0.0" query-string@^6.1.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.3.0.tgz#41ae8a61e1213c80b182d5db6cf129e05af89fc5" - integrity sha512-jkpCkoHiAA2BYZvni5GieU3x860QDfkh2+M6bPnrYUywqOWbGwPq5VzntTS06ixX4GVHEiq2ZhlmGy/e9LQ3zA== + version "6.4.0" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.4.0.tgz#1566c0cec3a2da2d82c222ed3f9e2a921dba5e6a" + integrity sha512-Werid2I41/tJTqOGPJ3cC3vwrIh/8ZupBQbp7BSsqXzr+pTin3aMJ/EZb8UEuk7ZO3VqQFvq2qck/ihc6wqIdw== dependencies: decode-uri-component "^0.2.0" strict-uri-encode "^2.0.0" @@ -6605,7 +7442,7 @@ react-deep-force-update@^1.0.0: resolved "https://registry.yarnpkg.com/react-deep-force-update/-/react-deep-force-update-1.1.2.tgz#3d2ae45c2c9040cbb1772be52f8ea1ade6ca2ee1" integrity sha512-WUSQJ4P/wWcusaH+zZmbECOk7H5N2pOIl0vzheeornkIMhu+qrNdGFm0bDZLCb0hSF0jf/kH1SgkNGfBdTc4wA== -react-devtools-core@^3.4.2: +react-devtools-core@^3.6.0: version "3.6.1" resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-3.6.1.tgz#51af81ceada65209bbccb8b547a01187cd1cbf04" integrity sha512-I/LSX+tpeTrGKaF1wXSfJ/kP+6iaP2JfshEjW8LtQBdz6c6HhzOJtjZXhqOUrAdysuey8M1/JgPY1flSVVt8Ig== @@ -6613,28 +7450,28 @@ react-devtools-core@^3.4.2: shell-quote "^1.6.1" ws "^3.3.1" -react-is@^16.8.1: +react-is@^16.8.1, react-is@^16.8.4: version "16.8.4" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.4.tgz#90f336a68c3a29a096a3d648ab80e87ec61482a2" integrity sha512-PVadd+WaUDOAciICm/J1waJaSvgq+4rHE/K70j0PFqKhkTBsPv/82UGQJNXAngz1fOQLLxI6z1sEDmJDQhCTAA== -react-native@^0.57.8: - version "0.57.8" - resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.57.8.tgz#1a840fbe144cd3902cc14313a783ce28efc48cb9" - integrity sha512-K6DAMTPTq+lxVYC73y4Kh/bgLajddBaIKzwsVeV4JOoS1Fdq48/ISXD3vApV+x+/IBVTXnrT9qlA+9U6MMZCqA== +react-native@0.59.1: + version "0.59.1" + resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.59.1.tgz#3274dcc0f9558799bd41c8092acac2a79bd627ce" + integrity sha512-KA/MyoCQLGavPBc/Q2QRfdbxHuKHTcYTks9xwwRPzgDqTfmTuDcyoC6jUBTfhZ0LEes5GMoKVM4eVrYUbprOmw== dependencies: "@babel/runtime" "^7.0.0" + "@react-native-community/cli" "^1.2.1" absolute-path "^0.0.0" art "^0.10.0" base64-js "^1.1.2" - chalk "^1.1.1" + chalk "^2.4.1" commander "^2.9.0" compression "^1.7.1" connect "^3.6.5" create-react-class "^15.6.3" debug "^2.2.0" denodeify "^1.2.1" - envinfo "^5.7.0" errorhandler "^1.5.0" escape-string-regexp "^1.0.5" event-target-shim "^1.0.5" @@ -6644,11 +7481,10 @@ react-native@^0.57.8: glob "^7.1.1" graceful-fs "^4.1.3" inquirer "^3.0.6" + invariant "^2.2.4" lodash "^4.17.5" - metro "^0.48.1" - metro-babel-register "^0.48.1" - metro-core "^0.48.1" - metro-memory-fs "^0.48.1" + metro-babel-register "0.51.0" + metro-react-native-babel-transformer "0.51.0" mime "^1.3.4" minimist "^1.2.0" mkdirp "^0.5.1" @@ -6656,15 +7492,15 @@ react-native@^0.57.8: node-fetch "^2.2.0" node-notifier "^5.2.1" npmlog "^2.0.4" + nullthrows "^1.1.0" opn "^3.0.2" optimist "^0.6.1" plist "^3.0.0" - pretty-format "^4.2.1" + pretty-format "24.0.0-alpha.6" promise "^7.1.1" prop-types "^15.5.8" react-clone-referenced-element "^1.0.1" - react-devtools-core "^3.4.2" - react-timer-mixin "^0.13.2" + react-devtools-core "^3.6.0" regenerator-runtime "^0.11.0" rimraf "^2.5.4" semver "^5.0.3" @@ -6672,7 +7508,6 @@ react-native@^0.57.8: shell-quote "1.6.1" stacktrace-parser "^0.1.3" ws "^1.1.5" - xcode "^1.0.0" xmldoc "^0.4.0" yargs "^9.0.0" @@ -6684,11 +7519,6 @@ react-proxy@^1.1.7: lodash "^4.6.1" react-deep-force-update "^1.0.0" -react-timer-mixin@^0.13.2: - version "0.13.4" - resolved "https://registry.yarnpkg.com/react-timer-mixin/-/react-timer-mixin-0.13.4.tgz#75a00c3c94c13abe29b43d63b4c65a88fc8264d3" - integrity sha512-4+ow23tp/Tv7hBM5Az5/Be/eKKF7DIvJ09voz5LyHGQaqqz9WV8YMs31eFvcYQs7d451LSg7kDJV70XYN/Ug/Q== - react-transform-hmr@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/react-transform-hmr/-/react-transform-hmr-1.0.4.tgz#e1a40bd0aaefc72e8dfd7a7cda09af85066397bb" @@ -6697,15 +7527,15 @@ react-transform-hmr@^1.0.4: global "^4.3.0" react-proxy "^1.1.7" -react@16.6.3: - version "16.6.3" - resolved "https://registry.yarnpkg.com/react/-/react-16.6.3.tgz#25d77c91911d6bbdd23db41e70fb094cc1e0871c" - integrity sha512-zCvmH2vbEolgKxtqXL2wmGCUxUyNheYn/C+PD1YAjfxHC54+MhdruyhO7QieQrYsYeTxrn93PM2y0jRH1zEExw== +react@16.8.3: + version "16.8.3" + resolved "https://registry.yarnpkg.com/react/-/react-16.8.3.tgz#c6f988a2ce895375de216edcfaedd6b9a76451d9" + integrity sha512-3UoSIsEq8yTJuSu0luO1QQWYbgGEILm+eJl2QN/VLDi7hL+EN18M3q3oVZwmVzzBJ3DkM7RMdRwBmZZ+b4IzSA== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" prop-types "^15.6.2" - scheduler "^0.11.2" + scheduler "^0.13.3" read-cmd-shim@^1.0.1, read-cmd-shim@~1.0.1: version "1.0.1" @@ -6832,7 +7662,7 @@ readable-stream@~1.1.10: isarray "0.0.1" string_decoder "~0.10.x" -readdir-scoped-modules@^1.0.0: +readdir-scoped-modules@*, readdir-scoped-modules@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.0.2.tgz#9fafa37d286be5d92cbaebdee030dc9b5f406747" integrity sha1-n6+jfShr5dksuuve4DDcm19AZ0c= @@ -6842,7 +7672,7 @@ readdir-scoped-modules@^1.0.0: graceful-fs "^4.1.2" once "^1.3.0" -realpath-native@^1.0.0, realpath-native@^1.0.2: +realpath-native@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.1.0.tgz#2003294fea23fb0672f2476ebe22fcf498a2d65c" integrity sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA== @@ -6864,10 +7694,10 @@ redeyed@~2.1.0: dependencies: esprima "~4.0.0" -regenerate-unicode-properties@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.0.1.tgz#58a4a74e736380a7ab3c5f7e03f303a941b31289" - integrity sha512-HTjMafphaH5d5QDHuwW8Me6Hbc/GhXg8luNqTkPVwZ/oCZhnoifjWhGYsu2BzepMELTlbnoVcXvV0f+2uDDvoQ== +regenerate-unicode-properties@^8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.0.2.tgz#7b38faa296252376d363558cfbda90c9ce709662" + integrity sha512-SbA/iNrBUf6Pv2zU8Ekv1Qbhv92yxL4hiDa2siuxs4KKn4oOoMDHXjAf7+Nz9qinUQ46B1LcWEi/PhJfPWpZWQ== dependencies: regenerate "^1.4.0" @@ -6908,13 +7738,18 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" +regexpp@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" + integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== + regexpu-core@^4.1.3: - version "4.5.3" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.5.3.tgz#72f572e03bb8b9f4f4d895a0ccc57e707f4af2e4" - integrity sha512-LON8666bTAlViVEPXMv65ZqiaR3rMNLz36PIaQ7D+er5snu93k0peR7FSvO0QteYbZ3GOkvfHKbGr/B1xDu9FA== + version "4.5.4" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.5.4.tgz#080d9d02289aa87fe1667a4f5136bc98a6aebaae" + integrity sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ== dependencies: regenerate "^1.4.0" - regenerate-unicode-properties "^8.0.1" + regenerate-unicode-properties "^8.0.2" regjsgen "^0.5.0" regjsparser "^0.6.0" unicode-match-property-ecmascript "^1.0.4" @@ -7014,6 +7849,11 @@ require-main-filename@^1.0.1: resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= +requireindex@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/requireindex/-/requireindex-1.2.0.tgz#3463cdb22ee151902635aa6c9535d4de9c2ef1ef" + integrity sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww== + resolve-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" @@ -7041,7 +7881,7 @@ resolve@1.1.7: resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= -resolve@^1.10.0, resolve@^1.3.2, resolve@^1.5.0, resolve@^1.8.1: +resolve@1.x, resolve@^1.10.0, resolve@^1.3.2, resolve@^1.5.0, resolve@^1.8.1, resolve@^1.9.0: version "1.10.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.0.tgz#3bdaaeaf45cc07f375656dfd2e54ed0810b101ba" integrity sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg== @@ -7071,7 +7911,7 @@ retry@^0.12.0: resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= -rimraf@2, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@~2.6.2: +rimraf@2, rimraf@2.6.3, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@~2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== @@ -7088,6 +7928,11 @@ rsvp@^3.3.3: resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.6.2.tgz#2e96491599a96cde1b515d5674a8f7a91452926a" integrity sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw== +rsvp@^4.8.4: + version "4.8.4" + resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.4.tgz#b50e6b34583f3dd89329a2f23a8a2be072845911" + integrity sha512-6FomvYPfs+Jy9TfXmBpBuMWNH94SgCsZmJKcanySzgNNP6LjWxBvyLTa9KaMfDDM5oxRfrKDB0r/qeRsLwnBfA== + run-async@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" @@ -7114,6 +7959,13 @@ rx-lite@*, rx-lite@^4.0.8: resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ= +rxjs@^6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.4.0.tgz#f3bb0fe7bda7fb69deac0c16f17b50b0b8790504" + integrity sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw== + dependencies: + tslib "^1.9.0" + safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -7131,22 +7983,6 @@ safe-regex@^1.1.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sane@^2.0.0: - version "2.5.2" - resolved "https://registry.yarnpkg.com/sane/-/sane-2.5.2.tgz#b4dc1861c21b427e929507a3e751e2a2cb8ab3fa" - integrity sha1-tNwYYcIbQn6SlQej51HiosuKs/o= - dependencies: - anymatch "^2.0.0" - capture-exit "^1.2.0" - exec-sh "^0.2.0" - fb-watchman "^2.0.0" - micromatch "^3.1.4" - minimist "^1.1.1" - walker "~1.0.5" - watch "~0.18.0" - optionalDependencies: - fsevents "^1.2.3" - sane@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/sane/-/sane-3.1.0.tgz#995193b7dc1445ef1fe41ddfca2faf9f111854c6" @@ -7164,6 +8000,21 @@ sane@^3.0.0: optionalDependencies: fsevents "^1.2.3" +sane@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" + integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== + dependencies: + "@cnakazawa/watch" "^1.0.3" + anymatch "^2.0.0" + capture-exit "^2.0.0" + exec-sh "^0.3.2" + execa "^1.0.0" + fb-watchman "^2.0.0" + micromatch "^3.1.4" + minimist "^1.1.1" + walker "~1.0.5" + sax@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" @@ -7174,10 +8025,10 @@ sax@~1.1.1: resolved "https://registry.yarnpkg.com/sax/-/sax-1.1.6.tgz#5d616be8a5e607d54e114afae55b7eaf2fcc3240" integrity sha1-XWFr6KXmB9VOEUr65Vt+ry/MMkA= -scheduler@^0.11.2: - version "0.11.3" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.11.3.tgz#b5769b90cf8b1464f3f3cfcafe8e3cd7555a2d6b" - integrity sha512-i9X9VRRVZDd3xZw10NY5Z2cVMbdYg6gqFecfj79USv1CFN+YrJ3gIPRKf1qlY+Sxly4djoKdfx1T+m9dnRB8kQ== +scheduler@^0.13.3: + version "0.13.4" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.13.4.tgz#8fef05e7a3580c76c0364d2df5e550e4c9140298" + integrity sha512-cvSOlRPxOHs5dAhP9yiS/6IDmVAVxmk33f0CtTJRkmUWcb1Us+t7b1wqdzoC0REw2muC9V5f1L/w5R5uKGaepA== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" @@ -7227,11 +8078,16 @@ semver-regex@^1.0.0: resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-1.0.0.tgz#92a4969065f9c70c694753d55248fc68f8f652c9" integrity sha1-kqSWkGX5xwxpR1PVUkj8aPj2Usk= -"semver@2 >=2.2.1 || 3.x || 4 || 5", "semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", "semver@^2.3.0 || 3.x || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1: +"semver@2 >=2.2.1 || 3.x || 4 || 5", "semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", "semver@^2.3.0 || 3.x || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5, semver@^5.5.0, semver@^5.5.1: version "5.6.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg== +semver@5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" + integrity sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA== + semver@~5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" @@ -7355,14 +8211,14 @@ signale@^1.2.1: figures "^2.0.0" pkg-conf "^2.1.0" -simple-plist@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/simple-plist/-/simple-plist-0.2.1.tgz#71766db352326928cf3a807242ba762322636723" - integrity sha1-cXZts1IyaSjPOoByQrp2IyJjZyM= +simple-plist@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/simple-plist/-/simple-plist-1.0.0.tgz#bed3085633b22f371e111f45d159a1ccf94b81eb" + integrity sha512-043L2rO80LVF7zfZ+fqhsEkoJFvW8o59rt/l4ctx1TJWoTx7/jkiS1R5TatD15Z1oYnuLJytzE7gcnnBuIPL2g== dependencies: bplist-creator "0.0.7" bplist-parser "0.1.1" - plist "2.0.1" + plist "^3.0.1" sisteransi@^1.0.0: version "1.0.0" @@ -7379,6 +8235,15 @@ slash@^2.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== +slice-ansi@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" + integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== + dependencies: + ansi-styles "^3.2.0" + astral-regex "^1.0.0" + is-fullwidth-code-point "^2.0.0" + slide@^1.1.3, slide@^1.1.5, slide@^1.1.6, slide@~1.1.3, slide@~1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" @@ -7433,12 +8298,12 @@ socks-proxy-agent@^3.0.1: socks "^1.1.10" socks-proxy-agent@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.1.tgz#5936bf8b707a993079c6f37db2091821bffa6473" - integrity sha512-Kezx6/VBguXOsEe5oU3lXYyKMi4+gva72TwJ7pQY5JfqUx2nMk7NXA6z/mpNqIlfQjWYVfeuNvQjexiTaTn6Nw== + version "4.0.2" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz#3c8991f3145b2799e70e11bd5fbc8b1963116386" + integrity sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg== dependencies: - agent-base "~4.2.0" - socks "~2.2.0" + agent-base "~4.2.1" + socks "~2.3.2" socks@^1.1.10: version "1.1.10" @@ -7448,10 +8313,10 @@ socks@^1.1.10: ip "^1.1.4" smart-buffer "^1.0.13" -socks@~2.2.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.2.3.tgz#7399ce11e19b2a997153c983a9ccb6306721f2dc" - integrity sha512-+2r83WaRT3PXYoO/1z+RDEBE7Z2f9YcdQnJ0K/ncXXbV5gJ6wYfNAebYFYiiUjM6E4JyXnPY8cimwyvFYHVUUA== +socks@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.3.2.tgz#ade388e9e6d87fdb11649c15746c578922a5883e" + integrity sha512-pCpjxQgOByDHLlNqlnh/mNSAxIUkyBBuwwhTcV+enZGbDaClPvHdvm6uvOwZfFJkam7cGhBNbb4JxiP8UZkRvQ== dependencies: ip "^1.1.5" smart-buffer "4.0.2" @@ -7488,9 +8353,9 @@ source-map-resolve@^0.5.0: urix "^0.1.0" source-map-support@^0.5.6, source-map-support@^0.5.9: - version "0.5.10" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.10.tgz#2214080bc9d51832511ee2bab96e3c2f9353120c" - integrity sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ== + version "0.5.11" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.11.tgz#efac2ce0800355d026326a0ca23e162aeac9a4e2" + integrity sha512-//sajEx/fGL3iw6fltKMdPvy8kL3kJ2O3iuYlRoT3k9Kb4BjOoZ+BZzaNHeuaruSt+Kf3Zk9tnfAQg9/AJqUVQ== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" @@ -7710,6 +8575,15 @@ string-width@^1.0.1: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" +string-width@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + string_decoder@~0.10.x: version "0.10.31" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" @@ -7741,12 +8615,12 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" -strip-ansi@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.0.0.tgz#f78f68b5d0866c20b2c9b8c61b5298508dc8756f" - integrity sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow== +strip-ansi@^5.0.0, strip-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.1.0.tgz#55aaa54e33b4c0649a7338a43437b1887d153ec4" + integrity sha512-TjxrkPONqO2Z8QDCpeE2j6n0M6EwxzyDgzEeGp+FbdvaJAt//ClYi6W5my+3ROlC/hZX2KACUwDfK49Ka5eDvg== dependencies: - ansi-regex "^4.0.0" + ansi-regex "^4.1.0" strip-bom@^3.0.0: version "3.0.0" @@ -7763,7 +8637,7 @@ strip-indent@^2.0.0: resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= -strip-json-comments@~2.0.1: +strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= @@ -7800,6 +8674,16 @@ symbol-tree@^3.2.2: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" integrity sha1-rifbOPZgp64uHDt9G8KQgZuFGeY= +table@^5.2.3: + version "5.2.3" + resolved "https://registry.yarnpkg.com/table/-/table-5.2.3.tgz#cde0cc6eb06751c009efab27e8c820ca5b67b7f2" + integrity sha512-N2RsDAMvDLvYwFcwbPyF3VmVSSkuF+G1e+8inhBLtHpvwXGw4QRPEZhihQNeEN0i1up6/f6ObCJXNdlRG3YVyQ== + dependencies: + ajv "^6.9.1" + lodash "^4.17.11" + slice-ansi "^2.1.0" + string-width "^3.0.0" + tar@^2.0.0: version "2.2.1" resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" @@ -7852,7 +8736,7 @@ text-extensions@^1.0.0: resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== -text-table@~0.2.0: +text-table@^0.2.0, text-table@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= @@ -7975,6 +8859,33 @@ trim-right@^1.0.1: resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= +ts-jest@24.0.0: + version "24.0.0" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-24.0.0.tgz#3f26bf2ec1fa584863a5a9c29bd8717d549efbf6" + integrity sha512-o8BO3TkMREpAATaFTrXkovMsCpBl2z4NDBoLJuWZcJJj1ijI49UnvDMfVpj+iogn/Jl8Pbhuei5nc/Ti+frEHw== + dependencies: + bs-logger "0.x" + buffer-from "1.x" + fast-json-stable-stringify "2.x" + json5 "2.x" + make-error "1.x" + mkdirp "0.x" + resolve "1.x" + semver "^5.5" + yargs-parser "10.x" + +tslib@^1.8.1, tslib@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" + integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== + +tsutils@^3.7.0: + version "3.9.1" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.9.1.tgz#2a40dc742943c71eca6d5c1994fcf999956be387" + integrity sha512-hrxVtLtPqQr//p8/msPT1X1UYXUjizqSit5d9AQ5k38TcV38NyecL5xODNxa73cLe/5sdiJ+w1FqzDhRBA/anA== + dependencies: + tslib "^1.8.1" + tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -7999,6 +8910,11 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= +typescript@3.3.3333: + version "3.3.3333" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.3.3333.tgz#171b2c5af66c59e9431199117a3bcadc66fdcfd6" + integrity sha512-JjSKsAfuHBE/fB2oZ8NxtRTk5iGcg6hkYXMnZ3Wc+b2RSqejEqTaem11mHASMnFilHrax3sLK0GDzcJrekZYLw== + ua-parser-js@^0.7.18: version "0.7.19" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.19.tgz#94151be4c0a7fb1d001af7022fdaca4642659e4b" @@ -8305,7 +9221,7 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= -which@1, which@^1.2.12, which@^1.2.9, which@^1.3.0, which@^1.3.1: +which@1, which@^1.2.9, which@^1.3.0, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== @@ -8390,6 +9306,13 @@ write-file-atomic@^2.0.0, write-file-atomic@^2.3.0: imurmurhash "^0.1.4" signal-exit "^3.0.2" +write@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" + integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== + dependencies: + mkdirp "^0.5.1" + ws@^1.1.0, ws@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.5.tgz#cbd9e6e75e09fc5d2c90015f21f0c40875e0dd51" @@ -8414,12 +9337,12 @@ ws@^5.2.0: dependencies: async-limiter "~1.0.0" -xcode@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/xcode/-/xcode-1.1.0.tgz#9fcb63f417a9af377bfb743a5c22afce4e1da964" - integrity sha512-hllHFtfsNu5WbVzj8KbGNdI3NgOYmTLZqyF4a9c9J1aGMhAdxmLLsXlpG0Bz8fEtKh6I3pyargRXN0ZlLpcF5w== +xcode@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/xcode/-/xcode-2.0.0.tgz#134f1f94c26fbfe8a9aaa9724bfb2772419da1a2" + integrity sha512-5xF6RCjAdDEiEsbbZaS/gBRt3jZ/177otZcpoLCjGN/u1LrfgH7/Sgeeavpr/jELpyDqN2im3AKosl2G2W8hfw== dependencies: - simple-plist "^0.2.1" + simple-plist "^1.0.0" uuid "^3.3.2" xdg-basedir@^3.0.0: @@ -8432,11 +9355,6 @@ xml-name-validator@^3.0.0: resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== -xmlbuilder@8.2.2: - version "8.2.2" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-8.2.2.tgz#69248673410b4ba42e1a6136551d2922335aa773" - integrity sha1-aSSGc0ELS6QuGmE2VR0pIjNap3M= - xmlbuilder@^9.0.7: version "9.0.7" resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" @@ -8484,6 +9402,13 @@ yallist@^3.0.0, yallist@^3.0.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== +yargs-parser@10.x: + version "10.1.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" + integrity sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ== + dependencies: + camelcase "^4.1.0" + yargs-parser@^11.1.1: version "11.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4"