diff --git a/package.json b/package.json index 359fb6f8..8aff0553 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "react-native-offline", - "version": "4.3.1", + "version": "4.4.0-compat1", "description": "Handy toolbelt to deal with offline mode in React Native applications. Cross-platform, provides a smooth redux integration.", "main": "./src/index.js", "author": "Raul Gomez Acuña (https://github.com/rgommezz)", @@ -63,16 +63,15 @@ "react-native": "^0.57.8", "react-native-testing-library": "^1.5.0", "react-test-renderer": "^16.6.3", - "redux": "^4.0.1", "redux-mock-store": "^1.5.3", "redux-saga-test-plan": "4.0.0-beta.2", "redux-thunk": "^2.3.0" }, "dependencies": { "lodash": "^4.17.11", - "react-redux": "^6.0.0", - "redux": "4.x", - "redux-saga": "^1.0.2" + "@react-native-community/netinfo": "~2.0.10", + "react-redux": "^5.1.1", + "redux": "~4.0" }, "jest": { "collectCoverage": true, diff --git a/src/components/NetworkConnectivity.js b/src/components/NetworkConnectivity.js index d4e34536..b943be42 100644 --- a/src/components/NetworkConnectivity.js +++ b/src/components/NetworkConnectivity.js @@ -1,6 +1,7 @@ /* @flow */ import * as React from 'react'; -import { AppState, NetInfo, Platform } from 'react-native'; +import { AppState, Platform } from 'react-native'; +import NetInfo from '@react-native-community/netinfo'; import type { HTTPMethod, State } from '../types'; import * as connectivityInterval from '../utils/checkConnectivityInterval'; import checkInternetAccess from '../utils/checkInternetAccess'; diff --git a/src/components/ReduxNetworkProvider.js b/src/components/ReduxNetworkProvider.js index 9dca2378..3c79976b 100644 --- a/src/components/ReduxNetworkProvider.js +++ b/src/components/ReduxNetworkProvider.js @@ -34,6 +34,15 @@ class ReduxNetworkProvider extends React.Component { httpMethod: DEFAULT_HTTP_METHOD, }; + shouldComponentUpdate({ isConnected }) { + const { isConnected: wasConnected } = this.props; + if (isConnected !== wasConnected) { + return false; + } + + return true; + } + handleConnectivityChange = (isConnected: boolean) => { const { isConnected: wasConnected, dispatch } = this.props; if (isConnected !== wasConnected) { diff --git a/src/index.js b/src/index.js index b9962064..9338ea4e 100644 --- a/src/index.js +++ b/src/index.js @@ -17,9 +17,6 @@ module.exports = { get offlineActionTypes() { return require('./redux/actionTypes').default; }, - get networkSaga() { - return require('./redux/sagas').default; - }, get checkInternetConnection() { return require('./utils/checkInternetConnection').default; }, diff --git a/src/redux/sagas.js b/src/redux/sagas.js deleted file mode 100644 index 8958ea9b..00000000 --- a/src/redux/sagas.js +++ /dev/null @@ -1,256 +0,0 @@ -/* @flow */ -/* eslint flowtype/require-parameter-type: 0 */ -import { put, select, call, take, cancelled, fork } from 'redux-saga/effects'; -import { eventChannel } from 'redux-saga'; -import { AppState, NetInfo, Platform } from 'react-native'; -import { networkSelector } from './reducer'; -import checkInternetAccess from '../utils/checkInternetAccess'; -import { connectionChange } from './actionCreators'; -import type { HTTPMethod } from '../types'; -import { - DEFAULT_HTTP_METHOD, - DEFAULT_PING_SERVER_URL, - DEFAULT_TIMEOUT, -} from '../utils/constants'; - -type Arguments = { - pingTimeout: number, - pingServerUrl: string, - shouldPing: boolean, - pingInterval: number, - pingOnlyIfOffline: boolean, - pingInBackground: boolean, - httpMethod: HTTPMethod, -}; - -export function netInfoEventChannelFn(emit: (param: boolean) => mixed) { - NetInfo.isConnected.addEventListener('connectionChange', emit); - return () => { - NetInfo.isConnected.removeEventListener('connectionChange', emit); - }; -} - -export function intervalChannelFn(interval: number) { - return (emit: (param: boolean) => mixed) => { - const iv = setInterval(() => emit(true), interval); - return () => { - clearInterval(iv); - }; - }; -} - -/** - * Returns a factory function that creates a channel from network connection change events - * @returns {Channel} - */ -export function createNetInfoConnectionChangeChannel(channelFn) { - return eventChannel(channelFn); -} - -/** - * Returns a factory function that creates a channel from an interval - * @param interval - * @returns {Channel} - */ -export function createIntervalChannel(interval: number, channelFn: Function) { - const handler = channelFn(interval); - return eventChannel(handler); -} - -/** - * Creates a NetInfo change event channel that: - * - Listens to NetInfo connection change events - * - If shouldPing === true, it first verifies we have internet access - * - Otherwise it calls handleConnectivityChange immediately to process the new information into the redux store - * @param pingTimeout - * @param pingServerUrl - * @param shouldPing - * @param httpMethod - */ -export function* netInfoChangeSaga({ - pingTimeout, - pingServerUrl, - shouldPing, - httpMethod, -}): Generator<*, *, *> { - if (Platform.OS === 'android') { - const initialConnection = yield call([NetInfo, NetInfo.isConnected.fetch]); - yield fork(connectionHandler, { - shouldPing, - isConnected: initialConnection, - pingTimeout, - pingServerUrl, - httpMethod, - }); - } - const chan = yield call( - createNetInfoConnectionChangeChannel, - netInfoEventChannelFn, - ); - try { - while (true) { - const isConnected = yield take(chan); - yield fork(connectionHandler, { - shouldPing, - isConnected, - pingTimeout, - pingServerUrl, - httpMethod, - }); - } - } finally { - if (yield cancelled()) { - chan.close(); - } - } -} - -/** - * Either checks internet by pinging a server or calls the store handler function - * @param shouldPing - * @param isConnected - * @param pingTimeout - * @param pingServerUrl - * @param httpMethod - * @returns {IterableIterator} - */ -export function* connectionHandler({ - shouldPing, - isConnected, - pingTimeout, - pingServerUrl, - httpMethod, -}) { - if (shouldPing && isConnected) { - yield fork(checkInternetAccessSaga, { - pingTimeout, - pingServerUrl, - httpMethod, - }); - } else { - yield fork(handleConnectivityChange, isConnected); - } -} - -/** - * Creates an interval channel that periodically verifies internet access - * @param pingTimeout - * @param pingServerUrl - * @param interval - * @param pingOnlyIfOffline - * @param pingInBackground - * @param httpMethod - * @returns {IterableIterator<*>} - */ -export function* connectionIntervalSaga({ - pingTimeout, - pingServerUrl, - pingInterval, - pingOnlyIfOffline, - pingInBackground, - httpMethod, -}): Generator<*, *, *> { - const chan = yield call( - createIntervalChannel, - pingInterval, - intervalChannelFn, - ); - try { - while (true) { - yield take(chan); - const { isConnected } = yield select(networkSelector); - if (!(isConnected && pingOnlyIfOffline === true)) { - yield fork(checkInternetAccessSaga, { - pingTimeout, - pingServerUrl, - httpMethod, - pingInBackground, - }); - } - } - } finally { - if (yield cancelled()) { - chan.close(); - } - } -} - -/** - * Saga that verifies internet connection, besides connectivity, by pinging a server of your choice - * @param pingServerUrl - * @param pingTimeout - * @param httpMethod - * @param pingInBackground - */ -export function* checkInternetAccessSaga({ - pingServerUrl, - pingTimeout, - httpMethod, - pingInBackground, -}): Generator<*, *, *> { - if (pingInBackground === false && AppState.currentState !== 'active') { - return; // <-- Return early as we don't care about connectivity if app is not in foreground. - } - const hasInternetAccess = yield call(checkInternetAccess, { - url: pingServerUrl, - timeout: pingTimeout, - method: httpMethod, - }); - yield call(handleConnectivityChange, hasInternetAccess); -} - -/** - * Takes action under the new network connection value: - * - Dispatches a '@@network-connectivity/CONNECTION_CHANGE' action type - * - Flushes the queue of pending actions if we are connected back to the internet - * @param hasInternetAccess - */ -export function* handleConnectivityChange( - hasInternetAccess: boolean, -): Generator<*, *, *> { - const { isConnected } = yield select(networkSelector); - if (isConnected !== hasInternetAccess) { - yield put(connectionChange(hasInternetAccess)); - } -} - -/** - * Saga that controls internet connectivity in your whole application. - * You just need to fork it from your root saga. - * It receives the same parameters as withNetworkConnectivity HOC - * @param pingTimeout - * @param pingServerUrl - * @param shouldPing - * @param pingInterval - * @param pingOnlyIfOffline - * @param pingInBackground - * @param httpMethod - */ -export default function* networkSaga({ - pingTimeout = DEFAULT_TIMEOUT, - pingServerUrl = DEFAULT_PING_SERVER_URL, - shouldPing = true, - pingInterval = 0, - pingOnlyIfOffline = false, - pingInBackground = false, - httpMethod = DEFAULT_HTTP_METHOD, -}: Arguments = {}): Generator<*, *, *> { - yield fork(netInfoChangeSaga, { - pingTimeout, - pingServerUrl, - shouldPing, - pingOnlyIfOffline, - pingInBackground, - httpMethod, - }); - if (pingInterval > 0) { - yield fork(connectionIntervalSaga, { - pingTimeout, - pingServerUrl, - pingInterval, - pingOnlyIfOffline, - pingInBackground, - httpMethod, - }); - } -} diff --git a/src/utils/checkInternetConnection.js b/src/utils/checkInternetConnection.js index 715eab2c..8fccd3f1 100644 --- a/src/utils/checkInternetConnection.js +++ b/src/utils/checkInternetConnection.js @@ -1,6 +1,6 @@ /* @flow */ -import { NetInfo } from 'react-native'; +import NetInfo from '@react-native-community/netinfo'; import checkInternetAccess from './checkInternetAccess'; import { DEFAULT_PING_SERVER_URL, DEFAULT_TIMEOUT } from './constants'; diff --git a/test/checkInternetConnection.test.js b/test/checkInternetConnection.test.js index 01b54f79..5df5f727 100644 --- a/test/checkInternetConnection.test.js +++ b/test/checkInternetConnection.test.js @@ -1,4 +1,4 @@ -import { NetInfo } from 'react-native'; +import NetInfo from '@react-native-community/netinfo'; import checkInternetConnection from '../src/utils/checkInternetConnection'; import checkInternetAccess from '../src/utils/checkInternetAccess'; import { diff --git a/test/sagaChannels.test.js b/test/sagaChannels.test.js index f30f430c..6445428c 100644 --- a/test/sagaChannels.test.js +++ b/test/sagaChannels.test.js @@ -1,5 +1,5 @@ import { eventChannel } from 'redux-saga'; -import { NetInfo } from 'react-native'; +import NetInfo from '@react-native-community/netinfo'; import { createNetInfoConnectionChangeChannel, netInfoEventChannelFn, diff --git a/test/sagas.test.js b/test/sagas.test.js index 4129b81f..3ee2ca51 100644 --- a/test/sagas.test.js +++ b/test/sagas.test.js @@ -1,6 +1,7 @@ /* @flow */ import { testSaga } from 'redux-saga-test-plan'; -import { Platform, NetInfo, AppState } from 'react-native'; +import { Platform, AppState } from 'react-native'; +import NetInfo from '@react-native-community/netinfo'; import networkSaga, { netInfoChangeSaga, connectionIntervalSaga, diff --git a/yarn.lock b/yarn.lock index 61c281f9..6caac839 100644 --- a/yarn.lock +++ b/yarn.lock @@ -607,13 +607,20 @@ pirates "^4.0.0" source-map-support "^0.5.9" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.2.0": +"@babel/runtime@^7.0.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.2.0.tgz#b03e42eeddf5898e00646e4c840fa07ba8dcad7f" integrity sha512-oouEibCbHMVdZSDlJBO6bZmID/zA/G/Qx3H1d3rSNPTD+L8UNKvCat7aKWSJ74zYbm5zWGh0GQN0hKj8zYFTCg== dependencies: regenerator-runtime "^0.12.0" +"@babel/runtime@^7.1.2": + version "7.4.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.4.5.tgz#582bb531f5f9dc67d2fcb682979894f75e253f12" + integrity sha512-TuI4qpWZP6lGOGIuGWtp9sPluqYICmbk8T/1vpSysqJxRPkudh/ofFWyqdcMsDf2s7KvDL4/YHgKyvcS3g9CJQ== + dependencies: + regenerator-runtime "^0.13.2" + "@babel/template@^7.0.0", "@babel/template@^7.1.0", "@babel/template@^7.1.2", "@babel/template@^7.2.2": version "7.2.2" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.2.2.tgz#005b3fdf0ed96e88041330379e0da9a708eb2907" @@ -647,49 +654,10 @@ lodash "^4.17.10" to-fast-properties "^2.0.0" -"@redux-saga/core@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@redux-saga/core/-/core-1.0.2.tgz#4336a5bb4253e5ca69681c25a863fbbc03ea6d88" - integrity sha512-AsJYcpuYfM1cmxJvfhXs9HAFSZVEG17TMsLPlXH7+Hq5a5ZP4GqcbtijEmS2AC7NR5lLJHy8csxpqz22PeW5dw== - dependencies: - "@babel/runtime" "^7.0.0" - "@redux-saga/deferred" "^1.0.1" - "@redux-saga/delay-p" "^1.0.1" - "@redux-saga/is" "^1.0.2" - "@redux-saga/symbols" "^1.0.1" - "@redux-saga/types" "^1.0.2" - redux ">=0.10 <5" - typescript-tuple "^2.1.0" - -"@redux-saga/deferred@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@redux-saga/deferred/-/deferred-1.0.1.tgz#c895445e486bded90acf0b873b4e978fbfe458c2" - integrity sha512-+gW5xQ93QXOOmRLAmX8x2Hx1HpbTG6CM6+HcdTSbJovh4uMWaGyeDECnqXSt8QqA/ja3s2nqYXLqXFKepIQ1hw== - -"@redux-saga/delay-p@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@redux-saga/delay-p/-/delay-p-1.0.1.tgz#d69fc6103c7509ae80faa144ea17bbc69e51e029" - integrity sha512-0SnNDyDLUyB4NThtptAwiprNOnbCNhoed/Rp5JwS7SB+a/AdWynVgg/E6BmjsggLFNr07KW0bzn05tsPRBuU7Q== - dependencies: - "@redux-saga/symbols" "^1.0.1" - -"@redux-saga/is@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@redux-saga/is/-/is-1.0.2.tgz#7f4be014c97061898d7efb11d6c9de31e943ed38" - integrity sha512-WnaUOwYvPK2waWjzebT4uhL8zY76XNkzzpJ2EQJe8bN1tByvAjvT7MuJZTSshOhdHL5PsRO0MsH224XIXBJidQ== - dependencies: - "@redux-saga/symbols" "^1.0.1" - "@redux-saga/types" "^1.0.2" - -"@redux-saga/symbols@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@redux-saga/symbols/-/symbols-1.0.1.tgz#46512ae1275f88df061c42168d0f600ddb170c1e" - integrity sha512-akKkzcVnb1RzJaZV2LQFbi51abvdICMuAKwwLoCjjxLbLAGIw9EJxk5ucNnWSSCEsoEQMeol5tkAcK+Xzuv1Bg== - -"@redux-saga/types@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@redux-saga/types/-/types-1.0.2.tgz#1d94f02800b094753f9271c206a26c2a06ca14ee" - integrity sha512-8/qcMh15507AnXJ3lBeuhsdFwnWQqnp68EpUuHlYPixJ5vjVmls7/Jq48cnUlrZI8Jd9U1jkhfCl0gaT5KMgVw== +"@react-native-community/netinfo@~2.0.10": + version "2.0.10" + resolved "https://registry.yarnpkg.com/@react-native-community/netinfo/-/netinfo-2.0.10.tgz#d28a446352e75754b78509557988359133cdbcca" + integrity sha512-NrIzyLe0eSbhgMnHl2QdSEhaA7yXh6p9jzMomfUa//hoTXE+xbObGDdiWWSQm2bnXnZJg8XCU3AB9qzvqcuLnA== "@types/node@*": version "10.12.18" @@ -3539,12 +3507,12 @@ hoek@2.x.x: version "2.16.3" resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" -hoist-non-react-statics@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.2.1.tgz#c09c0555c84b38a7ede6912b61efddafd6e75e1e" - integrity sha512-TFsu3TV3YLY+zFTZDrN8L2DTFanObwmBLpWvJs1qfUuEQ5bTAdFcwfx2T/bsCXfM9QHSLvjfP+nihEl0yvozxw== +hoist-non-react-statics@^3.1.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz#b09178f0122184fb95acf525daaecb4d8f45958b" + integrity sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA== dependencies: - react-is "^16.3.2" + react-is "^16.7.0" home-or-tmp@^2.0.0: version "2.0.0" @@ -5961,6 +5929,15 @@ prop-types@^15.5.8, prop-types@^15.6.2: loose-envify "^1.3.1" object-assign "^4.1.1" +prop-types@^15.6.1: + version "15.7.2" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" + integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.8.1" + pseudomap@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" @@ -6059,11 +6036,21 @@ react-dom@^16.6.3: prop-types "^15.6.2" scheduler "^0.12.0" -react-is@^16.3.2, react-is@^16.6.1, react-is@^16.6.3, react-is@^16.7.0: +react-is@^16.6.0, react-is@^16.8.1: + version "16.8.6" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.6.tgz#5bbc1e2d29141c9fbdfed456343fe2bc430a6a16" + integrity sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA== + +react-is@^16.6.1, react-is@^16.7.0: version "16.7.0" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.7.0.tgz#c1bd21c64f1f1364c6f70695ec02d69392f41bfa" integrity sha512-Z0VRQdF4NPDoI0tsXVMLkJLiwEBa+RP66g0xDHxgxysxSoCUccSten4RTF/UFvZF1dZvZ9Zu1sx+MDXwcOR34g== +react-lifecycles-compat@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" + integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== + react-native-testing-library@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/react-native-testing-library/-/react-native-testing-library-1.5.0.tgz#02762bf8cb5c1295a220d5e5d40ffc2ebecf31da" @@ -6136,17 +6123,18 @@ react-proxy@^1.1.7: lodash "^4.6.1" react-deep-force-update "^1.0.0" -react-redux@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-6.0.0.tgz#09e86eeed5febb98e9442458ad2970c8f1a173ef" - integrity sha512-EmbC3uLl60pw2VqSSkj6HpZ6jTk12RMrwXMBdYtM6niq0MdEaRq9KYCwpJflkOZj349BLGQm1MI/JO1W96kLWQ== +react-redux@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.1.1.tgz#88e368682c7fa80e34e055cd7ac56f5936b0f52f" + integrity sha512-LE7Ned+cv5qe7tMV5BPYkGQ5Lpg8gzgItK07c67yHvJ8t0iaD9kPFPAli/mYkiyJYrs2pJgExR2ZgsGqlrOApg== dependencies: - "@babel/runtime" "^7.2.0" - hoist-non-react-statics "^3.2.1" + "@babel/runtime" "^7.1.2" + hoist-non-react-statics "^3.1.0" invariant "^2.2.4" - loose-envify "^1.4.0" - prop-types "^15.6.2" - react-is "^16.6.3" + loose-envify "^1.1.0" + prop-types "^15.6.1" + react-is "^16.6.0" + react-lifecycles-compat "^3.0.0" react-test-renderer@^16.0.0-0, react-test-renderer@^16.6.3: version "16.7.0" @@ -6269,19 +6257,12 @@ redux-saga-test-plan@4.0.0-beta.2: object-assign "^4.1.0" util-inspect "^0.1.8" -redux-saga@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/redux-saga/-/redux-saga-1.0.2.tgz#0599703f975438f1b2f9d2b9a965ec58f0fdfcd7" - integrity sha512-dHV256by3eF2AnBPx1l3HqazQFkErZ82HDXgh4jSRpT72OrX31wyg8DA1q8+0HvENRfJAyhT/4qT5yH/vVqFfw== - dependencies: - "@redux-saga/core" "^1.0.2" - redux-thunk@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.3.0.tgz#51c2c19a185ed5187aaa9a2d08b666d0d6467622" integrity sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw== -redux@4.x, "redux@>=0.10 <5": +redux@~4.0: version "4.0.1" resolved "https://registry.yarnpkg.com/redux/-/redux-4.0.1.tgz#436cae6cc40fbe4727689d7c8fae44808f1bfef5" integrity sha512-R7bAtSkk7nY6O/OYMVR9RiBI+XghjF9rlbl5806HJbQph0LJVHZrU5oaO4q70eUKiqMRqm4y07KLTlMZ2BlVmg== @@ -6315,6 +6296,11 @@ regenerator-runtime@^0.12.0: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz#fa1a71544764c036f8c49b13a08b2594c9f8a0de" integrity sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg== +regenerator-runtime@^0.13.2: + version "0.13.2" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz#32e59c9a6fb9b1a4aff09b4930ca2d4477343447" + integrity sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA== + regenerator-transform@^0.10.0: version "0.10.1" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" @@ -7234,25 +7220,6 @@ typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" -typescript-compare@^0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/typescript-compare/-/typescript-compare-0.0.2.tgz#7ee40a400a406c2ea0a7e551efd3309021d5f425" - integrity sha512-8ja4j7pMHkfLJQO2/8tut7ub+J3Lw2S3061eJLFQcvs3tsmJKp8KG5NtpLn7KcY2w08edF74BSVN7qJS0U6oHA== - dependencies: - typescript-logic "^0.0.0" - -typescript-logic@^0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/typescript-logic/-/typescript-logic-0.0.0.tgz#66ebd82a2548f2b444a43667bec120b496890196" - integrity sha512-zXFars5LUkI3zP492ls0VskH3TtdeHCqu0i7/duGt60i5IGPIpAHE/DWo5FqJ6EjQ15YKXrt+AETjv60Dat34Q== - -typescript-tuple@^2.1.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/typescript-tuple/-/typescript-tuple-2.2.1.tgz#7d9813fb4b355f69ac55032e0363e8bb0f04dad2" - integrity sha512-Zcr0lbt8z5ZdEzERHAMAniTiIKerFCMgd7yjq1fPnDJ43et/k9twIFQMUYff9k5oXcsQ0WpvFcgzK2ZKASoW6Q== - dependencies: - typescript-compare "^0.0.2" - 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"