diff --git a/.circleci/README.md b/.circleci/README.md index 0ae32f93c4d..17db13a4fc5 100644 --- a/.circleci/README.md +++ b/.circleci/README.md @@ -63,7 +63,6 @@ These workflows are: * `testAll.yml` => runs all the possible tests. This workflow is executed on main and on PRs which change set touches both iOS and Android * `testAndroid.yml` => runs all the build steps and Android tests. This is used on changes that happens on the Android codebase and infra (`ReactAndroid` folder) * `testIOS.yml` => runs all the build steps and iOS tests. This is used on changes that happens on the iOS codebase and infra (`React` folder) -* `testE2E.yml` => runs the E2E tests. As of today, E2E tests can be triggered if the commit message contains the `#run-e2e-tests` tag. * `testJS.yml` => For all the changes that do not touch native/platform code, we only run JS tests. Notice that if there are changes on files that do not represents code (for example `.md` files like this one or the `Changelog`) we don't run any CI. diff --git a/.circleci/configurations/jobs.yml b/.circleci/configurations/jobs.yml index fc15c96f7b8..3a1e0da816f 100644 --- a/.circleci/configurations/jobs.yml +++ b/.circleci/configurations/jobs.yml @@ -107,140 +107,6 @@ jobs: - store_test_results: path: ./reports/junit - # ------------------------- - # JOBS: iOS E2E Tests - # ------------------------- - test_e2e_ios: - executor: reactnativeios - parameters: - ruby_version: - default: "2.7.8" - description: The version of ruby that must be used - type: string - steps: - - checkout_code_with_cache - - run_yarn - - setup_hermes_version - - run: - name: Install appium - command: npm install appium@2.0.0 -g - - run: - name: Install appium drivers - command: | - appium driver install uiautomator2 - appium driver install xcuitest - - run: - name: Start Appium server - command: appium --base-path /wd/hub - background: true - - run: - name: Start Metro - command: | - cd packages/rn-tester - yarn start - background: true - - brew_install: - package: cmake - - setup_ruby: - ruby_version: << parameters.ruby_version >> - - run: - name: Boot iOS Simulator - command: source scripts/.tests.env && xcrun simctl boot "$IOS_DEVICE" || true - - with_xcodebuild_cache: - steps: - - run: - name: Install Bundler - command: | - cd packages/rn-tester - bundle check || bundle install - bundle exec pod setup - RCT_NEW_ARCH_ENABLED=1 bundle exec pod install --verbose - - run: - name: Build app - command: | - xcodebuild build \ - -workspace packages/rn-tester/RNTesterPods.xcworkspace \ - -configuration Debug \ - -scheme RNTester \ - -sdk iphonesimulator \ - -derivedDataPath /tmp/e2e/ - - run: - name: Move app to correct directory - command: mv /tmp/e2e/Build/Products/Debug-iphonesimulator/RNTester.app packages/rn-tester-e2e/apps/rn-tester.app - - run: - name: Check Appium server status - command: scripts/circleci/check_appium_server_status.sh - - run: - name: Run E2E tests - no_output_timeout: 30m - command: | - cd packages/rn-tester-e2e - (yarn test-e2e ios 2>&1 | tee /tmp/test_log) || true - - store_artifacts: - path: /tmp/test_log - - # ------------------------- - # JOBS: Android E2E Tests - # ------------------------- - test_e2e_android: - executor: - name: android/android-machine - tag: 2023.07.1 - steps: - - checkout_code_with_cache - - run_yarn - - android/create-avd: - avd-name: e2e_emulator - system-image: system-images;android-34;google_apis;x86_64 - install: true - - android/start-emulator: - avd-name: e2e_emulator - no-window: true - restore-gradle-cache-prefix: v1a - post-emulator-launch-assemble-command: "" - - run: - name: Install appium - command: npm install appium@2.0.0 -g - - run: - name: Install appium drivers - command: | - appium driver install uiautomator2@2.29.1 - appium driver install xcuitest@4.32.10 - - run: - name: Start Appium server - command: appium --base-path /wd/hub - background: true - - run: - name: Start Metro - command: | - cd packages/rn-tester - yarn start - background: true - - with_gradle_cache: - steps: - - run: - name: Build app - command: | - ./gradlew :packages:rn-tester:android:app:assembleHermesDebug -PreactNativeArchitectures=x86_64 - - run: - name: Move app to correct directory - command: mv packages/rn-tester/android/app/build/outputs/apk/hermes/debug/app-hermes-x86_64-debug.apk packages/rn-tester-e2e/apps/rn-tester.apk - - run: - name: Check Appium server status - command: | - if ! nc -z 127.0.0.1 4723; then - echo Could not find Appium server - exit 1 - fi - - run: - name: Run E2E tests - no_output_timeout: 30m - command: | - cd packages/rn-tester-e2e - (yarn test-e2e android 2>&1 | tee /tmp/test_log) || true - - store_artifacts: - path: /tmp/test_log - # ------------------------- # JOBS: Build Android # ------------------------- diff --git a/.circleci/configurations/test_workflows/testE2E.yml b/.circleci/configurations/test_workflows/testE2E.yml deleted file mode 100644 index a926a395775..00000000000 --- a/.circleci/configurations/test_workflows/testE2E.yml +++ /dev/null @@ -1,9 +0,0 @@ - tests_e2e: - when: - and: - - equal: [ false, << pipeline.parameters.run_release_workflow >> ] - - equal: [ false, << pipeline.parameters.run_nightly_workflow >> ] - jobs: - - test_e2e_ios: - ruby_version: "2.7.8" - - test_e2e_android diff --git a/.github/workflows/run-e2e-tests.yml b/.github/workflows/run-e2e-tests.yml deleted file mode 100644 index cf847857227..00000000000 --- a/.github/workflows/run-e2e-tests.yml +++ /dev/null @@ -1,26 +0,0 @@ -name: Run E2E Tests -# This workflow is used to trigger E2E tests on a PR when a comment is made -# containing the text "#run-e2e-tests". -on: - issue_comment: - types: [created] -permissions: - contents: read -jobs: - rebase: - name: Trigger E2E Tests - permissions: - contents: write # for cirrus-actions/rebase to push code to rebase - pull-requests: read # for cirrus-actions/rebase to get info about PR - runs-on: ubuntu-latest - if: github.event.issue.pull_request != '' && contains(github.event.comment.body, '#run-e2e-tests') - steps: - - name: Checkout the latest code - uses: actions/checkout@v4 - with: - token: ${{ secrets.GITHUB_TOKEN }} - fetch-depth: 0 # otherwise, you will fail to push refs to dest repo - - name: Push empty commit - run: | - git commit -m "#run-e2e-tests" --allow-empty - git push origin $(git branch --show-current) diff --git a/.gitignore b/.gitignore index 6c6e7832fd1..5851f3674d5 100644 --- a/.gitignore +++ b/.gitignore @@ -159,9 +159,5 @@ vendor/ # Temporary files created by Metro to check the health of the file watcher .metro-health-check* -# E2E files -/packages/rn-tester-e2e/apps/*.apk -/packages/rn-tester-e2e/apps/*.app - # CircleCI .circleci/generated_config.yml diff --git a/jest.config.js b/jest.config.js index 933d17ec515..f81a4049d9a 100644 --- a/jest.config.js +++ b/jest.config.js @@ -33,7 +33,6 @@ module.exports = { '/packages/react-native/template', '/packages/react-native/sdks', '/packages/react-native/Libraries/Renderer', - '/packages/rn-tester/e2e', '/packages/react-native-test-renderer/src', ], transformIgnorePatterns: ['node_modules/(?!@react-native/)'], diff --git a/packages/rn-tester-e2e/README.md b/packages/rn-tester-e2e/README.md deleted file mode 100644 index 4f3a1b5059c..00000000000 --- a/packages/rn-tester-e2e/README.md +++ /dev/null @@ -1,124 +0,0 @@ -# RNTester E2E folder - -In this folder we have a the setup for running E2E testing in RNTester via the usage of [Appium](https://appium.io/) and [WebDriverIO](https://webdriver.io/) and [Jest](https://jestjs.io/). - -- [Setting up locally](#setting-up-locally) - - [(one-off) Setting up Appium](#one-off-setting-up-appium) - - [Building RNTester app](#building-rntester-app) - - [Building for iOS](#building-for-ios) - - [Building for Android](#building-for-android) - - [Setting up the RNTester E2E folder](#setting-up-the-rntester-e2e-folder) -- [Testing the RNTester app E2E](#testing-the-rntester-app-e2e) -- [Adding new tests (and project structure)](#adding-new-tests-and-project-structure) - -## Setting up locally - -### (one-off) Setting up Appium - -The first step you need to do is to ensure to install the tooling: - -```bash -npm install appium@2.0.0 -g -appium driver install uiautomator2 -appium driver install xcuitest -``` - -> More details about drivers in Appium [here](https://appium.github.io/appium/docs/en/2.0/guides/managing-exts/) and [here](https://appium.github.io/appium/docs/en/2.0/quickstart/uiauto2-driver/) - -You should not need to run install commands for drivers separately more than once, even if you bump the dep in package.json. - -### Building RNTester app - -Building manually *.app* and *.apk* is required to run automation tests on local environment. - -0. *(optional)* If you previously built RNTester, you may need to clean up build files and Pods: - - ```bash - yarn test-e2e-local-clean && yarn install - ``` - -1. Step 1: install packages for the repository, then navigate in the rn-tester folder - - ```bash - cd react-native - yarn install - cd packages/rn-tester - ``` - -Now, depending on the platform, there are some specific steps - -#### Building for iOS - -0. Make sure you have Bundler `gem install bundler` - we use it ensure installing the right version of CocoaPods locally. -1. Install Bundler and CocoaPods dependencies: `bundle install` then `bundle exec pod install` or `yarn setup-ios-hermes` for RNTester with Hermes. In order to use JSC instead of Hermes engine, run: `USE_HERMES=0 bundle exec pod install` or `setup-ios-jsc` instead. -2. You can build app with React Native CLI or manually with Xcode: - 1. To build with React Native CLI: - 1. Run `npx react-native build-ios --mode Debug --scheme RNTester --buildFolder /path/to/build-folder`, replace `/path/to/build-folder` with the real path. - 2. Copy the built app using `mv` - `mv /path/to/build-folder/Build/Products/Debug-iphonesimulator/RNTester.app ~/react-native/packages/rn-tester-e2e/apps` or manually. - 2. To build with Xcode, open the generated `RNTester.xcworkspace` and build. - 1. Find the **RNTester.app** in `~/Library/Developer/Xcode/DerivedData/RNTesterPods-{id}/Build/Products/Debug-iphonesimulator` - 2. Copy the app to the following directory `~/react-native/packages/rn-tester-e2e/apps`. -3. Change its name to: `rn-tester.app` - -#### Building for Android - -0. You'll need to have all the [prerequisites](https://reactnative.dev/contributing/how-to-build-from-source#prerequisites) (SDK, NDK) for Building React Native installed. -1. Start an Android emulator. -2. Build the app via - - ```bash - # In order to not use Hermes engine, run `yarn install-android-jsc` instead. - yarn install-android-hermes - yarn start - ``` - - *Note: Building for the first time can take a while.* - -3. Find the **app-*-debug.apk** in `~/react-native/packages/rn-tester/android/app/build/outputs/apk/hermes/debug` -4. Copy the app `app-*-debug.apk` to the following directory `~/react-native/packages/rn-tester-e2e/apps` -5. Change its name to: `rn-tester.apk` - -### Setting up the RNTester E2E folder - -In `react-native/packages/rn-tester-e2e` open the following file - -```bash -/react-native/packages/rn-tester-e2e/e2e-config.js -``` - -And modify lines L24->L39 to reflect your local setup configuration (ex. `platformVersion`, `deviceName`). Make sure to **not** commit this change if you send a PR to add tests. - -## Testing the RNTester app E2E - -After you have done all the above correctly, and you have the Android/iOS apps in the `rn-tester-e2e/apps` folder, in a dedicated terminal window, run: - -```bash -appium --base-path /wd/hub -``` - -This will start the Appium server - you will need this to keep running. - -Then open a second terminal window and start the Metro terminal from the `packages/rn-tester` folder, via `yarn start --reset-cache`. This terminal window also needs to keep running. - -Now, make sure that the iOS simulator/the Android emulator is up and running. - -Finally, you can open a third terminal window and run: - -```bash -yarn test-e2e android # for android -yarn test-e2e ios # for ios -``` - -Now you should see the RNTester app being open, and the defined test being run. - -## Adding new tests (and project structure) - -This project has 2 main folders: - -- `apps`, where, as you have seen above, the iOS/Android RNTester apps need to be put so that appium will pick them and install in the emulator/simulator consistently. - -- `tests`, where the tests and referencing files all live. The substructure is as follows: - - `screens` -> in this folder, you will find `*.screen.js` files, where each file represents a navigation screen for RNTester. So there are 3 root ones (`apis`, `bookmarks`, `components`) and then for subscreens, there's a folder with the same name - currently, that's only `components` that contains `buttonComponent.screen.js`. The content of these files is what was earlier mentioned as "references": they provide an easy way to define all elements present in said screen, so that they can be used for tests. - - `specs` -> this folder follows a similar 1:1 mapping to the RNTester screens, but for the tests: for each screen (or subscreen) there's a dedicated `*.test.js` file (such as `buttonComponentScreen.test.js`). Ideally, in this file the Jest tests are standard, leveraging the `*.screen.js` counterpart for the details of defining how Appium/WDIO can reach those elements on screen. - -When adding a new test, please ensure that you follow this pattern and add the relevant test in the right screen file / screen test file. Use the files mentioned above as examples. diff --git a/packages/rn-tester-e2e/apps/README.md b/packages/rn-tester-e2e/apps/README.md deleted file mode 100644 index ac0d4f7cf98..00000000000 --- a/packages/rn-tester-e2e/apps/README.md +++ /dev/null @@ -1 +0,0 @@ -Put the *.app and *.apk files here. diff --git a/packages/rn-tester-e2e/babel.config.js b/packages/rn-tester-e2e/babel.config.js deleted file mode 100644 index d37dc1e9560..00000000000 --- a/packages/rn-tester-e2e/babel.config.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow strict-local - * @format - */ - -module.exports = { - presets: [['@babel/preset-env', {targets: {node: 'current'}}]], - plugins: ['@babel/plugin-transform-flow-strip-types'], -}; diff --git a/packages/rn-tester-e2e/e2e-config.js b/packages/rn-tester-e2e/e2e-config.js deleted file mode 100644 index 4f488bd5200..00000000000 --- a/packages/rn-tester-e2e/e2e-config.js +++ /dev/null @@ -1,61 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow - * @format - */ - -const path = require('path'); - -type Capabilities = { - platformName: 'Android' | 'iOS', - 'appium:platformVersion': string, - 'appium:deviceName': string, - 'appium:app': string, - 'appium:automationName': 'UiAutomator2' | 'XCUITest', - 'appium:newCommandTimeout'?: number, -}; - -let capabilities: Capabilities; - -const android = { - platformName: 'Android', - 'appium:platformVersion': '14.0', - 'appium:deviceName': 'Android Emulator', - 'appium:app': path.join(process.cwd(), '/apps/rn-tester.apk'), - 'appium:automationName': 'UiAutomator2', - 'appium:newCommandTimeout': 240, -}; - -const ios = { - platformName: 'iOS', - 'appium:platformVersion': '16.4', - 'appium:deviceName': 'iPhone 14', - 'appium:automationName': 'XCUITest', - 'appium:app': path.join(process.cwd(), '/apps/rn-tester.app'), -}; - -// check that E2E_DEVICE exists, is a string and its either "ios" or "android" -if (!process.env.E2E_DEVICE) { - throw new Error('E2E_DEVICE environment variable is not defined'); -} else if (typeof process.env.E2E_DEVICE !== 'string') { - throw new Error('E2E_DEVICE environment variable is not a string'); -} else if ( - process.env.E2E_DEVICE !== 'ios' && - process.env.E2E_DEVICE !== 'android' -) { - throw new Error('E2E_DEVICE environment variable is not "ios" or "android"'); -} - -if (process.env.E2E_DEVICE === 'android') { - capabilities = android; -} - -if (process.env.E2E_DEVICE === 'ios') { - capabilities = ios; -} - -export default capabilities; diff --git a/packages/rn-tester-e2e/jest.config.js b/packages/rn-tester-e2e/jest.config.js deleted file mode 100644 index 8eedcd4d52a..00000000000 --- a/packages/rn-tester-e2e/jest.config.js +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow strict-local - * @format - */ - -module.exports = { - testTimeout: 120000, - bail: 0, - setupFilesAfterEnv: ['./jest.setup.js'], - testMatch: ['**/specs/**/*.js'], - maxWorkers: 1, - verbose: true, -}; diff --git a/packages/rn-tester-e2e/jest.setup.js b/packages/rn-tester-e2e/jest.setup.js deleted file mode 100644 index 8fe6ca69921..00000000000 --- a/packages/rn-tester-e2e/jest.setup.js +++ /dev/null @@ -1,50 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow - * @format - */ - -import capabilities from './e2e-config.js'; -import {afterEach, beforeEach, jest} from '@jest/globals'; - -const wdio = require('webdriverio'); -jest.retryTimes(3); - -let driver: any; - -const config = { - path: '/wd/hub', - host: 'localhost', - port: 4723, - waitforTimeout: 60000, - capabilities: { - ...capabilities, - }, -}; - -beforeEach(async () => { - // $FlowFixMe - let testName: any = expect.getState().currentTestName; - console.info( - '------------------------------------------------------------ Test is starting... ------------------------------------------------------------', - ); - console.info( - '------------------------------ Test name: ' + - testName + - ' ------------------------------', - ); - driver = await wdio.remote(config); -}); - -afterEach(async () => { - await driver.deleteSession(); - console.info( - '------------------------------------------------------------ Done with testing. ------------------------------------------------------------', - ); -}); - -export {driver}; diff --git a/packages/rn-tester-e2e/package.json b/packages/rn-tester-e2e/package.json deleted file mode 100644 index 6d1dfdb3af4..00000000000 --- a/packages/rn-tester-e2e/package.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "@react-native/tester-e2e", - "private": true, - "version": "0.75.0-main", - "license": "MIT", - "description": "React Native E2E tester app.", - "homepage": "https://github.com/facebook/react-native/tree/HEAD/packages/rn-tester-e2e", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/facebook/react-native.git", - "directory": "packages/rn-tester-e2e" - }, - "scripts": { - "test-e2e": "node scripts/e2e/run-e2e-tests.js" - }, - "devDependencies": { - "@babel/core": "^7.20.0", - "@babel/plugin-transform-flow-strip-types": "^7.20.0", - "@babel/preset-env": "^7.20.0", - "@types/jest": "^29.5.3", - "eslint": "^8.19.0", - "jest": "^29.6.3", - "webdriverio": "^7.32.0" - } -} diff --git a/packages/rn-tester-e2e/scripts/run-e2e-tests.js b/packages/rn-tester-e2e/scripts/run-e2e-tests.js deleted file mode 100644 index 6ede19d34a3..00000000000 --- a/packages/rn-tester-e2e/scripts/run-e2e-tests.js +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -const SUPPORTED_PLATFORMS = ['ios', 'android']; - -if (process.argv.length !== 3 || !SUPPORTED_PLATFORMS.includes(process.argv[2])) { - throw new Error(`Invalid platform. Supported platforms are: ${SUPPORTED_PLATFORMS.join(', ')}`); -} - -const platform = process.argv[2]; -const { execSync } = require('child_process'); -execSync(`E2E_DEVICE=${platform} jest --runInBand`, { stdio: 'inherit' }); diff --git a/packages/rn-tester-e2e/tests/helpers/utils.js b/packages/rn-tester-e2e/tests/helpers/utils.js deleted file mode 100644 index 33f4068f960..00000000000 --- a/packages/rn-tester-e2e/tests/helpers/utils.js +++ /dev/null @@ -1,95 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow - * @format - */ - -import {driver} from '../../jest.setup'; - -type PlatformsReference = { - ios: string, - android: string, -}; - -class Utils { - async checkElementExistence(locator: string): Promise { - await driver.$(locator).waitForDisplayed(); - return driver.$(locator).isDisplayed(); - } - - async clickElement(locator: string): Promise { - await driver.$(locator).waitForDisplayed(); - await driver.$(locator).click(); - } - - async getElementText(locator: string): Promise { - await driver.$(locator).waitForDisplayed(); - return driver.$(locator).getText(); - } - - platformSelect(platforms: PlatformsReference): string { - // if something goes wrong, we fallback to ios. But it should never happent, the process will fail way earlier. - // $FlowFixMe[invalid-computed-prop] - return platforms[process?.env?.E2E_DEVICE || 'ios']; - } - - async scrollToElement(locator: string): Promise { - let {width, height} = await driver.getWindowSize(); - let elementIsFound; - try { - elementIsFound = await driver.$(locator).isDisplayed(); - while (!elementIsFound) { - driver.touchPerform([ - { - action: 'press', - options: { - x: width / 2, - y: height / 2, - }, - }, - { - action: 'wait', - options: { - ms: 1000, - }, - }, - { - action: 'moveTo', - options: { - x: width / 2, - y: height / 10, - }, - }, - { - action: 'release', - }, - ]); - elementIsFound = await driver.$(locator).isDisplayed(); - } - } catch (err) { - console.log('Element is not found'); - } - } -} - -export const iOSLabel = (label: string): string => { - return `[label="${label}"]`; -}; - -export const iOSName = (name: string): string => { - return `[name="${name}"]`; -}; - -export const androidWidget = ( - type: string, - selector: string, - id: string, -): string => { - return `//android.widget.${type}[@${selector}="${id}"]`; -}; - -export const UtilsSingleton: Utils = new Utils(); diff --git a/packages/rn-tester-e2e/tests/screens/apis.screen.js b/packages/rn-tester-e2e/tests/screens/apis.screen.js deleted file mode 100644 index 286ecf56169..00000000000 --- a/packages/rn-tester-e2e/tests/screens/apis.screen.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow strict-local - * @format - */ - -// root level screen in RNTester: APIs - -class ApisScreen {} - -export const ApisScreenSingleton: ApisScreen = new ApisScreen(); diff --git a/packages/rn-tester-e2e/tests/screens/bookmarks.screen.js b/packages/rn-tester-e2e/tests/screens/bookmarks.screen.js deleted file mode 100644 index 2ff88eecbed..00000000000 --- a/packages/rn-tester-e2e/tests/screens/bookmarks.screen.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow strict-local - * @format - */ - -// root level screen in RNTester: Bookmarks - -class BookmarksScreen {} - -export const BookmarksScreenSingleton: BookmarksScreen = new BookmarksScreen(); diff --git a/packages/rn-tester-e2e/tests/screens/components.screen.js b/packages/rn-tester-e2e/tests/screens/components.screen.js deleted file mode 100644 index 605309ce668..00000000000 --- a/packages/rn-tester-e2e/tests/screens/components.screen.js +++ /dev/null @@ -1,225 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow strict-local - * @format - */ - -import {UtilsSingleton as Utils, iOSLabel} from '../helpers/utils'; - -// root level screen in RNTester: Components - -const buttonComponentLabel = 'Button Simple React Native button component.'; -const activityIndicatorComponentLabel = - 'ActivityIndicator Animated loading indicators.'; -const keyboardAvoidingViewComponentLabel = - 'KeyboardAvoidingView Base component for views that automatically adjust their height or position to move out of the way of the keyboard.'; -const flatListComponentLabel = 'FlatList Performant, scrollable list of data.'; -const jsResponderHandlerComponentLabel = - 'JSResponderHandler Simple example to test JSResponderHandler.'; -const modalComponentLabel = 'Modal Component for presenting modal views.'; -const newAppScreenComponentLabel = - 'New App Screen Displays the content of the new app screen'; -const pressableComponentLabel = - 'Pressable Component for making views pressable.'; -const refreshControlComponentLabel = - 'RefreshControl Adds pull-to-refresh support to a scrollview.'; -const scrollViewSimpleExampleComponentLabel = - 'ScrollViewSimpleExample Component that enables scrolling through child components.'; - -type ComponentsScreenType = { - buttonComponentLabelElement: string, - activityIndicatorComponentLabelElement: string, - keyboardAvoidingViewComponentLabelElement: string, - flatListComponentLabelElement: string, - jsResponderHandlerComponentLabelElement: string, - modalComponentLabelElement: string, - newAppScreenComponentLabelElement: string, - pressableComponentLabelElement: string, - refreshControlComponentLabelElement: string, - scrollViewSimpleExampleComponentLabelElement: string, - checkButtonComponentIsDisplayed: () => Promise, - checkActivityIndicatorComponentIsDisplayed: () => Promise, - checkKeyboardAvoidingViewComponentIsDisplayed: () => Promise, - checkFlatListComponentIsDisplayed: () => Promise, - checkJSResponderHandlerComponentIsDisplayed: () => Promise, - checkModalComponentIsDisplayed: () => Promise, - checkNewAppScreenComponentIsDisplayed: () => Promise, - checkPressableComponentIsDisplayed: () => Promise, - checkRefreshControlComponentIsDisplayed: () => Promise, - checkScrollViewSimpleExampleComponentIsDisplayed: () => Promise, - clickButtonComponent: () => Promise, - clickActivityIndicatorComponent: () => Promise, - clickKeyboardAvoidingViewComponent: () => Promise, - clickFlatListComponent: () => Promise, - clickJSResponderHandlerComponent: () => Promise, - clickModalComponent: () => Promise, - clickNewAppScreenComponent: () => Promise, - clickPressableComponent: () => Promise, - clickRefreshControlComponent: () => Promise, - clickScrollViewSimpleExampleComponent: () => Promise, -}; - -export const ComponentsScreen: ComponentsScreenType = { - // Reference in the top level Component list - buttonComponentLabelElement: Utils.platformSelect({ - ios: iOSLabel(buttonComponentLabel), - android: `~${buttonComponentLabel}`, - }), - activityIndicatorComponentLabelElement: Utils.platformSelect({ - ios: iOSLabel(activityIndicatorComponentLabel), - android: `~${activityIndicatorComponentLabel}`, - }), - keyboardAvoidingViewComponentLabelElement: Utils.platformSelect({ - ios: iOSLabel(keyboardAvoidingViewComponentLabel), - android: `~${keyboardAvoidingViewComponentLabel}`, - }), - flatListComponentLabelElement: Utils.platformSelect({ - ios: iOSLabel(flatListComponentLabel), - android: `~${flatListComponentLabel}`, - }), - jsResponderHandlerComponentLabelElement: Utils.platformSelect({ - ios: iOSLabel(jsResponderHandlerComponentLabel), - android: `~${jsResponderHandlerComponentLabel}`, - }), - modalComponentLabelElement: Utils.platformSelect({ - ios: iOSLabel(modalComponentLabel), - android: `~${modalComponentLabel}`, - }), - newAppScreenComponentLabelElement: Utils.platformSelect({ - ios: iOSLabel(newAppScreenComponentLabel), - android: `~${newAppScreenComponentLabel}`, - }), - pressableComponentLabelElement: Utils.platformSelect({ - ios: iOSLabel(pressableComponentLabel), - android: `~${pressableComponentLabel}`, - }), - refreshControlComponentLabelElement: Utils.platformSelect({ - ios: iOSLabel(refreshControlComponentLabel), - android: `~${refreshControlComponentLabel}`, - }), - scrollViewSimpleExampleComponentLabelElement: Utils.platformSelect({ - ios: iOSLabel(scrollViewSimpleExampleComponentLabel), - android: `~${scrollViewSimpleExampleComponentLabel}`, - }), - // Methods to interact with top level elements in the list - checkButtonComponentIsDisplayed: async function ( - this: ComponentsScreenType, - ): Promise { - return await Utils.checkElementExistence(this.buttonComponentLabelElement); - }, - checkActivityIndicatorComponentIsDisplayed: async function ( - this: ComponentsScreenType, - ): Promise { - return await Utils.checkElementExistence( - this.activityIndicatorComponentLabelElement, - ); - }, - checkKeyboardAvoidingViewComponentIsDisplayed: async function ( - this: ComponentsScreenType, - ): Promise { - return await Utils.checkElementExistence( - this.keyboardAvoidingViewComponentLabelElement, - ); - }, - checkFlatListComponentIsDisplayed: async function ( - this: ComponentsScreenType, - ): Promise { - return await Utils.checkElementExistence( - this.flatListComponentLabelElement, - ); - }, - checkJSResponderHandlerComponentIsDisplayed: async function ( - this: ComponentsScreenType, - ): Promise { - return await Utils.checkElementExistence( - this.jsResponderHandlerComponentLabelElement, - ); - }, - checkModalComponentIsDisplayed: async function ( - this: ComponentsScreenType, - ): Promise { - return await Utils.checkElementExistence(this.modalComponentLabelElement); - }, - checkNewAppScreenComponentIsDisplayed: async function ( - this: ComponentsScreenType, - ): Promise { - return await Utils.checkElementExistence( - this.newAppScreenComponentLabelElement, - ); - }, - checkPressableComponentIsDisplayed: async function ( - this: ComponentsScreenType, - ): Promise { - return await Utils.checkElementExistence( - this.pressableComponentLabelElement, - ); - }, - checkRefreshControlComponentIsDisplayed: async function ( - this: ComponentsScreenType, - ): Promise { - return await Utils.checkElementExistence( - this.refreshControlComponentLabelElement, - ); - }, - checkScrollViewSimpleExampleComponentIsDisplayed: async function ( - this: ComponentsScreenType, - ): Promise { - return await Utils.checkElementExistence( - this.scrollViewSimpleExampleComponentLabelElement, - ); - }, - clickButtonComponent: async function ( - this: ComponentsScreenType, - ): Promise { - await Utils.clickElement(this.buttonComponentLabelElement); - }, - clickActivityIndicatorComponent: async function ( - this: ComponentsScreenType, - ): Promise { - await Utils.clickElement(this.activityIndicatorComponentLabelElement); - }, - clickKeyboardAvoidingViewComponent: async function ( - this: ComponentsScreenType, - ): Promise { - await Utils.clickElement(this.keyboardAvoidingViewComponentLabelElement); - }, - clickFlatListComponent: async function ( - this: ComponentsScreenType, - ): Promise { - await Utils.clickElement(this.flatListComponentLabelElement); - }, - clickJSResponderHandlerComponent: async function ( - this: ComponentsScreenType, - ): Promise { - await Utils.clickElement(this.jsResponderHandlerComponentLabelElement); - }, - clickModalComponent: async function ( - this: ComponentsScreenType, - ): Promise { - await Utils.clickElement(this.modalComponentLabelElement); - }, - clickNewAppScreenComponent: async function ( - this: ComponentsScreenType, - ): Promise { - await Utils.clickElement(this.newAppScreenComponentLabelElement); - }, - clickPressableComponent: async function ( - this: ComponentsScreenType, - ): Promise { - await Utils.clickElement(this.pressableComponentLabelElement); - }, - clickRefreshControlComponent: async function ( - this: ComponentsScreenType, - ): Promise { - await Utils.clickElement(this.refreshControlComponentLabelElement); - }, - clickScrollViewSimpleExampleComponent: async function ( - this: ComponentsScreenType, - ): Promise { - await Utils.clickElement(this.scrollViewSimpleExampleComponentLabelElement); - }, -}; diff --git a/packages/rn-tester-e2e/tests/screens/components/activityIndicatorComponent.screen.js b/packages/rn-tester-e2e/tests/screens/components/activityIndicatorComponent.screen.js deleted file mode 100644 index b498546e340..00000000000 --- a/packages/rn-tester-e2e/tests/screens/components/activityIndicatorComponent.screen.js +++ /dev/null @@ -1,50 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow strict-local - * @format - */ - -import { - UtilsSingleton as Utils, - androidWidget, - iOSLabel, - iOSName, -} from '../../helpers/utils'; - -type ActivityIndicatorComponentScreenType = { - activityIndicatorScreenElement: string, - defaultActivityIndicatorScreenElement: string, - checkDefaultActivityIndicatorIsDisplayed: () => Promise, -}; - -const defaultActivityIndicatorTextDesc = 'Wait for content to load!'; - -export const ActivityIndicatorComponentScreen: ActivityIndicatorComponentScreenType = - { - // reference in the Components list - activityIndicatorScreenElement: Utils.platformSelect({ - ios: iOSName('ActivityIndicator'), - android: androidWidget('TextView', 'text', 'ActivityIndicator'), - }), - // References to elements within the Activity Indicator Component screen - defaultActivityIndicatorScreenElement: Utils.platformSelect({ - ios: iOSLabel(defaultActivityIndicatorTextDesc), - android: androidWidget( - 'FrameLayout', - 'content-desc', - defaultActivityIndicatorTextDesc, - ), - }), - // Methods to interact with the elements - checkDefaultActivityIndicatorIsDisplayed: async function ( - this: ActivityIndicatorComponentScreenType, - ): Promise { - return await Utils.checkElementExistence( - this.defaultActivityIndicatorScreenElement, - ); - }, - }; diff --git a/packages/rn-tester-e2e/tests/screens/components/buttonComponent.screen.js b/packages/rn-tester-e2e/tests/screens/components/buttonComponent.screen.js deleted file mode 100644 index 5ac4975879c..00000000000 --- a/packages/rn-tester-e2e/tests/screens/components/buttonComponent.screen.js +++ /dev/null @@ -1,95 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow strict-local - * @format - */ - -import { - UtilsSingleton as Utils, - androidWidget, - iOSLabel, -} from '../../helpers/utils'; - -type ButtonComponentScreenType = { - buttonScreenElement: string, - btnSubmitElement: string, - inputSearchElement: string, - btnOKElement: string, - btnCancelElement: string, - submitAlertBoxElement: string, - cancelAlertBoxElement: string, - checkButtonsScreenIsDisplayed: () => Promise, - clickSubmitApplication: () => Promise, - clickCancelApplication: () => Promise, - getCancelAlertText: () => Promise, - getSubmitAlertText: () => Promise, - clickOkButton: () => Promise, -}; - -export const ButtonComponentScreen: ButtonComponentScreenType = { - // reference in the Components list - buttonScreenElement: Utils.platformSelect({ - ios: iOSLabel('Button'), - android: androidWidget('ViewGroup', 'text', 'Button'), - }), - // References to elements within the Button Component screen - btnSubmitElement: Utils.platformSelect({ - ios: iOSLabel('Press to submit your application!'), - android: androidWidget('Button', 'resource-id', 'button_default_styling'), - }), - inputSearchElement: Utils.platformSelect({ - ios: iOSLabel('example_search'), - android: androidWidget('EditText', 'resource-id', 'example_search'), - }), - btnOKElement: Utils.platformSelect({ - ios: iOSLabel('OK'), - android: androidWidget('Button', 'text', 'OK'), - }), - btnCancelElement: Utils.platformSelect({ - ios: iOSLabel('Press to cancel your application!'), - android: androidWidget('Button', 'resource-id', 'cancel_button'), - }), - submitAlertBoxElement: Utils.platformSelect({ - ios: iOSLabel('Your application has been submitted!'), - android: androidWidget('TextView', 'resource-id', 'android:id/alertTitle'), - }), - cancelAlertBoxElement: Utils.platformSelect({ - ios: iOSLabel('Your application has been cancelled!'), - android: androidWidget('TextView', 'resource-id', 'android:id/alertTitle'), - }), - // Methods to interact with the elements - checkButtonsScreenIsDisplayed: async function ( - this: ButtonComponentScreenType, - ): Promise { - return await Utils.getElementText(this.buttonScreenElement); - }, - clickSubmitApplication: async function ( - this: ButtonComponentScreenType, - ): Promise { - await Utils.clickElement(this.btnSubmitElement); - }, - clickCancelApplication: async function ( - this: ButtonComponentScreenType, - ): Promise { - await Utils.clickElement(this.btnCancelElement); - }, - getCancelAlertText: async function ( - this: ButtonComponentScreenType, - ): Promise { - return await Utils.getElementText(this.cancelAlertBoxElement); - }, - getSubmitAlertText: async function ( - this: ButtonComponentScreenType, - ): Promise { - return await Utils.getElementText(this.submitAlertBoxElement); - }, - clickOkButton: async function ( - this: ButtonComponentScreenType, - ): Promise { - await Utils.clickElement(this.btnOKElement); - }, -}; diff --git a/packages/rn-tester-e2e/tests/screens/components/flatListComponent.screen.js b/packages/rn-tester-e2e/tests/screens/components/flatListComponent.screen.js deleted file mode 100644 index ee2f0090703..00000000000 --- a/packages/rn-tester-e2e/tests/screens/components/flatListComponent.screen.js +++ /dev/null @@ -1,351 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow strict-local - * @format - */ - -import { - UtilsSingleton as Utils, - androidWidget, - iOSLabel, - iOSName, -} from '../../helpers/utils'; - -type FlatListComponentScreenType = { - flatListScreenElement: string, - basicScreenElement: string, - onStartReachedScreenElement: string, - onEndReachedScreenElement: string, - contentInsetScreenElement: string, - invertedScreenElement: string, - onViewableItemsChangedScreenElement: string, - flatListWithSeparatorsScreenElement: string, - multiColumnScreenElement: string, - stickyHeadersScreenElement: string, - nestedScreenElement: string, - basicSearchBarScreenElement: string, - btnCollapseElement: string, - btnToggleTrueElement: string, - btnToggleFalseElement: string, - onStartBtnTestElement: string, - stickyPizzaElement: string, - pizzaElement: string, - iceCreamElement: string, - contentInsetMenuElement: string, - separatorElement: string, - listHeaderTextElement: string, - nestedHeaderTextElement: string, - checkFlatListBasicScreenIsDisplayed: () => Promise, - checkFlatListOnStartReachedScreenIsDisplayed: () => Promise, - checkFlatListOnEndReachedScreenIsDisplayed: () => Promise, - checkFlatListContentInsetScreenIsDisplayed: () => Promise, - checkFlatListInvertedScreenIsDisplayed: () => Promise, - checkFlatListOnViewableItemsChangedScreenIsDisplayed: () => Promise, - checkFlatListWithSeparatorsScreenIsDisplayed: () => Promise, - checkFlatListMultiColumnScreenIsDisplayed: () => Promise, - checkFlatListStickyHeadersScreenIsDisplayed: () => Promise, - checkFlatListNestedScreenIsDisplayed: () => Promise, - checkSearchBarIsDisplayed: () => Promise, - checkCollapseButtonIsDisplayed: () => Promise, - checkPizzaIsDisplayed: () => Promise, - checkIceCreamIsDisplayed: () => Promise, - checkContentInsetMenuIsDisplayed: () => Promise, - checkInvertedToggleFalseButtonIsDisplayed: () => Promise, - checkSeparatorIsDisplayed: () => Promise, - checkListHeaderIsDisplayed: () => Promise, - checkStickyPizzaIsDisplayed: () => Promise, - checkNestedHeaderIsDisplayed: () => Promise, - scrollUntilOnViewableItemsChangedIsDisplayed: () => Promise, - scrollUntilNestedIsDisplayed: () => Promise, - clickFlatListBasicButton: () => Promise, - clickFlatListOnStartButton: () => Promise, - clickFlatListOnStartTestButton: () => Promise, - clickFlatListOnEndButton: () => Promise, - clickFlatListContentInsetButton: () => Promise, - clickFlatListInvertedButton: () => Promise, - clickFlatListOnViewableItemsChangedButton: () => Promise, - clickFlatListWithSeparatorsButton: () => Promise, - clickFlatListMultiColumnButton: () => Promise, - clickFlatListStickyHeadersButton: () => Promise, - clickFlatListNestedButton: () => Promise, - clickToggleTrueButton: () => Promise, -}; -const flatListWithSeparatorsText = 'FlatList with Separators'; - -export const FlatListComponentScreen: FlatListComponentScreenType = { - // reference in the Components list - flatListScreenElement: Utils.platformSelect({ - ios: iOSName('FlatList'), - android: androidWidget('TextView', 'text', 'FlatList'), - }), - // References to elements within the FlatList Component screen - basicScreenElement: Utils.platformSelect({ - ios: iOSName('Basic'), - android: androidWidget('TextView', 'text', 'Basic'), - }), - onStartReachedScreenElement: Utils.platformSelect({ - ios: iOSName('onStartReached'), - android: androidWidget('TextView', 'text', 'onStartReached'), - }), - onEndReachedScreenElement: Utils.platformSelect({ - ios: iOSName('onEndReached'), - android: androidWidget('TextView', 'text', 'onEndReached'), - }), - contentInsetScreenElement: Utils.platformSelect({ - ios: iOSName('Content Inset'), - android: androidWidget('TextView', 'text', 'Content Inset'), - }), - invertedScreenElement: Utils.platformSelect({ - ios: iOSName('Inverted'), - android: androidWidget('TextView', 'text', 'Inverted'), - }), - onViewableItemsChangedScreenElement: Utils.platformSelect({ - ios: iOSName('onViewableItemsChanged'), - android: androidWidget('TextView', 'text', 'onViewableItemsChanged'), - }), - flatListWithSeparatorsScreenElement: Utils.platformSelect({ - ios: iOSName(flatListWithSeparatorsText), - android: androidWidget('TextView', 'text', flatListWithSeparatorsText), - }), - multiColumnScreenElement: Utils.platformSelect({ - ios: iOSName('MultiColumn'), - android: androidWidget('TextView', 'text', 'MultiColumn'), - }), - stickyHeadersScreenElement: Utils.platformSelect({ - ios: iOSName('Sticky Headers'), - android: androidWidget('TextView', 'text', 'Sticky Headers'), - }), - nestedScreenElement: Utils.platformSelect({ - ios: iOSName('Nested'), - android: androidWidget('TextView', 'text', 'Nested'), - }), - btnCollapseElement: Utils.platformSelect({ - ios: iOSLabel('Collapse'), - android: androidWidget('Button', 'content-desc', 'COLLAPSE'), - }), - btnToggleTrueElement: Utils.platformSelect({ - ios: iOSLabel('Toggle true'), - android: androidWidget('Button', 'content-desc', 'TOGGLE TRUE'), - }), - btnToggleFalseElement: Utils.platformSelect({ - ios: iOSLabel('Toggle false'), - android: androidWidget('Button', 'content-desc', 'TOGGLE FALSE'), - }), - basicSearchBarScreenElement: Utils.platformSelect({ - ios: iOSName('search_bar_flat_list'), - android: androidWidget('EditText', 'resource-id', 'search_bar_flat_list'), - }), - onStartBtnTestElement: Utils.platformSelect({ - ios: iOSName('start_test'), - android: androidWidget('Button', 'resource-id', 'start_test'), - }), - pizzaElement: Utils.platformSelect({ - ios: iOSLabel('Pizza'), - android: androidWidget('TextView', 'text', 'Pizza'), - }), - iceCreamElement: Utils.platformSelect({ - ios: iOSLabel('Ice Cream'), - android: androidWidget('TextView', 'text', 'Ice Cream'), - }), - contentInsetMenuElement: Utils.platformSelect({ - ios: iOSLabel('Menu'), - android: androidWidget('TextView', 'text', 'Menu'), - }), - separatorElement: Utils.platformSelect({ - ios: iOSName('flat_list_separator'), - android: androidWidget('TextView', 'resource-id', 'flat_list_separator'), - }), - listHeaderTextElement: Utils.platformSelect({ - ios: iOSName('LIST HEADER'), - android: androidWidget('TextView', 'text', 'LIST HEADER'), - }), - stickyPizzaElement: Utils.platformSelect({ - ios: iOSName('Sticky Pizza'), - android: androidWidget('TextView', 'text', 'Sticky Pizza'), - }), - nestedHeaderTextElement: Utils.platformSelect({ - ios: iOSName('Header'), - android: androidWidget('TextView', 'text', 'Header'), - }), - // Methods to interact with the FlatList elements - checkSearchBarIsDisplayed: async function ( - this: FlatListComponentScreenType, - ): Promise { - return await Utils.checkElementExistence(this.basicSearchBarScreenElement); - }, - checkCollapseButtonIsDisplayed: async function ( - this: FlatListComponentScreenType, - ): Promise { - return await Utils.checkElementExistence(this.btnCollapseElement); - }, - checkFlatListBasicScreenIsDisplayed: async function ( - this: FlatListComponentScreenType, - ): Promise { - return await Utils.checkElementExistence(this.basicScreenElement); - }, - checkFlatListOnStartReachedScreenIsDisplayed: async function ( - this: FlatListComponentScreenType, - ): Promise { - return await Utils.checkElementExistence(this.onStartReachedScreenElement); - }, - checkFlatListOnEndReachedScreenIsDisplayed: async function ( - this: FlatListComponentScreenType, - ): Promise { - return await Utils.checkElementExistence(this.onEndReachedScreenElement); - }, - checkPizzaIsDisplayed: async function ( - this: FlatListComponentScreenType, - ): Promise { - return await Utils.checkElementExistence(this.pizzaElement); - }, - checkIceCreamIsDisplayed: async function ( - this: FlatListComponentScreenType, - ): Promise { - return await Utils.checkElementExistence(this.iceCreamElement); - }, - checkFlatListContentInsetScreenIsDisplayed: async function ( - this: FlatListComponentScreenType, - ): Promise { - return await Utils.checkElementExistence(this.contentInsetScreenElement); - }, - checkFlatListInvertedScreenIsDisplayed: async function ( - this: FlatListComponentScreenType, - ): Promise { - return await Utils.checkElementExistence(this.invertedScreenElement); - }, - checkFlatListOnViewableItemsChangedScreenIsDisplayed: async function ( - this: FlatListComponentScreenType, - ): Promise { - return await Utils.checkElementExistence( - this.onViewableItemsChangedScreenElement, - ); - }, - checkFlatListWithSeparatorsScreenIsDisplayed: async function ( - this: FlatListComponentScreenType, - ): Promise { - return await Utils.checkElementExistence( - this.flatListWithSeparatorsScreenElement, - ); - }, - checkFlatListMultiColumnScreenIsDisplayed: async function ( - this: FlatListComponentScreenType, - ): Promise { - return await Utils.checkElementExistence(this.multiColumnScreenElement); - }, - checkFlatListStickyHeadersScreenIsDisplayed: async function ( - this: FlatListComponentScreenType, - ): Promise { - return await Utils.checkElementExistence(this.stickyHeadersScreenElement); - }, - checkFlatListNestedScreenIsDisplayed: async function ( - this: FlatListComponentScreenType, - ): Promise { - return await Utils.checkElementExistence(this.nestedScreenElement); - }, - checkListHeaderIsDisplayed: async function ( - this: FlatListComponentScreenType, - ): Promise { - return await Utils.checkElementExistence(this.listHeaderTextElement); - }, - checkContentInsetMenuIsDisplayed: async function ( - this: FlatListComponentScreenType, - ): Promise { - return await Utils.checkElementExistence(this.contentInsetMenuElement); - }, - checkInvertedToggleFalseButtonIsDisplayed: async function ( - this: FlatListComponentScreenType, - ): Promise { - return await Utils.checkElementExistence(this.btnToggleFalseElement); - }, - checkSeparatorIsDisplayed: async function ( - this: FlatListComponentScreenType, - ): Promise { - return await Utils.checkElementExistence(this.separatorElement); - }, - checkStickyPizzaIsDisplayed: async function ( - this: FlatListComponentScreenType, - ): Promise { - return await Utils.checkElementExistence(this.stickyPizzaElement); - }, - checkNestedHeaderIsDisplayed: async function ( - this: FlatListComponentScreenType, - ): Promise { - return await Utils.checkElementExistence(this.nestedHeaderTextElement); - }, - scrollUntilOnViewableItemsChangedIsDisplayed: async function ( - this: FlatListComponentScreenType, - ): Promise { - return await Utils.scrollToElement( - this.onViewableItemsChangedScreenElement, - ); - }, - scrollUntilNestedIsDisplayed: async function ( - this: FlatListComponentScreenType, - ): Promise { - return await Utils.scrollToElement(this.nestedScreenElement); - }, - clickFlatListBasicButton: async function ( - this: FlatListComponentScreenType, - ): Promise { - await Utils.clickElement(this.basicScreenElement); - }, - clickFlatListOnStartButton: async function ( - this: FlatListComponentScreenType, - ): Promise { - await Utils.clickElement(this.onStartReachedScreenElement); - }, - clickFlatListOnStartTestButton: async function ( - this: FlatListComponentScreenType, - ): Promise { - await Utils.clickElement(this.onStartBtnTestElement); - }, - clickFlatListOnEndButton: async function ( - this: FlatListComponentScreenType, - ): Promise { - await Utils.clickElement(this.onEndReachedScreenElement); - }, - clickFlatListContentInsetButton: async function ( - this: FlatListComponentScreenType, - ): Promise { - await Utils.clickElement(this.contentInsetScreenElement); - }, - clickFlatListInvertedButton: async function ( - this: FlatListComponentScreenType, - ): Promise { - await Utils.clickElement(this.invertedScreenElement); - }, - clickFlatListOnViewableItemsChangedButton: async function ( - this: FlatListComponentScreenType, - ): Promise { - await Utils.clickElement(this.onViewableItemsChangedScreenElement); - }, - clickFlatListWithSeparatorsButton: async function ( - this: FlatListComponentScreenType, - ): Promise { - await Utils.clickElement(this.flatListWithSeparatorsScreenElement); - }, - clickFlatListMultiColumnButton: async function ( - this: FlatListComponentScreenType, - ): Promise { - await Utils.clickElement(this.multiColumnScreenElement); - }, - clickFlatListStickyHeadersButton: async function ( - this: FlatListComponentScreenType, - ): Promise { - await Utils.clickElement(this.stickyHeadersScreenElement); - }, - clickFlatListNestedButton: async function ( - this: FlatListComponentScreenType, - ): Promise { - await Utils.clickElement(this.nestedScreenElement); - }, - clickToggleTrueButton: async function ( - this: FlatListComponentScreenType, - ): Promise { - await Utils.clickElement(this.btnToggleTrueElement); - }, -}; diff --git a/packages/rn-tester-e2e/tests/screens/components/jsResponderHandlerComponent.screen.js b/packages/rn-tester-e2e/tests/screens/components/jsResponderHandlerComponent.screen.js deleted file mode 100644 index c711313deb7..00000000000 --- a/packages/rn-tester-e2e/tests/screens/components/jsResponderHandlerComponent.screen.js +++ /dev/null @@ -1,57 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow strict-local - * @format - */ - -import { - UtilsSingleton as Utils, - androidWidget, - iOSName, -} from '../../helpers/utils'; - -type JSResponderHandlerComponentScreenType = { - jsResponderHandlerScreenElement: string, - rowZeroScreenElement: string, - scrollUntilJSResponderHandlerComponentIsDisplayed: () => Promise, - checkRowZeroLabelIsDisplayed: () => Promise, - getRowZeroText: () => Promise, -}; - -export const JSResponderHandlerComponentScreen: JSResponderHandlerComponentScreenType = - { - // reference in the Components list - jsResponderHandlerScreenElement: Utils.platformSelect({ - ios: iOSName('JSResponderHandler'), - android: androidWidget('TextView', 'text', 'JSResponderHandler'), - }), - // References to elements within the js responder handler Component screen - rowZeroScreenElement: Utils.platformSelect({ - ios: iOSName('row_js_responder_handler'), - android: androidWidget( - 'TextView', - 'resource-id', - 'row_js_responder_handler', - ), - }), - // Methods to interact with the elements - scrollUntilJSResponderHandlerComponentIsDisplayed: async function ( - this: JSResponderHandlerComponentScreenType, - ): Promise { - return await Utils.scrollToElement(this.jsResponderHandlerScreenElement); - }, - checkRowZeroLabelIsDisplayed: async function ( - this: JSResponderHandlerComponentScreenType, - ): Promise { - return await Utils.checkElementExistence(this.rowZeroScreenElement); - }, - getRowZeroText: async function ( - this: JSResponderHandlerComponentScreenType, - ): Promise { - return await Utils.getElementText(this.rowZeroScreenElement); - }, - }; diff --git a/packages/rn-tester-e2e/tests/screens/components/keyboardAvoidingViewComponent.screen.js b/packages/rn-tester-e2e/tests/screens/components/keyboardAvoidingViewComponent.screen.js deleted file mode 100644 index 098611db51e..00000000000 --- a/packages/rn-tester-e2e/tests/screens/components/keyboardAvoidingViewComponent.screen.js +++ /dev/null @@ -1,105 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow strict-local - * @format - */ - -import { - UtilsSingleton as Utils, - androidWidget, - iOSLabel, - iOSName, -} from '../../helpers/utils'; - -type KeyboardAvoidingViewComponentScreenType = { - keyboardAvoidingViewScreenElement: string, - btnDifferentBehaviorsOpenExampleElement: string, - btnRegisterElement: string, - registerAlertBoxElement: string, - btnOKElement: string, - scrollUntilKeyboardAvoidingViewComponentIsDisplayed: () => Promise, - checkBtnDifferentBehaviorsOpenExampleIsDisplayed: () => Promise, - checkBtnRegisterIsDisplayed: () => Promise, - clickDifferentBehaviorsOpenExampleButton: () => Promise, - clickRegisterButton: () => Promise, - clickOkButton: () => Promise, - getRegisterAlertText: () => Promise, -}; - -export const KeyboardAvoidingViewComponentScreen: KeyboardAvoidingViewComponentScreenType = - { - // reference in the Components list - keyboardAvoidingViewScreenElement: Utils.platformSelect({ - ios: iOSName('KeyboardAvoidingView'), - android: androidWidget('TextView', 'text', 'KeyboardAvoidingView'), - }), - // References to elements within the KeyboardAvoidingVIew Component screen - btnDifferentBehaviorsOpenExampleElement: Utils.platformSelect({ - ios: iOSName('keyboard_avoiding_view_behaviors_open'), - android: androidWidget( - 'TextView', - 'resource-id', - 'keyboard_avoiding_view_behaviors_open', - ), - }), - btnRegisterElement: Utils.platformSelect({ - ios: iOSName('register_button'), - android: androidWidget('Button', 'resource-id', 'register_button'), - }), - registerAlertBoxElement: Utils.platformSelect({ - ios: iOSLabel('Successfully Registered!'), - android: androidWidget( - 'TextView', - 'resource-id', - 'android:id/alertTitle', - ), - }), - btnOKElement: Utils.platformSelect({ - ios: iOSLabel('OK'), - android: androidWidget('Button', 'text', 'OK'), - }), - // Methods to interact with the elements - scrollUntilKeyboardAvoidingViewComponentIsDisplayed: async function ( - this: KeyboardAvoidingViewComponentScreenType, - ): Promise { - return await Utils.scrollToElement( - this.keyboardAvoidingViewScreenElement, - ); - }, - checkBtnDifferentBehaviorsOpenExampleIsDisplayed: async function ( - this: KeyboardAvoidingViewComponentScreenType, - ): Promise { - return await Utils.checkElementExistence( - this.btnDifferentBehaviorsOpenExampleElement, - ); - }, - checkBtnRegisterIsDisplayed: async function ( - this: KeyboardAvoidingViewComponentScreenType, - ): Promise { - return await Utils.checkElementExistence(this.btnRegisterElement); - }, - clickDifferentBehaviorsOpenExampleButton: async function ( - this: KeyboardAvoidingViewComponentScreenType, - ): Promise { - await Utils.clickElement(this.btnDifferentBehaviorsOpenExampleElement); - }, - clickRegisterButton: async function ( - this: KeyboardAvoidingViewComponentScreenType, - ): Promise { - await Utils.clickElement(this.btnRegisterElement); - }, - clickOkButton: async function ( - this: KeyboardAvoidingViewComponentScreenType, - ): Promise { - await Utils.clickElement(this.btnOKElement); - }, - getRegisterAlertText: async function ( - this: KeyboardAvoidingViewComponentScreenType, - ): Promise { - return await Utils.getElementText(this.registerAlertBoxElement); - }, - }; diff --git a/packages/rn-tester-e2e/tests/screens/components/modalComponent.screen.js b/packages/rn-tester-e2e/tests/screens/components/modalComponent.screen.js deleted file mode 100644 index 88e58361b35..00000000000 --- a/packages/rn-tester-e2e/tests/screens/components/modalComponent.screen.js +++ /dev/null @@ -1,91 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow strict-local - * @format - */ - -import { - UtilsSingleton as Utils, - androidWidget, - iOSName, -} from '../../helpers/utils'; - -type ModalComponentScreenType = { - modalScreenElement: string, - btnShowModalElement: string, - modalAnimationTypeTextElement: string, - modalModeTextElement: string, - btnCloseElement: string, - checkShowModalIsDisplayed: () => Promise, - checkModalAnimationTypeIsDisplayed: () => Promise, - scrollUntilModalComponentIsDisplayed: () => Promise, - clickShowModalButton: () => Promise, - clickCloseButton: () => Promise, -}; - -const showModalBtnText = 'Show Modal'; - -export const ModalComponentScreen: ModalComponentScreenType = { - // reference in the Components list - modalScreenElement: Utils.platformSelect({ - ios: iOSName('Modal'), - android: androidWidget('TextView', 'text', 'Modal'), - }), - // References to elements within the Modal Component screen - btnShowModalElement: Utils.platformSelect({ - ios: iOSName(showModalBtnText), - android: androidWidget('TextView', 'text', showModalBtnText), - }), - modalAnimationTypeTextElement: Utils.platformSelect({ - ios: iOSName('modal_animationType_text'), - android: androidWidget( - 'TextView', - 'resource-id', - 'modal_animationType_text', - ), - }), - modalModeTextElement: Utils.platformSelect({ - ios: iOSName('modal_animationType_text'), - android: androidWidget( - 'TextView', - 'resource-id', - 'row_js_responder_handler', - ), - }), - btnCloseElement: Utils.platformSelect({ - ios: iOSName('Close'), - android: androidWidget('TextView', 'text', 'Close'), - }), - // Methods to interact with the elements - checkShowModalIsDisplayed: async function ( - this: ModalComponentScreenType, - ): Promise { - return await Utils.checkElementExistence(this.btnShowModalElement); - }, - checkModalAnimationTypeIsDisplayed: async function ( - this: ModalComponentScreenType, - ): Promise { - return await Utils.checkElementExistence( - this.modalAnimationTypeTextElement, - ); - }, - scrollUntilModalComponentIsDisplayed: async function ( - this: ModalComponentScreenType, - ): Promise { - return await Utils.scrollToElement(this.modalScreenElement); - }, - clickShowModalButton: async function ( - this: ModalComponentScreenType, - ): Promise { - await Utils.clickElement(this.btnShowModalElement); - }, - clickCloseButton: async function ( - this: ModalComponentScreenType, - ): Promise { - await Utils.clickElement(this.btnCloseElement); - }, -}; diff --git a/packages/rn-tester-e2e/tests/screens/components/newAppComponent.screen.js b/packages/rn-tester-e2e/tests/screens/components/newAppComponent.screen.js deleted file mode 100644 index 705544b9704..00000000000 --- a/packages/rn-tester-e2e/tests/screens/components/newAppComponent.screen.js +++ /dev/null @@ -1,49 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow strict-local - * @format - */ - -import { - UtilsSingleton as Utils, - androidWidget, - iOSName, -} from '../../helpers/utils'; - -type NewAppComponentScreenType = { - newAppScreenElement: string, - newAppHeaderScreenElement: string, - scrollUntilNewAppHeaderComponentIsDisplayed: () => Promise, - checkNewAppHeaderIsDisplayed: () => Promise, -}; - -const newAppScreenText = 'New App Screen'; -const newAppScreenHeaderText = 'New App Screen Header'; - -export const NewAppComponentScreen: NewAppComponentScreenType = { - // reference in the Components list - newAppScreenElement: Utils.platformSelect({ - ios: iOSName(newAppScreenText), - android: androidWidget('TextView', 'text', newAppScreenText), - }), - // References to elements within the New App Component screenS - newAppHeaderScreenElement: Utils.platformSelect({ - ios: iOSName(newAppScreenHeaderText), - android: androidWidget('TextView', 'text', newAppScreenHeaderText), - }), - // Methods to interact with the elements - scrollUntilNewAppHeaderComponentIsDisplayed: async function ( - this: NewAppComponentScreenType, - ): Promise { - return await Utils.scrollToElement(this.newAppScreenElement); - }, - checkNewAppHeaderIsDisplayed: async function ( - this: NewAppComponentScreenType, - ): Promise { - return await Utils.checkElementExistence(this.newAppHeaderScreenElement); - }, -}; diff --git a/packages/rn-tester-e2e/tests/screens/components/pressableComponent.screen.js b/packages/rn-tester-e2e/tests/screens/components/pressableComponent.screen.js deleted file mode 100644 index b79b899750e..00000000000 --- a/packages/rn-tester-e2e/tests/screens/components/pressableComponent.screen.js +++ /dev/null @@ -1,80 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow strict-local - * @format - */ - -import { - UtilsSingleton as Utils, - androidWidget, - iOSName, -} from '../../helpers/utils'; - -type PressableComponentScreenType = { - pressableScreenElement: string, - pressMeHeaderElement: string, - btnPressMeElement: string, - onPressText: string, - checkPressMeHeaderIsDisplayed: () => Promise, - checkOnPressIsDisplayed: () => Promise, - scrollUntilPressableComponentIsDisplayed: () => Promise, - clickPressMeButton: () => Promise, - getOnPressText: () => Promise, -}; - -const pressMeHeaderText = 'Change content based on Press'; - -export const PressableComponentScreen: PressableComponentScreenType = { - // reference in the Components list - pressableScreenElement: Utils.platformSelect({ - ios: iOSName('Pressable'), - android: androidWidget('TextView', 'text', 'Pressable'), - }), - // References to elements within the Pressable Component screen - pressMeHeaderElement: Utils.platformSelect({ - ios: iOSName(pressMeHeaderText), - android: androidWidget('TextView', 'text', pressMeHeaderText), - }), - btnPressMeElement: Utils.platformSelect({ - ios: iOSName('one_press_me_button'), - android: androidWidget('TextView', 'resource-id', 'one_press_me_button'), - }), - onPressText: Utils.platformSelect({ - ios: iOSName('pressable_press_console'), - android: androidWidget( - 'TextView', - 'resource-id', - 'pressable_press_console', - ), - }), - // Methods to interact with the elements - checkPressMeHeaderIsDisplayed: async function ( - this: PressableComponentScreenType, - ): Promise { - return await Utils.checkElementExistence(this.pressMeHeaderElement); - }, - checkOnPressIsDisplayed: async function ( - this: PressableComponentScreenType, - ): Promise { - return await Utils.checkElementExistence(this.onPressText); - }, - scrollUntilPressableComponentIsDisplayed: async function ( - this: PressableComponentScreenType, - ): Promise { - return await Utils.scrollToElement(this.pressableScreenElement); - }, - clickPressMeButton: async function ( - this: PressableComponentScreenType, - ): Promise { - await Utils.clickElement(this.btnPressMeElement); - }, - getOnPressText: async function ( - this: PressableComponentScreenType, - ): Promise { - return await Utils.getElementText(this.onPressText); - }, -}; diff --git a/packages/rn-tester-e2e/tests/screens/components/refreshControlComponent.screen.js b/packages/rn-tester-e2e/tests/screens/components/refreshControlComponent.screen.js deleted file mode 100644 index c9966f318d3..00000000000 --- a/packages/rn-tester-e2e/tests/screens/components/refreshControlComponent.screen.js +++ /dev/null @@ -1,47 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow strict-local - * @format - */ - -import { - UtilsSingleton as Utils, - androidWidget, - iOSName, -} from '../../helpers/utils'; - -type RefreshControlComponentScreenType = { - refreshControlScreenElement: string, - initialRowScreenElement: string, - checkInitialRowIsDisplayed: () => Promise, - scrollUntilRefreshControlComponentIsDisplayed: () => Promise, -}; - -export const RefreshControlComponentScreen: RefreshControlComponentScreenType = - { - // reference in the Components list - refreshControlScreenElement: Utils.platformSelect({ - ios: iOSName('RefreshControl'), - android: androidWidget('TextView', 'text', 'RefreshControl'), - }), - // References to elements within the RefreshControl Component screen - initialRowScreenElement: Utils.platformSelect({ - ios: iOSName('refresh_control_row'), - android: androidWidget('TextView', 'resource-id', 'refresh_control_row'), - }), - // Methods to interact with the elements - checkInitialRowIsDisplayed: async function ( - this: RefreshControlComponentScreenType, - ): Promise { - return await Utils.checkElementExistence(this.initialRowScreenElement); - }, - scrollUntilRefreshControlComponentIsDisplayed: async function ( - this: RefreshControlComponentScreenType, - ): Promise { - return await Utils.scrollToElement(this.refreshControlScreenElement); - }, - }; diff --git a/packages/rn-tester-e2e/tests/screens/components/scrollViewSimpleExampleComponent.screen.js b/packages/rn-tester-e2e/tests/screens/components/scrollViewSimpleExampleComponent.screen.js deleted file mode 100644 index 6a3d53c694f..00000000000 --- a/packages/rn-tester-e2e/tests/screens/components/scrollViewSimpleExampleComponent.screen.js +++ /dev/null @@ -1,51 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow strict-local - * @format - */ - -import { - UtilsSingleton as Utils, - androidWidget, - iOSName, -} from '../../helpers/utils'; - -type ScrollViewSimpleExampleComponentScreenType = { - scrollViewSimpleExampleScreenElement: string, - scrollViewItemScreenElement: string, - checkScrollViewItemsDisplayed: () => Promise, - scrollUntilScrollViewSimpleExampleComponentIsDisplayed: () => Promise, -}; - -export const ScrollViewSimpleExampleComponentScreen: ScrollViewSimpleExampleComponentScreenType = - { - // reference in the Components list - scrollViewSimpleExampleScreenElement: Utils.platformSelect({ - ios: iOSName('ScrollViewSimpleExample'), - android: androidWidget('TextView', 'text', 'ScrollViewSimpleExample'), - }), - // References to elements within the ScrollViewSimpleExample Component screen - scrollViewItemScreenElement: Utils.platformSelect({ - ios: iOSName('scroll_view_item'), - android: androidWidget('TextView', 'resource-id', 'scroll_view_item'), - }), - // Methods to interact with the elements - checkScrollViewItemsDisplayed: async function ( - this: ScrollViewSimpleExampleComponentScreenType, - ): Promise { - return await Utils.checkElementExistence( - this.scrollViewItemScreenElement, - ); - }, - scrollUntilScrollViewSimpleExampleComponentIsDisplayed: async function ( - this: ScrollViewSimpleExampleComponentScreenType, - ): Promise { - return await Utils.scrollToElement( - this.scrollViewSimpleExampleScreenElement, - ); - }, - }; diff --git a/packages/rn-tester-e2e/tests/specs/components/activityIndicatorComponentScreen.test.js b/packages/rn-tester-e2e/tests/specs/components/activityIndicatorComponentScreen.test.js deleted file mode 100644 index de72af96c86..00000000000 --- a/packages/rn-tester-e2e/tests/specs/components/activityIndicatorComponentScreen.test.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow strict-local - * @format - */ - -const {ComponentsScreen} = require('../../screens/components.screen.js'); -const { - ActivityIndicatorComponentScreen, -} = require('../../screens/components/activityIndicatorComponent.screen.js'); - -describe('Test is checking default activity indicator component', () => { - test('Should view properly default progress bar', async () => { - expect( - await ComponentsScreen.checkActivityIndicatorComponentIsDisplayed(), - ).toBeTruthy(); - await ComponentsScreen.clickActivityIndicatorComponent(); - expect( - await ActivityIndicatorComponentScreen.checkDefaultActivityIndicatorIsDisplayed(), - ).toBeTruthy(); - }); -}); diff --git a/packages/rn-tester-e2e/tests/specs/components/buttonComponentScreen.test.js b/packages/rn-tester-e2e/tests/specs/components/buttonComponentScreen.test.js deleted file mode 100644 index f75364d06f8..00000000000 --- a/packages/rn-tester-e2e/tests/specs/components/buttonComponentScreen.test.js +++ /dev/null @@ -1,46 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow strict-local - * @format - */ - -const {ComponentsScreen} = require('../../screens/components.screen.js'); -const { - ButtonComponentScreen, -} = require('../../screens/components/buttonComponent.screen.js'); - -// fixed variables -const submitText = 'Your application has been submitted!'; -const cancelText = 'Your application has been cancelled!'; - -describe('Test is checking submit button', () => { - test('Should view properly submit alert text', async () => { - expect( - await ComponentsScreen.checkButtonComponentIsDisplayed(), - ).toBeTruthy(); - await ComponentsScreen.clickButtonComponent(); - await ButtonComponentScreen.clickSubmitApplication(); - expect(await ButtonComponentScreen.getSubmitAlertText()).toContain( - submitText, - ); - await ButtonComponentScreen.clickOkButton(); - }); -}); - -describe('Test is checking cancel button', () => { - test('Should view properly submit cancel text', async () => { - expect( - await ComponentsScreen.checkButtonComponentIsDisplayed(), - ).toBeTruthy(); - await ComponentsScreen.clickButtonComponent(); - await ButtonComponentScreen.clickCancelApplication(); - expect(await ButtonComponentScreen.getCancelAlertText()).toContain( - cancelText, - ); - await ButtonComponentScreen.clickOkButton(); - }); -}); diff --git a/packages/rn-tester-e2e/tests/specs/components/flatListComponentScreen.test.js b/packages/rn-tester-e2e/tests/specs/components/flatListComponentScreen.test.js deleted file mode 100644 index 3c7eb202b1e..00000000000 --- a/packages/rn-tester-e2e/tests/specs/components/flatListComponentScreen.test.js +++ /dev/null @@ -1,187 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow strict-local - * @format - */ - -const {ComponentsScreen} = require('../../screens/components.screen.js'); -const { - FlatListComponentScreen, -} = require('../../screens/components/flatListComponent.screen.js'); - -describe('Test is checking basic flat list', () => { - test('Should view properly search bar of basic flat list', async () => { - expect( - await ComponentsScreen.checkFlatListComponentIsDisplayed(), - ).toBeTruthy(); - await ComponentsScreen.clickFlatListComponent(); - expect( - await FlatListComponentScreen.checkFlatListBasicScreenIsDisplayed(), - ).toBeTruthy(); - await FlatListComponentScreen.clickFlatListBasicButton(); - expect( - await FlatListComponentScreen.checkSearchBarIsDisplayed(), - ).toBeTruthy(); - }); -}); - -describe('Test is checking onStartReached flat list', () => { - test('Should view properly first element', async () => { - expect( - await ComponentsScreen.checkFlatListComponentIsDisplayed(), - ).toBeTruthy(); - await ComponentsScreen.clickFlatListComponent(); - expect( - await FlatListComponentScreen.checkFlatListOnStartReachedScreenIsDisplayed(), - ).toBeTruthy(); - await FlatListComponentScreen.clickFlatListOnStartButton(); - expect( - await FlatListComponentScreen.checkCollapseButtonIsDisplayed(), - ).toBeTruthy(); - await FlatListComponentScreen.clickFlatListOnStartTestButton(); - expect(await FlatListComponentScreen.checkPizzaIsDisplayed()).toBeTruthy(); - }); -}); - -describe('Test is checking onEndReached flat list', () => { - test('Should view properly the last element', async () => { - expect( - await ComponentsScreen.checkFlatListComponentIsDisplayed(), - ).toBeTruthy(); - await ComponentsScreen.clickFlatListComponent(); - expect( - await FlatListComponentScreen.checkFlatListOnEndReachedScreenIsDisplayed(), - ).toBeTruthy(); - await FlatListComponentScreen.clickFlatListOnEndButton(); - expect( - await FlatListComponentScreen.checkCollapseButtonIsDisplayed(), - ).toBeTruthy(); - await FlatListComponentScreen.clickFlatListOnStartTestButton(); - expect( - await FlatListComponentScreen.checkIceCreamIsDisplayed(), - ).toBeTruthy(); - }); -}); - -describe('Test is checking content inset flat list', () => { - test('Should view properly the menu element', async () => { - expect( - await ComponentsScreen.checkFlatListComponentIsDisplayed(), - ).toBeTruthy(); - await ComponentsScreen.clickFlatListComponent(); - expect( - await FlatListComponentScreen.checkFlatListContentInsetScreenIsDisplayed(), - ).toBeTruthy(); - await FlatListComponentScreen.clickFlatListContentInsetButton(); - expect( - await FlatListComponentScreen.checkCollapseButtonIsDisplayed(), - ).toBeTruthy(); - expect( - await FlatListComponentScreen.checkContentInsetMenuIsDisplayed(), - ).toBeTruthy(); - }); -}); - -describe('Test is checking inverted flat list', () => { - test('Should view properly the menu element', async () => { - expect( - await ComponentsScreen.checkFlatListComponentIsDisplayed(), - ).toBeTruthy(); - await ComponentsScreen.clickFlatListComponent(); - await FlatListComponentScreen.scrollUntilOnViewableItemsChangedIsDisplayed(); - expect( - await FlatListComponentScreen.checkFlatListInvertedScreenIsDisplayed(), - ).toBeTruthy(); - await FlatListComponentScreen.clickFlatListInvertedButton(); - expect(await FlatListComponentScreen.checkPizzaIsDisplayed()).toBeTruthy(); - await FlatListComponentScreen.clickToggleTrueButton(); - expect(await FlatListComponentScreen.checkPizzaIsDisplayed()).toBeTruthy(); - }); -}); - -describe('Test is checking onViewableItemsChanges component', () => { - test('Should view properly the pizza element', async () => { - expect( - await ComponentsScreen.checkFlatListComponentIsDisplayed(), - ).toBeTruthy(); - await ComponentsScreen.clickFlatListComponent(); - await FlatListComponentScreen.scrollUntilOnViewableItemsChangedIsDisplayed(); - expect( - await FlatListComponentScreen.checkFlatListOnViewableItemsChangedScreenIsDisplayed(), - ).toBeTruthy(); - await FlatListComponentScreen.clickFlatListOnViewableItemsChangedButton(); - expect(await FlatListComponentScreen.checkPizzaIsDisplayed()).toBeTruthy(); - }); -}); - -describe('Test is checking FlatList with Separators component', () => { - test('Should view properly the separator element', async () => { - expect( - await ComponentsScreen.checkFlatListComponentIsDisplayed(), - ).toBeTruthy(); - await ComponentsScreen.clickFlatListComponent(); - await FlatListComponentScreen.scrollUntilNestedIsDisplayed(); - expect( - await FlatListComponentScreen.checkFlatListWithSeparatorsScreenIsDisplayed(), - ).toBeTruthy(); - await FlatListComponentScreen.clickFlatListWithSeparatorsButton(); - expect( - await FlatListComponentScreen.checkSeparatorIsDisplayed(), - ).toBeTruthy(); - }); -}); - -describe('Test is checking multicolumn component', () => { - test('Should view properly the list header element', async () => { - expect( - await ComponentsScreen.checkFlatListComponentIsDisplayed(), - ).toBeTruthy(); - await ComponentsScreen.clickFlatListComponent(); - await FlatListComponentScreen.scrollUntilNestedIsDisplayed(); - expect( - await FlatListComponentScreen.checkFlatListMultiColumnScreenIsDisplayed(), - ).toBeTruthy(); - await FlatListComponentScreen.clickFlatListMultiColumnButton(); - expect( - await FlatListComponentScreen.checkListHeaderIsDisplayed(), - ).toBeTruthy(); - }); -}); - -describe('Test is checking sticky headers component', () => { - test('Should view properly the sticky pizza element', async () => { - expect( - await ComponentsScreen.checkFlatListComponentIsDisplayed(), - ).toBeTruthy(); - await ComponentsScreen.clickFlatListComponent(); - await FlatListComponentScreen.scrollUntilNestedIsDisplayed(); - expect( - await FlatListComponentScreen.checkFlatListStickyHeadersScreenIsDisplayed(), - ).toBeTruthy(); - await FlatListComponentScreen.clickFlatListStickyHeadersButton(); - expect( - await FlatListComponentScreen.checkStickyPizzaIsDisplayed(), - ).toBeTruthy(); - }); -}); - -describe('Test is checking nested component', () => { - test('Should view properly the nested header element', async () => { - expect( - await ComponentsScreen.checkFlatListComponentIsDisplayed(), - ).toBeTruthy(); - await ComponentsScreen.clickFlatListComponent(); - await FlatListComponentScreen.scrollUntilNestedIsDisplayed(); - expect( - await FlatListComponentScreen.checkFlatListNestedScreenIsDisplayed(), - ).toBeTruthy(); - await FlatListComponentScreen.clickFlatListNestedButton(); - expect( - await FlatListComponentScreen.checkNestedHeaderIsDisplayed(), - ).toBeTruthy(); - }); -}); diff --git a/packages/rn-tester-e2e/tests/specs/components/jsResponderHandlerComponentScreen.test.js b/packages/rn-tester-e2e/tests/specs/components/jsResponderHandlerComponentScreen.test.js deleted file mode 100644 index fc18395a8a1..00000000000 --- a/packages/rn-tester-e2e/tests/specs/components/jsResponderHandlerComponentScreen.test.js +++ /dev/null @@ -1,33 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow strict-local - * @format - */ - -const {ComponentsScreen} = require('../../screens/components.screen.js'); -const { - JSResponderHandlerComponentScreen, -} = require('../../screens/components/jsResponderHandlerComponent.screen.js'); - -// fixed variables -const roweZeroText = 'I am row 0'; - -describe('Test is checking row zero JSResponderHandler component', () => { - test('Should view properly row zero element', async () => { - await JSResponderHandlerComponentScreen.scrollUntilJSResponderHandlerComponentIsDisplayed(); - expect( - await ComponentsScreen.checkJSResponderHandlerComponentIsDisplayed(), - ).toBeTruthy(); - await ComponentsScreen.clickJSResponderHandlerComponent(); - expect( - await JSResponderHandlerComponentScreen.checkRowZeroLabelIsDisplayed(), - ).toBeTruthy(); - expect(await JSResponderHandlerComponentScreen.getRowZeroText()).toContain( - roweZeroText, - ); - }); -}); diff --git a/packages/rn-tester-e2e/tests/specs/components/keyboardAvoidingViewComponentScreen.test.js b/packages/rn-tester-e2e/tests/specs/components/keyboardAvoidingViewComponentScreen.test.js deleted file mode 100644 index 6e22586298d..00000000000 --- a/packages/rn-tester-e2e/tests/specs/components/keyboardAvoidingViewComponentScreen.test.js +++ /dev/null @@ -1,39 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow strict-local - * @format - */ - -const {ComponentsScreen} = require('../../screens/components.screen.js'); -const { - KeyboardAvoidingViewComponentScreen, -} = require('../../screens/components/keyboardAvoidingViewComponent.screen.js'); - -// fixed variables -const registerText = 'Successfully Registered!'; - -describe('Test is checking keyboardAvoidingView component', () => { - test('Should view properly successfully registered text', async () => { - await KeyboardAvoidingViewComponentScreen.scrollUntilKeyboardAvoidingViewComponentIsDisplayed(); - expect( - await ComponentsScreen.checkKeyboardAvoidingViewComponentIsDisplayed(), - ).toBeTruthy(); - await ComponentsScreen.clickKeyboardAvoidingViewComponent(); - expect( - await KeyboardAvoidingViewComponentScreen.checkBtnDifferentBehaviorsOpenExampleIsDisplayed(), - ).toBeTruthy(); - await KeyboardAvoidingViewComponentScreen.clickDifferentBehaviorsOpenExampleButton(); - expect( - await KeyboardAvoidingViewComponentScreen.checkBtnRegisterIsDisplayed(), - ).toBeTruthy(); - await KeyboardAvoidingViewComponentScreen.clickRegisterButton(); - expect( - await KeyboardAvoidingViewComponentScreen.getRegisterAlertText(), - ).toContain(registerText); - await KeyboardAvoidingViewComponentScreen.clickOkButton(); - }); -}); diff --git a/packages/rn-tester-e2e/tests/specs/components/modalComponentScreen.test.js b/packages/rn-tester-e2e/tests/specs/components/modalComponentScreen.test.js deleted file mode 100644 index 96d387b9a52..00000000000 --- a/packages/rn-tester-e2e/tests/specs/components/modalComponentScreen.test.js +++ /dev/null @@ -1,31 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow strict-local - * @format - */ - -const {ComponentsScreen} = require('../../screens/components.screen.js'); -const { - ModalComponentScreen, -} = require('../../screens/components/modalComponent.screen.js'); - -describe('Test is checking modal component', () => { - test('Should view show modal element', async () => { - await ModalComponentScreen.scrollUntilModalComponentIsDisplayed(); - expect( - await ComponentsScreen.checkModalComponentIsDisplayed(), - ).toBeTruthy(); - await ComponentsScreen.clickModalComponent(); - expect(await ModalComponentScreen.checkShowModalIsDisplayed()).toBeTruthy(); - await ModalComponentScreen.clickShowModalButton(); - expect( - await ModalComponentScreen.checkModalAnimationTypeIsDisplayed(), - ).toBeTruthy(); - await ModalComponentScreen.clickCloseButton(); - expect(await ModalComponentScreen.checkShowModalIsDisplayed()).toBeTruthy(); - }); -}); diff --git a/packages/rn-tester-e2e/tests/specs/components/newAppComponentScreen.test.js b/packages/rn-tester-e2e/tests/specs/components/newAppComponentScreen.test.js deleted file mode 100644 index 6eb6976e870..00000000000 --- a/packages/rn-tester-e2e/tests/specs/components/newAppComponentScreen.test.js +++ /dev/null @@ -1,27 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow strict-local - * @format - */ - -const {ComponentsScreen} = require('../../screens/components.screen.js'); -const { - NewAppComponentScreen, -} = require('../../screens/components/newAppComponent.screen.js'); - -describe('Test is checking new app screen component', () => { - test('Should view new app header element', async () => { - await NewAppComponentScreen.scrollUntilNewAppHeaderComponentIsDisplayed(); - expect( - await ComponentsScreen.checkNewAppScreenComponentIsDisplayed(), - ).toBeTruthy(); - await ComponentsScreen.clickNewAppScreenComponent(); - expect( - await NewAppComponentScreen.checkNewAppHeaderIsDisplayed(), - ).toBeTruthy(); - }); -}); diff --git a/packages/rn-tester-e2e/tests/specs/components/pressableComponentScreen.test.js b/packages/rn-tester-e2e/tests/specs/components/pressableComponentScreen.test.js deleted file mode 100644 index 5b5c930c6ac..00000000000 --- a/packages/rn-tester-e2e/tests/specs/components/pressableComponentScreen.test.js +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow strict-local - * @format - */ - -const {ComponentsScreen} = require('../../screens/components.screen.js'); -const { - PressableComponentScreen, -} = require('../../screens/components/pressableComponent.screen.js'); - -// fixed variables -const onPressText = 'onPress'; - -describe('Test is checking pressable component', () => { - test('Should view onPress text', async () => { - await PressableComponentScreen.scrollUntilPressableComponentIsDisplayed(); - expect( - await ComponentsScreen.checkPressableComponentIsDisplayed(), - ).toBeTruthy(); - await ComponentsScreen.clickPressableComponent(); - expect( - await PressableComponentScreen.checkPressMeHeaderIsDisplayed(), - ).toBeTruthy(); - await PressableComponentScreen.clickPressMeButton(); - expect( - await PressableComponentScreen.checkOnPressIsDisplayed(), - ).toBeTruthy(); - expect(await PressableComponentScreen.getOnPressText()).toContain( - onPressText, - ); - }); -}); diff --git a/packages/rn-tester-e2e/tests/specs/components/refreshControlComponentScreen.test.js b/packages/rn-tester-e2e/tests/specs/components/refreshControlComponentScreen.test.js deleted file mode 100644 index 61cd4c003f0..00000000000 --- a/packages/rn-tester-e2e/tests/specs/components/refreshControlComponentScreen.test.js +++ /dev/null @@ -1,27 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow strict-local - * @format - */ - -const {ComponentsScreen} = require('../../screens/components.screen.js'); -const { - RefreshControlComponentScreen, -} = require('../../screens/components/refreshControlComponent.screen.js'); - -describe('Test is checking RefreshControl component', () => { - test('Should view initial row element', async () => { - await RefreshControlComponentScreen.scrollUntilRefreshControlComponentIsDisplayed(); - expect( - await ComponentsScreen.checkRefreshControlComponentIsDisplayed(), - ).toBeTruthy(); - await ComponentsScreen.clickRefreshControlComponent(); - expect( - await RefreshControlComponentScreen.checkInitialRowIsDisplayed(), - ).toBeTruthy(); - }); -}); diff --git a/packages/rn-tester-e2e/tests/specs/components/scrollViewSimpleExampleComponentScreen.test.js b/packages/rn-tester-e2e/tests/specs/components/scrollViewSimpleExampleComponentScreen.test.js deleted file mode 100644 index 0a011480314..00000000000 --- a/packages/rn-tester-e2e/tests/specs/components/scrollViewSimpleExampleComponentScreen.test.js +++ /dev/null @@ -1,27 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow strict-local - * @format - */ - -const {ComponentsScreen} = require('../../screens/components.screen.js'); -const { - ScrollViewSimpleExampleComponentScreen, -} = require('../../screens/components/scrollViewSimpleExampleComponent.screen.js'); - -describe('Test is checking ScrollVIewSimpleExample component', () => { - test('Should view scroll view item element', async () => { - await ScrollViewSimpleExampleComponentScreen.scrollUntilScrollViewSimpleExampleComponentIsDisplayed(); - expect( - await ComponentsScreen.checkScrollViewSimpleExampleComponentIsDisplayed(), - ).toBeTruthy(); - await ComponentsScreen.clickScrollViewSimpleExampleComponent(); - expect( - await ScrollViewSimpleExampleComponentScreen.checkScrollViewItemsDisplayed(), - ).toBeTruthy(); - }); -}); diff --git a/scripts/android-e2e-test.js b/scripts/android-e2e-test.js deleted file mode 100644 index 6af641d56ce..00000000000 --- a/scripts/android-e2e-test.js +++ /dev/null @@ -1,155 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @format - */ - -// Used in run-ci-e2e-test.js and executed in Circle CI. -// -// E2e test that verifies that init app can be installed, compiled, started and -// Hot Module reloading and Chrome debugging work. -// -// For other examples of appium refer to: -// https://github.com/appium/sample-code/tree/master/sample-code/examples/node and -// https://www.npmjs.com/package/wd-android -// -// To set up: -// - npm install --save-dev appium@1.11.1 mocha@2.4.5 wd@1.11.1 colors@1.0.3 pretty-data2@0.40.1 -// - cp -// - keytool -genkey -v -keystore android/app/debug.keystore -storepass android -alias androiddebugkey -keypass android -keyalg RSA -keysize 2048 -validity 10000 -dname "CN=Android Debug,O=Android,C=US" -// -// To run this test: -// - npm start -// - node node_modules/.bin/appium -// - (cd android && ./gradlew :app:copyDownloadableDepsToLibs) -// - react-native run-android -// - node ../node_modules/.bin/_mocha ../android-e2e-test.js - -/* eslint-env mocha */ - -'use strict'; - -const fs = require('fs'); -const path = require('path'); -const pd = require('pretty-data2').pd; -const wd = require('wd'); - -// value in ms to print out screen contents, set this value in CI to debug if tests are failing -const appiumDebugInterval = process.env.APPIUM_DEBUG_INTERVAL; - -describe('Android Test App', function () { - this.timeout(600000); - let driver; - let debugIntervalId; - - before(function () { - driver = wd.promiseChainRemote({ - host: 'localhost', - port: 4723, - }); - driver.on('status', function (info) { - console.log(info.cyan); - }); - driver.on('command', function (method, command, data) { - if (command === 'source()' && data) { - console.log( - ' > ' + method.yellow, - 'Screen contents'.grey, - '\n', - pd.xml(data).yellow, - ); - } else { - console.log(' > ' + method.yellow, command.grey, data || ''); - } - }); - driver.on('http', function (method, urlPath, data) { - console.log(' > ' + method.magenta, urlPath, (data || '').grey); - }); - - // every interval print what is on the screen - if (appiumDebugInterval) { - debugIntervalId = setInterval(() => { - // it driver.on('command') will log the screen contents - driver.source(); - }, appiumDebugInterval); - } - - const desired = { - platformName: 'Android', - deviceName: 'Android Emulator', - app: path.resolve('android/app/build/outputs/apk/debug/app-debug.apk'), - }; - - // React Native in dev mode often starts with Red Box "Can't fibd variable __fbBatchedBridge..." - // This is fixed by clicking Reload JS which will trigger a request to Metro - return driver - .init(desired) - .setImplicitWaitTimeout(5000) - .waitForElementByXPath('//android.widget.Button[@text="Reload JS"]') - .then( - elem => { - elem.click(); - driver.sleep(2000); - }, - // eslint-disable-next-line handle-callback-err - err => { - // ignoring if Reload JS button can't be located - }, - ); - }); - - after(function () { - if (debugIntervalId) { - clearInterval(debugIntervalId); - } - return driver.quit(); - }); - - it('should display new content after a refresh', function () { - const androidAppCode = fs.readFileSync('App.js', 'utf-8'); - let intervalToUpdate; - return ( - driver - .waitForElementByXPath( - '//android.widget.TextView[starts-with(@text, "Welcome to React")]', - ) - .then(() => { - fs.writeFileSync( - 'App.js', - androidAppCode.replace('Step One', 'Step 1'), - 'utf-8', - ); - }) - .sleep(1000) - // http://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_MENU - .pressDeviceKey(46) - .pressDeviceKey(46) - .sleep(2000) - .waitForElementByXPath( - '//android.widget.TextView[starts-with(@text, "Step 1")]', - ) - .finally(() => { - clearInterval(intervalToUpdate); - fs.writeFileSync('App.js', androidAppCode, 'utf-8'); - driver.pressDeviceKey(46).pressDeviceKey(46).sleep(2000); - }) - ); - }); - - it('should have the menu available', function () { - return ( - driver - .waitForElementByXPath( - '//android.widget.TextView[starts-with(@text, "Welcome to React")]', - ) - // http://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_MENU - .pressDeviceKey(82) - .waitForElementByXPath( - '//android.widget.TextView[starts-with(@text, "Toggle Inspector")]', - ) - ); - }); -}); diff --git a/scripts/circleci/check_appium_server_status.sh b/scripts/circleci/check_appium_server_status.sh deleted file mode 100755 index b0a2b917dc4..00000000000 --- a/scripts/circleci/check_appium_server_status.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash -# Copyright (c) Meta Platforms, Inc. and affiliates. -# -# This source code is licensed under the MIT license found in the -# LICENSE file in the root directory of this source tree. - -# This script checks if Appium server is running on default port (which is 4723). -if ! nc -z 127.0.0.1 4723; then - echo Could not find Appium server. - exit 1 -fi diff --git a/scripts/e2e/run-ci-e2e-tests.js b/scripts/e2e/run-ci-e2e-tests.js deleted file mode 100644 index ad3f6d16612..00000000000 --- a/scripts/e2e/run-ci-e2e-tests.js +++ /dev/null @@ -1,328 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow - * @format - * @oncall react_native - */ - -'use strict'; - -/** - * This script tests that React Native end to end installation/bootstrap works for different platforms - * Available arguments: - * --ios - 'react-native init' and check iOS app doesn't redbox - * --android - 'react-native init' and check Android app doesn't redbox - * --js - 'react-native init' and only check the packager returns a bundle - * --skip-cli-install - to skip react-native-cli global installation (for local debugging) - * --retries [num] - how many times to retry possible flaky commands: yarn add and running tests, default 1 - */ - -const {REACT_NATIVE_PACKAGE_DIR, REPO_ROOT, SCRIPTS_DIR} = require('../consts'); -const {getPackages} = require('../utils/monorepo'); -const tryExecNTimes = require('./utils/try-n-times'); -const {setupVerdaccio} = require('./utils/verdaccio'); -const {execFileSync, spawn} = require('child_process'); -const fs = require('fs'); -const path = require('path'); -const {cd, cp, echo, exec, exit, mv} = require('shelljs'); -const argv = require('yargs').argv; - -const REACT_NATIVE_TEMP_DIR = exec( - 'mktemp -d /tmp/react-native-XXXXXXXX', -).stdout.trim(); -const REACT_NATIVE_APP_DIR = `${REACT_NATIVE_TEMP_DIR}/template`; -// $FlowFixMe[incompatible-type] -const numberOfRetries /*: number */ = argv.retries || 1; - -let SERVER_PID; -let APPIUM_PID; -let VERDACCIO_PID; -let exitCode; - -function describe(message /*: string */) { - echo(`\n\n>>>>> ${message}\n\n\n`); -} - -async function main() { - try { - if (argv.android) { - describe('Compile Android binaries'); - if ( - exec( - './gradlew publishAllToMavenTempLocal -Pjobs=1 -Dorg.gradle.jvmargs="-Xmx512m -XX:+HeapDumpOnOutOfMemoryError"', - ).code - ) { - throw new Error('Failed to compile Android binaries'); - } - } - - describe('Create react-native package'); - if ( - exec( - 'node ./scripts/releases/set-rn-version.js --to-version 1000.0.0 --build-type dry-run', - ).code - ) { - throw new Error( - 'Failed to set version and update package.json ready for release', - ); - } - - if (exec('npm pack', {cwd: REACT_NATIVE_PACKAGE_DIR}).code) { - throw new Error('Failed to pack react-native'); - } - - const REACT_NATIVE_PACKAGE = path.join( - REACT_NATIVE_PACKAGE_DIR, - 'react-native-*.tgz', - ); - - describe('Set up Verdaccio'); - VERDACCIO_PID = setupVerdaccio(); - - describe('Build and publish packages'); - exec('node ./scripts/build/build.js', {cwd: REPO_ROOT}); - - const packages = await getPackages({ - includeReactNative: false, - includePrivate: false, - }); - - for (const {path: packageAbsolutePath} of Object.values(packages)) { - exec( - 'npm publish --registry http://localhost:4873 --yes --access public', - {cwd: packageAbsolutePath}, - ); - } - - describe('Scaffold a basic React Native app from template'); - execFileSync('rsync', [ - '-a', - `${REPO_ROOT}/packages/react-native/template`, - REACT_NATIVE_TEMP_DIR, - ]); - cd(REACT_NATIVE_APP_DIR); - - mv('_bundle', '.bundle'); - mv('_eslintrc.js', '.eslintrc.js'); - mv('_prettierrc.js', '.prettierrc.js'); - mv('_watchmanconfig', '.watchmanconfig'); - fs.writeFileSync('.npmrc', 'registry=http://localhost:4873'); - - describe('Install React Native package'); - exec(`npm install ${REACT_NATIVE_PACKAGE}`); - - describe('Install node_modules'); - if ( - tryExecNTimes( - () => { - return exec('npm install').code; - }, - numberOfRetries, - () => exec('sleep 10s'), - ) - ) { - throw new Error( - 'Failed to execute npm install. Most common reason is npm registry connectivity, try again', - ); - } - exec('rm -rf ./node_modules/react-native/template'); - - if (argv.android) { - describe('Install end-to-end framework'); - if ( - tryExecNTimes( - () => - exec( - 'yarn add --dev appium@1.11.1 mocha@2.4.5 wd@1.11.1 colors@1.0.3 pretty-data2@0.40.1', - {silent: true}, - ).code, - numberOfRetries, - ) - ) { - throw new Error( - 'Failed to install appium. Most common reason is npm registry connectivity, try again.', - ); - } - cp(`${SCRIPTS_DIR}/android-e2e-test.js`, 'android-e2e-test.js'); - cd('android'); - describe('Download Maven deps'); - exec('./gradlew :app:copyDownloadableDepsToLibs'); - cd('..'); - - describe('Generate key'); - exec('rm android/app/debug.keystore'); - if ( - exec( - 'keytool -genkey -v -keystore android/app/debug.keystore -storepass android -alias androiddebugkey -keypass android -keyalg RSA -keysize 2048 -validity 10000 -dname "CN=Android Debug,O=Android,C=US"', - ).code - ) { - throw new Error('Key could not be generated'); - } - - // $FlowFixMe[incompatible-type] - describe(`Start appium server, ${APPIUM_PID}`); - const appiumProcess = spawn('node', ['./node_modules/.bin/appium']); - APPIUM_PID = appiumProcess.pid; - - describe('Build the app'); - if (exec('react-native run-android').code) { - throw new Error('Could not execute react-native run-android'); - } - - // $FlowFixMe[incompatible-type] - describe(`Start Metro, ${SERVER_PID}`); - // shelljs exec('', {async: true}) does not emit stdout events, so we rely on good old spawn - const packagerProcess = spawn('yarn', ['start', '--max-workers 1']); - SERVER_PID = packagerProcess.pid; - // wait a bit to allow packager to startup - exec('sleep 15s'); - describe('Test: Android end-to-end test'); - if ( - tryExecNTimes( - () => { - return exec('node node_modules/.bin/_mocha android-e2e-test.js') - .code; - }, - numberOfRetries, - () => exec('sleep 10s'), - ) - ) { - throw new Error( - 'Failed to run Android end-to-end tests. Most likely the code is broken.', - ); - } - } - - if (argv.ios) { - cd('ios'); - // shelljs exec('', {async: true}) does not emit stdout events, so we rely on good old spawn - const packagerEnv = Object.create(process.env); - // $FlowFixMe[prop-missing] - packagerEnv.REACT_NATIVE_MAX_WORKERS = 1; - describe('Start Metro'); - const packagerProcess = spawn('yarn', ['start'], { - stdio: 'inherit', - env: packagerEnv, - }); - SERVER_PID = packagerProcess.pid; - exec('sleep 15s'); - // prepare cache to reduce chances of possible red screen "Can't find variable __fbBatchedBridge..." - exec( - 'response=$(curl --write-out %{http_code} --silent --output /dev/null localhost:8081/index.bundle?platform=ios&dev=true)', - ); - echo(`Metro is running, ${SERVER_PID}`); - - describe('Install CocoaPod dependencies'); - exec('bundle exec pod install'); - - describe('Test: iOS end-to-end test'); - if ( - // TODO: Get target OS and simulator from .tests.env - tryExecNTimes( - () => { - return exec( - [ - 'xcodebuild', - '-workspace', - '"HelloWorld.xcworkspace"', - '-destination', - '"platform=iOS Simulator,name=iPhone 8,OS=13.3"', - '-scheme', - '"HelloWorld"', - '-sdk', - 'iphonesimulator', - '-UseModernBuildSystem=NO', - 'test', - ].join(' ') + - ' | ' + - [ - 'xcbeautify', - '--report', - 'junit', - '--reportPath', - '"~/react-native/reports/junit/iOS-e2e/results.xml"', - ].join(' ') + - ' && exit ${PIPESTATUS[0]}', - ).code; - }, - numberOfRetries, - () => exec('sleep 10s'), - ) - ) { - throw new Error( - 'Failed to run iOS end-to-end tests. Most likely the code is broken.', - ); - } - cd('..'); - } - - if (argv.js) { - // Check the packager produces a bundle (doesn't throw an error) - describe('Test: Verify packager can generate an Android bundle'); - if ( - exec( - 'yarn react-native bundle --verbose --entry-file index.js --platform android --dev true --bundle-output android-bundle.js --max-workers 1', - ).code - ) { - throw new Error('Could not build Android bundle'); - } - - describe('Test: Verify packager can generate an iOS bundle'); - if ( - exec( - 'yarn react-native bundle --entry-file index.js --platform ios --dev true --bundle-output ios-bundle.js --max-workers 1', - ).code - ) { - throw new Error('Could not build iOS bundle'); - } - - describe('Test: TypeScript typechecking'); - if (exec('yarn tsc').code) { - throw new Error('Typechecking errors were found'); - } - - describe('Test: Jest tests'); - if (exec('yarn test').code) { - throw new Error('Jest tests failed'); - } - - // TODO: ESLint infinitely hangs when running in the environment created by - // this script, but not projects generated by `react-native init`. - /* - describe('Test: ESLint/Prettier linting and formatting'); - if (exec('yarn lint').code) { - echo('linting errors were found'); - exitCode = 1; - throw Error(exitCode); - }*/ - } - exitCode = 0; - } finally { - describe('Clean up'); - if (SERVER_PID) { - echo(`Killing packager ${SERVER_PID}`); - exec(`kill -9 ${SERVER_PID}`); - // this is quite drastic but packager starts a daemon that we can't kill by killing the parent process - // it will be fixed in April (quote David Aurelio), so until then we will kill the zombie by the port number - exec("lsof -i tcp:8081 | awk 'NR!=1 {print $2}' | xargs kill"); - } - if (APPIUM_PID) { - echo(`Killing appium ${APPIUM_PID}`); - exec(`kill -9 ${APPIUM_PID}`); - } - if (VERDACCIO_PID) { - echo(`Killing verdaccio ${VERDACCIO_PID}`); - exec(`kill -9 ${VERDACCIO_PID}`); - } - } - exit(exitCode); -} - -if (require.main === module) { - // eslint-disable-next-line no-void - void main(); -} diff --git a/yarn.lock b/yarn.lock index 56aa017566d..407a33e2537 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2874,11 +2874,6 @@ resolved "https://registry.yarnpkg.com/@tsconfig/node18/-/node18-1.0.1.tgz#ea5b375a9ead6b09ccbd70c3894ea069829ea1bb" integrity sha512-sNFeK6X2ATlhlvzyH4kKYQlfHXE2f2/wxtB9ClvYXevWpmwkUT7VaSrjIN9E76Qebz8qP5JOJJ9jD3QoD/Z9TA== -"@types/aria-query@^5.0.0": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.1.tgz#3286741fb8f1e1580ac28784add4c7a1d49bdfbc" - integrity sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q== - "@types/babel__core@^7.1.14": version "7.1.19" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.19.tgz#7b497495b7d1b4812bdb9d02804d0576f43ee460" @@ -2940,14 +2935,6 @@ "@types/jsonfile" "*" "@types/node" "*" -"@types/glob@^8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-8.1.0.tgz#b63e70155391b0584dce44e7ea25190bbc38f2fc" - integrity sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w== - dependencies: - "@types/minimatch" "^5.1.2" - "@types/node" "*" - "@types/graceful-fs@^4.1.3": version "4.1.5" resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" @@ -3024,11 +3011,6 @@ resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.2.tgz#b74129719fc8d11c01868010082d483b7545591a" integrity sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA== -"@types/minimatch@^5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" - integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== - "@types/node-forge@^1.3.0": version "1.3.8" resolved "https://registry.yarnpkg.com/@types/node-forge/-/node-forge-1.3.8.tgz#044ad98354ff309a031a55a40ad122f3be1ac2bb" @@ -3036,7 +3018,7 @@ dependencies: "@types/node" "*" -"@types/node@*", "@types/node@>=12.12.47", "@types/node@>=13.7.0", "@types/node@^18.0.0": +"@types/node@*", "@types/node@>=12.12.47", "@types/node@>=13.7.0": version "18.16.14" resolved "https://registry.yarnpkg.com/@types/node/-/node-18.16.14.tgz#ab67bb907f1146afc6fedb9ce60ae8a99c989631" integrity sha512-+ImzUB3mw2c5ISJUq0punjDilUQ5GnUim0ZRvchHIWJmOC0G+p0kzhXBqj6cDjK0QdPFwzrHWgrJp3RPvCG5qg== @@ -3092,16 +3074,6 @@ resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== -"@types/ua-parser-js@^0.7.33": - version "0.7.36" - resolved "https://registry.yarnpkg.com/@types/ua-parser-js/-/ua-parser-js-0.7.36.tgz#9bd0b47f26b5a3151be21ba4ce9f5fa457c5f190" - integrity sha512-N1rW+njavs70y2cApeIw1vLMYXRwfBy+7trgavGuuTfOd7j1Yh7QTRc/yqsPl6ncokt72ZXuxEU0PiCp9bSwNQ== - -"@types/which@^1.3.2": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@types/which/-/which-1.3.2.tgz#9c246fc0c93ded311c8512df2891fb41f6227fdf" - integrity sha512-8oDqyLC7eD4HM307boe2QWKyuzdzWBj56xI/imSl2cpL+U3tCMaTAkMJ4ee5JBZ/FsOJlvRGeIShiZDAl1qERA== - "@types/yargs-parser@*": version "15.0.0" resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" @@ -3128,13 +3100,6 @@ dependencies: "@types/yargs-parser" "*" -"@types/yauzl@^2.9.1": - version "2.10.0" - resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.0.tgz#b3248295276cf8c6f153ebe6a9aba0c988cb2599" - integrity sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw== - dependencies: - "@types/node" "*" - "@typescript-eslint/eslint-plugin@^5.30.0": version "5.59.5" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.5.tgz#f156827610a3f8cefc56baeaa93cd4a5f32966b4" @@ -3356,57 +3321,6 @@ resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== -"@wdio/config@7.31.1": - version "7.31.1" - resolved "https://registry.yarnpkg.com/@wdio/config/-/config-7.31.1.tgz#53550a164c970403628525ecdc5e0c3f96a0ff30" - integrity sha512-WAfswbCatwiaDVqy6kfF/5T8/WS/US/SRhBGUFrfBuGMIe+RRoHgy7jURFWSvUIE7CNHj8yvs46fLUcxhXjzcQ== - dependencies: - "@types/glob" "^8.1.0" - "@wdio/logger" "7.26.0" - "@wdio/types" "7.30.2" - "@wdio/utils" "7.30.2" - deepmerge "^4.0.0" - glob "^8.0.3" - -"@wdio/logger@7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@wdio/logger/-/logger-7.26.0.tgz#2c105a00f63a81d52de969fef5a54a9035146b2d" - integrity sha512-kQj9s5JudAG9qB+zAAcYGPHVfATl2oqKgqj47yjehOQ1zzG33xmtL1ArFbQKWhDG32y1A8sN6b0pIqBEIwgg8Q== - dependencies: - chalk "^4.0.0" - loglevel "^1.6.0" - loglevel-plugin-prefix "^0.8.4" - strip-ansi "^6.0.0" - -"@wdio/protocols@7.27.0": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@wdio/protocols/-/protocols-7.27.0.tgz#8e2663ec877dce7a5f76b021209c18dd0132e853" - integrity sha512-hT/U22R5i3HhwPjkaKAG0yd59eaOaZB0eibRj2+esCImkb5Y6rg8FirrlYRxIGFVBl0+xZV0jKHzR5+o097nvg== - -"@wdio/repl@7.30.2": - version "7.30.2" - resolved "https://registry.yarnpkg.com/@wdio/repl/-/repl-7.30.2.tgz#a92592078cb892d5bd14c2b300ef01ae6c8baf90" - integrity sha512-aW4nuMI+gbRmxmL4jMarBjuiQ+cFscr/8jHDt5hGx/gc/f7ifrZa4t6M5H8vFIKsvjUwl9lZRiVO4NVvvp6+cg== - dependencies: - "@wdio/utils" "7.30.2" - -"@wdio/types@7.30.2": - version "7.30.2" - resolved "https://registry.yarnpkg.com/@wdio/types/-/types-7.30.2.tgz#0baa4b8249aa1d98a545144e6fb494f1b186b24f" - integrity sha512-uZ8o7FX8RyBsaXiOWa59UKTCHTtADNvOArYTcHNEIzt+rh4JdB/uwqfc8y4TCNA2kYm7PWaQpUFwpStLeg0H1Q== - dependencies: - "@types/node" "^18.0.0" - got "^11.8.1" - -"@wdio/utils@7.30.2": - version "7.30.2" - resolved "https://registry.yarnpkg.com/@wdio/utils/-/utils-7.30.2.tgz#d4642c3b8333f3f2ae9d46229098c0a77c3f887b" - integrity sha512-np7I+smszFUennbQKdzbMN/zUL3s3EZq9pCCUcTRjjs9TE4tnn0wfmGdoz2o7REYu6kn9NfFFJyVIM2VtBbKEA== - dependencies: - "@wdio/logger" "7.26.0" - "@wdio/types" "7.30.2" - p-iteration "^1.1.8" - abort-controller@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" @@ -3556,35 +3470,6 @@ aproba@^1.0.3: resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== -archiver-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-2.1.0.tgz#e8a460e94b693c3e3da182a098ca6285ba9249e2" - integrity sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw== - dependencies: - glob "^7.1.4" - graceful-fs "^4.2.0" - lazystream "^1.0.0" - lodash.defaults "^4.2.0" - lodash.difference "^4.5.0" - lodash.flatten "^4.4.0" - lodash.isplainobject "^4.0.6" - lodash.union "^4.6.0" - normalize-path "^3.0.0" - readable-stream "^2.0.0" - -archiver@^5.0.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/archiver/-/archiver-5.3.1.tgz#21e92811d6f09ecfce649fbefefe8c79e57cbbb6" - integrity sha512-8KyabkmbYrH+9ibcTScQ1xCJC/CGcugdVIwB+53f5sZziXgwUh3iXlAlANMxcZyDEfTHMe6+Z5FofV8nopXP7w== - dependencies: - archiver-utils "^2.1.0" - async "^3.2.3" - buffer-crc32 "^0.2.1" - readable-stream "^3.6.0" - readdir-glob "^1.0.0" - tar-stream "^2.2.0" - zip-stream "^4.1.0" - are-we-there-yet@~1.1.2: version "1.1.7" resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz#b15474a932adab4ff8a50d9adfa7e4e926f21146" @@ -3613,13 +3498,6 @@ aria-query@^4.2.2: "@babel/runtime" "^7.10.2" "@babel/runtime-corejs3" "^7.10.2" -aria-query@^5.2.1: - version "5.3.0" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" - integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== - dependencies: - dequal "^2.0.3" - array-includes@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.5.tgz#2c320010db8d31031fd2a5f6b3bbd4b1aad31bdb" @@ -3995,11 +3873,6 @@ bser@^2.0.0: dependencies: node-int64 "^0.4.0" -buffer-crc32@^0.2.1, buffer-crc32@^0.2.13, buffer-crc32@~0.2.3: - version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== - buffer-equal-constant-time@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" @@ -4010,7 +3883,7 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== -buffer@^5.2.1, buffer@^5.5.0: +buffer@^5.5.0: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== @@ -4168,17 +4041,12 @@ chokidar@^3.4.0: optionalDependencies: fsevents "~2.3.2" -chownr@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - chownr@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== -chrome-launcher@^0.15.0, chrome-launcher@^0.15.2: +chrome-launcher@^0.15.2: version "0.15.2" resolved "https://registry.yarnpkg.com/chrome-launcher/-/chrome-launcher-0.15.2.tgz#4e6404e32200095fdce7f6a1e1004f9bd36fa5da" integrity sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ== @@ -4395,16 +4263,6 @@ commondir@^1.0.1: resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= -compress-commons@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-4.1.1.tgz#df2a09a7ed17447642bad10a85cc9a19e5c42a7d" - integrity sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ== - dependencies: - buffer-crc32 "^0.2.13" - crc32-stream "^4.0.2" - normalize-path "^3.0.0" - readable-stream "^3.6.0" - compressible@~2.0.14: version "2.0.15" resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.15.tgz#857a9ab0a7e5a07d8d837ed43fe2defff64fe212" @@ -4504,26 +4362,6 @@ cosmiconfig@^5.0.5, cosmiconfig@^5.1.0: js-yaml "^3.13.0" parse-json "^4.0.0" -crc-32@^1.2.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" - integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== - -crc32-stream@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-4.0.2.tgz#c922ad22b38395abe9d3870f02fa8134ed709007" - integrity sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w== - dependencies: - crc-32 "^1.2.0" - readable-stream "^3.4.0" - -cross-fetch@3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" - integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== - dependencies: - node-fetch "2.6.7" - cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" @@ -4533,16 +4371,6 @@ cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" -css-shorthand-properties@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/css-shorthand-properties/-/css-shorthand-properties-1.1.1.tgz#1c808e63553c283f289f2dd56fcee8f3337bd935" - integrity sha512-Md+Juc7M3uOdbAFwOYlTrccIZ7oCFuzrhKYQjdeUEW/sE1hv17Jp/Bws+ReOPpGVBTYCBoYo+G17V5Qo8QQ75A== - -css-value@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/css-value/-/css-value-0.0.1.tgz#5efd6c2eea5ea1fd6b6ac57ec0427b18452424ea" - integrity sha512-FUV3xaJ63buRLgHrLQVlVgQnQdR4yqdLGaDu7g8CQcWjInDfM9plBTPI9FRfpahju1UBSaMckeb2/46ApS/V1Q== - csstype@^3.0.2: version "3.1.1" resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9" @@ -4620,20 +4448,13 @@ debug@2.6.9, debug@^2.2.0, debug@^2.6.9: dependencies: ms "2.0.0" -debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" -debug@4.3.2: - version "4.3.2" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" - integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== - dependencies: - ms "2.1.2" - decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -4661,7 +4482,7 @@ deep-is@^0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== -deepmerge@^4.0.0, deepmerge@^4.2.2, deepmerge@^4.3.0: +deepmerge@^4.2.2, deepmerge@^4.3.0: version "4.3.1" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== @@ -4711,11 +4532,6 @@ deprecation@^2.0.0, deprecation@^2.3.1: resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== -dequal@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" - integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== - destroy@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" @@ -4731,40 +4547,6 @@ devtools-protocol@0.0.1107588: resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.1107588.tgz#f8cac707840b97cc30b029359341bcbbb0ad8ffa" integrity sha512-yIR+pG9x65Xko7bErCUSQaDLrO/P1p3JUzEk7JCU4DowPcGHkTGUGQapcfcLc4qj0UaALwZ+cr0riFgiqpixcg== -devtools-protocol@0.0.948846: - version "0.0.948846" - resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.948846.tgz#bff47e2d1dba060130fa40ed2e5f78b916ba285f" - integrity sha512-5fGyt9xmMqUl2VI7+rnUkKCiAQIpLns8sfQtTENy5L70ktbNw0Z3TFJ1JoFNYdx/jffz4YXU45VF75wKZD7sZQ== - -devtools-protocol@0.0.981744: - version "0.0.981744" - resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.981744.tgz#9960da0370284577d46c28979a0b32651022bacf" - integrity sha512-0cuGS8+jhR67Fy7qG3i3Pc7Aw494sb9yG9QgpG97SFVWwolgYjlhJg7n+UaHxOQT30d1TYu/EYe9k01ivLErIg== - -devtools-protocol@^0.0.1161029: - version "0.0.1161029" - resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.1161029.tgz#ec118810acf81100101f5fdabde042121c362940" - integrity sha512-kEUDtYEhgfepFC1T5a4F7XD6FzALn6bQa8Lkp7tM2vWXQG0LwXQ/MPS7BwmgW4bW3QGNci+G/mW4grFltFFtZA== - -devtools@7.32.0: - version "7.32.0" - resolved "https://registry.yarnpkg.com/devtools/-/devtools-7.32.0.tgz#681ec21298eb6020e367bcaac0003a4294ec8c93" - integrity sha512-rf1OYJXCCSfhuQ+nosDb9o86/R4OJWBuBNd44PPGSBV0TCmLSrmf3PlqLEJ7/EbawkuOLWSQcX7EwIB/ABHFXg== - dependencies: - "@types/node" "^18.0.0" - "@types/ua-parser-js" "^0.7.33" - "@wdio/config" "7.31.1" - "@wdio/logger" "7.26.0" - "@wdio/protocols" "7.27.0" - "@wdio/types" "7.30.2" - "@wdio/utils" "7.30.2" - chrome-launcher "^0.15.0" - edge-paths "^2.1.0" - puppeteer-core "13.1.3" - query-selector-shadow-dom "^1.0.0" - ua-parser-js "^1.0.1" - uuid "^9.0.0" - diff-sequences@^29.4.3: version "29.4.3" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.4.3.tgz#9314bc1fabe09267ffeca9cbafc457d8499a13f2" @@ -4816,14 +4598,6 @@ ecdsa-sig-formatter@1.0.11: dependencies: safe-buffer "^5.0.1" -edge-paths@^2.1.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/edge-paths/-/edge-paths-2.2.1.tgz#d2d91513225c06514aeac9843bfce546abbf4391" - integrity sha512-AI5fC7dfDmCdKo3m5y7PkYE8m6bMqR6pvVpgtrZkkhcJXFLelUgkjrhk3kXXx8Kbw2cRaTT4LkOR7hqf39KJdw== - dependencies: - "@types/which" "^1.3.2" - which "^2.0.2" - ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" @@ -5299,17 +5073,6 @@ external-editor@^3.0.3: iconv-lite "^0.4.24" tmp "^0.0.33" -extract-zip@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" - integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== - dependencies: - debug "^4.1.1" - get-stream "^5.1.0" - yauzl "^2.10.0" - optionalDependencies: - "@types/yauzl" "^2.9.1" - extsprintf@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" @@ -5320,11 +5083,6 @@ extsprintf@^1.2.0: resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== -fast-deep-equal@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" - integrity sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w== - fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -5407,13 +5165,6 @@ fb-watchman@^2.0.0: dependencies: bser "^2.0.0" -fd-slicer@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" - integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== - dependencies: - pend "~1.2.0" - figures@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" @@ -5598,15 +5349,6 @@ fs-exists-sync@^0.1.0: resolved "https://registry.yarnpkg.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add" integrity sha512-cR/vflFyPZtrN6b38ZyWxpWdhlXrzZEBawlpBQMq7033xVY7/kg0GDMBK5jg8lDYQckdJ5x/YC88lM3C7VMsLg== -fs-extra@^11.1.1: - version "11.1.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.1.1.tgz#da69f7c39f3b002378b0954bb6ae7efdc0876e2d" - integrity sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - fs-extra@^11.2.0: version "11.2.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b" @@ -5796,17 +5538,6 @@ glob@^7.0.0, glob@^7.1.1, glob@^7.1.3, glob@^7.1.4, glob@^7.2.0: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^8.0.3: - version "8.1.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" - integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" - globals@^11.1.0: version "11.8.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.8.0.tgz#c1ef45ee9bed6badf0663c5cb90e8d1adec1321d" @@ -5831,7 +5562,7 @@ globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" -got@^11.0.2, got@^11.1.4, got@^11.8.1: +got@^11.1.4: version "11.8.6" resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== @@ -5853,7 +5584,7 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== -grapheme-splitter@^1.0.2, grapheme-splitter@^1.0.4: +grapheme-splitter@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== @@ -6063,15 +5794,7 @@ http2-wrapper@^1.0.0-beta.5.2: quick-lru "^5.1.1" resolve-alpn "^1.0.0" -https-proxy-agent@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" - integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== - dependencies: - agent-base "6" - debug "4" - -https-proxy-agent@5.0.1, https-proxy-agent@^5.0.1: +https-proxy-agent@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== @@ -7175,11 +6898,6 @@ kleur@^3.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== -ky@0.30.0: - version "0.30.0" - resolved "https://registry.yarnpkg.com/ky/-/ky-0.30.0.tgz#a3d293e4f6c4604a9a4694eceb6ce30e73d27d64" - integrity sha512-X/u76z4JtDVq10u1JA5UQfatPxgPaVDMYTrgHyiTpGN2z4TMEJkIHsoSBBSg9SWZEIXTKsi9kHgiQ9o3Y/4yog== - language-subtag-registry@~0.3.2: version "0.3.21" resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz#04ac218bea46f04cb039084602c6da9e788dd45a" @@ -7192,13 +6910,6 @@ language-tags@^1.0.5: dependencies: language-subtag-registry "~0.3.2" -lazystream@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.1.tgz#494c831062f1f9408251ec44db1cba29242a2638" - integrity sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw== - dependencies: - readable-stream "^2.0.5" - leven@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" @@ -7276,36 +6987,16 @@ lodash.camelcase@^4.3.0: resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== -lodash.clonedeep@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== - lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= -lodash.defaults@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" - integrity sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ== - -lodash.difference@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c" - integrity sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA== - lodash.find@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.find/-/lodash.find-4.6.0.tgz#cb0704d47ab71789ffa0de8b97dd926fb88b13b1" integrity sha512-yaRZoAV3Xq28F1iafWN1+a0rflOej93l1DQUejs3SZ41h2O9UJBoS9aueGjPDgAl4B6tPC0NuuchLKaDQQ3Isg== -lodash.flatten@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" - integrity sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g== - lodash.includes@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" @@ -7316,11 +7007,6 @@ lodash.isobject@^3.0.2: resolved "https://registry.yarnpkg.com/lodash.isobject/-/lodash.isobject-3.0.2.tgz#3c8fb8d5b5bf4bf90ae06e14f2a530a4ed935e1d" integrity sha512-3/Qptq2vr7WeJbB4KHUSKlq8Pl7ASXi3UG6CMbBm8WRtXi8+GHm7mKaU3urfpSEzWe2wCIChs6/sdocUsTKJiA== -lodash.isplainobject@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" - integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== - lodash.keys@^4.0.8: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-4.2.0.tgz#a08602ac12e4fb83f91fc1fb7a360a4d9ba35205" @@ -7336,7 +7022,7 @@ lodash.memoize@^4.1.2: resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== -lodash.merge@^4.6.1, lodash.merge@^4.6.2: +lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== @@ -7346,16 +7032,6 @@ lodash.throttle@^4.1.1: resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" integrity sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ= -lodash.union@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" - integrity sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw== - -lodash.zip@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.zip/-/lodash.zip-4.2.0.tgz#ec6662e4896408ed4ab6c542a3990b72cc080020" - integrity sha512-C7IOaBBK/0gMORRBd8OETNx3kmOkgIWIPvyDpZSCTwUrpYmgZwJkjZeOD8ww4xbOUOs4/attY+pciKvadNfFbg== - lodash@^4.17.11, lodash@^4.17.19, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" @@ -7389,16 +7065,6 @@ logkitty@^0.7.1: dayjs "^1.8.15" yargs "^15.1.0" -loglevel-plugin-prefix@^0.8.4: - version "0.8.4" - resolved "https://registry.yarnpkg.com/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz#2fe0e05f1a820317d98d8c123e634c1bd84ff644" - integrity sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g== - -loglevel@^1.6.0: - version "1.8.1" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.8.1.tgz#5c621f83d5b48c54ae93b6156353f555963377b4" - integrity sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg== - long@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" @@ -7748,20 +7414,6 @@ minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatc dependencies: brace-expansion "^1.1.7" -minimatch@^5.0.1, minimatch@^5.1.0: - version "5.1.6" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" - integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^6.0.4: - version "6.2.0" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-6.2.0.tgz#2b70fd13294178c69c04dfc05aebdb97a4e79e42" - integrity sha512-sauLxniAmvnhhRjFwPNnJKaPFYyddAgbYdeUpHULtCT/GhzdCx/MDNy+Y40lBxTQUrMzDE8e0S43Z5uqfO0REg== - dependencies: - brace-expansion "^2.0.1" - minimist@^1.2.0, minimist@^1.2.6: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" @@ -7782,11 +7434,6 @@ minizlib@^2.1.1: minipass "^3.0.0" yallist "^4.0.0" -mkdirp-classic@^0.5.2: - version "0.5.3" - resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" - integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== - "mkdirp@>=0.5 0", mkdirp@^0.5.1: version "0.5.6" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" @@ -8109,11 +7756,6 @@ p-cancelable@^2.0.0: resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== -p-iteration@^1.1.8: - version "1.1.8" - resolved "https://registry.yarnpkg.com/p-iteration/-/p-iteration-1.1.8.tgz#14df726d55af368beba81bcc92a26bb1b48e714a" - integrity sha512-IMFBSDIYcPNnW7uWYGrBqmvTiq7W0uB0fJn6shQZs7dlF3OvrHOre+JT9ikSZ7gZS3vWqclVgoQSvToJrns7uQ== - p-limit@^2.0.0, p-limit@^2.1.0, p-limit@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" @@ -8255,11 +7897,6 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -pend@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" - integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== - performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" @@ -8290,13 +7927,6 @@ pirates@^4.0.1, pirates@^4.0.4, pirates@^4.0.5: resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== -pkg-dir@4.2.0, pkg-dir@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - pkg-dir@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" @@ -8304,6 +7934,13 @@ pkg-dir@^3.0.0: dependencies: find-up "^3.0.0" +pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -8381,11 +8018,6 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw== -progress@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - promise@^8.3.0: version "8.3.0" resolved "https://registry.yarnpkg.com/promise/-/promise-8.3.0.tgz#8cb333d1edeb61ef23869fbb8a4ea0279ab60e0a" @@ -8447,11 +8079,6 @@ protobufjs@^7.0.0: "@types/node" ">=13.7.0" long "^5.0.0" -proxy-from-env@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== - psl@^1.1.28: version "1.8.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" @@ -8470,42 +8097,6 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -puppeteer-core@13.1.3: - version "13.1.3" - resolved "https://registry.yarnpkg.com/puppeteer-core/-/puppeteer-core-13.1.3.tgz#cecb9e2ffff77410e4aa6428a1a2185ef4c6c01c" - integrity sha512-96pzvVBzq5lUGt3L/QrIH3mxn3NfZylHeusNhq06xBAHPI0Upc0SC/9u7tXjL0oRnmcExeVRJivr1lj7Ah/yDQ== - dependencies: - debug "4.3.2" - devtools-protocol "0.0.948846" - extract-zip "2.0.1" - https-proxy-agent "5.0.0" - node-fetch "2.6.7" - pkg-dir "4.2.0" - progress "2.0.3" - proxy-from-env "1.1.0" - rimraf "3.0.2" - tar-fs "2.1.1" - unbzip2-stream "1.4.3" - ws "8.2.3" - -puppeteer-core@^13.1.3: - version "13.7.0" - resolved "https://registry.yarnpkg.com/puppeteer-core/-/puppeteer-core-13.7.0.tgz#3344bee3994163f49120a55ddcd144a40575ba5b" - integrity sha512-rXja4vcnAzFAP1OVLq/5dWNfwBGuzcOARJ6qGV7oAZhnLmVRU8G5MsdeQEAOy332ZhkIOnn9jp15R89LKHyp2Q== - dependencies: - cross-fetch "3.1.5" - debug "4.3.4" - devtools-protocol "0.0.981744" - extract-zip "2.0.1" - https-proxy-agent "5.0.1" - pkg-dir "4.2.0" - progress "2.0.3" - proxy-from-env "1.1.0" - rimraf "3.0.2" - tar-fs "2.1.1" - unbzip2-stream "1.4.3" - ws "8.5.0" - pure-rand@^6.0.0: version "6.0.2" resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.2.tgz#a9c2ddcae9b68d736a8163036f088a2781c8b306" @@ -8516,11 +8107,6 @@ qs@~6.5.2: resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== -query-selector-shadow-dom@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/query-selector-shadow-dom/-/query-selector-shadow-dom-1.0.1.tgz#1c7b0058eff4881ac44f45d8f84ede32e9a2f349" - integrity sha512-lT5yCqEBgfoMYpf3F2xQRK7zEr1rhIIZuceDK6+xRkJQ4NMbHTwXqk4NkwDwQMNqXgG9r9fyHnzwNVs6zV5KRw== - query-string@^6.12.1: version "6.14.1" resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.14.1.tgz#7ac2dca46da7f309449ba0f86b1fd28255b0c86a" @@ -8589,7 +8175,7 @@ react@19.0.0-rc-fb9a90fa48-20240614: resolved "https://registry.yarnpkg.com/react/-/react-19.0.0-rc-fb9a90fa48-20240614.tgz#90eb43a0b005e8cc3cbf0d801c14816d01df1b08" integrity sha512-nvE3Gy+IOIfH/DXhkyxFVQSrITarFcQz4+shzC/McxQXEUSonpw2oDy/Wi9hdDtV3hlP12VYuDL95iiBREedNQ== -readable-stream@^2.0.0, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@~2.3.6: +readable-stream@^2.0.6, readable-stream@~2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== @@ -8602,7 +8188,7 @@ readable-stream@^2.0.0, readable-stream@^2.0.5, readable-stream@^2.0.6, readable string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: +readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0: version "3.6.2" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== @@ -8611,13 +8197,6 @@ readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0, readable string_decoder "^1.1.1" util-deprecate "^1.0.1" -readdir-glob@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/readdir-glob/-/readdir-glob-1.1.3.tgz#c3d831f51f5e7bfa62fa2ffbe4b508c640f09584" - integrity sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA== - dependencies: - minimatch "^5.1.0" - readdirp@~3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" @@ -8811,13 +8390,6 @@ responselike@^2.0.0: dependencies: lowercase-keys "^2.0.0" -resq@^1.9.1: - version "1.11.0" - resolved "https://registry.yarnpkg.com/resq/-/resq-1.11.0.tgz#edec8c58be9af800fd628118c0ca8815283de196" - integrity sha512-G10EBz+zAAy3zUd/CDoBbXRL6ia9kOo3xRHrMDsHljI0GDkhYlyjwoCx5+3eCC4swi1uCoZQhskuJkj7Gp57Bw== - dependencies: - fast-deep-equal "^2.0.1" - restore-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" @@ -8849,11 +8421,6 @@ rfdc@^1.3.1: resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.1.tgz#2b6d4df52dffe8bb346992a10ea9451f24373a8f" integrity sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg== -rgb2hex@0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/rgb2hex/-/rgb2hex-0.2.5.tgz#f82230cd3ab1364fa73c99be3a691ed688f8dbdc" - integrity sha512-22MOP1Rh7sAo1BZpDG6R5RFYzR2lYEgwq7HEmyW2qcsOqR2lQKmn+O//xV3YG/0rrhMC6KVX2hU+ZXuaw9a5bw== - rimraf@2: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" @@ -8861,7 +8428,7 @@ rimraf@2: dependencies: glob "^7.1.3" -rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2: +rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== @@ -8998,13 +8565,6 @@ serialize-error@^2.1.0: resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-2.1.0.tgz#50b679d5635cdf84667bdc8e59af4e5b81d5f60a" integrity sha1-ULZ51WNc34Rme9yOWa9OW4HV9go= -serialize-error@^8.0.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-8.1.0.tgz#3a069970c712f78634942ddd50fbbc0eaebe2f67" - integrity sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ== - dependencies: - type-fest "^0.20.2" - serve-static@^1.13.1: version "1.15.0" resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" @@ -9435,17 +8995,7 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -tar-fs@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" - integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== - dependencies: - chownr "^1.1.1" - mkdirp-classic "^0.5.2" - pump "^3.0.0" - tar-stream "^2.1.4" - -tar-stream@^2.1.4, tar-stream@^2.2.0: +tar-stream@^2.1.4: version "2.2.0" resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== @@ -9512,7 +9062,7 @@ through2@^2.0.1: readable-stream "~2.3.6" xtend "~4.0.1" -through@^2.3.6, through@^2.3.8: +through@^2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= @@ -9673,11 +9223,6 @@ typescript@5.3.2: resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.2.tgz#00d1c7c1c46928c5845c1ee8d0cc2791031d4c43" integrity sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ== -ua-parser-js@^1.0.1: - version "1.0.35" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.35.tgz#c4ef44343bc3db0a3cbefdf21822f1b1fc1ab011" - integrity sha512-fKnGuqmTBnIE+/KXSzCn4db8RTigUzw1AN0DmdU6hJovUTbYJKyqj+8Mt1c4VfRDnOVJnENmfYkIPZ946UrSAA== - unbox-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" @@ -9688,14 +9233,6 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" -unbzip2-stream@1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7" - integrity sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg== - dependencies: - buffer "^5.2.1" - through "^2.3.8" - undici@^5.27.2: version "5.27.2" resolved "https://registry.yarnpkg.com/undici/-/undici-5.27.2.tgz#a270c563aea5b46cc0df2550523638c95c5d4411" @@ -9784,11 +9321,6 @@ uuid@^3.3.2, uuid@^3.3.3: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== -uuid@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5" - integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== - v8-to-istanbul@^9.0.1: version "9.0.1" resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz#b6f994b0b5d4ef255e17a0d17dc444a9f5132fa4" @@ -9851,54 +9383,6 @@ wcwidth@^1.0.1: dependencies: defaults "^1.0.3" -webdriver@7.31.1: - version "7.31.1" - resolved "https://registry.yarnpkg.com/webdriver/-/webdriver-7.31.1.tgz#2dafdef92b59dc6456023ac92a9707d7331ecdb6" - integrity sha512-nCdJLxRnYvOMFqTEX7sqQtF/hV/Jgov0Y6ICeOm1DMTlZSRRDaUsBMlEAPkEwif9uBJYdM0znv8qzfX358AGqQ== - dependencies: - "@types/node" "^18.0.0" - "@wdio/config" "7.31.1" - "@wdio/logger" "7.26.0" - "@wdio/protocols" "7.27.0" - "@wdio/types" "7.30.2" - "@wdio/utils" "7.30.2" - got "^11.0.2" - ky "0.30.0" - lodash.merge "^4.6.1" - -webdriverio@^7.32.0: - version "7.32.0" - resolved "https://registry.yarnpkg.com/webdriverio/-/webdriverio-7.32.0.tgz#e40e9c1596c36ad0d7e06e50c5d5a9efa7782798" - integrity sha512-bW0JLNx+WbZO/6K52AfJwE9vh+2JAfdgov9JIt2ySrXkRdvFb7TO7dvEE44GP8GP2ppVfzOcr4XzXAxlGyX6ig== - dependencies: - "@types/aria-query" "^5.0.0" - "@types/node" "^18.0.0" - "@wdio/config" "7.31.1" - "@wdio/logger" "7.26.0" - "@wdio/protocols" "7.27.0" - "@wdio/repl" "7.30.2" - "@wdio/types" "7.30.2" - "@wdio/utils" "7.30.2" - archiver "^5.0.0" - aria-query "^5.2.1" - css-shorthand-properties "^1.1.1" - css-value "^0.0.1" - devtools "7.32.0" - devtools-protocol "^0.0.1161029" - fs-extra "^11.1.1" - grapheme-splitter "^1.0.2" - lodash.clonedeep "^4.5.0" - lodash.isobject "^3.0.2" - lodash.isplainobject "^4.0.6" - lodash.zip "^4.2.0" - minimatch "^6.0.4" - puppeteer-core "^13.1.3" - query-selector-shadow-dom "^1.0.0" - resq "^1.9.1" - rgb2hex "0.2.5" - serialize-error "^8.0.0" - webdriver "7.31.1" - webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" @@ -9947,7 +9431,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@^2.0.1, which@^2.0.2: +which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== @@ -10010,16 +9494,6 @@ write-file-atomic@^4.0.2: imurmurhash "^0.1.4" signal-exit "^3.0.7" -ws@8.2.3: - version "8.2.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.2.3.tgz#63a56456db1b04367d0b721a0b80cae6d8becbba" - integrity sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA== - -ws@8.5.0: - version "8.5.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f" - integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== - ws@>=7.4.6: version "8.13.0" resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" @@ -10143,24 +9617,7 @@ yargs@^17.3.1, yargs@^17.6.2: y18n "^5.0.5" yargs-parser "^21.1.1" -yauzl@^2.10.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" - integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== - dependencies: - buffer-crc32 "~0.2.3" - fd-slicer "~1.1.0" - yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== - -zip-stream@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-4.1.0.tgz#51dd326571544e36aa3f756430b313576dc8fc79" - integrity sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A== - dependencies: - archiver-utils "^2.1.0" - compress-commons "^4.1.0" - readable-stream "^3.6.0"