From fbadea46f12410eb422a394087f24b6a6bf45a38 Mon Sep 17 00:00:00 2001 From: Satyajit Sahoo Date: Tue, 7 Jan 2020 03:57:10 +0100 Subject: [PATCH] chore: setup detox for iOS --- .github/workflows/main.yml | 70 ++++++++ .../e2e/__integration_tests__/index.test.js | 9 + example/e2e/config.json | 6 + example/e2e/init.js | 29 ++++ example/ios/Podfile.lock | 68 ++++---- example/package.json | 23 +++ package.json | 2 +- yarn.lock | 154 +++++++++++++++++- 8 files changed, 322 insertions(+), 39 deletions(-) create mode 100644 .github/workflows/main.yml create mode 100644 example/e2e/__integration_tests__/index.test.js create mode 100644 example/e2e/config.json create mode 100644 example/e2e/init.js diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 00000000..8500adc9 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,70 @@ + +name: Detox (iOS) + +on: [push] + +jobs: + build: + runs-on: macOS-latest + timeout-minutes: 15 + + env: + DEVELOPER_DIR: /Applications/Xcode_11.2.app + steps: + - uses: actions/checkout@v1 + + - name: Use Node.js 10 + uses: actions/setup-node@v1 + with: + node-version: 12 + + - name: Get Yarn cache + id: yarn-cache + run: echo "::set-output name=dir::$(yarn cache dir)" + + - name: Cache Yarn packages + uses: actions/cache@v1 + with: + path: ${{ steps.yarn-cache.outputs.dir }} + key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} + restore-keys: ${{ runner.os }}-yarn- + + - name: Install dependencies + if: steps.yarn-cache.outputs.cache-hit != 'true' + run: yarn --frozen-lockfile + + - name: Cache Pods + uses: actions/cache@v1 + with: + path: example/ios/Pods + key: pods-${{ hashFiles('**/Podfile.lock') }} + + - name: Update Pods + run: | + gem update cocoapods xcodeproj + cd example/ios + pod install + + - name: Configure dependencies + run: | + brew tap wix/brew + brew install applesimutils + yarn global add detox-cli + + - name: Cache Detox build + uses: actions/cache@v1 + id: detox-cache + with: + path: example/ios/build + key: detox-build-${{ hashFiles('**/yarn.lock') }}-${{ hashFiles('**/Podfile.lock') }} + + - name: Build Detox + if: steps.detox-cache.outputs.cache-hit != 'true' + run: | + cd example + detox build --configuration ios.sim.release + + - name: Run Detox tests + run: | + cd example + detox test --configuration ios.sim.release --cleanup --debug-synchronization 200 diff --git a/example/e2e/__integration_tests__/index.test.js b/example/e2e/__integration_tests__/index.test.js new file mode 100644 index 00000000..0c1acfb1 --- /dev/null +++ b/example/e2e/__integration_tests__/index.test.js @@ -0,0 +1,9 @@ +import { by, element, expect, device } from 'detox'; + +beforeEach(async () => { + await device.reloadReactNative(); +}); + +it('has dark theme toggle', async () => { + await expect(element(by.text('Dark theme'))).toBeVisible(); +}); diff --git a/example/e2e/config.json b/example/e2e/config.json new file mode 100644 index 00000000..3ff37ef8 --- /dev/null +++ b/example/e2e/config.json @@ -0,0 +1,6 @@ +{ + "setupFilesAfterEnv": ["./init.js"], + "testEnvironment": "node", + "reporters": ["detox/runners/jest/streamlineReporter"], + "verbose": true +} diff --git a/example/e2e/init.js b/example/e2e/init.js new file mode 100644 index 00000000..16b38790 --- /dev/null +++ b/example/e2e/init.js @@ -0,0 +1,29 @@ +/* eslint-disable import/no-commonjs, jest/no-jasmine-globals */ +/* eslint-env jest, jasmine */ + +const detox = require('detox'); +const config = require('../package.json').detox; +const adapter = require('detox/runners/jest/adapter'); +const specReporter = require('detox/runners/jest/specReporter'); + +// Set the default timeout +jest.setTimeout(120000); + +jasmine.getEnv().addReporter(adapter); + +// This takes care of generating status logs on a per-spec basis. By default, jest only reports at file-level. +// This is strictly optional. +jasmine.getEnv().addReporter(specReporter); + +beforeAll(async () => { + await detox.init(config); +}, 300000); + +beforeEach(async () => { + await adapter.beforeEach(); +}); + +afterAll(async () => { + await adapter.afterAll(); + await detox.cleanup(); +}); diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock index 36b51d59..6e1aa030 100644 --- a/example/ios/Podfile.lock +++ b/example/ios/Podfile.lock @@ -253,7 +253,7 @@ PODS: - React - RNReanimated (1.4.0): - React - - RNScreens (2.0.0-alpha.17): + - RNScreens (2.0.0-alpha.19): - React - UMBarCodeScannerInterface (5.0.0) - UMCameraInterface (5.0.0) @@ -274,15 +274,15 @@ PODS: DEPENDENCIES: - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`) - - EXAppLoaderProvider (from `../node_modules/expo/node_modules/expo-app-loader-provider/ios`) - - EXConstants (from `../node_modules/expo/node_modules/expo-constants/ios`) + - EXAppLoaderProvider (from `../node_modules/expo-app-loader-provider/ios`) + - EXConstants (from `../node_modules/expo-constants/ios`) - EXErrorRecovery (from `../node_modules/expo-error-recovery/ios`) - - EXFileSystem (from `../node_modules/expo/node_modules/expo-file-system/ios`) + - EXFileSystem (from `../node_modules/expo-file-system/ios`) - EXFont (from `../node_modules/expo-font/ios`) - EXKeepAwake (from `../node_modules/expo-keep-awake/ios`) - EXLinearGradient (from `../node_modules/expo-linear-gradient/ios`) - EXLocation (from `../node_modules/expo-location/ios`) - - EXPermissions (from `../node_modules/expo/node_modules/expo-permissions/ios`) + - EXPermissions (from `../node_modules/expo-permissions/ios`) - EXSQLite (from `../node_modules/expo-sqlite/ios`) - EXWebBrowser (from `../node_modules/expo-web-browser/ios`) - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`) @@ -316,18 +316,18 @@ DEPENDENCIES: - RNGestureHandler (from `../node_modules/react-native-gesture-handler`) - RNReanimated (from `../node_modules/react-native-reanimated`) - RNScreens (from `../node_modules/react-native-screens`) - - UMBarCodeScannerInterface (from `../node_modules/expo/node_modules/unimodules-barcode-scanner-interface/ios`) - - UMCameraInterface (from `../node_modules/expo/node_modules/unimodules-camera-interface/ios`) - - UMConstantsInterface (from `../node_modules/expo/node_modules/unimodules-constants-interface/ios`) - - "UMCore (from `../node_modules/expo/node_modules/@unimodules/core/ios`)" - - UMFaceDetectorInterface (from `../node_modules/expo/node_modules/unimodules-face-detector-interface/ios`) - - UMFileSystemInterface (from `../node_modules/expo/node_modules/unimodules-file-system-interface/ios`) - - UMFontInterface (from `../node_modules/expo/node_modules/unimodules-font-interface/ios`) - - UMImageLoaderInterface (from `../node_modules/expo/node_modules/unimodules-image-loader-interface/ios`) - - UMPermissionsInterface (from `../node_modules/expo/node_modules/unimodules-permissions-interface/ios`) - - "UMReactNativeAdapter (from `../node_modules/expo/node_modules/@unimodules/react-native-adapter/ios`)" - - UMSensorsInterface (from `../node_modules/expo/node_modules/unimodules-sensors-interface/ios`) - - UMTaskManagerInterface (from `../node_modules/expo/node_modules/unimodules-task-manager-interface/ios`) + - UMBarCodeScannerInterface (from `../node_modules/unimodules-barcode-scanner-interface/ios`) + - UMCameraInterface (from `../node_modules/unimodules-camera-interface/ios`) + - UMConstantsInterface (from `../node_modules/unimodules-constants-interface/ios`) + - "UMCore (from `../node_modules/@unimodules/core/ios`)" + - UMFaceDetectorInterface (from `../node_modules/unimodules-face-detector-interface/ios`) + - UMFileSystemInterface (from `../node_modules/unimodules-file-system-interface/ios`) + - UMFontInterface (from `../node_modules/unimodules-font-interface/ios`) + - UMImageLoaderInterface (from `../node_modules/unimodules-image-loader-interface/ios`) + - UMPermissionsInterface (from `../node_modules/unimodules-permissions-interface/ios`) + - "UMReactNativeAdapter (from `../node_modules/@unimodules/react-native-adapter/ios`)" + - UMSensorsInterface (from `../node_modules/unimodules-sensors-interface/ios`) + - UMTaskManagerInterface (from `../node_modules/unimodules-task-manager-interface/ios`) - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) SPEC REPOS: @@ -339,16 +339,16 @@ EXTERNAL SOURCES: :podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec" EXAppLoaderProvider: :path: !ruby/object:Pathname - path: "../node_modules/expo/node_modules/expo-app-loader-provider/ios" + path: "../node_modules/expo-app-loader-provider/ios" EXConstants: :path: !ruby/object:Pathname - path: "../node_modules/expo/node_modules/expo-constants/ios" + path: "../node_modules/expo-constants/ios" EXErrorRecovery: :path: !ruby/object:Pathname path: "../node_modules/expo-error-recovery/ios" EXFileSystem: :path: !ruby/object:Pathname - path: "../node_modules/expo/node_modules/expo-file-system/ios" + path: "../node_modules/expo-file-system/ios" EXFont: :path: !ruby/object:Pathname path: "../node_modules/expo-font/ios" @@ -363,7 +363,7 @@ EXTERNAL SOURCES: path: "../node_modules/expo-location/ios" EXPermissions: :path: !ruby/object:Pathname - path: "../node_modules/expo/node_modules/expo-permissions/ios" + path: "../node_modules/expo-permissions/ios" EXSQLite: :path: !ruby/object:Pathname path: "../node_modules/expo-sqlite/ios" @@ -428,40 +428,40 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native-screens" UMBarCodeScannerInterface: :path: !ruby/object:Pathname - path: "../node_modules/expo/node_modules/unimodules-barcode-scanner-interface/ios" + path: "../node_modules/unimodules-barcode-scanner-interface/ios" UMCameraInterface: :path: !ruby/object:Pathname - path: "../node_modules/expo/node_modules/unimodules-camera-interface/ios" + path: "../node_modules/unimodules-camera-interface/ios" UMConstantsInterface: :path: !ruby/object:Pathname - path: "../node_modules/expo/node_modules/unimodules-constants-interface/ios" + path: "../node_modules/unimodules-constants-interface/ios" UMCore: :path: !ruby/object:Pathname - path: "../node_modules/expo/node_modules/@unimodules/core/ios" + path: "../node_modules/@unimodules/core/ios" UMFaceDetectorInterface: :path: !ruby/object:Pathname - path: "../node_modules/expo/node_modules/unimodules-face-detector-interface/ios" + path: "../node_modules/unimodules-face-detector-interface/ios" UMFileSystemInterface: :path: !ruby/object:Pathname - path: "../node_modules/expo/node_modules/unimodules-file-system-interface/ios" + path: "../node_modules/unimodules-file-system-interface/ios" UMFontInterface: :path: !ruby/object:Pathname - path: "../node_modules/expo/node_modules/unimodules-font-interface/ios" + path: "../node_modules/unimodules-font-interface/ios" UMImageLoaderInterface: :path: !ruby/object:Pathname - path: "../node_modules/expo/node_modules/unimodules-image-loader-interface/ios" + path: "../node_modules/unimodules-image-loader-interface/ios" UMPermissionsInterface: :path: !ruby/object:Pathname - path: "../node_modules/expo/node_modules/unimodules-permissions-interface/ios" + path: "../node_modules/unimodules-permissions-interface/ios" UMReactNativeAdapter: :path: !ruby/object:Pathname - path: "../node_modules/expo/node_modules/@unimodules/react-native-adapter/ios" + path: "../node_modules/@unimodules/react-native-adapter/ios" UMSensorsInterface: :path: !ruby/object:Pathname - path: "../node_modules/expo/node_modules/unimodules-sensors-interface/ios" + path: "../node_modules/unimodules-sensors-interface/ios" UMTaskManagerInterface: :path: !ruby/object:Pathname - path: "../node_modules/expo/node_modules/unimodules-task-manager-interface/ios" + path: "../node_modules/unimodules-task-manager-interface/ios" Yoga: :path: "../node_modules/react-native/ReactCommon/yoga" @@ -506,7 +506,7 @@ SPEC CHECKSUMS: RNCMaskedView: dd13f9f7b146a9ad82f9b7eb6c9b5548fcf6e990 RNGestureHandler: 946a7691e41df61e2c4b1884deab41a4cdc3afff RNReanimated: b2ab0b693dddd2339bd2f300e770f6302d2e960c - RNScreens: f5e2ff7ccde2a1bfcf2a48c6fd07fdcf1fd95223 + RNScreens: 62284de159bbddba268edd282337afdb8771aaed UMBarCodeScannerInterface: 3802c8574ef119c150701d679ab386e2266d6a54 UMCameraInterface: 985d301f688ed392f815728f0dd906ca34b7ccb1 UMConstantsInterface: bda5f8bd3403ad99e663eb3c4da685d063c5653c diff --git a/example/package.json b/example/package.json index ebe056e8..fe8c43d6 100644 --- a/example/package.json +++ b/example/package.json @@ -46,7 +46,30 @@ "@types/react": "^16.9.16", "@types/react-native": "^0.60.25", "babel-preset-expo": "^8.0.0", + "detox": "^15.0.0", "expo-cli": "^3.11.1", + "jest": "^24.9.0", "typescript": "^3.7.3" + }, + "detox": { + "test-runner": "jest", + "configurations": { + "ios.sim.debug": { + "binaryPath": "ios/build/Build/Products/Debug-iphonesimulator/ReactNavigationExample.app", + "build": "set -o pipefail; xcodebuild -workspace ios/ReactNavigationExample.xcworkspace -scheme ReactNavigationExample -configuration Debug -sdk iphonesimulator -derivedDataPath ios/build", + "type": "ios.simulator", + "device": { + "type": "iPhone 11 Pro" + } + }, + "ios.sim.release": { + "binaryPath": "ios/build/Build/Products/Release-iphonesimulator/ReactNavigationExample.app", + "build": "export RCT_NO_LAUNCH_PACKAGER=true; set -o pipefail; xcodebuild -workspace ios/ReactNavigationExample.xcworkspace -scheme ReactNavigationExample -configuration Release -sdk iphonesimulator -derivedDataPath ios/build", + "type": "ios.simulator", + "device": { + "type": "iPhone 11 Pro" + } + } + } } } diff --git a/package.json b/package.json index 0f64ede6..e03fcebf 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "eslint": "^6.7.2", "eslint-config-satya164": "^3.1.5", "husky": "^3.0.9", - "jest": "^24.8.0", + "jest": "^24.9.0", "lerna": "^3.18.4", "prettier": "^1.19.1", "typescript": "^3.7.3" diff --git a/yarn.lock b/yarn.lock index b6fe285a..77c58f2c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4113,6 +4113,11 @@ bl@^3.0.0: dependencies: readable-stream "^3.0.1" +bluebird@3.5.x: + version "3.5.5" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.5.tgz#a8d0afd73251effbbd5fe384a77d73003c17a71f" + integrity sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w== + bluebird@^3.5.0, bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" @@ -4434,6 +4439,14 @@ builtins@^1.0.3: resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= +bunyan-debug-stream@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/bunyan-debug-stream/-/bunyan-debug-stream-1.1.1.tgz#4740a00b7d5c2d9d1b714925ab0802516040813e" + integrity sha512-jJbQ1gXUL6vMmZVdbaTFK1v1sGa7axLrSQQwkB6HU9HCPTzsw2HsKcPHm1vgXZlEck/4IvEuRwg/9+083YelCg== + dependencies: + colors "^1.0.3" + exception-formatter "^1.0.4" + bunyan@^1.8.12: version "1.8.12" resolved "https://registry.yarnpkg.com/bunyan/-/bunyan-1.8.12.tgz#f150f0f6748abdd72aeae84f04403be2ef113797" @@ -4693,6 +4706,15 @@ check-types@^8.0.3: resolved "https://registry.yarnpkg.com/check-types/-/check-types-8.0.3.tgz#3356cca19c889544f2d7a95ed49ce508a0ecf552" integrity sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ== +child-process-promise@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/child-process-promise/-/child-process-promise-2.2.1.tgz#4730a11ef610fad450b8f223c79d31d7bdad8074" + integrity sha1-RzChHvYQ+tRQuPIjx50x172tgHQ= + dependencies: + cross-spawn "^4.0.2" + node-version "^1.0.0" + promise-polyfill "^6.0.1" + chokidar@^2.0.0, chokidar@^2.0.2, chokidar@^2.0.4: version "2.1.8" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" @@ -4936,6 +4958,11 @@ colors@1.0.3: resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" integrity sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs= +colors@^1.0.3: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + columnify@^1.5.4: version "1.5.4" resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" @@ -5405,6 +5432,14 @@ cross-spawn@6.0.5, cross-spawn@^6.0.0, cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" +cross-spawn@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41" + integrity sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE= + dependencies: + lru-cache "^4.0.1" + which "^1.2.9" + cross-spawn@^5.0.1, cross-spawn@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" @@ -6002,6 +6037,33 @@ detect-port-alt@1.1.6: address "^1.0.1" debug "^2.6.0" +detox@^15.0.0: + version "15.0.0" + resolved "https://registry.yarnpkg.com/detox/-/detox-15.0.0.tgz#1b4a4133d2de1a9ac6918c061306cc348090b580" + integrity sha512-mnF+3FoTP0ruqmYSJOEWQ5mmDYp3igD/CytBnhOupYHzTrzgIKl7F5+qnIg6SXIA+ANqgfQvy6bAiXI/26CSrQ== + dependencies: + "@babel/core" "^7.4.5" + bunyan "^1.8.12" + bunyan-debug-stream "^1.1.0" + chalk "^2.4.2" + child-process-promise "^2.2.0" + fs-extra "^4.0.2" + funpermaproxy "^1.0.1" + get-port "^2.1.0" + ini "^1.3.4" + lodash "^4.17.5" + minimist "^1.2.0" + proper-lockfile "^3.0.2" + sanitize-filename "^1.6.1" + shell-utils "^1.0.9" + tail "^2.0.0" + telnet-client "0.15.3" + tempfile "^2.0.0" + which "^1.3.1" + ws "^3.3.1" + yargs "^13.0.0" + yargs-parser "^13.0.0" + dezalgo@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" @@ -6756,6 +6818,13 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: md5.js "^1.3.4" safe-buffer "^5.1.1" +exception-formatter@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/exception-formatter/-/exception-formatter-1.0.7.tgz#3291616b86fceabefa97aee6a4708032c6e3b96d" + integrity sha512-zV45vEsjytJrwfGq6X9qd1Ll56cW4NC2mhCO6lqwMk4ZpA1fZ6C3UiaQM/X7if+7wZFmCgss3ahp9B/uVFuLRw== + dependencies: + colors "^1.0.3" + exec-async@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/exec-async/-/exec-async-2.2.0.tgz#c7c5ad2eef3478d38390c6dd3acfe8af0efc8301" @@ -7690,6 +7759,11 @@ functional-red-black-tree@^1.0.1: resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= +funpermaproxy@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/funpermaproxy/-/funpermaproxy-1.0.1.tgz#4650e69b7c334d9717c06beba9b339cc08ac3335" + integrity sha512-9pEzs5vnNtR7ZGihly98w/mQ7blsvl68Wj30ZCDAXy7qDN4CWLLjdfjtH/P2m6whsnaJkw15hysCNHMXue+wdA== + gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" @@ -7735,6 +7809,13 @@ get-pkg-repo@^1.0.0: parse-github-repo-url "^1.3.0" through2 "^2.0.0" +get-port@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/get-port/-/get-port-2.1.0.tgz#8783f9dcebd1eea495a334e1a6a251e78887ab1a" + integrity sha1-h4P53OvR7qSVozThpqJR54iHqxo= + dependencies: + pinkie-promise "^2.0.0" + get-port@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/get-port/-/get-port-4.2.0.tgz#e37368b1e863b7629c43c5a323625f95cf24b119" @@ -9658,7 +9739,7 @@ jest-worker@^24.6.0, jest-worker@^24.9.0: merge-stream "^2.0.0" supports-color "^6.1.0" -jest@^24.8.0: +jest@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest/-/jest-24.9.0.tgz#987d290c05a08b52c56188c1002e368edb007171" integrity sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw== @@ -10181,7 +10262,7 @@ lodash@4.17.14: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.14.tgz#9ce487ae66c96254fe20b599f21b6816028078ba" integrity sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw== -lodash@4.17.15, "lodash@>=3.5 <5", lodash@^4.0.0, lodash@^4.13.1, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.0, lodash@^4.6.0, lodash@^4.6.1: +lodash@4.17.15, lodash@4.x.x, "lodash@>=3.5 <5", lodash@^4.0.0, lodash@^4.13.1, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.0, lodash@^4.6.0, lodash@^4.6.1: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== @@ -11365,6 +11446,11 @@ node-releases@^1.1.42: dependencies: semver "^6.3.0" +node-version@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/node-version/-/node-version-1.2.0.tgz#34fde3ffa8e1149bd323983479dda620e1b5060d" + integrity sha512-ma6oU4Sk0qOoKEAymVoTvk8EdXEobdS7m/mAGhDJ8Rouugho48crHBORAmy5BoOcv8wraPM6xumapQp5hl4iIQ== + noop-fn@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/noop-fn/-/noop-fn-1.0.0.tgz#5f33d47f13d2150df93e0cb036699e982f78ffbf" @@ -12858,6 +12944,11 @@ promise-inflight@^1.0.1: resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= +promise-polyfill@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-6.1.0.tgz#dfa96943ea9c121fca4de9b5868cb39d3472e057" + integrity sha1-36lpQ+qcEh/KTem1hoyznTRy4Fc= + promise-retry@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d" @@ -12897,6 +12988,15 @@ prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2: object-assign "^4.1.1" react-is "^16.8.1" +proper-lockfile@^3.0.2: + version "3.2.0" + resolved "https://registry.yarnpkg.com/proper-lockfile/-/proper-lockfile-3.2.0.tgz#89ca420eea1d55d38ca552578851460067bcda66" + integrity sha512-iMghHHXv2bsxl6NchhEaFck8tvX3F9cknEEh1SUpguUOBjN7PAAW9BLzmbc1g/mCD1gY3EE2EABBHPJfFdHFmA== + dependencies: + graceful-fs "^4.1.11" + retry "^0.12.0" + signal-exit "^3.0.2" + property-expr@^1.5.0: version "1.5.1" resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-1.5.1.tgz#22e8706894a0c8e28d58735804f6ba3a3673314f" @@ -14071,6 +14171,13 @@ sane@^4.0.3: minimist "^1.1.1" walker "~1.0.5" +sanitize-filename@^1.6.1: + version "1.6.3" + resolved "https://registry.yarnpkg.com/sanitize-filename/-/sanitize-filename-1.6.3.tgz#755ebd752045931977e30b2025d340d7c9090378" + integrity sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg== + dependencies: + truncate-utf8-bytes "^1.0.0" + sax@^1.2.1, sax@^1.2.4, sax@~1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" @@ -14343,6 +14450,13 @@ shell-quote@^1.6.1: resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== +shell-utils@^1.0.9: + version "1.0.10" + resolved "https://registry.yarnpkg.com/shell-utils/-/shell-utils-1.0.10.tgz#7fe7b8084f5d6d21323d941267013bc38aed063e" + integrity sha512-p1xuqhj3jgcXiV8wGoF1eL/NOvapN9tyGDoObqKwvZTUZn7fIzK75swLTEHfGa7sObeN9vxFplHw/zgYUYRTsg== + dependencies: + lodash "4.x.x" + shellwords@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" @@ -15058,6 +15172,11 @@ table@^5.2.3: slice-ansi "^2.1.0" string-width "^3.0.0" +tail@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/tail/-/tail-2.0.3.tgz#37567adc4624a70b35f1d146c3376fa3d6ef7c04" + integrity sha512-s9NOGkLqqiDEtBttQZI7acLS8ycYK5sTlDwNjGnpXG9c8AWj0cfAtwEIzo/hVRMMiC5EYz+bXaJWC1u1u0GPpQ== + tapable@^1.0.0, tapable@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" @@ -15149,6 +15268,13 @@ teeny-request@^3.11.3: node-fetch "^2.2.0" uuid "^3.3.2" +telnet-client@0.15.3: + version "0.15.3" + resolved "https://registry.yarnpkg.com/telnet-client/-/telnet-client-0.15.3.tgz#99ec754e4acf6fa51dc69898f574df3c2550712e" + integrity sha512-GSfdzQV0BKIYsmeXq7bJFJ2wHeJud6icaIxCUf6QCGQUD6R0BBGbT1+yLDhq67JRdgRpwyPwUbV7JxFeRrZomQ== + dependencies: + bluebird "3.5.x" + temp-dir@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" @@ -15174,6 +15300,14 @@ temp@0.8.3: os-tmpdir "^1.0.0" rimraf "~2.2.6" +tempfile@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/tempfile/-/tempfile-2.0.0.tgz#6b0446856a9b1114d1856ffcbe509cccb0977265" + integrity sha1-awRGhWqbERTRhW/8vlCczLCXcmU= + dependencies: + temp-dir "^1.0.0" + uuid "^3.0.1" + tempy@0.3.0, tempy@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/tempy/-/tempy-0.3.0.tgz#6f6c5b295695a16130996ad5ab01a8bd726e8bf8" @@ -15443,6 +15577,13 @@ trim-off-newlines@^1.0.0: resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3" integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM= +truncate-utf8-bytes@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz#405923909592d56f78a5818434b0b78489ca5f2b" + integrity sha1-QFkjkJWS1W94pYGENLC3hInKXys= + dependencies: + utf8-byte-length "^1.0.1" + tryer@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8" @@ -15837,6 +15978,11 @@ use@^3.1.0: resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== +utf8-byte-length@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61" + integrity sha1-9F8VDExm7uloGGUFq5P8u4rWv2E= + util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -16598,7 +16744,7 @@ yargs-parser@^11.1.1: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^13.1.1: +yargs-parser@^13.0.0, yargs-parser@^13.1.1: version "13.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0" integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ== @@ -16657,7 +16803,7 @@ yargs@12.0.x, yargs@^12.0.5: y18n "^3.2.1 || ^4.0.0" yargs-parser "^11.1.1" -yargs@^13.2.2, yargs@^13.3.0: +yargs@^13.0.0, yargs@^13.2.2, yargs@^13.3.0: version "13.3.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.0.tgz#4c657a55e07e5f2cf947f8a366567c04a0dedc83" integrity sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==